bat-0.12.1/.gitignore010064400017500001735000000000251353340210600125470ustar0000000000000000 /target/ **/*.rs.bk bat-0.12.1/.gitmodules010064400017500001735000000145001353340210600127370ustar0000000000000000[submodule "assets/syntaxes/Elixir"] path = assets/syntaxes/Elixir url = https://github.com/princemaple/elixir-sublime-syntax/ [submodule "assets/syntaxes/Packages"] path = assets/syntaxes/Packages url = https://github.com/sublimehq/Packages/ [submodule "assets/syntaxes/TOML"] path = assets/syntaxes/TOML url = https://github.com/jasonwilliams/sublime_toml_highlighting [submodule "assets/syntaxes/Julia"] path = assets/syntaxes/Julia url = https://github.com/JuliaEditorSupport/Julia-sublime [submodule "assets/themes/sublime-monokai-extended"] path = assets/themes/sublime-monokai-extended url = https://github.com/jonschlinkert/sublime-monokai-extended [submodule "assets/syntaxes/Docker"] path = assets/syntaxes/Docker url = https://github.com/asbjornenge/Docker.tmbundle [submodule "assets/syntaxes/VimL"] path = assets/syntaxes/VimL url = https://github.com/SalGnt/Sublime-VimL [submodule "assets/syntaxes/INI"] path = assets/syntaxes/INI url = https://github.com/clintberry/sublime-text-2-ini [submodule "assets/syntaxes/CMake"] path = assets/syntaxes/CMake url = https://github.com/zyxar/Sublime-CMakeLists [submodule "assets/syntaxes/LESS"] path = assets/syntaxes/LESS url = https://github.com/danro/LESS-sublime [submodule "assets/themes/DarkNeon"] path = assets/themes/DarkNeon url = https://github.com/RainyDayMedia/DarkNeon [submodule "assets/themes/github-sublime-theme"] path = assets/themes/github-sublime-theme url = https://github.com/AlexanderEkdahl/github-sublime-theme [submodule "assets/themes/1337-Scheme"] path = assets/themes/1337-Scheme url = https://github.com/MarkMichos/1337-Scheme [submodule "assets/themes/TwoDark"] path = assets/themes/TwoDark url = https://github.com/erremauro/TwoDark [submodule "assets/syntaxes/AWK"] path = assets/syntaxes/AWK url = https://github.com/JohnNilsson/awk-sublime [submodule "assets/syntaxes/Nix"] path = assets/syntaxes/Nix url = https://github.com/wmertens/sublime-nix [submodule "assets/themes/zenburn"] path = assets/themes/zenburn url = https://github.com/colinta/zenburn.git [submodule "assets/syntaxes/Kotlin"] path = assets/syntaxes/Kotlin url = https://github.com/vkostyukov/kotlin-sublime-package [submodule "assets/syntaxes/Elm"] path = assets/syntaxes/Elm url = https://github.com/elm-community/SublimeElmLanguageSupport [submodule "assets/syntaxes/TypeScript"] path = assets/syntaxes/TypeScript url = https://github.com/Microsoft/TypeScript-Sublime-Plugin [submodule "assets/syntaxes/Puppet"] path = assets/syntaxes/Puppet url = https://github.com/russCloak/SublimePuppet [submodule "assets/syntaxes/CSV"] path = assets/syntaxes/CSV url = https://github.com/wadetb/Sublime-Text-Advanced-CSV [submodule "assets/themes/onehalf"] path = assets/themes/onehalf url = https://github.com/sonph/onehalf [submodule "assets/syntaxes/JavaScript (Babel)"] path = assets/syntaxes/JavaScript (Babel) url = https://github.com/babel/babel-sublime [submodule "assets/syntaxes/Cabal"] path = assets/syntaxes/Cabal url = https://github.com/SublimeHaskell/SublimeHaskell [submodule "assets/syntaxes/Dart"] path = assets/syntaxes/Dart url = https://github.com/guillermooo/dart-sublime-bundle [submodule "assets/syntaxes/FSharp"] path = assets/syntaxes/FSharp url = https://github.com/hoest/sublimetext-fsharp [submodule "assets/syntaxes/PureScript"] path = assets/syntaxes/PureScript url = https://github.com/tellnobody1/sublime-purescript-syntax [submodule "assets/syntaxes/Swift"] path = assets/syntaxes/Swift url = https://github.com/quiqueg/Swift-Sublime-Package [submodule "assets/syntaxes/Crystal"] path = assets/syntaxes/Crystal url = https://github.com/crystal-lang-tools/sublime-crystal.git [submodule "assets/syntaxes/PowerShell"] path = assets/syntaxes/PowerShell url = https://github.com/PowerShell/EditorSyntax [submodule "assets/syntaxes/Robot"] path = assets/syntaxes/Robot url = https://github.com/andriyko/sublime-robot-framework-assistant.git [submodule "assets/themes/sublime-snazzy"] path = assets/themes/sublime-snazzy url = https://github.com/greggb/sublime-snazzy [submodule "assets/syntaxes/HTML (Twig)"] path = assets/syntaxes/HTML (Twig) url = https://github.com/Anomareh/PHP-Twig.tmbundle.git [submodule "assets/syntaxes/AsciiDoc"] path = assets/syntaxes/AsciiDoc url = https://github.com/SublimeText/AsciiDoc.git [submodule "assets/syntaxes/Assembly (ARM)"] path = assets/syntaxes/Assembly (ARM) url = https://github.com/tvi/Sublime-ARM-Assembly [submodule "assets/syntaxes/syslog-syntax"] path = assets/syntaxes/Syslog url = https://github.com/caos21/syslog-syntax.git branch = master [submodule "assets/syntaxes/protobuf-syntax-highlighting"] path = assets/syntaxes/Protobuf url = https://github.com/VcamX/protobuf-syntax-highlighting.git branch = master [submodule "assets/syntaxes/Terraform"] path = assets/syntaxes/Terraform url = https://github.com/alexlouden/Terraform.tmLanguage.git [submodule "assets/syntaxes/Jsonnet"] path = assets/syntaxes/Jsonnet url = https://github.com/gburiola/sublime-jsonnet-syntax.git [submodule "assets/syntaxes/varlink"] path = assets/syntaxes/varlink url = https://github.com/varlink/syntax-highlight-varlink.git [submodule "assets/syntaxes/sublime-fish"] path = assets/syntaxes/sublime-fish url = https://github.com/Phidica/sublime-fish.git [submodule "assets/syntaxes/Org mode"] path = assets/syntaxes/Org mode url = https://github.com/jezcope/Org.tmbundle.git [submodule "assets/syntaxes/requirementstxt"] path = assets/syntaxes/requirementstxt url = https://github.com/wuub/requirementstxt [submodule "assets/syntaxes/DotENV"] path = assets/syntaxes/DotENV url = https://github.com/zaynali53/DotENV [submodule "assets/syntaxes/hosts"] path = assets/syntaxes/hosts url = https://github.com/brandonwamboldt/sublime-hosts [submodule "assets/syntaxes/ssh-config"] path = assets/syntaxes/ssh-config url = https://github.com/robballou/sublimetext-sshconfig.git [submodule "assets/syntaxes/GraphQL"] path = assets/syntaxes/GraphQL url = https://github.com/dncrews/GraphQL-SublimeText3.git [submodule "assets/syntaxes/Verilog"] path = assets/syntaxes/Verilog url = https://github.com/pro711/sublime-verilog [submodule "assets/syntaxes/SCSS_Sass"] path = assets/syntaxes/SCSS_Sass url = https://github.com/braver/SublimeSass [submodule "assets/syntaxes/Strace"] path = assets/syntaxes/Strace url = https://github.com/djuretic/SublimeStrace bat-0.12.1/.travis.yml010064400017500001735000000071701353340210600127000ustar0000000000000000language: rust matrix: include: # Stable channel. - os: linux rust: stable env: TARGET=x86_64-unknown-linux-gnu - os: linux rust: stable env: - TARGET=x86_64-unknown-linux-musl - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc - os: linux rust: stable env: TARGET=i686-unknown-linux-gnu - os: osx rust: stable env: TARGET=x86_64-apple-darwin - os: linux rust: stable env: - TARGET=arm-unknown-linux-gnueabihf - CC_arm_unknown_linux_gnueabihf=/usr/bin/arm-linux-gnueabihf-gcc-4.8 - CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc-4.8 - os: linux rust: stable env: - TARGET=aarch64-unknown-linux-gnu - CC_aarch64-unknown-linux-gnu=/usr/bin/aarch64-linux-gnu-gcc-4.8 - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc-4.8 # Minimum Rust supported channel. - os: linux rust: 1.35.0 env: TARGET=x86_64-unknown-linux-gnu - os: linux rust: 1.35.0 env: - TARGET=x86_64-unknown-linux-musl - CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc - os: osx rust: 1.35.0 env: TARGET=x86_64-apple-darwin # Code formatting check - os: linux rust: nightly # skip the global install step install: - cargo install --debug --force rustfmt-nightly script: cargo fmt -- --check sudo: required before_install: - ci/before_install.bash env: global: # Default target on travis-ci. # Used as conditional check in the install stage - HOST=x86_64-unknown-linux-gnu # Used on the deployment script - PROJECT_NAME=bat install: # prevent target re-add error from rustup - if [[ $TRAVIS_OS_NAME = linux && $HOST != $TARGET ]]; then rustup target add $TARGET; fi script: - ci/script.bash before_deploy: - bash ci/before_deploy.bash deploy: provider: releases # NOTE updating the `api_key.secure` # - go to: https://github.com/settings/tokens/new # - generate new token using `public_repo` scope # - encrypt it using: `travis encrypt API_KEY_HERE` # - paste the output below api_key: secure: "GZL8nYk+/MZGEqejpP0UMMGVmwUEdxiF9CflFIGccu+/tznDyHnHOpyJmbH3M5IKWIxa7xFgqOE8pHuD4oQXt4mzyJGB0KMKKEFLW7ckbTYKya5bw0heKznaqGnS0Yz+vpfqYR25eiPFYCz7mDsGsCzH5QZqt3cdn9MDQGu1D0IaxPjuBNH3T9kBblR0ifBd3Diy0JYhiVcMSI3V1rkel18F1yBHO2GQ95hkWxVgjANQnefq5+zdzbx4ki539ewYENShA8N0w6ULJVY9LmWRWJIp90ggOD3JCH6Nz/fBpYBqwfABO6Dr7Csw7IRm7pM4IVkFZS1taiDYFX9thxZh3UTmI4YYtSTPxH9NGV47kxPipbf4vAXFwW+1VcHKMpBzz+5IVsHnk1Pfx9/GZsXbqXM3PUWCStec36Xtqh5vQapDKEg9khkEs4b1X7/E73gvpRuQl9gbnyufSVWgDsXIWqM+0aDbqQz1FpLmVxz6eij0cB9vR+8kbNoe/CEPHPO9ZllvAHseukOeHPzSBd8rILORXaaGmQausXz2wWgSsffUSYz4705P8joI0zFCfmkHjL+kA1ZUx5SxLCc1ID7CFFZChhAxHoPL7xc21snswwr8QeheERdwvuzKNaerBGZEw8dmMMx98YkjftIj65DDySr2mRZuufBQeQpmMhFyIT4=" # for uploading multiple files file_glob: true # NOTE explanation on each env variable # - PROJECT_NAME: name of the project, set on the `env.global` above # - TRAVIS_TAG: tag name that the build is being deployed for, usually the version number # - TARGET: target triple of the build file: - $PROJECT_NAME-$TRAVIS_TAG-$TARGET.* - $PROJECT_NAME*.deb # don't delete artifacts from previous stage skip_cleanup: true on: # deploy only if we push a tag tags: true # deploy only on stable channel that has TARGET env variable sets condition: $TRAVIS_RUST_VERSION = stable && $TARGET != "" notifications: email: on_success: never # Caching cache: directories: - /home/travis/.cargo before_cache: - rm -rf /home/travis/.cargo/registry bat-0.12.1/Cargo.toml.orig010064400017500001735000000021511353340210600134500ustar0000000000000000[package] authors = ["David Peter "] categories = ["command-line-utilities"] description="A cat(1) clone with wings." homepage = "https://github.com/sharkdp/bat" license = "MIT/Apache-2.0" name = "bat" readme = "README.md" repository = "https://github.com/sharkdp/bat" version = "0.12.1" exclude = [ "assets/syntaxes/*", "assets/themes/*", ] build = "build.rs" edition = '2018' [dependencies] atty = "0.2.13" ansi_term = "^0.12.1" ansi_colours = "^1.0" console = "0.8" dirs = "2.0" lazy_static = "1.4" wild = "2.0" content_inspector = "0.2.4" encoding = "0.2" shell-words = "0.1.0" [dependencies.git2] version = "0.10" default-features = false features = [] [dependencies.syntect] version = "3.2.1" default-features = false features = ["parsing", "yaml-load", "dump-load", "dump-create"] [dependencies.clap] version = "2.33" default-features = false features = ["suggestions", "color", "wrap_help"] [dependencies.error-chain] version = "0.12" default-features = false features = [] [dev-dependencies] tempdir = "0.3" assert_cmd = "0.11.1" escargot = "0.5.0" [build-dependencies] clap = "2.33" bat-0.12.1/Cargo.toml0000644000000036220000000000000077230ustar00# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] edition = "2018" name = "bat" version = "0.12.1" authors = ["David Peter "] build = "build.rs" exclude = ["assets/syntaxes/*", "assets/themes/*"] description = "A cat(1) clone with wings." homepage = "https://github.com/sharkdp/bat" readme = "README.md" categories = ["command-line-utilities"] license = "MIT/Apache-2.0" repository = "https://github.com/sharkdp/bat" [dependencies.ansi_colours] version = "^1.0" [dependencies.ansi_term] version = "^0.12.1" [dependencies.atty] version = "0.2.13" [dependencies.clap] version = "2.33" features = ["suggestions", "color", "wrap_help"] default-features = false [dependencies.console] version = "0.8" [dependencies.content_inspector] version = "0.2.4" [dependencies.dirs] version = "2.0" [dependencies.encoding] version = "0.2" [dependencies.error-chain] version = "0.12" features = [] default-features = false [dependencies.git2] version = "0.10" features = [] default-features = false [dependencies.lazy_static] version = "1.4" [dependencies.shell-words] version = "0.1.0" [dependencies.syntect] version = "3.2.1" features = ["parsing", "yaml-load", "dump-load", "dump-create"] default-features = false [dependencies.wild] version = "2.0" [dev-dependencies.assert_cmd] version = "0.11.1" [dev-dependencies.escargot] version = "0.5.0" [dev-dependencies.tempdir] version = "0.3" [build-dependencies.clap] version = "2.33" bat-0.12.1/Cargo.toml.orig0000644000000021510000000000000106560ustar00[package] authors = ["David Peter "] categories = ["command-line-utilities"] description="A cat(1) clone with wings." homepage = "https://github.com/sharkdp/bat" license = "MIT/Apache-2.0" name = "bat" readme = "README.md" repository = "https://github.com/sharkdp/bat" version = "0.12.1" exclude = [ "assets/syntaxes/*", "assets/themes/*", ] build = "build.rs" edition = '2018' [dependencies] atty = "0.2.13" ansi_term = "^0.12.1" ansi_colours = "^1.0" console = "0.8" dirs = "2.0" lazy_static = "1.4" wild = "2.0" content_inspector = "0.2.4" encoding = "0.2" shell-words = "0.1.0" [dependencies.git2] version = "0.10" default-features = false features = [] [dependencies.syntect] version = "3.2.1" default-features = false features = ["parsing", "yaml-load", "dump-load", "dump-create"] [dependencies.clap] version = "2.33" default-features = false features = ["suggestions", "color", "wrap_help"] [dependencies.error-chain] version = "0.12" default-features = false features = [] [dev-dependencies] tempdir = "0.3" assert_cmd = "0.11.1" escargot = "0.5.0" [build-dependencies] clap = "2.33" bat-0.12.1/LICENSE-APACHE010064400017500001735000000261351353340210600125150ustar0000000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. bat-0.12.1/LICENSE-MIT010064400017500001735000000021041353340210600122130ustar0000000000000000Copyright (c) 2018 bat-developers (https://github.com/sharkdp/bat). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. bat-0.12.1/README.md010064400017500001735000000410041353340210600120400ustar0000000000000000

bat - a cat clone with wings
Build Status license Version info
A cat(1) clone with syntax highlighting and Git integration.

Key FeaturesHow To UseInstallationCustomizationProject goals, alternatives • Translation [中文][日本文]

### Syntax highlighting `bat` supports syntax highlighting for a large number of programming and markup languages: ![Syntax highlighting example](https://imgur.com/rGsdnDe.png) ### Git integration `bat` communicates with `git` to show modifications with respect to the index (see left side bar): ![Git integration example](https://i.imgur.com/2lSW4RE.png) ### Show non-printable characters You can use the `-A`/`--show-all` option to show and highlight non-printable characters: ![Non-printable character example](https://i.imgur.com/WndGp9H.png) ### Automatic paging `bat` can pipe its own output to `less` if the output is too large for one screen. ### File concatenation Oh.. you can also use it to concatenate files :wink:. Whenever `bat` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `bat` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents. ## How to use Display a single file on the terminal ```bash > bat README.md ``` Display multiple files at once ```bash > bat src/*.rs ``` Read from stdin, determine the syntax automatically ```bash > curl -s https://sh.rustup.rs | bat ``` Read from stdin, specify the language explicitly ```bash > yaml2json .travis.yml | json_pp | bat -l json ``` Show and highlight non-printable characters: ```bash > bat -A /etc/hosts ``` Use it as a `cat` replacement: ```bash bat > note.md # quickly create a new file bat header.md content.md footer.md > document.md bat -n main.rs # show line numbers (only) bat f - g # output 'f', then stdin, then 'g'. ``` ### Integration with other tools #### `find` or `fd` You can use the `-exec` option of `find` to preview all search results with `bat`: ```bash find … -exec bat {} + ``` If you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same: ```bash fd … -X bat ``` #### `tail -f` `bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting. ```bash tail -f /var/log/pacman.log | bat --paging=never -l log ``` Note that we have to switch off paging in order for this to work. We have also specified the syntax explicitly (`-l log`), as it can not be auto-detected in this case. #### `git show` You can combine `bat` with `git show` to view an older version of a given file with proper syntax highlighting: ```bash git show v0.6.0:src/main.rs | bat -l rs ``` #### `xclip` The line numbers and Git modification markers in the output of `bat` can make it hard to copy the contents of a file. To prevent this, you can call `bat` with the `-p`/`--plain` option or simply pipe the output into `xclip`: ```bash bat main.cpp | xclip ``` `bat` will detect that the output is being redirected and print the plain file contents. #### `man` `bat` can be used as a pager for `man`. It can be used like this: ``` export MANPAGER="sh -c 'col -b | bat -l man -p'" man 2 select ``` The [Manpage syntax](assets/syntaxes/Manpage.sublime-syntax) is developed in this repository and still needs some work. ## Installation [![Packaging status](https://repology.org/badge/vertical-allrepos/bat.svg)](https://repology.org/project/bat/versions) ### On Ubuntu *... and other Debian-based Linux distributions.* Download the latest `.deb` package from the [release page](https://github.com/sharkdp/bat/releases) and install it via: ``` bash sudo dpkg -i bat_0.12.1_amd64.deb # adapt version number and architecture ``` ### On Alpine Linux You can install [the `bat` package](https://pkgs.alpinelinux.org/packages?name=bat) from the official sources, provided you have the appropriate repository enabled: ```bash apk add bat ``` ### On Arch Linux You can install [the `bat` package](https://www.archlinux.org/packages/community/x86_64/bat/) from the official sources: ```bash pacman -S bat ``` ### On Fedora You can install [the `bat` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) from the official [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) repository. ```bash dnf install bat ``` ### On Gentoo Linux You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat) from the official sources: ```bash emerge sys-apps/bat ``` ### On Void Linux You can install `bat` via xbps-install: ``` xbps-install -S bat ``` ### On FreeBSD You can install a precompiled [`bat` package](https://www.freshports.org/textproc/bat) with pkg: ```bash pkg install bat ``` or build it on your own from the FreeBSD ports: ```bash cd /usr/ports/textproc/bat make install ``` ### Via nix You can install `bat` using the [nix package manager](https://nixos.org/nix): ```bash nix-env -i bat ``` ### On openSUSE You can install `bat` with zypper: ``` zypper install bat ``` ### On macOS You can install `bat` with [Homebrew](http://braumeister.org/formula/bat): ```bash brew install bat ``` ### On Windows You can download prebuilt binaries from the [Release page](https://github.com/sharkdp/bat/releases), or install it with [scoop](https://scoop.sh/) or [Chocolatey](https://chocolatey.org): ```bash scoop install bat ``` ```bash choco install bat ``` [See below](#using-bat-on-windows) for notes. ### Via Docker There is a [Docker image](https://hub.docker.com/r/danlynn/bat/) that you can use to run `bat` in a container: ```bash docker pull danlynn/bat alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat' ``` ### Via Ansible You can install `bat` with [Ansible](https://www.ansible.com/): ```bash # Install role on local machine ansible-galaxy install aeimer.install_bat ``` ```yaml --- # Playbook to install bat - host: all roles: - aeimer.install_bat ``` - [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat) - [GitHub](https://github.com/aeimer/ansible-install-bat) This should work with the following distributions: - Debian/Ubuntu - ARM (eg. Raspberry PI) - Arch Linux - Void Linux - FreeBSD - MacOS ### From binaries Check out the [Release page](https://github.com/sharkdp/bat/releases) for prebuilt versions of `bat` for many different architectures. Statically-linked binaries are also available: look for archives with `musl` in the file name. ### From source If you want to build `bat` from source, you need Rust 1.35 or higher. You can then use `cargo` to build everything: ```bash cargo install bat ``` You may have to install `cmake` and the `libz` development package (`libz-dev` or `libz-devel`) in order for the build to succeed. ## Customization ### Highlighting theme Use `bat --list-themes` to get a list of all available themes for syntax highlighting. To select the `TwoDark` theme, call `bat` with the `--theme=TwoDark` option or set the `BAT_THEME` environment variable to `TwoDark`. Use `export BAT_THEME="TwoDark"` in your shell's startup file to make the change permanent. Alternatively, use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file). If you want to preview the different themes on a custom file, you can use the following command (you need [`fzf`](https://github.com/junegunn/fzf) for this): ``` bash bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file" ``` `bat` looks good on a dark background by default. However, if your terminal uses a light background, some themes like `GitHub` or `OneHalfLight` will work better for you. You can also use a custom theme by following the ['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes). ### Output style You can use the `--style` option to control the appearance of `bat`s output. You can use `--style=numbers,changes`, for example, to show only Git changes and line numbers but no grid and no file header. Set the `BAT_STYLE` environment variable to make these changes permanent or use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file). ### Adding new syntaxes / language definitions `bat` uses the excellent [`syntect`](https://github.com/trishume/syntect/) library for syntax highlighting. `syntect` can read any [Sublime Text `.sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html) and theme. To add new syntax definitions, do the following. Create a folder with syntax definition files: ```bash mkdir -p "$(bat --config-dir)/syntaxes" cd "$(bat --config-dir)/syntaxes" # Put new '.sublime-syntax' language definition files # in this folder (or its subdirectories), for example: git clone https://github.com/tellnobody1/sublime-purescript-syntax ``` Now use the following command to parse these files into a binary cache: ```bash bat cache --build ``` Finally, use `bat --list-languages` to check if the new languages are available. If you ever want to go back to the default settings, call: ```bash bat cache --clear ``` ### Adding new themes This works very similar to how we add new syntax definitions. First, create a folder with the new syntax highlighting themes: ```bash mkdir -p "$(bat --config-dir)/themes" cd "$(bat --config-dir)/themes" # Download a theme in '.tmTheme' format, for example: git clone https://github.com/greggb/sublime-snazzy # Update the binary cache bat cache --build ``` Finally, use `bat --list-themes` to check if the new themes are available. ### Using a different pager `bat` uses the pager that is specified in the `PAGER` environment variable. If this variable is not set, `less` is used by default. If you want to use a different pager, you can either modify the `PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in `PAGER`. If you want to pass command-line arguments to the pager, you can also set them via the `PAGER`/`BAT_PAGER` variables: ```bash export BAT_PAGER="less -RF" ``` Instead of using environment variables, you can also use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file) to configure the pager (`--pager` option). **Note**: By default, if the pager is set to `less` (and no command-line options are specified), `bat` will pass the following command line options to the pager: `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` and `-X`/`--no-init`. The first (`-R`) is needed to interpret ANSI colors correctly. The second option (`-F`) instructs less to exit immediately if the output size is smaller than the vertical size of the terminal. This is convenient for small files because you do not have to press `q` to quit the pager. The third option (`-X`) is needed to fix a bug with the `--quit-if-one-screen` feature in old versions of `less`. Unfortunately, it also breaks mouse-wheel support in `less`. If you want to enable mouse-wheel scrolling, you can either pass just `-R` (as in the example above, this will disable the quit-if-one-screen feature), or you can use a recent version of `less` and pass `-RF` which will hopefully enable both quit-if-one-screen and mouse-wheel scrolling. If scrolling still doesn't work for you, you can try to pass the `-S` option in addition. ## Configuration file `bat` can also be customized with a configuration file. The location of the file is dependent on your operating system. To get the default path for your system, call ``` bat --config-file ``` Alternatively, you can use the `BAT_CONFIG_PATH` environment variable to point `bat` to a non-default location of the configuration file: ```bash export BAT_CONFIG_PATH="/path/to/bat.conf" ``` ### Format The configuration file is a simple list of command line arguments. Use `bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character. Example configuration file: ```bash # Set the theme to "TwoDark" --theme="TwoDark" # Show line numbers, Git modifications and file header (but no grid) --style="numbers,changes,header" # Use italic text on the terminal (not supported on all terminals) --italic-text=always # Add mouse scrolling support in less (does not work with older # versions of "less") --pager="less -FR" # Use C++ syntax (instead of C) for .h header files --map-syntax h:cpp # Use "gitignore" highlighting for ".ignore" files --map-syntax .ignore:.gitignore ``` ## Using `bat` on Windows `bat` mostly works out-of-the-box on Windows, but a few features may need extra configuration. ### Paging Windows only includes a very limited pager in the form of `more`. You can download a Windows binary for `less` [from its homepage](http://www.greenwoodsoftware.com/less/download.html) or [through Chocolatey](https://chocolatey.org/packages/Less). To use it, place the binary in a directory in your `PATH` or [define an environment variable](#using-a-different-pager). The [Chocolatey package](#on-windows) installs `less` automatically. ### Colors Windows 10 natively supports colors in both `conhost.exe` (Command Prompt) and PowerShell since [v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)), as well as in newer versions of bash. On earlier versions of Windows, you can use [Cmder](http://cmder.net/), which includes [ConEmu](https://conemu.github.io/). **Note:** The Git and MSYS versions of `less` do not correctly interpret colors on Windows. If you don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string. ### Cygwin `bat` on Windows does not natively support Cygwin's unix-style paths (`/cygdrive/*`). When passed an absolute cygwin path as an argument, `bat` will encounter the following error: `The system cannot find the path specified. (os error 3)` This can be solved by creating a wrapper or adding the following function to your `.bash_profile` file: ```shell bat() { local index local args=("$@") for index in $(seq 0 ${#args[@]}) ; do case "${args[index]}" in -*) continue;; *) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";; esac done command bat "${args[@]}" } ``` ## Troubleshooting ### Terminals & colors `bat` handles terminals *with* and *without* truecolor support. However, the colors in the syntax highlighting themes are not optimized for 8-bit colors and it is therefore strongly recommended that you use a terminal with 24-bit truecolor support (`terminator`, `konsole`, `iTerm2`, ...). See [this article](https://gist.github.com/XVilka/8346728) for more details and a full list of terminals with truecolor support. Make sure that your truecolor terminal sets the `COLORTERM` variable to either `truecolor` or `24bit`. Otherwise, `bat` will not be able to determine whether or not 24-bit escape sequences are supported (and fall back to 8-bit colors). ### Line numbers and grid are hardly visible Please try a different theme (see `bat --list-themes` for a list). The `OneHalfDark` and `OneHalfLight` themes provide grid and line colors that are brighter. ## Development ```bash # Recursive clone to retrieve all submodules git clone --recursive https://github.com/sharkdp/bat # Build (debug version) cd bat cargo build # Run unit tests and integration tests cargo test # Install (release version) cargo install # Build a bat binary with modified syntaxes and themes bash assets/create.sh cargo install -f ``` ## Project goals and alternatives `bat` tries to achieve the following goals: - Provide beautiful, advanced syntax highlighting - Integrate with Git to show file modifications - Be a drop-in replacement for (POSIX) `cat` - Offer a user-friendly command-line interface There are a lot of alternatives, if you are looking for similar programs. See [this document](doc/alternatives.md) for a comparison. bat-0.12.1/appveyor.yml010064400017500001735000000024411353340210600131530ustar0000000000000000environment: global: TARGET: x86_64-pc-windows-msvc RUST_VERSION: stable CRATE_NAME: bat CARGO_HOME: "c:\\cargo" RUSTUP_HOME: "c:\\rustup" install: - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe - rustup-init.exe -y --default-host %TARGET% - set PATH=%PATH%;C:\cargo\bin - rustc -Vv - cargo -V build: false test_script: - cargo test --target %TARGET% --verbose - cargo run --target %TARGET% -- src/main.rs README.md --paging=never before_deploy: # Generate artifacts for release - cargo build --release --verbose - ps: ci\before_deploy.ps1 deploy: description: 'Automatically deployed release' artifact: /.*\.zip/ # Here's how: # - Go to 'https://github.com/settings/tokens/new' and generate a Token with only the # `public_repo` scope enabled # - Then go to 'https://ci.appveyor.com/tools/encrypt' and enter the newly generated token. # - Enter the "encrypted value" below auth_token: secure: oO4/J+hcFXgXcEqEc8gzlQNqLG0IxU78s4EyH+uczGdsyWajb3yipxPR6nXUvmoj provider: GitHub on: RUST_VERSION: stable appveyor_repo_tag: true cache: - C:\Users\appveyor\.cargo\registry - target notifications: - provider: Email on_build_success: false on_build_failure: false on_build_status_changed: false bat-0.12.1/assets/.gitattributes010064400017500001735000000000241353340210600147530ustar0000000000000000* linguist-vendored bat-0.12.1/assets/.ignore010064400017500001735000000000241353340210600133440ustar0000000000000000syntaxes/* themes/* bat-0.12.1/assets/JavaDoc.sublime-syntax.patch010064400017500001735000000010211353340210600173710ustar0000000000000000diff --git syntaxes/Packages/Java/JavaDoc.sublime-syntax syntaxes/Packages/Java/JavaDoc.sublime-syntax index 422a6a9..40a741e 100644 --- syntaxes/Packages/Java/JavaDoc.sublime-syntax +++ syntaxes/Packages/Java/JavaDoc.sublime-syntax @@ -13,7 +13,7 @@ variables: contexts: prototype: # https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#leadingasterisks - - match: ^\s*(\*)\s*(?!\s*@) + - match: ^\s*(\*)(?!/)\s*(?!\s*@) captures: 1: punctuation.definition.comment.javadoc bat-0.12.1/assets/README.md010064400017500001735000000034651353340210600133530ustar0000000000000000## Syntax Highlighting in bat `bat` uses the [syntect](https://github.com/trishume/syntect) library to highlight source code. As a basis, syntect uses [Sublime Text](https://www.sublimetext.com/) syntax definitions in the `.sublime-syntax` format. In order to add new syntaxes to `bat`, follow these steps: 1. Find a Sublime Text syntax for the given language, preferably in a separate Git repository which can be included as a submodule (under `assets/syntaxes`). 2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* -> *New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder. 3. Run the `create.sh` script. It calls `bat cache --build` to parse all available `.sublime-syntax` files and serialize them to a `syntaxes.bin` file (in this folder). 4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the `bat` binary. 5. If you send a pull request with your changes, please do *not* include the changed `syntaxes.bin` file. A new binary cache file will be created once before every new release of `bat`. ### Troubleshooting Make sure that the local cache does not interfere with the internally stored syntaxes and themes (`bat cache --clear`). ### Manual modifications The following files have been manually modified after converting from a `.tmLanguage` file: * `Dart.sublime-syntax` => removed `#regex.dart` include. * `INI.sublime-syntax` => added `.hgrc`, `hgrc`, and `desktop` file types. * `Org mode.sublime-syntax` => removed `task` file type. ### Non-submodule additions * `Assembly (x86_64)` has been manually added from https://github.com/13xforever/x86-assembly-textmate-bundle due to `git clone` recursion problems bat-0.12.1/assets/completions/bat.fish010064400017500001735000000105351353340210600160450ustar0000000000000000# Fish Shell Completions # Place or symlink to $XDG_CONFIG_HOME/fish/completions/bat.fish ($XDG_CONFIG_HOME is usually set to ~/.config) # Helper function: function __bat_autocomplete_languages --description "A helper function used by "(status filename) bat --list-languages | awk -F':' ' { lang=$1 split($2, exts, ",") for (i in exts) { ext=exts[i] if (ext !~ /[A-Z].*/ && ext !~ /^\..*rc$/) { print ext"\t"lang } } } ' | sort end # Completions: complete -c bat -l color -xka "auto never always" -d "Specify when to use colored output (default: auto)" -n "not __fish_seen_subcommand_from cache" complete -c bat -l config-dir -d "Display location of 'bat' configuration directory" -n "not __fish_seen_subcommand_from cache" complete -c bat -l config-file -d "Display location of 'bat' configuration file" -n "not __fish_seen_subcommand_from cache" complete -c bat -l decorations -xka "auto never always" -d "Specify when to use the decorations specified with '--style' (default: auto)" -n "not __fish_seen_subcommand_from cache" complete -c bat -s h -l help -d "Print help message" -n "not __fish_seen_subcommand_from cache" complete -c bat -s H -l highlight-line -x -d " Highlight the N-th line with a different background color" -n "not __fish_seen_subcommand_from cache" complete -c bat -l italic-text -xka "always never" -d "Specify when to use ANSI sequences for italic text (default: never)" -n "not __fish_seen_subcommand_from cache" complete -c bat -s l -l language -d "Set the language for syntax highlighting" -n "not __fish_seen_subcommand_from cache" -xa "(__bat_autocomplete_languages)" complete -c bat -s r -l line-range -x -d " Only print the specified range of lines for each file" -n "not __fish_seen_subcommand_from cache" complete -c bat -l list-languages -d "Display list of supported languages for syntax highlighting" -n "not __fish_seen_subcommand_from cache" complete -c bat -l list-themes -d "Display a list of supported themes for syntax highlighting" -n "not __fish_seen_subcommand_from cache" complete -c bat -s m -l map-syntax -x -d " Map a file extension or file name to an existing syntax" -n "not __fish_seen_subcommand_from cache" complete -c bat -s n -l number -d "Only show line numbers, no other decorations. Alias for '--style=numbers'" -n "not __fish_seen_subcommand_from cache" complete -c bat -l pager -x -d " Specify which pager program to use (default: less)" -n "not __fish_seen_subcommand_from cache" complete -c bat -l paging -xka "auto never always" -d "Specify when to use the pager (default: auto)" -n "not __fish_seen_subcommand_from cache" complete -c bat -s p -l plain -d "Only show plain style, no decorations. Alias for '--style=plain'" -n "not __fish_seen_subcommand_from cache" complete -c bat -s A -l show-all -d "Show non-printable characters like space/tab/newline" -n "not __fish_seen_subcommand_from cache" complete -c bat -l style -xka "auto full plain changes header grid numbers" -d "Comma-separated list of style elements or presets to display with file contents" -n "not __fish_seen_subcommand_from cache" complete -c bat -l tabs -x -d " Set the tab width to T spaces (width of 0 passes tabs through directly)" -n "not __fish_seen_subcommand_from cache" complete -c bat -l terminal-width -x -d " Explicitly set terminal width; Prefix with '+' or '-' to offset (default width is auto determined)" -n "not __fish_seen_subcommand_from cache" complete -c bat -l theme -xka "(bat --list-themes | cat)" -d "Set the theme for syntax highlighting" -n "not __fish_seen_subcommand_from cache" complete -c bat -s u -l unbuffered -d "POSIX-compliant unbuffered output. Option is ignored" -n "not __fish_seen_subcommand_from cache" complete -c bat -s V -l version -d "Show version information" -n "not __fish_seen_subcommand_from cache" complete -c bat -l wrap -xka "auto never character" -d " Specify the text-wrapping mode (default: auto)" -n "not __fish_seen_subcommand_from cache" # Sub-command 'cache' completions complete -c bat -a "cache" -d "Modify the syntax/language definition cache" -n "not __fish_seen_subcommand_from cache" complete -c bat -l build -f -d "Parse syntaxes/language definitions into cache" -n "__fish_seen_subcommand_from cache" complete -c bat -l clear -f -d "Reset syntaxes/language definitions to default settings" -n "__fish_seen_subcommand_from cache" bat-0.12.1/assets/create.sh010075500017500001735000000010731353340210600136670ustar0000000000000000#!/bin/bash set -euo pipefail ASSET_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Always remove the local cache to avoid any confusion bat cache --clear # TODO: Remove this (and the reverse part below) when # https://github.com/trishume/syntect/issues/222 has been fixed JAVADOC_FILE="${ASSET_DIR}/syntaxes/Packages/Java/JavaDoc.sublime-syntax" JAVADOC_PATCH="${ASSET_DIR}/JavaDoc.sublime-syntax.patch" patch "$JAVADOC_FILE" "$JAVADOC_PATCH" bat cache --build --blank --source="$ASSET_DIR" --target="$ASSET_DIR" patch -R "$JAVADOC_FILE" "$JAVADOC_PATCH" bat-0.12.1/assets/syntaxes.bin010064400017500001735000020767111353340210600144520ustar0000000000000000x|E7 `rkLlVY%8`tp {ݑh;r9#\w\9U&̎}}1hf==׎Ƌʜ-"dW+TrS Ry}O'Ԭe'}&͂_f,Vi BF-lc~\=~AK>$3!>E/ j!] ѓ-d1-i#S-|>>@5K0G5)vjVBo<],+ Tb/%ǩ9/7Iܻ\%[J(&Xb>2F$#fZ/xO/O"%- ޗ&CrI\KBOv0^,eR,Ho /3)Sʓd7ٴS ?%솲z3pɷ#V:"qI‘z9w猣H|3.,ǐrbZbtd\ *\Z IꊋlwO_-V-H }\c\֬޲^K%bD8 +Lӎ %Ӛ Lk=!vb0AaĻLZ}F&hT*JLɵlEρ<)!8I~jD$ZI9]qP'u.ڍQ6 i#!HGCʘn02@I$i{T7wtQi!LOC#C_6P#\${,+3HeXD,z2Ѿ.zlR3R{y*b3sI6mtB"wtiV@ez\gU[b.<H Rj8*wu*^HNYDzַH&%8B,|-G* ðLo$P d9c]$\"s曦 IPx|X-9$@3ߤC:!ÇB:U!ꐎaMHǰ6c8+c8;6J|Z!heugZǒHC\ghpǔֺ_m]#Elj'kS̐l futs`J7 uMmTwк/ ~P ,\`cZk0R3Fz_7QM& 0l1xdlo2",+c^&@dR.#+ag0Q\Ƅo"|=-`誇) /" >RBBZ C4-=m}zCC2Y,$hgȚ!̸T"?ZaFh.0B#Za6s+8=RV||VkSzzѳ!|?+yYcyx:<8̓b G`V`*q@C񂞇,Tİw0N^]LUMcsI(Y4,|\-eP^W(+Fus-S+C%L)B5̫dΫAC=^d-T!Bx浤9șב hvHc5^/CY4ٴyokVn$Y"% J#&o S.%V+ซ#rwQ(|[4pڨ-b)w БujF\xZ.M^8S˚z<_/? O 9(q=(uk`ۈs%ӨfXD(t@L6 ,>sLA 2=T>-Ձ@[2+Fcl6j\U|y"0DبSDHRx< g{b%/[1Y(30'N?<AE;> N×DcU,Llhq:ѡV^%֖’˽L4@Ʋk}bp,ϛ}@sD(`PS&<^(*S>hJ\tXe՘!:%Tl}կn~^&Ƴѫ "DuRDKr}Z{Dnx`>7w'IrGD:ќh~6-o`ndn2߈-FN5e R _:0=ަ뚒M8vvIv0MN0-`ZD<},1aBHj_0p4Bn>|[_585m:$ӦB~$o)mSFJB6* e̛`nf9)jLi9,=eI+S aޜu;<}VKJvRאR6lvXPt#uq S.Ӄ,a&YIO)RuugVI8#W2̱C >hI/F]NȄ@Gs4/F&pFPӌ }`Lc `kH;dV#^i>/UpR4F| 9:¹:V )3]Ζ8/f)ya '}6:Nv0H 8>WZ@1@:ԖKF9;`6TN/VeuJ/0:F ޲g=Lu)ܟa g(Xb>.43Nc8]0Tb0WtՙKzYa2 USz)U2r9O #iR~J¾(XB}i<1I?x5{.?n E݇ZKRed%p1Tބty/՜^Ny !ĜGbC$As^!!AZqqL'I(-p4k.!H3r:]sRl# '{z_]I~T4)W^/t3gBZl}XlP"H^H*H棄;!R yd ]"hryY W^JK,qPV9hߠ&t䮊Rʳ JƓڂ ZWĺ+I__Ft -X}ݾ7m8;m䚤LfOT /6+G[ԣ=դ<]7\.֐C02rp謕38Oi]%eC h6lrS]S'h6QZ%l^m0֍fTB8kfb^+Sa!p̽Km>G' [H(܊*F^T E47h.ėڗGbN|%9Ո͉7_fN|}7ߌlN|+9m%``~lh wFjv|wf1;~bv0Qce~_pV8=iG2k~ɬY$푛5=-{z*F/"= 1z~byOiZm>zjXJRS:_,ֱn)Ȗ?XJo)RhՒ..jISߒmڒ3֒ڝ`;&cL^cMqcMcVԚVDŽV{cZ#VNz.?sH7m°Q?YNU4iLpoR쯨@ʂιI__LR=,BLBl>2rTb1!Xqc18.BLBl>1Blm !M !O !8)83͉̽!D-BLj!d9Blk !gg^-Y!DbrvyNp~ZO ͘Lyip&:$M%FSErn(XL:nf9F(zC{0J/,3@5K!%lpx x e.XY}HiR2SxEkkL^,q6i^>=@Pr\A%31 uNvmdUyH H\.Ur!3$,ܐ5c+zAהa=0^Q^BHHBŁg 7;1ͅ<8ү8.̎΋K+5$|$)[.CxVBXvL-5(GOFo>_|T@JPsUه0`ęJ hCFd@?y(],X:j*1LTBe 䅡揆[. %^Jn$~LJ.'S/>Jx2dý4荂| ?0㸠,,@Mqf}l^EM@Wd!e.k:g.דR n$XM 0 !;Ѳ46j)^ml4GҐ{^<@axX8 05766̛iN19 56sCKJs127딮ix!E ]ՂeeV%YU([\5oX Zp~$CJP dxG%7( g,vl3;FqI-n&BpS[Tm;dNM.Χd.Rq݊|y{Ik_X,Z~$ba5@y.y~5efe71oK9gzd 0_Jy {1/m䊥gU V*3h@Ճ<_L *1sʮAo%V9AFT/)a,Z$[r07SW i17a!1Z*\<o[F*]bǘS9h CYS]u!#~_f٣cɏ)E:DH`D0-d0`ZJS1Q[(]@>T.DqIb=/K,/m,8kSW"W+x-}<ĆYOO?è͟ |60jè_bu旔ZjdQ*oԌ""x`l_ q}s_#QnMV}7ڷ #`䴄u N}>-<Y4ְhѠ*\a :⁼qy6npł5\ysz22ff*W,`BgvҘqT0Q%q@޻`|y1{O<˚0oigF)~8>HQqIؔ[aSvؔOæL6evؔ;aS?2Eؔ/æL?6e^ؔæL6eېI߅L>d!] StןC\ ;h..kֿrMi|wT##0S s0FH{#"L AKGdostM<@`Hn٬ ׅ41#>ɱ#м*cݕ^"X-vhR4 L$,I2Y)rC޻57gZscVUc|m|2a~FѐÃ!q( o$pXi(rG[1ݡQ$0Ezfq_5ᑊb1G Hˣt_ԫ!C"o1Ea}0d:8rt~7jOEu]pET] n#ݳ8U{*] % ig록UNHqAuFX׾Jﮄe(_PtbM cFKH7C?Ci18s/y r#hKG!l0BˊFh]I7_77V)e#TyZ(yzVdvvdhJ|QH\b{uG(Y %'P}õ.*RKLJ|e8 Pr2Jn(΂#Psȥ_~>b)0|>'Kc1J2_[;WR "WIf}YW9ǘeŸ@eQ*(bۦh}zIUlt~55DP$ȥC S"U!!X۔?JTڄ/" u1&ntDRbyeĖi'Π-i\I\Π/6E6GԵcE]=R+ꚑZQ׎ԊnV#nucd+Vu[ZQFnnE݊#ugd+VV=VԽV}#[QD [Q­­íVԎp+jg+jWT+hVԣJ+1V''VS*++ꙨVԳu[QYQ/ZQ/[Q/ZQ/׷^ ^UXQյ>>Q׊d+u:VԧVgBֳ>>nE}!Ȋ"Ydl [8_PK!/ߞoWBWC7Bo[Kz/!oRKv0; L_)>i4TþDn? i? %Lf–1$ K1S*aGi?KAe}zI!DtqH7xGY\pr|^W?W5TJe( .Jn`H^OyWi2H *N=9QrKTJk]cxQ+)̡hS W  jL?c(f?"3m(J"c[uNQfYg2_AS&ZDC$Mt΅Ӆm# ^hǒ@3fmƸXE5v(Zc-nϱ~c$iFǛ8Ox(9^_lrzX6'NÝ`j>7IМ fŤ; @ S~Xeolmk?%˗CCuW>Z$z+8qJQ~uiq=fс Dj }@_P5 lyhi2Ӝ>i(v3,s4,/3j;vȈCGo>lBpowxX#ڑcU}3[wL9jddw88z qnnjU6碉EjǪ [*`_.ǎUYRg{LӎK |B$Xˉv&?0@iD aY/K%iI渲ZAq \i0+hRJ "#IG@cta* >E z;u0TARD::BTy$he$d-h#3"g*șE Au!lzv (3sypSBKrJWjt 85;TbA0%X-GVҠONJ. ySK3FT\2pRۛW\lla**?q>Gj+"+#?زJjXV>Ǫ5jtkɸw3AƇ9E sHu.12]j/KPEnhFƸ5G'Tl=YMF6XľɐV@1XۡVeP7J%pg̒,M}R HmP>J}|"NLMhX!ZN\4n| )GT!"0^*]8qW: >6ԌPqȹ `3k 83w`IuI// ȠK!]DeUN+\VFkdyq(fB[$FU$PvtՄ55%ko(b`8`n0 a)Mզ $X7**&ZJ9gࡷ^^~~+qWQeu5ytJxУu t堽a9 f:Mkxw7l %u`C|cGfݦIԖN ު*q2<MvIf=eص_`~a4f B@<ܝJ!\C= jWlaSRvfLgp5aWx $aWN5M06THɃe$ <tILZ2Ԝn`"^8F6gek{sn(ỲTԺQٙg) \9vaœ)_+tIZ:[NVuٓٗOh]ND DeKEO[E=gX4*ryT\Wg 9d(rQ ,S1l)P".faB.>n;#C I``F$c&z9|*4Z& J\+CYS pAAj2kʙɎ@?pwfg(;eRH VT/X䌷| `ylNYhc-G'ocÔwF0cr 6Oe_V{`]%VN‘Ti1vi ~Ivq~:myv̮:hf߼nC/bʧ 0,gdl1yD.UdbOJ I'v9K2 }^&[|:Xg|@ /=ٲYaOP+x7֖OwvG%^PuD2<3#p#"{rUP=ƞb.cW62VdOK ,sŴիCz! Z0í´ qTt g2 ?=Ey/{ӕC !0!B(FY(e3x3~J4j/T W3(D8nC>adJ>L$.'FHBCFY*С` JEq&=ƩiAe@9F!=HBPdӐK!\B?d%GBs@a'$Ľ 6[I)@:t2T\XiS r(,!x*ePk2e27pMwaxI[Ob27>yp7((ox.kFeˏFȚ9CaM;{7ܳɪ35 ׀kXW vt&I_d gDxw(l?TSxo4q0Fv069- lR#Tqi-,tߪpc{}}9+q06@5^ُ -s鼕ˠVaZ>LZlf7^x?PSzx>/pV XeK[74dW< Hy6 <[/x}i·yGrV)Bq?Tfle7p݅x(Ux},Aȳ+QC/ G:A#;>a]ܓ[ǯ)ս)b3Ir"v\,W z&@|47ƼŊshaŪdvuϒUXm:5-0$-UdvM<@'ĝ#1|(+e!x0#{j5a7."n_G'T$xg%LdY *.vEw֖A؅-P6F`pf`b? kLtnP6@ l8 7$Q5(Y쎼(yx]4KUZ-1shdw`{Ç6#Lv+[xe .g2v^NN Aq-;Tfb ]d;O z>cBomʼijF?`wfYdqg>b0$=)bTa̅",GxrupX)Є[@G6hC0ܘ]0zU6(A6 k}_y=,h- P4yB&,\}6@.@O:Up1h8J- ,LHLcbGad1LމL1BɝMxRѩKlMT `g Q0"4^Vo7 |]cz@c>$1R'~gx(ޅrtd.]:ɳ {`|,K_܏-= >yva2:ř\s=03'}YLb]恁g4 aƭ?~ M -LI4L?F2:Ief|0SL-0SS9b04Yn9]cn#3ó"  `vp)r4}ZdБ . hd"#yͿPTm":r REi@ M{*Bו,\KL r0lɡ/nl|o)$2)C0<2hFL0?y^3![ Y Svw&Kλ)06u4gT&fܹ ㎮>;JQԓy|fpr ?Taj\q\;Vb# 48G{:7|\ZZg>.)|̓f ܍ A.BLߍ֊W4Z+eX@L]gXPvY}G b^ Z--2oφtOb|/׿bEj t|~pH(IiHBdͽ5XB3#Eҥjc 4d(R,erBY) P2nFkM:u:UYs}.y C`Sg sGRy0@P³d{6h-Btv\MFM]Nfnab[=؅E*;TwK9Nkfm="%+;}{fe8h_ B:,{at1̃&-)KL6\45ASN7MSvF2s*J+L/1sEdEupj3& "Ex۩E0%NeKDz0p7ʐ{C[ ݑY4О[3V&tKɬ8޶Mݭ)waS_S>1ZV$-+}<6'ǶYÓ_<|GJs dtx.RVYQnYU4U@1׋} *؇G?H](k5y 8JY&R~av!bqc!hbrNP,r yFu}V `_,,>-&PMuPAڻһU`ܝr/dυQ`k/Y!$s@bʁYLq?HwGcr ڤ|nfi`6Ǎr:%K lv5 uәRarl29i)hxlk@]z8|[d"K2CZ> elnOxtr˄L/K֖a=r?eģ r,[+ؼՒ |\˭VV,c FNJ YP&Wc+Y)Pvy[X EJeŲg0ǫZ?ZSB*py[Y~ U7.c fv.c/)lgz^pz5WqIĪB庚;VgQ/Tr`E0nuƖdabE?vh8ϝ0]{FC71Lƚxe[$V햘<Ȥ"j6,X/Xk!`kƋ׀3\&ŐIi^ZTic)X9ŗ=shUڅ2kͯ~-oky_Zz@`K/HR1[aX54*vrX+RkK%_9?p ZPr4 ˩&Q?gqwat 5@|F+٣ͧFˏw6MI}øCo2-2 s9˜\k0ǚ!tE Xu|qmnTƻih`:PҼ.[[rPQ <+vN2- -rk3Hb)D9x='Qd؛UYUBDX`ױ]S:gor쾭FzIj獇C<1e?Y'St5S,5zJ%MXqA2pnc%:ӦN_7k pV$)Am|ľ:+nþN+xȾ1k+&ʧ+|ξy+_|ɾeW+_|;g{c`}K/b}k֋[/^joz {֫W[^koz&{[쭷[omoz>{emWۮmmm]covF{-[mwcom!{]Gm~~ Gy~~>c?s#ۏ`?K#/ۏb?kُ^l?zُ^i?~tf-W}m~{}퍛[Wٛ7o7_bo޼xW7>go|{Mڛ.7]notiiii*{kMٛ7`otf{-[Mٛn7aotn{={Mڛ7=lonoaoio>bozcMO؛7=eozY{sM/؛^7doz 2"{K͗ۛ7o7o7_ko|{]G͏ٛ7?ao~i{3g[\gor{˭-[ior{˽-[b|cO;w>e|Y{s/;_wd|U{k]ۻ.w]ju {וM-]Wۻw]ku{׍]7ۻnwju9{]/ڛ7?ho|{Ɲ>F{MFKM V؛_7C]co~Eoo?do޾޾޾޾Q{cP3;.w\nlq:{ ;nwiq{ǃ\no[;ۛo7fo|N{}͐Qnoj_-e+-W[6[6[[\koz^z~5g퇟_ioI{S۟y{;e{;HEK;;w\cqf{m;w;wk9ھR۾f[{o޾FJPݏ>aohodolobo t*{kmnlov.{6m=foo_rUdyO";3r%<6>l*qL= v2=6$t|`yx@>+T9q߽#䑱blL#'"MQE%o9F_ys\dPrrk(y"qs@k*PD# v#b0ѡ|j:)$'pgjNzDKGI)c!d|L6*Q8z'ȩ+E8 :@Lȟ 9d)O3T#E}jT#g"SdH䰦%"Ngq!#A,soy#<(Q*Nf<6}%j(Pr˛֯۾^lo(STJ|@v@;u߭h^@~8JCkTةj&N%~824"C[֟FZa8 9֍\bAqϳ=x,Szs#KIqwGgix,j,p :f1ܬ.b )03ll o|z%_G(]NONo'2I$&QXTb_9He6f*_@B2͸G(3zEWT@:CjQ޾<:$ J;T"Z8[x(ǩʤStđJN8(YGEiGPDQJh_ӵ)LJNC랸m ݂l|RMt覒`;i{_<&9iD6M'U͉MB6 ^oTw{Nv[TR})̄vͦE ę$" MdF{616Hй$9]Su8Rc*86prlaJ^(齆RЎfSnRգz6m"/,ج̴YaB*Ez\Fծ& 6_Fm.z'xc7(77 I 6o!={}ko#Üq;sHG;bKʾnR 0Lw+{IC>)c<=@k4=H:bNm%YA6C)r&RۉUWNY?;ISFE(# HoXwU8i2A魟H9yNrF{K|x(z82[y UIE/HtfJ|z|}ˤ ^!I.UboH\ן}}@d$xP܋=PK7 ({*=iڧIgBgCυ?BlBpf_ 5)`ZWim_ Lf0mה7 &t_&I~kmEa~(WRM*uKEh)R2lA&w&U:˰N$ܓ&;k>mw4M3ZenL&~]|nm_v:EVT[E1x }pB&gYDA@N]֊aVl>7g]ǴNx*ˊX-|0<2X/aA5YްA"~n4-_^RL\YkEc Y Q+x] $(;g"Ihpl}XPk@,Y` 5~bʥpT'ey[t&:JTlMkV]|>1-G1گh%[b*rVLS8|R*kD*;'9!BlQ*&  -" Z=qA;ŐJA)TiD]e@AނN|ğ~? T|cQS˪a.cLN$_\P]oOʿb8]hңC*!:9o܁@{KW@GOx YRa{ -5=|@U29bǞ *&GYc(S8"0K Uq{Uer %5IM u}[8qO9koѫlQӘM ͯ8%bBAVӯF{T8[@pG(bkF[= }~'?T/0zZadjPԩZ)P^QlyѤ{1?^k[؞^]դ& L8X,E ) qDvC7Ȫa|P)Hbm/N$݉c nuWd-Y<{?I1G&h p"*D#oN%Ӵi{Tq" 7/2Ӊ8ܣNd2 N15Kᴭ$mKݬh'-Gٸ^d_Fp 7%jS͖Hڂi`Z eeTW,N&g$ YxIbB";ӔWd]OXGVn䦩 E<IׁĦlS{hsT53?&17HWmScǴZӺ>ma}LcfD~S*qz$(yFP@-KIyHˢpp+Z> ׺JP*.D[S\[|V]Hu! i;.\GI%:¨Zg5Fm^GpϪIlH>L}.dM}H0;,k({%C+ޕ{lلc\0R,C/I^]%6OGLO?="#f,g y2Mr^1Q$ס{RPb{IE$.$dR|<(WI(_2@C+xz 2HڋݒYaq/?/W` >yG?Oeqô!iwΖE|n)-cs/l œ L9Y<;_AzvEšu`͝(  J $,9JUco봬ٳsuŗ[Ia:Zӭ㏷.ll{j)t\Ap: @U'z*/ kӓ>qO\]<*Ȗ+"[7FEml߬-A0V)W}E6ZYX?qM8]6.|=[zCP > tHch74FhY١ߢoUt1ȾѸ]b$BC{ɝD@kRݥ#Ùlo37G4:jnZy2t&9ī=gtvv=re;;q /(9i]I-ls2Li':;}:uƻ' ,WGdk@dpEFngK5<,sͶ1oLs^Aʬ AG.w= _ʳLmޱagwM8Bdg Ja9ؕ:a7NeݭSp_8_N[ǟ[Sp8}C'xrLZ"Ylζ|jmO$0)6@;8QmLՈoG $9Hd]aqtqRJ#;md,67m1[3%(;N|-\`x([ il:`"r.7d> -j-VVcYlbߜzXgft*X-04,l7zfMZۢ0x=ԣL4$< z>3G%Zw`rW, iPָ#D% 7$u!?BTî%Mׅh I.Yz$SAyf$F 9K%m`mRf`.X32yTfPOWԸT%q{z >&m^*I`<ĽTF .KePBD2RL*αJRPV&_]^*J/R& ā#k #E(EDQhup %ȵ@1R&:y/OBc͙stEx pr)W@ZU͘ĽF,8Av?r[N?Nla ܡùxAYggrgD*L1f. ҵ'H1F3;IL3aoB*!r`kP\b}imL4 0;tIښE(ft=dK\9qiy.iH@e8"{3?v>1;ԑSIC2C$i{$vT$u1ic.ӈ8 GO'%ň R.hL"d$TT}e$WkN+ZbNZ)Hi&hd>l !֐zDn n,„!W0@e~GjsI">bJ8; o\nv4F:R:aä"0?B ۋX8G供X$\ҤGo Z JUasS[Dom#亇 \nAryD#~r@<_ Xa5ͥ/) '}}Wr"M9T"{ KdaS8 G) pmU`7 S.⒂j`t\V_5|K݄}vF܎S7V JYz x->JO9cп(9VYė@e $O R7;Fz|Fm"S.a2AVfJ~ a"snJ/ei+?B=ѭXm ?R(g!|f?u3FV,uj bCR+zo^wY}9Zg#2z̭?u܍#|}g 4:KGYQf>w*_̰HIViXw2.8dgxY2Njߩ l%'q-MgCǺƮil Nglr fپ6ۏН,~Tf)ZKhJ0\S\7l;S]wvnfr1KϕY]. RS;uLX5z#WK%,"Yl'OI 9>XVT ;u=QF&{ )}ӽ,im [+:9\3{5{mם`]8y]{d9ǚ={ƿ_osPy\㸇G>8U9)^ = |X9*`\2ׅh;B; I%vQG¨Gè͏Q[>Fm}\PDžIs5N 'FמT֐)'L8@[\@&MgreRmI}QPg,xg;"<:l|z=v=%1_ZiīXFо5үGZTdף"[!`$;>5q0 m5[k o ;ψwgޝ?D~?DNPDDOZL~?&L @Cir+ ?{q;" u2pʡPP,o9If*ppz]2].Յ#xO9Bd%k`p?_5ή;QzH7O&Y$IHAx݋ X;gٺ/t=T)Fzɿm0bw?_v|hq\[5E?% _eZ(/!Ȁ^Wq~k8ȅ8aVu8f߄qqB{p!=ƅ i]_&sCqϾG{ qAy5n_k HE$KۛRFAqt-޽;pM5G:#q DU89ov?DUHW=@D9:h@9BT.ڃDalJw!-cM#mD7vC39c i֢ѽ5 _N89FE-4Dmi/xKz#ga^X])ab'|2_n}_HJ:рDxvPD8L\ )Sj4_dI7Cp7+<2U^ƃO%aJ"qwFT3IyTDj 2Z-a:YApʰQJ>D,_ JU0^$l (Z-=h 黄c-1,bp1>&2c=9^zh%8N AZ'a S[K(X'{O!TVH]^糅nb88q ȀI8Ehi;vbˊcV؂ pJߪ}w|jZ3e^/?_.7`+ pkâgu HcpYe_S!i 8 /]q|+V@%>\HK\t\tD-[|Iqيk}5.Z<;}"HhբkV?V>:l/_h-g \ip-% e9+YKO[!#&kUCd!rzbKЮH^/9n|7U#Yrx&oqG62Y}Lϻ#ݩ$; "ӵ|-C|^bx6#qf9O<Ҋ~@;̜ 5{ $i l#>fǵai7Y&vbG\L EZ,cGFz ^5QG\D=yMSDOGYL"g\K:ajMH@Ŕ?5e&~L>?-3Xf/3[f"A5hă/?#XBJcs̛|0|0otw<Ȟݰ`h^e5ɲD]Vúj~4e5?~j~2e5oe5]V.XVռ3e5?kb~Iԇ{毈Pnza{2VM:ߒ1ի{ d{~WݵΉ[ if19[3xJi:oxXabVi);'@{be^g,,W4k&9feZNjtgs" SH`vߝMɦczxb0<<<4-sDV LJ\]>CBa:a"JQ/0EV z/T"Ț8S,ÍDKŨe%(;#({y{]Nc9_>lg`rOyzI vv7$[a,~P3:{d>A8wH/@ 97q7<= Ts:bW [ec*s8 oEOSN$Nm:XĆ8{X&<| X'/7'D: }Y؇O‹Y8<,7/- _x;O?@7x7.)./\,/GK$DEy %}Q7Cy] TvVsǺBgOg_{^1h?<y}V;'VF!=ij3? eFSÅ<{xXm?e Fv\:KY+Sn7S* : h}emuVP6Iq ^G>f`5g _냍7vľ8SLN9cQYGJ^98y:T`3g \lGqvE/ī`@#? JO=:xV>&*WIqӵӓ ʃgW*)%}8%cSy*Q"SB1 =;J1?>katgDa `b\T6>*29!*ybTdQDEMl7*r~Q3X"&L<8*ȖC"[l;<*GFE<*be611QZ,*299*بȖ)QEE~BT"g6D̖ƈI$FEjӢ"'EE6ǣ"["[GdRk""MlOFh٢t`ԙn^k>9cd#÷f >gdsG)7?DT)`H䩑` "ZF.k[ ~Z$،#f.Q7E>O*Wʞ!@cS33 ό Ֆ*s)'e`rt{@Ċh8me4\CpͫZVGõk[ ~+,JgGEjL|@7G~W ;N[9 '"u%q~B{J=qP9H++y7, n@܃K%u!ZF!(H0G,7XEfWɆiT3Ÿ1苂ҲQP󢠚ZrQP(BT{Q2x3K**Ei+ɦwzė+((͌JVJ Qf ;":> ӓCwU9/ц=&b`z'mUVdAf$wa}Q/H%`9}K(qQ_JL]ӗ $k\'d@B]/k#9MKcy\qn!N֫`&%d<_sub^S[bJSYxqOo fxw#D:80 f8y@U 󶚨l{i1&흤q u6Hdl$sܽ4j+rBәBd>AY\(CXHKIyzį5&pswc%!RbҎ~TNkcv]o$1!EͲGI= 12dɦX~"q;"?Ax㳸$m!ݭ~̧If342e$5"j9-א-+ D;6Ë~%Ҡ]Z^&:[Z ,5PWI*XN_#$eXRV Wi^D}),ItU)a11OoAx^謂˝<bd :8[ݝڱ-(HCb/ٰk _TüYlΪգLaޜeľX:&mƍ6lh :ٱrQkX6ϓs~|ְ<,Sdu4e# 1f5Κױn0蜖 >tDN9kky:4";Ve@hUt^A *kSNǛ^X^u'gѬ:ȅt<63yB^ٙr,bs+t: ɦ1zٛdMHz2R2"<>-H%>3Br0W*D kW.M6hҗėE' U ly_![RQ Ŭi!HH80t& 2FM2Mn&(vQ!@G+@xlL{M[d8ÐYI&~[; C})8%b=#btOL({0?&`5ac[XS/?QH ed&mdUpA~&0rŅtƌ dF2Ln;/tvoC;Jkas#C_KM*,xx~L~LKLk~/`Zoim N Bep/Gj JKc(YS(9Pr__սߨ*?5NtPǃ< /EoMm|Q05! o[|3zS ^-.sSrόC'16JuhQUQ{A@g௽ٞvw4`OXw6(D~ѱױo̙Ng:c{2œX956}zi6a~Y% KETD"b 7{J 5JC_̫=FĤh8mh~/WǤChC$h>zC!h?|UGwDvdP *+Ɲ5::#C xvlDpmOf=;6E4;nDpx?R oDLH:e{Q*0AP8 E SobJ[6gf:MD="pUMMB\3RIP{_V%eOF>*$I+ ~ -= \o!) J Ռm$=N1>Zf 3q:50sB9p˧ND9$ h;;9Gp_K߭nK󈼨)D|RYGy*RbɑXRORՊ*]CtiJlܴޙp@H,$XnLz@irIn!b2 ;WaZeRlR1nr>,Sؖ!<i9˹D促 6"4(sEZ\F^Gm~l?Q8f&\e/iZNqۙQ~-r $\ eg+ʦ`ŲeK֤-\fjy&ԨeV(?Mb&f ӌ2`Ou&ƺbhϼxKbo^o^n=$"Č\δX( T_bwĠŌuJl*V{]{o+z{{ٛ~E̲C3Xaz̫77*\Nx}yLC ^ߙ ~_1Kfc}otKGy772jj0~=^F@ȸQ-(!]ŒˌO $(f;}XUt;wx✺m4Ÿ0ic! O r޼޼+^ 9mj&e :K4-cnbٌQ˩׷azc}zzګ޹Ψ^Fe ܋0/OXLY A3|Z8Ÿ5r?k*BI<}wYlGo^ zO7X߸|!ƖOj_޾uo/_nWdkWApQex}+|+:R.mnv^%M7(|!M[/=;70?ZcfwwL9P"],.xHEPeXW~$B;dA9h3]ȯoC2E x*HF@xA;J;[w;\+³M,㥚0{]zbFÎ ;n{{/!]kWNӱ EfB?d ,8P-./n7Jwҍ|^TY'/@}Psk BS}R6Ȯ2jqyҍ__u{w `3x[x}Ia#Y^|ݫotgz߹ʟ-;TUXo܍EW I5;VWπ9׷]=}wnce=_ X+_-c֔_YPY?{ꟽxx福I.KlGNʔ%Ȁ240xZJtU69dbf5^w{䖍3,Af]Q0XO}z*@[6Pp Z7}_߼7Яݼ3^xb71;Xqẕ;XOJn/`޾n/ .Rβ*i0N^#Ed-U\wb k9[4qψZr@يhyǕ<'jy]aa9ϟR%!"Yet0YS%&9^rMs/ c1ƨgd-}6l$yu|!h@ʴK <_&$%SJM%8!ʛ]B F <$[t)_[- xԮxClY1cj;c!N\wܸ-H:ʩYlY].\yjg v'50{.~8:u}CSٚwoMoӵ(za h8{kX+odQP?(~HM-b76m_UaDv;/7BG1_m6Dg#;QMNj0d(nHJ'8ҧR(։0QhoRλ ,&I&7q0l?;oc)/o~ $ / +ˁ& ZY/ d/5,\y):kN+rfKm*r!UV<78tbrX8];<(sg {O*gX~KS]tpdk?ls,<3q|,6%vhLLchƠ %Y WfMgߋPESRyOL5Ulx>*sbUt# `!;UgPQv1eE4ŵi-vZMkHˋYPΞ7p0^9 nT:\2 3`fm$j|j3 %0G(16. Te0#5+ٴuW3N&l{1I=031:Dn;G6}pc07=xeg7L^bsV.yrO X;Ĺt&`Ei==01&-jvt(KPW d63,7vXTVnVjLƂ229+S9^`7V>BY=""֮jB}՗k@PUX"cq ls@b֪7vv;> 0IewZ0+[(U+VN6rۃbf EX zwK-BcNd%g ,M];Dp2Xҫlpf]p3l;?Zh%yb][(C-L+O2Kk0YY+VD=9hwg\i] t0yސG.Ĺy9Hpb [uU.Y ! K0Y|xg%`a[7V,Zlq &Ct-VRRGVbU-hHbZ]FfKu\+V\%_& b==My>Ŧ rW m [. Gc}7N8CcYF:7hbMw:#sC9 뚩\دcEl(*N&Z7}n5PGG9FaJ4gϝ~vYPsu+UilWDz$w%jZf;KA板Ӵ&i N55i-`Zk)v~0LafVB!VTOK Dj#Ŭܐ0q8qp mgn FĂƋM\X} yZ@l$:Vt+V/SFA<0xaU+FArGyr`;הbh[Dkd3/j$h"sIFЮau#|/p/p# &:=$Xd^tpuGȬFĠ-v{ ;;ȰZq' s%kwp~V0ջIyvTB a(P\tё 'NOG Ao78=6:0Py(h,Vc|vW%vТp2cN2huz]wnoHMj55F1yņ1=T}z >o[ēU" BiE7Ɓ_g %ҋyV?7>H|/ 2R ! 2{#df k!Y4Tor< ¿4w6wMa_]}'`$<[) T4:~H#JvQGԏhy#b/=>旅K:k/Yq'ʑH͸o)VWOI3"Hw sVH`MV[ 3Vl;,>aNmty6qTpKEHKeHKUHK~7%ҒҒҒҒ߫# J+ۤ{#\g*-Ty+qx8W\oqg*ـ[{w65A͍44o|C긮2̑.NѲp"usyMCFkx39QLO xr ;f*vܨKCN3,o|0+0ekn73wb 4dpŃYR`sbCtqP+OWzJm#'Yb95!+QbR(KDU},+]uz;Αͽ59,8>wU&PM4QT/Jםp_Gtxl|J]]s#@Q3r<@Qn+r+ۖ8yh8?uLnu3?F W0wLd MNVJdd` & HNԎLdT3'{i0:p܌eNT[&qot5n*Ѩԍ <6M ZPWʅ)MJ~WJ[O45R9 4Aqe x̲}]GHG"h",5r*}*.iEk)BF`ă83BN'Upc!H|2Lw|oE;p9YiB m%_$L &*ì6@v3f%Y ("D1lbp~yjsHCx{suAxI1jL5 u9Z){GHIW'tF.ݤ%Uf4^4|7B*dƙ[FeМ[԰V%D.OO>K#\2Ob.'莻3ȓpY$ M1`x9@L݈:*yHrCK̀dx kC0W,\$ Km %DRPhc6dA d`7n @) L?Jσ5//+w^KH o.%]kp]F䍫 #.htf<$* rl$0Ds׊ۂt3L/EoȀꊯG"- ٲDW׌Q\Z"Ba#j#\Od ]Cbf%WDĘ&c1-DG3jmD˃~;0NdiagMF˩MHH&~$'9[yp=Q4A&@ 0p;3a||g8]+;|O8^@_FX6}+pggi>LT:f\ˆ27V|K%gӵO)}Egèg¨*esjY<}!ZEF_#gBB?* zT$}5R(dNV&:t?M2ZjuS&3ijgwC%dGX}Lp7lt6b85k+(]!;ҺY:5/:;FɍUu0S1ÎD 7dt )LD<;մ{ ӎY̆M*6Lu g!A$t:kܐ'T;SƗ#˾Kt/$aA\5];F6l}kR$#ɊPxc.gVgp Hpgߴ j#bHW8gu-+kdq_egF]>ƢƠ%$̜S[\ow:;:p-J#;8ydrsZ4h8S"MCG|ϝ=k]gG'5͚%hPlQiTjFSbd R ?gB JtTvQ@X>Д^)i|tcԌ%(P/~&'G^kT; yb8Dz=Vˋkww^Ӟ}/c̰`I)liXK~]=IJ?~f *$'Q,1W,YRyXj,_[0yh(1%LpAv*}YbRb>A-~1ie p DJ)8HZ-㻞P#ױUǶv8=248)(IwzA /-󊸵d*=";7j*}tUSͳIk*Nqal*~.Rid~ _!ȸerJJPOJ5LrX-{U2r@2\XM`R[w$dU$t葠[v uHm>v${=s}W|r$L Z?trHGn{$}Fn4t#Ao$[xơ#<,<|`G|;Phwrx\ܡ.^)BGv2g5x8XmMGeQ?V)"x?r ]bq}\eQ%H1b''*8ko-/wRza5Y x8}R͓ݷ'm\$(|a:8C4qwF/Ar͆=5Z(˕$ba|b !t"tDI5L!# e ZI >S[,b]NZR벗9tnW{I/R%U8#$F\M:875̜o:Q/Cz D Z$7I(7I(7.H=}s 1'ynU']e`VۈR b}>eti2'e"#QfMҔGxU=qڽDzI#yP9g mt׃ĊSS[:[MK "[kW=L\q؋FOvp; wa1)I]Ia!hLjJ09D-BfLA'aW*zK=M ]g3ċȧ%PxRЬX/D0/F廋/ub0 r 0YWa*4Qr5L1f@ 1}suo|d t$ݏFiO}췉A#;)]Ju0%CJ'Q&Oʭd^jS5hY?&H\?!6(oIM:'t ybOs"btND92z"TXrm-xgt9j4̵z%;R9gus.O-0 wnKRbo^<+0JJ9aUp5t_Ư@ ; $!R?e&RU]_HOv1>L v;g'T}/}i߂iɿӚLkg0_C4\wg)Arqws0P6zJ|w1$ϳ5ʻO"L+|Ecʄs_5-APbKRJHw-UJ y@bg@:qkR8Srmk8ɟVHcB9{W}vw=JU߼N%ϖ=)J' *9) y(Zj; (Q_`<ɯ%>lVK~ޚJ"by TRC!!V'ATG#CɣBGOwr}R(cZlX/Y\?yJIU`JLQFk@?N tOh0v"rMXӣJ&K9`KZ[DxF!wIRR[$%g_TM=jټ߻&'{PdIߐG2$9s/O|rtof~`? s Sي?+5_Zo*w|;AƯ*_5Pu ߔ)}5n4֘}k5j!U{oR\ɥ1枪{ ǩ"@Aُ/^zo&Hʽ4kvݜf~rLN6|5#h2tv͙%̑1q}K8HѾwy0IJ~cCI|yI '8 IR ͣkU,>TzUw\i"ш.}i1d,Z@d7TI~dGK ˮtwv;UZEӐll|-qtg>blAn7vZ= 0CAy,9#A#MwRJ+xdmwyܼwwy"L֖|gtK<Fl}_b`l!XBܰc{s ))1&ŔR)o5/SSsEdM:رN|>{+8;bNs_a3rYhfojj5ts?u#?8^̓?|]-]Tix`/0lV #i4f}hP/Sih[iJl]301Zfu=Fn/Z#~Sgxtr~N3v3r99{Lt5d8~L*7'93;_nH ?%ްaUB֮(wψ=`pa,7tγ:Yfk7Q~aPNON =TbZ}vR}L2^T2}_ٱ?^c՚HԅhZ]H2Y\RZ& [;ӦѱڌYѱ-'GǶΎm#dw~_Fj"C*(" nRq x濯hک+Zrv/dI,@jF"Aβ%#~7QYo8N+z7ie&oiSCeձCpJ6eR3"C3"~U~yy_-M.m^۲2:C{kVaRX5ZQ[vd p%%WQm2Fws!x:Asv+qGg0sG$7G1;jg$Jvޗ_%1`#uKJ>BXXG [`FC{P/U*P(A .Yd[Jr&G!L"*6CI9/s8rD^ awP\jnVBIWdA+wT :( ?e~n)7벋ntDfg?~is#GZ=>=:&?mo+}gSY)p|rl ,p?~JنN*-c`׾hԍNu.%BIZD[ i+aެTg.9%)1Ġ J MD6Y?%JdMvSB 槄桄d!q)9Yp+yOb:K7)>>*`s+e'sùbe-gaӦ><ІMvI0np `dUxxU?bg}BKgM_@e%#ܾU6C"ir>%lbc'h[Dzy\/jUMzXe"g%]ֆ^u֬@ b4m}C$qAI=p`\xr9p&(~miCCweFkĹ0ZII9XZtfTNx},9 `a' 9=M{v܆qĀ8 t_/?f|ԑ3A`]Bk=ٮd7c%႘:ܘaPUJ>jsC>̫YX 頞(c5xY{uPkN3sĮ,JYIS.7>ܧXLͣw/)*#+ &7~JJad[RZf݀58LN n[ 1TC$@,1` z_:@ 5 mo7Z<j=YWﮈyU٢|@>-o' 3gFc17@dEL`[F{ˋy)蜡ݪq򮽠H?e=BݬIcd4n76$+PR<.ks1]uërGk۳.9^Hۑ#ޒk&WO]c [h×B/yw71gCw[Ho]@㦍{0m%E6>aXbϖyh٥F r.m.jcߔ]a'I| "Av(5?\J֮ ڕ!2lWFl4|_Cm|j#6Zmw/7zaʮ7x64oJvfO h=2mSܬf.mƇٱfn"vsMβǶ 9AWll2>}2R2OhB|)f+:!Wܰ#xk]`wy0mFyψ cFoZٔIm7&l4J /J]F=F?9/Ԩ?bW &!؝3xf ,&WŦ:DgCBgMu2:TS rؐeyjF$E|uH`boipfYuHI׬߶u;Jx;uUXR(b{VoXĂ3.pfkClHސX!mCbvFâx;~|zQy*xY+쩬zVV;ebW-{rpK9rj]p* y;vI3.0t>+%~t ]`1X9n&[moOwr;ӗ.2cՅxiN]"w[N…QԘfs=f.%gs75X |1+2m ǧ"-Q`/cQл"q !5%=SD?-Ι!JNw%m<5ȋO%d T@#P+$֛/Kcf7 +@ȏY;UVV***: JNP '*ެc<.rqC~T\ȣ"7=&.rc"<.fgf3l q"O|r\S"9MO-όٙϊ`qs"ύ|^\"_9¸M/-/ٙC/Pe1~yL+b72&pbxk {_QXkzk }]º$X Jblu㍽7ξY#04/- @æykB{["vy0;1;\vMyW8{58@- %C!D|88n#[(L뙏*h邭T7?d>}"$2ɐOD}Zސf=gn#|yrHք)@@Y}TU}FKD9+:hY2oRgU⿎ai.rk]Dc)l<$ԩ͛)~}vexm䘙:6lפǹ&JD;^d>5Nh*ًUE7K2i=;퀶V E_-Oi<:dxc|n~VjUx?jk[*}iUg]L2k-~NHlK3G!KK [j)9gs/KRE] 9bN7Zek΄Q[/e^Aɧ7V,WcDSn仏wq55V])dUz4zgaybH`@pTٰbAPx%V*r~eppyd qnPWEj2{,vp61 'b߾fap9?XѨ3zh5ܠ_/ lGf.\Oah]T" 5k5"RHiMg@R$ҬO P:1-EY$2:m0򨀯xj^Fw*3m LU`:Q^)WWk[;^=:^nzB @r)Ef?H1Nf(Y{EuKӆ=MhVtXnI'iMWV7Lp|^OXM\+ח5[; "|M4*8~%Sf Ea-[taʀխjJjL̷foru81SP]d]/8W#sDEeޞP'}ǺDgq#W[(H:uZ $YL)mi(Jd@dn>)b(A(捂ÌzOjf7{!Nr}.B'I\ ^g̐Ly\HHV B"!CfHѐMVHv0TH6LplpฑMvp-w)" 6Kfbp"UQTE|vD7N_<\p <@k!Aڃɬ" 2xH@{h #C ?20GG6?Fiz:8"d ds:O$ ,?2z}02}ᩄO(#>ԑǃdz B$t,RCgl3@1VoH? DLύ2=?d{Aa,~!yd\r/^.j^/SS&'+c R0 ߆רJn>BARb"X"o/j@ӬQ(|1647[B!6崌 z8JAi[]`~'1 [3Rr\N}/YH(h>3&{X M|$ɋÄ)>B4%< #bF@O ?xQA|,>O瓤O):ӄ7GYդȸI~MFR;s'amQss-cxAW{b7 wVa5[u]"lZw'BoJ[6.j>i[0IبeSfy{<;uo46KxU"fμP%fȫdg}idb Fen՚fM>Pi> NP ]X Jmu7.[v {s[\jؠ`HkU ŷt9a@ItP5mbR؟@ TZؾCFU$un=VTl'q>Ԯxo[4,)YYCWScWqhݹ2$UM t9w7󰫐 ۞[L*GDl SQb(Aźkd#훹hڬFz}}u^KyUh(;xϓQkf}JK֫nL_wG}F$Hl6p {hO00;N g;Tڶuu[jKgdG`cY рq09yP0̲ -XRB`Zp49AGo7eдjs# a>\BK󳍲:+cqx6^Zm[۷ïugsv: 5=7f Lx%z5p,3ۡv=%Bł̥vS6ۭ`)ᣫz6|m7V Zw>}p_t!(RcHʣ. CSc~ܙ>d|dn~}J]#lcM6s'Z&^uamO$ &H^rd;Y7>h:@#aʆXr.WVeBx= Xz_&_/P'ـOGQXgɮϥ9k >B7bN3_"۳b 3uڝxn 2>p-<]3_C3dY[WO 5xshb[u`h>NҴq3 [{,j٢6MOFVox۽ ?CP<aߏLe~j *-̏b+ !19H&s 58f6khЉ9v5C@bm $n`S3@= W 13iێ/]v{ b@3lǯ=ON]Z9v]ZssHI^\Q+U)0~="(DTp[Lhh]&}@ϋK;zLIr@w9#$"B()Vf2FX&3͞ӸHvUd`$X"jZN_^aʋ$H!tE@Rmԇi.w{v1Iq\"گLi66 l7 XYz pw_HyXMޜj`qI4poG|Ti&/FX1_'IJ,} M2DUHb?*IT68myO`C1REԧiAi!cX9NW"LkyvhOxG]dx9}{x_2"l##Zjr2dVA"t/ b> CLҍ##aDq o'}J-r 3# }GU-Ή}h‚d XRqxO6oCY?hxsGM$S>Q!?n'aHC+&qKz*'ddZXK*dj=,Ӹz-ty&a;WYavi 4 &A9"q\2{d<"4.}/,S%ڏ_V Fʅ܋؎ȅ EJ,_za zT6̗/dʍe{%ƶ*L*lV]ik†cDмnіʗ…AU0jtQh nZ,Qd!@DUqDƞT +M؀FL2vF{ B sD4KIE=KܺtX=УQjTrŽWgqվ)]Gw6 $K;PM:Hݵ6GU}f|LXF;R}0WZZϭx} `7֛.*ػ;!wHrc"i}Ɣo8TVʞn2- +eoC==e;B@z섹Z|K%VeJٵF0ee 4yc}oIZFF=%sxN]N ]dv 2~wL{gc}J˲JSr0\g>܋h)]c(J6?t sX)Y'Hx._ tgBd>'P?BL?/Rߓ/+GX\l+S?k)_?|Woʷ?;S?{S?'O xS~r)?=^O?'OՉDS~s)=Qߝ?OӉDSr)=O?O1ɔho؏V0r.3 wC%(G;Fڹg*EH}'DcS1r%N/g0߳:S].g uvY$U.4\r R|B n1}O.z=Y,=b2b,jEx .K@iDD)7^_7- /8.K儍bVnb E6WzxVWޕ++Id%AӫDwy5i_!Y%EU'}˶uP\sJz2$1b7UGHF&~Pg7u o^ ԁsLԍ"fD^vS5,w1wSH M kIn~-n4A)vS7U;`osKXG'z$nV2Dn "wSUEE5alGŽ*^ڰ֫#;dAZT+]"MTXkEwSo֍ "ͺGp XWSG$RD0.gq3k}ˋ}]H2"'SXq brlp QjѸo%sZmq;Q'K{u»Ck;N'"Gȵ}lV{JsHa+z/ (yh̳w+s$)"D97h=EUvٵ}owݎ ܿ ߵoώ{ەO^bߋ=P"G! ދmb<\7Xi hX x5$@/,hUtK-A<ۄzՉ&@g  "!CV$d DB6MEB6OyYmu*_33DRuqYeߑ}c1@ڜ]y+hdžjJCX0RkUbPrHthܝg??4<~a[JBg3M>džF?.4zћ[D,H*@yRf˻FeGv2?1R=p I~2h{i񩰽Oݑ%gҭZ:|B{\P6C'v!fB5"*їH{`PŶeB ..ZBQծH5ҷf}q`D:r5o(p\65<]ү {JO@Jm?$DJ5%X'jOi0 g}r8:/I/zmGQ&߄VFN+ /'"]o={OP W S]<8<<|n; d{/\kV J!t<ޒ P%spq`쟔ss_d3eu(Fܹ'~:yPXxorc+ΛR{p3!?C+I5)d#_xI7OğTK)y:TES/ iqӃ:38nKT4>%)x grcyMIf!k,ږz;W]()}ta0ei&Vm4E{Hz*㺳ϓM e~bژƷc+:@(@O%no띐a67fMBsV.s:Q-LZrY ɒ犏^|[ l^3J d9/>V;_`Wf.]88~^;tI|#Kc7-|Y|e{E vѪڰ^彠+zA=tE/+{A$zAoZ%ЗֿY}_w5FFc1ua[U˃P4,fZ/̄+dRveݧ+?ZmOl˂,t(/t ^̲(w` XZ̗ Kg2hZi ^׋ӰDPL6K/e4Pm|&=9 m1P,3JV aIP:.R۪l'Armv]0*vlBzL]2wZh]n]9V,)>^)hn37rQ)N݁%#Ct^3{"Mʕ^ffu|Bߋ c_$3Ǻ,Y XL68l!{,Z-"s,u*-vTReuoҁj(Tq2itP&<}!BiN&n'a76-*TqbAHVFeҹJZ ¶FiM塂3+Hֿ&qeY睄kQ=Bf,W%Ewy5k]0JkSsG;JUZmV@]u0t?&>E93Mɮ!9yY|u0Qcd6SlЅ M!E0څ^VhmMyݏO}'̧=@D3Im|A]g!TJd_~PYzx8dsdxAzT8GI=F]P {'"SՆ}aW =HO=L-]'+vS=2S8qQlҐ׵:At?Μ~0NL /t#LOD-Ԝ#N(R!VWKX]f99jGSR@pĘ0y2YP* ̸br27+Rc`ꖹ˿r30\_KI9.Vxޅ93(Xb|mI@ 4 Qy}?=;.x =/np#/ ";04Z{Qhtšу/ z)葥xrQj0iH4O g^~\ɴWW+Y7SWjVT 5J;nJ4mP͓Ug(9ɼ. > }rצhnQ zNaHdmͽk[fCU =Xw(ǵOz0gKivKX J p}=Hyvf@` RZg>}$64)ҎN|<}"$Y㉻TO|J9q=,ڙ-V4|&4ZlhtsуRvu R|Q)} Ѿ ~E)ڽD|5&PȚ&4mqzoĂi$+ 0o)Yι;@|[`;,/MSY-Q31=冑?rRuFzMPX;EG='~sOzN2Ӟ $?9/zN='^;?^S C5zM1^SlC)6[îc(56zgx=x_=GJv ScGNtZ|cqi gbČuf).{N-9I szN2|~IF.9ɦ {Nyqb^S _k%ش/5Ŗe1Z]~i̊+z^x(xxU|eWZ;|U|ȺMc7'c.U-۰b5  ߑ_G "ܵY//Ԙ^ӎˀ@QgQD-P0Þ%ǕL-w4BJR:X"ˠG!`z"}Dyt40+jhm"dp6BpҰ.,j#64cFcNJ㆚ c⸽מFkH&^$ |YN;4v#N:S]+c}74ԯ'To!ۍ]{4RڸIC}{D*u@ ޠP[d8w mߋ7nJOs/]jX0Y[KPx(o#FNo'5ޛEĘw>I L9B5'x#z Eu&¯ _ ˊ %7ޝ^"qE۪Am0 \/c %Fc&Z!kM$쓲GC *)kd@Mu2Z- °.-$Q"Kܸ"dUۄXb됡ѠH nIiB^3dd1Gk(u{{s5b LjHx |p]J>jdpO1~O?^s=zO$PV?HQ0Odq䇖\dp@j+E"=Ax})}lG=/>e[K}x| B$|C. }XxÕ+#L*ޣ;̏"HӜgpcÀYQcю#B+y j|"YHZ?)jUSV/O USzZ3H:h<[ޥ,N{b>Ttsɴkyd_N$'kŚW`ʲmc=AVٕV+U8 |2} W#z!ۭ莞yRi\Dj/ ;4,veJE &虗GBW(+U/L!5t%k.6rz^OF{ 4o$iȤ{̪ʹ<54U^dNqe3B7ho ު캷 ,HQ*`N& IﴰgTdr[{zHkw)[nuޣh{bPs. hIg"ƜҘ4!]qCRNj+ 5?J . ? ɤ!z%|kV=3)CRp䥱pڧᲟLןwԧjR=ٝd7>SySޱu/p9zk`@C2My{&7i6K%WKx>ʵ- ˜2;A}({!gȾܟܐ+rrh2o^}/4:}bj`8ǑB޴X*Gjf1VxfOHؑS\LI~Z?% _,XϺh?O% bLc$$D5!77ҭ1ށ ٘=S@쭬E$TDڟ=B!~e7"cFHb2h>ޗ L?D$Q }] Daɝ]@$5s_?Mv="8]/U=>j;.h,QX|ث/Җe ^4,hxy 1@Vc؀gVW֮P28̕dIm~LfutF5јј11#1јͩh̖>_aXh>I Z :=8 W虍JLLf11CCJOaa뿸 3#J鎗ӎ"~iwsgĄ̄r8`zj%K3P2*0wcؽiPmerr zf,f5(H#6gUY[陝Jx}S3E]pA7vFkׇFgo14zʺ[3Tu*ŴQ+G oRG7B_'ŋ{a#e'YSu'y |*M%~-}vCw-»v kS7N]r$8q C6[w=ܻ芤 2Y.*dzQ9&`6E5AR1$}ۥUk ۯI w6xՉ# @U-qf—5|8iZ2 -1d :)%B/A30?CLXPN“2\hMMDRv&45KL=Sg0͉( 0kzx껈"0>Kd3iߏ1NpTQ|b~փI!$™JƩFH)\G=8NB6,h<弎(^ۣ̇ u%ar8cI3?{<ѷvZĵhK7Nl{VfcVip#nj !.YlkV{SLzqmȕlN\vޮ-mgz;KD8Hdw)(D3$l?+:J:`fFls0k#Ci @`;@3쿭6mZf6ģO&% =U\)!-QUπ)qP3Kk1g*3RƱ̳K+)۪3Q]G?7.R{^\dk/$BoWn=|ra2Qxry7}I ˔,'Ƈ^΍%J9NJw{Y3>幊7!,@qsއ1G2;䬯ȏƆj ~\iZdAS4֧|ܙ3dy5\dϽ) DE /8N_6 tw !_Jt5"Vd̏UdXNG ^o `B2}'h][E{Pb>YM=t6D\,a&?&Di\RLQO v??'y_#`b%a=K+Bʘ6CHfvL['~G('5>`Pe?JhLƫGa (UbHW&S4Hb O2Ê=_Ԣ`>?$o2p1tH^d'¥~l|R?y=ǩ$;Mԯ01/ ^Km3I ĤyR0Og/Ѯ{R?zsHh ܥDZߟ|C*uX:$v8?yA kg>a_]v\. . . \T\T,[/,DkW,XcR+#ʥ~AtT@|0R}.avW8f.2ylHsskt2m9?o͡,+;f#mQz.svp=I^FE|,g+VZ1ؓ|.Kl~7 sV^esK\nخOVPaX3'$ssҹ:v78ȇ,7=wn :IoYwfr42Zz c7R6~Z!|>G1tulj,Ew~//:R2LpHC>̖=Qo!ցFo0-W>"l6ucڮwUQ6.Ɣ0lE0 [L/6uX1b*|:D]1-jLhn!AQm.kuI+:zTVqz/g1C6DKnw\ màWn>Fm&73նdk:φ̶Anۏ/ȭɱUhCB r*!*_p鎾Zv5}ssj3?n8OßMRGAꕌ\4=eNV`6Ŷl,Aa'c_EWFUƐ2aֈ\FqxDGn9oڼ}|IJiJyc-9Y}RxŎRHOH KՁ}6&g>&Oc֦d~)߼g=[IɝRRGk6z&7[\PmE|S߹V7$d6d">`|0 l3 Hˏ|EDH,xc)X("'p^o#|#ڪ-Mb-PHmm\d*\эd/ҺXm}|l6)ۍ8(fkpp?,VMXr0[x瀈<$t#YxL&iјlV`6l6CEtTRۍ#P @bmX$^Kb=3r\ɴMJɜ!-xm͎ FL]uw7mhۢ1јh5јјk1v*0|:ߵk b,I=zgoTZ|S)6ґLlCspmw4m|h]) &'hVP5XʝKL'V+"vfN(ehZL*,HLTb53&0{Gw虪r!5v[Mikm s)d+&Gir07ZD 7jYt/*ڄX*CJw0-ݧO i{F:G7=K*֏.Shsd{˫U4⢳DiETI` C9P׽/bXТOfX!V"Ye?*H t'Cǃ$Sd!RJfkF0e"'kdPRͪh9'386y@YCH%UALf&.UґǑ]<+Y3Q" DM'ZOIDƓz)Djp4Vid$x:0Ig=~ g6REzIFYdHn&{y.qz+#a"y~ \۽xeϋ -;/!mMyvNe,9r&,gBJrDu^EdWE@א_{-HrzB/_7T+ ZQ}՛3d@@xk/yHmj׋vy9 ,qN +a]dhYw`0ƃ \Ҷ{I9+qSKuO>H]|(0qT>B\| *N."ۏ)*.L2Yq"m7;&ZM$A\URrcߪxHcVE Yb_ NUM"Wf\ewY:Gk TRTmif7;{^-7`gܯL"ZHLV‹`?;PIFHLWaX:{$SJ$'Z[&HܚU4Pb>` 92&` ,2@6.䊀\Vb1AEjHla``[F5݆`/n72KgKNpI[}ѴLG28GC aO181͍ 꼽mIorsKdlE;Y:+fe_m[SrFg+N>Osr*N -$:6,sFi(=r?`[)bN~J)s f0rצs\ΕV bY69"H_)gVlMv(uH:m:X}S`~TyKuW'S[笼RyX/!9SԘ-u_w)v۪m)^i8F~xʵsuQǼdJ()]=wB799/Cuϥc۞M o yTxlD3V>I4-wg>>]bV)[3QAq‚j%U6?KVi }>}!]@̗/gxlWbf8v% f!D|30z[o˛N CF݁Fi ~_5Җa$DQ$$c%ÚԴw8DbO=.L̋zg10tMI.5qb_XN,O,oN,oO,N,+"CO9^ @gף/QQߔ \N]w |0܁S zTK7C~fm&G$9GJJo#Ut2A>F㛪q,se~Ef`h]+WEؽ;E5DѸ :¡$wRv@v?L_O! )p-Ad f u'j7fCMDyĽdrHAڛdl!fa;^f_.R = @SŷWV>%6u$Wo'kMDRq}5t:p}9G<.sN#1y("{r21= /Q$L0.2גu~ " $EQ"&񓄟نq9ߋ#"k}*Ň1PQ/L̹3H<!) pՅ{2:  +7UV{dWИiu'q*7V5Ѓ3u2PY/"W!Цr陣D٥ 1 0nETCL[w'0A;wI$PMJdIR|&K޳\jSjT|(<˶Y3$p (p3h8)ۭT?r?.g>Q,"~2Xb?Q,LaGD ĢX8q\x'wj(,;ٻS:X_C_3__hy] ǯE;qt7‘7 qz[mo-a }.K&fntk1u~X87(0h~L( DMKlB? ܂f֘{L@?jcEP'ʿ j0*yׁh vYt~X8.^nDdn5c=?1ƔVch[PɎAdέ jJH˿֐TDN ˂ʖSe 'goO N̤AIYeÃC J-lg/ ~ dѲwm-1tTMa8?0{0\4h\=7d,- e..^,. -e(e/ K =nlY"U1A,X_H^Ê Frm +WW5cZ21I!,@š~ղ EV֐ u6.U1\Dga X[VP2üրTP[/2bDiP.7QZ*ҹ ;$R|c`bE NBM bUw .VCAYQY1Xo g|s`k ruhP r֠+mApۃ!cBzG`|}mPgΠ, T l;ܕA W75SEo b'q־ l ;g M-+ܽA+̛H,hB,d%Eq: 2u$KՔt n̅rSv|oWӷڊmݾ_"!TP0ŇP$Yw)B+a8ȳ7Ohٷ AF{a:eL k]w0n]k b: _nU̥ ԳSguLڝfio_MUϡ 5iLu30שsCqlg@B嬹9_.y ]'Eߟg!E ?tG4F' iҲ1z4fp4f)Fc61ј-g"دt/,*Dp&QHaCϝʒ)ϑ#qPZ5*[ oĂiXQl\lFklGLuiRU{Y,]z;g)‘mjkBu*n ]TY0>]-}IܟhyigduIG0B*kPR rún~~}a,܏$ S?D }h&!t {,L8֔SIYAOjgz{m!`Uˍ', Ӟ}Rp㆞OU0_n<] osYԜgtfLirjW3D1n[ geprl"~^9}s"җM$s6 +bD`C@@tjQjyx%anJ=3B<ķ[B ,6݁&{(t vaBkFk:7(g ˾7u{z ߌٲc_o%^s`bufݘowo@zkJt~ :e4o5oDn}hcW95]Ak$ o?˗K: _c,"/3XÈ/`27⿽SxlsAL޻c/I\EbOɐ)b4=,X&X=A;%IoczF|"h% oƄR]ںψ8J.qu^={컜+ |![<74H߬{hr6]Ky8:`墉emkjF `;dNĀYDTcMՀkۈ \ UɁxLHFX;D g9cė-;qQ7x;d,줠}vn~s]hHUr<=6֬[eo_k=2TTX3|6Kg v}je$Vo{y{&WΕ2y޹e;Z`ޞU02#oqô0TAsCZ녯p*.$e}Rc[U*5_j$ƹ@n,.dβ[&2SSj;d!3s}ˤtމ@~F]z,*we@7yI\(<<;(k86zͺmk'SD<Y!'UVqͧWyx*AXŪ^N8|e%^Oyyɖ[FS*\7o7L\Ⱦ[N-ft~_h~9]1'@U@GW&[}P pz}(}8pB};=QJԛ 4.?&+##k[IO(aV aH|G7} #OHO];ƴbwH ۴4gªy>5|F8? 0x! 'bR}(,aL\ `% ({e"2/kXB)%8:lcW3D:şzkkdYy2WLs>/ S(-A)-.^W􈞹dJ6wBu fg.iTˮ<jU^01+ф N) \]ICcչBqjOm 478oc;LcMOɣr3 '@fR)|"JA*⑆Z6큞0x-=[mYv"Xܛr#` s>61bUS!\b5d&Êi@H}Q)-KAbLfӀ50O}fhK_m6t8IX$8[!j%DS5w   DqbO:;:]*飮 އ1﫮k zTc 0O<}qY:-vZb2YĕH-BA1Oz!a!!!!Q!q#Q\*y du%C򉤛ylAC)d S #%3Y$O'BPx]z&a <TDI AaNH]eϧI0/$7C10^D(O4:uKIF˘x,AL,Gs(G `ǩ>F d} #3ÎIbs"}OZ:OSE3]gFJ۩vϓʼn1 j Tx0!*;eBT*BT#U"MN;Rxo|m&h46Nf|Pƿ-^(6ډݨ?N7ZGpSti [H;}'D7nnJ%j%ꇊG$k, wRexR-Xʶi.6~WyfԱڍ<ir3s̵;b.~,|gf>>\7""|?| ̈|7] ߴk},u"|( j}fwCu4~&_v¯-wGdD]y wrXD0ZQфcU6ؾth,\ch{hnx̩NyP,BըBǃ񖕪ѶaV,U o|څNlEٯ vl?7'm9V6m|ڍ]*ԧ avle*eUF QP_’r.U.U.OقjcLemۢQFf+Boݐ2^׮-v Fp#yW/UxU+]ڦm4fmf/o6-~ʑb>b̂nW EhE&GvA ^rfVp-go^ ^vxQ?Uaxm~j6[MnIֿGVnmVִEw*g[B1m[B^v? n= bu,Y YNM}n3NhQcoڸث /J1ۘnL9bvTmv5 0aÞJfj6 0TXbw.5` lҞ6+~c AUh]*Md! Hp-!w bBIbk7*#kV6_m6#f2`_qVā2?orrDwv6^Na,8X́1NΆXnA=Jf̾O,1%,@|*\4sscMnD_ʱntn:PhU2=7 RYLy[P!2k홇_7kuGn4wnd gMFE~+{xF|4xZb&Zk+1h~t4D_kk=mAs>iPfaar%ZAGr?r;!0?0_fLsaX: - M yso.Wd*Yrك1@:Nth@" Ҁ+)o*K.+0#ü"ejW6IV  BE+".̪40)UXdt g9eگB^Qؚ9yJ&@})F;%-Ws5GK5VLjh ,SXZIU6@Moፐ"v*mlib9L!%Whrf sSz{SJwK9`P`Юά*"3PpAH:_ M3Z W٘* -_L /ţe^)BX. X M$dNhqd[Α ~Ŗ1͒W\/VR; JpJZ8R> GXq K-41DӨD}Uo(dZLZ%Y`QMdyBFz.BMNNʈYH溅%R 5d2x d^Ye#7° y+. X3#@}֗qzc8 V檂"5OC5NP Bɔ/ aLYxSk0OV8x3Iɫ+.himx Uqx"o[vv|AM gA|m֗̒u$|)YLИz=es=eW7~a{0RA{Cjt!p\f Y#^|.7й_c3<"\{yb{ T]B&Mz qpK4//:0ih w2K #DwqM+Vk?i9l*l,fm˖RXOG3EC%gBĨg384AZH}, t, mWэDkc}#ٍ|Lb|qE [O#>VƈFPU?Ѧäh -Sr,JyY0l:E/0q A%#XD }l B$$AEiVHfL+ wWyXE” b xQ V3-Txp_xHx [.뚸Q /%ȶ{\db4-( U+@Jk0&PR6U Ej#qMq"EE\ik\mq[X,k"qk"wE]9+.rdw\"7Ƙ9xYf퉋97.r}q#ܴ?.r-cv-1=.rqCwE$p.&p$PLf=&pa4 g/Pb ynzu7V -4zM ?R [RӭX0 ǂ 6b`GcFZ`XX-Pa-StVò 1zf&6TU3s$NwQT_?^ {KkSHP=sX0F.tg(1vx8p >0nApyH<ܦ*M`[e"!Õ{Uk#|D\H%rRxzQqڣ"|,9& @Ώ,Ul,mO~OԞ(;H7Q:3oğ2Pɽ>zA=]yK17Z= eURչVqPڳϦ>;lsB̷2scEt}~IDt}aIEt}qIחDt}iIחE!6PrI =8(UqPWA &jqPïy}Ԧ7Am~xMxS,f?O'oBL4oQV=*E3Cަ43dЄޮl3&^Xw׋`Oϼ3J{W0AJ^{w`=ֺ3{#ȼ? } `bC~80G#|<͟lriU=3b?'ƆjS}AyW|\ܳ/dm|nX>`cr(|4,{J(Du?|sV1E/u~)+(h3§ɭ{kRQz7$}d >hhZyf|Iwcu,Z#Tի?1fى`wLt w` iD+!7%'r$%?*/R (IG KU$]揑jsm.P㧬 SW:Oy";$>)T 8 gvEK FVjz6_%]}ݪ9q*蹤rDr`_Jk%$gtl_vVܗ?qɾە_>LNbaQQ{`~2XIv;]NhsP13BسnVeoQћD!*pgD7-2;H)Sk|Ϙ}Nĺ`gR^I6Ls*q0A. tU16oԍT{n%@BvrYTT+"e'~QQw q֬Syp tvÐ+!05T> |rl1n ,x!J0uSɹ?OD4W O©h6c&8n ӂش%-y+ :wOMgR ҿ\u8k/;5e~^w5kУEL]Jb2%BG"J|`thx (v\2fI]2)քd:G4GA^ Kv?O~%}Vu@ߗ˼SOnh GRD&m/qGcy=c䖗Ѩ>(-,#9!pe VG( s$ ŗ_(ϲx˰G*y 7.=;q `=AjWHb=$#%+DY,p~$%T=aE`쓔BMdZx<}ȣOUJ%L ‚WTbb+ h]4=<XD<_i`/PUK|qPڋH?zQ-_,`Ӌp_}1YK4|=xeKe=8 FJ37Uw'b74rZ xtkxmhqvXl07 òhM97ņjoVuRz-=*zmIq{GB{,:]ڻ |ox߯=w(@}T9Y3>YB~U?}R{рg>}Z9 y Gia?sJ`BPG@O|Aٿzqڗr i lc+9w-5&lKuJVިr~Cm2/ј`gTIW췔ӝH!c|,g|GB|G9aWTV"zEjߏ@InL "Hį EV*uRL?i㤑]{~jSxz籿8,+=J3 O"nooao`9*LQFi EY&{l/#`>zfaHv<;SbbTQλIG3#!Y薵9;N[='nx*ιa=wQyJD( Wge+U3B,m^+UGץ翞$Ltjp{R|[w˦x(4NlJb ^Y'\)/`T܁̊h+%"]ce"J[$^^t$ DȐ/NEZCf^ ϮL*9!uT<ַR\+Rl!64h⦺y ǁXm7 2"lh"X˭tF˒Ϙ>ү)u!BK0}F2iDb_go&OmB f%JD˼CRJŲD5"\n|F~J@1!ygX;6k $=bCp~->ǎޱ[t,~Qx vF"f{دIq {g7bQ,ýd FLعv{d euPĬ/?xHvIw2g~sUn#nu]Ӿqn'e˽7Adϩ|<(m9P-6O8Ya=T3wudU@X[ d ^VpI$nkTXah56=P^N򺭵#GXiMJ':{'3Uw*z&"s։<SBp4I'v׎`mf(NhrGީ:B>yWDOM١4f5XXx%>^ eX(':_L6 ޗ{puᄈ'mpeXu<0.^TAdVw:̸WY#J ' 9WÉXm3yăaP<}/2j&bQD|="嘱ﱤT/-X2 ObO M O$ZO"E<'yک&{ WVz*zHyDJ 3DJ4=Hn3ݳoWLKdAr>HC<7~K 𕢸 FTz!5`ED^L̓ᆴE{)aQe*8jUu 2%D^0ENRU9j2\kIfZ".דn7Qaz#Q47y2uo̠'֌#'}Bo!MoV"VB-FFJ+|GN@Ƞ|.['<^{ n+m~Ps Fk~DiM~ .ɏ)JɏdžjP5o=O)3oӽϨIlB]χk_~1<~KC_rtM~5NZ<\pPn&}K+v|RM~7&P\k?PN&o1@ڏtPMX)<~? z~_"+wXC&c*&&Ml1&MVa7;J7{f^UaGbpų8gک9&@s/J Hg TF fxO4D1뙿+ B#4Zght_JO&o%UrVs]= U/zJں~^\Oi+TNq*G.g)Y-`=.:΄9W8tv h1@\͗^y"\d.-Se"Is]p?ǕL ^ ՌR9X(z @&B"U"R:,V[]\UW EBҺ\pZ*.77AzsM+'Bu <^ۨU~ ֲWT.?X0mH9p밲[\GMW@?=-ޛ5R=&ж*ǧu[$DcXvM0xCsV$ sݩsuڮzCCKdXP$HCUspf>T J!o}@xݏpIeRaan*?žu[BtC)\kȜA'z"#EĩṆDйnPT1egVa+!mx,a q>Cɼ!,O #v/" XOR4o2Yv#*§R]idt BP<i>۰l2YC衴?Qi-Gɸ!/ pp~!aE¬/_^ 4>ee_Na eD_I&AUDXF_MtkHίXu..^TDM7t:̪F?7l}3lBS[i&md+N:ok~G@,(I򾋔tp~7Y_s{4{IoS:8["?HƕCD*SGԕ׏P;Lj~q'ԃ$jHۉӄo&Q:8U?Gz0@y"-_ vp 88ǚeQWTuU2%D#OUrAkomH]8PGT'VeQnژJ)V< "~kZ\hJO&̟v0gd~PZAiK ʊS4פ[r5edsD RtƵRRjNmu=iC+?X<53a„2X_I5S߉cXDŋ+ o2 'C'`>?;+UsI<+i`8.O/'ZQ/WgpP`U1Dr´*))-S pa|#n1֬Gy59/Kp3F!%OsD8|o)iWkgO1%ޒO4è$〄})w_R2N VF.7 /TjQr(|H=>L-?BDX=ց?0t>`v^S]OpS"W.P,\,iOQ`%2ܬBE? f #< K9%Iitu-p`>P>C(b27ݟeW#\OnV<UTbF[7n=/?\Ua N:< XN_J_@rb.&{rc*9>ifA89Qg0yzE;l@]BµZ%prlۀ] y:<ץѣ'}*S q~c7 p?$|OQZ~*ԢAk?#]CDH1&~^"g;>u{w߸g>ٻ^Ǿ_u @P&X:6͌-eJ)p7RaF]6 Mlkւ)ēz󟘀UeƺOUÓyѣ+PYUTrlUn.5з6WNv<=x eu8;[F-AolذW5lcfISmTA6 _L!.cjWM2lA5s;C5a?߻GcH9Rڲs a~hVa/s R\Fab2Z_ɧ\.^^X}VXѧ+g#瘟|kpvLy9kiww}¯()jo;_ӆ_;o{+k7y*jt;r]ǯ܆y0#!>=g \v<˩d$Gu )n:7` 7.DW~ĮT_*UzylZ̟/%|La2|~lxu;Lm۶_m4W_锄G 9PGa8MuVϸ$SJX+RzUn%NrzZ=VkVbZlTH܌iݛ=n[ >k8Oߍ\⯧.Tqmyw2bG>\'Tc:>&5 )ʹ*_m35e%ԏ\r/L"'Zz'fl-idts1sPkڒ|rާm ,xjӮ1⃸Dzxisr#'Ms![҅m4r3MYʾp(A#ۄU9T~ajv}pB[SB.ڬpmA_\_F(6.r*/d_d5wۨ*ngm^j1{;a#= ;}e:+*JFUWlg0:*_m^] Vw#;|jTAQkf 贱L m8ɸWYH0gڞnN;}t쎅BcEHj3zc2;GӷS]:/WĖR_]ZCvMv*LӅ@Hߓ pXnh]MsrZ\kqrїK̥\r?}&NCu b[6۸׺{4r}U|n<嶻"KN̙!k)P&Ƿ:ԟO{}+aC;igV1^\f]/s6fyAh2pjEEҕa":l%߷Z}>L;{{ =]^}#1VõwrU[q5_(g[c.d|I GBAݾL[TbVa[ 5#ӤLnH /Aq >т7Odvjׯ'.*tBǥ\b FUNr6FQ?ݖΣl܄0S`~q%*aGs}|j~aѽ ԣTJQ8~kq?δf r|N^_LI8,!5Xl39%0gYC*^~|~mf,Q{oh9+:y6-ۨ ⭮Jm6H'` S6g?6\[YOsI^45 qOżb%e0YoXbA+D+v.+U;e[z郻 BVwP#w욠nQf-\^jMjPe%NO{3}SSi[fť@JX_a`nXZ z߾ X;w\2"Cs+qc4'+1gxfpJ}s`{b޴P2LjSl?݄gMG,J2e[Atr=H lO6+F?kz9/f)T0 &F=$d"\BI0(3`{ yѥ/E2!EXes*_j[Y0U 5sD[SmM⾶\_I?+|C\J=719X0]2 ##vM}cagQ`Z=]haI0p|E8Y~ݵ8JZ 1<Ț$k⛹u9_T3ay>3O\Ifc-{M[M{iWeJMh8?4q-=mUmxlڐڲ%JA&I%{*!gǵ~cPKX1SGEMv;_+MljXr,mʖZӶErb`6U66h05iM5y8Oc5[ L_6[&v1[MC-t7gUkPxbƜmȱT^ȷͫߊY 2 ;~#E7=Іd0f=3Fw}ȘAnd:Y[v ooN aSIT]WPkLV.՚vٜkjŮ,>ղfEQԡa$ HiDVk[ M(ة_ JVl1m}OY)?62U/U%V+eȯP xG #X%mjuj͒] 1 g >p 49f]lir4ZNU9v^?s-okf=}֐S/@@iPF ^!~>ĎrH1")beT}#nέVn5=:yו{RC<9cV\kqw64/|9 iג5X23cKnؑ }`|Řd}9q;+Gު' I5cTlxřtq1+ΨVmQUk}dA>-VnG ~r$ [㣅jRcy ׮殁1\:6"Cc7_9i-:8׮x'S{2 - ]&pi(j<sƆH>ynbt`n3HtyӞ6U\Q5Rݶ!mR(]k{'Fj\8s{ew@mLcMSm/iJOےru}uI5Z i6X1e&i{IC8 {IJ!,,`"e*h7d@1G 9EXyk[MB`7l*,|YpZ4*:~Q\{yúg?YgG>ě/[ЩnAwW| q1{ed0fkF T4kz,E[22R qn'EF&eܝjLѼ1Lv>k&i; mQtcۘtgNPjwws-vVrШې JHƫHF,z=\(Y$|B$҉yG Szi{msڱ^KB!.{nm}\OMʭ^ .ufӣj({Qsu-n0uݽy{{!t/8І5nUwLKw?'}JϜ-$T UI/F TN?% ww˸b?Lo2a36|AƩ5++VmME[AI(9=CM3;7\I\@N]+g|r7tj  1ZhUCBۡ+[Z)G[XD v}WPdx8<%ůj85LpJn=c^&2ƱG~hj'cO93*2: 7O R融H/?G 2V8NAHHKaԧVnnw;.NM۫S>ect,mQ)9M]DCnAżJD2Wf,oٞ1P݈@QkgF|_L o5[W͋|L <Ɇ&+~UߤI|_g 2S wC*ԿX]촿BE=Õ!Pxoc*;U=Nr5]{v70ll7!'{w?Q'WU^Q+9OP9Vѣm=r~}VNfmO|^zH վd)y7ir,PNUԙR|BdI(%qEqX ~\)#}\F]tp_>(/)wOz-ud}2bXDfB/]o4##4řj^gT;π#AcKn{Nw{ixC@ _x!"LI+}>/A=~~J܂#nXDl@ZG۳vmRc'-J20_!{oKEN,QllmEވ]BվSkZvs|ph8yOqzj2(FfG*T4w؃YFkfOD 4& ˨ P4C2Dؤu2vhgm3M PO9%"qǽ⬑ô=nbyx>R,'Rصۺwǁ۵m}L~أ߼w\g~'B Ҩv@>0jOWj]})Jf},&YgYU@Spt`4uv1Fo9-d3X>dS i:CrqV5a5{ 3A`TU_9윬b Z)(gB.>"IW5w{-J b(]:' :f v(~m@-ŜέetUj*#G!u2Tюx-^Mm}[aU;@ zL9qX J3h6Lfufs!z7[fDdI:o_2YfhyNo=J7:sWƳ1[HԓHhIVuf b홓Q}""MX&?c&vZ8kj-+&EYo8W(0ұOl 檠yCYح')t0V`LY]=c+/ǼUX%aBq+øEYhNH!2^v_^Frפzr£c6$5bqrI0=Kxmkj,jq RE$Z;U)Y-FqTRbU o,壅ABbf @ia> vBYb[XҵBg[IGvVC71H?G6s1Q+D/|.tY~b lRS2*~'RcY?oөXښS.txf`*C)=,HÒXiS{RNfTP8*QF7Qb1ЖN.^ɮ論D#04ǸLkr+©lC T]vwy+%~%,yYtK0¸̏!Ap?^)RWbAi?hJ TYM;;Sjv&3iJ0:Rj9iWF;d>{„V]l ^Bm2`-ða⎍]`񒕟Fس0e@kH*5,1St\ss51jSI*wZg^q7bJQ 4][l!?u16-ԙE'|r0;3ڜG*)Ttp~egYdd1 flY%fJ.3&J%e8IDSqWIҍ 5=Tl+ѣul1;s2f -ՠ0g:MVça| :]F^VR!(wJN)b:`4q$Xh%_Ck KBm\TsX6Ojed!)Λv+8^k]ڨǺC8S%,茍9R[bʾmEKViudd6x[B߲SC[hݘ})+:OyJ|c=JP0mt i!w  7o0$Λ!es,+Vm9YrOr,9˖e9e[r$ruݯ_ 0bv7U]]]]]]U'f›l~0n4BV#תoeܽ;B,Sƣ` lt#+TWtǍJH Kg$SB6~pN IRr(ǵmB%xěܶVޞ9*Q(qhȴ⇿+9[8"~Xr{Cj'DyE=,Y qyF)C;D7q>بn4(3a$ĞvՎhbnдQ1139fqL` o8P.LX*[kF~@q`X|95vZpzi%ٿcT>e7K? Dp<</Q/hfe.r&ofD93ؠ`gˡQsćWET):E^ 2 FSD,zxQ8 ΁#<^_A j M0=rl%Qҟn=IjFRrlW@.ʰf*3YBfz ?[Z}ȑÐ>sV+)o~Gηa0oD |u&g}bsB6!W %,WjaKgGx|xj</5 sS:] .idk ue'gCdG = \;?Uan\$d{`ڎx\3Y^d9h{ɍ&b*{Z^HQ2ϐJ|. b,хsB(0 8~r:.O'&'>P;a»ժ*nJU9]Ж8_P

+u 7k!R&vn0hЍ9T!ptM$`c=RM\ |g4>Z:ğۭ|F2"N80l0j>.:#UBbdZe|]$ʞMұr. ǷŦh[k%!lL>6H(jBnUFաm>|8YPIGam᭥-{hg>&_]q ZBD@~Ȕ|pF0);M8 Gh/؅#aȋ K{']h$z ڨx-¶$@aA:Ez,_xe#>578N9狘;x"uRt}Z̟^ڛ-kjS Q;w&}67`"{ &s/D\"Ռf%=(2n(,t5')JTȩDv & Jr36jQFbVbUݸU/V"UWqTی\1z&o]ӜFIȃHMSytDn]T1&?UMxjuBƸ ,xH\؃zr 7ky"kA;gp6Pw䲅ZK$#SSRWPc(`'oGTQQ%S\㼉j=buEg=f`D@S/2p(Yq(f Bn1ml?{4a}*M>D_u8H4 a]i5q_g%|O"Idk\@⦑8;qG*r>X&u쒅&%Q'x G$ԛN,ld *:d€P5[ WXnYOnzzi;`tJXs[e#;ݸ`Eʧ/L`V]θe@oD ;V0 @?;.L&N2z=ZXHMNXC^no؎ ?a +Tf/>+J Йqt,íS4yb.L4l?đe|afCxsna[%H-|󪋇sFW0=#-]y/L mnY6}K`m"QNݲ6s^\`ўf2hAIonΦkv sy4srvCqEʶ#K&t#<8\S(62NҀzLX<$!N$Op=Lҵ߼5S ,캝Av;5X[ݸaQkHbJz?7%U)&AmF!N}?CŴA'Q (?CG8j@{xR`y"{{x-?)^-^u8ޑ)3ekLF᭯: H~w+XlI&Z\V"da\鞘уiu4G ' 4+xv" q lp!f#X1L$ºLkEZA4$8Q齰iq_ɓ\jf:cj yK*c7)sȤzj;m|-uJGDB9MJ&w ̤NL}qOq"u,B_F˓V3얺+EH5U}?(H>)a>YAɖh37Kx#RSЮ]Cڔ]/W; Ԩ&E=&HSʑc˝o0/ֹ:"SVYږ#U,88Y?KV =ǽ7wM| ZQ{LhuOWb]Ӝԁ2CS |xHy4xB XRYf}tibW Z$lL5Z @XΚxU,˽IqjPXx''?_jV28o8PiY{ l`ͽR̶awBGDW܃28_ ;+M' -##s68IiWc+W-&xM5To%f˾oIlvJULQGā Dfd0[]_mP/Ϳ!B\R7 Y9IBzPf&B;o2 Ukvl4]a>")WYanڴn)]9''}.]m6߽}%3"`UOqjU[=UqC;w$k[7"ro%{d,a;1Y|iv@oV5=~o z'YNؔͰkLon'7Ϟ:ݦ&.hޑ!wrifvjoA|]޼߲Bn4:ѳ(c.Wqrk&0r )#(?;A{CZ#>ňb W Q! kQ! Vz1lٝv{5LfCwlvh2rPCQo kcMZ$Q06VWLs c7,se|IgU$K"5p[ o5Z2=XWfιidH/Q V e)*@hݘwګH({R22"rx3sor 4['c 徰BۡY2ELk̕yxZ2z7]/^,څ}uf;swsݷb)}iv.fZ|r╙m: |@v`Uɢ+Y}i,{|iq4"O)>DwEƟȶ |l`= +'`G].RBw6sQdׄń1yiG0S(.1b6C9Ƀx{Rǂ]//?;2ཱྀo#ڌzGEOPi| *GƊ;5Ƙ(M얎4:/&çإ;Fmo5qg4DkQ^Z^s*/,u97M}v~98?3%**?N @ mgu =;=.P<a}y-_0ݖWqgts2ɁȧَQmM㐢>=1!yQo #fSϟHضft #3LG9LuPcrA>jGWC*9?bBะ4nwM9+"1sDšJ-O;=9x*\-߅nx; tPsÅD\%I<Xrslm⾄q|O UM Oiv&Q x#˻b3Ĉ|[kU>91?-Q$//`M?L'jQc PN^l=dE%1?~I "[,&cQ$d RQtSۧlۛaD2"jHljƒbTG~\KЀF}9<ҥ^YmH-G8B>y(x"7{ qקJK3/"e_ݦ3X)mu!D"|ûaBX]Z^0)#5-.g$kP839ER!lx{>Q,@8[m,%㼖9dꝗƷOiPY] ;1^k̅-S藏4yrtIWm@q(hkfbtPo]XKZX…+Wԣ4 KWf/|=eґ.-GƠ¯-i.̄0TϾ],,33M/+nitgIŵԑZHK\־mثiQٙK sזZv* N]$R#3]Ze\Vz^ibvf9;ɺ#j UT)pNҦ 2C!C' P]kKKְ}2:_JmNyS>NJJC6e#2xk~5LH;UT}(p@h>Kv g%mݎEһh6VfL<κpu䡮s;6W/V\ jUXpZB7U@Y.][.;8;s~.dmHDOѼ@9ƿ~'bVha]?y?=pϧ緸rorϯ(|xs \hjX\毳d+CR1eDH*۾v;wWxtiaB&RC:_旳t|tE؅aLjHxp7?_.k`y|wtS=#~GHĸ4$'crf̛,3CQDŽϵy;^s1:uז3Jm"bUƭ8 {<*G'x0L kWmDL'7&T:yUS9saF/Gf0ac`A9~[$dq^3j!@{PTL׏Jb)Zxh-~vPtDqokwA Gvhwgh-Z0xջE8xxkhE//Z6kaXhԈ,IcJ-B.-\[1lh~?-_ g+B*\XXzEz?R E)kK W @T(J|%jaq9{Qkk幅SnH[RvfIk|H^>/-Hg~K,fT-+Vh-|ʼk_xo^Kye*6?+ !P̅OϹ>c?Dcgd`uǩ/^"jabF*;ލAS^K`ju-|`yT`E>rkbvڜ}ݢ ikYz^(9)2}l–>cꕍѠK33sb1yT}C+ 3V[YleI|=VڄheaNeʿzm5T`su6Pn sh~a~7tajk ˴B^152mM |;G!f Khə;,])ھ8S'm]ѥkXC~U ZKs3rNiKRڕEwד L ѪWy:,iru]._[/;3wMtHτ|5se |>kC@gkֳ}fp+=qxGTһ+u$lkn|vnI-#zǭw+8XRRKbPRԳfiyq@*dg ֒^YEk}]њLSǭ@hكez|ufLٹ\]i8=ranaFϻ&(.G^E/\: |g蝦wLƇ^^škC]žTC&X ]ZҲmRwrZFJ9pA1@/HIcv.i%阒^|UR.Ʌ^8NUvU`HWP \jFj={OӻwUVށ^wTޮ#?,rJS^r6> Z^*Jdfqv<} +֡ 3xQ)DMZ]\@3v-}'884+sҪȣŅ GAqqM* Jq8J ='lv㱓+kzmow2 p^qWg-[CиboVQHy}T% 3cGmL⊙AT㱨5G9\f!+n-mqqfvϥށEv*4H?Jq=Շ :a[vf\Zګ[T`8 &(ЇYXgDDvy?FP"DzgfHPz@BJ0{pZ/,:mF?1E/+>@i+E2/\w*0sWf04ZPNƳvXޒWVAwf40pAE;.t5Xl%jg˳Y2 M w-. {`1GQ̏,띮K_^YxW-\T<צaĈ)ض)f(Η|F)\Y~G|hyy3jP͋>lz^u8..7\)f_Xcɹ$gԩUS5B_[%סfře=VNdʘyP(gXe{ni:1\Py2\C'FVьU/sQO}5U^MN*μV(ZRB})2_TSi~$$|8חJP_XU! awIU;ekHY|X^uۗTev pH1oTʈQ!#p8|C3Kz*FE=,Rr=g iJTZ4%%\kT9]S(Vk.;PXpTcA9UtBb +VM)WN=WwgqE9%qmUorw~+eU\]1ͫBKkt'ŅqV@ Z#_R9vw21%}]|kI=i''C?+g.قH>zV}(q/8yp|v^33xX\as3hܢ^vDA ,07{XqT\ҵⲟU{oEQoci]sM:tNglm-uSwM8##g&3̞-nodܓ{2sOf̽[9z@sN[ ZXw4 4T~r RxOk+LK¦{~f))l~a@ǵRR;pyq択[V/(1c,;c&CoB{ݡw3y"zɡ7<Į`Yr^._Cڕ̚3zw 9v>{iaQOEU2Sd")($ETf"qADYݷ+z!f3ayehUx_gs)ZʪV $8=JVf߿LeW\}wf9[x';sL U>(??-tfVԶsP1_4$-{O[jPC^M2zT6>ށ=I︇gz_ӊԺGWRgMkIIl4vȪhΠB YVXRC;@@]L%U=}е?Y f/+'hۄ޽ ])j^o3 *(&-䱘eʫySҊ^׮.<\@;rXKĊU b%ecl cm w@?IybY8GRgSpFZ;uPqi>h+qp_O{FVWRǮ%T6Ҫ]5;fjSG1֬vj4V{K]\'hO0ڭiWJK`3pgN*[UhAӪ^J5 Fa@[N۪jU+b@!*PQ֗sx|]oLeՊS(VneZ=)W@3PgVJ\,[э~^XXk+V*մ^-G| ߭E嶅١]l5fUZ1c`ұвnvŔ bO2paZV&Sl9NDՐLwh@ڸA\ ̿ #Sb` V'@ G#թGx?~>T-?pi S,x%%0~~_PKbkKWK)Q*OeE"xh*t JdK[O3rWV`< /UYm(lBOڿRH1"DTq5$053 Lr7¬c2jV!C;kURYWԐ| @=ʭPIIԀsJZ[P)XܱZ7&,sJXO?1a෬vU#݂Ei¯(Jhr| @},*zt.%pJ ֐ OG$-c 3PFDm ٘ ,2rjbhTEjI` Dfmz\1X=%2g qrf F+I ߷?F4lm+[\E?[VqK»\$/ .'U{ґ \ Ol)춎 *.gYk5:M htq DŽW\-^RY~:\k%f hƴ$*J0xVmPgՐ| n&>=[A3 GEGz%%0^Ree N,wJR\QL!=Ԩ4ќbͬt%=@Q[KAz GbPsAЃ%:c~Y r{B< S^oUa5َzOXXi`Yqڍqb)CŎݡj5nA nKR%2+_qRi~S-, )g%=~3b=>RGM.kHrↂ\ B܂)&Ni~I&zHaKg+ƭӶv{[g4ƍ q v* ˧WVɵո*^<٨EXCW`ιUZ08╔KX?zZoM%nьV` hߢXjO־oS$,JQ:֒vZp凎V@ OG .U`vg7[A(/'2^zVa= ߧg!ƪc }-t.+Mqe} a09&Uk [rjsn4ɍlK1ľ*\. kKV`L$F6b1* SI/*}:Ml"ҶR%оgoީrn5ƙ"5Xs_>h߫CV:`cV` nr,:咯$C};ŒpطGH3m"U@19ɼx1>@!$E ƁOE%x% %18fU\ԼaGZQ`ƒJ<|mI/)xofq%pXޘWV=smBQE7[Ef);]\\XJxWDO]YUDOQ啁WRtlpnfYEAiŬa)fWV'~z{oZOa\ڵ ^V\]A6 -EV J^V٬^zx1~HFK#*,-/2ى&L'0)Fѓ:tb򵹙ނfX5uLlJ.f5BA>A =>,tkWf.F1Jҕ hDJ*V;iLbɷsaaŒU]]0GKknkϚKڊB J+8Źs9;}PU^:ǿ^YdIK ./fg59+UBz/,s)_Xacd(p-US n1v|'b)(i9)vkZ9Š*;3g2AAծs^Ց1mv[n7^;{N-(] Pf|{4bЍk\\{"q1ԋkOD?*҅Y縤2AIVZ䠴D ގI]0s5[µeͫŘ ^^܂^2vblg殾3s)/jGu $㌓UqJ+$e٠"/tBabv~y,*Ej)d54Di |WZu_oW*a8s9MX1s#z]Դ0OW ;e1zy.Uv^.B*"5"e(yP'fۺ?r=*=গޛw=$ͻP '4)pBf%~m7 x9:CPyo{f,sdޝs3.+|c-_\\(=]q啍LHáb!w)%/sd fɘY'klp>մx?SJ<@)L3 `ŝ]*GE<By}qQCH.Ψ@VVUz9;0ʲNUP]1}|RM&EO5!/wF"g!I~J'h,^H1z {3WPˢZG] ˅%X4Yž:#_Ҙ4VeܿPvn Q=e)s DnN\NhӸ~~gh\[OTf c1֟ FGֶ6\3$K0pC$o`̥rc|Ƭ)sЏGW3odLg4} _^ܰ68,(Q|a[nlxfg.M:"Sv*߷lp7x- gy89N!Aܙgǭ,SXPFAGK U/ʨDVN msD zz \io5- v\>%]vn'%r@5^b8W3^tnX*%ԾPLm[-0K(1Ϛ/|LOM#ssi:cLq2?*%6Nҵoge0˃`H{%'e7S5cjEYp4m7Mt^j791GIi6KSf?=hv>Evg;Y'%0U Eؼ];Rֵ3>-ȍK\@ff_FWqchɀ2KRٙu >10l,&p<;鏀«Gxh }Y?_@> _TRiscH1jq;3|Q67@I($G2>0ddq3%tsȇc/gyT}* p}$J^J (;'t>;/w`#w .]B4ZEa'vYw^E3GKC;хxG٥ е%ts(W,[[i4O ~DNyYƖ)DУ؛?9.g2|c_1[Hbծx&]#P\}MbfQAEF?%iC@7/9/s[}Y"pI=UXhe),MsbO֏Bh Ai+ N!L/`VcNxW6k}vަLm9M?N9)g޲DG xt9 kG3!zߢkftH/cȏHCS;:#(19#HFc jdRSdG|I?FcЧm}3ѡjhLKz*\#<4EVaVtz8 ƨ= |(LTQ9~zrj̼0DVr+fsN{z| a EVu|X?)CS*4Hy@kneaʨ\t,XEU:] 4P ٫t:P $^F+Cz(>f3<0g _lHhSBoS$[Px6Cs㷨{f~P qVcuխ ,j ^gbB;\}uGk/va Tjٷct*O_DB\7x" ęD9@RVhNl {-|A߮?c<7X s UҟaFC妝77&~捼>P ڛ#s ;.zc,]U,mP`kP*~­E?ec#rbaoyﹷё2MѩӦ]_o/w|_?oC_#ڳmHqss?= ykF|:Bj锫hH0CiH)892M  ]8e7KNYˆn{IuSkîEZ]+z\ BS0 /ÍW`YGc=Rxe 3 RoHb"۷LڀiEb).̝ȸ>=G&{B#dA>QXcщ#. 'cAygJf3 9~ϥr? af8͑1jHϠ%Q"A($z$z\M?̓sr_U߃# VKicG5ӽJ-"1bs a']ڔxr]*Iaaty0\iFsiZO UWE{m[(]LTN5UTOUЖM^dW-䤖ܻ 'ܹ|8J-x0Tjj`4rRl DZ[h 0dRQ4*-JF:?,BxZ5[*ZK]j5je8a3|l?:lTѮ" &thm-{-S+Bj%U=A7h<(h޶hZŪLƟ Z:fE> 69FV [e>5 Vтl6KDD[|qYk-V zxw0C2Юj}`xk?+ƍ M\q&sb _a?lbͮ? tc6%\TQp_:ac,6k7AL6U0H ŤwCkj㿗O ID>G{ KeHMHiV2mjwZ[V wT^κ- ?Z7ɟ+76ܿn'=D 㽹=*Jp<\FLE=;˨N[5۩b f +Ef3"! jd I tL%1e,UJ4y{F X(z ڰDĜch.A\sysR& m3$jװ@ڡj;bqᗷ? ‰Wa{"p!9Q*~$48"kdeVVK)~)<`Z^eZ7UDdHI rZhP% Z1,ZlمFHh+.=t)j,VqC`iƙ"7x Jް+hJc*˒i6{,J%vY6Hf%^x3LhvHG$}??~ Kar7/,;"ѭCw'9ܶ?=皩6?s ~?0KhX=KތSҼۡ$ ~`=L@8V&BP4 6oG< #ܐ!㉩yd msf"{A?t#EãHj=( ފD$ᚻk5ež dRF-QRbt4IIr2zӗSd8M 2)0)FhZN n߉4sS}ý<&I? 'QZ+yI/JǨN"1Di6n)0_Op34htd5S=gVRVc!> sI9o0 13y37ɰ2 {;\2Koinp/ЎI*]N&82=tXrPpbu8soboRtx ( D#TO@br])6aAĥq OzƟx'$> bJ`. ,qjZϒ q|sX%=Z+~\ GdWHHJp(^8 p(~( D(^ CqPpⅠzƟx >qcOpIy/A'$ Lp6 7qM`.5"L@a⇙H ċ1 BL0 , K7ǖx%adXǕa%TTMŔ$^D Hp$a( IFq$tEGH !!$~  GHAmG ?ď qH7nċ Gؑ0tG Rc[!$;b%)$^-%wj_ [Ypg!{,JWo/V_i$垇8~_⿓u EKY:Du&њO͘NvD˞L9<j71\l/qn/I'Gydh/E_Б-52df)6XeVcU2ޓiǮs͸>{U֝H{t. Z~su=ʽ_?$1wNC ~{Q[X~bg\,^n%q%)erz [nS޻0+M ]v`HH4s> 1q,"'y$OkoS(3,RǮV Ő;IΉlx zLUa#  $DZ8l<[^o,nlTfCҡ%#C0Fpj{N]G]Ty[b:K⡼vͦjrdzhtβkw=-p|ZQRtKď >Hw}Eŕ~'{b?c^*?gw?{_]%؈z2&;Zh53jZL\>&Vyp.4!x`G+pXUqPպ{>tqД>tqTaaDj $O|r=&tذWK 9L|& /})D!zL#CwvwzA\j}u 8.+Na׶6jѮGZgꍶaŒ8;7Vc :vx,8٬U$X'۵Y2Б ?ќO+L2B$Q#OX"]<ѽ:c} ~'qiXQ$y8J$}8IFcIҬvOM'̱f$0fA"%>|6lJHEG>T9x d̝m6v,II; $_w _,! ΩViE[6X1tW5zsC´K̽0m NO߿'Wp;23$N;/Ӂ\ G"tYT; J<];!BƬN4>\09"&P@V>hZBLW`rpG1=]tD4 `b&~ax`G1ht0+$~a{?T?F0+%~a됣?4?;Q}2fO.Ƹv/_Fm䭵>pL9O8"n#d~60.!!/߈LRȇ4tmO=H|oXv>,aJ&Ur3EWᤕx_FZ$$Jqc,?;N' 2MKĦ[ͮ_V?ytm^Ɉf<[TL"]3E8Op~^##UF0ld"yLz@2^L :?^ ?Īr9P"r\L@h J{nUd81&@Ϗ] '^).=O3~fFh2_p"UW'aCσ:ˀu3i_d9L1 J1f|J>lYe8"l&S糗g,:/Ykvݽ>̱@\m/;YuӲ*S׉٫ƀȝF_bt4[pb[H|;SXވ]]\jrO_a9}fvH.s$oR!V (JPb# ث(G$P\Fy6lmm:fگ4*ޅ,njeNj8Ug.n]Ug"4w[y-*?ƚ]7JT_md:{GխM`9ļo~ٻ`t1lZ,)#b`թ4Ҟ|'6&Xꈸw 3vO \gBOU@oT@BH!|ȩ -k85r7+b ޏC?+ BZvB'@* ]O Eg|nv03 FU)l{  )H&<4uH&jZe |?KkscvBpC*Yڄ]d*؉&l3mP Dړ.Q tD>FS42Mt q4Q< @#(;/F6onZ_ fv]˗M|$[>Kk: 3]A hݮ3'2S0f@utXn4v p1nU u{ԊE1ɩr m[Rhйa:I\hڜV+d C>|نWMl4^,ӱS1T455AӹihrjM&O(͠(˿A1lhr^qLu >j Ac;ëL 0I|<m2//2?YJh ܙy%=*7l]\dA-_L2SQ:[y#)ZFU ц24LV޿S =Gg'aOMrYY2\V&Ӱ2@)v@d*1S:A 6܁mCC0Kuu!c+8807Aj"K'@ πrAgrܙ2 T!꼉:g_GWΡ"Mdã 6àˌW w\q+ߟFm/ Z 钵n ڨOn?;N鼕8ocS!w=ފWUVl׹RQTz 7x`mz-S.ֹJNZԚGC5zda]:(CF+lJY%n-|V؈"{-pd3 f }"֧ |gQntL~3EHjb ,/ˠ8Aߑx1hb0 }ὥEwdq6=8|A;N`sq&vfNcsUZ3P#7a\rlR@a3?P,M~ Pc 2:jIܝyxUx|=l^zN7nCvCYɘ`U#x@<$ <ixNF*s$g\;`Ϗusd L.\RzNi7;V u +U}%]\\X$Vb!ƽwzc{3糏[כWflm£~n9*;i}jص;v !ka u<>ϟKm#LWn5 yVyԧ A ]E vkO iE<18#g7s_n.a3P(d^qCIz=^b.N=X1aJ1V̜/A[ͮG=aRvDz6rOTlѭb -=6Rlf gAR  ]85~ӃOSM IPk$%31q8)#0TƉ=76к]!YkU졾1;pqHFp{~؄!3$RIdˤ&:ɧ  h? E|W#+b}yԍ+#'?ޗeއ_ߏxWPz'޻qG[wb38{ ZM%}H*sdD2۾-9pS-'O'5` u%s,I%~ 3TSK=fۃZ60 "?'$Ip}g$:lI'qz[\-TJzt5^d>ΨJmX%^Iwz%̐'LՕi*~'=fηƾُhKʕ2@S+8\gOB|l-O_|.[7ŇoC=jC|Et08$9/梩9TkJ4 546:D9/tJs~ϐ+s΀if,XPx_f(4jҩ&V/AnGB8Um1*^¶.Pi4*5-]{(}ݚ&xgdv^ƃu!p,B0\!WtX NU觙Oz~mxo1 L]~#>.~R"趇.@oǰ693ѹW[.F C>a. * ۉl|HNxmymSA)YTxc3SMe؈i*Jk<2? p?"ՠdSfL#s e3dr0$I'pFIHi<9GH;P~@;TpޔXIp ` шSWjj[&2]n T2Zr]ַ fj8)@/>!~W^BA=X%m"ȎS 6֯Nɿ{Z=V)N#\LvK0yK)֐tH7p  ՏuQ?|\zv@\\GUX`Ǩ4>NoM@<$ 7d,5v#T$̯.Jc%vХ !7{b#-N83 ׃#Ki;ƒ **(_!J.H5tLZ+-ycb@ Igg/9 N@/} ]Hv>s.n=te_eXթ} {C{ualrOutgd@ 6VBbJvpLx˜)}CKS{"ը:6ޓ Xbk Y[D[UVKV:`0XUnoq@2t G@XN3vM5]sRw"":8AChn (^m5jS)si MaOD櫅?˞!Q,5O@cFSx'Ώd2w摒EPv?س3,C"Z`+Df~N[)kLk]~,T7U@^c W2}@Iw7~ϰeAxI(J9-^H\ot2wP F'`r6FK2nϪV(<ı``F2]Nǹ?ͬgU3>q_N/*IvY VhG9Ai3GŸa&N z{3{X=ݭ$G?L?([9ۃ >PJQ &5wm8T<žR]OmB›THd|d%VuprkYN83cKi~VZcK6qݢ "  TԸb%m:j;mx1*s ?> 4:?dܾyJ)'>LBӒЧe0wK{y= I[܈B7͛| r>f. rĐ*2@SpLvK ۟$;X>DF߁4Dݲ+;=%.,lQ &g6~ ӝ3vܨ=˒uVdβ \.{`})h7ҩXQ2 J$Q~}F ՞%f/i)d蘸񟓐[`T:ZړZuG}*Z wt 2ө4jzR9O*OKDgPcTá%SR*O=`l7zWL]eYd}KYE2y!nBp] aU_zŊ*&TcXwQ uzTEUoC?ZqDܣqN3RjL-V;f 3i!&7=}/@l/ѻk' $zv(N(S66ExJ8r\ge_矓{ut5r{;5. Oq43g{ }~?' "97֋huUqnYe DŽqkƟ׳؎ߡj'`NM [*\,~ 1~hܲZ-O iQqpp.8Vцnղnv얅U`]Dft}'H+vH.sd"om))SԪ7 hSNO>õX"o߮N^ I* o3cENpfB!uafn.+ eEPPZ6D@;lYF d{`Y1,c 7޼!U7[F6Ad:88B~CQWnOxBHSLK #gtXu&<:=TdNӈ Ԟ?$}hbMcS42EƑx$ĉ̉ ~i3!G<1owqd<2WR 4vQ؉#iHc(& Hh zPzT(^[A?y5F0ܟ8B <jx,‹ no+ֆafRn43Kj\eCr[ټr!o Wn4q-;0%C=;şfz0=ChZ/zMU~_N!`:+ϥk.VqtLt$/Վ@LNAwXiZuƧTMr3-6V:ÑlJGr {,UH$ 4#0J`ΖW7|$1K\ﱄsE0pӱ]EZ+OŷBe|Ke :,qS8ʖA*0ki'Hvu'h'BnQ?̟:Ep^ıLxu0ݲ٦퍲m9Aͺ=o: X2䕀R(+N. ;5R-s$l3$KwclUidΘj6ULT{b4G/m*Fq8`X%]&\߆vCqǏ -{'Tr=*@=S*@Pr#@m{?-M翟84 P/GUz?K*95E*bkU8yAs$' ]"5c K}dBj՛j1zv03a4_84A|"G<]VAN]kZ3FI\C_liWXuTFtpqfy4"(ҷϝ}N^&N6Rnr#E4IY}|hS݅44V;qiM]RUjT -*tZ~^B߰?] Ąwy#&dJup_gX1#<3piY+U_ IL:BxChĻ{[jp~qDz}Gqڍڠ{5#OdBd%ߌ9t~40dv|MC勎`fet؎N544In9p5ܭT{j1;6jHuwK RKj-OaYjC)kԮSCJlW$uw%e'n[Bg [),Hp37$P4Fid8vV7އiurТ%%Yb).gx`h mhi[im'$zDIŠ'릞fD'3}!%xŢyrȵQNcMQJm4H6O -F&͌SmmE2p \x>SLxw!a 䑤hϴ{<%aZMs:?As6'/"KfbŽIo  z[r7 XNOG#qyݪI2>GI(g#.@l qLч[E(gy)_=.c"-|gZˆtEGtO5ӓ?IRiLaTGObm*:`a&Zh9[QUF8Xm~C믠Wkhud% rcPSEf NHPe/I=P)o!e[e0!9>yEpP(/+;ӽ%_rvB84U&J8ڨQ@%{ A93{ن PƁ Xz, .vd#캃lhTMtTAU 6`rW Dr@E޷NnDnXQ_CDr#SڷQ*vo0`23n`zAk4$#XU,=VXNkb`  oEY;(8z׮6<#{N?UX~쿾_ owIL"1ji|m`^ľ:y'ʞӘg>r!z  A~YB/#KAap']&WulBݗ91]sQaT"gDa Yn2-mHx`IKhxOHq7-_47g[I̦ӉsCbݧpEiӧOɣӰ61 Uuy~MXb )vpv4W"1VhztxkV[PvkV p:Zg;WR*nc}'( 'VE>8[Fwy[5Ǭ ۋ.6`e8O#.Fd3 @w6@E8X"xt1K-O>xjOo[V7,5l5S-U8 [ pMO+u 2Tzz (t&&~ۮ&vXFn5ovH&3[F*>GIgwI*>? (>9*j}ˢ*$==JSb _6PO<"j 1~L8H̓d[/u;^5_u ]cѥ>\X+pT!x.#X=xl`vQ0yZZW$dZ{̂,8Kd"CwVt什DN8lC2 93Iރͣ+V.uj% 8IYn\%is<L[7:MpBGQBUƆ)Fk^q|FxeԬ *QXI36LcNfH4.'u_7b!U-;Fd*S3VozGWGX=۹l|僻7ɶHbU!{dr2`\ ]%!IB4Kbvx4XN:r(@$uYZ (\d$;@HyYO.]5b7r*_4ӧeYIF&&a).4+wk֨8UjHbëFmzZR aAW^vw$d9z^g ö6 A3dL g1lYI`_s?+\5Z$YNG|bH~X%0~PtPsĠOhiVu0 T^F"- K0= 5?I\F[ |1S;hi}Qv h:YFsл%taJYt_qy,;^ϣ桝 _AKΣti ]^BKZ.B˹bij2͓0ߜ6C4͕Bzkz 94X#h -HU4d/z"3UÖ'"Y*NxQU&=wyr}: (dІՍbTψS|7L4|;zc7x5^|+C_1H^x; &;}=GUӅ0i3'1]):tQGaM:LБ||jt~4:o*$!#v}ތEQI^A'x7XH=b)Z9WF \ "s,hu;*aihlX@nY݂x)L]z!E^{A쑀sF nYbK6jbmo2]cZ&X7NN-V!#>y)Ǝsu8&ٸ=ep:a3OpDT rqݽk,ϸFC{|dZ)rm!a6@Kp{Ζ%&6B=DE+(I8<<3XwMf_G<|Vi9oLlCu?Fw+*x%j!IÄ"dJ8^#h/r_-RXfYhj h%|$pL&/nCW(F>wNWmdg|nZK4xmJ%<86K+c{g9m'+N+cI!p|-2 ]ɏd 4E-G&mΩ!MhjќRwI0CdW},|c;z8͔PcJOjo|"qɾ'w`@K$Sׯ`x&{o1:c`UӘ߈ ä:lk_dy7l,e~C'IJ٫q*G HgwniVeZp^P$ `< DDXr Th)=!q6M G/Aŗx2J`J:$$,f&TIGU'JVp)EuD~Dz75 f4¹Aa::k:̧ 9oanZqA uǮ0Ev %knFtӒΰu+v8VYFpxZeež2fZ8->བ؎C{x}57^bPp8Ry,7lCqA.k^7ZV-1OK<{۰WonH<1E#ϩ4 J>~܆#?ju | Id E/7}z}WA)&CY OedvP/:X"eCâ.~.L꨽&M*NzU6:ZoĢ8lAA/T>zeŪy¸#:NHj=RMʀa{*e/ L9#!ُF4((fF+ҙTLjo]P>!(@ 7/K<|y;~Ţićk$DU1K;*´桐L'Y\j{g7/9Ij`?Ca`,v~-ok۪#X"ߑChe]VSe lX1çRAO4F72 +&X-1bC>`ސ.kO=S㠀_YPp6vBi\dIM$Xj, - vX WqI؀ͲK^+ }c Mk_3UxE2$"ijܨk Bg|%=u1 I :5xBF?y%qI {_l79&~շ㴴]-5OD=K'IC1D-KÿI3&ф?!B-49nuh6?9n#2Ǡ:2GyG MSn 8&(Zy|*(=nqWq_C_Դj߫$tym?6 Au,5XѼ"S'x9 iraȭkޒnG8G,O/c9FWQhm4֬2^㽯 H8#);_uDax}whH&l>/Iъ f^5,շSIA L#Z*;Zv߱67.=~&y|勨 Fur"I4a(vNo{^a0Nk5y͑7ۭٔ?4xy3y+/~oydw^3h{(OdA~B'{{;eyw3o*e)''OsOH߷[yדy 1w/⦅KV?N '{ /q=?/Y=]| W&$D2=ރy^_u{?wx_=;G$ Z]ÿt?߼f/~î-~~nU oܼ|O{y}fֽ|I?CJF {yRw/p$w׆w;v{5ﯶ^߽v_K}Es1?q{:yI[0&6{2۟pG8Mys/﯊w+bI~I"CCa?$ ogkW:気WdP8.[Z>rr֧a~Π/* {3LG\a9koXV= U͢"xy9=h {zce l9y6kUD`=# 9?ud}?tɯ`&O;lG{3戺7>:Z/wޝ%baI>њggx\]bϣx`X\quW \gSi#H?#qN*MfiPc'QDڐ.4q<`XI{m8F+}F UIٺ'}N{-{…fQF0P9B37$sL'A`tMyy!+2ΔJ/._tx9,?'ҕ"t 3x1G>fhHy'e[JŪ祯,&AŒ䴷nu!8NT26k ԇkgkN?i17.|  WAKg.a7z6>/4ӯqո1LWGu9Q^M[ߟӧLb11)ݨ9ġno͛Ϗp+]قYuB>32fF0?hLlxƛͨ;[ut: -;q3)ODcWZ%>ߌ(@cXZ:-M3B:C?:G=?=?=q8V|FC ;I@l?Gjx>jjZm|0!RN.2TUܾm)38d~c]H3uHf_}ќIe 3Ro {wF?3ۮI1߈Xk2PJbM&A($M߉ؘAӓs};UE<7I@\jVJp(i<0t:V$p,u5f?UTT.4ɸ%31W[ ߩBg?^EGqQfN4qʝ ˵6j *D7GOC(|oI@0O#yȼ}tV*L77a]n,^lZF->lu%N|H.lUU'2>4^(RkaVv9в]oȂe@imל@-kÐ?l`IYdo$ .&eۧW˜ޤ˰?~o+ 0m)`]C$)խ +7Z.__xؤ0KՆNj nr_ZQWrIK" ܥE3-6F)&eU`lo!3uD.2F##z[Eǵ _ޣVjyžfw6U; dkMTQJ`ʀ.р8#j 93嗵G[.ݎ QD|q;mB3#Lg0``i7E'{$a^Y aHpA$[0 $N ,/3.,=AՎ#:N0Xa xQn{Xio$O]͗D)"a/%D<632a%xF.,EG̎^OMKM9؇yﵧAL_U@ yH?tj"/ƟSI)刺xJӧ38Q<3\EdDx buX=ABocwŠ/G E GД1&2hF!w^A'V1INo?rM%lbaq"K<3d Hd%Rf^B-<9cOI1\$F CO4w!wCqx鶆9CǭA|_Um,jDmt5E`<&XwP^% JRIi|D$!HVFDtAx'bnC]`z_ט޿ LTo-d'm6QE;2Eg;<.qTy)NI!Ѩ|А~ҳf('K*@$ImONn=Ay)d"ɦDGIMXDvth`p؟n24[0u8Np0$DVX#YNM?$INg$rOYGXQzB8!N;kfUREDӇ) 6xiǻb3YM!8n}^8g-LFn%ZؼE:`@AL)P'i,g m7 $^\tQIp̵s̍|YEPQ :lTjVs]dcOu~%s}Džf3p`y1B^W`'gd8?#J @@h _] B"ɘYb!q4wb1YB`r /AnUl߬tFht*5~Tn I w1*87=NLҌ lbˣriI_IX$}x6mJBLL<-uN/)?\jR7z lHS'iӞPQt:Q}$o5fj=RGc 5jNi$)  `* Ke2T@in@ԅ>͆h]B)N/Iz[X "t5CŽ;D?'/5yHyUkۚ|fWdFDm/-_ D c|%_y&e(!NxxzMl`D+@NN!Y44s-<۟Jd)mYkiWA n`nͮm51;b ޷%Qv+SbKgask'_R^)z*s6vy}f >h猪5zwGt\8e֎Y>k7J931WQ[D.Lq18]+E 2 i<yWYE2I&k>?cOuXdNɁZZ}^H}ZD;0vi=WT jEO`['FQ^$٨dܮ>U?CB$tOna }n]uWm^7$ #d$_<MZ6\TtFաbݵu`-[*G5/w E  >ȣ9CYmYG uSIEm1wyrwڨe;ôq;hc8Jep: bg LNNI#Q3qqq1B92fiH>$؋G~#{%+92;$[4;t:@=ԃ.= )exCwea!ܿI[?koW5cgI@ n *FT_: zu0qYfQMq*喔 nH{yWs[+s{J=?;1xWq_;%¸1HnԄ -):_b+G"\ӟ"Z$C6_>z:CEյaI@{ŘHY\(]Df5cbh 3xN>!qDG{yÉb} *cfoZ/1ru~tAxWݾ%5_ @j)n,Е3]MQM9jD5%j*7A'fC|G*'NӘ4 5Ox[!$F'2'иEw'Oc6Ew䎉=Xsz\ 5_'P,=J1*uUҿXFjf `6ݬ^QOQծeuO%V%ԁwZf-U+Jp61eo]$Y$1½/N9#3ɄAh$.=Er&>H!g))#?f sm2}v cseTe6Lff B }_ӆ^ ݾCHQ$f!#f$R! y|}P;\a =#/U,9mtLBq.Ţ#vP2+)*3%d;LXE$4IJ =M)Ta~ICP Pw5F\ph}P][vsj:޿)Xխ_NA&ܷ$X<{E"7N?9F8X#wʾG||TW#]](LD0P˖AGA^>I%S[FDx׵_;KsXHi?Ъ m>!jnc䇛PczB#VgA8& &+#-ײA0a=zQYz_;͌`ưVV _u7m02w=G?lql`7lM ö_ö;Ϧ=yy 2_kT贙`U.$/f V)4rLQ!Ipڇk!V`u}rD/֬J:u6V*u{Xg@Ԣho66nxSğa̡S d\=ՍVw=/IZP'EIyf Zm.Q]: 1@7vmVbO@QG"6x/CZ,v^~H(:=-C$i+h0,w[nmQ`^R2 MR*@]X@kAvB\+]C1+h;5TkT:)U2j7+Qe߂]VO?,j)=Ab:8U|8ͬL&ᾙ X%8tK' 5aH3jh>5@>+YŒUUXUz,2VGz/cW ^-3|$URm6kS x;*.'`Cވ*DH2Vźr0_=.$i5!'ھi2yiۤ$v#hvU]jd[bP vBA󤬔HTeAZI.L]={-#pJN`m7om ڦ8'{?t5GOWTݧ$RZ3؁n0~?'ۓ{d{qKe{4;:\;:&Sɐⵔ ̊}{";dRfH߸j,nil|4.j~ybDf s9s8,G,޻湩 %d}ܮ~KǣMjGDgcZg}`0RK)BN}PmF^^9˜NQ*i`|dm7߾EEGTFX+4FHVcyDJSIJ%)Ndx$%)=9tҸxBIiOyKe>Vno؎3''κM~NEYI># +\MO(HDHn%AFAZL|޲EEtғÉ6ұ,lD)oX7;UD|Ric;CAu{ߧ_:!X-+EFqcE#]sTIyb߲JrK +K~iЭ&%{=XT8_Ai΄W| >Nj0bmw׻ mƓlw5Ⱦ+ k,g=!纓S6o5ߊ^IxKId0(얟TS^=؇>%gv)8EkmigL8jNS6cBhMN)45m c(Qtai4 EitӬ#c޽Tc)t| @9_+S4:=Vn ߐny/=jkpFcGCFB[q[q[[9Nc9ir,>$A]l2 mKhEx;r yK wSZ${S~N! ¨?_8fVQqg;%N82jua ;/wӮ}D "1*U%iΙ9s7b)MC,D9 8X TG%y Q,eh\΁;D&>nK6Ûhs!h-; S Sjվu$4o>f_ctyݧjjXX]6J*bGX;DV^׿7z N/ۼNot]FJ2Q<咳_N]SIx?T\`ZXni'R20wZUqw<-5iX햅=/ f KQ&"ƆwoFmuAkjzynj5mT(T6Uj Z F!2.,t ZdDf "< jtW~sǿ].A WX CV02By}IGad" t7η[8Ph^9| YVy?\ڴ`Phׯx>`$kjUCN#D1=ݲZe%cT^Wިњ^7-28XTx?܀YFk뚃&L 3E8j2KHnt0N ?Í&6[A-pЛjXgVZs>GXT9XKsU;@ADI[d5$K#F8IX))ӃquWtiUse"ad:)[uYι&?f${fW&~{uvUw`@Brz~9/آ"K<Dvi8Kb> Xi':V> 2[+w ڛ[ka-ð:>gq{&rQW3;==;=plm֭|N xj"-UnT"d3ϗyץצWkʉp8Ic=:b6 m쫒ҰM]r1_(bllySwa!sෑr[ 5u$7n;rihcIG.<;gg*|?YƢ+M<>E1AL0}n,6<J4>B%?/+ͲBLA[3;!7ގ'vFfKT㍸t#A8t fG)bS[X^-\>f9%R{ˤVtq2qSˤ'Ib'昛Q\F;řL8rظޘ/Y2?|>q>O~O0|G>ɟOJԇ§~5|§>>S z<|7§~3|§>>𩏇ON'ç>>τO}>| SOO}1ү>^z^lxs/ /}9Tx᥯/]/] /=^z67¯};|Vwg>Qg>?qO¯J_~D/_~7''τbxOO>ᅏ/jx oO\ j'~>?qxC_ 8<??o+<vxw *<Zx<7 +^¯//\ /|4 /^xrx^fx[? /|;w /fxcŏ?^Txτ7‹^|x 'Ë_ /~)W‹O/^Zx3gË_/~+o^nxj~x‹?/0^$~"||'¯~/گ_P/_J¯] /53g_/~x/3^Nx^? /(^ʇ+^ʇ+^Hx ᕋfx+ |,'+^'+ |:W>^\x+|!dx/W^JxʥW+_ <^^^y&lxAxoW^ʷ+ |7+^AxW8Og~%|C3>k3𙏄<>D 3g~#|7g~+|3 x'g~;|wg>>O|&|wg>? Axᅯ>^Tx ''O<^?foONA߯ ~+Mo;¯0|/O%|K_ ZӗçO?>lç?|§if>^򯇗/#˟/NxSO?^|xK/g:>?t>^Lxw /|.— Pzw' V( ?^|x!x1ŏ?>?k ç>oOaç>iODJx/_ /fx/vxτ?^O>C-ST'?>Ox'oO=>u>|BOO:=^o>^xxwK /}& /}>D8K᥯.~?+g@Q;HFẄBB;QFh{6b*dꅻ4Xr*քQ_ /2ԛ^\z0E }JN6\ v5~,/b`J`Rg|"yq[]U:;RE-|DQS)j4ys*4̄W^Mr_;=fNZWR9Ȯc$]a~ [dnRkh"].1 0A7οk.IRɄhˆ(7dk6yGJЄadoi࠘I$9EMD(ZʻeT:fk P_eZ+|E =\BrRŨ,r{$>T$MVr.N ?M2ƜE^ Od` d7>6x _eӴ_&puO8%9+[.T fdaAGK"%q_2 Khk (H\ o&Jsא!ȩtĻ3J*y<S%0'D T僷P9a UFv|FH%lT8.< b}\Jvh\h1n[]a`^QfBD:^%$4t^譣89?"|UQ'|o !p2S..j—>G˦Slyۧ;}:(E !2hyBd}M2T)/ 8Y]B dB+npMSoa`Q.\#b oɔ.B.N $zU20Pwᴻ6*YDe/㔴"S*^\5s!$V2 CL RxȨt̀wp\Gp!9887YV{]8 '.AXT$q#쒣wisĚ"2#>`83!z:@ʝV%LM?cmI'7\U^0eC1LST~"="3P"BC.0x{.-+DeCkIY)Z#pLoJ D9aޑJ(NL BEtGX&_=F%u z}3Ii׾<qJɍ莧G_q|4}\V qΣSdB] $DZ\&ZofA'T*|2ʧ QF>R,gA ϥ e8UXM |+}MqMdf9  XQƏr˜E>FE0SBtHy-Czh@վ=}:ь)2ϔA$3{&?<Ôv.P#@Y җM^W>l93 WKlxUC㰉Œ҉(Ձy%1=!{㤏qvWY@j0R)xГjʐY`;MuB(ːLpUEO@ n|hp)6KW1Drwf#'΃VӍWk78m~r ymOM<لYg4jLj1I,@d\lA W,-aZwj{Y'@.C סV" -]IVoOD4MEE&F]*Ǣʱr,*Ǣʱ=^f7 $9wwD'BpdYwgɟRGDGB3DQ8xcΔu;sCS7iǶBgo4~ ^(.xXAw;#,O!"3^:;;EŎiQ!<pQnΝ|}4d3U52?)7mC*Š(MTi O~'ٯt+&uf%rT"G%rT"G%rT"uaV#7lqŒ1/T[+Z׊V"VJh^E*WѼ%y[hڠxÒ /Vr#uc!~gg4uV>(;0<̟ݹPa>'~'aG~"ɭ|1L{J\XuXuXuѦTE*U@]ojV{;ʅ[^Kb7Tl~y^&;ht;d9>7M/sE+\>W: ۯ-^#ROyT+:ɱnm3Jgn* mܓ6\S6; clT6EDTb:ߣNkT֧?ݷtE6̐N VZt$Y k_Vi,&tLXe;w5y_ĭ,?<\YO~Ps۵v Tsި^kz:B-a*j{kAGrV9^ʾA_|e627+VgNL'vj"=f돬PAMECyݬkz+;PC(0*US۹jr]5S jG 4LcV Y]zB.ud pVmz3ӯ-\dA6o}'Be ;+;+;+2@T4 h`E+X *"XVD"|>  jlHHSY+*kEeZ1Z1ZY+*kEE+XV4VT֊VD"`e؄3c;$VWoy.G" L62bڐZOGHUlS0GLqT Z$Hش Bӛ!0гguZ1B**ޡ*ޡ3zOĈQϗ}]SWOÇcWo՛_% Xd^P%67=0ߺ9IRkQkQk3Zzb8 ޱ ܘ/͕lۿ; wGfV;+QoSR~Ut񴖭W׷:xBϞ/||C H~o[u{Jv(o6QIt,4S=S=S=s}YcS8j&ehbz7SXQUtNBM6ɖnۉxcd"HdE"+YDU㳀:yVTZ鹺P z2"'dw:g#*%E825x +rLܠ| ܨguzfD >c9VMۊ~xx,_8XXXL۠IVi~mۊYBdrX&nDZ\A܋x[Ĺ6aKۤ:~ ]E}M3U[Β`Ɖ1lLe]8,lCn0,h3SO>pz#Gsg>}|x鹣'OL֝d2fv^}rl;us{G>YW}RѠ0/s^+d{pE7\Q|~/46_Z8hAcj΁$̈=#Afgߛψ. 1#3bf؅w!)Ӄ==_R }0#&>:Lm {Aff]O U XŀU XŀU Xŀ=w g^ *V԰5aE CjHgB(˿<ViϨVE*UJ.XX໺29h<($oz S٘ju rJ+Իrqܔ?H۽k棥aL@Rzğ(]Eb*Fb*FbPtt<{rlb7FC3yBx>&2t3+=X?Ox(평Kys2o-=/I]1>>DzXl9?8c8c8c±|1Uf[888,[M/M rS~FHua[p>WW")HuI)S/4ܫ`[ᾈ wETt&>i|sA]Hڴu"gZR— dv| _&D?u~OwY^&W:|ĒDžT&.] _L )x .] ~/]D]}SFG#VHݾf*Kr},uĺ׎ƏB_ QJ68ws}YUL@=4oY]_ R%E}N9򧨱ozH֝VW*lS|+}&9ykو7APfq0Nѻ1]4/93pqE mt5*1\n K|&P}Zꑯk* Ls=0zdŤSy&*.rThVZeV|B+:6A`꘭w _eZK_w\/(3\+_V܎cײ\F!ᡏ?:[G!/6}l[{ȹ4]-6'5E^骜jz!o=V+8K=^=|PDjk&ꎍ^]e%> \CtAA _`j] \<s)yE' r=K`U5ݢy uuL_e1=W #Rhgz<jǣg.%ZТ7> n=Ϥf7@Acfd B2LcdK{=ݠ6dh:PR!C:u.=]tY$˄J<^C^"۞G)~>Wd3TmEVE qsT0er! L1 C R2s$8ZZm?JEli uǥm\U= #&s}\az &'!m TGG05zyHٽ|o ТL4Kv2{_i$dUwua#PWQ|6mT!l.-6,Osem t@ O0elLo2KݐɄ6q۵ N0Yn1t㦨ĒN@,QH4KcPoDI?pd-z]-= r޶ӷʘ"+ȑ ވ虦}ѳ $Z&^"  B]Nݧ zvL%eo/$?U$ъD' BHGtV- :1e NY[֊ffHw%&#'e`L?Rkk/[NiiX->r<~D.M %I3$A~^`MŬv$PIB~5drJrWnRGTJ)D mQB lʰ|p.*:-b|HmI%K#J /~NuWϢۧ;}:I  H.NITTC>U@`/$'P1%Vߍ 8l]V.$Ly QcТOC)H]0(A cxF",XPKp9^+ ]f8.T 2!^b)i<-:б.3P> dl梾[6IGf.pÇX)t̀w q\Gp!987YV{]8 ';NH?_KJ|4WnDuisĚ"#>^=8%J&LM?cD Oo=`4J+'bb"`@R{D.Y YdCPY/~ >"ʨ_ߒ5+yϊ_Ro&E˜+J۞]\Zt#2+  =eZ$o#A䔲R]~Vr>> 1.?Z]6*qiB},n;CRqB#UJɍ!1(c$JdyOH|C΂ Ke%l.H ep|)YA )Cw2gvQQw)a[PV U,ɮ{*uS(!D)HL~k XD?w:^LN1|y0 W˙x5xzh X(2XF1$oFO$;88#\yUx TU<$jXmB1Y}#q,_# L'SLH693Y]b4_2wH9dB IH-HA*7ĀDJM"~+P>\ "&~ C΃` {:i}Թ@_QW  q,c"'1%^\T)GUD嗉[Ac'7LB&ꕫR7NZm%Uts(H]bO$N T0)+D,$!Vlb\] qLk^=0^t:3Jl4a L dE>J>q=CĠ"eF4X $ BqY$U RcUiň HmOK[ ]-;;9p*-tJ B!.>D*y*KTJH':ܱ twzPb9]G^'2\EaIz\Z tG LU`N$wI|';nV=<6H|Ep  )ŰBPfaA۔0zD _UMH%Vp5M*NZ}@,5}xbwZYy%4"zd'al,j.@ЀʴƱ@Q^-3%C Aڟ!*X/qĒHy21)&*+błuqP=,~ k d 0:/e.-nwHF60uq(uqj9ZHf߂Vx3`u$ˋXOk# Rs Р ,I{."NٓL*Go1B5h Pv3gHJL"񤀝bƁ;9V9deՁVt AÀ.vK k"2Z(Ed9WrioBLe]9[4pgy'Im2 <*錄$ĕVg)KN $djuq E3+,u ?2D2 9⫷'o)dv3QZW֕uk]ZWוu15=?c {Dc{w?VmhR?f|+_|+_|+_|+_|+_|+_|+_|+_|+_|+_|+_9.wg[}C VеUw]E+z7]jj'ܠCiF^e}+UtU"]IWzDjӿ\tWk[c$5R5˩ٮ܄τ15ܹ ,O ړ{N{ULội~7)Pψ|2zVڙY#[F_U-ԚZMvƞ19#g?5ߌ8;#{3q3b>ѥ!f3bzFp;b4wƞ/}bf>W nFF[NZӛ$NZYWĿ"sGt*E5[ ͪhVE*UѬJ`ѱ5M`YwzdF|Jyc{),swuFK 4I̻5DcJh5 *Y̊`V"ΜqWP44~SO$7mh Dk ,ӾU&rG'J_es}Hw{헫zLUycWe.ye܍nNȸTVļ"1yE+b{5;/QĹ>WoE/gKEJh`E+X4ɠ{^-!*ǓVoziLWd"tE?QB?:YwUMj4qkE\+Z׊TD3P&#ca$Etw;iV#|fDtwԋN-ZoOx s.{z x{A>|D >XTWTU-)@, $2G$j)L9tUץOU^6=jwA=8ch h-9ӷo G Ƀh~o.8rKWkG yP#-޷7ξ-q$f.5,}@rjvV,Ô{'q$8t5b:'is@o-lGTc^S#NiD>͞67pO g񎏞%0R扏8zRASq$S+om1Gy{ޒ`cQKeҚrvNPMWj4]1 K6iK!w벚czӴԲ9&w=G阫K)qЕGG F#=3:>ΧYD~.g8quJ8ñZO]PYsuE;&|RQa$-r'q+prʻS Z*9Iʵpʢq*{n`r|2WhFi}!qԍ4N9mzC~i5y= :8W⮪u67asP1WxDA7 9f^J݀/jܮ)A#͎_fOy;f:b000.F+ɽ1Lx*MUX%ABBqxgpf\"~0N,$.@{n+Dfpú|)xPԊR!!@FVwTdtg];qvn`ƸE- z̢&8?Oax<,`P^S_& y:ӷhnQ-OT_oձΚϝ5GWgWgol:>~Ό9:::::::`LLLL888888G.SbCb+ʅr\+nq5*:OE60vCNהSγ"'Suv>pl8w?ǡ#g!,G4ű|8f5H[ 췗q`Y{.NO-/otO9p@Iy2Ig}QQzE+^r_TD=w*h YUD"zѫBV4 h`E+3Rk<iQ67]-6YPQWT$Jҭh`E+XV c*XVLߎ"ݹsA)Z%Lt/➴.&X=K=GK|; 2?Ȯ_| ;+,CGF; /Mƍޱr^xs}o~˽6juF2I\uf% TɨQV!AL/H:c?l[ 85c Ies# x&iĻ;nVݾ2=@oo~?1=]gP /R/?[抆`Η!kIL"}w}jr)"TՅQi:% 5}XYKP.B9ʳQ8T73S5qDq5ؠW% ?Wp䤸W+rYc(=Qc[rwK1{ynyJ~Bcmv%)a ڋ 2ch=/o*;܏*j뷲flNϢ=V"?[Eߣ~}v$Zm􃿛E0BX]ZHÛ!NmS%!%;+Oqc`+G~+ =E[gDp0SmKx _C׿>v Luy줽.õ#78s)jҌI-V[GDo5!gg|ڝ2K0PT8!GLP2aH1~,|4P",GČdF?#ѕ #%<SN"dHR΍1.o)LJ+>XBlj̒}  T)/[07%-IeEU񢸐Ƥhi쉋SV0͓427XIMw'`T/# :$b(!j$L|`)/MN=Rcyw!h%C}LssWζbXZXt[2psXVm)MAUQoqc^`>' I0a LFb:(<KY[ruޘmN[K9]oZ`U6}GsQPXAcaͿ?-GYfSM?+9 r;@bN!qLds湾L8+X$)]s8KX'X'iRزPm-۰ V|:=G4AynrT6Υ61a|H`N&S͑eC:f(t\9Ry|&IeF4ǰ#1 %`dkb'F"Fi^YU̱$ƪDEDs)=pS-Oދ`u|w. YME\S=#nID&sўH:ߝK-ynmz^|sݕoݿ%srb5NaOGۇ5miP4m0fxec^|D'vbGW /̴G;Nj@|/)H7Nw8M{_j'm0DGw4J![84 2F G-XQ`)^z󶍮V@z^ZV4>xV_-D>0WIhZB4"ѳL[u|xj|WDu䩉GuDLPHLsoU o0(l ܔ3%&Y,_y8I-uP5sUQTnZ0dig;/&= u@1ekx2wT~:wƭsXj5!gc^za6/},f!pI1i{۹ <ϋfM!hma-@sqaK.ۺ :ÿ7*4oҖD[6e86|M >M_V169YG|r9\N_PBS3Ә)F9הC4VUԴ?DKF۟r'wm#w+e?y>gybپh76H[Ձ9*t}9&My'sG鯢wnecow O1gcEU!)Kd2tUfhOnΎFws!.ys(TIc6t)/f(T7Rn}'0?B}߹ʩ\Td\M^·g06Ie8˲UzٽAC`]:cw!VW: B߄j_H6&=u H߽}T cG&2I71#K}8II]fCtGK}NS\K:m=icH<%[6 L.ĎOR9G AD']@rԯZ.Ƽ#iU PI>c~Q.-,6uCvp8kavΑH2@,ݴU 5_M }: ؈7 樅CrTc]%v*(D`DՐ>VRG[V6y1ًGp\5d麏/ {}3rE:$6 P JŨ+pZr@:B-4/ kS6LힽL_m;xgOhzxaPYιa:kQձwɜpm2ޔ90_YE+R}iשS,-Ի3ǹ ~7iO(ӳSjꎼI}뤈Ö J\(ZpaA.XhOEգ[!&jyE%%^Mʋg)ݢֺ^lp5Mn&}Q+2N,weKX+N|Zr9LMǕ츎n[婶Ȳ 0!':HX-o+VǷtl>2}۶7-bR|K rJًynAUM w|ԝ, wt-d1H`,bm$u$r|O^xnfq(d2DD˴vK,`a@f=u" DzK(OoHīVMڭc/fxgh63""|%M MJ]8~|δ=˙ 2mfqhlս ΀𫇁pF/P0 \}k;"r$?د vw^g-}ח;7Pu ߹U=J?|nMM3”X߰o=Oo ђnk`VH߾9ߥG$Φ˧ήBP~}OV;LőD]WV p|+1Z|Ӊ\@Znam%GoaݙKVFFܞ8_+ |ILxEh#FK1=ۍv(Oɰ I*%}bG-R=EFERW*J'\/NOʳabVӲb]GisŒģ6/$Đ@hNʵ~,;Ym$I5|G7HDr%*3@(EuCzqyk[B1540]ƨRϥt䈦M$(2i<(Z3>IsL H.$WE$%3%g몸"I})kfZ#V($i@&;T*#LJ l2S\r1},.Ђ9Am4j5 ̓P#еIARpib<~fDnGzR]G8 n ÷/U) RDer1c`t ?`@Ad24,ecf# A2|K .gH8\&О$-lGTT'rKƢI];\i NחL v|DQ>g"~9Kdd*-Lk$b'ӢTP*("LC .kd,,*0jYL6"BM ؃V(T 0$W؅&<$/)֡|"#OY' '+;LoЗ q˹HxVjhWTsوgғtL'$dO_Ȯg"#~WA)1=v[d`=!&eJpc8R}DI gLKK˄\A@so/MXɗQf `f$4k[6='¬e4a&Љ13η%ZI|S͈#/J2$,UAL=$ҥ $4am&DO+Y>4 gFQUJ'4jUpMwKO%`_ɮ b6b ]@,e2JhCw虉CN WXUYǔ(>Ƒ+FM}ǵ 5hԊB> 4&Ło&-IYw(Maҿ( DcR7 $d. /?ESN$}źCJ &!GZ !4r0 jj+a!Tq _@% S&&}S^s 6&+ܖt{dkYv<r')i4r#ůIڟ[z $Hp+)+  Z0OB ufMX26%.}F:&~z=*#;@]t˲uHu"=[)]ird|ՕUoRݿ1wKqB1iki;7֍[֍J)AV[T%Y﷊JJ ZU0uI^3(2G+K$@D{=ƒo4׈_0LCf&1&̅@KXL$iR vfU]@g+x{:mZEqQt_k ?J>0Mr ɖbƛ- =`9 іY==QT#$@m%"pbtmf:$ r̮L%qW ^E6%O,d^BHH z;7ĎPh+J2Rhys#E/'['5&*"Uۃnsg‡=}1()"d_l|p6\roLp {4Ք8E-RӝAivics@D3  ,KB2aPgl95d9HK*`gbFSE%b!ƛm9Д0{X*2NL%,KycsO|wMIKQ(2$(P(iIr$ω@[щC$ 0$I6.Da{%+<#nDP:cG:dDS%W+xgU*@i$>,k(k.od!#k5A%хJ\. 2Cs*b14( p6 @iH?2ȶp*7mҖZr‡`\'I#0A =GyDH2D@0 *߄])"SeAIl/܉6=GJu`RIPIS PhRc\zh6[JH PWuAZ[IMuxd߬\H9al. #< #VC N<$3|Y]@xɼY66d),CǮFx]A:%(E hAwIX MȄ4$O,"0}o]@|ct@_GegO*0g$yGbEes^Z +8'L8B{\qĵ}F$c.a:YVrA)Iҿ,Z*k$4ZPvf L-4%+d=JDFuRo:SME<# @쮭l<~ɻZ7]MOuA6 ,֠]A1=MdNW BkuV sTv@8 HŰqitx{>akۇMx;=Vʁb^~Pt1>;fNð01r3zWFܫSnSДטbh0E(=uZfbm bYFvj҆e唎؁,AΎXh!ڬ9,+g"VhՒ7CYs֥ O%7xN;p,G=2]LlR)pF,n_2+)}0۪.i̚)H鍤} J(S&s}"@OIFz[o7 bz-]gW@_*e$HXؚBÉw=EGGO?OOdwr<6jg7LE/IzC1hC? 9yKS~I+niis}K ,;BXdm+K%$g'Zv-cC\h+X(rXG$ZW8 Aelc,c.RNytaH5Y?0s ~pK3cʱ22ܸveA-^Y|hOo'&?.(;dBɦm椢;P|9c~ dΡwoО2MIe]?λYȲOmM 51)gDž7 0u"t䖸4+_FI7n= ݸ%35MRs|&>՛FeZ. *orh0O iKƝ Rr7S3ggpfzo{N5Qw. }ypx訑ᵌH5'Ϥ\[Ye+J._k@M/ѩr +xB/=`2o. 3k~4[_N2Ro+F"ٱٕ ݍR7`#:~hu"za]tОKQKr-ws_HwT(g"lhߘhC/9IYps!8掞vsSk gT_53/G|WrVUBٙ!Ķ%J=Ycct +i׮ׁ_&jɂ#+0-E.-glwֽ[!c=-ұ-m뗵m#\̵dG?TM9D:5c\eVavc7E~I_R2.="l?{nmFsWC>8JWgM']/>h>=;04b qæiTJeG1Қ}#P&B|9}FZ7fEgKZˍ{WX*O9nQ;Ad>&wyS+ s2j`^*T3ө[{6PwKs'9 &]l0w(_?r5NcHT?ԚZd=vɖB܈C"9A,}1 \w'j}էEc`n{lw,잿1ԗ8[01dF٬sׂkc[0oݔ׻ Wձ}bQ^z-1ƽESF Ű7;uq_{ S|Xȟ4c k`wD Ve֐|~eh~dGǴV|y>2vjK+.NX&Ewto}Dg[F|{kU=#'H"=O;7d$˷¦_+R.m;?Gі-5S4ӓ=ؠyw==EY1ELZոe7e+i_ִev,7`1E,t퍻ƻw4f]EjDネݍ;הE-Wh#`ֈ[j8vbg/w !(PjSÑۙ7羌r% GX=zTpfK kd_a?U[z6/zS.Ow7hok88w`}f#j7׾,[›KwL۾׎v 9{mH=}5[ q ػ]K/ I_S2Y`N2O\1`C$l ^j2(Qic@elE{&6zjESޒTi XhB|xT꿣|T Zb&gUdZ@L .48{WQRTcR4Y74Q]InP_W VFysyDe_9(@3 i'/͖f#V9~4cAz[:c-%1UWo+WOK\= 8 ݹ9Oc{\D4H8GI3#H$OY3>x5ϜSwM]{ {`W0o#l+ }lx+&K_-.iŅ=%ւ,ԧ6-u*ʳ سs1 |jϵg*}Uj:RY ߀i+ l}?/~p zWӠ ֊Hv6"(ۆVaSC{O[d}⟭:~g+]΋Ա|'5wͪѨnxxܸE3EXQ2/2ij-cCC@ӵY^Ml˶cov,1g[Q:`ԤL__<|dokPYVt{Puxq|KӝK5Ȯǖj¶(WL=cm R͔01qqYX%h$} 0U L pF룏!KVX~yfۤ !m) y`IYS/GN tH eSV4N%:C1m'\mCV<}]) OA]UMJX=^e~mpgBEuyfwK*6kK$}DXGClO{sv˶rzq` c٦xЅGbwbw6zz)hUy߶U4~F^vKQ*²З `~{U [Ă@as}Xs=UXw֤alVjsUVD@EDSpݼmĿݒWnOJ¡|d4#4Stf}cnC=P$GKq>">VϥKK87GdK-qVzo!3W/^w45Ŭ&:`xgP H6~$^cS/+,' ق7 D6_1qb72v4>5_\DO]%7PF'C&j~LDM؇VpWܸ~w$DbhQ̋ B8󍠶hTpKvP Gàt8PT'Z#X3ן $|:Z{%ig:E&+ni>GeF()Yf`Y4b */ b^[4Cmh70I|}vtd7xB;}v|AB=Vw?Mg︻ј\P/w !UwCpqs=qG}e9Ħ5MjRΈQoi)۶O醱10hALR11L.l9eL]qgRi<t+#ny˱6^i1x GM>]R-ݖw,8vc9̙{MÉg:}OexAߓه|sn'zH_?~i.E_ҝ{w?w0-ه4s RXʟl~ؒÞb@w{JJW_K+JCp=XlQTi4hJ?ຶ;e*'u.k?(jNfa'o'(ޏ[?\4yFOҷmHcn:7Pi kƲf RGBA7M^5VsK?cSj3_gޟ5fl^=LfCdB0J+L;ȷ4`GQ^6ԛ7 Y'[SV(oxU[",nCw9MC_\b,^*yoF`PfjΤ՞Iˌy{A8 l Y-T}2{K$ƝdKs/+| ̶Ë)UlPz@N=-ɦ gD(%ϟLhN|4oB~8 ƒ4 CMzڡ[:qAY1=D)OIo!?87h jAzj9sJABf' vC8q=|J8LX_^'X6Yu`-JcP'x#9eѕsiLT)kAZ5ʠ;|=mrӣ$$~(*8J /%rĻMZ{1ن#q"Ls]xVW+_088n0YN'AW!Kh wUO*O;mlEO8 N[Kzq3^pYzK[^$l5L =)s= 9OH' S!8C'>J9CϽHC<95A8o 9 J7u/^[WڜdL3Uيǿ*ǫpf"+Lld H84q=E( >B:FH91BPB "BME^3C8Ɂ4_KQHgoxтq{#p.pM$B vS3qW g9`&M,q:ڴ>2?L_M@a1%x5x-I⴩u-Bt{E P}֣VOq%먪l7zKd譖0 l<޽lCZm77(?*a|Y~*Y<DMbGy3^bh:qx~հ<&@ݦҚ0J[\&*'`FJȼk2)`pCуsZkĔ+asw&`#e[p@<+Fq*;-6"ݽS`mxc:~iɸy2Mmçx9rP ^ >ôՒQt2.Gmٕ ef`s6Ig粝%,l HBH#tdž~=n >6񎇣,"Uxo5_//ü,q!u\~.0{Ƽaƙ imf_qKQi* OMLJRV*J8L-cVY(%4J %)RD%vB{0Bf|l؊Y^ Cӌ:y79|2B5@^5r6dcf< :?5cw2G*%KQ3n)eeA67S~ vR,\ 5F[%9>ݙ!c8qePK&ڸ|5Xs~&_!ؚa1l^xq07B(|EL;bil\ا!&z ѭZ/gdX}(\sb2m[PKϬm{}_Y8wla ѿѢ6lME٨82mڛ!ܐ#ly>k?,xJFy$^>, Gm4&Uqr;wH R)C#Mų_g=SAM &Buu#23*sh2S<=ֵh2vdHS_ּ31!^;NP iՆ>X]}?g=,~sb)Q܀,WZ]Nߙ%}_eA;@]?Ҫ oz w F"UvՅhI'S=FǺQ5w~26*IE+sCU U2jO2c G?2-Yߜ.Q* x :""4XeW}u".bY >8KƑ~3 ZmdJFl({vݸ\a?AZ;Q6"(hV,d][k7me R`X3>37g[Хd宱mF66L3"}$eM,>hviLE] *3Β, !^䶴7%;% g##uݷ_[Jqiʼnkl0p`:>spәgcO<K'3>12.lr l0|LsSJ'xk,-Eh816 ޺MBq[Jf,[J8 [̣^nW7x{6}95m1A(RCs|[,r{ ƯD iLm@Mǎ7FΟxC o=/V{d'=\9B ѯ7IidK2q[LEٻ 'GlL0D-wWmd: /|$5"5@:p|6trǫ{viǏis.lW2x{&GA6HǵڜbF[jv/ W2VO{#}K°tMmu,g]dׅt&,g D]i8MCyZshS:h91gEz.C7C-XS~Kru&]9O0P Bz4fzԶjLxܤ!z x&e@Wр9qkr|tOEwx;(tB9GR 8Ymv: )+FqHsWDvs)6R@3L8P{@C}eY~i39}̬8zuGkƣiۤ0Ԏ%}|B9ZR_4.\fCPv5UBcL' & u(Hg`Ӈ-sQtyԅnScуH;Y4*p];c,FSÂ<%jZvHU dNфzs ,34đP;u ~xI4*{lIRKs}U74úGPDkMNwDӴ%5Gutn׭FHooZ4X ;Gl}1W?1hnOˣ_.R0z=V[xW }Ymi_`  Ȑ { SA>AkGșPWhǁCmҥEA"IӦ1N@NH,R[l{K(E`ӵ /@G[#M]Р=ه 4a% au:UqP6mY}jMzRuNH@hP4Ҩleҷ>>|Oo ;uSg`hJs*^.atZ{4bP܀*5=P(ͷɶ!M=k l8-FG.`z۶|gyԂP&ƛSxP-8E08/Va1@ XXCuP Ay1LB*~?fpZ^&u&~*"=R`*l2!].-ؒvSJ(bѱI" $AW!.7 fn-7H@hpᩨz C. l\s}R͊9yh9hbo %u⧺gj2AWsIO:B~zP#U/ #XBN䥢ͭ1DlGAxB1f\g2 '4T`\ O v;"h"{MW;͡ -_}Ŷhķ3FkarIOSx隚87ŝDT[b'{d~FPD+T7x55֣X!hxIz*#!xzc|& M9 oO#q$uo h^ Es׹N,C]S{- pqrc=U( `"2xbq lÅ+Ik1A)} };HkZw/)#ųgjuoS&y/wa%o䩧mbC#A:fEY*gj誶1>3jI԰bHD`)JsƳRG  #;:fC$Dy >lf̅=Z&Ir9LWQ0MĿڃFu TE|Hl-63L2TH~.% rL"(NV$4GLj.b,B|?p %f,n\̞0#Jd"9m ."C&:'K@M \ vi]&pXUwayƝUuh$˧\zԔT2% #=5{󂣎__#Z'>HEL-إUf-|B$X[ /XV֑> ؓN\Nph1W,Qj+M2r a' J(VS?12H| ?݃uc: ]-`/3L@)ڶ.z]U)VCf;1;-et\*bN~X⿄VX JcAe?̘N٧0aOǨh7-?:APJi*{;qCGl= ,3g7'zFDWҍja !AhIY#\1= B1=07)zlZj Mt,N`M+Y k3a!Tӓﹼ2RP/P=%4/(B}.l``ie4HwNeMbew#H׽ޔyML4|H8+keĚTl)5ah5.K\m+ P I6KUTI%AR$)H2A֐.TXG֣'ua8G_DT'D)CB qNš۴z5L59(;$?bx "ֱs+!U"D~gU=ԨI1Hd ?/oəq:G`j)BƊ!v5{4AV=ShO .@':n .RZ5X 6.4Ӭ54 @2=}dаZ>s,j+ !6"%h+;%J[IvZج'BQZeؙRU50sIKi:n'l!uNK X& j Va0aEcV*-bMUqD ӔzWŮJZT$Em xns0:iռTQ ذ@#\b4l<7<~m 5W"&"Sgg?u_ı}{h!PHWxڤ\g \RԵ3JpB]bW>bYʹ`8#冺<,A?H_;6HL)YGqit1pPB qp#GKLdTՔFRA0aRsT7K _$ё a,rz_J}%Ȭ_!NIe$^#zRKwH8w^Nn^LM-"<*O }x!lk{=в Ubh 0XNO,&$8XL!C.+2ːpkV-:]k l]щnT ~a ,9 Hג&X zlo %PG,0謴 z ?,;1$ed*T9zYmڱmVPETHRbj 4@>=0p!Dstt½?BOyv^04%A;X02bTmB(%ѧ5j,S&ZC2ꑹS.Z+^#D+Q!1ʭø%(XR#~.5OV9!!ȅeɸzQ#ˊP%j,H̑Eu3 iX92wd+{ ļ-gK]TE1*=Y7|&wuؾ\jَ:6kw~]ڤ%vke0X3TfK׵4$GEk6N7`c*?},J1hnْ$]yb&mtxn16bpT~X:¥5붵:X6l>t͠RUtlr-ډ) M"] oLS6 ݞ k) ض%&[;]QY~F="W!]2U` WWBwkև֥GGaR (G\$*i]ŒjyVnZv-eoOrvb;Ciq0,&Kī>;A_X(b-w*kbW%ᱚN٧&cΡQ;di=e2$ ,"h++$~5m#zl[SNR9|0f)ptZU7&xPEnYYFNVSw. Jj 92kVS$ekq]I<X 쬤&>*j13xZڹ/R.%3gNcn7\Gv4b#|qQ,.zr?X[-sr6bK?[lNlX4@m{:%ߖ,v8/v(9mVu,JҠ1dqbw9ş.f`VĢ5 [>q^գu~4dTm`(& $64s=vt;AU#&>0@蕚d4_*nIDNp=GXmZԙlpE2ա74??VA~صTΥdtiR (a m*-Ԡݣ|>?ydaw]h4f9G)^׈K:\{d}V=kDŽ-:FSC = Z7Kk[ [zv+n] ޖiL;aqpc'[![9g]^ЩQk{2? (vݻRY*J'}Pξju2@/KR;ovƈ*(Dw3sB̾[Q۳F[Eۓgy*@cKrjRd]ɀƆ Q]D;>k F_7hW/aQam [}w玃^ke`VEc.hܗVGLTs&^0ƥ(bTs'[JeIŹiL Oe'ޒ| ]K)?L#L|ԳgjT)QnwŚp6{Lmeg2<~̷/L~C^[ɄZ7ؽ803ڙ/H9K/iXjSJ28l`yҠƵt$RX*T)Wv!yppG՚A ‘#Kw{]ǂۊa}+5 B,Eɐy/M ~A")ѻQBX/*o|"^6s;F[ '9—[ec-*k H ;3ɥ#kOY}# -+2SzH،+|x Vr|C ^ 鼵(r(EG/~`Ht4`#坅\kgypZNIn^awkX4SxwI`(!,/H ҄>P%Ƨ/E+3r Jc^b Lq@10%ﷆ/ GWD!C)ݛ{÷WZ+v9PlcxH1BHv*t]e%DH5cOA3FϞQSVgK7$y@wjOm[6iQ~ISإ&P+CQ/ϣ1ƀ F9Fx#sI>`iG(XA1jF`u#G`R+H:Q]{m%]Y7E t5߂7@=7/3ʏ63;KuIC;+ݩxS ݐȲKJ lWIׂ1vgqHٽQT*U: } U IMi:<*]h? uqWEӧnp81"t>y8A8:;K:twlbz#z#V.&WLjɾJZLiPR1Qcܑ*yc\i Q?+nd5T~SIoE3J ּo0K 6`q!7nE!?F:ul`g w(a<*.nj"X/)&YQ˵>|sʋ`Zp^y_m0Lmd=}7?9\qash<Zɱ'E=:]/m77|n'bTg/%YдZV7iZ ] i+Ͻ#+KKufى)+b_uݠU x']6̭c>_ͮo}!:Ì:R{!V:;kW;o}!/TEh -Zٟ[n} tc |*6ˉ6J'l׏KɞlF&{zwӫXRC8褾 pV4!! D ,,rvjHn}a}e`]g2l4C(He35 2em1I%G*p$r~.''?6g>wvNGrreWWo9ѽ 0=gJxYuy |ʶz䦫=Ejo}z˼O JTtŅcw#1ݖ2myS-KIhՈ*њ2ߒM˴ggQ{ iӝsU"ݮa|}FetgM[Q&P9[ 2ePP豙݃v|~zP蛙L\"eo*vRjnoRZƠeV!7ݙ\asadž؛"%$AJk%$&nibi` /4ѓ7*mCzs+rJr|A8QHiرnH}H^OfqR[;_חn9dOIȝ!4⎤h7 7<4m;= d7;"`PZ`턢)ro$c>IwN .etdC͖iCd}|CNd5D<p<4LhE-{L>^f/]|nL^W2rIײeGwr 7w.wxa/$dx:%M2P}lbq쨦kUcRյ|%6UJaI #5I0Q~J&o#ִ30vだK~O`ȎYFz3x>mfCg}H<+ | V>ڤg#nuGh2[_ttG:b65O9fd]R?HZv9+N͕=>d0pVBJ.tL7ZѦ3h+5 Șzk,GTH!#QȴٳG OH;o/7Vr𜌇YҢgQ =ӬQb6w#aE+!C>'MI,/%Ʊ;m;Dc@x:qz ,EYt ")ڌQSzISU.)2,ԦYk48X-"8;BiL zf @jWb/[&Ej88"@8kldݑ! v #)ZK0!fsgQ/%[Hw!N9NCFzv0af xWܐ!-."dg)2p-u)@m#БA|VGQ:23=q{zm[k\Б|;,8߂8T8K'tئŐ3 lG;`@Ch2ե/w0lhc.zš?6,VkGGP.&u3Ļ>m[XaQ-Z&#p*'Kl2Amә:#,B8*\2Q/J @Ȇ_{肜`D] nkEd’[>## W6du ӂ#Ge/g[nPD B>푀&BN H?jA!DvwzZ/R"s2x+6o+>Ĥ""B +պj& 7u!t!">|JݬJ9p-~Q7E&ܔv 9N\,Ո* KJMݣ#0# vƏ;Dԙ2́Ç?ފ<}{yⓖ3j>Ev!KxƶzMngPbŒd:y(@<  }*64r4}fWd8$Ѹ" x=dO$73YA+晴xuы:%2AwLƐȖ:O:7\0jD~m!uwnEv<$3|jR%\r#)_cr!HbdcOmA Fu=RgJQ 0 ȏ#(tkiŁ8 C!|8('[\ϮnVPBob,jO!mٲ9A 3WIza:IKKS\X~WʱupK;ipVW]>'`1j$0J VGMy$ݦ2 9|Uӻ-=Tt-ybOP2Vm˸6R+󤢔3T%` 9NTu_;1boרꗇ ^86??fXKV0Uj[.#RVTkA*|yt\2FܧqXf}kG d}'ھkMW`E&A{є|zʥ{:MF~In~?!HX)C,cʲmx]^nR#>Jf9R{BڇLYz1SW[#%&jYҒLhy$cHdCI[Z aiU!XRj+v_'_A=uVt/&!ԲU]M7a ˓J Ǔkլ]zm2WknO|HzGƯe4Fk0d!e <4([k0yn/XjLJ( IH(s`3 ʇo j>M_^A2kn#ĉlC-58*%ImCMC-ۼ1 r#C|P2{{AY˙-ZO~&FR'KhhzhrSC4Q8'8pIer# IZ8ЭC Zɦ!1RjEQQ!R+\2!ΒFjD ?5LhdzYf@s3՞3\J/zg?hU^z&ݟ8J?,IMk1S8VeI$rb}) լ5-Qz|,+u!M:tgY moa%Ĕ4Fm1m|yHuj\Xj0y_q>zhu?{!Zz^3{z4~'MY"LYe(_Iv` Ioe )WmRb/ &X" KRa>Zd)ڛ QbERTfHM1 US ?:vH1LU)<kUs[/j- 9.%)GǬF`;m2(>V $F: S3fή&NwitCxhRxǘ+e |T!R dmzď GΜIj[lRTzIk["b-eXYS-okMʬfAY-e1 ՆZfИslS (J쉩u a>k"W c2T q(8aeO,\̤:d#w 9vOM?Ȏ96^XXcUS[LsĞVVHrG]*j)w6Kl%I&u_`Biْ &hۖό;ڒneme4C68l.nO#&3;}ɤM=p)ĵDKG5V)zȝy:;&MM7ݵZ2AJ{$f_oɓ6WpJv=jt=ɏVS{Z#E..L+x|܄9Z{h] kHZS&jr?ժ6h7CgDZ=liy.A+G4#mƟ@XXSߑ6H6(:ZA`$9s*TK1-1ՠvI-;DB(mH=֤!hIcT 8HZ>) T^i83lQߖnfwG-}L8]c- =wX-ȽG!|{Z@ BLb:9Fp|eYF"S8`-8XZǽqDU ~edQώ(pbQő*9r_ifSLԃV'U@mvzz~]-cs₷Cji#6F'[Hݜw):z[y1qc^ɾhz_=2$Jp\h&6pQh2NMXMfze{Y\+'^$y۱U[ G k ƕA~cSxö ev^IW9`\ 2qXb3̚m,u#_@>(e^ù5[J;: 2cyћ;ˏ?_F_0&6rxQ~d/K286{EzV~Szޝ|:Π;󡜊 RKƘ]rVvκRzKꝾR?vK *A:1[jKCrbfy[yVЗc_݌W7ؚƏ7oˋ峷/mgY-\4?M淯ɢkh&q5A)_E,1[D]DEs_-YR>ao,O8e#_EgmV4I4t¿pgp+d<X>X~33B^-[:`~>{}I[drRGV';Wt;^t]zB7b{%a aut`]ez?pۺe5YӚ:Ɇ2`^"+=Qoپh!ZEsTΒY#D7= 0/<%-x},E,ח>/2'hpGzuP vMtW@nܫD~ӻ2C)m>zNv͖IE6tmAYpզkc |z ~K=ÿmv*òv/-jAv=$,[J(6VZ6Xyop"xhhBn Map Yum@ԑ{C5xgȾM5 .#v[mϔ+<]>}/l!L-fN3 \;j}wʨav"#-FmBwx{38Ǿ@P2 Y~c Ȝl|u92QٌdF/dg]$~<v  YiyPk|u @aE^RIyC% ! }$,Em})M襀.6[ty-/I=8{R !nqNB9ªTN\rˑC-~wx;>&2D*d~tAnH{s`_ lY%'±/_bdi@@Z0D*sDZ̞s2?(r]3=KNܦ˘U\{|*-}Ga*iN3XnHI5bvt? ^%Op o' 0Z.+i@YeԻl!eaN'aHO"aGjBfmQ&X$\k4*ɢ}YG .|E5$0gJ`g{WtŪnQ7WZpIq&B@ӊ]X*JH&&{#x oeBCw<;7 cDG~h$~CI3V|: s{cv Ʊޠ4mqtqggIpv 94bQk_2R;C[f~2wt~9D,G%7p!E@N2b`!CqCLk*"l}VMd(F(Lz68lb\SvH^2ufRJ}e0ۉ,hijkAS'lS8Wl.He=RA>a6<2hס>uC]VRQTk։Ex2 o8|;5>+ۆJdt ߚ0" {c[ 5M7~oNZMN:L.6=.d"3HD#M j S#xM"|%6\PdqҸZŸKV=kturcr GQEe޸>/.rtCn+4[ZWh=bw,PSAhm0hJi[cm ?̿ sѝ ){6d<$N~867'Qވ$#uBAM9VbqǬh{vdOԳY(Ԥ78)REɷ%:ARw.xɲ $,q0oC%q6NҴIꤹ\IqIH6ib'mzm9ޛ7$ݙfo;ęD. C홑ҶhSr DדiupW|*(e`Q)[5 a}g F0I s4l':0{tWbe: ~q{#ݏX?dnT]gWϰwǝշG`/#k{w-zk.#:/ =|Cjec=cE7R,oC{ _M KhtVI;df2fʥzmۯ,cc GY؀jRk(QgR"OYClfۃe`UܙV{bB RZjM92z&Yh-sh:|bۜD~1$$.y%J]A^^=SAy4a:X9M4s;tk4= `âɐTMzYeD@vA[.aUM,q9Qh4bк*h#T0j5 @z ?2tA50fdhT{މ׊I;>ۯd,p ]t)X =Uм ܡ|џ뺇(knƚCx?1TkM6u9ukU5Vx8,y !ME?q5$lY"PܤmA{Q<3ʚkO^'"$+٘'`04O-]Μv3}`"Q iHQ0˃>1q[Ѣ"{ml(辢/5"GOxSɄ ɤ+6#O+¡yd>kKDlYfD6; P ‚f^RP 5;:~ٮ2TZ!dݻZc/m«0ZtiUk_ѕ0w t{oc-U#9#/KU|Vɤ2=χSJXDJPFhTƟEaiKk @ج`Bhp F44C{Uk.˴&Gb4@I!o bXKL.RUB"dEܭQq9O/dGtGv.q ]=Zv-?/hZy-_*oQQ#"ѪڭMZXMYʙ=U0ăܕDhl2" -AX^K߂S_pڶ1.4),xwV8q7C'Ћ*qSY*1HE:q`B7)DYOtWc#[o"ufݨ\zlZ?bg;z$hT+Oӌ=0eALNe~^2,YS|v{MhhNGHn&uoI5{0~]iЙ#[d20_!-o*3¶"6 "f&̮[1an:P]b `#.Xo5;"wBNمȣF1edV#&h&?dKl&͎K/AHsvĭ^c"H_ zhhwiq^+gtbEۑVaXWQhT!'L1a@JMn}Te; P:EYpM/Ko@MaǦ{zO|`oH$1{}6]j馲 jv=MsF@,뛾Ζ`- Y&o_5:Tejj%7r8(4WޭkeխT/nK7ua= "(*Z\i'DGqґ|elr󅥮` U4Iwxͭײcg@cj)e5LY )#ipܦ^R.|p+Ic]rV-w11$D쮰pv a&۲:[ 'KCUJx)HFi96)Y:a@E3 MIßh2ҩC!}g ݀ol*ܠL|ܮvtxWu2]_]ͦU0bn;-*ޕn-%$-@٤;;XtVV$W66nn9 d/-0@eGu! TKPWdxdlaG|m°]kETs*aI=pxk.mٳwۄ(¬XHNUq.m\ rw"sigHx4pL-O@d.*HЁƜJSv%%ǪK }vs8.W^c%fNumz0q#^+ Fa2v\V!h-+ƀ|~:xqmfzEZXgCWWy"d|T3Yq %]Us)E.pnP(4jX k'0}5nQ;4r*kJIKPfP&ڏq 3@6TL tK9\xͯؽ8k,tI;'!7xDlniJ+lŗr/%b(B:@"Q)P }dGD\i\VYSe}ͭ`o޿?'>1n31; ˬ}_߅* Oޔ>:t)XGٝRG/M@=8{{ꃾk R]yL-&+#v쳤B}a-ODާ^t_P(YtHRȓٓחާ>տ!^Yb.Ekege^O"UOrln.B'=egcpۮ?JuXa2yܿOaC𠙭WNh3Bښtz#XҘ Nw'Žov~6.Z@ټŀVK^B/el&KZ qTM퐛BblJݟ7Jw{>~lƞm HNńQ{JaCNR5}]rPcp8=Rⳟ݃esbvЉeX NX͋՗D m.H)FR߄eQ)E(7FnKlDSk0֚$/K˒Biɉs3?CvDtweoqg Yж!Z N%Ks?o04L*. q^pLA>2e@YӷRM=LTd+h0G]'A#[*'́G^:EPu\(>[@Ӵakw&^U\饀t vd\؇M>v7n Hq1N_L4؎vNQ pʹa,oy. [ۈFa7({iw4%_h {Jԣyy*{ B*hL9#1c {P„h1_~ Yp@3?Svh\Ǭ.?o7?64G&`>_!$O #4!c7,"5ŅxiVlUSQ}Ɵ#gz[km^.H' ?Mg-B̳{cQ6|2ȑ#Gw0E'QKѯvf[]M⋗n@6C'Kph]AX xGq㭍+5crLZ Yֆ'׹ׯ#p}YլNTC*{w @5!'Z6\kG9IE2P\m04CD5)3b2a[Q= :AAnbk3nRe@! 9!-=0BTGݻ(V,eh҃Ah\oXJWs?whʇ7$4 '&{-vHDڨEI)G(޴ʍOڂ D6ͽJ\~W|>L6!˻&t$V8s> ZΪf):ҟ9Ιd-L-@ݞR} Ş K/7^WNR~=\"s &]tqܓ+$3-TExqh%Ը@^p">.IK)L'#,_;vE9q=A#7 ? b1'齀Y9Si9mGՕm|zJV.Ep> !>etݜ"~.' $kINr\r ޝFv:ȟ xD+=M@8l'I[020ד & Q"D>®"Wuo`@#c4wsi_t< 3_#˻LӚZqelY,ެJ *7!{Ю,7 cա34)ֵXV˲R6YS^=hoRߗo{@2 Dyy^$h_;&b/wjOAX cw~,h%g/}v߷RHjqeE\C؎70a[t?=2.wQ@2{DNsM`r=Οң{1m7Ϧ1LB Y1OIeJ{n1MhtC}I߻lXM)-Quz2(6zQ\8B1p0q0a;`!hNQ ;5YM~3殀?Z+<\M6(I'=Uo!l1 ĺ4H#M AbzxptDs>GF6=Dcol';tFAS&,,I}{ݾtJWqΦ ʶ{,]~: W@m !rUٷJ>Ը[i-wSѳQnGrh]߯S~I\Rwn֫;^8qMvIM|efUx/RG#@iv,hj=%y`<$6?,+X=| d3&ɉviYfNfG&U ̰#1HK>\RQIMBB2z62&ݑ0!kKF#dxTQB{_hVE'λBX)ylDzKlKNsSgS6ml§`>kOZ<۫\:<_&AR'>AnAQڳ( Wt7hFU9EԜRP O7!ôn<| buzpKֈ iD^VYw8xhd Mr}J" 9ԟI[M?Q4LCbN!"K@^Q> 9J8'Mo WQxÕ>S:$`H8 }=* ]A;co5V\ +}e &)7*N_CFap@ħgNJH%W$ @)viɡOI~).guU+͗+Pѐ$őr\ч,r'{zF^ܙN_ kNH yy IɩSr 9u@4i4lAazZD·fQgV*^%lgD>K'i`s'uIju1fdKY ,3HgjfFiߚ%0QϤ4V_P .՟(3o+'D@T, o*]vwܼ]>?۾swYQE9۟?;4FGx̷ 쬻|PcHN %*$XHJ-[nRޒ)~80dfJ(|lQ&I6{u pT^pq!b EZZdµZ(Q3z,Oom0`9Ts) 1κ(}٢B O޽duemIE̋OİX'@"T,p3'7A^;݇#Efn4>ټ|8Y$< g*QhÁX1:1IEPn^i9Ytt]Pf(Yr Zu<Kt\y,w~ڱW,̉,TA& $Luݱ/VЍwN۴!+tT֊!(K/,gWkxveYwLGzDh[s7Xҿs$ZB`-E`[fT$ Zaͤ5(Q!"Rҹe4<2?lyR_r'QSٌt4g ?T:oq&e$ Ɗ, )Qa{# IT)`?4=>Y{+bIϜtE#ߦq Iq g]-0:aPbX*..fyoX2#B ze7u{z:5}-RJlF]ﻥ^:]ZS{?/hZ +"۰?[gk䞊/kBI%NSOw. 58,(ӕ&aNWM1[u!. Zx ̀ZҲ&3=ffc+[tݨ8}&dg3+6ܪ8{QXK!7xO8,DiѺ8y tk0pz_iķOB #ݶ+Ob?8BFZ0d[drL=` qbTuv5__,eЛ.ɓQu( .z#9.+BUc| ++et (hxHBDmԷ +;C$X&$OKu+ݱcec,Ur}S>s}{VcxR $ִL@!GK&i.)/RSWqZdP aP+ՏSi|z-4E1\lniSwޟ`'PZ (3Io#!C6= ȶC[XU{Uduvl]D0JNwxWL[ݯsV9J_0͎fSs0 xq#dVݖUKIӟ4;">tr1{Ҝ z^Y}hFhK2vT3lڙdSaO;uzz.M8',fIrGw4)G:]S懰62RntN$I1?EOs3eWgi7?iܚq iڔџ;u>}h_ʼnbEANz94~VCF1Lܰ !ZJS4=r|gIw}.) *8/fS+KO,\h+o%B&D́ >Ǡc=1 cPv5C[OjAzYUQh2I!L$_iGVgNYQYx!7Ht'ahK^9VVVZi4םFpF><8}X)NI=Ѵk܁w5@g׶ /;%J;{ C*);t+Z ^g/Gv4 믨.UPQ͝òܧvAZ:thhNxȰn"ˌCor'WekLY寑 :t U5H0U.F!v- q4j96MGV|6VVM@U 3R1噻eS,Kp8̸^ 7b!u4j+e+ÉXv4c>~A9w`L4_uJqm tQp _t^nxfhɮd'̏>Nu_m{S|c-=ũ` Gڌj{{LoYyga3F^~)9tGqKZu' VCY:3zC-wAmg~6#;,@ٖ;;8p9 7H]F򲌍i{^eeء~?b !Ɲ0=dh}nYcӟ?b%j;x&K@8ߢ(/#F=vij s6H0ٺ7ݽ^Qo@Gj$2n[,a&U,>I80mo,yPj7&U.vF9c֘s-'dhU,:c`SǺjD2b( Qt"${/3uSlƒ`;AK"44Qy/M$tf*:v>dyȸn+5flvRT ן7Ol [Ԃ]iXީ,iW8/vkS-;2X큆4Ls;_sagT޸ݚ_{מmq|Mw A>!)+'`AT4rK|4яrS\~O7׿w/L99Y4_<4:yj6Ԯrh tu@lKAh^IDr0`nڤ-j',0WS{9ɳRS:I* ;PeАq}OuIE^;Pwa-$| av2[NBGBrqidHu4Tk2MLAꇒ=`%hb^{:L.'갃{E t^[3s#Q)з%-rN}dޭOѥoD(`iWM ]~AQgߠp)ev jWl3 &[Ib>. n!æ n64+Ȣa@ijD+>&2@8B+aܖbQӳ"zsىpQ} 1t"a\RUNJnHJG&n.'#DGsd5"%قϳ>J6N#uّ=;ʮϮu`f!~:?;MF(,]Μ\z c<[.χWHe+Sc=8X FS;r{@A>_@jZQ ^az,">è<ҽ_gR9șh'߮ڛ}IZſxoA,2(pב@*ã:I1m| ٖs6麿A? kf4æ=ћXcO,;x;t7,:XNk2|)nManj&7 i{o 5zgmEc:l7}el<(ü|,h;5NE ٻo.wDPƁZruHA*>١._kT@>r|=o>`3])GN,US 眖bh{nǻ1yH aFuM 7C WfAhWVJ bCgs?acQMkJAE9S]FqԢ$睱tl2ɍџc/)k WaBUWjڥY{LџM4]4q^L!W?ksޱ*BQ{ҞGj:7Nl詣Oƹyz|Ωx\k)aIZcRd?spf Of:RQV?w'ekv,]۾ioOuHBw}w &v']qr`waɃo_&l-8<VZ fp m4n㞥3`Nd`_zy/tWI .2nkn~j;":fѯ+cR_uR1r7h%W^XYNZū!k>X󯶐I" T{x)v 4 meH~$;oAZTcӤ;wpWo QH]q1wH׬yO$GCCkO+C#Wq79mS|Xi!8- ,-ִ:6A+u˚unW]voFv/eN!{'/?~ԙ2 uH)Gdhy6rYV];7weku=a:ņL=-2,Ba`*Z^9~Yn"u425HG ;ł2c/ĵ{WHvo-`J^Q[ΈH vsptLfع}~H{n)*k]ڌzv[F#X!-yjoz,ɸg0> nZ/}@x{b]r{Ja[" qo}ULTr2gƌ F0Ur :L|[ lGaEBd-Ch<؆I/lqe鄂wYPT[wG_<SsS+;BIʹی>D[1}}ԲܭNs37;4:;`2  DƾcL=Rm9SYT;pP z:wFu_xC6}Iʨg*"'Rk Nׯg}9{Dq>`Qq77hhkE,UW!_;q[5X@##v֛ix$(Ks'c0nX { I n-[0A׫rdm4OlEk"46~Q?m&z*3T7ž"u5HH.'"WM="zF[Ȧ[v*M~[KSwprX_yh%v'KppQFBr;Ά/I؉{DG韔k{T~Ku+u%).^X^/<$%Qe&:_"##1wvggR[L, >Ӯ͟饑군a0)cg=aoSKOuTs2[y(Bue4J[g@>k I6F8Q_KM#ϵx[ZV@|Mܚky22|A4wr!02ȴ2 ܤQD#,FZPmpQ:&E}mZ /`o`Es/5Njݲ?#ݔ/ٔq[֩'YmW!aUUI[ց yB'ψPp%dWJo} jzo?50 FѭX@,pi<@Я_Y@>@ פaȼ izag;"X,FKDczW ~= `{ LHr7 Rm uV<"f)reQ3IH=tFw#K#_~3$ȟԩӣx H~(?Dr93Q$_&-Db$TCfi Z"KO`Թ1l9٘+?$7pyl2$]Z٥meQO΂I_{@;] BUV=%'Gm@Rw@(70|`{TY^7*x|>HJwWSP/U݆_g/ T{λ9GMPfXVZmWtrVȫ;.ؒJiU=we8aIE\HoS/;+))M -;,z]`bwەa6R:=XH>|s!xBFֵ)X_ų+}hHH?F4]x>}kP/OoDZIwMaۼ6V#tx'/v_Uթ]&NSiT7y2j' y2=o91GP^3%Pwu/Bgm5$V2\a:=Ki.-w1=Z]Oh,nl.7 R+'n * L#pzg3 sM9sY_ОZ)ƩӉ(݁ڥ3#Z:0+=xw#?{˪W3 x$,ǻ;[{簠@W4-6]7)Χ-Օ}ob";`CgP4[n\8=tQxwlѮ,^K"o5y^8-ݱy: pq?5J UJ]Ё֪6Yw1Q[s]%|GG./P㔝Xn{Š7,72H8RSw~rx"?O;j`A;(sGձWnVqb㗊gv);z ە)COjIhEMalTO> AcHp"? ޟHYqBkKƞu7{S-g:"lz׮/\Q]|;Ql")vpُnEL&I~S;=7$;Z;_[2yk7+݌~@rzV7 .?#`D߾E-d`"H}ut9~XHԑEXiiR~=8`ᒖ  nBö-kGdR'hl9Ou4V|4-DM(S,wxjbj{&2$]ڻ`+E'81!JS Z˪sO*u;sSY}be8dؼiFʪ[-lS8^$ ^x'9Me)?c>JFH pRX&$~|h xZM@B3G4`7o S[+ [Àţ4+Dyt]D*lŴb>6I &7<7=*`ľI~`kꅹ/٭[l/u.vv{Ktu6na?VVV-we 7}o>ro6{R~YCz7=;퀶'S/<}evY",< .SFT;W]win`+C=izbz_i] dOU 2y|ew ̕N^"/l_/]ߗ&Vk}1pΆxj{Fzdݾ5"&'ӆڼ4l;egz)?;M_L Z~r0PP+Gz/ODg}* )hS/[0Hבb|6:ĮXx7զ׋[\V\܀LYdK턡[}#i$Dw;B=4{rN,[Y_?(?(Ro0 `CknZ fn,*:mbѦ׉ ,BA!$H eRcaiFMN8ؿ{kj^S1hQ H]m4u*mȦEHsnetMܛ@.a2z#0L#Ycp7(ض }6-nҿi.Fɺ3vݨ;"I.s1J`="X9+6Daz N1)=YNi1"Є*2 YXi\¿W,ZU jM>';8?jaDjSǣJ_XK;]wѬdtLg*u3~-soAo@{oc'-3;?v5 Τ?Sb^MkdÐbFI9ߟt |X{Kiqh_owt:lmڥkO.[Iۏ{~a7lז#*v4HiZ }Vm⟤fKpOуqWjѹ|E1N]??by\ׇ鳖 |F폫L<շ7Lu=W>Id)š=lun[Y&'$49b;]\"i h@ S&a<5!U`tW&<:ЙAij7yʣF-8I83[vt?Fva-fkguV~%:v:{PkkMk1XY8 i1Yqp[3ПGt5\4M;\YM]Q߶XIn@uJׂ|,]ՓLqOC=i)P3?&MЄAɕ5Da{i-jܹCWϛB-RovtpMhץ*sͲ-JC6iPM0TyF]Vc`T32SbluR_댶֠{A[i>oKv<=R?ɍy E;z?ıQa78!c #_; xqOhpg&N "[B4da1e5>Rnʼp@;z^eѸȄk-7€JDHKa+p0HģڑM~BG[_N .(UfMS^ .}ՋZ77k-g#u[1)ǻ!RvְO &foeʤ%LdrV*J!SUx"%bZ8 fcײV7"z3z5_gAJd6e:SM0^h@i˫Hum,@K:Zhûx%̒뼳,1`f܌(lBniNN8اc#h~ct?`G,3MK<[DQw=Kxщ(dL Y rRH,t I)mh";R5P?/XuUu CxI*dVѣB<W,"@:6V"8YBWXIVTз>TyBMws6`o*N 3>|.㾌wW#@9 -gO!}ײz]jAȔ)4c*)y%+pmhH֋ Y[&6yB&>L)*#*a!ド5#xF-9O`rctVuHNc{P[>fZuI+S~`*fN^ ʛ));JL'M@]%4[8FVQa\M~C[5] Z!c\ z\!ȇd7ևq3SJԯ"bo7opHf=?S[Ef \4CY UJX?DeR)"X3\@K_; u8@Mɺ3 l@e#0!k^,E+]@~1 _Y l6^jiO-J!tMrG7(68=<{$#T򋹊ׄZ c"scMf6GPpXEVslaGT|at ]ifv=46zȑ-l-yt~e }eL/NMvIA%9?65?acM$1Sԭəi >Cs+Kcwac{` Zu,fښ?h+^en+&ϑ+jkm:tn܌.0.Qm ^Փ~\:}2IzLb%^r?bQ}긲cswh긶8<]5o߀(roFnxI CXýwX뿙J6 u׋kA%bX7ڶ[ZoƸ̫9J˒Of+# *i=ŴWrviS[.QZl}׺0VIa>aT7TLfkE?ѱ0!{"K穀cc7>d'؟e۸sw\1r_IڤM%ZSP2nAnǤRWr:dK7(w_bnV"Ҙ-x'6=h6m):[>;Ҭ=#kO.PzBO+8P^ 萷zM?ԴԴ5@=.^75Г|:lbrk[ltKDZCڱ+2C,栗GsW)Z֣Wݖ'*N;^ɋzJC)>3Kيf,w<v_ZO聓/72Xo73έ;¬o 9 /de K١zn4_BLˁćGibسCl& !ˎlf|~dNUv_gx; 6&jx51H3I{=?.Ǚ3qT[>ί^od<>u j%OY|^رWz]ax09sg_P&9m /V( [st?um$ܳ7ެPF~&rv؛coL sE7vt TBk=Boy&N'P~vػXZ%}8ZYu-<^T{yNmyԘxR`jQRc-v+F@HAS zr6ϩ_KPby~[O=sG9eq*+򿟢?B?X 2X9˶.f=4\lwXPA)Ddz _$O;opj..u؊Ϣ?mGJBYdx,eYh'J[g:t߀OF%# "x1>G}li5|`0 6;5aVAxl[#R[T Ο[^Sۼw'H^5 rMy΂\ ȅ5ym֩+nԣl+KuQjPH|{("> b4T<+@ -*M@<\o{' @?&?NkIf"Q=8LK:sI덾&GS>sݢ=7lߚ[=PVMᷧq)Vk؁V?j~Jxs8t#uqlxvr,|-_$i+c~}NMBgsĹ1HL? s3Pǹcb⥉1tPH.ϙix¹ə繁cřxsO46ċ?O͌S&T㥙s{zrX]& P?D.>Osd 4~' >eSc&ϑq0795~ Z&mg.Y1 F~nNAEfY*H` b`RbbyِfCT5+jl@QY:YYYYYYeַjg9ng9rggཉ,It~Ĺ 8- /@X M,0,00,bؿEڥŠOSW[_#aN-^-n-r>Zg#B4=? )"ϒ&'V_ie{ah炾~n ;%$8 B672 #"Lvy:oS|쯫BӯJ΋QFt9rǸ S32=lAPWs*mrMWS TEl8Ui8̠l\Aorɒ~byI7{GfCG"vcqyXOS+;r/Yy:3?rZm.)ªf6L'6:22Ơ"2*sH0;6iQeH*s+~j _OS! C1o37Ytm9>%Q% RHE"kv6XaX`<ϓE$li7NE‘Rc[ %'<_\8)EiLHs$KFZoj/:pXyمzS<[F=`MSnSwُFpfksj v;~Q>>6GWX0Ơ g6k[dń8UBڰ]񺊠ZIYy_uߚDkߊýmccjBmOZ = PW,[ִ%f4RA36U--Zk5k?kuLW ΕbϦnd&LԦnp1C/>Ln-\Z9ˎœ,VzXwUm3. 4jm5s̠͠$TH(G>&0M w M̌EFu"ܭ02ىfؽ3K\4=jJD)3qVӿ3r#rïE!+,D_"cdatHȺ1[1fSXXNG4{u@ ֹXǓMNO۰7TD,LègyC^RkwhgjNØv]UnlZ]Qq $2_@f-4"_gmPeoAgU&P(7 CqǾ][hY .~2>avKd.KKR~m:|\yKFfFPSڵc4ok(.c2(vɽU Jރ"lU*j0&W`6@}ΌJF.uwLhujyp6UR N#IH/Dz jj3]|\b#:T_ס=:,X5)- -[dn|nq +"9vw"wp+.޼>~\-v;?:w:͌Gt\ݬ޷#Ƞs\*UpEp X?r2‡o}$ t}8'P(@h %7n߮me,E`;l?*M0nV .PݒWB+%8j":rq*>-tQHl AJ7;28 tL$r+6&W^*oYPrTPs!6X?˱gIͯX 1%D]߱}_} |/X+3 ]!4ݗnx nx_tus޽U&QY6N{w8QϕJ| Qm. ѪUS5?u ljA|vzFu<΀fʏE(|v\uYxE'(S +P 67r5.{lY\ܞAۢ޷oKiosѷݢ'onn=ոUp1 Z k Y[/HkT$1z` {0xlz> W:w;,$n՛aJqa/;{V4I u͈=0~Ɵ-3iA`)=Xl{=T~I8˭"].)~޲¨;ȦqeuHՁo_1X6~g Hh:'Ǎ\hxgң 銛f%K̈́+殳R(s7Y`tp0CsmQ[BYG#FnEN8T: %-6=Nv: ̤GRnp^n7h{MD *Ѡ2 002E>s; Oh/c _9Wl;_W:\D1kfuBΒqfzۃECED!\ߩ&lN=ENv?dre~0?g31{,Ӭi*PlTv5g/ N*ulHwuI)*F^we]/Nkmbфץ򣁫^+x|oBP0Mӧ}A41h Ock`ȭԝB{8,C_ T95a+k^ennOImQ9qw G7v~)\YNa#:L)u,]q`!㥒_@:WOp5ؐbhA mY)5uʭ7z ũN  OXr|c_btuez=FG<c\m`{`Tq[d l<+ GbÈD@P&7wCh6-\r5"UxW9` ~80"t, ׹"0bɁfꗐ^n&'wJE Pո9{"Bi*DL; <(T;$3 > Ԁ7 !H:i5a1Tiu(G LE6`|gؖ+x%OH]ȃ:pQioנ(,ȢU`X!Tw#tD;@ʹQ%#qŵ˝p.ʬæak[Q-3Oe9e$?iyQV 4oSYyrpZ KQɗE5rkhZ\2T 0q{ͫnUg`)dK{cչa!@U\SQAq g),+|)ذA ED S^!!D"d6+,]p^%%FFW,cGfkp6A43 rFe+fPIᬊᶊkJ镸:HdE8`oę2;vhHL怈rK*#-ģ/EEL- t Ʀ kR,_~%LRJ >eov%) ޝfұSp 2&~ck 5HUWWqrz;^)@\ukwwXW`Ius'~ h\%5A 꽺P@_o1h|P ukQd"j1PjLYˤQ')i$a<r<^_ 5X* \-0l0.*P*;C"-J  _(Sj! Zp?z-|P˶ZM]8/.>Y&ܘϢβ䖛B8z½fVj6Js-qpQcNQHYM>Ո0o"TsxV\ {> +hˤEV_6I|:&rEUo+,A<r?&ژH1&^C`~ d!Kg0wD5pFBYcU?(ocF,6t{eI>bL/_鐃3 yACR{\zu\~lytrC;z:2l*Z7۶TH,yбD }sV2y*x!iK,#>aA=C&f&ƽ#c>n;SX}g$9 '+U}P~AK]r'Qjz#%6=7m `-+m6Ab)-Fg5|AYH3.XrLj3$H jb6u78Jo40ܯphؗtewcv MdhBw=eWf{x.5Hd[B}U'?KMK9 @/cY9ID@%F-\Ic &jLo{ʥ5QfS['Z{P{U;%+>9VYo{?SlP%{d3\2@SL7ԍEm4q5o z.)us߆zI>#Rt9׃! ߴmxiIIef^iQakۃD̀1U䚯]qS]!:)a߮GJ#_mJ-Z_YGds5.zN+ n"8Jo#;8.e]i=ߖ}{3˿n#n$-~m UKxQZ{ߧ?!&8V3o 1N=5\=h{ڈlI5Dk![qcPx{f/9j7 E'6hg-G!"ܭ4򖰑޴qơ E8Qb'к X6mcoRږٙho{ػ -roz֣a[+z|> +fzJ~HtԛFmc @ =iwJCz#֛R_bm Yp_ҳsv5Σ6lfo#84V?c ~ޭhn!r͊ m1jfmkö%^0?܍e|{Z.^q)T. II/yFkZO:XWCA x!ۖWcV9ec֒C֛91.se/lb7owXHZpF޹gI5XGi̽-qֶ)֫?T_X=[n^z+ms/QٝR/8/6*kM :U 4|5&+x ڍz þ\u'fRVA6a%q3"^MVLG?2^h뼂^֊knɩT}МW= XxQ HNVɭk~ѧ&xc2͞,` )6j7]?c"(Y+%րhqwbEW֜+Mr7БC’5UCM_t-*\ q `Ix{M$Yuu4bD&ɫ:K?'v :@CfDW>Y]-O2"58=,hQp԰Zwol Ƽy@kAnƉ\ eRi ;KHT"xM%NcbpXce:JpH\fUi>Krb>Y&g :Ovpp^bus/Ţ(q^5 7cESk`a Q0Sw6hVVo˸m:TJJz2 77iS*U\VǸ ?5/Xxn1!bÑYËCJZkC 5> 'zklVc #ZIJJfF '`\\ѽWPZgFqy ri^LZjs*jZBE6pw:ϧK Ђ 7I3;WD^QdORȞnpm.Vqb{S'ޕMװxHhAK]@j1]ڎa7A{~;Bx65c`{~Ÿac]RLhU[ G^|[`_N{()CJ>KnaO)Rn,JЋc FF ( EW0PXP̭{Nu@ljb%@c[ r8 ó[#` <2<2?*;ʮVuNm|x8K6I۶_LM]VqK4p'yӨsmGv7nӺ7i`Gn9 -WM?rG;TEVSϽBvylxٷdww&Kr{ {#W5rC]mj*y'I}; Vq?E6::_hg@wzѻYl㗟ߨr_%D8.ih B"vxZ(@.$pj@-ty`QQ$x N`5HZeSt頩w.{nZRx-/+&j vYlM'lhbVxڽkv*[M"~Qa)P7pƼ?Z9ɬT2 .elP9 JS L`7uq\|dsGL3-k4DW}.EIu6V*D`8rڡXVz|ThittxG` (cSx%̈A£TJWΈ,)a9vLx`e( ?e H(\xdf։:|`c`-8x& B/||^gp9»Xje {b1;@/t%ޡ`3\_8$4|:dPgXPyͲv.=]pC(Nj)f2?u+b V_dvjp|Gsosck. pC~|H׆׬gr.B̯DYsBU6CT8q2ߟpBeՕN,Wȼ "MW܆ +* M C`kča6^G]Ua'$QjVM#3fGQoTrs<^T VD2. jgHlfh4^si7 ËqKu4:) z쉆ˤaBNf0T:oʠ4rId EK~5,Ht`3a2!F< ]GE As'l_I=Ii-[\d2cp٠>Z! mV!=Z S<5ڵtMpjdG3" Gh*^A%WCfj#n2(kq ~(˟$u2 "`DQ.nan<7j=Nx ּ H\F/Tp2@mMN-1VQ#Ae8Sl#(ЦѮd\Ab."(mWfx.e`]GR 27slna(<<]ºV\Te|$<'hN_nr WDD^eK8s5 /͡oI XzAC: PX)h/.sqU00/⇭]C)UP}ViXWɽz| 2SI-Cთ "_.ng\/2p&5LtY4\sr^_s`r\ Z$uP9%Z6Qɵ* tj9ە%R*{E*tS G k{l.At8j BBn:oPtPp<SJmQW*Uګm|rXxZ+J{@X}ȩ!^P~V9>j́ l◡*>oʵ=GSHK'kחWg]Kw'kZ&XH|LW<&xtE7S :% fB(o{XW5[wV)Hp6FidE 怱#hhO c6L2 H xTMԛn ;7ќ};ۂ#F&veF8O1-OR^v'8l_n{h <02„ $ =ڗe9o<<"O 6{Bh J7{J7Jp [)إ#G23A1$G˽[OВ ѵi#t(ЛPLG U8JKkϞ6S\[r]H^G}ݿQ!>P8|HOv;G4X-Zڝ $`F2_fMAS$'8d]6,ppzSP]L2앦7?׃覘geA3Lʠ,gG)c咬f Pd-z7p̤nbN"$Vpk7t-r# YZ49(V zi=yX"Ťai߰]07`1g_=fUl]8o)<|l~)|z_}&9_,9Gi^o~x{Ml~.FB.@=5(k*7j)~dV7&Do^K;sݤ~!CE&>gl#dGZTj2!a*yfuRز<2qV<<#2HQ96uR45]qk4\n!r; 4وHt  j'gYaH T>.̥SϊrwZ;1EŦP8?'07QsTb k#un֖z|M>h/TfpvPy&lRGtHJ;$貏GPSu=tO AsGnCwO3KWMەlK]hDYy# ӿ}t?tҕzwm m^7zZwGjؒB)@RȲIi(|ڑJ׶;FtkvGc =3۠ӛ=-k&>-x2^H.߆Mݪۨ y#i^5z腸kt4zVkD;D:\Xբʧ4\SJޥ~ͲwUZ?lz7?J!4lscY:A^PnһRlJӏ5~ * [+[=GfR<zMqIX蘜 ,WR TBL'?hCE =c&v* 3T7ܼffk-""/MLv"UJsxSmGZR;m~E1BG3Wzۤ֙*ySۺ`mPo ?Sy%k;љsBR~c5IRrC]^<'Qn3T瀺!+Q -`/aHCT+\s+T2/PףaOٔxɊ Z!BFBMq븎?63NK hՌdڧnKVL6ɑ#k;}n8wk6 {XLĮ0C#Z?MbwkVV>*PTe&Yt5л6Yc-F$dVRj81@adYr*V-FT-[N`̇7KՄt*:3LС,(?ybҷ"ߣj]$E T z>\ЖkRs 9|,_eMŸ].Y{1|f Vя=:ύ. q(-; I/dd*+݌ T%T;#s(2GG0)~uj `p Rs)Rk"R~ 1`?ׇ%>HWs5e9١3%\F U RAg:9LLh8q=[&0r{,Kq&_h E;~xռ[s/v:7ӷ~fbm6sbW'' aF1[gӆ$#W1BWј T^ڦ&"+2wH-KCP9<r"XNS8vWᖋ-[kW ^]à+a+fv8A'{~Ϙ26䌠Xm HL  XUxJ i:NMT6IZwt >Vp[v$4Z$1w\Lp xvya}:)aKu Q~OXwEݖY< a!Pqk FY#ʱA`Ra8 =m:NT.~:MAeˆ%0'ʼY:)Ty0B]J y6 &?LA#&׮P=lN.fO:Ɩjك'l6ċ)Y/V %E  VVONM*159XbaR_4 ZRF~eE~ U@j  Uf6 XrfE G78~l=ztOtxՃ5䇹JyH22Ŏc]+k++8`%l&Ad3! Bñou޻04U9_^l+-)Xb_VE7ԾlqSi'&aǛ9}?MN&g 9Edm>cyMm ,[|C[HU^ fxx}o Ԁ䏐W@*6<[k**FR4B~}]%~}ܯlM֊inL@ͯU O[dEwZ&^MtSNWOuNA nXAz$ʵ @'il,-=QAw#uDY`~0P+9XRpGQ+=l_I@-سe[zޒ'ҹ4, crM]%B?&=Z̺cihX]x79,Vg+>Jj0amXa{^ƊK+-"RE]U,{|*W5PzZu_+4'nK0!?;utW:Լ0cE<ßX{Mn(E70mũnsIo4HlYʳX՞]g|8uC@{)LQJ=Cҿ|H&@O!j{}8ξzr>O#"YS26u\Ps^[}V_\Yj,W++J[eR" Qu6D;2L]Z%z6U>>r߮]gjsx]h\7lglSk٭(6/H@fփ!~E Ų-l /g;QSa8By Ah]=t`t`{b9_vu!I ߖO^'r dֺu6\ߺvJ_ hݾDA|mD vBc-&mL',S3ý7V~7Գo fcdkx[-ʡ92|+1ٖ&kuLfnǕxD #X2'ˊB{E;(T?0 5#rC> &]yjGh19*E+@EUGBuK <.R:=]vM`s"3!Z =>IJM9_p3iE tni+n/#W E3HNmE~D1lT1s)\r8@1ut=I5M6Xĥ*e%ʨ_bdfK%4= Hom-4|se,Cd2ifc%r~%@n!y3sϛx6 N [pD;Q dd0pdU~֫c:gOu7!~cX'$"1hYzHu*WY:42MsH%Qw@sNڠ9CM#s_uFX_!B_ yMhN <"(^ͻU:`'켇@g̬hBR>4'DMл5 D~`/5KH|0;PJ~Ut@A?B*rlRN$_CJʑHztظvtAJtIJR,WKRH骔aK闥tCNH٦nE*nKRz=LKM='%\X2'A8 J&hVJLX 橍֕yv`T;| F^xiܥzA\riĥ[B4`Kc-_BaicW |J-MLŒ@\ytV.g $|9+b#2kZe(e  Պ?gQŹw ;QP$Bο Rv7dj+b/i LjBٜWk2L;=ZN-=)sp;sBK:~Ԝ"OA_-KSO.B/sM99 CH~*S3g=,afFRXŸFG)a+V_l lŕsUTB7F_&g4S"?L0iO*g]G"eBtJy&#*(L||5SfvX8[qZeTdq-7R)T]> w< Vr?%n(Y*Q%Ȣ5' RecERԸEvUjJ)O-ظtf}K9*x:mV7,RAfc9HAfQ xޫ8.e)Y`a8[lWB-/)glUذDL&bmݫd1&q;%e 啴b$L D@w~ysL{4)$vL4 LRe SU"'Q$|vNwd9 ]ŭLr>8W5[^!ϕtIM`+pboЭ5|##=f`y~0z8\-ώw~jflOLyY\๕'cB J&V.N$027Kc ?O~hB+įsc s+ c =cdlzy26;{vl+ kU_p\46˿g&x;aesOYrvny+ǦMM0;,k3^Ig r)shy{ם::&n _sS db9/-Ӓ (x~86Zɹ 45? )^a)>&^xCkanrv ^^`u.MN?7̥K}fjfn.,ƇgO^ٹV j3cK~($"a|OOO/2=?_]^x?ff_DbJif~vŠE>OP =71=K u`,ٹ"k5۩bqr_ D9+A}[xqvb^̘sgɹscүs0)'0Eg |OM祩KV.<"~YBi/Y'Q &<7ܥs==vib+0Y΍W.Jf&.i%3s Zs3Sɳ&" ʅK s/͌3g܈qrnn4r D;v :47\P;N؋@ [@ <ijBkŹp42qnab4@ Kso, jvl"L_il[8 ěE6b`YK330,"X^<-9O^Z<7,fVe/+{^ET,S3N<x >Y|T`)*1C:K/D>d 9xs ']ԥg9V'ϿԹs<[ ٩ ٙD[/'^M+ ,Bw9y`NPO<xh% uѼ,`H(=+:,c,/#)s1\qBO]%0Kalơ S񌡯A܅,:8/9(vB<1}!xNiX1xs\t9;3F\45sF!KNE#'0 'f刭]a$T97/^\0-<`iNV.., =&dϙ9~1Q5{(9`zvyH"N!b&&Wpсϟ,*NN_XAܮ aX ؁HYxM,L3l-HO^!(aKudbKJf켕\﷚uvCxZ)z:ax *~Ϲ-ǫ`yPI1Lz {֡)\g) 㨖n s+8SX(W2lpxʬX/,N#L ^; s+'P,.͖FLM,/%'D'qE@ ?4;k?ZS>,nVŽ,0! ; (hj̼`ܱS稸>ʏ顀 ɳiƦVpC X5Ʀ'M̃ 9 ;ZA"6DrԔ3s/r2+g' VʼnV56,x$R դ<\/NRCBXӰ^5t|lve`eCևmR 30L *YXjrf<'ue"E XУݤg,9k Kc Z[m3ː.N &+nHBIeYB#PfK8ׂE5鐙l6HSgc ^-n~6y0S?,OkRtNC 7 g?-|s c)o>] )&c>(gP-NyQm ԕ(8C H n DXPvD"KS.Be0)錝WKa/NyrY1sȡH49#{#$pl=%Qq &Ad= >pq?hE X_ %y@|XXdUϾȐWxr)Xγ$ IhST XuazeQf yoa̿4R`Fӭu9`ogeK¦lդmT Φ_V"*U[T< l`-r gnw,F gqg;f` e*¸"B,-arsAl !]D`T+t53s|f\}x`@h@ċ쁰-,.g _ů bm3`b8?Ī $0PS6Atb!N&,,(]s<}^ƀ+dAݑ@Pw( .J1S>_;pM-ϱ#ũ1E}XF<#{qڴC10/va>!tNZ('!Ъ3<7B(?2 P싉*`l齁aHbIB)>쌑'|l| 1@zPX*_ #b/cq0)feа P" I 2r٬=EU ~5We]&hPM|V^XGE@&%,ʚCVHi*v҄C^QxE*:&Tp5QuWaX?逜|e>Rɝ[x7ѾG5P;P\iU_*SRsj 1G# (MI_ {#]>Z2#X^%2Q<|zM4~]u*m2qC5(]0ȿ1촘nb2t(.~,60p9/")glfo|С$]z&B/oڱ'G= ^=$͐H=QӃwH |p$H*JLWs5Fۏ$7Tߝj+1¦e9N'`3XNfce+ Lxʥ>9h$Q!PN_XLwZR B2Ω=U]OfUC{k> Z3gL$zA<$6lv#k˃%୒ YP(PhƗ|!;. 2Pj6PM:_ԩ!ۛC,~35i괆Ĉ;$e>w_,y|D%wfɝX^sQ,Ɏ"(a ;.#9*&|3t-dpT31j18Թy_(KރsBp'p;+>=ɀ;1pOpe=1pbcǀ{c޷=̀{IŖS`{cĽͱo]VuECKrѪFDc9|Xl0 Oca<0>)`,u;{Xns߻s׏ZPlk9Wr:vƧkcN~7Ǐ _}c 2{swb91T0sźz@'?d2p[ v.6? iΛYb5Qp:[2yF<=IHv/yb~6t IY {N8(7'vF'PtE"4͎fpfQ2 ٥Wew^~  IA]8EwF輫A5)͝B*&|?e-wwٓZ}=ޞCEfؙҫv>wt.iwiwk2fz"QxK_4xlvL.98X>S?ٺh n[~'b 5^5vYB_<#ڂd>NJ3n۳7U1;,zꗭL/6P|?zy=rߊ;nT)X} W` aؖfjOJ̊76]m8Ё׆N-1}2=M. gS3VnD5M[}{Lɤl?TnBu_r÷i{^j -~-VOkZ~FˏkZ^k)-IH{J ^9Wx3d~ޠVf^\; jN(TnV!RdP3`_I/iV8}M.KsٶurY<ŵ2]7ŵ2"&;?~c}2afr w+Rl̰,5PcH;^B%[0{z8A:ЏXfFO w]y0sʴ{Q)r[*섨܅Nw؉ k|duu#Gt"x7t"aG3cLUz6f/ ]ų1XXV 낦;?śeLf-۷vX=80&a)7,<,yJݾQv-}eOD7zDE*ӂL&YHk kyĶ$Ś? ѝ stO<2MԩN},Uo;ِ?rZ 9 [4p,]>o. 877u8ϘpK`F*'yS4tV'މT&.RVN3uu_76=iA<|ŽrrT.HC\Z_Ɓ\h\W"tݺDJ^e1hHA.v D9ĭ e\EEkEwK:J: ({qVSun\-ek-zQdZ[J<SdzV%+Z+0ɡ$ tۀhW> ۩g۝58_f.Äf3es.u̓fPiܭu$ݚ8 B}NxJHQ;l.B1,՚La-v{k m`^E\=ÊVp|nlB ~e 1-?_?[޼rG&e_,68"LTy yٸ"-'C~QW;wUw'5ӫ]T27cnfxæ}_Q -^?j +WXIx+v-ʔ8rA/`2(]mmlju-O-6p 5^=ho KuN o&g V~s-~xxhLLP LmDZq]}b_xSk&~rX7kk>  /|ˏ!Pfx0`#Xƕv} qK¨-X7pS޷'?> 8Ɂ~kx_){ 1Pۤ݁sNp}uJqs9\I_Y=_ʯ~K0-1>o_χ6%/h}䆁>7 U kُ |#~5qʰ`p+&J8k^[/n}@k37DחO/}w|g?W^MOQ`~iൟ{_9Vꬶ|7O|SW|Ձ^O}7O}o?Է~ ? ;nZ O|+Si5\vi1_Sw}2˵˟iٌtq3P[h9/|7=/;@o8P}L~kW~k!M2*j"" W~Ʌ||7'a%3z!| 97} &‰<ƨ3ڪJbۯ b_ s%:zA (1\ӫ5 V1s|[Պ~C:_~>06&XѢzOS?ȟ|f%% >)~N??]plex)_@J.):aͯ \sj} a,+/W |ǿuY@]B@(jVkO}7Ђ~ӟ+@Њ v?M8OB|2-daﯕFJh<H.U_!_iQ܏S@?`P2]>l?O}/O&Qj԰J?BS/c-!n,g,c_o" # t3OC [I$6q3=ݓfJgʜ׳n>!j=P-lBBAˁe4oEW>3Z ,$i F~'R4/+ Z-k7>S}}@(Jh$ M'RCCyU킐UEOi*vV (F;\NUTm=MTM]rU!*E)5U6彥lD\IN3g2u_aL2-)/ο#*_d`C:ۮ]5B_YFJ(bç&8w"ZBA^j|o6o(N__(}-z%3ZC_\Y'טP~@ DߤM7]m~4H 6-[h &0QN_o/pH#s+~_K`IJ[q$N>%} 4pw9v7>;c;K|~blqb;3=Y"V"0=鮮o_ 0@2uSZ""0 |hh" .~a?22Z^C&lM`ؕ%lDvK{îhE]~ V'9oMT#t78%̬+o9z5(ȾJW342HN$rt9([XQnB+^xn$3ۅʁǫ32d捩<&^pa@j:.M0쁖v,aB)Kp,qRͩS{t`}~MK]/}>2,o#|wk <}nǿ+`^CP!,xyw"XlX=;a0Ǝ M=|9== '< +'Z8Vz1;2Ki\\X!̎0fq*ꠑ۔{w5`1_x k9JYi]ea'Rm3`;rsp%Cgqv,ƈ0ă(s}aͩ?\m`c:\Q4σn_+dxJr0ޚԶ}M Cd~ffv>Anj5M&^;] BK[U*J%tTa"ЦKNBmf\̧qFbn5cӕQf2Wc % o2;2Rb:4YʅJb*ed4h;Wvx6+e5-Q_B6SZ/T#.Qk3{!ڙ}w0hUI*eE4_a=DXI61; _Yv745ա& <Ī/i~aUgVgyτM)Fv5/ ᮓq:@r|;UFu`TǬ{_'WH寺M=TCa&gy{Ln_RQz2=l>y}IpUFx=[y:niX~ a2^euNa7[(-ZĔ1Hjl- k[-cpzy6voZUkY൴[3<' ٛ|=Z%J:n6kz|r)JJ-A0k=>։ܠ3FCi_qE rZ+Wi(Ǎ,CUQ2VtƕY ^՗)&{a;rьYpK[*G(s)o_T>sذ4F+e2W9܇/u-.@pM+_aadAȠa\`v9]*mnGtF 2$#[WL`' E'aJV[);%~T6 wYļLw8E;ѹE o `/NT35ӶhdufWjNlӬ@D삼۝7ϰtʦĒ h֋ߡkUNJhcK;i_=^];^yk(T8L3$TAbm -iaJ0LJ Ѭ۰C@8|ȳy}/_©FîBCLdw:6YԤܔ.ióuH͌R~SUjB1ߦk1wniZPe&A$\1!U,!>|ZݦH##hdec_~~]d&í%Vy GV+8}*آ!@I"Ж?45H'iGڂX.c d 57ߓS'\%`~$rj _⻙lw;{5lFfy% :LQ t '9 2jru!PKRncԐYWˣCl #} @J<^:I,_@;@ QΚ|, bE1)!Hv-bִDLYU':'-b?fp?J>erLw5Fju~ M]G.HR>TAjE ׾ʹiV""i*B-h~i4rIO6xm4FB#5FHV5DBb FNLXrty3r%(ƒTϖ%kNG+{&7kU-U kN+IWקHZKV8FOeNqNxU%[/$5Fc26bY>ZmDڀ DUڀWk biKm^ -MRZizjN[j Su>b¬6 r^q9X2.]b(R5Hot#\+l,|Ge#WÑH?ȳ!/#+K?ukRZ%-2V#yٱldՕ>T jrAJ` )$v j|,d^M.іFNҡ 8IR8$y4NHK iTQL_ iڎ+ʯ՚}(}à d&Jh=\`5@X,HkLDZ**J TVU[M%Aw$72z(bO(6W`8V*KV۴$]TqDLʂ ԍix\RjeU4v"}2'$k/rӺ,Slf6D&+^!ݾKQo[߫@T{c4ޥƂR"R{>R$3siÐCAzzc5ܹK"S_{,JY'>`mo.'S]Yts'tI\Gr`z$[JGv֌0PBǙm?:=[Q .|r@JO P˩;tuzʻ@^=Ќߌw=E+K̘e7D[ S7X%\J!7rR1+p)#K-I*BD^UE>\.Pƙ'9m,iFDyr:ƉMZb̶3 L2ƾkU#.$v,$xf9t۾+m\U l r ޮylS " `w}ytU1\̖GW0ͻdbfjz,"궤xq7Ql;0\""hYL(0PTz"Ϗ$>M*KlCY+:^cGt{r^=S+M]e \QG^c#0Âvأxo8]H2eh5/SY3.#\m$˨_̨ըV cխ.)}7 ӶPuF{uSG] D~:ZQw/$fcIB[U=0nX`~K˗ 4.=|vTh3 r-MkM ̛{aќ/,coy*\?Bne-d4uzYt@#+$NFSo|lT j.K!EldSw!$nQ,o$l*2Oe4]-+JwKʕaEɘ)N7T3K7\x` ޓ3ՙW[g4tsosM)2cb>mFVkN-U*y9宅0Ŧ,H\ l':Gd仜BLaJ6 (o-$F6&P3dQP{Q#Jpa7Tߓ[;:f7 [_pOG(NwF×SXc9%T#|#_dxV>G#ycF&byEϞ"WDHS~&Vz,'+)?{4ʓ0/ uЯL%sbJuWb,uoT~cV+tH7RtEjŧ\r"Q;1hrye'BU CszBEQ28 0V) ~@%*sɟ} 9kG<\5#נHT {.6iR^3}EO!g YFq;" F@#2GłQgRul,+>b] r0i *: eeIjZt7Y><#F ^Cz6Uǎ&w ,Q 5Kó D=/`aF\` -ۂ۱ d[R+`B\7AG,a- Eh«!b踝Ͷ'A]|dռ,ږ, J ky:=*k)^ oswĝI"pux-2QpjWU S@?y:5%T:%{h9!gVz<VJOZ@$AҀ?0Avb T ObL6]@!2G\ڮC 8lm<'0i8Z(γ :+z "UAz96z+AOMx{ -'-V)gβhgQac$VAwb_O+˳`*O~,V. z4fgWLĥ@ G-"eb``._rͬRPsȧ1v1c+ wO㉯r+"|,&k\a,q߹ FlY52"t~hNz EjE vR6"ѕzw):BdS MHƾݡ!)ƎeMUj._Efʉ_^E/[+RUC{h^ Y/<~ॎ)Ir!*3K#B߁jZ Մ3(-o* +G_XP$mVy]bX1PT׆o;^3ZYSQ*XtX =j8nO?}fۭW;{/6|G]P5x /9FNM[U@ANq.E*oP$'"2R"`uG^TI}N:卒 1>1F~X+-C c<\x<{?JVa9M:jI6$b`K9Nԉ)R(_xӕ(1unf)X;O6c]).d6ow2P݁ѕoMW䌘_I+'A$}T80ߴK%/C}fba! ==Hjy7#0P+~ 5ceͳ8S+뭾C |Pk_(8u`WHOB=!4s?G8mdk6"-C7 "!QS zD^m$"Dz]%\Zl 77Ju1-ۖWoވnNy(JMR:UMRE,M+Us3WWx/}jqY|ay~ɋt@*3+t*uP^yP+纗7S&-L8VHΤ䤼rk`_2AMRNO*vc]40ݣkDh%)/MHfkmqKi/~@=lģ-C[1B9@(ij.Gvm?-fD"gJW1`ŗ4I#Ԡ_) !hy*Yhyr#B#1TgeS1k4iI,q ͳ95&֑Gf1hg_l;J2UEܝpm/34'u8쯏$3NP7|*S\>)*wvQwj&F:XY:l܃qDM8 _Vrb`3"-Nm^I#\iк]I[syVmUcސX Ɠ3h蕵4JYo/3gj?433Bqx3ۇ̌~̒\YDIU(a0~mBr ץ xư_;DA9oy]Fl50 ТC0c)Rf Ŕ@\)\#BXi!ڴWPKM`dW%[+ ^.ۉkQ56֝) PEpԱiBeSIA,1Hq{~ǩIв{X:DDkzݥE H ʮohx \^j]C&,@' óZfG vޭW{xBk6vwt wȍcU[W >]y+}zFla]gu?FA>{qkʉxoZO ݯ 1=mG %aƉ:U+[IDžuK⠐Iq'b8raua&{+(,;4ٜK<<˓Y92u[Ts~%ptM,n ,_w3\Ҩ ?r9 grRi߳3{CU",S?UnszābJcI=lpCԊ:`'$b`!d+]SdȖԡ`pLIU*9znw3?z8 m[xǫgmR±ǹ&lNC"?KWtbfz(e`V0Pi9u&Z >粍`^Gyn C&=Nj֪Fǁu 7ߐIp\ gے&FK 3-pBp0\e\RN*W,JG`) yIyQ eYݏO%%>ynM* T~T~oź%+eZo""*[9a3su #ڮD;4')DY? 7΃U|:UHn vCT e`$ xKOՐMx&خ%A Az( sCDc[q-In!2&ѮdQTʦsIưu9r|ccg2DU.zɓj/VC^MgUcI\{p W*ORXIܶTӃ &mE*ZCtR2et B'Nmm>_U;$%ܔ2C^+z^Hdw \T*IȜG":en vpv>pR#![J[JY(rx`(/+e&h5+IZk Q`N\(<^(l K #}@9/Fc!%M<ܡ+rqhdST o ɚV5zqi ~PE iK u܇L(4""7ޜ z<]usbҚX'(JM@ BߥZIό? ,ZFl-ؚ<;48,l^.H9 ӭj,4]fF֭ekwj>E,m+A7 2#2:|㌊ (T(Edd-0. B#qm3/Nì w4kx3"Acך]$j3 oJ`" Jhpfvk!ca !=ONFZ(8Uwvx\GrE9"S݉]cbn?C0iLFڻ!ܢQԵ[ )x CtzvN6Lwi4quqHfJ)0c ^mZU9. 12۔'_xdhVMHF zm+&O)8$S[cz<Npxea[1u̷z=R>t5 wgf}!ZYMzUi_"r !ݙ1@yqѹ;~2w4H-7*z~mLv>A^{cJ{Β`gZfOcJua]W{6D=l˶0Qve|gf;@$ !uEU*Jj3\C`9ʖR%T Y%5YlOʨ:i쯵[zÂ"͎"!oN/>ꩌ9ݢqt&;9O(Zs^65Q ZKWz/g g]`,\.2P4wjp( vHH 9^j %_^y"*Gϟ"R/HJٰ wTT12J@ Q&E&CR߾E!K1`u6SW{U jhcu;3 ԝ >to#3䠵?/={G*՟sªTWJ&.:wS$HS0/4R1VN.DW{Q*MUNƵc$X`U{-LJaV#68Fu~x4 | 嗾FqtZFkr[r1แ3^֑QE|"8-W TddNlW<"HHoH,GZ4 o YFJMKijk#y,rC1=xAʲ.V6pS5C82 (G4MgR%!DϭZ+;IL@en<9ϣ&fRC8Ywb\%b $])ۤ';34)dUPaMmǜT #r߮Qs=گ&q Uk}ŧ{=&ݟ0XINS_-񾈻bK3T*G̾ϱiGm%q2_t/=3O;w)6v٠~eiD5)H8`3.{"Pz#+>jZ ljͅT<'P|5ߌs}}Ա.KAnPu@qEb&rW8nl@wNA |/B/^ڮdZCVs;m`wBVḨ`>7,]}x1}o0>jv`hX-w mru$(DTkw.]_@ m$ *IUu׃6OΪF>-DmYZr%|fwУ~ Mz F@zl7_B˖.Dpz͛vWDUO)@9A[V ~xk8Dj [\@ ݁~?5"1}PwD!a~ѣQnS(~<w& GEbPLӽ?-s}~4NPJ|q1KFKv9>%F\yݻE*ti4_1%¾\u&S@ѲSl‚YVGZ6rPMHRT:e Q )CNjf IC6gX-aL1(I\&JM*U̞k^]H6kRl" `d _KR8g;xqT4_Z\l6w2T^oZu+%T)ȹR /eD)3FBvmY?w$xsM~\{3SG"hoa,٥#h ~C)Xy!պ%ȶD GcbhBGk}Z ĮOu(_ HTY2]/H64v۾yZ9-a~Cm,F-Эu@*^Vylt˄3t?u 9 Gg9vAe;mldL]'.mX[.oXݾoJHO.)+ps ^ov WԵp[Ӱ)ãGfcߗ^}nJ~3Mw|b3@Fv~V|wġq%V[e7[W?^7H=`*Q?ˎ]YST:Dh^rcSu崰BxUW/wh$ fBUOyTT!/"I4ԣG9O׈glPKYۓǶ1fQi]-GKeb4ʧ߈(In5?5>FJ,6?gl~ew0},co˿dZZ7^)ئ~g+W3mڊs,YSc'⣑Ճa~ߨSLՂ Y",((*Fh@#o2C͂,DzR:%]B,wy0Y?</u[ -̝y=5 8H<^%AϪ,Atn},_mg`տs_`nh󆆇\!GqUsӁODQI$Ll6k\{;I3x9#BJv8Ev&EMJ'0Q7D6G1h8.G@>x~n5A@Ϲ4̇hU]=b‘YCq|:EHa}ϸ_/z>,{Ytw/{9SDOy=yEYٳitgO'#Qt;zDOw/=Μ =~pt= 5Wj]6MspՐ>q|{VR]@aVInM[q=3f^\Y1Ї 2iU,"dCwˤJ3(P\/.ӏTX-H #|e$ˤձ3L*boI^ޒy>KH]™Nxig=Ϣ=gs{酧wy?bק|6S,^%Ǝ%)_GNJ8Ww.UPk+ /([P^kVzEf%e ^Gzk(b//+Sb}*uwxX<VVY(9jNZ=0 Y45:I`3B)>80u)=}۱w㘡}Q7ehjx-i*$͚ߛnbUf u%Zx(uitƇ%`d3Cb<|`a P1e:N1)DBY=kẄʼ%/Y5g<ד@O /N|r-skYZ>%ae-5gi\OrE<O9H/Eu6*1/썈x"_h6#n?*(-:˅vÌ`^ * ^(p(Vpu57i$}]Bk^eqbKpl y[cQN'yRN29Is?E^Bq࿥|E (?,AP'+'xe !LZ2Z&v$'3(OJy&bI:JTE҇{"w FtTƤɬr\]s<-7bQE9Eā2Q4-F钶zVb:4~NxR떚*LyrE kȩb,C`EcfYn ڐL Yq#ud0n"`)Doo.2-(+&q0AZhGτyr\J:+c#/R>U.5CpuيŨ3G8f;}2ZvL'!H VU餌 8y_2*sՕQ"pdsc_jV$ {ѹ!hJx$/ʝ~)%ڑ?`R/cxRGE5A0Eu<ۿZ_y*[3tL ߺC頻?MxAfXPbxl u Yeq{,a(I-Wێ-vdxPOt}XnLM7E&vMZ1 ́2gd913Z8|'.}dx^J L{w7DjT5NjߵzM-ʎ-AvȈ 0ZiwjXWywNN;V{TL.HÚ@  9n %j/vR^8eixW^&W,ne7d͎SvIC%_8Jvi.WI*h)Bȇa<RsBk٘C82auM> QuWosĮ+5 65#9K3Y*sH{IpYUˣ.IH'|[>Gf0y.tӧȢN72TMLEx# @\v\‚4vuSh-#Ѡ-j&ԭԶ^,‚Z2nJZICWHE tdM Pbx2>%(i-RK' gA~RIϤadG43f. m 8UiC>xAlYD LD(5I>Ap ?-_U\SbtMB|o[Qav'|Zܕ]rWueiq dqDx9<_Y{dJi9&$@9RJ XJ590čI🔧OW1 Ysp9Nkj"?H,Urm~Gb-_NQCggɬj\ͽQ$1|_G՜Β/D YGhF&CT#٭MNI`(X$^AjeE $ :\OG ǫGR`UdDG[,bVw0[h2!Mth ۓ~r*9/kmmQ*G%C%Rܿ+=ya%E3*+19ɏ^ tا(5IbaLUf8"Ҩ+vHSֹˉ+ĹQ&K5 htgZ?43B ,u.3GmK 99Q4F8=o}TbDrmpgѱZ!n$F_\ZIk4n o@HTMScߑmۤT*eVi% c_HE{I\T^H&ՄE}*F]36(N (-!PyntFE8Rclv Ġ+0%/5::2hXxܺ`dcgΑ/vx(C=%}RoO:]gNr.YCxltmcՃ0 W3,B+yÒAДz^U~r'\\3pyMϓwny6TԿtEɓ'OeLd:(7b٨qc77pd|$؛>a'(, _YPOy,x k꒿3`ⰕzZM'+YቌJ*|'?rʢS Pkm&tU:qP$cf]`V؆-+QUvǢ?醩,CyeULScAɥl\q+!sQxK0P7?3ˆ"mrõV`sq9ѽ] o jD N5y.jp vxY>X|/ٲ h^sݖmuPm+}|ɄZng Q3: ؠReWjRW)4?y,J'8ջZA !썺 eUWb(6YXd'hTX*N,}q+϶ N 5cyV J*&x{XKj0cxoFYszKUǂ>q"*BoX|2>YVPg@Zi>4lo?]mxmUn@͆Q'c`>~ `0]}ӃDc+9x_к"P60^ut'R# c(Nq#%:|Ba>;izUM̷ϰѫДki =8t'8ߦyrǛ)y"K%!9JGUsK (  qdrnUYREMa,'3J?Yd̺Nejn?,!0&O~P5 xѥ1A-\Y dl4T\-ҩ ʘ!Q_h3=5܈"fJ )߇C6M`f)ڃ2-^1/URkK9)ETB=]%X J9X|k.W)zZr&2X&)lgl= [{t𖩭ɡCooQ- ~fm*ɱ|r);“VВ<ǔ}\)`GﺫF4q)zE7TODNZ1R57՞\hn\FzӃ.@Bjf,!s\etInw>+ڽQP)2瑹eȤ9t02?#-wͩ5 :* ˺Ca<&ZWpKk K$V 6?͸*KDl#a$Фfc"<ٽ׳KTg\采9EMe#݁jqwjPzNFPP)kġH@A[Y0'LJFl}ʔ̴9&LfEZx|T^~x9Ro0| >Ef*v{Ab1RWƫʣeKfr&Az_"tIK/xb\= o.n9n̶e[CyPi="HH$;`43zBh(5ʛ6ao'>Hq`+X;1I1ιNjXTNó57w?_z陧K/T}:Gkv*&gOR-Nxͻۆ׬4@K &7JLߝjLAKnٳh[oR9j٦>/ YY+D4VQ-REfV >!+oD.%I_oe 9^Ҟ%aq-1 tpZRZ-@N! !JYT}{QbQ@ũ@s0ax(bXY Z-/N(h6x# :(H<8YU3#嗯w)`3br:Ϸ7 U‡|}'UQ{EDoo~L!hAߣ:ƙLg^V!(`6w67>֍U#֞t]ID~jSyaV_۫}&rd$54&ǯ7+;3X; h"Sqn60`qen YDZJ㢴 |ہ+@0$_{M_xv >ler27c G-jIʣWY\`L;YЯj*U61& ʁQu&tctX7pI3,fMI7E ,-~U/?;]摌'KxHw;=V⻝mRbh>I:VH4\U3ch|vѬVA,i]RGpb4V&QYM,+[·Dn86$[TMJJ_r WHnŴ0(yIyBY;-%(#U02r܉4Sid H|F~^ r=ڬ L>xsj|Vu-K/On(stdI _xi|O'i:ji%K$ 2XdKoyPUoTgeTqqfgEN'(4AZ#eM^9L5+5Щ y.Qj89*'.?r}A,<UW*b+Kw}JSNFDlPZZ6,(|.1kdr "\&It4\B͟l6kn@MRm6.E @H |SBh`5 vzqnvR@a–`_qj}g@0l[H܁Rb{&|*H_!aC 6JҊHx%N>WN;T*ΒO+fsO87@$[^.>A^4|~lnHDRp$#e=#F&%Q7IxOp̞3;t>{I;MЫy%?V=(qsR)X,mjn98RZ_Los_>xuq\&KMY~74FhhIK2qT A0פpjۇ)@léa3.]ۧHJmuԪt ;sA '0DRQ~O5?*L ׵. :+&^rN.۸O"/bAWti9#OJ4Q8P+,Ž$mL؜IY4p2k_g[ ]qn::nQ%tNE2r4KX.vel(tw<"qr02?\i}"/( Y=窎4novf7=OZU;C2.铅\u*YNkQ%9Y0kn/Jr=З!YNEHmêN:BG"bùDy*}9ϞzNI̤yz FARbkl[@PTP)/( ,Y +M.'ͼW}ւҰ_uæUlhxmq@0[^>>OD׷zӲ7Kn|przgV`Å>N,l+y$.Hym[fM2}hL!ʿ31qC-#Vm;?Ŀ3W"2KZy40nPopQZ3Ac#X2g+w]0}m?ܬq@XIuQճED'evnI7na+w@qp0\Ļ64&G5]c|81gձrqλw0yp I ׵ # yL|zrwpwpw?kV Y^1[-2YJ2 _ALN/F  %|3ϗF kv7;8w?t('eU0IN Ba]V^XZCؖdʄM7gظlXSiBX(*F%0Q0g̞i,F|'r_'P-X Dᢏq82V^"T!G콒oi^#ZZ ; %B_m5϶.ۈk%'٨akk,dݲ{pE6>+*PUXĴZhL!g|LHE{CM`Iuk:>"փes*Vtuhhm31$~LPt4u=dc&~2ln1P ڃ2%:L$n|_ӎ[eX\ROH s҉F#]H6j*33 u퇳jVi Rl+4ٯǢiGz_)׸(clnWr0?]/ WIJt7u@6w:,dʛ4z|TXJH<__U=L=hn u(* 4c> |_"w\d=H8A;*C ;4dS 8$I |覲`z :ql/ <` q#n.T3k۲-p7y}[tS1ʒ5Ӹܟ CaJ[ʢ2i+q4j`/RToet8qR7pN7)8@wl/ 7SaZ+2 s`w(N4q(-35) 5<A ø͊Y6x%tߙfr6ŸԟO/ӗN-oOxIKiq}8wf[wj\ S_4/زjvGger&veAai ;GkhQBNϱ{)şGP%apmML`?Z8NvRMٝAw|0q8u%N5홪ScTGrKTAcX7iQ:1(c,?$^J寖M*T>+J*'Ry^*T~T>#}T=!RkMu[DW Zͱj'9*C*00N89#s|zv&edHkMQVdP+6[y h-oMGhGV!6pmrUGnBedyO4А9\5gz8n0yDή|dv EGT Q|}/ B| x y!9eF)*)4m~//m6$G<)ʱ/n.7;uFD•Z1R cݫ,G9*#\uLu j|a-VDl0 9^i@])"A3:.0T+BVD0p4n6H| m.wB˘N7R>7RFny:iќp+We>]]ouDrԣ-1r=nI%j Ի8.]d+UejQA;iDY\zKܔ=Xs{.KLg9@4.ADAF:}Nz!1_jkOy@d,|{2u>%.ʺ xxۓ0їmq@uoo˺?sNj4rΓwd>*wRgU1#2.5ײ~k[OFʈ2qNay JZ}b}3y,O5z{C;Ц+J~%c33Tz8#-v2YAlKDAzN ۪id 4>ŸdnG؟_qOJO&G3u|TacU,ScHU[5 }y}yhmkl ӸEsvyxw&^fOԦA^Ѯrs[YVO˟]{X>dIV==O}t4m}zaKf`-Q/e9EoʜGnχQ%K7S?O ˮ}̬t`Q'{ԏD' 04J21+Z}^7w#a wҷ"'*kz| APgq&rkнI i^ ѭ .h vchO- BrGmUh"%?}9~CUnnU$V4' YrJe3sen+_˓BsL{d{Hӥп_~ /u?hZьLD/+*Jo.;-E^v=r|ێܸ GyE~ }+cnT !ztbu1V-ioX ZհP}ʔ)Zث5=! ԕ0K0-Y*?hu$X=ӓ5[7T󀷙b6D )O1T9G@Q>u.x:oo"T\6Ji2[RM6ٲ8l20kbܜ P Zq0Nf@._Hbڕz2\JCu?]Q~i;k"ޮ|} VdZJєe=a5֬a;+<"GdKWHWk?KR ǥjz {r5㦫 a 0ae E!xk2;>rob7#bI׭Ժ(U48[X4Uo}I߄OHjiy OF IM7M%8M-UҊC3^LλćY M+Mvifd$>8Bog, 9i WޯG82j \V/7qwHUG8R7085J KT_9+[oS}À0)s!!Qaley5ʉC.Day#hJ4zEh[\~l{i?:F·*=tWѱJmi$| qɵfrq',eO-cZv?Pt㧪93FC?ďQI1D:$zx*;ˆHHel6LR5B7Ʋ,=pf| UWTJW%Ao3Qg. Wyk_^[6RhkNZf&]*n @D:؄Nc1w͝bolۤw+k8?Fj&Qq-5{+%*VAsCiY*vn_FfGǁG=Q+ffiU^yt㰖n;*zV&F嶍2I}J*wm&i#jӁm*2GD-0Qr.4$w }` Zڢ'y'%5٪bACɂUW^~̘'(ߡLYUͲv ,SUI9L9|r*8ّa MqZ\ۯ[xwr:vOXPtlMǟ;U_{}@΀+I*TiWz:HO%(1qѦ?y>X"*bkg3d?Ϻ21t?eZ/:PEǽ+.IqyC&P" ]Hx0G^w5k}fJ:GEH<9O{ ԑe_cVtw;7Dİ: d5eـ f#]8>Kg=F-j C8F~qFwӐ-%;,UqPӷK/>uvtyn^Ĩ3gг~u ztc_xĖ2T2ܷ=%5Yu~4a8^'Myk^m?;`pG0jnvrș5x|ß'P@G]m!E0WY TN:x<9x39♷yxg_:9'A:w_|Ϝ{;pg˜K;Ylsd us9Oz$gw[Xw:~Ys,/Zkk>fUIgE^;Ǔ{ϟygϼ̹' Y3ԛNKs-BNa&ƫ֊z3ؽv@D]N4jBC%NSÃ.cM:v :J I.e ]?uڶλFDL}:4] +Ș 63E Ö^nGbE}|{/=1͆z&WT_:~dh,=lUTʮOHzqlH$ԩCԇN[~-tA^i“v豌3z?d=ˆ}'EBZ[.6{+;{ǎP}c$5 B3CL6šne;P$DX w eC9N V;3{X9S請8ޏb.lyc{qۯI+JC -x{0S(7a 9i(QK*)tuT=CȲBdߟBF:붮&@<̲7NqO;{4dͩ`\zdeGfH %D͐ r 7bGnM6T/mkqOӬ?x̲-׹zӥWFlWN\E},2>,ʅju6$B6\{-`bM e+qC} ♗keɐkj8LkO;GڕF6Zb`1ܫ؈P[7gq@; 7A6Ec\Ӝc/_ٖ0P= 2LbMchѵ#{w;:/1͒_5+!!/V2}YbAYC\;,jz?X-IDg|zi`9- XT+qMu7 9Q7W t ̬m >e 3rl>;|-rYHi^4pؽQ,+9yN"IȌ_D3ƉJVգPG|.*\B5l/o>KB 2,3i,gO9 3nnN2ix 7;G3,yQ2K+?҉{W/T[Ro2(/TQ/*pPY_++9}e95&jR4T9jKfuoьɏC9uxKS7zel0ŮB@x=1DOdkW:vprͩ -2as쬈-mRFݫ#5\K5mYX ߲WHR&;{a\^g=&M%ib^J>h.ZnIW.lŇI$e W7"[`h XosgqXWWOFGF"q%_qwJr9p' 䛢0bvСިM7K_t@Fg=d 2<9̀r'd%^#.3GߴWO'lfܻ-0 `²rO7OaJC GRJoaUQ`R| xB̝O3.ZcښRUI_5c Jy:a.$ )$qH/,X|XEbHx86w2B @G ̊?L0W.(p$5T޾WR[ZoG(77MCZТ,͊YN9'!?s٠aY2KJ_xK X' &Я%-f"h-RQp!,dby,w,bp8Wʴ9a2,NLi9\wi4W6( (7:w[ [ ʅ٘_*TAyl&G J [·MMy"z˗7& Խ&N2O0`RI&*\uky桥]H))~~kot(aGᱬiV6fil_5Q5_H$fG9b##C0X ]ϵ?}u{0OJqߏ>"]W)ijw d3<(L.N Suk8ܤlCӔ!omUe9j:O7#([{'{"%:z߰ ``jŲc\aCW^/R2eMN^4.W5&"A1 MxkDIMy41i$]YM-=$sF?dt 'y>$Eus\w‰vy> guuJ 9vGh횋ܖYw‰^8⾏'}|J݉9OZuٚuGnt/ӕ+Ӂ;~3G1ΔN׷pt~UKA-5%mqCs .,i-SN8]z><]ڟ*QNS' O/omg3uNݮٍNI~`H"'>|H˔cO) 1}J1F~q[ ?L 0$:kҡGR)= o9ˈ a$ph}uzj&'-0=QH-- ԥYs!ύ$O.*=^vL$-#NIRKKR0 ʍ t"y#GL'r# e]ZKH,-Ǎ.E]+7447~Vu<~v 8ѥ-xGo[%0\xֺ>B8yp!:>SDmR6)Nm۝f׎?ҟJ:ZϪ[qą^aW+O^v03y/#SfeĎrr/?mfd\%/wΆXTgZ-f/ٱ£ß-*. m7wh8yFCQ~GA#]>^DWkTTc l>Cc)X)K-tZNG1{Hs/++*6+|0+0TLuDZZ۸:pkR2c8஀~׭jT8J?dH"MXOM~tQs@_„s2W܀7}JɄqΊ םyq);1qOY]PK|ep;_x [ק &$.eT7!idcvEOLԡ`o%U0@mߪ@a o{Fv? 6bF[Ef~^ qAou"? !~a vqAEY_*Ik\@}nSԗ0|5j\}n+ҿK@ 04.RxC%m|_5<|-/t[L>dɸƎo̵tN1\wkCsq?I@}F4;P@r!;b9VhnZ4ƥ`L^Py0lҬ.*VYj8kNoZ2ÑXDxđ6*}D'!}mH⎒(/Ĺe>3E9=+2DMm?Yz6$eP*-f.\,UZmY0&$w ?ągڞݩOdԵCj:H/Sbe(ʴfkvv͙e4IncY*dMstԅa'ޤ[HхoRvC|r";R[MGm5&=[Uѓנ#5Ŧznw`#WSavSiK3ZXGG T1Ի$pc w9|t׌??7=Ivo`lMb Nm Qk?)r3c\9X&hGֿa,)[1o y{Xn6E*!Uj&?2E1aênh̼f Y)*+U׳vDȔث=O鉵 j :os<:zecXı(˵qnlhF5}2@ =gm'XHֽ xmfY&?a>vi*V/>hAHS}*!#Oѻs3sj__ɪ&O ;F#ahª&ɦ#"Lژ`̓ uHr^##$}^4͊e@' cV!@˞-xAoN-k O#Վy&\PjVf_v?_B~2*~AiL>jm.,sTNN|S p'ݼ,4/WN)~Z Ld4/06𸄿 CaKQ܅ke|B]KIN3j:>cuC#Ըu!GȮnl`ml/4VaXmB?.ޫD8?|b;񻹗"--TDQ—4)IZ 7;*vœ(z"C:,SR> t+> iX Ǫ W c%YiXaK PA{=ʌ֬ĺdfY/|I8jq&ƅWnLKNSaGj-؟{xt~^nөY˦P8tu 3x|֦Ae,yJ7WR092R>Oe*!e6mC .ZxOahl5} ±˨{mHCtu\oȃ¨C/pzbXYkQ+5d7h'*t3Q"(B(Ɗg@CA)ۃJ\H!߳W9)'_KKn,*'1T?vA1 ~f\9v {\d ĆM #j5; JW|B`s<<2o1XWݣR2^WĿ?X‹Xΰr1 &QIM7Eh8rsi~lj0KVr:%F|piu&Mgu=bovݥG6٢[V&qĈz|vI$:LoM0(~k'XYa^{s8GB&?"a5S}`4~$SğJ_))hʿ*k^aI &@5%PVŝ,B}vvvx$j-9Q+3'$=4h4XlҺ=34}BL?WX*_ˬr Იt>naO5JTO,W]K)/qZ,dzw |woOxG9!p``ҭb9^D>T!nL#q!+e>YǂuX2+aʍ3d=i@щJWArWs%W;S.ON劉zỗfծ5,@:a._&uЋGn>_uw۶,vIҖtRPsUPCs? ny})Tzn|\ IQ767 <֨HVydEx:M(.]|Y33;LZgEߣXNS^w!T?Rv~ݪZ2 0*f4p~h9"KsITUŬV3L,_sh jU>CSe>aƠ8YEsjJɒ-ᛶ}u؍w,s %,\@f -2"2/$:[yO,V["rn^V=] ; D+D]]'c_'~Vs68Wa6Ꞌ]*Q s+Ƽ!(C`d(;@^ ݅lrr_=`M'\dl \{NQwP xt͞M/,%<(9P&6-N3M {VCušY:md"K1(ք}R+` ~봈P!ҟ޵uj5J8#΂~ٮCC`^I,**)m#^D< [wHl&xXxg5ȑx֊~bnDg~Q*L:hgٛ|ldkc= *J |U.t {zxoɷy"hu-[I?Rby0\B&؆P} 0i8*0Et90 ?QZx0q8^A9 rW繍~so,e!iu-fB| ".fx 26_.|<}LU#=WS葂U@#:ev|"^d7J.ۂ|ٵ5{g.b&2@pCxeuʯ 6QGtAHR&0l<005 ǃ $diם]8yŌqRPPq|Im.wjn#)'$,pm ^%(cea9yl зFa꒕'I:jppM Xu$|ULtz#r]%|իWJDY)4go[}S\z|pY@k!߶<,4@ A^P% ddvZ"|.V1U?{TPN(; [}-ޠ_u+@] A)a=NJe| uhtV9hD_pjb ]dFpg+?z1^8_]j";l]2aܶw-.~"ǒ+^ #76YJ5CLX mZ)G y apZY0a)NB֠aco%íKӰɊC>O( pQ (DG#Uf+ $||ˎQ0q\]b1 X)tnQ=x7nJfgbaÔ@\%XUW \9FX|ӵKL#Wd EX"(,n0*nL&w 0\j)|Zk5=C0:ՑN\Ħ4u t w6_0$6zL B$2x4YS y D7C[{!u%"K{##@ w2W r!F"6#, `J%XrLMU|ZO"7,W`A_Qb.v$\S:|rI\}{#zMYH\k8[VN('B*E?j Ԭw)kAs.Xl>-E6 ZMWV_#jXĚ^N6Z(⫚ױNE5t/h&3ge"Y!h]ئYZbÏezX3o׫o̜ "KlM nԁa֠Z? :1z5 &t|&h!O̓O-^Taʐ UE#|JKj" .50vz!9p׺"+\Plصo.Txb3ː/A9bQ0s ذX  ,-8t1,FWX}-8 jEMPd6g$1—= .J/P 8?,kr,9װ "D[X=egR.DCWXtaDl7<耤F$ U5Xb \'erLǞW3OFS S|"pKL&%CZ;iR&AQ>-'`^q*r)0%F:ukMm @ !˓ڤ$BAAL '$,\s<10j=mڰu_[^"zh)?v5yxmLXH\|[]XI8? 8U'+!|`tŵ`$d͠0dXbWd\sz.VtB|5 n``ŔY =}H@ Y0+$&)%A̐'2\0ԱЗPwAC *'U9I re>q'x\OJS/ a4a#c7b,S "Kmf$ϥ.WҎI/.+6qn5GJ첄=`K z`EFxH۰hq5"Jt҉J!" x%",N$IجnDe"4%,~|O/~]+p/IO_s!2LX *YE'67r!mWAhCm QaۥLu:mtN0a |_ >=G~_^I [| 9iV[# |{'KtKcr*Ĥˬ(4=5Ub<]2\X>#x$ \ k8~ɲ_8 䛮qv_ X6|`,D:4@S3qWŸ5ƢX?PEpwa,q,)![?M}jq:c ^lX+`We=(mt( d7W B}tj+Ƕr$t {`. dNP;^=t=^֢K:zҶ[kyuq>BEJ9K/Ey#)|΄ACJ>FIn&RHH NTLAV4!uQJ y+CcS +Gu;nn̔,Ram@k*f Hƍ;П7 Z GاQ)IdG\[}K;!| х熃vħ[Xjw4"[1;72fc7'(@JeUXӥu7p]9Qj&@Sm9D c M+PO OxvY51ưwNс?p$ZA6Z&-h'ݿo[/{GٱyEa 0,OD}KF``DەsQ"@TDX+Wd.TWp*>w554)+jwP yIC}"C6^aV0L* F|NnzNh*B+sfŬHvlm $t[1#Fͨ n$qh,ݜ\$;^GB K gH_`X~x^(W2Z2%iwwy3ϝC8Y.vx"o]U岡5cE{4v7 auAοX{_˚Ո%`LxƠK{Ґ"(`Qkd)K}Kг֩.p(|(}Ucm\ AStW/iieR,\ĬT Y xMuH=|lX'=l{Vmb삁7:nA k4rrp9CGi()l3A0މ!X֯X <"W=| $l1l^5Xx:mAvm8b gj GS;5p`jﵻI\&A#8FPluc1b --v;3zQ _-Fbq;avx|ʚ_ ^[ }-*uspf[KIgz2t?)H*,T}{t`6 hyy}`S| OH20cK)~NNq2X6NiOh%eyP,+KXZaW+K+E. c_,kc)iw>\lR^0{j@Fvh;ϛZ G Ub r"9~B'b0J`c*,y.SaWb?tTaɬ6%w콒+UHz]|]3ϻʜVKK+r";̒rSެ`üfd%Y(w*aS +x7K3zG+փ}J,7XjoxOIfe _$XcU,Yˈ"Kf5*)y<zg-GocW"k:P ҸSC5jH}J }j>;FB$1Njb]|%6H}vf;U]USUM39/WVsE_\?fVbԴâ.U꾑8"N`ueu7|oޓ:Yg-BX츲)6F*J3.kd8t*TLPUwCq`Mv()ۤ#qì|{?%;byg薭Ȃ6qʻ)ԃ e_M[;vp]싮߯'rtܲ~{LcV\?<ӑ>0gEj2>q7>VI3|ɋ]E$jtu`)Uٳ +N<)/fPF8x8\gqhgƹN얶5i6yBr2UA>$HJcv[>@Qy◪+$]l>BZ ,^5 HRZ$xLUOGƊzXL(zqRx"e8S;1L|5e>C@zx*kBnMɘ.$Ȇ+Ib`O(9MX)T ?#|\;ca ";V>3j@`,9=LYONt| 2+Fu{=cXiYY2$XE21 5&rqI.רEjė>צ"}E"3eZ؜#G@V˹d}\.»NPxe/m7ab도-<:#A|?z4#؏)w ۏb.GoHVb~iG=w巏vKN'D:ӉtuӾO'ҁ&R}>~y;HhT<j1~#-0]LHNЌ_M9Sۥo2BƖCn癛ツ]鰼p+Ǐj$x_긃eᒒ/G؀<#g,@7" !Wd7m=u:͛5B}rP=.wC0}xCD9Sho8z>bd }NOϪ8pSF%_#ρt MGf⟔; ^m3ljҜ+YȓQ%>r`msBBeUVi(ڔ%'X $ w =F&4 MWSД}ڄ M+Ӊt:}N8Wst:iߧs@shQHς :IuuӾO'A'UP2MT:өtuӾOR:`5t^ΫQ>W\7t^j^H u:NtBrݴ u U\&b3KY71N/&շqHa݅G۪{A"Y:cX~arO?O W_yɕ h*oKش= xȵuLxEQ,YnZVc9e>p.CRz@T)̉ ۖw-7m/ w#OgPgI7g._Kjh8eܣ`ͫƭ,h3gee|ti?YUm]?\XNON"G|l,5eHyY{r= O! 4ldK!Kkm1WnI}]! v0 6 N:DBG 5n۝±BυݩϴB߁ªjv'cUXm'KR$0 ʉWiEUhX~({Y`a{޺S: OA(ˠ`jLEP.\@uX-(|"#W?Vg@_#Էj~c-`>b>PX'z+iMM*rSXF9Vs^PF1R"ʏk Sg4 ;Qq/nvd~nQSYa.m)sB'5g( <" ѱtXG]6/yEl`h&W1Q8hD/01Z\ glؘx 409,j㺺>d|vp 0]Pj-;Npgg6:,̄~9 s>n;[;|8s DV1 ^|=Dtצs+pXIB!wMG864xIFNQOޱO8"FÂv4;X>$+):Șj`} !9w B-A1:EDݩi^HY ILA ;Ҷsvf$'1 QtT@sf '7GW$O>%~Hlٸ*DLdO"kGz2+Y9a^"S:?4=^\ eF~(qF0TUo8{>HPްJ ZjҪH!.q y% -D=U˫ؕ&$hpgܴ !qg9E"ٲQ׳ 6k֎sΕJ;J!;TN_MQӧ_oFf$o4^, `qZa4Ա.K@p.P">mv|m 6QQ @= =5 Y[, Z\9esc!eAwywA2ӓx5YAoaX>^;ugU4VT025 Yľ5%Zka9P==ͽYhyh(sm(Im~L'œyPeP'lLEP.\@O?:ZPg# j9U !(`XԙUEVe pS&<.JsEUbVM@uA][ BP\M˦yq;e"АP9>KQ. ZQL|?t_f92,M*26H.U.L|@x" "c!|e!@CVJ()x -XPo\w.. {U2W/]|dL<"bl&&cD2&N8aV`Ę0q"ɘ8.b8p1&yT5I'(f%YY8P>$ !BöF83bU#-$3LTMTKYo`o7Bty$vQJtйH3"-:6}NTOTO٩JJA5 .نL٩((";~S7~S7lRm$TOTOTJJ6;ل! DĿ-9 Ě©(©($ ٗ,JzvYwjQ ٞWI;%yHښrqvpK5϶.ga*%ϸPH>i[f4InF#V/CO)yS,|i؊ gn+}wC2wXJ.Xmtldž\07AXJV &<9ƭ䏑x I'iТLljF9ʛS1,X\//0AU 勥j|OՀpi,X9ˁ&Q^믠^XZ\,ϯ'F+hu432"X, ɰbulƂ  F}^3=HAÙ١oA$??gv$ApZpg~` QU XVkuZFnWޜʝ;tt:;K']2Uf̬ʌI ;; 23WZ=wWh[|Y,RyM }m "<ǻzzF zvWRwl OݏZׯ[s8_wgt׻A6AHS*o[5]^T[ھAE?q{"U ޯ ǷnO?٘3? m<\j35b-售[ >q^~?0quenϝ]R>cfr  d}\#o#>XݚqKvkV&YY?Xjgf.%ӵd6sIoIw6s&[S3?^끣WVhڡ ֺ|~vz}7bU???ϵhKN4Ө93] kUk]v va*jmrvsi7iE&*5@.|Ѐ?0M?/kO`Qw3A0u}u͵ sYJBNhh%B4,}Pk\8mfOg- y Yok_Jn>fYJn%[R%[Jn (O-/dqԨGE7 WjuS?Z如<[P0w1PFfjTk/Y%dhIoI񖛣Z]cZI])"*ݩp_n}^ 5 (53:$|,Wݝ$́\CA|rF#|""tcV=v8ݫHkСɼMrP'ww]rKN|ɉ/eKÒ-)ޒ-ex~$ JHlpve 6X*Q{-"g4rWubR}zC#G#FxشWUGw,^i=^?s c*kw?^j{ (R -BҧKb8DxHxjc5b3v-Urzt8ؕd-ihN[|~}uCxKE$bͥ*mPr:e䪳D+ŦMݦrSrhJpt8iN8ئ>gʱ^ΜX=v,ߛn0IK0){W4R\_IK:P(OUC+e)\"P,9X%ѥ"fIoI"fʘ)df+e ]w7ݕmgg nv./]2K귤~Kdfff+[wRsKvvIЗ}IЗ}.ߒ-ߒ}[L^2KR$KR$KFvIoIfp 2f|Iϗ|Iϗ-ߒ-ٷ37{fSǹn&D~P {TXn|ZE[.-˥e,%c~K귤~K<//]2K귤~KdfxymIЗ}IЗ}.ߒ-ߒ-Ϣ-%)_%)_2KFvIoIedgі|Iϗ|Iϗ-ߒ-߷Yn*ȄÑ+5$>3+D;,Ga9DFVϗB~" ŬlIpOǪ1y0֊6'c ; $B;Z~7}78۞9NPFNR?Us]k>RVSA^2l~x ~?jN#T vJOTVzn NdwS|3Cy}+}澪t5WG-Voϯ~s#]]mzRj_x+ͪ_JU^t< Z6 Zuhb Ɗ8$잿z%"dlg_^X_.R[nfax/et;1{"R"I&IM%*>֟`RGC o߷,Bk{}!]?Q׆y9q:wtViPN=uV^5XѿR{3 xLIQZʝe;8|'9qG2ܾ>}|+gwWkPUYf< u-A_{xcN85Mpk&IⷞDzr'P>{/JEx[i-5Mc3j+ d9NDzJ9ϦdoX.0HR͐N{n@_OǿANƩ㤎Xgဒm:I\߉]dN"7!(G/tIS еC?'ox`3Y^`,۔I4 O8صvx2U7M,¿4a$Ni2ѲKkD˜N|Eqz,}v/L?ΊM!!*֯mlP읗>qH[`--K.ﺻ[`a$V܁ԲxX{w ^t0މ D0;Ӫ#v4ImLjĿT|`C[55 vvxu]~M"^ޭ,lzurԹxe_{>Wqrlg}ov-}{*8R(@F!xѤ]UYxԉ7ri.ވʿ){[O) +mQ]/e ZNrK10)fP[N e0H~;Von9JշQ'*JTzn2T`ü*\+W+čw_hUaoog(f[?sj6e$ 0smuMܥcX>wIoIo,iiƸ$Kr$Kfv.ߒ-ߒcYҒ/ / ]R%[R%[:KZ2KR$KRdd-ߒ-;.%-//%[R%[RokgIi@*FTXn|ZE[.-˥e,%c~K귤~K<//]2K귤~KdfxymIЗ}IЗ}.ߒ-ߒ-Ϣ-%)_%)_2KFvIoIedgі|Iϗ|Iϗ-ߒ-߷Yn*ȄÑ+5$>3+D+ g~8 y XRaCm3~a3׆`'N1 <:ݓF8S/;NmC0[ 6uޠBJ@uxxB?[Te>ɶgㅪ`b6یT]nbSMAdmvUvwM)V 뱦Î(d#t[Y6}OꐝnbIORêp:c)3wu~z>б 9<[;[YBFkb0H o]F(#'GU;TgQ"qסyőCԀ}>Z?Tx%V馻FWWĭ 7nhDᐤkc7Bskpoj=uZv\]5{t^Hai|p͏\t*Yg]nj?=k\](u1>[3>U^{ ˭}y%͘wo|H7n!>:Ӟ;%[V!pǖw%Z 'xz0ʅ 6% +AP#Ӑ[7^Ax BsϴgXiu[98ԀyoЖbntGg!7 Y^~?P|4KN-?\ ެ Ԃno(V5m3Iޟ(`*"̓;kq֗*:zxN{70@l |1ojf832Ԙ )͍sG6&3BV\i!==H¬\guG鱸r,2l8x,L8Q;#ޚ6y?\n^mb'//~vվ{!4үy饠O 꽫#@ez?_Ļ^Sk}yo)umtBZ f0)0G5vFUF9njsA")R/v-0/p˷f^-=JdG}]x=;H-+Y;(9~׊=&6j Y#m_ vݍNog7gҳci7MW񴻒v5Dm5E5j}Dc6gFuIϟ˸5c5)Id,x>h{wAV  *UAf\@fC%x? S*=n̈|(0O5Q~(r(?fWr(4OSF)EFKFFQ~(?csFQQ>o5sFQ~((( |(Q~(_6/嗌Fe|(b_5_! 1ƻGg((_7׌gr(;FFyطfr2t/Pqĥ5hZU%CD0s;D43Ĕ^z#>6-i`;k8ϜYvfR;1G88w<PrF!˼`|Pr^>PkI uKG~*rQNRdUh^sI. Y\ԑFn ^<0dㅙddp)> !nbVbvF$QmNa޻a&ǗCԢ]ŔјY. mR ݄Ǯ)&l׀Qdn2[^ 6㐠bOFTJ_v\|2Y7:OKKdhINOj4AM͉Aޔ4ĜqǜH1рބno2(9oQ3"()VY(G&ijImO8ۣA0^<i ;q.Q%e=XCELix$h#ɕa TFT%3aДMtkDDu~rozTgJ M@ HkY>7>tHiG)1"v.iǑǧ"]B 1!ilm)!k<~kR:> >gMPk4* m<CL]Q?!Dtx;)!WH$ʐ(cmGJ6&͉F D4خHѮlN.6+z_>+mZ(vS& ׄ/|Sצt#FT_$YNXWA_:|u:Le#XPJotS&_'BҞOjэxմ5~ƕpRI@DmΘ3xK߉b\~H'cZ!x-%#BV;|q1^ n0{2~K q1^Ad $h`X8ҌpƓQ'Ds Woܖ 5Nj|:#CF0 I6i%gţɃtW.7u죖1P2u)i( -n4!qGL_T ^(Ud7y}P^Fa:he'|XP9E`4-YT-'Z5M9D|iPhnp/?I։'=ŃC6 rR7US*bahK7I}{4CDZ8z"AD0aN>1\FGb~|3hјp!` mdAX4p3Nw'۝4n`.-w|c0IH+ɓ8'IsJ/F(s!Y@Ѐ0ӒWdg+%7oJSmQ2PbEgl=ZR!S=0c MDj: 5š)ɏ*HFIG)n<{Xؔg8қ(iތ03K7#E*u+~E ȸ|YOM$G 7.A:fR`٥1‚!zqH ':AQq?b)ᕄS*»hJ iq6҈J&) HcP:< Jɗ!‡HACn8r7shZ sE _ ̀j<45B+{$,a01Zl[$mJ}FQPrX!LaDGFX[~]G p:1GPR"t5r͍S1oiSO& |A4F CC WYnkH`4oh2lDRxHWȘ$j@:b eB p$ 훑DXxD[AZ8eS50ё4ͪxvlʼnN++77ˁ$pjJpoMGL-KTV!C`4UyxRjnYGK=xXJ!f'K30Bl I8OT3&d1M=bYh 5;uJ!J;ޒp|G:ɻ}7$!P>71b,(V;dRădFҾ" +{U!&LJRul>1BIp \$\_  ya 2TeH{#Hx tF䍬177#&\[V:VND MN?$@\+ߓI VQ٬AGۚ`i7E7 bV[W:1 +e˜>jBoO@LWaCbۡ.~L2$SQF fMxtH%qC0&x3e"sK%!Q %TA%6`fAM$ $Cy$@)DM n-Q=ΰ(,(n R30+ z+$ͭ"*=PC>k\q#q&LJ{e$~_@֠#I`IS:cL_gbW5 (3W${,%3~!ۢSC[`YT Ԣf@ KЂ! z#k GHj-IU0roe9R݂E%$%*6NN! }~5شTB2sr*>~H$ܦ>ŻTsȰI&fF&d"@ `ÁT-x2LXn[R'}ZH[V'"lԑPFd#&|ؠ"f@2W5ȳt4q)psNY@UdgKe*U8B2^ c16y"òVZ[MFʚc,#-ٮxu -Z-'$c+]R"qИP1-$;rO\`ڞyXdF snWh.#WX0gU(OMkÂT@03xyG8ە>H~#<ЇIJƵCyTwQ 89"AY-v#dGgv2r0M`uuSXD,]S0KD(!IE#J:*eQEq ilmPV}R*_|2A$=TA.] |e ,Q8L".MO7H-.:;V ³m~a,+#D0Ƃ:{U~1̌]浡M"+L.q%5cZkP>#UȲ 2ǖ7;2XP.)4w #m P!k:N|xuY *ERE"DbG$|Jv񗞢uV>w0u:tkhòts7a1 t܀/a=n :gB:a^]Kj{8Cq&9H0e1M|^\r1Πe)fKn Kp-[Oyjm묤T@-H.o'Tei;is% *gͲa:wZ!YO[v0rS`e{h_uEˠ`C4;*UƖHK\q(MJקaU*61gL{lG"@FG?*y`e`vmВ)BkR6Ԑ`p7 ԿI"8пzIIڴW>nlc 0Ydl8%-%!p?rOrvK|s('cA|aD:phŃW%‘ElJ(8EI*]J}cѧtQM[ ͈UԻi =rNldžS )(ӓ+fž>:C CLms (" DHnO`Zkn:$twaA< 95B>|0գ^|t6b[ d vD_^"S$0],(SzW8[Ȫaq\.bdo(,/Y`8IZJHmuFN4%I(b ¢!f0 5*J1;"j$݆qA{ c[yS3BdžBNds2Xuٌ2\vYH0r(|>P`qD\:K, NRwvUfs*맇:8O YI~v!*B:gp>_-,bZ`LDp3Q\qH6i So$Ni_oI"pgY/bDIVKQrpeTRRVŠ ,:yVr*~Is*Uf3:3<ТHr6߸'49EPx,E%]P[ v\, ~a"], O[[5NA f¸en۠6nvK%X2j"?wƽv{VFƯé. *oNE{2{#8qq4)K%FVᱹ[@{>&-A&9Ko^]^|N#ʍ DlBQ0Ҷ2znbue㣒Q /Ψ]~2 pv9m*qHS6_H ϱ '{.p&; y#̃*I ]A9d%Vnu'>\[YvHCW|B^VeWU(x{\; H1:4uNC%lN\Mdu"H"G6#CZw3A}aoo}Y2hyvNv|O~´WY7:%oC-=ނ[q$x4fqX4l 8ʋhƄ)cJlE^9sq^S83r(TroǶ|$:?q<[z̮c[;J7ۖ]R ⌒Ё.c6N0 E K0(h+0LHqVBuJ;y+f%!%b60L)Xt,0X[;8Dɞى8Qgg-ǣ̱xv27qk󁹋4M{^oN4xx!Njf>@M::85Cd֓if GVD#}MWC*[&qR>| !>űDe~(PgӾL@u{K1/jRz_Ph+&[PF2ֵG|D) ) )ȰUd(QeՋ%UV?ʍdf9#e[ᮃ4b'c6o3v'r Y|x7>/ql, u|q\v,7\BFzpOld:n_*rx)C_{-dpc3dHu3L⧴VǡLTC1v) u PmS܂AXHBSN\gP*! _>ɬSĘ8//**GbO9Aot_[B*( C$ #Xÿln 'MySxݕ5H@uu5&827 {_A?Olā7h^V~ȓ"|[7߹'C$Eu̢5cU"BY,8r@%;lC9P`^9aUPro %f Y>P҅r.ŧ,N4Xs*nURQ@g$LU9#yd!Z˅$<8CCϕYl9;b,8fS>fP4ٳ7d#yH=>hg},1Y+sI+QsA-+BV޲1([[*$T"?7Yg(ϝT:봬o{ʰ-P9KuՔ)pʬKy ^%2ENHs8"bkb+bk i)T 9b Ud$GU hѓNlokd:2ÑfO;2)U  doyHe ׏U_98ZrpI|D.?AojV./q*ە$̷eҖɓz+,CMHS OBȇe"d%$biΊgda%VY GsRQpB*ϝIO33$M*#w>^/TLN:B3'rH^H8>يkI=0im2a_|.U/ NKjѪZ ڇ(.Ž/pP[XiFE#+. #&ՙOc![hBFeP8=71 11RC2_8k>UȩoG ~T&ҧ i~)0RY-=¾+G9]0ƩX"X+q K&C,agFc#Hp@|qO >'oR2Mb^z6`p%_t/ō!g6ӠWa _QGu(3s-=W,)R\٩D$:Xb>7KؤaD.?'uU^'L ܈ib1q:\evKC :Z|1(svS͵,CTV]!yh]Q{cQ )q,L5#:i't'ԉ"HEU:l9%850\#Q~PQm+)Q0akɁ(JH-{ V@L/ͿoH9Ix=sdƑ8$rgA&MRszhMȰ+G5uXjY(~PD;ph?Q;j R[֘|/g|JL >Ƈtz[vq(/m==c 84OZOhðpW`_hѾUËC"Pǯ\}VWs#ą>/0ݔuo8"M2 2MrL0cr P{p DzYQ-vHx [d˳{]`_\ ڿ:st"ԅsB],@@m}We.{v1"k1 H RAiogn9ĪB̂EO2`:a3Ax%;`"QU&#s"#r M[ɇ8SQ#2,1c>@$b#3ĊuԺl)_ƈݼǯ7'pk=s j`7 wF1ɰwv=ݙ<LBk9  ĩۉZ#~t !ٗ-8xf!D2>Ra >rl3ǂJ9֋C$a %;cAgrBn= e:3-_#]GVHj~6Q#ݥ;,ƥh פvB8BF%==m# ppJ7t= ~ev2g \GXhUB ]cxe @`1gCTΤ= 1?N"@y3EE8bd=p8:FMcy!SU^)P%bLq *4쪛\OϺCk Qeu"|1'*$Șx%B\GFVFLFQ8kGݠ"B:,9)%UQ.A;8!;e6[ÚR8҂0O" %ZR"hENEpO3ͷ82NDe;T~ $O]zV|k챊3f'EiŚb(2:D| 2_>RxrG*F=",^i C$P6{7q޶jWo&i# ңW@g(%fnD";ʹm7VFo2 DhN@! o.2gn)q&%̫E1 ̧x4x1xkuW[v^$3޸9Yv5or '=GSgGQL9e'IG8)I,2f(Noy S:>t$Q%dIT[Nqcq=:[ANaNs^x8{NZxf2:!Pv-s!GH5;Ϣ#i. ;"oꞂKZ֑eӼLoa:Z\p2W<:ٽ_z0Xm%lT1tQ e?ݢOpJ8@H6Nx ;l]$#xxT))O'TGPN;OmJt7L00_fHw$M"I~h^ȱ@ql&HT[ݤq:#IIhE6Ϲg 8r62ړt+'#䱃{Cj]'ReTX%/7ʕ:p ?5!ͷBc8"=7t|uh1I0[qrM9q4/cp#VINa$ 4rJDe|`l"z*J3'q$#^c M2R$X!@cNN4d9CEB*b^Z|jvM%egm`"vD'qH)3U* u]#L+.Z|(퐁)d4H9ȭݝ+$x1G#cOK2!oIjoT2XE< qoÏQu$*W(;?=iYELA}!V. JIa`} x0h(PYXl!N.LJ`MK@ixR2B-EkFRGDB7+Oqd(J-wZHit,E@f3p16̄ p*<$$Lz VfL!^:u==Ƙ H7;8A˝^+6a%L0C2ic*ڑs˕h-˨S/HBjv@>R;G*"-Lānh*"<VْTwJv'+Y]2 %P?AQ FvGaR' *Oi~K TfZJ[%AQ0KEI9JIyYLE$>o; r>0nr0^}^sT@߃lũ'髴oUs谮$O <8*aS"d Wχ뷧~H6nd׸5)Y,rK=kyN¬^%>vXB u~cYi4d+pWt$8/Irv9ZG+J5,/Ec K1Xi]U,™Y8_q+HB+= m/c|7&zP<[+qKۤkM_bQG5lYgwل>~KY}&1eH #aw3`KlQ,x\cn7}φ 6BQ}!,b*Z@>}݂ZNҟaa8.-nޥYQPV\ ;҈ZnPoX\bw}} sU#+' A^`Ξ q,s|4?}=+K RM'lEvJ8"! ϱ]#QA, s$;N6L*bꆁoz<'eq8S-,\ЩAABJT/T\{}_z̬\u/RVH=,cut01Ѵgѳ jls!ܹzb,$~|K)U$I4Jb =rH#D+F%E_tiER;wIZȯ6ߥְ`)A]#*@$  [ XX?b4YᙇAWl%@83T*IKJ&9)MI#)ʌ$VCs&sF:R4tuXPSO tQs4Bqa~c?af%!%thLDpmy5~e C}Cb]p)Ij攰RR5%3jAߗދ i'fu &u!/2ORO/BJXT3 `Áż0cS \L(39Pp`ZL-="5Tdm#QMlrX }g,t\y|F6HumIEl3QBWQlH/NFXw}>J0{3lmYeN?0͂{<$=*J&!ŕKy݉n[fc '3@^S`k 3F,@kp%MwFj/B:wX טD&IKLj?=0ߋᤓH=0k)Rv6geq r.Mbü~C3 TQeG)gBU( %j% q!% N[q1؀[nNAEH #,˼:uR[`ID@[|CoݝH# Ht X K+nD"+ u==1s\O8Lyyt⨫8%o[8\0 GONKzdB9N@Mz 9(d Ә,Ɠ*E$YɌbpVph~:fC!; aPQܛI_KI"Q*@TiE!b '2sdaP1`{>Paۘ{' 8 $ј129(` WT;-bT\ݘānuF=\"skJ0dDGI*|'AL~p!['i!p@W|t`mcW8#±t\R8@7;hsouiCX[NW/W?s||DNC\h | )>ԓR[n;yG=ّR"$Őd{7jϘ<?$}aLB{<.8bęg{JKkal6L L : ͧ0;XqupZ )\V8pBDF\ɱ+ps!.ŅP2c:v$&~$kh;M;PpCBo$' dzvw⡉xR> t( c6cYC$āb9M7&lZ>w|<x)7z 7irSO/ :l*%\#yqBބg-WqbÔz̀e! (`8!AJ: yȊ etp3A  H+ÐT#h畴iN2%h` #)`NW5Fbćv;* +|⏑8[ H%[ EA B B,p!i "R"R"F$?},AH>l0Eat>ebQ9F7T,KŞ.JQ%xnxA U0 ^.|#-F1gQ]HT !ta996,Ub" v}u6U"$Rcze~$Ipg̞63Oy)1 ils8x (T`z!܅JS.AC$VSMuA( */^QEs,)GFR!o}R` Rn;l;PfG|rrV4:foy2 `B  $O#Ei9C+{O`X3$3h/R@)s dP?0"o R~z ŶH7Du߅I@N3`-  .S΅/C^$DZ.{тp\B[Wc_|ϲǁPEk]lwG"eLo9(` ٘cHkZG cM+_p[ oMΑbC90 ĊYHH "lJc 8S骠{ctXIGIJ3[T٦[uY=K vK@r ukc'psl2$ bF*/ }% RU,@|<8p7ؒ(ߑ|Π,6U!QbŞ!}/TʈR%$(f_={_?R4f* 6V@Yߗ,?bm(x3lAqRx16 TNVf;bsM'e7kEe&bcr4󮨌"˗sMhƷ9at$V:NvͽccQ}9 cFB68p.l)1=Dσԑ'I*MXKp]5āHNz*sͦʢDif-w)m$! |ZF"ݑz}$;;G=շ'k玨إ.sF;cŢ e/JGn֢k!`fJ@!ڒ8adNHOs*FdZ  hͱg 32%tHw=x/ OxtÈw5cG;{o17܊tJUDQ8ALH;G"64ў#tA2ډVֻ[įzv"Fsƭwr Fu+aRpTT\qT qpyF2h JA;:CioG= mƒ+`hE#6{FaޔU8}`ew$Uƻ1mRp ?ĻK^7ͤdmk=amؿD$ F:"38Tycw@%Iu[Sݶ{$6NgY4Vdd)st gdLOGg8edT}J }4cR"#%)/uPhzc"K\њK5Z4&]x&\ ~ty a#AT\cӭBJd?K ͋-` K % )Q1rJh0vrrܔK g+ٜ:*;- 6AH=WZyoM"1g [C2(qtߋ% lpoJ g*k3ك-TB@ɘV]ˁ?J8T%ɂ=xXIbsYZe cTxEio|&`Kf8q +qhB @^ d&twaIvrmITe"/rL`&X>/@.pJ+!UhTN%ޘi6Uik7[7+Vw]U>\W͘r (4Z> x3t1,˜5_SUbduMuڹs^X?A_~kݵJKoqnk*bmuL&MϞII9IK{,=vSj]IktyE.א^kG|D$n XSw[)~,>Xp>W9)>v꿩ow5¶ֻǻOb^ĩ7m)wrs.S73jV/Mh0tӦhQBj4J*w#XHhL q5 ,SjS ť _ h<4IM=Sri n2ݥvf){4[}WMڿÍxܙiaDR$3:~ ~_6Ł)^ӡj9M@Ak4;oPst9 Ιi/F݉۲jqL,<ksNi)Xn:[W{~ NY!/. J>ڤ){2L7c |6%UL_y^ʿrfqp惫Ӎ/!+vWJ+p1j;k"RiOgVuk~yZ7 ٔXF:z/v7IԬF֯:|<j0{! ζ[ HƉ_'G:{`:YNNii_;qMK59N;C-vѻk:TEGcœ@}q7B u=RZ#E*$O1XݒO߽%VB*]!iG'fL~0G3n+v^ M6ΤS}ж*d%.6}n##mA$꽊^#Mfę(iIa+ޣvO&?EB[`hbcU.H1kT}#8e劕?|Yb'Ǫ CgKp&О AwófQɜ8=fp%3QU7SKnD-NT 9%U"HjR 귆OvV0  89rDnڧ6jٜOztulzug6_Z[!V]!gvu_KViҭ\Tsew4 UC[ҽIS?WOn sŧjj)ȬζJxsvjh'Ch5 7yPѤʄ53Gh_>,>@ 9"TxSlk_gG*l% -5`+[j ANR~f׌2qd9L֜ )L.$=$,@|%Xxg[pAos,J]61ŝm\}b]Jh_i_*AdraN%Ü,7֐լф=f:3cH"1N"'xTZJʵL flAkiP{<].݅^?4M"L"C5\grs܉˷X=4JOGȄP|N34ZoN:`yh0Դ9i5Ҡf xՇ/:<t֏v R ^_E>н2B(19z7rrǮ?G766;_;vV6(U'ӹ]Q2 e+$*1gS Ҵna}Qk!m>h5-!f.yu[G |S/U_:T̈́ B)__*qR/{fUKdLJ095MZͭwM{ "iXYklZO(P<ܤ/8ie|([%+^Whl s52H*rrhY +͝drǵ d;h» _pԑ 5p=ԫY0x_F?w.L0*ah8ތ#dw57ԟ/6*-*wjd;PO&h}ˏ>_ sVP魞[mJkҍLX9/mxSO޼o^=j=%.<+FmO%<;^,;&ZI.힩ҷi&O,\SJ&o_E b(Nsl$M@KVV϶ymmt^~KOG[|u7-<{xy`SbTi W;5ڕSkZmdXuPj2ߦС_T642ʦ D}>yLP. E_/5(\8 h%hA#靣 iM!>~gs(v+_Ԟ>Mkyuf8bi+[쐪=s.725Bӯ޽o,VۭGU^}xL"Yi3l#d֓c L7SR>_"ZQO7WoXݩq/~D65_6/VMJYG_e9WfKW ghpGJ)Tm>yGAχ{@jry3aJX0_p޸݂;%Ŕ; !^*{euPD*"8M۷c̕(Sͼ _v8흲f?t&=}&=>S;eSi'V7kT=3O7WOYi2so5>, NCu O55MY=+F.\g~cǻ+O{4XO:c+מ8̙r|~f8v&${(]{͍O o9Պ9{!9h0uŒ`lkΛ<.Q7;o~5)}]>}/opcySl._a;T@~ +sg0H,Mi R) h@o*t#NIhr%_ӌ1y`d;Oؙ5-h-xӶn"d۩H Rpǩ!7 ۙ J{  V_ENHXMU-޸'i0C/ͮ H11+*Tk̓{9Rqе§#3Tu,8^UZ["6,s`]5v{Q0atZT۝E1w?1s*Y[*YzVmArVnVIk5,9JJ^+QB{+GiniQ~^G>qJ( 6}5Gq9WNWo3Sn:_NfɪNV I>{zD_qlX#j6PF]k=K(^0l;hzwl'2>si6/s&:6wޞ챚#٣/D= KY".(0Oԙe5܄U!ȃtbm>WRYK)F7NT}2gyj/C*̌y?Ҹyg|m-~b^5ugsf>憫ՠ"EZ^lN܃}aq'Sa˚6u/6'+Iu%8{jJ±3cdMj:>^QT2E;TYcաqZXl< ƮL\9VgRu롒{j JuU\b- לժ z1y43u[ 7XSLEWƱ_ʏVZ*꟨Yg)m2Q,$99DJ КiJ97o Ǚs6I)iJRUιa}Af@Uա_n M%ʵe; 8^;7߰ fU,PU~a/x Ә ,Ej0aw`Vt=F:Xз, w;У3VfImzPI ]L"Ayy[Dl/%@ X=} G05Qae=7|lfҬGeu{(ġOF/噴l>qI(u/x-jgcwD뼶k 51}xsgBi9F%Է瓇C_2F}EcI,n?1C _] f55ew[+Z%;|JD\@1B*=+<@&anZ_3; NjUo]C. V>=,d5'= 4@M^sW gn7FgWllD]xf.svۦx9OޣEU.n8r~-gi|j6 w?;AؚOqbsufM_ٔh:\[E.yOvhj@w(x.]|:W݀xgߨ@߻J]`i_ȓ N\==`ykѤ/>P䉅0}JuZ4]psʻZ5O>C3*Q%xdXsjpU=ZLuCL4WL&컀R&_J֗r\SMWҔgY@IhUx*{(L{@`m:FjrQg 3W\Wmf9<ʏ<~1[yPL {0"QCͯ7bޘ4֨lOo)TVnfsX"vmֺ,0̺=o?V9j6 ^ɹ}kܣޣ#oL,~?Mݳ]|ޅoj_k=q!sl%!sB:h횲ȧEr ͆%璭s$Q$^UkzfZe}ǯi=S[WK䳳7O]زb:S&xؽqL滍Y‚ʍvf]gzabxk1ҬysS4krPi!%7k樏h0귩m)MF8gݍ7w?6[#ګ9s!?r:߆;U.k3|V5{Q6J˜Y=Yf|߮ݕ'LC:SAU=_GX#AHdWM w t|r5 \]r='1UqD_ "?~*gh"ISc jzf?ҘiLO lS6'tlڵj*=iif|vzC?r%te5yOsxݫV"m}`A}n**}@8gl;P*b6&o״ho©zti<*Jѭ֥fnn#rpcM뉊**.TS0"D_,#rah~ԙMV0fzmռ~`:a7ޢ]g+&S_'_HR,z6mq%:f zo5}; GJ,y$ K:z:%VOc^Rp Νɏ2U||*e]Y=}ț,"d?6s5u vSzdcz.d~Ui`Ϛ{ʇa&xR K-^ϩg 2>,CJ n`1,Ai3t֧߻gg[haaϑŨ2F&{^mSjD}2dBUMczy:Vq^[#^3(cE< /65nxab`[eo$?Y$k!4Lfz8b1#iYC;^dzA'=ޢM܇U; Wthm检no7VY4BlRee-*z*5aҕ !eNjqюgͶ6brV)\/3x6ӗ:^d3tZMv"?Qb(יrw ̝/)/Q]O-_sT(D\ tP/Q݉rClW#ZQF)TXO^\">bHwtw59H$bHx۝}tCݑ;R{\ӹcݠ&Ӕߣ<\Xafچ1̯ 8Sg<2ohdwSoCEw>Ck UjzgQc.XӅR%9?Za2.DV56rD`vU R̓vUB?5]f:wPWG/4RֹilgMƟμ[vl׉K9 ֬.e,nq7 G> Q k'm1ܐ0?|ZOm1(ztx|fM?hԵnpS?6%#R׌fKiVk?<~# ݙoy^j~PAJN@]W&U, 5fƯ+v_q'6]xsZSZ .5LbЩ4yMV7IO[Y,ӺW7`g31 3*~^wNAcmpÑcy TVv~ڝS0=ȕ9+\Dv۾d֏vcEr$گ3lD~l0o<ʵGiW7~ÛgYa@תǻvţg{b>u ÔaTI&Rޥr5c*Ǩǩ$Wjdosy~Keڅlr\˚M7r; HsDXW~_/ 휾ѽXkt/;CWU.Hׯhصӽ} eC<׉>Ӿw] ݺ9NGn=s8d`XPҧ2WccevIQ. c+MFq>V'*-Z<K&ks^=XyifLa=/6JY޿`g6ơѧ(f~ШgF RC"Tѽ ͬIiVk:w"ro*Ղ}q 0ƺQq7FW3=v#9Nxs}o΀s͎ёT kH9]t=dG|#9wB^T 2?0wM v&uzY3Fέ]:iZ;~ h9ֆdN# 8^Ϭe'-s}s q4fVa=6p?%?ְ92)ZIҤ`LJUOrlj:9^vT?ji_Ͻl YR~l[[MJJEvӭo袜*>Nۄ{Kpyϱf$bv/EWKU83݊Dv\CڻcMFȣW悶CzhE/[~,BnVqJ??I64j{_{dU^i@[$쨤:՟vz ]*À-M ^Vtg=F0λo_B;acg{5?4Ewu+I"7Ig'Kz--l&̼,˙Kw@sP';/B3%h"Sp*Xч?}b}%Y9pY m,ɘ7LoRS4?|tAzJ_2 ,.4B&nx -!mڰqX;4#Q3dԌ6 c!8sY{S3YieE wH!ӳ?j-ЕvNi^G j<ǭsP )44]ܛvkC !gbB&H?T4hkpO펳ئKX48rvPz tgrѿ% } ͌vsoŻt>kC /J*xqUQ6 CAT~ ï9a s~^(~0ʗ`hpP元>,栱-F]-0רwF]䪵t&o) 3? Q6ũa489[Eirp|MJ#u3Svw%ql{|!E[-Y,5-[`ʍ|~\XL4Ӿm4bXăRZ`n/TO$+5n_3xe^0.ilKM[+,bZ+qޛjqmdQhՙT4t͡Ί~o`3:REu9ЀFu'_s5`\M25TbnL,|98U5gM0*mz^ٹDtǤ_,6#Vt—FdNܱnkZUp;c>a/P~A WEisѝ0ڗmbDžĵ&N)PwDV DQ.+%':aXҨUn]+ KvIMZ1g霉4'L5Ku~*1"䘭e{?s_h5}(HG0Hd Ԍ)wx/H LYBV| ÓK0 ` w % 疀@<5\;jJw?T*m5!n!lj\;e*9"F( kP~0QO75:kJcf5Q嫍 _ykȻ"^W̰ɜϘs' |(PY4게1Ӧc --W_PK|T6LPg/w6rOn%3)r3R)VAT?)#kF6I@A /^$eF#+inOů8"X 2hfauuD`يG Et*{Opy1QY&*>r!gLa }eMz4SkJ[?2s/nTMeTA԰ȇb+Rl2 Gf ׂB<:^:INJ A+f?5k"ފ߭!x^+pMg+~uYƃP3yg ; iOR2\HOVeWGαڔN/7r1 ,>qd3RV43Xp"2흧}4sڵ`8~,][>iw[g5Ŏ3 1äv_Cmo7a 46sf+hwjX,M`TClHygf<(jRDuxͳ3לXo6]=ks_L2lysB %mVWómLVP;}җ^N_|ҋ>嫯/K<.5W.|x_9ūJk^Zz$W^xKUl“uF1!Rc._H_K\R瘮eBݦa4>ݯ^|@.]8EXhÕԟﶺt JFꩍSIsκz7\FAض7Gﮙ>6p;Xt>FZ*=sR5ӒmGZ_i (Z92&޹g*QʴbPȒ\Y $I0FX!Li4Obdi$)C)ۿ33ꄗ K0Y~1<< /Al(%:2U ]%uBl0O(ҎGf{bh׮Q|^ʨ_Z<4V¹#|t ZBX'w)m5yAc}Vt[aDŽRg~<@Tvݖ ƺs&VQ}zD<>]3F׋}6#rPg:=Uʕv2}v%/#LY=͙}ji&lhӈC$ZK%⽛Csneh&D!?sM/Ch6a #WԪ#TڿzǠjM9%boj~1Tިfr'}=8i+RrwQoΘy][jfF K`D4&_aYT F4q7 BĮyvJ20ۮY0d0iCa3Yi܀kW}/NffJ'4\^;^5uz5a ҥ  ܫcCrS~]Mʶ.LH=Jv;}~ϊPסFƩ.IOz]K-ܿF[-vD!G5Kr8W@mN01:ލօWHN{[ ?Kv\˵8AXgݡQ H[:vj+vK_h} Q-9Z6B+jD')Cj `P?کuZUj2/  PP07'ih:ϱCB|۹s")#|"r^N=M# ]5=Dʃ_1 ;ձO2 }OJ(V:&7 uα{(Ǎs qڈKx>UYʳR)ϡR.-wK^BU˅f֞?\c\8D41-oͲljd.K3s._։nv%!#.ۏv2v m>[$6"g~~{lpPaڼgo9/F59moH9J?ᵗ ?Rpa&TBQŢ)?Na^{[jDڣ=& &j# hiI~z'P缊pGc6T*=de4+AOלv4 hɳH<=%3)m+rVМ ~ F3dGr}5A:NwXUM}x[_y?Ru{G ɷl`>VY,7;^tFF|((]OԜ;>5z0vUfn p4ҧj*Vx597z>jPSRQHtYofn't&4ob?RY>)#'iF)pA0Gi3gfD ,ڶCWV ҈kj۽}?k2гg!Cst;MSW4bkxXhB+MֹGEzpjJw%8*}j_^fcf ?7K"CYvN{hl;CWm I! _?ԬG{2!?]\* R܆5}GWK5֭,wWkOhߔD%mh7p=#Ic _-³Jd^3(Џ7u?5%Q9:2#;3")uݚ]ӦlR/-`YT-XZMNjM"|Ѡ?0ZѕwY ;zsߞolIWH2}ԘL|$N/[W<]mҔ|2edIG\dm^%FPV2ܼNB/_ANUv>{Wx72&v⶛x"9]_Z7̔ݐDL' ^IIഠ~%LL7ݗWF WU9.Dyߍ+V4>un}%| p}.zQmk;uIŞ.[W#fCεSk7Mǭ8oV˹Po]vGa{~|8,;U?f<ۍ]C;eE/J@9Z:=6ud0L.h~k(}XRy+05n$/ Mז Zߓ~:x&{)m4#z)ߣ/1Uк?ߋ%c7]BN~;|elTs2nvlK+nԺjue2"cP"cW.5nLr?W[ð5ط݊]V0. m$:!9*HÀɱzFH0 ?vHړej$.TnEQ"sKs1nָ7@ ka 8slt x! B^.IQUzIrե;S{Sʷ Uԓ,4-o0;Lx„&KLFn>LxJQ[s&WyF_=ӗRC^lK}&ј'HP"|"F+$bso"_ @"H)J3vT-HV'TU+"^1wN.aYSDWe fQ>W|ܬwcj"&oaR ɟme_=U_  iu؎+0'Ԋ[4fe+$Ժ8'r]Gw-R˷]!}.aA:G--`"&JNaĄ].e3_G?'-'L.HE<^nRսIޡ~_5&z^+ȮR{1 +<&06pݖ݂I_ep?bpv5Nz *tZ_[]pޏЬKar^<|6 rpY7(wX:X1j0&bfJPvuoaŢ7$I=B9j~)}S<%`}E@}D*W<*A<ԯ:΄.!g_ϰֳ5$:ZdLt׽xbe= c"/kx(Uo T[ w.&ꥌWIr#,4g+w^$dW@0-$YyBvzsl豰?j폁 r2=y5!_ܚv\ُ9ORb"F,Eʚ:–pdf4?=߲q@y> ؎bW{Rݗ. ڀ>|ZYh]ڙ T c_J h@N5. q~NycD&x3ճ}[64`]jT&.$y&̵pg@xt=(9ZB>9B$vި랻M7e.i]Lq]N (<^.4jQ[\8 lw/NnXbmYDZ%r;m)U+龍 /B{uۢ1PE3k?LdM|ΥeۂyE&3QOu4-!77D"+Q/|6ܡ!SR?1䏡#Կxg긭,jAk; !d#2U9{G˷iz8䧼w)b avpRz&1N`+(Ж%+ da]޾@2qLX #$}T[֘\wx0ǹ-*~<іA~ywP^=g.ܳ?IBmrif"e#-uyH?XsER@k#7F!-}'vIWhlI6(*f4x&eR+Jϗ7ZDGa(HH`J0,{wI~6|ҐrccqӰ[zٕk`PE#5g//1JSxrTg^mDGP8^'"lW| 5}9UYӏ`@v h@B„.N f닼{23&$~"l FK+lC\K~X$"o uOk+I#] R蛯] ̒,7)RpG0 זjIE,1L[/}1t.W\h})$*% oIIl[,H LJd q`Db`&q$*ZmtfS{FO!o~!cТIčv x[.mD ]&#U .вDX0Ƿ_SP+\lw#+CB|hF'xIZp.FQC !pI6,,uԆ9#j 1U^!,xJ,yL)GQj ! S`5C*˼}Xj'j$Y"2Wi_X8Ybgi?P`/6Mipi&I6`uVUPDm"F9DU%32QUX#"[^$kd[$?~Y%%/-,Y'IYϒsočQH Yqs=9>lM1m/fg9dcd%`d؆˭>C r*#LI{%;$ M&x0RV5YIV%^dֆ(U%εHa[tͲlPQJM[, Csu1v!Q{Lr;ddH6f-Oq>e3FWq $hS@+S: bC#Xj _ W1C& TK6]p!fQdP$f>Nm/1!F6[؍}rh $ I 3dd`Y&H E |"Cv1pP7_ Tr <ΟEko1 1B4CRG!FaP,Xco$?6֛ځ9(1ɾ #;"]KeY]=1YbKq=YЯ\:V l NIƄZW1aq( ¹.#M4ZuƔm StL't}F;x6.m3#N`(]R@V6̧v77 iC ŦT{}/H"q=%Y` b;fDA<@OJV tA=v Gz|ܐkhF?k!xL\Aʝe26 sW]3m9&yY޵ضAwSdT B< .""֏0sβ:}%| F 41 ɷgZ c, { _q! '>~ww9ɍXn0, ꂟv  껤 +LkEk ngw!6"\-`4r ay ]&n^|%$6 Л6mW$)XyCE0`Mp}Dʆѝb?zfV.ʞ ښv'Z$̈0V5#SOR.IlI2M1:w A$F6x=e&G;*W5W{A8%$9%DSHJ$Lgƃ'nHhj`ǰ:|71Ṇ́`3`@ M - 94[5rCZ źL j?&,>7^J 6XSVK(U[sD=fv\ j1:A ~;7SB:Y}d[ܳ$ApA!0 ڪ"_ [ HCi;&h؃k$\\*VZFȣ )D*O>%j(I9\L$R+KxoMRlX# 5lzy#e|ht91)W_Ƭ\ lGbtDQ7*ߺV1_V䠑B|֡"H- QNDX<\YO2H }M2f{_IVkO-e0Ӽ%O,s )Cx<'e3c& 9+% %uq|X?7T!A3EfY\Mq #Йl+c:]CmΨljS1d/ޏ$0s׈|= S,aS}1)oFKwu-8Xtfi:&{+'T9*⏼ZpKɖVLF.d o<O~6$Ϡ>2,F~X,TಭVTI_S< KfUJh#A`BmECw' ? f ;6Hך:PE3g$L;I$ĢdQ3T8UDE3^I<MpV@Eg2D{!$ T>$+|2'+hmuN҃#fYI)Rġ0uaгݓ^KKC;XyMayig䫒"e\\AOR!?(OGxbLEDX->)yړ}$XSQ8Qb(&"qz:- Ya_m5-*P"EMH#r;ܗI,sڢEObE9 \F#]SEԪ+}q"\ | ,'QS$v\~Q?܋ɤ7[d0܂ >0Pg)%<ـjm3RH"79zW !F%_c$.q? ԭ튦@]\ 6}AC>C5J*D1"Z$>PDy/w_`q#gQ  ͻIaInr:MP흑zcfwFW(ZLXTZ<,!4>ɡ)$jLhk#h/j29dȅ#q hlS ǷBY(1sY%<>cS&LSs597&\ ]Q%a@ߑ6.& Eۣ6AH<5L*p<3+Jј6H ^6lsb4#XX@DJdPq I( aւ au8.K<F"- WְlAvĆ!9V"GVQDg B Zw,Da}܌u"ښwvH" 8 <ǖO%vVi.7 5ƙJ?t("z_(bjSs*irb*Mzu(X d'>4쒝w :IDVAKT69I9#Þа[Urp3P4-L$Yɓ.7oN0[Di}IY"[sLy3R)RL{ :`{ KpESaiG* !.0;-2 B2-&(0g;E0;~)#$ eF2Y16 ^VMf͉"`!M`rZZb!c.ɁZc B9y+B?}T:!In1aQhhS2qɤMećz+ \®kΎun3 Ww;}RRxbh=CFCLyh+br1"BTJ!YVkAM h/1o8'&f@; iu:IϾ 1fք*DWz$orz.Eb ]cbƓNf\)mzX>x7MF=c8a6w ao@+y1]䭀/Y5+Cb#n]6ٯrGg@(Zw2a:bMu 3vc"#6.q)U~ 3([m]]EmZŵrâ"DW; $j6Er {(bCۏBl^XW Tetp7ԘsC{ f'b%>f$%Icʅ܊1T 74TҁKb~J, R03Sl/vǙFF BM+`cש.ls) 9Z:ʺ"!ɏ,gEɍ| x#f =q*Jb!gV%!i!n1`0C*4^J bUWv""npG)aJJ7\l2H(11tN ?Df.Bɷ!lpLAۜ"vDooC8M޻@nUAa#MIxMrO#6E  (enbB sWz'j/RoP#qw_ŇZm[E>qL6MEMDNy6&W1"oVh#.T*śmYx%g5F!*qNBDr3F$HgWZLV۱FA 2-C+)F!->|RbوN3M2oZъytZ&3XCyB VbhJ|+mj7>8bci3C"A$`uc,cILp  JNj6}]sj D0|p_BL )p M21seZrlm&agg/DVì0yB[P]Cq4>-Ktun)LՈ0P|-" M@3Z ʏн'@&B $KD`\6m]N\SRy8Xc@\:5VR9M~JnF*{yC]zҥ7|ajzٻ{ɏ-3&rLq졖b 4fhKR=籯@D1NZ i"ӞQ@OAn,cZ&\"$6؃'1 ZTԩ_I36}sp7 f6/E#Ju)D*Pp2L6R)T6Y&̙v_ Җײi.rz\y>0h ´c9$ɋmb&"]јt/OMi,WW iǡ!D1)w \."9Aړ6,LDbӨ`B No;aXA8]vDlrrȘLWoC|0jEIBCN6(PN)dѺx* iV#U].oH^BM 6+B5j-2J遲#2ң4~~/ o$ M1rsX(LB L4OF I\E;Xb>Dh&*\" 2)AT5*,#eoK=oR>/gcՏ Fi`$[Rd^&6<JCrrLE6hTtY8–D*UFI pOP j N6 b]ҫUbu[tjݳ i'mNZyp掞 zBmAxD0KO (-k"DMwk],2M?^h)lvNn[@\DIMN[&$ws.|PbE3g{SVQ k(ݮcL+:Ob ;-ySP@6R- dG$ʠ§T_06gBfL41$28aY{=iHZDyEG%jOK\ lW&y@C3׆  ͖(*]bfH[GԉVLĘ鎹n  8SḢ,r"f'lqKQH)m/3! Xq+(T,7t@b+cڕ HIqSD9q W'IhG6D5\  NRճs=DR=m8XPHpw䶩1h֬Ez z4*D7v7 &L_+E 76Iі ;6%|\ >DgiQ[oVNN-HMIlc} 8o ]FC6 ihD""llhH26 Amk29,8vKJ\[1֥jPLFy|cSGԌB|-H>!q5lR `pa=L?Yte,0ѕ"@<ý$xW 5& lRm&݃GxVH/s.b}Fx:f=Err]@; Uxsg a`z;=!d^r@xsL?#t& &m4kGJLoK%(`u6WޒO=k,Kh&\+/w٤D[Djԕ=T8=TNc ̬P֗6l[)=(I7$E9>/Y/A|hݬM3W))Ssd#IL3`׃}X OG-[fxq)⛤k4p3864`F{я j.{qɽxսxŽ{m;Y6܋&bbH`eH?,#dJ/Ґt5TPK7DU|K{ZIzO Iw\ݤN%p<Op'N-iȰV.k_c  #O8}g!o"B 1swב{飆\lnyJaVSYqB)E8S$4ȪiI܂d h 7 PqOKfFR8꒕*G61DEl_FN6$t %{T˴,L;RE3>2>2K,un \&GF%o rAp,/*!1Uhw!FNȁ.IQ(>xsh&E\72=I ʆjAI,BO0tC@N?T Gԕ:pʤVD~؀I5ሜh1k4 tYrr[$#pU Q"7oX3yBCz-M03J;m11ȁa0zmC19H&7Vc=voTA녗oRrhSԟZ^ mҝ&jl'JN<Aqn]4V$g<'27hKAHQ`8[{흑AhBKWQ #ws {&E!–6La&aG3_eK{Ŏ\c ڜ\#!pgLl=Pev%!UH^ި8krܲԊD ևwur^DJPq61)+xiG::G3UD+ѯڟ)%AV|-%wF =m%S[4,>.9flƈ"$ ˠSP7 T^2gpp '=)Xg!p1r0aԎ2bc M+E CMqbdsLn{ZJ{FA' ?S`C$L`$ݡ=B w årU((-d^J]RK՜R/dDB$n8xIVmY+,z\vO3Ec.z"Ǡzc\.pGdkkIRN:?Ghԫ Bd R8*3ŽD(gQc|~A!:ƖzMa1*Ռ-m0dzIE, )eٺ ia=%c~$=%^N){TTOd9V-\IjR`rk'VE{K_W`4zD0œeFe4HC#?CB!NȢ,M5ő0ry @CyUK8lACCIq%3I%[@&?‘YʦM{,@^g`ʔín TD'pB61DY;T!%MZZà.U=&6\_ZG{I2۰gD3&nL(r VkG85+qMlH8x"@E*ml"”HLТD8l+mK+$z]mSb2"sv1 ,j#r*8@0b=μ(>tj%&=)!scS3X7HN+#?, 4XAoG]͍H,b8 W&t%Kxs TD{6"ՀF.H7'4E\=JHP.gd3*s' рCLycjOȞA84ԒBo4w"L RRiM(Gn ̓ix$X3aS ̞T4bn|4zw`ֈzq؛%pVW$iI CkQš(n."jE6A֖Fa&fpJX+}(>+R]G+7&0B{hɀ}0b 66 ke)杭Y d|sOKD~*XqB?"+6𳑵$GڠI5!:bE>%MQx1\|²aEOd"~>@!`+ rL(s`CKs]DWZsDUy'‰;v|ʨd |w &Ϲd5Qgd :390GWvliːe^ 0Vp |*:Vd}p㰉SF&>\bL"Kd,a1q㱙 \ jQqzR恴BtsE&$UMnbdL;nQ%jMM7q1q*Gr\;c_"6& >C\jmYdHFC,DZQæ ҋ(|3u AOTV܇`s6CAEVᵌ/SiDxὄEGjtKsH0{Q\qޜ,"2i!2k H&%lȂǣ(1;:gًG-aks> g,xx2U)m2J76<:7>uY)yD1Ժ/ڊo8& 15R;&YT89<2sWgf? +* ʤ2Hc!2؄W]Ɍt[."&㝸)DOs,,.Hcw5,/ee8ukey٩6Zf")!m-FQ3 yʉ,a9h"{ȚLD,H  /#u&a7:N:qN$}s^ɞX,LAA)&ݹ^3Km I@H,u 09t&P NinR0 (~Ҵ/J)ȺB08Kvkk+axdnU:q엳G]wr_vw*&~̽I{B_[e'갠.l.e]uy."s37Ey>qbs)'v6Nh*g$_lKłc (c|#3n;\a-M2I ~7j<=c'כn;};uÂj[Yl*/P /۷/ב)N'f֔P¼JhaN9,UiD}ћ]EXYm,ޡ8 4z_t;/<86^npO _$4b'S})`yj)s?ꙀOACũמ1,dn#7G|]L論M_x-e qgabvsrνw WB:Oy^)&IP*@HWgs׽BYgWJ꓏ӗ]$5: ]vWžF%쎺W,Xx*mۋw$T~ه|@ZG(99Ar\&&"?)od9!#˩is '?"ktg~5UrGaT?NP+wAݏGrrk㌽DѵI_T25|Uu}"9$L)OK_FDmf!VH O>eI$|%]%i( d4y~Zjj _5 ,(Vv~ !Xb|"/FбiʹVo=FaRU÷ߞl;VEOYWr^>Mtr8&^RbT_G%- 69y`)^OKzbډx&7zۍ}/%t>rD #Eld3;/w_rt+ 므:C{Ai}:=}w7Dt\+V,%6sm8j)IY&ɭ.pp?:o0͙Mp 1w',3y|VEn6q|Hp8@U5)pm #ֽG@+w-*!陙2ʳSq)v3AJ>5mgͩxGyӗaFK0#O<RFԹQf.Z4?tCLC>Mj86bG}PS?gHK( ΃G5Ή( &%+Ѥ̗IQ3[C}2eH91q;g8"tBL_(=FR KBSř} Ku?K΅~5&#}2v^~Zŕ' {treI.mmPSk[R\\.R.۫RY\ӛfMmmzZqu6ƍuKo Z*KJ[啍uN[YزdDVK6*/l鲺P+o//Էʋ˸_\)h\\-jX\'GvJM׊7uyG^^(ͥY^Yݐ!7TYՖk+Pl]jRܪGWtRN Zim+zLMAoUiPvi^*^]+W zsy͊*FP) oj+K4V\Ya|[غN0M. X\JV,_כ5whX^Tnmj&V*(H sJuH0[YWWyUJ7+άœ @GHHݖ+[+rUVKlzŭu^mr'C  C#86[RR-{m4K^|~ϐ7J?"4xnmlobk^m[vI_үhlKt~ =xI'}m7OK/W{I_*aq&Q/陗竄eNzz[*-Wkww Q )[+WUlNcL8O;ku{(+Z+/UUf~* [Jׁ*kr4* S_*+RlkkkEzy[(K42m­ZyH8XWJKh`yt[4"zOQpKY^XݸRZUT]/teF FUjDݮ&q닷 m Ц^і[7Dh_/EYZb P omڷVY/.KLu:LS0mmh8lVM" 4vj o-JmcyȾdP!嵊6׸^->EWi3ւ QZDױk71 -m1\V.T'Z fneH^iuYVqkdW& QAkFDlld-s^1+ eˋ8h+WW/цQ;/+}TlظR+W+@6no{Z!RҨ6pJjJ DVo\ UDׄo5l"+W)+4Ž"18:(q3*Xo% C7+X2aMrjJ7WXCb2Ma4vt*,i`l`ƛ`ii[%-7q{sD7KoRL ;EżX(o&A u^,VyuHPanW*eEjFYJE 7ցiRXcnǓҚo ҌI5&eqxX./Bidwj2Im+h@m@ipjicT!2FZ@Pg,TAb+nМYjMԣBfM[)'ES0Ÿ)$ZՈ 4(#\+׈BgkmՠZ7#pCA!Ȁ~L/,q.%fX]:e&CH V%Z\FНuE02hI@DZZvF[BL+!2I.S Zd]bnK-%#"RZt)^!yD΋Dp2(}2.JF!RUMTBҝ6gInDU"#6qKL%+ ǫ5 ,olu D&oA"{ iAr:VG^Ef ,(4M Je6L:N"S-`abd!ZB:,om{I݀1\VҚ.ވҥ7i^["Vl"O" c!l=EiWbF)d In1e$V"I+#4dꍫL6M@w@MHv CI&4ZQkD8AK* {"IUY-O44l"7I^$scް8 JM`yX`e{kݾ NQ4}ia5)BOie)$j;n/z8hnB}3 *0 Cpg>En!Zk 0D-,-W*t 6xdc;KLxi}X_z%RP֑@wVe,2t,l,c5b,"sek6 EXy%k)2FXCa&)v$vAS"|y K"L7Y݅9:+%1:e]%D֠1kq>bK։K/YDR0QL0 "WYX&Xפiq9NY+&;uҖU9T9JC/.n]]*ZJ䈸-گ<7La`&Vme2Xu^F\J< O 2`/" f`V d*Q6n@Q'XN)1wIcBTdue 6[-_Ju, SVlSH&Z]JLĻvu(W"&2LQ, X*أGNtf5v}0dzèA DJ`Kv52n^EcL(Qd,-h$# 4+lh3]po "xsΌy*vUߥj"EmMk ;HWUe1HĆ )+>ra9jV*&Gj +lݲ4FV@"@W'ޱ޴U bu*0`|27Vi hعF3&  .3S҂6= ]]YS5>f\hEH*o8;fn( bl-Y zڤyjF&-GwU6ߒOv6,."R2ۙEڋs.7,Ƹ£a6`=z-0ywVWċ)aV^e0Z^lmeU9q肜Bu[`) 0P$ZHsYy`_-KWȷF'N׈\W#VP~'؆XĮ, kz E7,-&F" ^Yˀ(#~C-_$"qS47QMV P.K qenb{7[Yc750.+d!8g j&a[zט#nPٲX!MobDhkkFM}M k+ +@0D.]6PB`:D̥4L2 tƴb/?Jn J`6z\LvQ`8$#%3vCv6mƍ ϒ{ tQϕ$p nb9 7f\b "W=q*,:^l'Ri$c"8 cرc#U"d5ޮ,W0s`c u`D"ڻF "k$`&Z*ފuYDd9hmM,֖*4rWbQY~wP&g6{AMD3DM"fj: خL!ˊ_`$) )6К){ x[75BFI;[=2iT˴gj_"E{0 yl*k` b~@U#=&k+>J$Ơi@5\7gK mnqKa=o|6{'3YBDG8_hUȤb98e ~CXض Il@eLXlKEA1R7EjpL\e~IJB*bXD9X2#ށVߤ{bԌ&B7 a)j&AhSøvB]AtEW/? E HȼC4*LX7 ;cګ5'5WK(ڃ&bWAb(#hkbH4cpӘx͸X4aAAB82a3""gHlc=ojD^@pHbzy#y)HbUƤbaZ1+  G+U_#nA-/ʴ 2m:/hDcv`1PChMvMGt6A *`Q0j^۾F*%D&M h{ \1(cP~D V f(q(څlVJf\1`UI|0n悤QjH ޢĔE"5?7=ND"IP<9x҄glF>nZF#t#M dx P%^xqFfҍH` ȎPw+(zoq"d%3sFgb$.L܈Q~T nA4x6՛&Z2a/<0]l"𓨃 E6N?^7 <"-2;'Zi, [ !ycӗ2A|\m tA"5s"IfE$03ؾH"[ ro14d'rTiWSK`Rv 貸جW#D.*Kd 7E/R`AP42= I#$ĈFQ&q#ӫɬ,c݊C1!bѻN6=lla ޼  R *m LH/SDď.ez:2 ܨ7<:Rܕd #MrGI{nb=D3D:ۗ|9SЊS?eMI{KbmfT|kٹy6+pB.#! dmiIW_ti#WQ r;~7 _I+ <ɯC*/pdsҿa8&q' M_D2Ci)yfߜ:Dj(U}BalrdYŤ vF)Yr*}*Ƴ˗ 0/E˅''?DP+-r}|Ɠ|"G*1311J?+}%}];~"+$rcL!75m7JU7Yh#4<)bé~򰝧0?i/5yy&^ߎZ}NɂN M9uQ >>h&S^K?\3w{"3s-?uw$?IH+.23 L̈́>Ϙ#@|&Mo.G H{{FiFȌg8n&Dd*/)7#Mѩۅ8j?[T-S8qԌy=|Q3_?XOXq9#"OHc6H4Sk?T^~4Z.<9 \sGhU^M .b l2!#~ٸ|b_!ѝiJdk̬b? v}'4_eGS:\I_uDu+0_vu/sdMC:A0xn=lN0V7x'&,ZݭfL֬3xMMGSʈ{mm5YPڛ/8`کN;-"|d$Q>[Jӗ p]x38 Iw6 YɜLX0 NyK>Ke>Y|8W'aV,GDaOYrO=O{i_Lsmڞfd|,V9+?;eeo~,W4+qXYٯYWPxVY8.?X{ mbees~2E);_ q\$_u{ : MЋquT MIa.t4_2|+*6z?}8uWNo]Z '7 0^SH~ڇ[;a'E 3??D~H '7, K<%ɯyQ.7a bi&)EG V'9"$5G x7dܠJs>Qϓc xQp[}P<:c&:f3yd=Y` uzDsj5}%\6 q^/+`DIs88b~p#qGgiC37O 6n}UduAǼc"SVJ(I7)n3㮮I}~%|~!bNgJPǣ& ~o&^TRuzԃПp|N_CZ ͓aq4tT~z&*OJ1qv|?Iۇ*y O,C'Fyל]WSa)0VY},4MY$i:_|dFLjz}zzҽ8:Fh3A jQDeͲ`i#bn폻'#Z0wo A0De%u"@믷-ocZnPt^-{Naؾ-MVF-=R60 E/8=$PS}.pG/=h4a20]w:[%:TV>MBYO_@=hFh&JUiqz!~ᯘ@r;jM{@AS;47j(4F*Aw0lYV6hop,` jw7hCݧ=|s]"jNP`aA-Fۂ#Tp+xznQg5F԰~ff41]Ђ3<\m htުor*Pbqx^w^Ji վ#, zQ!- dU!Ru;i@oh B]r|^O6N?jDQuyeN--q} C7vV$4YtYYR U7NHh ۃo-k OCt݋RJ44krsWm+P\=h7h5PEe_L%֎zt׌"񘖉 1.Ӗ-]- ^VBMZ[S#\zg0BN9ruڑ Uq3Z:0!bccoFJ}n]!VoX; ]ʽK5`ݘ?RkM08QX! :B0|&ѭa4}> *ĄĸW9E榊I"SOaM”C6c@L l9@ 'Q1&ʉytʘ2Qij_zZdo_O=9Mx%(fJ,S+pmKͬ҆Мf H(P{@gʔ q IusS.MfY{1g1o;3C,X=_ V/ݑ mM tZF(|5N- δ5JX[$zVKz#"pNXYɤѩrY9{| ,jA-/[|`^_ [R\Hp=o/g&dbXn-tr`Ԉɣ>XAi3.Lo8IcH!ڜ@˵>'3@tepϰN+! ~D6jR5H #AjTX#N6!I}:kG=ˋ>h=̳uzbG؋ :y6I. ͨ,#G{أ;μ1׉39(كt>0Uw.|f9~  ao&eC_8[`G0Q9PXU Z&Ԋ)j><xK#`/(ntl_>-od&b20q7`EDj( vάwH5 =pg # 9<ОJf89J6KFz16j'udI*)zlJRi7 )}l7d Ij&/< ܎T=[y]պ~ukzpQ-y{2s}+n+gƣh.iwGZ|Dn#qv7sz+ YU4t!չ*R }m=ӆs$7ŭRY K=bAE-"#LY`0ofF{D C\O+Wgt?".pPO1ت.h^\KD\eΡ'a3[tkJcqV`J+G~ mV*AcW>(iLYChGǾH_ z]#b  GRKqor ڝ|blʩ+|_? 1͘k?`,d2^8^e$nc$)4nYA0:̎IkV~LTr&/ ~'Z0mgx/{ʓdw!">ܥ)Id3~?8jW8@pq2 pfQ㟦O%88·{dUXH*\>{}4WK3RTOTo,;Sp(,s;W|LsF̼G)EEmrR;mr8`? ~;R?>|0Gf"$Tᦉ/H BsS-G-z:ʾv N> e.'U1)A"a1YW&{̹͢yѓk| LH=zӶicVo4;+K1o^5r}n _nx/8lv\}iBfv~f^A~{œ U9v|Jsϟx]cb|1e_+?{ThZQǑGoJE 6ꁆ3 s~>P}V.Ȱ;f˿9+a&[̳cS.>(p2InVb/ei5i׬_XSˮ=h!9NB1U/L_GbҤӓwpN Nq:Szg/\<̛> 7y. .<"n;/ݙ|B?LN'&Egl<7 oMlC>1d\m!6ZYn4հ3y[if5's)>>۔?-S :7±NQ.7VnbԘ_sƜ<ȟ-YS>ް 6糋+6/-ᇲb Z]P+gZMTGN 4|{ֲ{gޮ ##,hp~g4#2v3нP|ӻM@_z3_.ܞ{Ź]ߺ矽ssqw">KVq D4ҫW^"Z*:*d1qvPUMcHup8l ?jVE4n? V4K=]d%#=-'dE F }&ﮔP9c4QYN @ԜG ˊs `uVϾ01h4'Ɛʵ;L3UK<(M;,FCrށyf/VYa蝧{HN 46׭9k#~#zDl(#T˭`t02"Н֫㮆 %dVeMN㞪(\ŚLqq^$Ʉz !IDJ 8_Z2k1RW?T /ǶꨎɼԈ P+ϼHFϼxpE$3 _ͭ;K\vo#wo?vM{`A=#ɭ0d샐' 8Wݗ_.(/eFY'y(p %h,ou~IT!-B&} ]y<8CyH!ʨZ$בjh.}ڣAq5b5 y{.2UA%X4ʰߤD_!wv>0V=":,?5X6e@[cČ"d r;0owڃޯwRT@Bt%x)]t}W3K@b21.:/ƹ38߯Zn0^hb{uǨ1#PЦ~ơF٠ф;3bG~(Yi>+ڄVج\Gi/m4HuDsZ o+z87H]#_'oX넹kz"F)BP;, &vMZgLVM}E:tdgG6u! AFW#HUiahQyzƙ&#/±kjNT. . `uxvv1p xPA{0?Z:Mt"APnt aHY[%"^@ ~  CnړQKyh7惚рHP|S{PQv %+t5 \KujY J$-Zo +zLHAнȌX%֍,ۢ!< FaH3Z4tπvvmUc,UI$Cyhd>Y.A}F>Wxk%,nyfЖww{fҪ,2Ya2(L·<.@_ه(?-F xI ]Ll,s#"H4L$¨ B}(4<w 2P uC{}4w;]QŒ~avx:\è~֦ʤiaݚR#7vڇoMu(a-,91d5<)w}P&P}a z7!;XfնpN :.Zx!!S.{"Zzrr;$Ѫ\w!mcFqqb! _\#hx#.\upaS^Mꩋ-O0AHWAw@#'" Lғ c)cЗURGi%eM &"c+WP<խ~+Yj^ຂRTf;i)@CoG@BuʝEkzI`M4x=v r紋ƣ=O;jW뒂+2;,ˈI`1M\?5k:lX"l]> fK,$%fLuGLNi(Z$'."89y2\\NjgiS]X E!t0"5Wa Kk+J-Vks[i"ŝ=&;P$HBׇ$!@4nm2Y6ZI `I<َǣ!VGG>bX_3g 0![)!)&"ی&Zy!>:LQ K x3~ T2j64H!c"sN,X풯x2kdԝ!NjA,U}H 7R;fц^ }AȢ^\c95:. ixaÈmk:ٛ V#u7-|Փ+GI0aAЗ7Lnl7IkkŦ{ MLwZA_J ̓ԻGQ`MM%b1d<Ʃ25إF݉Qu4Dy>n 31x ЂY?x3rBm!AGbj!%Hh$B4Q9TQL,۴T-*bd$ێ,@p2 TY}\4N6%ڡE vFMZ1$.n@kI$[P fEXDp!}AI=:W 2X`Q")<_gnC5NNE2%n0zB8Pq#͐'{^{DZ# CO4-kMi2C5%aMRN|3ɧ٦$ ˨b# k?`iFbg@&\M8E19{ǿ&$kdֹ5'9+ՆhMG<0@h;74"읦jzg f DهH{~^tCv o~<6d! oEwЗI?!u BjՍ.{v VDɣ74 .ٰ4bQ`d-[_N ү} 2 &lxg 9@&<ObQW7QVDd"#E.5+_"CNqB;w>7y߾S65j37"z[tmG*;!Yvv:Nb5c`B_"Z">td}XcՂ tX6Y斘aU#_mBe;=u$|A3`zz59ǧ^ml;|,6g'Dzq[䏳6D2CG~vX[Q(\j>hטI7$jGd#䘐 )Ok^zbHU?I|>2$|2WyHHa}4:|$ H 'zgQVp0BFn6ٶX'eJ`,{,W'Zǻuh];  ?<:wk;4S?㶡q{`E%\8"A lPVOjTe68UpшmOn&|L't$aY**{XbЌ@aTvWC2%| sJ\^'mzW"d#"s@ {E;:j!i҇L4FB>+S,"f&@N"K469G3jq,➝9("uxRD,&瑇w o ݠ+^nɃ:דߕhFPIKweqr ]?U٫D׍I,=F_Hn-2bMbS$w6!F -::8hO=O2)=`glvĿ}iX$Zl>*DbHvOĜ1DL;ftn&PEB S%z+[x3 }v9b@(:mܛݯ*ڔ;0Cfﶩ EJR;g~$5@XDXҠc]G}'ts' }"ljI k5>@qB] juPCBpXlpHL`D\$f>?e15%l}G*`ѸG&h$PM $AF8}sz :w ,%!qwJCa)Qһ- hn(w|=:yChpe Ӧ10u w k&!Tuԝ^8Ӏ1#ȱYsšmWR`{ĜsCF-Ϩw%0/I8D3rmɴ+m8aoK:= AeӯvjzcTѸaqb@:! sܤi?iOi]8|SB+&1 [2L )yxTodgJߞ09DFsMRZ2KxJva0_&i&1L!.ܞ ;V&;C0"'hPj2oi Krw qu'K8kjHxcQ@nm̸.7H,҅}_!~3\ӽ/2HR`Gr|2cjvj%%)@h{C1ќ'y8(/e.WԢF}UU{R$pG&Qpg!H{Uo=CVS[rML"{>$nd#aD"- 8A$ﵑ<K *2/wU3T/_BP?Ɉ&$(΋dQs@LmEfZjPd'_'G&v?#bJ}\A[dD/Qe_.]mH K7x8G܊l]U/|#* Ze n _z$Ѩl%0"aMZxxr،3B+L ̴{G~A=|F]8`d(6$pHb~)y 4m Ng{M ZscpOKjX Tԇ]iC'MO%]a DSdQ&A:qH/- CQEXL7b-䤂"uC zGDOdz%4[%_ҙؑ.IFE m2dYhIކz03z11CiZ͕c&UѤ=/tHF`9a U(LR®J QE&~Ј>CxXrԄ9chB87X1B4 YGYi ~/M G,l?0{'Nc~Z>0bb5:B-%6YQIe$z}ΒD`("`'& }6&KpdHj$:h5QW/%ޑtU.9 %+ 2rAffB{侅qG٪.MMim1bwz =CllzD&w`V٤|L{5J_!'v& Z ֣)xX 4НI$$8N&vvىB Zr ΒaŠVaԜ\y,EWS,} Z\#nDv|G~v%1*w#;bL& GWIBV˴;HH@ JG8QԙJHKj[CӈBwUS,ZX1;.mᛖv]kXBWE6thm+ꨞ:4iv @Q>P|b1϶[wX\JsDYWHJNX$te0 (l-YcU]5nyVj"ʺ(RL@Q@d) eoL4h30=pvj4 #k7I =1lZs"C0g56 +Z kNkfpKŃa+GBPq "B^wJZD+ПyH8 "μco`s#pX/; $ sO g' `>9-j7Vj޲Nj dC%,p u"le EP<=HoΡ C_MI&{38N 0i0uQB1RNHeOҬ/0e7Me`9]i~vLbb5BG!wzTʆ8Jx@::Nb)E&[ 8v!6q.$t&-Vg$I&:!&BEBJCsaWw!{j/8}@Hs. 4"y@Q]qBN<#bWY,Hr^A8@yj?j '+3irt|"Y'E\TPU pF/\8N^-" BByL'2[ v L;Qk&uCIYL#!46RRYS:bXM ֍F,mLlIe39c鶽 ,ʤv:ޜYҊSsTQa˦fѸ$_T[2mTsf #-G U?LZ,3Ě9pXorFJjj3߅aDXdƁԘ64LL3hߓf#ܡy:njà;/6^ {Y^"g 0{&.zT+ XjI&@@Vv=N)-B:/'FNI׹Y BYOnd>j=R.J>7&ԩ7W(h'U \ +i/y> %Rn ENv 1[My_98+.?<H_4 O6 wB_nɳ\='dQ(StGGbB=0Z0D$nX}f n;\郅TScZ/a -&FF*3IcO L.Oއ}96 _3Å6Mt[AAaGFtU`hHFfNбޱ< f(ї,:^ikrjr!\ m Lݴߥ.Ne HA4RV`})~ʺd, `5*N<`tc?ˮٙ69kis~Y+_J8:IXBN"ۘaNGb!TG~k)2H.\`pHmP#gkiG֦%n>guţm#9dT<_MŤZSĘFqsj]ԃ~l4=v.w~nzI{t-I]X`73Cx"9A&G2 ]f4# 53=[vw<CAc㥅?I9$A$ [Wm|O]l4בmgHP&L|bf#U!!W8/S}ǸnwL&/WH+{1nfis<܀xlQBqX7jBOqe&ZHNvb?ÎJieFYQ0G*M\ǘYX/cMcs;(IUjv 16J@ &!̵84"Fܭ%g#;v K#Hř\&íotkY_ Y28T՚ב#s2JuHĺ6.ήC=Mڨej=0K6k"9J"U+ԫ 뒗pU15 S0S%_C)qT9SZ- >HH]Rϙ0.Qܣ\7qTxԃDèء(6\Tͱ`CTFYjiHvs`\Py0Nk.*:̀*iD~>ݬfL4 Zo~wpXA$7{iO3F"gt  q:!3:V69zҘNi)xs}I)NQ[N}+yg~FJȯ)mCRo G'J"3tw"OVtXF`ODmrCj^7ѧy@tTԅZM8P0v3aii/v?>Db|pO `nr}3{~4{<窽ȿ:"SOzk哓HΚ/=0=>J:M_O?>z}CG>&kGfߘ։QbG]} /nl\_)RY_-UFJon{:(:t,0fRgS&I5BXbJBqL.*mGNLOH7j pF?"O ڧ!ڪg`Pl_LCؠȢ t#qezO_)קo=Oc=ZT 0N\j'y҃ڗ]7`ۣrctdg_JF~L_!6~|Ь?OUR6#<9h*ҁH >˃oMw#5V{CZf߱=lȂ8 4Et^ޱmi? 9NI''+MgI!Xyl7z)mawZ7ѷיdGmwtb&;$~2\M\QN?_ɳ3k $bɊ]S<9OZ >ǝ}[ǗRf= \T{rgfMı/ =Ok,| |Ac#ׄG=Deۜε:j\G^oRJC4"hNub,Go_=_RoM_۹t|&]\%Q~2kdw;;33ǧtxϒj)m}zDCNl5Q{q\iob Aup`95[~"bm$hC4_t>BN3CFlީ%!ÒyCu<&T7m2ǭq3xSt:nH2R)zvmt\G{4,h\p)`]`*ray%ǜkԓ*XSxt:kL]008DD{oyY T8(c;Ȃ7"\s):[rCڣ=} :r*0|fp: Riz ښP`$c%/줉YVX?ްZWHvڨNo8NMPm4C'LDL㞑Yr37ϧ?fWO:]%Bθ]=0SNsN_J"Γ>fW_vӟuʙ3NO_{:8}~'ݞasq!IZ|I=Ns鐡gn6tL3CDh"I%67cązt+9hݗe\aY=}مՏ*|9`Wiqhy$ ըlkgح€Hi[3rL܈Uyjy44wv j Yvĩ[s[۳ #bet[g? g%w-j3mY[ejo>lxƙG1_OgL?K'WĠxd_/ѷ$oن:^3D nH1iQf 2kr' )Sy 3.Kʬ'cNQ7ס9ymw#?򽞾|>`dA}ct!$Q8Ap\ȳMo 4}19nơN0SGIP 3qz,|=0[(]1-H`񌩏F=_U/n&g ;Ɵ0oW/bFxlJ&NZ+͒HPvT?k?±۲ӽw}W]mObwFmN oF{~oCr?[_{_Iihܩ2,GVx#qr=!B|qцhJ>!ZY7y\'sG~݊Q#Gm3q\y _"/&FFbyqker|GZ9j3I)zÍ8n8nQd^ͻp?3CF\g%cQ›k\Wa~P-9)L2l/یzF2"sl$!e9n33Q#3=4" gf]ף|D4e^jxi1+4&M?BiF$,k㷿(刱nbڙԡ.PlٓӇZ5ԟ؟JJ~=cNΉ]5od Y^|qFG':okd ' ]htc>>曹,'?֧?2B3FmۘV 2w%9%zpwNp>V#"Wի+%Y\^ZB6,8=:(n]}KvE+K-|/qtI S<%Dw_Fp8_s!'A: _j~e6g~æ~gvH/ܮR[jV{f%5~&oKe y.ܙ.PZ4ˁg -oeu!+q(|Rh&ӓp97. -?p]M>tȤta$p_Hڏ~#kH^5t )Hȇ d UN}wnB'l^Tw|≻fl߶;jx8lƁn?9= 8RpT0hh'zU]{ׇuݻg]xgR84i/^m}?]>S}5!vK^/dj +{Z3]BCf3G6PFv` >t qRN7a`,qCr%UN8^Nq{ 4i_(F& "@ttIsi)vG{8Ɓ#LI^!!n}wop=|}T3&6w=0Oo!::uTуq'W+.Ad1_n(kIqL z܊@kEX?ԡ˧p7 .fM5}podd|4"#FB*͸1c-W ɂ"'Z ho9^TsEX`;+nW6V7KztKJR\ڸaZY_m?&HIfb9f̯D1Tv'c-ppwxl3kr6;6zpȚz:~7By/`_>3Jޟ:.cS\ bTD't.(>Y j9_A臿=|;sc46 )9o (jX-TT?~'a6bH. ec4vB;z*sX 7xSbVLJ(]Zz[8n 1@ Rٔ-mYM$ٺ~n:4z].j|V޿^wr];9a+jvu⋺|y]+WWWkW^Mna5hjG܅/~Εg-l.5; _7{3 ~ggCq- %y1zDQ9H^dtks 6Jl{Q Z;y-:KyWš;էNU4Ob?Lc?h4Lku<:CDKuom1++Bm y~04PMޅa>( X Igjw{di7C16(;AGHhN EǦ2Xr[xPa.>ȯ܊nX͊+Ѱ>`laL.|9I-켊Od p0}PGauHAv8 b=yZcՌ~~Iݮn߻z#z]7zNZ{)0qbퟔp)_yPdZ_ }.-kH촟?3?yx55Dq wAqv}|?W}= 9: _E9. mgߖwi i;yk1Xr,\'F2H~Y+xu%Fjֈ fiwyw5<[-=-R`N`}na| &βk}H`c=DZYGq2E^{ =sg,R*@3 Zf*~6f4^TWs}r@(+_ +j)\4ֵrЎA?kq` 9C* @.~2!I5A>p|z&yxkdC.m~3!B o~d7lJ'(%w@̈́I4!L:dl,voW_yrIv&Y %?,C{^<$x u>WNHz}\25ܜ(3:s3y Ką2bֱN Ӫ}paeRtbQBiDBw ݏ.Y`-87#<1v~)됭֋sG{ HGy:vϝX+;wr7&Oto6aw1窳wƳ )~dk/'yFR! Úy¬VS]_JYfYB"ʳG߈-Ga3<&<^?7'5A$poDEgN;Nd/r{c柛NSG3=7uDa0FgTsa}k!Br\ ys>~H{&9FgM"wj.A~3bΕ7/wS7s*D$7:bG?Y()v;yqt^Α^p}22wZQ=_X}_V췮T~˄Ͻ:l 䴽;$l49x2u!kp shlr[9E*]~6Mt}e /G{^D1ɤ0Y鄌SLvJ ѝ퉑N9,-i!Wē?`/On;V!K|S]]Ѷ-_d@!;(hjcvo@u*Yeߚ~yv.sq t$.r* =`ozԥ繙Lvt*ma!;! 0ke_A,#z:BǂUd+w^9D9(r3g@Nh|S>373RϢM]N;ψlUz0҄?z Cȫۑ!v]|w&dmF4mH$k$ӋߙeIo4lKyr> _0,UPҞp%0]2O Oj:Ep]4,iB35ߔ/1 ų 珹~ɐGc|$%&7(bf\ Lh'qe)0U  oI%D6gRg82tioVbg5z}SQB}2wqc"/;mZ>D]h:ÌΙSxMgwצC!0|Rdk?鉶2Lw`M} jV?'SH]*2ǤŕH_s.wDVwo}x8')xC)|p)bSiXVSԉ$a2C-3%Rŷ[V&$6jTe]Pc2?3ܹs'&>]0}3{DH(ۂ㸔)QR/z˿,#f+>1O'64,ڞ!ޮ_@|0j_f:袴=zFA%-$Li|ӷI Hh/O?tYēL9l2ziKO=U I #}n'A2q7|woW @GvIǁ.[rvu"\w.D?p~$ |>18kpC9,R4.o5]j؁v9;ZS5 ψf OSm#ݿz'RJ~8֛Yr|YB>'uEz5n~(9t;Z+V?~&vgq|)3ޞx.њav,x_H?JszO;61nYH$0PE>0Xd:K8:d'\47fkQ`80LYeI"yPNZ"F{NhQU0h|Xo|phx(gxhO& f$Ɲfm64>rhïgL:?d)+8c%&@޶ٕr 8#Ҝ6>U eC#vY{>2 `%ǟB=ϲBX,)MfAJwH_A;-gփ@nv fBU?)<(%T#:0JǸ<+8hvTP4L!'0iePN>*KʃJ.*ƀ8ٚQ8 yf,fFTNoΧ29#'EnTC}ʥ},mLbpN j2~ޥL^`O4CeFe/>+*85]-M1g I2ug0B|.~DE驛n8!` YE㤒W?EMՕos֖gtcsӚa:~I- {*YKNJMz;g9bA8J Mч6!L@5Z~s~[LQ8J2F!ս]!rg!ڃ m ɡJjiW˥\*VJznV W[bIW+-}cr&C6я&{{j~80OMy/"cOeO^f-6~3~"/[vnQ>DzX~<ҟKL'Y Oݾfm,)>vZ3 Cke}y *_RWi ՙo'\h\ff=|~"i3ʹ٭3O_x ѱaR(7vv;!=5ڋ8?2IM+Q=+/DňmJFmހ@JӭN 攚} Z;sW1? :L?o#=Ƥzኞ߷^=M}EkxfcB}ψ/&W"zz"Iُ7)|(ayBa^d::Dkn)(7LI߮R#QiF>HSJ孠3yxoKMѩ6;q5qާǿ8wT8矺r  K\(<4,u4 ӧq2=?k:S7Ws3O+TL |#}:YSzv*H7fN+~<5&YB+_2@Dh.rILGh4ƣ@/`NĻW6°7mtw "HS[^O`x v!0K˺Իeڽ׹\Gq;}oowOږ^5( f%,.YxXC"-Wz-{:?׃CZХWzh*n jeq/b%f0BaԦif !ՠqoԦˣzUt1 Eu?!r\Wzo~+P>RaB$Q0/1'/Xh(I0 hh2mZr{hg5ӫg:=[>KOx[g!ȟ}ht66:hzgYgV7Yhb sw}Um'UoF{G8 jm4viV{9H8K=iB J;˻Wa8>;<ĥG}Ӑ߂WukxBzqX=umeVyGߺ@VZ;‘GHOy~uo,>-5Az57]tڃlVkn搗V^Q'Ջ rp0$PA' !ϮɿjXL}LS ;zlͪwyf׼7rL/_ IVkٙIsnU٫G3ڕ4ZfvR+*;GU̬>Ԛ1|61l `l0/ʬiI3ʌxŋxQ":1  ti2@Z$;0ZdYS•J}rf)hUu9s:}cޣ5[~ԏ|t;,|׾zSzƼwfY(R2b.Zw. z,r4cY{Vkoد/el)wa&t?:cg_Y4$5 @0`}HB;UrTsc :TLZ~Ew|MF`dmǵf/"rvZjHi( !(# ܙ$ 6gU۾Q"5yxs4<7rD&#wG⺂C)="tEiܝt n3BQ7@} kri7婁wg^.5Z~@m$|׸P]aTMgx<8Hwl1 dG Dr}~?}򺰛҅z*!7 cuw!3ܩ^q C"(1Q}BY&V_iL?O14-GC^@ius&XA$jϸ\p֙|+r+mu^%vQ֑v@n]m=iW #\g$ ;ѫѾrCz\ w߯)Vw(<˗Z׏>c"qe=acYcuP [IrZ36^,]w@^KVs 5?gKV,Og Kdw$7Rjgv=z("Qܞtb2+O,G39BnEV!qu<xԉ^Ӝdd{e(ž%PiK7YtcqOXnqs!GLSG_1~ mh 3#Oģv7i #,D-E>- uи|pO7.kwZ\ ذ-|ֶ/Y>)O ` ρb8 šzmvEW6]l6]6]֦mMW`0s+w0eTӋ|@ǩЀr2{.Qs+@T qk;0S+"Om~X1`5#hT+|m?Ⱦ!bȐ[<( 7<=ISRX0V~<“kӬDc oͻ D)ZK$1'LNQ6͈Bs65Co۟89#O$!NM>Bj:Aw{l`=/1! uP`_8hcM;YXʹ+cq]s3tu@ZnxÝ3+;ju|oNxyn.ؗt۰̉cØM!-;2FuH#0-F `=JXaz0 oAE%QN6SEL0<|T,"}q wAC"pf2҇#3x)U/X#ES9*%'yPGZ݀x);R#_6ZhF :11O-L]/],Ps@z%lIWlPc1Pr'kDDe_'P2Sf~*~nu?cx_fPsEXK|C5k'4 GdA|Z4kR/S*DmF;i%v-Ɖ+5RۏT =~1S YXIIE> Ng{xΌnrud?% 3[5ur!m'˱{N'khxv8ʚS+,V$PV&l]ФC**}Si~=)d4ߺϚcM ok5&"Y$ kt$:r$:&NF#+Q! 튇Oc3JT݆ t ;r1}z3Z!7{YpsT<\71̃y wII'[wݿcW?֊#a3|@¯ݹJiE 6W 3~x"2^PW2*爟P댐=YjX=Ze:?Lw>}cY>/ňHk:"ґ`!(@R|PfaE1s}.KNV8br1|BEGc_PP8?#Fޝÿ?d)CN4b$ґ  e㭙x#Eqs0# OcMx?vxO9l#^ٓ/QbV8tgwןNXV;xІS- 2KGF,;>(x*9%Wg&kQ;%9qETٺk Ỏ=ƇS远g/%$}IO5amϻY"QT8PIlI?CI0kZ4Rd8gCeda~놙$z7 3ITSw&ƢMvn]ך4x;r-'ec}to )&L AIoszFmFYn%"7_3?bT M#ak4L{+F Jk$dJl\j|N_CL$uCr3|X)kyA D7ڛ?iYz؂=84tL3bk֌~瓃KUo2?liD"0Uڠ\g@0˹X;%Ԧ)Ƭ+B2>JႳjiMʯ^#4 @) jh!lX*Y mRB0Ѥ@UmB7YZZԋdh4@VUVߺY|q~lMt#4'qF؀ZĦVEG`U&'EMRVMR !r9 Ȫ%%M?++<=VI8-WJFyX2 #Pڔ e Nv ;)@y>Rb3gyRTɓ5t/cBH&Sgd(vclv}12X:e^pV/[H2h^&ې֦/U!j JE *Uܢs.BT)t˜ǐXh2(b-/+=+£'<vI/=IRPe2g7ENl^{щphӾ?ž?;C;- 0s!8@S聜$yulm Nu7}5|]WISkDu: u[ z}F0` :<_Ë}-iumE H Y65BАx0n$f#a!d]JY ?Μ]w8^Xoy&$ Tl8.)!CsSp20uͻ Tr7^Zyo;|ĝq^-vlJ?X8[ rk)D9ۥ^BE-MHrNA[x-Z]rl;$friZzy ^?7UT>e9gIBH]Bƭ^=jߍN'ȿQ{ v-/j ;_w7PY?0%3LEW$MɃEhL {Pz`TYL g?=MEr:n'k6s|n$Eq XS)[7Hdz/5=Gj!W11 5?C{z,:@J JŌ7aCl?gӼlvS.9Gr`L͕.A8T@C7 ۈ XďwcI'0,!f0{n ;uL|0 Yʓb pEXâdnElX-F5Z`&v$YpĆ~6󖀆f3tKN3K[IJm4hXM$KirM#MN[tD. OEJ]TFY\ ر\$7,w$Q+(Hw;.%#!ǯ9M]#TB2l3/F: rHgDDf )o_qCsA|lW"- ouCw/N MLl,&6Pk.ݥ\ I>6`:+M¶}{1!gO;NCʶܔ d&z}5P-$ld, `.si okY.=Ҹ" ~M"_Șd!P]i0&r,~iKbR@s۹.ܢWlė}Y&"@EmoK%$KMa!eA IQERD6fo_8UW֡'|E#6 E !z,n=˼!+Y,Ta)ĊIwtxvlȧ<sy4)T47=Ρ˝zn (9"8eyU#]Ny.g_X ~"KWx*V0X4ά4UJ|,ö.ja~*aTs\^dy}eYi*Jk݋dxY|Y1䲬eEi2s2|&l[(EMX37΢ݞvOjYuG.糵d{gu^\} $4Jnšc0r$uyO,~R$BTKER o.$$nSWo Zqiv,Z/\~ؚeE [oQI I~HJT& ' P-l!,)b oj +VP0K׀]D˔ (P,kj ۱Z.9E\RNKsnk8UǠ9mƉQ;@4~XfP~ LJ~YI fA3I)afƞ|?!"MHr`B.WN|^dB0Ҧ ;t_nuKdj$V /D( K|-b0Q =@_z. ~D %X "T$?!q<<[g1 ~H{3"4-[_LjnP:|q\0=Kw/T1O'X%AIx3AG6li'Y.5'Xrj\A`[ Y\ILaɀKG?xDVTNP,DM~JC= 3Ji &ܤ?!HBNkE {&x#I\H}X(:b\bKv6\: /J'$s< #uJ||7J%k:]rC+9XleY*VEbb ;GD~LH; ORQ"|&#[\ ȕ~2fi(Bq &c>خcDRq މ$qDdDRt״ ؀ dDZl0K'Ӳ4AK,g 'Ȋ(g*gbL ^{69g_yBtLT?pg7zH:TC0Am5zme7NVNIIr0knfm4¾%Co#-ghDc^h;T_mݞpYA77jDgHRMm B]mV FE|g#y<RwEYg'T$o渑[+"?Gq)VP_oh 3X,"޼OJ0J8%`Dhe oEK,NJ!wTR'A봡cP.7.?:v4U9d1U) &Ƹy1h^Sʑ+jy$h?h_,/ ayV+ &.U H|f03 @;DDDYR2d-ES䕆xJrZ's{tTT&jݚ-b"BIɻ4XTBȇ$teE2vx ɒ5gsĬ.?oc~@_=XS]K/gI+P#B+\+JGN7lTb^`Cۛ5[<Rnw>۬d>CѓIn"O5yY(Eנcso S/?Os VIY4N5^hSB@tb>XI ]#WA#Di"8b"[d"83JQ аx< :)CEs}&.{{zQ:9E Y2+ZuY_'P0qFf<ܼ,]A9P]$Ǫ@Z؆6寳Ez9F (x8C ﬐Dv&B /4тc,HWΞo(gn<9+鈨EJ.ZqLP Nu"40Y!T1_"xvBԐj${Ke6M5Mt TZQI]}UU$hEtr%S} ːZ$nM bNn,;ag1e%Q7\e}e086K A-jPܕYV~~FZ εݮ5TMܤj9&^>v,z9+z2ɄD@~Wn5_OHwS'}{㔏{m7b"2; GDΒޘe>-eT-ݶAŊM sdžE7-^$Jov9F 7IK=A͟tx8]O}zx Kf2s;uI#8υiR|h%$GS}u-gĝ98*y9 z " ;=_#.w'ٺ&#^x=% cMzO<6CX`s̢daf#S!Rzjfq Xe9 'Cbqfqs\”3qzp(`·*._ޟ`'ȑ7 f/QxDl  } f<-I?̜+!XA͜8jH\P"q %ꔏcy*>"RR!l/n22J܇")Q F8y񉓜&Qv&d0|=H6\LK.0+$xDH(uZEr8 @\L2nцE]8>AV0Da$E v9s{3ȴI9R- 1l(7&KեNh ;YM?ٗfV4y;4'`a}ge|c6Q ٨$9zD Κ;M"ʈ`K#̏WLJ4eyAdr/a`q#8u-DFSS&[2;*_D2Ry0o6[r\qq6u^gV2JHP ń`ߤG@?1`͸AĢ˒Y~.%pV=iwDLB`!_M1Z̢W3vQk#FPF$-57q`O]xsD<ȇd#vDCS #ShG*UE"\\TtA2Žތ;ާY-/4?h,Ӊꨏu!zf~<gpsR[p>XI8#lF}(~,/F?_7Me_r pSH)zN%y껉f8]|܈tԔf3~Yf#GKJ86Ѵ@j+^J%BRl("K=%G*NX PcƁ:X0|̂9yw6ȚALhzQM&gc4̯:-/:xRRY Bʺet[5-͡sPpc|w&>J"_}@E> tl`β;h"6gƘ>`˼@jtԹ NyBӱst7Z#Wˠ9"Kߐo^VJd4X>V 6-=YY$ajh2Ĩ,4"M6P tj)-HFM$eb֑aE':<%kT xְ5zVp'n=4Sfg&9$5vV"B-$ÁH: .-}5Pb3H?˜K{eEצhB~9%Qr]bU[{XZ`}A HmɅ*m$%`e-tdk@ PB$<R!C ~H'&hGq54h"cSjf Zi2NKN41^OŽIid7R(}to.9n  Ӣlr}SpDh=/Y1ggϊ;4n(!fq2L9pײ]gFB) ".b '-"P>X-\_Ed+D&4`<_1nx<{C,7OS7I^KQc0V!n[M+|z}LH'#0B[!=LpC `A$CgN˧gVԄ:r(ٔbpXɗT'^x>mž%*(@էRs܎\*qՏU/@  T_ zɐHJ9|ut xb?K#D +9F[{ mzIJY5dC "q6 E<if)61"!ӘV#n/z>D=qEn)ro]n /nQZ-*^"-*^ܢ-*Ob+-ZH[Jo2-/1xtQo*2k v#mG$,qVB<ΊXvOat$9z"Qy?ޤ<* ESl >E' c ;D<$Ohp}DLqD'<@[~3)(R6+ 6q qJK!23J׺j;*#~-L%u(oE>\PO)קSAg4쓟z0n}A>X,Q)! EzOW9Y> q[iѧ@p'Oe;웺D9lOik\^ze!Q2̀O)N(PT4o$ZcyFa%˂mr.x/2 j4 ;6Twe Jia9WLJ)v\(DIݻL-lSru )wMr$~Ṳ9Tx0Q]=H.Y.q]$!!X1fxZqS NB;WSEo:0WdzW1WțFZ\ƈ2~=RIs{ $a4Fzu0>ޜTv3G?hs<-=i꭫YmѷzI4^C A,lI!ބdޝw ROz2^ 5& '.z!^*޾Ǯڣ4Kp .Ab{>-ߣM#>?G7wH$%AX̿8+""7CxErL)A3# 7+1sy";pl1E_=NS+w͂-X\}^2%Met"7I 1z^bO޾"S2 Y,?yWu{3qX9K\+FoKbw@zr{"KuQgZGv=ԑk+YH"Cv(l]λutqyl>>= krxHHԆbynz[Y6+,O&DjyT>=|M@zɏ%EO0/C!ta<ؘa~fT\G>p; s,4ːBBeH;q  %݁R]q+qdVb=x{< dO-$ba2Lc!ׯ]Dn19Jcˣ헨Bsh/ Oo 46+c fs14&y^wy1;&)f_zHI#s}?3|ƹ|Bv\d 4E v׊nfWnHpӐ4װ2p.+s$ږך!I".`L\+بKcY['qد#R /s壶tI(kU'.PK'9qG6 ,fVBMdy |)*J^ࡌzG|6 Dqhyr6t+bIaCYthd#r~YE.(@;4Hod4b4𘐬$CFk,Ev4D ™Z,KK&k/:t 9zeK1$kʄdgBEOK 1H,xH]Eox',5`N?ɤګ{ϻ]ײ0c"?,Y|-O~&IZr/L>%o2Ґq$.Ѐ̒h =)o#PiҞzSBܢG$* 1ǻ%o@dAE.+R?7e @ È|*splDq-?(/+! }Mq6rchut bŔy@|tXS"Y2u8W@Xfy#`i"rxhUd^,Q֢$C+!1I 4˦4|X=rE[duUd˄xsE4"e|ط=Hv ^pDz45'x,.5'̔UJ3d\!+OU>79Wc)2эsݖ\dG5Ȁ^B & ȯ/='f*4ILs!5?ɾ1FԿTp>7SMb)d9ixIZ-Ϙ`h^JPBHFј,^uJ~H43=]bZmhD "JnJ-!Y˹FW2ؾvgN2_b\}ݡzEw I/GS % O9E ,Kt\JC6:mFᝆߣ^F׃K~ZOjAE-ǴNq-˙y篗. ewb:Juf  JmF}{ 5eNIbҶmVmH!Ut4GTU0tnMCZfBZغe۩INI+B,-ge^88O|"/Y*dOz9$|).mF)լɪTMlYoGګxH9:v6 ILqn;|QCPQ?ׇ_4oRGֶqfז-(S8?궲hn ͕D(GdY|]~nP֙+[-(~[x@M)m&Eg,P;]0b<-n+0^mDH:~ͱKHX.$ݢY9X>h\YrAbx_ (Fߙk^qQG~+h.4t%\P 0 ϲ(kE8NyT>|`Vk7#(v[+тtxdnuh]^-מ̞ts6W9C[5,˱˚ =P~2Mrxj%YG!N8xZԨĪad96˒YZ}Mj>Q"oįɘZ\drw #?CYHH`&C>\ x*GB 7 ƅ>W E%?؍)Sq:沱t =D-GN(Ѓ!LAS. ey u+/kbLtקEL bc]z+;Zu <)Y͓^燀w:S:)_~XS5wX .&(LJ*X2js;#$k0Y O9}C4M GwdUK}k:p TN9Tf-OMjQFj(͝΍ S.-ֲJ''N¼J摨9PiJݷSqL"V $fSp*! @@MM]M8Aj?f(JMw$XJu?ҹZ mzб!M?Ө[H9jmz&`_mn*`u!Rϲ禍4\7"T@λa@d"hH#L/O"@Z0rZ3̵B3F83 *= ~vjQh;/ߍ;c?~̂5D9 1Z29,W;>M-K￸01V_vtKP`7 EII+eW~bgqP2u"Jފ 485E ),VuqRM]"2OmE9jϞL.):u̹+2B -R(P'~EWaA"~Oy3Ŵ_PVEef*x6(+?9*֫W]]6Os ʥͳ o,UX{WpeHs -KFUȑI5TAtZ]* r->6s쾴s;5F8M^EC8~0KXD4+K nHU>WMğ6m=VBj;iyͱ=P26E~>dJsyCR6/ĕĐdzoK[2J@85S:QSNFTܩ*/f$(fwӥօ6맖5E QE~i=ws|0%K~er d9YnYǠ ")KbɼtG,[?-YԨFV.l@q0b}*=w_v6NKڿ0PR{ED@ϦC\N`ZIͻ$.0Ջ_7E!D/l#c&=տϭNTB^Q}t2;ȓ]pK؃t?~߬РMOJX5]YL ?P$\2Yfb/lQ:Knju:3GHٛȭ>HT&ՙ4r lTqG5Sg4CTߞcWYqJM4?$Nu ke}jw_Uɷ \vx0'bj7 ( ݹc7Q,+f0#ݸ!j+`35%Lz_Fa~DFlL" ZK%QRKd(͑(@d.M)!fO =jVnM4xAI5c:foD0pIh6H9*7V5c lG]MLf_:Q%_6Y|*:F@qox< iܘ+5#E}X+Q@ k&*reI@:e>1vt ^6ΌG:$rCoUDYm9]/LYi֒&)C͐)DC!uaydDCVޕ26UI=7D=GҚUyj`IS+*Mt/p0t'Q¨a+"%}6Ubނ=UU`tqTNFh>|*;O*ʧ,۲G۸]tѡqpBҳD}2y@%u =R[RDƶ`p0{|1Җ]"7)!JpQ s9Hql}㔲ͺZʬ{\fv0N;:QqJ's3׾ʹ10>K+-OnKޏ۠҈ p!V>7:/RUu(oX]yG+ѿt5LQVϪ`S@9gÍ(;L޺Ƚ;rk>`.ؿ{x3Pl4ck g U\-LUgԢiz|r/AlߒW98PDҀ:ba[LL-V3$I7n /Ui;0RԎlcOnI8N'|;O'H_6zeMekdy IaODXB*[@gg /zv>&fU^~׸'Gݓqwknm]Zew﮺S1[g e)RpRyHP'-폪_P,{*G)=5و{/ӈd(C3G`GM9[Ӷa0Y9])N I@Ate8<Y_k3 s|-j*g̔޽r^Lrk ?Y v fr%Nbn&:1}2:Q=ꁃ73sXjeLdUUtж} }]03 4K=s$-y@n)8u?7[ z2}#LΏ}q%zƋ."i^>6 CyH;im>9/C Elfھo7O]oHjͯd4m/Q ɵ/-ƗU5%_^K/_Qj6f -4>S] FC %'UMP&yqHwR T4¿gP`K \p,"!*sO\uN ˵Qhx 1+#!>X-{̩M۬8q\,2mO7WM;u-Lj G t]#ʤ_djQrs6f^ S; G/PLsG)<^;Dup+ +#_Qt$n7!7DDޘH)|h'x&v:^}g]t?űibbdNTv}VwF H0L\j|ͳ.^+ IjqNZ(X jbY_N3T:tȢ&Zu44#jtzƧK迈9c) ;^ʀ=eָw$?Tg.O=>6ol]Es$Lt$lt4 6;;1:vG<;ke=brsJ*-Zu 2q(U/t*$+ k 3jۛCd4^/| 3IX%@Ke5iI]'uMY-h? dh˛)'Hxg*ʪ1H81 t{ڽL53iAdžʗӨ2;".*ʚnoW8FuA:gLA)5nfzdҾTo'ǬpfO;Gޭ߭oʏudzAܔnE#ԩ{;BMgKV ^{ qt|Zo51:;ISe_$\>xUkQ X\3kRe0@p;ylm nREJ6]7rεϿnj f{Z-ѹtsj=/+=c%i`j8 ^ r4޲uii 2I _yH?k$unI7e8?;g Psw>ԓM,"oDz̐"fş,Vfq5g^3޹ǧ&!{]KDFtțD 5NFsdǾ?fhoT b!qv]~lUS'n rQX/sƖZ= $"@bZAn)^vЀ^EI|JNwL7G<hcn辩kdyI!dI#`$I0ij[ iԂ,raH}+N t^q33]BRvxX>oF|Я-b [$~&\ЕxnYIawEŬ'ׇUZSs[mkFW9(z.zs6O߄Iv]Q=΅^dx8%|h ~@ Ԡ:EGیLX:4I{9G/E.?/@t#MfGHsx(["8n;]ַxbaiHwR RbrC{MM~c,nNyFp@GAJX ;oљK&x.iE$-BTL'g3)*wpHG$ u3`isntahxCP6,A\ngn目gx]Y2ÎF JhDԏ7qCDsmA@3y%|.re#MLϿ)RxJ*+mSoE1•x qtG-1|qLTs1&TșX`s-x9P7`\A^˔ jC#08:"f6>hKPi%}5H]X X1 lh/6q|VQ㛫]>n7s1j\QC)|awĺHˋI!],vZy`.䱉%Y&ZEIeŗѵQ.r ;#ʳQ%VBFBet)'"0&|Ze-0t:t;[Cc-ZU`}-+iC%'lT)" e%fVv +G 0K _悞L‘Ϯ&'קnmf|rkHa^CF s8[^jcP% _sE%l:5x{޴ (*1fw_-[5:ho4^"afz)nˮa(._ؗQYjF"f R$T>@2|4&ÑPvqYOo%P{i$[ƿ[BY `s0R1?)+#q$]Y`R 7mv@R6&̦"5EF g1xn:;eV%9(LFn@ :ݏK11 ˜ eQ tW|u|Of4z{G-`?òQnUfm?O?Sd2GyCipJH:+J!clLe]ӞRXZ iSttۀU/̀$7".QGdz)dco5Q.NDt<1d1=[ ߟYQW#/msM^.v?HtK@˚/Oٷg:X1@Kq^ݖ"S\7y ó$x/KWbtߗk :ޘ:ޒ^gfυR|smflJ_ޏVJ_SeL=K;ؿoK{#8+ږ v.ҽVһFo[*y䙞EA$7Zƫ{q:5~6ä>Zq;a {W¼r@$JZgF|t]!_ =Rp7ZWn)'XP@cvyOHotb ,*}B1CWWGe!-~'WKI:kksF#oqnSoM ׆Bnvts#[9ig{Nv°7uHӣKUmaHyܺi0YqwlePԝ?;3 BIu(a`-ߘPrEy/,2~ow޺^Xp[sCyVlzpQss2A ßʆUz $9 <:d)Xkj_׿QZ]k􉹉CSVժǓ=KOc?X('=%iDys/6-ULSSEDytbr|$( t@ta% ȣYs Shޜjx ]8eb Ҧ]9$1Jlv?>sv?J[NDԇ>e }Kcp;LN3MN]9\԰@Gݥ.-8-zq~Xz}7o^#mГcWj,=^ԫ۵XG1c7|/)5`V^ YZn *{80(=*J K BF9zzt!`i<9YQ(;aD5r( cܥ9/M-Imm┊p.KPؙ?>P $k<}R}rA9<4E5Hl<-w(7{_Ȩ_A2̑iDu8O9%tw:J>V40#|5JvH֣m;VY8~ٕn#:=߅/tfD^{u퇮>wTpi'VpzyDgoC =:G&O9hWzB(J!Y䐗^͛9ߏfn9uvmDkKE4P?'3N6'[K3wd)j^H JWYUrgupmzJRq*wG2}h_?r}kU+.Tj 6N߳)0g-Hc>[5a-MsMS`i;k.voS^bW?WY,1O42Ѻm>x1׽Zh\x B7C$ù[=jmĐ&OKNvX{Z/KAMvڎv*y6FUÛ@]]zi EJP_*ZX߈QǷEsRNу;Ä~#fCM%J}#65j p{vuA#^mW*۳Lw,7V۴>=E@ е'ʩH5~\a<Ө3,tzB, 0)?HIDzU6C]>-K_'4XIJFC{萾+ǔ¡5Zwnjݥݸ Λ+@Lj݁g]]GƈtƙH[ 5/ܧMyxH J֖ϑZn&6-RU-yGb4[8>/4N]hGv;`|1ۏ]g&!u(KF7hEuu)?T >OoITVC 'dB2ض^d 1I'H I k^'H;x8_';1Q/@ے.@1 >ga؁ jqhe 6QXD2qכ.a~`zBz2e~P{erb=3g=?n`iu>T·sH:-c9@Ys>D>P' ǖ-Hz>LO-w@ }Pu|\`%ZAi; );5nR3o#CkR! PD-h‰Nc9.iuت>!ta` uA.!'tF&G>:7TX"Fp|aõ՝pqm6!çQ`uqX{Xq IҨv4|/p߅0"d9+VX@Gn 076OMj~R{;.h<4l M5QU\GT{7a(| l*H |F\\4qyh1d Pt`$}X|Eqmڠە*3VuHk>jm_ԙ+66vsBIݩ.sL.tNϐI(c* @qf' 4Է][isgSgʃ"@KSUT ttdt":JP6O AP\DDtd Tǩ5p9NJkA0)TyM󙷮^=w\kk.+^;u Lf]-Gs޼~ss8И峝ASoyעK.GN;u].$ 1UfNk|e">wZtϞ ͝vףkWO]Hp¥+Wrv*oY?eP0}yKYiPg)׭M'>FzD43 "HOvuGЭ>c4Xfwݻ2ڝMۤM5r0o}*KIכ5$Ȉs<-$TLUcMQ)1y!kK[][;wkceM>CݣOEsx*vYnF`YXw}9+V@O躢gu5TUk)A$MaaSZwkQZNLE'㷩DF @[; ;ߕz)a2w_Uz2$ryO5qnM m6vGcBv')9Mə{xSr{mJn wL጗vԂ&qjjQ<MxS|JP*[u@4q 0qlM'69&g,ee&ZKк]|{&lM~ɏ6HnH%wNj-wv޴$g=?}-w>6&dlvl^*Y0j6Y&d5#f5BIGuo;hoV0. aZm'Wp#mwzSxHV]%ft.)K2nWDUvurvLȈ-݋v-cc N{GNUoW8K]g\d8F 6?f>h޽#A,ʆsGlο4!ڞ5D$oTdx74G؈!Vjhock-E뼏l!L~Ρt%pլ۪ U:vXH >n TF Y[_ڮ1A,XynB>'syf%Ձ2QvЈ;Y| %@"pT KctJdVd C@*"Q?mF Tn,/E37a++ N|JRZ[{yϩX0+! x*q]K[ƶk0}/G`mUf7oRK݂#eQ :h.ðA22CCK[2XuMۣ4 XxdUkn-SNK`!|m%oZp(R5*I3'D\[@ivЉ]{ `Y.t<םΒ-⇅&.N@p8R4~Ǭ:Cd71R(~O򋰄ѼWִ_% 櫷iuuN.*Jx_w!IUC4^,њ-ht!<Svѩ/2~H0c#=s9ĝ7e7FW˶l_xdYzm{YV-J9B |vFC7~m>v%`Gp 2g˻SgtLK`>'LuoԷl[6-kHZ깝lv4`#_/sx,D̘MICGoa&J40Dn+%  ^m$0tf r%1!A'V0|3orMμf"ݼPs` ScLo W[\sDYƑ%lrMθ79pƲaSĩ*ltn2D|,rO}5(6&dx o1N|; ؘn!DڠY32V\uF᪷bn&7&dL֐sL6[/y&drQ>eMnMֲZ6Yˈeq$JD+@Vr=M"e}禔 7Y&+ܔ6Y&kd-ŅgdoY&B7u$lnQ\[xZDfEcbݩk'S:ü.N;'FԉUKcfB}5))b_^׾ ir]Bѣkx3tEN99zD|W5D5qdVk۷W"rnun'A G|']~YF[b'2B =%u$Ί봛)R9| /6yP=ց%y!,Z=ǛqmgnOSI%_jbju\,;P=_ `C+U2oZ?F06άqZƅK/n.)i:Wg7j3÷@`Qt6/|sۧVљg 4wVQkォ,^_cc% 9SFvwdo h;R~d\ҩfMqeAskxqZ)lwp'z,x86aMo,pժxsgͳhIԆBXzq|}vl>"KGԤEN 쪱z &?V yIX|%bNցELۚ_:Vku|0Zh}ZߦUZOh€B]-{E%¸Wx([ad;,]3(eP^7Yw4 ;6b7Ml# fMZޤIˆEEF_Ddx;m0EDl&%ljr6&]&GWlhPN=IDž&bڪ-sСF]D[]+cw+Yhv/]yTD|tɠePT=褄_VcD@]ZmhL2L'7#Nn#'7#N^B%1_䚛[M[-JДOl CkwZ@IJ69&glm9gj[3Z%% fPbk\7:2)Y@кjl \7Yon-~MeLL_G[ {}<^Ɓf'Z@ɠf|xM債+ YAu1é#%Z4[Rpz޽r= Y_d<>4Z#nۥF[C+C[UV4xS0,3sƩ`wQ^ڈ^W͉{N GZsy1o\V^x_,pcu_ {SpxB?ٝ`UP*"7aBDžoESɩāȚ*є.-&ս~7wqڑ+SsҦ|S}԰7=U+aKazY:εgWݨgv۷ƬS"Q*r j-h^^#ZF#0!mZ]U3݆ z#6FXfT6VYypfm45*t[q<iI9@6kGM侒Nt8e^eM.<`X,ɡjmߣ9 Swsȗ`Fm55[rv㻴wk1mG܎(N;]0z׼q{[m]'w(e=R?[ox.n^7 ?ʛ>Hn\bjF2~3`dh4h߲0Q.Z=5IJX6l`S-CU ulb'FǪ9{ک۵( cV#Aw\/~"OYꎔYVgCXЩنAn8/^3+}9mT`jɫ0se$I'tdDyۆvcӷTdNSlȻ`i%w"-ǖ>j )҈Ž?4+@0jY B+}V}{ձh̷7Joq*Ftxa {6~Ax`m>n4~<FszVVm!5x˰[2CEO ] Ŀw/,љ֙)5>~PC1xPԢQ01`ZY>o[n?S]7oaϽz$=C8G75pTvzqg5ҹqg 3 #\_eU .hN$dBԳjB.oLG_-OAdSٞut@Oɐ 4:28%tjL 6Jmoa키M;ԞY jFQľAMܞ;ϩ6FĻ^]o"7•UAT1&JVbIa̐ɑJzw{ag|ʗ_8ԸGڠ6;~E ξvbYHԑS:sݹ.mTrN)1q?tyy*kZ&<濼ܳ5^-+=n0H%k˂t;%Jz&1DRuXm98qMg7:+e<]ۍ@i7FA$}*ς[yqx G3@3xǠM3zbhDt#r(%7l,pԗԙ5 HSl1fZ ;9_z Hojw0&?G4 T Q4y1HgZ3Jr_~qܶ1s\k#j,uMwd͋W5Vo0eWXxXȦV֯E.H1Zavs[P qX2<|g&l @.8vi:_zs5]խ]v*Nr0tMԮx0w'}5]5v[!gA QZ~ZJ?v'_(}V$l-/j!5y;UrL 7ڒ f^|$>W7XJs59zO8/srm{ Y3_ oiAy@P^}L^20:K)5|'%'e>q ɚmȍU%׶WAi>zѺSt+T6&Y5eR5ewQ`>)fe^sZt&,j㨊!0襑1.?>'), ;~:XIfn7.YUZVy (:U[ڤPFI*b_ wBqçt$kt gTdKw*O@,2^$r[xho=6ҞryFԕq[2eVlO0t6n2C`B}t ^u3ZG]䖛7> bg&߳Q"0L pqg;Y՝tY\˹y A(hn`rϪ3hLQZp.%(hH9) mCT{L?4gO=7(1Ï@E6fwZ,3q8ݟS}$~?o|ڇ=\ [}3с3uݺ>><3ciѷ l 3箜KMuFP<ĮfT91bSҳ, m7Rguf|=|;bh7oPD6>d_> 'REx2')0sOy"s Z@0:_45({jMAgj5Z4B* ?ix:YC*i_lѹwm8zi Vev4!u?G Ud9jMꪵh@?%B餇&?eO?ĆҌ[>3WCL׌BV(+lp։Cf_W{>xJ`I+OU>wje5PRG$nl/ ü|%YE+g1W:EKڑV81<9Ѥdք5^Ū5_tx1}:}6Ntt`dMEg33<6.Ar arf 󺶿WwGvkPX1JJj{L]aqi/yuU :-%ArZQ70rnE]'jQۉh)o ^N)P#/({>OOD{߉$='U0ߗEq2:t ׵sV(;c#GVJ$^ΐQ pSEo+hzcML(7##]zX兿Y ?MtЅI" b԰!y gUDs/ Ty8M/f~D[.r =o*NF}AbpwMG، fh-Q {$J/աNf*^ze P'鵪7ﵬ8=NAlIXČ!+1cxexƐ{3:?ﶻ~_MD32zp7C싫V%c8̢nqCBݔ~.{.Ҟ1N`;h|o qcǘкbC1&w+&wǘ|n]1}+&?|cuK1&+&ǘ<WcL\WL1yj]1y>u+&_1ucL^ZWL^1ye]1yEä}y5<|}tn3vq#azurU_B$+rI M^mVV RǴG諼m8Os﷖kQ ̾NmznDy.yjuǽvzpM F_C\\}7YV@g98.21F_W6eA/xc Hc? %/}_6*#ߝ!use~o1 He-Hn/x@F~lJ81'򯌾ʯx寚RA?x0&_7]i8ƀoo H{~"xC9(g6ޘhI}0&N12G4Ւ\4p'yݞl%u9ٛaA nLөEE4"p^v~ٞqV}g Bw<WBC?$xX!@h*XMZYΝRxvckBڰHЦCqj:^$.nq Y `%nz0,>YwC&Wz:p|ly~hYZrv_/8m]Us,P;$vz^z]pMwqt/dYJ73M:kVmqB!w\(qL2ܲ =Lm˾6[0oTc|xrDބ ԱZl#d.ZOzbl5_4lWþ5x=Qk\1~LZk}{FF1āt->FYfD|#@,)Rmy |0^S'R>³&]SWۦmS)x"S 1VgPo* ;I$4M#ֺ>ӸJ`x%CvH{n CWfDQj}=f Ⱦૌ{ٷk+%{`o"ʜ_sԕ~^zm m.|$1ٔ5_)QdU?Y!U3sf"E{ɚUωiٯ ۖ7/Wy#+df++#4(c+\uL޶Ŕ(3 h>v(Q= S}nVU׾Eq7eIr^NKlpa]_eI{Li>N GָXH#u@yS;L&A3Za=!ln<&Y; ddw&Y$k $5!x^۳y:R77kLR΄M9i =!ߔ Y E GL{AG_,hM=,bzxEW=F7Q;q>gW\T3۠( ڟkYX/?|\]Zԋ3y US "A}E;ܱ5;voB}#5 .,zUR05Mˡ&M.UHmN7v:Pv2Y΢Yؗ| ;f)d8Zj29RYM֠W&TӄS57"YE<s5۲- Gp.j/Z`%5{~D!tSAnqgVue ǐ x0Iݟd꺵硇:,]EX =VrM!X Ah߹P x4e kp햺lхm/5Qz }X J^ʡ)ԛ)*%3РY^uGw1F:p ?JY֞Q=XJuZj)ձzxqu x@}j :G;Fcpr%pvO0l X\Xj{:Z 6{>b}Z>EPza/IžRɁ@ *]0됞'a"7\ E`:%OWI*tĺ tl۞mb]fy TG޸r̶'fKpO5M[n@ANbEb_z09P}ڪ>dpq1a2f$\{*fD4'Y~7k%$}!&p]q mI$F8lzfN$Oi|_zlbD`%y7uS<&U՝t~S0L|AOf0g8g yaS^c] +{hsPjW'![xM\*NnoymB.4/[p/IX_+wƿ0_ ><܇-Ez:ގfH|EV:Q{yzۘ[*wf\qL-H '"$,FiF(}<"h;:UAC%BtLpmIo7? N)=G5Ο~",tegh 8+Y!){9GZVn?},/& RT:ۯy`WDX4HMqiwA ;5#m=?$g.)m|4{֬q2* `uޙ3 =[ |/9cgzvh=)lJ~1Rm(caH@K,V) `L+a'VWN!GƧήN7/z0]RV[rT^ xKh|bYV RW:~䅰.W,Ҝߟ(Pv0vM"=G5mzRvQ:OKIEh˧c Ӓ2_:EթşKk| PmP2\h\û QB0?Z.|xˇzľ;j/fU)U}.g]x5%^k-`OD-Cd|S$G}3,94 *e^ }oӟM.:0Ec*^r6"N!1пpSŎ5 7Lc.{ܥ4UD/K$Tդ]#:FdV2rV[ f iQ=4exƄ m^vڛ4 # -3eW{/Q{o>n"VVwFLѣz> ,g˄ώ c/xD>Ex*kIr`w+={VW.p[ht1'tgGnV?"$qWPqb?iT}|g>ٌ.8(opZx(P-il`(Zު7\H%έv)ݱt^R 1-`.g0Ż|ҍ ܑzZֽX u2FĂqjήQ+uhM+f2{^p%^U*\|̵ /nr*HYOQˇLDHr 9+_%MGt3U:=pJTrjRgډsE 8$Zm,. AxHY4dQ{Q;~"?)zÑM'$>rjZJi5&9V2;swI7Hw.pVHqY`e/F~PT a{`J5녒}0*̗Je=i}VTY*եc*#s_z^߃֪KzɾǜG=#ރA6珆c"tqJhԣoVʵXDKf\B@ iq!/%BnJJ^Ð8 (/u>G*M'=}昤 a):#6fUcVx#2kynczWoyU+Bn-؋x<5 tY'  1T@kOڙW/xi?p6 IYU &_>МE ;vӛȅxґCǮ/}ahBU/Y{ưڱ9t5.챬UG#hMM?h\"h`lDw 0x8za<. #pǵKU- ӱ΃yPqיrq|d4Ԭ#+ gg,9_8"NE'ҩ.\^{"[m3 M l8HcqI0>̏gё;ҞVoE(%T K1Q{=C:ta2O.4DΨ: k 1lnq۾tN"#uM| vs72AS^ʤ쩊0U*L:w5yS]M!n1mnĿ/m4Vz<{0 jTn{$5{H/K5t`:mpAV[p2X_χ/όA+MUMYL^QWޭxY=Ѩ)Qk|Ys vB bNea-rTЮ)Ӗ1.Sum-,2J-5L?jE~ ࿪/mG_Ī2PEzfC4N)YlAJ/hw&;yʱѿ1ĮT_'l,:sV$ }eQK.?o\Hn2TCMMw*KKe|r\r9vKγg.^=}rDv\*Y-hy:Kٓ ( Tt3'֩F -hr}'Ux]zT?Y]#VsPS}\,{y5\>cl4xx Z\%)R԰QUZ=ON쟴Ǟ4?S閳pmX^K}%=S ?A\bP?oUMQN'v`3)M6Qw( CCrxow_ߧNEWج81DEdvSWu~X3NWkgro@_z@{iK `wUw2q\ +I߱nzxW۫ݿeﺘZ T=Y9@qd^Hqey\q(oe+C<^s^̦NE.qŗ&h}eF9bbnV.Sf71@<\knvܮ9iMD9+媷uAzվ*re?iшEb[Z3,S#U%'F*ݰ/n.@Ly̪-:^ߊ,bbh,LѡpYN4cfX 6T} X`sJGaVV~P+???{bDXoD t5j:Q*P=T V) )'u<: ;x O8@QNMRE¢’I]bYD $U>܈iONk-vk`KItPi ~a\7rIO~ Tzw$wLw`t&/ӹz؊Ěr#k~#fKkƇ qـ,5ї-*+]N8w}wp'7~Gh\ZX!ƿУAay\ 6+nc x98s-P ,%Hy?9C*ԫ@ Vci =Wn.o7\grAN8@5%w AaMGC: v\E4]* Y tMjb.|_.7ߥ k -諴Wx*\_8 s*ހ\tWi=Waꨁ: 5ols lF x o\qDwT$oM}ց>G:Ϣ+ hEWw%Htu%1RGz9No 6kd?} YdޚEUݙ% ^k=䠵^~˗]F^9w cMrsg^{9vʥ3?}+=s>{ڹW/_ySw̕W]tsb=g.^&p7]%/\JrsW7[Wνe|~9r24{K_ze2܅c-nZm\fQM\qһZytFLcN4g&T =m@ܩNؚ+ `q݆ CL4Akovn̕-,@e8˂Ra8X0I8zM80eEY~'0G1eWGE%;},~xjo8]Bӊ.-&x bK&0hNlcQr1Чh.9h-,_AikFM0G>s;?Q^Yg TŌ}1yJB" {TҒ;*VCxjo>sbb݈LAsFOS\Ÿ>ЅQt#'49u6!n O`gSGa٥q>;js z`8"h?6evs/^;/[b?$5P$uD2g/=q3tdԅF\cz@+EL+` 6_j{?-ѻD26A& гo&0G.E؂{>iaԛפvEv #\4`j ##41H7:X>ID[G` $dƍa'0pgCe@:a(^^SiYS[Q!`;BGrrWIwv4 iMcW;(tԆK|={^)ku0BH`V[n WD9ci/fЪ';7ƫ4 Ms)Լfj;Ym[ :-wa/X`JY0e]1`!<hy 7D挹ESlr$4׀>u?Hk頩։XZk`s hп:AVp z)ML< !ԫˤp|p>YTTlӛy1K5 f##WE"LjMri&;$+P5ܮTebٺSU!K7O0s,e&{E.]$.8"7HwdU DY'ruXwlZyjB4VE~f f%vBF*K@=`+muۇF-1}.| p#|,|O%_xːシFc(؆W,`QQ@?K@UB. FX "Ttdvc =tX} C^e3* d {Kq'NhfF0ѐ\t!ƥ[.y u)7$m`pIf.mݛ`kp]}[G`+ ơ~͈4u<>\jZ4 J ϴG2!L6C?upZB9l"g4{h ( V4ѡt:,K]I@;^sֽިw#β#vpѹZr<71(7?bCsv4{id*rIg+nQgp*?sUwM:pzZ!<0ErixoL*Gp)ʴI3S=] @?mǎOnZZFi*o>co[/rҋwFٱ¬\Tr 4#(cȬNʎOkE(Mhh}-!+'%/$4ùSsqo8t=“}tjq`EX/)}K1]i,8ƊPc\I2`e&!b Bp}M,c-iS Ji.k~|l.*w&`y d|M%4 eK}|o ˀ,ɽݣQkyV+?uY~A+?+Z+e j`Lfp!8۩GQ"SC.FJCz;B#'ʨJءY,190/;HGiݤקac\ mf0,=aX[dJt1ݴ):r?֑0ND, 㧦Tgf>+Xߗ,/-y\p9 ,$ȊYQ=0'nllc&#EviU<"U3OmomMR{/o?=CA&;HwtJs֓'% |nOg&G7 M*ت$7-H mdQdb~WGY4ExxY0V@vU&kӓ2A$|:[ʚ}h`GM z!+W)ݰָZƛu޳O|x~.㦌JjIijjp_{R6hN{? uJQY~Ubc//ZӮ c޴6&Xkgh D-1*u󇦓jD'E`c"XO{l.jT~vxl ⳂFp?tU*:Q:T HFZ10ez##RN?ejUVYTA0ocQWB֊OC '^h :#ꢚ֖ K3rjWdJT4Q4S ɚRD XSbS[Ԧ!kyTz,I,|eo:9N1ְLM ʏ.6f;z;v?ެ MxMFdfqվwmUx6TsʼngЂ9zhVN e=vy/;u#IFmɬ:t1 w&+>^gːN9˿ Աs5Ee FgDY)wآ$ K3b!i,SF;%4`V83%>ߧۘb5! ?+)tQQ%94<_{VF'-Y䔕}Tnb>I~L2o")]4]rWiNͼ+:lmE }AkV~3g\Vl?}N$&{K{J%_(x2ѧvkSC~"?(UT:Xzxp ;%KgwImhj*hRdf-f07/%[]\7))gKm,*5KHbw1ƌ9գE((•%2w_[N(9KP[OI3W1@O - Uh K[NӗYhݔB%1O<όڕitdͺֻʷe:B>H0dqTtN'3!I1A< L|}`d$.b.خ4ю@OSCi&Ԍ^,Q-Xx2t麽~f:gi/d4h'Wݣt=5c_;vz5=Pg '&I'ggM :ΐ)=uxX6KI]0'9a(qܻ#!gйLR@Ȩ Ӡ_4 -;68oT)pm`WtGzƯ$aEDXG%%KEb^/FP*MriG|Z?d)9uaIա=v+, U({)T^Vp]7Hq#a͌5&Fe`Bx,!mN;UG=o-|sOY=z{<ռ5m#UBJ)0+K2r9z/iͮf2 &Ș>ߦׇO ]?֭ Fzo DO}ʔL|}q  eӁkb#^ju&iJtω[TUT%f,CV!_#Cl[5ᚑH Nbfxi ;P;e I[ZFȝޒ]n1O-p+Tsqar-E!ɐTIc@S0WIa3QU쓍~@n\2BVryjȀoSKY&E@iCaAyH,"tcbNfUIBQ~@5C/-)"p0ͲͶ7VQD0 '.! w$D7~^LjɅ>$Q[,\9PR1(D*~d&8#7#L&LKQ j:Buʱ-jDZW BDHdybZQoH|}aU @Yԧ%22R~ʻhn?"I"uٺ`8VNađۋNE烴\ BTЈLZnEߩMUT.!vdpfMFrzaZSc44|wQ|4=< s,7.S&!;SEzԆR@c7""A$]qN˔$*qԮu U)ZdOLp߫/Gc F.J3cX׃7\ Y>J}ctXӇKM=O ̛utt3B5 I}L6&_tL>#+n?+iLgt& `-5v69v5N۽2"5"2\Dr’0,T { IhyMƽiD{#f7McUnEAa>Se F\? 1 pb &AnR7)6pPQT\ܥ 7+XI/͐15:\;&0G$_D%|?x~76m%;Z۵kVA'oʿC+VVi?VkZoj忯T+VgZg@Q8$ 셾l4&P% @Px 6e-[m z+k?PtcaFHFBȞ.yw[ a;(cЂ!=7PR3ȀZS֯*RRՋ7Xͤv49QƝXp*3p_c:Ɉi@w枫**+[UgA_`0|<쭑ÇV&SOv}P.PҨOƇb4A9 Ǧ|C,QlvH45kjQhg^+_Y+W<8ݡANeawjwXD!DouѰNN~ ?B2*^otyqb˔h'ƢKtK8Omw٪ڀ {#U^tljZŽFh&ZN IW~&ޢQb15KCߞ` ⮺녵•By:MJ"JIq(t] c(Ik0nhl߇H 7-[rǘ{;n ٮ/\tېH]a$LE81䝑ō`Q)l,a_F^CxY("S 'QRWk[gxo7́׸'QO@KS4N ?*PAjW BTp|M뢼$׽JBuA<I 7,CCcXL9;{ ;U#+]>JĶq @^0Cnd$Yn?G'3??`m׏a4'%FZƥb2yQd<)MQlx&oyrKQ̀ 0s]4NcPRf!v;ћB'sjtbG!2qǎח}kSk€VS<1`t=U'Oh_MG˕Ӗmһ)Fgm4Ή\}J))̊F_c1vӮ-.aT6 F̝FOkLQSV(j#*oJE;tno AQ,LieA0x/u5^CI6}rB7[cT2] ~J%)L1Í$* &fgy/YJmyN~P;Ji!4;=`QIb:diq>eh>imR>OEg>N{u?u'к`& Hif*Wz̼>a%4@|F -aLj;-S ~uOLvӂNBqcTW]4zELv@-zubZ1B=a}#E(*SCz+}>Ixp%s M pCLV- I^ ϓ%;_#՚_kcN,jGӠui!e6Q:ݹ\fyyS Gd`.2pThM(O]FJFa~nDh$ln,2ľ ZvI-VxLJ)Jǡq!!apTbr ,+). e+GfJe<ܨtp5TZ$–V*)03bj(zAJFc-hޱ8+g:ѱMd& ӚVT},c |V)*XD֞nM ްk&+E2#zR# CM.2%}e . b-oD'd1*%kwl9mMi?(Hеun??&n=(ZEmп4;!qj٦Jb˾#cf&SөCM)L`I6ЭU0X"=opkŲآlAnYs^6fJSm~JUvu,&wdSZ;ԘHoG-@<, +?f-⣱n !|d WlY"/3 AJ.,%6@g B-풾ߧ"gB+oG_"V냌n]\i2r$.d.Wur_ C俤3 \?`9jv)< U-?%㸧AS[Kpw3 9fv]fyX\[B7T@sognmA.ˑF&)p(5csi:j+Ñ:N GY+xA@3`WA=6 or$xOqw˔+AHc.Ib}Z ,|d|BJY5-I`O8SЧn ӹ"=Zk6ԮA?W` T03 @jq~-u_6Jp _X 2D*ŽF98iE)G$]|iUGQDSF¦f}Y3ˇcDru7-k`'g]< اc-waTU~nӠ{Ǥ#^1m0@x 7Af k~bbY{A!қ ܖ0Cx"$߉:JJb\Id~`*X6׹RB.%hHRQ2]4B+"|5b yPO>$3 ~vxpQ'F!7W%$)fdDJky2&B$ׁJ,~01!FA<ʴ:J3V<]DdD.qZ Q%#qd菚ɝp.ʬaP{"g.#;`@r)X?,;zi#IcgVMHƷ)ZxXyrpZKQɗE5g85͹M[\2T 0aVWP@s3 g`)dK;TS+u V?*$:,E"‰ }@z )GHѰ` 'Bv)4p6j=:vipOZ3 tf3P8b0/F=Nf4n7+ 3mZGӡ{7*)N)䯯8қ(:C:,*g6 y#NXb(tfDZ ɦ4v@I[}c p1k"ML*bN1r >%0}Ӛ4Ts5m#$J`s$EWw'RL{ȗ yN[0H |-n0r䮸Pʇ%ir&+:l`bV(nj ~ Ns^M)C` ʻ/_ݴ!6Ԭz `P`hN4)Sbt_1*#4 JUP^a|S [-1T&2$>BˤF6H8< ` p03W0).l=EXM1Y,3d6u8I%o$0v RBdBCdjHGT X(SrOV+GISߏxrC-B3 U6wI!\zhX|BJ/|QqZ7ؕؠDUI썍>زr arfjQTisAAn4=؃#$P`}+!VY!T-5OGB!&gxt&jǹAbR\pZ0WSJ?R<.%Lڽt6~!n,T|6AyE7l)}xD˝[^ov,+3:& n7B5kOEQN j"a[E8 j0}(Х=wwbe-G4bl"Kl^[b mbKzyPF>w p«b ڳF3'O8!E4zFQJ :m.ҲDާ`Y>*`Omӄe0g] |IH:I!Gܢ U< aMmH$6hF610ja+h3MvL" D.HBĉH'%8h:t%GnN@0 "آEa;gR&dcO!pHB^p3 өK?(p'L,O+"iTJ'iTȌ !BQNdC2²ᛙ$Y"D- FDZ{"BmKaE# DQJ6ΥJHԕ09z9J&CnH%QJ=^`q+ a`" l&TH6Co)H DaZms,GH̊n "ُ/:=/# Ew0,>D3>eC^t\լi9#,ɬE4(v#ɈFbblEDe]eb< s3OG5vjސE"'a7ۛ0OA@DSj$rQs wwIhRJ m¸%i1}r<\"ȰAʢ薒 k+gCZ$?[𙵙 ]UobOl_gD@.M0KZB,xH8 I!XV4a,u2["9]JbJd+$Mg2b# dC(+||*ۤ9XMR߉'FK,Fᅩ~((cz ҃:?+SqAvP,F{’y/K3bܹSmݩ gԅCS>Rn>R@M}('m8_7N_tV;x>Yf7M;3Xlyij k$Ŧv0 Tr*|$w_3Y;sO~#s)rb@ CzG(42q%p_@}vcbi9:̗EvJa#{!Ǐql;ĉ$mDM9n5-'ǹ"gۘ??`0t# <!Bk->Da찂f=ݛkfĸxACGz='C2h:i-wN qM^>}-ŁGZ5@{)bioբ[#.ۦC6p(Y[0~ue'^gqWdxKԏ؆^=9}]WG~mzASzFxK."Qi`qnTCrro:}gXB> @%w._b>hպ\_X-~eQ,~s{)4{Wy [2ضt@=?]!͡&kd"q&{,ýB=-4)϶d(Mmm`[5V Uנij͍fsm[t`ᒥì޺J9)1 @#s>sqskL."MdH|u;H|껀{ծ݁X{77zAp  ֐QJ* r6zщەVrbxx3*iz+;^5[$0OWVm;Ex;~3-voltS#JR9sZo-sig<\~7R&P5DvL+qrEmP>VtPq$?c'5KJ,xʠdʿ'ZNyˆ vbGe۪/BbBA#MzL[/EV yG}ћ_NU.c `9CbmzPE(2_3f;tb+;ϔ? hA?/o`gCʆ=_N$[3oYsr|t~DO뉓"/x^UR€YdNo%JNNmOkvKRK}L0bt-&Aܕdu=jqIq \'HMZ>j?"p8z%_^Du]k;#^1CģSn8EǢexmV9R+V+SUu+Sl7 F<[ɭ[wڲH2)WV"=7;sv6=,SpmIʗl<]OxrHxb'?[%S(cуe[B<3]ZCvk*wʒLg%soa |C&2_)g#K| ۚ/E9v3X f#1SӨrW*U- =N@HzD~O=2 gsJN'sv,jO'w %dv qTun;@Sgf gCPHM4$Za_iv=3.?8`^]CԴ<VZe*rey_ҝpdJ{=u&unQ^yU¸1Rs`1B=Mԅzf<ʥ|PN3=)xn ;dNڠ9rptD3g2>̄ ϶2s)sa> Lpb٬U 顦?N-޵m]* lھYP6Mg h^ڎm*Cէ'{8iW(i ^oZԳ_g;g?J/̓Cr!897҈LwUY ?%=ռ бj. m]?Jgy"Q,v^BX.CUݲͅ p({w{UMpW-3A*0H VNpg~gޅ' ٗ|f$(h&mR揌eRګ[8)r^_$2`\]x0; `ptT:o宒i7}Kn+-p:\èk<&߈T4;RР.Z-`6 LS um( ~Lk%-z8 P(hNwˀ.+@?.rU}HP7@ +ےX+] `eߗ#ߘjU@8c-8;z=tĦ&A8^3\ïտTq ~*rNUr4!Ϙ`汦O9S x*}b3Jj+O"#lmMm)|zxIu}\v.q$͗ LDh3}-OI<I ]y^Z>=$mz!Ro71Z4[_7[+|*\vdՆSst+0$,UzmM+jlL_@q'zp(lAWl%$@@~Ŧ7) J \Ձv#@zbz]F?7n%!V"y1 ^`DL9hzAw6_M'(q5q+#cEipv5rBK R 841 F6ZFՠ;ꑁ pc ᰁV벻|C`opv`CĠLjG>+:&d\}wcaϿ!5Jbl A=9LVs@gBM'P>[`ۍtՖli>ìS NՅEz!y?>f 7+iLM(!xkL^{+ֆx<f\Ӹ%VAOʧ'Nfk.EzQϞجЋWW>^ ^3Ͽ<0(9?{B}|9IOϿrVy~y'NΝg=6-`;E fAt%xMlᢠI6 T$.]mb?U{˩b ֬{vdsʟV0*h >j- 浆p7|!T! "9xE^`pFR}f%y]|WBR"1)s q<̿ ï54fT:1B*}Vu|L@_E*#,YՄНctY[5K7삡Z]ptcԒ`HQOV }3]y Ѡ렠Aqo=WOrV![Bz( uUpt:eg4Hq`|NTϺxOǒ[èChvo&U6{xt·\0Y5ϫN݋GbF$rB7U\ME{I0tTݕZXE~`*X6r/ZI(1!} VN(bnZ!4G[(BPxCd*bI~ujG+P|]d hNK}Dt?p.يU Y py82+y, δiMZ+)N)䯯8қ?LELr1:Kчw"6˗@3#RȘ0%L62pWO 7 +M0Xr@Dh 4_Sܿ)$0}Ӛ4Ts5m#$J`s$EWwHe0Q!_"0w9nQ7j%E |-n0r@.5,JF(,vF hʌpZ~7;H l\Ht1c%iN#XPe˳6ӦUyz;,-A@>-Fe2BytN }t7 Mh2-s@r/dWCÑ2P v0 |3Ux}:')&˔e̦'Ǝ"V _ZhL b{{n~DgS kQR#o9:Уߏ!¹@khM ]a̸o.:ȠeíM_  Pko+tߍ(I Hn\srsɍK!E1R.~`@ق- M_X$Cz[,k]&v H<]v/&jǹAbR\pZ0WSJ?Y5QKX4x0DG{iyv[dgٓ [8&g)mҲh(I`t,~PdE6ȺUEPizv> 3ta&At1#!EpEca")xtЍ,ĆFV.LbmeI$Qa(BIIC$&2~@'X{fa[ l UtLuk(D ay 7G4T|vE$MJR$*V#D! YlSFX6xT¬\:"~AbE Y# BRݸ(?Bb=7YUrkFwl*iF?90}(Ѓgq;a 59.{2B#hiaUD9#thPANz| Zu4$>.t ܪ9kłBSpۖ߼QHF)`.MbY06*'ߪV\e @6kɎ!w*eZ J x( Y@\h$qPfh!e9*=ʸuW޵('+r4@;\.{&I_v߆(w`(:qHCc ʠݖbWIKx[*TT%BʌuG0܌>R_D|a6'rh >ͻVuv(j3Ax2X7ew g#`| vF!BJ"[LF<XVՠ$vGT*/]Q\z/cm1̂ƌt#;tB0aEBu=fF_0㝫WfnUll(cnd>ԊHBa,Sq6X3,9¼mq;#NB B6*L#5ɻ%e04P3_ZK|kƿb.P2Ht-:W0QJiJDZg 0=ԦɞV7q*2UgE0!e١X| ]YWZYH > ԰eaT`>5`!LR,$YX9W7iXHA]/ӘnV]N[x UA @0ω8AiRU/(oax>&Da7{P̒~oS pz`U2CCXC 7 R'W%b[P 2Z̄؁E((PJaoFuܭȊ-^ Pr\D!SXo( ?r8Yܣ=DT6ua!(<,YUm׊zf,iY;v:-s>v[W Tptz~m9 XWNGƅ Sr SpJC>+;| ^5$|´UAq(<_UJ5(t͹!\Ywhjێinl(rsAB.nTYPT2 Pq}4^э^v\0q#x #@+WM*(z5tnȵx x&܀+(q],ʹ*B{#*ʥb3NG UXHh  ܼ E -̣bJ`+|g ;ZQx+G֒\TNG ^nea[MkvmMd,Z)xkk[ #/0l~}PԲxȋ^4EWU>THbqB>+"~FdlKmYw|M!c 4~#栣05``dcrDTSrear\ ԪxfMm#)-EZsN)|/i?G+?߯ʏȧYli. `V̪yQZ, `8&x3F-7afԹl%4A=[pw@Ր U<9wE~@}JOc'Fm紣V(>B)cCXos#ò,qI'SĀ}"pήYin<^XRm`bHنr>!(Dju@}׀;7Fٺ{\$@]=%=i MqOwQk֠ك?GcbJ}A~^Fˆ[9w7! nv`l?K?7b/ŢHh2/}Է%fd%&axc8 6ą>xv`ȄXB]|l:L;{4ІR̛ø [eL e~$uKI$Hp V!i*8{aun" Iequ#S臞¨0/}er! \9@ҫ H j/5^6sx$,Fz*: a4P +8-@hFSG؇&c\ oNb(_xѥT]'OpgֺN(lƻMT1y /B_4ʎd8FEecrh\cӧ(IR$  f,Fdq.ib+iQ@3Dtp.9HYdsZVC蜆0D\"?jb^i0ӊELj8z+Oy9OOӬ33b?RxP#QA+VnjYIM!4SBH? 0 9&[/<'abbW`/L2/S4ů )ȓ#G j/P,#݀o?_>﵎ۏď겞8Ns==#8ȧrYZ$LPCAaԓ 1T".q.$4H2,v(<$J& Ӆw6;fД{rγG=i= l8ɡG~=%MVN&}a jH{ 4}Y;K,ڵ#,_>V;MzFQ!!r89nϧ5u Ot$,/`DR^TA[Rص5rÑ/i5ao_TFV-pV$*ҿPJ0R" zJ:@d2iz-YZǭ44nx(6-eU5ⶉHgUeol$T&ݍU}Yr=OPF|7":*Rd7yK=/# e K>͒Y6K[Yv=s1K6766fw+I)|D8dP}|o~6_+w-_َ6*˳K߹-mmsmxrEе3[bEff4uXE;sMDq|s^0񞤿c#6ވ(0b^kp}H ؿn:YX_(4iܿY{yt3.Hlp4 [ƍOӄ-cvzm;׳ GQ9(I]d}w Jmʜbb{Ҧvm1A}+vߘbΑj'*r*j"݃W,oU-=F*fn7#DUO9Esŭ?J|?R6P'Z>,xLB*ykD3RqCKߖߤTəqF["|BrQ9S^Y8UZD .i5i|^T =s!'^Z<(v\"*&fuf⧲A1'f^O*q1;G>($hQƤdG ģEwʾi,ߒiU`fpVTxN7BXTjǗS{ u;+tqjL>97x 3(ZSfuU* fbg܃Zq)r4q[,k'i2lb']K!>F^[[]~ܗRe W ;1."XH#˞sߖV :8[.qYeS>Bwv0O( ׼mݢ;4ĜF*g AD7MӒDGE$4|:3Y,_~ƀ61| 8[چlW5\p;_~Wf ֑ڥ g?PHphڒ"W40ʯ֗smyYURyks&9ppXqT< +?d ;CIđ/)?|2Ff/۵^\$@d]ߤ*B3,G7m$SK @-B ~841.p(tm.j3բ3`(N}e;=Xskxho4=I~.v*G^]Jր|%Z-(¼d Lp5LQ!Д``G ǫy8jˀ":uEtk v^Q*X>jvGT,Z: SŢSj% Ns>LRmeRc(&𘣔7tb 'sZb$:9bF܋½ KųѲ1 *J^/ KvM\UAHcSR:Ke$`z|C–8<T>1ó<֦LViqvI @:en4.:/>%Xob+#0ʭ|84bu1nq`[ <.GSUJQ13 Vrkk[*hN%u%b!)"`&Yu_&?6q( 9L' qGG%Zx<هX~ϫ;6)Vߨ^/ϑg&=45:T5?_'5kjƋ1)7d,3E[=O96,8OG (fQ5^ Q3Ҡ=M9FfZ7MiQmNqVsf X>v]~j3a6Ց~1P0`=H WҧjԸk Xj1umr\c[uH;w~C;ZWaVY_LFL3KDJ8Z*Jvۢ)dPIMPX *~m\VVnjeBDC'5,wU<u,D< )#{%jA 朔0 4uY+R+_ʟgrC+Vnkk'I/)^<ӳZV/ikV~Z+ZyU+TgcgpF!ԹdA[,NSMP*T,8=#4g3D"[mw ]A_<'C=VX=M| f\[^9+_g|5wD"B^1x`r{霋/8m=9 Άd-1-ڕ9됢P.#5̦fs .#/\:G^k7.v%4Ԣ1u&&Xa Ҷd*v$rz$qM!%@} f8Ja^1\pD{ c!p"?-y>{ .\z5eXȖhh- _-Hi|g.\;GΜJ/_pXg.=w9rrskοI.\:\9w믜^;wWY,."W/~/(]qUV{ĉL9%`){x*OCw軳 `~xAu ޑθ=̹+/_zN·=ѻw>K$-rW&? 1w*ܜmvݰG.>MN_\+abQ"k48JvҙkU >9KS[a1;S?kEkqq7F( _*Љ&]}iDB`1N*uwҁ*1+4"D>rL?Na"Zc| NM QgqX+2Nz/ccE{m,ꚢҤZ)g [.Dw Ӎ`<-ɓ?`X)FG܋P6Qj0PMM7 7j |K+V) %&JYc:n[ ^:+< k:%,|R.< `W,ً,dUi*,|`+(T=ncv &~G4:{0ѩ9{M$)w+ @YR܅ēxK0 s"80O6Eb"TtO qFc? Fx*/#6Cx "b30LN!uXTqr\P|tяQN=2=H]01:d,@QzXvSKlo&C2#3>L< zq\ <}7_tabd~BOQbbh8Lx1ՑS|GTjJyiB5t&,/EXS֩.}:#Mr Ua(.R_2$_+70}Wv`8i]Yt~qɧ.dgFM{4Z9"IWsf٩wTd1&ZI[u(u"Ƽ3LMO_!_x]lTP"8EJXYPׄk,em-22q" XV~GSb׋dZ/ ̔ٔ5"ϧZlS0دgCkco0Tz)9ɔffM2y@ZbmHg!](MVD&gݮOqPnTY|tSߣ"`H2~qOuz}WgƐ\&R%L(eJj#͎] /5VTr'~K0Kߴ?!:Zb&{ j&' ]!K5D_taChkrol.$ @M c0eo@坧O'YUJhۘ%ҷMCD*[loœʘpZQߩEy52 | ERQjXQ`FN&2+Scޜ"@& RaTP^ۋmp}!!"3p wG B~En55!oRH 9>{[Se")ئm[#]NF6|kS ЄKKv+{ZoT={j9ֹV?ڣăiWLO=wY*${7Ai9YԹ]mT .(,xGZ47zwo+{X|pz¡*ҧՎ >%}<õhvqg#s6'Qiq*"4`mI㼶16 'I$\'m3-}QkvOG:?v 8ل Q#"ƦTZ60nN.a<45A0Z8R}Ⱦ+YTAј@r2o+ ]xs϶\zN4+}z˰<'O>M H) 6Ct.iv|zvp+^!=Q6} fR7P죘75tvZnkQc*v}}v4K_VvN۾'oWBã|ѳaC9$m%= -vNEf34T瓄# Pz; ˤIa f^/`]&@]h]LBcMN'Gk$K1Oé 1.0]FỊh@G؋-N" ,g[OtT6,cG>PNPOd-{b5O!dQυx~ȸpz2[ߥph3uY >i'hqj;#'puH@ RMPEib&ez/`䨂6PLl"]SYWPs N7$,K3.E:u[Zq Q)B%E.Hn"`}UZy+VߧLqqbѹ^ˇSEQ%<bEl׋UCzHOSNbwhx6t/@JSʚ g\iT5K.hwrG+M+VaVZyI+?M<1m83>13#srI4P~tg^zPg5F0["|V!u\.݌b`8Hm],acQ50/y<"FʦһĎZ-bE?-Bv ֭=؃j%ڪ ~~T_l8Ai znXZ_rj{4ֽ2Td[H*9<}XoeC [_JԃWq㖼~~Uw faL A _ݍ3,t?dO]U!O}rzc`H.3wBvۖ51FjzD2{uuŔY?j\ќBG륫tӭZ]+i- :KvTkcO%zjxZvLV6kU3Q֥Nkl Z+M``{= L2a8jTsyh H{) #߹`ܑʗ 0]<=X#O~b/Vu޹\xGҙ:(V~.8µӈI`T P 9J\ [W 'CNXl4! RW|Or>Zv7ڶ}5(*B.`O fv H=Fy}S䇟,HE]Let~>1^lb n"p&qj^Br^>r^dpQs^9b ^3^f|^@!_ۍf`nc2VD/_Ir:. WfM YJ"D v,voBM/eE=*½.iJ(]x^a!|ӿZ騩)(Bje0(qPn46[mr޶wKԲ2?.:]'˵S06p5fhVYKa4>t%]Z>]z]+pm,XFgs*,,/Yl]@>TWg*ĢQi:]%c^uGhL벲/MʽzP"=OcAF˿]+ojoۅ ,c<3C%{8l0gN'G 62y$mNgE~X|1g|]sM)Rۗ1mhʶX)t _I'/&4'+8&I%lX5 עL56 go'ˢ4 $=++aang7rǤXHcQq9]u6P0%Ds98$ĦEH~a[E29EPr/lP5Nk ,%]ib;3u}CP"AC;wgJ1>HZ{`(ǥC;k6n3k{n-}sC&viL>i$_`Z&; .?n͵dn{k Vspzo,;w8'>st \}'dp#KvHdE.1=Y+E ,^m*t #ׅY>9qL{y>2Jm]zVEft%w~+p9N:lڸ^ v WQ BE7)qBz"1[QeVNi8s)rJE$fYZĊtTBtPWyJa):YiNQߊ[ZI=\Hz)HNdE%2s-}fƬ`#or6'1|RquD 2:WU@FI:r/L1qYY^7+ t=ro\j$Qqk~;n#e1N׏_>)i&uałۋ\R_*҈ZfV'b0ϔ 9ʊĠLT.n'7. f祹|r3KbX~]6S\M@iPP'|oqHhơ2=)Qi7wL΅i0]>so4'K[2j/#E&+ \n+as,fB xd7_uL=:ggJ_T[)5 n >fXu["Yٻ<x)YksAyœ(`mg)粔n:;c:BRhN nê L9v;>yrIGI?>UWqq eRPHW0F:<'?vŮBJ] eO!8U@<8RJ@A3 zWb%3 Jn3S1Rd̋Q?R@׎ϏRQ&bePEO"f!<Zc`cӂ6ʵSA=^6X SoÅa1lr%3tIfŵE{ܞZ윹l䣟5}[UG$i>^acLl8a\T*LfMNo;=X3A?)LAؒX^amevP:z\R\xC~ D-)dU$Je*,=E9dr d͝wh,2ϖaCGNgLBcL 1DP%/ e{70\}2c@=TvR߮p0޴h Ts3ٱd jw%5}ǹ$D2=4"o=&LO`@D?o g4Xմxe1!zėd`$cM!N>lY>VxWrK+rS+_-b-KKLi%*l,J.%cxIj0J;j̭p~HpT̤iuH\h U(Ov#Cjɒreq] Jt({dŷH"h@awz7ǑSh=8'S 7]Z;7hmh.01_"x5CdM{D8㧋'6|c)"ukZMJix0ZFTJI{$3aYU=M"IWV6XpFÎcKvx:; ʴ$Ng?DN,CxFLSx}C"d=pW پǔپspW=~n2(v{M=[8D 7|x68ay<հ K0dPJ൧/&B¼0*"e1fl*AllWRns%}58Uر'] R*#l"b>4 ήS"=o&~4B|V zn~7C.gϔ,qbbZ] ixpW_#f񙛾** *E& hBӾ%\]C[`ctF21y%̮ 7_,,F[c&RECBm͖6.tQ ~ ~ @0 i-^ PpnL<&5mɈˡڴȷwieB{Zq^EnLFKa9% +d2ǙʭZr a)J~T Ϲ^BNUkU\䷥LgW*0c\ag=]ƓK' mPX{bsUF(#l"&t̚%Lc2MT=&-b)B媺|nygV?oHO6x)Ga[{i.;]u~j[=8JIJрU&(3nHx7avaOQyEs@245gW(dHܞ'!n0˅B$ m/hoњYBxIZb$;#:[|PT& eń0ԓoo(P//uLl9-DI`VPL&,ѣchA(Z-ߒOL E(DPBԭI d%1+.oM ^kJS_Pwc]5f" 37=w q /QYht8Y x㡛1>ejvyK :s^iA"Icx"h86#{ M?ݜqd +l ޾h7n. K}?6,@0ns8F5Sr9Y?מS 9z *rp̝M L:;eD/:sv96 S /'ѓg|r٪B]cϫDB?/aex `{^[ԫM]:X:x3Zo'J^.޼ZbpHzzԛ*역 6 HPeXdYءJ4%jssEXނ[PxK5}>]-G,(q<pX06^ba.邥ɝ:q[Vz%wIVXބ9域 oЦ8 t~P:KwHk ʹJj'd1}a$+:ovM2||~5C0ܵ_Ε=Đ\,|)s}CWj_g865qԇ6Q'kKl(.J g0`V!\`O)[–1ly6D.ԌXO4HQ M)>Hs49ηo'N;)vR֑ b z_*Ý,9nad_W*93v+X0d#I'E''$_@5ӽd ^kj0ɬ<R^Nl_` (p~/Wy1,yfmx|#G)覄kW1ioH9m\Wx_(CO$tod#"!GVOiv1f_}.o[7KaWad[qi+vNh %!)% xR=qMOFNwF|_vDTih`̞,g;kޛdjstOR$[1[")3&nM$~ G8mOHv1·h|x9cm9? "JF, B%ƱdRXmL/hcx¡`2VM$1#1#1#1IGb(vb "+)QQ&:G2/Q ڞRU!t[tfedφAzHƨiQk691lúm^RE7DwDT:-~:\{F Bـ[!(^>cmleDZĿgnלmDrķ8t. @ಘޱ{t8|hOX+Q⩸u`b-eףb{:&M #%HH5V]Às3lGx*g*f*]=*NѪڡYqEݐ];Ӽ}+`ڌs˯)Ǟ`~'viy96^#jVRwDN;rh V41c >q (71'/Fŵ+< [['A&>P4@'/e63ȩcUԑ/~it@*| Fw"ߤJllpkL;/k/~YF*7ZEgNK 2#3uv^l)94q*dEXG2T˞,QQQQQQngl=Lq;_9Xd9m u<C+cE'$N0-g~s#ߙ66xuri:1p{%"jh[_FJD!1Ӄ$tYǺy[x>^җ6 [,5&\Dg@V{_ґ@:HGH  _)3j]biqݛɀb IOSs~jO`Y}i滛Or}nB03s)τ 2snn0,o~iip6_3 99b0G 1#s`~ [<|5)l:Ӧ? T1#|6GIMďĨ}cGbmÍF9Lsl?oh^!!>$>o\xķfΖ*4[wq 7׮N7Ȧ^_hN4&*4Q#jv_M"Q~ЩLfrA *EF XK$)$r4)_=7dĝx mSL8٘CaKOڎaĭ@W+3avZȖe{&`,bټzt#鴎~\YZd gΕKs'*_`))OIߪY s +<^42^^4Q\;J3SNK[ζۯdM;?&r+B  hУ>Ӈ?$Ѣ)~T^v6a$SķqQaaHq3υw-{s~y|t>H/c=5{{6Qʵ@BLc~]SjlfSjw%-V>wϿUk|es2<8 y}zie/,C :qcop0hH%pL Mx;|>q1f2U(=ؔwz0' AXvPoDYs ٩c;忣wlWe0FwmK۴[뎽 ]nVky"#L 1$[!u?)d]l*iZcf^ASY$V߮Mԉ?3n8~0)i zdim˷u{E `c̖тSU{Nq}#I~ij"du@A^ckٍ(:.>E;8wav6Zo 5N pm-0Ԃv[lM觔1sNV*)&IhuwzNF`D?~^K Y^BȨ/xQ( Zh_@-kH4Y549-$lx>VtYv|E/c<Ƹ6Icm˜^5-wElKlPsժl'vz co0K xm%vm%̊o}T(Yq^!D[6@7Bc`tѭ8'4 _-^ W[P1-i@,]maD!sm6gyv imCc4m?vqe]XAE]gxvN+ )͊DR<AςM?_\]g^R2 t6`o{DU'@wo:΢lEMD!3<->85I{Hzv D3 ꥂ76SS ϥ js8(粦6ЕݾM۷>V\®߼]t{yec:>b+˯OW7VZI;pϦOEh>Ggʸr*[#y.kY;".Nmmym.(7]y>+C$ .J2Hk.[p;D-K:Â.([Jo>.tLFAa\F2؞6)'qrzLI⾇$h2 XICbmm./]Tm5l|*M㱫ׯ͓UoulKH%ՂKZ΂e%&hm,fshu՗Żsa!1>úZpٱuPienw8KCŸjP `hE_!ZAj۲ٸ嬪r W-kל5dJ➥yg: \UsW+iwi4Ɣ"s*V{,TV;U8"?& cJWЫ`6`!p"t tE#)ʠt)~$+U8c7&2FuA___t6hOUQd!+@iQaW\5T/9pxFlE*!n!T@|l”;shoR7O9$p+G"3k=,EO/v *r%O B#~Qp[ M 7Wq=Y;Ӽ L[MpcS w0S>e0YTܩIZ|p0"*^s;-ZHN~jp9bud%Ft۫)7-ǂ<r='q̠BݩYO>BQ $XZB^@f@'c"'B_\WyE`klmplV'c۰O`ڔ$zⷐŏSm"VĞD &mW9Z.a 6g|/9h}̃nb&e:6rF%J\n[>Ů=-ב42d`@ۜ9Hs XWB̑ IW-! &<)6p}\4H6/;]k"|{%x2?"Z8,ş '˨wzuQºNjю\aZiˋF~?hsc'yA\ՙV13baͳT!VFw$lR6+$J.ʹ/2t*Rc$s'mhL3񾼦|޳X&JR桩!)Z֮֗bxgHK4M6ukWaʛ -\z'}"R1~r;ɵ6׬S"* (5jqkvk+&P /CVx8mOo` ju agu<@IK5JV$V%/#M¶l෶Qn+m8m]"mjt #Mg?v2EK1 ԥt񱬇W4@1Yu ۄ>U/:^Y<!SY<å M^4fzXssAvț}ٕk恣DmX4#o )&L~cDn #!LF &m(TED<RY릤C>EHx<0DzmZH@bjb=Î6I&@>o-F5rvVǸG|%,z}:znUDŽ$r*):=@#B ^`ɬPwQd[D=wS; 2u071jt!~t5AD' I)dD7L|q5l^n~ZQO0mrU0庮Ū TU]P+F0srIRJ?lpwVݕCq(H G(u: tDf 3(,J9 f `CS0 f)5% ڔaYyԝqDR|m`:Vx ^e]ƓDۘF"-ri"cmWbѴ.8 q"B^FXHtP,v^{E5bmxh7]z}k9j Kxc&$Mm+ysT ëCY>öx_E^U~oA-ȼUqs9li΀L"V?qS%_0Cj(f%AoGToѵ0 툨P߿"* oQ[f50|__A1NZu||7sf;٭IW{ONяsWL~` LGYG8>;H~Co5LJRoF1a##F5>#7?5~њ\>zk4iߑc1h8tbIx#( MX^F4n/2_7l|\ٱlЅPI{'3wmoGraJeu_qmD)d AJGxFBtS1%xL6oH*VՅP.c;pO9OzĄ^!OϢ0++_/*$qPkBy977[)0PWO';TԿ)NF|RjT5Xs |'ч< p!3Hyt ظ}Sq[s/!_r c7)e)aǓ7*:E I1D}Yg3 %Y䋅Bc Z}>y019[-y1Ȝ6! 68OEjug HA%{&h##d ݤBu_H7쟥2Z:NdP/d~;.-*yb1v\>Sܐ&nepR*|<؟;QәF@őK',m^ov㾔_^*b~f(svV 9uw[E$]EB4$i!rClfa?*!hαS9)$D;yov\7P_eY ,ZOMM4ږFgՃ2(RN$O0VlkI{94$Ŝ`AÐ c4#(P͘mPT._eB0VbNg`pYIBH΄gkb木s\0f9tuÛ]@G|&x idեC:N ѶNLipL/jTgm:[w5N9wT?|FeߑJjG^LC&e<+h:Vz^G{X;fLG#'W3j ^J_?hpj}|L@_S z-@54_CѝxM)U@SE AexY >7_yAQo2o mrU-c@̈\D!vD.b\g7xg$Ohs>s"A0>}3+/1*Yf #1_ܓLS}l# 0[F{=#Fg/׌4_4F>nGcO-xvo%*bg4W2ԤO*jfXs&b1mnti7sA%0| &{LIৡH"aXPIPMvmA<@JHڄ=\Mdm' ŝ'a{wM=// SI*0j){!aXX8ZOteZ/SwU4oGD X{hj|Ӛ|JT~50tǁ sŇP&Wnl4G%Ry75kd c`EmWWE`-r]LUNN<Vj刁@TP{T+"5x J؜p -Riuga [%h(GW+ sZ-co{0fЅfmu9pOA)P zvm{]Nx'e>MQgeH,cxfj|dIIplLgϦ?[\zRh/ԙ+WuD^TrG9aNze\}0GK0N/؝}Dԭl8ΝkƤRqQp۩?L?zjPbIT).ЋDzoz;?9!fi6-Py;"G  bxD*i/?t=2Pڳgg@\)of\&ΟRst"U3$*Ka(TŚ$ $z 7&s8+A$G7ϗϢY \.#8)~88;|i^e5j׌G`,9v&|F4ڀi0mR*'@ z&$De wК+*ϒw6O1AQia9ڍ''";,7ˌʷ|et*YYbˇ5nDmcE߂[yKVBb 33Vj Vwt8|s/磎d7fǛs]G}Z"cf5f>)|Y *FՁ=O$fG+yy%K2FG%Sn*X`3qP*o8`Gu?GtWSb_2@AWzAz\bu:cV*4hGpkߜM Ҩ {.Љ["2)wx1.WLiFݟT̔2Pg+{4deql|[L\e6&wzV&sYg >6D`N3F9|kt,,K`W_hLp YԒoM"NnсXݣ !K;w.?=\ߑ>,w6jVm )eyt"qƸOƍ[.gӱ#AJ %J;G=c#Ţsƃε^uYP&nۛ.BvfamzcYh;m?5"d(ρZjߒu`!|O􇨆.n;\$/7Uk8znɇ40K0\~0@':y"@xx>t'@S,c1f{6ixTҚ }KĹz<'@"t}OiaǎErliI(O JŎ bbeGG' C/;BڞmSQM Iߗ Y&!z~]Qee2ӑpI6 8B<0G `*&R4@^9-(i bԝl*[6 $1_CojK~WwnN5 :)GNr mwD\T/ϖOfOly{< i[LVT+z{-Sa$r軫ӯ}~/]|`/;IL lrRȰXu$̰7O(gL_4I }#.vPK1r޾z¡Rҷّ˱9?546M4{a&h4vZHgxO%74JSUV'eKo$Ac0x2f@;@e$?=*9P򂪷r{?}r '+OrUAێ 1֓Y_선%@<_4r/+V}~l>?~>k?7T{>S9$L҉ ;Cj-WUt'_Fí}Y6MFBV. Qt쓯*u$LYצ[ѢېYuԙU|H=?ely5^]c5|ļ*<& 6ۚWT4cz|&7,f^%_]nfᄆ4+wӣ1l)Zy<^ "EQsژ8k`'bwTI|&EQo.hH:Mv nXe@{)y(_9@-L/Ŀ3?;X3H fQp+z/fe$FJ6N;5hgpDEtS'L2,|/ ~-ajϝ}(uMrl>Rf[}%Fcwd<(/L,sj3AAV[^{A2KkR8쎿NƉE>pNTF j  !E\0u,|ƴ%#kJq Aa79d$?j..mw s=ڐ+$`"wcʘ9\1ř)FbP{u)WFW$F萾.2Fۍ5{Fg.1UhR P7WeFH4G Wug0.*aTg6 \!gɣ8~7ڠpwžzOD!V *ͷvXh .^aH&B9L N, K{I( "GwUj;JM#LxZ0g|F'I)`(\Fjegu%Bk7l_czpŬ[ @^k[g$ŧ3(NE~)a‰[fƲ[ge,}Әl1Vy09++N(ZR.k/Q񽪰]@B EBvqȔ4`y%prnqOש4ucFÊW~lO' lNjTst^FWLaԛQoЛu50a1 =Ԭ_jR㬿o/1^s{ v#GTҶd]ӪR"gc|W_p© ]:_QU(OYffʥEW69^z_E}nC[F Ko9J,n>(>sFD 핹2Ο|.+F*PC`.ҽRETAhIf0Qٍ? mq93m*W%7̂~.*8O5ðʏ`?^!' \ljW8Qnhvtkѭգ[GVn>cOkLGgMng2F z:qS23LQVx $%Y Ӈۃ"MO2̀IPߎj2FGۚ4u;=9ӀQM$:_VcR;F&cQ# YgDrڿ3^P\H{3/#GJ3K}D3IEiHYFP׿R/ 5Xpo|0ft.9ӥ6q_S7p'3wk )ҤCiaHLԤ# .BNĔkBsL/iݒ[m +;e94ps({.`PZv8ydXs9KS "* hr.ݵh< +KYWCe {?gOYya_NZD_ol' *nOnLV,/b?9CMԀ}Kݬq:ͶܮDOr(Dvܴx}P]մ1)sFJ!h)G<8DdȄSAp&9}vxLߍ{!M%Vu`Hrt]X}zž{S-s@l #LkI{{e+g)z#>#׍1w^@s3t"zM1twĺ)D:5k#= R|k-?$wZͮ~d0yg}ItHR9&$}}L(HO)3_?8];q߫~&zо^;O|]$w0vnlfm'vSݧ,w0/['PX˝Ldө2oR{5WAoLP/Ij {1TXyj;d,>DƝ$_u:* ғݚegR;缬-va{$5zeBunG}?n}]8>]7@r<^5])٘4 :y VK>(%f!sk ` /zLTLX{rT3ՃE!U`Bmkc9U^!G'W?mX EDŐVU({E"d; a= vK&99va\ }skiA ڴ$QqDCCیcz-3SgŹFf%V狋n_J='*qzn \䪠6=XM"xgquBby^lF+ D֤`jNJ]Q{OTpsPvGͭ۔h7-n0J Jn:i3|}06GJ2U#H{* vr.]>sX;jt: $5$DS &>lr+Bjnnvٝ;P:>L^RIoi#Xm~O4>#yPaqzmfː!^ W`Fgм9dFh'M麷T6$`{$o`{x0ÇxJ x vK㬻yjRJ8Ih8a03u`Ĥzԋ3a('߽@%r@z?WtZg5v`C5/={R0!aHBrK"ڲ"ҖrV8JQ' 5rn~⽹;c9:?7N& g`8Qp 5/1q5}HlTR5qݜ i26@ "RVw`"^䃽&?t6AY7D snDZw#Q\@@Vӭ“ M:[-`սN.Xs *! u2IXZ,*|_RmǤnAs*W([o8rkni=mR`&lʀ00r±A29ns%a8ܽimWX!3h(1TP)Ltn­i+- Qq}ꓓ8 MFUM@ג* ?ZZ>ׇ|s7_9G NuzK ׏Qr|:K/{g6{ 裞 dOE쟉=_9AI?7,D^lbܩxB Y98!({NR'>G9emIRk82*#@*MPSj 19;D;_ed!'6zo/[Ț=)4hw3k5b;ٻ*Fsk&-z&}g <&ge lJ}MoͲ fŋ>lt^D:.`/uEz5jfgg G_|"vdS5<(\d:vӊuprFex0V%{R̩$:w*w~˱ľ{L *y؞d@$i4i9WER!C8" Ј,}+%c}sk4 ůxe Q/[ XyXB{s4'JtP_(Efo2?n7Ur3#I+rf@90q\!5XhY>#qliwxĖ;dI\qV{ 2oA-\ʗ`H ;LXM\ /*v~-`\R)JQq+3uR"Nh*: ˅(8mL33cU;v,3| Xpسf@79u 4އ90Cv0TVDb*ZwHNo?shd Ń_jO2 ?{ܤX*ԝ-KQk3N;ڬꐯxqC ͇1L nSMM\v(E%E%E%E%E%E%?PTrhy=Hz>NڬF٬w<0lIAiD༇(B: @Y8 byD" A21 IX2Jȴ-h%4bI0}EpU_&|d(~ t Z1;hqccq\T?Ŭ_8 <1;jH4$`&z hY~yi4`#TE6 }{l7T2;j$GIgLDL4{1=><,l'"ܷI| ezg8&iWA6ߢ}7;vSȯ {f~kV5>ʸ0PRh2n&NEݎN28&י7 4r"/Ig7~bA;ix4Jև1}><:*|.̧`nF5`8'&Ńqdf}U<| ዀ@() Pmyq:cxZO\c1uL<6T| fGa]2c6xA EGˢ"O[dArk*_Kɐj*fŶrM{ E~h7)y̯21;MH,lOcc[o4ߝiXL{ *S t(jK8i$h3Ό|XbI č_|)vN|1gFv5s]x ާqXoce#{?00}?ys{NiFm?3NpOoSaW-)5Vۓ"WB\OH'YXD UÚQ,$b񨀤9wl8Ks?fg}xC*U}DCǟ}▽P 0sD;K|B%bg҂#xhјGYʱB!Sz45ݏĺ揪ϽqT3zq"RbCuW7?>v;luC^>lcleDrĿgnלmq-l;]o5sz҉ ⣃ؠ/>~1EvMvZ鏠?OЭG^ns.=%G_XH8pY8I=~0ld<2ZţUMD|^t@}GTB!2 bxrI3Fr[Ej3s9ͨ{ |lI !gV_[d1FH;z`Q`cI1ˏ[l~@kp,x3t2AO/^7+HPE*:WtBW ?…ob_Mk: 6DM?p0qQf,ŪhDcxxxxhS\g%3Yoe#X㘙*g>qhYXX;/48 ~QHΦ@,Ge&G[[xhrj""?jx2l5CЬ14@>$ ]fcF;I׎mkڪ@ɨ CB!zJez`WCa]R8'f޶iW m8^~!{p8< #:e$ı86Fה8F {bZn896yf`q2X|SԜSXcy_yA2\r3ῂ̜DJ# ǛOZg//@$ 9Ĉ#bBX UÈ:fhҴ2$T3$Esq]rA;r䗏|M`,$T?$w@ ɨȇlC6/O?|0DSCTf>:g3{_Ζ*4'w1 snt)ҜOixќ$yThP EPonOLfl"q[,%wTJ]'Nrsap3AF@U,%-V> n$q :q>8y炼 pT= eb)5Y1NvMcrqw |)p0< Nx;|>q1f2U(]`N8[F,ui-%}^ '2L}*yMo|dWayqU$=tAxT6k[Б{2TAb4_hBnV -eql FoGc0"閥 ӦH^d˛XqDD:Q9fa"SZag* r`N1_I1]ӵoyȯM#;gT?ce;orJ}AeH ˟ҧ]SʡI9]"{%@lҼyZpVP`xlwm+7e<G`y Nc\i[-hu{6t/(ʧEFXy{,H?.C+~RV &nJOʰU?&f6+rc/"%]ul(fp.`RӲBo7l ˜._ᣅf16FҎDЀU 6‚0VڣA˅%ЪuB}ddm|L=v<;#\i_:2I;y iٶ^6(R =`?)GC26skʳ yeӱQM""B~{X2 @~ Z׭n/Y aV fyN> t>^U;]V&5}%oK=1>6CMc~2gdMw >lUkc6oY]x@F0+5^[y][r%zi-koD/ x-t[F ЍR\ܚr}4g>ȞC:7_E- 0W[P3l# -l,]maD %sm6gyv imHc4m?vq7e]XAE]gxcvN+ 3͊OŌg0C\0ݾ狫+-Lu,qmm=O,fv&Bf]o}@@ $$coӭ[RAvmT)eȥ rsM(o6ݾM۷V\®߼]t{yec:>b+˯OW7VZI;@ϥFx ?G)g)˸(r*[#qy.kY;"0nmm %ֱK8݇}|kU$Ir9Ww\)s"݄_I^gm&\c5뢜9Ƴk.7us]%%T ^jU]B\(tN^%=dXvYxK8{%נg~oNu %ƱbZY4B4e s~Z˻ұBgkd;Ǎݪ1O/-u()Nq "۹St=hths06wd eCl-^]A rZLgu}@^\NR4%jvCrWƺmL#-oO@%[ϡ*2Zlm"R宽*>`u+VX?5}΢lԥ 틑ty 6Џy-Ԃu0<F ܱ Wk9z'L+ΰK49|ʧ$<'ˀScPح5x-QZL秨MI\0AI4eVҐXv۪Knj<ǻyvn#j* rxkdEےy ZQw/ VjZ@lm6-k9jk\VK5uGҲgim^?Wk`՜FJ]52G1Ȝ^7 ձ p[+zBZjOk5Vh@; VBDI+i[ڴέ5BA)p.ep*0Ypȧ@+^$78pw&osujM퀊Y^ٍ-@\u zUN (BTލaft\ YӲev0!}GJ%; qln-^Z%10X$ij@!`yy]aM0f.\rP(ic *Et,<7Mlj ¸ BWv y-8 Fjb5#&Qz]Qm-+hc<$H-:Q G)X7լ*|ak'4DƼaQ%er7x.a&oZR-h5bU @/1.*vJҜvNoAC|-X X]CH?A2($]#}0IJ)Nl CQ|] SUTb 3:'YfPbo+| @y1*oJ۫r{_0eNڛM>Ӱk2 3 Z$K77D˶]'~ofS!H2wե"^tkwn0 /7Ȕ$PʧEFt2d8sLݦl D\-v=oLsM]h&Q=Wc0,^ ۉ9 a9~"D<䃃Yn76֗/X7o6WWDK+[=lv6:ۆՉ6&GSmi2X6%h* ^-oT-'Q` n[UD  )$f|dZr!ўɽ8\k0>Ŏo2ք+du$M X`;6'|&d/"o֕sdH>nmVk`c"C O ֺ *ADpΞ}?πuiixnv7E>?y]at@ !x\!W[@s\Sx+#ndtHA>qw auzM@:mtgC'iJx'@y!ҵ$"Ǖ5: 5 ж85̊H&R M桄<ydd8\PWé ֫ MlIq2/c ؆ &'|Nڢ^{ (L Ǐy81'N0mgI2jhc]԰.({Ӡbg~a"뵑Xn)x#K|u淰ULXclw'Df`_;TlF ERG6옐 PneǗ׵=E7HHw `U1Џ3/ʓ~(;}bzGA.Su`Xm:&2:)% `(iO2a0oB5JǍ 1I'5.:ٲj*y?M}i3]Y(7\^Qd WxCnp;mp*a_$6}ugfÎꀼ@Tߠ&UxWC E<|˸^2tRm^uwЯP8)=W+a: hLn"W@%MZf@gkIo %ƗN"qS !Σ/oQTGJoP$^{|Y<"]x@&*#{ OZk@d 8LhCkfn2 ֑]>Vm*ZҴkqǺ{-^qK?p @dmT@)+S0;R0T7_xf7}lEX8g'^LH$-z 47hD2gs0m"f)c>l/b*\dחBϸ -C>h8[%kXƜg:MUobҾHլ1Vk;65Ff#X%EV岭D/ED_=L &L,X1E"Ƚ:I:rMxRܤpE$LJznzA d Pm\3]׵X䫪 q(?Nn \IJJ@|炂 ΪYܐqYi7%NɤU%!ej 9h0׾e@a7EciI:HG3Uw[MhuR mCZl%4iNRIbEw $t/s^~5}+(#OBxJR94!H *Y הY P>I\SA%cۑO@;WƋ4"GTE}1p jw\ʴlTq=t$x'$02)gi$ " * Q_!V sej2(*^`${7uGѢ̯@0Ej!uZ,T$zl\F1d@r(JJgXacAF_6J[9ZNAI{>`>އ5EH0GUsu|#rQYnau71!2ROz-x X❁qQ[y 2o۠ ;3V;X}Q~ .\RKY=]FNj$lh±Oi2s./#`[g3_$btn&trd&m_o]|Ƨ'Gw+? #4G=~4&lHA%ߌF{Fa/#76[Y[-Ue͆yA9ذ!9xq!FyԻGTQ4ˋ}y}ekǂOPN-p/H~CHU0f8ح,+-1;x>2?<KTdI_ޜW23}VҺ2GE*cd vWb^!OϢ++ /*$rP lBy977[)0P7O'Hk; |ҿ=֫Gѭًtk. |чT pA6fd^6*f|6 x&nw5<4р ^% $d.f7*zEal>aW~™| CxfbXiLH{,PV˿6Xn¤?&䅸*b)Uk`X)kRH[ƕd*'x~\Ȍ7+_ez~{˟u^nKq4_mWk'lQ H%ltW1?,:3)gYV~fىB~@q?Чkua| _G~;vi[~nrZӡ1Zv1aQU??NCԊѨOC:lZ'u@C pz~,}:}*1Vz>/B#GϳxA^Ew<>bh]dz05~ܚ OP&5d$~>kN}\ٺ?.|ft,W%k7oWDog%m\ gd/SJi, 3y Uus'즇O'!vTx:;rq۵rܱlÈez!̵x>À5l!x #(퉷T&_2J}>;&bCĨoT0BUdĩĪ 0۪ժ JXk̡&Q]n@9P5"`xpu] Z=3uLBO!eXV -ؕn;*`H@9q#-CpPQ`JSS86~+piMGRj J )_\"1UH6X :CgDA|(mцu<% <_ 8;f,b -x`ϏRPd VgiBzPasj~;sB*@VNDme YOKo-+z)fMB<7 U@춶|ĮmݡDjqF]rDOAvq]@9~$[?€nF7YHaAb4ޏi.Hl7cah%9I[Zlʛ Y,SŽl1KN9 $´J1$ʣ>d[k4",,":Uc\d 0/9g9n]) eFsR4Go1^&&:[(Ja6KVu۬܌Ќ"VkP3[!'PXFU s93Js;1k $:+}d_yI FԵɷ9z`,H܁bn Ķz-FWLHg¾gܞ0@!8'Gْ4W C3#5'#/32?b715{S i0 ;k|#eʼ )cR2_? 'YUU.[q(dd0~rClI*Ϟ 7y<ܤtޤtihxD{~Z%?7[únⅬb5ytWkؠm/o[mUV1J<6z]Z2N>nm΢}/L]m_4ZaNܨ[T6V-]ެ ,w*UEIi[F /T/Ѽf^iq+EfG%9V/Ԃlz.\ V܏Bh7Բ{-6q*yj\z=x3xy<1P2V j-t%OW#D1S3ХJ|pǵ?X_zQ82JITY} fʳti]h*2#Г&=ui! _3_<2K#:`^0gSgh#3"1~¯t0;wrV*^$ܣp #Dto8.ߛdӪDb)S)b~|\ja#a&97ޚ) %ٗOi}y 0 $3. 9V^yQ(2j*2j&*f 7Lvԍ:+%w=rGz m|Ȥ>Jo2Bj{vTbi}>u#qzS ǣhP v2I&L۵1j}2ΣCg SX&gY1% c(oj~,@Lܕ~%H#{O2<@Г<yl=VB oOj,wj A3QS.V&tߩMʿ:)9tvfi ýrvnz&':ҏ1 豯.WS*4qp"ƕc6I`:[3K*iuRM)4QS n!7u GSژڱ;z.DF9d}tfGfIBYE˦ήPw:{">@fl>88JT4_.e\Ft^ g1;%lAs2]eOf# ?際ZlQyN #E &KlEңL+\kÛT* \_/Xsv})i5zUX>CCȉP;7zP9DӬ|gT!t SئH19iHk8/x#O)1s2&b;u4[$x |x 3 4;8%M7XLf /}ς6]1cAѕt=֙ҳصᨹd1$d3>_:&:eFvjby>a@8%G̼q3 y-r (_CxO<#! zmYN C暠 48h`X=Kr[lohvgI)]{l,q1KX:t&dd\u?g;xn>;;t27}'?0m HhޯS1DFO3d$|ЏepElcם}4P~cGN?air ḵ~ 0'09z]9Prs/^'BI%6o{B`o"ix[5ԏ&@\qXkuc9슚XOb Fdf.\U[P* c'"/3,vzB#2;< f(zSlSjG9v-浸&K1k $ 6\!D!|TD5]ώ2S.N;}bDAk!;GTΣ&L'ugJ_߈ciOD8<|=?hmuO-xyQ{ܹ9`Ҿ6,Z;m d{}]nE{vuf"F|fOP *T3w?l4g\* 0^>'/'O[GO2U7[Nt<>w*_{o8y<^/@_{7+Xs/'?14>e䗨G ϰWyd]τwwF2:ADa0^ ](b!l?Vt3OzPCr/ 0w3j& <~2Vd|zFq9W!νuM]ǭ׈txSv.j^-'a0lp14RFV]\NR_1ɀнy|dixC}oK1ߥDM$E[ݸz$ū=~f/[OɄ3o>HG-2 @(25fXu ۙ?o%,G3{XW,T{N1E4l{Ϯ*X ,7 EP}Z}Bl>rQm?31 U}x4rMӠfth´?t&@\43< QQASN|S XEFb<\n9 4#Z p63B{_q2UpR@qᨘ31?lUZ>?)1X62!s73Y>J9џ c>ߘOUj,)6X.9=W&l^ϲMs&otOs9\|#/v|jlEX,srsCo'ܪD~A:*fA&iMvn.bjdԇ2_1d7|33A"fa~_^a,Bֈ16M <a?fʆ !T2P)7 3OSAL;ibxy1WT%fu(5D*IL56Ent^4[g|TVNIRzɕ+M(&ҹ'˕{^@.KNk?LVI4v.Ozr8ɉ؏QI[pÐ!{#GՇƱ {qK>mPNi-4 f=u jZM- B 6"sqX(j@8$he2,r>ĈXÿÃ@9WE.u E`0u6E) {ᣪAoo{ *ӱ꺰:[}1y8YHfo:o<Ϫ]C=W&2_7!#NSQBW~QZ%E|tT3d7u (E^l򷛊9>.~`^$XJ?6 L]z^;ش@=QJ|tPD jc_O`-oɼԟ 8O gN"]_{v-|ZLebf0!r@5+PrrVkpW)Fr9>9ה @cxBCrnDBUX?Uc1;)BK&Kڱ쯽f7,ھ*c17^m]T\X&2{|VI1mIQn_6vf7*x1F-FLxǣwΛ`:7u lzA_ GG9~CMdyp!cz5 4H^8&|2LQݧtp+QeRxdc؅:<}ڍnݎ@?Mjmz 4!_yv \<zGj{CV>>Bg#;d}2p kH&128_N\ixNo[ϙܗ3ԗnH}1δ;W;*Ƈ%k6ߌͨgp D;gS?GM/Rԇf9 N= /İنu'# c'Mnjm=nCwS#'%gŒ8Lz6I;"i1>^Lα+>v?gYY qʱ2NbkҝVҖ']gȉs>TQ[飩}4:0g4r=͆;FFh (Ek=Ry\zd8(;[x?; K1yZChIN6KЫ,dBB$Ty!_YT:NcIRIN ADb+ʜ _]6+q{\` LZp1\Fq-Ÿp`AwN^؝Mp\Obuܢj;x[ٛKR"*O|ʗdFh~$ ALDž*U]C/|>6ܺ?fXHp@$qWxy}1zboCBl߱lv9}ČqI\ ҉$ow:ﯿj6~*j>1X#,'5 Tr9/r ! Qc(1XlZ]V߆V>k0V+x혜 UYն[w6𩠟Ȓ;O]gnpw[!Ź3畦Vwvכ۳7eTAqWlAIGΖH:(ɤFtZ^Y6Ac;IsKxFЄVns[-;66s^ӱQ"n1`kRHF'^ZmЪ=yP[q*OTYl@ 3zmLjYPG1nDj#otEZZhQ*:xvӖ iA<= ^ 4Z+g[[85}񃊽j 714q^~BI=̓tulm#Q݂M0Z8PRmhE S*M7vbl%xe^oITT8&Cm.$rѱLZs[-7~?;44Zo< "1̡ׄqݮZ W[\q C㯮tvcywzquhdvhJuwŗšua07O(Ռ;J$5u\tU lJ-/ɥ͗ߨАo!lYY3Zb3Bj|quh?i&0[[z`-ɨ&2^\6ӗj6Mo>#vԬՎzy kӇJz3_ 5'P"2zP+FtcV!ԹSww[~h鵡ZAKf׉in}h|u۴h8չ`m7цa C#hJ3Vc_ui14-*y8;䂚)nM ӢkW_(՚yshdU4c/o9J`r5XMeRڦfwapkx6ܖ2Z9V~3gꭡuԥxnh6Cz.MpI}^YNSZh)m6U`˛ mP^ud~94!Pim(g54U|-nCF^,Ѥ#z{MzNB}NwV`(/N}-ȳ?!O,X-S 0Zx[C#E]-iኺx60ؔ8\P[45Ԇ(=yM^[<ȁ;PM*XdNk"mMV X&=~j!7oh@FݡmHnPF;&o;C# _haW[pw!QqpWuM?a4`l boyO~{?9bat-0.12.1/assets/theme_preview.rs010064400017500001735000000002541353340210600152760ustar0000000000000000 // Output the square of a number. fn print_square(num: f64) { let result = f64::powf(num, 2.0); println!("The square of {:.2} is {:.2}.", num, result); } bat-0.12.1/assets/themes.bin010064400017500001735000000240071353340210600140460ustar0000000000000000x= q;{' ,>$VB`#8%FǀHx`ݝiwgE: @6m&‚f׌Aw>/_Wu[8@c!,gϫu.|=[-ڝ;ߩv, `%gՅ} Qr 1RSoJ]o}!ȋ`ޖ&"lEb:͊cZM +x4|h"%9T8zMu51Dw+w AP[i,ۉblǮ$ۻs|^&X>|Tg_ǎE-/`HIF/9FUDp\brݪl`o] `G7'Ƕ4g/b!+4D ) ?Y >`ehTc=HH|cԫ 8bJ/~X]A</q% fIٵ0IQ\郖F6*Hh,U7E1f6M](Rq͟ثa\hO+``ݶ\9tSO=hU13YJ]K{^PY"< qm§wV!8h\Q8Q"ow |ҳCVS;0:<. 6c#10N6p׺իg6`"K"rv|,0Tf=3|ARDg!:kK:xTABŌ e,w "O1j'k"I}(q o}WD3zݨu \Th@HL:v'>hL< ˎ)Osx<#j0eZK{y+, R}e`#vEo@l(Ny"(%DkxDnD=Q2){ս>qn!cͶ:]=so&h4!ͧ&θR_ g+FD]-y9сD}ݝLVl)Z^wѿV /9Iv')fokԋ>9 y9<c}Æ Y@_$Ύ>'0*}eTMVa~v󙹠n6Y8́,.(+/Ox?RN'UHBm.U6 nt0 ѩZq74dw~aV+ CO)fc% b ` ]{;%X&<0uhw oqn,DVVD7}fHZ;;X4u^C Xh֜o%#y0:p[ָR$ kaD̀hU2x Cc?DD`Ghy5{Rgk?U@a\݌А5|t%>mSW>֮]J/1o=Q[1S|shlĠh4Ķa{V9S_I_a[+ ~$E Ҿ$܍;!Pc'UXNNK0ā@ 'f)|s]􍌌r`Kǐ,>(JSqS$2Cbٿ|I yQ~2w0HK2UemTL8A{mɷ@VvTS@s8JER{Qiȵ_%/AIfA.fQd3R ʑY ŎCD1 >lL6⥼1dwZKTeXb,13$Fgl^&2@=-V4姊,DƆ.w=VM,JhJ[ ~8)u`H2*^/"i侮f4T.k!cuMKɆ(UTL:O@hzKs{\oo1uUR/:E6 }@,={z# {==in,6@!&"Xwh!oFQGD#)Zf_J&4y_܏L 9ix%-g{+V/Iy3=v"/^') .I=y@,8`Yj֢h->܊.@QC#iʺlʺpNcʲ.#MY׾;OS%Y$d..6x_E&:+e\KY߃,Y=HX &Bwe~}'xi9D@koysABΗ^Li69Բnj7xgXڿ> 9X>y6# v6[ !P^t8emVBXa1͉^,`!lS#)@=`:, z6zdX}K2E7L, F}Ep<(#z*QY S`4Yp}uJ(+a* "?BQhvblbTg'VQ%6Db;N8긢.;!%Mꆲd,涮Z֞|h"oYVibelF[S?78+ɡ5m2G⺹^|bᛅɗ |TO5"Θz %>I={mF0@X¢j58/ ,"XPƓ{4ZM)/a7#5p`seqHU@фSKe6`lƧQPQ<>ވ͝&vF!QO+yf?Rêz]|)R+AWR(_bAD2DӒbC^wqGHbQxYŏYo"(zwT`Xaljaw !=z=9zA BHcT.ۥ'0k?-ͩ`&yEA.eytSJ0!fKL2vwqRF$m"/ mCym8ԢZD.;ʐrtph Q c]BkD$t ,okE=ѭa/\ bR#Ĺ>T˿4=3hza2Q&IVK͟18co *g9 s@v Jku,C:P2_1X_lbȁskV-iKޭ.'٥+0s.hmΥU|hcj OW%/1=h)jFAGWٰm F\1EՓ'$qhRhb. O/Zʝ@f[Uݖ$ /ŭP)$$')Re^K0>hƃCNH?.Yn^TX0ICUاnK{VIX*PQ"T2 t,IM= Q`K2§` UݨgeVMK9 a {¼8Fc2F؟}nJD)j-e#nE ab'C{2Cb=u!w!1HtwVɽ絨aY/dH` @Ta6Յ۹xfsu4$/ 14tmݺ[U3ԹKDG rTQV|R$'U8%QIO!Ī7(U Ǭt5u˓6hx q8~u+[< cKFúKw /w̺lxUͦdxдiLV  *fˋXvlբq8pCrx*0Z̎VBCD>,F IhZ.}D)[5Ef9HQbk[h31H0NRBƠ2B O^pıHi߶*w7dQ[;Hlc<δڸɾ΍Nj_.?ԓ}|Mn_7~y̬Y. R>l; ds/T/7m8,o+K->i^} De/SԞialIv/l~E abQeܿѻ{Ϥ$Ou^aY8 m0T91#:)Wh}-jIG cqN#Àn9 n0D! [8**Ǟx"%@H,ax6k%c\)^zi[iVHSǽQp G")JL; |;|Xk:-6s+66Vq5!¿&~_>n:{gW|Le@׃;>p|;0De{.NуN1}g;Gs)\ 4wOrHr(gwS'NQ"}StL"6 !|K>l=l=lc?{ ֬{aE 5{'tn7fT+m=AtHF;᝔W8WD^WV%>MMKVEVg+{J oSuR%ҫ$Ӣd;*tC`T{Ĭi^I_SUX$0*'l>_eS岩º\6UXם˦ |Snj:ޫ,). B* lT.",lEd Kp6*,zS $ z3X5c^,`m+94]m+awJ؝$` l $k+qJ^֜3^5f@3frF FuꃮB>8xQ=o{+-&61\mfdṠsS`Pw8HզUש2Lg6Im8}1 Me3\mo# ێؤOr =o@>&z\}p1R}>uDCov͚t|3k î},?<<܇>SP?y 1ĂkGɯ$} >| uF}ot=jV-ĦjJT-ՔXkݟRMY$~;錛xu4)b~:@^N^YRJR%T֧TSgPY*zTR DSHF10w}u#1 p1f`r&a%{\p?I._I.I˪NUŭ~7u.lp%~R^)FEu{\ Ik:\X.Q_7iD0A3o{d]3+v**$n7=V/MF>>[ض=>[7m*n,:-PY ?tb4?>/ X?2& zɹ.M2a7a鑖 JxD^gAiEADdśdStJ&Cd&aA`0/H9&QQ#I!$B~Ȝz D+*D#P|^ |%\@&jyhTQM|fujs=J ÁGv URR&I4uQanrD益Qm (]rpxJǼhf$"vxH8aqbJ&%5lWhW! -}Y!%ٍ#OT2maO_U]ʶ®,恌mm1hA@!Vd14-Ru׷)g6^xtO?=!_}<#ߛBr6L_ዃ7L6%ua:K/*B]pdO6Y?_'e'D&dT'Zg1^JN? '7#ose>tF?)~웦q1Ï`?BtfIq7 ,"}||<ۗN㼼 _0.ipA)p/Cl^Kl Ȧ00ٰ+i ciɦٰd.ަ) l'kSDx)b q.j.V Vaޱ:öfnu'>=!pYG!^$|*Xox'c87oL1*BL٪pEaYݜ J0|ȝhm&TZ>ZPF0Ow%Vg" p`h#t BJF[6Ip2S,uttp^g%J:HRL>mj,G/A%%* i-1WQLgCl0lҜY5!BbMeKZ;ݾt+-a* 0m`mus]MKZSe~2bV?gޔW:F-uخ6r]+iPM1q+^@a,a#juFS.Ù64'a9玛ig7 F B=2"]pqGc7`Bߟ_; w.ўm%֛ߐ荖:- %lŪws/P'=)m]S;f+\XGѝS MGAP ǣ؉&'{!OF-@&7 ^ w=I} _Ĭz1D2"fPŒ9Bd)#b /[ჳDF8E DJfTRyaF6QW0b$&DQ2*4:IFc2*gTu-bȨt2*FTNAJ,¶s**cN8%L$π8?VK`F%I^$%f$`ݡ$1[Iu$`X$C,%I ױ$ v븫H'F#={]ryԂfz3;k R;&Cxz{ǰ w聡w<;zCxs: e00_z8d-LkVwb8H1+txg<烀Cx kA^1 ?бzO^СW|»fiV(YݓǜMGhp{9tqVͽz`\bJvxkz.4s#*S*f)N~ݴ"H4yC]5qfTHS21'BFqlMi*UQ$~kزϖn/x⓭jԕB\G>]ȑ_L=4w^\Z[ZQ?N Jcu fزV+0hd,t2ƒ$Ip?p7B}z5ջ bQCkӯ7y'̜X< 1e.g1;ÀMrRTۇElwIe3_>{ ɥmz9"¤f]qÐE&1PĎ?!3:NbYt-̲#ZM1'Q[>ۈL[ N k5 ԗwS~jc\^>]׋IEdٯVBD)ב0>K8/' {mn w07|iB * 0BmO0hу 蝽UBv@Uы^(f{3k<7Q֕LK _ɇw<"*4k_oc"km?$ޣp)7(XNɷUFC=w/vKweV8fF_eQ1M֍"ͱh\WYkI 텞 SA9ͪ"!4?Nc yc return, // Some(outdir) => outdir, // }; // fs::create_dir_all(&outdir).unwrap(); // let mut app = build_app(true); // app.gen_completions(BIN_NAME, Shell::Bash, &outdir); // app.gen_completions(BIN_NAME, Shell::Fish, &outdir); // app.gen_completions(BIN_NAME, Shell::Zsh, &outdir); // app.gen_completions(BIN_NAME, Shell::PowerShell, &outdir); // } bat-0.12.1/ci/.gitattributes010064400017500001735000000000241353340210600140440ustar0000000000000000* linguist-vendored bat-0.12.1/ci/before_deploy.bash010075500017500001735000000127651353340210600146500ustar0000000000000000#!/usr/bin/env bash # Building and packaging for release set -ex build() { cargo build --target "$TARGET" --release --verbose } pack() { local tempdir local out_dir local package_name local gcc_prefix tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp) out_dir=$(pwd) package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET" if [[ $TARGET == "arm-unknown-linux-gnueabihf" ]]; then gcc_prefix="arm-linux-gnueabihf-" elif [[ $TARGET == "aarch64-unknown-linux-gnu" ]]; then gcc_prefix="aarch64-linux-gnu-" else gcc_prefix="" fi # create a "staging" directory mkdir "$tempdir/$package_name" mkdir "$tempdir/$package_name/autocomplete" # copying the main binary cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/" "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME" # manpage, readme and license cp "doc/$PROJECT_NAME.1" "$tempdir/$package_name" cp README.md "$tempdir/$package_name" cp LICENSE-MIT "$tempdir/$package_name" cp LICENSE-APACHE "$tempdir/$package_name" # various autocomplete # TODO: disabled for now, see issue #372 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion" # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete" cp assets/completions/bat.fish "$tempdir/$package_name/autocomplete" # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete" # archiving pushd "$tempdir" tar czf "$out_dir/$package_name.tar.gz" "$package_name"/* popd rm -r "$tempdir" } make_deb() { local tempdir local architecture local version local dpkgname local conflictname local gcc_prefix local homepage local maintainer homepage="https://github.com/sharkdp/bat" maintainer="David Peter " case $TARGET in x86_64*) architecture=amd64 gcc_prefix="" ;; i686*) architecture=i386 gcc_prefix="" ;; aarch64*) architecture=arm64 gcc_prefix="aarch64-linux-gnu-" ;; arm*hf) architecture=armhf gcc_prefix="arm-linux-gnueabihf-" ;; *) echo "make_deb: skipping target '${TARGET}'" >&2 return 0 ;; esac version=${TRAVIS_TAG#v} if [[ $TARGET = *musl* ]]; then dpkgname=$PROJECT_NAME-musl conflictname=$PROJECT_NAME else dpkgname=$PROJECT_NAME conflictname=$PROJECT_NAME-musl fi tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp) # copy the main binary install -Dm755 "target/$TARGET/release/$PROJECT_NAME" "$tempdir/usr/bin/$PROJECT_NAME" "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME" # manpage install -Dm644 "doc/$PROJECT_NAME.1" "$tempdir/usr/share/man/man1/$PROJECT_NAME.1" gzip --best "$tempdir/usr/share/man/man1/$PROJECT_NAME.1" # completions install -Dm644 assets/completions/bat.fish "$tempdir/usr/share/fish/completions/$PROJECT_NAME.fish" # readme and license install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md" install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT" install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE" cat > "$tempdir/usr/share/doc/$PROJECT_NAME/copyright" < "$tempdir/DEBIAN/control" < Architecture: $architecture Provides: $PROJECT_NAME Conflicts: $conflictname Description: A cat(1) clone with wings. A cat(1) clone with syntax highlighting and Git integration. EOF fakeroot dpkg-deb --build "$tempdir" "${dpkgname}_${version}_${architecture}.deb" } main() { build pack if [[ $TARGET = *linux* ]]; then make_deb fi } main bat-0.12.1/ci/before_deploy.ps1010064400017500001735000000013441353340210600144220ustar0000000000000000# This script takes care of packaging the build artifacts that will go in the # release zipfile $SRC_DIR = $PWD.Path $STAGE = [System.Guid]::NewGuid().ToString() Set-Location $ENV:Temp New-Item -Type Directory -Name $STAGE Set-Location $STAGE $ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip" Copy-Item "$SRC_DIR\target\release\bat.exe" '.\' # TODO: disabled for now, see issue #372 # Copy-Item $SRC_DIR\target\release\build\bat-*\out\_bat.ps1 '.\' # readme and license Copy-Item $SRC_DIR\README.md '.\' Copy-Item $SRC_DIR\LICENSE-MIT '.\' Copy-Item $SRC_DIR\LICENSE-APACHE '.\' 7z a "$ZIP" * Push-AppveyorArtifact "$ZIP" Set-Location .. Remove-Item $STAGE -Force -Recurse Set-Location $SRC_DIR bat-0.12.1/ci/before_install.bash010075500017500001735000000015611353340210600150120ustar0000000000000000#!/usr/bin/env bash set -ex if [ "$TRAVIS_OS_NAME" != linux ]; then exit 0 fi sudo apt-get update # needed for musl targets sudo apt-get install -y musl-tools # needed to build deb packages sudo apt-get install -y fakeroot # needed for i686 linux gnu target if [[ $TARGET == i686-unknown-linux-gnu ]]; then sudo apt-get install -y gcc-multilib fi # needed for cross-compiling for arm if [[ $TARGET == arm-unknown-linux-gnueabihf ]]; then sudo apt-get install -y \ gcc-4.8-arm-linux-gnueabihf \ binutils-arm-linux-gnueabihf \ libc6-armhf-cross \ libc6-dev-armhf-cross fi # needed for cross-compiling for arm64 if [[ $TARGET == aarch64-unknown-linux-gnu ]]; then sudo apt-get install -y \ gcc-4.8-aarch64-linux-gnu \ binutils-aarch64-linux-gnu \ gcc-aarch64-linux-gnu \ libc6-dev-arm64-cross fi bat-0.12.1/ci/script.bash010075500017500001735000000006771353340210600133350ustar0000000000000000#!/usr/bin/env bash set -ex # Incorporate TARGET env var to the build and test process cargo build --target "$TARGET" --verbose # We cannot run arm executables on linux if [[ $TARGET != arm-unknown-linux-gnueabihf ]] && [[ $TARGET != aarch64-unknown-linux-gnu ]]; then cargo test --target "$TARGET" --verbose # Run 'bat' on its own source code and the README cargo run --target "$TARGET" -- src/main.rs README.md --paging=never fi bat-0.12.1/doc/README-ja.md010064400017500001735000000440011353340210600131750ustar0000000000000000

bat - a cat clone with wings
Build Status license Version info
A cat(1) clone with syntax highlighting and Git integration.

特徴使い方インストールカスタマイズプロジェクトの目標と既存の類似したOSS • 翻訳 [中文][日本文]

### シンタックスハイライト `bat` は多くのプログラミング言語やマークアップ言語のシンタックスハイライトに対応しています。 ![Syntax highlighting example](https://imgur.com/rGsdnDe.png) ### Gitの統合 `bat` は `git` とも連携しており、差分を表現する記号が表示されます(図の左端): ![Git integration example](https://i.imgur.com/2lSW4RE.png) ### 空白文字の可視化 `-A`/`--show-all` オプションをつけることで、空白文字を可視化できます: ![Non-printable character example](https://i.imgur.com/WndGp9H.png) ### 自動呼び出し 出力が1つの画面に対して大きすぎる場合、`bat` は自身の出力を `less` にパイプで繋げることが可能です。 ### ファイルの連結 あなたはさらにファイルを連結させるに使うことも可能です:wink:。 `bat` は非対話型のターミナルを検出すると、いつでも `cat` の完全互換として振る舞い、 プレーンなファイルを表示します。 ## 使い方 単一のファイルを表示させたい ```bash > bat README.md ``` 複数のファイルを一度に表示させたい場合 ```bash > bat src/*.rs ``` 標準入力から自動的に構文を決定させたい場合 ```bash > curl -s https://sh.rustup.rs | bat ``` Read from stdin, specify the language explicitly 標準入力から明示的に言語を指定したい場合 ```bash > yaml2json .travis.yml | json_pp | bat -l json ``` 空白文字を可視化させたい場合: ```bash > bat -A /etc/hosts ``` `cat` の代わりに `bat` を使用する際の例: ```bash bat > note.md # quickly create a new file bat header.md content.md footer.md > document.md bat -n main.rs # show line numbers (only) bat f - g # output 'f', then stdin, then 'g'. ``` ## インストール ### Ubuntu *... や他のDebianベースのLinuxディストリビューション* 最新の `.deb` パッケージを[こちら](https://github.com/sharkdp/bat/releases)からダウンロードして、インストールしてください: ``` bash sudo dpkg -i bat_0.12.1_amd64.deb # adapt version number and architecture ``` ### Arch Linux [Arch Linuxの公式リソース](https://www.archlinux.org/packages/community/x86_64/bat/)からインストールできます。 ```bash pacman -S bat ``` ### Void Linux xbps-ininstall経由で `bat` をインストールできます。 ``` xbps-install -S bat ``` ### Fedora [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/)経由で `bat` をインストールできます。これはFedora 29以上ではデフォルトで有効化されています。 もしそうでなければ、 `dnf install fedora-repos-modular` を実行してセットアップし、 `fedora-modular` と `fedora-updates-modular` が `/etc/yum.repos.d` で有効化されていることを確認してください。 ```bash dnf module install bat ``` ### Gentoo Linux [Gentoo Linuxの公式リソース](https://packages.gentoo.org/packages/sys-apps/bat)からインストールできます。 ```bash emerge sys-apps/bat ``` ### FreeBSD 事前にコンパイル済みである[pkg](https://www.freshports.org/textproc/bat)をインストールできます: ```bash pkg install bat ``` または、FreeBSDのportsから自身でビルドすることも可能です: ```bash cd /usr/ports/textproc/bat make install ``` ### nix `bat` を[nix package manager](https://nixos.org/nix)経由でインストールすることができます: ```bash nix-env -i bat ``` ### openSUSE You can install `bat` with zypper: `bat` をzypperでインストールすることができます: ``` zypper install bat ``` ### macOS [Homebrew](http://braumeister.org/formula/bat)でインストールすることができます: ```bash brew install bat ``` ### Windows You can download prebuilt binaries from the [Release page], or install it with : 事前にビルド済みのバイナリを[リリースページ](https://github.com/sharkdp/bat/releases)からダウンロードすることができます。または、[scoop](https://scoop.sh/)でインストールすることも可能です。 ```bash scoop install bat ``` [See below](#using-bat-on-windows) for notes. ### Docker コンテナ内で`bat` を使いたい方のために[Docker image](https://hub.docker.com/r/danlynn/bat/)が用意されています。 ```bash docker pull danlynn/bat alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat' ``` ### Ansible [Ansible](https://www.ansible.com/)でインストールすることができます: ```bash # Install role on local machine ansible-galaxy install aeimer.install_bat ``` ```yaml --- # Playbook to install bat - host: all roles: - aeimer.install_bat ``` - [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat) - [GitHub](https://github.com/aeimer/ansible-install-bat) これは以下のディストリビューションで動作するはずです: - Debian/Ubuntu - ARM (eg. Raspberry PI) - Arch Linux - Void Linux - FreeBSD - MacOS ### From binaries 多くの異なるアーキテクチャのためのプレビルドバージョンを[リリースページ](https://github.com/sharkdp/bat/releases)からチェックしてみてください。静的にリンクされている多くのバイナリも利用できます: ファイル名に `musl` を含むアーカイブを探します。 ### From source `bat` をソースからビルドしたいならば、Rust 1.29 以上の環境が必要です。そして、 `cargo` をビルドに対して使用します: ```bash cargo install bat ``` `cmake` と `libz` 開発パッケージ(`libz-dev` または `libz-devel`)が正しくビルドをするためにインストールする必要があるかもしれません。 ## カスタマイズ ### ハイライト テーマ `bat --list-themes` を使うと現在利用可能なシンタックスハイライトのテーマを入手できます。 `TwoDark` テーマを選ぶためには `--theme=TwoDark` オプションをつけるか `BAT_THEME` という環境変数に `TwoDark` を代入する必要があります。 シェルの起動ファイルに `export BAT_THEME="TwoDark"` と定義すればその設定が変わることはないでしょう。あるいは、 `bat` の[設定ファイル](https://github.com/sharkdp/bat#configuration-file)を利用してください。 もし、ファイルにより異なるテーマを利用したい場合は、以下の[`fzf`](https://github.com/junegunn/fzf)を利用した以下のコマンドを使うことができます: ``` bash bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file" ``` `bat` はデフォルトだと黒い背景色のターミナルに適しています。しかし、`GitHub` や `OneHalfLight` のような白い背景色のテーマでもいい感じにすることができます。 以下のカスタムテーマを参考にしてみてください。 ['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes) ### 出力のスタイル `--style` を使うことで `bat` の表示の見た目を変更することができます。例えば、 `--style=numbers,changes` と入力します。すると、Gitの差分と行番号だけが表示され、グリッド線とファイルヘッダーは表示されません。 環境変数に `BAT_STYLE` を定義するとこれらの設定を永続的に使用することができます。 [設定ファイル](https://github.com/sharkdp/bat#configuration-file)を参考にしても良いでしょう。 ### 新しい構文の追加 / 言語の定義 `bat` はシンタックスハイライトのための[`syntext`](https://github.com/trishume/syntect/)という最高にイケてるライブラリを使用しています。`syntect` はSublime Textのために作られた[`.sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html)テーマです。新しい構文を定義するために以下の手順を行います。 構文定義ファイルを入れておくためのフォルダを作る: ```bash mkdir -p "$(bat --config-dir)/syntaxes" cd "$(bat --config-dir)/syntaxes" # Put new '.sublime-syntax' language definition files # in this folder (or its subdirectories), for example: git clone https://github.com/tellnobody1/sublime-purescript-syntax ``` 次のコマンドを使用して、これらのファイルをバイナリキャッシュに解析します: ```bash bat cache --build ``` 最後に `bat --list-languages` と入力すると新しい言語が利用可能かどうかチェックします。 デフォルトの設定に戻したいときは以下のコマンドを実行します: ```bash bat cache --clear ``` ### 新しいテーマの追加 これは構文を新しく定義するやり方と非常に似ています。 まず、新しいシンタックスハイライトのテーマのフォルダを作ります: ```bash mkdir -p "$(bat --config-dir)/themes" cd "$(bat --config-dir)/themes" # Download a theme in '.tmTheme' format, for example: git clone https://github.com/greggb/sublime-snazzy # Update the binary cache bat cache --build ``` 最後に、 `bat --list-themes` で新しいテーマが利用可能がチェックします ### 異なるページャーの使用 `bat` は環境変数 `PAGER` に使用するページャーを明記します。 この環境変数が定義されていない場合、デフォルトで `less` が使用されます。もし、異なるページャーが使用したい場合は、`PAGER` を修正してください。または、`PAGER` を上書きする環境変数として `BAT_PAGER` を定義することも可能です。 もし、ページャーにコマンドライン引数を渡したい場合は、 `PAGER`/`BAT_PAGER` 環境変数を定義してください: ```bash export BAT_PAGER="less -RF" ``` 環境変数を利用する代わりに、 `bat` の[設定ファイル](https://github.com/sharkdp/bat#configuration-file)の `--pager` オプションを使用することも可能です。 **注意**: デフォルトにより、ページャーが `less` にセットされているならば `bat` は以下のコマンドラインを受け付けるでしょう。 ページャーのオプション: `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen` , `-X`/`--no-init` 最初の `-R` はANSIカラーを正しく解釈するために必要です。2番目の `-F` は出力サイズがターミナルの縦のサイズよりも小さいならば `less` に即座に終了するように命令します。したがって、少量のファイルのためにページャーを終了する `q` を押す必要がありません。3番目のオプションの `-X` は `less` の古いバージョンの機能である `--quit-if-one-screen` でバグを修正するために必要です。運の悪いことに、これは `less` のマウス-ホイールのサポートを無効にします。もし、マウス-ホイール スクローリングを有効にしたいなら、`-R` だけをオプションとしてつけてください(ただし、これは `--quit-if-one-screen` を無効にするでしょう)。または、 `less` の最近バージョンを利用し、 `-RF` をつけてください。 これは望ましいことに `--quit-if-one-screen` と マウス-ホイールスクローリングの両方を有効にするでしょう。 スクロールが未だ動作しないのであれば、加えて `-S` オプションを追加してみてください。 ## 設定ファイル `bat` は設定ファイルでカスタマイズすることが可能です。ファイルの場所はOSに依存します。使用しているOSのデフォルトパスを調べるには以下のコマンドを実行してください: ``` bat --config-file ``` また、環境変数 `BAT_CONFIG_PATH` に設定ファイルの場所を明記することもできます: ```bash export BAT_CONFIG_PATH="/path/to/bat.conf" ``` ### フォーマット この設定ファイルはコマンドライン引数の単純なリストです。 `bat --help` を利用すると、利用可能なオプションとその値を閲覧することができます。さらに、`#` でコメント文を加えることができます。 設定ファイルの例: ```bash # Set the theme to "TwoDark" --theme="TwoDark" # Show line numbers, Git modifications and file header (but no grid) --style="numbers,changes,header" # Use italic text on the terminal (not supported on all terminals) --italic-text=always # Add mouse scrolling support in less (does not work with older # versions of "less") --pager="less -FR" # Use C++ syntax (instead of C) for .h header files --map-syntax h:cpp # Use "gitignore" highlighting for ".ignore" files --map-syntax .ignore:.gitignore ``` ## Windows での `bat` の利用 Windows 上で `bat` はほとんど動作しますが、いくつかの機能は設定を必要をする場合があります。 ### ページング Windows only includes a very limited pager in the form of `more`. You can download a Windows binary for `less` [from its homepage](http://www.greenwoodsoftware.com/less/download.html) or [through Chocolatey](https://chocolatey.org/packages/Less). To use it, place the binary in a directory in your `PATH` or [define an environment variable](#using-a-different-pager). ### 色 Windows 10 は[v1151](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update))からbashの新しいバージョンと同様に `conhost.exe`(コマンドプロンプト)と PowerShell の色をネイティブサポートしていません。Windows の新しいバージョンでは、[Cmder](http://cmder.net/)を使うことができます。これは[ConEmu](https://conemu.github.io/)を含んでいます。 **注意:** Git と MSYS の `less` はWindows上で色を正しく解釈しません。もし、あなたが他のページャーをインストールしていないのであれば、 `--paging=never` オプションを付け加えるまたは `BAT_PAGER` に空文字を設定することでページングを完全に無効にできます。 ### Cygwin Windows上の `bat` は Cygwin のunix風のpath(`/cygdrive/*`)をネイティブサポートしていません。 絶対的なcygwinパスを引数として受けたときに、 `bat` は以下のエラーを返すでしょう: `The system cannot find the path specified. (os error 3)` wrapperを作成するまたは以下の関数を `.bash_profile` に追記することでこの問題を解決することができます: ```shell bat() { local index local args=("$@") for index in $(seq 0 ${#args[@]}) ; do case "${args[index]}" in -*) continue;; *) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";; esac done command bat "${args[@]}" } ``` ## トラブルシューティング ### ターミナルと色 `bat` はターミナルがトゥルーカラーをサポートしている/していない関係なくサポートします。しかし、シンタックスハイライトのテーマの色が8-bitカラーに最適化されていない場合、24-bitであるトゥルーカラーをサポートしているターミナルを使用することを強く推奨します(`terminator`, `konsole`, `iTerm2`, ...)。 この[記事](https://gist.github.com/XVilka/8346728)には24-bitカラーがサポートされているターミナルの一覧が掲載されています。 本当の色をターミナルにセットするために、環境変数 `COLORTERM` に `truecolor` か `24bit` のどちらかを代入してください。さもなければ、 `bat` はどの色を使うのか決定することができません。または、24-bit エスケープシーケンスがサポートされません(そして、8-bit colorに戻ります)。 ### 行番号とグリッド線がほとんど見えない 異なるテーマを試してみてください(`bat --list-themes` でテーマを閲覧できます)。 `OneHalfDark` と `OneHalfLight` テーマはグリッド線と線の色を明るくします。 ## 開発 ```bash # Recursive clone to retrieve all submodules git clone --recursive https://github.com/sharkdp/bat # Build (debug version) cd bat cargo build # Run unit tests and integration tests cargo test # Install (release version) cargo install # Build a bat binary with modified syntaxes and themes bash assets/create.sh cargo install -f ``` ## プロジェクトの目標と既存の類似したOSS `bat` は以下の目標を達成しようと試みています: - 美しい高度なシンタックスハイライトの提供 - ファイルの差分を表示するためのGitとの連携 - (POSIX) `cat` との完全互換 - ユーザーフレンドリーがコマンドラインインターフェースの提供 既存の類似したOSSはたくさんあります。 `bat` とこれらを比較した表が[こちら](alternatives.md)にあります。 bat-0.12.1/doc/alternatives.md010064400017500001735000000136061353340210600143600ustar0000000000000000# Alternatives The following table tries to give an overview *from `bat`s perspective*, i.e. we only compare categories which are relevant for `bat`. Some of these projects have completely different goals and if you are not looking for a program like `bat`, this comparison might not be for you. | | bat | [pygments](http://pygments.org/) | [highlight](http://www.andre-simon.de/doku/highlight/highlight.php) | [ccat](https://github.com/jingweno/ccat) | [source-highlight](https://www.gnu.org/software/src-highlite/) | [hicat](https://github.com/rstacruz/hicat) | [coderay](https://github.com/rubychan/coderay) | [rouge](https://github.com/jneen/rouge) | |----------------------------------------------|---------------------------------------------------------------------|----------------------------------|---------------------------------------------------------------------|------------------------------------------|----------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------| | Drop-in `cat` replacement | :heavy_check_mark: [*](https://github.com/sharkdp/bat/issues/134) | :x: | :x: | (:heavy_check_mark:) | :x: | :x: [*](https://github.com/rstacruz/hicat/issues/6) | :x: | :x: | | Git integration | :heavy_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | | Automatic paging | :heavy_check_mark: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | | Languages (circa) | 110 | 300 | 200 | 7 | 80 | 130 | 30 | 130 | | Extensible (languages, themes) | :heavy_check_mark: | (:heavy_check_mark:) | (:heavy_check_mark:) | :x: | (:heavy_check_mark:) | :x: | :x: | :x: | | Advanced highlighting (e.g. nested syntaxes) | :heavy_check_mark: | :heavy_check_mark: | (:heavy_check_mark:) ? | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | Execution time [ms] (`jquery-3.3.1.js`) | 624 | 789 | 400 | 80 | 300 | 316 | 157 | 695 | | Execution time [ms] (`miniz.c`) | 66 | 656 | 26 | 8 | 53 | 141 | 75 | 254 | | Execution time [ms] (370 kB XML file) | 238 | 487 | 129 | 111 | 110 | 339 | 147 | 359 | If you think that some entries in this table are outdated or wrong, please open a ticket or pull request. Some other alternatives that are also related, but not yet included in the table: - [lesspipe](https://github.com/wofr06/lesspipe) - [vimpager](https://github.com/rkitover/vimpager) bat-0.12.1/doc/bat.1010064400017500001735000000120651353340210600121630ustar0000000000000000.TH BAT "1" .SH NAME bat \- manual page for bat .SH DESCRIPTION bat - a cat(1) clone with syntax highlighting and Git integration. .SH "USAGE" .IP bat [OPTIONS] [FILE]... .IP bat .SH "OPTIONS" .HP General remarks .IP Command-line options like '-l'/'--language' that take values can be specified as either '--language value', '--language=value', '-l value' or '-lvalue'. .HP \fB\-l\fR, \fB\-\-language\fR .IP Explicitly set the language for syntax highlighting. The language can be specified as a name (like 'C++' or 'LaTeX') or possible file extension (like 'cpp', 'hpp' or 'md'). Use '\-\-list\-languages' to show all supported language names and file extensions. .HP \fB\-L\fR, \fB\-\-list\-languages\fR .IP Display a list of supported languages for syntax highlighting. .HP \fB\-m\fR, \fB\-\-map\-syntax\fR ... .IP Map a file extension or file name to an existing syntax. For example, to highlight *.conf files with the INI syntax, use '\-m conf:ini'. To highlight files named '.myignore' with the Git Ignore syntax, use '\-m \&.myignore:gitignore'. .HP \fB\-\-theme\fR .IP Set the theme for syntax highlighting. Use '\-\-list\-themes' to see all available themes. To set a default theme, add the '\-\-theme="..."' option to the configuration file or export the BAT_THEME environment variable (e.g.: export BAT_THEME="..."). .HP \fB\-\-list\-themes\fR .IP Display a list of supported themes for syntax highlighting. .HP \fB\-\-style\fR .IP Configure which elements (line numbers, file headers, grid borders, Git modifications, ..) to display in addition to the file contents. The argument is a comma\-separated list of components to display (e.g. \&'numbers,changes,grid') or a pre\-defined style ('full'). To set a default style, add the '\-\-style=".."' option to the configuration file or export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible values: *auto*, full, plain, changes, header, grid, numbers, snip. .HP \fB\-p\fR, \fB\-\-plain\fR .IP Only show plain style, no decorations. This is an alias for \&'\-\-style=plain'. When '\-p' is used twice ('\-pp'), it also disables automatic paging (alias for '\-\-style=plain \fB\-\-pager\fR=\fI\,never\/\fR'). .HP \fB\-n\fR, \fB\-\-number\fR .IP Only show line numbers, no other decorations. This is an alias for \&'\-\-style=numbers' .HP \fB\-A\fR, \fB\-\-show\-all\fR .IP Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to control the width of the tab\-placeholders. .HP \fB\-r\fR, \fB\-\-line\-range\fR ... .IP Only print the specified range of lines for each file. For example: .RS .IP "\-\-line\-range 30:40" prints lines 30 to 40 .IP "\-\-line\-range :40" prints lines 1 to 40 .IP "\-\-line\-range 40:" prints lines 40 to the end of the file .RE .HP \fB\-H\fR, \fB\-\-highlight\-line\fR ... .IP Highlight the N\-th line with a different background color .HP \fB\-\-color\fR .IP Specify when to use colored output. The automatic mode only enables colors if an interactive terminal is detected. Possible values: *auto*, never, always. .HP \fB\-\-italic\-text\fR .IP Specify when to use ANSI sequences for italic text in the output. Possible values: always, *never*. .HP \fB\-\-decorations\fR .IP Specify when to use the decorations that have been specified via \&'\-\-style'. The automatic mode only enables decorations if an interactive terminal is detected. Possible values: *auto*, never, always. .HP \fB\-\-paging\fR .IP Specify when to use the pager. To control which pager is used, set the PAGER or BAT_PAGER environment variables (the latter takes precedence) or use the '\-\-pager' option. To disable the pager permanently, set BAT_PAGER to an empty string or set '\-\-paging=never' in the configuration file. Possible values: *auto*, never, always. .HP \fB\-\-pager\fR .IP Determine which pager is used. This option will overwrite the PAGER and BAT_PAGER environment variables. The default pager is 'less'. To disable the pager completely, use the '\-\-paging' option. Example: '\-\-pager "less \fB\-RF\fR"'. .HP \fB\-\-wrap\fR .IP Specify the text\-wrapping mode (*auto*, never, character). The \&'\-\-terminal\-width' option can be used in addition to control the output width. .HP \fB\-\-tabs\fR .IP Set the tab width to T spaces. Use a width of 0 to pass tabs through directly .HP \fB\-u\fR, \fB\-\-unbuffered\fR .IP This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered'). The output is always unbuffered \- this option is simply ignored. .HP \fB\-\-terminal\-width\fR .IP Explicitly set the width of the terminal instead of determining it automatically. If prefixed with '+' or '\-', the value will be treated as an offset to the actual terminal width. See also: '\-\-wrap'. .HP \fB\-h\fR, \fB\-\-help\fR .IP Print this help message. .HP \fB\-V\fR, \fB\-\-version\fR .IP Show version information. .SH "ARGS" .IP ... .IP File(s) to print / concatenate. Use a dash ('\-') or no argument at all to read from standard input. .SH "SUBCOMMANDS" .IP cache Modify the syntax\-definition and theme cache bat-0.12.1/doc/logo-header.svg010064400017500001735000000566011353340210600142460ustar0000000000000000 image/svg+xml bat-0.12.1/src/app.rs010064400017500001735000000265011353340210600125030ustar0000000000000000use std::collections::HashSet; use std::env; use std::str::FromStr; use atty::{self, Stream}; use crate::clap_app; use clap::ArgMatches; use wild; use console::Term; #[cfg(windows)] use ansi_term; use crate::assets::BAT_THEME_DEFAULT; use crate::config::{get_args_from_config_file, get_args_from_env_var}; use crate::errors::*; use crate::inputfile::InputFile; use crate::line_range::{LineRange, LineRanges}; use crate::style::{OutputComponent, OutputComponents, OutputWrap}; use crate::syntax_mapping::SyntaxMapping; use crate::util::transpose; #[derive(Debug, Clone, Copy, PartialEq)] pub enum PagingMode { Always, QuitIfOneScreen, Never, } #[derive(Clone)] pub struct Config<'a> { /// List of files to print pub files: Vec>, /// The explicitly configured language, if any pub language: Option<&'a str>, /// Whether or not to show/replace non-printable characters like space, tab and newline. pub show_nonprintable: bool, /// The character width of the terminal pub term_width: usize, /// The width of tab characters. /// Currently, a value of 0 will cause tabs to be passed through without expanding them. pub tab_width: usize, /// Whether or not to simply loop through all input (`cat` mode) pub loop_through: bool, /// Whether or not the output should be colorized pub colored_output: bool, /// Whether or not the output terminal supports true color pub true_color: bool, /// Style elements (grid, line numbers, ...) pub output_components: OutputComponents, /// Text wrapping mode pub output_wrap: OutputWrap, /// Pager or STDOUT pub paging_mode: PagingMode, /// Specifies the lines that should be printed pub line_ranges: LineRanges, /// The syntax highlighting theme pub theme: String, /// File extension/name mappings pub syntax_mapping: SyntaxMapping, /// Command to start the pager pub pager: Option<&'a str>, /// Whether or not to use ANSI italics pub use_italic_text: bool, /// Lines to highlight pub highlight_lines: Vec, } fn is_truecolor_terminal() -> bool { env::var("COLORTERM") .map(|colorterm| colorterm == "truecolor" || colorterm == "24bit") .unwrap_or(false) } pub struct App { pub matches: ArgMatches<'static>, interactive_output: bool, } impl App { pub fn new() -> Result { #[cfg(windows)] let _ = ansi_term::enable_ansi_support(); let interactive_output = atty::is(Stream::Stdout); Ok(App { matches: Self::matches(interactive_output)?, interactive_output, }) } fn matches(interactive_output: bool) -> Result> { let args = if wild::args_os().nth(1) == Some("cache".into()) || wild::args_os().any(|arg| arg == "--no-config") { // Skip the arguments in bats config file wild::args_os().collect::>() } else { let mut cli_args = wild::args_os(); // Read arguments from bats config file let mut args = get_args_from_env_var() .unwrap_or_else(get_args_from_config_file) .chain_err(|| "Could not parse configuration file")?; // Put the zero-th CLI argument (program name) first args.insert(0, cli_args.next().unwrap()); // .. and the rest at the end cli_args.for_each(|a| args.push(a)); args }; Ok(clap_app::build_app(interactive_output).get_matches_from(args)) } pub fn config(&self) -> Result { let files = self.files(); let output_components = self.output_components()?; let paging_mode = match self.matches.value_of("paging") { Some("always") => PagingMode::Always, Some("never") => PagingMode::Never, Some("auto") | _ => { if self.matches.occurrences_of("plain") > 1 { // If we have -pp as an option when in auto mode, the pager should be disabled. PagingMode::Never } else if files.contains(&InputFile::StdIn) { // If we are reading from stdin, only enable paging if we write to an // interactive terminal and if we do not *read* from an interactive // terminal. if self.interactive_output && !atty::is(Stream::Stdin) { PagingMode::QuitIfOneScreen } else { PagingMode::Never } } else if self.interactive_output { PagingMode::QuitIfOneScreen } else { PagingMode::Never } } }; let mut syntax_mapping = SyntaxMapping::new(); if let Some(values) = self.matches.values_of("map-syntax") { for from_to in values { let parts: Vec<_> = from_to.split(':').collect(); if parts.len() != 2 { return Err("Invalid syntax mapping. The format of the -m/--map-syntax option is 'from:to'.".into()); } syntax_mapping.insert(parts[0], parts[1]); } } Ok(Config { true_color: is_truecolor_terminal(), language: self.matches.value_of("language").or_else(|| { if self.matches.is_present("show-all") { Some("show-nonprintable") } else { None } }), show_nonprintable: self.matches.is_present("show-all"), output_wrap: if !self.interactive_output { // We don't have the tty width when piping to another program. // There's no point in wrapping when this is the case. OutputWrap::None } else { match self.matches.value_of("wrap") { Some("character") => OutputWrap::Character, Some("never") => OutputWrap::None, Some("auto") | _ => { if output_components.plain() { OutputWrap::None } else { OutputWrap::Character } } } }, colored_output: match self.matches.value_of("color") { Some("always") => true, Some("never") => false, Some("auto") | _ => self.interactive_output, }, paging_mode, term_width: self .matches .value_of("terminal-width") .and_then(|w| { if w.starts_with('+') || w.starts_with('-') { // Treat argument as a delta to the current terminal width w.parse().ok().map(|delta: i16| { let old_width: u16 = Term::stdout().size().1; let new_width: i32 = i32::from(old_width) + i32::from(delta); if new_width <= 0 { old_width as usize } else { new_width as usize } }) } else { w.parse().ok() } }) .unwrap_or(Term::stdout().size().1 as usize), loop_through: !(self.interactive_output || self.matches.value_of("color") == Some("always") || self.matches.value_of("decorations") == Some("always")), files, tab_width: self .matches .value_of("tabs") .map(String::from) .or_else(|| env::var("BAT_TABS").ok()) .and_then(|t| t.parse().ok()) .unwrap_or( if output_components.plain() && paging_mode == PagingMode::Never { 0 } else { 4 }, ), theme: self .matches .value_of("theme") .map(String::from) .or_else(|| env::var("BAT_THEME").ok()) .unwrap_or_else(|| String::from(BAT_THEME_DEFAULT)), line_ranges: LineRanges::from( transpose( self.matches .values_of("line-range") .map(|vs| vs.map(LineRange::from).collect()), )? .unwrap_or_else(|| vec![]), ), output_components, syntax_mapping, pager: self.matches.value_of("pager"), use_italic_text: match self.matches.value_of("italic-text") { Some("always") => true, _ => false, }, highlight_lines: self .matches .values_of("highlight-line") .and_then(|ws| ws.map(|w| w.parse().ok()).collect()) .unwrap_or_default(), }) } fn files(&self) -> Vec { self.matches .values_of("FILE") .map(|values| { values .map(|filename| { if filename == "-" { InputFile::StdIn } else { InputFile::Ordinary(filename) } }) .collect() }) .unwrap_or_else(|| vec![InputFile::StdIn]) } fn output_components(&self) -> Result { let matches = &self.matches; Ok(OutputComponents( if matches.value_of("decorations") == Some("never") { HashSet::new() } else if matches.is_present("number") { [OutputComponent::Numbers].iter().cloned().collect() } else if matches.is_present("plain") { [OutputComponent::Plain].iter().cloned().collect() } else { let env_style_components: Option> = transpose(env::var("BAT_STYLE").ok().map(|style_str| { style_str .split(',') .map(|x| OutputComponent::from_str(&x)) .collect::>>() }))?; matches .value_of("style") .map(|styles| { styles .split(',') .map(|style| style.parse::()) .filter_map(|style| style.ok()) .collect::>() }) .or(env_style_components) .unwrap_or_else(|| vec![OutputComponent::Full]) .into_iter() .map(|style| style.components(self.interactive_output)) .fold(HashSet::new(), |mut acc, components| { acc.extend(components.iter().cloned()); acc }) }, )) } } bat-0.12.1/src/assets.rs010064400017500001735000000162711353340210600132300ustar0000000000000000use std::borrow::Cow; use std::collections::BTreeMap; use std::fs::{self, File}; use std::io::BufReader; use std::path::{Path, PathBuf}; use syntect::dumps::{dump_to_file, from_binary, from_reader}; use syntect::highlighting::{Theme, ThemeSet}; use syntect::parsing::{SyntaxReference, SyntaxSet, SyntaxSetBuilder}; use crate::dirs::PROJECT_DIRS; use crate::errors::*; use crate::inputfile::{InputFile, InputFileReader}; use crate::syntax_mapping::SyntaxMapping; pub const BAT_THEME_DEFAULT: &str = "Monokai Extended"; pub struct HighlightingAssets { pub syntax_set: SyntaxSet, pub theme_set: ThemeSet, } impl HighlightingAssets { pub fn new() -> Self { Self::from_cache().unwrap_or_else(|_| Self::from_binary()) } pub fn from_files(dir: Option<&Path>, start_empty: bool) -> Result { let source_dir = dir.unwrap_or_else(|| PROJECT_DIRS.config_dir()); let mut theme_set = if start_empty { ThemeSet { themes: BTreeMap::new(), } } else { Self::get_integrated_themeset() }; let theme_dir = source_dir.join("themes"); let res = theme_set.add_from_folder(&theme_dir); if res.is_err() { println!( "No themes were found in '{}', using the default set", theme_dir.to_string_lossy() ); } let mut syntax_set_builder = if start_empty { let mut builder = SyntaxSetBuilder::new(); builder.add_plain_text_syntax(); builder } else { Self::get_integrated_syntaxset().into_builder() }; let syntax_dir = source_dir.join("syntaxes"); if syntax_dir.exists() { syntax_set_builder.add_from_folder(syntax_dir, true)?; } else { println!( "No syntaxes were found in '{}', using the default set.", syntax_dir.to_string_lossy() ); } Ok(HighlightingAssets { syntax_set: syntax_set_builder.build(), theme_set, }) } fn from_cache() -> Result { let theme_set_path = theme_set_path(); let syntax_set_file = File::open(&syntax_set_path()).chain_err(|| { format!( "Could not load cached syntax set '{}'", syntax_set_path().to_string_lossy() ) })?; let syntax_set: SyntaxSet = from_reader(BufReader::new(syntax_set_file)) .chain_err(|| "Could not parse cached syntax set")?; let theme_set_file = File::open(&theme_set_path).chain_err(|| { format!( "Could not load cached theme set '{}'", theme_set_path.to_string_lossy() ) })?; let theme_set: ThemeSet = from_reader(BufReader::new(theme_set_file)) .chain_err(|| "Could not parse cached theme set")?; Ok(HighlightingAssets { syntax_set, theme_set, }) } fn get_integrated_syntaxset() -> SyntaxSet { from_binary(include_bytes!("../assets/syntaxes.bin")) } fn get_integrated_themeset() -> ThemeSet { from_binary(include_bytes!("../assets/themes.bin")) } fn from_binary() -> Self { let syntax_set = Self::get_integrated_syntaxset(); let theme_set = Self::get_integrated_themeset(); HighlightingAssets { syntax_set, theme_set, } } pub fn save(&self, dir: Option<&Path>) -> Result<()> { let target_dir = dir.unwrap_or_else(|| PROJECT_DIRS.cache_dir()); let _ = fs::create_dir_all(target_dir); let theme_set_path = target_dir.join("themes.bin"); let syntax_set_path = target_dir.join("syntaxes.bin"); print!( "Writing theme set to {} ... ", theme_set_path.to_string_lossy() ); dump_to_file(&self.theme_set, &theme_set_path).chain_err(|| { format!( "Could not save theme set to {}", theme_set_path.to_string_lossy() ) })?; println!("okay"); print!( "Writing syntax set to {} ... ", syntax_set_path.to_string_lossy() ); dump_to_file(&self.syntax_set, &syntax_set_path).chain_err(|| { format!( "Could not save syntax set to {}", syntax_set_path.to_string_lossy() ) })?; println!("okay"); Ok(()) } pub fn get_theme(&self, theme: &str) -> &Theme { match self.theme_set.themes.get(theme) { Some(theme) => theme, None => { use ansi_term::Colour::Yellow; eprintln!( "{}: Unknown theme '{}', using default.", Yellow.paint("[bat warning]"), theme ); &self.theme_set.themes[BAT_THEME_DEFAULT] } } } pub fn get_syntax( &self, language: Option<&str>, filename: InputFile, reader: &mut InputFileReader, mapping: &SyntaxMapping, ) -> &SyntaxReference { let syntax = match (language, filename) { (Some(language), _) => self.syntax_set.find_syntax_by_token(language), (None, InputFile::Ordinary(filename)) => { let path = Path::new(filename); let file_name = path.file_name().and_then(|n| n.to_str()).unwrap_or(""); let extension = path.extension().and_then(|x| x.to_str()).unwrap_or(""); let file_name = mapping.replace(file_name); let extension = mapping.replace(extension); let ext_syntax = self .syntax_set .find_syntax_by_extension(&file_name) .or_else(|| self.syntax_set.find_syntax_by_extension(&extension)); let line_syntax = if ext_syntax.is_none() { String::from_utf8(reader.first_line.clone()) .ok() .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l)) } else { None }; ext_syntax.or(line_syntax) } (None, InputFile::StdIn) => String::from_utf8(reader.first_line.clone()) .ok() .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l)), (_, InputFile::ThemePreviewFile) => self.syntax_set.find_syntax_by_name("Rust"), }; syntax.unwrap_or_else(|| self.syntax_set.find_syntax_plain_text()) } } fn theme_set_path() -> PathBuf { PROJECT_DIRS.cache_dir().join("themes.bin") } fn syntax_set_path() -> PathBuf { PROJECT_DIRS.cache_dir().join("syntaxes.bin") } pub fn config_dir() -> Cow<'static, str> { PROJECT_DIRS.config_dir().to_string_lossy() } pub fn cache_dir() -> Cow<'static, str> { PROJECT_DIRS.cache_dir().to_string_lossy() } pub fn clear_assets() { print!("Clearing theme set cache ... "); fs::remove_file(theme_set_path()).ok(); println!("okay"); print!("Clearing syntax set cache ... "); fs::remove_file(syntax_set_path()).ok(); println!("okay"); } bat-0.12.1/src/clap_app.rs010064400017500001735000000447361353340210600135140ustar0000000000000000use clap::{App as ClapApp, AppSettings, Arg, ArgGroup, SubCommand}; use std::path::Path; pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { let clap_color_setting = if interactive_output { AppSettings::ColoredHelp } else { AppSettings::ColorNever }; // Check if the current directory contains a file name cache, if it does // do not make the arguements for subcommand 'cache' required. let arg_group_required = !Path::new("cache").exists(); ClapApp::new(crate_name!()) .version(crate_version!()) .global_setting(clap_color_setting) .global_setting(AppSettings::DeriveDisplayOrder) .global_setting(AppSettings::UnifiedHelpMessage) .global_setting(AppSettings::HidePossibleValuesInHelp) .setting(AppSettings::ArgsNegateSubcommands) .setting(AppSettings::AllowExternalSubcommands) .setting(AppSettings::DisableHelpSubcommand) .setting(AppSettings::VersionlessSubcommands) .max_term_width(100) .about( "A cat(1) clone with wings.\n\n\ Use '--help' instead of '-h' to see a more detailed version of the help text.", ) .long_about("A cat(1) clone with syntax highlighting and Git integration.") .arg( Arg::with_name("FILE") .help("File(s) to print / concatenate. Use '-' for standard input.") .long_help( "File(s) to print / concatenate. Use a dash ('-') or no argument at all \ to read from standard input.", ) .multiple(true) .empty_values(false), ) .arg( Arg::with_name("language") .short("l") .long("language") .overrides_with("language") .help("Set the language for syntax highlighting.") .long_help( "Explicitly set the language for syntax highlighting. The language can be \ specified as a name (like 'C++' or 'LaTeX') or possible file extension \ (like 'cpp', 'hpp' or 'md'). Use '--list-languages' to show all supported \ language names and file extensions.", ) .takes_value(true), ) .arg( Arg::with_name("list-languages") .long("list-languages") .short("L") .conflicts_with("list-themes") .help("Display all supported languages.") .long_help("Display a list of supported languages for syntax highlighting."), ) .arg( Arg::with_name("map-syntax") .short("m") .long("map-syntax") .multiple(true) .takes_value(true) .number_of_values(1) .value_name("from:to") .help("Map a file extension or name to an existing syntax.") .long_help( "Map a file extension or file name to an existing syntax. For example, \ to highlight *.conf files with the INI syntax, use '-m conf:ini'. \ To highlight files named '.myignore' with the Git Ignore syntax, use \ '-m .myignore:gitignore'.", ) .takes_value(true), ) .arg( Arg::with_name("theme") .long("theme") .overrides_with("theme") .takes_value(true) .help("Set the color theme for syntax highlighting.") .long_help( "Set the theme for syntax highlighting. Use '--list-themes' to \ see all available themes. To set a default theme, add the \ '--theme=\"...\"' option to the configuration file or export the \ BAT_THEME environment variable (e.g.: export \ BAT_THEME=\"...\").", ), ) .arg( Arg::with_name("list-themes") .long("list-themes") .help("Display all supported highlighting themes.") .long_help("Display a list of supported themes for syntax highlighting."), ) .arg( Arg::with_name("style") .long("style") .value_name("style-components") // Need to turn this off for overrides_with to work as we want. See the bottom most // example at https://docs.rs/clap/2.32.0/clap/struct.Arg.html#method.overrides_with .use_delimiter(false) .takes_value(true) .overrides_with("style") .overrides_with("plain") .overrides_with("number") // Cannot use clap's built in validation because we have to turn off clap's delimiters .validator(|val| { let mut invalid_vals = val.split(',').filter(|style| { !&[ "auto", "full", "plain", "changes", "header", "grid", "numbers", "snip" ] .contains(style) }); if let Some(invalid) = invalid_vals.next() { Err(format!("Unknown style, '{}'", invalid)) } else { Ok(()) } }) .help( "Comma-separated list of style elements to display \ (*auto*, full, plain, changes, header, grid, numbers, snip).", ) .long_help( "Configure which elements (line numbers, file headers, grid \ borders, Git modifications, ..) to display in addition to the \ file contents. The argument is a comma-separated list of \ components to display (e.g. 'numbers,changes,grid') or a \ pre-defined style ('full'). To set a default style, add the \ '--style=\"..\"' option to the configuration file or export the \ BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\"). \ Possible values: *auto*, full, plain, changes, header, grid, numbers, snip.", ), ) .arg( Arg::with_name("plain") .overrides_with("plain") .overrides_with("number") .short("p") .long("plain") .multiple(true) .help("Show plain style (alias for '--style=plain').") .long_help( "Only show plain style, no decorations. This is an alias for \ '--style=plain'. When '-p' is used twice ('-pp'), it also disables \ automatic paging (alias for '--style=plain --pager=never').", ), ) .arg( Arg::with_name("number") .long("number") .overrides_with("number") .short("n") .help("Show line numbers (alias for '--style=numbers').") .long_help( "Only show line numbers, no other decorations. This is an alias for \ '--style=numbers'", ), ) .arg( Arg::with_name("show-all") .long("show-all") .alias("show-nonprintable") .short("A") .conflicts_with("language") .help("Show non-printable characters (space, tab, newline, ..).") .long_help( "Show non-printable characters like space, tab or newline. \ This option can also be used to print binary files. \ Use '--tabs' to control the width of the tab-placeholders." ), ) .arg( Arg::with_name("line-range") .long("line-range") .short("r") .multiple(true) .takes_value(true) .number_of_values(1) .value_name("N:M") .help("Only print the lines from N to M.") .long_help( "Only print the specified range of lines for each file. \ For example:\n \ '--line-range 30:40' prints lines 30 to 40\n \ '--line-range :40' prints lines 1 to 40\n \ '--line-range 40:' prints lines 40 to the end of the file", ), ) .arg( Arg::with_name("highlight-line") .long("highlight-line") .short("H") .takes_value(true) .number_of_values(1) .multiple(true) .value_name("N") .help("Highlight the given line.") .long_help( "Highlight the N-th line with a different background color", ), ) .arg( Arg::with_name("color") .long("color") .overrides_with("color") .takes_value(true) .value_name("when") .possible_values(&["auto", "never", "always"]) .hide_default_value(true) .default_value("auto") .help("When to use colors (*auto*, never, always).") .long_help( "Specify when to use colored output. The automatic mode \ only enables colors if an interactive terminal is detected. \ Possible values: *auto*, never, always.", ), ) .arg( Arg::with_name("italic-text") .long("italic-text") .takes_value(true) .value_name("when") .possible_values(&["always", "never"]) .default_value("never") .hide_default_value(true) .help("Use italics in output (always, *never*)") .long_help("Specify when to use ANSI sequences for italic text in the output. Possible values: always, *never*."), ) .arg( Arg::with_name("decorations") .long("decorations") .overrides_with("decorations") .takes_value(true) .value_name("when") .possible_values(&["auto", "never", "always"]) .default_value("auto") .hide_default_value(true) .help("When to show the decorations (*auto*, never, always).") .long_help( "Specify when to use the decorations that have been specified \ via '--style'. The automatic mode only enables decorations if \ an interactive terminal is detected. Possible values: *auto*, never, always.", ), ) .arg( Arg::with_name("paging") .long("paging") .overrides_with("paging") .takes_value(true) .value_name("when") .possible_values(&["auto", "never", "always"]) .default_value("auto") .hide_default_value(true) .help("Specify when to use the pager (*auto*, never, always).") .long_help( "Specify when to use the pager. To control which pager \ is used, set the PAGER or BAT_PAGER environment \ variables (the latter takes precedence) or use the '--pager' option. \ To disable the pager permanently, set BAT_PAGER to an empty string \ or set '--paging=never' in the configuration file. \ Possible values: *auto*, never, always.", ), ) .arg( Arg::with_name("pager") .long("pager") .overrides_with("pager") .takes_value(true) .value_name("command") .hidden_short_help(true) .help("Determine which pager to use.") .long_help( "Determine which pager is used. This option will overwrite \ the PAGER and BAT_PAGER environment variables. The default \ pager is 'less'. To disable the pager completely, use the \ '--paging' option. \ Example: '--pager \"less -RF\"'.", ), ) .arg( Arg::with_name("wrap") .long("wrap") .overrides_with("wrap") .takes_value(true) .value_name("mode") .possible_values(&["auto", "never", "character"]) .default_value("auto") .hide_default_value(true) .help("Specify the text-wrapping mode (*auto*, never, character).") .long_help("Specify the text-wrapping mode (*auto*, never, character). \ The '--terminal-width' option can be used in addition to \ control the output width."), ) .arg( Arg::with_name("tabs") .long("tabs") .overrides_with("tabs") .takes_value(true) .value_name("T") .validator( |t| { t.parse::() .map_err(|_t| "must be a number") .map(|_t| ()) // Convert to Result<(), &str> .map_err(|e| e.to_string()) }, // Convert to Result<(), String> ) .help("Set the tab width to T spaces.") .long_help( "Set the tab width to T spaces. Use a width of 0 to pass tabs through \ directly", ), ) .arg( Arg::with_name("unbuffered") .short("u") .long("unbuffered") .hidden_short_help(true) .long_help( "This option exists for POSIX-compliance reasons ('u' is for \ 'unbuffered'). The output is always unbuffered - this option \ is simply ignored.", ), ) .arg( Arg::with_name("terminal-width") .long("terminal-width") .takes_value(true) .value_name("width") .hidden_short_help(true) .allow_hyphen_values(true) .validator( |t| { let is_offset = t.starts_with('+') || t.starts_with('-'); t.parse::() .map_err(|_e| "must be an offset or number") .and_then(|v| if v == 0 && !is_offset { Err("terminal width cannot be zero".into()) } else { Ok(()) }) .map_err(|e| e.to_string()) }) .help( "Explicitly set the width of the terminal instead of determining it \ automatically. If prefixed with '+' or '-', the value will be treated \ as an offset to the actual terminal width. See also: '--wrap'.", ), ) .arg( Arg::with_name("no-config") .long("no-config") .hidden(true) .help("Do not use the configuration file"), ) .arg( Arg::with_name("config-file") .long("config-file") .conflicts_with("list-languages") .conflicts_with("list-themes") .hidden(true) .help("Show path to the configuration file."), ) .arg( Arg::with_name("config-dir") .long("config-dir") .hidden(true) .help("Show bat's configuration directory."), ) .arg( Arg::with_name("cache-dir") .long("cache-dir") .hidden(true) .help("Show bat's cache directory."), ) .subcommand( SubCommand::with_name("cache") .about("Modify the syntax-definition and theme cache") .arg( Arg::with_name("build") .long("build") .short("b") .help("Initialize (or update) the syntax/theme cache.") .long_help( "Initialize (or update) the syntax/theme cache by loading from \ the source directory (default: the configuration directory).", ), ) .arg( Arg::with_name("clear") .long("clear") .short("c") .help("Remove the cached syntax definitions and themes."), ) .group( ArgGroup::with_name("cache-actions") .args(&["build", "clear"]) .required(arg_group_required), ) .arg( Arg::with_name("source") .long("source") .requires("build") .takes_value(true) .value_name("dir") .help("Use a different directory to load syntaxes and themes from."), ) .arg( Arg::with_name("target") .long("target") .requires("build") .takes_value(true) .value_name("dir") .help( "Use a different directory to store the cached syntax and theme set.", ), ) .arg(Arg::with_name("blank").long("blank").requires("build").help( "Create completely new syntax and theme sets \ (instead of appending to the default sets).", )), ) .help_message("Print this help message.") .version_message("Show version information.") } bat-0.12.1/src/config.rs010064400017500001735000000044651353340210600131750ustar0000000000000000use std::env; use std::ffi::OsString; use std::fs; use std::path::PathBuf; use shell_words; use crate::dirs::PROJECT_DIRS; use crate::util::transpose; pub fn config_file() -> PathBuf { env::var("BAT_CONFIG_PATH") .ok() .map(PathBuf::from) .filter(|config_path| config_path.is_file()) .unwrap_or_else(|| PROJECT_DIRS.config_dir().join("config")) } pub fn get_args_from_config_file() -> Result, shell_words::ParseError> { Ok(transpose( fs::read_to_string(config_file()) .ok() .map(|content| get_args_from_str(&content)), )? .unwrap_or_else(|| vec![])) } pub fn get_args_from_env_var() -> Option, shell_words::ParseError>> { env::var("BAT_OPTS").ok().map(|s| get_args_from_str(&s)) } fn get_args_from_str(content: &str) -> Result, shell_words::ParseError> { let args_per_line = content .split('\n') .map(|line| line.trim()) .filter(|line| !line.is_empty()) .filter(|line| !line.starts_with('#')) .map(|line| shell_words::split(line)) .collect::, _>>()?; Ok(args_per_line .iter() .flatten() .map(|line| line.into()) .collect()) } #[test] fn empty() { let args = get_args_from_str("").unwrap(); assert!(args.is_empty()); } #[test] fn single() { assert_eq!(vec!["--plain"], get_args_from_str("--plain").unwrap()); } #[test] fn multiple() { assert_eq!( vec!["--plain", "--language=cpp"], get_args_from_str("--plain --language=cpp").unwrap() ); } #[test] fn quotes() { assert_eq!( vec!["--theme", "Sublime Snazzy"], get_args_from_str("--theme \"Sublime Snazzy\"").unwrap() ); } #[test] fn multi_line() { let config = " -p --style numbers,changes --color=always "; assert_eq!( vec!["-p", "--style", "numbers,changes", "--color=always"], get_args_from_str(config).unwrap() ); } #[test] fn comments() { let config = " # plain style -p # show line numbers and Git modifications --style numbers,changes # Always show ANSI colors --color=always "; assert_eq!( vec!["-p", "--style", "numbers,changes", "--color=always"], get_args_from_str(config).unwrap() ); } bat-0.12.1/src/controller.rs010064400017500001735000000107031353340210600141030ustar0000000000000000use std::io::{self, Write}; use std::path::Path; use crate::app::{Config, PagingMode}; use crate::assets::HighlightingAssets; use crate::errors::*; use crate::inputfile::{InputFile, InputFileReader}; use crate::line_range::{LineRanges, RangeCheckResult}; use crate::output::OutputType; use crate::printer::{InteractivePrinter, Printer, SimplePrinter}; pub struct Controller<'a> { config: &'a Config<'a>, assets: &'a HighlightingAssets, } impl<'b> Controller<'b> { pub fn new<'a>(config: &'a Config, assets: &'a HighlightingAssets) -> Controller<'a> { Controller { config, assets } } pub fn run(&self) -> Result { // Do not launch the pager if NONE of the input files exist let mut paging_mode = self.config.paging_mode; if self.config.paging_mode != PagingMode::Never { let call_pager = self.config.files.iter().any(|file| { if let InputFile::Ordinary(path) = file { return Path::new(path).exists(); } else { return true; } }); if !call_pager { paging_mode = PagingMode::Never; } } let mut output_type = OutputType::from_mode(paging_mode, self.config.pager)?; let writer = output_type.handle()?; let mut no_errors: bool = true; let stdin = io::stdin(); for input_file in &self.config.files { match input_file.get_reader(&stdin) { Err(error) => { handle_error(&error); no_errors = false; } Ok(mut reader) => { let result = if self.config.loop_through { let mut printer = SimplePrinter::new(); self.print_file(reader, &mut printer, writer, *input_file) } else { let mut printer = InteractivePrinter::new( &self.config, &self.assets, *input_file, &mut reader, ); self.print_file(reader, &mut printer, writer, *input_file) }; if let Err(error) = result { handle_error(&error); no_errors = false; } } } } Ok(no_errors) } fn print_file<'a, P: Printer>( &self, reader: InputFileReader, printer: &mut P, writer: &mut dyn Write, input_file: InputFile<'a>, ) -> Result<()> { printer.print_header(writer, input_file)?; if !reader.first_line.is_empty() { self.print_file_ranges(printer, writer, reader, &self.config.line_ranges)?; } printer.print_footer(writer)?; Ok(()) } fn print_file_ranges( &self, printer: &mut P, writer: &mut dyn Write, mut reader: InputFileReader, line_ranges: &LineRanges, ) -> Result<()> { let mut line_buffer = Vec::new(); let mut line_number: usize = 1; let mut first_range: bool = true; let mut mid_range: bool = false; while reader.read_line(&mut line_buffer)? { match line_ranges.check(line_number) { RangeCheckResult::OutsideRange => { // Call the printer in case we need to call the syntax highlighter // for this line. However, set `out_of_range` to `true`. printer.print_line(true, writer, line_number, &line_buffer)?; mid_range = false; } RangeCheckResult::InRange => { if self.config.output_components.snip() { if first_range { first_range = false; mid_range = true; } else if !mid_range { mid_range = true; printer.print_snip(writer)?; } } printer.print_line(false, writer, line_number, &line_buffer)?; } RangeCheckResult::AfterLastRange => { break; } } line_number += 1; line_buffer.clear(); } Ok(()) } } bat-0.12.1/src/decorations.rs010064400017500001735000000101511353340210600142270ustar0000000000000000use crate::diff::LineChange; use crate::printer::{Colors, InteractivePrinter}; use ansi_term::Style; #[derive(Clone)] pub struct DecorationText { pub width: usize, pub text: String, } pub trait Decoration { fn generate( &self, line_number: usize, continuation: bool, printer: &InteractivePrinter, ) -> DecorationText; fn width(&self) -> usize; } pub struct LineNumberDecoration { color: Style, cached_wrap: DecorationText, cached_wrap_invalid_at: usize, } impl LineNumberDecoration { pub fn new(colors: &Colors) -> Self { LineNumberDecoration { color: colors.line_number, cached_wrap_invalid_at: 10000, cached_wrap: DecorationText { text: colors.line_number.paint(" ".repeat(4)).to_string(), width: 4, }, } } } impl Decoration for LineNumberDecoration { fn generate( &self, line_number: usize, continuation: bool, _printer: &InteractivePrinter, ) -> DecorationText { if continuation { if line_number > self.cached_wrap_invalid_at { let new_width = self.cached_wrap.width + 1; return DecorationText { text: self.color.paint(" ".repeat(new_width)).to_string(), width: new_width, }; } self.cached_wrap.clone() } else { let plain: String = format!("{:4}", line_number); DecorationText { width: plain.len(), text: self.color.paint(plain).to_string(), } } } fn width(&self) -> usize { 4 } } pub struct LineChangesDecoration { cached_none: DecorationText, cached_added: DecorationText, cached_removed_above: DecorationText, cached_removed_below: DecorationText, cached_modified: DecorationText, } impl LineChangesDecoration { #[inline] fn generate_cached(style: Style, text: &str) -> DecorationText { DecorationText { text: style.paint(text).to_string(), width: text.chars().count(), } } pub fn new(colors: &Colors) -> Self { LineChangesDecoration { cached_none: Self::generate_cached(Style::default(), " "), cached_added: Self::generate_cached(colors.git_added, "+"), cached_removed_above: Self::generate_cached(colors.git_removed, "‾"), cached_removed_below: Self::generate_cached(colors.git_removed, "_"), cached_modified: Self::generate_cached(colors.git_modified, "~"), } } } impl Decoration for LineChangesDecoration { fn generate( &self, line_number: usize, continuation: bool, printer: &InteractivePrinter, ) -> DecorationText { if !continuation { if let Some(ref changes) = printer.line_changes { return match changes.get(&(line_number as u32)) { Some(&LineChange::Added) => self.cached_added.clone(), Some(&LineChange::RemovedAbove) => self.cached_removed_above.clone(), Some(&LineChange::RemovedBelow) => self.cached_removed_below.clone(), Some(&LineChange::Modified) => self.cached_modified.clone(), _ => self.cached_none.clone(), }; } } self.cached_none.clone() } fn width(&self) -> usize { self.cached_none.width } } pub struct GridBorderDecoration { cached: DecorationText, } impl GridBorderDecoration { pub fn new(colors: &Colors) -> Self { GridBorderDecoration { cached: DecorationText { text: colors.grid.paint("│").to_string(), width: 1, }, } } } impl Decoration for GridBorderDecoration { fn generate( &self, _line_number: usize, _continuation: bool, _printer: &InteractivePrinter, ) -> DecorationText { self.cached.clone() } fn width(&self) -> usize { self.cached.width } } bat-0.12.1/src/diff.rs010064400017500001735000000046441353340210600126370ustar0000000000000000use git2::{DiffOptions, IntoCString, Repository}; use std::collections::HashMap; use std::fs; use std::path::Path; #[derive(Copy, Clone, Debug)] pub enum LineChange { Added, RemovedAbove, RemovedBelow, Modified, } pub type LineChanges = HashMap; pub fn get_git_diff(filename: &str) -> Option { let repo = Repository::discover(&filename).ok()?; let repo_path_absolute = fs::canonicalize(repo.workdir()?).ok()?; let filepath_absolute = fs::canonicalize(&filename).ok()?; let filepath_relative_to_repo = filepath_absolute.strip_prefix(&repo_path_absolute).ok()?; let mut diff_options = DiffOptions::new(); let pathspec = filepath_relative_to_repo.into_c_string().ok()?; diff_options.pathspec(pathspec); diff_options.context_lines(0); let diff = repo .diff_index_to_workdir(None, Some(&mut diff_options)) .ok()?; let mut line_changes: LineChanges = HashMap::new(); let mark_section = |line_changes: &mut LineChanges, start: u32, end: i32, change: LineChange| { for line in start..=end as u32 { line_changes.insert(line, change); } }; let _ = diff.foreach( &mut |_, _| true, None, Some(&mut |delta, hunk| { let path = delta.new_file().path().unwrap_or_else(|| Path::new("")); if filepath_relative_to_repo != path { return false; } let old_lines = hunk.old_lines(); let new_start = hunk.new_start(); let new_lines = hunk.new_lines(); let new_end = (new_start + new_lines) as i32 - 1; if old_lines == 0 && new_lines > 0 { mark_section(&mut line_changes, new_start, new_end, LineChange::Added); } else if new_lines == 0 && old_lines > 0 { if new_start == 0 { mark_section(&mut line_changes, 1, 1, LineChange::RemovedAbove); } else { mark_section( &mut line_changes, new_start, new_start as i32, LineChange::RemovedBelow, ); } } else { mark_section(&mut line_changes, new_start, new_end, LineChange::Modified); } true }), None, ); Some(line_changes) } bat-0.12.1/src/dirs.rs010064400017500001735000000032311353340210600126570ustar0000000000000000use crate::dirs_rs; use std::path::{Path, PathBuf}; #[cfg(target_os = "macos")] use std::env; /// Wrapper for 'dirs' that treats MacOS more like Linux, by following the XDG specification. /// This means that the `XDG_CACHE_HOME` and `XDG_CONFIG_HOME` environment variables are /// checked first. The fallback directories are `~/.cache/bat` and `~/.config/bat`, respectively. pub struct BatProjectDirs { cache_dir: PathBuf, config_dir: PathBuf, } impl BatProjectDirs { fn new() -> Option { #[cfg(target_os = "macos")] let cache_dir_op = env::var_os("XDG_CACHE_HOME") .map(PathBuf::from) .filter(|p| p.is_absolute()) .or_else(|| dirs_rs::home_dir().map(|d| d.join(".cache"))); #[cfg(not(target_os = "macos"))] let cache_dir_op = dirs_rs::cache_dir(); let cache_dir = cache_dir_op.map(|d| d.join("bat"))?; #[cfg(target_os = "macos")] let config_dir_op = env::var_os("XDG_CONFIG_HOME") .map(PathBuf::from) .filter(|p| p.is_absolute()) .or_else(|| dirs_rs::home_dir().map(|d| d.join(".config"))); #[cfg(not(target_os = "macos"))] let config_dir_op = dirs_rs::config_dir(); let config_dir = config_dir_op.map(|d| d.join("bat"))?; Some(BatProjectDirs { cache_dir, config_dir, }) } pub fn cache_dir(&self) -> &Path { &self.cache_dir } pub fn config_dir(&self) -> &Path { &self.config_dir } } lazy_static! { pub static ref PROJECT_DIRS: BatProjectDirs = BatProjectDirs::new().expect("Could not get home directory"); } bat-0.12.1/src/inputfile.rs010064400017500001735000000071121353340210600137170ustar0000000000000000use std::fs::File; use std::io::{self, BufRead, BufReader}; use content_inspector::{self, ContentType}; use crate::errors::*; const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs"); pub struct InputFileReader<'a> { inner: Box, pub first_line: Vec, pub content_type: Option, } impl<'a> InputFileReader<'a> { fn new(mut reader: R) -> InputFileReader<'a> { let mut first_line = vec![]; reader.read_until(b'\n', &mut first_line).ok(); let content_type = if first_line.is_empty() { None } else { Some(content_inspector::inspect(&first_line[..])) }; if content_type == Some(ContentType::UTF_16LE) { reader.read_until(0x00, &mut first_line).ok(); } InputFileReader { inner: Box::new(reader), first_line, content_type, } } pub fn read_line(&mut self, buf: &mut Vec) -> io::Result { if self.first_line.is_empty() { let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?; if self.content_type == Some(ContentType::UTF_16LE) { self.inner.read_until(0x00, buf).ok(); } Ok(res) } else { buf.append(&mut self.first_line); Ok(true) } } } #[derive(Debug, Clone, Copy, PartialEq)] pub enum InputFile<'a> { StdIn, Ordinary(&'a str), ThemePreviewFile, } impl<'a> InputFile<'a> { pub fn get_reader(&self, stdin: &'a io::Stdin) -> Result { match self { InputFile::StdIn => Ok(InputFileReader::new(stdin.lock())), InputFile::Ordinary(filename) => { let file = File::open(filename).map_err(|e| format!("'{}': {}", filename, e))?; if file.metadata()?.is_dir() { return Err(format!("'{}' is a directory.", filename).into()); } Ok(InputFileReader::new(BufReader::new(file))) } InputFile::ThemePreviewFile => Ok(InputFileReader::new(THEME_PREVIEW_FILE)), } } } #[test] fn basic() { let content = b"#!/bin/bash\necho hello"; let mut reader = InputFileReader::new(&content[..]); assert_eq!(b"#!/bin/bash\n", &reader.first_line[..]); let mut buffer = vec![]; let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(true, res.unwrap()); assert_eq!(b"#!/bin/bash\n", &buffer[..]); buffer.clear(); let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(true, res.unwrap()); assert_eq!(b"echo hello", &buffer[..]); buffer.clear(); let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(false, res.unwrap()); assert!(buffer.is_empty()); } #[test] fn utf16le() { let content = b"\xFF\xFE\x73\x00\x0A\x00\x64\x00"; let mut reader = InputFileReader::new(&content[..]); assert_eq!(b"\xFF\xFE\x73\x00\x0A\x00", &reader.first_line[..]); let mut buffer = vec![]; let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(true, res.unwrap()); assert_eq!(b"\xFF\xFE\x73\x00\x0A\x00", &buffer[..]); buffer.clear(); let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(true, res.unwrap()); assert_eq!(b"\x64\x00", &buffer[..]); buffer.clear(); let res = reader.read_line(&mut buffer); assert!(res.is_ok()); assert_eq!(false, res.unwrap()); assert!(buffer.is_empty()); } bat-0.12.1/src/line_range.rs010064400017500001735000000115361353340210600140300ustar0000000000000000use crate::errors::*; #[derive(Clone)] pub struct LineRange { pub lower: usize, pub upper: usize, } impl LineRange { pub fn from(range_raw: &str) -> Result { LineRange::parse_range(range_raw) } pub fn new() -> LineRange { LineRange { lower: usize::min_value(), upper: usize::max_value(), } } pub fn parse_range(range_raw: &str) -> Result { let mut new_range = LineRange::new(); if range_raw.bytes().nth(0).ok_or("Empty line range")? == b':' { new_range.upper = range_raw[1..].parse()?; return Ok(new_range); } else if range_raw.bytes().last().ok_or("Empty line range")? == b':' { new_range.lower = range_raw[..range_raw.len() - 1].parse()?; return Ok(new_range); } let line_numbers: Vec<&str> = range_raw.split(':').collect(); if line_numbers.len() == 2 { new_range.lower = line_numbers[0].parse()?; new_range.upper = line_numbers[1].parse()?; return Ok(new_range); } Err("expected single ':' character".into()) } pub fn is_inside(&self, line: usize) -> bool { line >= self.lower && line <= self.upper } } #[test] fn test_parse_full() { let range = LineRange::from("40:50").expect("Shouldn't fail on test!"); assert_eq!(40, range.lower); assert_eq!(50, range.upper); } #[test] fn test_parse_partial_min() { let range = LineRange::from(":50").expect("Shouldn't fail on test!"); assert_eq!(usize::min_value(), range.lower); assert_eq!(50, range.upper); } #[test] fn test_parse_partial_max() { let range = LineRange::from("40:").expect("Shouldn't fail on test!"); assert_eq!(40, range.lower); assert_eq!(usize::max_value(), range.upper); } #[test] fn test_parse_fail() { let range = LineRange::from("40:50:80"); assert!(range.is_err()); let range = LineRange::from("40::80"); assert!(range.is_err()); let range = LineRange::from(":40:"); assert!(range.is_err()); let range = LineRange::from("40"); assert!(range.is_err()); } #[derive(Copy, Clone, Debug, PartialEq)] pub enum RangeCheckResult { // Within one of the given ranges InRange, // Before the first range or within two ranges OutsideRange, // Line number is outside of all ranges and larger than the last range. AfterLastRange, } #[derive(Clone)] pub struct LineRanges { ranges: Vec, largest_upper_bound: usize, } impl LineRanges { pub fn from(ranges: Vec) -> LineRanges { let largest_upper_bound = ranges .iter() .map(|r| r.upper) .max() .unwrap_or(usize::max_value()); LineRanges { ranges, largest_upper_bound, } } pub fn check(&self, line: usize) -> RangeCheckResult { if self.ranges.is_empty() | self.ranges.iter().any(|r| r.is_inside(line)) { RangeCheckResult::InRange } else if line < self.largest_upper_bound { RangeCheckResult::OutsideRange } else { RangeCheckResult::AfterLastRange } } } #[cfg(test)] fn ranges(rs: &[&str]) -> LineRanges { LineRanges::from(rs.iter().map(|r| LineRange::from(r).unwrap()).collect()) } #[test] fn test_ranges_simple() { let ranges = ranges(&["3:8"]); assert_eq!(RangeCheckResult::OutsideRange, ranges.check(2)); assert_eq!(RangeCheckResult::InRange, ranges.check(5)); assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(9)); } #[test] fn test_ranges_advanced() { let ranges = ranges(&["3:8", "11:20", "25:30"]); assert_eq!(RangeCheckResult::OutsideRange, ranges.check(2)); assert_eq!(RangeCheckResult::InRange, ranges.check(5)); assert_eq!(RangeCheckResult::OutsideRange, ranges.check(9)); assert_eq!(RangeCheckResult::InRange, ranges.check(11)); assert_eq!(RangeCheckResult::OutsideRange, ranges.check(22)); assert_eq!(RangeCheckResult::InRange, ranges.check(28)); assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(31)); } #[test] fn test_ranges_open_low() { let ranges = ranges(&["3:8", ":5"]); assert_eq!(RangeCheckResult::InRange, ranges.check(1)); assert_eq!(RangeCheckResult::InRange, ranges.check(3)); assert_eq!(RangeCheckResult::InRange, ranges.check(7)); assert_eq!(RangeCheckResult::AfterLastRange, ranges.check(9)); } #[test] fn test_ranges_open_high() { let ranges = ranges(&["3:", "2:5"]); assert_eq!(RangeCheckResult::OutsideRange, ranges.check(1)); assert_eq!(RangeCheckResult::InRange, ranges.check(3)); assert_eq!(RangeCheckResult::InRange, ranges.check(5)); assert_eq!(RangeCheckResult::InRange, ranges.check(9)); } #[test] fn test_ranges_empty() { let ranges = ranges(&[]); assert_eq!(RangeCheckResult::InRange, ranges.check(1)); } bat-0.12.1/src/main.rs010064400017500001735000000165631353340210600126560ustar0000000000000000// `error_chain!` can recurse deeply #![recursion_limit = "1024"] #[macro_use] extern crate error_chain; #[macro_use] extern crate clap; #[macro_use] extern crate lazy_static; extern crate ansi_term; extern crate atty; extern crate console; extern crate content_inspector; extern crate dirs as dirs_rs; extern crate encoding; extern crate git2; extern crate shell_words; extern crate syntect; extern crate wild; mod app; mod assets; mod clap_app; mod config; mod controller; mod decorations; mod diff; mod dirs; mod inputfile; mod line_range; mod output; mod preprocessor; mod printer; mod style; mod syntax_mapping; mod terminal; mod util; use std::collections::HashSet; use std::io; use std::io::Write; use std::path::Path; use std::process; use ansi_term::Colour::Green; use ansi_term::Style; use crate::app::{App, Config}; use crate::assets::{cache_dir, clear_assets, config_dir, HighlightingAssets}; use crate::config::config_file; use crate::controller::Controller; use crate::inputfile::InputFile; use crate::style::{OutputComponent, OutputComponents}; mod errors { error_chain! { foreign_links { Clap(::clap::Error); Io(::std::io::Error); SyntectError(::syntect::LoadingError); ParseIntError(::std::num::ParseIntError); } } pub fn handle_error(error: &Error) { match error { Error(ErrorKind::Io(ref io_error), _) if io_error.kind() == super::io::ErrorKind::BrokenPipe => { super::process::exit(0); } _ => { use ansi_term::Colour::Red; eprintln!("{}: {}", Red.paint("[bat error]"), error); } }; } } use crate::errors::*; fn run_cache_subcommand(matches: &clap::ArgMatches) -> Result<()> { if matches.is_present("build") { let source_dir = matches.value_of("source").map(Path::new); let target_dir = matches.value_of("target").map(Path::new); let blank = matches.is_present("blank"); let assets = HighlightingAssets::from_files(source_dir, blank)?; assets.save(target_dir)?; } else if matches.is_present("clear") { clear_assets(); } Ok(()) } pub fn list_languages(config: &Config) -> Result<()> { let assets = HighlightingAssets::new(); let mut languages = assets .syntax_set .syntaxes() .iter() .filter(|syntax| !syntax.hidden && !syntax.file_extensions.is_empty()) .collect::>(); languages.sort_by_key(|lang| lang.name.to_uppercase()); let stdout = io::stdout(); let mut stdout = stdout.lock(); if config.loop_through { for lang in languages { write!(stdout, "{}:{}\n", lang.name, lang.file_extensions.join(","))?; } } else { let longest = languages .iter() .map(|syntax| syntax.name.len()) .max() .unwrap_or(32); // Fallback width if they have no language definitions. let comma_separator = ", "; let separator = " "; // Line-wrapping for the possible file extension overflow. let desired_width = config.term_width - longest - separator.len(); let style = if config.colored_output { Green.normal() } else { Style::default() }; for lang in languages { write!(stdout, "{:width$}{}", lang.name, separator, width = longest)?; // Number of characters on this line so far, wrap before `desired_width` let mut num_chars = 0; let mut extension = lang.file_extensions.iter().peekable(); while let Some(word) = extension.next() { // If we can't fit this word in, then create a line break and align it in. let new_chars = word.len() + comma_separator.len(); if num_chars + new_chars >= desired_width { num_chars = 0; write!(stdout, "\n{:width$}{}", "", separator, width = longest)?; } num_chars += new_chars; write!(stdout, "{}", style.paint(&word[..]))?; if extension.peek().is_some() { write!(stdout, "{}", comma_separator)?; } } writeln!(stdout)?; } } Ok(()) } pub fn list_themes(cfg: &Config) -> Result<()> { let assets = HighlightingAssets::new(); let themes = &assets.theme_set.themes; let mut config = cfg.clone(); let mut style = HashSet::new(); style.insert(OutputComponent::Plain); config.files = vec![InputFile::ThemePreviewFile]; config.output_components = OutputComponents(style); let stdout = io::stdout(); let mut stdout = stdout.lock(); if config.colored_output { for (theme, _) in themes.iter() { writeln!( stdout, "Theme: {}\n", Style::new().bold().paint(theme.to_string()) )?; config.theme = theme.to_string(); let _controller = Controller::new(&config, &assets).run(); writeln!(stdout)?; } } else { for (theme, _) in themes.iter() { writeln!(stdout, "{}", theme)?; } } Ok(()) } fn run_controller(config: &Config) -> Result { let assets = HighlightingAssets::new(); let controller = Controller::new(&config, &assets); controller.run() } /// Returns `Err(..)` upon fatal errors. Otherwise, returns `Ok(true)` on full success and /// `Ok(false)` if any intermediate errors occurred (were printed). fn run() -> Result { let app = App::new()?; match app.matches.subcommand() { ("cache", Some(cache_matches)) => { // If there is a file named 'cache' in the current working directory, // arguments for subcommand 'cache' are not mandatory. // If there are non-zero arguments, execute the subcommand cache, else, open the file cache. if !cache_matches.args.is_empty() { run_cache_subcommand(cache_matches)?; Ok(true) } else { let mut config = app.config()?; config.files = vec![InputFile::Ordinary(&"cache")]; run_controller(&config) } } _ => { let config = app.config()?; if app.matches.is_present("list-languages") { list_languages(&config)?; Ok(true) } else if app.matches.is_present("list-themes") { list_themes(&config)?; Ok(true) } else if app.matches.is_present("config-file") { println!("{}", config_file().to_string_lossy()); Ok(true) } else if app.matches.is_present("config-dir") { writeln!(io::stdout(), "{}", config_dir())?; Ok(true) } else if app.matches.is_present("cache-dir") { writeln!(io::stdout(), "{}", cache_dir())?; Ok(true) } else { run_controller(&config) } } } } fn main() { let result = run(); match result { Err(error) => { handle_error(&error); process::exit(1); } Ok(false) => { process::exit(1); } Ok(true) => { process::exit(0); } } } bat-0.12.1/src/output.rs010064400017500001735000000075201353340210600132630ustar0000000000000000use std::env; use std::ffi::OsString; use std::io::{self, Write}; use std::path::PathBuf; use std::process::{Child, Command, Stdio}; use shell_words; use crate::app::PagingMode; use crate::errors::*; pub enum OutputType { Pager(Child), Stdout(io::Stdout), } impl OutputType { pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result { use self::PagingMode::*; Ok(match mode { Always => OutputType::try_pager(false, pager)?, QuitIfOneScreen => OutputType::try_pager(true, pager)?, _ => OutputType::stdout(), }) } /// Try to launch the pager. Fall back to stdout in case of errors. fn try_pager(quit_if_one_screen: bool, pager_from_config: Option<&str>) -> Result { let mut replace_arguments_to_less = false; let pager_from_env = match (env::var("BAT_PAGER"), env::var("PAGER")) { (Ok(bat_pager), _) => Some(bat_pager), (_, Ok(pager)) => { // less needs to be called with the '-R' option in order to properly interpret the // ANSI color sequences printed by bat. If someone has set PAGER="less -F", we // therefore need to overwrite the arguments and add '-R'. // // We only do this for PAGER (as it is not specific to 'bat'), not for BAT_PAGER // or bats '--pager' command line option. replace_arguments_to_less = true; Some(pager) } _ => None, }; let pager_from_config = pager_from_config.map(|p| p.to_string()); if pager_from_config.is_some() { replace_arguments_to_less = false; } let pager = pager_from_config .or(pager_from_env) .unwrap_or_else(|| String::from("less")); let pagerflags = shell_words::split(&pager).chain_err(|| "Could not parse pager command.")?; match pagerflags.split_first() { Some((pager_name, args)) => { let mut pager_path = PathBuf::from(pager_name); if pager_path.file_stem() == Some(&OsString::from("bat")) { pager_path = PathBuf::from("less"); } let is_less = pager_path.file_stem() == Some(&OsString::from("less")); let mut process = if is_less { let mut p = Command::new(&pager_path); if args.is_empty() || replace_arguments_to_less { p.args(vec!["--RAW-CONTROL-CHARS", "--no-init"]); if quit_if_one_screen { p.arg("--quit-if-one-screen"); } } else { p.args(args); } p.env("LESSCHARSET", "UTF-8"); p } else { let mut p = Command::new(&pager_path); p.args(args); p }; Ok(process .stdin(Stdio::piped()) .spawn() .map(OutputType::Pager) .unwrap_or_else(|_| OutputType::stdout())) } None => Ok(OutputType::stdout()), } } fn stdout() -> Self { OutputType::Stdout(io::stdout()) } pub fn handle(&mut self) -> Result<&mut dyn Write> { Ok(match *self { OutputType::Pager(ref mut command) => command .stdin .as_mut() .chain_err(|| "Could not open stdin for pager")?, OutputType::Stdout(ref mut handle) => handle, }) } } impl Drop for OutputType { fn drop(&mut self) { if let OutputType::Pager(ref mut command) = *self { let _ = command.wait(); } } } bat-0.12.1/src/preprocessor.rs010064400017500001735000000113451353340210600144510ustar0000000000000000use console::AnsiCodeIterator; /// Expand tabs like an ANSI-enabled expand(1). pub fn expand_tabs(line: &str, width: usize, cursor: &mut usize) -> String { let mut buffer = String::with_capacity(line.len() * 2); for chunk in AnsiCodeIterator::new(line) { match chunk { (text, true) => buffer.push_str(text), (mut text, false) => { while let Some(index) = text.find('\t') { // Add previous text. if index > 0 { *cursor += index; buffer.push_str(&text[0..index]); } // Add tab. let spaces = width - (*cursor % width); *cursor += spaces; buffer.push_str(&*" ".repeat(spaces)); // Next. text = &text[index + 1..text.len()]; } *cursor += text.len(); buffer.push_str(text); } } } buffer } fn try_parse_utf8_char(input: &[u8]) -> Option<(char, usize)> { let str_from_utf8 = |seq| std::str::from_utf8(seq).ok(); let decoded = None .or(input.get(0..1).and_then(str_from_utf8).map(|c| (c, 1))) .or(input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2))) .or(input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3))) .or(input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4))); let decoded_char = decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n)); decoded_char } pub fn replace_nonprintable(input: &[u8], tab_width: usize) -> String { let mut output = String::new(); let tab_width = if tab_width == 0 { 4 } else { tab_width }; let mut idx = 0; let len = input.len(); while idx < len { if let Some((chr, skip_ahead)) = try_parse_utf8_char(&input[idx..]) { idx += skip_ahead; match chr { // space ' ' => output.push('•'), // tab '\t' => { if tab_width == 1 { output.push('↹'); } else { output.push('├'); output.push_str(&"─".repeat(tab_width - 2)); output.push('┤'); } } // line feed '\x0A' => output.push('␊'), // carriage return '\x0D' => output.push('␍'), // null '\x00' => output.push('␀'), // bell '\x07' => output.push('␇'), // backspace '\x08' => output.push('␈'), // escape '\x1B' => output.push('␛'), // printable ASCII c if c.is_ascii_alphanumeric() || c.is_ascii_punctuation() || c.is_ascii_graphic() => { output.push(c) } // everything else c => output.push_str(&c.escape_unicode().collect::()), } } else { output.push_str(&format!("\\x{:02X}", input[idx])); idx += 1; } } output } #[test] fn test_try_parse_utf8_char() { assert_eq!(try_parse_utf8_char(&[0x20]), Some((' ', 1))); assert_eq!(try_parse_utf8_char(&[0x20, 0x20]), Some((' ', 1))); assert_eq!(try_parse_utf8_char(&[0x20, 0xef]), Some((' ', 1))); assert_eq!(try_parse_utf8_char(&[0x00]), Some(('\x00', 1))); assert_eq!(try_parse_utf8_char(&[0x1b]), Some(('\x1b', 1))); assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4]), Some(('ä', 2))); assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4, 0xef]), Some(('ä', 2))); assert_eq!(try_parse_utf8_char(&[0xc3, 0xa4, 0x20]), Some(('ä', 2))); assert_eq!(try_parse_utf8_char(&[0xe2, 0x82, 0xac]), Some(('€', 3))); assert_eq!( try_parse_utf8_char(&[0xe2, 0x82, 0xac, 0xef]), Some(('€', 3)) ); assert_eq!( try_parse_utf8_char(&[0xe2, 0x82, 0xac, 0x20]), Some(('€', 3)) ); assert_eq!(try_parse_utf8_char(&[0xe2, 0x88, 0xb0]), Some(('∰', 3))); assert_eq!( try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82]), Some(('🌂', 4)) ); assert_eq!( try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82, 0xef]), Some(('🌂', 4)) ); assert_eq!( try_parse_utf8_char(&[0xf0, 0x9f, 0x8c, 0x82, 0x20]), Some(('🌂', 4)) ); assert_eq!(try_parse_utf8_char(&[]), None); assert_eq!(try_parse_utf8_char(&[0xef]), None); assert_eq!(try_parse_utf8_char(&[0xef, 0x20]), None); assert_eq!(try_parse_utf8_char(&[0xf0, 0xf0]), None); } bat-0.12.1/src/printer.rs010064400017500001735000000511461353340210600134110ustar0000000000000000use std::io::Write; use std::vec::Vec; use ansi_term::Colour::{Fixed, Green, Red, Yellow}; use ansi_term::Style; use console::AnsiCodeIterator; use syntect::easy::HighlightLines; use syntect::highlighting::Color; use syntect::highlighting::Theme; use syntect::parsing::SyntaxSet; use content_inspector::ContentType; use encoding::all::{UTF_16BE, UTF_16LE}; use encoding::{DecoderTrap, Encoding}; use crate::app::Config; use crate::assets::HighlightingAssets; use crate::decorations::{ Decoration, GridBorderDecoration, LineChangesDecoration, LineNumberDecoration, }; use crate::diff::get_git_diff; use crate::diff::LineChanges; use crate::errors::*; use crate::inputfile::{InputFile, InputFileReader}; use crate::preprocessor::{expand_tabs, replace_nonprintable}; use crate::style::OutputWrap; use crate::terminal::{as_terminal_escaped, to_ansi_color}; pub trait Printer { fn print_header(&mut self, handle: &mut dyn Write, file: InputFile) -> Result<()>; fn print_footer(&mut self, handle: &mut dyn Write) -> Result<()>; fn print_snip(&mut self, handle: &mut dyn Write) -> Result<()>; fn print_line( &mut self, out_of_range: bool, handle: &mut dyn Write, line_number: usize, line_buffer: &[u8], ) -> Result<()>; } pub struct SimplePrinter; impl SimplePrinter { pub fn new() -> Self { SimplePrinter {} } } impl Printer for SimplePrinter { fn print_header(&mut self, _handle: &mut dyn Write, _file: InputFile) -> Result<()> { Ok(()) } fn print_footer(&mut self, _handle: &mut dyn Write) -> Result<()> { Ok(()) } fn print_snip(&mut self, _handle: &mut dyn Write) -> Result<()> { Ok(()) } fn print_line( &mut self, out_of_range: bool, handle: &mut dyn Write, _line_number: usize, line_buffer: &[u8], ) -> Result<()> { if !out_of_range { handle.write_all(line_buffer)?; } Ok(()) } } pub struct InteractivePrinter<'a> { colors: Colors, config: &'a Config<'a>, decorations: Vec>, panel_width: usize, ansi_prefix_sgr: String, content_type: Option, pub line_changes: Option, highlighter: Option>, syntax_set: &'a SyntaxSet, background_color_highlight: Option, } impl<'a> InteractivePrinter<'a> { pub fn new( config: &'a Config, assets: &'a HighlightingAssets, file: InputFile, reader: &mut InputFileReader, ) -> Self { let theme = assets.get_theme(&config.theme); let background_color_highlight = theme.settings.line_highlight; let colors = if config.colored_output { Colors::colored(theme, config.true_color) } else { Colors::plain() }; // Create decorations. let mut decorations: Vec> = Vec::new(); if config.output_components.numbers() { decorations.push(Box::new(LineNumberDecoration::new(&colors))); } if config.output_components.changes() { decorations.push(Box::new(LineChangesDecoration::new(&colors))); } let mut panel_width: usize = decorations.len() + decorations.iter().fold(0, |a, x| a + x.width()); // The grid border decoration isn't added until after the panel_width calculation, since the // print_horizontal_line, print_header, and print_footer functions all assume the panel // width is without the grid border. if config.output_components.grid() && !decorations.is_empty() { decorations.push(Box::new(GridBorderDecoration::new(&colors))); } // Disable the panel if the terminal is too small (i.e. can't fit 5 characters with the // panel showing). if config.term_width < (decorations.len() + decorations.iter().fold(0, |a, x| a + x.width())) + 5 { decorations.clear(); panel_width = 0; } let mut line_changes = None; let highlighter = if reader .content_type .map_or(false, |c| c.is_binary() && !config.show_nonprintable) { None } else { // Get the Git modifications line_changes = if config.output_components.changes() { match file { InputFile::Ordinary(filename) => get_git_diff(filename), _ => None, } } else { None }; // Determine the type of syntax for highlighting let syntax = assets.get_syntax(config.language, file, reader, &config.syntax_mapping); Some(HighlightLines::new(syntax, theme)) }; InteractivePrinter { panel_width, colors, config, decorations, content_type: reader.content_type, ansi_prefix_sgr: String::new(), line_changes, highlighter, syntax_set: &assets.syntax_set, background_color_highlight, } } fn print_horizontal_line(&mut self, handle: &mut dyn Write, grid_char: char) -> Result<()> { if self.panel_width == 0 { writeln!( handle, "{}", self.colors.grid.paint("─".repeat(self.config.term_width)) )?; } else { let hline = "─".repeat(self.config.term_width - (self.panel_width + 1)); let hline = format!("{}{}{}", "─".repeat(self.panel_width), grid_char, hline); writeln!(handle, "{}", self.colors.grid.paint(hline))?; } Ok(()) } fn create_fake_panel(&self, text: &str) -> String { if self.panel_width == 0 { "".to_string() } else { let text_truncated: String = text.chars().take(self.panel_width - 1).collect(); let text_filled: String = format!( "{}{}", text_truncated, " ".repeat(self.panel_width - 1 - text_truncated.len()) ); if self.config.output_components.grid() { format!("{} │ ", text_filled) } else { format!("{}", text_filled) } } } fn preprocess(&self, text: &str, cursor: &mut usize) -> String { if self.config.tab_width > 0 { expand_tabs(text, self.config.tab_width, cursor) } else { text.to_string() } } } impl<'a> Printer for InteractivePrinter<'a> { fn print_header(&mut self, handle: &mut dyn Write, file: InputFile) -> Result<()> { if !self.config.output_components.header() { if Some(ContentType::BINARY) == self.content_type && !self.config.show_nonprintable { let input = match file { InputFile::Ordinary(filename) => format!("file '{}'", filename), _ => "STDIN".into(), }; writeln!( handle, "{}: Binary content from {} will not be printed to the terminal \ (but will be present if the output of 'bat' is piped). You can use 'bat -A' \ to show the binary file contents.", Yellow.paint("[bat warning]"), input )?; } else { if self.config.output_components.grid() { self.print_horizontal_line(handle, '┬')?; } } return Ok(()); } if self.config.output_components.grid() { self.print_horizontal_line(handle, '┬')?; write!( handle, "{}{}", " ".repeat(self.panel_width), self.colors .grid .paint(if self.panel_width > 0 { "│ " } else { "" }), )?; } else { write!(handle, "{}", " ".repeat(self.panel_width))?; } let (prefix, name) = match file { InputFile::Ordinary(filename) => ("File: ", filename), _ => ("", "STDIN"), }; let mode = match self.content_type { Some(ContentType::BINARY) => " ", Some(ContentType::UTF_16LE) => " ", Some(ContentType::UTF_16BE) => " ", None => " ", _ => "", }; writeln!( handle, "{}{}{}", prefix, self.colors.filename.paint(name), mode )?; if self.config.output_components.grid() { if self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable { self.print_horizontal_line(handle, '┼')?; } else { self.print_horizontal_line(handle, '┴')?; } } Ok(()) } fn print_footer(&mut self, handle: &mut dyn Write) -> Result<()> { if self.config.output_components.grid() && (self.content_type.map_or(false, |c| c.is_text()) || self.config.show_nonprintable) { self.print_horizontal_line(handle, '┴') } else { Ok(()) } } fn print_snip(&mut self, handle: &mut dyn Write) -> Result<()> { let panel = self.create_fake_panel(" ..."); let panel_count = panel.chars().count(); let title = "8<"; let title_count = title.chars().count(); let snip_left = "─ ".repeat((self.config.term_width - panel_count - (title_count / 2)) / 4); let snip_left_count = snip_left.chars().count(); // Can't use .len() with Unicode. let snip_right = " ─".repeat((self.config.term_width - panel_count - snip_left_count - title_count) / 2); write!( handle, "{}\n", self.colors .grid .paint(format!("{}{}{}{}", panel, snip_left, title, snip_right)) )?; Ok(()) } fn print_line( &mut self, out_of_range: bool, handle: &mut dyn Write, line_number: usize, line_buffer: &[u8], ) -> Result<()> { let line = if self.config.show_nonprintable { replace_nonprintable(&line_buffer, self.config.tab_width) } else { match self.content_type { Some(ContentType::BINARY) | None => { return Ok(()); } Some(ContentType::UTF_16LE) => UTF_16LE .decode(&line_buffer, DecoderTrap::Replace) .map_err(|_| "Invalid UTF-16LE")?, Some(ContentType::UTF_16BE) => UTF_16BE .decode(&line_buffer, DecoderTrap::Replace) .map_err(|_| "Invalid UTF-16BE")?, _ => String::from_utf8_lossy(&line_buffer).to_string(), } }; let regions = { let highlighter = match self.highlighter { Some(ref mut highlighter) => highlighter, _ => { return Ok(()); } }; highlighter.highlight(line.as_ref(), self.syntax_set) }; if out_of_range { return Ok(()); } let mut cursor: usize = 0; let mut cursor_max: usize = self.config.term_width; let mut cursor_total: usize = 0; let mut panel_wrap: Option = None; // Line highlighting let highlight_this_line = self .config .highlight_lines .iter() .any(|&l| l == line_number); let background_color = self .background_color_highlight .filter(|_| highlight_this_line); // Line decorations. if self.panel_width > 0 { let decorations = self .decorations .iter() .map(|ref d| d.generate(line_number, false, self)) .collect::>(); for deco in decorations { write!(handle, "{} ", deco.text)?; cursor_max -= deco.width + 1; } } // Line contents. if self.config.output_wrap == OutputWrap::None { let true_color = self.config.true_color; let colored_output = self.config.colored_output; let italics = self.config.use_italic_text; for &(style, region) in regions.iter() { let text = &*self.preprocess(region, &mut cursor_total); let text_trimmed = text.trim_end_matches(|c| c == '\r' || c == '\n'); write!( handle, "{}", as_terminal_escaped( style, text_trimmed, true_color, colored_output, italics, background_color ) )?; if text.len() != text_trimmed.len() { if let Some(background_color) = background_color { let mut ansi_style = Style::default(); ansi_style.background = Some(to_ansi_color(background_color, true_color)); let width = if cursor_total <= cursor_max { cursor_max - cursor_total + 1 } else { 0 }; write!(handle, "{}", ansi_style.paint(" ".repeat(width)))?; } write!(handle, "{}", &text[text_trimmed.len()..])?; } } if line.bytes().next_back() != Some(b'\n') { writeln!(handle)?; } } else { for &(style, region) in regions.iter() { let ansi_iterator = AnsiCodeIterator::new(region); let mut ansi_prefix: String = String::new(); for chunk in ansi_iterator { match chunk { // ANSI escape passthrough. (text, true) => { let is_ansi_csi = text.starts_with("\x1B["); if is_ansi_csi && text.ends_with('m') { // It's an ANSI SGR sequence. // We should be mostly safe to just append these together. ansi_prefix.push_str(text); if text == "\x1B[0m" { self.ansi_prefix_sgr = "\x1B[0m".to_owned(); } else { self.ansi_prefix_sgr.push_str(text); } } else if is_ansi_csi { // It's a regular CSI sequence. // We should be mostly safe to just append these together. ansi_prefix.push_str(text); } else { // It's probably a VT100 code. // Passing it through is the safest bet. write!(handle, "{}", text)?; } } // Regular text. (text, false) => { let text = self.preprocess( text.trim_end_matches(|c| c == '\r' || c == '\n'), &mut cursor_total, ); let mut chars = text.chars(); let mut remaining = text.chars().count(); while remaining > 0 { let available = cursor_max - cursor; // It fits. if remaining <= available { let text = chars.by_ref().take(remaining).collect::(); cursor += remaining; write!( handle, "{}", as_terminal_escaped( style, &*format!( "{}{}{}", self.ansi_prefix_sgr, ansi_prefix, text ), self.config.true_color, self.config.colored_output, self.config.use_italic_text, background_color ) )?; break; } // Generate wrap padding if not already generated. if panel_wrap.is_none() { panel_wrap = if self.panel_width > 0 { Some(format!( "{} ", self.decorations .iter() .map(|ref d| d .generate(line_number, true, self) .text) .collect::>() .join(" ") )) } else { Some("".to_string()) } } // It wraps. let text = chars.by_ref().take(available).collect::(); cursor = 0; remaining -= available; write!( handle, "{}\n{}", as_terminal_escaped( style, &*format!( "{}{}{}", self.ansi_prefix_sgr, ansi_prefix, text ), self.config.true_color, self.config.colored_output, self.config.use_italic_text, background_color ), panel_wrap.clone().unwrap() )?; } // Clear the ANSI prefix buffer. ansi_prefix.clear(); } } } } if let Some(background_color) = background_color { let mut ansi_style = Style::default(); ansi_style.background = Some(to_ansi_color(background_color, self.config.true_color)); write!( handle, "{}", ansi_style.paint(" ".repeat(cursor_max - cursor)) )?; } writeln!(handle)?; } Ok(()) } } const DEFAULT_GUTTER_COLOR: u8 = 238; #[derive(Default)] pub struct Colors { pub grid: Style, pub filename: Style, pub git_added: Style, pub git_removed: Style, pub git_modified: Style, pub line_number: Style, } impl Colors { fn plain() -> Self { Colors::default() } fn colored(theme: &Theme, true_color: bool) -> Self { let gutter_color = theme .settings .gutter_foreground .map(|c| to_ansi_color(c, true_color)) .unwrap_or(Fixed(DEFAULT_GUTTER_COLOR)); Colors { grid: gutter_color.normal(), filename: Style::new().bold(), git_added: Green.normal(), git_removed: Red.normal(), git_modified: Yellow.normal(), line_number: gutter_color.normal(), } } } bat-0.12.1/src/style.rs010064400017500001735000000052031353340210600130570ustar0000000000000000use std::collections::HashSet; use std::str::FromStr; use crate::errors::*; #[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)] pub enum OutputComponent { Auto, Changes, Grid, Header, Numbers, Snip, Full, Plain, } #[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)] pub enum OutputWrap { Character, None, } impl OutputComponent { pub fn components(self, interactive_terminal: bool) -> &'static [OutputComponent] { match self { OutputComponent::Auto => { if interactive_terminal { OutputComponent::Full.components(interactive_terminal) } else { OutputComponent::Plain.components(interactive_terminal) } } OutputComponent::Changes => &[OutputComponent::Changes], OutputComponent::Grid => &[OutputComponent::Grid], OutputComponent::Header => &[OutputComponent::Header], OutputComponent::Numbers => &[OutputComponent::Numbers], OutputComponent::Snip => &[OutputComponent::Snip], OutputComponent::Full => &[ OutputComponent::Changes, OutputComponent::Grid, OutputComponent::Header, OutputComponent::Numbers, OutputComponent::Snip, ], OutputComponent::Plain => &[], } } } impl FromStr for OutputComponent { type Err = Error; fn from_str(s: &str) -> Result { match s { "auto" => Ok(OutputComponent::Auto), "changes" => Ok(OutputComponent::Changes), "grid" => Ok(OutputComponent::Grid), "header" => Ok(OutputComponent::Header), "numbers" => Ok(OutputComponent::Numbers), "snip" => Ok(OutputComponent::Snip), "full" => Ok(OutputComponent::Full), "plain" => Ok(OutputComponent::Plain), _ => Err(format!("Unknown style '{}'", s).into()), } } } #[derive(Clone)] pub struct OutputComponents(pub HashSet); impl OutputComponents { pub fn changes(&self) -> bool { self.0.contains(&OutputComponent::Changes) } pub fn grid(&self) -> bool { self.0.contains(&OutputComponent::Grid) } pub fn header(&self) -> bool { self.0.contains(&OutputComponent::Header) } pub fn numbers(&self) -> bool { self.0.contains(&OutputComponent::Numbers) } pub fn snip(&self) -> bool { self.0.contains(&OutputComponent::Snip) } pub fn plain(&self) -> bool { self.0.iter().all(|c| c == &OutputComponent::Plain) } } bat-0.12.1/src/syntax_mapping.rs010064400017500001735000000016461353340210600147670ustar0000000000000000use std::borrow::Cow; use std::collections::HashMap; #[derive(Debug, Clone, Default)] pub struct SyntaxMapping(HashMap); impl SyntaxMapping { pub fn new() -> SyntaxMapping { Default::default() } pub fn insert(&mut self, from: impl Into, to: impl Into) -> Option { self.0.insert(from.into(), to.into()) } pub fn replace<'a>(&self, input: impl Into>) -> Cow<'a, str> { let input = input.into(); match self.0.get(input.as_ref()) { Some(s) => Cow::from(s.clone()), None => input, } } } #[test] fn basic() { let mut map = SyntaxMapping::new(); map.insert("Cargo.lock", "toml"); map.insert(".ignore", ".gitignore"); assert_eq!("toml", map.replace("Cargo.lock")); assert_eq!("other.lock", map.replace("other.lock")); assert_eq!(".gitignore", map.replace(".ignore")); } bat-0.12.1/src/terminal.rs010064400017500001735000000027511353340210600135370ustar0000000000000000extern crate ansi_colours; use ansi_term::Colour::{Fixed, RGB}; use ansi_term::{self, Style}; use syntect::highlighting::{self, FontStyle}; pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term::Colour { if color.a == 0 { // Themes can specify one of the user-configurable terminal colors by // encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set // to the color palette number. The built-in themes ansi-light, // ansi-dark, and base16 use this. Fixed(color.r) } else if true_color { RGB(color.r, color.g, color.b) } else { Fixed(ansi_colours::ansi256_from_rgb((color.r, color.g, color.b))) } } pub fn as_terminal_escaped( style: highlighting::Style, text: &str, true_color: bool, colored: bool, italics: bool, background_color: Option, ) -> String { let mut style = if !colored { Style::default() } else { let color = to_ansi_color(style.foreground, true_color); if style.font_style.contains(FontStyle::BOLD) { color.bold() } else if style.font_style.contains(FontStyle::UNDERLINE) { color.underline() } else if italics && style.font_style.contains(FontStyle::ITALIC) { color.italic() } else { color.normal() } }; style.background = background_color.map(|c| to_ansi_color(c, true_color)); style.paint(text).to_string() } bat-0.12.1/src/util.rs010064400017500001735000000014071353340210600126760ustar0000000000000000/// Helper function that might appear in Rust stable at some point /// (https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.transpose) pub fn transpose(opt: Option>) -> Result, E> { opt.map_or(Ok(None), |res| res.map(Some)) } #[cfg(test)] mod tests { use super::transpose; #[derive(Debug, PartialEq)] struct TestError; type TestResult = Result; #[test] fn basic() { let a: Option> = Some(Ok(2)); assert_eq!(Ok(Some(2)), transpose(a)); let b: Option> = Some(Err(TestError)); assert_eq!(Err(TestError), transpose(b)); let c: Option> = None; assert_eq!(Ok(None), transpose(c)); } } bat-0.12.1/tests/.gitattributes010064400017500001735000000002021353340210600146110ustar0000000000000000examples/* linguist-vendored snapshots/* linguist-vendored benchmarks/* linguist-vendored benchmarks/test-src/* linguist-vendored bat-0.12.1/tests/benchmarks/.ignore010064400017500001735000000000131353340210600153170ustar0000000000000000test-src/* bat-0.12.1/tests/benchmarks/comparison.sh010064400017500001735000000015631353340210600165540ustar0000000000000000#!/bin/bash if ! which hyperfine > /dev/null 2>&1; then echo "'hyperfine' does not seem to be installed." echo "You can get it here: https://github.com/sharkdp/hyperfine" exit 1 fi SRC="test-src/jquery-3.3.1.js" cmd_bat="bat --style=full --color=always --paging=never '$SRC'" cmd_bat_simple="bat --plain --wrap=never --tabs=0 --color=always --paging=never '$SRC'" cmd_pygmentize="pygmentize -g '$SRC'" cmd_highlight="highlight -O truecolor '$SRC'" cmd_ccat="ccat --color=always '$SRC'" cmd_source_highlight="source-highlight --failsafe --infer-lang -f esc -i '$SRC'" cmd_hicat="hicat '$SRC'" cmd_coderay="coderay '$SRC'" cmd_rouge="rougify '$SRC'" hyperfine --warmup 3 \ "$cmd_bat" \ "$cmd_bat_simple" \ "$cmd_pygmentize" \ "$cmd_highlight" \ "$cmd_ccat" \ "$cmd_source_highlight" \ "$cmd_hicat" \ "$cmd_coderay" \ "$cmd_rouge" \ bat-0.12.1/tests/benchmarks/run-benchmarks.sh010064400017500001735000000010341353340210600173120ustar0000000000000000#!/bin/bash if ! which hyperfine > /dev/null 2>&1; then echo "'hyperfine' does not seem to be installed." echo "You can get it here: https://github.com/sharkdp/hyperfine" exit 1 fi echo "### Startup time" echo hyperfine --warmup 3 bat echo echo "### Plain text" echo hyperfine --warmup 3 "bat --language txt --paging=never 'test-src/jquery-3.3.1.js'" echo echo "### Time to syntax-highlight large files" echo for SRC in test-src/*; do hyperfine --warmup 3 "bat --style=full --color=always --paging=never '$SRC'" done bat-0.12.1/tests/integration_tests.rs010064400017500001735000000215131353340210600160410ustar0000000000000000extern crate assert_cmd; extern crate escargot; #[macro_use] extern crate lazy_static; use assert_cmd::prelude::*; use escargot::CargoRun; use std::process::Command; lazy_static! { static ref CARGO_RUN: CargoRun = escargot::CargoBuild::new() .bin("bat") .current_release() .run() .unwrap(); } fn bat_with_config() -> Command { let mut cmd = CARGO_RUN.command(); cmd.current_dir("tests/examples"); cmd.env_remove("PAGER"); cmd.env_remove("BAT_PAGER"); cmd.env_remove("BAT_CONFIG_PATH"); cmd.env_remove("BAT_STYLE"); cmd.env_remove("BAT_THEME"); cmd.env_remove("BAT_TABS"); cmd } fn bat() -> Command { let mut cmd = bat_with_config(); cmd.arg("--no-config"); cmd } #[test] fn basic() { bat() .arg("test.txt") .assert() .success() .stdout("hello world\n") .stderr(""); } #[test] fn stdin() { bat() .with_stdin() .buffer("foo\nbar\n") .assert() .success() .stdout("foo\nbar\n"); } #[test] fn concatenate() { bat() .arg("test.txt") .arg("test.txt") .assert() .success() .stdout("hello world\nhello world\n"); } #[test] fn concatenate_stdin() { bat() .arg("test.txt") .arg("-") .arg("test.txt") .with_stdin() .buffer("stdin\n") .assert() .success() .stdout("hello world\nstdin\nhello world\n"); } #[test] fn concatenate_empty_first() { bat() .arg("empty.txt") .arg("test.txt") .assert() .success() .stdout("hello world\n"); } #[test] fn concatenate_empty_last() { bat() .arg("test.txt") .arg("empty.txt") .assert() .success() .stdout("hello world\n"); } #[test] fn concatenate_empty_both() { bat() .arg("empty.txt") .arg("empty.txt") .assert() .success() .stdout(""); } #[test] fn concatenate_empty_between() { bat() .arg("test.txt") .arg("empty.txt") .arg("test.txt") .assert() .success() .stdout("hello world\nhello world\n"); } #[test] fn concatenate_empty_first_and_last() { bat() .arg("empty.txt") .arg("test.txt") .arg("empty.txt") .assert() .success() .stdout("hello world\n"); } #[test] fn concatenate_single_line() { bat() .arg("single-line.txt") .arg("single-line.txt") .assert() .success() .stdout("Single LineSingle Line"); } #[test] fn concatenate_single_line_empty() { bat() .arg("single-line.txt") .arg("empty.txt") .arg("single-line.txt") .assert() .success() .stdout("Single LineSingle Line"); } #[test] fn line_numbers() { bat() .arg("multiline.txt") .arg("--style=numbers") .arg("--decorations=always") .assert() .success() .stdout(" 1 line 1\n 2 line 2\n 3 line 3\n 4 line 4\n"); } #[test] fn line_range_2_3() { bat() .arg("multiline.txt") .arg("--line-range=2:3") .assert() .success() .stdout("line 2\nline 3\n"); } #[test] fn line_range_first_two() { bat() .arg("multiline.txt") .arg("--line-range=:2") .assert() .success() .stdout("line 1\nline 2\n"); } #[test] fn line_range_last_3() { bat() .arg("multiline.txt") .arg("--line-range=2:") .assert() .success() .stdout("line 2\nline 3\nline 4\n"); } #[test] fn line_range_multiple() { bat() .arg("multiline.txt") .arg("--line-range=1:2") .arg("--line-range=4:4") .assert() .success() .stdout("line 1\nline 2\nline 4\n"); } #[test] fn tabs_numbers() { bat() .arg("tabs.txt") .arg("--tabs=4") .arg("--style=numbers") .arg("--decorations=always") .assert() .success() .stdout( " 1 1 2 3 4 2 1 ? 3 22 ? 4 333 ? 5 4444 ? 6 55555 ? 7 666666 ? 8 7777777 ? 9 88888888 ? ", ); } #[test] fn tabs_passthrough_wrapped() { bat() .arg("tabs.txt") .arg("--tabs=0") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn tabs_4_wrapped() { bat() .arg("tabs.txt") .arg("--tabs=4") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn tabs_8_wrapped() { bat() .arg("tabs.txt") .arg("--tabs=8") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn tabs_passthrough() { bat() .arg("tabs.txt") .arg("--tabs=0") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn tabs_4() { bat() .arg("tabs.txt") .arg("--tabs=4") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn tabs_8() { bat() .arg("tabs.txt") .arg("--tabs=8") .arg("--style=plain") .arg("--decorations=always") .assert() .success() .stdout( " 1 2 3 4 1 ? 22 ? 333 ? 4444 ? 55555 ? 666666 ? 7777777 ? 88888888 ? ", ); } #[test] fn fail_non_existing() { bat().arg("non-existing-file").assert().failure(); } #[test] fn fail_directory() { bat().arg("sub_directory").assert().failure(); } #[test] fn do_not_exit_directory() { bat() .arg("sub_directory") .arg("test.txt") .assert() .stdout("hello world\n") .failure(); } #[test] fn pager_basic() { bat() .env("PAGER", "echo pager-output") .arg("--paging=always") .arg("test.txt") .assert() .success() .stdout("pager-output\n"); } #[test] fn pager_overwrite() { bat() .env("PAGER", "echo other-pager") .env("BAT_PAGER", "echo pager-output") .arg("--paging=always") .arg("test.txt") .assert() .success() .stdout("pager-output\n"); } #[test] fn pager_disable() { bat() .env("PAGER", "echo other-pager") .env("BAT_PAGER", "") .arg("--paging=always") .arg("test.txt") .assert() .success() .stdout("hello world\n"); } #[test] fn config_location_test() { bat_with_config() .env("BAT_CONFIG_PATH", "bat.conf") .arg("--config-file") .assert() .success() .stdout("bat.conf\n"); } #[test] fn config_read_arguments_from_file() { bat_with_config() .env("BAT_CONFIG_PATH", "bat.conf") .arg("test.txt") .assert() .success() .stdout("dummy-pager-from-config\n"); } #[test] fn utf16() { // The output will be converted to UTF-8 with a leading UTF-8 BOM bat() .arg("--plain") .arg("--decorations=always") .arg("test_UTF-16LE.txt") .assert() .success() .stdout(std::str::from_utf8(b"\xEF\xBB\xBFhello world\n").unwrap()); } #[test] fn can_print_file_named_cache() { bat_with_config() .arg("cache") .assert() .success() .stdout("test\n") .stderr(""); } #[test] fn can_print_file_starting_with_cache() { bat_with_config() .arg("cache.c") .assert() .success() .stdout("test\n") .stderr(""); } #[test] fn does_not_print_unwanted_file_named_cache() { bat_with_config().arg("cach").assert().failure(); } #[test] fn snip() { bat() .arg("multiline.txt") .arg("--style=numbers,snip") .arg("--decorations=always") .arg("--line-range=1:2") .arg("--line-range=4:") .arg("--terminal-width=80") .assert() .success() .stdout( " 1 line 1 2 line 2 ...─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 8< ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 4 line 4 ", ); } bat-0.12.1/tests/snapshot_tests.rs010064400017500001735000000022721353340210600153560ustar0000000000000000mod tester; use crate::tester::BatTester; macro_rules! snapshot_tests { ($($test_name: ident: $style: expr,)*) => { $( #[test] fn $test_name() { let bat_tester = BatTester::new(); bat_tester.test_snapshot(stringify!($test_name), $style); } )* }; } snapshot_tests! { changes: "changes", grid: "grid", header: "header", numbers: "numbers", changes_grid: "changes,grid", changes_header: "changes,header", changes_numbers: "changes,numbers", grid_header: "grid,header", grid_numbers: "grid,numbers", header_numbers: "header,numbers", changes_grid_header: "changes,grid,header", changes_grid_numbers: "changes,grid,numbers", changes_header_numbers: "changes,header,numbers", grid_header_numbers: "grid,header,numbers", changes_grid_header_numbers: "changes,grid,header,numbers", full: "full", plain: "plain", } bat-0.12.1/tests/snapshots/generate_snapshots.py010075500017500001735000000027521353340210600202250ustar0000000000000000#!/usr/bin/env python3 import itertools import subprocess import pathlib import shutil def generate_snapshots(): single_styles = ["changes", "grid", "header", "numbers"] collective_styles = ["full", "plain"] for num in range(len(single_styles)): for grouped in itertools.combinations(single_styles, num + 1): generate_style_snapshot(",".join(grouped)) for style in collective_styles: generate_style_snapshot(style) def generate_style_snapshot(style): generate_snapshot(style.replace(",", "_"), "--style={}".format(style)) def generate_snapshot(name, arguments): command = "cargo run -- --paging=never --color=never --decorations=always " command += "{args} sample.rs > output/{name}.snapshot.txt".format( name=name, args=arguments ) print("generating snapshot for {}".format(name)) subprocess.call(command, shell=True) def build_bat(): print("building bat") subprocess.call("cargo build", cwd="../..", shell=True) def prepare_output_dir(): shutil.rmtree("output", ignore_errors=True) pathlib.Path("output").mkdir() def modify_sample_file(): print("modifying sample.rs to show changes") shutil.copyfile("sample.modified.rs", "sample.rs") def undo_sample_file_modification(): print("undoing sample.rs modifications") subprocess.call("git checkout -- sample.rs", shell=True) build_bat() prepare_output_dir() modify_sample_file() generate_snapshots() undo_sample_file_modification() bat-0.12.1/tests/snapshots/output/changes.snapshot.txt010064400017500001735000000010031353340210600213070ustar0000000000000000 struct Rectangle { width: u32, height: u32, } _ fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( ~ "The perimeter of the rectangle is {} pixels.", ~ perimeter(&rect1) ); + println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } + + fn perimeter(rectangle: &Rectangle) -> u32 { + (rectangle.width + rectangle.height) * 2 + } bat-0.12.1/tests/snapshots/output/changes_grid.snapshot.txt010064400017500001735000000020751353340210600223260ustar0000000000000000──┬───────────────────────────────────────────────────────────────────────────── │ struct Rectangle { │ width: u32, │ height: u32, │ } │ _ │ fn main() { │ let rect1 = Rectangle { width: 30, height: 50 }; │ │ println!( ~ │ "The perimeter of the rectangle is {} pixels.", ~ │ perimeter(&rect1) │ ); + │ println!(r#"This line contains invalid utf8: "�����"#; │ } │ │ fn area(rectangle: &Rectangle) -> u32 { │ rectangle.width * rectangle.height │ } + │ + │ fn perimeter(rectangle: &Rectangle) -> u32 { + │ (rectangle.width + rectangle.height) * 2 + │ } ──┴───────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/changes_grid_header.snapshot.txt010064400017500001735000000025041353340210600236330ustar0000000000000000──┬───────────────────────────────────────────────────────────────────────────── │ File: sample.rs ──┼───────────────────────────────────────────────────────────────────────────── │ struct Rectangle { │ width: u32, │ height: u32, │ } │ _ │ fn main() { │ let rect1 = Rectangle { width: 30, height: 50 }; │ │ println!( ~ │ "The perimeter of the rectangle is {} pixels.", ~ │ perimeter(&rect1) │ ); + │ println!(r#"This line contains invalid utf8: "�����"#; │ } │ │ fn area(rectangle: &Rectangle) -> u32 { │ rectangle.width * rectangle.height │ } + │ + │ fn perimeter(rectangle: &Rectangle) -> u32 { + │ (rectangle.width + rectangle.height) * 2 + │ } ──┴───────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/changes_grid_header_numbers.snapshot.txt010064400017500001735000000026671353340210600254000ustar0000000000000000───────┬──────────────────────────────────────────────────────────────────────── │ File: sample.rs ───────┼──────────────────────────────────────────────────────────────────────── 1 │ struct Rectangle { 2 │ width: u32, 3 │ height: u32, 4 │ } 5 │ 6 _ │ fn main() { 7 │ let rect1 = Rectangle { width: 30, height: 50 }; 8 │ 9 │ println!( 10 ~ │ "The perimeter of the rectangle is {} pixels.", 11 ~ │ perimeter(&rect1) 12 │ ); 13 + │ println!(r#"This line contains invalid utf8: "�����"#; 14 │ } 15 │ 16 │ fn area(rectangle: &Rectangle) -> u32 { 17 │ rectangle.width * rectangle.height 18 │ } 19 + │ 20 + │ fn perimeter(rectangle: &Rectangle) -> u32 { 21 + │ (rectangle.width + rectangle.height) * 2 22 + │ } ───────┴──────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/changes_grid_numbers.snapshot.txt010064400017500001735000000022531353340210600240570ustar0000000000000000───────┬──────────────────────────────────────────────────────────────────────── 1 │ struct Rectangle { 2 │ width: u32, 3 │ height: u32, 4 │ } 5 │ 6 _ │ fn main() { 7 │ let rect1 = Rectangle { width: 30, height: 50 }; 8 │ 9 │ println!( 10 ~ │ "The perimeter of the rectangle is {} pixels.", 11 ~ │ perimeter(&rect1) 12 │ ); 13 + │ println!(r#"This line contains invalid utf8: "�����"#; 14 │ } 15 │ 16 │ fn area(rectangle: &Rectangle) -> u32 { 17 │ rectangle.width * rectangle.height 18 │ } 19 + │ 20 + │ fn perimeter(rectangle: &Rectangle) -> u32 { 21 + │ (rectangle.width + rectangle.height) * 2 22 + │ } ───────┴──────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/changes_header.snapshot.txt010064400017500001735000000010251353340210600226230ustar0000000000000000 File: sample.rs struct Rectangle { width: u32, height: u32, } _ fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( ~ "The perimeter of the rectangle is {} pixels.", ~ perimeter(&rect1) ); + println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } + + fn perimeter(rectangle: &Rectangle) -> u32 { + (rectangle.width + rectangle.height) * 2 + } bat-0.12.1/tests/snapshots/output/changes_header_numbers.snapshot.txt010064400017500001735000000012101353340210600243520ustar0000000000000000 File: sample.rs 1 struct Rectangle { 2 width: u32, 3 height: u32, 4 } 5 6 _ fn main() { 7 let rect1 = Rectangle { width: 30, height: 50 }; 8 9 println!( 10 ~ "The perimeter of the rectangle is {} pixels.", 11 ~ perimeter(&rect1) 12 ); 13 + println!(r#"This line contains invalid utf8: "�����"#; 14 } 15 16 fn area(rectangle: &Rectangle) -> u32 { 17 rectangle.width * rectangle.height 18 } 19 + 20 + fn perimeter(rectangle: &Rectangle) -> u32 { 21 + (rectangle.width + rectangle.height) * 2 22 + } bat-0.12.1/tests/snapshots/output/changes_numbers.snapshot.txt010064400017500001735000000011611353340210600230470ustar0000000000000000 1 struct Rectangle { 2 width: u32, 3 height: u32, 4 } 5 6 _ fn main() { 7 let rect1 = Rectangle { width: 30, height: 50 }; 8 9 println!( 10 ~ "The perimeter of the rectangle is {} pixels.", 11 ~ perimeter(&rect1) 12 ); 13 + println!(r#"This line contains invalid utf8: "�����"#; 14 } 15 16 fn area(rectangle: &Rectangle) -> u32 { 17 rectangle.width * rectangle.height 18 } 19 + 20 + fn perimeter(rectangle: &Rectangle) -> u32 { 21 + (rectangle.width + rectangle.height) * 2 22 + } bat-0.12.1/tests/snapshots/output/full.snapshot.txt010064400017500001735000000026671353340210600206620ustar0000000000000000───────┬──────────────────────────────────────────────────────────────────────── │ File: sample.rs ───────┼──────────────────────────────────────────────────────────────────────── 1 │ struct Rectangle { 2 │ width: u32, 3 │ height: u32, 4 │ } 5 │ 6 _ │ fn main() { 7 │ let rect1 = Rectangle { width: 30, height: 50 }; 8 │ 9 │ println!( 10 ~ │ "The perimeter of the rectangle is {} pixels.", 11 ~ │ perimeter(&rect1) 12 │ ); 13 + │ println!(r#"This line contains invalid utf8: "�����"#; 14 │ } 15 │ 16 │ fn area(rectangle: &Rectangle) -> u32 { 17 │ rectangle.width * rectangle.height 18 │ } 19 + │ 20 + │ fn perimeter(rectangle: &Rectangle) -> u32 { 21 + │ (rectangle.width + rectangle.height) * 2 22 + │ } ───────┴──────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/grid.snapshot.txt010064400017500001735000000016711353340210600206370ustar0000000000000000──────────────────────────────────────────────────────────────────────────────── struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( "The perimeter of the rectangle is {} pixels.", perimeter(&rect1) ); println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 } ──────────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/grid_header.snapshot.txt010064400017500001735000000022721353340210600221450ustar0000000000000000──────────────────────────────────────────────────────────────────────────────── File: sample.rs ──────────────────────────────────────────────────────────────────────────────── struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( "The perimeter of the rectangle is {} pixels.", perimeter(&rect1) ); println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 } ──────────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/grid_header_numbers.snapshot.txt010064400017500001735000000026111353340210600236750ustar0000000000000000─────┬────────────────────────────────────────────────────────────────────────── │ File: sample.rs ─────┼────────────────────────────────────────────────────────────────────────── 1 │ struct Rectangle { 2 │ width: u32, 3 │ height: u32, 4 │ } 5 │ 6 │ fn main() { 7 │ let rect1 = Rectangle { width: 30, height: 50 }; 8 │ 9 │ println!( 10 │ "The perimeter of the rectangle is {} pixels.", 11 │ perimeter(&rect1) 12 │ ); 13 │ println!(r#"This line contains invalid utf8: "�����"#; 14 │ } 15 │ 16 │ fn area(rectangle: &Rectangle) -> u32 { 17 │ rectangle.width * rectangle.height 18 │ } 19 │ 20 │ fn perimeter(rectangle: &Rectangle) -> u32 { 21 │ (rectangle.width + rectangle.height) * 2 22 │ } ─────┴────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/grid_numbers.snapshot.txt010064400017500001735000000021771353340210600223740ustar0000000000000000─────┬────────────────────────────────────────────────────────────────────────── 1 │ struct Rectangle { 2 │ width: u32, 3 │ height: u32, 4 │ } 5 │ 6 │ fn main() { 7 │ let rect1 = Rectangle { width: 30, height: 50 }; 8 │ 9 │ println!( 10 │ "The perimeter of the rectangle is {} pixels.", 11 │ perimeter(&rect1) 12 │ ); 13 │ println!(r#"This line contains invalid utf8: "�����"#; 14 │ } 15 │ 16 │ fn area(rectangle: &Rectangle) -> u32 { 17 │ rectangle.width * rectangle.height 18 │ } 19 │ 20 │ fn perimeter(rectangle: &Rectangle) -> u32 { 21 │ (rectangle.width + rectangle.height) * 2 22 │ } ─────┴────────────────────────────────────────────────────────────────────────── bat-0.12.1/tests/snapshots/output/header.snapshot.txt010064400017500001735000000007471353340210600211450ustar0000000000000000File: sample.rs struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( "The perimeter of the rectangle is {} pixels.", perimeter(&rect1) ); println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 } bat-0.12.1/tests/snapshots/output/header_numbers.snapshot.txt010064400017500001735000000011321353340210600226650ustar0000000000000000 File: sample.rs 1 struct Rectangle { 2 width: u32, 3 height: u32, 4 } 5 6 fn main() { 7 let rect1 = Rectangle { width: 30, height: 50 }; 8 9 println!( 10 "The perimeter of the rectangle is {} pixels.", 11 perimeter(&rect1) 12 ); 13 println!(r#"This line contains invalid utf8: "�����"#; 14 } 15 16 fn area(rectangle: &Rectangle) -> u32 { 17 rectangle.width * rectangle.height 18 } 19 20 fn perimeter(rectangle: &Rectangle) -> u32 { 21 (rectangle.width + rectangle.height) * 2 22 } bat-0.12.1/tests/snapshots/output/numbers.snapshot.txt010064400017500001735000000011051353340210600213550ustar0000000000000000 1 struct Rectangle { 2 width: u32, 3 height: u32, 4 } 5 6 fn main() { 7 let rect1 = Rectangle { width: 30, height: 50 }; 8 9 println!( 10 "The perimeter of the rectangle is {} pixels.", 11 perimeter(&rect1) 12 ); 13 println!(r#"This line contains invalid utf8: "�����"#; 14 } 15 16 fn area(rectangle: &Rectangle) -> u32 { 17 rectangle.width * rectangle.height 18 } 19 20 fn perimeter(rectangle: &Rectangle) -> u32 { 21 (rectangle.width + rectangle.height) * 2 22 } bat-0.12.1/tests/snapshots/output/plain.snapshot.txt010064400017500001735000000007271353340210600210160ustar0000000000000000struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( "The perimeter of the rectangle is {} pixels.", perimeter(&rect1) ); println!(r#"This line contains invalid utf8: "�����"#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 } bat-0.12.1/tests/snapshots/sample.modified.rs010064400017500001735000000007151353340210600173570ustar0000000000000000struct Rectangle { width: u32, height: u32, } fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!( "The perimeter of the rectangle is {} pixels.", perimeter(&rect1) ); println!(r#"This line contains invalid utf8: ""#; } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } fn perimeter(rectangle: &Rectangle) -> u32 { (rectangle.width + rectangle.height) * 2 } bat-0.12.1/tests/snapshots/sample.rs010064400017500001735000000005511353340210600155760ustar0000000000000000struct Rectangle { width: u32, height: u32, } fn main() { // width and height of a rectangle can be different let rect1 = Rectangle { width: 30, height: 50 }; println!( "The area of the rectangle is {} square pixels.", area(&rect1) ); } fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height } bat-0.12.1/tests/tester.rs010064400017500001735000000060461353340210600136060ustar0000000000000000use std::env; use std::fs::{self, File}; use std::io::Read; use std::path::{Path, PathBuf}; use std::process::Command; extern crate tempdir; use self::tempdir::TempDir; extern crate git2; use self::git2::build::CheckoutBuilder; use self::git2::Repository; use self::git2::Signature; pub struct BatTester { /// Temporary working directory temp_dir: TempDir, /// Path to the *bat* executable exe: PathBuf, } impl BatTester { pub fn new() -> Self { let temp_dir = create_sample_directory().expect("sample directory"); let root = env::current_exe() .expect("tests executable") .parent() .expect("tests executable directory") .parent() .expect("bat executable directory") .to_path_buf(); let exe_name = if cfg!(windows) { "bat.exe" } else { "bat" }; let exe = root.join(exe_name); BatTester { temp_dir, exe } } pub fn test_snapshot(&self, name: &str, style: &str) { let output = Command::new(&self.exe) .current_dir(self.temp_dir.path()) .args(&[ "sample.rs", "--no-config", "--paging=never", "--color=never", "--decorations=always", "--terminal-width=80", &format!("--style={}", style), ]) .output() .expect("bat failed"); // have to do the replace because the filename in the header changes based on the current working directory let actual = String::from_utf8_lossy(&output.stdout) .as_ref() .replace("tests/snapshots/", ""); let mut expected = String::new(); let mut file = File::open(format!("tests/snapshots/output/{}.snapshot.txt", name)) .expect("snapshot file missing"); file.read_to_string(&mut expected) .expect("could not read snapshot file"); assert_eq!(expected, actual); } } fn create_sample_directory() -> Result { // Create temp directory and initialize repository let temp_dir = TempDir::new("bat-tests").expect("Temp directory"); let repo = Repository::init(&temp_dir)?; // Copy over `sample.rs` let sample_path = temp_dir.path().join("sample.rs"); println!("{:?}", &sample_path); fs::copy("tests/snapshots/sample.rs", &sample_path).expect("successful copy"); // Commit let mut index = repo.index()?; index.add_path(Path::new("sample.rs"))?; let oid = index.write_tree()?; let signature = Signature::now("bat test runner", "bat@test.runner")?; let tree = repo.find_tree(oid)?; let _ = repo.commit( Some("HEAD"), // point HEAD to our new commit &signature, // author &signature, // committer "initial commit", &tree, &[], ); let mut opts = CheckoutBuilder::new(); repo.checkout_head(Some(opts.force()))?; fs::copy("tests/snapshots/sample.modified.rs", &sample_path).expect("successful copy"); Ok(temp_dir) } bat-0.12.1/.cargo_vcs_info.json0000644000000001120000000000000117140ustar00{ "git": { "sha1": "608cefb05c2860f00397aa68f473fcd494ed21af" } } bat-0.12.1/Cargo.lock0000644000001636250000000000000077120ustar00# This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] name = "adler32" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "aho-corasick" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ansi_colours" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ansi_term" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "arrayref" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "arrayvec" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "assert_cmd" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "escargot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "predicates 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "atty" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "autocfg" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "backtrace" version = "0.3.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "base64" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bat" version = "0.12.1" dependencies = [ "ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "console 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "git2 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "syntect 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bincode" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bindgen" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bitflags" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "blake2b_simd" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "byteorder" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cc" version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cexpr" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cfg-if" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "clang-sys" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "clap" version = "2.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "clicolors-control" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "console" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "constant_time_eq" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "content_inspector" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crc32fast" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-utils" version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "difference" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "dirs" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "dirs-sys" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encode_unicode" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "encoding" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding-index-japanese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding-index-korean" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding-index-simpchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding-index-singlebyte" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding-index-tradchinese" version = "1.20141219.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "encoding_index_tests" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "env_logger" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "error-chain" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "escargot" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "escargot" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure_derive" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "flate2" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fuchsia-cprng" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "git2" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "libgit2-sys 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "glob" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "humantime" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "idna" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazycell" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libgit2-sys" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libloading" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libz-sys" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "line-wrap" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "linked-hash-map" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "memchr" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "miniz-sys" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "miniz_oxide" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nodrop" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "onig" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "onig_sys" version = "69.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bindgen 0.50.0 (registry+https://github.com/rust-lang/crates.io-index)", "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "percent-encoding" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pkg-config" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plist" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "predicates" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "predicates-core" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "predicates-tree" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro2" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro2" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quick-error" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "rand_os" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rdrand" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "redox_users" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rust-argon2" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rustc-demangle" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ryu" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "safemem" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "same-file" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde" version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "shell-words" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "shlex" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "smallvec" version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "synstructure" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syntect" version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "term_size" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "termcolor" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "termios" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "thread_local" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "treeline" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-normalization" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-width" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-xid" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "vcpkg" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "walkdir" version = "2.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "which" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wild" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi-build" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-util" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wincolor" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "xml-rs" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "yaml-rust" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" "checksum ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" "checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" "checksum assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2dc477793bd82ec39799b6f6b3df64938532fdf2ab0d49ef817eac65856a5a1e" "checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" "checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" "checksum backtrace 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "1371048253fa3bac6704bfd6bbfc922ee9bdcee8881330d40f308b81cc5adc55" "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" "checksum bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9f04a5e50dc80b3d5d35320889053637d15011aed5e66b66b37ae798c65da6f7" "checksum bindgen 0.50.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65a913de3fa2fa95f2c593bb7e33b1be1ce1ce8a83f34b6bb02e6f01400b96cc" "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" "checksum blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bf775a81bb2d464e20ff170ac20316c7b08a43d11dbc72f0f82e8e8d3d6d0499" "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" "checksum cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff" "checksum cexpr 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7fa24eb00d5ffab90eaeaf1092ac85c04c64aaf358ea6f84505b8116d24c6af" "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" "checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" "checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum console 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b147390a412132d75d10dd3b7b175a69cf5fd95032f7503c7091b8831ba10242" "checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" "checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" "checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" "checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" "checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" "checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" "checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" "checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" "checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" "checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" "checksum escargot 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ceb9adbf9874d5d028b5e4c5739d22b71988252b25c9c98fe7cf9738bee84597" "checksum escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74cf96bec282dcdb07099f7e31d9fed323bca9435a09aba7b6d99b7617bca96d" "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" "checksum flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2adaffba6388640136149e18ed080b77a78611c1e1d6de75aedcdf78df5d4682" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" "checksum git2 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "327d698f86a7ebdfeb86a4238ccdb004828939d3a3555b6ead679541d14e36c0" "checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" "checksum libgit2-sys 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8c2078aec6f4b16d1b89f6a72e4f6eb1e75ffa85312023291e89c6d3087bc8fb" "checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" "checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" "checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" "checksum miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9e3ae51cea1576ceba0dde3d484d30e6e5b86dee0b2d412fe3a16a15c98202" "checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10" "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" "checksum onig 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4e723fc996fff1aeab8f62205f3e8528bf498bdd5eadb2784d2d31f30077947" "checksum onig_sys 69.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a8d4efbf5f59cece01f539305191485b651acb3785b9d5eef05749f0496514e" "checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" "checksum pkg-config 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c1d2cfa5a714db3b5f24f0915e74fcdf91d09d496ba61329705dda7774d2af" "checksum plist 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f" "checksum predicates 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53e09015b0d3f5a0ec2d4428f7559bb7b3fff341b4e159fedd1d57fac8b939ff" "checksum predicates-core 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178" "checksum predicates-tree 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "175a40b9cf564ce9bf050654633dbf339978706b8ead1a907bb970b63185dd95" "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" "checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d" "checksum regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88c3d9193984285d544df4a30c23a4e62ead42edf70a4452ceb76dac1ce05c26" "checksum regex-syntax 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b143cceb2ca5e56d5671988ef8b15615733e7ee16cd348e064333b251b89343f" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" "checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" "checksum serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f" "checksum serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "cb4dc18c61206b08dc98216c98faa0232f4337e1e1b8574551d5bad29ea1b425" "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" "checksum shell-words 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a" "checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" "checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7" "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" "checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" "checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" "checksum syntect 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fb5b18814fd5c81187d0b01b60a5b57e9577d6dc1e5e0b104443930005179e46" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" "checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327" "checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e" "checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum treeline 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" "checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" "checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" "checksum which 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" "checksum wild 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "97d34fecce28871e5c0e059deae21ef7f7d13b98a5964b24c58b3735c8052fc8" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9" "checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" "checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"