From e6eeec66794e5ac3049708e6447d23f00ca33b49 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Mon, 25 Jan 2021 21:46:59 +0100 Subject: [PATCH 01/18] Make tinytga build with e-g master (#5) --- Cargo.toml | 4 ++-- src/dynamic_tga.rs | 10 +++++++++- src/lib.rs | 9 ++++++++- src/pixels.rs | 2 +- src/raw_pixels.rs | 2 +- src/raw_tga.rs | 2 +- tests/embedded_graphics.rs | 8 ++++---- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 879cd6e..c3708fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,9 +20,9 @@ exclude = [ circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } [dependencies] -embedded-graphics-core = "0.1.1" +# TODO: remove git dependency when next e-g version is released +embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } nom = { version = "6.0.1", default-features = false } [dev-dependencies] -embedded-graphics = "0.7.0-alpha.2" paste = "1.0" diff --git a/src/dynamic_tga.rs b/src/dynamic_tga.rs index 88f34f3..0ec7d1b 100644 --- a/src/dynamic_tga.rs +++ b/src/dynamic_tga.rs @@ -1,7 +1,8 @@ use core::marker::PhantomData; -use embedded_graphics_core::{ +use embedded_graphics::{ pixelcolor::{Gray8, Rgb555, Rgb888}, prelude::*, + primitives::Rectangle, }; use crate::{parse_error::ParseError, raw_tga::RawTga, Bpp}; @@ -82,6 +83,13 @@ where ColorType::Rgb888 => self.raw.draw(&mut target.color_converted::()), } } + + fn draw_sub_image(&self, target: &mut D, area: &Rectangle) -> Result<(), D::Error> + where + D: DrawTarget, + { + self.draw(&mut target.translated(-area.top_left).clipped(area)) + } } #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] diff --git a/src/lib.rs b/src/lib.rs index 35656b0..ec591d9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -158,7 +158,7 @@ mod raw_pixels; mod raw_tga; use core::marker::PhantomData; -use embedded_graphics_core::prelude::*; +use embedded_graphics::{prelude::*, primitives::Rectangle}; pub use crate::{ color_map::ColorMap, @@ -250,4 +250,11 @@ where { self.raw.draw(target) } + + fn draw_sub_image(&self, target: &mut D, area: &Rectangle) -> Result<(), D::Error> + where + D: DrawTarget, + { + self.draw(&mut target.translated(-area.top_left).clipped(area)) + } } diff --git a/src/pixels.rs b/src/pixels.rs index 2ecad6a..1a9a132 100644 --- a/src/pixels.rs +++ b/src/pixels.rs @@ -1,5 +1,5 @@ use core::marker::PhantomData; -use embedded_graphics_core::prelude::*; +use embedded_graphics::prelude::*; use crate::RawPixels; diff --git a/src/raw_pixels.rs b/src/raw_pixels.rs index 9bacd93..9b34310 100644 --- a/src/raw_pixels.rs +++ b/src/raw_pixels.rs @@ -1,5 +1,5 @@ use crate::{packet::Packet, raw_tga::RawTga}; -use embedded_graphics_core::prelude::*; +use embedded_graphics::prelude::*; /// Iterator over individual TGA pixels. /// diff --git a/src/raw_tga.rs b/src/raw_tga.rs index e64b169..60b18e2 100644 --- a/src/raw_tga.rs +++ b/src/raw_tga.rs @@ -1,4 +1,4 @@ -use embedded_graphics_core::{prelude::*, primitives::Rectangle}; +use embedded_graphics::{prelude::*, primitives::Rectangle}; use nom::{bytes::complete::take, IResult}; use crate::{ diff --git a/tests/embedded_graphics.rs b/tests/embedded_graphics.rs index abdb6ce..9b8de7f 100644 --- a/tests/embedded_graphics.rs +++ b/tests/embedded_graphics.rs @@ -38,7 +38,7 @@ fn chessboard_compressed() { let mut display = MockDisplay::new(); image.draw(&mut display).unwrap(); - assert_eq!(display, MockDisplay::from_pattern(CHESSBOARD_PATTERN)); + display.assert_pattern(CHESSBOARD_PATTERN); } #[test] @@ -49,7 +49,7 @@ fn chessboard_uncompressed() { let mut display = MockDisplay::new(); image.draw(&mut display).unwrap(); - assert_eq!(display, MockDisplay::from_pattern(CHESSBOARD_PATTERN)); + display.assert_pattern(CHESSBOARD_PATTERN); } fn test_tga(data: &[u8], pattern: &[&str]) @@ -62,7 +62,7 @@ where let mut display = MockDisplay::new(); image.draw(&mut display).unwrap(); - assert_eq!(display, MockDisplay::from_pattern(pattern)); + display.assert_pattern(pattern); } fn test_dynamic_tga(data: &[u8], pattern: &[&str]) @@ -77,7 +77,7 @@ where let expected: MockDisplay = MockDisplay::::from_pattern(pattern).map(|c| c.into()); - assert_eq!(display, expected); + display.assert_eq(&expected); } macro_rules! test_tga { From 9e26fe986f0eae436f4f7fafd4e9c55ff1c09d00 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Thu, 4 Feb 2021 16:01:56 +0100 Subject: [PATCH 02/18] Update embedded-graphics dependency (#6) --- Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c3708fa..2eded0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,8 +20,7 @@ exclude = [ circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } [dependencies] -# TODO: remove git dependency when next e-g version is released -embedded-graphics = { git = "https://github.com/embedded-graphics/embedded-graphics.git" } +embedded-graphics = "0.7.0-alpha.3" nom = { version = "6.0.1", default-features = false } [dev-dependencies] From 708768980b5f6b6d3bb4cef77dfba0d0d6f40235 Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:17:50 +0100 Subject: [PATCH 03/18] Upgrade to e-g 0.7.0-beta.2 (#7) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2eded0b..4e1ecac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ exclude = [ circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } [dependencies] -embedded-graphics = "0.7.0-alpha.3" +embedded-graphics = "0.7.0-beta.2" nom = { version = "6.0.1", default-features = false } [dev-dependencies] From 72abc82df7403573068d6d93aa21edba7cf3564f Mon Sep 17 00:00:00 2001 From: James Waples Date: Mon, 24 May 2021 17:24:54 +0100 Subject: [PATCH 04/18] (cargo-release) version 0.4.0-beta.1 --- CHANGELOG.md | 5 ++++- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 033786d..ad979e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] - ReleaseDate +## [0.4.0-beta.1] - 2021-05-24 + ## [0.4.0-alpha.1] - 2020-12-27 ### Changed @@ -101,7 +103,8 @@ - [#218](https://github.com/embedded-graphics/embedded-graphics/pull/218) Test README examples in CI and update them to work with latest crate versions. -[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-alpha.1...HEAD +[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...HEAD +[0.4.0-beta.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-alpha.1...v0.4.0-beta.1 [0.4.0-alpha.1]: https://github.com/embedded-graphics/tinytga/compare/after-split...v0.4.0-alpha.1 [0.4.0-alpha.1 - `embedded-graphics` repository]: https://github.com/embedded-graphics/embedded-graphics/compare/tinytga-v0.3.2...before-split diff --git a/Cargo.toml b/Cargo.toml index 4e1ecac..fd744bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tinytga" -version = "0.4.0-alpha.1" +version = "0.4.0-beta.1" description = "No-std, low memory footprint TGA image loader" authors = ["James Waples "] edition = "2018" From 8f0fdb9650c2eefee4668284157c9dbc3c16c085 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Sat, 5 Jun 2021 22:27:17 +0200 Subject: [PATCH 05/18] Update to e-g 0.7.0 (#8) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index fd744bb..37b7db7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ exclude = [ circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } [dependencies] -embedded-graphics = "0.7.0-beta.2" +embedded-graphics = "0.7.0" nom = { version = "6.0.1", default-features = false } [dev-dependencies] From 4e0d115aab525a68c66d2ab87f4f3a31a018cd5f Mon Sep 17 00:00:00 2001 From: James Waples Date: Sun, 6 Jun 2021 11:44:29 +0100 Subject: [PATCH 06/18] (cargo-release) version 0.4.0 --- CHANGELOG.md | 5 ++++- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad979e9..2bf3dfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] - ReleaseDate +## [0.4.0] - 2021-06-06 + ## [0.4.0-beta.1] - 2021-05-24 ## [0.4.0-alpha.1] - 2020-12-27 @@ -103,7 +105,8 @@ - [#218](https://github.com/embedded-graphics/embedded-graphics/pull/218) Test README examples in CI and update them to work with latest crate versions. -[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...HEAD +[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0...HEAD +[0.4.0]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...v0.4.0 [0.4.0-beta.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-alpha.1...v0.4.0-beta.1 [0.4.0-alpha.1]: https://github.com/embedded-graphics/tinytga/compare/after-split...v0.4.0-alpha.1 diff --git a/Cargo.toml b/Cargo.toml index 37b7db7..2fe3727 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tinytga" -version = "0.4.0-beta.1" +version = "0.4.0" description = "No-std, low memory footprint TGA image loader" authors = ["James Waples "] edition = "2018" From 685cbc384f8554a84894495f905d6c72ee8cb46f Mon Sep 17 00:00:00 2001 From: James Waples Date: Tue, 15 Jun 2021 17:13:27 +0100 Subject: [PATCH 07/18] Add Ralf Fuest as a crate owner (#9) --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2fe3727..3a00c88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "tinytga" version = "0.4.0" description = "No-std, low memory footprint TGA image loader" -authors = ["James Waples "] +authors = ["James Waples ", "Ralf Fuest "] edition = "2018" repository = "https://github.com/embedded-graphics/tinytga" documentation = "https://docs.rs/tinytga" From 4ea3492d02202369a5acc4efce7358d958db33e8 Mon Sep 17 00:00:00 2001 From: James Waples Date: Tue, 15 Jun 2021 18:14:11 +0100 Subject: [PATCH 08/18] Upgrade and release docs (#10) * Bump e-g minimum version to 0.7.1 * Add release docs * Changelog entry --- CHANGELOG.md | 4 +++- Cargo.toml | 2 +- doc/releasing.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 doc/releasing.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bf3dfe..bdbca30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] - ReleaseDate +- [#10](https://github.com/embedded-graphics/tinybmp/pull/10) Bump embedded-graphics minimum version from 0.7.0 to 0.7.1 + ## [0.4.0] - 2021-06-06 ## [0.4.0-beta.1] - 2021-05-24 @@ -105,10 +107,10 @@ - [#218](https://github.com/embedded-graphics/embedded-graphics/pull/218) Test README examples in CI and update them to work with latest crate versions. + [unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0...HEAD [0.4.0]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...v0.4.0 [0.4.0-beta.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-alpha.1...v0.4.0-beta.1 - [0.4.0-alpha.1]: https://github.com/embedded-graphics/tinytga/compare/after-split...v0.4.0-alpha.1 [0.4.0-alpha.1 - `embedded-graphics` repository]: https://github.com/embedded-graphics/embedded-graphics/compare/tinytga-v0.3.2...before-split [0.3.2]: https://github.com/embedded-graphics/embedded-graphics/compare/tinytga-v0.3.0...tinytga-v0.3.2 diff --git a/Cargo.toml b/Cargo.toml index 3a00c88..a28afa0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ exclude = [ circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } [dependencies] -embedded-graphics = "0.7.0" +embedded-graphics = "0.7.1" nom = { version = "6.0.1", default-features = false } [dev-dependencies] diff --git a/doc/releasing.md b/doc/releasing.md new file mode 100644 index 0000000..e500cd9 --- /dev/null +++ b/doc/releasing.md @@ -0,0 +1,62 @@ +# Release process + +Target audience: crate maintainers who wish to release `tinytga`. + +> Please take a cautious approach to this. If any step doesn't feel right or doesn't succeed smoothly, stop and rectify any issues before continuing. + +## On GitHub + +- Check that all desired PRs are merged and all desired issues are closed/resolved. +- Check that the latest master build passed in CircleCI. + +## On your local machine + +- `cd` to the repository root +- Check that `cargo-release` is installed and available in `$PATH`: + + ```bash + cargo release --version + ``` + +- Ensure you have the latest changes with `git switch master` and `git pull --rebase` +- Check that your local repository is clean with no uncommitted changes and no unpushed commits. Ideally, use `git reset --hard origin/master` to ensure your local state is up to date with `origin/master`. You may need to change `origin` to the name of the remote pointing to . +- Before a **stable** release: + - Search the repository for any `TODO` or `FIXME` comments. If any need resolving before release, stop this process and fix them with one or more PRs. +- Check that the crate version in `Cargo.toml` matches the latest released versions on . +- Run `just build` to ensure the build passes locally. + - If the build fails for any reason, stop the release process and fix any issues by creating PRs. The upstream master branch must remain the source of truth. Restart this checklist once `just build` passes. +- Double check the release level (major, minor, patch) +- Release the crate: + + ```bash + cargo release + ``` + + Where `` is `major`, `minor`, `patch`, or a specific SemVer version number. + +## Post release + +- Check that the release command pushed a Git tag when the crate was published, something like `v0.4.0-beta.1` or `v0.3.1`. +- For the new tag, go to its page at e.g. , click Edit tag and draft a release: + + - Copy and paste the tag into the `Release title` field. + - Copy and paste the latest released section out of the crate's `CHANGELOG.md` file into the `Describe this release` field. Do not include the version header, e.g.: + + ```markdown + ### Added + + - [#111](https://github.com/embedded-graphics/tinytga/pull/111) Added something + + ### Removed + + - [#222](https://github.com/embedded-graphics/tinytga/pull/222) Removed a thing + ``` + + - For `alpha` or `beta` releases, check the `This is a pre-release` checkbox. + - Hit Publish release + +- Check that the release is displayed on the [repository homepage](https://github.com/embedded-graphics/tinytga). +- Post a link to the released tag (e.g. ) to the embedded-graphics Matrix room at +- If you are @jamwaffles, post a Tweet tagging @rustembedded with a happy announcement message. + +- Check the other repositories in the [embedded-graphics organization](https://github.com/embedded-graphics) for dependencies on `tinytga`. The version should be updated to the latest releases made whilst following this guide. From 011851eafd3a9dc17e2ba4ed759390567f319d0b Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Wed, 16 Jun 2021 17:18:26 +0200 Subject: [PATCH 09/18] Fix doc links (#11) * Use current docker image * Fix links in docs --- .circleci/config.yml | 24 +++++++----------------- src/raw_tga.rs | 4 ++-- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9864659..2b55194 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,19 +1,19 @@ # Check that everything (tests, benches, etc) builds in std environments precheck_steps: &precheck_steps - docker: - - image: jamwaffles/circleci-embedded-graphics:1.40.0-cimg + docker: &docker + - image: jamwaffles/circleci-embedded-graphics:1.40.0-3 auth: username: jamwaffles password: $DOCKERHUB_PASSWORD steps: - checkout - - restore_cache: + - restore_cache: &restore_cache key: v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} - run: rustup default ${RUST_VERSION:-stable} - run: rustup component add rustfmt - run: cargo update - run: just build - - save_cache: + - save_cache: &save_cache key: v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} paths: - ./target @@ -21,24 +21,14 @@ precheck_steps: &precheck_steps # Build crates for embedded target target_steps: &target_steps - docker: - - image: jamwaffles/circleci-embedded-graphics:1.40.0-cimg - auth: - username: jamwaffles - password: $DOCKERHUB_PASSWORD + docker: *docker steps: - checkout - - restore_cache: - keys: - - v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} + - restore_cache: *restore_cache - run: just install-targets - run: cargo update - run: just build-targets --release - - save_cache: - key: v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} - paths: - - ./target - - /home/circleci/.cargo/registry + - save_cache: *save_cache version: 2 jobs: diff --git a/src/raw_tga.rs b/src/raw_tga.rs index 60b18e2..5aca8ca 100644 --- a/src/raw_tga.rs +++ b/src/raw_tga.rs @@ -14,11 +14,11 @@ use crate::{ /// /// `RawTga` can be used to access lower level information about a TGA file and to access the /// raw pixel data. It can be created directly by using the [`from_slice`] constructor or accessed -/// by calling [`raw`] method of a [`Tga`] object. +/// by calling [`as_raw`] method of a [`Tga`] object. /// /// [`from_slice`]: #method.from_slice /// [`Tga`]: struct.Tga.html -/// [`raw`]: struct.Tga.html#method.raw +/// [`as_raw`]: struct.Tga.html#method.as_raw #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] pub struct RawTga<'a> { /// Image data From 72a1c4c27016ce7ef195fcb90455f7a19bd03f65 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Wed, 16 Jun 2021 18:15:38 +0200 Subject: [PATCH 10/18] (cargo-release) version 0.4.1 --- CHANGELOG.md | 5 ++++- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdbca30..3d6e22f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] - ReleaseDate +## [0.4.1] - 2021-06-16 + - [#10](https://github.com/embedded-graphics/tinybmp/pull/10) Bump embedded-graphics minimum version from 0.7.0 to 0.7.1 ## [0.4.0] - 2021-06-06 @@ -107,8 +109,9 @@ - [#218](https://github.com/embedded-graphics/embedded-graphics/pull/218) Test README examples in CI and update them to work with latest crate versions. +[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.1...HEAD -[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0...HEAD +[0.4.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...v0.4.0 [0.4.0-beta.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-alpha.1...v0.4.0-beta.1 [0.4.0-alpha.1]: https://github.com/embedded-graphics/tinytga/compare/after-split...v0.4.0-alpha.1 diff --git a/Cargo.toml b/Cargo.toml index a28afa0..193b539 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tinytga" -version = "0.4.0" +version = "0.4.1" description = "No-std, low memory footprint TGA image loader" authors = ["James Waples ", "Ralf Fuest "] edition = "2018" From d1cded1666b3e182022afdcd33b9b5c4688671b2 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Mon, 21 Jun 2021 22:13:00 +0200 Subject: [PATCH 11/18] Add missing header to changelog (#13) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d6e22f..955d52c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ## [0.4.1] - 2021-06-16 +### Changed + - [#10](https://github.com/embedded-graphics/tinybmp/pull/10) Bump embedded-graphics minimum version from 0.7.0 to 0.7.1 ## [0.4.0] - 2021-06-06 From 33f8586adf37c7a0894188f88a3ea9a1d0b77303 Mon Sep 17 00:00:00 2001 From: James Waples Date: Tue, 22 Jun 2021 15:38:33 +0100 Subject: [PATCH 12/18] Update release docs with upstream notes (#14) As suggested in embedded-graphics/simulator#35. --- doc/releasing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/releasing.md b/doc/releasing.md index e500cd9..2e02fcf 100644 --- a/doc/releasing.md +++ b/doc/releasing.md @@ -29,10 +29,10 @@ Target audience: crate maintainers who wish to release `tinytga`. - Release the crate: ```bash - cargo release + cargo release --push-remote ``` - Where `` is `major`, `minor`, `patch`, or a specific SemVer version number. + Where `` is `major`, `minor`, `patch`, or a specific SemVer version number, and where `` is the git remote for the upstream repository `embedded-graphics/tinytga`. ## Post release From a64a00ebec41f5da36ddc879dc9e3f42277a17bb Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Sat, 24 Sep 2022 20:40:17 +0200 Subject: [PATCH 13/18] Remove DynamicTga (#16) * Add benches * Only use one lifetime for Pixels and RawPixels iters * Merge DynamicTga into Tga * Fix pixels iterator * Add display example * Add MSRV * Remove Packet struct * Fix truncated README * Don't run tests in release mode * Split ImageType into two enums * Use correct lifetimes for RawTga getters * Add support for top right and bottom right origins * Update changelog * Update nom and use edition 2021 * Fix clippy warnings * Remove added example from changelog --- .circleci/config.yml | 3 +- CHANGELOG.md | 16 + Cargo.toml | 11 +- README.md | 39 +- benches/draw.rs | 93 +++++ examples/display.rs | 75 ++++ justfile | 4 +- src/color_map.rs | 16 +- src/dynamic_tga.rs | 100 ----- src/footer.rs | 2 +- src/header.rs | 101 ++--- src/lib.rs | 290 +++++++++---- src/packet.rs | 91 ---- src/parse_error.rs | 6 +- src/pixels.rs | 53 ++- src/raw_iter.rs | 275 +++++++++++++ src/raw_pixels.rs | 127 ------ src/raw_tga.rs | 55 ++- tests/cbw8.rs | 5 +- tests/chequerboard-uncompressed-topleft.rs | 5 +- tests/chessboard_4px_raw.rs | 5 +- tests/chessboard_4px_rle.rs | 5 +- tests/chessboard_rle.rs | 5 +- tests/chessboard_uncompressed.rs | 5 +- tests/coordinates.rs | 5 +- tests/embedded_graphics.rs | 35 +- tests/errors.rs | 36 +- tests/logo.rs | 456 +++++++++++++++++++++ tests/logo_gray8.raw | 1 + tests/logo_rgb555.raw | Bin 0 -> 153600 bytes tests/logo_rgb888.raw | 1 + tests/logo_type10_16bpp_bl.tga | Bin 0 -> 16431 bytes tests/logo_type10_16bpp_tl.tga | Bin 0 -> 16431 bytes tests/logo_type10_24bpp_bl.tga | Bin 0 -> 22328 bytes tests/logo_type10_24bpp_tl.tga | Bin 0 -> 22328 bytes tests/logo_type11_bl.tga | Bin 0 -> 11028 bytes tests/logo_type11_tl.tga | Bin 0 -> 11028 bytes tests/logo_type1_16bpp_bl.tga | Bin 0 -> 77032 bytes tests/logo_type1_16bpp_tl.tga | Bin 0 -> 77032 bytes tests/logo_type1_24bpp_bl.tga | Bin 0 -> 77586 bytes tests/logo_type1_24bpp_tl.tga | Bin 0 -> 77586 bytes tests/logo_type2_16bpp_bl.tga | Bin 0 -> 153618 bytes tests/logo_type2_16bpp_tl.tga | Bin 0 -> 153618 bytes tests/logo_type2_24bpp_bl.tga | Bin 0 -> 230418 bytes tests/logo_type2_24bpp_br.tga | Bin 0 -> 230418 bytes tests/logo_type2_24bpp_tl.tga | Bin 0 -> 230418 bytes tests/logo_type2_24bpp_tr.tga | Bin 0 -> 230418 bytes tests/logo_type3_bl.tga | Bin 0 -> 76818 bytes tests/logo_type3_tl.tga | Bin 0 -> 76818 bytes tests/logo_type9_16bpp_bl.tga | Bin 0 -> 10599 bytes tests/logo_type9_16bpp_tl.tga | Bin 0 -> 10599 bytes tests/logo_type9_24bpp_bl.tga | Bin 0 -> 11096 bytes tests/logo_type9_24bpp_tl.tga | Bin 0 -> 11096 bytes tests/types.rs | 55 ++- tests/ubw8.rs | 5 +- 55 files changed, 1371 insertions(+), 610 deletions(-) create mode 100644 benches/draw.rs create mode 100644 examples/display.rs delete mode 100644 src/dynamic_tga.rs delete mode 100644 src/packet.rs create mode 100644 src/raw_iter.rs delete mode 100644 src/raw_pixels.rs create mode 100644 tests/logo.rs create mode 100644 tests/logo_gray8.raw create mode 100644 tests/logo_rgb555.raw create mode 100644 tests/logo_rgb888.raw create mode 100644 tests/logo_type10_16bpp_bl.tga create mode 100644 tests/logo_type10_16bpp_tl.tga create mode 100644 tests/logo_type10_24bpp_bl.tga create mode 100644 tests/logo_type10_24bpp_tl.tga create mode 100644 tests/logo_type11_bl.tga create mode 100644 tests/logo_type11_tl.tga create mode 100644 tests/logo_type1_16bpp_bl.tga create mode 100644 tests/logo_type1_16bpp_tl.tga create mode 100644 tests/logo_type1_24bpp_bl.tga create mode 100644 tests/logo_type1_24bpp_tl.tga create mode 100644 tests/logo_type2_16bpp_bl.tga create mode 100644 tests/logo_type2_16bpp_tl.tga create mode 100644 tests/logo_type2_24bpp_bl.tga create mode 100644 tests/logo_type2_24bpp_br.tga create mode 100644 tests/logo_type2_24bpp_tl.tga create mode 100644 tests/logo_type2_24bpp_tr.tga create mode 100644 tests/logo_type3_bl.tga create mode 100644 tests/logo_type3_tl.tga create mode 100644 tests/logo_type9_16bpp_bl.tga create mode 100644 tests/logo_type9_16bpp_tl.tga create mode 100644 tests/logo_type9_24bpp_bl.tga create mode 100644 tests/logo_type9_24bpp_tl.tga diff --git a/.circleci/config.yml b/.circleci/config.yml index 2b55194..44288e4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ # Check that everything (tests, benches, etc) builds in std environments precheck_steps: &precheck_steps docker: &docker - - image: jamwaffles/circleci-embedded-graphics:1.40.0-3 + - image: jamwaffles/circleci-embedded-graphics:1.61.0-0 auth: username: jamwaffles password: $DOCKERHUB_PASSWORD @@ -21,6 +21,7 @@ precheck_steps: &precheck_steps # Build crates for embedded target target_steps: &target_steps + resource_class: large docker: *docker steps: - checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 955d52c..100bb9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,22 @@ ## [Unreleased] - ReleaseDate +### Added + +- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Added support for bottom right and top right image origins. + +### Changed + +- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Use 1.61 as MSRV. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Replaced `ImageType` enum with `DataType` and `Compression`. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Color types used with `Tga` are now required to implement `From + From + From`. +- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Improved drawing performance for bottom left origin images by using `fill_contiguous`. +- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Use correct lifetimes for `RawTga::image_id`, `RawTga::developer_dictionary` and `RawTga::extension_area`. + +### Removed + +- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Removed `DynamicTga`, use `Tga` instead. + ## [0.4.1] - 2021-06-16 ### Changed diff --git a/Cargo.toml b/Cargo.toml index 193b539..a0d9dfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ name = "tinytga" version = "0.4.1" description = "No-std, low memory footprint TGA image loader" authors = ["James Waples ", "Ralf Fuest "] -edition = "2018" +edition = "2021" repository = "https://github.com/embedded-graphics/tinytga" documentation = "https://docs.rs/tinytga" categories = ["embedded", "no-std", "multimedia::images"] @@ -19,9 +19,16 @@ exclude = [ [badges] circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } +[[bench]] +name = "draw" +harness = false + [dependencies] embedded-graphics = "0.7.1" -nom = { version = "6.0.1", default-features = false } +nom = { version = "7.1.1", default-features = false } [dev-dependencies] paste = "1.0" +criterion = "0.3.5" +clap = { version = "3.2.22", features = ["derive"] } +embedded-graphics-simulator = "0.4.0" diff --git a/README.md b/README.md index 1c58ff5..7b64695 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,6 @@ the TGA file. But it is also possible to directly access the raw pixel represent This example demonstrates how a TGA image can be drawn to a [embedded-graphics] draw target. -The code uses the `Tga` struct and only works if the color format inside the TGA file is known -at compile time. While this makes the code less flexible it offers the best performance by -making sure that no unnecessary color conversions are used. - ```rust use embedded_graphics::{image::Image, pixelcolor::Rgb888, prelude::*}; use tinytga::Tga; @@ -38,26 +34,6 @@ let image = Image::new(&tga, Point::zero()); image.draw(&mut display)?; ``` -### Using `DynamicTga` to draw an image - -The previous example had the limitation that the color format needed to be known at compile -time. In some use cases this can be a problem, for example if user supplied images should -be displayed. To handle these cases `DynamicTga` can be used, which performs color conversion -if necessary. - -```rust -use embedded_graphics::{image::Image, pixelcolor::Rgb888, prelude::*}; -use tinytga::DynamicTga; - -// Include an image from a local path as bytes -let data = include_bytes!("../tests/chessboard_4px_rle.tga"); - -let tga = DynamicTga::from_slice(data).unwrap(); - -let image = Image::new(&tga, Point::zero()); - -image.draw(&mut display)?; -``` ### Accessing pixels using an embedded-graphics color type If [embedded-graphics] is not used to draw the TGA image, the color types provided by @@ -66,7 +42,7 @@ If [embedded-graphics] is not used to draw the TGA image, the color types provid ```rust use embedded_graphics::{prelude::*, pixelcolor::Rgb888}; -use tinytga::{Bpp, ImageOrigin, ImageType, RawPixel, Tga, TgaHeader}; +use tinytga::Tga; // Include an image from a local path as bytes let data = include_bytes!("../tests/chessboard_4px_rle.tga"); @@ -90,7 +66,7 @@ accessed with the `pixels` method on ```rust use embedded_graphics::{prelude::*, pixelcolor::Rgb888}; -use tinytga::{Bpp, ImageOrigin, ImageType, RawPixel, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawPixel, RawTga, TgaHeader}; // Include an image from a local path as bytes. let data = include_bytes!("../tests/chessboard_4px_rle.tga"); @@ -104,7 +80,8 @@ assert_eq!( TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, color_map_start: 0, color_map_len: 0, color_map_depth: None, @@ -124,13 +101,15 @@ let pixels: Vec<_> = img.pixels().collect(); ## Embedded-graphics drawing performance -`Tga` should by used instead of `DynamicTga` when possible to reduce the risk of -accidentally adding unnecessary color conversions. - `tinytga` uses different code paths to draw images with different `ImageOrigin`s. The performance difference between the origins will depend on the display driver, but using images with the origin at the top left corner will generally result in the best performance. +## Minimum supported Rust version + +The minimum supported Rust version for tinytga is `1.61` or greater. +Ensure you have the correct version of Rust installed, preferably through . + [embedded-graphics]: https://docs.rs/embedded-graphics ## License diff --git a/benches/draw.rs b/benches/draw.rs new file mode 100644 index 0000000..f2055ef --- /dev/null +++ b/benches/draw.rs @@ -0,0 +1,93 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use embedded_graphics::{ + image::Image, + pixelcolor::{Gray8, Rgb555, Rgb888}, + prelude::*, +}; +use tinytga::Tga; + +// TODO: use e-g framebuffer when it's added +struct Framebuffer { + pixels: [[C; 240]; 320], +} + +impl> Framebuffer { + pub fn new() -> Self { + let color = C::from(Rgb888::BLACK); + + Self { + pixels: [[color; 240]; 320], + } + } +} + +impl DrawTarget for Framebuffer { + type Color = C; + type Error = std::convert::Infallible; + + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for Pixel(p, c) in pixels { + self.pixels[p.y as usize][p.x as usize] = c; + } + + Ok(()) + } +} + +impl OriginDimensions for Framebuffer { + fn size(&self) -> embedded_graphics::prelude::Size { + Size::new(240, 320) + } +} + +macro_rules! bench { + ($c:expr, $color_type:ty, $file:expr) => { + $c.bench_function(concat!(stringify!($color_type), " ", $file), |b| { + let mut fb = Framebuffer::<$color_type>::new(); + b.iter(|| { + let bmp = Tga::<$color_type>::from_slice(include_bytes!(concat!( + "../tests/", + $file, + ".tga" + ))) + .unwrap(); + Image::new(&bmp, Point::zero()).draw(&mut fb).unwrap(); + }) + }); + }; + + ($c:expr, $color_type:ty) => { + bench!($c, $color_type, "logo_type1_16bpp_bl"); + bench!($c, $color_type, "logo_type1_16bpp_tl"); + bench!($c, $color_type, "logo_type1_24bpp_bl"); + bench!($c, $color_type, "logo_type1_24bpp_tl"); + bench!($c, $color_type, "logo_type2_16bpp_bl"); + bench!($c, $color_type, "logo_type2_16bpp_tl"); + bench!($c, $color_type, "logo_type2_24bpp_bl"); + bench!($c, $color_type, "logo_type2_24bpp_tl"); + bench!($c, $color_type, "logo_type3_bl"); + bench!($c, $color_type, "logo_type3_tl"); + bench!($c, $color_type, "logo_type9_16bpp_bl"); + bench!($c, $color_type, "logo_type9_16bpp_tl"); + bench!($c, $color_type, "logo_type9_24bpp_bl"); + bench!($c, $color_type, "logo_type9_24bpp_tl"); + bench!($c, $color_type, "logo_type10_16bpp_bl"); + bench!($c, $color_type, "logo_type10_16bpp_tl"); + bench!($c, $color_type, "logo_type10_24bpp_bl"); + bench!($c, $color_type, "logo_type10_24bpp_tl"); + bench!($c, $color_type, "logo_type11_bl"); + bench!($c, $color_type, "logo_type11_tl"); + }; +} + +fn draw_benchmarks(c: &mut Criterion) { + bench!(c, Rgb888); + bench!(c, Rgb555); + bench!(c, Gray8); +} + +criterion_group!(benches, draw_benchmarks); +criterion_main!(benches); diff --git a/examples/display.rs b/examples/display.rs new file mode 100644 index 0000000..3acb5fd --- /dev/null +++ b/examples/display.rs @@ -0,0 +1,75 @@ +//! This example displays TGA images using the embedded-graphics simulator. +//! +//! Basic usage: `cargo run --example display -- TGA_FILE` +//! +//! More usage and arguments can be listed by running `cargo run --example display -- --help` + +use clap::{ArgEnum, Parser}; +use embedded_graphics::{ + image::Image, + pixelcolor::{BinaryColor, Gray8, Rgb555, Rgb565, Rgb888}, + prelude::*, +}; +use embedded_graphics_simulator::{ + OutputSettings, OutputSettingsBuilder, SimulatorDisplay, Window, +}; +use std::{fs, num::NonZeroU32, path::PathBuf}; +use tinytga::Tga; + +#[derive(Debug, Clone, Copy, ArgEnum)] +#[clap(rename_all = "PascalCase")] +enum ColorType { + Rgb555, + Rgb565, + Rgb888, + Gray8, + BinaryColor, +} + +#[derive(Parser)] +struct Args { + /// Pixel scale + #[clap(long, default_value = "1")] + scale: NonZeroU32, + + /// Display color type + #[clap(arg_enum, long, default_value = "Rgb888")] + color_type: ColorType, + + /// BMP file + bmp_file: PathBuf, +} + +fn display_tga(data: &[u8], settings: &OutputSettings) +where + C: PixelColor + From + From + From + Into, +{ + let bmp = Tga::::from_slice(&data).unwrap(); + + let mut display = SimulatorDisplay::::new(bmp.size()); + + Image::new(&bmp, Point::zero()) + .draw(&mut display.color_converted()) + .unwrap(); + + let mut window = Window::new("TGA viewer", &settings); + window.show_static(&display); +} + +fn main() { + let args = Args::parse(); + + let settings = OutputSettingsBuilder::new() + .scale(args.scale.into()) + .build(); + + let data = fs::read(&args.bmp_file).unwrap(); + + match args.color_type { + ColorType::Rgb555 => display_tga::(&data, &settings), + ColorType::Rgb565 => display_tga::(&data, &settings), + ColorType::Rgb888 => display_tga::(&data, &settings), + ColorType::Gray8 => display_tga::(&data, &settings), + ColorType::BinaryColor => display_tga::(&data, &settings), + } +} diff --git a/justfile b/justfile index 9f6beef..755dfc8 100644 --- a/justfile +++ b/justfile @@ -11,9 +11,9 @@ build: check-formatting test build-benches check-readme check-links build-benches: cargo bench --no-run -# Run cargo test in release mode +# Run cargo test test: - cargo test --release + cargo test # Check the formatting check-formatting: diff --git a/src/color_map.rs b/src/color_map.rs index cea1b2e..8b8a238 100644 --- a/src/color_map.rs +++ b/src/color_map.rs @@ -1,4 +1,7 @@ use crate::{parse_error::ParseError, Bpp, TgaHeader}; +use embedded_graphics::{ + iterator::raw::RawDataSlice, pixelcolor::raw::LittleEndian, prelude::PixelColor, +}; use nom::bytes::complete::take; /// Color map. @@ -48,7 +51,7 @@ impl<'a> ColorMap<'a> { /// Returns the raw color value for a color map entry. pub fn get_raw(&self, index: usize) -> Option { - //TODO: use start_index + //TODO: use start_index and add test if index >= usize::from(self.length) { return None; } @@ -72,4 +75,15 @@ impl<'a> ColorMap<'a> { ]), }) } + + pub(crate) fn get(&self, index: usize) -> Option + where + C: PixelColor + From, + RawDataSlice<'a, C::Raw, LittleEndian>: IntoIterator, + { + RawDataSlice::new(self.data) + .into_iter() + .nth(index) + .map(|r| C::from(r)) + } } diff --git a/src/dynamic_tga.rs b/src/dynamic_tga.rs deleted file mode 100644 index 0ec7d1b..0000000 --- a/src/dynamic_tga.rs +++ /dev/null @@ -1,100 +0,0 @@ -use core::marker::PhantomData; -use embedded_graphics::{ - pixelcolor::{Gray8, Rgb555, Rgb888}, - prelude::*, - primitives::Rectangle, -}; - -use crate::{parse_error::ParseError, raw_tga::RawTga, Bpp}; - -/// Dynamic TGA image. -/// -/// `DynamicTga` can be used to draw images that don't have a known color type -/// at compile time, for example user supplied images. If the color type is -/// known at compile time consider using the [`Tga`] for improved performance. -/// -/// `DynamicTga` works with all draw targets that use a color type that implements -/// `From` for `Gray8`, `Rgb555` and `Rgb888`. -/// -/// [`Tga`]: struct.Tga.html -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub struct DynamicTga<'a, C> { - raw: RawTga<'a>, - color_type: ColorType, - target_color_type: PhantomData, -} - -impl<'a, C> DynamicTga<'a, C> -where - C: PixelColor + From + From + From, -{ - /// Parses a TGA image from a byte slice. - pub fn from_slice(data: &'a [u8]) -> Result { - let raw = RawTga::from_slice(data)?; - - let color_type = match (raw.color_bpp(), raw.image_type().is_monochrome()) { - (Bpp::Bits8, true) => ColorType::Gray8, - (Bpp::Bits16, false) => ColorType::Rgb555, - (Bpp::Bits24, false) => ColorType::Rgb888, - _ => { - return Err(ParseError::UnsupportedDynamicTgaType( - raw.image_type(), - raw.color_bpp(), - )) - } - }; - - Ok(Self { - raw, - color_type, - target_color_type: PhantomData, - }) - } - - /// Returns a reference to the raw TGA image. - /// - /// The [`RawTga`] object can be used to access lower level details about the TGA file. - /// - /// [`RawTga`]: struct.RawTga.html - pub fn as_raw(&self) -> &RawTga<'a> { - &self.raw - } -} - -impl OriginDimensions for DynamicTga<'_, C> { - fn size(&self) -> Size { - self.raw.size() - } -} - -impl ImageDrawable for DynamicTga<'_, C> -where - C: PixelColor + From + From + From, -{ - type Color = C; - - fn draw(&self, target: &mut D) -> Result<(), D::Error> - where - D: DrawTarget, - { - match self.color_type { - ColorType::Gray8 => self.raw.draw(&mut target.color_converted::()), - ColorType::Rgb555 => self.raw.draw(&mut target.color_converted::()), - ColorType::Rgb888 => self.raw.draw(&mut target.color_converted::()), - } - } - - fn draw_sub_image(&self, target: &mut D, area: &Rectangle) -> Result<(), D::Error> - where - D: DrawTarget, - { - self.draw(&mut target.translated(-area.top_left).clipped(area)) - } -} - -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -enum ColorType { - Gray8, - Rgb555, - Rgb888, -} diff --git a/src/footer.rs b/src/footer.rs index e727de0..eb1b4d5 100644 --- a/src/footer.rs +++ b/src/footer.rs @@ -81,7 +81,7 @@ fn offset(input: &[u8]) -> IResult<&[u8], Option> { map(le_u32, |offset| NonZeroUsize::new(offset as usize))(input) } -fn parse_footer<'a>(input: &'a [u8]) -> IResult<&[u8], TgaFooter> { +fn parse_footer(input: &[u8]) -> IResult<&[u8], TgaFooter> { let footer_start = input .len() .checked_sub(TGA_FOOTER_LENGTH) diff --git a/src/header.rs b/src/header.rs index b186962..42da7d4 100644 --- a/src/header.rs +++ b/src/header.rs @@ -1,10 +1,11 @@ -use crate::parse_error::ParseError; use nom::{ combinator::{map, map_opt, map_res}, number::complete::{le_u16, le_u8}, IResult, }; +use crate::parse_error::ParseError; + /// Bits per pixel. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] #[non_exhaustive] @@ -59,60 +60,47 @@ impl Bpp { } } -/// Image type +/// Image data compression. #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub enum ImageType { - /// Image contains no pixel data - Empty = 0, - - /// Color mapped image - ColorMapped = 1, - - /// Truecolor image - Truecolor = 2, - - /// Monochrome (greyscale) image - Monochrome = 3, - - /// Run length encoded color mapped image - RleColorMapped = 9, - - /// Run length encoded RGB image - RleTruecolor = 10, +pub enum Compression { + /// Uncompressed image data. + Uncompressed, + /// Run-length encoded image data. + Rle, +} - /// Run length encoded monochrome (greyscale) image - RleMonochrome = 11, +/// Image data type. +#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub enum DataType { + /// No image data. + NoData, + /// Color mapped. + ColorMapped, + /// True color. + TrueColor, + /// Black and white or grayscale. + BlackAndWhite, } -impl ImageType { - fn parse(input: &[u8]) -> IResult<&[u8], Self> { - map_res(le_u8, |b| match b { - 0 => Ok(Self::Empty), - 1 => Ok(Self::ColorMapped), - 2 => Ok(Self::Truecolor), - 3 => Ok(Self::Monochrome), - 9 => Ok(Self::RleColorMapped), - 10 => Ok(Self::RleTruecolor), - 11 => Ok(Self::RleMonochrome), - other => Err(ParseError::UnsupportedImageType(other)), - })(input) +fn parse_image_type(image_type: u8) -> Result<(DataType, Compression), ParseError> { + if image_type & !0b1011 != 0 || image_type == 8 { + return Err(ParseError::UnsupportedImageType(image_type)); } - /// Returns `true` when the image is RLE encoded. - pub fn is_rle(self) -> bool { - match self { - ImageType::RleColorMapped | ImageType::RleTruecolor | ImageType::RleMonochrome => true, - _ => false, - } - } + let data_type = match image_type & 0x3 { + 1 => DataType::ColorMapped, + 2 => DataType::TrueColor, + 3 => DataType::BlackAndWhite, + _ => DataType::NoData, + }; - /// Returns `true` when the image is monochrome. - pub fn is_monochrome(self) -> bool { - match self { - ImageType::Monochrome | ImageType::RleMonochrome => true, - _ => false, - } - } + let compression = if image_type & 0x8 != 0 { + Compression::Rle + } else { + Compression::Uncompressed + }; + + Ok((data_type, compression)) } /// Image origin @@ -139,10 +127,7 @@ impl ImageOrigin { } pub(crate) fn is_bottom(self) -> bool { - match self { - Self::BottomLeft | Self::BottomRight => true, - _ => false, - } + matches!(self, Self::BottomLeft | Self::BottomRight) } } @@ -157,8 +142,11 @@ pub struct TgaHeader { /// Whether a color map is included in the image data pub has_color_map: bool, - /// Image type - pub image_type: ImageType, + /// Data type. + pub data_type: DataType, + + /// Compression. + pub compression: Compression, /// Color map origin pub color_map_start: u16, @@ -195,7 +183,7 @@ impl TgaHeader { pub(crate) fn parse(input: &[u8]) -> IResult<&[u8], Self> { let (input, id_len) = le_u8(input)?; let (input, has_color_map) = has_color_map(input)?; - let (input, image_type) = ImageType::parse(input)?; + let (input, (data_type, compression)) = map_res(le_u8, parse_image_type)(input)?; let (input, color_map_start) = le_u16(input)?; let (input, color_map_len) = le_u16(input)?; let (input, color_map_depth) = Bpp::parse_opt(input)?; @@ -214,7 +202,8 @@ impl TgaHeader { TgaHeader { id_len, has_color_map, - image_type, + data_type, + compression, color_map_start, color_map_len, color_map_depth, diff --git a/src/lib.rs b/src/lib.rs index ec591d9..19420c6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,10 +11,6 @@ //! //! This example demonstrates how a TGA image can be drawn to a [embedded-graphics] draw target. //! -//! The code uses the [`Tga`] struct and only works if the color format inside the TGA file is known -//! at compile time. While this makes the code less flexible it offers the best performance by -//! making sure that no unnecessary color conversions are used. -//! //! ```rust //! # fn main() -> Result<(), core::convert::Infallible> { //! # let mut display = embedded_graphics::mock_display::MockDisplay::default(); @@ -32,29 +28,6 @@ //! # Ok::<(), core::convert::Infallible>(()) } //! ``` //! -//! ## Using `DynamicTga` to draw an image -//! -//! The previous example had the limitation that the color format needed to be known at compile -//! time. In some use cases this can be a problem, for example if user supplied images should -//! be displayed. To handle these cases [`DynamicTga`] can be used, which performs color conversion -//! if necessary. -//! -//! ```rust -//! # fn main() -> Result<(), core::convert::Infallible> { -//! # let mut display = embedded_graphics::mock_display::MockDisplay::::default(); -//! use embedded_graphics::{image::Image, pixelcolor::Rgb888, prelude::*}; -//! use tinytga::DynamicTga; -//! -//! // Include an image from a local path as bytes -//! let data = include_bytes!("../tests/chessboard_4px_rle.tga"); -//! -//! let tga = DynamicTga::from_slice(data).unwrap(); -//! -//! let image = Image::new(&tga, Point::zero()); -//! -//! image.draw(&mut display)?; -//! # Ok::<(), core::convert::Infallible>(()) } -//! ``` //! ## Accessing pixels using an embedded-graphics color type //! //! If [embedded-graphics] is not used to draw the TGA image, the color types provided by @@ -63,7 +36,7 @@ //! //! ```rust //! use embedded_graphics::{prelude::*, pixelcolor::Rgb888}; -//! use tinytga::{Bpp, ImageOrigin, ImageType, RawPixel, Tga, TgaHeader}; +//! use tinytga::Tga; //! //! // Include an image from a local path as bytes //! let data = include_bytes!("../tests/chessboard_4px_rle.tga"); @@ -87,7 +60,7 @@ //! //! ```rust //! use embedded_graphics::{prelude::*, pixelcolor::Rgb888}; -//! use tinytga::{Bpp, ImageOrigin, ImageType, RawPixel, RawTga, TgaHeader}; +//! use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawPixel, RawTga, TgaHeader}; //! //! // Include an image from a local path as bytes. //! let data = include_bytes!("../tests/chessboard_4px_rle.tga"); @@ -101,7 +74,8 @@ //! TgaHeader { //! id_len: 0, //! has_color_map: false, -//! image_type: ImageType::RleTruecolor, +//! data_type: DataType::TrueColor, +//! compression: Compression::Rle, //! color_map_start: 0, //! color_map_len: 0, //! color_map_depth: None, @@ -121,20 +95,19 @@ //! //! # Embedded-graphics drawing performance //! -//! [`Tga`] should by used instead of [`DynamicTga`] when possible to reduce the risk of -//! accidentally adding unnecessary color conversions. -//! //! `tinytga` uses different code paths to draw images with different [`ImageOrigin`]s. //! The performance difference between the origins will depend on the display driver, but using //! images with the origin at the top left corner will generally result in the best performance. //! +//! # Minimum supported Rust version +//! +//! The minimum supported Rust version for tinytga is `1.61` or greater. +//! Ensure you have the correct version of Rust installed, preferably through . +//! //! [`ImageOrigin`]: enum.ImageOrigin.html //! [embedded-graphics]: https://docs.rs/embedded-graphics //! [`Tga`]: ./struct.Tga.html //! [`RawTga`]: ./struct.RawTga.html -//! [`DynamicTga`]: ./struct.DynamicTga.html -//! [`image_type`]: ./struct.TgaHeader.html#structfield.image_type -//! [`pixel_data`]: ./struct.Tga.html#structfield.pixel_data #![no_std] #![deny(missing_docs)] @@ -148,25 +121,30 @@ #![deny(unused_qualifications)] mod color_map; -mod dynamic_tga; mod footer; mod header; -mod packet; mod parse_error; mod pixels; -mod raw_pixels; +mod raw_iter; mod raw_tga; use core::marker::PhantomData; -use embedded_graphics::{prelude::*, primitives::Rectangle}; +use embedded_graphics::{ + pixelcolor::{ + raw::{RawU16, RawU24, RawU8}, + Gray8, Rgb555, Rgb888, + }, + prelude::*, + primitives::Rectangle, +}; +use raw_iter::{RawColors, Rle, Uncompressed}; pub use crate::{ color_map::ColorMap, - dynamic_tga::DynamicTga, - header::{Bpp, ImageOrigin, ImageType, TgaHeader}, + header::{Bpp, Compression, DataType, ImageOrigin, TgaHeader}, parse_error::ParseError, pixels::Pixels, - raw_pixels::{RawPixel, RawPixels}, + raw_iter::{RawPixel, RawPixels}, raw_tga::RawTga, }; @@ -176,44 +154,38 @@ pub struct Tga<'a, C> { /// Raw TGA file. raw: RawTga<'a>, + image_color_type: ColorType, + /// Color type. - color_type: PhantomData, + target_color_type: PhantomData, } impl<'a, C> Tga<'a, C> where - C: PixelColor + From<::Raw>, + C: PixelColor + From + From + From, { /// Parses a TGA image from a byte slice. - /// - /// # Errors - /// - /// If the bit depth of the source image does not match the bit depth of the output color type - /// `C`, this method will return a [`ParseError::MismatchedBpp`] error. - /// - /// [`ParseError::MismatchedBpp`]: enum.ParseError.html#variant.MismatchedBpp pub fn from_slice(data: &'a [u8]) -> Result { let raw = RawTga::from_slice(data)?; - Self::from_raw(raw) - } - - /// Converts a raw TGA object into a embedded-graphics TGA object. - /// - /// # Errors - /// - /// If the bit depth of the source image does not match the bit depth of the output color type - /// `C`, this method will return a [`ParseError::MismatchedBpp`] error. - /// - /// [`ParseError::MismatchedBpp`]: enum.ParseError.html#variant.MismatchedBpp - pub fn from_raw(raw: RawTga<'a>) -> Result { - if C::Raw::BITS_PER_PIXEL != usize::from(raw.color_bpp().bits()) { - return Err(ParseError::MismatchedBpp(raw.color_bpp().bits())); - } + let image_color_type = match (raw.color_bpp(), raw.data_type()) { + (Bpp::Bits8, DataType::BlackAndWhite) => ColorType::Gray8, + (Bpp::Bits16, DataType::ColorMapped) => ColorType::Rgb555, + (Bpp::Bits16, DataType::TrueColor) => ColorType::Rgb555, + (Bpp::Bits24, DataType::ColorMapped) => ColorType::Rgb888, + (Bpp::Bits24, DataType::TrueColor) => ColorType::Rgb888, + _ => { + return Err(ParseError::UnsupportedTgaType( + raw.data_type(), + raw.color_bpp(), + )); + } + }; Ok(Tga { raw, - color_type: PhantomData, + image_color_type, + target_color_type: PhantomData, }) } @@ -227,8 +199,113 @@ where } /// Returns an iterator over the pixels in this image. - pub fn pixels<'b>(&'b self) -> Pixels<'b, 'a, C> { - Pixels::new(self.raw.pixels()) + pub fn pixels(&self) -> Pixels<'_, C> { + Pixels::new(self) + } + + fn draw_colors( + &self, + target: &mut D, + mut colors: impl Iterator, + ) -> Result<(), D::Error> + where + D: DrawTarget, + { + let bounding_box = self.bounding_box(); + if bounding_box.is_zero_sized() { + return Ok(()); + } + + let origin = self.raw.image_origin(); + + // TGA files with the origin in the top left corner can be drawn using `fill_contiguous`. + // All other origins are drawn by falling back to `draw_iter`. + match origin { + ImageOrigin::TopLeft => target.fill_contiguous(&bounding_box, colors), + ImageOrigin::BottomLeft => { + let mut row_rect = + Rectangle::new(Point::zero(), Size::new(bounding_box.size.width, 1)); + + for y in bounding_box.rows().rev() { + row_rect.top_left.y = y; + let row_colors = (&mut colors).take(bounding_box.size.width as usize); + target.fill_contiguous(&row_rect, row_colors)?; + } + + Ok(()) + } + ImageOrigin::TopRight => { + let max_x = bounding_box.bottom_right().map(|p| p.x).unwrap_or_default(); + + bounding_box + .points() + .zip(colors) + .map(|(p, c)| Pixel(Point::new(max_x - p.x, p.y), c)) + .draw(target) + } + ImageOrigin::BottomRight => { + let bottom_right = bounding_box.bottom_right().unwrap_or_default(); + + bounding_box + .points() + .zip(colors) + .map(|(p, c)| Pixel(bottom_right - p, c)) + .draw(target) + } + } + } + + fn draw_regular( + &self, + target: &mut D, + colors: RawColors<'a, CI::Raw, F>, + ) -> Result<(), D::Error> + where + D: DrawTarget, + CI: PixelColor + From + Into, + RawColors<'a, CI::Raw, F>: Iterator, + { + self.draw_colors(target, colors.map(|c| CI::from(c).into())) + } + + fn draw_color_mapped( + &self, + target: &mut D, + indices: RawColors<'a, R, F>, + ) -> Result<(), D::Error> + where + D: DrawTarget, + R: RawData, + R::Storage: Into, + RawColors<'a, R, F>: Iterator, + { + let color_map = if let Some(color_map) = self.raw.color_map() { + color_map + } else { + return Ok(()); + }; + + match self.image_color_type { + ColorType::Rgb555 => { + let colors = indices.map(|index| { + let index = index.into_inner().into() as usize; + color_map.get::(index).unwrap().into() + }); + + self.draw_colors(target, colors) + } + ColorType::Rgb888 => { + let colors = indices.map(|index| { + let index = index.into_inner().into() as usize; + color_map.get::(index).unwrap().into() + }); + + self.draw_colors(target, colors) + } + // Color mapped Gray8 images aren't supported. Using a color map for Gray8 images + // doesn't make sense, because this encoding will always be larger than a type 3 image. + ColorType::Gray8 => Ok(()), + } } } @@ -240,7 +317,7 @@ impl OriginDimensions for Tga<'_, C> { impl ImageDrawable for Tga<'_, C> where - C: PixelColor + From<::Raw>, + C: PixelColor + From + From + From, { type Color = C; @@ -248,7 +325,69 @@ where where D: DrawTarget, { - self.raw.draw(target) + match self.raw.image_data_bpp() { + Bpp::Bits8 => match self.raw.compression() { + Compression::Uncompressed => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Gray8, _>(target, colors) + } + } + Compression::Rle => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Gray8, _>(target, colors) + } + } + }, + Bpp::Bits16 => match self.raw.compression() { + Compression::Uncompressed => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Rgb555, _>(target, colors) + } + } + Compression::Rle => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Rgb555, _>(target, colors) + } + } + }, + Bpp::Bits24 => match self.raw.compression() { + Compression::Uncompressed => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Rgb888, _>(target, colors) + } + } + Compression::Rle => { + let colors = RawColors::::new(&self.raw); + + if self.raw.color_map().is_some() { + self.draw_color_mapped(target, colors) + } else { + self.draw_regular::<_, Rgb888, _>(target, colors) + } + } + }, + Bpp::Bits32 => Ok(()), + } } fn draw_sub_image(&self, target: &mut D, area: &Rectangle) -> Result<(), D::Error> @@ -258,3 +397,10 @@ where self.draw(&mut target.translated(-area.top_left).clipped(area)) } } + +#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub(crate) enum ColorType { + Gray8, + Rgb555, + Rgb888, +} diff --git a/src/packet.rs b/src/packet.rs deleted file mode 100644 index 375db91..0000000 --- a/src/packet.rs +++ /dev/null @@ -1,91 +0,0 @@ -use nom::{bytes::complete::take, number::complete::le_u8, IResult}; - -#[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Hash, Eq, Ord)] -pub enum PacketType { - Raw, - Rle, -} - -#[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Hash, Eq, Ord)] -pub struct Packet<'a> { - packet_type: PacketType, - pixel_count: usize, - data: &'a [u8], - bytes_per_pixel: u8, -} - -impl<'a> Packet<'a> { - /// Parses a packet in a RLE encoded file. - pub fn parse(input: &'a [u8], bytes_per_pixel: u8) -> IResult<&'a [u8], Self> { - let (input, type_and_count) = le_u8(input)?; - - // The pixel count is encoded in the lower 7 bits and the actual number of pixels - // is one more than the value stored in the packet. - let pixel_count = usize::from(type_and_count & 0x7F) + 1; - - // The packet type is encoded in the upper bit: 0 -> Raw, 1 -> Rle - let packet_type; - let (input, data) = if type_and_count & 0x80 != 0 { - packet_type = PacketType::Rle; - - // RLE packets always contain a single pixel - take(bytes_per_pixel)(input)? - } else { - packet_type = PacketType::Raw; - - // Raw packets contain `pixel_count` pixels - take(pixel_count * usize::from(bytes_per_pixel))(input)? - }; - - Ok(( - input, - Self { - packet_type, - pixel_count, - data, - bytes_per_pixel, - }, - )) - } - - pub fn from_uncompressed( - image_data: &'a [u8], - pixel_count: usize, - bytes_per_pixel: u8, - ) -> Self { - Self { - packet_type: PacketType::Raw, - pixel_count, - data: image_data, - bytes_per_pixel, - } - } -} - -impl Iterator for Packet<'_> { - type Item = u32; - - fn next(&mut self) -> Option { - let bytes_per_pixel = usize::from(self.bytes_per_pixel); - - if self.pixel_count == 0 || self.data.len() < bytes_per_pixel { - return None; - } - - self.pixel_count -= 1; - - let color = match self.bytes_per_pixel { - 1 => u32::from(self.data[0]), - 2 => u32::from_le_bytes([self.data[0], self.data[1], 0, 0]), - 3 => u32::from_le_bytes([self.data[0], self.data[1], self.data[2], 0]), - 4 => u32::from_le_bytes([self.data[0], self.data[1], self.data[2], self.data[3]]), - _ => 0, - }; - - if self.packet_type == PacketType::Raw { - self.data = &self.data[bytes_per_pixel..]; - } - - Some(color) - } -} diff --git a/src/parse_error.rs b/src/parse_error.rs index ff8e097..100a21c 100644 --- a/src/parse_error.rs +++ b/src/parse_error.rs @@ -1,4 +1,4 @@ -use crate::header::{Bpp, ImageType}; +use crate::header::{Bpp, DataType}; /// Possible parse errors #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] @@ -27,6 +27,6 @@ pub enum ParseError { /// [`Tga::from_slice`]: struct.Tga.html#method.from_slice MismatchedBpp(u8), - /// The image type and bits per pixel combination isn't supported by `DynamicTga`. - UnsupportedDynamicTgaType(ImageType, Bpp), + /// Unsupported combination of image type and bits per pixel. + UnsupportedTgaType(DataType, Bpp), } diff --git a/src/pixels.rs b/src/pixels.rs index 1a9a132..15c1140 100644 --- a/src/pixels.rs +++ b/src/pixels.rs @@ -1,37 +1,58 @@ -use core::marker::PhantomData; -use embedded_graphics::prelude::*; +use embedded_graphics::{ + pixelcolor::{ + raw::{RawU16, RawU24, RawU8}, + Gray8, Rgb555, Rgb888, + }, + prelude::*, +}; -use crate::RawPixels; +use crate::{ColorType, RawPixel, RawPixels, Tga}; /// Iterator over individual TGA pixels. /// /// See the [`pixels`] method for additional information. /// /// [`pixels`]: struct.Tga.html#method.pixels -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub struct Pixels<'a, 'b, C> { - raw: RawPixels<'a, 'b>, - color_type: PhantomData, +#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub struct Pixels<'a, C> { + tga: &'a Tga<'a, C>, + raw_pixels: RawPixels<'a>, } -impl<'a, 'b, C> Pixels<'a, 'b, C> { - pub(crate) fn new(raw: RawPixels<'a, 'b>) -> Self { +impl<'a, C> Pixels<'a, C> +where + C: PixelColor + From + From + From, +{ + pub(crate) fn new(tga: &'a Tga<'a, C>) -> Self { Self { - raw, - color_type: PhantomData, + tga, + raw_pixels: RawPixels::new(&tga.raw), } } } -impl Iterator for Pixels<'_, '_, C> +impl Iterator for Pixels<'_, C> where - C: PixelColor + From<::Raw>, + C: PixelColor + From + From + From, { type Item = Pixel; fn next(&mut self) -> Option { - self.raw - .next() - .map(|p| Pixel(p.position, C::Raw::from_u32(p.color).into())) + let RawPixel { + position, + mut color, + } = self.raw_pixels.next()?; + + if let Some(color_map) = self.tga.raw.color_map() { + color = color_map.get_raw(color as usize).unwrap() + } + + let color = match self.tga.image_color_type { + ColorType::Gray8 => Gray8::from(RawU8::from_u32(color)).into(), + ColorType::Rgb555 => Rgb555::from(RawU16::from_u32(color)).into(), + ColorType::Rgb888 => Rgb888::from(RawU24::from_u32(color)).into(), + }; + + Some(Pixel(position, color)) } } diff --git a/src/raw_iter.rs b/src/raw_iter.rs new file mode 100644 index 0000000..aeb48d7 --- /dev/null +++ b/src/raw_iter.rs @@ -0,0 +1,275 @@ +use core::{convert::TryInto, marker::PhantomData}; + +use embedded_graphics::{ + pixelcolor::raw::{RawU16, RawU24, RawU32, RawU8}, + prelude::*, +}; + +use crate::{raw_tga::RawTga, Bpp, Compression}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Uncompressed {} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Rle {} + +#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub struct RawColors<'a, R, F> { + remaining_data: &'a [u8], + + rle_pixel: u32, + rle_repeat: u8, + rle_take_raw: u8, + + raw_data_type: PhantomData, + format: PhantomData, +} + +impl<'a, R: RawData, F> RawColors<'a, R, F> { + pub fn new(raw_tga: &'a RawTga<'a>) -> Self { + debug_assert_eq!( + usize::from(raw_tga.image_data_bpp().bits()), + R::BITS_PER_PIXEL + ); + + let image_data = raw_tga.image_data(); + + Self { + remaining_data: image_data, + rle_pixel: 0, + rle_repeat: 0, + rle_take_raw: 0, + raw_data_type: PhantomData, + format: PhantomData, + } + } +} + +trait NextColor { + fn next_color(&mut self) -> Option; +} + +impl<'a, F> NextColor for RawColors<'a, RawU8, F> { + fn next_color(&mut self) -> Option { + self.remaining_data.split_first().map(|(r, rest)| { + self.remaining_data = rest; + RawU8::new(*r) + }) + } +} + +impl<'a, F> NextColor for RawColors<'a, RawU16, F> { + fn next_color(&mut self) -> Option { + if self.remaining_data.len() < 2 { + return None; + } + + let (bytes, rest) = self.remaining_data.split_at(2); + self.remaining_data = rest; + + Some(RawU16::new(u16::from_le_bytes(bytes.try_into().unwrap()))) + } +} + +impl<'a, F> NextColor for RawColors<'a, RawU24, F> { + fn next_color(&mut self) -> Option { + if self.remaining_data.len() < 3 { + return None; + } + + let (bytes, rest) = self.remaining_data.split_at(3); + self.remaining_data = rest; + + let mut bytes_padded = [0u8; 4]; + bytes_padded[0..3].copy_from_slice(bytes); + + Some(RawU24::new(u32::from_le_bytes(bytes_padded))) + } +} + +impl<'a, F> NextColor for RawColors<'a, RawU32, F> { + fn next_color(&mut self) -> Option { + if self.remaining_data.len() < 4 { + return None; + } + + let (bytes, rest) = self.remaining_data.split_at(4); + self.remaining_data = rest; + + Some(RawU32::new(u32::from_le_bytes(bytes.try_into().unwrap()))) + } +} + +impl<'a, R> Iterator for RawColors<'a, R, Uncompressed> +where + Self: NextColor, + R: RawData, +{ + type Item = R; + + fn next(&mut self) -> Option { + self.next_color().or_else(|| Some(R::from_u32(0))) + } +} + +impl<'a, R> Iterator for RawColors<'a, R, Rle> +where + Self: NextColor, + R: RawData, + R::Storage: Into, +{ + type Item = R; + + fn next(&mut self) -> Option { + loop { + if self.rle_repeat > 0 { + self.rle_repeat -= 1; + break Some(R::from_u32(self.rle_pixel)); + } else if self.rle_take_raw > 0 { + self.rle_take_raw -= 1; + break self.next_color(); + } else { + let (type_and_count, rest) = self.remaining_data.split_first()?; + self.remaining_data = rest; + + // The pixel count is encoded in the lower 7 bits and the actual number of pixels + // is one more than the value stored in the packet. + let pixel_count = (*type_and_count & 0x7F) + 1; + + // The packet type is encoded in the upper bit: 0 -> Raw, 1 -> Rle + if *type_and_count & 0x80 != 0 { + let pixel = self.next_color()?; + + self.rle_repeat = pixel_count; + self.rle_pixel = pixel.into_inner().into(); + } else { + self.rle_take_raw = pixel_count; + } + } + } + } +} + +#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +enum DynamicRawColors<'a> { + Bpp8Uncompressed(RawColors<'a, RawU8, Uncompressed>), + Bpp8Rle(RawColors<'a, RawU8, Rle>), + Bpp16Uncompressed(RawColors<'a, RawU16, Uncompressed>), + Bpp16Rle(RawColors<'a, RawU16, Rle>), + Bpp24Uncompressed(RawColors<'a, RawU24, Uncompressed>), + Bpp24Rle(RawColors<'a, RawU24, Rle>), + Bpp32Uncompressed(RawColors<'a, RawU32, Uncompressed>), + Bpp32Rle(RawColors<'a, RawU32, Rle>), +} + +/// Iterator over individual TGA pixels. +/// +/// See the [`pixels`] method for additional information. +/// +/// [`pixels`]: struct.RawTga.html#method.pixels +#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub struct RawPixels<'a> { + raw_tga: &'a RawTga<'a>, + colors: DynamicRawColors<'a>, + position: Point, +} + +impl<'a> RawPixels<'a> { + pub(crate) fn new(raw_tga: &'a RawTga<'a>) -> Self { + let colors = match (raw_tga.image_data_bpp(), raw_tga.compression()) { + (Bpp::Bits8, Compression::Uncompressed) => { + DynamicRawColors::Bpp8Uncompressed(RawColors::new(raw_tga)) + } + (Bpp::Bits8, Compression::Rle) => DynamicRawColors::Bpp8Rle(RawColors::new(raw_tga)), + (Bpp::Bits16, Compression::Uncompressed) => { + DynamicRawColors::Bpp16Uncompressed(RawColors::new(raw_tga)) + } + (Bpp::Bits16, Compression::Rle) => DynamicRawColors::Bpp16Rle(RawColors::new(raw_tga)), + (Bpp::Bits24, Compression::Uncompressed) => { + DynamicRawColors::Bpp24Uncompressed(RawColors::new(raw_tga)) + } + (Bpp::Bits24, Compression::Rle) => DynamicRawColors::Bpp24Rle(RawColors::new(raw_tga)), + (Bpp::Bits32, Compression::Uncompressed) => { + DynamicRawColors::Bpp32Uncompressed(RawColors::new(raw_tga)) + } + (Bpp::Bits32, Compression::Rle) => DynamicRawColors::Bpp32Rle(RawColors::new(raw_tga)), + }; + + let start_y = if raw_tga.image_origin().is_bottom() { + raw_tga.size().height.saturating_sub(1) + } else { + 0 + }; + + Self { + raw_tga, + colors, + position: Point::new(0, start_y as i32), + } + } + + /// Returns the next pixel position. + fn next_position(&mut self) -> Option { + if self.position.y < 0 || self.position.y >= self.raw_tga.size().height as i32 { + return None; + } + + let position = self.position; + + self.position.x += 1; + + if self.position.x >= self.raw_tga.size().width as i32 { + self.position.x = 0; + + if self.raw_tga.image_origin().is_bottom() { + self.position.y -= 1; + } else { + self.position.y += 1; + } + } + + Some(position) + } +} + +impl Iterator for RawPixels<'_> { + type Item = RawPixel; + + fn next(&mut self) -> Option { + let position = self.next_position()?; + + let color = match &mut self.colors { + DynamicRawColors::Bpp8Uncompressed(colors) => u32::from(colors.next()?.into_inner()), + DynamicRawColors::Bpp8Rle(colors) => u32::from(colors.next()?.into_inner()), + DynamicRawColors::Bpp16Uncompressed(colors) => u32::from(colors.next()?.into_inner()), + DynamicRawColors::Bpp16Rle(colors) => u32::from(colors.next()?.into_inner()), + DynamicRawColors::Bpp24Uncompressed(colors) => colors.next()?.into_inner(), + DynamicRawColors::Bpp24Rle(colors) => colors.next()?.into_inner(), + DynamicRawColors::Bpp32Uncompressed(colors) => colors.next()?.into_inner(), + DynamicRawColors::Bpp32Rle(colors) => colors.next()?.into_inner(), + }; + + Some(RawPixel::new(position, color)) + } +} + +/// Pixel with raw pixel color. +/// +/// This struct is returned by the [`RawPixels`] iterator. +/// +/// [`RawPixels`]: struct.RawPixels.html +#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Default)] +pub struct RawPixel { + /// The position relative to the top left corner of the image. + pub position: Point, + + /// The raw pixel color. + pub color: u32, +} + +impl RawPixel { + /// Creates a new raw pixel. + pub const fn new(position: Point, color: u32) -> Self { + Self { position, color } + } +} diff --git a/src/raw_pixels.rs b/src/raw_pixels.rs deleted file mode 100644 index 9b34310..0000000 --- a/src/raw_pixels.rs +++ /dev/null @@ -1,127 +0,0 @@ -use crate::{packet::Packet, raw_tga::RawTga}; -use embedded_graphics::prelude::*; - -/// Iterator over individual TGA pixels. -/// -/// See the [`pixels`] method for additional information. -/// -/// [`pixels`]: struct.RawTga.html#method.pixels -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub struct RawPixels<'a, 'b> { - /// Reference to original TGA image - raw_tga: &'a RawTga<'b>, - - position: Point, - - packet: Packet<'b>, - - remaining_data: &'b [u8], -} - -impl<'a, 'b> RawPixels<'a, 'b> { - pub(crate) fn new(raw_tga: &'a RawTga<'b>) -> Self { - let size = raw_tga.size(); - let remaining_pixels = size.width as usize * size.height as usize; - - let image_data = raw_tga.image_data(); - - let (first_packet_pixels, data) = if raw_tga.image_type().is_rle() { - (0, image_data) - } else { - (remaining_pixels, &image_data[0..0]) - }; - - let packet = Packet::from_uncompressed( - raw_tga.image_data(), - first_packet_pixels, - raw_tga.image_data_bpp().bytes(), - ); - - let start_y = if raw_tga.image_origin().is_bottom() { - raw_tga.size().height.saturating_sub(1) - } else { - 0 - }; - - Self { - raw_tga: raw_tga, - packet, - remaining_data: data, - position: Point::new(0, start_y as i32), - } - } - - /// Returns the next pixel position. - fn next_position(&mut self) -> Option { - if self.position.y < 0 || self.position.y >= self.raw_tga.size().height as i32 { - return None; - } - - let position = self.position; - - self.position.x += 1; - - if self.position.x >= self.raw_tga.size().width as i32 { - self.position.x = 0; - - if self.raw_tga.image_origin().is_bottom() { - self.position.y -= 1; - } else { - self.position.y += 1; - } - } - - Some(position) - } -} - -impl<'a, 'b> Iterator for RawPixels<'a, 'b> { - type Item = RawPixel; - - fn next(&mut self) -> Option { - let position = self.next_position()?; - - let color = if let Some(color) = self.packet.next() { - color - } else { - match Packet::parse(self.remaining_data, self.raw_tga.image_data_bpp().bytes()) { - Ok((data, packet)) => { - self.remaining_data = data; - self.packet = packet; - - self.packet.next().unwrap_or(0) - } - Err(_) => 0, - } - }; - - let color = if let Some(color_map) = self.raw_tga.color_map() { - color_map.get_raw(color as usize).unwrap_or(0) - } else { - color - }; - - Some(RawPixel::new(position, color)) - } -} - -/// Pixel with raw pixel color. -/// -/// This struct is returned by the [`RawPixels`] iterator. -/// -/// [`RawPixels`]: struct.RawPixels.html -#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash, Debug, Default)] -pub struct RawPixel { - /// The position relative to the top left corner of the image. - pub position: Point, - - /// The raw pixel color. - pub color: u32, -} - -impl RawPixel { - /// Creates a new raw pixel. - pub fn new(position: Point, color: u32) -> Self { - Self { position, color } - } -} diff --git a/src/raw_tga.rs b/src/raw_tga.rs index 5aca8ca..d9b71e5 100644 --- a/src/raw_tga.rs +++ b/src/raw_tga.rs @@ -1,13 +1,13 @@ -use embedded_graphics::{prelude::*, primitives::Rectangle}; +use embedded_graphics::prelude::*; use nom::{bytes::complete::take, IResult}; use crate::{ color_map::ColorMap, footer::TgaFooter, - header::{Bpp, ImageOrigin, ImageType, TgaHeader}, + header::{Bpp, ImageOrigin, TgaHeader}, parse_error::ParseError, - pixels::Pixels, - raw_pixels::RawPixels, + raw_iter::RawPixels, + Compression, DataType, }; /// Raw TGA image. @@ -33,8 +33,11 @@ pub struct RawTga<'a> { /// Image size size: Size, - /// Image type - image_type: ImageType, + /// Data type + data_type: DataType, + + /// Compression + compression: Compression, /// Bits per pixel bpp: Bpp, @@ -65,7 +68,8 @@ impl<'a> RawTga<'a> { size, bpp: header.pixel_depth, image_origin: header.image_origin, - image_type: header.image_type, + data_type: header.data_type, + compression: header.compression, }) } @@ -101,9 +105,14 @@ impl<'a> RawTga<'a> { self.image_origin } - /// Returns the image type. - pub fn image_type(&self) -> ImageType { - self.image_type + /// Returns the data type. + pub fn data_type(&self) -> DataType { + self.data_type + } + + /// Returns the compression type. + pub fn compression(&self) -> Compression { + self.compression } /// Returns the raw image data contained in this image. @@ -128,7 +137,7 @@ impl<'a> RawTga<'a> { } /// Returns an iterator over the raw pixels in this image. - pub fn pixels<'b>(&'b self) -> RawPixels<'b, 'a> { + pub fn pixels(&self) -> RawPixels<'_> { RawPixels::new(self) } @@ -152,7 +161,7 @@ impl<'a> RawTga<'a> { /// # Performance /// /// To save memory the footer is parsed every time this method is called. - pub fn developer_directory(&self) -> Option<&[u8]> { + pub fn developer_directory(&self) -> Option<&'a [u8]> { TgaFooter::parse(self.data).and_then(|footer| footer.developer_directory(self.data)) } @@ -161,7 +170,7 @@ impl<'a> RawTga<'a> { /// # Performance /// /// To save memory the footer is parsed every time this method is called. - pub fn extension_area(&self) -> Option<&[u8]> { + pub fn extension_area(&self) -> Option<&'a [u8]> { TgaFooter::parse(self.data).and_then(|footer| footer.extension_area(self.data)) } @@ -172,7 +181,7 @@ impl<'a> RawTga<'a> { /// # Performance /// /// To save memory the header is parsed every time this method is called. - pub fn image_id(&self) -> Option<&[u8]> { + pub fn image_id(&self) -> Option<&'a [u8]> { let (input, header) = TgaHeader::parse(self.data).ok()?; parse_image_id(input, &header) @@ -180,24 +189,6 @@ impl<'a> RawTga<'a> { .map(|(_input, id)| id) .filter(|id| !id.is_empty()) } - - pub(crate) fn draw(&self, target: &mut D) -> Result<(), D::Error> - where - D: DrawTarget, - D::Color: From<::Raw>, - { - let pixels = Pixels::::new(self.pixels()); - - // TGA files with the origin in the top left corner can be drawn using `fill_contiguous`. - // All other origins are drawn by falling back to `draw_iter`. - if self.image_origin() == ImageOrigin::TopLeft { - let bounding_box = Rectangle::new(Point::zero(), self.size); - - target.fill_contiguous(&bounding_box, pixels.map(|Pixel(_, color)| color)) - } else { - target.draw_iter(pixels) - } - } } fn parse_image_id<'a>(input: &'a [u8], header: &TgaHeader) -> IResult<&'a [u8], &'a [u8]> { diff --git a/tests/cbw8.rs b/tests/cbw8.rs index df6953a..fe0cac1 100644 --- a/tests/cbw8.rs +++ b/tests/cbw8.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn cbw8() { @@ -14,7 +14,8 @@ fn cbw8() { TgaHeader { id_len: 26, has_color_map: false, - image_type: ImageType::RleMonochrome, + data_type: DataType::BlackAndWhite, + compression: Compression::Rle, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/chequerboard-uncompressed-topleft.rs b/tests/chequerboard-uncompressed-topleft.rs index fe4e292..24e2df0 100644 --- a/tests/chequerboard-uncompressed-topleft.rs +++ b/tests/chequerboard-uncompressed-topleft.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn chequerboard_uncompressed_topleft() { @@ -18,7 +18,8 @@ fn chequerboard_uncompressed_topleft() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::Monochrome, + data_type: DataType::BlackAndWhite, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/chessboard_4px_raw.rs b/tests/chessboard_4px_raw.rs index 36b0a6c..bdcf88a 100644 --- a/tests/chessboard_4px_raw.rs +++ b/tests/chessboard_4px_raw.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn chessboard_4px_raw() { @@ -15,7 +15,8 @@ fn chessboard_4px_raw() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/chessboard_4px_rle.rs b/tests/chessboard_4px_rle.rs index 8b568e3..eaa62e0 100644 --- a/tests/chessboard_4px_rle.rs +++ b/tests/chessboard_4px_rle.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn chessboard_4px_rle() { @@ -15,7 +15,8 @@ fn chessboard_4px_rle() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/chessboard_rle.rs b/tests/chessboard_rle.rs index e554ea7..14e087a 100644 --- a/tests/chessboard_rle.rs +++ b/tests/chessboard_rle.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn chessboard_rle() { @@ -15,7 +15,8 @@ fn chessboard_rle() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/chessboard_uncompressed.rs b/tests/chessboard_uncompressed.rs index 8eb247e..fa0454f 100644 --- a/tests/chessboard_uncompressed.rs +++ b/tests/chessboard_uncompressed.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn chessboard_uncompressed() { @@ -15,7 +15,8 @@ fn chessboard_uncompressed() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/coordinates.rs b/tests/coordinates.rs index d3f7b26..23487a0 100644 --- a/tests/coordinates.rs +++ b/tests/coordinates.rs @@ -1,5 +1,5 @@ use embedded_graphics::prelude::*; -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn coordinates() { @@ -16,7 +16,8 @@ fn coordinates() { TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, diff --git a/tests/embedded_graphics.rs b/tests/embedded_graphics.rs index 9b8de7f..5463912 100644 --- a/tests/embedded_graphics.rs +++ b/tests/embedded_graphics.rs @@ -5,7 +5,7 @@ use embedded_graphics::{ prelude::*, }; use paste::paste; -use tinytga::{DynamicTga, Tga}; +use tinytga::Tga; const CHESSBOARD_PATTERN: &[&str] = &[ "WKWK", // @@ -32,10 +32,10 @@ const COLOR_PATTERN: &[&str] = &[ #[test] fn chessboard_compressed() { - let tga: Tga = Tga::from_slice(include_bytes!("./chessboard_4px_rle.tga")).unwrap(); + let tga = Tga::from_slice(include_bytes!("./chessboard_4px_rle.tga")).unwrap(); let image = Image::new(&tga, Point::zero()); - let mut display = MockDisplay::new(); + let mut display = MockDisplay::::new(); image.draw(&mut display).unwrap(); display.assert_pattern(CHESSBOARD_PATTERN); @@ -43,10 +43,10 @@ fn chessboard_compressed() { #[test] fn chessboard_uncompressed() { - let tga: Tga = Tga::from_slice(include_bytes!("./chessboard_raw.tga")).unwrap(); + let tga = Tga::from_slice(include_bytes!("./chessboard_raw.tga")).unwrap(); let image = Image::new(&tga, Point::zero()); - let mut display = MockDisplay::new(); + let mut display = MockDisplay::::new(); image.draw(&mut display).unwrap(); display.assert_pattern(CHESSBOARD_PATTERN); @@ -54,26 +54,25 @@ fn chessboard_uncompressed() { fn test_tga(data: &[u8], pattern: &[&str]) where - C: PixelColor + From<::Raw> + ColorMapping, + C: PixelColor + From + From + From + ColorMapping, { - let tga: Tga = Tga::from_slice(data).unwrap(); + let tga = Tga::from_slice(data).unwrap(); let image = Image::new(&tga, Point::zero()); - let mut display = MockDisplay::new(); + let mut display = MockDisplay::::new(); image.draw(&mut display).unwrap(); display.assert_pattern(pattern); } -fn test_dynamic_tga(data: &[u8], pattern: &[&str]) +fn test_pixels_iter(data: &[u8], pattern: &[&str]) where - C: PixelColor + From<::Raw> + Into + ColorMapping, + C: PixelColor + From + From + From + ColorMapping, { - let tga = DynamicTga::from_slice(data).unwrap(); - let image = Image::new(&tga, Point::zero()); + let tga = Tga::from_slice(data).unwrap(); - let mut display = MockDisplay::new(); - image.draw(&mut display).unwrap(); + let mut display = MockDisplay::::new(); + tga.pixels().draw(&mut display).unwrap(); let expected: MockDisplay = MockDisplay::::from_pattern(pattern).map(|c| c.into()); @@ -94,13 +93,13 @@ macro_rules! test_tga { } #[test] - fn [<$image_type _bl_dynamic>]() { - test_dynamic_tga::<$color_type>(include_bytes!(concat!(stringify!($image_type), "_bl.tga")), $pattern); + fn [<$image_type _bl_pixels_iter>]() { + test_pixels_iter::<$color_type>(include_bytes!(concat!(stringify!($image_type), "_bl.tga")), $pattern); } #[test] - fn [<$image_type _tl_dynamic>]() { - test_dynamic_tga::<$color_type>(include_bytes!(concat!(stringify!($image_type), "_tl.tga")), $pattern); + fn [<$image_type _tl_pixels_iter>]() { + test_pixels_iter::<$color_type>(include_bytes!(concat!(stringify!($image_type), "_tl.tga")), $pattern); } } }; diff --git a/tests/errors.rs b/tests/errors.rs index 071c5b5..cab1192 100644 --- a/tests/errors.rs +++ b/tests/errors.rs @@ -1,10 +1,6 @@ -use embedded_graphics::{ - pixelcolor::{Gray8, Rgb888}, - prelude::*, - primitives::Rectangle, -}; +use embedded_graphics::{prelude::*, primitives::Rectangle}; use std::iter::repeat; -use tinytga::{ParseError, RawPixel, RawTga, Tga}; +use tinytga::{ParseError, RawPixel, RawTga}; #[test] fn color_map() { @@ -51,17 +47,17 @@ fn image_data_truncated() { assert_eq!(pixels, expected); } -#[test] -fn mismatched_bpp() { - // type2_tl_24bpp.tga is a 24 BPP image - assert_eq!( - Tga::::from_slice(include_bytes!("../tests/type2_24bpp_tl.tga")), - Err(ParseError::MismatchedBpp(24)) - ); - - // type3_tl.tga is a 8 BPP image - assert_eq!( - Tga::::from_slice(include_bytes!("../tests/type3_tl.tga")), - Err(ParseError::MismatchedBpp(8)) - ); -} +// #[test] +// fn mismatched_bpp() { +// // type2_tl_24bpp.tga is a 24 BPP image +// assert_eq!( +// Tga::::from_slice(include_bytes!("../tests/type2_24bpp_tl.tga")), +// Err(ParseError::MismatchedBpp(24)) +// ); + +// // type3_tl.tga is a 8 BPP image +// assert_eq!( +// Tga::::from_slice(include_bytes!("../tests/type3_tl.tga")), +// Err(ParseError::MismatchedBpp(8)) +// ); +// } diff --git a/tests/logo.rs b/tests/logo.rs new file mode 100644 index 0000000..a570a1d --- /dev/null +++ b/tests/logo.rs @@ -0,0 +1,456 @@ +use embedded_graphics::{ + image::{Image, ImageRawBE, ImageRawLE}, + pixelcolor::{Gray8, Rgb555, Rgb888}, + prelude::*, +}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, Tga}; + +const WIDTH: usize = 240; +const HEIGHT: usize = 320; + +// TODO: use e-g framebuffer when it's added +#[derive(Debug, PartialEq)] +struct Framebuffer { + pixels: [[C; 240]; 320], +} + +impl + std::fmt::Debug> Framebuffer { + pub fn new() -> Self { + let color = C::from(Rgb888::BLACK); + + Self { + pixels: [[color; WIDTH]; HEIGHT], + } + } + + pub fn from_image(image: impl ImageDrawable) -> Self { + let mut framebuffer = Framebuffer::::new(); + Image::new(&image, Point::zero()) + .draw(&mut framebuffer) + .unwrap(); + framebuffer + } + + pub fn pixels(&self) -> impl Iterator + '_ { + self.pixels.iter().flatten().copied() + } + + pub fn assert_eq(&self, expected: &Self) { + let zipped = || self.pixels().zip(expected.pixels()); + + let errors = zipped().filter(|(a, b)| a != b).count(); + let first_error = zipped() + .enumerate() + .find(|(_, (a, b))| a != b) + .map(|(i, (a, b))| (Point::new((i % WIDTH) as i32, (i / WIDTH) as i32), a, b)); + + if self != expected { + let first_error = first_error.unwrap(); + panic!( + "framebuffer differs from expected\n{} errors\nfirst error at ({}): {:?} (expected {:?})", + errors, + first_error.0, + first_error.1, + first_error.2, + ); + } + } +} + +impl DrawTarget for Framebuffer { + type Color = C; + type Error = std::convert::Infallible; + + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for Pixel(p, c) in pixels { + self.pixels[p.y as usize][p.x as usize] = c; + } + + Ok(()) + } +} + +impl OriginDimensions for Framebuffer { + fn size(&self) -> embedded_graphics::prelude::Size { + Size::new(240, 320) + } +} + +fn expected_rgb555() -> Framebuffer { + Framebuffer::from_image(ImageRawLE::::new( + include_bytes!("logo_rgb555.raw"), + WIDTH as u32, + )) +} + +fn expected_rgb888() -> Framebuffer { + Framebuffer::from_image(ImageRawBE::::new( + include_bytes!("logo_rgb888.raw"), + WIDTH as u32, + )) +} + +fn expected_gray8() -> Framebuffer { + Framebuffer::from_image(ImageRawBE::::new( + include_bytes!("logo_gray8.raw"), + WIDTH as u32, + )) +} + +#[track_caller] +fn assert_format( + tga: &Tga, + data_type: DataType, + compression: Compression, + pixel_depth: Bpp, + image_origin: ImageOrigin, + color_map_depth: Option, +) where + C: PixelColor + From + From + From, +{ + assert_eq!(tga.as_raw().header().data_type, data_type); + assert_eq!(tga.as_raw().header().compression, compression); + assert_eq!(tga.as_raw().header().pixel_depth, pixel_depth); + assert_eq!(tga.as_raw().header().image_origin, image_origin); + + assert_eq!(tga.as_raw().header().color_map_depth, color_map_depth); + assert_eq!(tga.as_raw().header().color_map_start, 0); + if color_map_depth.is_some() { + assert!(tga.as_raw().header().color_map_len > 0); + } else { + assert_eq!(tga.as_raw().header().color_map_len, 0); + } +} + +#[test] +fn logo_type1_16bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type1_16bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::TopLeft, + Some(Bpp::Bits16), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type1_16bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type1_16bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::BottomLeft, + Some(Bpp::Bits16), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type1_24bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type1_24bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::TopLeft, + Some(Bpp::Bits24), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type1_24bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type1_24bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::BottomLeft, + Some(Bpp::Bits24), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type2_16bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_16bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits16, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type2_16bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_16bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits16, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type2_24bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_24bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits24, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type2_24bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_24bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits24, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type2_24bpp_tr() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_24bpp_tr.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits24, + ImageOrigin::TopRight, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type2_24bpp_br() { + let tga = Tga::::from_slice(include_bytes!("logo_type2_24bpp_br.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Uncompressed, + Bpp::Bits24, + ImageOrigin::BottomRight, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type3_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type3_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::BlackAndWhite, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_gray8()); +} + +#[test] +fn logo_type3_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type3_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::BlackAndWhite, + Compression::Uncompressed, + Bpp::Bits8, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_gray8()); +} + +#[test] +fn logo_type9_16bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type9_16bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::TopLeft, + Some(Bpp::Bits16), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type9_16bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type9_16bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::BottomLeft, + Some(Bpp::Bits16), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type9_24bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type9_24bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::TopLeft, + Some(Bpp::Bits24), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type9_24bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type9_24bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::ColorMapped, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::BottomLeft, + Some(Bpp::Bits24), + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type10_16bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type10_16bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Rle, + Bpp::Bits16, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type10_16bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type10_16bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Rle, + Bpp::Bits16, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb555()); +} + +#[test] +fn logo_type10_24bpp_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type10_24bpp_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Rle, + Bpp::Bits24, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type10_24bpp_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type10_24bpp_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::TrueColor, + Compression::Rle, + Bpp::Bits24, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_rgb888()); +} + +#[test] +fn logo_type11_tl() { + let tga = Tga::::from_slice(include_bytes!("logo_type11_tl.tga")).unwrap(); + assert_format( + &tga, + DataType::BlackAndWhite, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::TopLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_gray8()); +} + +#[test] +fn logo_type11_bl() { + let tga = Tga::::from_slice(include_bytes!("logo_type11_bl.tga")).unwrap(); + assert_format( + &tga, + DataType::BlackAndWhite, + Compression::Rle, + Bpp::Bits8, + ImageOrigin::BottomLeft, + None, + ); + + Framebuffer::from_image(tga).assert_eq(&expected_gray8()); +} diff --git a/tests/logo_gray8.raw b/tests/logo_gray8.raw new file mode 100644 index 0000000..db0afd2 --- /dev/null +++ b/tests/logo_gray8.raw @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¤¤óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇF=¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚhaÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‘‹éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°$¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌRJÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßunÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîŽëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼3,°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐXQÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå{âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤–ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁA:·ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖd]Ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç‡äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôª$òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇF?¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚjaÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí“‹êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°(¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌTLÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàvoÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï]]Žìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼3?–©©™I,°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐY/…©©©©©©‰3QÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæƒg§©©©©©©©©¨q |âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¤S ©©©©©©©©©©©©¢]–ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁA:©©©©©©©©©©©©©©©©“C:·úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚe(}©©©©©©©©©©©©©©©©©©©©‚,^Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèˆb¥©©©©©©©©©©©©©©©©©©©©©©¦l€åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö°$I©©©©©©©©©©©©©©©©©©©©©©©©©©žS¤ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇH8©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘<?¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßs#q©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{&kÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí”]¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥gŒêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷·0C—©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™N(ªöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐV1†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‹4LÇýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàw q¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{$pÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤X¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£b–ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼7?•©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜I,°ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖc.„©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ˆ2[Ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæ„g§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§q}ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóªS ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¡]ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇD:©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©“C=¼ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚg({©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©+`ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéŠf¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨pp¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥fåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°$Iœ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Š3/†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©S¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇJ7©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™NC–©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©;A¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßt#q©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥g]¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{%lÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî–]¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{$"q¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥gŽëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø·3C–©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©;7Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™N,ªöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐV0†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©SI›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Š4NÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáy l§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥lb¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨v#qÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤S ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©€+'v©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£]–ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¼7?•©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©“?:©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©—I0°ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖd*©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ŸXN©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚-]Ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç†g§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§qg§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§q~äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôªN©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ƒ.*©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ŸXñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇF9Ž©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜I?•©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©’?=¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚh'v©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£]S¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©€+aÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí’]¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨v$ l§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥g‹éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°(I›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Š40†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©S¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌR2ˆ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™NC–©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ6JÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßu"q¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥g]¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{$nÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîX¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{%#q©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¤bŽëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼3C–©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘;8©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™N,°øÿÿÿÿÿÿÿÿÿÿÿÿþÐX/…©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©SIœ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‰3QÇþÿÿÿÿÿÿÿÿÿÿ{ p§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥gPPg¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§p {ÿÿÿÿÿÿÿÿÿÿS ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©,0”©©›5(|©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢]ÿÿÿÿÿÿÿÿÿÿ?”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©“C~¨©©©©©‡ :©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©—Iÿÿÿÿÿÿÿÿÿÿ)}©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢]_¦©©©©©©©©§lS ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚,ÿÿÿÿÿÿÿÿÿÿg¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§q G¡©©©©©©©©©©©©¢Ng§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§qÿÿÿÿÿÿÿÿÿÿN©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‰3'Œ©©©©©©©©©©©©©©©©”,.„©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©žXÿÿÿÿÿÿÿÿÿÿ8Ž©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©™Ix¨©©©©©©©©©©©©©©©©©©©‚?•©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘=ÿÿÿÿÿÿÿÿÿÿ'v©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£bW¥©©©©©©©©©©©©©©©©©©©©©©¥eX¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©€+ÿÿÿÿÿÿÿÿÿÿ]¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©{$<©©©©©©©©©©©©©©©©©©©©©©©©©©žC!q¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥gÿÿÿÿÿÿÿÿÿÿIš©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‹5%Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©”(1†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Sÿÿÿÿÿÿÿÿÿÿ1‡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Sr¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨~Iš©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‹5ÿÿÿÿÿÿÿÿÿÿs¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥cV¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥Zc¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨pÿÿÿÿÿÿÿÿÿÿ™Ÿ¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©€*9˜©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©?'v©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥–Žÿÿÿÿÿÿÿÿÿÿ™œœ¡¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘=‚¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ"8Ž©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨›ŽŽÿÿÿÿÿÿÿÿÿÿ™œœœ£©©©©©©©©©©©©©©©©©©©©©©©©©©žXl§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨xN©©©©©©©©©©©©©©©©©©©©©©©©©©ŸŽÿÿÿÿÿÿÿÿÿÿ™œœœœœž¥©©©©©©©©©©©©©©©©©©©©©©§qJ¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£Pg¦©©©©©©©©©©©©©©©©©©©©©©£”Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœ §©©©©©©©©©©©©©©©©©©©‚,/”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›4(}©©©©©©©©©©©©©©©©©©©¦˜Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœ¡¨©©©©©©©©©©©©©©©”C~¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‡ :©©©©©©©©©©©©©©©¨œŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœ¥©©©©©©©©©©©©¢]_¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§lS ©©©©©©©©©©©©¡‘Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœž¦©©©©©©©©¨q E ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢Lg§©©©©©©©©¤”Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœ¡§©©©©©‰3'Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©”+/…©©©©©¦™Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœ¢¨©™Ix©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚?–©¨Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœv^¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¦¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥^s‘Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa;›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚x¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©žB\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa$‡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜3.‘©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘'\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœal¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢OG¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨x\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaU£©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§re¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥Z\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa2”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ ‚©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›7\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa‚¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›50”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ"\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœae¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£SK¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§r\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaI¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨xl§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢O\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa.‘©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ$ ‚©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜5\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœax¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©?9˜©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaM¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥[[¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¦O\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|¡¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨~r¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœ£©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©”+'Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœ¦©©©©©©©©©©©©©©©©©©©©©©©©©©©ŸD?©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœŸ§©©©©©©©©©©©©©©©©©©©©©©©§l_¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœ¡©©©©©©©©©©©©©©©©©©©©©‚x¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœ¥©©©©©©©©©©©©©©©©©•/2©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœ¦©©©©©©©©©©©©©¢O~¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœ ¨©©©©©©©©©§r_¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœ¢©©©©©©©Œ"G ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœ¥©©©›7'Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœ¡U|¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©y\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœW¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¦l\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ<œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ%‡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜2\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœl¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢O\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœU¤©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§r\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ2”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‡ \Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ‚¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›5\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœe¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©£R\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœJ¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨x\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ.‘©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ"\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœx¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©?\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ_¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥^\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœEŸ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨~\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ'Œ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©”*\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœx¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ŸD\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœW¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¦l\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ;›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ$‡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©˜3\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœl¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢O\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœS£©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§r\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ0”©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ"\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ‚¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›7\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœe¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥Y\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœG ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨x\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ.‘©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘'\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœw¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©žA\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœ^¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¦e\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœœœŽ;›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨‚\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœœœ››Ž&ˆ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©”+\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœœ››ššn¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¡K\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœœœ›šš™™ŠS¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§l\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœœœ››š™™—•‡7“©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‡ \Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœœœ››š™™˜•“‘†¨©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©—3\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœœ››šš™˜–”‘•¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¢Oqn\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœœœ›šš™™–”’’¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©§rVŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœœœ››š™™—•“©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©Œ"@‹u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|œœ››šš™˜•“‘Ž™§©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©›8%}u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa|››šš™™–”’Ž”¥©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥[mu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa{šš™™–•’‘¡©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨xPŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa{™™—•“Ž›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‘(7‰u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaz˜–“‘Ž˜¦©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©ŸB"yŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœax”’”£©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥ebu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœau‘ ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©‚Mu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœau›©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©’,/ƒu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaŠ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© KuŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa‰©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¥h\Žu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©¨ƒC‹u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa†©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©—2+Žu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa†©©©©©©©©©©©©©©©©©©©©©©©©©©©©© NmŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©©©©©©©©©©¦Yu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©©©©©©©©¨›Ž‘?9‰u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©©©©©©©¡‘’•—™Š($}Žu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©©©©©¤•’”–™™šš›xgŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©©©¦™Ž‘“•˜™šš››œœšZOŽu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa…©©©©©©©©©©©©©©©©©©¨“•—™™š››œœœœœœ”>6†u\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa5”©©©©©©©©©©©©©©©©¡‘’”–™™šš›œœœœœœœœœœƒ! {Ž„-\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaQ©©©©©©©©©©©©¥•Ž‘”–™™šš››œœœœœœœœœœœœœrbŽI\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœak£©©©©©©©©§™Ž‘“•˜™šš››œœœœœœœœœœœœœœœœ™OFŒg\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa †§©©©©©ž“•—™™š››œœœœœœœœœœœœœœœœœœœœ’4-ƒŽ} \Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa8•©©¢’’”–™™šš›œœœœœœœœœœœœœœœœœœœœœœœœ€ qމ4\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaa•Ž‘”–˜™šš››œœœœœœœœœœœœœœœœœœœœœœœœœœ›hVŽS\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœab•˜™™š››œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜KBŒm\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa$~š››œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ+%}Ž&\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœa;“œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|mŽŠ=\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœaT™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›hVŽŽ\\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœarœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ•@8‰Žu\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœ—E*ŠœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽŽ‚)BŒŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœŒ+C–œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœG%}Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœ|[›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽbmŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœ›axœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽyPŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœ•?/Œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ‰18‰Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœ‰(G˜œœœœœœœœœœœœœœœœœœœœœœœœœœœœJ#yŽŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœrhœœœœœœœœœœœœœœœœœœœœœœœœœœœmbŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšX|œœœœœœœœœœœœœœœœœœœœœœœœœŽ} OŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ”<7œœœœœœœœœœœœœœœœœœœœœœœŠ;4†Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ…!R™œœœœœœœœœœœœœœœœœœœœœŽTuŽŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrnœœœœœœœœœœœœœœœœœœœœŽqbŽŽÿÿÿÿÿÿÿÿÿÿg›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜K&†œœœœœœœœœœœœœœœœœœŽ&GŽÿÿÿÿÿÿÿÿÿÿ|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’3;“œœœœœœœœœœœœœœœœŠ>-ƒŽÿÿÿÿÿÿÿÿÿÿ7œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ€[šœœœœœœœœœœœœœœŽbqŽŽÿÿÿÿÿÿÿÿÿÿS™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœhrœœœœœœœœœœœœœŽuVŽŽÿÿÿÿÿÿÿÿÿÿnœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜J*‡œœœœœœœœœœœ…-@‹Žÿÿÿÿÿÿÿÿÿÿ&…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ*E–œœœœœœœœœŒG%}Žÿÿÿÿÿÿÿÿÿÿ;“œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|^›œœœœœœœŽfmŽÿÿÿÿÿÿÿÿÿÿ[šœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›azœœœœœŽ|PŽŽÿÿÿÿÿÿÿÿÿÿrœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ•?/Œœœœœ‰27ˆŽÿÿÿÿÿÿÿÿÿÿ,‰œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ‰&I—œœL"yŽŽÿÿÿÿÿÿÿÿÿÿE–œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrh›mbŽÿÿÿÿÿÿÿÿÿÿd›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšU"!NŽƒŽÿÿÿÿÿÿÿÿÿÿ|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’5/ƒŽ}\Žÿÿÿÿÿÿÿÿÿÿ/Œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ…!uމ3\ŽÿÿÿÿÿÿÿÿÿÿO™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœn\ŽŽO\Žÿÿÿÿÿÿÿÿÿÿh›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜LCŒm\Žÿÿÿÿÿÿÿÿÿÿ#€œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ3,ŽŽ$\Žÿÿÿÿÿÿÿÿÿÿ7œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|mŽŠ;\ŽÿÿÿÿÿÿÿÿÿÿT™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœhVŽY\Žÿÿÿÿÿÿÿÿÿÿnœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ•B:‰Žq\Žÿÿÿÿÿÿÿÿÿÿ&…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ*$}Žƒ)\Žÿÿÿÿÿÿÿÿÿÿ<”œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœxgŽ‹?\Žÿÿÿÿÿÿÿÿÿÿf^›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšYRŽ_\Žÿÿÿÿÿÿÿÿÿÿ™œhrœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ”>6†Žu\Žÿÿÿÿÿÿÿÿÿÿ™œœ•B-‰œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ…#uކ1\Žÿÿÿÿÿÿÿÿÿÿ™œœœœŒ)G—œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrbŽI\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœxa›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšVKg\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœšZ|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’4-ƒŽ} \Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœ”>0Œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ… uމ3\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœ…#Q™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›n\ŽS\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœrhœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜KB‹m\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœ™O#€œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ2+ŽŽ%\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœ’49’œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|mŽŠ<\Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœZ›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›ŽVŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœ›nrœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽuVŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœ˜K&…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽƒ)BŒŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœ0C–œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœG+Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœ|[›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœbmŽŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœ›hxœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽyVŽŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœ•@/Œœœœœœœœœœœœœœœœœœœœœœœœœœœœ‰19‰Žÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ)G—œœœœœœœœœœœœœœœœœœœœœœœœœJ#}ŽŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœxhœœœœœœœœœœœœœœœœœœœœœœœœŽmgŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšX|œœœœœœœœœœœœœœœœœœœœœœŽ} OŽÿÿÿÿÿÿÿÿÿÿ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ”=7œœœœœœœœœœœœœœœœœœœœŠ:5†Žÿÿÿÿÿÿÿÿÿÿ†œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ!S™œœœœœœœœœœœœœœœœœœŽQ zŽ~ÿÿÿÿÿÿÿÿÿÿG—œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrnœœœœœœœœœœœœœœœœœŽqbŽJÿÿÿÿÿÿÿÿÿÿhœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ™M$€œœœœœœœœœœœœœœœŽ&DŒmÿÿÿÿÿÿÿÿÿÿ|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’3;“œœœœœœœœœœœœœŠ>-ƒŽ} ÿÿÿÿÿÿÿÿÿÿ7œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ€TšœœœœœœœœœœœŽ\qŽŠ;ÿÿÿÿÿÿÿÿÿÿR™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›hrœœœœœœœœœœŽuVŽŽTÿÿÿÿÿÿÿÿÿÿnœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜J&…œœœœœœœœƒ*@‹Žqÿÿÿÿÿÿÿÿÿÿ$…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ+D–œœœœœœŒG%}Žƒ&ÿÿÿÿÿÿÿÿÿÿ;“œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|[›œœœœŽbmŠ>ÿÿÿÿÿÿÿÿÿÿ[šœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›axœœœŽyPŽbÿÿÿÿÿÿÿÿÿÿrœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ•?/Œœ‰28ˆŽuÿÿÿÿÿÿÿÿÿÿ{*‰œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ†&MJ#}ŽŽ‚+{ÿÿÿÿÿÿÿÿÿÿþÐXD–œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrbŒGQÇþÿÿÿÿÿÿÿÿÿÿÿÿú¼3[›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšXNŽb,°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîxœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’7/ƒŽyŽëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßu/Œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ…!uމ2nÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌRI—œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœn\ŽKJÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°(h›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜MCŒm¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí’|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ3,ŽŽ} ‹éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚh7œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|mŽŠ;aÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇFSšœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœhVŽŽV=¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôªnœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ•C:‰Žqñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç†&…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ*$}Žƒ(~äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖd;“œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ|mŽ‹?]Ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¼:[›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›aPŽŽb0°ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤rœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ”?7‰Žu–ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáz,‰œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ‰&"yކ0qÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐXE–œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœrbŽHNÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø·3a›œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœšVKŽg,ªöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî–|œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ’5-ƒŽ} Žëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßt/Œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ… uމ3lÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌRQ™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›n\ŽRJÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°$hœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ˜KB‹m¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‘#…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒ‚Ž}"ŠéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚg9’œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŠ<`ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇDT™œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽ\=¼ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóªrœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽuñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç„&…œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœŽƒ)}ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖcC•œœœœœœœœœœœœœœœœœœœœœœœœœœœœœŒF[Ìþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼7[›œœœœœœœœœœœœœœœœœœœœœœœœœœœb,°ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤rœœœœœœœœœœœœœœœœœœœœœœœœœœŽu–ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàw-‰œœœœœœœœœœœœœœœœœœœœœœœœ†1pÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐVG—œœœœœœœœœœœœœœœœœœœœœœINÇýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷·0a›œœœœœœœœœœœœœœœœœœœœg(ªöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî•|œœœœœœœœœœœœœœœœœœœŽ} êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßs0Œœœœœœœœœœœœœœœœœœ‰4kÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇHQ™œœœœœœœœœœœœœœœŽS?¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö°$hœœœœœœœœœœœœœœŽm¤ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè‰$€œœœœœœœœœœœœŽ&€åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚe;“œœœœœœœœœœŠ=^ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁDT™œœœœœœœœŽ\=·úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¤rœœœœœœœŽu–ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæ„&…œœœœœƒ*|âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐYD–œœœGQÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼7[›œŽb,°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï|uŽìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàvoÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌTLÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°(¤öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí“‹êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚjcÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÇF?¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö°$¤ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè‡äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚd]ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁA:·ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¤–ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåƒ{âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐXQÇþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¼3,°øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîŽëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßunÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌRJÁüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷°(¤õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí’‹éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚhaÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÇF=¼üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¤¤óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/tests/logo_rgb555.raw b/tests/logo_rgb555.raw new file mode 100644 index 0000000000000000000000000000000000000000..3feb53e391b8c159aa67cd1ccff72a8ff9ac5442 GIT binary patch literal 153600 zcmeI5KWH6C9>@3XYi#Vo2MVZ&3|FLxu?q)eP+>g?$c2x%a3O;WyD-l#9IQfx4DTSF z)FfDi3k!U;bVWjZkbnigHdd44Ql!u`svTe910N)Xgl~UuJ=)pb`9I(N^WGbTy}L8J z`)22}^JnKfzu&z7>V5bNIS_InB<8^E zolpO~6fH%sKmPsJBtG9XKht34+l$1O{e69L;odao$0R-bi?!=l8CQOL@ygTHNqWv{ ze3pa3kIU<)d8+*W`svUbkMmoxaPKdl@;pWR=RWx(w8l=o)n?y}!OFiDL_9@d-^~wJ znoVu^b(__~X{eIXyGGGhWaBdNZ`fbrF>R&dvMZd7#xt@P=E@+BX^5pNGXnpgp zoP4eenj%l3nthqp=flnB+Mp>`!4O*t zP0^k3!o4rOv_78kn`mpqmiW@&^Y~PUkN4RRnxZ{pl-5VwHlmrh_kk%P22)k*#si6iv!8QtLb48Rlwb#+Ba=<7=>* zI%tY&!h;o@*0&d}Y1uN)PvSjTO&v5vG2^GJ7hzi8M)a<;D6N$lResy+eiU!O7@t`T znj%kGZDnBBx9vv{6fG{#w75Ul-R$&1jQb~oWdtKUd*|H9uFsC6`0Uf2UE^B0$d`_X z@p)Kl95luEUkz4%HnuVl6U{<*qDx+E8Sgb!XoJyB3$x6m5Im znRp#kQ!hmqul#N5>=X|Mzux?5CM$bBd;RFzhml7SE7!2Y_z|o%-ahlgR9QwKwZ7uW zqbpC*b-Tb(%yUy>8G+RLsKxDBeFupss>9ae9av5M^Mue~Fcv43(N$Y#;YL6t48>Wz3Fzk$`%lQfE1 zz1F9qf{Y_g5jToC36>E^D+9IGhvcZb*IA&ZIPR7avv*FyMjlPHJ{1>a98^;rQ*UcU zk7BH6=YBN?}`gY(KYMQ|2jR;cTlf8AJ4|f!OC0U?3#~&UoN(@A=j;ET*`X{z3wtn zQ(S1q+ZxiN7>zvQv_997hrMVSR*J{nG6Jjh>8%Xpr6nITj4yc2e?*RgA~nUIYV>`I z)cW?Khp;j;*L?=C?d?a89OqBx-?a4T$(U)1NRMJ-yFO7a>BF$fU3*hjrKX70`jDk$ z3s_26U$%WUOPaE(G)1IGv9`8yj4j(d&5%S*|q8P7It^~mE@ zA7l@RwTwb&ifF#rwg~C@^MPV!$l30rmbS*ec8W;8SVbJ^xpyzpd&7Da{{||>=x>H+ z9ryYL$M3Y$?bZ5r3|d@K4b8${0j+wQ9KrM9 z+hn>`HRoN3H>_UwAnbLGIDFV3SFRz0z8aaoBKZ5NZ7wyHPDCJt*EF&~@#wmaX$ zcrIC+LX<0ZVQ&2f@zb5J!2jf2*KejgpHfUebTL`kXSWuER@27SUGK6nmoeUo`Nxo*aa>kgw;p(kl|2d_a|6kr3 zBXw)B*5}5{{wlPlD7Se&D`eYD{hV>`m1=72Du34;M;`4-%CA`Lu2kF_7hBw{>^9A} zSW_eCjhSeDaw^!E>P9g|EpD6mQdwRc^|+AM>!kHz3Hje`3pR?m6s4M?ti^2`Ut+u* z<5tPWu6)xgwIQyosb8V)<(S9P*tw`Tm1o<0{mj~8l$v@T=(*^2mvnp^-Cs{0rz!rD zcw;pAGka(7{bxot-6Htz6xQ6<=eFvMLvB{=n+WI8h1Rq~tUfwje6b^sqIq1U~Bvjuhw{4_+m#McQy0aNqrKPNVhPbQOs%J zi`Du}a~u6exvh6L>3q?(rJd%3)S~1qf~xO3*?iHx9dV1R%3o}c&R$cTT)x<^6`wg5 z+tAjS{~}YpS!vv4@?E#EGSK&V5Ob!mbGghdBPNmWBk1=DZnO|PB5KwXm_)v7vEMvB zR-%z}mebl2GnYC|-QWi_>T<|E9^2x|=Hsf<7x=34$2Ar^d(zzo zJn(fTD8H_m`MBcr1is>YaSd&DK5jYHfp0la+(WSQoe@5i0$+EU`77HqAD2&8;LGQR z>%N~-&&Dm-7BL@}JxSopa>9MJ}x~`;Oownu0;CY!OzDHe0}JmX1b=O zx0?C5q5QfLM*G{SYCdk@>%td1@@T5{xui7kwaqoW?;YC|*qk5u+T<2m>pSJ;Tf-#f zfv-s}(K%SHudeyHfv*|gP0N+7vM<{5UY+xC17AH~tkzfWeB8iS&9_ZjpE{-D*uYnu zFBFQ_`f#fs$Qk!kyOYLlyV_2;Z;m+Z3VON7Tk>vQ2feSC@SVe*%)sdzV<2ioZGQL!DH-YO7 z*5!LA&ro$VO?;{3GQPu@?4wV2kSiv*TN$Vb`Nd5O-;6Ak-C^>#6+Z;l%648|{g|a! z_l3X$3dK11lUaxA}`Ic+tA+%OLicfd! z%bw2_JBfdmY%Q{B=38dFpOoC9=c{sgGz~#p8R)6sjXp|7WHP$bT|ZM>oBpMBGPcF_ zUsX)cGk?bBajl#Yp62qKr+WlkYpQ;&?^Ne`uG})h)64h9sO(b7#eN6jR`tx6PWjPJ zvQ9|8R%UdkxqiMe>L(LlT#MW5)~)r?>>wFiqCAb|w?7)wSsw94eg{3NUF&-!XmPW$ zJB@r(wp7Sr04EQgk#;G#@_sd>Pr|)|GFsyZfQVrQBzCrTyyuQmrpf&g^J< z`0}+gk#OPL>(Y!$>fKzZt^A(Xe&ec02fq4mTXx3TF4G}sHqfScQMB{RVI#--b;0})BDlPsHTvSGYg*L=-SlJz3$MC*TNkC`E?mrV$1$E z6)Pw&Dr#k(Y_{(^N0PKY^N~k=`CT!tRmPt$Bg%SP?3j8nW&Kyx;$}R{dxtTNd$|2w z^ZE|T(;mibRNO2rlfbv1m7hDjU6bM;n3!gCGr}y4 zT0a_{5`71i8LC5$3~R_|&=&W5$JSv|%5O$^X~eqE@lHeDb@(sb{CAL=XgT&UR`+mh zwLV#mOyR@$BW_fjp2g;GQuwN$xj)L2okWF8Emq3J>_cRun19b%8K}sa#69#JE1ev^ z#4zPZ+jNf)TN*JwpVXT6EM-@$6-F^#wLTf?^PM!+?*C5?-!u>U$CPQ0{qg%t(f3JB zEhAjOmtcfxr231_>5kaSpiE95G6bp{ zyzFEI5l)W?@{{cto_N}VFp*f*Z7u`d5q@y`vlK9gs0 z?dO@?dnu}yFEQ4&#%AeG&wAj|8msuJ1+`{RTyb~n0X<@LT^o~N(;rw zh~~qa;!8O^jQvOR*wfGqA3Mgn{42&I(~6kW#hzTfZIUnX*aDV`O{>OO z<-9kyCY7frjVa$-6w)+bV(dFtDtj*S8*EyNb@`XZ4->C~xV{2%PFMESsy%nUGaqIh zo93tLJe@kLdV*ry%VdU+>bF>&p6`C*&-5jzAGj1f0M6;6v=^USeC*D5DRS%Au>37< zUFJ%OpJ^%a+plkp^?Y$NsgZNKSh{7;o)7ooOLwyG*A%((#}9#HLb_2*mQSMXK6I>Y z9yp6SOKqN`?8uid-506O&K>($kfqo>T&*c)IhEf-YJE!)Qen=g(<~nld`X=(@7M6< zRlJXEjrXLjaXz=$(H7A6j=9#ye%)qUCtvz4(|(PZX)zQzig``=-6YD(rnEj$T6AG` z^QGT2>DLrV%8zlHBKf%~YKr;%YgX&ar^W233BL53<(!lg)WsY^`#Cpq-%VLA(#Rw8 zyOtI8eKz>nxZLV7tgV>@=FSH zv7a~Id?^=cjaOHq{ltGmKY5>Ze{JDQ_P=(X_f$`| z4)wo)&=irLV{PViwTW-)$wI}=CayiBm^AXZZ#d4M)xEMkQ_rz!UbTxaeUDb5&X&J( zT|!(eBYf@pij-{?=JxTWoX7QR(3+xMYrN7a@^L@5^&H#Q@|%_{q<8#gG)1)5XX`n( z-F%5MqF=*WY;MA*3Vh%h*W2hn&MG1YSb5gonW=TT~6z>;mXc! zJ6|I0(yw99m*2YkU&!9LY)@nvQKif6pFe5ppHSYf5v4~RhO~^3<(pl&&B&wr*(la#g#i8C=#1+5 zQmGR4Ys}JDK1*)#X;Xgf{UepR>$Sde>g6G}{XF@d_?UY5QqB*7KK&40WXrs4LvYrl z)X%g1b)KSpzdpXi7-#WGc8aDggt%PW<|ltX`ETe0`pU$`wVx+v%E#2pm%PYk-tqZ# zxa`xIlbD@JD9_7ge+cy)>prK;EXV5ROF2*8@y$}FKg)d-(}rnwF4A-Cd9M`$^m#*P zG{Kh`H?JvX%*^*}wLUom|2bXqd-E|(@g>GcP0`+qtT|OWvuI_&=b`OBjk)@-f@k)t zP4cCh+D@HSJ(I1bXwKJVl}LF?{XNH~DVP5OAJZ&fD#cBCku~QlvNGWF(0m^`r_1bD z-T9h%c_f1Rzp@pMS?Wb+nOa7e@y+b|M89PdwjJF7j)^|3!T%)lWTEG0at2OQH1oEm zr^s@#&7NcZ`*~IHrCjE7 zQd~C8L#tVtlK3{iN+f&Bid%Z?bZ@Ikd{unWUS#nrQ<6uq{}{KZy1aBqj)k#>r<&qQylxczhqMfUT)n;)z&cBb2fdw+qo##l{JX7Opu z%jSHvH7Ty2ckYuvZkaO8pLa0$ae4cUO)kjKMSGFOX^QeRXEE53M?0-AOGSBa{q*DO z`W81&HGlMC?fTX7eceLZt0}6U2Wd@;T@C!=m8YwDT5d;!m2WSqa=<2Tyu8S|S{caN zW89psuP-j#bE7G~YWB{jf41SMI#;gFih5MKFr21XOtZU{L76Yon)LO@zdN?LVzz1M z!QhAG_0z>Xa62}eE2SgL;*pjS?0L|hV_~a-pIE(S{vD*^DT;f#`lruX4)|`{>qWL* zS|6X!|GkW9aYbxd*vX^Q9;*I(;ne80SaZE+b-(f0RSuUk5b>8GzDSBXTf z2L6-L$fJmqYuG>69$)XDVDFaSwjEw%k*h=^wZ5h3`qk=MTowPp3QkjOc4f*PsFi`8 z=U8>w_<6y8dg{&HJtls=f}X zDPk=ncuf(j_3^7j7FpRIyK8+_lV$fOO%XMUiMCTrHP^}2`WS<%x5(BQZ5iF3AV)E6EhFssBCQNmc74d)ZNt4tQ~YVhq(0N1 zW2Y&a@^xD!Qk>fDGi}oP>f(f(a@ox#e_HQOob`TDF9 zSuDTbwpi;!a#Y=G_RcxjD5hRh)bafu_KkaTt_mvyRZg}wu1-x+&KK&d{e-VwUt3wZ zrt9hIMc62&YGq0pU!>>QGmF(*8Mx+ilh+Mas<(^~^Tla>lQ;5+eIx$3RjsC2rwXYl=Do;fe7E8~*r@W`%YU`@ zZ=%kD$&X#Q_a)4~OXh8j@x@sgs6C2JJ}37lL~Dvi$@~xU^BA-~cP8j7vEJ6!pjuxW ztqjolU&sBBnqqMT(e>EHqgWkzHLkyb)D&Hrvg_J!WiXDEk>1uADf_LzN3n6t`?}JM z)D-R6E=4GhVs+)$IQ~vz88Pp|#`l_Uz#hfMG4Jb2Gt%3d3HPA&)kT*54pLK86YdAC zFY)}|#2?bznvC%zSs66J$oDsqnqrZ0(E5DoV6IOz#knFI-{aS_LF>cNLEHuDZH?ZH zNw+dUv_6(wŒ´ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù™Á.H''''''''''''''''''''''''''''''''''''gkmÔÖÓüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûëíê”—''''''''''''''''''''''''''''''''''''2s–Ì÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£5''''''''''''''''''''''''''''''''''''ˆæêíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûóøú´¸»)1<''''''''''''''''''''''''''''''''''',Sr½èÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è_~,'''''''''''''''''''''''''''''''''''!*4¬ª®ôöóüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''LeºåÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è[y,'''''''''''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÔÖÓ`df''''''''''''''''''''''''''''''''''''8Q¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¨ÏŒ´ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£3''''''''2s–Ì÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù™Á.H''''''''''''''''''''''''''''''''''''gkmÔÖÓüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìïë’–™''''''''''''''''''''''''''''''''''''2s–Ì÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù™Á,F'''''''''''')>Œ´ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£5''''''''''''''''''''''''''''''''''''ŠŽ‘çêæüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû÷ùö´¸»,5@''''''''''''''''''''''''''''''''''',Sr»æÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù³ßF_''''''''''''''''B]®ÕÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è_~,'''''''''''''''''''''''''''''''''''%-8¬ª®ôöóüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''mqt×ÜÞüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûîóö¡¥¨ .'''''''''''''''''''''''''''''''''''.f„ ÇóÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùžÆ5N''''''''''''''''''''''''''/I’³ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÌ÷s–/''''''''''''''''''''''''''''''''''''’–™îñíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûø¸¼¿17>''''''''''''''''''''''''''''''''''''Le¹äÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¹äLe''''''''''''''''''''''''''''''F_²ÙÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è[y,''''''''''''''''''''''''''''''''''')1<¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÔÖÓaeg''''''''''''''''''''''''''''''''''''3MÅÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðm‹.''''''''''''''''''''''''''''''''._~ÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É8Q''''''''''''''''''''''''''''''''''''X\_ÈÍÏüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûäé낆‰''''''''''''''''''''''''''''''''''''"8€£ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùŒ´'<''''''''''''''''''''''''''''''''''''"8€£ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùŒ´$:''''''''''''''''''''''''''''''''''''zãåâüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûñô𬪮 /'''''''''''''''''''''''''''''''''''-_~ÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¥Ë8Q''''''''''''''''''''''''''''''''''''''''3MÅÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðm‹.''''''''''''''''''''''''''''''''''' .™ž îóöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûúüùÅÇÄ@FM''''''''''''''''''''''''''''''''''''F_±ØÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è[y,'''''''''''''''''''''''''''''''''''''''''''Le¹äÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¹äLe''''''''''''''''''''''''''''''''''''7=D¸¼¿úüùüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÙÛØdhk''''''''''''''''''''''''''''''''''''/I’³ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÌ÷s–/''''''''''''''''''''''''''''''''''''''''''''''.f„ÈôÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùžÆ5N''''''''''''''''''''''''''''''''''''^bdÌÑÔüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûëíꎒ•''''''''''''''''''''''''''''''''''''2s–ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù’³,A'''''''''''''''''''''''''''''''''''''''''''''''''''<†©ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£5''''''''''''''''''''''''''''''''''''‡‹Žæêíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûõøô¬±³!*4''''''''''''''''''''''''''''''''''',[yÁíÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¬ÓA[''''''''''''''''''''''''''''''''''''''''''''''''''''''Œ´ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£5''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''2s–Ì÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù™Á,F''''''''''''''''''''''''''''''''''''jnp×ÜÞüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìï뙞 ''''''''''''''''''''''''''''''''''''2m‹ÉõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù™Á.H'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')>Œ´ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÌ÷ y3''''''''''''''''''''''''''''''''''''ŠŽ‘çìîüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûø¸¼¿,5@''''''''''''''''''''''''''''''''''',SrºåÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù³ßIc''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''F_®ÕÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è_~,'''''''''''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''''''''8Q¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðf„-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',[yÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùªÑ?Z''''''''''''''''''''''''''''''''''''KQXÅÇÄüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûw{~'''''''''''''''''''''''''''''''''''''<Š­ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù€£!7''''''''''''''''''''''''''''''''''''cc''''''''''''''''''''''''''''''''''''!7€£ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùŠ­'<''''''''''''''''''''''''''''''''''''w{~üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''.f„ ÇóÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù ŸÇ3M''''''''''''''''''''''''''''''''''''¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è?Z''''8Q³ßÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù³ß/I'''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''''''''''''''''''''''.†©ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÉõc''''''''YxÈôÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù•¼/'''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''''''''''''''jˆË÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù°.'''''''''',{ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùn‘''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''''''''''''''',{ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÌ÷f„''''''''''''''''''''''[yÉõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù°.''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''''''''''''''[yÈôÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù•¼.''''''''''''''''''''''''.†©ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÊöc'''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''''''''''''8Q³ßÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù®Õ)>'''''''''''''''''''''''''''''<¢ÉÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½èD]'''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''''''''''2•¼ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðLe'''''''''''''''''''''''''''''''' D_½èÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É5'''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''_~ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùq”''''''''''''''''''''''''''''''''''''q”ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùc''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÊõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù›Ã3''''''''''''''''''''''''''''''''''''''/°ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÌ÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù ·ä8Q''''''''''''''''''''''''''''''''''''''''''.C®ÕÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðSr''''''''''''''''''''''''''''''''''''''''''''''LeÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÄðÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù†©,'''''''''''''''''''''''''''''''''''''''''''''''''t—ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÉõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É5''''''''''''''''''''''''''''''''''''''''''''''''''''2•¼ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¹ä9S''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Yx ÇóÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÏùÏùÏùÏùÁíB]'''''''''''''''''''''''''''''''''''''''''''''''''''''''.C®ÕÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÄðÉõjˆ'''''''''''''''''''''''''''''''''''''''''''''''''''''''2šÂÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù•¼''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''''''''''''''''''''''''''''''''''''''''''k‰Ë÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù†©'''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''''''''''''''''''''''''''''''''''''''''JdÂîÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É5''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''''''''''''''''''''''''''''''''''''''-B¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è?Z''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''''''''''.†©ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÊöc''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù''''''''''''''''''''''f„Ë÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù°.'''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù''''''''''''''''''"8¢ÉÒÿÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÁíB]'''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''',{ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùn‘'''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''''Yx ÇóÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù•¼.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù'''''''''''''8Q³ßÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù³ß/I''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù''''','''''2•¼ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðOn''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù''','','',t—ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù{''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî±Ø','','''IcÁíÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÒÿ¢É3'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÁíÁí±Ø''''''-B¨ÏÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù ·ä8Q'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÁíÁí½è½è®Õ'','/ ˆ«ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÉõ[y'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÁí½è½è½è½è¬Ó'''f„ÊõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù†©,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÁíÁí½è½è½è½è¹ä¥Ë'B]¹äÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¥Ë'<''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÁíÁí½è½è½è½èºå¹ä³ß¥Ë ŸÇÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è'''''''''''''''''''''''''''''''''''''''''''''''''''''''On ­Ô®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÂîÂîÁíÁí½è½è½è½èºå¹ä³ß±Ø½èÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÁíF_'''''''''''''''''''''''''''''''''''''''''''''''''''''''-B›Ã®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''šÂÁíÁí½è½è½è½è»æ¹ä¶Ü±Ø¹äÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùq”'''''''''''''''''''''''''''''''''''''''''''''''''''''''2 ‡ªµÛ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''™Á½è½è½è½è»æ¹ä¶Ü³Ú³ßÊõÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù•¼/'''''''''''''''''''''''''''''''''''''''''''''''''''''''c®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''™Á½è½è½èºå¸Ý³ß±ØÁíÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù³ß1K'''''''''''''''''''''''''''''''''''''''''''''''''''''''B]ªÑ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''',˜À½è»æ¹äµÛ±Ø½èÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÄðQp''''''''''''''''''''''''''''''''''''''''''''''''''''''')>•¼±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''',''•¼¹ä¶Ü²Ù¸ÝË÷ÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù{'''''''''''''''''''''''''''''''''''''''''''''''''''''''-{µÛ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''',''''’³³Ú³ß ÇóÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¢É3'''''''''''''''''''''''''''''''''''''''''''''''''''''''_~®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''',''''',’³ÁíÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùµâ8Q,''''''''''''''''''''''''''''''''''''''''''''''''''''''8Q¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''',''','''¬ÓÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù Çó[y'',''''''''''''''''''''''''''''''''''''''''''''''''''''!7’¹®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''',''''''',,ªÑÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¤,'''''''''''''''''''''''''''''''''''''''''''''''''''''',r•±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›'''''''''''',,''''¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù¥Ë'<'',',''''''''''''''''''''''''''''''''''''''''''''''''''Sr ­Ô®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ’¹''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîx›''''''''''''''''''¥ËÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏùÏù½è•¼±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ/''''''''''''''''''''''''''''''''''',¤ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ²Ù ‡ª.'''''''''''''''''''''''''''''''''''-{²Ù®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èm‹''''''''''''''''''''''''''''''''''''$:šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø›Ã&=''''''''''''''''''''''''''''''''''''c®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äJd''''''''''''''''''''''''''''''''''''B]²ÙÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ«ÒF_''''''''''''''''''''''''''''''''''''A[¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¥Ë(=''''''''''''''''''''''''''''''''''''f„½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Øjˆ''''''''''''''''''''''''''''''''''''$:’¹®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ.'''''''''''''''''''''''''''''''''''/ ‡ªÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø‹®2''''''''''''''''''''''''''''''''''',{±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''€£ÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½è[y''''''''''''''''''''''''''''''''''''-B¥ËÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø ŸÇ.C''''''''''''''''''''''''''''''''''''Yx®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''$:šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹ä•¼±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''''''''''''''''''Vt»æÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ/'''''''''''''''''''''''''''''''''''.¤Áí²Ù ‡ª.'''''''''''''''''''''''''''''''''''-{µÛ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''''''''''''''''''',{ÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èjˆ'''''''''''''''''''''''''''''''''''')>(=''''''''''''''''''''''''''''''''''''_~®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''''''"8šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äA[''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''8Q¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø›Ã'<r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''''''''9S®ÕÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¥Ë(=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!7’¹®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕªÑžÆÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù?Z''''''''''''''''''''''''''''''''''''''''''''''''''''''''3M ŸÇ±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±ØÅ,F'''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''''''''''''''''''''''''''''''B]²ÙÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîšÂ5''''''''''''''''''''''''''''''''''''''''''''''''''''2 ‡ª±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ«ÒIc'''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''''''''''''''''''''''''''''''''e‚½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¤,'''''''''''''''''''''''''''''''''''''''''''''''''k‰µÛ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Øn‘'''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''''''''''''''''''2 ‡ªÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîºå Qk''''''''''''''''''''''''''''''''''''''''''''''F_«Ò®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø‹®2''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''''''''''''''''''''-B¥ËÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ3M'''''''''''''''''''''''''''''''''''''''''',A›Ã®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø¥Ë 1G''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''''''''''''''''''''''''''''''''''Jd¸ÝÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî•·2''''''''''''''''''''''''''''''''''''''2€£±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ ­ÔLe''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''€£5''''''''''''''''''''''''''''''''''''t’ÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èm‹''''''''''''''''''''''''''''''''''''f„±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕµÛt—,'''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂî¤,'''''''''''''''''''''''''''''''''''2޶ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äLe''''''''''''''''''''''''''''''''B]¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø’¹5'''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîºå Qk''''''''''''''''''''''''''''''''''''8QªÑÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¥Ë)>''''''''''''''''''''''''''''$:’¹±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ¥Ë''''''''''''''''''''''''''''''''''''e‚½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÁí ‡ª.'''''''''',r•²Ù®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õf„''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ.'''''''''''''''''''''''''''''''''''.¤ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½è[y''''''''Qp ­Ô®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ²Ù ‡ª+'''''''''''''''''''''''''''''''r•®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èc'''''''''''''''''''''''''''''''''''')>žÆÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî²Ù›Ã®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî•·2''''''''''''''''''''''''''''''''''',¤ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø ‡ª.'''''''''''''''''''''''''''''''''''+€£²Ù®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èm‹''''''''''''''''''''''''''''''''''''$:šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø›Ã'<''''''''''''''''''''''''''''''''''''c®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äLe''''''''''''''''''''''''''''''''''''B]²ÙÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ«ÒF_''''''''''''''''''''''''''''''''''''A[¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''¥ËÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî ŸÇ(=''''''''''''''''''''''''''''''''''''f„½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õc'''''''''''''''''''''''''''''''''''''<•¼±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕÅ'''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''Yx½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ.'''''''''''''''''''''''''''''''''''/ ‡ªÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø‹®2''''''''''''''''''''''''''''''''''',{±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ[y''''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû''''''''''''''''''''',¤ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½è_~'''''''''''''''''''''''''''''''''''',AžÆÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ ŸÇ.H''''''''''''''''''''''''''''''''''''Sr®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ²Ù ‡ª.'''''''''''''''''''''üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû'''''''''''''''''''''''$:šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹ä›Ã±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø¢É5N''''''''''''''''''''''''''''''''''''w{~üÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''''''''Sr»æÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ/''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''-{µÛ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕYx''''''''''''''''''''''''''''''''''''KQXÅÇÄüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûø¸¼¿,5@''''''''''''''''''''''''''''''''''''qŽÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èm‹''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''_~®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø{,'''''''''''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìï뙞 ''''''''''''''''''''''''''''''''''''"8•·ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äD]''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''8Q¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø•¼'<''''''''''''''''''''''''''''''''''''ŠŽ‘çìîüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÛàâptw''''''''''''''''''''''''''''''''''''9S®ÕÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¥Ë(=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$:’¹®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕªÑ•¼±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ¥Ë;P''''''''''''''''''''''''''''''''''''mqt×ÜÞüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''''''''Vt»æÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂ.''''''''''''''''''-{±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ[y''''''''''''''''''''''''''''''''''''GMTÅÇÄüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû÷ùö´¸»,5@''''''''''''''''''''''''''''''''''',x›ÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî½èk‰''''''''''''''''[y®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø€£-'''''''''''''''''''''''''''''''''''%-8¬ª®ôöóüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìïë’–™''''''''''''''''''''''''''''''''''''"8šÂÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¹äA[''''''''''''8Q¥Ë®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø›Ã'<''''''''''''''''''''''''''''''''''''ŠŽ‘çìîüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÝàÜptw''''''''''''''''''''''''''''''''''''9S®ÕÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî¥Ë'<''''''''!7’¹±Ø®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕªÑ¥ËÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî ­Ô¢É®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø›Ã)>''''''''''''''''''''''''''''''''''''…‰ŒçêæüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÙÛØdhk''''''''''''''''''''''''''''''''''''F_¹äÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ«ÒJd''''''''''''''''''''''''''''''''''''[_bÌÑÔüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûúüùÅÇÄ=CJ''''''''''''''''''''''''''''''''''''e‚½èÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ør•''''''''''''''''''''''''''''''''''''7=D¸¼¿ùûøüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûñô𬪮 /'''''''''''''''''''''''''''''''''''2޶ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø’¹2''''''''''''''''''''''''''''''''''' .™ž îñíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûçêæ‚†‰''''''''''''''''''''''''''''''''''''-B¥ËÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø¥Ë 1G''''''''''''''''''''''''''''''''''''záãàüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÔÖÓ`df'''''''''''''''''''''''''''''''''''' QkºåÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕVt''''''''''''''''''''''''''''''''''''X\_ÈÍÏüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûø¸¼¿17>''''''''''''''''''''''''''''''''''''qŽÁíÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®ÕµÛ{,'''''''''''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûñô𡥨''''''''''''''''''''''''''''''''''''2޶ÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ±Ø’¹5''''''''''''''''''''''''''''''''''''’–™ìïëüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÛàâtxz''''''''''''''''''''''''''''''''''''8QªÑÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂîÂî®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ®Õ¥Ë''''''''''''''''''''''''''''''''''''qŽÁíÂî®Õ±Ø{,'''''''''''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìï뙞 ''''''''''''''''''''''''''''''''''''"8šÂ’¹!7''''''''''''''''''''''''''''''''''''ŠŽ‘ëíêüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÝàÜtxz''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''kor×ÜÞüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûûýúÈÍÏOU\''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''GMTÃÀÄúüùüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûóøú¬±³!*4'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' /¡¥¨ôöóüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûëíꎒ•''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ˆçêæüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÙÛØgkm''''''''''''''''''''''''''''''''''''''''''''''''''''''''''`dfÌÑÔüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûûýúÅÇÄ@FM'''''''''''''''''''''''''''''''''''''''''''''''''''''':@G¸¼¿úüùüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûôö󬱳&5'''''''''''''''''''''''''''''''''''''''''''''''''' .¡¥¨ñôðüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûçêæ‚†‰''''''''''''''''''''''''''''''''''''''''''''''''zÞâåüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÙÛØaeg''''''''''''''''''''''''''''''''''''''''''''X\_ÌÑÔüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûøÃÀÄ=CJ''''''''''''''''''''''''''''''''''''''''5;A´¸»÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûîóö¡¥¨ .'''''''''''''''''''''''''''''''''''''’–™îñíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûáæéƒ†''''''''''''''''''''''''''''''''''w{~áãàüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÌÑÔTXZ''''''''''''''''''''''''''''''KQXÅÇÄüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûùûø¸¼¿,5@''''''''''''''''''''''''''%-8¬±³÷ùöüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûìï뙞 ''''''''''''''''''''''''ŠŽ‘çìîüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÛàâptw''''''''''''''''''''jnp×ÜÞüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûûýúÈÍÏMSZ''''''''''''''''EKRÃÀÄúüùüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûõøô¬±³!*4'''''''''''' /¡¥¨ôöóüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûëíꎒ•''''''''''‡‹ŽæêíüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûÙÛØdhk''''''^bdÌÑÔüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûúüùÅÇÄ@FM''7=D¸¼¿úüùüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûñô𡥨¡¥¨ñôðüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿûüÿû \ No newline at end of file diff --git a/tests/logo_type10_16bpp_bl.tga b/tests/logo_type10_16bpp_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..dd0a2b55bbbc05e75875f59fe61cc235e0c2c832 GIT binary patch literal 16431 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type10_24bpp_bl.tga b/tests/logo_type10_24bpp_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..b432e1966378f75d891e8d58ae14bee8742ae9e8 GIT binary patch literal 22328 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 RwL=HkKFZCXbM5N;{{aiS@FD;J literal 0 HcmV?d00001 diff --git a/tests/logo_type11_bl.tga b/tests/logo_type11_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..cef72c0f72850c28cc7530fe99bab57eb1731543 GIT binary patch literal 11028 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type1_16bpp_bl.tga b/tests/logo_type1_16bpp_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..1f2044653c2293e624ac04d509bdc1f039a8a949 GIT binary patch literal 77032 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type1_16bpp_tl.tga b/tests/logo_type1_16bpp_tl.tga new file mode 100644 index 0000000000000000000000000000000000000000..1b1d062a3fa7530615727a646366aaec656c9f0d GIT binary patch literal 77032 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 Y?jhtr$bpapAqPSZgd7Mt&|VJwKfJjNK>z>% literal 0 HcmV?d00001 diff --git a/tests/logo_type2_16bpp_tl.tga b/tests/logo_type2_16bpp_tl.tga new file mode 100644 index 0000000000000000000000000000000000000000..41b453aaeca178b6328997921cee8055829ebf6e GIT binary patch literal 153618 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type2_24bpp_tl.tga b/tests/logo_type2_24bpp_tl.tga new file mode 100644 index 0000000000000000000000000000000000000000..88e2604a7a3111a36a278d826d00c20457145bcb GIT binary patch literal 230418 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type3_bl.tga b/tests/logo_type3_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..cbdb9832cd40b994511a2057dd61cb018aabe7e7 GIT binary patch literal 76818 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 BKFt6C literal 0 HcmV?d00001 diff --git a/tests/logo_type3_tl.tga b/tests/logo_type3_tl.tga new file mode 100644 index 0000000000000000000000000000000000000000..98f92a4db8de9c683ba497a0f4e2fcbbe10695e9 GIT binary patch literal 76818 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type9_16bpp_bl.tga b/tests/logo_type9_16bpp_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..435a2d4f2dfa46c5de3aecedbb7a83c8e2cbb924 GIT binary patch literal 10599 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 literal 0 HcmV?d00001 diff --git a/tests/logo_type9_24bpp_bl.tga b/tests/logo_type9_24bpp_bl.tga new file mode 100644 index 0000000000000000000000000000000000000000..2bc6da87dfa02766a7e3896101673859c54bf5b6 GIT binary patch literal 11096 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 W-)=tNF27#wf8M6RzTJZK`~LtiP&5z# literal 0 HcmV?d00001 diff --git a/tests/logo_type9_24bpp_tl.tga b/tests/logo_type9_24bpp_tl.tga new file mode 100644 index 0000000000000000000000000000000000000000..5d1365c5fc3424f4c38d05d23841aa802983fb46 GIT binary patch literal 11096 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 dM9X3w5)H=l2p-!<)j-lo95-GcP@zW|^1G%x@F literal 0 HcmV?d00001 diff --git a/tests/types.rs b/tests/types.rs index 01b30be..17cdf9e 100644 --- a/tests/types.rs +++ b/tests/types.rs @@ -1,9 +1,10 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; const HEADER_DEFAULT: TgaHeader = TgaHeader { id_len: 0, has_color_map: false, - image_type: ImageType::Empty, + data_type: DataType::NoData, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, @@ -24,7 +25,7 @@ fn type1_16bpp_bl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::ColorMapped, + data_type: DataType::ColorMapped, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits16), @@ -46,7 +47,7 @@ fn type1_24bpp_bl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::ColorMapped, + data_type: DataType::ColorMapped, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits24), @@ -68,7 +69,7 @@ fn type1_16bpp_tl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::ColorMapped, + data_type: DataType::ColorMapped, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits16), @@ -91,7 +92,7 @@ fn type1_24bpp_tl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::ColorMapped, + data_type: DataType::ColorMapped, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits24), @@ -113,7 +114,7 @@ fn type2_16bpp_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, pixel_depth: Bpp::Bits16, ..HEADER_DEFAULT } @@ -132,7 +133,7 @@ fn type2_24bpp_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, pixel_depth: Bpp::Bits24, ..HEADER_DEFAULT } @@ -151,7 +152,7 @@ fn type2_16bpp_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, pixel_depth: Bpp::Bits16, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT @@ -171,7 +172,7 @@ fn type2_24bpp_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Truecolor, + data_type: DataType::TrueColor, pixel_depth: Bpp::Bits24, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT @@ -191,7 +192,7 @@ fn type3_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Monochrome, + data_type: DataType::BlackAndWhite, ..HEADER_DEFAULT } ); @@ -209,7 +210,7 @@ fn type3_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::Monochrome, + data_type: DataType::BlackAndWhite, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT } @@ -229,7 +230,8 @@ fn type9_16bpp() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::RleColorMapped, + data_type: DataType::ColorMapped, + compression: Compression::Rle, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits16), @@ -251,7 +253,8 @@ fn type9_24bpp_bl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::RleColorMapped, + data_type: DataType::ColorMapped, + compression: Compression::Rle, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits24), @@ -273,7 +276,8 @@ fn type9_16bpp_tl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::RleColorMapped, + data_type: DataType::ColorMapped, + compression: Compression::Rle, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits16), @@ -296,7 +300,8 @@ fn type9_24bpp_tl() { tga.header(), TgaHeader { has_color_map: true, - image_type: ImageType::RleColorMapped, + data_type: DataType::ColorMapped, + compression: Compression::Rle, color_map_start: 0, color_map_len: 8, color_map_depth: Some(Bpp::Bits24), @@ -318,7 +323,8 @@ fn type10_16bpp_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, pixel_depth: Bpp::Bits16, ..HEADER_DEFAULT } @@ -337,7 +343,8 @@ fn type10_24bpp_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, pixel_depth: Bpp::Bits24, ..HEADER_DEFAULT } @@ -356,7 +363,8 @@ fn type10_16bpp_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, pixel_depth: Bpp::Bits16, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT @@ -376,7 +384,8 @@ fn type10_24bpp_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleTruecolor, + data_type: DataType::TrueColor, + compression: Compression::Rle, pixel_depth: Bpp::Bits24, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT @@ -396,7 +405,8 @@ fn type11_bl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleMonochrome, + data_type: DataType::BlackAndWhite, + compression: Compression::Rle, ..HEADER_DEFAULT } ); @@ -414,7 +424,8 @@ fn type11_tl() { assert_eq!( tga.header(), TgaHeader { - image_type: ImageType::RleMonochrome, + data_type: DataType::BlackAndWhite, + compression: Compression::Rle, image_origin: ImageOrigin::TopLeft, ..HEADER_DEFAULT } diff --git a/tests/ubw8.rs b/tests/ubw8.rs index 12b0877..860d6e1 100644 --- a/tests/ubw8.rs +++ b/tests/ubw8.rs @@ -1,4 +1,4 @@ -use tinytga::{Bpp, ImageOrigin, ImageType, RawTga, TgaHeader}; +use tinytga::{Bpp, Compression, DataType, ImageOrigin, RawTga, TgaHeader}; #[test] fn ubw8() { @@ -14,7 +14,8 @@ fn ubw8() { TgaHeader { id_len: 26, has_color_map: false, - image_type: ImageType::Monochrome, + data_type: DataType::BlackAndWhite, + compression: Compression::Uncompressed, color_map_start: 0, color_map_len: 0, color_map_depth: None, From 670c53f01f2cb2d1160a0940cf5e02c0dcad738d Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Mon, 15 May 2023 18:14:48 +0200 Subject: [PATCH 14/18] Update e-g dependency (#18) --- CHANGELOG.md | 17 +++++++++-------- Cargo.toml | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 100bb9d..3b4acf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,25 +8,26 @@ ### Added -- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Added support for bottom right and top right image origins. +- [#16](https://github.com/embedded-graphics/tinytga/pull/16) Added support for bottom right and top right image origins. ### Changed -- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Use 1.61 as MSRV. -- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Replaced `ImageType` enum with `DataType` and `Compression`. -- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Color types used with `Tga` are now required to implement `From + From + From`. -- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Improved drawing performance for bottom left origin images by using `fill_contiguous`. -- [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Use correct lifetimes for `RawTga::image_id`, `RawTga::developer_dictionary` and `RawTga::extension_area`. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinytga/pull/16) Use 1.61 as MSRV. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinytga/pull/16) Replaced `ImageType` enum with `DataType` and `Compression`. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinytga/pull/16) Color types used with `Tga` are now required to implement `From + From + From`. +- [#16](https://github.com/embedded-graphics/tinytga/pull/16) Improved drawing performance for bottom left origin images by using `fill_contiguous`. +- [#16](https://github.com/embedded-graphics/tinytga/pull/16) Use correct lifetimes for `RawTga::image_id`, `RawTga::developer_dictionary` and `RawTga::extension_area`. +- **(breaking)** [#18](https://github.com/embedded-graphics/tinytga/pull/18) Updated `embedded-graphics` to `0.8`. ### Removed -- **(breaking)** [#16](https://github.com/embedded-graphics/tinybmp/pull/16) Removed `DynamicTga`, use `Tga` instead. +- **(breaking)** [#16](https://github.com/embedded-graphics/tinytga/pull/16) Removed `DynamicTga`, use `Tga` instead. ## [0.4.1] - 2021-06-16 ### Changed -- [#10](https://github.com/embedded-graphics/tinybmp/pull/10) Bump embedded-graphics minimum version from 0.7.0 to 0.7.1 +- [#10](https://github.com/embedded-graphics/tinytga/pull/10) Bump embedded-graphics minimum version from 0.7.0 to 0.7.1 ## [0.4.0] - 2021-06-06 diff --git a/Cargo.toml b/Cargo.toml index a0d9dfe..df68320 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,11 +24,11 @@ name = "draw" harness = false [dependencies] -embedded-graphics = "0.7.1" +embedded-graphics = "0.8.0" nom = { version = "7.1.1", default-features = false } [dev-dependencies] paste = "1.0" criterion = "0.3.5" clap = { version = "3.2.22", features = ["derive"] } -embedded-graphics-simulator = "0.4.0" +embedded-graphics-simulator = "0.5.0" From 3e34dfb848a59ec29e67d950cd799ac8a3ea0996 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Wed, 17 May 2023 03:06:59 +0200 Subject: [PATCH 15/18] Remove unsupported release.toml setting (#19) --- release.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/release.toml b/release.toml index 074cfe4..204727b 100644 --- a/release.toml +++ b/release.toml @@ -1,4 +1,3 @@ -no-dev-version = true pre-release-replacements = [ {file="CHANGELOG.md", prerelease=true, search="[Uu]nreleased", replace="{{version}}"}, {file="CHANGELOG.md", prerelease=true, search="\\.\\.\\.HEAD", replace="...{{tag_name}}"}, From 31908762b598e0a5feb6544474276ac80c7e9bef Mon Sep 17 00:00:00 2001 From: James Waples Date: Wed, 17 May 2023 10:03:29 +0100 Subject: [PATCH 16/18] (cargo-release) version 0.5.0 --- CHANGELOG.md | 5 ++++- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b4acf0..2a3aa4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## [Unreleased] - ReleaseDate +## [0.5.0] - 2023-05-17 + ### Added - [#16](https://github.com/embedded-graphics/tinytga/pull/16) Added support for bottom right and top right image origins. @@ -128,7 +130,8 @@ - [#218](https://github.com/embedded-graphics/embedded-graphics/pull/218) Test README examples in CI and update them to work with latest crate versions. -[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.4.1...HEAD +[unreleased]: https://github.com/embedded-graphics/tinytga/compare/v0.5.0...HEAD +[0.5.0]: https://github.com/embedded-graphics/tinytga/compare/v0.4.1...v0.5.0 [0.4.1]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/embedded-graphics/tinytga/compare/v0.4.0-beta.1...v0.4.0 diff --git a/Cargo.toml b/Cargo.toml index df68320..cc270d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tinytga" -version = "0.4.1" +version = "0.5.0" description = "No-std, low memory footprint TGA image loader" authors = ["James Waples ", "Ralf Fuest "] edition = "2021" From 57dee2153c14ba4c9d11a3ecaf490d9c48d9d777 Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Thu, 26 Jun 2025 17:39:17 +0200 Subject: [PATCH 17/18] Migrate from CircleCI to GitHub Actions (#22) --- .circleci/config.yml | 55 ------------------------------------ .github/workflows/ci.yml | 60 ++++++++++++++++++++++++++++++++++++++++ CHANGELOG.md | 4 +++ Cargo.toml | 2 +- README.md | 2 +- src/lib.rs | 2 +- 6 files changed, 67 insertions(+), 58 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/ci.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 44288e4..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,55 +0,0 @@ -# Check that everything (tests, benches, etc) builds in std environments -precheck_steps: &precheck_steps - docker: &docker - - image: jamwaffles/circleci-embedded-graphics:1.61.0-0 - auth: - username: jamwaffles - password: $DOCKERHUB_PASSWORD - steps: - - checkout - - restore_cache: &restore_cache - key: v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} - - run: rustup default ${RUST_VERSION:-stable} - - run: rustup component add rustfmt - - run: cargo update - - run: just build - - save_cache: &save_cache - key: v1-{{ .Environment.CIRCLE_PROJECT_REPONAME }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "Cargo.toml" }} - paths: - - ./target - - /home/circleci/.cargo/registry - -# Build crates for embedded target -target_steps: &target_steps - resource_class: large - docker: *docker - steps: - - checkout - - restore_cache: *restore_cache - - run: just install-targets - - run: cargo update - - run: just build-targets --release - - save_cache: *save_cache - -version: 2 -jobs: - precheck-stable: - <<: *precheck_steps - precheck-beta: - environment: - - RUST_VERSION: "beta" - <<: *precheck_steps - - all-targets: - <<: *target_steps - -build_jobs: &build_jobs - jobs: - - precheck-stable - - precheck-beta - - all-targets - -workflows: - version: 2 - build_all: - <<: *build_jobs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bd230b4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,60 @@ +name: CI + +on: [push, pull_request] + +jobs: + rustfmt: + name: Check formatting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + - run: cargo fmt --check + + tests: + name: Tests (stable) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - run: cargo test + + tests-msrv: + name: Tests (MSRV) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.81 + - run: cargo test + + build-no_std: + name: Build no_std + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + target: thumbv7m-none-eabi + - run: cargo build --target thumbv7m-none-eabi + + build-benches: + name: Build benches + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - run: cargo bench --no-run + + check-readme: + name: Check readme + runs-on: ubuntu-latest + steps: + - uses: taiki-e/install-action@just + - uses: taiki-e/install-action@v2 + with: + tool: cargo-readme + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - run: just check-readme diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a3aa4a..91b540e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ ## [Unreleased] - ReleaseDate +### Changed + +- **(breaking)** [#22](https://github.com/embedded-graphics/tinytga/pull/22) Use 1.81 as MSRV. + ## [0.5.0] - 2023-05-17 ### Added diff --git a/Cargo.toml b/Cargo.toml index cc270d4..bc62cdb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,4 +31,4 @@ nom = { version = "7.1.1", default-features = false } paste = "1.0" criterion = "0.3.5" clap = { version = "3.2.22", features = ["derive"] } -embedded-graphics-simulator = "0.5.0" +embedded-graphics-simulator = { version = "0.5.0", default_features = false } diff --git a/README.md b/README.md index 7b64695..cf5e79c 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ images with the origin at the top left corner will generally result in the best ## Minimum supported Rust version -The minimum supported Rust version for tinytga is `1.61` or greater. +The minimum supported Rust version for tinytga is `1.81` or greater. Ensure you have the correct version of Rust installed, preferably through . [embedded-graphics]: https://docs.rs/embedded-graphics diff --git a/src/lib.rs b/src/lib.rs index 19420c6..0ee6022 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -101,7 +101,7 @@ //! //! # Minimum supported Rust version //! -//! The minimum supported Rust version for tinytga is `1.61` or greater. +//! The minimum supported Rust version for tinytga is `1.81` or greater. //! Ensure you have the correct version of Rust installed, preferably through . //! //! [`ImageOrigin`]: enum.ImageOrigin.html From 906afc782947c5d5bc6950c8cd3854be73e9320e Mon Sep 17 00:00:00 2001 From: Ralf Fuest Date: Thu, 26 Jun 2025 17:58:50 +0200 Subject: [PATCH 18/18] Replace CI badge (#23) --- Cargo.toml | 6 +----- README.md | 2 +- README.tpl | 2 +- doc/releasing.md | 2 +- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bc62cdb..e0ff24b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,13 +12,9 @@ readme = "./README.md" license = "MIT OR Apache-2.0" exclude = [ "/.github/", - "/.circleci/", ".gitignore", ] -[badges] -circle-ci = { repository = "embedded-graphics/tinytga", branch = "master" } - [[bench]] name = "draw" harness = false @@ -31,4 +27,4 @@ nom = { version = "7.1.1", default-features = false } paste = "1.0" criterion = "0.3.5" clap = { version = "3.2.22", features = ["derive"] } -embedded-graphics-simulator = { version = "0.5.0", default_features = false } +embedded-graphics-simulator = { version = "0.5.0", default-features = false } diff --git a/README.md b/README.md index cf5e79c..32c849d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TinyTGA -[![Build Status](https://circleci.com/gh/embedded-graphics/tinytga/tree/master.svg?style=shield)](https://circleci.com/gh/embedded-graphics/tinytga/tree/master) +[![CI Status](https://github.com/embedded-graphics/tinytga/actions/workflows/ci.yml/badge.svg)](https://github.com/embedded-graphics/tinytga/actions/workflows/ci.yml) [![Crates.io](https://img.shields.io/crates/v/tinytga.svg)](https://crates.io/crates/tinytga) [![Docs.rs](https://docs.rs/tinytga/badge.svg)](https://docs.rs/tinytga) [![embedded-graphics on Matrix](https://img.shields.io/matrix/rust-embedded-graphics:matrix.org)](https://matrix.to/#/#rust-embedded-graphics:matrix.org) diff --git a/README.tpl b/README.tpl index f806f24..fbd2ecc 100644 --- a/README.tpl +++ b/README.tpl @@ -1,6 +1,6 @@ # TinyTGA -[![Build Status](https://circleci.com/gh/embedded-graphics/tinytga/tree/master.svg?style=shield)](https://circleci.com/gh/embedded-graphics/tinytga/tree/master) +[![CI Status](https://github.com/embedded-graphics/tinytga/actions/workflows/ci.yml/badge.svg)](https://github.com/embedded-graphics/tinytga/actions/workflows/ci.yml) [![Crates.io](https://img.shields.io/crates/v/tinytga.svg)](https://crates.io/crates/tinytga) [![Docs.rs](https://docs.rs/tinytga/badge.svg)](https://docs.rs/tinytga) [![embedded-graphics on Matrix](https://img.shields.io/matrix/rust-embedded-graphics:matrix.org)](https://matrix.to/#/#rust-embedded-graphics:matrix.org) diff --git a/doc/releasing.md b/doc/releasing.md index 2e02fcf..b405ae8 100644 --- a/doc/releasing.md +++ b/doc/releasing.md @@ -7,7 +7,7 @@ Target audience: crate maintainers who wish to release `tinytga`. ## On GitHub - Check that all desired PRs are merged and all desired issues are closed/resolved. -- Check that the latest master build passed in CircleCI. +- Check that the latest master build passed in all CI checks. ## On your local machine