pax_global_header00006660000000000000000000000064147761527640014535gustar00rootroot0000000000000052 comment=55f93686c01528224f448c19128836e7df245f72 json-3.12.0/000077500000000000000000000000001477615276400125715ustar00rootroot00000000000000json-3.12.0/.cirrus.yml000066400000000000000000000006201477615276400146770ustar00rootroot00000000000000arm_container: image: gcc:latest check_task: check_script: - wget https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2.tar.gz - tar xfz cmake-3.20.2.tar.gz - cd cmake-3.20.2 - ./configure - make cmake ctest -j4 - cd .. - mkdir build - cd build - ../cmake-3.20.2/bin/cmake .. -DJSON_FastTests=ON - make -j4 - cd tests - ../../cmake-3.20.2/bin/ctest -j4 json-3.12.0/.clang-tidy000066400000000000000000000055541477615276400146360ustar00rootroot00000000000000# TODO: The first three checks are only removed to get the CI going. They have to be addressed at some point. Checks: '*, -portability-template-virtual-member-function, -bugprone-use-after-move, -hicpp-invalid-access-moved, -altera-id-dependent-backward-branch, -altera-struct-pack-align, -altera-unroll-loops, -android-cloexec-fopen, -boost-use-ranges, -bugprone-easily-swappable-parameters, -cert-err58-cpp, -clang-analyzer-webkit.NoUncountedMemberChecker, -concurrency-mt-unsafe, -cppcoreguidelines-avoid-const-or-ref-data-members, -cppcoreguidelines-avoid-do-while, -cppcoreguidelines-avoid-goto, -cppcoreguidelines-avoid-magic-numbers, -cppcoreguidelines-avoid-non-const-global-variables, -cppcoreguidelines-macro-usage, -cppcoreguidelines-pro-bounds-array-to-pointer-decay, -cppcoreguidelines-pro-bounds-constant-array-index, -cppcoreguidelines-pro-bounds-pointer-arithmetic, -cppcoreguidelines-pro-type-reinterpret-cast, -cppcoreguidelines-pro-type-union-access, -cppcoreguidelines-rvalue-reference-param-not-moved, -cppcoreguidelines-virtual-class-destructor, -fuchsia-default-arguments-calls, -fuchsia-default-arguments-declarations, -fuchsia-overloaded-operator, -google-explicit-constructor, -google-readability-function-size, -google-runtime-int, -google-runtime-references, -hicpp-avoid-goto, -hicpp-explicit-conversions, -hicpp-function-size, -hicpp-no-array-decay, -hicpp-no-assembler, -hicpp-signed-bitwise, -hicpp-uppercase-literal-suffix, -llvm-header-guard, -llvm-include-order, -llvmlibc-*, -misc-use-anonymous-namespace, -misc-confusable-identifiers, -misc-include-cleaner, -misc-no-recursion, -misc-non-private-member-variables-in-classes, -modernize-concat-nested-namespaces, -modernize-type-traits, -modernize-use-constraints, -modernize-use-designated-initializers, -modernize-use-nodiscard, -modernize-use-ranges, -modernize-use-std-numbers, -modernize-use-trailing-return-type, -performance-enum-size, -readability-function-cognitive-complexity, -readability-function-size, -readability-identifier-length, -readability-magic-numbers, -readability-redundant-access-specifiers, -readability-simplify-boolean-expr, -readability-uppercase-literal-suffix' CheckOptions: - key: hicpp-special-member-functions.AllowSoleDefaultDtor value: 1 WarningsAsErrors: '*' #HeaderFilterRegex: '.*nlohmann.*' HeaderFilterRegex: '.*hpp$' json-3.12.0/.github/000077500000000000000000000000001477615276400141315ustar00rootroot00000000000000json-3.12.0/.github/CODEOWNERS000066400000000000000000000004131477615276400155220ustar00rootroot00000000000000# JSON for Modern C++ was originally written by Niels Lohmann. # Since 2013, over 250 contributors have helped to improve the library. # This CODEOWNERS file is only to make sure that @nlohmann is requested # for a code review in case of a pull request. * @nlohmann json-3.12.0/.github/CODE_OF_CONDUCT.md000066400000000000000000000126031477615276400167320ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [mail@nlohmann.me](mailto:mail@nlohmann.me). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations json-3.12.0/.github/CONTRIBUTING.md000066400000000000000000000247451477615276400163760ustar00rootroot00000000000000# Contribution Guidelines Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features of C++11 has evolved into a [widely-used](https://json.nlohmann.me/home/customers/) JSON library. I truly appreciate all the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure that our collaboration is efficient and effective, please follow these guidelines. Feel free to discuss or suggest improvements to this document [by submitting a pull request](https://github.com/nlohmann/json/edit/develop/.github/CONTRIBUTING.md). ## Ways to Contribute There are multiple ways to contribute. ### Reporting an issue Please [create an issue](https://github.com/nlohmann/json/issues/new/choose), assuming one does not already exist, and describe your concern. Note you need a [GitHub account](https://github.com/signup/free) for this. Clearly describe the issue: - If it is a bug, please describe how to **reproduce** it. If possible, attach a _complete example_ which demonstrates the error. Please also state what you **expected** to happen instead of the error. - If you propose a change or addition, try to give an **example** how the improved code could look like or how to use it. - If you found a compilation error, please tell us which **compiler** (version and operating system) you used and paste the (relevant part of) the error messages to the ticket. Please stick to the provided issue template [bug report](https://github.com/nlohmann/json/blob/develop/.github/ISSUE_TEMPLATE/bug.yaml) if possible. ### Reporting a security vulnerability You can report a security vulnerability according to our [security policy](https://github.com/nlohmann/json/security/policy). ### Discussing a new feature For questions, feature or support requests, please [open a discussion](https://github.com/nlohmann/json/discussions/new). If you find a proposed answer satisfactory, please use the "Mark as answer" button to make it easier for readers to see what helped and for the community to filter for open questions. ### Proposing a fix or an improvement Join an ongoing discussion or comment on an existing issue before starting to code. This can help to avoid duplicate efforts or other frustration during the later review. Create a [pull request](https://github.com/nlohmann/json/pulls?q=sort%3Aupdated-desc+is%3Apr+is%3Aopen) against the `develop` branch and follow the pull request template. In particular, - describe the changes in detail, both the what and why, - reference existing issues where applicable, - add tests to maintain 100% test coverage, - update the documentation as needed, and - ensure the source code is amalgamated. We describe all points in detail below. All contributions (including pull requests) must agree to the [Developer Certificate of Origin (DCO) version 1.1](https://developercertificate.org). This is exactly the same one created and used by the Linux kernel developers and posted on http://developercertificate.org/. This is a developer's certification that he or she has the right to submit the patch for inclusion into the project. ## How to... ### Describe your changes This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only _what_ you changed, but _why_. This rationale can be very valuable down the road when improvements or bugs are discussed years later. ### Reference existing issues [Link a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue) to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos) don’t require prior discussions. ### Write tests The library has an extensive test suite that currently covers [100 %](https://coveralls.io/github/nlohmann/json) of the library's code. These test are crucial to maintain API stability and give future contributors confidence that they do not accidentally break things. As Titus Winters aptly put it: > If you liked it, you should have put a test on it. #### Run the tests First, ensure the test suite runs before making any changes: ```sh $ cmake -S. -B build $ cmake --build build -j 10 $ ctest --test-dir build -j 10 ``` The test suite should report: ``` 100% tests passed, 0 tests failed out of 98 ``` #### Add tests The tests are located in [`tests/src/unit-*.cpp`](https://github.com/nlohmann/json/tree/develop/tests/src) and contain [doctest assertions](https://github.com/doctest/doctest/blob/master/doc/markdown/assertions.md) like `CHECK`. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files. When fixing a bug, edit `unit-regression2.cpp` and add a section referencing the fixed issue. #### Exceptions When you test exceptions, please use `CHECK_THROWS_WITH_AS` which also takes the `what()` argument of the thrown exception into account. #### Coverage If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the “Ubuntu” workflow. ### Update the documentation The [main documentation](https://json.nlohmann.me) of the library is generated from the files [`docs/mkdocs/docs`](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs). This folder contains dedicated pages for [certain features](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/features), a list of [all exceptions](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs/home/exceptions.md), and an [extensive API documentation](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/api) with details on every public API function. Build the documentation locally using: ```shell make install_venv -C docs/mkdocs make serve -C docs/mkdocs ``` The documentation will then available at . See the documentation of [mkdocs](https://www.mkdocs.org) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for more information. ### Amalgamate the source code The single-header files [`single_include/nlohmann/json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp) and [`single_include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json_fwd.hpp) are **generated** from the source files in the [`include/nlohmann` directory](https://github.com/nlohmann/json/tree/develop/include/nlohmann). **Do not** edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing: ```shell make amalgamate ``` ## Recommended documentation - The library’s [README file](https://github.com/nlohmann/json/blob/master/README.md) is an excellent starting point to understand its functionality. - The [documentation page](https://json.nlohmann.me) is the reference documentation of the library. - [RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259) is the reference for the JavaScript Object Notation (JSON) Data Interchange Format. ## Please don't... Certain contributions are not helpful. ### Break the public API We take pride in the library being used by [numerous customers across various industries](https://json.nlohmann.me/home/customers/). They all rely on the guarantees provided by [semantic versioning](https://semver.org). Please do not change the library such that the public API of the 3.x.y version is broken. This includes: - Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions. - Removing functions. - Renaming functions or classes. - Changing exception handling. - Changing exception ids. - Changing access specifiers. - Changing default arguments. Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility. Breaking changes may be introduced when they are guarded with a feature macro such as [`JSON_USE_IMPLICIT_CONVERSIONS`](https://json.nlohmann.me/api/macros/json_use_implicit_conversions/) which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release. ### Break C++11 language conformance This library is designed to work with C++11 and later. This means that any [supported C++11 compiler](https://github.com/nlohmann/json/blob/master/README.md#supported-compilers) should compile the library without problems. Some compilers like GCC 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support. Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective [`JSON_HAS_CPP_14`](https://json.nlohmann.me/api/macros/json_has_cpp_11/) macros. ### Break JSON conformance Please refrain from proposing changes that would **break [JSON](https://datatracker.ietf.org/doc/html/rfc8259) conformance**. If you propose a conformant extension of JSON to be supported by the library, please motivate this extension. ## Wanted The following areas really need contribution and are always welcomed: - Extending the **continuous integration** toward more exotic compilers such as Android NDK, Intel's Compiler, or the bleeding-edge versions Clang. - Improving the efficiency of the **JSON parser**. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the `json.hpp` header, and I am not aware of approaches similar to [`re2c`](http://re2c.org) for parsing. - Extending and updating existing **benchmarks** to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumption are very important characteristics for C++ developers, so having proper comparisons would be interesting. We look forward to your contributions and collaboration to enhance the library! json-3.12.0/.github/FUNDING.yml000066400000000000000000000000641477615276400157460ustar00rootroot00000000000000github: nlohmann custom: https://paypal.me/nlohmann json-3.12.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001477615276400163145ustar00rootroot00000000000000json-3.12.0/.github/ISSUE_TEMPLATE/bug.yaml000066400000000000000000000064041477615276400177610ustar00rootroot00000000000000name: Bug Report description: Create a bug report labels: - 'kind: bug' body: - type: markdown attributes: value: > Thanks for taking the time to fill out this bug report! Make sure you give it a short and specific **title** so that the report is searchable and uniquely identifiable. Note that this form is for bug reports only. Please [open a discussion](https://github.com/nlohmann/json/discussions/new) for questions, feature requests, or support requests. - type: textarea id: summary attributes: label: Description description: > Please provide an abstract description of the issue to the developers, and why you consider it to be a bug. Please include any specific links to the documentation, JSON specification, or code. validations: required: true - type: textarea id: reproduce attributes: label: Reproduction steps description: > How do you trigger the bug? Please walk us through step by step. Be as specific as possible. validations: required: true - type: textarea id: results attributes: label: Expected vs. actual results description: > Please describe what you expected to happen after the steps above and what actually happened. validations: required: true - type: textarea id: code attributes: label: Minimal code example description: > If possible, provide a small and self-contained example that triggers the bug. Please understand that we cannot analyze and debug large code bases. Please do not paste screenshots here. render: Shell - type: textarea id: output attributes: label: Error messages description: > Please provide any kind of error output (compilation errors, exception messages, stack traces, etc.) which can help to diagnose the error. render: Shell - type: input id: compiler attributes: label: Compiler and operating system description: > On which operating systems and compilers have you observed the issue? Include as many relevant details about the environment you experienced the bug in. Make sure you use a [supported compiler](https://github.com/nlohmann/json#supported-compilers). validations: required: true - type: input id: version attributes: label: Library version description: > Which version of the library did you use? If it is a released version, please enter the version number (e.g., 3.12.0). Otherwise, please enter the commit hash. If you got the library from another source as the GitHub repository (e.g., via a package manager), please also state this. validations: required: true - type: checkboxes id: validation attributes: label: Validation description: > Please check these additional steps: options: - label: The bug also occurs if the latest version from the [`develop`](https://github.com/nlohmann/json/tree/develop) branch is used. - label: I can successfully [compile and run the unit tests](https://github.com/nlohmann/json#execute-unit-tests). json-3.12.0/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000002741477615276400203070ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: Ask a question url: https://github.com/nlohmann/json/discussions about: Ask questions and discuss with other community members json-3.12.0/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000012521477615276400177320ustar00rootroot00000000000000[Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.] - [ ] The changes are described in detail, both the what and why. - [ ] If applicable, an [existing issue](https://github.com/nlohmann/json/issues) is referenced. - [ ] The [Code coverage](https://coveralls.io/github/nlohmann/json) remained at 100%. A test case for every new line of code. - [ ] If applicable, the [documentation](https://json.nlohmann.me) is updated. - [ ] The source code is amalgamated by running `make amalgamate`. Read the [Contribution Guidelines](https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md) for detailed information. json-3.12.0/.github/SECURITY.md000066400000000000000000000026141477615276400157250ustar00rootroot00000000000000# Security Policy ## Reporting a Vulnerability We value the security of our users and appreciate your efforts to responsibly disclose vulnerabilities. If you have identified a security vulnerability in this repository, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/nlohmann/json/security/advisories/new) tab. Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other users and teams may be added once the advisory is created. We will send a response indicating the next steps in handling your report. After the initial reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for additional information or guidance. For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers. ## Additional Resources - Explore security-related topics and contribute to tools and projects through [GitHub Security Lab](https://securitylab.github.com/). - Learn more about responsible disclosure and reporting vulnerabilities in GitHub at [About coordinated disclosure of security vulnerabilities](https://docs.github.com/en/code-security/repository-security-advisories/about-coordinated-disclosure-of-security-vulnerabilities). We sincerely thank you for contributing to the security and integrity of this project! json-3.12.0/.github/config.yml000066400000000000000000000022441477615276400161230ustar00rootroot00000000000000# Configuration for sentiment-bot - https://github.com/behaviorbot/sentiment-bot # *Required* toxicity threshold between 0 and .99 with the higher numbers being the most toxic # Anything higher than this threshold will be marked as toxic and commented on sentimentBotToxicityThreshold: .7 # *Required* Comment to reply with sentimentBotReplyComment: > Please be sure to review the [code of conduct](https://github.com/nlohmann/json/blob/develop/.github/CODE_OF_CONDUCT.md) and be respectful of other users. cc/ @nlohmann # Configuration for request-info - https://github.com/behaviorbot/request-info # *Required* Comment to reply with requestInfoReplyComment: > We would appreciate it if you could provide us with more info about this issue or pull request! Please check the [issue template](https://github.com/nlohmann/json/blob/develop/.github/ISSUE_TEMPLATE.md) and the [pull request template](https://github.com/nlohmann/json/blob/develop/.github/PULL_REQUEST_TEMPLATE.md). # *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given requestInfoLabelToAdd: "state: needs more info" checkIssueTemplate: true checkPullRequestTemplate: true json-3.12.0/.github/dependabot.yml000066400000000000000000000011241477615276400167570ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: github-actions directory: / schedule: interval: daily - package-ecosystem: pip directory: /docs/mkdocs schedule: interval: daily - package-ecosystem: pip directory: /tools/astyle schedule: interval: daily - package-ecosystem: pip directory: /tools/generate_natvis schedule: interval: daily - package-ecosystem: pip directory: /tools/serve_header schedule: interval: daily - package-ecosystem: pip directory: /cmake/requirements schedule: interval: daily json-3.12.0/.github/external_ci/000077500000000000000000000000001477615276400164265ustar00rootroot00000000000000json-3.12.0/.github/external_ci/appveyor.yml000066400000000000000000000056411477615276400210240ustar00rootroot00000000000000version: '{build}' # only build PRs and commits to develop branch # (see https://help.appveyor.com/discussions/questions/55079-two-builds-per-commit-to-pull-request) branches: only: - develop only_commits: files: - .github/external_ci/appveyor.yml - cmake/ - include/ - tests/ - CMakeLists.txt environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 configuration: Debug platform: x86 CXX_FLAGS: "/W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 14 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 configuration: Release platform: x86 CXX_FLAGS: "/W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 14 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 configuration: Release platform: x86 name: with_win_header CXX_FLAGS: "/W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 14 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 configuration: Release platform: x86 CXX_FLAGS: "/permissive- /std:c++17 /utf-8 /W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 15 2017 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 configuration: Release platform: x86 CXX_FLAGS: "/W4 /WX" CMAKE_OPTIONS: "-DJSON_ImplicitConversions=OFF" GENERATOR: Visual Studio 16 2019 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 configuration: Release platform: x64 CXX_FLAGS: "/W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 14 2015 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 configuration: Release platform: x64 CXX_FLAGS: "/permissive- /std:c++17 /Zc:__cplusplus /utf-8 /W4 /WX" CMAKE_OPTIONS: "" GENERATOR: Visual Studio 15 2017 init: - cmake --version - msbuild /version install: - if "%platform%"=="x86" set GENERATOR_PLATFORM=Win32 before_build: # for with_win_header build, inject the inclusion of Windows.h to the single-header library - ps: if ($env:name -Eq "with_win_header") { $header_path = "single_include\nlohmann\json.hpp" } - ps: if ($env:name -Eq "with_win_header") { "#include `n" + (Get-Content $header_path | Out-String) | Set-Content $header_path } - cmake . -G "%GENERATOR%" -A "%GENERATOR_PLATFORM%" -DCMAKE_CXX_FLAGS="%CXX_FLAGS%" -DCMAKE_IGNORE_PATH="C:/Program Files/Git/usr/bin" -DJSON_BuildTests=On "%CMAKE_OPTIONS%" build_script: - cmake --build . --config "%configuration%" --parallel 2 test_script: - if "%configuration%"=="Release" ctest -C "%configuration%" --parallel 2 --output-on-failure # On Debug builds, skip test-unicode_all # as it is extremely slow to run and cause # occasional timeouts on AppVeyor. # More info: https://github.com/nlohmann/json/pull/1570 - if "%configuration%"=="Debug" ctest --exclude-regex "test-unicode" -C "%configuration%" --parallel 2 --output-on-failure json-3.12.0/.github/labeler.yml000066400000000000000000000007361477615276400162700ustar00rootroot00000000000000version: 1 labels: - label: "documentation" files: - "README.md" - label: "documentation" files: - "docs/.*" - label: "tests" files: - "tests/.*" - label: "CMake" files: - ".*CMakeLists.txt" - label: "CMake" files: - "cmake/.*" - label: "CI" files: - "github/workflows/.*" - label: "CI" files: - "github/external_ci/.*" - label: "S" size-below: 10 - label: "M" size-above: 9 size-below: 100 - label: "L" size-above: 100 json-3.12.0/.github/workflows/000077500000000000000000000000001477615276400161665ustar00rootroot00000000000000json-3.12.0/.github/workflows/check_amalgamation.yml000066400000000000000000000051431477615276400225030ustar00rootroot00000000000000name: "Check amalgamation" on: pull_request: permissions: contents: read jobs: save: runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: Save PR number run: | mkdir -p ./pr echo ${{ github.event.number }} > ./pr/number echo ${{ github.event.pull_request.user.login }} > ./pr/author - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: pr path: pr/ check: runs-on: ubuntu-latest env: MAIN_DIR: ${{ github.workspace }}/main INCLUDE_DIR: ${{ github.workspace }}/main/single_include/nlohmann TOOL_DIR: ${{ github.workspace }}/tools/tools/amalgamate steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: Checkout pull request uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: path: main ref: ${{ github.event.pull_request.head.sha }} - name: Checkout tools uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: path: tools ref: develop - name: Install astyle run: | python3 -mvenv venv venv/bin/pip3 install -r $MAIN_DIR/tools/astyle/requirements.txt - name: Check amalgamation run: | cd $MAIN_DIR rm -fr $INCLUDE_DIR/json.hpp~ $INCLUDE_DIR/json_fwd.hpp~ cp $INCLUDE_DIR/json.hpp $INCLUDE_DIR/json.hpp~ cp $INCLUDE_DIR/json_fwd.hpp $INCLUDE_DIR/json_fwd.hpp~ python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json.json -s . python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json_fwd.json -s . echo "Format (1)" ${{ github.workspace }}/venv/bin/astyle --project=tools/astyle/.astylerc --suffix=none --quiet $INCLUDE_DIR/json.hpp $INCLUDE_DIR/json_fwd.hpp diff $INCLUDE_DIR/json.hpp~ $INCLUDE_DIR/json.hpp diff $INCLUDE_DIR/json_fwd.hpp~ $INCLUDE_DIR/json_fwd.hpp ${{ github.workspace }}/venv/bin/astyle --project=tools/astyle/.astylerc --suffix=orig $(find docs/examples include tests -type f \( -name '*.hpp' -o -name '*.cpp' -o -name '*.cu' \) -not -path 'tests/thirdparty/*' -not -path 'tests/abi/include/nlohmann/*' | sort) echo Check find $MAIN_DIR -name '*.orig' -exec false {} \+ json-3.12.0/.github/workflows/cifuzz.yml000066400000000000000000000017711477615276400202310ustar00rootroot00000000000000name: CIFuzz on: [pull_request] permissions: contents: read jobs: Fuzzing: runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: Build Fuzzers id: build uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@57fe4475324c5506adbfecdcdd2917f65c86ee9e # master with: oss-fuzz-project-name: 'json' dry-run: false language: c++ - name: Run Fuzzers uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@57fe4475324c5506adbfecdcdd2917f65c86ee9e # master with: oss-fuzz-project-name: 'json' fuzz-seconds: 300 dry-run: false language: c++ - name: Upload Crash uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: failure() && steps.build.outcome == 'success' with: name: artifacts path: ./out/artifacts json-3.12.0/.github/workflows/codeql-analysis.yml000066400000000000000000000024571477615276400220110ustar00rootroot00000000000000name: "Code scanning - action" on: push: branches: - develop - master - release/* pull_request: schedule: - cron: '0 19 * * 1' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: CodeQL-Build: runs-on: ubuntu-latest permissions: security-events: write steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@fc7e4a0fa01c3cca5fd6a1fddec5c0740c977aa2 # v3.28.14 with: languages: c-cpp # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@fc7e4a0fa01c3cca5fd6a1fddec5c0740c977aa2 # v3.28.14 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@fc7e4a0fa01c3cca5fd6a1fddec5c0740c977aa2 # v3.28.14 json-3.12.0/.github/workflows/comment_check_amalgamation.yml000066400000000000000000000056341477615276400242320ustar00rootroot00000000000000name: Comment Check Amalgamation on: workflow_run: workflows: ["Check amalgamation"] types: - completed permissions: contents: read jobs: comment: if: ${{ github.event.workflow_run.conclusion == 'failure' }} runs-on: ubuntu-latest permissions: contents: read actions: read issues: read pull-requests: write steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: 'Download artifact' uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | var artifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: ${{github.event.workflow_run.id }}, }); var matchArtifact = artifacts.data.artifacts.filter((artifact) => { return artifact.name == "pr" })[0]; var download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: matchArtifact.id, archive_format: 'zip', }); var fs = require('fs'); fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data)); - run: unzip pr.zip - name: 'Comment on PR' uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | var fs = require('fs'); const author = fs.readFileSync('./author') const issue_number = Number(fs.readFileSync('./number')); const opts = github.rest.issues.listForRepo.endpoint.merge({ owner: context.repo.owner, repo: context.repo.repo, creator: author, state: 'all' }) let first = true const issues = await github.paginate(opts) for (const issue of issues) { if (issue.number === issue_number) { continue } if (issue.pull_request) { first = false break } } await github.rest.issues.createComment({ issue_number: issue_number, owner: context.repo.owner, repo: context.repo.repo, body: '## 🔴 Amalgamation check failed! 🔴\nThe source code has not been amalgamated.' + (first ? ' @' + author + ' Please read and follow the [Contribution Guidelines]' + '(https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md#files-to-change).' : '') }) json-3.12.0/.github/workflows/dependency-review.yml000066400000000000000000000017121477615276400223270ustar00rootroot00000000000000# Dependency Review Action # # This Action will scan dependency manifest files that change as part of a Pull Request, # surfacing known-vulnerable versions of the packages declared or updated in the PR. # Once installed, if the workflow run is marked as required, # PRs introducing known-vulnerable packages will be blocked from merging. # # Source repository: https://github.com/actions/dependency-review-action name: 'Dependency Review' on: [pull_request] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: 'Checkout Repository' uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: 'Dependency Review' uses: actions/dependency-review-action@ce3cf9537a52e8119d91fd484ab5b8a807627bf8 # v4.6.0 json-3.12.0/.github/workflows/labeler.yml000066400000000000000000000010541477615276400203170ustar00rootroot00000000000000name: "Pull Request Labeler" on: pull_request_target: types: [opened, synchronize] permissions: contents: read jobs: label: permissions: contents: read pull-requests: write runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - uses: srvaroa/labeler@e216fb40e2e6d3b17d90fb1d950f98bee92f65ce # master env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" json-3.12.0/.github/workflows/macos.yml000066400000000000000000000100051477615276400200070ustar00rootroot00000000000000name: macOS on: push: branches: - develop - master - release/* pull_request: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: # macos-11 is deprecated # macos-11: # runs-on: macos-11 # strategy: # matrix: # xcode: ['11.7', '12.4', '12.5.1', '13.0'] # env: # DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer # # steps: # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # - name: Run CMake # run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON # - name: Build # run: cmake --build build --parallel 10 # - name: Test # run: cd build ; ctest -j 10 --output-on-failure # macos-12 is deprecated (https://github.com/actions/runner-images/issues/10721) # macos-12: # runs-on: macos-12 # https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md # strategy: # matrix: # xcode: ['13.1', '13.2.1', '13.3.1', '13.4.1', '14.0', '14.0.1', '14.1'] # env: # DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer # # steps: # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # - name: Run CMake # run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON # - name: Build # run: cmake --build build --parallel 10 # - name: Test # run: cd build ; ctest -j 10 --output-on-failure macos-13: runs-on: macos-13 # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md strategy: matrix: xcode: ['14.1', '14.2', '14.3', '14.3.1', '15.0.1', '15.1', '15.2'] env: DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 --output-on-failure macos-14: runs-on: macos-14 # https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md strategy: matrix: xcode: ['15.3', '15.4'] env: DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 --output-on-failure macos-15: runs-on: macos-15 # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md strategy: matrix: xcode: ['16.0', '16.1', '16.2'] env: DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 --output-on-failure xcode_standards: runs-on: macos-latest strategy: matrix: standard: [11, 14, 17, 20, 23, 26] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_TestStandards=${{ matrix.standard }} - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 --output-on-failure json-3.12.0/.github/workflows/publish_documentation.yml000066400000000000000000000023031477615276400233060ustar00rootroot00000000000000name: Publish documentation # publish the documentation on every merge to develop branch on: push: branches: - develop paths: - docs/mkdocs/** - docs/examples/** workflow_dispatch: # we don't want to have concurrent jobs, and we don't want to cancel running jobs to avoid broken publications concurrency: group: documentation cancel-in-progress: false permissions: contents: read jobs: publish_documentation: permissions: contents: write if: github.repository == 'nlohmann/json' runs-on: ubuntu-22.04 steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install virtual environment run: make install_venv -C docs/mkdocs - name: Build documentation run: make build -C docs/mkdocs - name: Deploy documentation uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./docs/mkdocs/site json-3.12.0/.github/workflows/scorecards.yml000066400000000000000000000061371477615276400210500ustar00rootroot00000000000000# This workflow uses actions that are not certified by GitHub. They are provided # by a third-party and are governed by separate terms of service, privacy # policy, and support documentation. name: Scorecard supply-chain security on: # For Branch-Protection check. Only the default branch is supported. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection branch_protection_rule: # To guarantee Maintained check is occasionally updated. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained schedule: - cron: '20 7 * * 2' push: branches: ["develop"] permissions: contents: read jobs: analysis: name: Scorecard analysis runs-on: ubuntu-latest permissions: # Needed to upload the results to code-scanning dashboard. security-events: write # Needed to publish results and get a badge (see publish_results below). id-token: write contents: read actions: read # To allow GraphQL ListCommits to work issues: read pull-requests: read # To detect SAST tools checks: read steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: "Checkout code" uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: "Run analysis" uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 with: results_file: results.sarif results_format: sarif # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: # - you want to enable the Branch-Protection check on a *public* repository, or # - you are installing Scorecards on a *private* repository # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. # repo_token: ${{ secrets.SCORECARD_TOKEN }} # Public repositories: # - Publish results to OpenSSF REST API for easy access by consumers # - Allows the repository to include the Scorecard badge. # - See https://github.com/ossf/scorecard-action#publishing-results. # For private repositories: # - `publish_results` will always be set to `false`, regardless # of the value entered here. publish_results: true # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: SARIF file path: results.sarif retention-days: 5 # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" uses: github/codeql-action/upload-sarif@fc7e4a0fa01c3cca5fd6a1fddec5c0740c977aa2 # v3.28.14 with: sarif_file: results.sarif json-3.12.0/.github/workflows/stale.yml000066400000000000000000000032461477615276400200260ustar00rootroot00000000000000name: 'Comment and close stale issues and PR' on: schedule: - cron: '0 0 * * *' permissions: contents: read jobs: stale: runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 with: stale-issue-label: 'state: stale' stale-pr-label: 'state: stale' exempt-issue-labels: 'pinned,security' stale-issue-message: 'This issue has been marked as stale because it has been open for 90 days without activity. If this issue is still relevant, please add a comment or remove the "stale" label. Otherwise, it will be closed in 10 days. Thank you for helping us prioritize our work!' stale-pr-message: 'This pull request has been marked as stale because it has had no activity for 30 days. While we won’t close it automatically, we encourage you to update or comment if it is still relevant. Keeping pull requests active and up-to-date helps us review and merge changes more efficiently. Thank you for your contributions!' close-issue-message: 'This issue has been closed after being marked as stale for 10 days without any further activity. If this was done in error or the issue is still relevant, please feel free to reopen it or create a new issue. We appreciate your understanding and contributions.' days-before-stale: 90 days-before-pr-stale: 30 days-before-close: 10 days-before-pr-close: -1 json-3.12.0/.github/workflows/ubuntu.yml000066400000000000000000000226241477615276400202410ustar00rootroot00000000000000name: Ubuntu on: push: branches: - develop - master - release/* pull_request: workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: ci_test_gcc: runs-on: ubuntu-latest container: gcc:latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_gcc ci_infer: runs-on: ubuntu-latest container: ghcr.io/nlohmann/json-ci:v2.4.0 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_infer ci_static_analysis_ubuntu: runs-on: ubuntu-latest strategy: matrix: target: [ci_test_amalgamation, ci_test_single_header, ci_cppcheck, ci_cpplint, ci_reproducible_tests, ci_non_git_tests, ci_offline_testdata, ci_reuse_compliance, ci_test_valgrind] steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: Install Valgrind run: sudo apt-get update ; sudo apt-get install -y valgrind - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ${{ matrix.target }} ci_static_analysis_clang: runs-on: ubuntu-latest container: silkeh/clang:dev strategy: matrix: target: [ci_test_clang, ci_clang_tidy, ci_test_clang_sanitizer, ci_clang_analyze, ci_single_binaries] steps: - name: Install git, clang-tools, iwyu (ci_single_binaries), and unzip run: apt-get update ; apt-get install -y git clang-tools iwyu unzip - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ${{ matrix.target }} ci_cmake_options: runs-on: ubuntu-latest container: ubuntu:focal strategy: matrix: target: [ci_cmake_flags, ci_test_diagnostics, ci_test_diagnostic_positions, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison, ci_test_noglobaludls] steps: - name: Install build-essential run: apt-get update ; apt-get install -y build-essential unzip wget git libssl-dev - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ${{ matrix.target }} ci_test_coverage: runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install dependencies and de_DE locale run: | sudo apt-get clean sudo apt-get update sudo apt-get install -y build-essential cmake lcov ninja-build make locales gcc-multilib g++-multilib sudo locale-gen de_DE sudo update-locale - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_coverage - name: Archive coverage report uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: code-coverage-report path: ${{ github.workspace }}/build/html - name: Publish report to Coveralls uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: ${{ github.workspace }}/build/json.info.filtered.noexcept ci_test_compilers_gcc_old: runs-on: ubuntu-latest strategy: matrix: compiler: ['4.8', '4.9', '5', '6'] container: ghcr.io/nlohmann/json-ci:v2.4.0 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: CXX=g++-${{ matrix.compiler }} cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_compiler_g++-${{ matrix.compiler }} ci_test_compilers_gcc: runs-on: ubuntu-latest strategy: matrix: # older GCC docker images (4, 5, 6) fail to check out code compiler: ['7', '8', '9', '10', '11', '12', '13', '14', 'latest'] container: gcc:${{ matrix.compiler }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_compiler_default ci_test_compilers_clang: runs-on: ubuntu-latest strategy: matrix: compiler: ['3.4', '3.5', '3.6', '3.7', '3.8', '3.9', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15-bullseye', '16', '17', '18', '19', '20', 'latest'] container: silkeh/clang:${{ matrix.compiler }} steps: - name: Install unzip and git run: apt-get update ; apt-get install -y unzip git - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Set env FORCE_STDCPPFS_FLAG for clang 7 / 8 / 9 / 10 run: echo "JSON_FORCED_GLOBAL_COMPILE_OPTIONS=-DJSON_HAS_FILESYSTEM=0;-DJSON_HAS_EXPERIMENTAL_FILESYSTEM=0" >> "$GITHUB_ENV" if: ${{ matrix.compiler == '7' || matrix.compiler == '8' || matrix.compiler == '9' || matrix.compiler == '10' }} - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_compiler_default ci_test_standards_gcc: runs-on: ubuntu-latest container: gcc:latest strategy: matrix: standard: [11, 14, 17, 20, 23, 26] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_test_gcc_cxx${{ matrix.standard }} ci_test_standards_clang: runs-on: ubuntu-latest container: silkeh/clang:latest strategy: matrix: standard: [11, 14, 17, 20, 23, 26] stdlib: [libcxx, libstdcxx] steps: - name: Install git and unzip run: apt-get update ; apt-get install -y git unzip - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Get latest CMake and ninja uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build with libc++ run: cmake --build build --target ci_test_clang_libcxx_cxx${{ matrix.standard }} if: ${{ matrix.stdlib == 'libcxx' }} - name: Build with libstdc++ run: cmake --build build --target ci_test_clang_cxx${{ matrix.standard }} if: ${{ matrix.stdlib == 'libstdcxx' }} ci_cuda_example: runs-on: ubuntu-latest container: ghcr.io/nlohmann/json-ci:v2.4.0 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ci_cuda_example ci_icpc: runs-on: ubuntu-latest container: ghcr.io/nlohmann/json-ci:v2.2.0 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: | . /opt/intel/oneapi/setvars.sh cmake --build build --target ci_icpc ci_test_documentation: runs-on: ubuntu-latest strategy: matrix: target: [ci_test_examples, ci_test_build_documentation] steps: - name: Harden Runner uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build run: cmake --build build --target ${{ matrix.target }} json-3.12.0/.github/workflows/windows.yml000066400000000000000000000115771477615276400204160ustar00rootroot00000000000000name: Windows on: push: branches: - develop - master - release/* pull_request: workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: mingw: runs-on: windows-2019 strategy: matrix: architecture: [x64, x86] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up MinGW uses: egor-tensin/setup-mingw@84c781b557efd538dec66bde06988d81cd3138cf # v2.2.0 with: platform: ${{ matrix.architecture }} version: 12.2.0 # https://github.com/egor-tensin/setup-mingw/issues/14 - name: Run CMake run: cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Debug --output-on-failure msvc2019: runs-on: windows-2019 strategy: matrix: build_type: [Debug, Release] architecture: [Win32, x64] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -G "Visual Studio 16 2019" -A ${{ matrix.architecture }} -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/W4 /WX" if: matrix.build_type == 'Release' - name: Run CMake run: cmake -S . -B build -G "Visual Studio 16 2019" -A ${{ matrix.architecture }} -DJSON_BuildTests=On -DJSON_FastTests=ON -DCMAKE_CXX_FLAGS="/W4 /WX" if: matrix.build_type == 'Debug' - name: Build run: cmake --build build --config ${{ matrix.build_type }} --parallel 10 - name: Test run: cd build ; ctest -j 10 -C ${{ matrix.build_type }} --output-on-failure msvc2019_latest: runs-on: windows-2019 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -G "Visual Studio 16 2019" -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/permissive- /std:c++latest /utf-8 /W4 /WX" - name: Build run: cmake --build build --config Release --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Release --output-on-failure msvc2022: runs-on: windows-2022 strategy: matrix: build_type: [Debug, Release] architecture: [Win32, x64] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -G "Visual Studio 17 2022" -A ${{ matrix.architecture }} -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/W4 /WX" if: matrix.build_type == 'Release' - name: Run CMake run: cmake -S . -B build -G "Visual Studio 17 2022" -A ${{ matrix.architecture }} -DJSON_BuildTests=On -DJSON_FastTests=ON -DCMAKE_CXX_FLAGS="/W4 /WX" if: matrix.build_type == 'Debug' - name: Build run: cmake --build build --config ${{ matrix.build_type }} --parallel 10 - name: Test run: cd build ; ctest -j 10 -C ${{ matrix.build_type }} --output-on-failure msvc2022_latest: runs-on: windows-2022 steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -G "Visual Studio 17 2022" -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/permissive- /std:c++latest /utf-8 /W4 /WX" - name: Build run: cmake --build build --config Release --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Release --output-on-failure clang: runs-on: windows-2019 strategy: matrix: version: [11, 12, 13, 14, 15] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Clang run: curl -fsSL -o LLVM${{ matrix.version }}.exe https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.version }}.0.0/LLVM-${{ matrix.version }}.0.0-win64.exe ; 7z x LLVM${{ matrix.version }}.exe -y -o"C:/Program Files/LLVM" - name: Run CMake run: cmake -S . -B build -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On - name: Build run: cmake --build build --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Debug --exclude-regex "test-unicode" --output-on-failure clang-cl-11: runs-on: windows-2019 strategy: matrix: architecture: [Win32, x64] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run CMake run: cmake -S . -B build -G "Visual Studio 16 2019" -A ${{ matrix.architecture }} -T ClangCL -DJSON_BuildTests=On - name: Build run: cmake --build build --config Debug --parallel 10 - name: Test run: cd build ; ctest -j 10 -C Debug --exclude-regex "test-unicode" --output-on-failure json-3.12.0/.gitignore000066400000000000000000000012131477615276400145560ustar00rootroot00000000000000*.dSYM *.o *.gcno *.gcda .DS_Store /.idea /cmake-build-* # Visual Studio / Visual Studio Code /.vs/ /.vscode/ /out/ # clangd cache /.cache/ # build directories (vscode-cmake-tools, user-defined, ...) /build*/ # fuzzers /tests/corpus_* /tests/parse_*_fuzzer # documentation /docs/docset/JSON_for_Modern_C++.docset/ /docs/docset/JSON_for_Modern_C++.tgz /docs/docset/docSet.dsidx /docs/mkdocs/.cache/ /docs/mkdocs/docs/__pycache__/ /docs/mkdocs/site/ /docs/mkdocs/venv/ # serve_header /localhost.pem /localhost-key.pem /serve_header.yml # Swift Package Manager build directory /.build venv nlohmann_json.spdx # Bazel-related MODULE.bazel.lock json-3.12.0/.reuse/000077500000000000000000000000001477615276400137725ustar00rootroot00000000000000json-3.12.0/.reuse/dep5000066400000000000000000000016621477615276400145570ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: json Upstream-Contact: Niels Lohmann Source: https://github.com/nlohmann/json Files: * Copyright: 2013-2025 Niels Lohmann License: MIT Files: include/nlohmann/thirdparty/hedley.hpp Copyright: 2016-2021 Evan Nemerson License: CC0 Files: tests/thirdparty/doctest/* Copyright: 2016-2023 Viktor Kirilov License: MIT Files: tests/thirdparty/fifo_map/* Copyright: 2015-2017 Niels Lohmann License: MIT Files: tests/thirdparty/Fuzzer/* Copyright: 2003-2022 LLVM Project. License: Apache-2.0 Files: tests/thirdparty/imapdl/* Copyright: 2017 Georg Sauthoff License: GPL-3.0-only Files: tools/amalgamate/* Copyright: 2012 Erik Edlund License: BSD-3-Clause Files: tools/gdb_pretty_printer/* Copyright: 2020 Hannes Domani License: MIT json-3.12.0/.reuse/templates/000077500000000000000000000000001477615276400157705ustar00rootroot00000000000000json-3.12.0/.reuse/templates/json.jinja2000066400000000000000000000005351477615276400200430ustar00rootroot00000000000000 __ _____ _____ _____ __| | __| | | | JSON for Modern C++ | | |__ | | | | | | version 3.12.0 |_____|_____|_____|_|___| https://github.com/nlohmann/json {% for copyright_line in copyright_lines %} {{ copyright_line }} {% endfor %} {% for expression in spdx_expressions %} SPDX-License-Identifier: {{ expression }} {% endfor %} json-3.12.0/.reuse/templates/json_support.jinja2000066400000000000000000000005571477615276400216430ustar00rootroot00000000000000 __ _____ _____ _____ __| | __| | | | JSON for Modern C++ (supporting code) | | |__ | | | | | | version 3.12.0 |_____|_____|_____|_|___| https://github.com/nlohmann/json {% for copyright_line in copyright_lines %} {{ copyright_line }} {% endfor %} {% for expression in spdx_expressions %} SPDX-License-Identifier: {{ expression }} {% endfor %} json-3.12.0/BUILD.bazel000066400000000000000000000062051477615276400144520ustar00rootroot00000000000000load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_license//rules:license.bzl", "license") package( default_applicable_licenses = [":license"], ) exports_files([ "LICENSE.MIT", ]) license( name = "license", license_kinds = ["@rules_license//licenses/spdx:MIT"], license_text = "LICENSE.MIT", ) cc_library( name = "json", hdrs = [ "include/nlohmann/adl_serializer.hpp", "include/nlohmann/byte_container_with_subtype.hpp", "include/nlohmann/detail/abi_macros.hpp", "include/nlohmann/detail/conversions/from_json.hpp", "include/nlohmann/detail/conversions/to_chars.hpp", "include/nlohmann/detail/conversions/to_json.hpp", "include/nlohmann/detail/exceptions.hpp", "include/nlohmann/detail/hash.hpp", "include/nlohmann/detail/input/binary_reader.hpp", "include/nlohmann/detail/input/input_adapters.hpp", "include/nlohmann/detail/input/json_sax.hpp", "include/nlohmann/detail/input/lexer.hpp", "include/nlohmann/detail/input/parser.hpp", "include/nlohmann/detail/input/position_t.hpp", "include/nlohmann/detail/iterators/internal_iterator.hpp", "include/nlohmann/detail/iterators/iter_impl.hpp", "include/nlohmann/detail/iterators/iteration_proxy.hpp", "include/nlohmann/detail/iterators/iterator_traits.hpp", "include/nlohmann/detail/iterators/json_reverse_iterator.hpp", "include/nlohmann/detail/iterators/primitive_iterator.hpp", "include/nlohmann/detail/json_custom_base_class.hpp", "include/nlohmann/detail/json_pointer.hpp", "include/nlohmann/detail/json_ref.hpp", "include/nlohmann/detail/macro_scope.hpp", "include/nlohmann/detail/macro_unscope.hpp", "include/nlohmann/detail/meta/call_std/begin.hpp", "include/nlohmann/detail/meta/call_std/end.hpp", "include/nlohmann/detail/meta/cpp_future.hpp", "include/nlohmann/detail/meta/detected.hpp", "include/nlohmann/detail/meta/identity_tag.hpp", "include/nlohmann/detail/meta/is_sax.hpp", "include/nlohmann/detail/meta/std_fs.hpp", "include/nlohmann/detail/meta/type_traits.hpp", "include/nlohmann/detail/meta/void_t.hpp", "include/nlohmann/detail/output/binary_writer.hpp", "include/nlohmann/detail/output/output_adapters.hpp", "include/nlohmann/detail/output/serializer.hpp", "include/nlohmann/detail/string_concat.hpp", "include/nlohmann/detail/string_escape.hpp", "include/nlohmann/detail/string_utils.hpp", "include/nlohmann/detail/value_t.hpp", "include/nlohmann/json.hpp", "include/nlohmann/json_fwd.hpp", "include/nlohmann/ordered_map.hpp", "include/nlohmann/thirdparty/hedley/hedley.hpp", "include/nlohmann/thirdparty/hedley/hedley_undef.hpp", ], includes = ["include"], visibility = ["//visibility:public"], alwayslink = True, ) cc_library( name = "singleheader-json", hdrs = [ "single_include/nlohmann/json.hpp", ], includes = ["single_include"], visibility = ["//visibility:public"], ) json-3.12.0/CITATION.cff000066400000000000000000000006321477615276400144640ustar00rootroot00000000000000cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - family-names: Lohmann given-names: Niels orcid: https://orcid.org/0000-0001-9037-795X email: mail@nlohmann.me website: https://nlohmann.me title: "JSON for Modern C++" version: 3.12.0 date-released: 2025-04-07 license: MIT repository-code: "https://github.com/nlohmann" url: https://json.nlohmann.me json-3.12.0/CMakeLists.txt000066400000000000000000000173221477615276400153360ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5...4.0) ## ## PROJECT ## name and version ## project(nlohmann_json VERSION 3.12.0 LANGUAGES CXX) ## ## MAIN_PROJECT CHECK ## determine if nlohmann_json is built as a subproject (using add_subdirectory) or if it is the main project ## set(MAIN_PROJECT OFF) if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) set(MAIN_PROJECT ON) endif() ## ## INCLUDE ## ## set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) include(ExternalProject) ## ## OPTIONS ## if (POLICY CMP0077) # Allow CMake 3.13+ to override options when using FetchContent / add_subdirectory. cmake_policy(SET CMP0077 NEW) endif () # VERSION_GREATER_EQUAL is not available in CMake 3.1 if(${MAIN_PROJECT} AND (${CMAKE_VERSION} VERSION_EQUAL 3.13 OR ${CMAKE_VERSION} VERSION_GREATER 3.13)) set(JSON_BuildTests_INIT ON) else() set(JSON_BuildTests_INIT OFF) endif() option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ${JSON_BuildTests_INIT}) option(JSON_CI "Enable CI build targets." OFF) option(JSON_Diagnostics "Use extended diagnostic messages." OFF) option(JSON_Diagnostic_Positions "Enable diagnostic positions." OFF) option(JSON_GlobalUDLs "Place user-defined string literals in the global namespace." ON) option(JSON_ImplicitConversions "Enable implicit conversions." ON) option(JSON_DisableEnumSerialization "Disable default integer enum serialization." OFF) option(JSON_LegacyDiscardedValueComparison "Enable legacy discarded value comparison." OFF) option(JSON_Install "Install CMake targets during install step." ${MAIN_PROJECT}) option(JSON_MultipleHeaders "Use non-amalgamated version of the library." ON) option(JSON_SystemInclude "Include as system headers (skip for clang-tidy)." OFF) if (JSON_CI) include(ci) endif () ## ## CONFIGURATION ## include(GNUInstallDirs) if (NOT DEFINED NLOHMANN_JSON_TARGET_NAME) # Allow overriding the target name when using FetchContent / add_subdirectory. set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME}) endif() set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" CACHE INTERNAL "") set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake") set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake") set(NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Targets.cmake") set(NLOHMANN_JSON_PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig") if (JSON_MultipleHeaders) set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/include/") message(STATUS "Using the multi-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}") else() set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/single_include/") message(STATUS "Using the single-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}") endif() if (NOT JSON_ImplicitConversions) message(STATUS "Implicit conversions are disabled (JSON_USE_IMPLICIT_CONVERSIONS=0)") endif() if (JSON_DisableEnumSerialization) message(STATUS "Enum integer serialization is disabled (JSON_DISABLE_ENUM_SERIALIZATION=0)") endif() if (JSON_LegacyDiscardedValueComparison) message(STATUS "Legacy discarded value comparison enabled (JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1)") endif() if (JSON_Diagnostics) message(STATUS "Diagnostics enabled (JSON_DIAGNOSTICS=1)") endif() if (JSON_Diagnostic_Positions) message(STATUS "Diagnostic positions enabled (JSON_DIAGNOSTIC_POSITIONS=1)") endif() if (NOT JSON_GlobalUDLs) message(STATUS "User-defined string literals are not put in the global namespace (JSON_USE_GLOBAL_UDLS=0)") endif() if (JSON_SystemInclude) set(NLOHMANN_JSON_SYSTEM_INCLUDE "SYSTEM") endif() ## ## TARGET ## create target and add include path ## add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE) add_library(${PROJECT_NAME}::${NLOHMANN_JSON_TARGET_NAME} ALIAS ${NLOHMANN_JSON_TARGET_NAME}) if (${CMAKE_VERSION} VERSION_LESS "3.8.0") target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_range_for) else() target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_std_11) endif() target_compile_definitions( ${NLOHMANN_JSON_TARGET_NAME} INTERFACE $<$>:JSON_USE_GLOBAL_UDLS=0> $<$>:JSON_USE_IMPLICIT_CONVERSIONS=0> $<$:JSON_DISABLE_ENUM_SERIALIZATION=1> $<$:JSON_DIAGNOSTICS=1> $<$:JSON_DIAGNOSTIC_POSITIONS=1> $<$:JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1> ) target_include_directories( ${NLOHMANN_JSON_TARGET_NAME} ${NLOHMANN_JSON_SYSTEM_INCLUDE} INTERFACE $ $ ) ## add debug view definition file for msvc (natvis) if (MSVC) set(NLOHMANN_ADD_NATVIS TRUE) set(NLOHMANN_NATVIS_FILE "nlohmann_json.natvis") target_sources( ${NLOHMANN_JSON_TARGET_NAME} INTERFACE $ $ ) endif() # Install a pkg-config file, so other tools can find this. CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkg-config.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" @ONLY ) ## ## TESTS ## create and configure the unit test target ## if (JSON_BuildTests) include(CTest) enable_testing() add_subdirectory(tests) endif() ## ## INSTALL ## install header files, generate and install cmake config files for find_package() ## include(CMakePackageConfigHelpers) # use a custom package version config file instead of # write_basic_package_version_file to ensure that it's architecture-independent # https://github.com/nlohmann/json/issues/1697 configure_file( "cmake/nlohmann_jsonConfigVersion.cmake.in" ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} @ONLY ) configure_file( ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} @ONLY ) if(JSON_Install) install( DIRECTORY ${NLOHMANN_JSON_INCLUDE_BUILD_DIR} DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} ) install( FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} ) if (NLOHMANN_ADD_NATVIS) install( FILES ${NLOHMANN_NATVIS_FILE} DESTINATION . ) endif() export( TARGETS ${NLOHMANN_JSON_TARGET_NAME} NAMESPACE ${PROJECT_NAME}:: FILE ${NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE} ) install( TARGETS ${NLOHMANN_JSON_TARGET_NAME} EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} ) install( EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} NAMESPACE ${PROJECT_NAME}:: DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${NLOHMANN_JSON_PKGCONFIG_INSTALL_DIR} ) include(CPack) endif() json-3.12.0/ChangeLog.md000066400000000000000000012377001477615276400147540ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [unreleased](https://github.com/nlohmann/json/releases/tag/unreleased) (2024-12-22) [Full Changelog](https://github.com/nlohmann/json/compare/v3.11.3...unreleased) - Impossible de read json file create with nlohmann::ordered\_json::dump [\#4556](https://github.com/nlohmann/json/issues/4556) - Error C2039 : 'json\_sax\_dom\_callback\_parser': is not a member of 'nlohmann::json\_abi\_v3\_11\_3::detail' [\#4529](https://github.com/nlohmann/json/issues/4529) - `json_fwd.hpp` don't define default template arguments for ordered\_map [\#4518](https://github.com/nlohmann/json/issues/4518) - new repo version seems stop create any the ingress-nginx controller with opentelemetry-cpp.git [\#4515](https://github.com/nlohmann/json/issues/4515) - Error converting to/from scoped enumerations [\#4499](https://github.com/nlohmann/json/issues/4499) - Default initialized iterators are not comparable [\#4493](https://github.com/nlohmann/json/issues/4493) - Bug json.exception.type\_error.302 [\#4492](https://github.com/nlohmann/json/issues/4492) - tests fail to build with clang-19 and libc++ due to unsupported `std::char_traits` [\#4490](https://github.com/nlohmann/json/issues/4490) - Brace-Initialization Fails with json::parse and Key Access on Linux [\#4488](https://github.com/nlohmann/json/issues/4488) - Crash when parsing nullptr [\#4485](https://github.com/nlohmann/json/issues/4485) - Namespace macros are not respected in many instances [\#4484](https://github.com/nlohmann/json/issues/4484) - ohos model to json string garbage characters [\#4481](https://github.com/nlohmann/json/issues/4481) - Missing newlines in deserialized string [\#4479](https://github.com/nlohmann/json/issues/4479) - Latest tag not available on NuGet [\#4478](https://github.com/nlohmann/json/issues/4478) - Invalid union access for get\_ref/get\_ptr with unsigned integer [\#4475](https://github.com/nlohmann/json/issues/4475) - /accesswallet [\#4469](https://github.com/nlohmann/json/issues/4469) - struct reflect json with error C2440 [\#4467](https://github.com/nlohmann/json/issues/4467) - Compiler error when using macro NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE [\#4463](https://github.com/nlohmann/json/issues/4463) - Issue when dumping a vector of derived classes [\#4462](https://github.com/nlohmann/json/issues/4462) - whit std::wstring compile error [\#4460](https://github.com/nlohmann/json/issues/4460) - Inconsisten operator\[\] [\#4458](https://github.com/nlohmann/json/issues/4458) - json parse enclosing json object with \[\] [\#4457](https://github.com/nlohmann/json/issues/4457) - \[bug\] nlohmann::json constructor behaves improperly [\#4450](https://github.com/nlohmann/json/issues/4450) - parse OOM [\#4449](https://github.com/nlohmann/json/issues/4449) - Library Cannot Parse JSON File It Wrote [\#4448](https://github.com/nlohmann/json/issues/4448) - Unexpected Integer Conversion of JSON Values on ARM64 [\#4447](https://github.com/nlohmann/json/issues/4447) - Structure declared in natvis file template doesn't seem to match current structure of `basic_json<>` [\#4438](https://github.com/nlohmann/json/issues/4438) - A lot of EOT in json file [\#4436](https://github.com/nlohmann/json/issues/4436) - CVE-2024-34062 [\#4429](https://github.com/nlohmann/json/issues/4429) - CVE-2024-39689 [\#4428](https://github.com/nlohmann/json/issues/4428) - CVE-2024-5569 [\#4427](https://github.com/nlohmann/json/issues/4427) - CVE-2024-37891 [\#4426](https://github.com/nlohmann/json/issues/4426) - Tornado vulnerabilities [\#4425](https://github.com/nlohmann/json/issues/4425) - CVE-2024-35195 [\#4424](https://github.com/nlohmann/json/issues/4424) - CVE-2024-22195, CVE-2024-34064 [\#4423](https://github.com/nlohmann/json/issues/4423) - CVE-2024-3651 [\#4422](https://github.com/nlohmann/json/issues/4422) - CVE-2024-22190 [\#4421](https://github.com/nlohmann/json/issues/4421) - CVE-2024-39705 [\#4420](https://github.com/nlohmann/json/issues/4420) - Failing to read complex Unicode string embedded in JSON [\#4417](https://github.com/nlohmann/json/issues/4417) - Unable to parse JSON string from snake case to camel case [\#4399](https://github.com/nlohmann/json/issues/4399) - Crashes when I try to use ‘json::at\(\)’ on a properly structured, non null, and correctly constructed ‘.json’ file [\#4387](https://github.com/nlohmann/json/issues/4387) - JSON\_BuildTests fail when JSON\_DisableEnumSerialization is set to ON [\#4384](https://github.com/nlohmann/json/issues/4384) - JSON can't parse a simple data [\#4383](https://github.com/nlohmann/json/issues/4383) - json.exception.type\_error.302 [\#4373](https://github.com/nlohmann/json/issues/4373) - iteration\_proxy has limited usefulness in C++20 range views [\#4371](https://github.com/nlohmann/json/issues/4371) - Clone is long due to large history [\#4370](https://github.com/nlohmann/json/issues/4370) - Can't use nlohmann on Linux [\#4363](https://github.com/nlohmann/json/issues/4363) - CodeQL suppressions lack justification [\#4361](https://github.com/nlohmann/json/issues/4361) - \[json.exception.parse\_error.101\] parse error at line 1, column 4520: syntax error while parsing value - invalid string: forbidden character after backslash; last read: '".\? [\#4352](https://github.com/nlohmann/json/issues/4352) - Cannot unflatten json object [\#4349](https://github.com/nlohmann/json/issues/4349) - Json parsed from raw string does not interpret lists of objects like json parsed from file [\#4341](https://github.com/nlohmann/json/issues/4341) - natvis not updated to 3.11.3 [\#4340](https://github.com/nlohmann/json/issues/4340) - Wrong function name in documentation example [\#4334](https://github.com/nlohmann/json/issues/4334) - git ref got interpreted as number [\#4332](https://github.com/nlohmann/json/issues/4332) - Is float valid number been limited? [\#4322](https://github.com/nlohmann/json/issues/4322) - Crash when construct a new json object [\#4321](https://github.com/nlohmann/json/issues/4321) - gdb-pretty-print broken since m\_data added [\#4309](https://github.com/nlohmann/json/issues/4309) - Docs have incorrect info for `update()` [\#4307](https://github.com/nlohmann/json/issues/4307) - CBOR data cannot be decoded [\#4301](https://github.com/nlohmann/json/issues/4301) - Inconsistent behaviour of json construction using `std::initializer_list` [\#4299](https://github.com/nlohmann/json/issues/4299) - Assertion failed when accessing non-existing object with const json object [\#4297](https://github.com/nlohmann/json/issues/4297) - Validatable release artifacts are not sufficient for packaging \(trying to run tests\) [\#4296](https://github.com/nlohmann/json/issues/4296) - ordered json pointer corruption [\#4289](https://github.com/nlohmann/json/issues/4289) - Incorrect floating point parsing [\#4285](https://github.com/nlohmann/json/issues/4285) - Segfault on parse when using "\#pragma pack \(push, 1\)" [\#4284](https://github.com/nlohmann/json/issues/4284) - Simple example with nlohmann::ordered\_json doesn't compile [\#4282](https://github.com/nlohmann/json/issues/4282) - Program crashes with ordered\_json, but works fine with json [\#4279](https://github.com/nlohmann/json/issues/4279) - JSON parses as array when assigned in initializer list. [\#4278](https://github.com/nlohmann/json/issues/4278) - Can't run `make amalgamate` [\#4275](https://github.com/nlohmann/json/issues/4275) - Parsing the unicode string got the wrong result [\#4272](https://github.com/nlohmann/json/issues/4272) - Issue with including \ [\#4241](https://github.com/nlohmann/json/issues/4241) - Exception when trying to insert my json object inside json file [\#4239](https://github.com/nlohmann/json/issues/4239) - `to_json` is erroneously converting enums with underlying unsigned types to signed numbers [\#4236](https://github.com/nlohmann/json/issues/4236) - Build failure on macOS Sonoma 14.1.1 [\#4228](https://github.com/nlohmann/json/issues/4228) - Deprecation warning on save action in check-amalgamation CI step [\#4227](https://github.com/nlohmann/json/issues/4227) - 3.11.3: test suite fails in 4 units [\#4224](https://github.com/nlohmann/json/issues/4224) - Exception thrown when dumping utf-8 characters when using std::string [\#4213](https://github.com/nlohmann/json/issues/4213) - patch\_inplace assumes StringType is std::string [\#4134](https://github.com/nlohmann/json/issues/4134) - Getting a weak-vtables warning with clang on ubuntu 22.04 [\#4087](https://github.com/nlohmann/json/issues/4087) - SAX interface unexpectedly gets locale-altered float representation. [\#4084](https://github.com/nlohmann/json/issues/4084) - Feat: hash pin github workflow dependencies [\#4058](https://github.com/nlohmann/json/issues/4058) - compiler error using clang-16.0.5 when using gcc-13.1 standard library [\#4051](https://github.com/nlohmann/json/issues/4051) - Missing requirement on `plantuml` binary package [\#4026](https://github.com/nlohmann/json/issues/4026) - Compile failure for macos 10.10 SDK + darwin14 [\#3991](https://github.com/nlohmann/json/issues/3991) - Test suite does not compile with C++20 and Clang 17 [\#3979](https://github.com/nlohmann/json/issues/3979) - `modernize-avoid-c-arrays` clang-tidy warning when using `NLOHMANN_JSON_SERIALIZE_ENUM` macro [\#3924](https://github.com/nlohmann/json/issues/3924) - JSON\_DIAGNOSTICS trigger assertion [\#3915](https://github.com/nlohmann/json/issues/3915) - Compiler warning 'array-bounds' on g++12.2.0 on Ubuntu 22.10 kinetic with RelWithDebugInfo [\#3808](https://github.com/nlohmann/json/issues/3808) - The MSVC team recently test JSON project failed to run test on release configuration on windows\_x64. [\#3542](https://github.com/nlohmann/json/issues/3542) - Bad JSON diff when removing object in array of object [\#3146](https://github.com/nlohmann/json/issues/3146) - Limit AppVeyor use [\#3089](https://github.com/nlohmann/json/issues/3089) - pkgconfig integration wrongly rendered if tests are run [\#2907](https://github.com/nlohmann/json/issues/2907) - Compile error for json in template and variadic macros. [\#2794](https://github.com/nlohmann/json/issues/2794) - How to Serialize derived class to JSON object? [\#2199](https://github.com/nlohmann/json/issues/2199) - \[C++17\] Allow std::optional to convert to nlohmann::json [\#1749](https://github.com/nlohmann/json/issues/1749) - Fix typo in nlohmann\_define\_derived\_type.md [\#4565](https://github.com/nlohmann/json/pull/4565) ([gregmarr](https://github.com/gregmarr)) - Add ONLY\_SERIALIZE for NLOHMANN\_DEFINE\_DERIVED\_TYPE\_\* macros [\#4562](https://github.com/nlohmann/json/pull/4562) ([EinarsNG](https://github.com/EinarsNG)) - Suppress modernize-use-integer-sign-comparison [\#4558](https://github.com/nlohmann/json/pull/4558) ([nlohmann](https://github.com/nlohmann)) - Bump actions/upload-artifact from 4.4.3 to 4.5.0 [\#4557](https://github.com/nlohmann/json/pull/4557) ([dependabot[bot]](https://github.com/apps/dependabot)) - Clean up CI [\#4553](https://github.com/nlohmann/json/pull/4553) ([nlohmann](https://github.com/nlohmann)) - \[StepSecurity\] ci: Harden GitHub Actions [\#4551](https://github.com/nlohmann/json/pull/4551) ([step-security-bot](https://github.com/step-security-bot)) - Fix token permissions warnings [\#4550](https://github.com/nlohmann/json/pull/4550) ([nlohmann](https://github.com/nlohmann)) - Add step to build the documentation [\#4549](https://github.com/nlohmann/json/pull/4549) ([nlohmann](https://github.com/nlohmann)) - Bump mkdocs-material from 9.5.48 to 9.5.49 in /docs/mkdocs [\#4548](https://github.com/nlohmann/json/pull/4548) ([dependabot[bot]](https://github.com/apps/dependabot)) - Move reuse dependency to requirements.txt file [\#4547](https://github.com/nlohmann/json/pull/4547) ([nlohmann](https://github.com/nlohmann)) - Clean up [\#4546](https://github.com/nlohmann/json/pull/4546) ([nlohmann](https://github.com/nlohmann)) - ⬆️ Bump ossf/scorecard-action from 2.3.3 to 2.4.0 [\#4545](https://github.com/nlohmann/json/pull/4545) ([dependabot[bot]](https://github.com/apps/dependabot)) - ⬆️ Bump lukka/get-cmake from 3.31.0 to 3.31.2 [\#4544](https://github.com/nlohmann/json/pull/4544) ([dependabot[bot]](https://github.com/apps/dependabot)) - ⬆️ Bump github/codeql-action from 2.27.9 to 3.27.9 [\#4543](https://github.com/nlohmann/json/pull/4543) ([dependabot[bot]](https://github.com/apps/dependabot)) - ⬆️ Bump watchdog from 2.1.7 to 6.0.0 in /tools/serve\_header [\#4542](https://github.com/nlohmann/json/pull/4542) ([dependabot[bot]](https://github.com/apps/dependabot)) - ⬆️ Bump pyyaml from 6.0 to 6.0.2 in /tools/serve\_header [\#4541](https://github.com/nlohmann/json/pull/4541) ([dependabot[bot]](https://github.com/apps/dependabot)) - ⬆️ Bump actions/github-script from 6.4.0 to 7.0.1 [\#4540](https://github.com/nlohmann/json/pull/4540) ([dependabot[bot]](https://github.com/apps/dependabot)) - \[StepSecurity\] Apply security best practices [\#4539](https://github.com/nlohmann/json/pull/4539) ([step-security-bot](https://github.com/step-security-bot)) - Set parents after insert call [\#4537](https://github.com/nlohmann/json/pull/4537) ([nlohmann](https://github.com/nlohmann)) - Allow patch and diff to be used with arbitrary string types [\#4536](https://github.com/nlohmann/json/pull/4536) ([nlohmann](https://github.com/nlohmann)) - Add more package managers [\#4533](https://github.com/nlohmann/json/pull/4533) ([nlohmann](https://github.com/nlohmann)) - Replace EOF with char\_traits [\#4532](https://github.com/nlohmann/json/pull/4532) ([nlohmann](https://github.com/nlohmann)) - Fix return value of get\_ptr for unsigned integers [\#4525](https://github.com/nlohmann/json/pull/4525) ([nlohmann](https://github.com/nlohmann)) - Add more GCC warning flags [\#4524](https://github.com/nlohmann/json/pull/4524) ([nlohmann](https://github.com/nlohmann)) - Update licenses [\#4521](https://github.com/nlohmann/json/pull/4521) ([nlohmann](https://github.com/nlohmann)) - json start/end position implementation [\#4517](https://github.com/nlohmann/json/pull/4517) ([sushshring](https://github.com/sushshring)) - Overwork documentation [\#4516](https://github.com/nlohmann/json/pull/4516) ([nlohmann](https://github.com/nlohmann)) - Allow comparing default initialized iterators [\#4512](https://github.com/nlohmann/json/pull/4512) ([nlohmann](https://github.com/nlohmann)) - fix: integer parsed as float when EINTR set in errno [\#4506](https://github.com/nlohmann/json/pull/4506) ([StuartGorman](https://github.com/StuartGorman)) - Make SAX output locale-independent [\#4505](https://github.com/nlohmann/json/pull/4505) ([nlohmann](https://github.com/nlohmann)) - Skip enum tests when JSON\_DisableEnumSerialization=ON [\#4504](https://github.com/nlohmann/json/pull/4504) ([nlohmann](https://github.com/nlohmann)) - Fix weak-vtables warning [\#4500](https://github.com/nlohmann/json/pull/4500) ([nlohmann](https://github.com/nlohmann)) - Suppress warnings in NLOHMANN\_JSON\_SERIALIZE\_ENUM [\#4497](https://github.com/nlohmann/json/pull/4497) ([nlohmann](https://github.com/nlohmann)) - Add comment for \#4494 [\#4496](https://github.com/nlohmann/json/pull/4496) ([nlohmann](https://github.com/nlohmann)) - Add test for libstdc++ [\#4495](https://github.com/nlohmann/json/pull/4495) ([nlohmann](https://github.com/nlohmann)) - Another desperate try to fix the CI [\#4489](https://github.com/nlohmann/json/pull/4489) ([nlohmann](https://github.com/nlohmann)) - Possible fix for \#4485 [\#4487](https://github.com/nlohmann/json/pull/4487) ([jordan-hoang](https://github.com/jordan-hoang)) - Update CONTRIBUTING.md [\#4486](https://github.com/nlohmann/json/pull/4486) ([zerocukor287](https://github.com/zerocukor287)) - Allow overriding the CMake target name [\#4483](https://github.com/nlohmann/json/pull/4483) ([iboB](https://github.com/iboB)) - Update is\_structured.md [\#4472](https://github.com/nlohmann/json/pull/4472) ([thetimr](https://github.com/thetimr)) - Add CPack support [\#4459](https://github.com/nlohmann/json/pull/4459) ([zjyhjqs](https://github.com/zjyhjqs)) - CMake: generate a pkg-config file that follow pkg-config conventions [\#4456](https://github.com/nlohmann/json/pull/4456) ([dcbaker](https://github.com/dcbaker)) - Update natvis to reflect 3.11.3 and the current structure of basic\_json [\#4451](https://github.com/nlohmann/json/pull/4451) ([gmyers18](https://github.com/gmyers18)) - Docs: fix typos of 'whether' in `operator_{gt,le,lt}.md` [\#4412](https://github.com/nlohmann/json/pull/4412) ([tsnl](https://github.com/tsnl)) - Remove alwayslink=True Bazel flag [\#4396](https://github.com/nlohmann/json/pull/4396) ([mering](https://github.com/mering)) - Optimize binary `get_number` implementation by reading multiple bytes at once [\#4391](https://github.com/nlohmann/json/pull/4391) ([TianyiChen](https://github.com/TianyiChen)) - Make iterator\_proxy\_value a forward\_iterator \(\#4371\) [\#4372](https://github.com/nlohmann/json/pull/4372) ([captaincrutches](https://github.com/captaincrutches)) - Add lgtm explanation [\#4362](https://github.com/nlohmann/json/pull/4362) ([nlohmann](https://github.com/nlohmann)) - chore: fix some typos in comments [\#4345](https://github.com/nlohmann/json/pull/4345) ([laterlaugh](https://github.com/laterlaugh)) - Fix gdb pretty printer [\#4343](https://github.com/nlohmann/json/pull/4343) ([MrJia1997](https://github.com/MrJia1997)) - Fix for incorrect function name in documentation example [\#4342](https://github.com/nlohmann/json/pull/4342) ([alexprabhat99](https://github.com/alexprabhat99)) - Fixed an error in the `Custom data source` example. [\#4335](https://github.com/nlohmann/json/pull/4335) ([philip-paul-mueller](https://github.com/philip-paul-mueller)) - Updated exception handling to catch const reference in out\_of\_range [\#4331](https://github.com/nlohmann/json/pull/4331) ([LeilaShcheglova](https://github.com/LeilaShcheglova)) - \#4307 Updated docx to 3.10.5 from 3.10.4 [\#4310](https://github.com/nlohmann/json/pull/4310) ([AniketDhemare](https://github.com/AniketDhemare)) - Align astyle flags in Makefile with CI [\#4277](https://github.com/nlohmann/json/pull/4277) ([serge-s](https://github.com/serge-s)) - Suppress Clang-Tidy warnings [\#4276](https://github.com/nlohmann/json/pull/4276) ([nlohmann](https://github.com/nlohmann)) - Remove broken link from CONTRIBUTING.md [\#4274](https://github.com/nlohmann/json/pull/4274) ([serge-s](https://github.com/serge-s)) - Fix version in json\_has\_static\_rtti.md [\#4269](https://github.com/nlohmann/json/pull/4269) ([ALF-ONE](https://github.com/ALF-ONE)) - Add support of multi-dim C-style array member of struct. [\#4262](https://github.com/nlohmann/json/pull/4262) ([peng-wang-cn](https://github.com/peng-wang-cn)) - Docs: Fix wrong code usage in the Value access section of `json_pointer.md` [\#4255](https://github.com/nlohmann/json/pull/4255) ([Fallen-Breath](https://github.com/Fallen-Breath)) - Fix `to_json` for enums when the enum has an unsigned underlying type. [\#4237](https://github.com/nlohmann/json/pull/4237) ([TheJCAB](https://github.com/TheJCAB)) - feat: Rebase `feature/optional` to `develop` [\#4036](https://github.com/nlohmann/json/pull/4036) ([fsandhei](https://github.com/fsandhei)) - Add NLOHMANN\_DEFINE\_DERIVED\_TYPE\_\* macros [\#4033](https://github.com/nlohmann/json/pull/4033) ([rotolof](https://github.com/rotolof)) ## [v3.11.3](https://github.com/nlohmann/json/releases/tag/v3.11.3) (2023-11-28) [Full Changelog](https://github.com/nlohmann/json/compare/v3.11.2...v3.11.3) - Parser and constructor resolve integer types differently [\#4207](https://github.com/nlohmann/json/issues/4207) - README.md overuses `template` keyword before `get` function [\#4205](https://github.com/nlohmann/json/issues/4205) - Exception SIGSEGV - Segmentation violation signal on file parsing \(v3.11.2, linux, doctest\) [\#4193](https://github.com/nlohmann/json/issues/4193) - In highly nested functions, passing json into a function leads to a segmentation fault/bus error [\#4186](https://github.com/nlohmann/json/issues/4186) - why a single-object json file appears in an array [\#4183](https://github.com/nlohmann/json/issues/4183) - Initializing `json` by direct initialization and copy initialization invokes different constructors [\#4174](https://github.com/nlohmann/json/issues/4174) - Deprecation warning about std::char\_traits\ [\#4163](https://github.com/nlohmann/json/issues/4163) - LLVM 16.0.6 issues warning for literal operators when Wdeprecated-literal-operator [\#4129](https://github.com/nlohmann/json/issues/4129) - GCC compiler warning about violating the C++ One Definition Rule \[-Wodr\] [\#4116](https://github.com/nlohmann/json/issues/4116) - error: building nlohmann-json:arm64-osx failed with: BUILD\_FAILED [\#4091](https://github.com/nlohmann/json/issues/4091) - dump\(\): Non-conforming with JSON-spec escape of strings? [\#4088](https://github.com/nlohmann/json/issues/4088) - Compiling in visual studio 2022 gives a warning [\#4081](https://github.com/nlohmann/json/issues/4081) - Upgrade CMake minimum version [\#4076](https://github.com/nlohmann/json/issues/4076) - \ character in the content of a string cause error in parser.? [\#4067](https://github.com/nlohmann/json/issues/4067) - JSON Parsing Freeze Issue on Nintendo Switch [\#4066](https://github.com/nlohmann/json/issues/4066) - Clang++ compilation fails on extremely small example [\#4061](https://github.com/nlohmann/json/issues/4061) - how about open a new repository for header only version? [\#4060](https://github.com/nlohmann/json/issues/4060) - json::count returns only 0 or 1 [\#4052](https://github.com/nlohmann/json/issues/4052) - std::function error [\#4050](https://github.com/nlohmann/json/issues/4050) - Json package not compiling properly [\#4042](https://github.com/nlohmann/json/issues/4042) - Explicit conversion example in docs should use `template get` [\#4038](https://github.com/nlohmann/json/issues/4038) - Improve wording of parse\_error exception [\#4037](https://github.com/nlohmann/json/issues/4037) - Parse error on valid JSON file [\#4028](https://github.com/nlohmann/json/issues/4028) - Empty JSON object returns size of 1 [\#4027](https://github.com/nlohmann/json/issues/4027) - Help needed to fix CI [\#4025](https://github.com/nlohmann/json/issues/4025) - Security vulnerabilities detected: CVE-2022-24439, WS-2022-0438, WS-2022-0437 [\#4020](https://github.com/nlohmann/json/issues/4020) - multithreading use from\_msgpack leading very slow [\#4016](https://github.com/nlohmann/json/issues/4016) - Error with sol for Lua: items\(\) is not a recognized container [\#4012](https://github.com/nlohmann/json/issues/4012) - Parser does not read non ascii characters : ŞÜİĞ [\#4007](https://github.com/nlohmann/json/issues/4007) - malloc\(\): unaligned fastbin chunk detected [\#3999](https://github.com/nlohmann/json/issues/3999) - try/catch block doesn't work while accessing const json& array. [\#3998](https://github.com/nlohmann/json/issues/3998) - a bug about list [\#3995](https://github.com/nlohmann/json/issues/3995) - heap corruption when i use nlohmann::json::accept function to check a valid json [\#3994](https://github.com/nlohmann/json/issues/3994) - Exception on gcc but not apple clang [\#3986](https://github.com/nlohmann/json/issues/3986) - Can't support convert the type? std::string json\_str = R"\({"value": "3.1415"}\)"; float value = j\["value"\].get\\(\); [\#3984](https://github.com/nlohmann/json/issues/3984) - `#pragma once` not supported with C++20 modules in clang [\#3974](https://github.com/nlohmann/json/issues/3974) - const array\_t::operator\[\] results in buffer overflow / segv on nullptr on out of bounds access [\#3973](https://github.com/nlohmann/json/issues/3973) - Set minimal permissions to Github Workflows [\#3971](https://github.com/nlohmann/json/issues/3971) - Parsing array error [\#3968](https://github.com/nlohmann/json/issues/3968) - why I can return tuple as json? [\#3961](https://github.com/nlohmann/json/issues/3961) - type must be number, but is null [\#3956](https://github.com/nlohmann/json/issues/3956) - Class Composition of json members produces incorrect json when constructing with initialization list [\#3955](https://github.com/nlohmann/json/issues/3955) - exit without error message [\#3948](https://github.com/nlohmann/json/issues/3948) - NLOHMANN\_DEFINE\_TYPE\_INTRUSIVE doesn't work with "json\_fwd.hpp" [\#3946](https://github.com/nlohmann/json/issues/3946) - Dangerous use of pull\_request\_target [\#3945](https://github.com/nlohmann/json/issues/3945) - Test \#7: test-bjdata\_cpp11 ............................\*\*\*Failed [\#3941](https://github.com/nlohmann/json/issues/3941) - Memory leak detection with basic usage of NLOHMANN\_JSON\_SERIALIZE\_ENUM [\#3939](https://github.com/nlohmann/json/issues/3939) - Parse doesnt work [\#3936](https://github.com/nlohmann/json/issues/3936) - Clean up badges [\#3935](https://github.com/nlohmann/json/issues/3935) - \[json.exception.type\_error.305\] cannot use operator\[\] with a string argument with array [\#3931](https://github.com/nlohmann/json/issues/3931) - GCC 13 build failures [\#3927](https://github.com/nlohmann/json/issues/3927) - Exception throw even though code is inside try/catch [\#3926](https://github.com/nlohmann/json/issues/3926) - Please fix failing tests [\#3923](https://github.com/nlohmann/json/issues/3923) - Security vulnerability in dependency: future 0.18.2 [\#3922](https://github.com/nlohmann/json/issues/3922) - json pretty printer causes python exceptions on non-json types [\#3919](https://github.com/nlohmann/json/issues/3919) - how does a normal basic\_json\<\> object cuase assertion `false` [\#3918](https://github.com/nlohmann/json/issues/3918) - The library can not parse JSON generate by Chome DevTools Protocol [\#3903](https://github.com/nlohmann/json/issues/3903) - Typo in `cmake/test.cmake` [\#3902](https://github.com/nlohmann/json/issues/3902) - Parser adds wrapping array when compiled with GCC [\#3897](https://github.com/nlohmann/json/issues/3897) - when i use for\(auto iter& : jsonObject\) it occure some error [\#3893](https://github.com/nlohmann/json/issues/3893) - Check Drone CI [\#3890](https://github.com/nlohmann/json/issues/3890) - Json::accept\(std::ifstream\) [\#3884](https://github.com/nlohmann/json/issues/3884) - \[json.exception.parse\_error.101\] parse error at line 1, column 1: syntax error while parsing value - unexpected end of input; expected '\[', '{', or a literal [\#3882](https://github.com/nlohmann/json/issues/3882) - Memory leak when exception is thrown in adl\_serializer::to\_json [\#3881](https://github.com/nlohmann/json/issues/3881) - building with cmake [\#3880](https://github.com/nlohmann/json/issues/3880) - \[json.exception.type\_error.316\] invalid UTF-8 byte at index 0: 0xB6 [\#3879](https://github.com/nlohmann/json/issues/3879) - Visual Studio 2015 C2664 error std::pair\< [\#3867](https://github.com/nlohmann/json/issues/3867) - I want the data field to be empty serialized and deserialized to each other [\#3866](https://github.com/nlohmann/json/issues/3866) - Generated natvis is invalid XML [\#3858](https://github.com/nlohmann/json/issues/3858) - Json Arrays have inconsistent nesting levels across different OSs [\#3854](https://github.com/nlohmann/json/issues/3854) - Occur error when parse character '\' [\#3844](https://github.com/nlohmann/json/issues/3844) - Proccess crash as soon as I parse json [\#3843](https://github.com/nlohmann/json/issues/3843) - json::parse and constructor with the same json generates different type [\#3842](https://github.com/nlohmann/json/issues/3842) - json::accept return false on valid JSON [\#3838](https://github.com/nlohmann/json/issues/3838) - decode\(state, codep, byte\) generates warnings. [\#3837](https://github.com/nlohmann/json/issues/3837) - Arithmetic operators are not working as expected [\#3832](https://github.com/nlohmann/json/issues/3832) - array\_index does not catch std::invalid\_argument exception from std::stoull [\#3831](https://github.com/nlohmann/json/issues/3831) - 3.11.2: test suite is failing in two units [\#3828](https://github.com/nlohmann/json/issues/3828) - Compile Error on g++ using get\(\) function [\#3827](https://github.com/nlohmann/json/issues/3827) - nlohmann::json::parse can't handle the "€" symbol. [\#3825](https://github.com/nlohmann/json/issues/3825) - When reading a non-existent key, I unexpectedly get a value. Is it the wrong way I use it? [\#3811](https://github.com/nlohmann/json/issues/3811) - Code analysis warning string\_concat.hpp C26800: Use of a moved from object [\#3805](https://github.com/nlohmann/json/issues/3805) - The code used to build with 3.10.2 but fails now [\#3804](https://github.com/nlohmann/json/issues/3804) - Inconsistent Behaviour of NaN & Null Values [\#3799](https://github.com/nlohmann/json/issues/3799) - json\_fwd.hpp doesn't work [\#3796](https://github.com/nlohmann/json/issues/3796) - Compilation fails in MSVC 22 [\#3787](https://github.com/nlohmann/json/issues/3787) - parsing json with missing key throws exception [\#3784](https://github.com/nlohmann/json/issues/3784) - Allow to disable inline namespaces completley [\#3746](https://github.com/nlohmann/json/issues/3746) - double free or Assertion failed! [\#3729](https://github.com/nlohmann/json/issues/3729) - Amalgated json\_fwd.hpp not included in include.zip [\#3727](https://github.com/nlohmann/json/issues/3727) - INT64\_MIN/MAX not defined for newer g++ [\#3722](https://github.com/nlohmann/json/issues/3722) - Compilation error with JSON\_DIAGNOSTICS enabled [\#3717](https://github.com/nlohmann/json/issues/3717) - class-level enum not serialized as string via NLOHMANN\_JSON\_SERIALIZE\_ENUM [\#3715](https://github.com/nlohmann/json/issues/3715) - Local copy given by operator\[\] or at\(\) [\#3704](https://github.com/nlohmann/json/issues/3704) - nlohmann::to\_json method not acting as expected with nlohmann::adl\_serializer specialization. [\#3340](https://github.com/nlohmann/json/issues/3340) - braced-init-list: array vs other constructor [\#2583](https://github.com/nlohmann/json/issues/2583) - JSON for Modern C++ 3.11.3 [\#4222](https://github.com/nlohmann/json/pull/4222) ([nlohmann](https://github.com/nlohmann)) - Update documentation for the next release [\#4216](https://github.com/nlohmann/json/pull/4216) ([nlohmann](https://github.com/nlohmann)) - Fix failing CI checks [\#4215](https://github.com/nlohmann/json/pull/4215) ([colbychaskell](https://github.com/colbychaskell)) - Fix CI \(again\) [\#4196](https://github.com/nlohmann/json/pull/4196) ([nlohmann](https://github.com/nlohmann)) - fix cmake header path in install with custom CMAKE\_INSTALL\_INCLUDEDIR [\#4194](https://github.com/nlohmann/json/pull/4194) ([bebuch](https://github.com/bebuch)) - Add more specific error message when attempting to parse empty input [\#4180](https://github.com/nlohmann/json/pull/4180) ([colbychaskell](https://github.com/colbychaskell)) - Fix char\_traits deprecation warning [\#4179](https://github.com/nlohmann/json/pull/4179) ([colbychaskell](https://github.com/colbychaskell)) - Fix MinGW CI [\#4175](https://github.com/nlohmann/json/pull/4175) ([scribam](https://github.com/scribam)) - Fix spellcheck issue [\#4173](https://github.com/nlohmann/json/pull/4173) ([mwestphal](https://github.com/mwestphal)) - Fix source highlighting in user defined type macros docs [\#4169](https://github.com/nlohmann/json/pull/4169) ([ZeronSix](https://github.com/ZeronSix)) - Fix deprecation warning [\#4161](https://github.com/nlohmann/json/pull/4161) ([nlohmann](https://github.com/nlohmann)) - Fix CI [\#4160](https://github.com/nlohmann/json/pull/4160) ([nlohmann](https://github.com/nlohmann)) - Update index.md [\#4159](https://github.com/nlohmann/json/pull/4159) ([miny1233](https://github.com/miny1233)) - Update index.md [\#4149](https://github.com/nlohmann/json/pull/4149) ([HO-COOH](https://github.com/HO-COOH)) - Correct a typo in serve\_header/README.md [\#4143](https://github.com/nlohmann/json/pull/4143) ([felixonmars](https://github.com/felixonmars)) - Fixed init-list construction when size\_type is not int [\#4140](https://github.com/nlohmann/json/pull/4140) ([tomalakgeretkal](https://github.com/tomalakgeretkal)) - Update CODEOWNERS [\#4126](https://github.com/nlohmann/json/pull/4126) ([tarolling](https://github.com/tarolling)) - Accept NEW CMake policies up to CMake 3.14 [\#4112](https://github.com/nlohmann/json/pull/4112) ([craigscott-crascit](https://github.com/craigscott-crascit)) - Fix typo in afl\_driver.cpp [\#4109](https://github.com/nlohmann/json/pull/4109) ([eltociear](https://github.com/eltociear)) - Capture exceptions by const& in docs. [\#4099](https://github.com/nlohmann/json/pull/4099) ([iwanders](https://github.com/iwanders)) - Fix CI, again [\#4083](https://github.com/nlohmann/json/pull/4083) ([nlohmann](https://github.com/nlohmann)) - Fix Clang-Tidy warnings [\#4047](https://github.com/nlohmann/json/pull/4047) ([nlohmann](https://github.com/nlohmann)) - Fix compile error with \_HAS\_STATIC\_RTTI=0 [\#4046](https://github.com/nlohmann/json/pull/4046) ([ALF-ONE](https://github.com/ALF-ONE)) - Add to CONTRIBUTING.md that `make pretty` is required for test updates. [\#4045](https://github.com/nlohmann/json/pull/4045) ([gregmarr](https://github.com/gregmarr)) - Added to tests the file unit-algorithm.cpp \(c++ 11\) functions from algorithm library [\#4044](https://github.com/nlohmann/json/pull/4044) ([Tomerkm](https://github.com/Tomerkm)) - Use template get instead of get in examples [\#4039](https://github.com/nlohmann/json/pull/4039) ([tusooa](https://github.com/tusooa)) - Support Apple's Swift Package Manager [\#4010](https://github.com/nlohmann/json/pull/4010) ([aleksproger](https://github.com/aleksproger)) - Add Vcpkg port version badge [\#3988](https://github.com/nlohmann/json/pull/3988) ([njakob](https://github.com/njakob)) - Fix CI + new Doctest [\#3985](https://github.com/nlohmann/json/pull/3985) ([nlohmann](https://github.com/nlohmann)) - Set minimal permissions to Github Workflows [\#3972](https://github.com/nlohmann/json/pull/3972) ([joycebrum](https://github.com/joycebrum)) - Refactor amalgamation workflow to avoid dangerous use of pull\_request\_target [\#3969](https://github.com/nlohmann/json/pull/3969) ([joycebrum](https://github.com/joycebrum)) - Fix typo in test.cmake [\#3951](https://github.com/nlohmann/json/pull/3951) ([theevilone45](https://github.com/theevilone45)) - tests/unit-iterators2: use std::ranges::equals for range comparisons [\#3950](https://github.com/nlohmann/json/pull/3950) ([ArsenArsen](https://github.com/ArsenArsen)) - 3935, removed lgtm badge and added Cirrus CI badge [\#3937](https://github.com/nlohmann/json/pull/3937) ([haadfida](https://github.com/haadfida)) - ⬆️ Bump future from 0.18.2 to 0.18.3 in /docs/mkdocs [\#3934](https://github.com/nlohmann/json/pull/3934) ([dependabot[bot]](https://github.com/apps/dependabot)) - Change 2022 to 2023 [\#3932](https://github.com/nlohmann/json/pull/3932) ([floriansegginger](https://github.com/floriansegginger)) - PrettyPrinter: Check if match is valid before accessing group [\#3920](https://github.com/nlohmann/json/pull/3920) ([Finkman](https://github.com/Finkman)) - Fix CI issues [\#3906](https://github.com/nlohmann/json/pull/3906) ([barcode](https://github.com/barcode)) - Prevent memory leak when exception is thrown in adl\_serializer::to\_json [\#3901](https://github.com/nlohmann/json/pull/3901) ([barcode](https://github.com/barcode)) - custom allocators: define missing 'rebind' type [\#3895](https://github.com/nlohmann/json/pull/3895) ([trofi](https://github.com/trofi)) - Try old MinGW script [\#3892](https://github.com/nlohmann/json/pull/3892) ([nlohmann](https://github.com/nlohmann)) - Upgrade Python packages [\#3891](https://github.com/nlohmann/json/pull/3891) ([nlohmann](https://github.com/nlohmann)) - Fix warning about moved from object [\#3889](https://github.com/nlohmann/json/pull/3889) ([nlohmann](https://github.com/nlohmann)) - Remove a magic number [\#3888](https://github.com/nlohmann/json/pull/3888) ([nlohmann](https://github.com/nlohmann)) - Add migration guide [\#3887](https://github.com/nlohmann/json/pull/3887) ([nlohmann](https://github.com/nlohmann)) - Clang 15 [\#3876](https://github.com/nlohmann/json/pull/3876) ([nlohmann](https://github.com/nlohmann)) - Bump certifi from 2022.6.15 to 2022.12.7 in /docs/mkdocs [\#3872](https://github.com/nlohmann/json/pull/3872) ([dependabot[bot]](https://github.com/apps/dependabot)) - Fix natvis XML [\#3863](https://github.com/nlohmann/json/pull/3863) ([nlohmann](https://github.com/nlohmann)) - Fix pipeline [\#3862](https://github.com/nlohmann/json/pull/3862) ([nlohmann](https://github.com/nlohmann)) - Add CIFuzz CI GitHub action [\#3845](https://github.com/nlohmann/json/pull/3845) ([DavidKorczynski](https://github.com/DavidKorczynski)) - Add serialization-only user defined type macros [\#3816](https://github.com/nlohmann/json/pull/3816) ([ZeronSix](https://github.com/ZeronSix)) - Bump joblib from 1.1.0 to 1.2.0 in /docs/mkdocs [\#3781](https://github.com/nlohmann/json/pull/3781) ([dependabot[bot]](https://github.com/apps/dependabot)) - Fix some typos for n-dimensional arrays [\#3767](https://github.com/nlohmann/json/pull/3767) ([striezel](https://github.com/striezel)) - Fix 'declaration hides global declaration' warning [\#3751](https://github.com/nlohmann/json/pull/3751) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix typos in .md files [\#3748](https://github.com/nlohmann/json/pull/3748) ([tocic](https://github.com/tocic)) - Update Codacy link [\#3740](https://github.com/nlohmann/json/pull/3740) ([nlohmann](https://github.com/nlohmann)) - Add missing files to release artifacts [\#3728](https://github.com/nlohmann/json/pull/3728) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add dark mode toggle to documentation [\#3726](https://github.com/nlohmann/json/pull/3726) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add clang-tools to required tools for ci\_static\_analysis\_clang [\#3724](https://github.com/nlohmann/json/pull/3724) ([nlohmann](https://github.com/nlohmann)) - Replace limit macros with std::numeric\_limits [\#3723](https://github.com/nlohmann/json/pull/3723) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add missing \ include [\#3719](https://github.com/nlohmann/json/pull/3719) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add Bazel build support [\#3709](https://github.com/nlohmann/json/pull/3709) ([Vertexwahn](https://github.com/Vertexwahn)) - Use official Clang/GCC containers [\#3703](https://github.com/nlohmann/json/pull/3703) ([nlohmann](https://github.com/nlohmann)) - Add 'Check amalgamation' workflow [\#3693](https://github.com/nlohmann/json/pull/3693) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Allow custom base class as node customization point [\#3110](https://github.com/nlohmann/json/pull/3110) ([barcode](https://github.com/barcode)) ## [v3.11.2](https://github.com/nlohmann/json/releases/tag/v3.11.2) (2022-08-12) [Full Changelog](https://github.com/nlohmann/json/compare/v3.11.1...v3.11.2) - MSVC natvis visualizer does not work after introduction of inline ABI namespace [\#3696](https://github.com/nlohmann/json/issues/3696) - The use of parenthesis gives compilation errors in some situations [\#3682](https://github.com/nlohmann/json/issues/3682) - extern from/to\_json result in linker error [\#3657](https://github.com/nlohmann/json/issues/3657) - json\_fwd.hpp no longer standalone [\#3656](https://github.com/nlohmann/json/issues/3656) - regression: `.value` is compilation error. [\#3655](https://github.com/nlohmann/json/issues/3655) - Regression: no match for 'operator!=' comparing json\_pointer and const char \*/string\_t [\#3654](https://github.com/nlohmann/json/issues/3654) - Regression: call to member function 'value' is ambiguous [\#3652](https://github.com/nlohmann/json/issues/3652) - macOS 10.15 Actions runner image deprecation [\#3612](https://github.com/nlohmann/json/issues/3612) - generate\_natvis.py: validate version number; cleanup [\#3698](https://github.com/nlohmann/json/pull/3698) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add Python script for generating Natvis file and update file for 3.11.2 [\#3697](https://github.com/nlohmann/json/pull/3697) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - fix typo in json\_pointer.md [\#3692](https://github.com/nlohmann/json/pull/3692) ([eltociear](https://github.com/eltociear)) - Add amalgamated json-fwd.hpp to release [\#3687](https://github.com/nlohmann/json/pull/3687) ([nlohmann](https://github.com/nlohmann)) - Documentation updates for 3.11.2 [\#3686](https://github.com/nlohmann/json/pull/3686) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Make json\_pointer usable as map key \(again\) [\#3685](https://github.com/nlohmann/json/pull/3685) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Deprecate json\_pointer/string\_t comparisons [\#3684](https://github.com/nlohmann/json/pull/3684) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Restructure inline namespace and allow version component to be disabled [\#3683](https://github.com/nlohmann/json/pull/3683) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Properly constrain non-string json\_pointer overloads [\#3681](https://github.com/nlohmann/json/pull/3681) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Amalgamate the forward declaration header [\#3679](https://github.com/nlohmann/json/pull/3679) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix 'const' qualifier on bool& has no effect [\#3678](https://github.com/nlohmann/json/pull/3678) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix whitespace in workflow files [\#3675](https://github.com/nlohmann/json/pull/3675) ([nlohmann](https://github.com/nlohmann)) - Attempt to fix labeler permissions [\#3674](https://github.com/nlohmann/json/pull/3674) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Refine 'Publish documentation' workflow [\#3673](https://github.com/nlohmann/json/pull/3673) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Documentation change [\#3672](https://github.com/nlohmann/json/pull/3672) ([nlohmann](https://github.com/nlohmann)) - Add labeler action [\#3671](https://github.com/nlohmann/json/pull/3671) ([nlohmann](https://github.com/nlohmann)) - Complete contributor list [\#3670](https://github.com/nlohmann/json/pull/3670) ([nlohmann](https://github.com/nlohmann)) - Add json\_pointer/string\_t equality comparison operators [\#3664](https://github.com/nlohmann/json/pull/3664) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Reimplement value\(\) access functions [\#3663](https://github.com/nlohmann/json/pull/3663) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Complete contributor list [\#3662](https://github.com/nlohmann/json/pull/3662) ([nlohmann](https://github.com/nlohmann)) - Adjust naming of GitHub action jobs [\#3661](https://github.com/nlohmann/json/pull/3661) ([nlohmann](https://github.com/nlohmann)) - Publish documentation on push to develop branch [\#3660](https://github.com/nlohmann/json/pull/3660) ([nlohmann](https://github.com/nlohmann)) - Add Discord badge to README [\#3651](https://github.com/nlohmann/json/pull/3651) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Miscellaneous small fixes [\#3643](https://github.com/nlohmann/json/pull/3643) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Minor BJData fixes [\#3637](https://github.com/nlohmann/json/pull/3637) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Update CI [\#3626](https://github.com/nlohmann/json/pull/3626) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) ## [v3.11.1](https://github.com/nlohmann/json/releases/tag/v3.11.1) (2022-08-01) [Full Changelog](https://github.com/nlohmann/json/compare/v3.11.0...v3.11.1) - Regression: no matching literal operator for call to 'operator""\_json' [\#3645](https://github.com/nlohmann/json/issues/3645) - \_json operator""\(\) [\#3644](https://github.com/nlohmann/json/issues/3644) - Fix global UDLs [\#3646](https://github.com/nlohmann/json/pull/3646) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) ## [v3.11.0](https://github.com/nlohmann/json/releases/tag/v3.11.0) (2022-08-01) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.5...v3.11.0) - ICPC: warning \#1098: the qualifier on this friend declaration is ignored [\#3632](https://github.com/nlohmann/json/issues/3632) - Starting with 3.10.4, just adding `\#include json.hpp` causes compile error: `overload resolution selected deleted operator '=' [\#3620](https://github.com/nlohmann/json/issues/3620) - xwidgets doesn't compile with version \>3.10.3 [\#3602](https://github.com/nlohmann/json/issues/3602) - json\_pointer\_\_pop\_back.cpp example does not compile [\#3600](https://github.com/nlohmann/json/issues/3600) - nlohmann::json::array 'push\_back' is ambiguous [\#3589](https://github.com/nlohmann/json/issues/3589) - Multiple versions causing conflict [\#3588](https://github.com/nlohmann/json/issues/3588) - ERROR: ThreadSanitizer: SEGV on unknown address [\#3584](https://github.com/nlohmann/json/issues/3584) - unicode4 test consistently fails on RISC-V hardware [\#3579](https://github.com/nlohmann/json/issues/3579) - sax\_parse\(iterator, json\_sax\_t \*\) string callback clobbers spaces [\#3574](https://github.com/nlohmann/json/issues/3574) - Nlohmann JSON Parse crash with raylib-cpp [\#3570](https://github.com/nlohmann/json/issues/3570) - ordered\_json doesn't accept keys of types other than string\_t \(e.g., string\_view\) [\#3558](https://github.com/nlohmann/json/issues/3558) - turning an object into an array [\#3547](https://github.com/nlohmann/json/issues/3547) - json:parse\_bjdata\_fuzzer: ASSERT: ref\_stack.back\(\)-\>is\_array\(\) [\#3541](https://github.com/nlohmann/json/issues/3541) - Warning about potential null dereference in GCC 12.1 \(Fedora 36\) [\#3525](https://github.com/nlohmann/json/issues/3525) - Enable 32bit unit test in CI [\#3524](https://github.com/nlohmann/json/issues/3524) - Error when roundtripping BJData [\#3519](https://github.com/nlohmann/json/issues/3519) - ASSERT error while parsing BJData [\#3513](https://github.com/nlohmann/json/issues/3513) - An exception occurred when sending a string with double quotes [\#3504](https://github.com/nlohmann/json/issues/3504) - Binary reader for BJData creates incorrect SAX events [\#3503](https://github.com/nlohmann/json/issues/3503) - It can't support "nan", "inf", "-inf" for float type [\#3494](https://github.com/nlohmann/json/issues/3494) - ASAN error while parsing BJData \(Heap-buffer-overflow READ 1\) [\#3492](https://github.com/nlohmann/json/issues/3492) - UBSAN error while parsing BJData \(Null-dereference\) [\#3491](https://github.com/nlohmann/json/issues/3491) - UBSAN error while parsing BJData \(Invalid-bool-value\) [\#3490](https://github.com/nlohmann/json/issues/3490) - json:parse\_bjdata\_fuzzer reaches assertion [\#3475](https://github.com/nlohmann/json/issues/3475) - Compilation with -fmodules-ts and use inside of a module [\#3472](https://github.com/nlohmann/json/issues/3472) - json.exception.parse\_error.101 only occurs outside of IDE [\#3467](https://github.com/nlohmann/json/issues/3467) - json:parse\_bjdata\_fuzzer reaches assertion [\#3461](https://github.com/nlohmann/json/issues/3461) - NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE\_WITH\_DEFAULT can not parse { "key" : null} [\#3458](https://github.com/nlohmann/json/issues/3458) - Unable to compile when using Microsoft's \_CRTDBG [\#3457](https://github.com/nlohmann/json/issues/3457) - Compilation errors when including `` and using `--std=c++17` or above \(MinGW/Win10\) [\#3449](https://github.com/nlohmann/json/issues/3449) - Weird things on for statement [\#3447](https://github.com/nlohmann/json/issues/3447) - Parsing error when there is a json string within a Json [\#3445](https://github.com/nlohmann/json/issues/3445) - ordered\_json vs json types comparison [\#3443](https://github.com/nlohmann/json/issues/3443) - Error occurred when converting nlohmann::json to std::any [\#3428](https://github.com/nlohmann/json/issues/3428) - I was forced to report an assertion error when copying an array of strings [\#3419](https://github.com/nlohmann/json/issues/3419) - About Serialization Error invalid UTF-8 byte at index [\#3414](https://github.com/nlohmann/json/issues/3414) - Comparison of NaN differs between json and float [\#3409](https://github.com/nlohmann/json/issues/3409) - when i use it in C++ sserver,it it constantly show that fatal error: adl\_serializer.hpp: No such file or directory [\#3404](https://github.com/nlohmann/json/issues/3404) - parse error [\#3403](https://github.com/nlohmann/json/issues/3403) - CMake script MAIN\_PROJECT always OFF [\#3390](https://github.com/nlohmann/json/issues/3390) - Parser unable to handle large floating point numbers [\#3389](https://github.com/nlohmann/json/issues/3389) - Compilation error if json\_pointer is used with alternative string type [\#3388](https://github.com/nlohmann/json/issues/3388) - Unit tests conversions & items fail to build \(Clang \<4.0/C++14 only\) [\#3384](https://github.com/nlohmann/json/issues/3384) - Regression test for \#3070 is not being run and fails when enabled [\#3377](https://github.com/nlohmann/json/issues/3377) - Refactor unit tests to use more convenient doctest assertion macros [\#3365](https://github.com/nlohmann/json/issues/3365) - An json.h issue reported in a static code analyzer [\#3361](https://github.com/nlohmann/json/issues/3361) - Mixing different JSON\_DIAGNOSTICS settings in separately compiled units leads to core [\#3360](https://github.com/nlohmann/json/issues/3360) - json::out\_of\_range exception matches against lot of others while testing [\#3352](https://github.com/nlohmann/json/issues/3352) - use mipsel-openwrt-linux-g++ -std=c++11 to compile, it has some errors "error: 'snprintf' is not a member of 'std'" [\#3349](https://github.com/nlohmann/json/issues/3349) - Add proper issue templates [\#3348](https://github.com/nlohmann/json/issues/3348) - switch from json to ordered\_json [\#3343](https://github.com/nlohmann/json/issues/3343) - Json dump use to compilation errors [\#3339](https://github.com/nlohmann/json/issues/3339) - Ambiguous conversion from nlohmann::basic\_json\<\> to custom class. [\#3333](https://github.com/nlohmann/json/issues/3333) - Iterator doesn't satisfy std::incrementable because post-increment may change constness [\#3331](https://github.com/nlohmann/json/issues/3331) - Inconsistent handling of floating point numbers after parse\(\) [\#3329](https://github.com/nlohmann/json/issues/3329) - Documentation for `ordered_json` should show proper use of the `parse()` function. [\#3325](https://github.com/nlohmann/json/issues/3325) - "type must be boolean, but is object" error thrown on non-boolean object [\#3319](https://github.com/nlohmann/json/issues/3319) - Incomplete Type in request parms [\#3318](https://github.com/nlohmann/json/issues/3318) - 小米 MIX4 MIUI13 bug [\#3316](https://github.com/nlohmann/json/issues/3316) - json.exception.parse\_error.101 when parsing data received over a socket [\#3313](https://github.com/nlohmann/json/issues/3313) - Parse to custom class from unordered\_json breaks on G++11.2.0 with C++20 [\#3312](https://github.com/nlohmann/json/issues/3312) - try to assign dumped string to a class member varible [\#3300](https://github.com/nlohmann/json/issues/3300) - includedir in pkgconfig is error if install\_headers\(\) has subdir argument. [\#3284](https://github.com/nlohmann/json/issues/3284) - SHA-256 sum of json-3.10.5.tar.xz changes over time \(but not the content itself\) [\#3281](https://github.com/nlohmann/json/issues/3281) - items\(\) method does not follow order of json message [\#3278](https://github.com/nlohmann/json/issues/3278) - Perplexing template deduction failure serialising a 3rd party type using base class [\#3267](https://github.com/nlohmann/json/issues/3267) - json.hpp 'isfinite' is not a member of 'std' also isinf; snprintf; stoull and to\_string members of std [\#3263](https://github.com/nlohmann/json/issues/3263) - JSON build fails for C++ cmake [\#3256](https://github.com/nlohmann/json/issues/3256) - Unexpected implicit conversion [\#3254](https://github.com/nlohmann/json/issues/3254) - Add a function that checks for valid json in a C++ string [\#3245](https://github.com/nlohmann/json/issues/3245) - Replace use of standard IO from error handling [\#3239](https://github.com/nlohmann/json/issues/3239) - Use Catch for unit tests [\#3232](https://github.com/nlohmann/json/issues/3232) - Exception thrown during initialization causes a memory leak [\#3215](https://github.com/nlohmann/json/issues/3215) - Tests failing when compiling with c++20 [\#3207](https://github.com/nlohmann/json/issues/3207) - ambiguous regression [\#3204](https://github.com/nlohmann/json/issues/3204) - Deserialization: if class is\_constructible from std::string wrong from\_json overload is being selected, compilation failed [\#3171](https://github.com/nlohmann/json/issues/3171) - 'clang++ ./json.hpp' with no usage: Compiler syntax problem in clang 3.7.0 \(tizen :/ \) [\#3153](https://github.com/nlohmann/json/issues/3153) - build failure on upcoming gcc-12: test/src/unit-regression1.cpp:392:22: error: ambiguous overload for 'operator=' [\#3138](https://github.com/nlohmann/json/issues/3138) - Applying JSON patch creates parent object [\#3134](https://github.com/nlohmann/json/issues/3134) - Iterators cannot be used with range-v3 [\#3130](https://github.com/nlohmann/json/issues/3130) - std::shared\_ptr\ == nlohmann::json compiles, which seem undesirable [\#3026](https://github.com/nlohmann/json/issues/3026) - Error in test\download\_test\_data.vcxproj custom build step when compiling with Visual Studio 2019 16.7.7 msbuild on Windows 10 [\#2593](https://github.com/nlohmann/json/issues/2593) - Consider putting the user-defined literals in a namespace [\#1682](https://github.com/nlohmann/json/issues/1682) - Using versioned namespaces [\#1539](https://github.com/nlohmann/json/issues/1539) - How can I use std::string\_view as the json\_key to "operator \[\]" ? [\#1529](https://github.com/nlohmann/json/issues/1529) - serialize std::variant\<...\> [\#1261](https://github.com/nlohmann/json/issues/1261) - Prepare 3.11.0 release [\#3635](https://github.com/nlohmann/json/pull/3635) ([nlohmann](https://github.com/nlohmann)) - Fix warning [\#3634](https://github.com/nlohmann/json/pull/3634) ([nlohmann](https://github.com/nlohmann)) - Add license header to new files [\#3633](https://github.com/nlohmann/json/pull/3633) ([nlohmann](https://github.com/nlohmann)) - Add a unit test including windows.h [\#3631](https://github.com/nlohmann/json/pull/3631) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fixed latest build error in msvc platform [\#3630](https://github.com/nlohmann/json/pull/3630) ([Lioncky](https://github.com/Lioncky)) - Add regression tests for \#3204 and \#3333 [\#3629](https://github.com/nlohmann/json/pull/3629) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix patch::add creating nonexistent parents [\#3628](https://github.com/nlohmann/json/pull/3628) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Adjust JSON Pointer examples [\#3622](https://github.com/nlohmann/json/pull/3622) ([nlohmann](https://github.com/nlohmann)) - Disable exceptions on ICPC [\#3621](https://github.com/nlohmann/json/pull/3621) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - build: install .pc and .cmake files to share/ [\#3619](https://github.com/nlohmann/json/pull/3619) ([Tachi107](https://github.com/Tachi107)) - Fix MinGW CI failures [\#3618](https://github.com/nlohmann/json/pull/3618) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix Unicode test timeout \(for real this time!\) [\#3614](https://github.com/nlohmann/json/pull/3614) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Use 'concurrency' in GitHub workflows [\#3610](https://github.com/nlohmann/json/pull/3610) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Use swap\(\) by ADL [\#3609](https://github.com/nlohmann/json/pull/3609) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Move UDLs out of the global namespace [\#3605](https://github.com/nlohmann/json/pull/3605) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Re-add value\_type detection to distinguish string types [\#3604](https://github.com/nlohmann/json/pull/3604) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add operator\<\<\(json\_pointer\) [\#3601](https://github.com/nlohmann/json/pull/3601) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add documentation for comparing json and ordered\_json [\#3599](https://github.com/nlohmann/json/pull/3599) ([nlohmann](https://github.com/nlohmann)) - Clean up after \#3581 [\#3596](https://github.com/nlohmann/json/pull/3596) ([nlohmann](https://github.com/nlohmann)) - Add assertion if nullptr is passed to parse function [\#3593](https://github.com/nlohmann/json/pull/3593) ([nlohmann](https://github.com/nlohmann)) - Minor documentation fixes [\#3592](https://github.com/nlohmann/json/pull/3592) ([nlohmann](https://github.com/nlohmann)) - Add versioned, ABI-tagged inline namespace and namespace macros [\#3590](https://github.com/nlohmann/json/pull/3590) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add badge for https://repology.org/project/nlohmann-json/versions [\#3586](https://github.com/nlohmann/json/pull/3586) ([nlohmann](https://github.com/nlohmann)) - Add error message if test suite cannot be found [\#3585](https://github.com/nlohmann/json/pull/3585) ([nlohmann](https://github.com/nlohmann)) - add patch\_inplace function [\#3581](https://github.com/nlohmann/json/pull/3581) ([wolfv](https://github.com/wolfv)) - Enable overriding test properties and set Unicode test timeouts [\#3580](https://github.com/nlohmann/json/pull/3580) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Ignore output directory [\#3572](https://github.com/nlohmann/json/pull/3572) ([NN---](https://github.com/NN---)) - Optimize output vector adapter write [\#3569](https://github.com/nlohmann/json/pull/3569) ([romainreignier](https://github.com/romainreignier)) - Add overloads for more key types to ordered\_map and fix ordered\_map::erase\(first, last\) with first == last [\#3564](https://github.com/nlohmann/json/pull/3564) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Make certain usage patterns more prominent in the README [\#3557](https://github.com/nlohmann/json/pull/3557) ([jez](https://github.com/jez)) - CI: fix "JSON\_MultipleHeaders" option spelling [\#3555](https://github.com/nlohmann/json/pull/3555) ([karzhenkov](https://github.com/karzhenkov)) - More documentation updates for 3.11.0 [\#3553](https://github.com/nlohmann/json/pull/3553) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Use DOCTEST\_\* compiler macros and suppress pragmas warning [\#3550](https://github.com/nlohmann/json/pull/3550) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add unit test to make sure iterator\_input\_adapter advances iterators correctly [\#3548](https://github.com/nlohmann/json/pull/3548) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Use REUSE framework [\#3546](https://github.com/nlohmann/json/pull/3546) ([nlohmann](https://github.com/nlohmann)) - Use `std::iterator_traits` to extract `iterator_category` [\#3544](https://github.com/nlohmann/json/pull/3544) ([Mike-Leo-Smith](https://github.com/Mike-Leo-Smith)) - BJData dimension length can not be string\_t::npos, fix \#3541 [\#3543](https://github.com/nlohmann/json/pull/3543) ([fangq](https://github.com/fangq)) - Allow disabling default enum conversions [\#3536](https://github.com/nlohmann/json/pull/3536) ([richardhozak](https://github.com/richardhozak)) - Add to\_json\(\) for std::vector\::reference [\#3534](https://github.com/nlohmann/json/pull/3534) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - CI: Enable 32bit unit test \(3\) [\#3532](https://github.com/nlohmann/json/pull/3532) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Use new CI image [\#3528](https://github.com/nlohmann/json/pull/3528) ([nlohmann](https://github.com/nlohmann)) - Fix ndarray dimension signedness, fix ndarray length overflow \(2\); add 32bit unit test [\#3523](https://github.com/nlohmann/json/pull/3523) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Small documentation fixes [\#3520](https://github.com/nlohmann/json/pull/3520) ([nlohmann](https://github.com/nlohmann)) - Add assertion to converting constructor [\#3517](https://github.com/nlohmann/json/pull/3517) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - CI: Remove -Wstrict-overflow [\#3516](https://github.com/nlohmann/json/pull/3516) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix nlohmann/json\#3513, explain is\_ndarray flag [\#3514](https://github.com/nlohmann/json/pull/3514) ([fangq](https://github.com/fangq)) - Prevent ndarray size vector from recursive use, fix nlohmann/json\#3503 [\#3505](https://github.com/nlohmann/json/pull/3505) ([fangq](https://github.com/fangq)) - prevent ndarray dimension vector from recusive array, nlohmann/json\#3500 [\#3502](https://github.com/nlohmann/json/pull/3502) ([fangq](https://github.com/fangq)) - Discard optimized containers with negative counts in UBJSON/BJData \(\#3491,\#3492,\#3490\) [\#3500](https://github.com/nlohmann/json/pull/3500) ([fangq](https://github.com/fangq)) - Update json.hpp [\#3499](https://github.com/nlohmann/json/pull/3499) ([ivanovmp](https://github.com/ivanovmp)) - Add assertion for invariant in SAX-DOM parser [\#3498](https://github.com/nlohmann/json/pull/3498) ([nlohmann](https://github.com/nlohmann)) - Add more macOS builders [\#3485](https://github.com/nlohmann/json/pull/3485) ([nlohmann](https://github.com/nlohmann)) - change bjdata ndarray flag to detect negative size, as part of \#3475 [\#3479](https://github.com/nlohmann/json/pull/3479) ([fangq](https://github.com/fangq)) - Document fuzzer usage [\#3478](https://github.com/nlohmann/json/pull/3478) ([nlohmann](https://github.com/nlohmann)) - Add build step for ICPC \(with fixes\) [\#3465](https://github.com/nlohmann/json/pull/3465) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Complete documentation for 3.11.0 [\#3464](https://github.com/nlohmann/json/pull/3464) ([nlohmann](https://github.com/nlohmann)) - Handle invalid BJData optimized type, fix \#3461 [\#3463](https://github.com/nlohmann/json/pull/3463) ([fangq](https://github.com/fangq)) - Reorganize directories [\#3462](https://github.com/nlohmann/json/pull/3462) ([nlohmann](https://github.com/nlohmann)) - Enable rapid testing and development on Compiler Explorer [\#3456](https://github.com/nlohmann/json/pull/3456) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - cpplint 1.6.0 [\#3454](https://github.com/nlohmann/json/pull/3454) ([nlohmann](https://github.com/nlohmann)) - Disable regression test for \#3070 on GCC \<8.4 [\#3451](https://github.com/nlohmann/json/pull/3451) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix C++20/gcc-12 issues \(Part 2\) [\#3446](https://github.com/nlohmann/json/pull/3446) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Overwork documentation [\#3444](https://github.com/nlohmann/json/pull/3444) ([nlohmann](https://github.com/nlohmann)) - Fix typo in basic\_json documentation [\#3439](https://github.com/nlohmann/json/pull/3439) ([jhnlee](https://github.com/jhnlee)) - Exclude std::any from implicit conversion \(fixes \#3428\) [\#3437](https://github.com/nlohmann/json/pull/3437) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Document which version introduced the macros [\#3431](https://github.com/nlohmann/json/pull/3431) ([nlohmann](https://github.com/nlohmann)) - Fix constraints on from\_json\(\) for strings \(fixes \#3171, \#3267, \#3312, \#3384\) [\#3427](https://github.com/nlohmann/json/pull/3427) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - at.md: fix typo [\#3426](https://github.com/nlohmann/json/pull/3426) ([heinemml](https://github.com/heinemml)) - Implement support for string\_view \(attempt no. 3\) [\#3423](https://github.com/nlohmann/json/pull/3423) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - CI: speedup AppVeyor builds by ~30% [\#3422](https://github.com/nlohmann/json/pull/3422) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Restore disabled check for \#3070 \(except on MSVC\) [\#3421](https://github.com/nlohmann/json/pull/3421) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Update CI image [\#3420](https://github.com/nlohmann/json/pull/3420) ([nlohmann](https://github.com/nlohmann)) - Add check if different version is also included [\#3418](https://github.com/nlohmann/json/pull/3418) ([nlohmann](https://github.com/nlohmann)) - Report the right \_\_cplusplus value for MSVC in basic\_json meta\(\) [\#3417](https://github.com/nlohmann/json/pull/3417) ([flagarde](https://github.com/flagarde)) - CI: windows-2016 has been deprecated; remove jobs [\#3416](https://github.com/nlohmann/json/pull/3416) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Re-template json\_pointer on string type [\#3415](https://github.com/nlohmann/json/pull/3415) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Refactor unit tests to use more convenient doctest assertion macros \(Part 2\) [\#3405](https://github.com/nlohmann/json/pull/3405) ([kkarbowiak](https://github.com/kkarbowiak)) - Refactor unit tests to use more convenient doctest assertion macros [\#3393](https://github.com/nlohmann/json/pull/3393) ([kkarbowiak](https://github.com/kkarbowiak)) - Improve unit testing \(Part 1\) [\#3380](https://github.com/nlohmann/json/pull/3380) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix C++20/gcc-12 issues \(Part 1\) [\#3379](https://github.com/nlohmann/json/pull/3379) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add clarification to avoid misunderstanding that cause \#3360 [\#3378](https://github.com/nlohmann/json/pull/3378) ([puffetto](https://github.com/puffetto)) - Fix ordered\_map ctor with initializer\_list \(fixes \#3343\) [\#3370](https://github.com/nlohmann/json/pull/3370) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Fix and update CI [\#3368](https://github.com/nlohmann/json/pull/3368) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - FetchContent\_MakeAvailable [\#3351](https://github.com/nlohmann/json/pull/3351) ([nlohmann](https://github.com/nlohmann)) - Avoid clash with Arduino defines [\#3338](https://github.com/nlohmann/json/pull/3338) ([DarkZeros](https://github.com/DarkZeros)) - Support UBJSON-derived Binary JData \(BJData\) format [\#3336](https://github.com/nlohmann/json/pull/3336) ([fangq](https://github.com/fangq)) - Make iterator operator++/--\(int\) equality-preserving [\#3332](https://github.com/nlohmann/json/pull/3332) ([falbrechtskirchinger](https://github.com/falbrechtskirchinger)) - Add note on parsing ordered\_json [\#3326](https://github.com/nlohmann/json/pull/3326) ([nlohmann](https://github.com/nlohmann)) - Fix CITATION.cff and add automatic validation of your citation metadata [\#3320](https://github.com/nlohmann/json/pull/3320) ([fdiblen](https://github.com/fdiblen)) - .github/workflows/windows.yml: Add support for Visual Studio 2022 [\#3295](https://github.com/nlohmann/json/pull/3295) ([t-b](https://github.com/t-b)) - Add maintainer targets to create source archive [\#3289](https://github.com/nlohmann/json/pull/3289) ([nlohmann](https://github.com/nlohmann)) - Fix a typo [\#3265](https://github.com/nlohmann/json/pull/3265) ([fhuberts](https://github.com/fhuberts)) - Fix typo [\#3249](https://github.com/nlohmann/json/pull/3249) ([rex4539](https://github.com/rex4539)) - Add documentation for JSON Lines [\#3247](https://github.com/nlohmann/json/pull/3247) ([nlohmann](https://github.com/nlohmann)) - Improve documentation InputType and IteratorType [\#3246](https://github.com/nlohmann/json/pull/3246) ([nlohmann](https://github.com/nlohmann)) - Remove stringstream [\#3244](https://github.com/nlohmann/json/pull/3244) ([nlohmann](https://github.com/nlohmann)) - fix \_MSC\_VER version to check for std::filesystem [\#3240](https://github.com/nlohmann/json/pull/3240) ([gcerretani](https://github.com/gcerretani)) - Add macros NLOHMANN\_DEFINE\_TYPE\_INTRUSIVE\_WITH\_DEFAULT and ...\_NON\_INTRUSIVE\_WITH\_DEFAULT [\#3143](https://github.com/nlohmann/json/pull/3143) ([pketelsen](https://github.com/pketelsen)) ## [v3.10.5](https://github.com/nlohmann/json/releases/tag/v3.10.5) (2022-01-03) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.4...v3.10.5) - \#include \ doesn't work with gcc-7 when `-std=c++17` is specified. [\#3203](https://github.com/nlohmann/json/issues/3203) - Not able to use nlohmann json with c++ code built using emscripten to wasm [\#3200](https://github.com/nlohmann/json/issues/3200) - Warning for shadowed variables [\#3188](https://github.com/nlohmann/json/issues/3188) - Accessing missing keys on const json object leads to assert [\#3183](https://github.com/nlohmann/json/issues/3183) - Data member is available, but null is reported, and program throws error [\#3173](https://github.com/nlohmann/json/issues/3173) - serialization problem, from\_json need construct new object [\#3169](https://github.com/nlohmann/json/issues/3169) - std::filesystem unavailable on macOS lower deployment targets [\#3156](https://github.com/nlohmann/json/issues/3156) - \[json.exception.type\_error.305\] cannot use operator\[\] with a string argument with string [\#3151](https://github.com/nlohmann/json/issues/3151) - json::dump\(\) is not compatible with C++ standards [\#3147](https://github.com/nlohmann/json/issues/3147) - Issue with json::parse decoding codepoints [\#3142](https://github.com/nlohmann/json/issues/3142) - Simple parse of json object thinks it should be an array [\#3136](https://github.com/nlohmann/json/issues/3136) - How to properly read a Json string that may be null in some cases? [\#3135](https://github.com/nlohmann/json/issues/3135) - Deadlock on create json - windows only [\#3129](https://github.com/nlohmann/json/issues/3129) - Wrong parsing of int64 values nearest of limit [\#3126](https://github.com/nlohmann/json/issues/3126) - ordered\_json doesn't support range based erase [\#3108](https://github.com/nlohmann/json/issues/3108) - Apple build failed with json/single\_include/nlohmann/json.hpp:4384:57: 'path' is unavailable [\#3097](https://github.com/nlohmann/json/issues/3097) - GCC 7.5.0 with --std=c++17: filesystem: No such file or directory [\#3090](https://github.com/nlohmann/json/issues/3090) - Drop Travis CI [\#3087](https://github.com/nlohmann/json/issues/3087) - ordered\_json::reset\(\) compile error with nvcc [\#3013](https://github.com/nlohmann/json/issues/3013) - Support for unordered\_map as object\_t [\#2932](https://github.com/nlohmann/json/issues/2932) - Compiler warning with Intel compiler, same as \#755 [\#2712](https://github.com/nlohmann/json/issues/2712) - Compiler warnings with NVCC 11.2 [\#2676](https://github.com/nlohmann/json/issues/2676) - some static analysis warning at line 11317 [\#1390](https://github.com/nlohmann/json/issues/1390) - Compiling with icpc [\#755](https://github.com/nlohmann/json/issues/755) - Fix compilation error with NVCC [\#3234](https://github.com/nlohmann/json/pull/3234) ([nlohmann](https://github.com/nlohmann)) - Remove Travis CI [\#3233](https://github.com/nlohmann/json/pull/3233) ([nlohmann](https://github.com/nlohmann)) - Add build step for NVCC and fix a warning [\#3227](https://github.com/nlohmann/json/pull/3227) ([nlohmann](https://github.com/nlohmann)) - Update cpplint [\#3225](https://github.com/nlohmann/json/pull/3225) ([nlohmann](https://github.com/nlohmann)) - Fix: Warning for shadowed variables \(\#3188\) [\#3193](https://github.com/nlohmann/json/pull/3193) ([kernie](https://github.com/kernie)) - Fix FAQ hyperlink typo in readme [\#3148](https://github.com/nlohmann/json/pull/3148) ([Prince-Mendiratta](https://github.com/Prince-Mendiratta)) - Docs: Update `skip_comments` to `ignore_comments` [\#3145](https://github.com/nlohmann/json/pull/3145) ([daniel-kun](https://github.com/daniel-kun)) - fix typos in documentation [\#3140](https://github.com/nlohmann/json/pull/3140) ([striezel](https://github.com/striezel)) - Fix spelling [\#3125](https://github.com/nlohmann/json/pull/3125) ([axic](https://github.com/axic)) - Extend std specializations [\#3121](https://github.com/nlohmann/json/pull/3121) ([nlohmann](https://github.com/nlohmann)) - Add missing erase\(first, last\) function to ordered\_map [\#3109](https://github.com/nlohmann/json/pull/3109) ([nlohmann](https://github.com/nlohmann)) - Fix typos in operator\[\] documentation [\#3102](https://github.com/nlohmann/json/pull/3102) ([axnsan12](https://github.com/axnsan12)) - Add C++17 copies of the test binaries [\#3101](https://github.com/nlohmann/json/pull/3101) ([nlohmann](https://github.com/nlohmann)) - Add examples for parsing from iterator pair [\#3100](https://github.com/nlohmann/json/pull/3100) ([nlohmann](https://github.com/nlohmann)) - Update CI [\#3088](https://github.com/nlohmann/json/pull/3088) ([nlohmann](https://github.com/nlohmann)) - Consolidate documentation [\#3071](https://github.com/nlohmann/json/pull/3071) ([nlohmann](https://github.com/nlohmann)) - Add recursive update function [\#3069](https://github.com/nlohmann/json/pull/3069) ([nlohmann](https://github.com/nlohmann)) ## [v3.10.4](https://github.com/nlohmann/json/releases/tag/v3.10.4) (2021-10-16) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.3...v3.10.4) - Compiler error in output serializer due to 'incompatible initializer' [\#3081](https://github.com/nlohmann/json/issues/3081) - Strange behaviour when using std::sort on std::vector\ [\#3080](https://github.com/nlohmann/json/issues/3080) - Unhandled exception: nlohmann::detail::parse\_error [\#3078](https://github.com/nlohmann/json/issues/3078) - explicit constructor with default does not compile [\#3077](https://github.com/nlohmann/json/issues/3077) - Parse an object but get an array using GCC [\#3076](https://github.com/nlohmann/json/issues/3076) - Version 3.10.3 breaks backward-compatibility with 3.10.2 [\#3070](https://github.com/nlohmann/json/issues/3070) - Feature request, Add to\_json/from\_json to align with other to/from binary api. [\#3067](https://github.com/nlohmann/json/issues/3067) - vcpkg is out of date [\#3066](https://github.com/nlohmann/json/issues/3066) - Revert invalid fix [\#3082](https://github.com/nlohmann/json/pull/3082) ([nlohmann](https://github.com/nlohmann)) - Allow to use get with explicit constructor [\#3079](https://github.com/nlohmann/json/pull/3079) ([nlohmann](https://github.com/nlohmann)) - fix std::filesystem::path regression [\#3073](https://github.com/nlohmann/json/pull/3073) ([theodelrieu](https://github.com/theodelrieu)) ## [v3.10.3](https://github.com/nlohmann/json/releases/tag/v3.10.3) (2021-10-08) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.2...v3.10.3) - Parsing an emtpy string returns a string with size 1 instead of expected 0 [\#3057](https://github.com/nlohmann/json/issues/3057) - Linking error "duplicate symbol: std::type\_info::operator==" on static build with MinGW [\#3042](https://github.com/nlohmann/json/issues/3042) - Yet another assertion failure when inserting into arrays with JSON\_DIAGNOSTICS set [\#3032](https://github.com/nlohmann/json/issues/3032) - accept and parse function not work well with a pure number string [\#3029](https://github.com/nlohmann/json/issues/3029) - push\_back doesn't work for serializing containers [\#3027](https://github.com/nlohmann/json/issues/3027) - Strange behaviour when creating array with single element [\#3025](https://github.com/nlohmann/json/issues/3025) - Input ordered\_json doesn't work [\#3023](https://github.com/nlohmann/json/issues/3023) - Issue iterating through 'items' [\#3021](https://github.com/nlohmann/json/issues/3021) - Cannot spell the namespace right [\#3015](https://github.com/nlohmann/json/issues/3015) - JSON Parse error when reading json object from file [\#3011](https://github.com/nlohmann/json/issues/3011) - Parent pointer not properly set when using update\(\) [\#3007](https://github.com/nlohmann/json/issues/3007) - Overwriting terminated null character [\#3001](https://github.com/nlohmann/json/issues/3001) - 'operator =' is ambiguous on VS2017 [\#2997](https://github.com/nlohmann/json/issues/2997) - JSON Patch for Array Elements [\#2994](https://github.com/nlohmann/json/issues/2994) - JSON Parse throwing error [\#2983](https://github.com/nlohmann/json/issues/2983) - to\_{binary format} does not provide a mechanism for specifying a custom allocator for the returned type. [\#2982](https://github.com/nlohmann/json/issues/2982) - 3.10.1 zip json.hpp has version number 3.10.0 instead of 3.10.1 [\#2973](https://github.com/nlohmann/json/issues/2973) - Assertion failure when serializing array with JSON\_DIAGNOSTICS set [\#2926](https://github.com/nlohmann/json/issues/2926) - Fix Clang version [\#3040](https://github.com/nlohmann/json/pull/3040) ([nlohmann](https://github.com/nlohmann)) - Fix assertion failure for JSON\_DIAGNOSTICS [\#3037](https://github.com/nlohmann/json/pull/3037) ([carlsmedstad](https://github.com/carlsmedstad)) - meta: fix is\_compatible/constructible traits [\#3020](https://github.com/nlohmann/json/pull/3020) ([theodelrieu](https://github.com/theodelrieu)) - Set parent pointers for values inserted via update\(\) \(fixes \#3007\). [\#3008](https://github.com/nlohmann/json/pull/3008) ([AnthonyVH](https://github.com/AnthonyVH)) - Allow allocators for output\_vector\_adapter [\#2989](https://github.com/nlohmann/json/pull/2989) ([nlohmann](https://github.com/nlohmann)) - Re-add Clang 12 [\#2986](https://github.com/nlohmann/json/pull/2986) ([nlohmann](https://github.com/nlohmann)) - Use new Docker image [\#2981](https://github.com/nlohmann/json/pull/2981) ([nlohmann](https://github.com/nlohmann)) - Update docset generation script [\#2967](https://github.com/nlohmann/json/pull/2967) ([nlohmann](https://github.com/nlohmann)) ## [v3.10.2](https://github.com/nlohmann/json/releases/tag/v3.10.2) (2021-08-26) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.1...v3.10.2) - Annoying -Wundef on new JSON\_DIAGNOSTICS macro [\#2975](https://github.com/nlohmann/json/issues/2975) - += issue with multiple redirection. [\#2970](https://github.com/nlohmann/json/issues/2970) - "incomplete type ‘nlohmann::detail::wide\_string\_input\_helper" compilation error [\#2969](https://github.com/nlohmann/json/issues/2969) - Fix -Wunused warnings on JSON\_DIAGNOSTICS [\#2976](https://github.com/nlohmann/json/pull/2976) ([gcerretani](https://github.com/gcerretani)) ## [v3.10.1](https://github.com/nlohmann/json/releases/tag/v3.10.1) (2021-08-24) [Full Changelog](https://github.com/nlohmann/json/compare/v3.10.0...v3.10.1) - JSON\_DIAGNOSTICS assertion for ordered\_json [\#2962](https://github.com/nlohmann/json/issues/2962) - Inserting in unordered json using a pointer retains the leading slash [\#2958](https://github.com/nlohmann/json/issues/2958) - Test \#9: test-cbor test case sample.json fails in debug mode - Stack overflow [\#2955](https://github.com/nlohmann/json/issues/2955) - 3.10.0 broke at least the Bear project [\#2953](https://github.com/nlohmann/json/issues/2953) - 2 tests fail in 3.10.0: cmake\_fetch\_content\_configure, cmake\_fetch\_content\_build [\#2951](https://github.com/nlohmann/json/issues/2951) - ctest \(58+60,/67 cmake\_import\_configure\) fails when build with -D JSON\_Install:BOOL=OFF because of missing nlohmann\_jsonTargets.cmake [\#2946](https://github.com/nlohmann/json/issues/2946) - Document vcpkg usage [\#2944](https://github.com/nlohmann/json/issues/2944) - Linker error LNK2005 when compiling \(x64\) json-3.10.0.zip with Visual Studio 2019 16.11.1 [\#2941](https://github.com/nlohmann/json/issues/2941) - Move Travis jobs to travis-ci.com [\#2938](https://github.com/nlohmann/json/issues/2938) - Fixed typo in docs/api/basic\_json/parse.md [\#2968](https://github.com/nlohmann/json/pull/2968) ([mbadhan](https://github.com/mbadhan)) - Add link to Homebrew package [\#2966](https://github.com/nlohmann/json/pull/2966) ([nlohmann](https://github.com/nlohmann)) - Fix parent update for diagnostics with ordered\_json [\#2963](https://github.com/nlohmann/json/pull/2963) ([nlohmann](https://github.com/nlohmann)) - Set stack size for some unit tests when using MSVC [\#2961](https://github.com/nlohmann/json/pull/2961) ([nlohmann](https://github.com/nlohmann)) - Add regression test [\#2960](https://github.com/nlohmann/json/pull/2960) ([nlohmann](https://github.com/nlohmann)) - Update Travis badge [\#2959](https://github.com/nlohmann/json/pull/2959) ([nlohmann](https://github.com/nlohmann)) - Fix some extra ";" clang warnings [\#2957](https://github.com/nlohmann/json/pull/2957) ([Hallot](https://github.com/Hallot)) - Add documentation for integration via vcpkg [\#2954](https://github.com/nlohmann/json/pull/2954) ([nlohmann](https://github.com/nlohmann)) - Avoid duplicate AppVeyor builds [\#2952](https://github.com/nlohmann/json/pull/2952) ([nlohmann](https://github.com/nlohmann)) - 🚨 fix gdb\_pretty\_printer failure on basic types [\#2950](https://github.com/nlohmann/json/pull/2950) ([senyai](https://github.com/senyai)) - Add header to use value\_t [\#2948](https://github.com/nlohmann/json/pull/2948) ([nlohmann](https://github.com/nlohmann)) - Skip some tests if JSON\_Install is not set [\#2947](https://github.com/nlohmann/json/pull/2947) ([nlohmann](https://github.com/nlohmann)) - Remove outdated json\_unit test binary [\#2945](https://github.com/nlohmann/json/pull/2945) ([nlohmann](https://github.com/nlohmann)) - Updating the Homebrew Command [\#2943](https://github.com/nlohmann/json/pull/2943) ([amirmasoudabdol](https://github.com/amirmasoudabdol)) ## [v3.10.0](https://github.com/nlohmann/json/releases/tag/v3.10.0) (2021-08-17) [Full Changelog](https://github.com/nlohmann/json/compare/v3.9.1...v3.10.0) - Latest version 3.9.1 uses throw instead of JSON\_THROW in the amalgamated json.hpp file [\#2934](https://github.com/nlohmann/json/issues/2934) - Copy to a variable inside a Structure [\#2933](https://github.com/nlohmann/json/issues/2933) - warning C4068: unknown pragma 'GCC' on MSVC/cl [\#2924](https://github.com/nlohmann/json/issues/2924) - Errors during ninja test [\#2918](https://github.com/nlohmann/json/issues/2918) - compiler warning: "not return a value" [\#2917](https://github.com/nlohmann/json/issues/2917) - Comparison floating points causes warning [\#2909](https://github.com/nlohmann/json/issues/2909) - Why can't I have std::vector\ testList? [\#2900](https://github.com/nlohmann/json/issues/2900) - \[json.hpp\] from releases doesnt work [\#2897](https://github.com/nlohmann/json/issues/2897) - g++ \(11\) -Wuseless-cast gives lots of warnings [\#2893](https://github.com/nlohmann/json/issues/2893) - Cannot serialize and immediatly deserialize json to/from bson [\#2892](https://github.com/nlohmann/json/issues/2892) - Floating-point precision conversion error [\#2876](https://github.com/nlohmann/json/issues/2876) - How to avoid escaping for an already escaped string in .dump\(\) [\#2870](https://github.com/nlohmann/json/issues/2870) - can't parse std::vector\ [\#2869](https://github.com/nlohmann/json/issues/2869) - ASAN detects memory leaks [\#2865](https://github.com/nlohmann/json/issues/2865) - Binary subtype field cannot represent all CBOR tags [\#2863](https://github.com/nlohmann/json/issues/2863) - string literals possibly being parsed as another type due to the presence of only digits and full-stops [\#2852](https://github.com/nlohmann/json/issues/2852) - json::parse\(\) works only with absolute paths [\#2851](https://github.com/nlohmann/json/issues/2851) - Compiler Warnings on Raspberry Pi OS [\#2850](https://github.com/nlohmann/json/issues/2850) - Braced initialization and aggregate initialization behavior is different for `json::array()` function call. [\#2848](https://github.com/nlohmann/json/issues/2848) - 3.9.1: test suite is failing [\#2845](https://github.com/nlohmann/json/issues/2845) - Documentation for macro JSON\_NO\_IO is missing [\#2842](https://github.com/nlohmann/json/issues/2842) - Assertion failure when inserting into arrays with JSON\_DIAGNOSTICS set [\#2838](https://github.com/nlohmann/json/issues/2838) - HELP! There is a memory leak in the code?! [\#2837](https://github.com/nlohmann/json/issues/2837) - Elegant conversion of a 2-D-json array to a standard C++ array [\#2805](https://github.com/nlohmann/json/issues/2805) - Swift Package Manager support [\#2802](https://github.com/nlohmann/json/issues/2802) - Referencing a subkey which doesn't exist gives crash [\#2797](https://github.com/nlohmann/json/issues/2797) - Failed benchmark due to renamed branch [\#2796](https://github.com/nlohmann/json/issues/2796) - Build Errors with VS 2019 and json Version 3.9.1 when attempting to replicate SAX Example [\#2782](https://github.com/nlohmann/json/issues/2782) - Value with spaces cannot be parsed [\#2781](https://github.com/nlohmann/json/issues/2781) - \[Question\] CBOR rfc support. [\#2779](https://github.com/nlohmann/json/issues/2779) - Using JSON.hpp header file in Visual Studio 2013 \(C++ Project\) [\#2775](https://github.com/nlohmann/json/issues/2775) - compilation error on clang-8 + C++17 [\#2759](https://github.com/nlohmann/json/issues/2759) - Undefined symbol EOF [\#2755](https://github.com/nlohmann/json/issues/2755) - Parsing a string into json object behaves differently under g++ and MinGW compilers. [\#2746](https://github.com/nlohmann/json/issues/2746) - big git history size [\#2742](https://github.com/nlohmann/json/issues/2742) - How to get reference of std::vector\ [\#2735](https://github.com/nlohmann/json/issues/2735) - CMake failure in VS2019 Community [\#2734](https://github.com/nlohmann/json/issues/2734) - Possibility to use with custom c++ version to use in intel sgx enclaves [\#2730](https://github.com/nlohmann/json/issues/2730) - Possibility to use without the dependency to file io and streams to use in intel sgx enclaves [\#2728](https://github.com/nlohmann/json/issues/2728) - error C2784& error C2839... in my visual studio 2015 compiler [\#2726](https://github.com/nlohmann/json/issues/2726) - `-fno-expection` not respected anymore in 3.9.1 [\#2725](https://github.com/nlohmann/json/issues/2725) - When exceptions disabled with JSON\_NOEXCEPTION, lib just aborts without any message [\#2724](https://github.com/nlohmann/json/issues/2724) - Critical error detected c0000374 on windows10 msvc 2019 16.8.5 [\#2710](https://github.com/nlohmann/json/issues/2710) - unused parameter error/warning [\#2706](https://github.com/nlohmann/json/issues/2706) - How to store data into a Map from json file [\#2691](https://github.com/nlohmann/json/issues/2691) - Tests do not compile with pre-release glibc [\#2686](https://github.com/nlohmann/json/issues/2686) - compile errors .... chromium-style [\#2680](https://github.com/nlohmann/json/issues/2680) - .dump\(\) not allowing compact form [\#2678](https://github.com/nlohmann/json/issues/2678) - error: no matching function for call to ‘nlohmann::basic\_json\<\>::value\(int, std::set\&\)’ [\#2671](https://github.com/nlohmann/json/issues/2671) - Compiler warning: unused parameter [\#2668](https://github.com/nlohmann/json/issues/2668) - Deserializing to a struct as shown on the project homepage throws compile time errors [\#2665](https://github.com/nlohmann/json/issues/2665) - Unable to compile on MSVC 2019 with SDL checking enabled: This function or variable may be unsafe [\#2664](https://github.com/nlohmann/json/issues/2664) - terminating with uncaught exception of type nlohmann::detail::type\_error: \[json.exception.type\_error.302\] type must be array, but is object [\#2661](https://github.com/nlohmann/json/issues/2661) - unused-parameter on OSX when Diagnostics is off [\#2658](https://github.com/nlohmann/json/issues/2658) - std::pair wrong serialization [\#2655](https://github.com/nlohmann/json/issues/2655) - The result of json is\_number\_integer\(\) function is wrong when read a json file [\#2653](https://github.com/nlohmann/json/issues/2653) - 2 backslash cause problem [\#2652](https://github.com/nlohmann/json/issues/2652) - No support for using an external/system copy of Hedley [\#2651](https://github.com/nlohmann/json/issues/2651) - error: incomplete type 'qfloat16' used in type trait expression [\#2650](https://github.com/nlohmann/json/issues/2650) - Unused variable in exception class when not using improved diagnostics [\#2646](https://github.com/nlohmann/json/issues/2646) - I am trying to do this - converting from wstring works incorrectly! [\#2642](https://github.com/nlohmann/json/issues/2642) - Exception 207 On ARM Processor During Literal String Parsing [\#2634](https://github.com/nlohmann/json/issues/2634) - double free or corruption \(!prev\) error on Json push\_back and write [\#2632](https://github.com/nlohmann/json/issues/2632) - nlohmann::detail::parse\_error: syntax error while parsing CBOR string: expected length specification \(0x60-0x7B\) or indefinite string type \(0x7F\) [\#2629](https://github.com/nlohmann/json/issues/2629) - please allow disabling implicit conversions in non-single-file use [\#2621](https://github.com/nlohmann/json/issues/2621) - Preserve decimal formatting [\#2618](https://github.com/nlohmann/json/issues/2618) - Visual Studio Visual Assist code issues reported by VA code inspection of file json.hpp [\#2615](https://github.com/nlohmann/json/issues/2615) - Missing get function and no viable overloaded '=' on mac [\#2610](https://github.com/nlohmann/json/issues/2610) - corruption when parse from string [\#2603](https://github.com/nlohmann/json/issues/2603) - Parse from byte-vector results in compile error [\#2602](https://github.com/nlohmann/json/issues/2602) - Memory leak when working on ARM Linux [\#2601](https://github.com/nlohmann/json/issues/2601) - Unhandled exception in test-cbor.exe Stack overflow when debugging project with Visual Studio 2019 16.7.7 compiled with c++17 or c++latest [\#2598](https://github.com/nlohmann/json/issues/2598) - Error in download\_test\_data.vcxproj when compiling with Visual Studio 2019 16.7.7 Professional msbuild on Windows 10 2004 Professional [\#2594](https://github.com/nlohmann/json/issues/2594) - Warnings C4715 and C4127 when building json-3.9.1 with Visual Studio 2019 16.7.7 [\#2592](https://github.com/nlohmann/json/issues/2592) - I tried some change to dump\(\) for \[1,2,3...\] [\#2584](https://github.com/nlohmann/json/issues/2584) - try/catch block does not catch parsing error [\#2579](https://github.com/nlohmann/json/issues/2579) - Serializing uint64\_t is broken for large values [\#2578](https://github.com/nlohmann/json/issues/2578) - deserializing arrays should be part of the library [\#2575](https://github.com/nlohmann/json/issues/2575) - Deserialization to std::array with non-default constructable types fails [\#2574](https://github.com/nlohmann/json/issues/2574) - Compilation error when trying to use same type for number\_integer\_t and number\_unsigned\_t in basic\_json template specification. [\#2573](https://github.com/nlohmann/json/issues/2573) - compiler error: directive output may be truncated writing between 2 and 8 bytes [\#2572](https://github.com/nlohmann/json/issues/2572) - Incorrect convert map to json when key cannot construct an string i.e. int [\#2564](https://github.com/nlohmann/json/issues/2564) - no matching function for call to ‘nlohmann::basic\_json\<\>::basic\_json\(\\)’ [\#2559](https://github.com/nlohmann/json/issues/2559) - type\_error factory creates a dangling pointer \(in VisualStudio 2019\) [\#2535](https://github.com/nlohmann/json/issues/2535) - Cannot assign from ordered\_json vector\ to value in not ordered json [\#2528](https://github.com/nlohmann/json/issues/2528) - Qt6: Break changes [\#2519](https://github.com/nlohmann/json/issues/2519) - valgrind memcheck Illegal instruction when use nlohmann::json::parse [\#2518](https://github.com/nlohmann/json/issues/2518) - Buffer overflow [\#2515](https://github.com/nlohmann/json/issues/2515) - Including CTest in the top-level CMakeLists.txt sets BUILD\_TESTING=ON for parent projects [\#2513](https://github.com/nlohmann/json/issues/2513) - Compilation error when using NLOHMANN\_JSON\_SERIALIZE\_ENUM ordered\_json on libc++ [\#2491](https://github.com/nlohmann/json/issues/2491) - Missing "void insert\( InputIt first, InputIt last \);" overload in nlohmann::ordered\_map [\#2490](https://github.com/nlohmann/json/issues/2490) - Could not find a package configuration file provided by "nlohmann\_json" [\#2482](https://github.com/nlohmann/json/issues/2482) - json becomes empty for unknown reason [\#2470](https://github.com/nlohmann/json/issues/2470) - Using std::wstring as StringType fails compiling [\#2459](https://github.com/nlohmann/json/issues/2459) - Sample code in GIF slide outdated \(cannot use emplace\(\) with array\) [\#2457](https://github.com/nlohmann/json/issues/2457) - from\_json\ is treated as an array on latest MSVC [\#2453](https://github.com/nlohmann/json/issues/2453) - MemorySanitizer: use-of-uninitialized-value [\#2449](https://github.com/nlohmann/json/issues/2449) - I need help [\#2441](https://github.com/nlohmann/json/issues/2441) - type conversion failing with clang ext\_vector\_type [\#2436](https://github.com/nlohmann/json/issues/2436) - json::parse\(\) can't be resolved under specific circumstances [\#2427](https://github.com/nlohmann/json/issues/2427) - from\_\*\(ptr, len\) deprecation [\#2426](https://github.com/nlohmann/json/issues/2426) - Error ONLY in release mode [\#2425](https://github.com/nlohmann/json/issues/2425) - "Custom data source" exemple make no sense [\#2423](https://github.com/nlohmann/json/issues/2423) - Refuses to compile in project [\#2419](https://github.com/nlohmann/json/issues/2419) - Compilation failure of tests with C++20 standard \(caused by change of u8 literals\) [\#2413](https://github.com/nlohmann/json/issues/2413) - No matching function for call to 'input\_adapter' under Xcode of with nlohmann version 3.9.1 [\#2412](https://github.com/nlohmann/json/issues/2412) - Git tags are not valid semvers [\#2409](https://github.com/nlohmann/json/issues/2409) - after dump, stderr output disappear [\#2403](https://github.com/nlohmann/json/issues/2403) - Using custom string. [\#2398](https://github.com/nlohmann/json/issues/2398) - value\(\) throws unhandled exception for partially specified json object [\#2393](https://github.com/nlohmann/json/issues/2393) - assertion on runtime causes program to stop when accessing const json with missing key [\#2392](https://github.com/nlohmann/json/issues/2392) - Usage with -fno-elide-constructors causes dump\(\) output to be array of `null`s [\#2387](https://github.com/nlohmann/json/issues/2387) - Build fails with clang-cl due to override of CMAKE\_CXX\_COMPILER\(?\) [\#2384](https://github.com/nlohmann/json/issues/2384) - std::optional not working with primitive types [\#2383](https://github.com/nlohmann/json/issues/2383) - Unexpected array when initializing a json const& on gcc 4.8.5 using uniform syntax [\#2370](https://github.com/nlohmann/json/issues/2370) - setprecision support [\#2362](https://github.com/nlohmann/json/issues/2362) - json::parse\(allow\_exceptions = false\) documentation is misleading. [\#2360](https://github.com/nlohmann/json/issues/2360) - std::begin and std::end usage without specifying std namespace [\#2359](https://github.com/nlohmann/json/issues/2359) - Custom object conversion to json hangs in background thread [\#2358](https://github.com/nlohmann/json/issues/2358) - Add support of nullable fields to NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE and NLOHMANN\_DEFINE\_TYPE\_INTRUSIVE [\#2356](https://github.com/nlohmann/json/issues/2356) - the portfile for the vcpkg is not working. [\#2351](https://github.com/nlohmann/json/issues/2351) - Compiler warns of implicit fallthrough when defining preprocessor macro NDEBUG [\#2348](https://github.com/nlohmann/json/issues/2348) - Compile error on Intel compiler running in Windows [\#2346](https://github.com/nlohmann/json/issues/2346) - Build error caused by overwriting CMAKE\_CXX\_COMPILER [\#2343](https://github.com/nlohmann/json/issues/2343) - Error: an attribute list cannot appear here JSON\_HEDLEY\_DEPRECATED\_FOR [\#2342](https://github.com/nlohmann/json/issues/2342) - compiler warning [\#2341](https://github.com/nlohmann/json/issues/2341) - 3.9.0: tests make build non-reproducible [\#2324](https://github.com/nlohmann/json/issues/2324) - Initialization different between gcc/clang [\#2311](https://github.com/nlohmann/json/issues/2311) - Attempt to `get()` a numeric value as a type which cannot represent it should throw [\#2310](https://github.com/nlohmann/json/issues/2310) - Surprising behaviour with overloaded operators [\#2256](https://github.com/nlohmann/json/issues/2256) - ADL issue in input\_adapter [\#2248](https://github.com/nlohmann/json/issues/2248) - Output adapters should be templated. [\#2172](https://github.com/nlohmann/json/issues/2172) - error when using nlohmann::json, std::function and std::bind [\#2147](https://github.com/nlohmann/json/issues/2147) - Remove undefined behavior for const operator\[\] [\#2111](https://github.com/nlohmann/json/issues/2111) - json\({}\) gives null instead of empty object with GCC and -std=c++17 [\#2046](https://github.com/nlohmann/json/issues/2046) - GDB pretty printing support [\#1952](https://github.com/nlohmann/json/issues/1952) - Always compile tests with all warnings enabled and error out on warnings [\#1798](https://github.com/nlohmann/json/issues/1798) - Fixes Cppcheck warnings [\#1759](https://github.com/nlohmann/json/issues/1759) - How to get position info or parser context with custom from\_json\(\) that may throw exceptions? [\#1508](https://github.com/nlohmann/json/issues/1508) - Suggestion to improve value\(\) accessors with respect to move semantics [\#1275](https://github.com/nlohmann/json/issues/1275) - Add Key name to Exception [\#932](https://github.com/nlohmann/json/issues/932) - Overwork warning flags [\#2936](https://github.com/nlohmann/json/pull/2936) ([nlohmann](https://github.com/nlohmann)) - Treat MSVC warnings as errors [\#2930](https://github.com/nlohmann/json/pull/2930) ([nlohmann](https://github.com/nlohmann)) - All: fix warnings when compiling with -Wswitch-enum [\#2927](https://github.com/nlohmann/json/pull/2927) ([fhuberts](https://github.com/fhuberts)) - Guard GCC pragmas [\#2925](https://github.com/nlohmann/json/pull/2925) ([nlohmann](https://github.com/nlohmann)) - Supress -Wfloat-equal on intended float comparisions [\#2911](https://github.com/nlohmann/json/pull/2911) ([Finkman](https://github.com/Finkman)) - Fix binary subtypes [\#2908](https://github.com/nlohmann/json/pull/2908) ([nlohmann](https://github.com/nlohmann)) - Fix useless-cast warnings [\#2902](https://github.com/nlohmann/json/pull/2902) ([nlohmann](https://github.com/nlohmann)) - Add regression test [\#2898](https://github.com/nlohmann/json/pull/2898) ([nlohmann](https://github.com/nlohmann)) - Refactor Unicode tests [\#2889](https://github.com/nlohmann/json/pull/2889) ([nlohmann](https://github.com/nlohmann)) - CMake cleanup [\#2885](https://github.com/nlohmann/json/pull/2885) ([nlohmann](https://github.com/nlohmann)) - Avoid string in case of empty CBOR objects [\#2879](https://github.com/nlohmann/json/pull/2879) ([nlohmann](https://github.com/nlohmann)) - Suppress C4127 warning in unit-json\_pointer.cpp [\#2875](https://github.com/nlohmann/json/pull/2875) ([nlohmann](https://github.com/nlohmann)) - Fix truncation warning [\#2874](https://github.com/nlohmann/json/pull/2874) ([nlohmann](https://github.com/nlohmann)) - Fix memory leak in to\_json [\#2872](https://github.com/nlohmann/json/pull/2872) ([nlohmann](https://github.com/nlohmann)) - Fix assertion failure in diagnostics [\#2866](https://github.com/nlohmann/json/pull/2866) ([nlohmann](https://github.com/nlohmann)) - Update documentation [\#2861](https://github.com/nlohmann/json/pull/2861) ([nlohmann](https://github.com/nlohmann)) - Consistency with `using` in README.md [\#2826](https://github.com/nlohmann/json/pull/2826) ([justanotheranonymoususer](https://github.com/justanotheranonymoususer)) - Properly constrain the basic\_json conversion operator [\#2825](https://github.com/nlohmann/json/pull/2825) ([ldionne](https://github.com/ldionne)) - Fix CI [\#2817](https://github.com/nlohmann/json/pull/2817) ([nlohmann](https://github.com/nlohmann)) - Specified git branch for google benchmark fetch in benchmark test [\#2795](https://github.com/nlohmann/json/pull/2795) ([grafail](https://github.com/grafail)) - Add C++ standards to macOS matrix [\#2790](https://github.com/nlohmann/json/pull/2790) ([nlohmann](https://github.com/nlohmann)) - Update URLs to HTTPS [\#2789](https://github.com/nlohmann/json/pull/2789) ([TotalCaesar659](https://github.com/TotalCaesar659)) - Link to Conan Center package added [\#2771](https://github.com/nlohmann/json/pull/2771) ([offa](https://github.com/offa)) - Keep consistent formatting [\#2770](https://github.com/nlohmann/json/pull/2770) ([jasmcaus](https://github.com/jasmcaus)) - Add a cmake option to use SYSTEM in target\_include\_directories [\#2762](https://github.com/nlohmann/json/pull/2762) ([jpl-mac](https://github.com/jpl-mac)) - replace EOF with std::char\_traits\::eof\(\) [\#2756](https://github.com/nlohmann/json/pull/2756) ([nlohmann](https://github.com/nlohmann)) - Fix typo in README [\#2754](https://github.com/nlohmann/json/pull/2754) ([mortenfyhn](https://github.com/mortenfyhn)) - Update documentation [\#2749](https://github.com/nlohmann/json/pull/2749) ([nlohmann](https://github.com/nlohmann)) - Add documentation for numbers [\#2747](https://github.com/nlohmann/json/pull/2747) ([nlohmann](https://github.com/nlohmann)) - Use Clang 12 in CI [\#2737](https://github.com/nlohmann/json/pull/2737) ([nlohmann](https://github.com/nlohmann)) - Fixes \#2730 [\#2731](https://github.com/nlohmann/json/pull/2731) ([theShmoo](https://github.com/theShmoo)) - Possibility to use without the dependency to file io and streams to use in intel sgx enclaves [\#2729](https://github.com/nlohmann/json/pull/2729) ([theShmoo](https://github.com/theShmoo)) - Update json.hpp [\#2707](https://github.com/nlohmann/json/pull/2707) ([raduteo](https://github.com/raduteo)) - pkg-config.pc.in: Don't concatenate paths [\#2690](https://github.com/nlohmann/json/pull/2690) ([doronbehar](https://github.com/doronbehar)) - add more CI steps [\#2689](https://github.com/nlohmann/json/pull/2689) ([nlohmann](https://github.com/nlohmann)) - Update doctest from 2.4.4 to 2.4.6 \(fixes \#2686\) [\#2687](https://github.com/nlohmann/json/pull/2687) ([musicinmybrain](https://github.com/musicinmybrain)) - License fix [\#2683](https://github.com/nlohmann/json/pull/2683) ([nlohmann](https://github.com/nlohmann)) - Update parse\_exceptions.md - correct `json::exception::parse_error` [\#2679](https://github.com/nlohmann/json/pull/2679) ([frasermarlow](https://github.com/frasermarlow)) - Remove HEDLEY annotation from exception::what\(\) [\#2673](https://github.com/nlohmann/json/pull/2673) ([remyjette](https://github.com/remyjette)) - Fix amount of entries in the json object [\#2659](https://github.com/nlohmann/json/pull/2659) ([abbaswasim](https://github.com/abbaswasim)) - Fix missing 1.78 in example in README.md [\#2625](https://github.com/nlohmann/json/pull/2625) ([wawiesel](https://github.com/wawiesel)) - Add GDB pretty printer [\#2607](https://github.com/nlohmann/json/pull/2607) ([nlohmann](https://github.com/nlohmann)) - readme: fix tilde character display [\#2582](https://github.com/nlohmann/json/pull/2582) ([bl-ue](https://github.com/bl-ue)) - Add support for deserialization of STL containers of non-default constructable types \(fixes \#2574\). [\#2576](https://github.com/nlohmann/json/pull/2576) ([AnthonyVH](https://github.com/AnthonyVH)) - Better diagnostics [\#2562](https://github.com/nlohmann/json/pull/2562) ([nlohmann](https://github.com/nlohmann)) - CI targets [\#2561](https://github.com/nlohmann/json/pull/2561) ([nlohmann](https://github.com/nlohmann)) - Add switch to skip non-reproducible tests. [\#2560](https://github.com/nlohmann/json/pull/2560) ([nlohmann](https://github.com/nlohmann)) - Fix compilation of input\_adapter\(container\) in edge cases [\#2553](https://github.com/nlohmann/json/pull/2553) ([jasujm](https://github.com/jasujm)) - Allow parsing from std::byte containers [\#2550](https://github.com/nlohmann/json/pull/2550) ([nlohmann](https://github.com/nlohmann)) - Travis doesn't run any tests in C++17 mode [\#2540](https://github.com/nlohmann/json/pull/2540) ([karzhenkov](https://github.com/karzhenkov)) - Doctest is updated to v2.4.3 [\#2538](https://github.com/nlohmann/json/pull/2538) ([YarikTH](https://github.com/YarikTH)) - Fix warnings [\#2537](https://github.com/nlohmann/json/pull/2537) ([nlohmann](https://github.com/nlohmann)) - Fix a shadowing warning [\#2536](https://github.com/nlohmann/json/pull/2536) ([nlohmann](https://github.com/nlohmann)) - Clarify license of is\_complete\_type implementation [\#2534](https://github.com/nlohmann/json/pull/2534) ([nlohmann](https://github.com/nlohmann)) - Do not unconditionally redefine C++14 constructs [\#2533](https://github.com/nlohmann/json/pull/2533) ([nlohmann](https://github.com/nlohmann)) - Doctest is updated to v2.4.1 [\#2525](https://github.com/nlohmann/json/pull/2525) ([YarikTH](https://github.com/YarikTH)) - Add MAIN\_PROJECT check for test and install options [\#2514](https://github.com/nlohmann/json/pull/2514) ([globberwops](https://github.com/globberwops)) - Ranged insert test section is added in unit-ordered\_json.cpp [\#2512](https://github.com/nlohmann/json/pull/2512) ([YarikTH](https://github.com/YarikTH)) - Add asserts to suppress C28020 [\#2447](https://github.com/nlohmann/json/pull/2447) ([jbzdarkid](https://github.com/jbzdarkid)) - Change argument name "subtype" in byte\_container\_with\_subtype [\#2444](https://github.com/nlohmann/json/pull/2444) ([linev](https://github.com/linev)) - 📝 add CPM.Cmake example [\#2406](https://github.com/nlohmann/json/pull/2406) ([leozz37](https://github.com/leozz37)) - Fix move constructor of json\_ref [\#2405](https://github.com/nlohmann/json/pull/2405) ([karzhenkov](https://github.com/karzhenkov)) - Properly select "Release" build for Travis [\#2375](https://github.com/nlohmann/json/pull/2375) ([karzhenkov](https://github.com/karzhenkov)) - Update Hedley [\#2367](https://github.com/nlohmann/json/pull/2367) ([nlohmann](https://github.com/nlohmann)) - Fix and extend documentation of discarded values [\#2363](https://github.com/nlohmann/json/pull/2363) ([nlohmann](https://github.com/nlohmann)) - Fix typos in documentation [\#2354](https://github.com/nlohmann/json/pull/2354) ([rbuch](https://github.com/rbuch)) - Remove "\#define private public" from tests [\#2352](https://github.com/nlohmann/json/pull/2352) ([nlohmann](https://github.com/nlohmann)) - Remove -Wimplicit-fallthrough warning [\#2349](https://github.com/nlohmann/json/pull/2349) ([nlohmann](https://github.com/nlohmann)) - Fix code to work without exceptions [\#2347](https://github.com/nlohmann/json/pull/2347) ([nlohmann](https://github.com/nlohmann)) - fix cmake script overwriting compiler path [\#2344](https://github.com/nlohmann/json/pull/2344) ([ongjunjie](https://github.com/ongjunjie)) ## [v3.9.1](https://github.com/nlohmann/json/releases/tag/v3.9.1) (2020-08-06) [Full Changelog](https://github.com/nlohmann/json/compare/v3.9.0...v3.9.1) - Can't parse not formatted JSON. [\#2340](https://github.com/nlohmann/json/issues/2340) - parse returns desired array contained in array when JSON text begins with square bracket on gcc 7.5.0 [\#2339](https://github.com/nlohmann/json/issues/2339) - Unexpected deserialization difference between Mac and Linux [\#2338](https://github.com/nlohmann/json/issues/2338) - Reading ordered\_json from file causes compile error [\#2331](https://github.com/nlohmann/json/issues/2331) - ignore\_comment=true fails on multiple consecutive lines starting with comments [\#2330](https://github.com/nlohmann/json/issues/2330) - Update documentation about Homebrew installation and CMake integration - Homebrew [\#2326](https://github.com/nlohmann/json/issues/2326) - Chinese character initialize error [\#2325](https://github.com/nlohmann/json/issues/2325) - json.update and vector\does not work with ordered\_json [\#2315](https://github.com/nlohmann/json/issues/2315) - Ambiguous call to overloaded function [\#2210](https://github.com/nlohmann/json/issues/2210) - Fix fallthrough warning [\#2333](https://github.com/nlohmann/json/pull/2333) ([nlohmann](https://github.com/nlohmann)) - Fix lexer to properly cope with repeated comments [\#2332](https://github.com/nlohmann/json/pull/2332) ([nlohmann](https://github.com/nlohmann)) - Fix name of Homebrew formula in documentation [\#2327](https://github.com/nlohmann/json/pull/2327) ([nlohmann](https://github.com/nlohmann)) - fix typo [\#2320](https://github.com/nlohmann/json/pull/2320) ([wx257osn2](https://github.com/wx257osn2)) - Fix a bug due to missing overloads in ordered\_map container [\#2319](https://github.com/nlohmann/json/pull/2319) ([nlohmann](https://github.com/nlohmann)) - cmake: install pkg-config file relative to current\_binary\_dir [\#2318](https://github.com/nlohmann/json/pull/2318) ([eli-schwartz](https://github.com/eli-schwartz)) - Fixed installation of pkg-config file on other than Ubuntu [\#2314](https://github.com/nlohmann/json/pull/2314) ([xvitaly](https://github.com/xvitaly)) ## [v3.9.0](https://github.com/nlohmann/json/releases/tag/v3.9.0) (2020-07-27) [Full Changelog](https://github.com/nlohmann/json/compare/v3.8.0...v3.9.0) - Unknown Type Name clang error when using NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE [\#2313](https://github.com/nlohmann/json/issues/2313) - Clang 10.0 / GCC 10.1 warnings on disabled exceptions [\#2304](https://github.com/nlohmann/json/issues/2304) - Application stalls indefinitely with message byte size 10 [\#2293](https://github.com/nlohmann/json/issues/2293) - linker error [\#2292](https://github.com/nlohmann/json/issues/2292) - Add support for high-precision numbers in UBJSON encoding [\#2286](https://github.com/nlohmann/json/issues/2286) - NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE fails if the length of the argument is 10 [\#2280](https://github.com/nlohmann/json/issues/2280) - Custom types : MACRO expansion bug [\#2267](https://github.com/nlohmann/json/issues/2267) - to/from\_json Failing To Convert String [\#2238](https://github.com/nlohmann/json/issues/2238) - clang 9.0 report warning: unused type alias 'size\_type' \[-Wunused-local-typedef\] [\#2221](https://github.com/nlohmann/json/issues/2221) - Enormous array created when working with map\ [\#2220](https://github.com/nlohmann/json/issues/2220) - Can I disable sorting of json values [\#2219](https://github.com/nlohmann/json/issues/2219) - Getting Qt types to work [\#2217](https://github.com/nlohmann/json/issues/2217) - Convert to Qt QVariant [\#2216](https://github.com/nlohmann/json/issues/2216) - How to custom serialize same data type of vector? [\#2215](https://github.com/nlohmann/json/issues/2215) - json constructor does not support std::optional [\#2214](https://github.com/nlohmann/json/issues/2214) - Failing to Parse Valid JSON [\#2209](https://github.com/nlohmann/json/issues/2209) - \(De-\)Serialization of std::variant with namespaces [\#2208](https://github.com/nlohmann/json/issues/2208) - Addint support for complex type [\#2207](https://github.com/nlohmann/json/issues/2207) - array\_index possible out of range [\#2205](https://github.com/nlohmann/json/issues/2205) - Object deserialized as array [\#2204](https://github.com/nlohmann/json/issues/2204) - Sending to a function a reference to a sub-branch [\#2200](https://github.com/nlohmann/json/issues/2200) - JSON incorrectly serialized [\#2198](https://github.com/nlohmann/json/issues/2198) - Exception Unhandled out\_of\_range error [\#2197](https://github.com/nlohmann/json/issues/2197) - msgpack serialisation : float is treated as 64bit float, not 32bit float. [\#2196](https://github.com/nlohmann/json/issues/2196) - Is it possible to use compile-time type guarantees for JSON structures? [\#2195](https://github.com/nlohmann/json/issues/2195) - Question : performance against python dict [\#2194](https://github.com/nlohmann/json/issues/2194) - vs2017 compile error [\#2192](https://github.com/nlohmann/json/issues/2192) - Check if a key exists [\#2191](https://github.com/nlohmann/json/issues/2191) - Failed to run tests due to missing test data on builders without Internet access [\#2190](https://github.com/nlohmann/json/issues/2190) - 3.8.0: unit-cbor.cpp test failures [\#2189](https://github.com/nlohmann/json/issues/2189) - 'nlohmann/json.hpp' file not found [\#2188](https://github.com/nlohmann/json/issues/2188) - How to send json data over the wire? [\#2185](https://github.com/nlohmann/json/issues/2185) - Ubuntu 16 not supporting nlohmann/json? [\#2184](https://github.com/nlohmann/json/issues/2184) - .get\ causing emdash errors [\#2180](https://github.com/nlohmann/json/issues/2180) - Object properties should not be re-sorted alphabetically [\#2179](https://github.com/nlohmann/json/issues/2179) - Custom type registration : instrusive API [\#2175](https://github.com/nlohmann/json/issues/2175) - Many version of the function "void to\_json\(json& j, const MyStruct& struct\)" [\#2171](https://github.com/nlohmann/json/issues/2171) - How should strings be escaped? [\#2155](https://github.com/nlohmann/json/issues/2155) - Adding a value to an existing json puts it at the beginning instead of the end [\#2149](https://github.com/nlohmann/json/issues/2149) - The header file is big, can we use what we need. [\#2134](https://github.com/nlohmann/json/issues/2134) - Changing the default format for unordered\_map \(or other set\) [\#2132](https://github.com/nlohmann/json/issues/2132) - Getting size of deserialized bson document [\#2131](https://github.com/nlohmann/json/issues/2131) - implicit conversion failure [\#2128](https://github.com/nlohmann/json/issues/2128) - Error thrown when parsing in a subclass [\#2124](https://github.com/nlohmann/json/issues/2124) - explicit conversion to string not considered for std::map keys in GCC8 [\#2096](https://github.com/nlohmann/json/issues/2096) - Add support for JSONC [\#2061](https://github.com/nlohmann/json/issues/2061) - Library provides template arg for string\_type but assumes std::string in some places [\#2059](https://github.com/nlohmann/json/issues/2059) - incremental parsing with sax\_parser [\#2030](https://github.com/nlohmann/json/issues/2030) - Question about flatten and unflatten [\#1989](https://github.com/nlohmann/json/issues/1989) - CBOR parser doesn't skip tags [\#1968](https://github.com/nlohmann/json/issues/1968) - Compilation failure using Clang on Windows [\#1898](https://github.com/nlohmann/json/issues/1898) - Fail to build when including json.hpp as a system include [\#1818](https://github.com/nlohmann/json/issues/1818) - Parsing string into json doesn't preserve the order correctly. [\#1817](https://github.com/nlohmann/json/issues/1817) - How can I save json object in file in order? [\#1717](https://github.com/nlohmann/json/issues/1717) - Support for Comments [\#1513](https://github.com/nlohmann/json/issues/1513) - clang compiler: error : unknown type name 'not' [\#1119](https://github.com/nlohmann/json/issues/1119) - dump\(\) without alphabetical order [\#1106](https://github.com/nlohmann/json/issues/1106) - operator T\(\) considered harmful [\#958](https://github.com/nlohmann/json/issues/958) - Order of the elements in JSON object [\#952](https://github.com/nlohmann/json/issues/952) - How to prevent alphabetical sorting of data? [\#727](https://github.com/nlohmann/json/issues/727) - Why is an object ordering values by Alphabetical Order? [\#660](https://github.com/nlohmann/json/issues/660) - Feature request: Comments [\#597](https://github.com/nlohmann/json/issues/597) - Head Elements Sorting [\#543](https://github.com/nlohmann/json/issues/543) - Automatic ordered JSON [\#424](https://github.com/nlohmann/json/issues/424) - Support for comments. [\#376](https://github.com/nlohmann/json/issues/376) - Optional comment support. [\#363](https://github.com/nlohmann/json/issues/363) - Strip comments / Minify [\#294](https://github.com/nlohmann/json/issues/294) - maintaining order of keys during iteration [\#106](https://github.com/nlohmann/json/issues/106) - Update documentation [\#2312](https://github.com/nlohmann/json/pull/2312) ([nlohmann](https://github.com/nlohmann)) - Fix bug in CBOR tag handling [\#2308](https://github.com/nlohmann/json/pull/2308) ([nlohmann](https://github.com/nlohmann)) - added inline to NLOHMANN\_DEFINE\_TYPE\_NON\_INTRUSIVE macro [\#2306](https://github.com/nlohmann/json/pull/2306) ([jwittbrodt](https://github.com/jwittbrodt)) - fixes unused variable 'ex' for \#2304 [\#2305](https://github.com/nlohmann/json/pull/2305) ([AODQ](https://github.com/AODQ)) - Cleanup [\#2303](https://github.com/nlohmann/json/pull/2303) ([nlohmann](https://github.com/nlohmann)) - Add test with multiple translation units [\#2301](https://github.com/nlohmann/json/pull/2301) ([nlohmann](https://github.com/nlohmann)) - Merge GitHub actions [\#2300](https://github.com/nlohmann/json/pull/2300) ([nlohmann](https://github.com/nlohmann)) - Fix unused parameter [\#2299](https://github.com/nlohmann/json/pull/2299) ([nlohmann](https://github.com/nlohmann)) - Add support for high-precision numbers in UBJSON encoding [\#2297](https://github.com/nlohmann/json/pull/2297) ([nlohmann](https://github.com/nlohmann)) - fix eof for get\_binary and get\_string [\#2294](https://github.com/nlohmann/json/pull/2294) ([jprochazk](https://github.com/jprochazk)) - Serialisation macros: increase upper bound on number of member variables [\#2287](https://github.com/nlohmann/json/pull/2287) ([pfeatherstone](https://github.com/pfeatherstone)) - add inline specifier for detail::combine [\#2285](https://github.com/nlohmann/json/pull/2285) ([T0b1-iOS](https://github.com/T0b1-iOS)) - Add static assertion for missing binary function in SAX interface [\#2282](https://github.com/nlohmann/json/pull/2282) ([nlohmann](https://github.com/nlohmann)) - Add test for target\_include\_directories [\#2279](https://github.com/nlohmann/json/pull/2279) ([nlohmann](https://github.com/nlohmann)) - Clean up maintainer Makefiles and fix some linter warnings [\#2274](https://github.com/nlohmann/json/pull/2274) ([nlohmann](https://github.com/nlohmann)) - Add option to ignore CBOR tags [\#2273](https://github.com/nlohmann/json/pull/2273) ([nlohmann](https://github.com/nlohmann)) - Hash function without allocation [\#2269](https://github.com/nlohmann/json/pull/2269) ([nlohmann](https://github.com/nlohmann)) - Add ClangCL for MSVC [\#2268](https://github.com/nlohmann/json/pull/2268) ([t-b](https://github.com/t-b)) - Makefile: Always use SED variable [\#2264](https://github.com/nlohmann/json/pull/2264) ([t-b](https://github.com/t-b)) - Add Xcode 12 CI [\#2262](https://github.com/nlohmann/json/pull/2262) ([nlohmann](https://github.com/nlohmann)) - Make library work with Clang on Windows [\#2259](https://github.com/nlohmann/json/pull/2259) ([nlohmann](https://github.com/nlohmann)) - Add ordered\_json specialization with ordered object keys [\#2258](https://github.com/nlohmann/json/pull/2258) ([nlohmann](https://github.com/nlohmann)) - Add pkg-config file [\#2253](https://github.com/nlohmann/json/pull/2253) ([ericonr](https://github.com/ericonr)) - Fix regression from \#2181 [\#2251](https://github.com/nlohmann/json/pull/2251) ([nlohmann](https://github.com/nlohmann)) - Tag binary values in cbor if set [\#2244](https://github.com/nlohmann/json/pull/2244) ([matthewbauer](https://github.com/matthewbauer)) - Make assert configurable via JSON\_ASSERT [\#2242](https://github.com/nlohmann/json/pull/2242) ([nlohmann](https://github.com/nlohmann)) - Add specialization of get\_to [\#2233](https://github.com/nlohmann/json/pull/2233) ([nlohmann](https://github.com/nlohmann)) - Refine documentation of error\_handler parameter [\#2232](https://github.com/nlohmann/json/pull/2232) ([nlohmann](https://github.com/nlohmann)) - Simplify conversion from/to custom types [\#2225](https://github.com/nlohmann/json/pull/2225) ([nlohmann](https://github.com/nlohmann)) - Remove unused typedefs [\#2224](https://github.com/nlohmann/json/pull/2224) ([nlohmann](https://github.com/nlohmann)) - Enable CMake policy CMP0077 [\#2222](https://github.com/nlohmann/json/pull/2222) ([alexreinking](https://github.com/alexreinking)) - Add option to ignore comments in parse/accept functions [\#2212](https://github.com/nlohmann/json/pull/2212) ([nlohmann](https://github.com/nlohmann)) - Fix Clang-Tidy warnings [\#2211](https://github.com/nlohmann/json/pull/2211) ([nlohmann](https://github.com/nlohmann)) - Simple ordered\_json that works on all supported compilers [\#2206](https://github.com/nlohmann/json/pull/2206) ([gatopeich](https://github.com/gatopeich)) - Use unsigned indizies for array index in json pointer [\#2203](https://github.com/nlohmann/json/pull/2203) ([t-b](https://github.com/t-b)) - Add option to not rely on Internet connectivity during test stage [\#2202](https://github.com/nlohmann/json/pull/2202) ([nlohmann](https://github.com/nlohmann)) - Serialize floating-point numbers with 32 bit when possible \(MessagePack\) [\#2201](https://github.com/nlohmann/json/pull/2201) ([nlohmann](https://github.com/nlohmann)) - Fix consistency in function `int_to_string()` [\#2193](https://github.com/nlohmann/json/pull/2193) ([dota17](https://github.com/dota17)) - Fix issue\#1275 [\#2181](https://github.com/nlohmann/json/pull/2181) ([dota17](https://github.com/dota17)) - C++20 support by removing swap specialization [\#2176](https://github.com/nlohmann/json/pull/2176) ([gracicot](https://github.com/gracicot)) - Feat/explicit conversion operator [\#1559](https://github.com/nlohmann/json/pull/1559) ([theodelrieu](https://github.com/theodelrieu)) ## [v3.8.0](https://github.com/nlohmann/json/releases/tag/v3.8.0) (2020-06-14) [Full Changelog](https://github.com/nlohmann/json/compare/v3.7.3...v3.8.0) - sorry delete this issue, i'm stupid [\#2187](https://github.com/nlohmann/json/issues/2187) - Append to a std::nlohmann::json type [\#2186](https://github.com/nlohmann/json/issues/2186) - Some troubles to compile the last revision [\#2177](https://github.com/nlohmann/json/issues/2177) - ​\#​ Top level CMakeLists.txt​ ​project​\(FOO\) ... ​option​\(FOO\_USE\_EXTERNAL\_JSON ​"Use an external JSON library"​ ​OFF​\) ... ​add\_subdirectory​\(thirdparty\) ... ​add\_library​\(foo ...\) ... ​\#​ Note that the namespaced target will always be available regardless of the​ ​\#​ import method​ ​target\_link\_libraries​\(foo ​PRIVATE​ nlohmann\_json::nlohmann\_json\) [\#2170](https://github.com/nlohmann/json/issues/2170) - https://www.github.com/nlohmann/json/tree/develop/include%2Fnlohmann%2Fjson\_fwd.hpp [\#2169](https://github.com/nlohmann/json/issues/2169) - templated from\_json of non primitive types causes gcc error [\#2168](https://github.com/nlohmann/json/issues/2168) - few warnings/errors in copy assignment [\#2167](https://github.com/nlohmann/json/issues/2167) - Different output when upgrading from clang 9 to clang 10 [\#2166](https://github.com/nlohmann/json/issues/2166) - Cannot build with VS 2019 / C++17 [\#2163](https://github.com/nlohmann/json/issues/2163) - Q: When I received an illegal string,How the program knows? [\#2162](https://github.com/nlohmann/json/issues/2162) - Problem while reading a json file [\#2161](https://github.com/nlohmann/json/issues/2161) - converting std::chrono::system\_clock::time\_point to json. [\#2159](https://github.com/nlohmann/json/issues/2159) - how to parse vector\ format [\#2157](https://github.com/nlohmann/json/issues/2157) - nlohmann::json and =nullptr [\#2156](https://github.com/nlohmann/json/issues/2156) - test-cbor fails [\#2154](https://github.com/nlohmann/json/issues/2154) - Accessing array inside array syntax? [\#2151](https://github.com/nlohmann/json/issues/2151) - Best way to catch errors when querying json [\#2150](https://github.com/nlohmann/json/issues/2150) - JSON Data Mapping Key-Value from other Key-Value [\#2148](https://github.com/nlohmann/json/issues/2148) - Conflicts with std \ compiling with GCC 10 [\#2146](https://github.com/nlohmann/json/issues/2146) - Incorrect CMake FetchContent example [\#2142](https://github.com/nlohmann/json/issues/2142) - Help for a Beginner? [\#2141](https://github.com/nlohmann/json/issues/2141) - Read Json from File [\#2139](https://github.com/nlohmann/json/issues/2139) - How to feed a predefined integer value into json string [\#2138](https://github.com/nlohmann/json/issues/2138) - getting json array inside json object [\#2135](https://github.com/nlohmann/json/issues/2135) - Add .contains example to doc [\#2133](https://github.com/nlohmann/json/issues/2133) - Is it safe to return string.c\_str\(\) received from get\(\)? [\#2130](https://github.com/nlohmann/json/issues/2130) - GCC 10: Compilation error when including any before including json header in C++17 mode [\#2129](https://github.com/nlohmann/json/issues/2129) - Intersection of two json files [\#2127](https://github.com/nlohmann/json/issues/2127) - App crashes when dump method called for non ascii chars. [\#2126](https://github.com/nlohmann/json/issues/2126) - iterator based erase method [\#2122](https://github.com/nlohmann/json/issues/2122) - quick and convenient api to get/set nested json values [\#2120](https://github.com/nlohmann/json/issues/2120) - assigning nullptr to std::string [\#2118](https://github.com/nlohmann/json/issues/2118) - usless\_cast warnings with gcc 9.3 and 10.1 \(C++17\) [\#2114](https://github.com/nlohmann/json/issues/2114) - clang 10 warning [\#2113](https://github.com/nlohmann/json/issues/2113) - Possible incorrect \_MSC\_VER reference [\#2112](https://github.com/nlohmann/json/issues/2112) - warning under gcc 10.1 [\#2110](https://github.com/nlohmann/json/issues/2110) - Wdeprecated-declarations from GCC v10.1.0 [\#2109](https://github.com/nlohmann/json/issues/2109) - Global std::vector from json [\#2108](https://github.com/nlohmann/json/issues/2108) - heap-buffer-overflow when using nlohmann/json, ASAN, and gtest [\#2107](https://github.com/nlohmann/json/issues/2107) - exception 0x770DC5AF when i read an special char in json file [\#2106](https://github.com/nlohmann/json/issues/2106) - json::parse\(\) fails to parse a dump\(2,' '\) output, yet does successfully parse dump\(\) [\#2105](https://github.com/nlohmann/json/issues/2105) - run test-udt error in MSVC 19.16.27034.0 [\#2103](https://github.com/nlohmann/json/issues/2103) - Unable to dump to stringstream [\#2102](https://github.com/nlohmann/json/issues/2102) - Can't ad an object in another objet [\#2101](https://github.com/nlohmann/json/issues/2101) - Implicit conversion causes "cannot use operator\[\] with a string argument with string" [\#2098](https://github.com/nlohmann/json/issues/2098) - C++20: char8\_t [\#2097](https://github.com/nlohmann/json/issues/2097) - Compilation issues when included in project [\#2094](https://github.com/nlohmann/json/issues/2094) - string value with null character causes infinite loop [\#2093](https://github.com/nlohmann/json/issues/2093) - corrupted size vs. prev\_size \(aborted\) [\#2092](https://github.com/nlohmann/json/issues/2092) - Get string field content without return std::string copy [\#2091](https://github.com/nlohmann/json/issues/2091) - JSON Comments \(JSON 5\) [\#2090](https://github.com/nlohmann/json/issues/2090) - Remove \#include \ [\#2089](https://github.com/nlohmann/json/issues/2089) - JSON library as a git submodule [\#2088](https://github.com/nlohmann/json/issues/2088) - Apple Clang 11.0.3 on MacOS Catalina 10.15.4 not compiling [\#2087](https://github.com/nlohmann/json/issues/2087) - Value function return empty object even if it exist [\#2086](https://github.com/nlohmann/json/issues/2086) - Cannot debug but Run works [\#2085](https://github.com/nlohmann/json/issues/2085) - Question about serialization. [\#2084](https://github.com/nlohmann/json/issues/2084) - How to include in an external project [\#2083](https://github.com/nlohmann/json/issues/2083) - Missing tests for binary values [\#2082](https://github.com/nlohmann/json/issues/2082) - How to override default string serialization? [\#2079](https://github.com/nlohmann/json/issues/2079) - Can't have a json type as a property in an arbitrary type [\#2078](https://github.com/nlohmann/json/issues/2078) - New release? [\#2075](https://github.com/nlohmann/json/issues/2075) - CMake FetchContent \> Updating the documentation? [\#2073](https://github.com/nlohmann/json/issues/2073) - How to convert STL Vector \(of user defined type\) to Json [\#2072](https://github.com/nlohmann/json/issues/2072) - how to make an array of objects [\#2070](https://github.com/nlohmann/json/issues/2070) - ‘\_\_int64’ was not declared [\#2068](https://github.com/nlohmann/json/issues/2068) - \[json.exception.type\_error.317\] cannot serialize binary data to text JSON [\#2067](https://github.com/nlohmann/json/issues/2067) - Unexpected end of input; expected '\[', '{', or a literal [\#2066](https://github.com/nlohmann/json/issues/2066) - Json structure can be nested? [\#2065](https://github.com/nlohmann/json/issues/2065) - Bug: returning reference to local temporary object [\#2064](https://github.com/nlohmann/json/issues/2064) - Allow to use non strict parsing [\#2063](https://github.com/nlohmann/json/issues/2063) - Crashing on json::at [\#2062](https://github.com/nlohmann/json/issues/2062) - How to convert a const std::vector\ message to a json, to be able to parse it and extract information from it? Can you point to any examples? [\#2058](https://github.com/nlohmann/json/issues/2058) - Nice library [\#2057](https://github.com/nlohmann/json/issues/2057) - json.hpp:15372:22: error: expected unqualified-id if \(not std::isfinite\(x\)\): Started getting this bug after updating my XCode [\#2056](https://github.com/nlohmann/json/issues/2056) - Confused as how I can extract the values from the JSON object. [\#2055](https://github.com/nlohmann/json/issues/2055) - Warnings with GCC 10 [\#2052](https://github.com/nlohmann/json/issues/2052) - Warnings with Clang 10 [\#2049](https://github.com/nlohmann/json/issues/2049) - Update doctest [\#2048](https://github.com/nlohmann/json/issues/2048) - Unclear error message: "cannot use operator\[\] with a string argument with array" [\#2047](https://github.com/nlohmann/json/issues/2047) - Serializing std::variant\\> [\#2045](https://github.com/nlohmann/json/issues/2045) - Crash when parse big jsonfile [\#2042](https://github.com/nlohmann/json/issues/2042) - How to check if a key exists without silently generating null objects on the path [\#2041](https://github.com/nlohmann/json/issues/2041) - Crash when traversing over items\(\) of temporary json objects [\#2040](https://github.com/nlohmann/json/issues/2040) - How to parse multiple line value ? [\#2039](https://github.com/nlohmann/json/issues/2039) - SAX API uses unsigned std::size\_t but -1 if element size is not known; [\#2037](https://github.com/nlohmann/json/issues/2037) - How to parse big decimal data [\#2036](https://github.com/nlohmann/json/issues/2036) - how use template \ struct adl\_serializer [\#2035](https://github.com/nlohmann/json/issues/2035) - auto iterator returned by find to handle value depending if is string or numeric. [\#2032](https://github.com/nlohmann/json/issues/2032) - pass find returned iterator to numeric variable. [\#2031](https://github.com/nlohmann/json/issues/2031) - Parse error on valid json file [\#2029](https://github.com/nlohmann/json/issues/2029) - Is here any elegant way to combine serialization and deserialization code? [\#2028](https://github.com/nlohmann/json/issues/2028) - Notes about dump function [\#2027](https://github.com/nlohmann/json/issues/2027) - Different JSON printouts for empty dictionary on Linux and Mac. [\#2026](https://github.com/nlohmann/json/issues/2026) - easier way to get exception reason out of json\_sax\_dom\_callback\_parser without exceptions [\#2024](https://github.com/nlohmann/json/issues/2024) - Using fifo\_map with base class and derived class [\#2023](https://github.com/nlohmann/json/issues/2023) - Error reading JSON File [\#2022](https://github.com/nlohmann/json/issues/2022) - Parse causing crash on android. Cannot catch. [\#2021](https://github.com/nlohmann/json/issues/2021) - Extra backslashes in nested json [\#2020](https://github.com/nlohmann/json/issues/2020) - How to create patch for merge\_patch input ? [\#2018](https://github.com/nlohmann/json/issues/2018) - CppUTest/include/CppUTestExt/MockSupport.h:40: error: default argument for ‘MockFailureReporter\* failureReporterForThisCall’ has type ‘void\*’ [\#2017](https://github.com/nlohmann/json/issues/2017) - including another file [\#2016](https://github.com/nlohmann/json/issues/2016) - GNU PREREQ Error with gcc 9.3.0 [\#2015](https://github.com/nlohmann/json/issues/2015) - Parse error: json.exception.parse\_error.101 - invalid string: ill-formed UTF-8 byte [\#2014](https://github.com/nlohmann/json/issues/2014) - Add more flexibility to basic\_json's ObjectType \(and ArrayType\) [\#2013](https://github.com/nlohmann/json/issues/2013) - afl persistent mode [\#2012](https://github.com/nlohmann/json/issues/2012) - Compiler Errors under VS2019 in Appveyor CI [\#2009](https://github.com/nlohmann/json/issues/2009) - Another compilation failure with Visual Studio [\#2007](https://github.com/nlohmann/json/issues/2007) - Implicit cast to std::string broken again with VS2019 16.5.0 [\#2006](https://github.com/nlohmann/json/issues/2006) - error: no matching member function for call to 'AddRaw' [\#2005](https://github.com/nlohmann/json/issues/2005) - When I re-create an object again after the network request, an error is reported [\#2003](https://github.com/nlohmann/json/issues/2003) - How to merge \(and not replace\) different Json::Value objects in jsoncpp [\#2001](https://github.com/nlohmann/json/issues/2001) - scalar transforms to list [\#2000](https://github.com/nlohmann/json/issues/2000) - Dump JSON containing multibyte characters [\#1999](https://github.com/nlohmann/json/issues/1999) - Build error when modify value [\#1998](https://github.com/nlohmann/json/issues/1998) - How do i include a vector of pointers in my json? [\#1997](https://github.com/nlohmann/json/issues/1997) - Compiler error wrt incomplete types changed in gcc8.3.0-26 [\#1996](https://github.com/nlohmann/json/issues/1996) - NaN-like comparison behavior of discarded is inconvenient [\#1988](https://github.com/nlohmann/json/issues/1988) - Maintaining JSON package in my CMake [\#1987](https://github.com/nlohmann/json/issues/1987) - reading int number and string number [\#1986](https://github.com/nlohmann/json/issues/1986) - Build error: keyword is hidden by macro definition! [\#1985](https://github.com/nlohmann/json/issues/1985) - JSON patch diff for op=add formation is not as per standard \(RFC 6902\) [\#1983](https://github.com/nlohmann/json/issues/1983) - json\_pointer.contains\(\) exception is incorrectly raised [\#1982](https://github.com/nlohmann/json/issues/1982) - Error with non existing key [\#1981](https://github.com/nlohmann/json/issues/1981) - Closed [\#1978](https://github.com/nlohmann/json/issues/1978) - Where is the library built and what is the name? [\#1977](https://github.com/nlohmann/json/issues/1977) - The cmake\_import example does not build [\#1976](https://github.com/nlohmann/json/issues/1976) - Dumping core when reading invalid file [\#1975](https://github.com/nlohmann/json/issues/1975) - Abort in dump\(\) method [\#1973](https://github.com/nlohmann/json/issues/1973) - Unclear docs regarding parser\_callback\_t callbacks [\#1972](https://github.com/nlohmann/json/issues/1972) - Possible memory leak on push\_back [\#1971](https://github.com/nlohmann/json/issues/1971) - Is it possible to get a safe mutable reference/pointer to internal variant used in nlohmann json? [\#1970](https://github.com/nlohmann/json/issues/1970) - Getting a flatten json to map\ [\#1957](https://github.com/nlohmann/json/issues/1957) - forced type conversion or lexical cast without exception. [\#1955](https://github.com/nlohmann/json/issues/1955) - Add json\_view type support to avoid excessive copying [\#1954](https://github.com/nlohmann/json/issues/1954) - Adding "examples" section for real-life usages [\#1953](https://github.com/nlohmann/json/issues/1953) - Add nlohmann::json::key\_type [\#1951](https://github.com/nlohmann/json/issues/1951) - cannot use operator\[\] with a string argument with string [\#1949](https://github.com/nlohmann/json/issues/1949) - std::ifstream \>\> json error [\#1948](https://github.com/nlohmann/json/issues/1948) - Cannot update json data in an iterator? [\#1947](https://github.com/nlohmann/json/issues/1947) - How can i build this library in VS 2017? [\#1943](https://github.com/nlohmann/json/issues/1943) - json\_pointer.contains\(\) exceptions when path not found [\#1942](https://github.com/nlohmann/json/issues/1942) - Nested objects serialize/deserialize [\#1941](https://github.com/nlohmann/json/issues/1941) - Compile warning on architectures that are not x86 [\#1939](https://github.com/nlohmann/json/issues/1939) - Version of nlohmann-json-dev in debian packages [\#1938](https://github.com/nlohmann/json/issues/1938) - Create a json object for every cycle [\#1937](https://github.com/nlohmann/json/issues/1937) - How to get the object name? [\#1936](https://github.com/nlohmann/json/issues/1936) - Reserve and resize function for basic json [\#1935](https://github.com/nlohmann/json/issues/1935) - How to use json parse in tsl::ordread\_map? [\#1934](https://github.com/nlohmann/json/issues/1934) - C++14 support is not enabled with msvc2015 [\#1932](https://github.com/nlohmann/json/issues/1932) - Need help with to\_json for derived class, keep getting "cannot use operator" [\#1931](https://github.com/nlohmann/json/issues/1931) - How to handle std::vector\ [\#1930](https://github.com/nlohmann/json/issues/1930) - Heap corruption issue [\#1929](https://github.com/nlohmann/json/issues/1929) - Add `std::wistream` support. [\#1928](https://github.com/nlohmann/json/issues/1928) - This i can write and read any file thanks [\#1927](https://github.com/nlohmann/json/issues/1927) - How can I get this simple example working? [\#1926](https://github.com/nlohmann/json/issues/1926) - emplace\_back does not seems to work with the int 0 [\#1925](https://github.com/nlohmann/json/issues/1925) - Why nlohmann does not release memory [\#1924](https://github.com/nlohmann/json/issues/1924) - Is it possible to have template `json::parse` with `noexcept` specifier? [\#1922](https://github.com/nlohmann/json/issues/1922) - JSON to wstring? [\#1921](https://github.com/nlohmann/json/issues/1921) - GCC 10 tests build failure [\#1920](https://github.com/nlohmann/json/issues/1920) - Size of binary json representations [\#1919](https://github.com/nlohmann/json/issues/1919) - Accessing strings \(for example in keys or values\) without having the lib create a copy of it. [\#1916](https://github.com/nlohmann/json/issues/1916) - operator== documentation should show how to apply custom comparison function [\#1915](https://github.com/nlohmann/json/issues/1915) - char8\_t and std::u8string support [\#1914](https://github.com/nlohmann/json/issues/1914) - std::is\_pod is deprecated in C++20 [\#1913](https://github.com/nlohmann/json/issues/1913) - Incomplete types reported by \(experimental\) GCC10 [\#1912](https://github.com/nlohmann/json/issues/1912) - Compile warnings on MSVC 14.2 [\#1911](https://github.com/nlohmann/json/issues/1911) - How to parse json file with type composition of std::optional and std::variant [\#1910](https://github.com/nlohmann/json/issues/1910) - why root\_schema be implemented as unique\_ptr in json-validator.cpp,could I use it as shared\_ptr? [\#1908](https://github.com/nlohmann/json/issues/1908) - compile error in gcc-6.3.0 [\#1906](https://github.com/nlohmann/json/issues/1906) - Scalar constexpr is odr-used when used as json initializer [\#1905](https://github.com/nlohmann/json/issues/1905) - install Slack app [\#1904](https://github.com/nlohmann/json/issues/1904) - typo in a comment [\#1903](https://github.com/nlohmann/json/issues/1903) - Watch JSON variables in Debug [\#1902](https://github.com/nlohmann/json/issues/1902) - does Json sdk cares about dfc dfd utf8 issue? [\#1901](https://github.com/nlohmann/json/issues/1901) - Allow multiple line string value in JSON [\#1897](https://github.com/nlohmann/json/issues/1897) - Writing map to json file [\#1896](https://github.com/nlohmann/json/issues/1896) - Small documentation mistake [\#1895](https://github.com/nlohmann/json/issues/1895) - why static function `parse` cann't find in visual studio 2019 [\#1894](https://github.com/nlohmann/json/issues/1894) - Best way to handle json files with missing key value pairs. [\#1893](https://github.com/nlohmann/json/issues/1893) - accessing json object as multimap [\#1892](https://github.com/nlohmann/json/issues/1892) - What is the best way to parse vec3s into glm::vec3 [\#1891](https://github.com/nlohmann/json/issues/1891) - Get array of items without using vector [\#1890](https://github.com/nlohmann/json/issues/1890) - Build errors \(clang 11.0.0\) on macOS 10.15.2 [\#1889](https://github.com/nlohmann/json/issues/1889) - Multiple arrays to vectors help [\#1888](https://github.com/nlohmann/json/issues/1888) - json::parse\(begin, end\) parse error on first character using uchar\* [\#1887](https://github.com/nlohmann/json/issues/1887) - issue in free\(\) [\#1886](https://github.com/nlohmann/json/issues/1886) - is\_number\_unsigned\(\) returns false for positive integers \(int or 0 or 1 literals\) [\#1885](https://github.com/nlohmann/json/issues/1885) - MSVC build failure with /Zc:\_\_cplusplus and C++17 [\#1883](https://github.com/nlohmann/json/issues/1883) - RFC 6901 op:replace & arrays [\#1882](https://github.com/nlohmann/json/issues/1882) - Problem with serialization of my custom template doubly-linked list [\#1881](https://github.com/nlohmann/json/issues/1881) - is\_array\(\) is True, but raise 'cannot use operator\[\] for object iterators' [\#1880](https://github.com/nlohmann/json/issues/1880) - Serialize dynamic array [\#1879](https://github.com/nlohmann/json/issues/1879) - Serialization of struct object. [\#1877](https://github.com/nlohmann/json/issues/1877) - warning:c4503 [\#1875](https://github.com/nlohmann/json/issues/1875) - Why are flattened empty objects/arrays not representable? [\#1874](https://github.com/nlohmann/json/issues/1874) - Container Overflow \(ASAN\) when using operator \>\> on an ifs [\#1873](https://github.com/nlohmann/json/issues/1873) - Sub-array to vector or map object? [\#1870](https://github.com/nlohmann/json/issues/1870) - WIP: QT \(cute\) type supports [\#1869](https://github.com/nlohmann/json/issues/1869) - Compiler flags to disable features and shrink code size [\#1868](https://github.com/nlohmann/json/issues/1868) - null strings [\#1867](https://github.com/nlohmann/json/issues/1867) - Struct with array of struct and \_\_attribute\_\_\(\(packed\)\) [\#1866](https://github.com/nlohmann/json/issues/1866) - Best way to extract numbers in the string? [\#1865](https://github.com/nlohmann/json/issues/1865) - Displaying \\?\Volume{guid} from string to json giving error [\#1864](https://github.com/nlohmann/json/issues/1864) - not working when compiling as x86 [\#1863](https://github.com/nlohmann/json/issues/1863) - Skipping evaluation of log line expressions with a macro, is it possible? [\#1862](https://github.com/nlohmann/json/issues/1862) - Suppress warnings [\#1861](https://github.com/nlohmann/json/issues/1861) - conflit with g++ compile option -mwindows [\#1860](https://github.com/nlohmann/json/issues/1860) - How to serialize nested classes to semi-flat JSON object? [\#1859](https://github.com/nlohmann/json/issues/1859) - Memory Requirement for large json file [\#1858](https://github.com/nlohmann/json/issues/1858) - Query a binary format \(BSON, CBOR, MessagePack, UBJSON\) [\#1856](https://github.com/nlohmann/json/issues/1856) - Documentation on operator\[\] behavior with missing keys [\#1855](https://github.com/nlohmann/json/issues/1855) - Problem in converting string into JSON; Can't parse successfully. [\#1854](https://github.com/nlohmann/json/issues/1854) - json.at\_or\_default\(key, defaultval\) [\#1852](https://github.com/nlohmann/json/issues/1852) - please improve the enum conversion documentation \(my example gist provided\) [\#1851](https://github.com/nlohmann/json/issues/1851) - Default value returned on ValueType nlohmann::basic\_json::value \(const typename object\_t::key\_type& key, const ValueType& default\_value\) [\#1850](https://github.com/nlohmann/json/issues/1850) - Accounting for arbitrary precision numerical literals [\#1849](https://github.com/nlohmann/json/issues/1849) - While trying to make a simple array, I get a nested array instead [\#1848](https://github.com/nlohmann/json/issues/1848) - How to reuse the parser and serializer intermediate storage? [\#1847](https://github.com/nlohmann/json/issues/1847) - Too much content in json.hpp leads to slow compilation [\#1845](https://github.com/nlohmann/json/issues/1845) - Cannot read some data in json file [\#1843](https://github.com/nlohmann/json/issues/1843) - Precompiled JSON library? [\#1842](https://github.com/nlohmann/json/issues/1842) - Please change assert into throw\(maybe\) in line 17946 [\#1841](https://github.com/nlohmann/json/issues/1841) - JSON for modern C++ ECCN information [\#1840](https://github.com/nlohmann/json/issues/1840) - CI: reduce build time for Travis valgrind [\#1836](https://github.com/nlohmann/json/issues/1836) - How do I traverse a json object and add new elements into the hierarchy [\#1834](https://github.com/nlohmann/json/issues/1834) - Invalid UTF-8 byte at index 1: 0x65 [\#1831](https://github.com/nlohmann/json/issues/1831) - Serialize big data in json [\#1828](https://github.com/nlohmann/json/issues/1828) - Backslash '\' in value causes exception [\#1827](https://github.com/nlohmann/json/issues/1827) - from\_json for non default constructible class with dependency injection [\#1819](https://github.com/nlohmann/json/issues/1819) - Semi-frequent timeouts in `test-unicode_all` with 3.6.1 \(aarch64\) [\#1816](https://github.com/nlohmann/json/issues/1816) - input\_adapter not user extensible [\#1813](https://github.com/nlohmann/json/issues/1813) - crash at json::destroy on android [\#1812](https://github.com/nlohmann/json/issues/1812) - Logs are repeating while cmake [\#1809](https://github.com/nlohmann/json/issues/1809) - Add a the possibility to add dynamic json objects [\#1795](https://github.com/nlohmann/json/issues/1795) - Unnecessary test data file in the release [\#1790](https://github.com/nlohmann/json/issues/1790) - Add support for parse stack limiting [\#1788](https://github.com/nlohmann/json/issues/1788) - GCC -Wuseless-cast warnings [\#1777](https://github.com/nlohmann/json/issues/1777) - compilation issue with NVCC 9.0 [\#1773](https://github.com/nlohmann/json/issues/1773) - Unexpected behavior with fifo\_map json when copy and append [\#1763](https://github.com/nlohmann/json/issues/1763) - Parse error [\#1761](https://github.com/nlohmann/json/issues/1761) - Assignment \(using value\(\)\) to nonexistent element behaves differently on Xcode 8 vs Xcode 10 [\#1758](https://github.com/nlohmann/json/issues/1758) - Readme out of date [\#1756](https://github.com/nlohmann/json/issues/1756) - cmake\_\* tests don't use the build system's compiler [\#1747](https://github.com/nlohmann/json/issues/1747) - Static assertions for template type properties required [\#1729](https://github.com/nlohmann/json/issues/1729) - Use float and possibly half in json::to\_cbor [\#1719](https://github.com/nlohmann/json/issues/1719) - json::from\_cbor does not respect allow\_exceptions = false when input is string literal [\#1715](https://github.com/nlohmann/json/issues/1715) - /Zc:\_\_cplusplus leads to C2416 [\#1695](https://github.com/nlohmann/json/issues/1695) - `unflatten` vs objects with number-ish keys [\#1575](https://github.com/nlohmann/json/issues/1575) - A "thinner" source code tar as part of release? [\#1572](https://github.com/nlohmann/json/issues/1572) - Repository is almost 450MB [\#1497](https://github.com/nlohmann/json/issues/1497) - Substantial performance penalty caused by polymorphic input adapter [\#1457](https://github.com/nlohmann/json/issues/1457) - Move tests to a separate repo [\#1235](https://github.com/nlohmann/json/issues/1235) - reduce repos size [\#1185](https://github.com/nlohmann/json/issues/1185) - CMakeLists.txt in release zips? [\#1184](https://github.com/nlohmann/json/issues/1184) - Minimal branch? [\#1066](https://github.com/nlohmann/json/issues/1066) - Move test blobs to a submodule? [\#732](https://github.com/nlohmann/json/issues/732) - \[Question\] When using this as git submodule, will it clone the whole thing include test data and benchmark? [\#620](https://github.com/nlohmann/json/issues/620) - Need to improve ignores.. [\#567](https://github.com/nlohmann/json/issues/567) - Minimal repository \(current size very large\) [\#556](https://github.com/nlohmann/json/issues/556) - For a header-only library you have to clone 214MB [\#482](https://github.com/nlohmann/json/issues/482) - 17 MB / 90 MB repo size!? [\#96](https://github.com/nlohmann/json/issues/96) - Improve parse\_ubjson\_fuzzer [\#2182](https://github.com/nlohmann/json/pull/2182) ([tanuj208](https://github.com/tanuj208)) - Add input adapter tests [\#2178](https://github.com/nlohmann/json/pull/2178) ([nlohmann](https://github.com/nlohmann)) - Fix warnings [\#2174](https://github.com/nlohmann/json/pull/2174) ([nlohmann](https://github.com/nlohmann)) - Fix PR\#1006 [\#2158](https://github.com/nlohmann/json/pull/2158) ([dota17](https://github.com/dota17)) - Fix issue\#1972 [\#2153](https://github.com/nlohmann/json/pull/2153) ([dota17](https://github.com/dota17)) - Update URLs to HTTPS [\#2152](https://github.com/nlohmann/json/pull/2152) ([TotalCaesar659](https://github.com/TotalCaesar659)) - Fix Issue\#1813: user defined input adapters [\#2145](https://github.com/nlohmann/json/pull/2145) ([FrancoisChabot](https://github.com/FrancoisChabot)) - Fix issue\#1939: Cast character to unsigned for comparison [\#2144](https://github.com/nlohmann/json/pull/2144) ([XyFreak](https://github.com/XyFreak)) - Fix issue\#2142: readme: fix typo in CMake FetchContent example [\#2143](https://github.com/nlohmann/json/pull/2143) ([quentin-dev](https://github.com/quentin-dev)) - Respect allow\_exceptions=false for binary formats [\#2140](https://github.com/nlohmann/json/pull/2140) ([nlohmann](https://github.com/nlohmann)) - Fix issue 2112 [\#2137](https://github.com/nlohmann/json/pull/2137) ([dota17](https://github.com/dota17)) - Add bleeding edge GCC to CI [\#2136](https://github.com/nlohmann/json/pull/2136) ([aokellermann](https://github.com/aokellermann)) - Clean up implementation of binary type [\#2125](https://github.com/nlohmann/json/pull/2125) ([nlohmann](https://github.com/nlohmann)) - Fixed a compilation error in MSVC [\#2121](https://github.com/nlohmann/json/pull/2121) ([gistrec](https://github.com/gistrec)) - Overwork CI [\#2119](https://github.com/nlohmann/json/pull/2119) ([nlohmann](https://github.com/nlohmann)) - Fix warnings from Clang 10 and GCC 9 [\#2116](https://github.com/nlohmann/json/pull/2116) ([nlohmann](https://github.com/nlohmann)) - Do not include \ when using C++17 [\#2115](https://github.com/nlohmann/json/pull/2115) ([nlohmann](https://github.com/nlohmann)) - Fix issue\#2086: disallow json::value\_t type parameter in value\(\) [\#2104](https://github.com/nlohmann/json/pull/2104) ([dota17](https://github.com/dota17)) - Fix Coveralls integration [\#2100](https://github.com/nlohmann/json/pull/2100) ([nlohmann](https://github.com/nlohmann)) - Add tests for binary values [\#2099](https://github.com/nlohmann/json/pull/2099) ([nlohmann](https://github.com/nlohmann)) - Use external test data [\#2081](https://github.com/nlohmann/json/pull/2081) ([nlohmann](https://github.com/nlohmann)) - Remove Doozer CI [\#2080](https://github.com/nlohmann/json/pull/2080) ([nlohmann](https://github.com/nlohmann)) - Fix README.md. Missing ``` [\#2077](https://github.com/nlohmann/json/pull/2077) ([ArthurSonzogni](https://github.com/ArthurSonzogni)) - Fix error message about invalid surrogate pairs [\#2076](https://github.com/nlohmann/json/pull/2076) ([rmisev](https://github.com/rmisev)) - Add CMake fetchcontent documentation and tests [\#2074](https://github.com/nlohmann/json/pull/2074) ([ArthurSonzogni](https://github.com/ArthurSonzogni)) - Properly pass serialize\_binary to dump function [\#2071](https://github.com/nlohmann/json/pull/2071) ([nlohmann](https://github.com/nlohmann)) - Fix returning reference to local temporary object [\#2069](https://github.com/nlohmann/json/pull/2069) ([nlohmann](https://github.com/nlohmann)) - updated wandbox link [\#2060](https://github.com/nlohmann/json/pull/2060) ([alexandermyasnikov](https://github.com/alexandermyasnikov)) - Fix bug in diff function [\#2054](https://github.com/nlohmann/json/pull/2054) ([nlohmann](https://github.com/nlohmann)) - Fix GCC compiler warnings [\#2053](https://github.com/nlohmann/json/pull/2053) ([nlohmann](https://github.com/nlohmann)) - Fix Clang compiler warnings [\#2051](https://github.com/nlohmann/json/pull/2051) ([nlohmann](https://github.com/nlohmann)) - Update doctest to 2.3.7 [\#2050](https://github.com/nlohmann/json/pull/2050) ([nlohmann](https://github.com/nlohmann)) - Fix issue\#1719 [\#2044](https://github.com/nlohmann/json/pull/2044) ([dota17](https://github.com/dota17)) - Add missing testcase about NaN in unit-constructor1.cpp [\#2043](https://github.com/nlohmann/json/pull/2043) ([dota17](https://github.com/dota17)) - Templatize basic\_json constructor from json\_ref [\#2034](https://github.com/nlohmann/json/pull/2034) ([ArtemSarmini](https://github.com/ArtemSarmini)) - Replace deprecated std::is\_pod [\#2033](https://github.com/nlohmann/json/pull/2033) ([nlohmann](https://github.com/nlohmann)) - Fixes \#1971 \(memory leak in basic\_json::push\_back\) [\#2025](https://github.com/nlohmann/json/pull/2025) ([ArtemSarmini](https://github.com/ArtemSarmini)) - fix \#1982:json\_pointer.contains\(\) exception is incorrectly raised [\#2019](https://github.com/nlohmann/json/pull/2019) ([dota17](https://github.com/dota17)) - Update LICENSE.MIT [\#2010](https://github.com/nlohmann/json/pull/2010) ([magamig](https://github.com/magamig)) - PR for \#2006 to test in AppVeyor. [\#2008](https://github.com/nlohmann/json/pull/2008) ([garethsb](https://github.com/garethsb)) - Added wsjcpp.yml [\#2004](https://github.com/nlohmann/json/pull/2004) ([sea-kg](https://github.com/sea-kg)) - fix error 'setw' is not a member of 'std' in Wandbox example [\#2002](https://github.com/nlohmann/json/pull/2002) ([alexandermyasnikov](https://github.com/alexandermyasnikov)) - catch exceptions for json\_pointer : ..../+99 [\#1990](https://github.com/nlohmann/json/pull/1990) ([dota17](https://github.com/dota17)) - Modify the document about operator== [\#1984](https://github.com/nlohmann/json/pull/1984) ([dota17](https://github.com/dota17)) - Rename argument array\_index to array\_indx in json\_pointer methods [\#1980](https://github.com/nlohmann/json/pull/1980) ([linev](https://github.com/linev)) - README: Fix string representation of `dump`ed `json` [\#1979](https://github.com/nlohmann/json/pull/1979) ([alexweej](https://github.com/alexweej)) - fix warnings in serializer.hpp for VS2019 [\#1969](https://github.com/nlohmann/json/pull/1969) ([dota17](https://github.com/dota17)) - Fix C26451 warnnings in to\_chars.hpp [\#1967](https://github.com/nlohmann/json/pull/1967) ([dota17](https://github.com/dota17)) - appveyor.yml: Compile and test with latest version for \_\_cplusplus ma… [\#1958](https://github.com/nlohmann/json/pull/1958) ([t-b](https://github.com/t-b)) - Fix typo in examples [\#1956](https://github.com/nlohmann/json/pull/1956) ([dota17](https://github.com/dota17)) - templated input adapters [\#1950](https://github.com/nlohmann/json/pull/1950) ([FrancoisChabot](https://github.com/FrancoisChabot)) - Update README.md : add a FAQ about memory release [\#1933](https://github.com/nlohmann/json/pull/1933) ([dota17](https://github.com/dota17)) - Some typos [\#1923](https://github.com/nlohmann/json/pull/1923) ([Coeur](https://github.com/Coeur)) - Fix link to parse function in README [\#1918](https://github.com/nlohmann/json/pull/1918) ([kastiglione](https://github.com/kastiglione)) - Readme: Updated links to hunter repo & docs [\#1917](https://github.com/nlohmann/json/pull/1917) ([jothepro](https://github.com/jothepro)) - Adds instruction for using Build2's package manager [\#1909](https://github.com/nlohmann/json/pull/1909) ([Klaim](https://github.com/Klaim)) - Update README.md [\#1907](https://github.com/nlohmann/json/pull/1907) ([pauljurczak](https://github.com/pauljurczak)) - Fix warning: ignoring return value [\#1871](https://github.com/nlohmann/json/pull/1871) ([sonulohani](https://github.com/sonulohani)) - docs: add central repository as conan source to readme [\#1857](https://github.com/nlohmann/json/pull/1857) ([gocarlos](https://github.com/gocarlos)) - README: Package in MSYS2 renamed to nlohmann-json [\#1853](https://github.com/nlohmann/json/pull/1853) ([podsvirov](https://github.com/podsvirov)) - Fix msvc warnings [\#1846](https://github.com/nlohmann/json/pull/1846) ([MBalszun](https://github.com/MBalszun)) - Update tests that generate CMake projects to use main project's C++ compiler [\#1844](https://github.com/nlohmann/json/pull/1844) ([Tridacnid](https://github.com/Tridacnid)) - make CMake's version config file architecture-independent [\#1746](https://github.com/nlohmann/json/pull/1746) ([uhoreg](https://github.com/uhoreg)) - Add binary type support to all binary file formats, as well as an internally represented binary type [\#1662](https://github.com/nlohmann/json/pull/1662) ([OmnipotentEntity](https://github.com/OmnipotentEntity)) ## [v3.7.3](https://github.com/nlohmann/json/releases/tag/v3.7.3) (2019-11-17) [Full Changelog](https://github.com/nlohmann/json/compare/v3.7.2...v3.7.3) - Project branches [\#1839](https://github.com/nlohmann/json/issues/1839) - Quadratic destruction complexity introduced in \#1436 [\#1837](https://github.com/nlohmann/json/issues/1837) - Trying to open a file [\#1814](https://github.com/nlohmann/json/issues/1814) - Comparing data type with value\_t::number\_integer fails [\#1783](https://github.com/nlohmann/json/issues/1783) - CMake version config file is architecture-dependent [\#1697](https://github.com/nlohmann/json/issues/1697) - Fix quadratic destruction complexity [\#1838](https://github.com/nlohmann/json/pull/1838) ([nickaein](https://github.com/nickaein)) ## [v3.7.2](https://github.com/nlohmann/json/releases/tag/v3.7.2) (2019-11-10) [Full Changelog](https://github.com/nlohmann/json/compare/v3.7.1...v3.7.2) - Segmentation fault in destructor in case of large inputs [\#1835](https://github.com/nlohmann/json/issues/1835) - type\_name\(\) is not consistent with type\(\) [\#1833](https://github.com/nlohmann/json/issues/1833) - json::parse is not a member [\#1832](https://github.com/nlohmann/json/issues/1832) - How do you deal with json\* ? [\#1829](https://github.com/nlohmann/json/issues/1829) - Combined find\_package/add\_subdirectory not linking libraries [\#1771](https://github.com/nlohmann/json/issues/1771) - example code for ifstream reading a json file results in no operator error [\#1766](https://github.com/nlohmann/json/issues/1766) - Warning: unsequenced modification and access to 'range' [\#1674](https://github.com/nlohmann/json/issues/1674) - Segmentation fault \(stack overflow\) due to unbounded recursion [\#1419](https://github.com/nlohmann/json/issues/1419) - Stack-overflow \(OSS-Fuzz 4234\) [\#832](https://github.com/nlohmann/json/issues/832) - Configure WhiteSource Bolt for GitHub [\#1830](https://github.com/nlohmann/json/pull/1830) ([mend-bolt-for-github[bot]](https://github.com/apps/mend-bolt-for-github)) - Prevent stackoverflow caused by recursive deconstruction [\#1436](https://github.com/nlohmann/json/pull/1436) ([nickaein](https://github.com/nickaein)) ## [v3.7.1](https://github.com/nlohmann/json/releases/tag/v3.7.1) (2019-11-06) [Full Changelog](https://github.com/nlohmann/json/compare/v3.7.0...v3.7.1) - std::is\_constructible is always true with tuple [\#1825](https://github.com/nlohmann/json/issues/1825) - Can't compile from\_json\(std::valarray\\). [\#1824](https://github.com/nlohmann/json/issues/1824) - json class should have a get\_or member function [\#1823](https://github.com/nlohmann/json/issues/1823) - NLOHMANN\_JSON\_SERIALIZE\_ENUM macro capture's json objects by value [\#1822](https://github.com/nlohmann/json/issues/1822) - Parse fails when number literals start with zero [\#1820](https://github.com/nlohmann/json/issues/1820) - Weird behaviour of `contains` with `json_pointer` [\#1815](https://github.com/nlohmann/json/issues/1815) - strange behaviour with json\_pointer and .contains\(\) [\#1811](https://github.com/nlohmann/json/issues/1811) - Can \#1695 be re-opened? [\#1808](https://github.com/nlohmann/json/issues/1808) - Merge two json objects [\#1807](https://github.com/nlohmann/json/issues/1807) - std::is\_constructible\\> when to\_json not defined [\#1805](https://github.com/nlohmann/json/issues/1805) - Private data on parsing [\#1802](https://github.com/nlohmann/json/issues/1802) - Capturing Line and Position when querying [\#1800](https://github.com/nlohmann/json/issues/1800) - json error on parsing DBL\_MAX from string [\#1796](https://github.com/nlohmann/json/issues/1796) - De/Serialisation of vector of tupple object with nested obect need Help please [\#1794](https://github.com/nlohmann/json/issues/1794) - Output json is corrupted [\#1793](https://github.com/nlohmann/json/issues/1793) - variable name byte sometimes used as a \#define [\#1792](https://github.com/nlohmann/json/issues/1792) - Can't read json file [\#1791](https://github.com/nlohmann/json/issues/1791) - Problems with special German letters [\#1789](https://github.com/nlohmann/json/issues/1789) - Support for trailing commas [\#1787](https://github.com/nlohmann/json/issues/1787) - json\_pointer construction bug [\#1786](https://github.com/nlohmann/json/issues/1786) - Visual Studio 2017 warning [\#1784](https://github.com/nlohmann/json/issues/1784) - ciso646 header become obsolete [\#1782](https://github.com/nlohmann/json/issues/1782) - Migrate LGTM.com installation from OAuth to GitHub App [\#1781](https://github.com/nlohmann/json/issues/1781) - JSON comparison, contains and operator& [\#1778](https://github.com/nlohmann/json/issues/1778) - pass a json object to a class contructor adds an array around the object [\#1776](https://github.com/nlohmann/json/issues/1776) - 'Float' number\_float\_function\_t template parameter name conflicts with C '\#define Float float' [\#1775](https://github.com/nlohmann/json/issues/1775) - A weird building problem :-\( [\#1774](https://github.com/nlohmann/json/issues/1774) - What is this json\_ref? [\#1772](https://github.com/nlohmann/json/issues/1772) - Interoperability with other languages [\#1770](https://github.com/nlohmann/json/issues/1770) - Json dump [\#1768](https://github.com/nlohmann/json/issues/1768) - json\_pointer\<\>::back\(\) should be const [\#1764](https://github.com/nlohmann/json/issues/1764) - How to get value from array [\#1762](https://github.com/nlohmann/json/issues/1762) - Merge two jsons [\#1757](https://github.com/nlohmann/json/issues/1757) - Unable to locate nlohmann\_jsonConfig.cmake [\#1755](https://github.com/nlohmann/json/issues/1755) - json.hpp won;t compile VS2019 CLR/CLI app but does in console app [\#1754](https://github.com/nlohmann/json/issues/1754) - \[Nested Json Objects\] Segmentation fault [\#1753](https://github.com/nlohmann/json/issues/1753) - remove/replace assert with exceptions [\#1752](https://github.com/nlohmann/json/issues/1752) - Add array support for update\(\) function [\#1751](https://github.com/nlohmann/json/issues/1751) - Is there a reason the `get_to` method is defined in `include/nlohmann/json.hpp` but not in `single_include/nlohmann/json.hpp`? [\#1750](https://github.com/nlohmann/json/issues/1750) - how to validate json object before calling dump\(\) [\#1748](https://github.com/nlohmann/json/issues/1748) - Unable to invoke accessors on json objects in lldb [\#1745](https://github.com/nlohmann/json/issues/1745) - Escaping string before parsing [\#1743](https://github.com/nlohmann/json/issues/1743) - Construction in a member initializer list using curly braces is set as 'array' [\#1742](https://github.com/nlohmann/json/issues/1742) - Read a subkey from json object [\#1740](https://github.com/nlohmann/json/issues/1740) - Serialize vector of glm:vec2 [\#1739](https://github.com/nlohmann/json/issues/1739) - Support nlohmann::basic\_json::value with JSON\_NOEXCEPTION [\#1738](https://github.com/nlohmann/json/issues/1738) - how to know the parse is error [\#1737](https://github.com/nlohmann/json/issues/1737) - How to check if a given key exists in a JSON object [\#1736](https://github.com/nlohmann/json/issues/1736) - Allow The Colon Key-Value Delimiter To Have A Space Before It \[@ READ ONLY\] [\#1735](https://github.com/nlohmann/json/issues/1735) - Allow Tail { "Key": "Value" } Comma \[@ READ ONLY\] [\#1734](https://github.com/nlohmann/json/issues/1734) - No-throw json::value\(\) [\#1733](https://github.com/nlohmann/json/issues/1733) - JsonObject.dump\(\) [\#1732](https://github.com/nlohmann/json/issues/1732) - basic\_json has no member "parse" [\#1731](https://github.com/nlohmann/json/issues/1731) - Exception "type must be string, but is array" [\#1730](https://github.com/nlohmann/json/issues/1730) - json::contains usage to find a path [\#1727](https://github.com/nlohmann/json/issues/1727) - How to create JSON Object from my Structures of Data and Json File from that Object [\#1726](https://github.com/nlohmann/json/issues/1726) - please provide an API to read JSON from file directly. [\#1725](https://github.com/nlohmann/json/issues/1725) - How to modify a value stored at a key? [\#1723](https://github.com/nlohmann/json/issues/1723) - CMake not correctly finding the configuration package for 3.7.0 [\#1721](https://github.com/nlohmann/json/issues/1721) - name typo in the "spack package management" section of README.md [\#1720](https://github.com/nlohmann/json/issues/1720) - How to add json to another json? [\#1718](https://github.com/nlohmann/json/issues/1718) - json::parse\(\) ubsan regression with v3.7.0 [\#1716](https://github.com/nlohmann/json/issues/1716) - What I am doing wrong?!? [\#1714](https://github.com/nlohmann/json/issues/1714) - Potential memory leak detected by Valgrind [\#1713](https://github.com/nlohmann/json/issues/1713) - json::parse is not thread safe? [\#1712](https://github.com/nlohmann/json/issues/1712) - static analysis alarm by cppcheck [\#1711](https://github.com/nlohmann/json/issues/1711) - The compilation time is slow [\#1710](https://github.com/nlohmann/json/issues/1710) - not linking properly with cmake [\#1709](https://github.com/nlohmann/json/issues/1709) - Error in dump\(\) with int64\_t minimum value [\#1708](https://github.com/nlohmann/json/issues/1708) - Crash on trying to deserialize json string on 3ds homebrew [\#1707](https://github.com/nlohmann/json/issues/1707) - Can't compile VS2019. 13 Errors [\#1706](https://github.com/nlohmann/json/issues/1706) - find an object that matches the search criteria [\#1705](https://github.com/nlohmann/json/issues/1705) - IntelliSense goes crazy on VS2019 [\#1704](https://github.com/nlohmann/json/issues/1704) - Installing on Ubuntu 16.04 [\#1703](https://github.com/nlohmann/json/issues/1703) - Where is json::parse now? [\#1702](https://github.com/nlohmann/json/issues/1702) - Forward header should't be amalgamated [\#1700](https://github.com/nlohmann/json/issues/1700) - Json support for Cmake version 2.8.12 [\#1699](https://github.com/nlohmann/json/issues/1699) - Intruisive scientific notation when using .dump\(\); [\#1698](https://github.com/nlohmann/json/issues/1698) - Is there support for automatic serialization/deserialization? [\#1696](https://github.com/nlohmann/json/issues/1696) - on MSVC dump\(\) will hard crash for larger json [\#1693](https://github.com/nlohmann/json/issues/1693) - puzzled implicit conversions [\#1692](https://github.com/nlohmann/json/issues/1692) - Information: My project uses this awesome library [\#1691](https://github.com/nlohmann/json/issues/1691) - Consider listing files explicitly instead of using GLOB [\#1686](https://github.com/nlohmann/json/issues/1686) - Failing tests on MSVC with VS2019 15.9.13 x64 [\#1685](https://github.com/nlohmann/json/issues/1685) - Change from v2 to v3. Encoding with cp1252 [\#1680](https://github.com/nlohmann/json/issues/1680) - How to add Fifo\_map into json using Cmake [\#1679](https://github.com/nlohmann/json/issues/1679) - include.zip should contain meson.build [\#1672](https://github.com/nlohmann/json/issues/1672) - \[Question\] How do I parse JSON into custom types? [\#1669](https://github.com/nlohmann/json/issues/1669) - Binary \(0x05\) data type for BSON to JSON conversion [\#1668](https://github.com/nlohmann/json/issues/1668) - Possible to call dump from lldb? [\#1666](https://github.com/nlohmann/json/issues/1666) - Segmentation fault when linked with libunwind [\#1665](https://github.com/nlohmann/json/issues/1665) - Should I include single-header after my to\_json and from\_json custom functions declaration? Why not? [\#1663](https://github.com/nlohmann/json/issues/1663) - Errors/Warnings in VS 2019 when Including Header File [\#1659](https://github.com/nlohmann/json/issues/1659) - Return null object from object's const operator\[\] as well. [\#1658](https://github.com/nlohmann/json/issues/1658) - Can't stream json object in to std::basic\_stringstream\ [\#1656](https://github.com/nlohmann/json/issues/1656) - C2440 in vs2015 cannot convert from 'initializer-list' to nlohmann::basic\_json [\#1655](https://github.com/nlohmann/json/issues/1655) - Issues around get and pointers [\#1653](https://github.com/nlohmann/json/issues/1653) - Non-member operator== breaks enum \(de\)serialization [\#1647](https://github.com/nlohmann/json/issues/1647) - Valgrind: bytes in 1 blocks are definitely lost [\#1646](https://github.com/nlohmann/json/issues/1646) - Convenient way to make 'basic\_json' accept 'QString' as an key type as well? [\#1640](https://github.com/nlohmann/json/issues/1640) - mongodb: nan, inf [\#1599](https://github.com/nlohmann/json/issues/1599) - Error in adl\_serializer [\#1590](https://github.com/nlohmann/json/issues/1590) - Injecting class during serialization [\#1584](https://github.com/nlohmann/json/issues/1584) - output\_adapter not user extensible [\#1534](https://github.com/nlohmann/json/issues/1534) - Inclusion of nlohmann/json.hpp causes OS/ABI to change on Linux [\#1410](https://github.com/nlohmann/json/issues/1410) - Add library versioning using inline namespaces [\#1394](https://github.com/nlohmann/json/issues/1394) - CBOR byte string support [\#1129](https://github.com/nlohmann/json/issues/1129) - How to deserialize array with derived objects [\#716](https://github.com/nlohmann/json/issues/716) - Add restriction for tuple specialization of to\_json [\#1826](https://github.com/nlohmann/json/pull/1826) ([cbegue](https://github.com/cbegue)) - Fix for \#1647 [\#1821](https://github.com/nlohmann/json/pull/1821) ([AnthonyVH](https://github.com/AnthonyVH)) - Fix issue \#1805 [\#1806](https://github.com/nlohmann/json/pull/1806) ([cbegue](https://github.com/cbegue)) - Fix some spelling errors - mostly in comments & documentation. [\#1803](https://github.com/nlohmann/json/pull/1803) ([flopp](https://github.com/flopp)) - Update Hedley to v11. [\#1799](https://github.com/nlohmann/json/pull/1799) ([nemequ](https://github.com/nemequ)) - iteration\_proxy: Fix integer truncation from std::size\_t to int [\#1797](https://github.com/nlohmann/json/pull/1797) ([t-b](https://github.com/t-b)) - appveyor.yml: Add MSVC 16 2019 support [\#1780](https://github.com/nlohmann/json/pull/1780) ([t-b](https://github.com/t-b)) - test/CMakeLists.txt: Use an explicit list instead of GLOB [\#1779](https://github.com/nlohmann/json/pull/1779) ([t-b](https://github.com/t-b)) - Make json\_pointer::back const \(resolves \#1764\) [\#1769](https://github.com/nlohmann/json/pull/1769) ([chris0x44](https://github.com/chris0x44)) - did you mean 'serialization'? [\#1767](https://github.com/nlohmann/json/pull/1767) ([0xflotus](https://github.com/0xflotus)) - Allow items\(\) to be used with custom string [\#1765](https://github.com/nlohmann/json/pull/1765) ([crazyjul](https://github.com/crazyjul)) - Cppcheck fixes [\#1760](https://github.com/nlohmann/json/pull/1760) ([Xav83](https://github.com/Xav83)) - Fix and add test's for SFINAE problem [\#1741](https://github.com/nlohmann/json/pull/1741) ([tete17](https://github.com/tete17)) - Fix clang sanitizer invocation [\#1728](https://github.com/nlohmann/json/pull/1728) ([t-b](https://github.com/t-b)) - Add gcc 9 and compile with experimental C++20 support [\#1724](https://github.com/nlohmann/json/pull/1724) ([t-b](https://github.com/t-b)) - Fix int64 min issue [\#1722](https://github.com/nlohmann/json/pull/1722) ([t-b](https://github.com/t-b)) - release: add singleinclude and meson.build to include.zip [\#1694](https://github.com/nlohmann/json/pull/1694) ([eli-schwartz](https://github.com/eli-schwartz)) ## [v3.7.0](https://github.com/nlohmann/json/releases/tag/v3.7.0) (2019-07-28) [Full Changelog](https://github.com/nlohmann/json/compare/v3.6.1...v3.7.0) - How can I retrieve uknown strings from json file in my C++ program. [\#1684](https://github.com/nlohmann/json/issues/1684) - contains\(\) is sometimes causing stack-based buffer overrun exceptions [\#1683](https://github.com/nlohmann/json/issues/1683) - How to deserialize arrays from json [\#1681](https://github.com/nlohmann/json/issues/1681) - Compilation failed in VS2015 [\#1678](https://github.com/nlohmann/json/issues/1678) - Why the compiled object file is so huge? [\#1677](https://github.com/nlohmann/json/issues/1677) - From Version 2.1.1 to 3.6.1 serialize std::set [\#1676](https://github.com/nlohmann/json/issues/1676) - Qt deprecation model halting compiltion [\#1675](https://github.com/nlohmann/json/issues/1675) - Build For Raspberry pi , Rapbery with new Compiler C++17 [\#1671](https://github.com/nlohmann/json/issues/1671) - Build from Raspberry pi [\#1667](https://github.com/nlohmann/json/issues/1667) - Can not translate map with integer key to dict string ? [\#1664](https://github.com/nlohmann/json/issues/1664) - Double type converts to scientific notation [\#1661](https://github.com/nlohmann/json/issues/1661) - Missing v3.6.1 tag on master branch [\#1657](https://github.com/nlohmann/json/issues/1657) - Support Fleese Binary Data Format [\#1654](https://github.com/nlohmann/json/issues/1654) - Suggestion: replace alternative tokens for !, && and || with their symbols [\#1652](https://github.com/nlohmann/json/issues/1652) - Build failure test-allocator.vcxproj [\#1651](https://github.com/nlohmann/json/issues/1651) - How to provide function json& to\_json\(\) which is similar as 'void to\_json\(json&j, const CObject& obj\)' ? [\#1650](https://github.com/nlohmann/json/issues/1650) - Can't throw exception when starting file is a number [\#1649](https://github.com/nlohmann/json/issues/1649) - to\_json / from\_json with nested type [\#1648](https://github.com/nlohmann/json/issues/1648) - How to create a json object from a std::string, created by j.dump? [\#1645](https://github.com/nlohmann/json/issues/1645) - Problem getting vector \(array\) of strings [\#1644](https://github.com/nlohmann/json/issues/1644) - json.hpp compilation issue with other typedefs with same name [\#1642](https://github.com/nlohmann/json/issues/1642) - nlohmann::adl\_serializer\::to\_json no matching overloaded function found [\#1641](https://github.com/nlohmann/json/issues/1641) - overwrite adl\_serializer\ to change behaviour [\#1638](https://github.com/nlohmann/json/issues/1638) - json.SelectToken\("Manufacturers.Products.Price"\); [\#1637](https://github.com/nlohmann/json/issues/1637) - Add json type as value [\#1636](https://github.com/nlohmann/json/issues/1636) - Unit conversion test error: conversion from 'nlohmann::json' to non-scalar type 'std::string\_view' requested [\#1634](https://github.com/nlohmann/json/issues/1634) - nlohmann VS JsonCpp by C++17 [\#1633](https://github.com/nlohmann/json/issues/1633) - To integrate an inline helper function that return type name as string [\#1632](https://github.com/nlohmann/json/issues/1632) - Return JSON as reference [\#1631](https://github.com/nlohmann/json/issues/1631) - Updating from an older version causes problems with assing a json object to a struct [\#1630](https://github.com/nlohmann/json/issues/1630) - Can without default constructor function for user defined classes when only to\_json is needed? [\#1629](https://github.com/nlohmann/json/issues/1629) - Compilation fails with clang 6.x-8.x in C++14 mode [\#1628](https://github.com/nlohmann/json/issues/1628) - Treating floating point as string [\#1627](https://github.com/nlohmann/json/issues/1627) - error parsing character å [\#1626](https://github.com/nlohmann/json/issues/1626) - \[Help\] How to Improve Json Output Performance with Large Json Arrays [\#1624](https://github.com/nlohmann/json/issues/1624) - Suggested link changes for reporting new issues \[blob/develop/REAME.md and blob/develop/.github/CONTRIBUTING.md\] [\#1623](https://github.com/nlohmann/json/issues/1623) - Broken link to issue template in CONTRIBUTING.md [\#1622](https://github.com/nlohmann/json/issues/1622) - Missing word in README.md file [\#1621](https://github.com/nlohmann/json/issues/1621) - Package manager instructions in README for brew is incorrect [\#1620](https://github.com/nlohmann/json/issues/1620) - Building with Visual Studio 2019 [\#1619](https://github.com/nlohmann/json/issues/1619) - Precedence of to\_json and builtin harmful [\#1617](https://github.com/nlohmann/json/issues/1617) - The type json is missing from the html documentation [\#1616](https://github.com/nlohmann/json/issues/1616) - variant is not support in Release 3.6.1? [\#1615](https://github.com/nlohmann/json/issues/1615) - Replace assert with throw for const operator\[\] [\#1614](https://github.com/nlohmann/json/issues/1614) - Memory Overhead is Too High \(10x or more\) [\#1613](https://github.com/nlohmann/json/issues/1613) - program crash everytime, when other data type incomming in json stream as expected [\#1612](https://github.com/nlohmann/json/issues/1612) - Improved Enum Support [\#1611](https://github.com/nlohmann/json/issues/1611) - is it possible convert json object back to stl container ? [\#1610](https://github.com/nlohmann/json/issues/1610) - Add C++17-like emplace.back\(\) for arrays. [\#1609](https://github.com/nlohmann/json/issues/1609) - is\_nothrow\_copy\_constructible fails for json::const\_iterator on MSVC2015 x86 Debug build [\#1608](https://github.com/nlohmann/json/issues/1608) - Reading and writing array elements [\#1607](https://github.com/nlohmann/json/issues/1607) - Converting json::value to int [\#1605](https://github.com/nlohmann/json/issues/1605) - I have a vector of keys and and a string of value and i want to create nested json array [\#1604](https://github.com/nlohmann/json/issues/1604) - In compatible JSON object from nlohmann::json to nohman::json - unexpected end of input; expected '\[', '{', or a literal [\#1603](https://github.com/nlohmann/json/issues/1603) - json parser crash if having a large number integer in message [\#1602](https://github.com/nlohmann/json/issues/1602) - Value method with undocumented throwing 302 exception [\#1601](https://github.com/nlohmann/json/issues/1601) - Accessing value with json pointer adds key if not existing [\#1600](https://github.com/nlohmann/json/issues/1600) - README.md broken link to project documentation [\#1597](https://github.com/nlohmann/json/issues/1597) - Random Kudos: Thanks for your work on this! [\#1596](https://github.com/nlohmann/json/issues/1596) - json::parse return value and errors [\#1595](https://github.com/nlohmann/json/issues/1595) - initializer list constructor makes curly brace initialization fragile [\#1594](https://github.com/nlohmann/json/issues/1594) - trying to log message for missing keyword, difference between \["foo"\] and at\("foo"\) [\#1593](https://github.com/nlohmann/json/issues/1593) - std::string and std::wstring `to_json` [\#1592](https://github.com/nlohmann/json/issues/1592) - I have a C structure which I need to convert to a JSON. How do I do it? Haven't found proper examples so far. [\#1591](https://github.com/nlohmann/json/issues/1591) - dump\_escaped possible error ? [\#1589](https://github.com/nlohmann/json/issues/1589) - json::parse\(\) into a vector\ results in unhandled exception [\#1587](https://github.com/nlohmann/json/issues/1587) - push\_back\(\)/emplace\_back\(\) on array invalidates pointers to existing array items [\#1586](https://github.com/nlohmann/json/issues/1586) - Getting nlohmann::detail::parse\_error on JSON generated by nlohmann::json not sure why [\#1583](https://github.com/nlohmann/json/issues/1583) - getting error terminate called after throwing an instance of 'std::domain\_error' what\(\): cannot use at\(\) with string [\#1582](https://github.com/nlohmann/json/issues/1582) - how i create json file [\#1581](https://github.com/nlohmann/json/issues/1581) - prevent rounding of double datatype values [\#1580](https://github.com/nlohmann/json/issues/1580) - Documentation Container Overview Doesn't Reference Const Methods [\#1579](https://github.com/nlohmann/json/issues/1579) - Writing an array into a nlohmann::json object [\#1578](https://github.com/nlohmann/json/issues/1578) - compilation error when using with another library [\#1577](https://github.com/nlohmann/json/issues/1577) - Homebrew on OSX doesn't install cmake config file [\#1576](https://github.com/nlohmann/json/issues/1576) - JSON Parse Out of Range Error [\#1574](https://github.com/nlohmann/json/issues/1574) - Integrating into existing CMake Project [\#1573](https://github.com/nlohmann/json/issues/1573) - conversion to std::string failed [\#1571](https://github.com/nlohmann/json/issues/1571) - jPtr operation does not throw [\#1569](https://github.com/nlohmann/json/issues/1569) - How to generate dll file for this project [\#1568](https://github.com/nlohmann/json/issues/1568) - how to pass variable data to json in c [\#1567](https://github.com/nlohmann/json/issues/1567) - I want to achieve an upgraded function. [\#1566](https://github.com/nlohmann/json/issues/1566) - How to determine the type of elements read from a JSON array? [\#1564](https://github.com/nlohmann/json/issues/1564) - try\_get\_to [\#1563](https://github.com/nlohmann/json/issues/1563) - example code compile error [\#1562](https://github.com/nlohmann/json/issues/1562) - How to iterate over nested json object [\#1561](https://github.com/nlohmann/json/issues/1561) - Build Option/Separate Function to Allow to Throw on Duplicate Keys [\#1560](https://github.com/nlohmann/json/issues/1560) - Compiler Switches -Weffc++ & -Wshadow are throwing errors [\#1558](https://github.com/nlohmann/json/issues/1558) - warning: use of the 'nodiscard' attribute is a C++17 extension [\#1557](https://github.com/nlohmann/json/issues/1557) - Import/Export compressed JSON files [\#1556](https://github.com/nlohmann/json/issues/1556) - GDB renderers for json library [\#1554](https://github.com/nlohmann/json/issues/1554) - Is it possible to construct a json string object from a binary buffer? [\#1553](https://github.com/nlohmann/json/issues/1553) - json objects in list [\#1552](https://github.com/nlohmann/json/issues/1552) - Matrix output [\#1550](https://github.com/nlohmann/json/issues/1550) - Using json merge\_patch on ordered non-alphanumeric datasets [\#1549](https://github.com/nlohmann/json/issues/1549) - Invalid parsed value for big integer [\#1548](https://github.com/nlohmann/json/issues/1548) - Integrating with android ndk issues. [\#1547](https://github.com/nlohmann/json/issues/1547) - add noexcept json::value\("key", default\) method variant? [\#1546](https://github.com/nlohmann/json/issues/1546) - Thank you! 🙌 [\#1545](https://github.com/nlohmann/json/issues/1545) - Output and input matrix [\#1544](https://github.com/nlohmann/json/issues/1544) - Add regression tests for MSVC [\#1543](https://github.com/nlohmann/json/issues/1543) - \[Help Needed!\] Season of Docs [\#1542](https://github.com/nlohmann/json/issues/1542) - program still abort\(\) or exit\(\) with try catch [\#1541](https://github.com/nlohmann/json/issues/1541) - Have a json::type\_error exception because of JSON object [\#1540](https://github.com/nlohmann/json/issues/1540) - Quoted numbers [\#1538](https://github.com/nlohmann/json/issues/1538) - Reading a JSON file into an object [\#1537](https://github.com/nlohmann/json/issues/1537) - Releases 3.6.0 and 3.6.1 don't build on conda / windows [\#1536](https://github.com/nlohmann/json/issues/1536) - \[Clang\] warning: use of the 'nodiscard' attribute is a C++17 extension \[-Wc++17-extensions\] [\#1535](https://github.com/nlohmann/json/issues/1535) - wchar\_t/std::wstring json can be created but not accessed [\#1533](https://github.com/nlohmann/json/issues/1533) - json stringify [\#1532](https://github.com/nlohmann/json/issues/1532) - How can I use it from gcc on RPI [\#1528](https://github.com/nlohmann/json/issues/1528) - std::pair treated as an array instead of key-value in `std::vector>` [\#1520](https://github.com/nlohmann/json/issues/1520) - Excessive Memory Usage for Large Json File [\#1516](https://github.com/nlohmann/json/issues/1516) - SAX dumper [\#1512](https://github.com/nlohmann/json/issues/1512) - Conversion to user type containing a std::vector not working with documented approach [\#1511](https://github.com/nlohmann/json/issues/1511) - Inconsistent use of type alias. [\#1507](https://github.com/nlohmann/json/issues/1507) - Is there a current way to represent strings as json int? [\#1503](https://github.com/nlohmann/json/issues/1503) - Intermittent issues with loadJSON [\#1484](https://github.com/nlohmann/json/issues/1484) - use json construct std::string [\#1462](https://github.com/nlohmann/json/issues/1462) - JSON Creation [\#1461](https://github.com/nlohmann/json/issues/1461) - Null bytes in files are treated like EOF [\#1095](https://github.com/nlohmann/json/issues/1095) - Feature: to\_string\(const json& j\); [\#916](https://github.com/nlohmann/json/issues/916) - Use GNUInstallDirs instead of hard-coded path. [\#1673](https://github.com/nlohmann/json/pull/1673) ([ghost](https://github.com/ghost)) - Package Manager: MSYS2 \(pacman\) [\#1670](https://github.com/nlohmann/json/pull/1670) ([podsvirov](https://github.com/podsvirov)) - Fix json.hpp compilation issue with other typedefs with same name \(Issue \#1642\) [\#1643](https://github.com/nlohmann/json/pull/1643) ([kevinlul](https://github.com/kevinlul)) - Add explicit conversion from json to std::string\_view in conversion unit test [\#1639](https://github.com/nlohmann/json/pull/1639) ([taylorhoward92](https://github.com/taylorhoward92)) - Minor fixes in docs [\#1625](https://github.com/nlohmann/json/pull/1625) ([nickaein](https://github.com/nickaein)) - Fix broken links to documentation [\#1598](https://github.com/nlohmann/json/pull/1598) ([nickaein](https://github.com/nickaein)) - Added to\_string and added basic tests [\#1585](https://github.com/nlohmann/json/pull/1585) ([Macr0Nerd](https://github.com/Macr0Nerd)) - Regression tests for MSVC [\#1570](https://github.com/nlohmann/json/pull/1570) ([nickaein](https://github.com/nickaein)) - Fix/1511 [\#1555](https://github.com/nlohmann/json/pull/1555) ([theodelrieu](https://github.com/theodelrieu)) - Remove C++17 extension warning from clang; \#1535 [\#1551](https://github.com/nlohmann/json/pull/1551) ([heavywatal](https://github.com/heavywatal)) - moved from Catch to doctest for unit tests [\#1439](https://github.com/nlohmann/json/pull/1439) ([onqtam](https://github.com/onqtam)) ## [v3.6.1](https://github.com/nlohmann/json/releases/tag/v3.6.1) (2019-03-20) [Full Changelog](https://github.com/nlohmann/json/compare/3.6.1...v3.6.1) ## [3.6.1](https://github.com/nlohmann/json/releases/tag/3.6.1) (2019-03-20) [Full Changelog](https://github.com/nlohmann/json/compare/v3.6.0...3.6.1) - Failed to build with \ [\#1531](https://github.com/nlohmann/json/issues/1531) - Compiling 3.6.0 with GCC \> 7, array vs std::array \#590 is back [\#1530](https://github.com/nlohmann/json/issues/1530) - 3.6.0: warning: missing initializer for member 'std::array\::\_M\_elems' \[-Wmissing-field-initializers\] [\#1527](https://github.com/nlohmann/json/issues/1527) - unable to parse json [\#1525](https://github.com/nlohmann/json/issues/1525) ## [v3.6.0](https://github.com/nlohmann/json/releases/tag/v3.6.0) (2019-03-19) [Full Changelog](https://github.com/nlohmann/json/compare/v3.5.0...v3.6.0) - How can I turn a string of a json array into a json array? [\#1526](https://github.com/nlohmann/json/issues/1526) - Minor: missing a std:: namespace tag [\#1521](https://github.com/nlohmann/json/issues/1521) - how to precision to four decimal for double when use to\_json [\#1519](https://github.com/nlohmann/json/issues/1519) - error parse [\#1518](https://github.com/nlohmann/json/issues/1518) - Compile error: template argument deduction/substitution failed [\#1515](https://github.com/nlohmann/json/issues/1515) - std::complex type [\#1510](https://github.com/nlohmann/json/issues/1510) - CBOR byte string support [\#1509](https://github.com/nlohmann/json/issues/1509) - Compilation error getting a std::pair\<\> on latest VS 2017 compiler [\#1506](https://github.com/nlohmann/json/issues/1506) - "Integration" section of documentation needs update? [\#1505](https://github.com/nlohmann/json/issues/1505) - Json object from string from a TCP socket [\#1504](https://github.com/nlohmann/json/issues/1504) - MSVC warning C4946 \("reinterpret\_cast used between related classes"\) compiling json.hpp [\#1502](https://github.com/nlohmann/json/issues/1502) - How to programmatically fill an n-th dimensional JSON object? [\#1501](https://github.com/nlohmann/json/issues/1501) - Error compiling with clang and `JSON_NOEXCEPTION`: need to include `cstdlib` [\#1500](https://github.com/nlohmann/json/issues/1500) - The code compiles unsuccessfully with android-ndk-r10e [\#1499](https://github.com/nlohmann/json/issues/1499) - Cmake 3.1 in develop, when is it likely to make it into a stable release? [\#1498](https://github.com/nlohmann/json/issues/1498) - Some Help please object inside array [\#1494](https://github.com/nlohmann/json/issues/1494) - How to get data into vector of user-defined type from a Json object [\#1493](https://github.com/nlohmann/json/issues/1493) - how to find subelement without loop [\#1490](https://github.com/nlohmann/json/issues/1490) - json to std::map [\#1487](https://github.com/nlohmann/json/issues/1487) - Type in README.md [\#1486](https://github.com/nlohmann/json/issues/1486) - Error in parsing and reading msgpack-lite [\#1485](https://github.com/nlohmann/json/issues/1485) - Compiling issues with libc 2.12 [\#1483](https://github.com/nlohmann/json/issues/1483) - How do I use reference or pointer binding values? [\#1482](https://github.com/nlohmann/json/issues/1482) - Compilation fails in MSVC with the Microsoft Language Extensions disabled [\#1481](https://github.com/nlohmann/json/issues/1481) - Functional visit [\#1480](https://github.com/nlohmann/json/issues/1480) - \[Question\] Unescaped dump [\#1479](https://github.com/nlohmann/json/issues/1479) - Some Help please [\#1478](https://github.com/nlohmann/json/issues/1478) - Global variables are stored within the JSON file, how do I declare them as global variables when I read them out in my C++ program? [\#1476](https://github.com/nlohmann/json/issues/1476) - Unable to modify one of the values within the JSON file, and save it [\#1475](https://github.com/nlohmann/json/issues/1475) - Documentation of parse function has two identical @pre causes [\#1473](https://github.com/nlohmann/json/issues/1473) - GCC 9.0 build failure [\#1472](https://github.com/nlohmann/json/issues/1472) - Can we have an `exists()` method? [\#1471](https://github.com/nlohmann/json/issues/1471) - How to parse multi object json from file? [\#1470](https://github.com/nlohmann/json/issues/1470) - How to returns the name of the upper object? [\#1467](https://github.com/nlohmann/json/issues/1467) - Error: "tuple\_size" has already been declared in the current scope [\#1466](https://github.com/nlohmann/json/issues/1466) - Checking keys of two jsons against eachother [\#1465](https://github.com/nlohmann/json/issues/1465) - Disable installation when used as meson subproject [\#1463](https://github.com/nlohmann/json/issues/1463) - Unpack list of integers to a std::vector\ [\#1460](https://github.com/nlohmann/json/issues/1460) - Implement DRY definition of JSON representation of a c++ class [\#1459](https://github.com/nlohmann/json/issues/1459) - json.exception.type\_error.305 with GCC 4.9 when using C++ {} initializer [\#1458](https://github.com/nlohmann/json/issues/1458) - API to convert an "uninitialized" json into an empty object or empty array [\#1456](https://github.com/nlohmann/json/issues/1456) - How to parse a vector of objects with const attributes [\#1453](https://github.com/nlohmann/json/issues/1453) - NLOHMANN\_JSON\_SERIALIZE\_ENUM potentially requires duplicate definitions [\#1450](https://github.com/nlohmann/json/issues/1450) - Question about making json object from file directory [\#1449](https://github.com/nlohmann/json/issues/1449) - .get\(\) throws error if used with userdefined structs in unordered\_map [\#1448](https://github.com/nlohmann/json/issues/1448) - Integer Overflow \(OSS-Fuzz 12506\) [\#1447](https://github.com/nlohmann/json/issues/1447) - If a string has too many invalid UTF-8 characters, json::dump attempts to index an array out of bounds. [\#1445](https://github.com/nlohmann/json/issues/1445) - Setting values of .JSON file [\#1444](https://github.com/nlohmann/json/issues/1444) - alias object\_t::key\_type in basic\_json [\#1442](https://github.com/nlohmann/json/issues/1442) - Latest Ubuntu package is 2.1.1 [\#1438](https://github.com/nlohmann/json/issues/1438) - lexer.hpp\(1363\) '\_snprintf': is not a member | Visualstudio 2017 [\#1437](https://github.com/nlohmann/json/issues/1437) - Static method invites inadvertent logic error. [\#1433](https://github.com/nlohmann/json/issues/1433) - EOS compilation produces "fatal error: 'nlohmann/json.hpp' file not found" [\#1432](https://github.com/nlohmann/json/issues/1432) - Support for bad commas [\#1429](https://github.com/nlohmann/json/issues/1429) - Please have one base exception class for all json exceptions [\#1427](https://github.com/nlohmann/json/issues/1427) - Compilation warning: 'tuple\_size' defined as a class template here but previously declared as a struct template [\#1426](https://github.com/nlohmann/json/issues/1426) - Which version can be used with GCC 4.8.2 ? [\#1424](https://github.com/nlohmann/json/issues/1424) - Ignore nullptr values on constructing json object from a container [\#1422](https://github.com/nlohmann/json/issues/1422) - Support for custom float precision via unquoted strings [\#1421](https://github.com/nlohmann/json/issues/1421) - It is possible to call `json::find` with a json\_pointer as argument. This causes runtime UB/crash. [\#1418](https://github.com/nlohmann/json/issues/1418) - Dump throwing exception [\#1416](https://github.com/nlohmann/json/issues/1416) - Build error [\#1415](https://github.com/nlohmann/json/issues/1415) - Append version to include.zip [\#1412](https://github.com/nlohmann/json/issues/1412) - error C2039: '\_snprintf': is not a member of 'std' - Windows [\#1408](https://github.com/nlohmann/json/issues/1408) - Deserializing to vector [\#1407](https://github.com/nlohmann/json/issues/1407) - Efficient way to set a `json` object as value into another `json` key [\#1406](https://github.com/nlohmann/json/issues/1406) - Document return value of parse\(\) when allow\_exceptions == false and parsing fails [\#1405](https://github.com/nlohmann/json/issues/1405) - Unexpected behaviour with structured binding [\#1404](https://github.com/nlohmann/json/issues/1404) - Which native types does get\\(\) allow? [\#1403](https://github.com/nlohmann/json/issues/1403) - Add something like Json::StaticString [\#1402](https://github.com/nlohmann/json/issues/1402) - -Wmismatched-tags in 3.5.0? [\#1401](https://github.com/nlohmann/json/issues/1401) - Coverity Scan reports an UNCAUGHT\_EXCEPT issue [\#1400](https://github.com/nlohmann/json/issues/1400) - fff [\#1399](https://github.com/nlohmann/json/issues/1399) - sorry this is not an issue, just a Question, How to change a key value in a file and save it ? [\#1398](https://github.com/nlohmann/json/issues/1398) - appveyor x64 builds appear to be using Win32 toolset [\#1374](https://github.com/nlohmann/json/issues/1374) - Serializing/Deserializing a Class containing a vector of itself [\#1373](https://github.com/nlohmann/json/issues/1373) - Retrieving array elements. [\#1369](https://github.com/nlohmann/json/issues/1369) - Deserialize [\#1366](https://github.com/nlohmann/json/issues/1366) - call of overloaded for push\_back and operator+= is ambiguous [\#1352](https://github.com/nlohmann/json/issues/1352) - got an error and cann't figure it out [\#1351](https://github.com/nlohmann/json/issues/1351) - Improve number-to-string conversion [\#1334](https://github.com/nlohmann/json/issues/1334) - Implicit type conversion error on MSVC [\#1333](https://github.com/nlohmann/json/issues/1333) - NuGet Package [\#1132](https://github.com/nlohmann/json/issues/1132) - Change macros to numeric\_limits [\#1514](https://github.com/nlohmann/json/pull/1514) ([naszta](https://github.com/naszta)) - fix GCC 7.1.1 - 7.2.1 on CentOS [\#1496](https://github.com/nlohmann/json/pull/1496) ([lieff](https://github.com/lieff)) - Update Buckaroo instructions in README.md [\#1495](https://github.com/nlohmann/json/pull/1495) ([njlr](https://github.com/njlr)) - Fix gcc9 build error test/src/unit-allocator.cpp \(Issue \#1472\) [\#1492](https://github.com/nlohmann/json/pull/1492) ([stac47](https://github.com/stac47)) - Fix typo in README.md [\#1491](https://github.com/nlohmann/json/pull/1491) ([nickaein](https://github.com/nickaein)) - Do proper endian conversions [\#1489](https://github.com/nlohmann/json/pull/1489) ([andreas-schwab](https://github.com/andreas-schwab)) - Fix documentation [\#1477](https://github.com/nlohmann/json/pull/1477) ([nickaein](https://github.com/nickaein)) - Implement contains\(\) member function [\#1474](https://github.com/nlohmann/json/pull/1474) ([nickaein](https://github.com/nickaein)) - Add operator/= and operator/ to construct a JSON pointer by appending two JSON pointers [\#1469](https://github.com/nlohmann/json/pull/1469) ([garethsb](https://github.com/garethsb)) - Disable Clang -Wmismatched-tags warning on tuple\_size / tuple\_element [\#1468](https://github.com/nlohmann/json/pull/1468) ([past-due](https://github.com/past-due)) - Disable installation when used as meson subproject. \#1463 [\#1464](https://github.com/nlohmann/json/pull/1464) ([elvisoric](https://github.com/elvisoric)) - docs: README typo [\#1455](https://github.com/nlohmann/json/pull/1455) ([wythe](https://github.com/wythe)) - remove extra semicolon from readme [\#1451](https://github.com/nlohmann/json/pull/1451) ([Afforix](https://github.com/Afforix)) - attempt to fix \#1445, flush buffer in serializer::dump\_escaped in UTF8\_REJECT case. [\#1446](https://github.com/nlohmann/json/pull/1446) ([scinart](https://github.com/scinart)) - Use C++11 features supported by CMake 3.1. [\#1441](https://github.com/nlohmann/json/pull/1441) ([iwanders](https://github.com/iwanders)) - :rotating\_light: fixed unused variable warning [\#1435](https://github.com/nlohmann/json/pull/1435) ([pboettch](https://github.com/pboettch)) - allow push\_back\(\) and pop\_back\(\) calls on json\_pointer [\#1434](https://github.com/nlohmann/json/pull/1434) ([pboettch](https://github.com/pboettch)) - Add instructions about using nlohmann/json with the conda package manager [\#1430](https://github.com/nlohmann/json/pull/1430) ([nicoddemus](https://github.com/nicoddemus)) - Updated year in README.md [\#1425](https://github.com/nlohmann/json/pull/1425) ([jef](https://github.com/jef)) - Fixed broken links in the README file [\#1423](https://github.com/nlohmann/json/pull/1423) ([skypjack](https://github.com/skypjack)) - Fixed broken links in the README file [\#1420](https://github.com/nlohmann/json/pull/1420) ([skypjack](https://github.com/skypjack)) - docs: typo in README [\#1417](https://github.com/nlohmann/json/pull/1417) ([wythe](https://github.com/wythe)) - Fix x64 target platform for appveyor [\#1414](https://github.com/nlohmann/json/pull/1414) ([nickaein](https://github.com/nickaein)) - Improve dump\_integer performance [\#1411](https://github.com/nlohmann/json/pull/1411) ([nickaein](https://github.com/nickaein)) - buildsystem: relax requirement on cmake version [\#1409](https://github.com/nlohmann/json/pull/1409) ([yann-morin-1998](https://github.com/yann-morin-1998)) - CMake: Optional Install if Embedded [\#1330](https://github.com/nlohmann/json/pull/1330) ([ax3l](https://github.com/ax3l)) ## [v3.5.0](https://github.com/nlohmann/json/releases/tag/v3.5.0) (2018-12-21) [Full Changelog](https://github.com/nlohmann/json/compare/v3.4.0...v3.5.0) - Copyconstructor inserts original into array with single element [\#1397](https://github.com/nlohmann/json/issues/1397) - Get value without explicit typecasting [\#1395](https://github.com/nlohmann/json/issues/1395) - Big file parsing [\#1393](https://github.com/nlohmann/json/issues/1393) - Adding Structured Binding Support [\#1388](https://github.com/nlohmann/json/issues/1388) - map\ exhibits unexpected behavior [\#1387](https://github.com/nlohmann/json/issues/1387) - Error Code Return [\#1386](https://github.com/nlohmann/json/issues/1386) - using unordered\_map as object type [\#1385](https://github.com/nlohmann/json/issues/1385) - float precision [\#1384](https://github.com/nlohmann/json/issues/1384) - \[json.exception.type\_error.316\] invalid UTF-8 byte at index 1: 0xC3 [\#1383](https://github.com/nlohmann/json/issues/1383) - Inconsistent Constructor \(GCC vs. Clang\) [\#1381](https://github.com/nlohmann/json/issues/1381) - \#define or || [\#1379](https://github.com/nlohmann/json/issues/1379) - How to iterate inside the values ? [\#1377](https://github.com/nlohmann/json/issues/1377) - items\(\) unable to get the elements [\#1375](https://github.com/nlohmann/json/issues/1375) - conversion json to std::map doesn't work for types \ [\#1372](https://github.com/nlohmann/json/issues/1372) - A minor issue in the build instructions [\#1371](https://github.com/nlohmann/json/issues/1371) - Using this library without stream ? [\#1370](https://github.com/nlohmann/json/issues/1370) - Writing and reading BSON data [\#1368](https://github.com/nlohmann/json/issues/1368) - Retrieving array elements from object type iterator. [\#1367](https://github.com/nlohmann/json/issues/1367) - json::dump\(\) silently crashes if items contain accented letters [\#1365](https://github.com/nlohmann/json/issues/1365) - warnings in MSVC \(2015\) in 3.4.0 related to bool... [\#1364](https://github.com/nlohmann/json/issues/1364) - Cant compile with -C++17 and beyond compiler options [\#1362](https://github.com/nlohmann/json/issues/1362) - json to concrete type conversion through reference or pointer fails [\#1361](https://github.com/nlohmann/json/issues/1361) - the first attributes of JSON string is misplaced [\#1360](https://github.com/nlohmann/json/issues/1360) - Copy-construct using initializer-list converts objects to arrays [\#1359](https://github.com/nlohmann/json/issues/1359) - About value\(key, default\_value\) and operator\[\]\(key\) [\#1358](https://github.com/nlohmann/json/issues/1358) - Problem with printing json response object [\#1356](https://github.com/nlohmann/json/issues/1356) - Serializing pointer segfaults [\#1355](https://github.com/nlohmann/json/issues/1355) - Read `long long int` data as a number. [\#1354](https://github.com/nlohmann/json/issues/1354) - eclipse oxygen in ubuntu get\ is ambiguous [\#1353](https://github.com/nlohmann/json/issues/1353) - Can't build on Visual Studio 2017 v15.8.9 [\#1350](https://github.com/nlohmann/json/issues/1350) - cannot parse from string? [\#1349](https://github.com/nlohmann/json/issues/1349) - Error: out\_of\_range [\#1348](https://github.com/nlohmann/json/issues/1348) - expansion pattern 'CompatibleObjectType' contains no argument packs, with CUDA 10 [\#1347](https://github.com/nlohmann/json/issues/1347) - Unable to update a value for a nested\(multi-level\) json file [\#1344](https://github.com/nlohmann/json/issues/1344) - Fails to compile when std::iterator\_traits is not SFINAE friendly. [\#1341](https://github.com/nlohmann/json/issues/1341) - EOF flag not set on exhausted input streams. [\#1340](https://github.com/nlohmann/json/issues/1340) - Shadowed Member in merge\_patch [\#1339](https://github.com/nlohmann/json/issues/1339) - Periods/literal dots in keys? [\#1338](https://github.com/nlohmann/json/issues/1338) - Protect macro expansion of commonly defined macros [\#1337](https://github.com/nlohmann/json/issues/1337) - How to validate an input before parsing? [\#1336](https://github.com/nlohmann/json/issues/1336) - Non-verifying dump\(\) alternative for debugging/logging needed [\#1335](https://github.com/nlohmann/json/issues/1335) - Json Libarary is not responding for me in c++ [\#1332](https://github.com/nlohmann/json/issues/1332) - Question - how to find an object in an array [\#1331](https://github.com/nlohmann/json/issues/1331) - Nesting additional data in json object [\#1328](https://github.com/nlohmann/json/issues/1328) - can to\_json\(\) be defined inside a class? [\#1324](https://github.com/nlohmann/json/issues/1324) - CodeBlocks IDE can't find `json.hpp` header [\#1318](https://github.com/nlohmann/json/issues/1318) - Change json\_pointer to provide an iterator begin/end/etc, don't use vectors, and also enable string\_view [\#1312](https://github.com/nlohmann/json/issues/1312) - Xcode - adding it to library [\#1300](https://github.com/nlohmann/json/issues/1300) - unicode: accept char16\_t, char32\_t sequences [\#1298](https://github.com/nlohmann/json/issues/1298) - unicode: char16\_t\* is compiler error, but char16\_t\[\] is accepted [\#1297](https://github.com/nlohmann/json/issues/1297) - Dockerfile Project Help Needed [\#1296](https://github.com/nlohmann/json/issues/1296) - Comparisons between large unsigned and negative signed integers [\#1295](https://github.com/nlohmann/json/issues/1295) - CMake alias to `nlohmann::json` [\#1291](https://github.com/nlohmann/json/issues/1291) - Release zips without tests [\#1285](https://github.com/nlohmann/json/issues/1285) - separate object\_t::key\_type from basic\_json::key\_type, and use an allocator which returns object\_t::key\_type [\#1274](https://github.com/nlohmann/json/issues/1274) - Is there a nice way to associate external values with json elements? [\#1256](https://github.com/nlohmann/json/issues/1256) - Delete by json\_pointer [\#1248](https://github.com/nlohmann/json/issues/1248) - Expose lexer, as a StAX parser [\#1219](https://github.com/nlohmann/json/issues/1219) - Subclassing json\(\) & error on recursive load [\#1201](https://github.com/nlohmann/json/issues/1201) - Check value for existence by json\_pointer [\#1194](https://github.com/nlohmann/json/issues/1194) - Feature/add file input adapter [\#1392](https://github.com/nlohmann/json/pull/1392) ([dumarjo](https://github.com/dumarjo)) - Added Support for Structured Bindings [\#1391](https://github.com/nlohmann/json/pull/1391) ([pratikpc](https://github.com/pratikpc)) - Link to issue \#958 broken [\#1382](https://github.com/nlohmann/json/pull/1382) ([kjpus](https://github.com/kjpus)) - readme: fix typo [\#1380](https://github.com/nlohmann/json/pull/1380) ([manu-chroma](https://github.com/manu-chroma)) - recommend using explicit from JSON conversions [\#1363](https://github.com/nlohmann/json/pull/1363) ([theodelrieu](https://github.com/theodelrieu)) - Fix merge\_patch shadow warning [\#1346](https://github.com/nlohmann/json/pull/1346) ([ax3l](https://github.com/ax3l)) - Allow installation via Meson [\#1345](https://github.com/nlohmann/json/pull/1345) ([mpoquet](https://github.com/mpoquet)) - Set eofbit on exhausted input stream. [\#1343](https://github.com/nlohmann/json/pull/1343) ([mefyl](https://github.com/mefyl)) - Add a SFINAE friendly iterator\_traits and use that instead. [\#1342](https://github.com/nlohmann/json/pull/1342) ([dgavedissian](https://github.com/dgavedissian)) - Fix EOL Whitespaces & CMake Spelling [\#1329](https://github.com/nlohmann/json/pull/1329) ([ax3l](https://github.com/ax3l)) ## [v3.4.0](https://github.com/nlohmann/json/releases/tag/v3.4.0) (2018-10-30) [Full Changelog](https://github.com/nlohmann/json/compare/v3.3.0...v3.4.0) - Big uint64\_t values are serialized wrong [\#1327](https://github.com/nlohmann/json/issues/1327) - \[Question\] Efficient check for equivalency? [\#1325](https://github.com/nlohmann/json/issues/1325) - Can't use ifstream and .clear\(\) [\#1321](https://github.com/nlohmann/json/issues/1321) - \[Warning\] -Wparentheses on line 555 on single\_include [\#1319](https://github.com/nlohmann/json/issues/1319) - Compilation error using at and find with enum struct [\#1316](https://github.com/nlohmann/json/issues/1316) - Parsing JSON from a web address [\#1311](https://github.com/nlohmann/json/issues/1311) - How to convert JSON to Struct with embeded subject [\#1310](https://github.com/nlohmann/json/issues/1310) - Null safety/coalescing function? [\#1309](https://github.com/nlohmann/json/issues/1309) - Building fails using single include file: json.hpp [\#1308](https://github.com/nlohmann/json/issues/1308) - json::parse\(std::string\) Exception inside packaged Lib [\#1306](https://github.com/nlohmann/json/issues/1306) - Problem in Dockerfile with installation of library [\#1304](https://github.com/nlohmann/json/issues/1304) - compile error in from\_json converting to container with std::pair [\#1299](https://github.com/nlohmann/json/issues/1299) - Json that I am trying to parse, and I am lost Structure Array below top level [\#1293](https://github.com/nlohmann/json/issues/1293) - Serializing std::variant causes stack overflow [\#1292](https://github.com/nlohmann/json/issues/1292) - How do I go about customising from\_json to support \_\_int128\_t/\_\_uint128\_t? [\#1290](https://github.com/nlohmann/json/issues/1290) - merge\_patch: inconsistent behaviour merging empty sub-object [\#1289](https://github.com/nlohmann/json/issues/1289) - Buffer over/underrun using UBJson? [\#1288](https://github.com/nlohmann/json/issues/1288) - Enable the latest C++ standard with Visual Studio [\#1287](https://github.com/nlohmann/json/issues/1287) - truncation of constant value in to\_cbor\(\) [\#1286](https://github.com/nlohmann/json/issues/1286) - eosio.wasmsdk error [\#1284](https://github.com/nlohmann/json/issues/1284) - use the same interface for writing arrays and non-arrays [\#1283](https://github.com/nlohmann/json/issues/1283) - How to read json file with optional entries and entries with different types [\#1281](https://github.com/nlohmann/json/issues/1281) - merge result not as espected [\#1279](https://github.com/nlohmann/json/issues/1279) - how to get only "name" from below json [\#1278](https://github.com/nlohmann/json/issues/1278) - syntax error on right json string [\#1276](https://github.com/nlohmann/json/issues/1276) - Parsing JSON Array where members have no key, using custom types [\#1267](https://github.com/nlohmann/json/issues/1267) - I get a json exception periodically from json::parse for the same json [\#1263](https://github.com/nlohmann/json/issues/1263) - GCC 8.2.1. Compilation error: invalid conversion from... [\#1246](https://github.com/nlohmann/json/issues/1246) - BSON support [\#1244](https://github.com/nlohmann/json/issues/1244) - enum to json mapping [\#1208](https://github.com/nlohmann/json/issues/1208) - Soften the landing when dumping non-UTF8 strings \(type\_error.316 exception\) [\#1198](https://github.com/nlohmann/json/issues/1198) - Add macro to define enum/JSON mapping [\#1323](https://github.com/nlohmann/json/pull/1323) ([nlohmann](https://github.com/nlohmann)) - Add BSON support [\#1320](https://github.com/nlohmann/json/pull/1320) ([nlohmann](https://github.com/nlohmann)) - Properly convert constants to CharType [\#1315](https://github.com/nlohmann/json/pull/1315) ([nlohmann](https://github.com/nlohmann)) - Allow to set error handler for decoding errors [\#1314](https://github.com/nlohmann/json/pull/1314) ([nlohmann](https://github.com/nlohmann)) - Add Meson related info to README [\#1305](https://github.com/nlohmann/json/pull/1305) ([koponomarenko](https://github.com/koponomarenko)) - Improve diagnostic messages for binary formats [\#1303](https://github.com/nlohmann/json/pull/1303) ([nlohmann](https://github.com/nlohmann)) - add new is\_constructible\_\* traits used in from\_json [\#1301](https://github.com/nlohmann/json/pull/1301) ([theodelrieu](https://github.com/theodelrieu)) - add constraints for variadic json\_ref constructors [\#1294](https://github.com/nlohmann/json/pull/1294) ([theodelrieu](https://github.com/theodelrieu)) - Improve diagnostic messages [\#1282](https://github.com/nlohmann/json/pull/1282) ([nlohmann](https://github.com/nlohmann)) - Removed linter warnings [\#1280](https://github.com/nlohmann/json/pull/1280) ([nlohmann](https://github.com/nlohmann)) - Thirdparty benchmark: Fix Clang detection. [\#1277](https://github.com/nlohmann/json/pull/1277) ([Lord-Kamina](https://github.com/Lord-Kamina)) ## [v3.3.0](https://github.com/nlohmann/json/releases/tag/v3.3.0) (2018-10-05) [Full Changelog](https://github.com/nlohmann/json/compare/3.3.0...v3.3.0) ## [3.3.0](https://github.com/nlohmann/json/releases/tag/3.3.0) (2018-10-05) [Full Changelog](https://github.com/nlohmann/json/compare/v3.2.0...3.3.0) - When key is not found print the key name into error too [\#1273](https://github.com/nlohmann/json/issues/1273) - Visual Studio 2017 15.8.5 "conditional expression is constant" warning on Line 1851 in json.hpp [\#1268](https://github.com/nlohmann/json/issues/1268) - how can we get this working on WSL? [\#1264](https://github.com/nlohmann/json/issues/1264) - Help needed [\#1259](https://github.com/nlohmann/json/issues/1259) - A way to get to a JSON values "key" [\#1258](https://github.com/nlohmann/json/issues/1258) - While compiling got 76 errors [\#1255](https://github.com/nlohmann/json/issues/1255) - Two blackslashes on json output file [\#1253](https://github.com/nlohmann/json/issues/1253) - Including nlohmann the badwrong way. [\#1250](https://github.com/nlohmann/json/issues/1250) - how to build with clang? [\#1247](https://github.com/nlohmann/json/issues/1247) - Cmake target\_link\_libraries unable to find nlohmann\_json since version 3.2.0 [\#1243](https://github.com/nlohmann/json/issues/1243) - \[Question\] Access to end\(\) iterator reference [\#1242](https://github.com/nlohmann/json/issues/1242) - Parsing different json format [\#1241](https://github.com/nlohmann/json/issues/1241) - Parsing Multiple JSON Files [\#1240](https://github.com/nlohmann/json/issues/1240) - Doesn't compile under C++17 [\#1239](https://github.com/nlohmann/json/issues/1239) - Conversion operator for nlohmann::json is not SFINAE friendly [\#1237](https://github.com/nlohmann/json/issues/1237) - Custom deserialization of number\_float\_t [\#1236](https://github.com/nlohmann/json/issues/1236) - deprecated-declarations warnings when compiling tests with GCC 8.2.1. [\#1233](https://github.com/nlohmann/json/issues/1233) - Incomplete type with json\_fwd.hpp [\#1232](https://github.com/nlohmann/json/issues/1232) - Parse Error [\#1229](https://github.com/nlohmann/json/issues/1229) - json::get function with argument [\#1227](https://github.com/nlohmann/json/issues/1227) - questions regarding from\_json [\#1226](https://github.com/nlohmann/json/issues/1226) - Lambda in unevaluated context [\#1225](https://github.com/nlohmann/json/issues/1225) - NLohmann doesn't compile when enabling strict warning policies [\#1224](https://github.com/nlohmann/json/issues/1224) - Creating array of objects [\#1223](https://github.com/nlohmann/json/issues/1223) - Somewhat unhelpful error message "cannot use operator\[\] with object" [\#1220](https://github.com/nlohmann/json/issues/1220) - single\_include json.hpp [\#1218](https://github.com/nlohmann/json/issues/1218) - Maps with enum class keys which are convertible to JSON strings should be converted to JSON dictionaries [\#1217](https://github.com/nlohmann/json/issues/1217) - Adding JSON Array to the Array [\#1216](https://github.com/nlohmann/json/issues/1216) - Best way to output a vector of a given type to json [\#1215](https://github.com/nlohmann/json/issues/1215) - compiler warning: double definition of macro JSON\_INTERNAL\_CATCH [\#1213](https://github.com/nlohmann/json/issues/1213) - Compilation error when using MOCK\_METHOD1 from GMock and nlohmann::json [\#1212](https://github.com/nlohmann/json/issues/1212) - Issues parsing a previously encoded binary \(non-UTF8\) string. [\#1211](https://github.com/nlohmann/json/issues/1211) - Yet another ordering question: char \* and parse\(\) [\#1209](https://github.com/nlohmann/json/issues/1209) - Error using gcc 8.1.0 on Ubuntu 14.04 [\#1207](https://github.com/nlohmann/json/issues/1207) - "type must be string, but is " std::string\(j.type\_name\(\) [\#1206](https://github.com/nlohmann/json/issues/1206) - Returning empty json object from a function of type const json& ? [\#1205](https://github.com/nlohmann/json/issues/1205) - VS2017 compiler suggests using constexpr if [\#1204](https://github.com/nlohmann/json/issues/1204) - Template instatiation error on compiling [\#1203](https://github.com/nlohmann/json/issues/1203) - BUG - json dump field with unicode -\> array of ints \(instead of string\) [\#1197](https://github.com/nlohmann/json/issues/1197) - Compile error using Code::Blocks // mingw-w64 GCC 8.1.0 - "Incomplete Type" [\#1193](https://github.com/nlohmann/json/issues/1193) - SEGFAULT on arm target [\#1190](https://github.com/nlohmann/json/issues/1190) - Compiler crash with old Clang [\#1179](https://github.com/nlohmann/json/issues/1179) - Custom Precision on floating point numbers [\#1170](https://github.com/nlohmann/json/issues/1170) - Can we have a json\_view class like std::string\_view? [\#1158](https://github.com/nlohmann/json/issues/1158) - improve error handling [\#1152](https://github.com/nlohmann/json/issues/1152) - We should remove static\_asserts [\#960](https://github.com/nlohmann/json/issues/960) - Fix warning C4127: conditional expression is constant [\#1272](https://github.com/nlohmann/json/pull/1272) ([antonioborondo](https://github.com/antonioborondo)) - Turn off additional deprecation warnings for GCC. [\#1271](https://github.com/nlohmann/json/pull/1271) ([chuckatkins](https://github.com/chuckatkins)) - docs: Add additional CMake documentation [\#1270](https://github.com/nlohmann/json/pull/1270) ([chuckatkins](https://github.com/chuckatkins)) - unit-testsuites.cpp: fix hangup if file not found [\#1262](https://github.com/nlohmann/json/pull/1262) ([knilch0r](https://github.com/knilch0r)) - Fix broken cmake imported target alias [\#1260](https://github.com/nlohmann/json/pull/1260) ([chuckatkins](https://github.com/chuckatkins)) - GCC 48 [\#1257](https://github.com/nlohmann/json/pull/1257) ([henryiii](https://github.com/henryiii)) - Add version and license to meson.build [\#1252](https://github.com/nlohmann/json/pull/1252) ([koponomarenko](https://github.com/koponomarenko)) - \#1179 Reordered the code. It seems to stop clang 3.4.2 in RHEL 7 from crash… [\#1249](https://github.com/nlohmann/json/pull/1249) ([LEgregius](https://github.com/LEgregius)) - Use a version check to provide backwards comatible CMake imported target names [\#1245](https://github.com/nlohmann/json/pull/1245) ([chuckatkins](https://github.com/chuckatkins)) - Fix issue \#1237 [\#1238](https://github.com/nlohmann/json/pull/1238) ([theodelrieu](https://github.com/theodelrieu)) - Add a get overload taking a parameter. [\#1231](https://github.com/nlohmann/json/pull/1231) ([theodelrieu](https://github.com/theodelrieu)) - Move lambda out of unevaluated context [\#1230](https://github.com/nlohmann/json/pull/1230) ([vimpunk](https://github.com/vimpunk)) - Remove static asserts [\#1228](https://github.com/nlohmann/json/pull/1228) ([theodelrieu](https://github.com/theodelrieu)) - Better error 305 [\#1221](https://github.com/nlohmann/json/pull/1221) ([rivertam](https://github.com/rivertam)) - Fix \#1213 [\#1214](https://github.com/nlohmann/json/pull/1214) ([simnalamburt](https://github.com/simnalamburt)) - Export package to allow builds without installing [\#1202](https://github.com/nlohmann/json/pull/1202) ([dennisfischer](https://github.com/dennisfischer)) ## [v3.2.0](https://github.com/nlohmann/json/releases/tag/v3.2.0) (2018-08-20) [Full Changelog](https://github.com/nlohmann/json/compare/3.2.0...v3.2.0) ## [3.2.0](https://github.com/nlohmann/json/releases/tag/3.2.0) (2018-08-20) [Full Changelog](https://github.com/nlohmann/json/compare/v3.1.2...3.2.0) - Am I doing this wrong? Getting an empty string [\#1199](https://github.com/nlohmann/json/issues/1199) - Incompatible Pointer Type [\#1196](https://github.com/nlohmann/json/issues/1196) - json.exception.type\_error.316 [\#1195](https://github.com/nlohmann/json/issues/1195) - Strange warnings in Code::Blocks 17.12, GNU GCC [\#1192](https://github.com/nlohmann/json/issues/1192) - \[Question\] Current place in code to change floating point resolution [\#1191](https://github.com/nlohmann/json/issues/1191) - Add key name when throwing type error [\#1189](https://github.com/nlohmann/json/issues/1189) - Not able to include in visual studio code? [\#1188](https://github.com/nlohmann/json/issues/1188) - Get an Index or row number of an element [\#1186](https://github.com/nlohmann/json/issues/1186) - Difference between `merge_patch` and `update` [\#1183](https://github.com/nlohmann/json/issues/1183) - Is there a way to get an element from a JSON without throwing an exception on failure? [\#1182](https://github.com/nlohmann/json/issues/1182) - to\_string? [\#1181](https://github.com/nlohmann/json/issues/1181) - How to cache a json object's pointer into a map? [\#1180](https://github.com/nlohmann/json/issues/1180) - Can this library work within a Qt project for Android using Qt Creator? [\#1178](https://github.com/nlohmann/json/issues/1178) - How to get all keys of one object? [\#1177](https://github.com/nlohmann/json/issues/1177) - How can I only parse the first level and get the value as string? [\#1175](https://github.com/nlohmann/json/issues/1175) - I have a query regarding nlohmann::basic\_json::basic\_json [\#1174](https://github.com/nlohmann/json/issues/1174) - unordered\_map with vectors won't convert to json? [\#1173](https://github.com/nlohmann/json/issues/1173) - return json objects from functions [\#1172](https://github.com/nlohmann/json/issues/1172) - Problem when exporting to CBOR [\#1171](https://github.com/nlohmann/json/issues/1171) - Roundtripping null to nullptr does not work [\#1169](https://github.com/nlohmann/json/issues/1169) - MSVC fails to compile std::swap specialization for nlohmann::json [\#1168](https://github.com/nlohmann/json/issues/1168) - Unexpected behaviour of is\_null - Part II [\#1167](https://github.com/nlohmann/json/issues/1167) - Floating point imprecision [\#1166](https://github.com/nlohmann/json/issues/1166) - Combine json objects into one? [\#1165](https://github.com/nlohmann/json/issues/1165) - Is there any way to know if the object has changed? [\#1164](https://github.com/nlohmann/json/issues/1164) - Value throws on null string [\#1163](https://github.com/nlohmann/json/issues/1163) - Weird template issue in large project [\#1162](https://github.com/nlohmann/json/issues/1162) - \_json returns a different result vs ::parse [\#1161](https://github.com/nlohmann/json/issues/1161) - Showing difference between two json objects [\#1160](https://github.com/nlohmann/json/issues/1160) - no instance of overloaded function "std::swap" matches the specified type [\#1159](https://github.com/nlohmann/json/issues/1159) - resize\(...\)? [\#1157](https://github.com/nlohmann/json/issues/1157) - Issue with struct nested in class' to\_json [\#1155](https://github.com/nlohmann/json/issues/1155) - Deserialize std::map with std::nan [\#1154](https://github.com/nlohmann/json/issues/1154) - Parse throwing errors [\#1149](https://github.com/nlohmann/json/issues/1149) - cocoapod integration [\#1148](https://github.com/nlohmann/json/issues/1148) - wstring parsing [\#1147](https://github.com/nlohmann/json/issues/1147) - Is it possible to dump a two-dimensional array to "\[\[null\],\[1,2,3\]\]"? [\#1146](https://github.com/nlohmann/json/issues/1146) - Want to write a class member variable and a struct variable \( this structure is inside the class\) to the json file [\#1145](https://github.com/nlohmann/json/issues/1145) - Does json support converting an instance of a struct into json string? [\#1143](https://github.com/nlohmann/json/issues/1143) - \#Most efficient way to search for child parameters \(recursive find?\) [\#1141](https://github.com/nlohmann/json/issues/1141) - could not find to\_json\(\) method in T's namespace [\#1140](https://github.com/nlohmann/json/issues/1140) - chars get treated as JSON numbers not JSON strings [\#1139](https://github.com/nlohmann/json/issues/1139) - How do I count number of objects in array? [\#1137](https://github.com/nlohmann/json/issues/1137) - Serializing a vector of classes? [\#1136](https://github.com/nlohmann/json/issues/1136) - Compile error. Unable convert form nullptr to nullptr&& [\#1135](https://github.com/nlohmann/json/issues/1135) - std::unordered\_map in struct, serialization [\#1133](https://github.com/nlohmann/json/issues/1133) - dump\(\) can't handle umlauts [\#1131](https://github.com/nlohmann/json/issues/1131) - Add a way to get a key reference from the iterator [\#1127](https://github.com/nlohmann/json/issues/1127) - can't not parse "\\“ string [\#1123](https://github.com/nlohmann/json/issues/1123) - if json file contain Internationalization chars , get exception [\#1122](https://github.com/nlohmann/json/issues/1122) - How to use a json::iterator dereferenced value in code? [\#1120](https://github.com/nlohmann/json/issues/1120) - Disable implicit conversions from json to std::initializer\_list\ for any T [\#1118](https://github.com/nlohmann/json/issues/1118) - Implicit conversions to complex types can lead to surprising and confusing errors [\#1116](https://github.com/nlohmann/json/issues/1116) - How can I write from\_json for a complex datatype that is not default constructible? [\#1115](https://github.com/nlohmann/json/issues/1115) - Compile error in VS2015 when compiling unit-conversions.cpp [\#1114](https://github.com/nlohmann/json/issues/1114) - ADL Serializer for std::any / boost::any [\#1113](https://github.com/nlohmann/json/issues/1113) - Unexpected behaviour of is\_null [\#1112](https://github.com/nlohmann/json/issues/1112) - How to resolve " undefined reference to `std::\_\_throw\_bad\_cast\(\)'" [\#1111](https://github.com/nlohmann/json/issues/1111) - cannot compile on ubuntu 18.04 and 16.04 [\#1110](https://github.com/nlohmann/json/issues/1110) - JSON representation for floating point values has too many digits [\#1109](https://github.com/nlohmann/json/issues/1109) - Not working for classes containing "\_declspec\(dllimport\)" in their declaration [\#1108](https://github.com/nlohmann/json/issues/1108) - Get keys from json object [\#1107](https://github.com/nlohmann/json/issues/1107) - Cannot deserialize types using std::ratio [\#1105](https://github.com/nlohmann/json/issues/1105) - i want to learn json [\#1104](https://github.com/nlohmann/json/issues/1104) - Type checking during compile [\#1103](https://github.com/nlohmann/json/issues/1103) - Iterate through sub items [\#1102](https://github.com/nlohmann/json/issues/1102) - cppcheck failing for version 3.1.2 [\#1101](https://github.com/nlohmann/json/issues/1101) - Deserializing std::map [\#1100](https://github.com/nlohmann/json/issues/1100) - accessing key by reference [\#1098](https://github.com/nlohmann/json/issues/1098) - clang 3.8.0 croaks while trying to compile with debug symbols [\#1097](https://github.com/nlohmann/json/issues/1097) - Serialize a list of class objects with json [\#1096](https://github.com/nlohmann/json/issues/1096) - Small question [\#1094](https://github.com/nlohmann/json/issues/1094) - Upgrading to 3.x: to\_/from\_json with enum class [\#1093](https://github.com/nlohmann/json/issues/1093) - Q: few questions about json construction [\#1092](https://github.com/nlohmann/json/issues/1092) - general crayCC compilation failure [\#1091](https://github.com/nlohmann/json/issues/1091) - Merge Patch clears original data [\#1090](https://github.com/nlohmann/json/issues/1090) - \[Question\] how to use nlohmann/json in c++? [\#1088](https://github.com/nlohmann/json/issues/1088) - C++17 decomposition declaration support [\#1087](https://github.com/nlohmann/json/issues/1087) - \[Question\] Access multi-level json objects [\#1086](https://github.com/nlohmann/json/issues/1086) - Serializing vector [\#1085](https://github.com/nlohmann/json/issues/1085) - update nested value in multi hierarchy json object [\#1084](https://github.com/nlohmann/json/issues/1084) - Overriding default values? [\#1083](https://github.com/nlohmann/json/issues/1083) - detail namespace collision with Cereal? [\#1082](https://github.com/nlohmann/json/issues/1082) - Error using json.dump\(\); [\#1081](https://github.com/nlohmann/json/issues/1081) - Consuming TCP Stream [\#1080](https://github.com/nlohmann/json/issues/1080) - Compilation error with strong typed enums in map in combination with namespaces [\#1079](https://github.com/nlohmann/json/issues/1079) - cassert error [\#1076](https://github.com/nlohmann/json/issues/1076) - Valid json data not being parsed [\#1075](https://github.com/nlohmann/json/issues/1075) - Feature request :: Better testing for key existance without try/catch [\#1074](https://github.com/nlohmann/json/issues/1074) - Hi, I have input like a.b.c and want to convert it to \"a\"{\"b\": \"c\"} form. Any suggestions how do I do this? Thanks. [\#1073](https://github.com/nlohmann/json/issues/1073) - ADL deserializer not picked up for non default-constructible type [\#1072](https://github.com/nlohmann/json/issues/1072) - Deserializing std::array doesn't compiler \(no insert\(\)\) [\#1071](https://github.com/nlohmann/json/issues/1071) - Serializing OpenCV Mat problem [\#1070](https://github.com/nlohmann/json/issues/1070) - Compilation error with ICPC compiler [\#1068](https://github.com/nlohmann/json/issues/1068) - Not existing value, crash [\#1065](https://github.com/nlohmann/json/issues/1065) - cyryllic symbols [\#1064](https://github.com/nlohmann/json/issues/1064) - newbie usage question [\#1063](https://github.com/nlohmann/json/issues/1063) - Trying j\["strTest"\] = "%A" produces "strTest": "-0X1.CCCCCCCCCCCCCP+205" [\#1062](https://github.com/nlohmann/json/issues/1062) - convert json value to std::string??? [\#1061](https://github.com/nlohmann/json/issues/1061) - Commented out test cases, should they be removed? [\#1060](https://github.com/nlohmann/json/issues/1060) - different behaviour between clang and gcc with braced initialization [\#1059](https://github.com/nlohmann/json/issues/1059) - json array: initialize with prescribed size and `resize` method. [\#1057](https://github.com/nlohmann/json/issues/1057) - Is it possible to use exceptions istead of assertions? [\#1056](https://github.com/nlohmann/json/issues/1056) - when using assign operator in with json object a static assertion fails.. [\#1055](https://github.com/nlohmann/json/issues/1055) - Iterate over leafs of a JSON data structure: enrich the JSON pointer API [\#1054](https://github.com/nlohmann/json/issues/1054) - \[Feature request\] Access by path [\#1053](https://github.com/nlohmann/json/issues/1053) - document that implicit js -\> primitive conversion does not work for std::string::value\_type and why [\#1052](https://github.com/nlohmann/json/issues/1052) - error: ‘BasicJsonType’ in namespace ‘::’ does not name a type [\#1051](https://github.com/nlohmann/json/issues/1051) - Destructor is called when filling object through assignement [\#1050](https://github.com/nlohmann/json/issues/1050) - Is this thing thread safe for reads? [\#1049](https://github.com/nlohmann/json/issues/1049) - clang-tidy: Call to virtual function during construction [\#1046](https://github.com/nlohmann/json/issues/1046) - Using STL algorithms with JSON containers with expected results? [\#1045](https://github.com/nlohmann/json/issues/1045) - Usage with gtest/gmock not working as expected [\#1044](https://github.com/nlohmann/json/issues/1044) - Consequences of from\_json / to\_json being in namespace of data struct. [\#1042](https://github.com/nlohmann/json/issues/1042) - const\_reference operator\[\]\(const typename object\_t::key\_type& key\) const throw instead of assert [\#1039](https://github.com/nlohmann/json/issues/1039) - Trying to retrieve data from nested objects [\#1038](https://github.com/nlohmann/json/issues/1038) - Direct download link for json\_fwd.hpp? [\#1037](https://github.com/nlohmann/json/issues/1037) - I know the library supports UTF-8, but failed to dump the value [\#1036](https://github.com/nlohmann/json/issues/1036) - Putting a Vec3-like vector into a json object [\#1035](https://github.com/nlohmann/json/issues/1035) - Ternary operator crash [\#1034](https://github.com/nlohmann/json/issues/1034) - Issued with Clion Inspection Resolution since 2018.1 [\#1033](https://github.com/nlohmann/json/issues/1033) - Some testcases fail and one never finishes [\#1032](https://github.com/nlohmann/json/issues/1032) - Can this class work with wchar\_t / std::wstring? [\#1031](https://github.com/nlohmann/json/issues/1031) - Makefile: Valgrind flags have no effect [\#1030](https://github.com/nlohmann/json/issues/1030) - 「==」 Should be 「\>」 [\#1029](https://github.com/nlohmann/json/issues/1029) - HOCON reader? [\#1027](https://github.com/nlohmann/json/issues/1027) - add json string in previous string?? [\#1025](https://github.com/nlohmann/json/issues/1025) - RFC: fluent parsing interface [\#1023](https://github.com/nlohmann/json/issues/1023) - Does it support chinese character? [\#1022](https://github.com/nlohmann/json/issues/1022) - to/from\_msgpack only works with standard typization [\#1021](https://github.com/nlohmann/json/issues/1021) - Build failure using latest clang and GCC compilers [\#1020](https://github.com/nlohmann/json/issues/1020) - can two json objects be concatenated? [\#1019](https://github.com/nlohmann/json/issues/1019) - Erase by integer index [\#1018](https://github.com/nlohmann/json/issues/1018) - Function find overload taking a json\_pointer [\#1017](https://github.com/nlohmann/json/issues/1017) - I think should implement an parser function [\#1016](https://github.com/nlohmann/json/issues/1016) - Readme gif [\#1015](https://github.com/nlohmann/json/issues/1015) - Python bindings [\#1014](https://github.com/nlohmann/json/issues/1014) - how to add two json string in single object?? [\#1012](https://github.com/nlohmann/json/issues/1012) - how to serialize class Object \(convert data in object into json\)?? [\#1011](https://github.com/nlohmann/json/issues/1011) - Enable forward declaration of json by making json a class instead of a using declaration [\#997](https://github.com/nlohmann/json/issues/997) - compilation error while using intel c++ compiler 2018 [\#994](https://github.com/nlohmann/json/issues/994) - How to create a json variable? [\#990](https://github.com/nlohmann/json/issues/990) - istream \>\> json --- 1st character skipped in stream [\#976](https://github.com/nlohmann/json/issues/976) - Add a SAX parser [\#971](https://github.com/nlohmann/json/issues/971) - How to solve large json file? [\#927](https://github.com/nlohmann/json/issues/927) - json\_pointer public push\_back, pop\_back [\#837](https://github.com/nlohmann/json/issues/837) - Using input\_adapter in a slightly unexpected way [\#834](https://github.com/nlohmann/json/issues/834) - Fix -Wno-sometimes-uninitialized by initializing "result" in parse\_sax [\#1200](https://github.com/nlohmann/json/pull/1200) ([thyu](https://github.com/thyu)) - \[RFC\] Introduce a new macro function: JSON\_INTERNAL\_CATCH [\#1187](https://github.com/nlohmann/json/pull/1187) ([simnalamburt](https://github.com/simnalamburt)) - Fix unit tests that were silently skipped or crashed \(depending on the compiler\) [\#1176](https://github.com/nlohmann/json/pull/1176) ([grembo](https://github.com/grembo)) - Refactor/no virtual sax [\#1153](https://github.com/nlohmann/json/pull/1153) ([theodelrieu](https://github.com/theodelrieu)) - Fixed compiler error in VS 2015 for debug mode [\#1151](https://github.com/nlohmann/json/pull/1151) ([sonulohani](https://github.com/sonulohani)) - Fix links to cppreference named requirements \(formerly concepts\) [\#1144](https://github.com/nlohmann/json/pull/1144) ([ghost](https://github.com/ghost)) - meson: fix include directory [\#1142](https://github.com/nlohmann/json/pull/1142) ([ghost](https://github.com/ghost)) - Feature/unordered map conversion [\#1138](https://github.com/nlohmann/json/pull/1138) ([theodelrieu](https://github.com/theodelrieu)) - fixed compile error for \#1045 [\#1134](https://github.com/nlohmann/json/pull/1134) ([Daniel599](https://github.com/Daniel599)) - test \(non\)equality for alt\_string implementation [\#1130](https://github.com/nlohmann/json/pull/1130) ([agrianius](https://github.com/agrianius)) - remove stringstream dependency [\#1117](https://github.com/nlohmann/json/pull/1117) ([TinyTinni](https://github.com/TinyTinni)) - Provide a from\_json overload for std::map [\#1089](https://github.com/nlohmann/json/pull/1089) ([theodelrieu](https://github.com/theodelrieu)) - fix typo in README [\#1078](https://github.com/nlohmann/json/pull/1078) ([martin-mfg](https://github.com/martin-mfg)) - Fix typo [\#1058](https://github.com/nlohmann/json/pull/1058) ([dns13](https://github.com/dns13)) - Misc cmake packaging enhancements [\#1048](https://github.com/nlohmann/json/pull/1048) ([chuckatkins](https://github.com/chuckatkins)) - Fixed incorrect LLVM version number in README [\#1047](https://github.com/nlohmann/json/pull/1047) ([jupjohn](https://github.com/jupjohn)) - Fix trivial typo in comment. [\#1043](https://github.com/nlohmann/json/pull/1043) ([coryan](https://github.com/coryan)) - Package Manager: Spack [\#1041](https://github.com/nlohmann/json/pull/1041) ([ax3l](https://github.com/ax3l)) - CMake: 3.8+ is Sufficient [\#1040](https://github.com/nlohmann/json/pull/1040) ([ax3l](https://github.com/ax3l)) - Added support for string\_view in C++17 [\#1028](https://github.com/nlohmann/json/pull/1028) ([gracicot](https://github.com/gracicot)) - Added public target\_compile\_features for auto and constexpr [\#1026](https://github.com/nlohmann/json/pull/1026) ([ktonon](https://github.com/ktonon)) ## [v3.1.2](https://github.com/nlohmann/json/releases/tag/v3.1.2) (2018-03-14) [Full Changelog](https://github.com/nlohmann/json/compare/3.1.2...v3.1.2) ## [3.1.2](https://github.com/nlohmann/json/releases/tag/3.1.2) (2018-03-14) [Full Changelog](https://github.com/nlohmann/json/compare/v3.1.1...3.1.2) - STL containers are always serialized to a nested array like \[\[1,2,3\]\] [\#1013](https://github.com/nlohmann/json/issues/1013) - The library doesn't want to insert an unordered\_map [\#1010](https://github.com/nlohmann/json/issues/1010) - Convert Json to uint8\_t [\#1008](https://github.com/nlohmann/json/issues/1008) - How to compare two JSON objects? [\#1007](https://github.com/nlohmann/json/issues/1007) - Syntax checking [\#1003](https://github.com/nlohmann/json/issues/1003) - more than one operator '=' matches these operands [\#1002](https://github.com/nlohmann/json/issues/1002) - How to check if key existed [\#1000](https://github.com/nlohmann/json/issues/1000) - nlohmann::json::parse exhaust memory in go binding [\#999](https://github.com/nlohmann/json/issues/999) - Range-based iteration over a non-array object [\#998](https://github.com/nlohmann/json/issues/998) - get\ for types that are not default constructible [\#996](https://github.com/nlohmann/json/issues/996) - Prevent Null values to appear in .dump\(\) [\#995](https://github.com/nlohmann/json/issues/995) - number parsing [\#993](https://github.com/nlohmann/json/issues/993) - C2664 \(C++/CLR\) cannot convert 'nullptr' to 'nullptr &&' [\#987](https://github.com/nlohmann/json/issues/987) - Uniform initialization from another json object differs between gcc and clang. [\#985](https://github.com/nlohmann/json/issues/985) - Problem with adding the lib as a submodule [\#983](https://github.com/nlohmann/json/issues/983) - UTF-8/Unicode error [\#982](https://github.com/nlohmann/json/issues/982) - "forcing MSVC stacktrace to show which T we're talking about." error [\#980](https://github.com/nlohmann/json/issues/980) - reverse order of serialization [\#979](https://github.com/nlohmann/json/issues/979) - Assigning between different json types [\#977](https://github.com/nlohmann/json/issues/977) - Support serialisation of `unique_ptr<>` and `shared_ptr<>` [\#975](https://github.com/nlohmann/json/issues/975) - Unexpected end of input \(not same as one before\) [\#974](https://github.com/nlohmann/json/issues/974) - Segfault on direct initializing json object [\#973](https://github.com/nlohmann/json/issues/973) - Segmentation fault on G++ when trying to assign json string literal to custom json type. [\#972](https://github.com/nlohmann/json/issues/972) - os\_defines.h:44:19: error: missing binary operator before token "\(" [\#970](https://github.com/nlohmann/json/issues/970) - Passing an iteration object by reference to a function [\#967](https://github.com/nlohmann/json/issues/967) - Json and fmt::lib's format\_arg\(\) [\#964](https://github.com/nlohmann/json/issues/964) - Allowing for user-defined string type in lexer/parser [\#1009](https://github.com/nlohmann/json/pull/1009) ([nlohmann](https://github.com/nlohmann)) - dump to alternative string type, as defined in basic\_json template [\#1006](https://github.com/nlohmann/json/pull/1006) ([agrianius](https://github.com/agrianius)) - Fix memory leak during parser callback [\#1001](https://github.com/nlohmann/json/pull/1001) ([nlohmann](https://github.com/nlohmann)) - fixed misprinted condition detected by PVS Studio. [\#992](https://github.com/nlohmann/json/pull/992) ([bogemic](https://github.com/bogemic)) - Fix/basic json conversion [\#986](https://github.com/nlohmann/json/pull/986) ([theodelrieu](https://github.com/theodelrieu)) - Make integration section concise [\#981](https://github.com/nlohmann/json/pull/981) ([wla80](https://github.com/wla80)) ## [v3.1.1](https://github.com/nlohmann/json/releases/tag/v3.1.1) (2018-02-13) [Full Changelog](https://github.com/nlohmann/json/compare/v3.1.0...v3.1.1) - Updation of child object isn't reflected in parent Object [\#968](https://github.com/nlohmann/json/issues/968) - How to add user defined C++ path to sublime text [\#966](https://github.com/nlohmann/json/issues/966) - fast number parsing [\#965](https://github.com/nlohmann/json/issues/965) - With non-unique keys, later stored entries are not taken into account anymore [\#963](https://github.com/nlohmann/json/issues/963) - Timeout \(OSS-Fuzz 6034\) [\#962](https://github.com/nlohmann/json/issues/962) - Incorrect parsing of indefinite length CBOR strings. [\#961](https://github.com/nlohmann/json/issues/961) - Reload a json file at runtime without emptying my std::ifstream [\#959](https://github.com/nlohmann/json/issues/959) - Split headers should be part of the release [\#956](https://github.com/nlohmann/json/issues/956) - Coveralls shows no coverage data [\#953](https://github.com/nlohmann/json/issues/953) - Feature request: Implicit conversion to bool [\#951](https://github.com/nlohmann/json/issues/951) - converting json to vector of type with templated constructor [\#924](https://github.com/nlohmann/json/issues/924) - No structured bindings support? [\#901](https://github.com/nlohmann/json/issues/901) - \[Request\] Macro generating from\_json\(\) and to\_json\(\) [\#895](https://github.com/nlohmann/json/issues/895) - basic\_json::value throws exception instead of returning default value [\#871](https://github.com/nlohmann/json/issues/871) - Fix constraints on from\_json\(CompatibleArrayType\) [\#969](https://github.com/nlohmann/json/pull/969) ([theodelrieu](https://github.com/theodelrieu)) - Make coveralls watch the include folder [\#957](https://github.com/nlohmann/json/pull/957) ([theodelrieu](https://github.com/theodelrieu)) - Fix links in README.md [\#955](https://github.com/nlohmann/json/pull/955) ([patrikhuber](https://github.com/patrikhuber)) - Add a note about installing the library with cget [\#954](https://github.com/nlohmann/json/pull/954) ([pfultz2](https://github.com/pfultz2)) ## [v3.1.0](https://github.com/nlohmann/json/releases/tag/v3.1.0) (2018-02-01) [Full Changelog](https://github.com/nlohmann/json/compare/3.1.0...v3.1.0) ## [3.1.0](https://github.com/nlohmann/json/releases/tag/3.1.0) (2018-02-01) [Full Changelog](https://github.com/nlohmann/json/compare/v3.0.1...3.1.0) - I have a proposal [\#949](https://github.com/nlohmann/json/issues/949) - VERSION define\(s\) [\#948](https://github.com/nlohmann/json/issues/948) - v3.0.1 compile error in icc 16.0.4 [\#947](https://github.com/nlohmann/json/issues/947) - Use in VS2017 15.5.5 [\#946](https://github.com/nlohmann/json/issues/946) - Process for reporting Security Bugs? [\#945](https://github.com/nlohmann/json/issues/945) - Please expose a NLOHMANN\_JSON\_VERSION macro [\#943](https://github.com/nlohmann/json/issues/943) - Change header include directory to nlohmann/json [\#942](https://github.com/nlohmann/json/issues/942) - string\_type in binary\_reader [\#941](https://github.com/nlohmann/json/issues/941) - compile error with clang 5.0 -std=c++1z and no string\_view [\#939](https://github.com/nlohmann/json/issues/939) - Allow overriding JSON\_THROW to something else than abort\(\) [\#938](https://github.com/nlohmann/json/issues/938) - Handle invalid string in Json file [\#937](https://github.com/nlohmann/json/issues/937) - Unused variable 'kMinExp' [\#935](https://github.com/nlohmann/json/issues/935) - yytext is already defined [\#933](https://github.com/nlohmann/json/issues/933) - Equality operator fails [\#931](https://github.com/nlohmann/json/issues/931) - use in visual studio 2015 [\#929](https://github.com/nlohmann/json/issues/929) - Relative includes of json\_fwd.hpp in detail/meta.hpp. \[Develop branch\] [\#928](https://github.com/nlohmann/json/issues/928) - GCC 7.x issue [\#926](https://github.com/nlohmann/json/issues/926) - json\_fwd.hpp not installed [\#923](https://github.com/nlohmann/json/issues/923) - Use Google Benchmarks [\#921](https://github.com/nlohmann/json/issues/921) - Move class json\_pointer to separate file [\#920](https://github.com/nlohmann/json/issues/920) - Unable to locate 'to\_json\(\)' and 'from\_json\(\)' methods in the same namespace [\#917](https://github.com/nlohmann/json/issues/917) - \[answered\]Read key1 from .value example [\#914](https://github.com/nlohmann/json/issues/914) - Don't use `define private public` in test files [\#913](https://github.com/nlohmann/json/issues/913) - value\(\) template argument type deduction [\#912](https://github.com/nlohmann/json/issues/912) - Installation path is incorrect [\#910](https://github.com/nlohmann/json/issues/910) - H [\#909](https://github.com/nlohmann/json/issues/909) - Build failure using clang 5 [\#908](https://github.com/nlohmann/json/issues/908) - Amalgate [\#907](https://github.com/nlohmann/json/issues/907) - Update documentation and tests wrt. split headers [\#906](https://github.com/nlohmann/json/issues/906) - Lib not working on ubuntu 16.04 [\#905](https://github.com/nlohmann/json/issues/905) - Problem when writing to file. [\#904](https://github.com/nlohmann/json/issues/904) - C2864 error when compiling with VS2015 and VS 2017 [\#903](https://github.com/nlohmann/json/issues/903) - \[json.exception.type\_error.304\] cannot use at\(\) with object [\#902](https://github.com/nlohmann/json/issues/902) - How do I forward nlohmann::json declaration? [\#899](https://github.com/nlohmann/json/issues/899) - How to effectively store binary data? [\#898](https://github.com/nlohmann/json/issues/898) - How to get the length of a JSON string without retrieving its std::string? [\#897](https://github.com/nlohmann/json/issues/897) - Regression Tests Failure using "ctest" [\#887](https://github.com/nlohmann/json/issues/887) - Discuss: add JSON Merge Patch \(RFC 7396\)? [\#877](https://github.com/nlohmann/json/issues/877) - Discuss: replace static "iterator\_wrapper" function with "items" member function [\#874](https://github.com/nlohmann/json/issues/874) - Make optional user-data available in from\_json [\#864](https://github.com/nlohmann/json/issues/864) - Casting to std::string not working in VS2015 [\#861](https://github.com/nlohmann/json/issues/861) - Sequential reading of JSON arrays [\#851](https://github.com/nlohmann/json/issues/851) - Idea: Handle Multimaps Better [\#816](https://github.com/nlohmann/json/issues/816) - Floating point rounding [\#777](https://github.com/nlohmann/json/issues/777) - Loss of precision when serializing \ [\#360](https://github.com/nlohmann/json/issues/360) - Templatize std::string in binary\_reader \#941 [\#950](https://github.com/nlohmann/json/pull/950) ([kaidokert](https://github.com/kaidokert)) - fix cmake install directory \(for real this time\) [\#944](https://github.com/nlohmann/json/pull/944) ([theodelrieu](https://github.com/theodelrieu)) - Allow overriding THROW/CATCH/TRY macros with no-exceptions \#938 [\#940](https://github.com/nlohmann/json/pull/940) ([kaidokert](https://github.com/kaidokert)) - Removed compiler warning about unused variable 'kMinExp' [\#936](https://github.com/nlohmann/json/pull/936) ([zerodefect](https://github.com/zerodefect)) - Fix a typo in README.md [\#930](https://github.com/nlohmann/json/pull/930) ([Pipeliner](https://github.com/Pipeliner)) - Howto installation of json\_fwd.hpp \(fixes \#923\) [\#925](https://github.com/nlohmann/json/pull/925) ([zerodefect](https://github.com/zerodefect)) - fix sfinae on basic\_json UDT constructor [\#919](https://github.com/nlohmann/json/pull/919) ([theodelrieu](https://github.com/theodelrieu)) - Floating-point formatting [\#915](https://github.com/nlohmann/json/pull/915) ([abolz](https://github.com/abolz)) - Fix/cmake install [\#911](https://github.com/nlohmann/json/pull/911) ([theodelrieu](https://github.com/theodelrieu)) - fix link to the documentation of the emplace function [\#900](https://github.com/nlohmann/json/pull/900) ([Dobiasd](https://github.com/Dobiasd)) - JSON Merge Patch \(RFC 7396\) [\#876](https://github.com/nlohmann/json/pull/876) ([nlohmann](https://github.com/nlohmann)) - Refactor/split it [\#700](https://github.com/nlohmann/json/pull/700) ([theodelrieu](https://github.com/theodelrieu)) ## [v3.0.1](https://github.com/nlohmann/json/releases/tag/v3.0.1) (2017-12-29) [Full Changelog](https://github.com/nlohmann/json/compare/3.0.1...v3.0.1) ## [3.0.1](https://github.com/nlohmann/json/releases/tag/3.0.1) (2017-12-29) [Full Changelog](https://github.com/nlohmann/json/compare/v3.0.0...3.0.1) - Problem parsing array to global vector [\#896](https://github.com/nlohmann/json/issues/896) - Invalid RFC6902 copy operation succeeds [\#894](https://github.com/nlohmann/json/issues/894) - How to rename a key during looping? [\#893](https://github.com/nlohmann/json/issues/893) - clang++-6.0 \(6.0.0-svn321357-1\) warning [\#892](https://github.com/nlohmann/json/issues/892) - Make json.hpp aware of the modules TS? [\#891](https://github.com/nlohmann/json/issues/891) - All enum values not handled in switch cases. \( -Wswitch-enum \) [\#889](https://github.com/nlohmann/json/issues/889) - JSON Pointer resolve failure resulting in incorrect exception code [\#888](https://github.com/nlohmann/json/issues/888) - Unexpected nested arrays from std::vector [\#886](https://github.com/nlohmann/json/issues/886) - erase multiple elements from a json object [\#884](https://github.com/nlohmann/json/issues/884) - Container function overview in Doxygen is not updated [\#883](https://github.com/nlohmann/json/issues/883) - How to use this for binary file uploads [\#881](https://github.com/nlohmann/json/issues/881) - Allow setting JSON\_BuildTests=OFF from parent CMakeLists.txt [\#846](https://github.com/nlohmann/json/issues/846) - Unit test fails for local-independent str-to-num [\#845](https://github.com/nlohmann/json/issues/845) - Another idea about type support [\#774](https://github.com/nlohmann/json/issues/774) - Includes CTest module/adds BUILD\_TESTING option [\#885](https://github.com/nlohmann/json/pull/885) ([TinyTinni](https://github.com/TinyTinni)) - Fix MSVC warning C4819 [\#882](https://github.com/nlohmann/json/pull/882) ([erengy](https://github.com/erengy)) - Merge branch 'develop' into coverity\_scan [\#880](https://github.com/nlohmann/json/pull/880) ([nlohmann](https://github.com/nlohmann)) - :wrench: Fix up a few more effc++ items [\#858](https://github.com/nlohmann/json/pull/858) ([mattismyname](https://github.com/mattismyname)) ## [v3.0.0](https://github.com/nlohmann/json/releases/tag/v3.0.0) (2017-12-17) [Full Changelog](https://github.com/nlohmann/json/compare/3.0.0...v3.0.0) ## [3.0.0](https://github.com/nlohmann/json/releases/tag/3.0.0) (2017-12-17) [Full Changelog](https://github.com/nlohmann/json/compare/v2.1.1...3.0.0) - unicode strings [\#878](https://github.com/nlohmann/json/issues/878) - Visual Studio 2017 15.5 C++17 std::allocator deprecations [\#872](https://github.com/nlohmann/json/issues/872) - Typo "excpetion" [\#869](https://github.com/nlohmann/json/issues/869) - Explicit array example in README.md incorrect [\#867](https://github.com/nlohmann/json/issues/867) - why don't you release this from Feb. ? [\#865](https://github.com/nlohmann/json/issues/865) - json::parse throws std::invalid\_argument when processing string generated by json::dump\(\) [\#863](https://github.com/nlohmann/json/issues/863) - code analysis: potential bug? [\#859](https://github.com/nlohmann/json/issues/859) - MSVC2017, 15.5 new issues. [\#857](https://github.com/nlohmann/json/issues/857) - very basic: fetching string value/content without quotes [\#853](https://github.com/nlohmann/json/issues/853) - Ambiguous function call to get with pointer type and constant json object in VS2015 \(15.4.4\) [\#852](https://github.com/nlohmann/json/issues/852) - How to put object in the array as a member? [\#850](https://github.com/nlohmann/json/issues/850) - misclick, please ignore [\#849](https://github.com/nlohmann/json/issues/849) - Make XML great again. [\#847](https://github.com/nlohmann/json/issues/847) - Converting to array not working [\#843](https://github.com/nlohmann/json/issues/843) - Iteration weirdness [\#842](https://github.com/nlohmann/json/issues/842) - Use reference or pointer as Object value [\#841](https://github.com/nlohmann/json/issues/841) - Ambiguity in parsing nested maps [\#840](https://github.com/nlohmann/json/issues/840) - could not find from\_json\(\) method in T's namespace [\#839](https://github.com/nlohmann/json/issues/839) - Incorrect parse error with binary data in keys? [\#838](https://github.com/nlohmann/json/issues/838) - using dump\(\) when std::wstring is StringType with VS2017 [\#836](https://github.com/nlohmann/json/issues/836) - Show the path of the currently parsed value when an error occurs [\#835](https://github.com/nlohmann/json/issues/835) - Repetitive data type while reading [\#833](https://github.com/nlohmann/json/issues/833) - Storing multiple types inside map [\#831](https://github.com/nlohmann/json/issues/831) - Application terminating [\#830](https://github.com/nlohmann/json/issues/830) - Missing CMake hunter package? [\#828](https://github.com/nlohmann/json/issues/828) - std::map\ from json object yields C2665: 'std::pair\::pair': none of the 2 overloads could convert all the argument types [\#827](https://github.com/nlohmann/json/issues/827) - object.dump gives quoted string, want to use .dump\(\) to generate javascripts. [\#826](https://github.com/nlohmann/json/issues/826) - Assertion failed on \["NoExistKey"\] of an not existing key of const json& [\#825](https://github.com/nlohmann/json/issues/825) - vs2015 error : static member will remain uninitialized at runtime but use in constant-expressions is supported [\#824](https://github.com/nlohmann/json/issues/824) - Code Checking Warnings from json.hpp on VS2017 Community [\#821](https://github.com/nlohmann/json/issues/821) - Missing iostream in try online [\#820](https://github.com/nlohmann/json/issues/820) - Floating point value loses decimal point during dump [\#818](https://github.com/nlohmann/json/issues/818) - Conan package for the library [\#817](https://github.com/nlohmann/json/issues/817) - stream error [\#815](https://github.com/nlohmann/json/issues/815) - Link error when using find\(\) on the latest commit [\#814](https://github.com/nlohmann/json/issues/814) - ABI issue with json object between 2 shared libraries [\#813](https://github.com/nlohmann/json/issues/813) - scan\_string\(\) return token\_type::parse\_error; when parse ansi file [\#812](https://github.com/nlohmann/json/issues/812) - segfault when using fifo\_map with json [\#810](https://github.com/nlohmann/json/issues/810) - This shit is shit [\#809](https://github.com/nlohmann/json/issues/809) - \_finite and \_isnan are no members of "std" [\#808](https://github.com/nlohmann/json/issues/808) - how to print out the line which causing exception? [\#806](https://github.com/nlohmann/json/issues/806) - {} uses copy constructor, while = does not [\#805](https://github.com/nlohmann/json/issues/805) - json.hpp:8955: multiple definition of function that is not defined twice or more. [\#804](https://github.com/nlohmann/json/issues/804) - \[question\] to\_json for base and derived class [\#803](https://github.com/nlohmann/json/issues/803) - Misleading error message - unexpected '"' - on incorrect utf-8 symbol [\#802](https://github.com/nlohmann/json/issues/802) - json data = std::string\_view\("hi"\); doesn't work? [\#801](https://github.com/nlohmann/json/issues/801) - Thread safety of parse\(\) [\#800](https://github.com/nlohmann/json/issues/800) - Numbers as strings [\#799](https://github.com/nlohmann/json/issues/799) - Tests failing on arm [\#797](https://github.com/nlohmann/json/issues/797) - Using your library \(without modification\) in another library [\#796](https://github.com/nlohmann/json/issues/796) - Iterating over sub-object [\#794](https://github.com/nlohmann/json/issues/794) - how to get the json object again from which printed by the method of dump\(\) [\#792](https://github.com/nlohmann/json/issues/792) - ppa to include source [\#791](https://github.com/nlohmann/json/issues/791) - Different include paths in macOS and Ubuntu [\#790](https://github.com/nlohmann/json/issues/790) - Missing break after line 12886 in switch/case [\#789](https://github.com/nlohmann/json/issues/789) - All unit tests fail? [\#787](https://github.com/nlohmann/json/issues/787) - More use of move semantics in deserialization [\#786](https://github.com/nlohmann/json/issues/786) - warning C4706 - Visual Studio 2017 \(/W4\) [\#784](https://github.com/nlohmann/json/issues/784) - Compile error in clang 5.0 [\#782](https://github.com/nlohmann/json/issues/782) - Error Installing appium\_lib with Ruby v2.4.2 Due to JSON [\#781](https://github.com/nlohmann/json/issues/781) - ::get\\(\) fails in new\(er\) release \[MSVC\] [\#780](https://github.com/nlohmann/json/issues/780) - Type Conversion [\#779](https://github.com/nlohmann/json/issues/779) - Segfault on nested parsing [\#778](https://github.com/nlohmann/json/issues/778) - Build warnings: shadowing exception id [\#776](https://github.com/nlohmann/json/issues/776) - multi-level JSON support. [\#775](https://github.com/nlohmann/json/issues/775) - SIGABRT on dump\(\) [\#773](https://github.com/nlohmann/json/issues/773) - \[Question\] Custom StringType template parameter \(possibility for a KeyType template parameter\) [\#772](https://github.com/nlohmann/json/issues/772) - constexpr ALL the Things! [\#771](https://github.com/nlohmann/json/issues/771) - error: ‘BasicJsonType’ in namespace ‘::’ does not name a type [\#770](https://github.com/nlohmann/json/issues/770) - Program calls abort function [\#769](https://github.com/nlohmann/json/issues/769) - \[Question\] Floating point resolution config during dump\(\) ? [\#768](https://github.com/nlohmann/json/issues/768) - make check - no test ran [\#767](https://github.com/nlohmann/json/issues/767) - The library cannot work properly with custom allocator based containers [\#766](https://github.com/nlohmann/json/issues/766) - Documentation or feature request. [\#763](https://github.com/nlohmann/json/issues/763) - warnings in msvc about mix/max macro while windows.h is used in the project [\#762](https://github.com/nlohmann/json/issues/762) - std::signbit ambiguous [\#761](https://github.com/nlohmann/json/issues/761) - How to use value for std::experimental::optional type? [\#760](https://github.com/nlohmann/json/issues/760) - Cannot load json file properly [\#759](https://github.com/nlohmann/json/issues/759) - Compilation error with unordered\_map\< int, int \> [\#758](https://github.com/nlohmann/json/issues/758) - CBOR string [\#757](https://github.com/nlohmann/json/issues/757) - Proposal: out\_of\_range should be a subclass of std::out\_of\_range [\#756](https://github.com/nlohmann/json/issues/756) - Getter is setting the value to null if the key does not exist [\#754](https://github.com/nlohmann/json/issues/754) - parsing works sometimes and crashes others [\#752](https://github.com/nlohmann/json/issues/752) - Static\_assert failed "incompatible pointer type" with Xcode [\#751](https://github.com/nlohmann/json/issues/751) - user-defined literal operator not found [\#750](https://github.com/nlohmann/json/issues/750) - getting clean string from it.key\(\) [\#748](https://github.com/nlohmann/json/issues/748) - Best method for exploring and obtaining values of nested json objects when the names are not known beforehand? [\#747](https://github.com/nlohmann/json/issues/747) - null char at the end of string [\#746](https://github.com/nlohmann/json/issues/746) - Incorrect sample for operator \>\> in docs [\#745](https://github.com/nlohmann/json/issues/745) - User-friendly documentation [\#744](https://github.com/nlohmann/json/issues/744) - Retrieve all values that match a json path [\#743](https://github.com/nlohmann/json/issues/743) - Compilation issue with gcc 7.2 [\#742](https://github.com/nlohmann/json/issues/742) - CMake target nlohmann\_json does not have src into its interface includes [\#741](https://github.com/nlohmann/json/issues/741) - Error when serializing empty json: type must be string, but is object [\#740](https://github.com/nlohmann/json/issues/740) - Conversion error for std::map\ [\#739](https://github.com/nlohmann/json/issues/739) - Dumping Json to file as array [\#738](https://github.com/nlohmann/json/issues/738) - nesting json objects [\#737](https://github.com/nlohmann/json/issues/737) - where to find general help? [\#736](https://github.com/nlohmann/json/issues/736) - Compilation Error on Clang 5.0 Upgrade [\#735](https://github.com/nlohmann/json/issues/735) - Compilation error with std::map\ on vs 2015 [\#734](https://github.com/nlohmann/json/issues/734) - Benchmarks for Binary formats [\#733](https://github.com/nlohmann/json/issues/733) - Support \n symbols in json string. [\#731](https://github.com/nlohmann/json/issues/731) - Project's name is too generic and hard to search for [\#730](https://github.com/nlohmann/json/issues/730) - Visual Studio 2015 IntelliTrace problems [\#729](https://github.com/nlohmann/json/issues/729) - How to erase nested objects inside other objects? [\#728](https://github.com/nlohmann/json/issues/728) - Serialization for CBOR [\#726](https://github.com/nlohmann/json/issues/726) - Using json Object as value in a map [\#725](https://github.com/nlohmann/json/issues/725) - std::regex and nlohmann::json value [\#724](https://github.com/nlohmann/json/issues/724) - Warnings when compiling with VisualStudio 2015 [\#723](https://github.com/nlohmann/json/issues/723) - Has this lib the unicode \(wstring\) support? [\#722](https://github.com/nlohmann/json/issues/722) - When will be 3.0 in master? [\#721](https://github.com/nlohmann/json/issues/721) - Determine the type from error message. [\#720](https://github.com/nlohmann/json/issues/720) - Compile-Error C2100 \(MS VS2015\) in line 887 json.hpp [\#719](https://github.com/nlohmann/json/issues/719) - from\_json not working for boost::optional example [\#718](https://github.com/nlohmann/json/issues/718) - about from\_json and to\_json function [\#717](https://github.com/nlohmann/json/issues/717) - How to detect parse failure? [\#715](https://github.com/nlohmann/json/issues/715) - Parse throw std::ios\_base::failure exception when failbit set to true [\#714](https://github.com/nlohmann/json/issues/714) - Is there a way of format just making a pretty print without changing the key's orders ? [\#713](https://github.com/nlohmann/json/issues/713) - Serialization of array of not same model items [\#712](https://github.com/nlohmann/json/issues/712) - pointer to json parse vector [\#711](https://github.com/nlohmann/json/issues/711) - Gtest SEH Exception [\#709](https://github.com/nlohmann/json/issues/709) - broken from\_json implementation for pair and tuple [\#707](https://github.com/nlohmann/json/issues/707) - Unevaluated lambda in assert breaks gcc 7 build [\#705](https://github.com/nlohmann/json/issues/705) - Issues when adding values to firebase database [\#704](https://github.com/nlohmann/json/issues/704) - Floating point equality - revisited [\#703](https://github.com/nlohmann/json/issues/703) - Conversion from valarray\ to json fails to build [\#702](https://github.com/nlohmann/json/issues/702) - internal compiler error \(gcc7\) [\#701](https://github.com/nlohmann/json/issues/701) - One build system to rule them all [\#698](https://github.com/nlohmann/json/issues/698) - Generated nlohmann\_jsonConfig.cmake does not set JSON\_INCLUDE\_DIR [\#695](https://github.com/nlohmann/json/issues/695) - support the Chinese language in json string [\#694](https://github.com/nlohmann/json/issues/694) - NaN problem within develop branch [\#693](https://github.com/nlohmann/json/issues/693) - Please post example of specialization for boost::filesystem [\#692](https://github.com/nlohmann/json/issues/692) - Impossible to do an array of composite objects [\#691](https://github.com/nlohmann/json/issues/691) - How to save json to file? [\#690](https://github.com/nlohmann/json/issues/690) - my simple json parser [\#689](https://github.com/nlohmann/json/issues/689) - problem with new struct parsing syntax [\#688](https://github.com/nlohmann/json/issues/688) - Parse error while parse the json string contains UTF 8 encoded document bytes string [\#684](https://github.com/nlohmann/json/issues/684) - \[question\] how to get a string value by pointer [\#683](https://github.com/nlohmann/json/issues/683) - create json object from string variable [\#681](https://github.com/nlohmann/json/issues/681) - adl\_serializer and CRTP [\#680](https://github.com/nlohmann/json/issues/680) - Is there a way to control the precision of serialized floating point numbers? [\#677](https://github.com/nlohmann/json/issues/677) - Is there a way to get the path of a value? [\#676](https://github.com/nlohmann/json/issues/676) - Could the parser locate errors to line? [\#675](https://github.com/nlohmann/json/issues/675) - There is performance inefficiency found by coverity tool json2.1.1/include/nlohmann/json.hpp [\#673](https://github.com/nlohmann/json/issues/673) - include problem, when cmake on osx [\#672](https://github.com/nlohmann/json/issues/672) - Operator= ambiguous in C++1z and GCC 7.1.1 [\#670](https://github.com/nlohmann/json/issues/670) - should't the cmake install target be to nlohman/json.hpp [\#668](https://github.com/nlohmann/json/issues/668) - deserialise from `std::vector` [\#667](https://github.com/nlohmann/json/issues/667) - How to iterate? [\#665](https://github.com/nlohmann/json/issues/665) - could this json lib work on windows? [\#664](https://github.com/nlohmann/json/issues/664) - How does from\_json work? [\#662](https://github.com/nlohmann/json/issues/662) - insert\(or merge\) object should replace same key , not ignore [\#661](https://github.com/nlohmann/json/issues/661) - Parse method doesn't handle newlines. [\#659](https://github.com/nlohmann/json/issues/659) - Compilation "note" on GCC 6 ARM [\#658](https://github.com/nlohmann/json/issues/658) - Adding additional push\_back/operator+= rvalue overloads for JSON object [\#657](https://github.com/nlohmann/json/issues/657) - dump's parameter "ensure\_ascii" creates too long sequences [\#656](https://github.com/nlohmann/json/issues/656) - Question: parsing `void *` [\#655](https://github.com/nlohmann/json/issues/655) - how should I check a string is valid JSON string ? [\#653](https://github.com/nlohmann/json/issues/653) - Question: thread safety of read only accesses [\#651](https://github.com/nlohmann/json/issues/651) - Eclipse: Method 'size' could not be resolved [\#649](https://github.com/nlohmann/json/issues/649) - Update/Add object fields [\#648](https://github.com/nlohmann/json/issues/648) - No exception raised for Out Of Range input of numbers [\#647](https://github.com/nlohmann/json/issues/647) - Package Name [\#646](https://github.com/nlohmann/json/issues/646) - What is the meaning of operator\[\]\(T\* key\) [\#645](https://github.com/nlohmann/json/issues/645) - Which is the correct way to json objects as parameters to functions? [\#644](https://github.com/nlohmann/json/issues/644) - Method to get string representations of values [\#642](https://github.com/nlohmann/json/issues/642) - CBOR serialization of a given JSON value does not serialize [\#641](https://github.com/nlohmann/json/issues/641) - Are we forced to use "-fexceptions" flag in android ndk project [\#640](https://github.com/nlohmann/json/issues/640) - Comparison of objects containing floats [\#639](https://github.com/nlohmann/json/issues/639) - 'localeconv' is not supported by NDK for SDK \<=20 [\#638](https://github.com/nlohmann/json/issues/638) - \[Question\] cLion integration [\#637](https://github.com/nlohmann/json/issues/637) - How to construct an iteratable usage in nlohmann json? [\#636](https://github.com/nlohmann/json/issues/636) - \[Question\] copy assign json-container to vector [\#635](https://github.com/nlohmann/json/issues/635) - Get size without .dump\(\) [\#634](https://github.com/nlohmann/json/issues/634) - Segmentation fault when parsing invalid json file [\#633](https://github.com/nlohmann/json/issues/633) - How to serialize from json to vector\? [\#632](https://github.com/nlohmann/json/issues/632) - no member named 'thousands\_sep' in 'lconv' [\#631](https://github.com/nlohmann/json/issues/631) - \[Question\] Any fork for \(the unsupported\) Visual Studio 2012 version? [\#628](https://github.com/nlohmann/json/issues/628) - Dependency injection in serializer [\#627](https://github.com/nlohmann/json/issues/627) - from\_json for std::array [\#625](https://github.com/nlohmann/json/issues/625) - Discussion: How to structure the parsing function families [\#623](https://github.com/nlohmann/json/issues/623) - Question: How to erase subtree [\#622](https://github.com/nlohmann/json/issues/622) - Insertion into nested json field [\#621](https://github.com/nlohmann/json/issues/621) - Question: return static json object from function [\#618](https://github.com/nlohmann/json/issues/618) - icc16 error [\#617](https://github.com/nlohmann/json/issues/617) - \[-Wdeprecated-declarations\] in row `j >> ss;` in file `json.hpp:7405:26` and FAILED unit tests with MinGWx64! [\#616](https://github.com/nlohmann/json/issues/616) - to\_json for pairs, tuples [\#614](https://github.com/nlohmann/json/issues/614) - Using uninitialized memory 'buf' in line 11173 v2.1.1? [\#613](https://github.com/nlohmann/json/issues/613) - How to parse multiple same Keys of JSON and save them? [\#612](https://github.com/nlohmann/json/issues/612) - "Multiple declarations" error when using types defined with `typedef` [\#611](https://github.com/nlohmann/json/issues/611) - 2.1.1+ breaks compilation of shared\_ptr\ == 0 [\#610](https://github.com/nlohmann/json/issues/610) - a bug of inheritance ? [\#608](https://github.com/nlohmann/json/issues/608) - std::map key conversion with to\_json [\#607](https://github.com/nlohmann/json/issues/607) - json.hpp:6384:62: error: wrong number of template arguments \(1, should be 2\) [\#606](https://github.com/nlohmann/json/issues/606) - Incremental parsing: Where's the push version? [\#605](https://github.com/nlohmann/json/issues/605) - Is there a way to validate the structure of a json object ? [\#604](https://github.com/nlohmann/json/issues/604) - \[Question\] Issue when using Appveyor when compiling library [\#603](https://github.com/nlohmann/json/issues/603) - BOM not skipped when using json:parse\(iterator\) [\#602](https://github.com/nlohmann/json/issues/602) - Use of the binary type in CBOR and Message Pack [\#601](https://github.com/nlohmann/json/issues/601) - Newbie issue: how does one convert a map in Json back to std::map? [\#600](https://github.com/nlohmann/json/issues/600) - Plugin system [\#599](https://github.com/nlohmann/json/issues/599) - Using custom types for scalars? [\#596](https://github.com/nlohmann/json/issues/596) - Issues with the arithmetic in iterator and reverse iterator [\#593](https://github.com/nlohmann/json/issues/593) - not enough examples [\#592](https://github.com/nlohmann/json/issues/592) - in-class initialization for type 'const T' is not yet implemented [\#591](https://github.com/nlohmann/json/issues/591) - compiling with gcc 7 -\> error on bool operator \< [\#590](https://github.com/nlohmann/json/issues/590) - Parsing from stream leads to an array [\#589](https://github.com/nlohmann/json/issues/589) - Buggy support for binary string data [\#587](https://github.com/nlohmann/json/issues/587) - C++17's ambiguous conversion [\#586](https://github.com/nlohmann/json/issues/586) - How does the messagepack encoding/decoding compare to msgpack-cpp in terms of performance? [\#585](https://github.com/nlohmann/json/issues/585) - is it possible to check existence of a value deep in hierarchy? [\#584](https://github.com/nlohmann/json/issues/584) - loading from a stream and exceptions [\#582](https://github.com/nlohmann/json/issues/582) - Visual Studio seems not to have all min\(\) function versions [\#581](https://github.com/nlohmann/json/issues/581) - Supporting of the json schema [\#580](https://github.com/nlohmann/json/issues/580) - Stack-overflow \(OSS-Fuzz 1444\) [\#577](https://github.com/nlohmann/json/issues/577) - Heap-buffer-overflow \(OSS-Fuzz 1400\) [\#575](https://github.com/nlohmann/json/issues/575) - JSON escape quotes [\#574](https://github.com/nlohmann/json/issues/574) - error: static\_assert failed [\#573](https://github.com/nlohmann/json/issues/573) - Storing floats, and round trip serialisation/deserialisation diffs [\#572](https://github.com/nlohmann/json/issues/572) - JSON.getLong produces inconsistent results [\#571](https://github.com/nlohmann/json/issues/571) - Request: Object.at\(\) with default return value [\#570](https://github.com/nlohmann/json/issues/570) - Internal structure gets corrupted while parsing [\#569](https://github.com/nlohmann/json/issues/569) - create template \ basic\_json from\_cbor\(Iter begin, Iter end\) [\#568](https://github.com/nlohmann/json/issues/568) - Conan.io [\#566](https://github.com/nlohmann/json/issues/566) - contradictory documentation regarding json::find [\#565](https://github.com/nlohmann/json/issues/565) - Unexpected '\"' in middle of array [\#564](https://github.com/nlohmann/json/issues/564) - Support parse std::pair to Json object [\#563](https://github.com/nlohmann/json/issues/563) - json and Microsoft Visual c++ Compiler Nov 2012 CTP [\#562](https://github.com/nlohmann/json/issues/562) - from\_json declaration order and exceptions [\#561](https://github.com/nlohmann/json/issues/561) - Tip: Don't upgrade to VS2017 if using json initializer list constructs [\#559](https://github.com/nlohmann/json/issues/559) - parse error - unexpected end of input [\#558](https://github.com/nlohmann/json/issues/558) - Cant modify existing numbers inside a json object [\#557](https://github.com/nlohmann/json/issues/557) - Better support for SAX style serialize and deserialize in new version? [\#554](https://github.com/nlohmann/json/issues/554) - Cannot convert from json array to std::array [\#553](https://github.com/nlohmann/json/issues/553) - Do not define an unnamed namespace in a header file \(DCL59-CPP\) [\#552](https://github.com/nlohmann/json/issues/552) - Parse error on known good json file [\#551](https://github.com/nlohmann/json/issues/551) - Warning on Intel compiler \(icc 17\) [\#550](https://github.com/nlohmann/json/issues/550) - multiple versions of 'vsnprintf' [\#549](https://github.com/nlohmann/json/issues/549) - illegal indirection [\#548](https://github.com/nlohmann/json/issues/548) - Ambiguous compare operators with clang-5.0 [\#547](https://github.com/nlohmann/json/issues/547) - Using tsl::ordered\_map [\#546](https://github.com/nlohmann/json/issues/546) - Compiler support errors are inconvenient [\#544](https://github.com/nlohmann/json/issues/544) - Duplicate symbols error happens while to\_json/from\_json method implemented inside entity definition header file [\#542](https://github.com/nlohmann/json/issues/542) - consider adding a bool json::is\_valid\(std::string const&\) non-member function [\#541](https://github.com/nlohmann/json/issues/541) - Help request [\#539](https://github.com/nlohmann/json/issues/539) - How to deal with missing keys in `from_json`? [\#538](https://github.com/nlohmann/json/issues/538) - recursive from\_msgpack implementation will stack overflow [\#537](https://github.com/nlohmann/json/issues/537) - Exception objects must be nothrow copy constructible \(ERR60-CPP\) [\#531](https://github.com/nlohmann/json/issues/531) - Support for multiple root elements [\#529](https://github.com/nlohmann/json/issues/529) - Port has\_shape from dropbox/json11 [\#528](https://github.com/nlohmann/json/issues/528) - dump\_float: truncation from ptrdiff\_t to long [\#527](https://github.com/nlohmann/json/issues/527) - Make exception base class visible in basic\_json [\#525](https://github.com/nlohmann/json/issues/525) - msgpack unit test failures on ppc64 arch [\#524](https://github.com/nlohmann/json/issues/524) - How about split the implementation out, and only leave the interface? [\#523](https://github.com/nlohmann/json/issues/523) - VC++2017 not enough actual parameters for macro 'max' [\#522](https://github.com/nlohmann/json/issues/522) - crash on empty ifstream [\#521](https://github.com/nlohmann/json/issues/521) - Suggestion: Support tabs for indentation when serializing to stream. [\#520](https://github.com/nlohmann/json/issues/520) - Abrt in get\_number \(OSS-Fuzz 885\) [\#519](https://github.com/nlohmann/json/issues/519) - Abrt on unknown address \(OSS-Fuzz 884\) [\#518](https://github.com/nlohmann/json/issues/518) - Stack-overflow \(OSS-Fuzz 869\) [\#517](https://github.com/nlohmann/json/issues/517) - Assertion error \(OSS-Fuzz 868\) [\#516](https://github.com/nlohmann/json/issues/516) - NaN to json and back [\#515](https://github.com/nlohmann/json/issues/515) - Comparison of NaN [\#514](https://github.com/nlohmann/json/issues/514) - why it's not possible to serialize c++11 enums directly [\#513](https://github.com/nlohmann/json/issues/513) - clang compile error: use of overloaded operator '\<=' is ambiguous with \(nlohmann::json{{"a", 5}}\)\["a"\] \<= 10 [\#512](https://github.com/nlohmann/json/issues/512) - Why not also look inside the type for \(static\) to\_json and from\_json funtions? [\#511](https://github.com/nlohmann/json/issues/511) - Parser issues [\#509](https://github.com/nlohmann/json/issues/509) - I may not understand [\#507](https://github.com/nlohmann/json/issues/507) - VS2017 min / max problem for 2.1.1 [\#506](https://github.com/nlohmann/json/issues/506) - CBOR/MessagePack is not read until the end [\#505](https://github.com/nlohmann/json/issues/505) - Assertion error \(OSS-Fuzz 856\) [\#504](https://github.com/nlohmann/json/issues/504) - Return position in parse error exceptions [\#503](https://github.com/nlohmann/json/issues/503) - conversion from/to C array is not supported [\#502](https://github.com/nlohmann/json/issues/502) - error C2338: could not find to\_json\(\) method in T's namespace [\#501](https://github.com/nlohmann/json/issues/501) - Test suite fails in en\_GB.UTF-8 [\#500](https://github.com/nlohmann/json/issues/500) - cannot use operator\[\] with number [\#499](https://github.com/nlohmann/json/issues/499) - consider using \_\_cpp\_exceptions and/or \_\_EXCEPTIONS to disable/enable exception support [\#498](https://github.com/nlohmann/json/issues/498) - Stack-overflow \(OSS-Fuzz issue 814\) [\#497](https://github.com/nlohmann/json/issues/497) - Using in Unreal Engine - handling custom types conversion [\#495](https://github.com/nlohmann/json/issues/495) - Conversion from vector\ to json fails to build [\#494](https://github.com/nlohmann/json/issues/494) - fill\_line\_buffer incorrectly tests m\_stream for eof but not fail or bad bits [\#493](https://github.com/nlohmann/json/issues/493) - Compiling with \_GLIBCXX\_DEBUG yields iterator-comparison warnings during tests [\#492](https://github.com/nlohmann/json/issues/492) - crapy interface [\#491](https://github.com/nlohmann/json/issues/491) - Fix Visual Studo 2013 builds. [\#490](https://github.com/nlohmann/json/issues/490) - Failed to compile with -D\_GLIBCXX\_PARALLEL [\#489](https://github.com/nlohmann/json/issues/489) - Input several field with the same name [\#488](https://github.com/nlohmann/json/issues/488) - read in .json file yields strange sizes [\#487](https://github.com/nlohmann/json/issues/487) - json::value\_t can't be a map's key type in VC++ 2015 [\#486](https://github.com/nlohmann/json/issues/486) - Using fifo\_map [\#485](https://github.com/nlohmann/json/issues/485) - Cannot get float pointer for value stored as `0` [\#484](https://github.com/nlohmann/json/issues/484) - byte string support [\#483](https://github.com/nlohmann/json/issues/483) - https://github.com/nlohmann/json\#execute-unit-tests [\#481](https://github.com/nlohmann/json/issues/481) - Remove deprecated constructor basic\_json\(std::istream&\) [\#480](https://github.com/nlohmann/json/issues/480) - writing the binary json file? [\#479](https://github.com/nlohmann/json/issues/479) - CBOR/MessagePack from uint8\_t \* and size [\#478](https://github.com/nlohmann/json/issues/478) - Streaming binary representations [\#477](https://github.com/nlohmann/json/issues/477) - Reuse memory in to\_cbor and to\_msgpack functions [\#476](https://github.com/nlohmann/json/issues/476) - Error Using JSON Library with arrays C++ [\#475](https://github.com/nlohmann/json/issues/475) - Moving forward to version 3.0.0 [\#474](https://github.com/nlohmann/json/issues/474) - Inconsistent behavior in conversion to array type [\#473](https://github.com/nlohmann/json/issues/473) - Create a \[key:member\_pointer\] map to ease parsing custom types [\#471](https://github.com/nlohmann/json/issues/471) - MSVC 2015 update 2 [\#469](https://github.com/nlohmann/json/issues/469) - VS2017 implicit to std::string conversion fix. [\#464](https://github.com/nlohmann/json/issues/464) - How to make sure a string or string literal is a valid JSON? [\#458](https://github.com/nlohmann/json/issues/458) - basic\_json templated on a "policy" class [\#456](https://github.com/nlohmann/json/issues/456) - json::value\(const json\_pointer&, ValueType\) requires exceptions to return the default value. [\#440](https://github.com/nlohmann/json/issues/440) - is it possible merge two json object [\#428](https://github.com/nlohmann/json/issues/428) - Is it possible to turn this into a shared library? [\#420](https://github.com/nlohmann/json/issues/420) - Further thoughts on performance improvements [\#418](https://github.com/nlohmann/json/issues/418) - nan number stored as null [\#388](https://github.com/nlohmann/json/issues/388) - Behavior of operator\>\> should more closely resemble that of built-in overloads. [\#367](https://github.com/nlohmann/json/issues/367) - Request: range-based-for over a json-object to expose .first/.second [\#350](https://github.com/nlohmann/json/issues/350) - feature wish: JSONPath [\#343](https://github.com/nlohmann/json/issues/343) - UTF-8/Unicode escape and dump [\#330](https://github.com/nlohmann/json/issues/330) - Serialized value not always can be parsed. [\#329](https://github.com/nlohmann/json/issues/329) - Is there a way to forward declare nlohmann::json? [\#314](https://github.com/nlohmann/json/issues/314) - Exception line [\#301](https://github.com/nlohmann/json/issues/301) - Do not throw exception when default\_value's type does not match the actual type [\#278](https://github.com/nlohmann/json/issues/278) - dump\(\) method doesn't work with a custom allocator [\#268](https://github.com/nlohmann/json/issues/268) - Readme documentation enhancements [\#248](https://github.com/nlohmann/json/issues/248) - Use user-defined exceptions [\#244](https://github.com/nlohmann/json/issues/244) - Incorrect C++11 allocator model support [\#161](https://github.com/nlohmann/json/issues/161) - :white\_check\_mark: re-added tests for algorithms [\#879](https://github.com/nlohmann/json/pull/879) ([nlohmann](https://github.com/nlohmann)) - Overworked library toward 3.0.0 release [\#875](https://github.com/nlohmann/json/pull/875) ([nlohmann](https://github.com/nlohmann)) - :rotating\_light: remove C4996 warnings \#872 [\#873](https://github.com/nlohmann/json/pull/873) ([nlohmann](https://github.com/nlohmann)) - :boom: throwing an exception in case dump encounters a non-UTF-8 string \#838 [\#870](https://github.com/nlohmann/json/pull/870) ([nlohmann](https://github.com/nlohmann)) - :memo: fixing documentation \#867 [\#868](https://github.com/nlohmann/json/pull/868) ([nlohmann](https://github.com/nlohmann)) - iter\_impl template conformance with C++17 [\#860](https://github.com/nlohmann/json/pull/860) ([bogemic](https://github.com/bogemic)) - Std allocator conformance cpp17 [\#856](https://github.com/nlohmann/json/pull/856) ([bogemic](https://github.com/bogemic)) - cmake: use BUILD\_INTERFACE/INSTALL\_INTERFACE [\#855](https://github.com/nlohmann/json/pull/855) ([theodelrieu](https://github.com/theodelrieu)) - to/from\_json: add a MSVC-specific static\_assert to force a stacktrace [\#854](https://github.com/nlohmann/json/pull/854) ([theodelrieu](https://github.com/theodelrieu)) - Add .natvis for MSVC debug view [\#844](https://github.com/nlohmann/json/pull/844) ([TinyTinni](https://github.com/TinyTinni)) - Updated hunter package links [\#829](https://github.com/nlohmann/json/pull/829) ([jowr](https://github.com/jowr)) - Typos README [\#811](https://github.com/nlohmann/json/pull/811) ([Itja](https://github.com/Itja)) - add forwarding references to json\_ref constructor [\#807](https://github.com/nlohmann/json/pull/807) ([theodelrieu](https://github.com/theodelrieu)) - Add transparent comparator and perfect forwarding support to find\(\) and count\(\) [\#795](https://github.com/nlohmann/json/pull/795) ([jseward](https://github.com/jseward)) - Error : 'identifier "size\_t" is undefined' in linux [\#793](https://github.com/nlohmann/json/pull/793) ([sonulohani](https://github.com/sonulohani)) - Fix Visual Studio 2017 warnings [\#788](https://github.com/nlohmann/json/pull/788) ([jseward](https://github.com/jseward)) - Fix warning C4706 on Visual Studio 2017 [\#785](https://github.com/nlohmann/json/pull/785) ([jseward](https://github.com/jseward)) - Set GENERATE\_TAGFILE in Doxyfile [\#783](https://github.com/nlohmann/json/pull/783) ([eld00d](https://github.com/eld00d)) - using more CMake [\#765](https://github.com/nlohmann/json/pull/765) ([nlohmann](https://github.com/nlohmann)) - Simplified istream handing \#367 [\#764](https://github.com/nlohmann/json/pull/764) ([pjkundert](https://github.com/pjkundert)) - Add info for the vcpkg package. [\#753](https://github.com/nlohmann/json/pull/753) ([gregmarr](https://github.com/gregmarr)) - fix from\_json implementation for pair/tuple [\#708](https://github.com/nlohmann/json/pull/708) ([theodelrieu](https://github.com/theodelrieu)) - Update json.hpp [\#686](https://github.com/nlohmann/json/pull/686) ([GoWebProd](https://github.com/GoWebProd)) - Remove duplicate word [\#685](https://github.com/nlohmann/json/pull/685) ([daixtrose](https://github.com/daixtrose)) - To fix compilation issue for intel OSX compiler [\#682](https://github.com/nlohmann/json/pull/682) ([kbthomp1](https://github.com/kbthomp1)) - Digraph warning [\#679](https://github.com/nlohmann/json/pull/679) ([traits](https://github.com/traits)) - massage -\> message [\#678](https://github.com/nlohmann/json/pull/678) ([DmitryKuk](https://github.com/DmitryKuk)) - Fix "not constraint" grammar in docs [\#674](https://github.com/nlohmann/json/pull/674) ([wincent](https://github.com/wincent)) - Add documentation for integration with CMake and hunter [\#671](https://github.com/nlohmann/json/pull/671) ([dan-42](https://github.com/dan-42)) - REFACTOR: rewrite CMakeLists.txt for better inlcude and reuse [\#669](https://github.com/nlohmann/json/pull/669) ([dan-42](https://github.com/dan-42)) - enable\_testing only if the JSON\_BuildTests is ON [\#666](https://github.com/nlohmann/json/pull/666) ([ilqvya](https://github.com/ilqvya)) - Support moving from rvalues in std::initializer\_list [\#663](https://github.com/nlohmann/json/pull/663) ([himikof](https://github.com/himikof)) - add ensure\_ascii parameter to dump. \#330 [\#654](https://github.com/nlohmann/json/pull/654) ([ryanjmulder](https://github.com/ryanjmulder)) - Rename BuildTests to JSON\_BuildTests [\#652](https://github.com/nlohmann/json/pull/652) ([olegendo](https://github.com/olegendo)) - Don't include \, use std::make\_shared [\#650](https://github.com/nlohmann/json/pull/650) ([olegendo](https://github.com/olegendo)) - Refacto/split basic json [\#643](https://github.com/nlohmann/json/pull/643) ([theodelrieu](https://github.com/theodelrieu)) - fix typo in operator\_\_notequal example [\#630](https://github.com/nlohmann/json/pull/630) ([Chocobo1](https://github.com/Chocobo1)) - Fix MSVC warning C4819 [\#629](https://github.com/nlohmann/json/pull/629) ([Chocobo1](https://github.com/Chocobo1)) - \[BugFix\] Add parentheses around std::min [\#626](https://github.com/nlohmann/json/pull/626) ([koemeet](https://github.com/koemeet)) - add pair/tuple conversions [\#624](https://github.com/nlohmann/json/pull/624) ([theodelrieu](https://github.com/theodelrieu)) - remove std::pair support [\#615](https://github.com/nlohmann/json/pull/615) ([theodelrieu](https://github.com/theodelrieu)) - Add pair support, fix CompatibleObject conversions \(fixes \#600\) [\#609](https://github.com/nlohmann/json/pull/609) ([theodelrieu](https://github.com/theodelrieu)) - \#550 Fix iterator related compiling issues for Intel icc [\#598](https://github.com/nlohmann/json/pull/598) ([HenryRLee](https://github.com/HenryRLee)) - Issue \#593 Fix the arithmetic operators in the iterator and reverse iterator [\#595](https://github.com/nlohmann/json/pull/595) ([HenryRLee](https://github.com/HenryRLee)) - fix doxygen error of basic\_json::get\(\) [\#583](https://github.com/nlohmann/json/pull/583) ([zhaohuaxishi](https://github.com/zhaohuaxishi)) - Fixing assignement for iterator wrapper second, and adding unit test [\#579](https://github.com/nlohmann/json/pull/579) ([Type1J](https://github.com/Type1J)) - Adding first and second properties to iteration\_proxy\_internal [\#578](https://github.com/nlohmann/json/pull/578) ([Type1J](https://github.com/Type1J)) - Adding support for Meson. [\#576](https://github.com/nlohmann/json/pull/576) ([Type1J](https://github.com/Type1J)) - add enum class default conversions [\#545](https://github.com/nlohmann/json/pull/545) ([theodelrieu](https://github.com/theodelrieu)) - Properly pop diagnostics [\#540](https://github.com/nlohmann/json/pull/540) ([tinloaf](https://github.com/tinloaf)) - Add Visual Studio 17 image to appveyor build matrix [\#536](https://github.com/nlohmann/json/pull/536) ([vpetrigo](https://github.com/vpetrigo)) - UTF8 encoding enhancement [\#534](https://github.com/nlohmann/json/pull/534) ([TedLyngmo](https://github.com/TedLyngmo)) - Fix typo [\#530](https://github.com/nlohmann/json/pull/530) ([berkus](https://github.com/berkus)) - Make exception base class visible in basic\_json [\#526](https://github.com/nlohmann/json/pull/526) ([ghost](https://github.com/ghost)) - :art: Namespace `uint8_t` from the C++ stdlib [\#510](https://github.com/nlohmann/json/pull/510) ([alexweej](https://github.com/alexweej)) - add to\_json method for C arrays [\#508](https://github.com/nlohmann/json/pull/508) ([theodelrieu](https://github.com/theodelrieu)) - Fix -Weffc++ warnings \(GNU 6.3.1\) [\#496](https://github.com/nlohmann/json/pull/496) ([TedLyngmo](https://github.com/TedLyngmo)) ## [v2.1.1](https://github.com/nlohmann/json/releases/tag/v2.1.1) (2017-02-25) [Full Changelog](https://github.com/nlohmann/json/compare/2.1.1...v2.1.1) ## [2.1.1](https://github.com/nlohmann/json/releases/tag/2.1.1) (2017-02-25) [Full Changelog](https://github.com/nlohmann/json/compare/v2.1.0...2.1.1) - warning in the library [\#472](https://github.com/nlohmann/json/issues/472) - How to create an array of Objects? [\#470](https://github.com/nlohmann/json/issues/470) - \[Bug?\] Cannot get int pointer, but int64\_t works [\#468](https://github.com/nlohmann/json/issues/468) - Illegal indirection [\#467](https://github.com/nlohmann/json/issues/467) - in vs can't find linkageId [\#466](https://github.com/nlohmann/json/issues/466) - Roundtrip error while parsing "1000000000000000010E5" [\#465](https://github.com/nlohmann/json/issues/465) - C4996 error and warning with Visual Studio [\#463](https://github.com/nlohmann/json/issues/463) - Support startIndex for from\_cbor/from\_msgpack [\#462](https://github.com/nlohmann/json/issues/462) - question: monospace font used in feature slideshow? [\#460](https://github.com/nlohmann/json/issues/460) - Object.keys\(\) [\#459](https://github.com/nlohmann/json/issues/459) - Use “, “ as delimiter for json-objects. [\#457](https://github.com/nlohmann/json/issues/457) - Enum -\> string during serialization and vice versa [\#455](https://github.com/nlohmann/json/issues/455) - doubles are printed as integers [\#454](https://github.com/nlohmann/json/issues/454) - Warnings with Visual Studio c++ \(VS2015 Update 3\) [\#453](https://github.com/nlohmann/json/issues/453) - Heap-buffer-overflow \(OSS-Fuzz issue 585\) [\#452](https://github.com/nlohmann/json/issues/452) - use of undeclared identifier 'UINT8\_MAX' [\#451](https://github.com/nlohmann/json/issues/451) - Question on the lifetime managment of objects at the lower levels [\#449](https://github.com/nlohmann/json/issues/449) - Json should not be constructible with 'json\*' [\#448](https://github.com/nlohmann/json/issues/448) - Move value\_t to namespace scope [\#447](https://github.com/nlohmann/json/issues/447) - Typo in README.md [\#446](https://github.com/nlohmann/json/issues/446) - make check compilation is unneccesarily slow [\#445](https://github.com/nlohmann/json/issues/445) - Problem in dump\(\) in json.h caused by ss.imbue [\#444](https://github.com/nlohmann/json/issues/444) - I want to create Windows Application in Visual Studio 2015 c++, and i have a problem [\#443](https://github.com/nlohmann/json/issues/443) - Implicit conversion issues [\#442](https://github.com/nlohmann/json/issues/442) - Parsing of floats locale dependent [\#302](https://github.com/nlohmann/json/issues/302) - Speedup CI builds using cotire [\#461](https://github.com/nlohmann/json/pull/461) ([tusharpm](https://github.com/tusharpm)) - TurpentineDistillery feature/locale independent str to num [\#450](https://github.com/nlohmann/json/pull/450) ([nlohmann](https://github.com/nlohmann)) - README: adjust boost::optional example [\#439](https://github.com/nlohmann/json/pull/439) ([jaredgrubb](https://github.com/jaredgrubb)) - fix \#414 - comparing to 0 literal [\#415](https://github.com/nlohmann/json/pull/415) ([stanmihai4](https://github.com/stanmihai4)) - locale-independent num-to-str [\#378](https://github.com/nlohmann/json/pull/378) ([TurpentineDistillery](https://github.com/TurpentineDistillery)) ## [v2.1.0](https://github.com/nlohmann/json/releases/tag/v2.1.0) (2017-01-28) [Full Changelog](https://github.com/nlohmann/json/compare/2.1.0...v2.1.0) ## [2.1.0](https://github.com/nlohmann/json/releases/tag/2.1.0) (2017-01-28) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.10...2.1.0) - Parsing multiple JSON objects from a string or stream [\#438](https://github.com/nlohmann/json/issues/438) - Use-of-uninitialized-value \(OSS-Fuzz issue 477\) [\#437](https://github.com/nlohmann/json/issues/437) - add `reserve` function for array to reserve memory before adding json values into it [\#436](https://github.com/nlohmann/json/issues/436) - Typo in examples page [\#434](https://github.com/nlohmann/json/issues/434) - avoid malformed json [\#433](https://github.com/nlohmann/json/issues/433) - How to add json objects to a map? [\#432](https://github.com/nlohmann/json/issues/432) - create json instance from raw json \(unsigned char\*\) [\#431](https://github.com/nlohmann/json/issues/431) - Getting std::invalid\_argument: stream error when following example [\#429](https://github.com/nlohmann/json/issues/429) - Forward declare-only header? [\#427](https://github.com/nlohmann/json/issues/427) - Implicit conversion from array to object [\#425](https://github.com/nlohmann/json/issues/425) - error C4996: 'strerror' when reading file [\#422](https://github.com/nlohmann/json/issues/422) - Get an error - JSON pointer must be empty or begin with '/' [\#421](https://github.com/nlohmann/json/issues/421) - size parameter for parse\(\) [\#419](https://github.com/nlohmann/json/issues/419) - json.hpp forcibly defines GCC\_VERSION [\#417](https://github.com/nlohmann/json/issues/417) - Use-of-uninitialized-value \(OSS-Fuzz issue 377\) [\#416](https://github.com/nlohmann/json/issues/416) - comparing to 0 literal [\#414](https://github.com/nlohmann/json/issues/414) - Single char converted to ASCII code instead of string [\#413](https://github.com/nlohmann/json/issues/413) - How to know if a string was parsed as utf-8? [\#406](https://github.com/nlohmann/json/issues/406) - Overloaded += to add objects to an array makes no sense? [\#404](https://github.com/nlohmann/json/issues/404) - Finding a value in an array [\#399](https://github.com/nlohmann/json/issues/399) - add release information in static function [\#397](https://github.com/nlohmann/json/issues/397) - Optimize memory usage of json objects in combination with binary serialization [\#373](https://github.com/nlohmann/json/issues/373) - Conversion operators not considered [\#369](https://github.com/nlohmann/json/issues/369) - Append ".0" to serialized floating\_point values that are digits-only. [\#362](https://github.com/nlohmann/json/issues/362) - Add a customization point for user-defined types [\#328](https://github.com/nlohmann/json/issues/328) - Conformance report for reference [\#307](https://github.com/nlohmann/json/issues/307) - Document the best way to serialize/deserialize user defined types to json [\#298](https://github.com/nlohmann/json/issues/298) - Add StringView template typename to basic\_json [\#297](https://github.com/nlohmann/json/issues/297) - \[Improvement\] Add option to remove exceptions [\#296](https://github.com/nlohmann/json/issues/296) - Performance in miloyip/nativejson-benchmark [\#202](https://github.com/nlohmann/json/issues/202) - conversion from/to user-defined types [\#435](https://github.com/nlohmann/json/pull/435) ([nlohmann](https://github.com/nlohmann)) - Fix documentation error [\#430](https://github.com/nlohmann/json/pull/430) ([vjon](https://github.com/vjon)) ## [v2.0.10](https://github.com/nlohmann/json/releases/tag/v2.0.10) (2017-01-02) [Full Changelog](https://github.com/nlohmann/json/compare/2.0.10...v2.0.10) ## [2.0.10](https://github.com/nlohmann/json/releases/tag/2.0.10) (2017-01-02) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.9...2.0.10) - Heap-buffer-overflow \(OSS-Fuzz issue 367\) [\#412](https://github.com/nlohmann/json/issues/412) - Heap-buffer-overflow \(OSS-Fuzz issue 366\) [\#411](https://github.com/nlohmann/json/issues/411) - Use-of-uninitialized-value \(OSS-Fuzz issue 347\) [\#409](https://github.com/nlohmann/json/issues/409) - Heap-buffer-overflow \(OSS-Fuzz issue 344\) [\#408](https://github.com/nlohmann/json/issues/408) - Heap-buffer-overflow \(OSS-Fuzz issue 343\) [\#407](https://github.com/nlohmann/json/issues/407) - Heap-buffer-overflow \(OSS-Fuzz issue 342\) [\#405](https://github.com/nlohmann/json/issues/405) - strerror throwing error in compiler VS2015 [\#403](https://github.com/nlohmann/json/issues/403) - json::parse of std::string being underlined by Visual Studio [\#402](https://github.com/nlohmann/json/issues/402) - Explicitly getting string without .dump\(\) [\#401](https://github.com/nlohmann/json/issues/401) - Possible to speed up json::parse? [\#398](https://github.com/nlohmann/json/issues/398) - the alphabetic order in the code influence console\_output. [\#396](https://github.com/nlohmann/json/issues/396) - Execute tests with clang sanitizers [\#394](https://github.com/nlohmann/json/issues/394) - Check if library can be used with ETL [\#361](https://github.com/nlohmann/json/issues/361) - Feature/clang sanitize [\#410](https://github.com/nlohmann/json/pull/410) ([Daniel599](https://github.com/Daniel599)) - Add Doozer build badge [\#400](https://github.com/nlohmann/json/pull/400) ([andoma](https://github.com/andoma)) ## [v2.0.9](https://github.com/nlohmann/json/releases/tag/v2.0.9) (2016-12-16) [Full Changelog](https://github.com/nlohmann/json/compare/2.0.9...v2.0.9) ## [2.0.9](https://github.com/nlohmann/json/releases/tag/2.0.9) (2016-12-16) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.8...2.0.9) - \#pragma GCC diagnostic ignored "-Wdocumentation" [\#393](https://github.com/nlohmann/json/issues/393) - How to parse this json file and write separate sub object as json files? [\#392](https://github.com/nlohmann/json/issues/392) - Integer-overflow \(OSS-Fuzz issue 267\) [\#389](https://github.com/nlohmann/json/issues/389) - Implement indefinite-length types from RFC 7049 [\#387](https://github.com/nlohmann/json/issues/387) - template parameter "T" is not used in declaring the parameter types of function template [\#386](https://github.com/nlohmann/json/issues/386) - Serializing json instances containing already serialized string values without escaping [\#385](https://github.com/nlohmann/json/issues/385) - Add test cases from RFC 7049 [\#384](https://github.com/nlohmann/json/issues/384) - Add a table of contents to the README file [\#383](https://github.com/nlohmann/json/issues/383) - Update FAQ section in the guidelines for contributing [\#382](https://github.com/nlohmann/json/issues/382) - Allow for forward declaring nlohmann::json [\#381](https://github.com/nlohmann/json/issues/381) - Bug in overflow detection when parsing integers [\#380](https://github.com/nlohmann/json/issues/380) - A unique name to mention the library? [\#377](https://github.com/nlohmann/json/issues/377) - Non-unique keys in objects. [\#375](https://github.com/nlohmann/json/issues/375) - Request: binary serialization/deserialization [\#358](https://github.com/nlohmann/json/issues/358) - Replace class iterator and const\_iterator by using a single template class to reduce code. [\#395](https://github.com/nlohmann/json/pull/395) ([Bosswestfalen](https://github.com/Bosswestfalen)) - Clang: quiet a warning [\#391](https://github.com/nlohmann/json/pull/391) ([jaredgrubb](https://github.com/jaredgrubb)) - Fix issue \#380: Signed integer overflow check [\#390](https://github.com/nlohmann/json/pull/390) ([qwename](https://github.com/qwename)) ## [v2.0.8](https://github.com/nlohmann/json/releases/tag/v2.0.8) (2016-12-02) [Full Changelog](https://github.com/nlohmann/json/compare/2.0.8...v2.0.8) ## [2.0.8](https://github.com/nlohmann/json/releases/tag/2.0.8) (2016-12-02) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.7...2.0.8) - Reading from file [\#374](https://github.com/nlohmann/json/issues/374) - Compiler warnings? [\#372](https://github.com/nlohmann/json/issues/372) - docs: how to release a json object in memory? [\#371](https://github.com/nlohmann/json/issues/371) - crash in dump [\#370](https://github.com/nlohmann/json/issues/370) - Coverity issue \(FORWARD\_NULL\) in lexer\(std::istream& s\) [\#368](https://github.com/nlohmann/json/issues/368) - json::parse on failed stream gets stuck [\#366](https://github.com/nlohmann/json/issues/366) - Performance improvements [\#365](https://github.com/nlohmann/json/issues/365) - 'to\_string' is not a member of 'std' [\#364](https://github.com/nlohmann/json/issues/364) - Crash in dump\(\) from a static object [\#359](https://github.com/nlohmann/json/issues/359) - json::parse\(...\) vs json j; j.parse\(...\) [\#357](https://github.com/nlohmann/json/issues/357) - Hi, is there any method to dump json to string with the insert order rather than alphabets [\#356](https://github.com/nlohmann/json/issues/356) - Provide an example of reading from an json with only a key that has an array of strings. [\#354](https://github.com/nlohmann/json/issues/354) - Request: access with default value. [\#353](https://github.com/nlohmann/json/issues/353) - {} and \[\] causes parser error. [\#352](https://github.com/nlohmann/json/issues/352) - Reading a JSON file into a JSON object [\#351](https://github.com/nlohmann/json/issues/351) - Request: 'emplace\_back' [\#349](https://github.com/nlohmann/json/issues/349) - Is it possible to stream data through the json parser without storing everything in memory? [\#347](https://github.com/nlohmann/json/issues/347) - pure virtual conversion operator [\#346](https://github.com/nlohmann/json/issues/346) - Floating point precision lost [\#345](https://github.com/nlohmann/json/issues/345) - unit-conversions SIGSEGV on armv7hl [\#303](https://github.com/nlohmann/json/issues/303) - Coverity scan fails [\#299](https://github.com/nlohmann/json/issues/299) - Using QString as string type [\#274](https://github.com/nlohmann/json/issues/274) ## [v2.0.7](https://github.com/nlohmann/json/releases/tag/v2.0.7) (2016-11-02) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.6...v2.0.7) - JSON5 [\#348](https://github.com/nlohmann/json/issues/348) - Check "Parsing JSON is a Minefield" [\#344](https://github.com/nlohmann/json/issues/344) - Allow hex numbers [\#342](https://github.com/nlohmann/json/issues/342) - Convert strings to numbers [\#341](https://github.com/nlohmann/json/issues/341) - ""-operators ignore the length parameter [\#340](https://github.com/nlohmann/json/issues/340) - JSON into std::tuple [\#339](https://github.com/nlohmann/json/issues/339) - JSON into vector [\#335](https://github.com/nlohmann/json/issues/335) - Installing with Homebrew on Mac Errors \(El Capitan\) [\#331](https://github.com/nlohmann/json/issues/331) - g++ make check results in error [\#312](https://github.com/nlohmann/json/issues/312) - Cannot convert from 'json' to 'char' [\#276](https://github.com/nlohmann/json/issues/276) - Please add a Pretty-Print option for arrays to stay always in one line [\#229](https://github.com/nlohmann/json/issues/229) - Conversion to STL map\\> gives error [\#220](https://github.com/nlohmann/json/issues/220) - std::unorderd\_map cannot be used as ObjectType [\#164](https://github.com/nlohmann/json/issues/164) - fix minor grammar/style issue in README.md [\#336](https://github.com/nlohmann/json/pull/336) ([seeekr](https://github.com/seeekr)) ## [v2.0.6](https://github.com/nlohmann/json/releases/tag/v2.0.6) (2016-10-15) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.5...v2.0.6) - How to handle json files? [\#333](https://github.com/nlohmann/json/issues/333) - This file requires compiler and library support .... [\#332](https://github.com/nlohmann/json/issues/332) - Segmentation fault on saving json to file [\#326](https://github.com/nlohmann/json/issues/326) - parse error - unexpected \ with 2.0.5 [\#325](https://github.com/nlohmann/json/issues/325) - Add nested object capability to pointers [\#323](https://github.com/nlohmann/json/issues/323) - Fix usage examples' comments for std::multiset [\#322](https://github.com/nlohmann/json/issues/322) - json\_unit runs forever when executed in build directory [\#319](https://github.com/nlohmann/json/issues/319) - Visual studio 2015 update3 true != TRUE [\#317](https://github.com/nlohmann/json/issues/317) - releasing single header file in compressed format [\#316](https://github.com/nlohmann/json/issues/316) - json object from std::ifstream [\#315](https://github.com/nlohmann/json/issues/315) - make has\_mapped\_type struct friendly [\#324](https://github.com/nlohmann/json/pull/324) ([vpetrigo](https://github.com/vpetrigo)) - Fix usage examples' comments for std::multiset [\#321](https://github.com/nlohmann/json/pull/321) ([vasild](https://github.com/vasild)) - Include dir relocation [\#318](https://github.com/nlohmann/json/pull/318) ([ChristophJud](https://github.com/ChristophJud)) - trivial documentation fix [\#313](https://github.com/nlohmann/json/pull/313) ([5tefan](https://github.com/5tefan)) ## [v2.0.5](https://github.com/nlohmann/json/releases/tag/v2.0.5) (2016-09-14) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.4...v2.0.5) - \[feature request\]: schema validator and comments [\#311](https://github.com/nlohmann/json/issues/311) - make json\_benchmarks no longer working in 2.0.4 [\#310](https://github.com/nlohmann/json/issues/310) - Segmentation fault \(core dumped\) [\#309](https://github.com/nlohmann/json/issues/309) - No matching member function for call to 'get\_impl' [\#308](https://github.com/nlohmann/json/issues/308) ## [v2.0.4](https://github.com/nlohmann/json/releases/tag/v2.0.4) (2016-09-11) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.3...v2.0.4) - Parsing fails without space at end of file [\#306](https://github.com/nlohmann/json/issues/306) - json schema validator [\#305](https://github.com/nlohmann/json/issues/305) - Unused variable warning [\#304](https://github.com/nlohmann/json/issues/304) ## [v2.0.3](https://github.com/nlohmann/json/releases/tag/v2.0.3) (2016-08-31) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.2...v2.0.3) - warning C4706: assignment within conditional expression [\#295](https://github.com/nlohmann/json/issues/295) - Q: Is it possible to build json tree from already UTF8 encoded values? [\#293](https://github.com/nlohmann/json/issues/293) - Equality operator results in array when assigned object [\#292](https://github.com/nlohmann/json/issues/292) - Support for integers not from the range \[-\(2\*\*53\)+1, \(2\*\*53\)-1\] in parser [\#291](https://github.com/nlohmann/json/issues/291) - Support for iterator-range parsing [\#290](https://github.com/nlohmann/json/issues/290) - Horribly inconsistent behavior between const/non-const reference in operator \[\] \(\) [\#289](https://github.com/nlohmann/json/issues/289) - Silently get numbers into smaller types [\#288](https://github.com/nlohmann/json/issues/288) - Incorrect parsing of large int64\_t numbers [\#287](https://github.com/nlohmann/json/issues/287) - \[question\]: macro to disable floating point support [\#284](https://github.com/nlohmann/json/issues/284) - unit-constructor1.cpp: Fix floating point truncation warning [\#300](https://github.com/nlohmann/json/pull/300) ([t-b](https://github.com/t-b)) ## [v2.0.2](https://github.com/nlohmann/json/releases/tag/v2.0.2) (2016-07-31) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.1...v2.0.2) - can function dump\(\) return string in the order I push in the json object ? [\#286](https://github.com/nlohmann/json/issues/286) - Error on the Mac: Undefined symbols for architecture x86\_64 [\#285](https://github.com/nlohmann/json/issues/285) - value\(\) does not work with \_json\_pointer types [\#283](https://github.com/nlohmann/json/issues/283) - Build error for std::int64 [\#282](https://github.com/nlohmann/json/issues/282) - strings can't be accessed after dump\(\)-\>parse\(\) - type is lost [\#281](https://github.com/nlohmann/json/issues/281) - Easy serialization of classes [\#280](https://github.com/nlohmann/json/issues/280) - recursive data structures [\#277](https://github.com/nlohmann/json/issues/277) - hexify\(\) function emits conversion warning [\#270](https://github.com/nlohmann/json/issues/270) - let the makefile choose the correct sed [\#279](https://github.com/nlohmann/json/pull/279) ([murinicanor](https://github.com/murinicanor)) - Update hexify to use array lookup instead of ternary \(\#270\) [\#275](https://github.com/nlohmann/json/pull/275) ([dtoma](https://github.com/dtoma)) ## [v2.0.1](https://github.com/nlohmann/json/releases/tag/v2.0.1) (2016-06-28) [Full Changelog](https://github.com/nlohmann/json/compare/v2.0.0...v2.0.1) - Compilation error. [\#273](https://github.com/nlohmann/json/issues/273) - dump\(\) performance degradation in v2 [\#272](https://github.com/nlohmann/json/issues/272) - fixed a tiny typo [\#271](https://github.com/nlohmann/json/pull/271) ([feroldi](https://github.com/feroldi)) ## [v2.0.0](https://github.com/nlohmann/json/releases/tag/v2.0.0) (2016-06-23) [Full Changelog](https://github.com/nlohmann/json/compare/v1.1.0...v2.0.0) - json::diff generates incorrect patch when removing multiple array elements. [\#269](https://github.com/nlohmann/json/issues/269) - Docs - What does Json\[key\] return? [\#267](https://github.com/nlohmann/json/issues/267) - Compiler Errors With JSON.hpp [\#265](https://github.com/nlohmann/json/issues/265) - Ambiguous push\_back and operator+= overloads [\#263](https://github.com/nlohmann/json/issues/263) - Preseving order of items in json [\#262](https://github.com/nlohmann/json/issues/262) - '\' char problem in strings [\#261](https://github.com/nlohmann/json/issues/261) - VS2015 compile fail [\#260](https://github.com/nlohmann/json/issues/260) - -Wconversion warning [\#259](https://github.com/nlohmann/json/issues/259) - Maybe a bug [\#258](https://github.com/nlohmann/json/issues/258) - Few tests failed on Visual C++ 2015 [\#257](https://github.com/nlohmann/json/issues/257) - Access keys when iteration with new for loop C++11 [\#256](https://github.com/nlohmann/json/issues/256) - multiline text values [\#255](https://github.com/nlohmann/json/issues/255) - Error when using json in g++ [\#254](https://github.com/nlohmann/json/issues/254) - is the release 2.0? [\#253](https://github.com/nlohmann/json/issues/253) - concatenate objects [\#252](https://github.com/nlohmann/json/issues/252) - Encoding [\#251](https://github.com/nlohmann/json/issues/251) - Unable to build example for constructing json object with stringstreams [\#250](https://github.com/nlohmann/json/issues/250) - Hexadecimal support [\#249](https://github.com/nlohmann/json/issues/249) - Update long-term goals [\#246](https://github.com/nlohmann/json/issues/246) - Contribution To This Json Project [\#245](https://github.com/nlohmann/json/issues/245) - Trouble using parser with initial dictionary [\#243](https://github.com/nlohmann/json/issues/243) - Unit test fails when doing a CMake out-of-tree build [\#241](https://github.com/nlohmann/json/issues/241) - -Wconversion warnings [\#239](https://github.com/nlohmann/json/issues/239) - Additional integration options [\#237](https://github.com/nlohmann/json/issues/237) - .get\\(\) works for non spaced string but returns as array for spaced/longer strings [\#236](https://github.com/nlohmann/json/issues/236) - ambiguous overload for 'push\_back' and 'operator+=' [\#235](https://github.com/nlohmann/json/issues/235) - Can't use basic\_json::iterator as a base iterator for std::move\_iterator [\#233](https://github.com/nlohmann/json/issues/233) - json object's creation can freezes execution [\#231](https://github.com/nlohmann/json/issues/231) - Incorrect dumping of parsed numbers with exponents, but without decimal places [\#230](https://github.com/nlohmann/json/issues/230) - double values are serialized with commas as decimal points [\#228](https://github.com/nlohmann/json/issues/228) - Move semantics with std::initializer\_list [\#225](https://github.com/nlohmann/json/issues/225) - replace emplace [\#224](https://github.com/nlohmann/json/issues/224) - abort during getline in yyfill [\#223](https://github.com/nlohmann/json/issues/223) - free\(\): invalid pointer error in GCC 5.2.1 [\#221](https://github.com/nlohmann/json/issues/221) - Error compile Android NDK error: 'strtof' is not a member of 'std' [\#219](https://github.com/nlohmann/json/issues/219) - Wrong link in the README.md [\#217](https://github.com/nlohmann/json/issues/217) - Wide character strings not supported [\#216](https://github.com/nlohmann/json/issues/216) - Memory allocations using range-based for loops [\#214](https://github.com/nlohmann/json/issues/214) - would you like to support gcc 4.8.1? [\#211](https://github.com/nlohmann/json/issues/211) - Reading concatenated json's from an istream [\#210](https://github.com/nlohmann/json/issues/210) - Conflicting typedef of ssize\_t on Windows 32 bit when using Boost.Python [\#204](https://github.com/nlohmann/json/issues/204) - Inconsistency between operator\[\] and push\_back [\#203](https://github.com/nlohmann/json/issues/203) - Small bugs in json.hpp \(get\_number\) and unit.cpp \(non-standard integer type test\) [\#199](https://github.com/nlohmann/json/issues/199) - GCC/clang floating point parsing bug in strtod\(\) [\#195](https://github.com/nlohmann/json/issues/195) - What is within scope? [\#192](https://github.com/nlohmann/json/issues/192) - Bugs in miloyip/nativejson-benchmark: roundtrips [\#187](https://github.com/nlohmann/json/issues/187) - Floating point exceptions [\#181](https://github.com/nlohmann/json/issues/181) - Integer conversion to unsigned [\#178](https://github.com/nlohmann/json/issues/178) - map string string fails to compile [\#176](https://github.com/nlohmann/json/issues/176) - In basic\_json::basic\_json\(const CompatibleArrayType& val\), the requirement of CompatibleArrayType is not strict enough. [\#174](https://github.com/nlohmann/json/issues/174) - Provide a FAQ [\#163](https://github.com/nlohmann/json/issues/163) - Implicit assignment to std::string fails [\#144](https://github.com/nlohmann/json/issues/144) - Fix Issue \#265 [\#266](https://github.com/nlohmann/json/pull/266) ([06needhamt](https://github.com/06needhamt)) - Define CMake/CTest tests [\#247](https://github.com/nlohmann/json/pull/247) ([robertmrk](https://github.com/robertmrk)) - Out of tree builds and a few other miscellaneous CMake cleanups. [\#242](https://github.com/nlohmann/json/pull/242) ([ChrisKitching](https://github.com/ChrisKitching)) - Implement additional integration options [\#238](https://github.com/nlohmann/json/pull/238) ([robertmrk](https://github.com/robertmrk)) - make serialization locale-independent [\#232](https://github.com/nlohmann/json/pull/232) ([nlohmann](https://github.com/nlohmann)) - fixes \#223 by updating README.md [\#227](https://github.com/nlohmann/json/pull/227) ([kevin--](https://github.com/kevin--)) - Use namespace std for int64\_t and uint64\_t [\#226](https://github.com/nlohmann/json/pull/226) ([lv-zheng](https://github.com/lv-zheng)) - Added missing cerrno header to fix ERANGE compile error on android [\#222](https://github.com/nlohmann/json/pull/222) ([Teemperor](https://github.com/Teemperor)) - Corrected readme [\#218](https://github.com/nlohmann/json/pull/218) ([Annihil](https://github.com/Annihil)) - Create PULL\_REQUEST\_TEMPLATE.md [\#213](https://github.com/nlohmann/json/pull/213) ([whackashoe](https://github.com/whackashoe)) - fixed noexcept; added constexpr [\#208](https://github.com/nlohmann/json/pull/208) ([nlohmann](https://github.com/nlohmann)) - Add support for afl-fuzz testing [\#207](https://github.com/nlohmann/json/pull/207) ([mykter](https://github.com/mykter)) - replaced ssize\_t occurrences with auto \(addresses \#204\) [\#205](https://github.com/nlohmann/json/pull/205) ([nlohmann](https://github.com/nlohmann)) - Fixed issue \#199 - Small bugs in json.hpp \(get\_number\) and unit.cpp \(non-standard integer type test\) [\#200](https://github.com/nlohmann/json/pull/200) ([twelsby](https://github.com/twelsby)) - Fix broken link [\#197](https://github.com/nlohmann/json/pull/197) ([vog](https://github.com/vog)) - Issue \#195 - update Travis to Trusty due to gcc/clang strtod\(\) bug [\#196](https://github.com/nlohmann/json/pull/196) ([twelsby](https://github.com/twelsby)) - Issue \#178 - Extending support to full uint64\_t/int64\_t range and unsigned type \(updated\) [\#193](https://github.com/nlohmann/json/pull/193) ([twelsby](https://github.com/twelsby)) ## [v1.1.0](https://github.com/nlohmann/json/releases/tag/v1.1.0) (2016-01-24) [Full Changelog](https://github.com/nlohmann/json/compare/v1.0.0...v1.1.0) - Small error in pull \#185 [\#194](https://github.com/nlohmann/json/issues/194) - Bugs in miloyip/nativejson-benchmark: floating-point parsing [\#186](https://github.com/nlohmann/json/issues/186) - Floating point equality [\#185](https://github.com/nlohmann/json/issues/185) - Unused variables in catch [\#180](https://github.com/nlohmann/json/issues/180) - Typo in documentation [\#179](https://github.com/nlohmann/json/issues/179) - JSON performance benchmark comparision [\#177](https://github.com/nlohmann/json/issues/177) - Since re2c is often ignored in pull requests, it may make sense to make a contributing.md file [\#175](https://github.com/nlohmann/json/issues/175) - Question about exceptions [\#173](https://github.com/nlohmann/json/issues/173) - Android? [\#172](https://github.com/nlohmann/json/issues/172) - Cannot index by key of type static constexpr const char\* [\#171](https://github.com/nlohmann/json/issues/171) - Add assertions [\#168](https://github.com/nlohmann/json/issues/168) - MSVC 2015 build fails when attempting to compare object\_t [\#167](https://github.com/nlohmann/json/issues/167) - Member detector is not portable [\#166](https://github.com/nlohmann/json/issues/166) - Unnecessary const\_cast [\#162](https://github.com/nlohmann/json/issues/162) - Question about get\_ref\(\) [\#128](https://github.com/nlohmann/json/issues/128) - range based for loop for objects [\#83](https://github.com/nlohmann/json/issues/83) - Consider submitting this to the Boost Library Incubator [\#66](https://github.com/nlohmann/json/issues/66) - Fixed Issue \#186 - add strto\(f|d|ld\) overload wrappers, "-0.0" special case and FP trailing zero [\#191](https://github.com/nlohmann/json/pull/191) ([twelsby](https://github.com/twelsby)) - Issue \#185 - remove approx\(\) and use \#pragma to kill warnings [\#190](https://github.com/nlohmann/json/pull/190) ([twelsby](https://github.com/twelsby)) - Fixed Issue \#171 - added two extra template overloads of operator\[\] for T\* arguments [\#189](https://github.com/nlohmann/json/pull/189) ([twelsby](https://github.com/twelsby)) - Fixed issue \#167 - removed operator ValueType\(\) condition for VS2015 [\#188](https://github.com/nlohmann/json/pull/188) ([twelsby](https://github.com/twelsby)) - Implementation of get\_ref\(\) [\#184](https://github.com/nlohmann/json/pull/184) ([dariomt](https://github.com/dariomt)) - Fixed some typos in CONTRIBUTING.md [\#182](https://github.com/nlohmann/json/pull/182) ([nibroc](https://github.com/nibroc)) ## [v1.0.0](https://github.com/nlohmann/json/releases/tag/v1.0.0) (2015-12-27) [Full Changelog](https://github.com/nlohmann/json/compare/v1.0.0-rc1...v1.0.0) - add key name to exception [\#160](https://github.com/nlohmann/json/issues/160) - Getting member discarding qualifyer [\#159](https://github.com/nlohmann/json/issues/159) - basic\_json::iterator::value\(\) output includes quotes while basic\_json::iterator::key\(\) doesn't [\#158](https://github.com/nlohmann/json/issues/158) - Indexing `const basic_json<>` with `const basic_string` [\#157](https://github.com/nlohmann/json/issues/157) - token\_type\_name\(token\_type t\): not all control paths return a value [\#156](https://github.com/nlohmann/json/issues/156) - prevent json.hpp from emitting compiler warnings [\#154](https://github.com/nlohmann/json/issues/154) - json::parse\(string\) does not check utf8 bom [\#152](https://github.com/nlohmann/json/issues/152) - unsigned 64bit values output as signed [\#151](https://github.com/nlohmann/json/issues/151) - Wish feature: json5 [\#150](https://github.com/nlohmann/json/issues/150) - Unable to compile on MSVC 2015 with SDL checking enabled: This function or variable may be unsafe. [\#149](https://github.com/nlohmann/json/issues/149) - "Json Object" type does not keep object order [\#148](https://github.com/nlohmann/json/issues/148) - dump\(\) convert strings encoded by utf-8 to shift-jis on windows 10. [\#147](https://github.com/nlohmann/json/issues/147) - Unable to get field names in a json object [\#145](https://github.com/nlohmann/json/issues/145) - Question: Is the use of incomplete type correct? [\#138](https://github.com/nlohmann/json/issues/138) - json.hpp:5746:32: error: 'to\_string' is not a member of 'std' [\#136](https://github.com/nlohmann/json/issues/136) - Bug in basic\_json::operator\[\] const overload [\#135](https://github.com/nlohmann/json/issues/135) - wrong enable\_if for const pointer \(instead of pointer-to-const\) [\#134](https://github.com/nlohmann/json/issues/134) - overload of at\(\) with default value [\#133](https://github.com/nlohmann/json/issues/133) - Splitting source [\#132](https://github.com/nlohmann/json/issues/132) - Question about get\_ptr\(\) [\#127](https://github.com/nlohmann/json/issues/127) - Visual Studio 14 Debug assertion failed [\#125](https://github.com/nlohmann/json/issues/125) - Memory leak in face of exceptions [\#118](https://github.com/nlohmann/json/issues/118) - Find and Count for arrays [\#117](https://github.com/nlohmann/json/issues/117) - dynamically constructing an arbitrarily nested object [\#114](https://github.com/nlohmann/json/issues/114) - Returning any data type [\#113](https://github.com/nlohmann/json/issues/113) - Compile error with g++ 4.9.3 cygwin 64-bit [\#112](https://github.com/nlohmann/json/issues/112) - insert json array issue with gcc4.8.2 [\#110](https://github.com/nlohmann/json/issues/110) - error: unterminated raw string [\#109](https://github.com/nlohmann/json/issues/109) - vector\ copy constructor really weird [\#108](https://github.com/nlohmann/json/issues/108) - \[clang-3.6.2\] string/sstream with number to json issue [\#107](https://github.com/nlohmann/json/issues/107) - object field accessors [\#103](https://github.com/nlohmann/json/issues/103) - v8pp and json [\#95](https://github.com/nlohmann/json/issues/95) - Wishlist [\#65](https://github.com/nlohmann/json/issues/65) - Windows/Visual Studio \(through 2013\) is unsupported [\#62](https://github.com/nlohmann/json/issues/62) - Replace sprintf with hex function, this fixes \#149 [\#153](https://github.com/nlohmann/json/pull/153) ([whackashoe](https://github.com/whackashoe)) - Fix character skipping after a surrogate pair [\#146](https://github.com/nlohmann/json/pull/146) ([robertmrk](https://github.com/robertmrk)) - Detect correctly pointer-to-const [\#137](https://github.com/nlohmann/json/pull/137) ([dariomt](https://github.com/dariomt)) - disabled "CopyAssignable" test for MSVC in Debug mode, see \#125 [\#131](https://github.com/nlohmann/json/pull/131) ([dariomt](https://github.com/dariomt)) - removed stream operator for iterator, resolution for \#125 [\#130](https://github.com/nlohmann/json/pull/130) ([dariomt](https://github.com/dariomt)) - fixed typos in comments for examples [\#129](https://github.com/nlohmann/json/pull/129) ([dariomt](https://github.com/dariomt)) - Remove superfluous inefficiency [\#126](https://github.com/nlohmann/json/pull/126) ([d-frey](https://github.com/d-frey)) - remove invalid parameter '-stdlib=libc++' in CMakeLists.txt [\#124](https://github.com/nlohmann/json/pull/124) ([emvivre](https://github.com/emvivre)) - exception-safe object creation, fixes \#118 [\#122](https://github.com/nlohmann/json/pull/122) ([d-frey](https://github.com/d-frey)) - Fix small oversight. [\#121](https://github.com/nlohmann/json/pull/121) ([ColinH](https://github.com/ColinH)) - Overload parse\(\) to accept an rvalue reference [\#120](https://github.com/nlohmann/json/pull/120) ([silverweed](https://github.com/silverweed)) - Use the right variable name in doc string [\#115](https://github.com/nlohmann/json/pull/115) ([whoshuu](https://github.com/whoshuu)) ## [v1.0.0-rc1](https://github.com/nlohmann/json/releases/tag/v1.0.0-rc1) (2015-07-26) [Full Changelog](https://github.com/nlohmann/json/compare/4502e7e51c0569419c26e75fbdd5748170603e54...v1.0.0-rc1) - Finish documenting the public interface in Doxygen [\#102](https://github.com/nlohmann/json/issues/102) - Binary string causes numbers to be dumped as hex [\#101](https://github.com/nlohmann/json/issues/101) - failed to iterator json object with reverse\_iterator [\#100](https://github.com/nlohmann/json/issues/100) - 'noexcept' : unknown override specifier [\#99](https://github.com/nlohmann/json/issues/99) - json float parsing problem [\#98](https://github.com/nlohmann/json/issues/98) - Adjust wording to JSON RFC [\#97](https://github.com/nlohmann/json/issues/97) - static analysis warnings [\#94](https://github.com/nlohmann/json/issues/94) - reverse\_iterator operator inheritance problem [\#93](https://github.com/nlohmann/json/issues/93) - init error [\#92](https://github.com/nlohmann/json/issues/92) - access by \(const\) reference [\#91](https://github.com/nlohmann/json/issues/91) - is\_integer and is\_float tests [\#90](https://github.com/nlohmann/json/issues/90) - Nonstandard integer type [\#89](https://github.com/nlohmann/json/issues/89) - static library build [\#84](https://github.com/nlohmann/json/issues/84) - lexer::get\_number return NAN [\#82](https://github.com/nlohmann/json/issues/82) - MinGW have no std::to\_string [\#80](https://github.com/nlohmann/json/issues/80) - Incorrect behaviour of basic\_json::count method [\#78](https://github.com/nlohmann/json/issues/78) - Invoking is\_array\(\) function creates "null" value [\#77](https://github.com/nlohmann/json/issues/77) - dump\(\) / parse\(\) not idempotent [\#76](https://github.com/nlohmann/json/issues/76) - Handle infinity and NaN cases [\#70](https://github.com/nlohmann/json/issues/70) - errors in g++-4.8.1 [\#68](https://github.com/nlohmann/json/issues/68) - Keys when iterating over objects [\#67](https://github.com/nlohmann/json/issues/67) - Compilation results in tons of warnings [\#64](https://github.com/nlohmann/json/issues/64) - Complete brief documentation [\#61](https://github.com/nlohmann/json/issues/61) - Double quotation mark is not parsed correctly [\#60](https://github.com/nlohmann/json/issues/60) - Get coverage back to 100% [\#58](https://github.com/nlohmann/json/issues/58) - erase elements using iterators [\#57](https://github.com/nlohmann/json/issues/57) - Removing item from array [\#56](https://github.com/nlohmann/json/issues/56) - Serialize/Deserialize like PHP? [\#55](https://github.com/nlohmann/json/issues/55) - Numbers as keys [\#54](https://github.com/nlohmann/json/issues/54) - Why are elements alphabetized on key while iterating? [\#53](https://github.com/nlohmann/json/issues/53) - Document erase, count, and iterators key and value [\#52](https://github.com/nlohmann/json/issues/52) - Do not use std::to\_string [\#51](https://github.com/nlohmann/json/issues/51) - Supported compilers [\#50](https://github.com/nlohmann/json/issues/50) - Confused about iterating through json objects [\#49](https://github.com/nlohmann/json/issues/49) - Use non-member begin/end [\#48](https://github.com/nlohmann/json/issues/48) - Erase key [\#47](https://github.com/nlohmann/json/issues/47) - Key iterator [\#46](https://github.com/nlohmann/json/issues/46) - Add count member function [\#45](https://github.com/nlohmann/json/issues/45) - Problem getting vector \(array\) of strings [\#44](https://github.com/nlohmann/json/issues/44) - Compilation error due to assuming that private=public [\#43](https://github.com/nlohmann/json/issues/43) - Use of deprecated implicit copy constructor [\#42](https://github.com/nlohmann/json/issues/42) - Printing attribute names [\#39](https://github.com/nlohmann/json/issues/39) - dumping a small number\_float just outputs 0.000000 [\#37](https://github.com/nlohmann/json/issues/37) - find is error [\#32](https://github.com/nlohmann/json/issues/32) - Avoid using spaces when encoding without pretty print [\#31](https://github.com/nlohmann/json/issues/31) - Cannot encode long numbers [\#30](https://github.com/nlohmann/json/issues/30) - segmentation fault when iterating over empty arrays/objects [\#28](https://github.com/nlohmann/json/issues/28) - Creating an empty array [\#27](https://github.com/nlohmann/json/issues/27) - Custom allocator support [\#25](https://github.com/nlohmann/json/issues/25) - make the type of the used string container customizable [\#20](https://github.com/nlohmann/json/issues/20) - Improper parsing of JSON string "\\" [\#17](https://github.com/nlohmann/json/issues/17) - create a header-only version [\#16](https://github.com/nlohmann/json/issues/16) - Don't return "const values" [\#15](https://github.com/nlohmann/json/issues/15) - Add to\_string overload for indentation [\#13](https://github.com/nlohmann/json/issues/13) - string parser does not recognize uncompliant strings [\#12](https://github.com/nlohmann/json/issues/12) - possible double-free in find function [\#11](https://github.com/nlohmann/json/issues/11) - UTF-8 encoding/deconding/testing [\#10](https://github.com/nlohmann/json/issues/10) - move code into namespace [\#9](https://github.com/nlohmann/json/issues/9) - free functions for explicit objects and arrays in initializer lists [\#8](https://github.com/nlohmann/json/issues/8) - unique\_ptr for ownership [\#7](https://github.com/nlohmann/json/issues/7) - Add unit tests [\#4](https://github.com/nlohmann/json/issues/4) - Drop C++98 support [\#3](https://github.com/nlohmann/json/issues/3) - Test case coverage [\#2](https://github.com/nlohmann/json/issues/2) - Runtime error in Travis job [\#1](https://github.com/nlohmann/json/issues/1) - Keyword 'inline' is useless when member functions are defined in headers [\#87](https://github.com/nlohmann/json/pull/87) ([ahamez](https://github.com/ahamez)) - Remove useless typename [\#86](https://github.com/nlohmann/json/pull/86) ([ahamez](https://github.com/ahamez)) - Avoid warning with Xcode's clang [\#85](https://github.com/nlohmann/json/pull/85) ([ahamez](https://github.com/ahamez)) - Fix typos [\#73](https://github.com/nlohmann/json/pull/73) ([maqnouch](https://github.com/maqnouch)) - Replace `default_callback` function with `nullptr` and check for null… [\#72](https://github.com/nlohmann/json/pull/72) ([aburgh](https://github.com/aburgh)) - support enum [\#71](https://github.com/nlohmann/json/pull/71) ([likebeta](https://github.com/likebeta)) - Fix performance regression introduced with the parsing callback feature. [\#69](https://github.com/nlohmann/json/pull/69) ([aburgh](https://github.com/aburgh)) - Improve the implementations of the comparission-operators [\#63](https://github.com/nlohmann/json/pull/63) ([Fiona-J-W](https://github.com/Fiona-J-W)) - Fix compilation of json\_unit with GCC 5 [\#59](https://github.com/nlohmann/json/pull/59) ([dkopecek](https://github.com/dkopecek)) - Parse streams incrementally. [\#40](https://github.com/nlohmann/json/pull/40) ([aburgh](https://github.com/aburgh)) - Feature/small float serialization [\#38](https://github.com/nlohmann/json/pull/38) ([jrandall](https://github.com/jrandall)) - template version with re2c scanner [\#36](https://github.com/nlohmann/json/pull/36) ([nlohmann](https://github.com/nlohmann)) - more descriptive documentation in example [\#33](https://github.com/nlohmann/json/pull/33) ([luxe](https://github.com/luxe)) - Fix string conversion under Clang [\#26](https://github.com/nlohmann/json/pull/26) ([wancw](https://github.com/wancw)) - Fixed dumping of strings [\#24](https://github.com/nlohmann/json/pull/24) ([Teemperor](https://github.com/Teemperor)) - Added a remark to the readme that coverage is GCC only for now [\#23](https://github.com/nlohmann/json/pull/23) ([Teemperor](https://github.com/Teemperor)) - Unicode escaping [\#22](https://github.com/nlohmann/json/pull/22) ([Teemperor](https://github.com/Teemperor)) - Implemented the JSON spec for string parsing for everything but the \uXXXX escaping [\#21](https://github.com/nlohmann/json/pull/21) ([Teemperor](https://github.com/Teemperor)) - add the std iterator typedefs to iterator and const\_iterator [\#19](https://github.com/nlohmann/json/pull/19) ([kirkshoop](https://github.com/kirkshoop)) - Fixed escaped quotes [\#18](https://github.com/nlohmann/json/pull/18) ([Teemperor](https://github.com/Teemperor)) - Fix double delete on std::bad\_alloc exception [\#14](https://github.com/nlohmann/json/pull/14) ([elliotgoodrich](https://github.com/elliotgoodrich)) - Added CMake and lcov [\#6](https://github.com/nlohmann/json/pull/6) ([Teemperor](https://github.com/Teemperor)) - Version 2.0 [\#5](https://github.com/nlohmann/json/pull/5) ([nlohmann](https://github.com/nlohmann)) \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* json-3.12.0/FILES.md000066400000000000000000000206041477615276400137570ustar00rootroot00000000000000# Supporting files This file describes the source for supporting files; that is, files that are not part of the library, but define the infrastructure and other aspects of the project. - [Continuous Integration](#continuous-integration) - [GitHub](#github) - [REUSE](#reuse) - [Package Managers](#package-managers) ## Continuous Integration ### `.cirrus.yml` Configuration file for the pipeline at [Cirrus CI](https://cirrus-ci.com/github/nlohmann/json). Further documentation: - [Writing tasks](https://cirrus-ci.org/guide/writing-tasks/) > [!IMPORTANT] > The filename `.cirrus.yml` and position (root of the repository) are predetermined by Cirrus CI. ### `.github/external_ci/appveyor.yml` Configuration for the pipelines at [AppVeyor](https://ci.appveyor.com/project/nlohmann/json). Further documentation: - [appveyor.yml reference](https://www.appveyor.com/docs/appveyor-yml/) > [!NOTE] > The filename can be freely configured in the AppVeyor project. ## GitHub ### `CITATION.cff` A file to configure the citation for the repository which is displayed in the sidebar of the project. Further documentation: - [About CITATION files](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files) > [!IMPORTANT] > The filename `CITATION.cff` and position (root of the repository) are predetermined by GitHub. ### `.github/CODE_OF_CONDUCT.md` The code of conduct for the project. This is the Markdown version of the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). The code of conduct is linked on the [Community Standards](https://github.com/nlohmann/json/community) page and is mentioned by the Sentiment Bot. Further documentation: - [Adding a code of conduct to your project](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project) > [!IMPORTANT] > The filename `.github/CODE_OF_CONDUCT.md` is predetermined by GitHub. > [!NOTE] > The file is part of the documentation and is included in `docs/mkdocs/docs/community/code_of_conduct.md`. ### `.github/CODEOWNERS` The code owners file for the project which is used to select reviewers for new pull requests. Further documentation: - [About code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) > [!IMPORTANT] > The filename `.github/CODEOWNERS` is predetermined by GitHub. ### `.github/config.yml` Configuration file for [probot](https://probot.github.io/apps/), in particular the [Sentiment Bot](https://probot.github.io/apps/sentiment-bot/) and the [Request Info](https://probot.github.io/apps/request-info/). > [!IMPORTANT] > The filename `.github/config.yml` is predetermined by probot. ### `.github/CONTRIBUTING.md` The contribution guidelines which are linked in the [Community Standards](https://github.com/nlohmann/json/community) and at . Further documentation: - [Setting guidelines for repository contributors](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors) > [!IMPORTANT] > The filename `.github/CONTRIBUTING.md` is predetermined by GitHub. > [!NOTE] > The file is part of the documentation and is included in `docs/mkdocs/docs/community/contribution_guidelines.md`. ### `.github/dependabot.yml` The configuration of [dependabot](https://github.com/dependabot) which ensures the dependencies (GitHub actions and Python packages used in the CI) remain up-to-date. Further documentation: - [Configuring Dependabot security updates](https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates) > [!IMPORTANT] > The filename `.github/dependabot.yml` is predetermined by GitHub. ### `.github/FUNDING.yml` A file to configure the sponsor button of the repository which is displayed in the sidebar of the project. Further documentation: - [Displaying a sponsor button in your repository](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository) > [!IMPORTANT] > The filename `.github/FUNDING.yml` is predetermined by GitHub. ### `.github/ISSUE_TEMPLATE/bug.yaml` Issue form template for bugs. Further documentation: - [Configuring issue templates for your repository](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) > [!IMPORTANT] > The folder `.github/ISSUE_TEMPLATE` is predetermined by GitHub. ### `.github/ISSUE_TEMPLATE/config.yaml` Issue template chooser configuration. The file is used to configure the dialog when a new issue is created. Further documentation: - [Configuring issue templates for your repository](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository) > [!IMPORTANT] > The filename `.github/ISSUE_TEMPLATE/config.yaml` is predetermined by GitHub. ### `.github/labeler.yml` Configuration file for the "Pull Request Labeler" workflow defined in `workflows/labeler.yml`. This file defines rules how labels are assigned to pull requests based on which files are changed. Further documentation: - [Label manager for PRs and issues based on configurable conditions](https://github.com/srvaroa/labeler) > [!NOTE] > The filename defaults to `.github/labeler.yml` and can be configured in the workflow. ### `.github/PULL_REQUEST_TEMPLATE.md` The pull request template which prefills new pull requests. Further documentation: - [Creating a pull request template for your repository](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository) > [!IMPORTANT] > The filename `.github/PULL_REQUEST_TEMPLATE.md` is predetermined by GitHub. ### `.github/SECURITY.md` The goal is to describe how to securely report security vulnerabilities for this repository. The security policy is linked at . Further documentation: - [Adding a security policy to your repository](https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository) > [!IMPORTANT] > The filename `.github/SECURITY.yml` is predetermined by GitHub. > [!NOTE] > The file is part of the documentation and is included in `docs/mkdocs/docs/community/security_policy.md`. ### `LICENSE.MIT` The license of the project. Further documentation: - [Adding a license to a repository](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-license-to-a-repository) > [!IMPORTANT] > The filename `LICENSE.MIT` is partly predetermined by GitHub. The root filename must be `LICENSE`. ## REUSE ### `.reuse/dep5` The file defines the licenses of certain third-party component in the repository. The root `Makefile` contains a target `reuse` that checks for compliance. Further documentation: - [DEP5](https://reuse.software/spec-3.2/#dep5-deprecated) - [reuse command-line tool](https://pypi.org/project/reuse/) - [documentation of linting](https://reuse.readthedocs.io/en/stable/man/reuse-lint.html) - [REUSE](http://reuse.software) > [!IMPORTANT] > The filename `.reuse/dep5` is predetermined by REUSE. Alternatively, a `REUSE.toml` file can be used. ### `.reuse/templates` Copyright header templates for source files. The root `Makefile` contains a target `reuse` that updates copyright headers with the templates. Further information: - [reuse command-line tool](https://pypi.org/project/reuse/) - [documentation on templates](https://reuse.readthedocs.io/en/stable/man/reuse-annotate.html#cmdoption-t) - [REUSE](http://reuse.software) > [!IMPORTANT] > The folder name `.reuse/templates` is predetermined by REUSE. ### `LICENSES` A folder that contains every license of all licenses files (library and third-party code). Further documentation: - [REUSE specification](https://reuse.software/spec-3.3/) > [!IMPORTANT] > The folder name `LICENSES` is predetermined by REUSE. ## Package Managers ### `BUILD.bazel` The file can be updated by calling ```shell make BUILD.bazel ``` ### `meson.build` ### `Package.swift` ### `WORKSPACE.bazel` json-3.12.0/LICENSE.MIT000066400000000000000000000020641477615276400142300ustar00rootroot00000000000000MIT License Copyright (c) 2013-2025 Niels Lohmann 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. json-3.12.0/LICENSES/000077500000000000000000000000001477615276400137765ustar00rootroot00000000000000json-3.12.0/LICENSES/Apache-2.0.txt000066400000000000000000000240501477615276400162160ustar00rootroot00000000000000Apache 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. json-3.12.0/LICENSES/BSD-3-Clause.txt000066400000000000000000000026641477615276400165310ustar00rootroot00000000000000Copyright (c) . Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. json-3.12.0/LICENSES/GPL-3.0-only.txt000066400000000000000000001035561477615276400164500ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . json-3.12.0/LICENSES/MIT.txt000066400000000000000000000020661477615276400151740ustar00rootroot00000000000000MIT License Copyright (c) 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. json-3.12.0/MODULE.bazel000066400000000000000000000002521477615276400145740ustar00rootroot00000000000000module( name = "nlohmann_json", compatibility_level = 1, ) bazel_dep(name = "rules_cc", version = "0.0.17") bazel_dep(name = "rules_license", version = "1.0.0") json-3.12.0/Makefile000066400000000000000000000317011477615276400142330ustar00rootroot00000000000000.PHONY: pretty clean ChangeLog.md release ########################################################################## # configuration ########################################################################## # find GNU sed to use `-i` parameter SED:=$(shell command -v gsed || which sed) ########################################################################## # source files ########################################################################## # the list of sources in the include folder SRCS=$(shell find include -type f | sort) # the list of sources in the tests folder TESTS_SRCS=$(shell find tests -type f \( -name '*.hpp' -o -name '*.cpp' -o -name '*.cu' \) -not -path 'tests/thirdparty/*' -not -path 'tests/abi/include/nlohmann/*' | sort) # the single headers (amalgamated from the source files) AMALGAMATED_FILE=single_include/nlohmann/json.hpp AMALGAMATED_FWD_FILE=single_include/nlohmann/json_fwd.hpp ########################################################################## # documentation of the Makefile's targets ########################################################################## # main target all: @echo "amalgamate - amalgamate files single_include/nlohmann/json{,_fwd}.hpp from the include/nlohmann sources" @echo "ChangeLog.md - generate ChangeLog file" @echo "check-amalgamation - check whether sources have been amalgamated" @echo "clean - remove built files" @echo "doctest - compile example files and check their output" @echo "fuzz_testing - prepare fuzz testing of the JSON parser" @echo "fuzz_testing_bson - prepare fuzz testing of the BSON parser" @echo "fuzz_testing_cbor - prepare fuzz testing of the CBOR parser" @echo "fuzz_testing_msgpack - prepare fuzz testing of the MessagePack parser" @echo "fuzz_testing_ubjson - prepare fuzz testing of the UBJSON parser" @echo "pretty - beautify code with Artistic Style" @echo "run_benchmarks - build and run benchmarks" ########################################################################## # benchmarks ########################################################################## run_benchmarks: rm -fr cmake-build-benchmarks mkdir cmake-build-benchmarks cd cmake-build-benchmarks ; cmake ../tests/benchmarks -GNinja -DCMAKE_BUILD_TYPE=Release cd cmake-build-benchmarks ; ninja cd cmake-build-benchmarks ; ./json_benchmarks ########################################################################## # fuzzing ########################################################################## # the overall fuzz testing target fuzz_testing: rm -fr fuzz-testing mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out $(MAKE) parse_afl_fuzzer -C tests CXX=afl-clang++ mv tests/parse_afl_fuzzer fuzz-testing/fuzzer find tests/data/json_tests -size -5k -name *json | xargs -I{} cp "{}" fuzz-testing/testcases @echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer" fuzz_testing_bson: rm -fr fuzz-testing mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out $(MAKE) parse_bson_fuzzer -C tests CXX=afl-clang++ mv tests/parse_bson_fuzzer fuzz-testing/fuzzer find tests/data -size -5k -name *.bson | xargs -I{} cp "{}" fuzz-testing/testcases @echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer" fuzz_testing_cbor: rm -fr fuzz-testing mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out $(MAKE) parse_cbor_fuzzer -C tests CXX=afl-clang++ mv tests/parse_cbor_fuzzer fuzz-testing/fuzzer find tests/data -size -5k -name *.cbor | xargs -I{} cp "{}" fuzz-testing/testcases @echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer" fuzz_testing_msgpack: rm -fr fuzz-testing mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out $(MAKE) parse_msgpack_fuzzer -C tests CXX=afl-clang++ mv tests/parse_msgpack_fuzzer fuzz-testing/fuzzer find tests/data -size -5k -name *.msgpack | xargs -I{} cp "{}" fuzz-testing/testcases @echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer" fuzz_testing_ubjson: rm -fr fuzz-testing mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out $(MAKE) parse_ubjson_fuzzer -C tests CXX=afl-clang++ mv tests/parse_ubjson_fuzzer fuzz-testing/fuzzer find tests/data -size -5k -name *.ubjson | xargs -I{} cp "{}" fuzz-testing/testcases @echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer" fuzzing-start: afl-fuzz -S fuzzer1 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer2 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer3 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer4 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer5 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer6 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -S fuzzer7 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer > /dev/null & afl-fuzz -M fuzzer0 -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer fuzzing-stop: -killall fuzzer -killall afl-fuzz ########################################################################## # Static analysis ########################################################################## # call PVS-Studio Analyzer pvs_studio: rm -fr cmake-build-pvs-studio mkdir cmake-build-pvs-studio cd cmake-build-pvs-studio ; cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=On -DJSON_MultipleHeaders=ON cd cmake-build-pvs-studio ; pvs-studio-analyzer analyze -j 10 cd cmake-build-pvs-studio ; plog-converter -a'GA:1,2;64:1;CS' -t fullhtml PVS-Studio.log -o pvs open cmake-build-pvs-studio/pvs/index.html ########################################################################## # Code format and source amalgamation ########################################################################## ASTYLE=tools/astyle/venv/bin/astyle install_astyle: @test -d tools/astyle/venv || python3 -mvenv tools/astyle/venv ; tools/astyle/venv/bin/pip3 install --quiet --upgrade pip @test -f $(ASTYLE) || tools/astyle/venv/bin/pip3 install --quiet -r tools/astyle/requirements.txt @$(ASTYLE) --version # call the Artistic Style pretty printer on all source files pretty: install_astyle $(ASTYLE) --project=tools/astyle/.astylerc $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) docs/mkdocs/docs/examples/*.cpp # call the Clang-Format on all source files pretty_format: for FILE in $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) docs/mkdocs/docs/examples/*.cpp; do echo $$FILE; clang-format -i $$FILE; done # create single header files and pretty print amalgamate: $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(MAKE) pretty # call the amalgamation tool for json.hpp $(AMALGAMATED_FILE): $(SRCS) tools/amalgamate/amalgamate.py -c tools/amalgamate/config_json.json -s . --verbose=yes # call the amalgamation tool for json_fwd.hpp $(AMALGAMATED_FWD_FILE): $(SRCS) tools/amalgamate/amalgamate.py -c tools/amalgamate/config_json_fwd.json -s . --verbose=yes # check if file single_include/nlohmann/json.hpp has been amalgamated from the nlohmann sources # Note: this target is called by Travis check-amalgamation: @mv $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ @mv $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ @$(MAKE) amalgamate @diff $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) ; false) @diff $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) ; false) @mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) @mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) BUILD.bazel: $(SRCS) cmake -P cmake/scripts/gen_bazel_build_file.cmake ########################################################################## # ChangeLog ########################################################################## # Create a ChangeLog based on the git log using the GitHub Changelog Generator # (). # variable to control the diffs between the last released version and the current repository state NEXT_VERSION ?= "unreleased" ChangeLog.md: github_changelog_generator -o ChangeLog.md --user nlohmann --project json --simple-list --release-url https://github.com/nlohmann/json/releases/tag/%s --future-release $(NEXT_VERSION) $(SED) -i 's|https://github.com/nlohmann/json/releases/tag/HEAD|https://github.com/nlohmann/json/tree/HEAD|' ChangeLog.md $(SED) -i '2i All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).' ChangeLog.md ########################################################################## # Release files ########################################################################## # Create a tar.xz archive that contains sufficient files to be used as CMake project (e.g., using FetchContent). The # archive is created according to the advices of . json.tar.xz: mkdir json rsync -R $(shell find LICENSE.MIT nlohmann_json.natvis CMakeLists.txt cmake/*.in include single_include -type f) json gtar --sort=name --mtime="@$(shell git log -1 --pretty=%ct)" --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime --create --file - json | xz --compress -9e --threads=2 - > json.tar.xz rm -fr json # We use `-X` to make the resulting ZIP file reproducible, see # . include.zip: BUILD.bazel zip -9 --recurse-paths -X include.zip $(SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) BUILD.bazel WORKSPACE.bazel meson.build LICENSE.MIT # Create the files for a release and add signatures and hashes. release: include.zip json.tar.xz rm -fr release_files mkdir release_files gpg --armor --detach-sig include.zip gpg --armor --detach-sig $(AMALGAMATED_FILE) gpg --armor --detach-sig $(AMALGAMATED_FWD_FILE) gpg --armor --detach-sig json.tar.xz cp $(AMALGAMATED_FILE) release_files cp $(AMALGAMATED_FWD_FILE) release_files mv $(AMALGAMATED_FILE).asc $(AMALGAMATED_FWD_FILE).asc json.tar.xz json.tar.xz.asc include.zip include.zip.asc release_files cd release_files ; shasum -a 256 json.hpp include.zip json.tar.xz > hashes.txt ########################################################################## # Maintenance ########################################################################## # clean up clean: rm -fr fuzz fuzz-testing *.dSYM tests/*.dSYM rm -fr benchmarks/files/numbers/*.json rm -fr cmake-build-benchmarks fuzz-testing cmake-build-pvs-studio release_files $(MAKE) clean -Cdocs ########################################################################## # Thirdparty code ########################################################################## update_hedley: rm -f include/nlohmann/thirdparty/hedley/hedley.hpp include/nlohmann/thirdparty/hedley/hedley_undef.hpp curl https://raw.githubusercontent.com/nemequ/hedley/master/hedley.h -o include/nlohmann/thirdparty/hedley/hedley.hpp $(SED) -i 's/HEDLEY_/JSON_HEDLEY_/g' include/nlohmann/thirdparty/hedley/hedley.hpp grep "[[:blank:]]*#[[:blank:]]*undef" include/nlohmann/thirdparty/hedley/hedley.hpp | grep -v "__" | sort | uniq | $(SED) 's/ //g' | $(SED) 's/undef/undef /g' > include/nlohmann/thirdparty/hedley/hedley_undef.hpp $(SED) -i '1s/^/#pragma once\n\n/' include/nlohmann/thirdparty/hedley/hedley.hpp $(SED) -i '1s/^/#pragma once\n\n/' include/nlohmann/thirdparty/hedley/hedley_undef.hpp $(MAKE) amalgamate ########################################################################## # serve_header.py ########################################################################## serve_header: ./tools/serve_header/serve_header.py --make $(MAKE) ########################################################################## # REUSE ########################################################################## reuse: pipx run reuse annotate --recursive single_include include -tjson --license MIT --copyright "Niels Lohmann " --year "2013-2025" --merge-copyrights pipx run reuse annotate $(TESTS_SRCS) -tjson_support --license MIT --copyright "Niels Lohmann " --year "2013-2025" --merge-copyrights pipx run reuse lint spdx: pipx run reuse spdx --output nlohmann_json.spdx --creator-person "Niels Lohmann" --add-license-concluded json-3.12.0/Package.swift000066400000000000000000000010721477615276400152020ustar00rootroot00000000000000// swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "nlohmann-json", platforms: [ .iOS(.v12), .macOS(.v10_13), .tvOS(.v12), .watchOS(.v4), .visionOS(.v1) ], products: [ .library(name: "json", targets: ["json"]) ], targets: [ .target( name: "json", path: "single_include/nlohmann", publicHeadersPath: "." ) ], cxxLanguageStandard: .cxx11 ) json-3.12.0/README.md000066400000000000000000003340521477615276400140570ustar00rootroot00000000000000[![JSON for Modern C++](docs/mkdocs/docs/images/json.gif)](https://github.com/nlohmann/json/releases) [![Build Status](https://ci.appveyor.com/api/projects/status/1acb366xfyg3qybk/branch/develop?svg=true)](https://ci.appveyor.com/project/nlohmann/json) [![Ubuntu](https://github.com/nlohmann/json/workflows/Ubuntu/badge.svg)](https://github.com/nlohmann/json/actions?query=workflow%3AUbuntu) [![macOS](https://github.com/nlohmann/json/workflows/macOS/badge.svg)](https://github.com/nlohmann/json/actions?query=workflow%3AmacOS) [![Windows](https://github.com/nlohmann/json/workflows/Windows/badge.svg)](https://github.com/nlohmann/json/actions?query=workflow%3AWindows) [![Coverage Status](https://coveralls.io/repos/github/nlohmann/json/badge.svg?branch=develop)](https://coveralls.io/github/nlohmann/json?branch=develop) [![Coverity Scan Build Status](https://scan.coverity.com/projects/5550/badge.svg)](https://scan.coverity.com/projects/nlohmann-json) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e0d1a9d5d6fd46fcb655c4cb930bb3e8)](https://app.codacy.com/gh/nlohmann/json/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Cirrus CI](https://api.cirrus-ci.com/github/nlohmann/json.svg)](https://cirrus-ci.com/github/nlohmann/json) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/json.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:json) [![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/1mp10JbaANo6FUc7) [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue.svg)](https://json.nlohmann.me) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/nlohmann/json/master/LICENSE.MIT) [![GitHub Releases](https://img.shields.io/github/release/nlohmann/json.svg)](https://github.com/nlohmann/json/releases) [![Packaging status](https://repology.org/badge/tiny-repos/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) [![GitHub Downloads](https://img.shields.io/github/downloads/nlohmann/json/total)](https://github.com/nlohmann/json/releases) [![GitHub Issues](https://img.shields.io/github/issues/nlohmann/json.svg)](https://github.com/nlohmann/json/issues) [![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/nlohmann/json.svg)](https://isitmaintained.com/project/nlohmann/json "Average time to resolve an issue") [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/289/badge)](https://bestpractices.coreinfrastructure.org/projects/289) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/nlohmann/json/badge)](https://scorecard.dev/viewer/?uri=github.com/nlohmann/json) [![GitHub Sponsors](https://img.shields.io/badge/GitHub-Sponsors-ff69b4)](https://github.com/sponsors/nlohmann) [![REUSE status](https://api.reuse.software/badge/github.com/nlohmann/json)](https://api.reuse.software/info/github.com/nlohmann/json) [![Discord](https://img.shields.io/discord/1003743314341793913)](https://discord.gg/6mrGXKvX7y) - [Design goals](#design-goals) - [Sponsors](#sponsors) - [Support](#support) ([documentation](https://json.nlohmann.me), [FAQ](https://json.nlohmann.me/home/faq/), [discussions](https://github.com/nlohmann/json/discussions), [API](https://json.nlohmann.me/api/basic_json/), [bug issues](https://github.com/nlohmann/json/issues)) - [Quick reference](#quick-reference) - [Examples](#examples) - [Read JSON from a file](#read-json-from-a-file) - [Creating `json` objects from JSON literals](#creating-json-objects-from-json-literals) - [JSON as first-class data type](#json-as-first-class-data-type) - [Serialization / Deserialization](#serialization--deserialization) - [STL-like access](#stl-like-access) - [Conversion from STL containers](#conversion-from-stl-containers) - [JSON Pointer and JSON Patch](#json-pointer-and-json-patch) - [JSON Merge Patch](#json-merge-patch) - [Implicit conversions](#implicit-conversions) - [Conversions to/from arbitrary types](#arbitrary-types-conversions) - [Specializing enum conversion](#specializing-enum-conversion) - [Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)](#binary-formats-bson-cbor-messagepack-ubjson-and-bjdata) - [Customers](#customers) - [Supported compilers](#supported-compilers) - [Integration](#integration) - [CMake](#cmake) - [Package Managers](#package-managers) - [Pkg-config](#pkg-config) - [License](#license) - [Contact](#contact) - [Thanks](#thanks) - [Used third-party tools](#used-third-party-tools) - [Notes](#notes) - [Execute unit tests](#execute-unit-tests) ## Design goals There are myriads of [JSON](https://json.org) libraries out there, and each may even have its reason to exist. Our class had these design goals: - **Intuitive syntax**. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the [examples below](#examples) and you'll know what I mean. - **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular [package managers](https://json.nlohmann.me/integration/package_managers/). - **Serious testing**. Our code is heavily [unit-tested](https://github.com/nlohmann/json/tree/develop/tests/src) and covers [100%](https://coveralls.io/r/nlohmann/json) of the code, including all exceptional behavior. Furthermore, we checked with [Valgrind](https://valgrind.org) and the [Clang Sanitizers](https://clang.llvm.org/docs/index.html) that there are no memory leaks. [Google OSS-Fuzz](https://github.com/google/oss-fuzz/tree/master/projects/json) additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the [Core Infrastructure Initiative (CII) best practices](https://bestpractices.coreinfrastructure.org/projects/289). See the [quality assurance](https://json.nlohmann.me/community/quality_assurance) overview documentation. Other aspects were not so important to us: - **Memory efficiency**. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: `std::string` for strings, `int64_t`, `uint64_t` or `double` for numbers, `std::map` for objects, `std::vector` for arrays, and `bool` for Booleans. However, you can template the generalized class `basic_json` to your needs. - **Speed**. There are certainly [faster JSON libraries](https://github.com/miloyip/nativejson-benchmark#parsing-time) out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a `std::vector` or `std::map`, you are already set. See the [contribution guidelines](https://github.com/nlohmann/json/blob/master/.github/CONTRIBUTING.md#please-dont) for more information. ## Sponsors You can sponsor this library at [GitHub Sponsors](https://github.com/sponsors/nlohmann). ### :raising_hand: Priority Sponsor - [Martti Laine](https://github.com/codeclown) - [Paul Harrington](https://github.com/phrrngtn) ### :label: Named Sponsors - [Michael Hartmann](https://github.com/reFX-Mike) - [Stefan Hagen](https://github.com/sthagen) - [Steve Sperandeo](https://github.com/homer6) - [Robert Jefe Lindstädt](https://github.com/eljefedelrodeodeljefe) - [Steve Wagner](https://github.com/ciroque) - [Lion Yang](https://github.com/LionNatsu) ### Further support The development of the library is further supported by JetBrains by providing free access to their IDE tools. [![JetBrains logo.](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg)](https://jb.gg/OpenSourceSupport) Thanks everyone! ## Support :question: If you have a **question**, please check if it is already answered in the [**FAQ**](https://json.nlohmann.me/home/faq/) or the [**Q&A**](https://github.com/nlohmann/json/discussions/categories/q-a) section. If not, please [**ask a new question**](https://github.com/nlohmann/json/discussions/new) there. :books: If you want to **learn more** about how to use the library, check out the rest of the [**README**](#examples), have a look at [**code examples**](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples), or browse through the [**help pages**](https://json.nlohmann.me). :construction: If you want to understand the **API** better, check out the [**API Reference**](https://json.nlohmann.me/api/basic_json/) or have a look at the [quick reference](#quick-reference) below. :bug: If you found a **bug**, please check the [**FAQ**](https://json.nlohmann.me/home/faq/) if it is a known issue or the result of a design decision. Please also have a look at the [**issue list**](https://github.com/nlohmann/json/issues) before you [**create a new issue**](https://github.com/nlohmann/json/issues/new/choose). Please provide as much information as possible to help us understand and reproduce your issue. There is also a [**docset**](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for the documentation browsers [Dash](https://kapeli.com/dash), [Velocity](https://velocity.silverlakesoftware.com), and [Zeal](https://zealdocs.org) that contains the full [documentation](https://json.nlohmann.me) as offline resource. ## Quick reference - **Constructors** [basic_json](https://json.nlohmann.me/api/basic_json/basic_json), [array](https://json.nlohmann.me/api/basic_json/array), [binary](https://json.nlohmann.me/api/basic_json/binary), [object](https://json.nlohmann.me/api/basic_json/object) - **Object inspection**: [type](https://json.nlohmann.me/api/basic_json/type), [operator value_t](https://json.nlohmann.me/api/basic_json/operator_value_t), [type_name](https://json.nlohmann.me/api/basic_json/type_name), [is_primitive](https://json.nlohmann.me/api/basic_json/is_primitive), [is_structured](https://json.nlohmann.me/api/basic_json/is_structured), [is_null](https://json.nlohmann.me/api/basic_json/is_null), [is_boolean](https://json.nlohmann.me/api/basic_json/is_boolean), [is_number](https://json.nlohmann.me/api/basic_json/is_number), [is_number_integer](https://json.nlohmann.me/api/basic_json/is_number_integer), [is_number_unsigned](https://json.nlohmann.me/api/basic_json/is_number_unsigned), [is_number_float](https://json.nlohmann.me/api/basic_json/is_number_float), [is_object](https://json.nlohmann.me/api/basic_json/is_object), [is_array](https://json.nlohmann.me/api/basic_json/is_array), [is_string](https://json.nlohmann.me/api/basic_json/is_string), [is_binary](https://json.nlohmann.me/api/basic_json/is_binary), [is_discarded](https://json.nlohmann.me/api/basic_json/is_discarded) - **Value access**; [get](https://json.nlohmann.me/api/basic_json/get), [get_to](https://json.nlohmann.me/api/basic_json/get_to), [get_ptr](https://json.nlohmann.me/api/basic_json/get_ptr), [get_ref](https://json.nlohmann.me/api/basic_json/get_ref), [operator ValueType](https://json.nlohmann.me/api/basic_json/operator_ValueType), [get_binary](https://json.nlohmann.me/api/basic_json/get_binary) - **Element access**: [at](https://json.nlohmann.me/api/basic_json/at), [operator[]](https://json.nlohmann.me/api/basic_json/operator[]), [value](https://json.nlohmann.me/api/basic_json/value), [front](https://json.nlohmann.me/api/basic_json/front), [back](https://json.nlohmann.me/api/basic_json/back) - **Lookup**: [find](https://json.nlohmann.me/api/basic_json/find), [count](https://json.nlohmann.me/api/basic_json/count), [contains](https://json.nlohmann.me/api/basic_json/contains) - **Iterators**: [begin](https://json.nlohmann.me/api/basic_json/begin), [cbegin](https://json.nlohmann.me/api/basic_json/cbegin), [end](https://json.nlohmann.me/api/basic_json/end), [cend](https://json.nlohmann.me/api/basic_json/cend), [rbegin](https://json.nlohmann.me/api/basic_json/rbegin), [rend](https://json.nlohmann.me/api/basic_json/rend), [crbegin](https://json.nlohmann.me/api/basic_json/crbegin), [crend](https://json.nlohmann.me/api/basic_json/crend), [items](https://json.nlohmann.me/api/basic_json/items) - **Capacity**: [empty](https://json.nlohmann.me/api/basic_json/empty), [size](https://json.nlohmann.me/api/basic_json/size), [max_size](https://json.nlohmann.me/api/basic_json/max_size) - **Modifiers**: [clear](https://json.nlohmann.me/api/basic_json/clear), [push_back](https://json.nlohmann.me/api/basic_json/push_back), [operator+=](https://json.nlohmann.me/api/basic_json/operator+=), [emplace_back](https://json.nlohmann.me/api/basic_json/emplace_back), [emplace](https://json.nlohmann.me/api/basic_json/emplace), [erase](https://json.nlohmann.me/api/basic_json/erase), [insert](https://json.nlohmann.me/api/basic_json/insert), [update](https://json.nlohmann.me/api/basic_json/update), [swap](https://json.nlohmann.me/api/basic_json/swap) - **Lexicographical comparison operators**: [operator==](https://json.nlohmann.me/api/basic_json/operator_eq), [operator!=](https://json.nlohmann.me/api/basic_json/operator_ne), [operator<](https://json.nlohmann.me/api/basic_json/operator_lt), [operator>](https://json.nlohmann.me/api/basic_json/operator_gt), [operator<=](https://json.nlohmann.me/api/basic_json/operator_le), [operator>=](https://json.nlohmann.me/api/basic_json/operator_ge), [operator<=>](https://json.nlohmann.me/api/basic_json/operator_spaceship) - **Serialization / Dumping**: [dump](https://json.nlohmann.me/api/basic_json/dump) - **Deserialization / Parsing**: [parse](https://json.nlohmann.me/api/basic_json/parse), [accept](https://json.nlohmann.me/api/basic_json/accept), [sax_parse](https://json.nlohmann.me/api/basic_json/sax_parse) - **JSON Pointer functions**: [flatten](https://json.nlohmann.me/api/basic_json/flatten), [unflatten](https://json.nlohmann.me/api/basic_json/unflatten) - **JSON Patch functions**: [patch](https://json.nlohmann.me/api/basic_json/patch), [patch_inplace](https://json.nlohmann.me/api/basic_json/patch_inplace), [diff](https://json.nlohmann.me/api/basic_json/diff), [merge_patch](https://json.nlohmann.me/api/basic_json/merge_patch) - **Static functions**: [meta](https://json.nlohmann.me/api/basic_json/meta), [get_allocator](https://json.nlohmann.me/api/basic_json/get_allocator) - **Binary formats**: [from_bjdata](https://json.nlohmann.me/api/basic_json/from_bjdata), [from_bson](https://json.nlohmann.me/api/basic_json/from_bson), [from_cbor](https://json.nlohmann.me/api/basic_json/from_cbor), [from_msgpack](https://json.nlohmann.me/api/basic_json/from_msgpack), [from_ubjson](https://json.nlohmann.me/api/basic_json/from_ubjson), [to_bjdata](https://json.nlohmann.me/api/basic_json/to_bjdata), [to_bson](https://json.nlohmann.me/api/basic_json/to_bson), [to_cbor](https://json.nlohmann.me/api/basic_json/to_cbor), [to_msgpack](https://json.nlohmann.me/api/basic_json/to_msgpack), [to_ubjson](https://json.nlohmann.me/api/basic_json/to_ubjson) - **Non-member functions**: [operator<<](https://json.nlohmann.me/api/operator_ltlt/), [operator>>](https://json.nlohmann.me/api/operator_gtgt/), [to_string](https://json.nlohmann.me/api/basic_json/to_string) - **Literals**: [operator""_json](https://json.nlohmann.me/api/operator_literal_json) - **Helper classes**: [std::hash<basic_json>](https://json.nlohmann.me/api/basic_json/std_hash), [std::swap<basic_json>](https://json.nlohmann.me/api/basic_json/std_swap) [**Full API documentation**](https://json.nlohmann.me/api/basic_json/) ## Examples Here are some examples to give you an idea how to use the class. Beside the examples below, you may want to: → Check the [documentation](https://json.nlohmann.me/)\ → Browse the [standalone example files](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples)\ → Read the full [API Documentation](https://json.nlohmann.me/api/basic_json/) with self-contained examples for every function ### Read JSON from a file The `json` class provides an API for manipulating a JSON value. To create a `json` object by reading a JSON file: ```cpp #include #include using json = nlohmann::json; // ... std::ifstream f("example.json"); json data = json::parse(f); ``` ### Creating `json` objects from JSON literals Assume you want to create hard-code this literal JSON value in a file, as a `json` object: ```json { "pi": 3.141, "happy": true } ``` There are various options: ```cpp // Using (raw) string literals and json::parse json ex1 = json::parse(R"( { "pi": 3.141, "happy": true } )"); // Using user-defined (raw) string literals using namespace nlohmann::literals; json ex2 = R"( { "pi": 3.141, "happy": true } )"_json; // Using initializer lists json ex3 = { {"happy", true}, {"pi", 3.141}, }; ``` ### JSON as first-class data type Here are some examples to give you an idea how to use the class. Assume you want to create the JSON object ```json { "pi": 3.141, "happy": true, "name": "Niels", "nothing": null, "answer": { "everything": 42 }, "list": [1, 0, 2], "object": { "currency": "USD", "value": 42.99 } } ``` With this library, you could write: ```cpp // create an empty structure (null) json j; // add a number that is stored as double (note the implicit conversion of j to an object) j["pi"] = 3.141; // add a Boolean that is stored as bool j["happy"] = true; // add a string that is stored as std::string j["name"] = "Niels"; // add another null object by passing nullptr j["nothing"] = nullptr; // add an object inside the object j["answer"]["everything"] = 42; // add an array that is stored as std::vector (using an initializer list) j["list"] = { 1, 0, 2 }; // add another object (using an initializer list of pairs) j["object"] = { {"currency", "USD"}, {"value", 42.99} }; // instead, you could also write (which looks very similar to the JSON above) json j2 = { {"pi", 3.141}, {"happy", true}, {"name", "Niels"}, {"nothing", nullptr}, {"answer", { {"everything", 42} }}, {"list", {1, 0, 2}}, {"object", { {"currency", "USD"}, {"value", 42.99} }} }; ``` Note that in all these cases, you never need to "tell" the compiler which JSON value type you want to use. If you want to be explicit or express some edge cases, the functions [`json::array()`](https://json.nlohmann.me/api/basic_json/array/) and [`json::object()`](https://json.nlohmann.me/api/basic_json/object/) will help: ```cpp // a way to express the empty array [] json empty_array_explicit = json::array(); // ways to express the empty object {} json empty_object_implicit = json({}); json empty_object_explicit = json::object(); // a way to express an _array_ of key/value pairs [["currency", "USD"], ["value", 42.99]] json array_not_object = json::array({ {"currency", "USD"}, {"value", 42.99} }); ``` ### Serialization / Deserialization #### To/from strings You can create a JSON value (deserialization) by appending `_json` to a string literal: ```cpp // create object from string literal json j = "{ \"happy\": true, \"pi\": 3.141 }"_json; // or even nicer with a raw string literal auto j2 = R"( { "happy": true, "pi": 3.141 } )"_json; ``` Note that without appending the `_json` suffix, the passed string literal is not parsed, but just used as JSON string value. That is, `json j = "{ \"happy\": true, \"pi\": 3.141 }"` would just store the string `"{ "happy": true, "pi": 3.141 }"` rather than parsing the actual object. The string literal should be brought into scope with `using namespace nlohmann::literals;` (see [`json::parse()`](https://json.nlohmann.me/api/operator_literal_json/)). The above example can also be expressed explicitly using [`json::parse()`](https://json.nlohmann.me/api/basic_json/parse/): ```cpp // parse explicitly auto j3 = json::parse(R"({"happy": true, "pi": 3.141})"); ``` You can also get a string representation of a JSON value (serialize): ```cpp // explicit conversion to string std::string s = j.dump(); // {"happy":true,"pi":3.141} // serialization with pretty printing // pass in the amount of spaces to indent std::cout << j.dump(4) << std::endl; // { // "happy": true, // "pi": 3.141 // } ``` Note the difference between serialization and assignment: ```cpp // store a string in a JSON value json j_string = "this is a string"; // retrieve the string value auto cpp_string = j_string.template get(); // retrieve the string value (alternative when a variable already exists) std::string cpp_string2; j_string.get_to(cpp_string2); // retrieve the serialized value (explicit JSON serialization) std::string serialized_string = j_string.dump(); // output of original string std::cout << cpp_string << " == " << cpp_string2 << " == " << j_string.template get() << '\n'; // output of serialized value std::cout << j_string << " == " << serialized_string << std::endl; ``` [`.dump()`](https://json.nlohmann.me/api/basic_json/dump/) returns the originally stored string value. Note the library only supports UTF-8. When you store strings with different encodings in the library, calling [`dump()`](https://json.nlohmann.me/api/basic_json/dump/) may throw an exception unless `json::error_handler_t::replace` or `json::error_handler_t::ignore` are used as error handlers. #### To/from streams (e.g. files, string streams) You can also use streams to serialize and deserialize: ```cpp // deserialize from standard input json j; std::cin >> j; // serialize to standard output std::cout << j; // the setw manipulator was overloaded to set the indentation for pretty printing std::cout << std::setw(4) << j << std::endl; ``` These operators work for any subclasses of `std::istream` or `std::ostream`. Here is the same example with files: ```cpp // read a JSON file std::ifstream i("file.json"); json j; i >> j; // write prettified JSON to another file std::ofstream o("pretty.json"); o << std::setw(4) << j << std::endl; ``` Please note that setting the exception bit for `failbit` is inappropriate for this use case. It will result in program termination due to the `noexcept` specifier in use. #### Read from iterator range You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose `value_type` is an integral type of 1, 2 or 4 bytes, which will be interpreted as UTF-8, UTF-16 and UTF-32 respectively. For instance, a `std::vector`, or a `std::list`: ```cpp std::vector v = {'t', 'r', 'u', 'e'}; json j = json::parse(v.begin(), v.end()); ``` You may leave the iterators for the range [begin, end): ```cpp std::vector v = {'t', 'r', 'u', 'e'}; json j = json::parse(v); ``` #### Custom data source Since the parse function accepts arbitrary iterator ranges, you can provide your own data sources by implementing the `LegacyInputIterator` concept. ```cpp struct MyContainer { void advance(); const char& get_current(); }; struct MyIterator { using difference_type = std::ptrdiff_t; using value_type = char; using pointer = const char*; using reference = const char&; using iterator_category = std::input_iterator_tag; MyIterator& operator++() { target->advance(); return *this; } bool operator!=(const MyIterator& rhs) const { return rhs.target != target; } reference operator*() const { return target->get_current(); } MyContainer* target = nullptr; }; MyIterator begin(MyContainer& tgt) { return MyIterator{&tgt}; } MyIterator end(const MyContainer&) { return {}; } void foo() { MyContainer c; json j = json::parse(c); } ``` #### SAX interface The library uses a SAX-like interface with the following functions: ```cpp // called when null is parsed bool null(); // called when a boolean is parsed; value is passed bool boolean(bool val); // called when a signed or unsigned integer number is parsed; value is passed bool number_integer(number_integer_t val); bool number_unsigned(number_unsigned_t val); // called when a floating-point number is parsed; value and original string is passed bool number_float(number_float_t val, const string_t& s); // called when a string is parsed; value is passed and can be safely moved away bool string(string_t& val); // called when a binary value is parsed; value is passed and can be safely moved away bool binary(binary_t& val); // called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known) bool start_object(std::size_t elements); bool end_object(); bool start_array(std::size_t elements); bool end_array(); // called when an object key is parsed; value is passed and can be safely moved away bool key(string_t& val); // called when a parse error occurs; byte position, the last token, and an exception is passed bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex); ``` The return value of each function determines whether parsing should proceed. To implement your own SAX handler, proceed as follows: 1. Implement the SAX interface in a class. You can use class `nlohmann::json_sax` as base class, but you can also use any class where the functions described above are implemented and public. 2. Create an object of your SAX interface class, e.g. `my_sax`. 3. Call `bool json::sax_parse(input, &my_sax)`; where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface. Note the `sax_parse` function only returns a `bool` indicating the result of the last executed SAX event. It does not return a `json` value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your `parse_error` implementation. Internally, the SAX interface is used for the DOM parser (class `json_sax_dom_parser`) as well as the acceptor (`json_sax_acceptor`), see file [`json_sax.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/detail/input/json_sax.hpp). ### STL-like access We designed the JSON class to behave just like an STL container. In fact, it satisfies the [**ReversibleContainer**](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) requirement. ```cpp // create an array using push_back json j; j.push_back("foo"); j.push_back(1); j.push_back(true); // also use emplace_back j.emplace_back(1.78); // iterate the array for (json::iterator it = j.begin(); it != j.end(); ++it) { std::cout << *it << '\n'; } // range-based for for (auto& element : j) { std::cout << element << '\n'; } // getter/setter const auto tmp = j[0].template get(); j[1] = 42; bool foo = j.at(2); // comparison j == R"(["foo", 1, true, 1.78])"_json; // true // other stuff j.size(); // 4 entries j.empty(); // false j.type(); // json::value_t::array j.clear(); // the array is empty again // convenience type checkers j.is_null(); j.is_boolean(); j.is_number(); j.is_object(); j.is_array(); j.is_string(); // create an object json o; o["foo"] = 23; o["bar"] = false; o["baz"] = 3.141; // also use emplace o.emplace("weather", "sunny"); // special iterator member functions for objects for (json::iterator it = o.begin(); it != o.end(); ++it) { std::cout << it.key() << " : " << it.value() << "\n"; } // the same code as range for for (auto& el : o.items()) { std::cout << el.key() << " : " << el.value() << "\n"; } // even easier with structured bindings (C++17) for (auto& [key, value] : o.items()) { std::cout << key << " : " << value << "\n"; } // find an entry if (o.contains("foo")) { // there is an entry with key "foo" } // or via find and an iterator if (o.find("foo") != o.end()) { // there is an entry with key "foo" } // or simpler using count() int foo_present = o.count("foo"); // 1 int fob_present = o.count("fob"); // 0 // delete an entry o.erase("foo"); ``` ### Conversion from STL containers Any sequence container (`std::array`, `std::vector`, `std::deque`, `std::forward_list`, `std::list`) whose values can be used to construct JSON values (e.g., integers, floating point numbers, Booleans, string types, or again STL containers described in this section) can be used to create a JSON array. The same holds for similar associative containers (`std::set`, `std::multiset`, `std::unordered_set`, `std::unordered_multiset`), but in these cases the order of the elements of the array depends on how the elements are ordered in the respective STL container. ```cpp std::vector c_vector {1, 2, 3, 4}; json j_vec(c_vector); // [1, 2, 3, 4] std::deque c_deque {1.2, 2.3, 3.4, 5.6}; json j_deque(c_deque); // [1.2, 2.3, 3.4, 5.6] std::list c_list {true, true, false, true}; json j_list(c_list); // [true, true, false, true] std::forward_list c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543}; json j_flist(c_flist); // [12345678909876, 23456789098765, 34567890987654, 45678909876543] std::array c_array {{1, 2, 3, 4}}; json j_array(c_array); // [1, 2, 3, 4] std::set c_set {"one", "two", "three", "four", "one"}; json j_set(c_set); // only one entry for "one" is used // ["four", "one", "three", "two"] std::unordered_set c_uset {"one", "two", "three", "four", "one"}; json j_uset(c_uset); // only one entry for "one" is used // maybe ["two", "three", "four", "one"] std::multiset c_mset {"one", "two", "one", "four"}; json j_mset(c_mset); // both entries for "one" are used // maybe ["one", "two", "one", "four"] std::unordered_multiset c_umset {"one", "two", "one", "four"}; json j_umset(c_umset); // both entries for "one" are used // maybe ["one", "two", "one", "four"] ``` Likewise, any associative key-value containers (`std::map`, `std::multimap`, `std::unordered_map`, `std::unordered_multimap`) whose keys can construct an `std::string` and whose values can be used to construct JSON values (see examples above) can be used to create a JSON object. Note that in case of multimaps only one key is used in the JSON object and the value depends on the internal order of the STL container. ```cpp std::map c_map { {"one", 1}, {"two", 2}, {"three", 3} }; json j_map(c_map); // {"one": 1, "three": 3, "two": 2 } std::unordered_map c_umap { {"one", 1.2}, {"two", 2.3}, {"three", 3.4} }; json j_umap(c_umap); // {"one": 1.2, "two": 2.3, "three": 3.4} std::multimap c_mmap { {"one", true}, {"two", true}, {"three", false}, {"three", true} }; json j_mmap(c_mmap); // only one entry for key "three" is used // maybe {"one": true, "two": true, "three": true} std::unordered_multimap c_ummap { {"one", true}, {"two", true}, {"three", false}, {"three", true} }; json j_ummap(c_ummap); // only one entry for key "three" is used // maybe {"one": true, "two": true, "three": true} ``` ### JSON Pointer and JSON Patch The library supports **JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) as alternative means to address structured values. On top of this, **JSON Patch** ([RFC 6902](https://tools.ietf.org/html/rfc6902)) allows describing differences between two JSON values - effectively allowing patch and diff operations known from Unix. ```cpp // a JSON value json j_original = R"({ "baz": ["one", "two", "three"], "foo": "bar" })"_json; // access members with a JSON pointer (RFC 6901) j_original["/baz/1"_json_pointer]; // "two" // a JSON patch (RFC 6902) json j_patch = R"([ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo"} ])"_json; // apply the patch json j_result = j_original.patch(j_patch); // { // "baz": "boo", // "hello": ["world"] // } // calculate a JSON patch from two JSON values json::diff(j_result, j_original); // [ // { "op":" replace", "path": "/baz", "value": ["one", "two", "three"] }, // { "op": "remove","path": "/hello" }, // { "op": "add", "path": "/foo", "value": "bar" } // ] ``` ### JSON Merge Patch The library supports **JSON Merge Patch** ([RFC 7386](https://tools.ietf.org/html/rfc7386)) as a patch format. Instead of using JSON Pointer (see above) to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified. ```cpp // a JSON value json j_document = R"({ "a": "b", "c": { "d": "e", "f": "g" } })"_json; // a patch json j_patch = R"({ "a":"z", "c": { "f": null } })"_json; // apply the patch j_document.merge_patch(j_patch); // { // "a": "z", // "c": { // "d": "e" // } // } ``` ### Implicit conversions Supported types can be implicitly converted to JSON values. It is recommended to **NOT USE** implicit conversions **FROM** a JSON value. You can find more details about this recommendation [here](https://www.github.com/nlohmann/json/issues/958). You can switch off implicit conversions by defining `JSON_USE_IMPLICIT_CONVERSIONS` to `0` before including the `json.hpp` header. When using CMake, you can also achieve this by setting the option `JSON_ImplicitConversions` to `OFF`. ```cpp // strings std::string s1 = "Hello, world!"; json js = s1; auto s2 = js.template get(); // NOT RECOMMENDED std::string s3 = js; std::string s4; s4 = js; // Booleans bool b1 = true; json jb = b1; auto b2 = jb.template get(); // NOT RECOMMENDED bool b3 = jb; bool b4; b4 = jb; // numbers int i = 42; json jn = i; auto f = jn.template get(); // NOT RECOMMENDED double f2 = jb; double f3; f3 = jb; // etc. ``` Note that `char` types are not automatically converted to JSON strings, but to integer numbers. A conversion to a string must be specified explicitly: ```cpp char ch = 'A'; // ASCII value 65 json j_default = ch; // stores integer number 65 json j_string = std::string(1, ch); // stores string "A" ``` ### Arbitrary types conversions Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines: ```cpp namespace ns { // a simple struct to model a person struct person { std::string name; std::string address; int age; }; } ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // convert to JSON: copy each value into the JSON object json j; j["name"] = p.name; j["address"] = p.address; j["age"] = p.age; // ... // convert from JSON: copy each value from the JSON object ns::person p { j["name"].template get(), j["address"].template get(), j["age"].template get() }; ``` It works, but that's quite a lot of boilerplate... Fortunately, there's a better way: ```cpp // create a person ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60}; // conversion: person -> json json j = p; std::cout << j << std::endl; // {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} // conversion: json -> person auto p2 = j.template get(); // that's it assert(p == p2); ``` #### Basic usage To make this work with one of your types, you only need to provide two functions: ```cpp using json = nlohmann::json; namespace ns { void to_json(json& j, const person& p) { j = json{{"name", p.name}, {"address", p.address}, {"age", p.age}}; } void from_json(const json& j, person& p) { j.at("name").get_to(p.name); j.at("address").get_to(p.address); j.at("age").get_to(p.age); } } // namespace ns ``` That's all! When calling the `json` constructor with your type, your custom `to_json` method will be automatically called. Likewise, when calling `template get()` or `get_to(your_type&)`, the `from_json` method will be called. Some important things: - Those methods **MUST** be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace `ns`, where `person` is defined). - Those methods **MUST** be available (e.g., proper headers must be included) everywhere you use these conversions. Look at [issue 1108](https://github.com/nlohmann/json/issues/1108) for errors that may occur otherwise. - When using `template get()`, `your_type` **MUST** be [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). (There is a way to bypass this requirement described later.) - In function `from_json`, use function [`at()`](https://json.nlohmann.me/api/basic_json/at/) to access the object values rather than `operator[]`. In case a key does not exist, `at` throws an exception that you can handle, whereas `operator[]` exhibits undefined behavior. - You do not need to add serializers or deserializers for STL types like `std::vector`: the library already implements these. #### Simplify your life with macros If you just want to serialize/deserialize some structs, the `to_json`/`from_json` functions can be a lot of boilerplate. There are [**several macros**](https://json.nlohmann.me/features/arbitrary_types/#simplify-your-life-with-macros) to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object. Which macro to choose depends on whether private member variables need to be accessed, a deserialization is needed, missing values should yield an error or should be replaced by default values, and if derived classes are used. See [this overview to choose the right one for your use case](https://json.nlohmann.me/api/macros/#serializationdeserialization-macros). ##### Example usage of macros The `to_json`/`from_json` functions for the `person` struct above can be created with [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`](https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/). In all macros, the first parameter is the name of the class/struct, and all remaining parameters name the members. ```cpp namespace ns { NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age) } ``` Here is another example with private members, where [`NLOHMANN_DEFINE_TYPE_INTRUSIVE`](https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/) is needed: ```cpp namespace ns { class address { private: std::string street; int housenumber; int postcode; public: NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode) }; } ``` #### How do I convert third-party types? This requires a bit more advanced technique. But first, let's see how this conversion mechanism works: The library uses **JSON Serializers** to convert types to json. The default serializer for `nlohmann::json` is `nlohmann::adl_serializer` (ADL means [Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)). It is implemented like this (simplified): ```cpp template struct adl_serializer { static void to_json(json& j, const T& value) { // calls the "to_json" method in T's namespace } static void from_json(const json& j, T& value) { // same thing, but with the "from_json" method } }; ``` This serializer works fine when you have control over the type's namespace. However, what about `boost::optional` or `std::filesystem::path` (C++17)? Hijacking the `boost` namespace is pretty bad, and it's illegal to add something other than template specializations to `std`... To solve this, you need to add a specialization of `adl_serializer` to the `nlohmann` namespace, here's an example: ```cpp // partial specialization (full specialization works too) namespace nlohmann { template struct adl_serializer> { static void to_json(json& j, const boost::optional& opt) { if (opt == boost::none) { j = nullptr; } else { j = *opt; // this will call adl_serializer::to_json which will // find the free function to_json in T's namespace! } } static void from_json(const json& j, boost::optional& opt) { if (j.is_null()) { opt = boost::none; } else { opt = j.template get(); // same as above, but with // adl_serializer::from_json } } }; } ``` #### How can I use `get()` for non-default constructible/non-copyable types? There is a way, if your type is [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible). You will need to specialize the `adl_serializer` as well, but with a special `from_json` overload: ```cpp struct move_only_type { move_only_type() = delete; move_only_type(int ii): i(ii) {} move_only_type(const move_only_type&) = delete; move_only_type(move_only_type&&) = default; int i; }; namespace nlohmann { template <> struct adl_serializer { // note: the return type is no longer 'void', and the method only takes // one argument static move_only_type from_json(const json& j) { return {j.template get()}; } // Here's the catch! You must provide a to_json method! Otherwise, you // will not be able to convert move_only_type to json, since you fully // specialized adl_serializer on that type static void to_json(json& j, move_only_type t) { j = t.i; } }; } ``` #### Can I write my own serializer? (Advanced use) Yes. You might want to take a look at [`unit-udt.cpp`](https://github.com/nlohmann/json/blob/develop/tests/src/unit-udt.cpp) in the test suite, to see a few examples. If you write your own serializer, you'll need to do a few things: - use a different `basic_json` alias than `nlohmann::json` (the last template parameter of `basic_json` is the `JSONSerializer`) - use your `basic_json` alias (or a template parameter) in all your `to_json`/`from_json` methods - use `nlohmann::to_json` and `nlohmann::from_json` when you need ADL Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL. ```cpp // You should use void as a second template argument // if you don't need compile-time checks on T template::type> struct less_than_32_serializer { template static void to_json(BasicJsonType& j, T value) { // we want to use ADL, and call the correct to_json overload using nlohmann::to_json; // this method is called by adl_serializer, // this is where the magic happens to_json(j, value); } template static void from_json(const BasicJsonType& j, T& value) { // same thing here using nlohmann::from_json; from_json(j, value); } }; ``` Be **very** careful when reimplementing your serializer, you can stack overflow if you don't pay attention: ```cpp template struct bad_serializer { template static void to_json(BasicJsonType& j, const T& value) { // this calls BasicJsonType::json_serializer::to_json(j, value) // if BasicJsonType::json_serializer == bad_serializer ... oops! j = value; } template static void to_json(const BasicJsonType& j, T& value) { // this calls BasicJsonType::json_serializer::from_json(j, value) // if BasicJsonType::json_serializer == bad_serializer ... oops! value = j.template get(); // oops! } }; ``` ### Specializing enum conversion By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended. It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below: ```cpp // example enum type declaration enum TaskState { TS_STOPPED, TS_RUNNING, TS_COMPLETED, TS_INVALID=-1, }; // map TaskState values to JSON as strings NLOHMANN_JSON_SERIALIZE_ENUM( TaskState, { {TS_INVALID, nullptr}, {TS_STOPPED, "stopped"}, {TS_RUNNING, "running"}, {TS_COMPLETED, "completed"}, }) ``` The `NLOHMANN_JSON_SERIALIZE_ENUM()` macro declares a set of `to_json()` / `from_json()` functions for type `TaskState` while avoiding repetition and boilerplate serialization code. **Usage:** ```cpp // enum to JSON as string json j = TS_STOPPED; assert(j == "stopped"); // json string to enum json j3 = "running"; assert(j3.template get() == TS_RUNNING); // undefined json value to enum (where the first map entry above is the default) json jPi = 3.14; assert(jPi.template get() == TS_INVALID); ``` Just as in [Arbitrary Type Conversions](#arbitrary-types-conversions) above, - `NLOHMANN_JSON_SERIALIZE_ENUM()` MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization. - It MUST be available (e.g., proper headers must be included) everywhere you use the conversions. Other Important points: - When using `template get()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully. - If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON. ### Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData) Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports [BSON](https://bsonspec.org) (Binary JSON), [CBOR](https://cbor.io) (Concise Binary Object Representation), [MessagePack](https://msgpack.org), [UBJSON](https://ubjson.org) (Universal Binary JSON Specification) and [BJData](https://neurojson.org/bjdata) (Binary JData) to efficiently encode JSON values to byte vectors and to decode such vectors. ```cpp // create a JSON value json j = R"({"compact": true, "schema": 0})"_json; // serialize to BSON std::vector v_bson = json::to_bson(j); // 0x1B, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // roundtrip json j_from_bson = json::from_bson(v_bson); // serialize to CBOR std::vector v_cbor = json::to_cbor(j); // 0xA2, 0x67, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xF5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00 // roundtrip json j_from_cbor = json::from_cbor(v_cbor); // serialize to MessagePack std::vector v_msgpack = json::to_msgpack(j); // 0x82, 0xA7, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xC3, 0xA6, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00 // roundtrip json j_from_msgpack = json::from_msgpack(v_msgpack); // serialize to UBJSON std::vector v_ubjson = json::to_ubjson(j); // 0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D // roundtrip json j_from_ubjson = json::from_ubjson(v_ubjson); ``` The library also supports binary types from BSON, CBOR (byte strings), and MessagePack (bin, ext, fixext). They are stored by default as `std::vector` to be processed outside the library. ```cpp // CBOR byte string with payload 0xCAFE std::vector v = {0x42, 0xCA, 0xFE}; // read value json j = json::from_cbor(v); // the JSON value has type binary j.is_binary(); // true // get reference to stored binary value auto& binary = j.get_binary(); // the binary value has no subtype (CBOR has no binary subtypes) binary.has_subtype(); // false // access std::vector member functions binary.size(); // 2 binary[0]; // 0xCA binary[1]; // 0xFE // set subtype to 0x10 binary.set_subtype(0x10); // serialize to MessagePack auto cbor = json::to_msgpack(j); // 0xD5 (fixext2), 0x10, 0xCA, 0xFE ``` ## Customers The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, please let me know, see [contact](#contact). [![logos of customers using the library](docs/mkdocs/docs/images/customers.png)](https://json.nlohmann.me/home/customers/) ## Supported compilers Though it's 2025 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work: - GCC 4.8 - 14.2 (and possibly later) - Clang 3.4 - 21.0 (and possibly later) - Apple Clang 9.1 - 16.0 (and possibly later) - Intel C++ Compiler 17.0.2 (and possibly later) - Nvidia CUDA Compiler 11.0.221 (and possibly later) - Microsoft Visual C++ 2015 / Build Tools 14.0.25123.0 (and possibly later) - Microsoft Visual C++ 2017 / Build Tools 15.5.180.51428 (and possibly later) - Microsoft Visual C++ 2019 / Build Tools 16.3.1+1def00d3d (and possibly later) - Microsoft Visual C++ 2022 / Build Tools 19.30.30709.0 (and possibly later) I would be happy to learn about other compilers/versions. Please note: - GCC 4.8 has a bug [57824](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57824): multiline raw strings cannot be the arguments to macros. Don't use multiline raw strings directly in macros with this compiler. - Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your `Application.mk`. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default. ```makefile APP_STL := c++_shared NDK_TOOLCHAIN_VERSION := clang3.6 APP_CPPFLAGS += -frtti -fexceptions ``` The code compiles successfully with [Android NDK](https://developer.android.com/ndk/index.html?hl=ml), Revision 9 - 11 (and possibly later) and [CrystaX's Android NDK](https://www.crystax.net/en/android/ndk) version 10. - For GCC running on MinGW or Android SDK, the error `'to_string' is not a member of 'std'` (or similarly, for `strtod` or `strtof`) may occur. Note this is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to [this site](https://tehsausage.com/mingw-to-string) and [this discussion](https://github.com/nlohmann/json/issues/136) for information on how to fix this bug. For Android NDK using `APP_STL := gnustl_static`, please refer to [this discussion](https://github.com/nlohmann/json/issues/219). - Unsupported versions of GCC and Clang are rejected by `#error` directives. This can be switched off by defining `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK`. Note that you can expect no support in this case. See the page [quality assurance](https://json.nlohmann.me/community/quality_assurance) on the compilers used to check the library in the CI. ## Integration [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp) is the single required file in `single_include/nlohmann` or [released here](https://github.com/nlohmann/json/releases). You need to add ```cpp #include // for convenience using json = nlohmann::json; ``` to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., `-std=c++11` for GCC and Clang). You can further use file [`include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json_fwd.hpp) for forward-declarations. The installation of json_fwd.hpp (as part of cmake's install step), can be achieved by setting `-DJSON_MultipleHeaders=ON`. ### CMake You can also use the `nlohmann_json::nlohmann_json` interface target in CMake. This target populates the appropriate usage requirements for `INTERFACE_INCLUDE_DIRECTORIES` to point to the appropriate include directories and `INTERFACE_COMPILE_FEATURES` for the necessary C++11 flags. #### External To use this library from a CMake project, you can locate it directly with `find_package()` and use the namespaced imported target from the generated package configuration: ```cmake # CMakeLists.txt find_package(nlohmann_json 3.12.0 REQUIRED) ... add_library(foo ...) ... target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json) ``` The package configuration file, `nlohmann_jsonConfig.cmake`, can be used either from an install tree or directly out of the build tree. #### Embedded To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call `add_subdirectory()` in your `CMakeLists.txt` file: ```cmake # Typically you don't care so much for a third party library's tests to be # run from your own project's code. set(JSON_BuildTests OFF CACHE INTERNAL "") # If you only include this third party in PRIVATE source files, you do not # need to install it when your main project gets installed. # set(JSON_Install OFF CACHE INTERNAL "") # Don't use include(nlohmann_json/CMakeLists.txt) since that carries with it # unintended consequences that will break the build. It's generally # discouraged (although not necessarily well documented as such) to use # include(...) for pulling in other CMake projects anyways. add_subdirectory(nlohmann_json) ... add_library(foo ...) ... target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json) ``` ##### Embedded (FetchContent) Since CMake v3.11, [FetchContent](https://cmake.org/cmake/help/v3.11/module/FetchContent.html) can be used to automatically download a release as a dependency at configure time. Example: ```cmake include(FetchContent) FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz) FetchContent_MakeAvailable(json) target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json) ``` **Note**: It is recommended to use the URL approach described above which is supported as of version 3.10.0. See for more information. #### Supporting Both To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following: ``` cmake # Top level CMakeLists.txt project(FOO) ... option(FOO_USE_EXTERNAL_JSON "Use an external JSON library" OFF) ... add_subdirectory(thirdparty) ... add_library(foo ...) ... # Note that the namespaced target will always be available regardless of the # import method target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json) ``` ```cmake # thirdparty/CMakeLists.txt ... if(FOO_USE_EXTERNAL_JSON) find_package(nlohmann_json 3.12.0 REQUIRED) else() set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(nlohmann_json) endif() ... ``` `thirdparty/nlohmann_json` is then a complete copy of this source tree. ### Package Managers Use your favorite [**package manager**](https://json.nlohmann.me/integration/package_managers/) to use the library. -  [**Homebrew**](https://json.nlohmann.me/integration/package_managers/#homebrew) `nlohmann-json` -  [**Meson**](https://json.nlohmann.me/integration/package_managers/#meson) `nlohmann_json` -  [**Bazel**](https://json.nlohmann.me/integration/package_managers/#bazel) `nlohmann_json` -  [**Conan**](https://json.nlohmann.me/integration/package_managers/#conan) `nlohmann_json` -  [**Spack**](https://json.nlohmann.me/integration/package_managers/#spack) `nlohmann-json` - [**Hunter**](https://json.nlohmann.me/integration/package_managers/#hunter) `nlohmann_json` -  [**vcpkg**](https://json.nlohmann.me/integration/package_managers/#vcpkg) `nlohmann-json` - [**cget**](https://json.nlohmann.me/integration/package_managers/#cget) `nlohmann/json` -  [**Swift Package Manager**](https://json.nlohmann.me/integration/package_managers/#swift-package-manager) `nlohmann/json` -  [**Nuget**](https://json.nlohmann.me/integration/package_managers/#nuget) `nlohmann.json` -  [**Conda**](https://json.nlohmann.me/integration/package_managers/#conda) `nlohmann_json` -  [**MacPorts**](https://json.nlohmann.me/integration/package_managers/#macports) `nlohmann-json` -  [**cpm.cmake**](https://json.nlohmann.me/integration/package_managers/#cpmcmake) `gh:nlohmann/json` -  [**xmake**](https://json.nlohmann.me/integration/package_managers/#xmake) `nlohmann_json` The library is part of many package managers. See the [**documentation**](https://json.nlohmann.me/integration/package_managers/) for detailed descriptions and examples. ### Pkg-config If you are using bare Makefiles, you can use `pkg-config` to generate the include flags that point to where the library is installed: ```sh pkg-config nlohmann_json --cflags ``` ## License OSI approved license The class is licensed under the [MIT License](https://opensource.org/licenses/MIT): Copyright © 2013-2025 [Niels Lohmann](https://nlohmann.me) 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. * * * - The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2008-2009 [Björn Hoehrmann](https://bjoern.hoehrmann.de/) - The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2009 [Florian Loitsch](https://florian.loitsch.com/) - The class contains a copy of [Hedley](https://nemequ.github.io/hedley/) from Evan Nemerson which is licensed as [CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/). - The class contains parts of [Google Abseil](https://github.com/abseil/abseil-cpp) which is licensed under the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0). REUSE Software The library is compliant to version 3.3 of the [**REUSE specification**](https://reuse.software): - Every source file contains an SPDX copyright header. - The full text of all licenses used in the repository can be found in the `LICENSES` folder. - File `.reuse/dep5` contains an overview of all files' copyrights and licenses. - Run `pipx run reuse lint` to verify the project's REUSE compliance and `pipx run reuse spdx` to generate a SPDX SBOM. ## Contact If you have questions regarding the library, I would like to invite you to [open an issue at GitHub](https://github.com/nlohmann/json/issues/new/choose). Please describe your request, problem, or question as detailed as possible, and also mention the version of the library you are using as well as the version of your compiler and operating system. Opening an issue at GitHub allows other users and contributors to this library to collaborate. For instance, I have little experience with MSVC, and most issues in this regard have been solved by a growing community. If you have a look at the [closed issues](https://github.com/nlohmann/json/issues?q=is%3Aissue+is%3Aclosed), you will see that we react quite timely in most cases. Only if your request would contain confidential information, please [send me an email](mailto:mail@nlohmann.me). For encrypted messages, please use [this key](https://keybase.io/nlohmann/pgp_keys.asc). ## Security [Commits by Niels Lohmann](https://github.com/nlohmann/json/commits) and [releases](https://github.com/nlohmann/json/releases) are signed with this [PGP Key](https://keybase.io/nlohmann/pgp_keys.asc?fingerprint=797167ae41c0a6d9232e48457f3cea63ae251b69). ## Thanks I deeply appreciate the help of the following people. GitHub avatars of the contributors 1. [Teemperor](https://github.com/Teemperor) implemented CMake support and lcov integration, realized escape and Unicode handling in the string parser, and fixed the JSON serialization. 2. [elliotgoodrich](https://github.com/elliotgoodrich) fixed an issue with double deletion in the iterator classes. 3. [kirkshoop](https://github.com/kirkshoop) made the iterators of the class composable to other libraries. 4. [wancw](https://github.com/wanwc) fixed a bug that hindered the class to compile with Clang. 5. Tomas Åblad found a bug in the iterator implementation. 6. [Joshua C. Randall](https://github.com/jrandall) fixed a bug in the floating-point serialization. 7. [Aaron Burghardt](https://github.com/aburgh) implemented code to parse streams incrementally. Furthermore, he greatly improved the parser class by allowing the definition of a filter function to discard undesired elements while parsing. 8. [Daniel Kopeček](https://github.com/dkopecek) fixed a bug in the compilation with GCC 5.0. 9. [Florian Weber](https://github.com/Florianjw) fixed a bug in and improved the performance of the comparison operators. 10. [Eric Cornelius](https://github.com/EricMCornelius) pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping. 11. [易思龙](https://github.com/likebeta) implemented a conversion from anonymous enums. 12. [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual studio. 13. [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types. 14. [Caio Luppi](https://github.com/caiovlp) fixed a bug in the Unicode handling. 15. [dariomt](https://github.com/dariomt) fixed some typos in the examples. 16. [Daniel Frey](https://github.com/d-frey) cleaned up some pointers and implemented exception-safe memory allocation. 17. [Colin Hirsch](https://github.com/ColinH) took care of a small namespace issue. 18. [Huu Nguyen](https://github.com/whoshuu) correct a variable name in the documentation. 19. [Silverweed](https://github.com/silverweed) overloaded `parse()` to accept an rvalue reference. 20. [dariomt](https://github.com/dariomt) fixed a subtlety in MSVC type support and implemented the `get_ref()` function to get a reference to stored values. 21. [ZahlGraf](https://github.com/ZahlGraf) added a workaround that allows compilation using Android NDK. 22. [whackashoe](https://github.com/whackashoe) replaced a function that was marked as unsafe by Visual Studio. 23. [406345](https://github.com/406345) fixed two small warnings. 24. [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function. 25. [Corbin Hughes](https://github.com/nibroc) fixed some typos in the contribution guidelines. 26. [twelsby](https://github.com/twelsby) fixed the array subscript operator, an issue that failed the MSVC build, and floating-point parsing/dumping. He further added support for unsigned integer numbers and implemented better roundtrip support for parsed numbers. 27. [Volker Diels-Grabsch](https://github.com/vog) fixed a link in the README file. 28. [msm-](https://github.com/msm-) added support for American Fuzzy Lop. 29. [Annihil](https://github.com/Annihil) fixed an example in the README file. 30. [Themercee](https://github.com/Themercee) noted a wrong URL in the README file. 31. [Lv Zheng](https://github.com/lv-zheng) fixed a namespace issue with `int64_t` and `uint64_t`. 32. [abc100m](https://github.com/abc100m) analyzed the issues with GCC 4.8 and proposed a [partial solution](https://github.com/nlohmann/json/pull/212). 33. [zewt](https://github.com/zewt) added useful notes to the README file about Android. 34. [Róbert Márki](https://github.com/robertmrk) added a fix to use move iterators and improved the integration via CMake. 35. [Chris Kitching](https://github.com/ChrisKitching) cleaned up the CMake files. 36. [Tom Needham](https://github.com/06needhamt) fixed a subtle bug with MSVC 2015 which was also proposed by [Michael K.](https://github.com/Epidal). 37. [Mário Feroldi](https://github.com/thelostt) fixed a small typo. 38. [duncanwerner](https://github.com/duncanwerner) found a really embarrassing performance regression in the 2.0.0 release. 39. [Damien](https://github.com/dtoma) fixed one of the last conversion warnings. 40. [Thomas Braun](https://github.com/t-b) fixed a warning in a test case and adjusted MSVC calls in the CI. 41. [Théo DELRIEU](https://github.com/theodelrieu) patiently and constructively oversaw the long way toward [iterator-range parsing](https://github.com/nlohmann/json/issues/290). He also implemented the magic behind the serialization/deserialization of user-defined types and split the single header file into smaller chunks. 42. [Stefan](https://github.com/5tefan) fixed a minor issue in the documentation. 43. [Vasil Dimov](https://github.com/vasild) fixed the documentation regarding conversions from `std::multiset`. 44. [ChristophJud](https://github.com/ChristophJud) overworked the CMake files to ease project inclusion. 45. [Vladimir Petrigo](https://github.com/vpetrigo) made a SFINAE hack more readable and added Visual Studio 17 to the build matrix. 46. [Denis Andrejew](https://github.com/seeekr) fixed a grammar issue in the README file. 47. [Pierre-Antoine Lacaze](https://github.com/palacaze) found a subtle bug in the `dump()` function. 48. [TurpentineDistillery](https://github.com/TurpentineDistillery) pointed to [`std::locale::classic()`](https://en.cppreference.com/w/cpp/locale/locale/classic) to avoid too much locale joggling, found some nice performance improvements in the parser, improved the benchmarking code, and realized locale-independent number parsing and printing. 49. [cgzones](https://github.com/cgzones) had an idea how to fix the Coverity scan. 50. [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning. 51. [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check. 52. [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one. 53. [Daniel599](https://github.com/Daniel599) helped to get Travis execute the tests with Clang's sanitizers. 54. [Jonathan Lee](https://github.com/vjon) fixed an example in the README file. 55. [gnzlbg](https://github.com/gnzlbg) supported the implementation of user-defined types. 56. [Alexej Harm](https://github.com/qis) helped to get the user-defined types working with Visual Studio. 57. [Jared Grubb](https://github.com/jaredgrubb) supported the implementation of user-defined types. 58. [EnricoBilla](https://github.com/EnricoBilla) noted a typo in an example. 59. [Martin Hořeňovský](https://github.com/horenmar) found a way for a 2x speedup for the compilation time of the test suite. 60. [ukhegg](https://github.com/ukhegg) found proposed an improvement for the examples section. 61. [rswanson-ihi](https://github.com/rswanson-ihi) noted a typo in the README. 62. [Mihai Stan](https://github.com/stanmihai4) fixed a bug in the comparison with `nullptr`s. 63. [Tushar Maheshwari](https://github.com/tusharpm) added [cotire](https://github.com/sakra/cotire) support to speed up the compilation. 64. [TedLyngmo](https://github.com/TedLyngmo) noted a typo in the README, removed unnecessary bit arithmetic, and fixed some `-Weffc++` warnings. 65. [Krzysztof Woś](https://github.com/krzysztofwos) made exceptions more visible. 66. [ftillier](https://github.com/ftillier) fixed a compiler warning. 67. [tinloaf](https://github.com/tinloaf) made sure all pushed warnings are properly popped. 68. [Fytch](https://github.com/Fytch) found a bug in the documentation. 69. [Jay Sistar](https://github.com/Type1J) implemented a Meson build description. 70. [Henry Lee](https://github.com/HenryRLee) fixed a warning in ICC and improved the iterator implementation. 71. [Vincent Thiery](https://github.com/vthiery) maintains a package for the Conan package manager. 72. [Steffen](https://github.com/koemeet) fixed a potential issue with MSVC and `std::min`. 73. [Mike Tzou](https://github.com/Chocobo1) fixed some typos. 74. [amrcode](https://github.com/amrcode) noted a misleading documentation about comparison of floats. 75. [Oleg Endo](https://github.com/olegendo) reduced the memory consumption by replacing `` with ``. 76. [dan-42](https://github.com/dan-42) cleaned up the CMake files to simplify including/reusing of the library. 77. [Nikita Ofitserov](https://github.com/himikof) allowed for moving values from initializer lists. 78. [Greg Hurrell](https://github.com/wincent) fixed a typo. 79. [Dmitry Kukovinets](https://github.com/DmitryKuk) fixed a typo. 80. [kbthomp1](https://github.com/kbthomp1) fixed an issue related to the Intel OSX compiler. 81. [Markus Werle](https://github.com/daixtrose) fixed a typo. 82. [WebProdPP](https://github.com/WebProdPP) fixed a subtle error in a precondition check. 83. [Alex](https://github.com/leha-bot) noted an error in a code sample. 84. [Tom de Geus](https://github.com/tdegeus) reported some warnings with ICC and helped to fix them. 85. [Perry Kundert](https://github.com/pjkundert) simplified reading from input streams. 86. [Sonu Lohani](https://github.com/sonulohani) fixed a small compilation error. 87. [Jamie Seward](https://github.com/jseward) fixed all MSVC warnings. 88. [Nate Vargas](https://github.com/eld00d) added a Doxygen tag file. 89. [pvleuven](https://github.com/pvleuven) helped to fix a warning in ICC. 90. [Pavel](https://github.com/crea7or) helped to fix some warnings in MSVC. 91. [Jamie Seward](https://github.com/jseward) avoided unnecessary string copies in `find()` and `count()`. 92. [Mitja](https://github.com/Itja) fixed some typos. 93. [Jorrit Wronski](https://github.com/jowr) updated the Hunter package links. 94. [Matthias Möller](https://github.com/TinyTinni) added a `.natvis` for the MSVC debug view. 95. [bogemic](https://github.com/bogemic) fixed some C++17 deprecation warnings. 96. [Eren Okka](https://github.com/erengy) fixed some MSVC warnings. 97. [abolz](https://github.com/abolz) integrated the Grisu2 algorithm for proper floating-point formatting, allowing more roundtrip checks to succeed. 98. [Vadim Evard](https://github.com/Pipeliner) fixed a Markdown issue in the README. 99. [zerodefect](https://github.com/zerodefect) fixed a compiler warning. 100. [Kert](https://github.com/kaidokert) allowed to template the string type in the serialization and added the possibility to override the exceptional behavior. 101. [mark-99](https://github.com/mark-99) helped fixing an ICC error. 102. [Patrik Huber](https://github.com/patrikhuber) fixed links in the README file. 103. [johnfb](https://github.com/johnfb) found a bug in the implementation of CBOR's indefinite length strings. 104. [Paul Fultz II](https://github.com/pfultz2) added a note on the cget package manager. 105. [Wilson Lin](https://github.com/wla80) made the integration section of the README more concise. 106. [RalfBielig](https://github.com/ralfbielig) detected and fixed a memory leak in the parser callback. 107. [agrianius](https://github.com/agrianius) allowed to dump JSON to an alternative string type. 108. [Kevin Tonon](https://github.com/ktonon) overworked the C++11 compiler checks in CMake. 109. [Axel Huebl](https://github.com/ax3l) simplified a CMake check and added support for the [Spack package manager](https://spack.io). 110. [Carlos O'Ryan](https://github.com/coryan) fixed a typo. 111. [James Upjohn](https://github.com/jammehcow) fixed a version number in the compilers section. 112. [Chuck Atkins](https://github.com/chuckatkins) adjusted the CMake files to the CMake packaging guidelines and provided documentation for the CMake integration. 113. [Jan Schöppach](https://github.com/dns13) fixed a typo. 114. [martin-mfg](https://github.com/martin-mfg) fixed a typo. 115. [Matthias Möller](https://github.com/TinyTinni) removed the dependency from `std::stringstream`. 116. [agrianius](https://github.com/agrianius) added code to use alternative string implementations. 117. [Daniel599](https://github.com/Daniel599) allowed to use more algorithms with the `items()` function. 118. [Julius Rakow](https://github.com/jrakow) fixed the Meson include directory and fixed the links to [cppreference.com](https://cppreference.com). 119. [Sonu Lohani](https://github.com/sonulohani) fixed the compilation with MSVC 2015 in debug mode. 120. [grembo](https://github.com/grembo) fixed the test suite and re-enabled several test cases. 121. [Hyeon Kim](https://github.com/simnalamburt) introduced the macro `JSON_INTERNAL_CATCH` to control the exception handling inside the library. 122. [thyu](https://github.com/thyu) fixed a compiler warning. 123. [David Guthrie](https://github.com/LEgregius) fixed a subtle compilation error with Clang 3.4.2. 124. [Dennis Fischer](https://github.com/dennisfischer) allowed to call `find_package` without installing the library. 125. [Hyeon Kim](https://github.com/simnalamburt) fixed an issue with a double macro definition. 126. [Ben Berman](https://github.com/rivertam) made some error messages more understandable. 127. [zakalibit](https://github.com/zakalibit) fixed a compilation problem with the Intel C++ compiler. 128. [mandreyel](https://github.com/mandreyel) fixed a compilation problem. 129. [Kostiantyn Ponomarenko](https://github.com/koponomarenko) added version and license information to the Meson build file. 130. [Henry Schreiner](https://github.com/henryiii) added support for GCC 4.8. 131. [knilch](https://github.com/knilch0r) made sure the test suite does not stall when run in the wrong directory. 132. [Antonio Borondo](https://github.com/antonioborondo) fixed an MSVC 2017 warning. 133. [Dan Gendreau](https://github.com/dgendreau) implemented the `NLOHMANN_JSON_SERIALIZE_ENUM` macro to quickly define an enum/JSON mapping. 134. [efp](https://github.com/efp) added line and column information to parse errors. 135. [julian-becker](https://github.com/julian-becker) added BSON support. 136. [Pratik Chowdhury](https://github.com/pratikpc) added support for structured bindings. 137. [David Avedissian](https://github.com/davedissian) added support for Clang 5.0.1 (PS4 version). 138. [Jonathan Dumaresq](https://github.com/dumarjo) implemented an input adapter to read from `FILE*`. 139. [kjpus](https://github.com/kjpus) fixed a link in the documentation. 140. [Manvendra Singh](https://github.com/manu-chroma) fixed a typo in the documentation. 141. [ziggurat29](https://github.com/ziggurat29) fixed an MSVC warning. 142. [Sylvain Corlay](https://github.com/SylvainCorlay) added code to avoid an issue with MSVC. 143. [mefyl](https://github.com/mefyl) fixed a bug when JSON was parsed from an input stream. 144. [Millian Poquet](https://github.com/mpoquet) allowed to install the library via Meson. 145. [Michael Behrns-Miller](https://github.com/moodboom) found an issue with a missing namespace. 146. [Nasztanovics Ferenc](https://github.com/naszta) fixed a compilation issue with libc 2.12. 147. [Andreas Schwab](https://github.com/andreas-schwab) fixed the endian conversion. 148. [Mark-Dunning](https://github.com/Mark-Dunning) fixed a warning in MSVC. 149. [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) added `operator/` for JSON Pointers. 150. [John-Mark](https://github.com/johnmarkwayve) noted a missing header. 151. [Vitaly Zaitsev](https://github.com/xvitaly) fixed compilation with GCC 9.0. 152. [Laurent Stacul](https://github.com/stac47) fixed compilation with GCC 9.0. 153. [Ivor Wanders](https://github.com/iwanders) helped to reduce the CMake requirement to version 3.1. 154. [njlr](https://github.com/njlr) updated the Buckaroo instructions. 155. [Lion](https://github.com/lieff) fixed a compilation issue with GCC 7 on CentOS. 156. [Isaac Nickaein](https://github.com/nickaein) improved the integer serialization performance and implemented the `contains()` function. 157. [past-due](https://github.com/past-due) suppressed an unfixable warning. 158. [Elvis Oric](https://github.com/elvisoric) improved Meson support. 159. [Matěj Plch](https://github.com/Afforix) fixed an example in the README. 160. [Mark Beckwith](https://github.com/wythe) fixed a typo. 161. [scinart](https://github.com/scinart) fixed bug in the serializer. 162. [Patrick Boettcher](https://github.com/pboettch) implemented `push_back()` and `pop_back()` for JSON Pointers. 163. [Bruno Oliveira](https://github.com/nicoddemus) added support for Conda. 164. [Michele Caini](https://github.com/skypjack) fixed links in the README. 165. [Hani](https://github.com/hnkb) documented how to install the library with NuGet. 166. [Mark Beckwith](https://github.com/wythe) fixed a typo. 167. [yann-morin-1998](https://github.com/yann-morin-1998) helped to reduce the CMake requirement to version 3.1. 168. [Konstantin Podsvirov](https://github.com/podsvirov) maintains a package for the MSYS2 software distro. 169. [remyabel](https://github.com/remyabel) added GNUInstallDirs to the CMake files. 170. [Taylor Howard](https://github.com/taylorhoward92) fixed a unit test. 171. [Gabe Ron](https://github.com/Macr0Nerd) implemented the `to_string` method. 172. [Watal M. Iwasaki](https://github.com/heavywatal) fixed a Clang warning. 173. [Viktor Kirilov](https://github.com/onqtam) switched the unit tests from [Catch](https://github.com/philsquared/Catch) to [doctest](https://github.com/onqtam/doctest) 174. [Juncheng E](https://github.com/ejcjason) fixed a typo. 175. [tete17](https://github.com/tete17) fixed a bug in the `contains` function. 176. [Xav83](https://github.com/Xav83) fixed some cppcheck warnings. 177. [0xflotus](https://github.com/0xflotus) fixed some typos. 178. [Christian Deneke](https://github.com/chris0x44) added a const version of `json_pointer::back`. 179. [Julien Hamaide](https://github.com/crazyjul) made the `items()` function work with custom string types. 180. [Evan Nemerson](https://github.com/nemequ) updated fixed a bug in Hedley and updated this library accordingly. 181. [Florian Pigorsch](https://github.com/flopp) fixed a lot of typos. 182. [Camille Bégué](https://github.com/cbegue) fixed an issue in the conversion from `std::pair` and `std::tuple` to `json`. 183. [Anthony VH](https://github.com/AnthonyVH) fixed a compile error in an enum deserialization. 184. [Yuriy Vountesmery](https://github.com/ua-code-dragon) noted a subtle bug in a preprocessor check. 185. [Chen](https://github.com/dota17) fixed numerous issues in the library. 186. [Antony Kellermann](https://github.com/aokellermann) added a CI step for GCC 10.1. 187. [Alex](https://github.com/gistrec) fixed an MSVC warning. 188. [Rainer](https://github.com/rvjr) proposed an improvement in the floating-point serialization in CBOR. 189. [Francois Chabot](https://github.com/FrancoisChabot) made performance improvements in the input adapters. 190. [Arthur Sonzogni](https://github.com/ArthurSonzogni) documented how the library can be included via `FetchContent`. 191. [Rimas Misevičius](https://github.com/rmisev) fixed an error message. 192. [Alexander Myasnikov](https://github.com/alexandermyasnikov) fixed some examples and a link in the README. 193. [Hubert Chathi](https://github.com/uhoreg) made CMake's version config file architecture-independent. 194. [OmnipotentEntity](https://github.com/OmnipotentEntity) implemented the binary values for CBOR, MessagePack, BSON, and UBJSON. 195. [ArtemSarmini](https://github.com/ArtemSarmini) fixed a compilation issue with GCC 10 and fixed a leak. 196. [Evgenii Sopov](https://github.com/sea-kg) integrated the library to the wsjcpp package manager. 197. [Sergey Linev](https://github.com/linev) fixed a compiler warning. 198. [Miguel Magalhães](https://github.com/magamig) fixed the year in the copyright. 199. [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) fixed a compilation issue with MSVC. 200. [Alexander “weej” Jones](https://github.com/alex-weej) fixed an example in the README. 201. [Antoine Cœur](https://github.com/Coeur) fixed some typos in the documentation. 202. [jothepro](https://github.com/jothepro) updated links to the Hunter package. 203. [Dave Lee](https://github.com/kastiglione) fixed link in the README. 204. [Joël Lamotte](https://github.com/Klaim) added instruction for using Build2's package manager. 205. [Paul Jurczak](https://github.com/pauljurczak) fixed an example in the README. 206. [Sonu Lohani](https://github.com/sonulohani) fixed a warning. 207. [Carlos Gomes Martinho](https://github.com/gocarlos) updated the Conan package source. 208. [Konstantin Podsvirov](https://github.com/podsvirov) fixed the MSYS2 package documentation. 209. [Tridacnid](https://github.com/Tridacnid) improved the CMake tests. 210. [Michael](https://github.com/MBalszun) fixed MSVC warnings. 211. [Quentin Barbarat](https://github.com/quentin-dev) fixed an example in the documentation. 212. [XyFreak](https://github.com/XyFreak) fixed a compiler warning. 213. [TotalCaesar659](https://github.com/TotalCaesar659) fixed links in the README. 214. [Tanuj Garg](https://github.com/tanuj208) improved the fuzzer coverage for UBSAN input. 215. [AODQ](https://github.com/AODQ) fixed a compiler warning. 216. [jwittbrodt](https://github.com/jwittbrodt) made `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` inline. 217. [pfeatherstone](https://github.com/pfeatherstone) improved the upper bound of arguments of the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros. 218. [Jan Procházka](https://github.com/jprochazk) fixed a bug in the CBOR parser for binary and string values. 219. [T0b1-iOS](https://github.com/T0b1-iOS) fixed a bug in the new hash implementation. 220. [Matthew Bauer](https://github.com/matthewbauer) adjusted the CBOR writer to create tags for binary subtypes. 221. [gatopeich](https://github.com/gatopeich) implemented an ordered map container for `nlohmann::ordered_json`. 222. [Érico Nogueira Rolim](https://github.com/ericonr) added support for pkg-config. 223. [KonanM](https://github.com/KonanM) proposed an implementation for the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros. 224. [Guillaume Racicot](https://github.com/gracicot) implemented `string_view` support and allowed C++20 support. 225. [Alex Reinking](https://github.com/alexreinking) improved CMake support for `FetchContent`. 226. [Hannes Domani](https://github.com/ssbssa) provided a GDB pretty printer. 227. Lars Wirzenius reviewed the README file. 228. [Jun Jie](https://github.com/ongjunjie) fixed a compiler path in the CMake scripts. 229. [Ronak Buch](https://github.com/rbuch) fixed typos in the documentation. 230. [Alexander Karzhenkov](https://github.com/karzhenkov) fixed a move constructor and the Travis builds. 231. [Leonardo Lima](https://github.com/leozz37) added CPM.Cmake support. 232. [Joseph Blackman](https://github.com/jbzdarkid) fixed a warning. 233. [Yaroslav](https://github.com/YarikTH) updated doctest and implemented unit tests. 234. [Martin Stump](https://github.com/globberwops) fixed a bug in the CMake files. 235. [Jaakko Moisio](https://github.com/jasujm) fixed a bug in the input adapters. 236. [bl-ue](https://github.com/bl-ue) fixed some Markdown issues in the README file. 237. [William A. Wieselquist](https://github.com/wawiesel) fixed an example from the README. 238. [abbaswasim](https://github.com/abbaswasim) fixed an example from the README. 239. [Remy Jette](https://github.com/remyjette) fixed a warning. 240. [Fraser](https://github.com/frasermarlow) fixed the documentation. 241. [Ben Beasley](https://github.com/musicinmybrain) updated doctest. 242. [Doron Behar](https://github.com/doronbehar) fixed pkg-config.pc. 243. [raduteo](https://github.com/raduteo) fixed a warning. 244. [David Pfahler](https://github.com/theShmoo) added the possibility to compile the library without I/O support. 245. [Morten Fyhn Amundsen](https://github.com/mortenfyhn) fixed a typo. 246. [jpl-mac](https://github.com/jpl-mac) allowed to treat the library as a system header in CMake. 247. [Jason Dsouza](https://github.com/jasmcaus) fixed the indentation of the CMake file. 248. [offa](https://github.com/offa) added a link to Conan Center to the documentation. 249. [TotalCaesar659](https://github.com/TotalCaesar659) updated the links in the documentation to use HTTPS. 250. [Rafail Giavrimis](https://github.com/grafail) fixed the Google Benchmark default branch. 251. [Louis Dionne](https://github.com/ldionne) fixed a conversion operator. 252. [justanotheranonymoususer](https://github.com/justanotheranonymoususer) made the examples in the README more consistent. 253. [Finkman](https://github.com/Finkman) suppressed some `-Wfloat-equal` warnings. 254. [Ferry Huberts](https://github.com/fhuberts) fixed `-Wswitch-enum` warnings. 255. [Arseniy Terekhin](https://github.com/senyai) made the GDB pretty-printer robust against unset variable names. 256. [Amir Masoud Abdol](https://github.com/amirmasoudabdol) updated the Homebrew command as nlohmann/json is now in homebrew-core. 257. [Hallot](https://github.com/Hallot) fixed some `-Wextra-semi-stmt warnings`. 258. [Giovanni Cerretani](https://github.com/gcerretani) fixed `-Wunused` warnings on `JSON_DIAGNOSTICS`. 259. [Bogdan Popescu](https://github.com/Kapeli) hosts the [docset](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for offline documentation viewers. 260. [Carl Smedstad](https://github.com/carlsmedstad) fixed an assertion error when using `JSON_DIAGNOSTICS`. 261. [miikka75](https://github.com/miikka75) provided an important fix to compile C++17 code with Clang 9. 262. [Maarten Becker](https://github.com/kernie) fixed a warning for shadowed variables. 263. [Cristi Vîjdea](https://github.com/axnsan12) fixed typos in the `operator[]` documentation. 264. [Alex Beregszaszi](https://github.com/axic) fixed spelling mistakes in comments. 265. [Dirk Stolle](https://github.com/striezel) fixed typos in documentation. 266. [Daniel Albuschat](https://github.com/daniel-kun) corrected the parameter name in the `parse` documentation. 267. [Prince Mendiratta](https://github.com/Prince-Mendiratta) fixed a link to the FAQ. 268. [Florian Albrechtskirchinger](https://github.com/falbrechtskirchinger) implemented `std::string_view` support for object keys and made dozens of other improvements. 269. [Qianqian Fang](https://github.com/fangq) implemented the Binary JData (BJData) format. 270. [pketelsen](https://github.com/pketelsen) added macros `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` and `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`. 271. [DarkZeros](https://github.com/DarkZeros) adjusted to code to not clash with Arduino defines. 272. [flagarde](https://github.com/flagarde) fixed the output of `meta()` for MSVC. 273. [Giovanni Cerretani](https://github.com/gcerretani) fixed a check for `std::filesystem`. 274. [Dimitris Apostolou](https://github.com/rex4539) fixed a typo. 275. [Ferry Huberts](https://github.com/fhuberts) fixed a typo. 276. [Michael Nosthoff](https://github.com/heinemml) fixed a typo. 277. [JungHoon Lee](https://github.com/jhnlee) fixed a typo. 278. [Faruk D.](https://github.com/fdiblen) fixed the CITATION.CFF file. 279. [Andrea Cocito](https://github.com/puffetto) added a clarification on macro usage to the documentation. 280. [Krzysiek Karbowiak](https://github.com/kkarbowiak) refactored the tests to use `CHECK_THROWS_WITH_AS`. 281. [Chaoqi Zhang](https://github.com/prncoprs) fixed a typo. 282. [ivanovmp](https://github.com/ivanovmp) fixed a whitespace error. 283. [KsaNL](https://github.com/KsaNL) fixed a build error when including ``. 284. [Andrea Pappacoda](https://github.com/Tachi107) moved `.pc` and `.cmake` files to `share` directory. 285. [Wolf Vollprecht](https://github.com/wolfv) added the `patch_inplace` function. 286. [Jake Zimmerman](https://github.com/jez) highlighted common usage patterns in the README file. 287. [NN](https://github.com/NN---) added the Visual Studio output directory to `.gitignore`. 288. [Romain Reignier](https://github.com/romainreignier) improved the performance the vector output adapter. 289. [Mike](https://github.com/Mike-Leo-Smith) fixed the `std::iterator_traits`. 290. [Richard Hozák](https://github.com/zxey) added macro `JSON_NO_ENUM` to disable default enum conversions. 291. [vakokako](https://github.com/vakokako) fixed tests when compiling with C++20. 292. [Alexander “weej” Jones](https://github.com/alexweej) fixed an example in the README. 293. [Eli Schwartz](https://github.com/eli-schwartz) added more files to the `include.zip` archive. 294. [Kevin Lu](https://github.com/kevinlul) fixed a compilation issue when typedefs with certain names were present. 295. [Trevor Hickey](https://github.com/luxe) improved the description of an example. 296. [Jef LeCompte](https://github.com/jef) updated the year in the README file. 297. [Alexandre Hamez](https://github.com/ahamez) fixed a warning. 298. [Maninderpal Badhan](https://github.com/mbadhan) fixed a typo. 299. [kevin--](https://github.com/kevin--) added a note to an example in the README file. 300. [I](https://github.com/wx257osn2) fixed a typo. 301. [Gregorio Litenstein](https://github.com/Lord-Kamina) fixed the Clang detection. 302. [Andreas Smas](https://github.com/andoma) added a Doozer badge. 303. [WanCW](https://github.com/wancw) fixed the string conversion with Clang. 304. [zhaohuaxishi](https://github.com/zhaohuaxishi) fixed a Doxygen error. 305. [emvivre](https://github.com/emvivre) removed an invalid parameter from CMake. 306. [Tobias Hermann](https://github.com/Dobiasd) fixed a link in the README file. 307. [Michael](https://github.com/traits) fixed a warning. 308. [Ryan Mulder](https://github.com/ryanjmulder) added `ensure_ascii` to the `dump` function. 309. [Muri Nicanor](https://github.com/murinicanor) fixed the `sed` discovery in the Makefile. 310. [David Avedissian](https://github.com/dgavedissian) implemented SFINAE-friendly `iterator_traits`. 311. [AQNOUCH Mohammed](https://github.com/aqnouch) fixed a typo in the README. 312. [Gareth Sylvester-Bradley](https://github.com/garethsb) added `operator/=` and `operator/` to construct JSON pointers. 313. [Michael Macnair](https://github.com/mykter) added support for afl-fuzz testing. 314. [Berkus Decker](https://github.com/berkus) fixed a typo in the README. 315. [Illia Polishchuk](https://github.com/effolkronium) improved the CMake testing. 316. [Ikko Ashimine](https://github.com/eltociear) fixed a typo. 317. [Raphael Grimm](https://github.com/barcode) added the possibility to define a custom base class. 318. [tocic](https://github.com/tocic) fixed typos in the documentation. 319. [Vertexwahn](https://github.com/Vertexwahn) added Bazel build support. 320. [Dirk Stolle](https://github.com/striezel) fixed typos in the documentation. 321. [DavidKorczynski](https://github.com/DavidKorczynski) added a CIFuzz CI GitHub action. 322. [Finkman](https://github.com/Finkman) fixed the debug pretty-printer. 323. [Florian Segginger](https://github.com/floriansegginger) bumped the years in the README. 324. [haadfida](https://github.com/haadfida) cleaned up the badges of used services. 325. [Arsen Arsenović](https://github.com/ArsenArsen) fixed a build error. 326. [theevilone45](https://github.com/theevilone45) fixed a typo in a CMake file. 327. [Sergei Trofimovich](https://github.com/trofi) fixed the custom allocator support. 328. [Joyce](https://github.com/joycebrum) fixed some security issues in the GitHub workflows. 329. [Nicolas Jakob](https://github.com/njakob) add vcpkg version badge. 330. [Tomerkm](https://github.com/Tomerkm) added tests. 331. [No.](https://github.com/tusooa) fixed the use of `get<>` calls. 332. [taro](https://github.com/tarolling) fixed a typo in the `CODEOWNERS` file. 333. [Ikko Eltociear Ashimine](https://github.com/eltociear) fixed a typo. 334. [Felix Yan](https://github.com/felixonmars) fixed a typo in the README. 335. [HO-COOH](https://github.com/HO-COOH) fixed a parentheses in the documentation. 336. [Ivor Wanders](https://github.com/iwanders) fixed the examples to catch exception by `const&`. 337. [miny1233](https://github.com/miny1233) fixed a parentheses in the documentation. 338. [tomalakgeretkal](https://github.com/tomalakgeretkal) fixed a compilation error. 339. [alferov](https://github.com/ALF-ONE) fixed a compilation error. 340. [Craig Scott](https://github.com/craigscott-crascit) fixed a deprecation warning in CMake. 341. [Vyacheslav Zhdanovskiy](https://github.com/ZeronSix) added macros for serialization-only types. 342. [Mathieu Westphal](https://github.com/mwestphal) fixed typos. 343. [scribam](https://github.com/scribam) fixed the MinGW workflow. 344. [Aleksei Sapitskii](https://github.com/aleksproger) added support for Apple's Swift Package Manager. 345. [Benjamin Buch](https://github.com/bebuch) fixed the installation path in CMake. 346. [Colby Haskell](https://github.com/colbychaskell) clarified the parse error message in case a file cannot be opened. 347. [Juan Carlos Arevalo Baeza](https://github.com/TheJCAB) fixed the enum conversion. 348. [alferov](https://github.com/ALF-ONE) fixed a version in the documentation. 349. [ss](https://github.com/serge-s) fixed the amalgamation call. 350. [AniketDhemare](https://github.com/AniketDhemare) fixed a version in the documentation. 351. [Philip Müller](https://github.com/philip-paul-mueller) fixed an example. 352. [Leila Shcheglova](https://github.com/LeilaShcheglova) fixed a warning in a test. 353. [Alex Prabhat Bara](https://github.com/alexprabhat99) fixed a function name in the documentation. 354. [laterlaugh](https://github.com/laterlaugh) fixed some typos. 355. [Yuanhao Jia](https://github.com/MrJia1997) fixed the GDB pretty printer. 356. [Fallen_Breath](https://github.com/Fallen-Breath) fixed an example for JSON Pointer. 357. [Nikhil Idiculla](https://github.com/tsnl) fixed some typos. 358. [Griffin Myers](https://github.com/gmyers18) updated the Natvis file. 359. [thetimr](https://github.com/thetimr) fixed a typo in the documentation. 360. [Balazs Erseki](https://github.com/zerocukor287) fixed a URL in the contribution guidelines. 361. [Niccolò Iardella](https://github.com/rotolof) added `NLOHMANN_DEFINE_DERIVED_TYPE_*` macros. 362. [Borislav Stanimirov](https://github.com/iboB) allowed overriding the CMake target name. 363. [Captain Crutches](https://github.com/captaincrutches) made `iterator_proxy_value` a `std::forward_iterator`. 364. [Fredrik Sandhei](https://github.com/fsandhei) added type conversion support for `std::optional`. 365. [jh96](https://github.com/jordan-hoang) added exceptions when `nullptr` is passed to `parse`. 366. [Stuart Gorman](https://github.com/StuartGorman) fixed number parsing when `EINTR` set in `errno`. 367. [Dylan Baker](https://github.com/dcbaker) generated a pkg-config file that follows the pkg-config conventions. 368. [Tianyi Chen](https://github.com/TianyiChen) optimized the binary `get_number` implementation. 369. [peng-wang-cn](https://github.com/peng-wang-cn) added type conversion support for multidimensional arrays. 370. [Einars Netlis-Galejs](https://github.com/EinarsNG) added `ONLY_SERIALIZE` for `NLOHMANN_DEFINE_DERIVED_TYPE_*` macros. 371. [Marcel](https://github.com/mering) removed `alwayslink=True` Bazel flag. 372. [Harinath Nampally](https://github.com/hnampally) added diagnostic positions to exceptions. 373. [Nissim Armand Ben Danan](https://github.com/NissimBendanan) fixed `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` with an empty JSON instance. 374. [Michael Valladolid](https://github.com/codenut) added support for BSON uint64 serialization/deserialization. 375. [Nikhil](https://github.com/nikhilreddydev) updated the documentation. 376. [Nebojša Cvetković](https://github.com/nebkat) added support for BJDATA optimized binary array type. 377. [Sushrut Shringarputale](https://github.com/sushshring) added support for diagnostic positions. 378. [kimci86](https://github.com/kimci86) templated to `NLOHMANN_DEFINE_TYPE` macros to also support `ordered_json`. 379. [Richard Topchii](https://github.com/richardtop) added support for VisionOS in the Swift Package Manager. 380. [Robert Chisholm](https://github.com/Robadob) fixed a typo. 381. [zjyhjqs](https://github.com/zjyhjqs) added CPack support. 382. [bitFiedler](https://github.com/bitFiedler) made GDB pretty printer work with Python 3.8. 383. [Gianfranco Costamagna](https://github.com/LocutusOfBorg) fixed a compiler warning. 384. [risa2000](https://github.com/risa2000) made `std::filesystem::path` conversion to/from UTF-8 encoded string explicit. Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone. ## Used third-party tools The library itself consists of a single header file licensed under the MIT license. However, it is built, tested, documented, and whatnot using a lot of third-party tools and services. Thanks a lot! - [**amalgamate.py - Amalgamate C source and header files**](https://github.com/edlund/amalgamate) to create a single header file - [**American fuzzy lop**](https://lcamtuf.coredump.cx/afl/) for fuzz testing - [**AppVeyor**](https://www.appveyor.com) for [continuous integration](https://ci.appveyor.com/project/nlohmann/json) on Windows - [**Artistic Style**](http://astyle.sourceforge.net) for automatic source code indentation - [**Clang**](https://clang.llvm.org) for compilation with code sanitizers - [**CMake**](https://cmake.org) for build automation - [**Codacy**](https://www.codacy.com) for further [code analysis](https://app.codacy.com/gh/nlohmann/json/dashboard) - [**Coveralls**](https://coveralls.io) to measure [code coverage](https://coveralls.io/github/nlohmann/json) - [**Coverity Scan**](https://scan.coverity.com) for [static analysis](https://scan.coverity.com/projects/nlohmann-json) - [**cppcheck**](http://cppcheck.sourceforge.net) for static analysis - [**doctest**](https://github.com/onqtam/doctest) for the unit tests - [**GitHub Changelog Generator**](https://github.com/skywinder/github-changelog-generator) to generate the [ChangeLog](https://github.com/nlohmann/json/blob/develop/ChangeLog.md) - [**Google Benchmark**](https://github.com/google/benchmark) to implement the benchmarks - [**Hedley**](https://nemequ.github.io/hedley/) to avoid re-inventing several compiler-agnostic feature macros - [**lcov**](https://github.com/linux-test-project/lcov) to process coverage information and create an HTML view - [**libFuzzer**](https://llvm.org/docs/LibFuzzer.html) to implement fuzz testing for OSS-Fuzz - [**Material for MkDocs**](https://squidfunk.github.io/mkdocs-material/) for the style of the documentation site - [**MkDocs**](https://www.mkdocs.org) for the documentation site - [**OSS-Fuzz**](https://github.com/google/oss-fuzz) for continuous fuzz testing of the library ([project repository](https://github.com/google/oss-fuzz/tree/master/projects/json)) - [**Probot**](https://probot.github.io) for automating maintainer tasks such as closing stale issues, requesting missing information, or detecting toxic comments. - [**Valgrind**](https://valgrind.org) to check for correct memory management ## Notes ### Character encoding The library supports **Unicode input** as follows: - Only **UTF-8** encoded input is supported which is the default encoding for JSON according to [RFC 8259](https://tools.ietf.org/html/rfc8259.html#section-8.1). - `std::u16string` and `std::u32string` can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers. - Other encodings such as Latin-1 or ISO 8859-1 are **not** supported and will yield parse or serialization errors. - [Unicode noncharacters](https://www.unicode.org/faq/private_use.html#nonchar1) will not be replaced by the library. - Invalid surrogates (e.g., incomplete pairs such as `\uDEAD`) will yield parse errors. - The strings stored in the library are UTF-8 encoded. When using the default string type (`std::string`), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs. - When you store strings with different encodings in the library, calling [`dump()`](https://json.nlohmann.me/api/basic_json/dump/) may throw an exception unless `json::error_handler_t::replace` or `json::error_handler_t::ignore` are used as error handlers. - To store wide strings (e.g., `std::wstring`), you need to convert them to a UTF-8 encoded `std::string` before, see [an example](https://json.nlohmann.me/home/faq/#wide-string-handling). ### Comments in JSON This library does not support comments by default. It does so for three reasons: 1. Comments are not part of the [JSON specification](https://tools.ietf.org/html/rfc8259). You may argue that `//` or `/* */` are allowed in JavaScript, but JSON is not JavaScript. 2. This was not an oversight: Douglas Crockford [wrote on this](https://plus.google.com/118095276221607585885/posts/RK8qyGVaGSr) in May 2012: > I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't. > > Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser. 3. It is dangerous for interoperability if some libraries would add comment support while others don't. Please check [The Harmful Consequences of the Robustness Principle](https://tools.ietf.org/html/draft-iab-protocol-maintenance-01) on this. However, you can pass set parameter `ignore_comments` to true in the `parse` function to ignore `//` or `/* */` comments. Comments will then be treated as whitespace. ### Order of object keys By default, the library does not preserve the **insertion order of object elements**. This is standards-compliant, as the [JSON standard](https://tools.ietf.org/html/rfc8259.html) defines objects as "an unordered collection of zero or more name/value pairs". If you do want to preserve the insertion order, you can try the type [`nlohmann::ordered_json`](https://github.com/nlohmann/json/issues/2179). Alternatively, you can use a more sophisticated ordered map like [`tsl::ordered_map`](https://github.com/Tessil/ordered-map) ([integration](https://github.com/nlohmann/json/issues/546#issuecomment-304447518)) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map) ([integration](https://github.com/nlohmann/json/issues/485#issuecomment-333652309)). See the [**documentation on object order**](https://json.nlohmann.me/features/object_order/) for more information. ### Memory Release We checked with Valgrind and the Address Sanitizer (ASAN) that there are no memory leaks. If you find that a parsing program with this library does not release memory, please consider the following case, and it may be unrelated to this library. **Your program is compiled with glibc.** There is a tunable threshold that glibc uses to decide whether to actually return memory to the system or whether to cache it for later reuse. If in your program you make lots of small allocations and those small allocations are not a contiguous block and are presumably below the threshold, then they will not get returned to the OS. Here is a related issue [#1924](https://github.com/nlohmann/json/issues/1924). ### Further notes - The code contains numerous debug **assertions** which can be switched off by defining the preprocessor macro `NDEBUG`, see the [documentation of `assert`](https://en.cppreference.com/w/cpp/error/assert). In particular, note [`operator[]`](https://json.nlohmann.me/api/basic_json/operator%5B%5D/) implements **unchecked access** for const objects: If the given key is not present, the behavior is undefined (think of a dereferenced null pointer) and yields an [assertion failure](https://github.com/nlohmann/json/issues/289) if assertions are switched on. If you are not sure whether an element in an object exists, use checked access with the [`at()` function](https://json.nlohmann.me/api/basic_json/at/). Furthermore, you can define `JSON_ASSERT(x)` to replace calls to `assert(x)`. See the [**documentation on runtime assertions**](https://json.nlohmann.me/features/assertions/) for more information. - As the exact number type is not defined in the [JSON specification](https://tools.ietf.org/html/rfc8259.html), this library tries to choose the best fitting C++ number type automatically. As a result, the type `double` may be used to store numbers which may yield [**floating-point exceptions**](https://github.com/nlohmann/json/issues/181) in certain rare situations if floating-point exceptions have been unmasked in the calling code. These exceptions are not caused by the library and need to be fixed in the calling code, such as by re-masking the exceptions prior to calling library functions. - The code can be compiled without C++ **runtime type identification** features; that is, you can use the `-fno-rtti` compiler flag. - **Exceptions** are used widely within the library. They can, however, be switched off with either using the compiler flag `-fno-exceptions` or by defining the symbol `JSON_NOEXCEPTION`. In this case, exceptions are replaced by `abort()` calls. You can further control this behavior by defining `JSON_THROW_USER` (overriding `throw`), `JSON_TRY_USER` (overriding `try`), and `JSON_CATCH_USER` (overriding `catch`). Note that `JSON_THROW_USER` should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior. Note the explanatory [`what()`](https://en.cppreference.com/w/cpp/error/exception/what) string of exceptions is not available for MSVC if exceptions are disabled, see [#2824](https://github.com/nlohmann/json/discussions/2824). See the [**documentation of exceptions**](https://json.nlohmann.me/home/exceptions/) for more information. ## Execute unit tests To compile and run the tests, you need to execute ```shell mkdir build cd build cmake .. -DJSON_BuildTests=On cmake --build . ctest --output-on-failure ``` Note that during the `ctest` stage, several JSON test files are downloaded from an [external repository](https://github.com/nlohmann/json_test_data). If policies forbid downloading artifacts during testing, you can download the files yourself and pass the directory with the test files via `-DJSON_TestDataDirectory=path` to CMake. Then, no Internet connectivity is required. See [issue #2189](https://github.com/nlohmann/json/issues/2189) for more information. If the test suite is not found, several test suites will fail like this: ``` =============================================================================== json/tests/src/make_test_data_available.hpp:21: TEST CASE: check test suite is downloaded json/tests/src/make_test_data_available.hpp:23: FATAL ERROR: REQUIRE( utils::check_testsuite_downloaded() ) is NOT correct! values: REQUIRE( false ) logged: Test data not found in 'json/cmake-build-debug/json_test_data'. Please execute target 'download_test_data' before running this test suite. See for more information. =============================================================================== ``` In case you have downloaded the library rather than checked out the code via Git, test `cmake_fetch_content_configure` will fail. Please execute `ctest -LE git_required` to skip these tests. See [issue #2189](https://github.com/nlohmann/json/issues/2189) for more information. Some tests change the installed files and hence make the whole process not reproducible. Please execute `ctest -LE not_reproducible` to skip these tests. See [issue #2324](https://github.com/nlohmann/json/issues/2324) for more information. Furthermore, assertions must be switched off to ensure reproducible builds (see [discussion 4494](https://github.com/nlohmann/json/discussions/4494)). Note you need to call `cmake -LE "not_reproducible|git_required"` to exclude both labels. See [issue #2596](https://github.com/nlohmann/json/issues/2596) for more information. As Intel compilers use unsafe floating point optimization by default, the unit tests may fail. Use flag [`/fp:precise`](https://www.intel.com/content/www/us/en/docs/cpp-compiler/developer-guide-reference/2021-8/fp-model-fp.html) then. json-3.12.0/cmake/000077500000000000000000000000001477615276400136515ustar00rootroot00000000000000json-3.12.0/cmake/ci.cmake000066400000000000000000001161571477615276400152610ustar00rootroot00000000000000# number of parallel jobs for CTest set(N 10) ############################################################################### # Needed tools. ############################################################################### include(FindPython3) find_package(Python3 COMPONENTS Interpreter) find_program(CLANG_TOOL NAMES clang++-HEAD clang++ clang++-20 clang++-19 clang++-18 clang++-17 clang++-16 clang++-15 clang++-14 clang++-13 clang++-12 clang++-11 clang++) execute_process(COMMAND ${CLANG_TOOL} --version OUTPUT_VARIABLE CLANG_TOOL_VERSION ERROR_VARIABLE CLANG_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TOOL_VERSION "${CLANG_TOOL_VERSION}") message(STATUS "🔖 Clang ${CLANG_TOOL_VERSION} (${CLANG_TOOL})") find_program(CLANG_TIDY_TOOL NAMES clang-tidy-20 clang-tidy-19 clang-tidy-18 clang-tidy-17 clang-tidy-16 clang-tidy-15 clang-tidy-14 clang-tidy-13 clang-tidy-12 clang-tidy-11 clang-tidy) execute_process(COMMAND ${CLANG_TIDY_TOOL} --version OUTPUT_VARIABLE CLANG_TIDY_TOOL_VERSION ERROR_VARIABLE CLANG_TIDY_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TIDY_TOOL_VERSION "${CLANG_TIDY_TOOL_VERSION}") message(STATUS "🔖 Clang-Tidy ${CLANG_TIDY_TOOL_VERSION} (${CLANG_TIDY_TOOL})") message(STATUS "🔖 CMake ${CMAKE_VERSION} (${CMAKE_COMMAND})") find_program(GCC_TOOL NAMES g++-latest g++-HEAD g++ g++-15 g++-14 g++-13 g++-12 g++-11 g++-10) execute_process(COMMAND ${GCC_TOOL} --version OUTPUT_VARIABLE GCC_TOOL_VERSION ERROR_VARIABLE GCC_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GCC_TOOL_VERSION "${GCC_TOOL_VERSION}") message(STATUS "🔖 GCC ${GCC_TOOL_VERSION} (${GCC_TOOL})") find_program(GCOV_TOOL NAMES gcov-HEAD gcov gcov-15 gcov-14 gcov-13 gcov-12 gcov-11 gcov-10) execute_process(COMMAND ${GCOV_TOOL} --version OUTPUT_VARIABLE GCOV_TOOL_VERSION ERROR_VARIABLE GCOV_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GCOV_TOOL_VERSION "${GCOV_TOOL_VERSION}") message(STATUS "🔖 GCOV ${GCOV_TOOL_VERSION} (${GCOV_TOOL})") find_program(GIT_TOOL NAMES git) execute_process(COMMAND ${GIT_TOOL} --version OUTPUT_VARIABLE GIT_TOOL_VERSION ERROR_VARIABLE GIT_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GIT_TOOL_VERSION "${GIT_TOOL_VERSION}") message(STATUS "🔖 Git ${GIT_TOOL_VERSION} (${GIT_TOOL})") find_program(IWYU_TOOL NAMES include-what-you-use iwyu) execute_process(COMMAND ${IWYU_TOOL} --version OUTPUT_VARIABLE IWYU_TOOL_VERSION ERROR_VARIABLE IWYU_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" IWYU_TOOL_VERSION "${IWYU_TOOL_VERSION}") message(STATUS "🔖 include-what-you-use ${IWYU_TOOL_VERSION} (${IWYU_TOOL})") find_program(INFER_TOOL NAMES infer) execute_process(COMMAND ${INFER_TOOL} --version OUTPUT_VARIABLE INFER_TOOL_VERSION ERROR_VARIABLE INFER_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" INFER_TOOL_VERSION "${INFER_TOOL_VERSION}") message(STATUS "🔖 Infer ${INFER_TOOL_VERSION} (${INFER_TOOL})") find_program(LCOV_TOOL NAMES lcov) execute_process(COMMAND ${LCOV_TOOL} --version OUTPUT_VARIABLE LCOV_TOOL_VERSION ERROR_VARIABLE LCOV_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" LCOV_TOOL_VERSION "${LCOV_TOOL_VERSION}") message(STATUS "🔖 LCOV ${LCOV_TOOL_VERSION} (${LCOV_TOOL})") find_program(NINJA_TOOL NAMES ninja) execute_process(COMMAND ${NINJA_TOOL} --version OUTPUT_VARIABLE NINJA_TOOL_VERSION ERROR_VARIABLE NINJA_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" NINJA_TOOL_VERSION "${NINJA_TOOL_VERSION}") message(STATUS "🔖 Ninja ${NINJA_TOOL_VERSION} (${NINJA_TOOL})") find_program(OCLINT_TOOL NAMES oclint-json-compilation-database) find_program(OCLINT_VERSION_TOOL NAMES oclint) execute_process(COMMAND ${OCLINT_VERSION_TOOL} --version OUTPUT_VARIABLE OCLINT_TOOL_VERSION ERROR_VARIABLE OCLINT_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" OCLINT_TOOL_VERSION "${OCLINT_TOOL_VERSION}") message(STATUS "🔖 OCLint ${OCLINT_TOOL_VERSION} (${OCLINT_TOOL})") find_program(VALGRIND_TOOL NAMES valgrind) execute_process(COMMAND ${VALGRIND_TOOL} --version OUTPUT_VARIABLE VALGRIND_TOOL_VERSION ERROR_VARIABLE VALGRIND_TOOL_VERSION) string(REGEX MATCH "[0-9]+(\\.[0-9]+)+" VALGRIND_TOOL_VERSION "${VALGRIND_TOOL_VERSION}") message(STATUS "🔖 Valgrind ${VALGRIND_TOOL_VERSION} (${VALGRIND_TOOL})") find_program(GENHTML_TOOL NAMES genhtml) find_program(PLOG_CONVERTER_TOOL NAMES plog-converter) find_program(PVS_STUDIO_ANALYZER_TOOL NAMES pvs-studio-analyzer) find_program(SCAN_BUILD_TOOL NAMES scan-build-15 scan-build-14 scan-build-13 scan-build-12 scan-build-11 scan-build) # the individual source files file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp) ############################################################################### # Thorough check with recent compilers ############################################################################### include(clang_flags) include(gcc_flags) add_custom_target(ci_test_gcc COMMAND CXX=${GCC_TOOL} CXXFLAGS="${GCC_CXXFLAGS}" ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_gcc COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_gcc COMMAND cd ${PROJECT_BINARY_DIR}/build_gcc && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with GCC using maximal warning flags" ) add_custom_target(ci_test_clang COMMAND CXX=${CLANG_TOOL} CXXFLAGS="${CLANG_CXXFLAGS}" ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang COMMAND cd ${PROJECT_BINARY_DIR}/build_clang && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with Clang using maximal warning flags" ) ############################################################################### # Different C++ Standards. ############################################################################### foreach(CXX_STANDARD 11 14 17 20 23 26) add_custom_target(ci_test_gcc_cxx${CXX_STANDARD} COMMAND CXX=${GCC_TOOL} CXXFLAGS="${GCC_CXXFLAGS}" ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestStandards=${CXX_STANDARD} -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} COMMAND cd ${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with GCC for C++${CXX_STANDARD}" ) add_custom_target(ci_test_clang_cxx${CXX_STANDARD} COMMAND CXX=${CLANG_TOOL} CXXFLAGS="${CLANG_CXXFLAGS}" ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestStandards=${CXX_STANDARD} -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with Clang for C++${CXX_STANDARD}" ) add_custom_target(ci_test_clang_libcxx_cxx${CXX_STANDARD} COMMAND CXX=${CLANG_TOOL} CXXFLAGS="${CLANG_CXXFLAGS}" ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestStandards=${CXX_STANDARD} -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++abi" -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with Clang for C++${CXX_STANDARD} (libc++)" ) endforeach() ############################################################################### # Disable exceptions. ############################################################################### add_custom_target(ci_test_noexceptions COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DCMAKE_CXX_FLAGS=-DJSON_NOEXCEPTION -DDOCTEST_TEST_FILTER=--no-throw -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noexceptions COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noexceptions COMMAND cd ${PROJECT_BINARY_DIR}/build_noexceptions && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with exceptions switched off" ) ############################################################################### # Disable implicit conversions. ############################################################################### add_custom_target(ci_test_noimplicitconversions COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_ImplicitConversions=OFF -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noimplicitconversions COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noimplicitconversions COMMAND cd ${PROJECT_BINARY_DIR}/build_noimplicitconversions && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with implicit conversions switched off" ) ############################################################################### # Enable improved diagnostics. ############################################################################### add_custom_target(ci_test_diagnostics COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_Diagnostics=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_diagnostics COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_diagnostics COMMAND cd ${PROJECT_BINARY_DIR}/build_diagnostics && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with improved diagnostics enabled" ) ############################################################################### # Enable diagnostic positions support. ############################################################################### add_custom_target(ci_test_diagnostic_positions COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_Diagnostic_Positions=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_diagnostic_positions COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_diagnostic_positions COMMAND cd ${PROJECT_BINARY_DIR}/build_diagnostic_positions && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with diagnostic positions enabled" ) ############################################################################### # Enable legacy discarded value comparison. ############################################################################### add_custom_target(ci_test_legacycomparison COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_LegacyDiscardedValueComparison=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_legacycomparison COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_legacycomparison COMMAND cd ${PROJECT_BINARY_DIR}/build_legacycomparison && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with legacy discarded value comparison enabled" ) ############################################################################### # Disable global UDLs. ############################################################################### add_custom_target(ci_test_noglobaludls COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_GlobalUDLs=OFF -DCMAKE_CXX_FLAGS=-DJSON_TEST_NO_GLOBAL_UDLS -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noglobaludls COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noglobaludls COMMAND cd ${PROJECT_BINARY_DIR}/build_noglobaludls && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with global UDLs disabled" ) ############################################################################### # Coverage. ############################################################################### add_custom_target(ci_test_coverage COMMAND CXX=g++ ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CXX_FLAGS="--coverage;-fprofile-arcs;-ftest-coverage" -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_coverage COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMAND CXX=g++ ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CXX_FLAGS="-m32;--coverage;-fprofile-arcs;-ftest-coverage" -DJSON_BuildTests=ON -DJSON_32bitTest=ONLY -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_coverage32 COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage32 COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage32 && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMAND ${LCOV_TOOL} --directory . --capture --output-file json.info --rc branch_coverage=1 --rc geninfo_unexecuted_blocks=1 --ignore-errors mismatch --ignore-errors unused COMMAND ${LCOV_TOOL} -e json.info ${SRC_FILES} --output-file json.info.filtered --rc branch_coverage=1 --ignore-errors unused COMMAND ${CMAKE_SOURCE_DIR}/tests/thirdparty/imapdl/filterbr.py json.info.filtered > json.info.filtered.noexcept COMMAND genhtml --title "JSON for Modern C++" --legend --demangle-cpp --output-directory html --show-details --branch-coverage json.info.filtered.noexcept COMMENT "Compile and test with coverage" ) ############################################################################### # Sanitizers. ############################################################################### set(CLANG_CXX_FLAGS_SANITIZER "-g -O1 -fsanitize=address -fsanitize=undefined -fsanitize=integer -fsanitize=nullability -fno-omit-frame-pointer -fno-sanitize-recover=all -fno-sanitize=unsigned-integer-overflow -fno-sanitize=unsigned-shift-base") add_custom_target(ci_test_clang_sanitizer COMMAND CXX=${CLANG_TOOL} CXXFLAGS=${CLANG_CXX_FLAGS_SANITIZER} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_sanitizer COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_sanitizer COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_sanitizer && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test with sanitizers" ) ############################################################################### # Check if header is amalgamated and sources are properly indented. ############################################################################### file(GLOB_RECURSE INDENT_FILES ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp ${PROJECT_SOURCE_DIR}/tests/src/*.cpp ${PROJECT_SOURCE_DIR}/tests/src/*.hpp ${PROJECT_SOURCE_DIR}/tests/benchmarks/src/benchmarks.cpp ${PROJECT_SOURCE_DIR}/docs/examples/*.cpp ) set(include_dir ${PROJECT_SOURCE_DIR}/single_include/nlohmann) set(tool_dir ${PROJECT_SOURCE_DIR}/tools/amalgamate) add_custom_target(ci_test_amalgamation COMMAND rm -fr ${include_dir}/json.hpp~ ${include_dir}/json_fwd.hpp~ COMMAND cp ${include_dir}/json.hpp ${include_dir}/json.hpp~ COMMAND cp ${include_dir}/json_fwd.hpp ${include_dir}/json_fwd.hpp~ COMMAND ${Python3_EXECUTABLE} -mvenv venv_astyle COMMAND venv_astyle/bin/pip3 --quiet install -r ${CMAKE_SOURCE_DIR}/tools/astyle/requirements.txt COMMAND venv_astyle/bin/astyle --version COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json.json -s . COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json_fwd.json -s . COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=none ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp COMMAND diff ${include_dir}/json.hpp~ ${include_dir}/json.hpp COMMAND diff ${include_dir}/json_fwd.hpp~ ${include_dir}/json_fwd.hpp COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=orig ${INDENT_FILES} COMMAND for FILE in `find . -name '*.orig'`\; do false \; done WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Check amalgamation and indentation" ) ############################################################################### # Build and test using the amalgamated header ############################################################################### add_custom_target(ci_test_single_header COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_MultipleHeaders=OFF -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_single_header COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_single_header COMMAND cd ${PROJECT_BINARY_DIR}/build_single_header && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Compile and test single-header version" ) ############################################################################### # Valgrind. ############################################################################### add_custom_target(ci_test_valgrind COMMAND CXX=${GCC_TOOL} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_Valgrind=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_valgrind COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_valgrind COMMAND cd ${PROJECT_BINARY_DIR}/build_valgrind && ${CMAKE_CTEST_COMMAND} -L valgrind --parallel ${N} --output-on-failure COMMENT "Compile and test with Valgrind" ) ############################################################################### # Check code with Clang Static Analyzer. ############################################################################### set(CLANG_ANALYZER_CHECKS "fuchsia.HandleChecker,nullability.NullableDereferenced,nullability.NullablePassedToNonnull,nullability.NullableReturnedFromNonnull,optin.cplusplus.UninitializedObject,optin.cplusplus.VirtualCall,optin.mpi.MPI-Checker,optin.osx.OSObjectCStyleCast,optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,optin.osx.cocoa.localizability.NonLocalizedStringChecker,optin.performance.GCDAntipattern,optin.performance.Padding,optin.portability.UnixAPI,security.FloatLoopCounter,security.insecureAPI.DeprecatedOrUnsafeBufferHandling,security.insecureAPI.bcmp,security.insecureAPI.bcopy,security.insecureAPI.bzero,security.insecureAPI.rand,security.insecureAPI.strcpy,valist.CopyToSelf,valist.Uninitialized,valist.Unterminated,webkit.NoUncountedMemberChecker,webkit.RefCntblBaseVirtualDtor,core.CallAndMessage,core.DivideZero,core.NonNullParamChecker,core.NullDereference,core.StackAddressEscape,core.UndefinedBinaryOperatorResult,core.VLASize,core.uninitialized.ArraySubscript,core.uninitialized.Assign,core.uninitialized.Branch,core.uninitialized.CapturedBlockVariable,core.uninitialized.UndefReturn,cplusplus.InnerPointer,cplusplus.Move,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,cplusplus.PlacementNew,cplusplus.PureVirtualCall,deadcode.DeadStores,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull,osx.API,osx.MIG,osx.NumberObjectConversion,osx.OSObjectRetainCount,osx.ObjCProperty,osx.SecKeychainAPI,osx.cocoa.AtSync,osx.cocoa.AutoreleaseWrite,osx.cocoa.ClassRelease,osx.cocoa.Dealloc,osx.cocoa.IncompatibleMethodTypes,osx.cocoa.Loops,osx.cocoa.MissingSuperCall,osx.cocoa.NSAutoreleasePool,osx.cocoa.NSError,osx.cocoa.NilArg,osx.cocoa.NonNilReturnValue,osx.cocoa.ObjCGenerics,osx.cocoa.RetainCount,osx.cocoa.RunLoopAutoreleaseLeak,osx.cocoa.SelfInit,osx.cocoa.SuperDealloc,osx.cocoa.UnusedIvars,osx.cocoa.VariadicMethodTypes,osx.coreFoundation.CFError,osx.coreFoundation.CFNumber,osx.coreFoundation.CFRetainRelease,osx.coreFoundation.containers.OutOfBounds,osx.coreFoundation.containers.PointerSizedValues,security.insecureAPI.UncheckedReturn,security.insecureAPI.decodeValueOfObjCType,security.insecureAPI.getpw,security.insecureAPI.gets,security.insecureAPI.mkstemp,security.insecureAPI.mktemp,security.insecureAPI.vfork,unix.API,unix.Malloc,unix.MallocSizeof,unix.MismatchedDeallocator,unix.Vfork,unix.cstring.BadSizeArg,unix.cstring.NullArg") add_custom_target(ci_clang_analyze COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_analyze COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_analyze && ${SCAN_BUILD_TOOL} -enable-checker ${CLANG_ANALYZER_CHECKS} --use-c++=${CLANG_TOOL} -analyze-headers -o ${PROJECT_BINARY_DIR}/report ninja COMMENT "Check code with Clang Analyzer" ) ############################################################################### # Check code with Cppcheck. ############################################################################### add_custom_target(ci_cppcheck COMMAND mkdir -p cppcheck COMMAND clang -dM -E -x c++ -std=c++11 ${CMAKE_SOURCE_DIR}/include/nlohmann/thirdparty/hedley/hedley.hpp > default_defines.hpp 2> /dev/null COMMAND ${Python3_EXECUTABLE} -mvenv venv_cppcheck COMMAND venv_cppcheck/bin/pip3 --quiet install -r ${CMAKE_SOURCE_DIR}/cmake/requirements/requirements-cppcheck.txt COMMAND venv_cppcheck/bin/cppcheck --enable=warning --check-level=exhaustive --inline-suppr --inconclusive --force --std=c++11 ${PROJECT_SOURCE_DIR}/include/nlohmann/json.hpp -I ${CMAKE_SOURCE_DIR}/include --error-exitcode=1 --relative-paths=${PROJECT_SOURCE_DIR} -j ${N} --include=default_defines.hpp --cppcheck-build-dir=cppcheck --check-level=exhaustive -UJSON_CATCH_USER -UJSON_TRY_USER -UJSON_ASSERT -UJSON_INTERNAL_CATCH -UJSON_THROW -DJSON_HAS_CPP_11 -UJSON_HAS_CPP_14 -UJSON_HAS_CPP_17 -UJSON_HAS_CPP_20 -UJSON_HAS_THREE_WAY_COMPARISON COMMENT "Check code with Cppcheck" ) ############################################################################### # Check code with cpplint. ############################################################################### add_custom_target(ci_cpplint COMMAND ${Python3_EXECUTABLE} -mvenv venv_cpplint COMMAND venv_cpplint/bin/pip3 --quiet install -r ${CMAKE_SOURCE_DIR}/cmake/requirements/requirements-cpplint.txt COMMAND venv_cpplint/bin/cpplint --filter=-whitespace,-legal,-runtime/references,-runtime/explicit,-runtime/indentation_namespace,-readability/casting,-readability/nolint --quiet --recursive ${SRC_FILES} COMMENT "Check code with cpplint" WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) ############################################################################### # Check code with OCLint. ############################################################################### file(COPY ${PROJECT_SOURCE_DIR}/single_include/nlohmann/json.hpp DESTINATION ${PROJECT_BINARY_DIR}/src_single) file(RENAME ${PROJECT_BINARY_DIR}/src_single/json.hpp ${PROJECT_BINARY_DIR}/src_single/all.cpp) file(APPEND "${PROJECT_BINARY_DIR}/src_single/all.cpp" "\n\nint main()\n{}\n") add_executable(single_all ${PROJECT_BINARY_DIR}/src_single/all.cpp) target_compile_features(single_all PRIVATE cxx_std_11) add_custom_target(ci_oclint COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DJSON_BuildTests=OFF -DJSON_CI=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_oclint COMMAND ${OCLINT_TOOL} -i ${PROJECT_BINARY_DIR}/build_oclint/src_single/all.cpp -p ${PROJECT_BINARY_DIR}/build_oclint -- -report-type html -enable-global-analysis --max-priority-1=0 --max-priority-2=1000 --max-priority-3=2000 --disable-rule=MultipleUnaryOperator --disable-rule=DoubleNegative --disable-rule=ShortVariableName --disable-rule=GotoStatement --disable-rule=LongLine -o ${PROJECT_BINARY_DIR}/build_oclint/oclint_report.html COMMENT "Check code with OCLint" ) ############################################################################### # Check code with Clang-Tidy. ############################################################################### add_custom_target(ci_clang_tidy COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY=${CLANG_TIDY_TOOL} -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_tidy COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_tidy COMMENT "Check code with Clang-Tidy" ) ############################################################################### # Check code with PVS-Studio Analyzer . ############################################################################### add_custom_target(ci_pvs_studio COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DJSON_BuildTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_pvs_studio COMMAND cd ${PROJECT_BINARY_DIR}/build_pvs_studio && ${PVS_STUDIO_ANALYZER_TOOL} analyze -j 10 COMMAND cd ${PROJECT_BINARY_DIR}/build_pvs_studio && ${PLOG_CONVERTER_TOOL} -a'GA:1,2;64:1;CS' -t fullhtml PVS-Studio.log -o pvs COMMENT "Check code with PVS Studio" ) ############################################################################### # Check code with Infer static analyzer. ############################################################################### add_custom_target(ci_infer COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_infer COMMAND cd ${PROJECT_BINARY_DIR}/build_infer && ${INFER_TOOL} compile -- ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${PROJECT_SOURCE_DIR} -DJSON_BuildTests=ON COMMAND cd ${PROJECT_BINARY_DIR}/build_infer && ${INFER_TOOL} run -- make COMMENT "Check code with Infer" ) ############################################################################### # Run test suite with previously downloaded test data. ############################################################################### add_custom_target(ci_offline_testdata COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data && ${GIT_TOOL} clone -c advice.detachedHead=false --branch v3.1.0 https://github.com/nlohmann/json_test_data.git --quiet --depth 1 COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestDataDirectory=${PROJECT_BINARY_DIR}/build_offline_testdata/test_data/json_test_data -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_offline_testdata COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_offline_testdata COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure COMMENT "Check code with previously downloaded test data" ) ############################################################################### # Run test suite when project was not checked out from Git ############################################################################### add_custom_target(ci_non_git_tests COMMAND git config --global --add safe.directory ${PROJECT_SOURCE_DIR} COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_non_git_tests/sources COMMAND cd ${PROJECT_SOURCE_DIR} && for FILE in `${GIT_TOOL} ls-tree --name-only HEAD`\; do cp -r $$FILE ${PROJECT_BINARY_DIR}/build_non_git_tests/sources \; done COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_BINARY_DIR}/build_non_git_tests/sources -B${PROJECT_BINARY_DIR}/build_non_git_tests COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_non_git_tests COMMAND cd ${PROJECT_BINARY_DIR}/build_non_git_tests && ${CMAKE_CTEST_COMMAND} --parallel ${N} -LE git_required --output-on-failure COMMENT "Check code when project was not checked out from Git" ) ############################################################################### # Run test suite and exclude tests that change installed files ############################################################################### add_custom_target(ci_reproducible_tests COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_reproducible_tests COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_reproducible_tests COMMAND cd ${PROJECT_BINARY_DIR}/build_reproducible_tests && ${CMAKE_CTEST_COMMAND} --parallel ${N} -LE not_reproducible --output-on-failure COMMENT "Check code and exclude tests that change installed files" ) ############################################################################### # Check if every header in the include folder includes sufficient headers to # be compiled individually. ############################################################################### set(iwyu_path_and_options ${IWYU_TOOL} -Xiwyu --max_line_length=300) foreach(SRC_FILE ${SRC_FILES}) # get relative path of the header file file(RELATIVE_PATH RELATIVE_SRC_FILE "${PROJECT_SOURCE_DIR}/include/nlohmann" "${SRC_FILE}") # replace slashes and strip suffix string(REPLACE "/" "_" RELATIVE_SRC_FILE "${RELATIVE_SRC_FILE}") string(REPLACE ".hpp" "" RELATIVE_SRC_FILE "${RELATIVE_SRC_FILE}") # create code file file(WRITE "${PROJECT_BINARY_DIR}/src_single/${RELATIVE_SRC_FILE}.cpp" "#include \"${SRC_FILE}\" // IWYU pragma: keep\n\nint main()\n{}\n") # create executable add_executable(single_${RELATIVE_SRC_FILE} EXCLUDE_FROM_ALL ${PROJECT_BINARY_DIR}/src_single/${RELATIVE_SRC_FILE}.cpp) target_include_directories(single_${RELATIVE_SRC_FILE} PRIVATE ${PROJECT_SOURCE_DIR}/include) target_compile_features(single_${RELATIVE_SRC_FILE} PRIVATE cxx_std_11) set_property(TARGET single_${RELATIVE_SRC_FILE} PROPERTY CXX_INCLUDE_WHAT_YOU_USE "${iwyu_path_and_options}") # remember binary for ci_single_binaries target list(APPEND single_binaries single_${RELATIVE_SRC_FILE}) endforeach() add_custom_target(ci_single_binaries DEPENDS ${single_binaries} COMMENT "Check if headers are self-contained" ) ############################################################################### # Benchmarks ############################################################################### add_custom_target(ci_benchmarks COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release -GNinja -S${PROJECT_SOURCE_DIR}/benchmarks -B${PROJECT_BINARY_DIR}/build_benchmarks COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_benchmarks --target json_benchmarks COMMAND cd ${PROJECT_BINARY_DIR}/build_benchmarks && ./json_benchmarks COMMENT "Run benchmarks" ) ############################################################################### # CMake flags ############################################################################### # we test the project with different CMake versions: # - CMake 3.5 (the earliest supported) # - CMake 3.31.6 (the latest 3.x release) # - CMake 4.0.0 (the latest release) function(ci_get_cmake version var) set(${var} ${PROJECT_BINARY_DIR}/cmake-${version}/bin/cmake) add_custom_command( OUTPUT ${${var}} COMMAND wget -nc https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}.tar.gz COMMAND tar xfz cmake-${version}.tar.gz COMMAND rm cmake-${version}.tar.gz # -DCMAKE_POLICY_VERSION_MINIMUM=3.5 required to compile older CMake versions with CMake 4.0.0 COMMAND cmake -S cmake-${version} -B cmake-${version} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 COMMAND cmake --build cmake-${version} --parallel 10 WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMENT "Download CMake ${version}" ) set(${var} ${${var}} PARENT_SCOPE) endfunction() ci_get_cmake(3.5.0 CMAKE_3_5_0_BINARY) ci_get_cmake(3.31.6 CMAKE_3_31_6_BINARY) ci_get_cmake(4.0.0 CMAKE_4_0_0_BINARY) # the tests require CMake 3.13 or later, so they are excluded for CMake 3.5.0 set(JSON_CMAKE_FLAGS_3_5_0 JSON_Diagnostics JSON_Diagnostic_Positions JSON_GlobalUDLs JSON_ImplicitConversions JSON_DisableEnumSerialization JSON_LegacyDiscardedValueComparison JSON_Install JSON_MultipleHeaders JSON_SystemInclude JSON_Valgrind) set(JSON_CMAKE_FLAGS_3_31_6 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_31_6}) set(JSON_CMAKE_FLAGS_4_0_0 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_5_0}) function(ci_add_cmake_flags_targets flag min_version) string(TOLOWER "ci_cmake_flag_${flag}" flag_target) string(REPLACE . _ min_version_var ${min_version}) set(cmake_binary ${CMAKE_${min_version_var}_BINARY}) add_custom_target(${flag_target}_${min_version}_2 COMMENT "Check CMake flag ${flag} (CMake ${CMAKE_VERSION})" COMMAND ${CMAKE_COMMAND} -Werror=dev -D${flag}=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_${flag_target} ) add_custom_target(${flag_target}_${min_version_var} COMMENT "Check CMake flag ${JSON_CMAKE_FLAG} (CMake ${min_version})" COMMAND mkdir -pv ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var} COMMAND cd ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var} && ${cmake_binary} -Werror=dev ${PROJECT_SOURCE_DIR} -D${flag}=ON DEPENDS ${cmake_binary} ) list(APPEND JSON_CMAKE_FLAG_TARGETS ${JSON_CMAKE_FLAG_TARGET} ${flag_target}_${min_version_var}) list(APPEND JSON_CMAKE_FLAG_BUILD_DIRS ${PROJECT_BINARY_DIR}/build_${flag_target} ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var}) set(JSON_CMAKE_FLAG_TARGETS ${JSON_CMAKE_FLAG_TARGETS} PARENT_SCOPE) set(JSON_CMAKE_FLAG_BUILD_DIRS ${JSON_CMAKE_FLAG_BUILD_DIRS} PARENT_SCOPE) endfunction() foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_5_0}) ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.5.0) endforeach() foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_31_6}) ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.31.6) endforeach() foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_4_0_0}) ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 4.0.0) endforeach() add_custom_target(ci_cmake_flags DEPENDS ${JSON_CMAKE_FLAG_TARGETS} COMMENT "Check CMake flags" ) ############################################################################### # Use more installed compilers. ############################################################################### foreach(COMPILER g++-4.8 g++-4.9 g++-5 g++-6 g++-7 g++-8 g++-9 g++-10 g++-11 clang++-3.5 clang++-3.6 clang++-3.7 clang++-3.8 clang++-3.9 clang++-4.0 clang++-5.0 clang++-6.0 clang++-7 clang++-8 clang++-9 clang++-10 clang++-11 clang++-12 clang++-13 clang++-14 clang++-15 clang++-16 clang++-17 clang++-18 clang++-19 clang++-20) find_program(COMPILER_TOOL NAMES ${COMPILER}) if (COMPILER_TOOL) unset(ADDITIONAL_FLAGS) add_custom_target(ci_test_compiler_${COMPILER} COMMAND CXX=${COMPILER} ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} ${ADDITIONAL_FLAGS} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} COMMAND cd ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --exclude-regex "test-unicode" --output-on-failure COMMENT "Compile and test with ${COMPILER}" ) endif() unset(COMPILER_TOOL CACHE) endforeach() add_custom_target(ci_test_compiler_default COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_compiler_default ${ADDITIONAL_FLAGS} COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_compiler_default --parallel ${N} COMMAND cd ${PROJECT_BINARY_DIR}/build_compiler_default && ${CMAKE_CTEST_COMMAND} --parallel ${N} --exclude-regex "test-unicode" -LE git_required --output-on-failure COMMENT "Compile and test with default C++ compiler" ) ############################################################################### # CUDA example ############################################################################### add_custom_target(ci_cuda_example COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CUDA_HOST_COMPILER=g++-8 -S${PROJECT_SOURCE_DIR}/tests/cuda_example -B${PROJECT_BINARY_DIR}/build_cuda_example COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_cuda_example ) ############################################################################### # Intel C++ Compiler ############################################################################### add_custom_target(ci_icpc COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DJSON_BuildTests=ON -DJSON_FastTests=ON -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_icpc COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_icpc COMMAND cd ${PROJECT_BINARY_DIR}/build_icpc && ${CMAKE_CTEST_COMMAND} --parallel ${N} --exclude-regex "test-unicode" --output-on-failure COMMENT "Compile and test with ICPC" ) ############################################################################### # REUSE ############################################################################### add_custom_target(ci_reuse_compliance COMMAND ${Python3_EXECUTABLE} -mvenv venv_reuse COMMAND venv_reuse/bin/pip3 --quiet install -r ${PROJECT_SOURCE_DIR}/cmake/requirements/requirements-reuse.txt COMMAND venv_reuse/bin/reuse --root ${PROJECT_SOURCE_DIR} lint COMMENT "Check REUSE specification compliance" ) ############################################################################### # test documentation ############################################################################### add_custom_target(ci_test_examples COMMAND make CXX="${GCC_TOOL}" check_output_portable -j8 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs COMMENT "Check that all examples compile and create the desired output" ) add_custom_target(ci_test_build_documentation COMMAND ${Python3_EXECUTABLE} -mvenv venv COMMAND venv/bin/pip3 --quiet install -r requirements.txt COMMAND make build WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs/mkdocs COMMENT "Build the documentation" ) ############################################################################### # Clean up all generated files. ############################################################################### add_custom_target(ci_clean COMMAND rm -fr ${PROJECT_BINARY_DIR}/build_* cmake-3.5.0-Darwin64 ${JSON_CMAKE_FLAG_BUILD_DIRS} ${single_binaries} COMMENT "Clean generated directories" ) json-3.12.0/cmake/clang_flags.cmake000066400000000000000000000014311477615276400171120ustar00rootroot00000000000000# Ignored Clang warnings: # -Wno-c++98-compat The library targets C++11. # -Wno-c++98-compat-pedantic The library targets C++11. # -Wno-deprecated-declarations The library contains annotations for deprecated functions. # -Wno-extra-semi-stmt The library uses assert which triggers this warning. # -Wno-padded We do not care about padding warnings. # -Wno-covered-switch-default All switches list all cases and a default case. # -Wno-unsafe-buffer-usage Otherwise Doctest would not compile. set(CLANG_CXXFLAGS -Werror -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-deprecated-declarations -Wno-extra-semi-stmt -Wno-padded -Wno-covered-switch-default -Wno-unsafe-buffer-usage ) json-3.12.0/cmake/config.cmake.in000066400000000000000000000013061477615276400165250ustar00rootroot00000000000000include(FindPackageHandleStandardArgs) set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@) include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake") if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND (NOT @PROJECT_NAME@_FIND_VERSION OR @PROJECT_NAME@_FIND_VERSION VERSION_LESS 3.2.0)) add_library(@NLOHMANN_JSON_TARGET_NAME@ INTERFACE IMPORTED) set_target_properties(@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@ ) endif() endif() json-3.12.0/cmake/download_test_data.cmake000066400000000000000000000061611477615276400205160ustar00rootroot00000000000000set(JSON_TEST_DATA_URL https://github.com/nlohmann/json_test_data) set(JSON_TEST_DATA_VERSION 3.1.0) # if variable is set, use test data from given directory rather than downloading them if(JSON_TestDataDirectory) message(STATUS "Using test data in ${JSON_TestDataDirectory}.") add_custom_target(download_test_data) file(WRITE ${CMAKE_BINARY_DIR}/include/test_data.hpp "#define TEST_DATA_DIRECTORY \"${JSON_TestDataDirectory}\"\n") else() find_package(Git) # target to download test data add_custom_target(download_test_data COMMAND test -d json_test_data || ${GIT_EXECUTABLE} clone -c advice.detachedHead=false --branch v${JSON_TEST_DATA_VERSION} ${JSON_TEST_DATA_URL}.git --quiet --depth 1 COMMENT "Downloading test data from ${JSON_TEST_DATA_URL} (v${JSON_TEST_DATA_VERSION})" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) # create a header with the path to the downloaded test data file(WRITE ${CMAKE_BINARY_DIR}/include/test_data.hpp "#define TEST_DATA_DIRECTORY \"${CMAKE_BINARY_DIR}/json_test_data\"\n") endif() # determine the operating system (for debug and support purposes) find_program(UNAME_COMMAND uname) find_program(VER_COMMAND ver) find_program(LSB_RELEASE_COMMAND lsb_release) find_program(SW_VERS_COMMAND sw_vers) set(OS_VERSION_STRINGS "${CMAKE_SYSTEM}") if (VER_COMMAND) execute_process(COMMAND ${VER_COMMAND} OUTPUT_VARIABLE VER_COMMAND_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) set(OS_VERSION_STRINGS "${OS_VERSION_STRINGS}; ${VER_COMMAND_RESULT}") endif() if (SW_VERS_COMMAND) execute_process(COMMAND ${SW_VERS_COMMAND} OUTPUT_VARIABLE SW_VERS_COMMAND_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) string(REGEX REPLACE "[ ]*\n" "; " SW_VERS_COMMAND_RESULT "${SW_VERS_COMMAND_RESULT}") set(OS_VERSION_STRINGS "${OS_VERSION_STRINGS}; ${SW_VERS_COMMAND_RESULT}") endif() if (LSB_RELEASE_COMMAND) execute_process(COMMAND ${LSB_RELEASE_COMMAND} -a OUTPUT_VARIABLE LSB_RELEASE_COMMAND_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) string(REGEX REPLACE "[ ]*\n" "; " LSB_RELEASE_COMMAND_RESULT "${LSB_RELEASE_COMMAND_RESULT}") set(OS_VERSION_STRINGS "${OS_VERSION_STRINGS}; ${LSB_RELEASE_COMMAND_RESULT}") endif() if (UNAME_COMMAND) execute_process(COMMAND ${UNAME_COMMAND} -a OUTPUT_VARIABLE UNAME_COMMAND_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET) set(OS_VERSION_STRINGS "${OS_VERSION_STRINGS}; ${UNAME_COMMAND_RESULT}") endif() message(STATUS "Operating system: ${OS_VERSION_STRINGS}") # determine the compiler (for debug and support purposes) if (MSVC) execute_process(COMMAND ${CMAKE_CXX_COMPILER} OUTPUT_VARIABLE CXX_VERSION_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_VARIABLE CXX_VERSION_RESULT ERROR_STRIP_TRAILING_WHITESPACE) set(CXX_VERSION_RESULT "${CXX_VERSION_RESULT}; MSVC_VERSION=${MSVC_VERSION}; MSVC_TOOLSET_VERSION=${MSVC_TOOLSET_VERSION}") else() execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE CXX_VERSION_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) endif() string(REGEX REPLACE "[ ]*\n" "; " CXX_VERSION_RESULT "${CXX_VERSION_RESULT}") message(STATUS "Compiler: ${CXX_VERSION_RESULT}") json-3.12.0/cmake/gcc_flags.cmake000066400000000000000000000211601477615276400165630ustar00rootroot00000000000000# Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags: # Ignored GCC warnings: # -Wno-abi-tag We do not care about ABI tags. # -Wno-aggregate-return The library uses aggregate returns. # -Wno-long-long The library uses the long long type to interface with system functions. # -Wno-namespaces The library uses namespaces. # -Wno-nrvo Doctest triggers this warning. # -Wno-padded We do not care about padding warnings. # -Wno-system-headers We do not care about warnings in system headers. # -Wno-templates The library uses templates. set(GCC_CXXFLAGS -pedantic -Werror --all-warnings --extra-warnings -W -WNSObject-attribute -Wno-abi-tag -Waddress -Waddress-of-packed-member -Wno-aggregate-return -Waggressive-loop-optimizations -Waligned-new=all -Wall -Walloc-size -Walloc-zero -Walloca -Wanalyzer-allocation-size -Wanalyzer-deref-before-check -Wanalyzer-double-fclose -Wanalyzer-double-free -Wanalyzer-exposure-through-output-file -Wanalyzer-exposure-through-uninit-copy -Wanalyzer-fd-access-mode-mismatch -Wanalyzer-fd-double-close -Wanalyzer-fd-leak -Wanalyzer-fd-phase-mismatch -Wanalyzer-fd-type-mismatch -Wanalyzer-fd-use-after-close -Wanalyzer-fd-use-without-check -Wanalyzer-file-leak -Wanalyzer-free-of-non-heap -Wanalyzer-imprecise-fp-arithmetic -Wanalyzer-infinite-loop -Wanalyzer-infinite-recursion -Wanalyzer-jump-through-null -Wanalyzer-malloc-leak -Wanalyzer-mismatching-deallocation -Wanalyzer-null-argument -Wanalyzer-null-dereference -Wanalyzer-out-of-bounds -Wanalyzer-overlapping-buffers -Wanalyzer-possible-null-argument -Wanalyzer-possible-null-dereference -Wanalyzer-putenv-of-auto-var -Wanalyzer-shift-count-negative -Wanalyzer-shift-count-overflow -Wanalyzer-stale-setjmp-buffer -Wanalyzer-symbol-too-complex -Wanalyzer-tainted-allocation-size -Wanalyzer-tainted-array-index -Wanalyzer-tainted-assertion -Wanalyzer-tainted-divisor -Wanalyzer-tainted-offset -Wanalyzer-tainted-size -Wanalyzer-too-complex -Wanalyzer-undefined-behavior-strtok -Wanalyzer-unsafe-call-within-signal-handler -Wanalyzer-use-after-free -Wanalyzer-use-of-pointer-in-stale-stack-frame -Wanalyzer-use-of-uninitialized-value -Wanalyzer-va-arg-type-mismatch -Wanalyzer-va-list-exhausted -Wanalyzer-va-list-leak -Wanalyzer-va-list-use-after-va-end -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal -Warith-conversion -Warray-bounds=2 -Warray-compare -Warray-parameter=2 -Wattribute-alias=2 -Wattribute-warning -Wattributes -Wbool-compare -Wbool-operation -Wbuiltin-declaration-mismatch -Wbuiltin-macro-redefined -Wc++0x-compat -Wc++11-compat -Wc++11-extensions -Wc++14-compat -Wc++14-extensions -Wc++17-compat -Wc++17-extensions -Wc++1z-compat -Wc++20-compat -Wc++20-extensions -Wc++23-extensions -Wc++26-extensions -Wc++2a-compat -Wcalloc-transposed-args -Wcannot-profile -Wcast-align -Wcast-align=strict -Wcast-function-type -Wcast-qual -Wcast-user-defined -Wcatch-value=3 -Wchanges-meaning -Wchar-subscripts -Wclass-conversion -Wclass-memaccess -Wclobbered -Wcomma-subscript -Wcomment -Wcomments -Wcomplain-wrong-lang -Wconditionally-supported -Wconversion -Wconversion-null -Wcoverage-invalid-line-number -Wcoverage-mismatch -Wcoverage-too-many-conditions -Wcpp -Wctad-maybe-unsupported -Wctor-dtor-privacy -Wdangling-else -Wdangling-pointer=2 -Wdangling-reference -Wdate-time -Wdelete-incomplete -Wdelete-non-virtual-dtor -Wdeprecated -Wdeprecated-copy -Wdeprecated-copy-dtor -Wdeprecated-declarations -Wdeprecated-enum-enum-conversion -Wdeprecated-enum-float-conversion -Wdisabled-optimization -Wdiv-by-zero -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Weffc++ -Welaborated-enum-base -Wempty-body -Wendif-labels -Wenum-compare -Wenum-conversion -Wexceptions -Wexpansion-to-defined -Wextra -Wextra-semi -Wflex-array-member-not-at-end -Wfloat-conversion -Wfloat-equal -Wformat -Wformat-contains-nul -Wformat -Wformat-extra-args -Wformat -Wformat-nonliteral -Wformat -Wformat-security -Wformat -Wformat-y2k -Wformat -Wformat-zero-length -Wformat-diag -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation=2 -Wformat=2 -Wframe-address -Wfree-nonheap-object -Wglobal-module -Whardened -Whsa -Wif-not-aligned -Wignored-attributes -Wignored-qualifiers -Wimplicit-fallthrough=5 -Winaccessible-base -Winfinite-recursion -Winherited-variadic-ctor -Winit-list-lifetime -Winit-self -Winline -Wint-in-bool-context -Wint-to-pointer-cast -Winterference-size -Winvalid-constexpr -Winvalid-imported-macros -Winvalid-memory-model -Winvalid-offsetof -Winvalid-pch -Winvalid-utf8 -Wliteral-suffix -Wlogical-not-parentheses -Wlogical-op -Wno-long-long -Wlto-type-mismatch -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation -Wmismatched-dealloc -Wmismatched-new-delete -Wmismatched-tags -Wmissing-attributes -Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wmissing-include-dirs -Wmissing-profile -Wmissing-requires -Wmissing-template-keyword -Wmultichar -Wmultiple-inheritance -Wmultistatement-macros -Wno-namespaces -Wnarrowing -Wnoexcept -Wnoexcept-type -Wnon-template-friend -Wnon-virtual-dtor -Wnonnull -Wnonnull-compare -Wnormalized=nfkc -Wno-nrvo -Wnull-dereference -Wodr -Wold-style-cast -Wopenacc-parallelism -Wopenmp -Wopenmp-simd -Woverflow -Woverlength-strings -Woverloaded-virtual=2 -Wpacked -Wpacked-bitfield-compat -Wpacked-not-aligned -Wno-padded -Wparentheses -Wpedantic -Wpessimizing-move -Wplacement-new=2 -Wpmf-conversions -Wpointer-arith -Wpointer-compare -Wpragmas -Wprio-ctor-dtor -Wpsabi -Wrange-loop-construct -Wredundant-decls -Wredundant-move -Wredundant-tags -Wregister -Wreorder -Wrestrict -Wreturn-local-addr -Wreturn-type -Wscalar-storage-order -Wself-move -Wsequence-point -Wshadow=compatible-local -Wshadow=global -Wshadow=local -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wshift-overflow=2 -Wsign-compare -Wsign-conversion -Wsign-promo -Wsized-deallocation -Wsizeof-array-argument -Wsizeof-array-div -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstack-protector -Wstrict-aliasing=3 -Wstrict-null-sentinel -Wstrict-overflow -Wstring-compare -Wstringop-overflow=4 -Wstringop-overread -Wstringop-truncation -Wsubobject-linkage -Wsuggest-attribute=cold -Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=malloc -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-attribute=returns_nonnull -Wsuggest-final-methods -Wsuggest-final-types -Wsuggest-override -Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum -Wswitch-outside-range -Wswitch-unreachable -Wsync-nand -Wsynth -Wno-system-headers -Wtautological-compare -Wno-templates -Wterminate -Wtrampolines -Wtrigraphs -Wtrivial-auto-var-init -Wtsan -Wtype-limits -Wundef -Wunicode -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunsafe-loop-optimizations -Wunused -Wunused-but-set-parameter -Wunused-but-set-variable -Wunused-const-variable=2 -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-macros -Wunused-parameter -Wunused-result -Wunused-value -Wunused-variable -Wuse-after-free=3 -Wuseless-cast -Wvarargs -Wvariadic-macros -Wvector-operation-performance -Wvexing-parse -Wvirtual-inheritance -Wvirtual-move-assign -Wvla -Wvla-parameter -Wvolatile -Wvolatile-register-var -Wwrite-strings -Wxor-used-as-pow -Wzero-as-null-pointer-constant -Wzero-length-bounds ) json-3.12.0/cmake/nlohmann_jsonConfigVersion.cmake.in000066400000000000000000000013051477615276400226160ustar00rootroot00000000000000# This is essentially cmake's BasicConfigVersion-SameMajorVersion.cmake.in but # without the 32/64-bit check. Since json is a header-only library, it doesn't # matter if it was built on a different platform than what it is used on (see # https://github.com/nlohmann/json/issues/1697). set(PACKAGE_VERSION "@PROJECT_VERSION@") if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() if(PACKAGE_FIND_VERSION_MAJOR STREQUAL "@PROJECT_VERSION_MAJOR@") set(PACKAGE_VERSION_COMPATIBLE TRUE) else() set(PACKAGE_VERSION_COMPATIBLE FALSE) endif() if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) set(PACKAGE_VERSION_EXACT TRUE) endif() endif() json-3.12.0/cmake/pkg-config.pc.in000066400000000000000000000002701477615276400166250ustar00rootroot00000000000000prefix=@CMAKE_INSTALL_PREFIX@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ Name: @PROJECT_NAME@ Description: JSON for Modern C++ Version: @PROJECT_VERSION@ Cflags: -I${includedir} json-3.12.0/cmake/requirements/000077500000000000000000000000001477615276400163745ustar00rootroot00000000000000json-3.12.0/cmake/requirements/requirements-cppcheck.txt000066400000000000000000000000201477615276400234260ustar00rootroot00000000000000cppcheck==1.5.0 json-3.12.0/cmake/requirements/requirements-cpplint.txt000066400000000000000000000000171477615276400233250ustar00rootroot00000000000000cpplint==2.0.1 json-3.12.0/cmake/requirements/requirements-reuse.txt000066400000000000000000000000151477615276400227750ustar00rootroot00000000000000reuse==5.0.2 json-3.12.0/cmake/scripts/000077500000000000000000000000001477615276400153405ustar00rootroot00000000000000json-3.12.0/cmake/scripts/gen_bazel_build_file.cmake000066400000000000000000000010371477615276400224470ustar00rootroot00000000000000# generate Bazel BUILD file set(PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/../..") set(BUILD_FILE "${PROJECT_ROOT}/BUILD.bazel") file(GLOB_RECURSE HEADERS LIST_DIRECTORIES false RELATIVE "${PROJECT_ROOT}" "include/*.hpp") file(WRITE "${BUILD_FILE}" [=[ cc_library( name = "json", hdrs = [ ]=]) foreach(header ${HEADERS}) file(APPEND "${BUILD_FILE}" " \"${header}\",\n") endforeach() file(APPEND "${BUILD_FILE}" [=[ ], includes = ["include"], visibility = ["//visibility:public"], alwayslink = True, ) ]=]) json-3.12.0/cmake/test.cmake000066400000000000000000000243441477615276400156410ustar00rootroot00000000000000set(_json_test_cmake_list_file ${CMAKE_CURRENT_LIST_FILE}) ############################################################################# # download test data ############################################################################# include(download_test_data) # test fixture to download test data add_test(NAME "download_test_data" COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target download_test_data ) set_tests_properties(download_test_data PROPERTIES FIXTURES_SETUP TEST_DATA) if(JSON_Valgrind) find_program(CMAKE_MEMORYCHECK_COMMAND valgrind) message(STATUS "Executing test suite with Valgrind (${CMAKE_MEMORYCHECK_COMMAND})") set(memcheck_command "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS} --error-exitcode=1 --leak-check=full") separate_arguments(memcheck_command) endif() ############################################################################# # detect standard support ############################################################################# # C++11 is the minimum required set(compiler_supports_cpp_11 TRUE) foreach(feature ${CMAKE_CXX_COMPILE_FEATURES}) if (${feature} STREQUAL cxx_std_14) set(compiler_supports_cpp_14 TRUE) elseif (${feature} STREQUAL cxx_std_17) set(compiler_supports_cpp_17 TRUE) elseif (${feature} STREQUAL cxx_std_20) set(compiler_supports_cpp_20 TRUE) elseif (${feature} STREQUAL cxx_std_23) set(compiler_supports_cpp_23 TRUE) endif() endforeach() ############################################################################# # test functions ############################################################################# ############################################################################# # json_test_set_test_options( # all| # [CXX_STANDARDS all|...] # [COMPILE_DEFINITIONS ...] # [COMPILE_FEATURES ...] # [COMPILE_OPTIONS ...] # [LINK_LIBRARIES ...] # [LINK_OPTIONS ...] # [TEST_PROPERTIES ...]) # # Supply test- and standard-specific build settings and/or test properties. # Specify multiple tests using a list e.g., "test-foo;test-bar". # # Must be called BEFORE the test is created. ############################################################################# function(json_test_set_test_options tests) cmake_parse_arguments(args "" "" "CXX_STANDARDS;COMPILE_DEFINITIONS;COMPILE_FEATURES;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS;TEST_PROPERTIES" ${ARGN}) if(NOT args_CXX_STANDARDS) set(args_CXX_STANDARDS "all") endif() foreach(test ${tests}) if("${test}" STREQUAL "all") set(test "") endif() foreach(cxx_standard ${args_CXX_STANDARDS}) if("${cxx_standard}" STREQUAL "all") if("${test}" STREQUAL "") message(FATAL_ERROR "Not supported. Change defaults in: ${_json_test_cmake_list_file}") endif() set(test_interface _json_test_interface_${test}) else() set(test_interface _json_test_interface_${test}_cpp_${cxx_standard}) endif() if(NOT TARGET ${test_interface}) add_library(${test_interface} INTERFACE) endif() target_compile_definitions(${test_interface} INTERFACE ${args_COMPILE_DEFINITIONS}) target_compile_features(${test_interface} INTERFACE ${args_COMPILE_FEATURES}) target_compile_options(${test_interface} INTERFACE ${args_COMPILE_OPTIONS}) target_link_libraries (${test_interface} INTERFACE ${args_LINK_LIBRARIES}) target_link_options(${test_interface} INTERFACE ${args_LINK_OPTIONS}) #set_target_properties(${test_interface} PROPERTIES JSON_TEST_PROPERTIES "${args_TEST_PROPERTIES}") set_property(DIRECTORY PROPERTY ${test_interface}_TEST_PROPERTIES "${args_TEST_PROPERTIES}" ) endforeach() endforeach() endfunction() # for internal use by _json_test_add_test() function(_json_test_apply_test_properties test_target properties_target) #get_target_property(test_properties ${properties_target} JSON_TEST_PROPERTIES) get_property(test_properties DIRECTORY PROPERTY ${properties_target}_TEST_PROPERTIES) if(test_properties) set_tests_properties(${test_target} PROPERTIES ${test_properties}) endif() endfunction() # for internal use by json_test_add_test_for() function(_json_test_add_test test_name file main cxx_standard) set(test_target ${test_name}_cpp${cxx_standard}) if(TARGET ${test_target}) message(FATAL_ERROR "Target ${test_target} has already been added.") endif() add_executable(${test_target} ${file}) target_link_libraries(${test_target} PRIVATE ${main}) # set and require C++ standard set_target_properties(${test_target} PROPERTIES CXX_STANDARD ${cxx_standard} CXX_STANDARD_REQUIRED ON ) # apply standard-specific build settings if(TARGET _json_test_interface__cpp_${cxx_standard}) target_link_libraries(${test_target} PRIVATE _json_test_interface__cpp_${cxx_standard}) endif() # apply test-specific build settings if(TARGET _json_test_interface_${test_name}) target_link_libraries(${test_target} PRIVATE _json_test_interface_${test_name}) endif() # apply test- and standard-specific build settings if(TARGET _json_test_interface_${test_name}_cpp_${cxx_standard}) target_link_libraries(${test_target} PRIVATE _json_test_interface_${test_name}_cpp_${cxx_standard} ) endif() if (JSON_FastTests) add_test(NAME ${test_target} COMMAND ${test_target} ${DOCTEST_TEST_FILTER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) else() add_test(NAME ${test_target} COMMAND ${test_target} ${DOCTEST_TEST_FILTER} --no-skip WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) endif() set_tests_properties(${test_target} PROPERTIES LABELS "all" FIXTURES_REQUIRED TEST_DATA) # apply standard-specific test properties if(TARGET _json_test_interface__cpp_${cxx_standard}) _json_test_apply_test_properties(${test_target} _json_test_interface__cpp_${cxx_standard}) endif() # apply test-specific test properties if(TARGET _json_test_interface_${test_name}) _json_test_apply_test_properties(${test_target} _json_test_interface_${test_name}) endif() # apply test- and standard-specific test properties if(TARGET _json_test_interface_${test_name}_cpp_${cxx_standard}) _json_test_apply_test_properties(${test_target} _json_test_interface_${test_name}_cpp_${cxx_standard} ) endif() if(JSON_Valgrind) add_test(NAME ${test_target}_valgrind COMMAND ${memcheck_command} $ ${DOCTEST_TEST_FILTER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) set_tests_properties(${test_target}_valgrind PROPERTIES LABELS "valgrind" FIXTURES_REQUIRED TEST_DATA ) endif() endfunction() ############################################################################# # json_test_add_test_for( # # [NAME ] # MAIN
# [CXX_STANDARDS ...] [FORCE]) # # Given a unit-foo.cpp, produces # # test-foo_cpp # # if C++ standard is supported by the compiler and the # source file contains JSON_HAS_CPP_. # Use NAME to override the filename-derived test name. # Use FORCE to create the test regardless of the file containing # JSON_HAS_CPP_. # Test targets are linked against
. # CXX_STANDARDS defaults to "11". ############################################################################# function(json_test_add_test_for file) cmake_parse_arguments(args "FORCE" "MAIN;NAME" "CXX_STANDARDS" ${ARGN}) if("${args_MAIN}" STREQUAL "") message(FATAL_ERROR "Required argument MAIN
missing.") endif() if("${args_NAME}" STREQUAL "") get_filename_component(file_basename ${file} NAME_WE) string(REGEX REPLACE "unit-([^$]+)" "test-\\1" test_name ${file_basename}) else() set(test_name ${args_NAME}) if(NOT test_name MATCHES "test-[^$]+") message(FATAL_ERROR "Test name must start with 'test-'.") endif() endif() if("${args_CXX_STANDARDS}" STREQUAL "") set(args_CXX_STANDARDS 11) endif() file(READ ${file} file_content) foreach(cxx_standard ${args_CXX_STANDARDS}) if(NOT compiler_supports_cpp_${cxx_standard}) continue() endif() # add unconditionally if C++11 (default) or forced if(NOT ("${cxx_standard}" STREQUAL 11 OR args_FORCE)) string(FIND "${file_content}" JSON_HAS_CPP_${cxx_standard} has_cpp_found) if(${has_cpp_found} EQUAL -1) continue() endif() endif() _json_test_add_test(${test_name} ${file} ${args_MAIN} ${cxx_standard}) endforeach() endfunction() ############################################################################# # json_test_should_build_32bit_test( # ) # # Check if the 32bit unit test should be built based on the value of # and store the result in the variables and # . ############################################################################# function(json_test_should_build_32bit_test build_32bit_var build_32bit_only_var input) set(${build_32bit_only_var} OFF PARENT_SCOPE) string(TOUPPER "${input}" ${build_32bit_var}) if("${${build_32bit_var}}" STREQUAL AUTO) # check if compiler is targeting 32bit by default include(CheckTypeSize) check_type_size("size_t" sizeof_size_t LANGUAGE CXX) if(${sizeof_size_t} AND ${sizeof_size_t} EQUAL 4) message(STATUS "Auto-enabling 32bit unit test.") set(${build_32bit_var} ON) else() set(${build_32bit_var} OFF) endif() elseif("${${build_32bit_var}}" STREQUAL ONLY) set(${build_32bit_only_var} ON PARENT_SCOPE) endif() set(${build_32bit_var} "${${build_32bit_var}}" PARENT_SCOPE) endfunction() json-3.12.0/docs/000077500000000000000000000000001477615276400135215ustar00rootroot00000000000000json-3.12.0/docs/Makefile000066400000000000000000000030441477615276400151620ustar00rootroot00000000000000SRCDIR = ../single_include all: create_output ########################################################################## # example files ########################################################################## # where are the example cpp files EXAMPLES = $(wildcard mkdocs/docs/examples/*.cpp) cxx_standard = $(lastword c++11 $(filter c++%, $(subst ., ,$1))) # create output from a stand-alone example file %.output: %.cpp @echo "standard $(call cxx_standard $(<:.cpp=))" $(MAKE) $(<:.cpp=) \ CPPFLAGS="-I $(SRCDIR) -DJSON_USE_GLOBAL_UDLS=0" \ CXXFLAGS="-std=$(call cxx_standard,$(<:.cpp=)) -Wno-deprecated-declarations" ./$(<:.cpp=) > $@ rm $(<:.cpp=) # compare created output with current output of the example files %.test: %.cpp $(MAKE) $(<:.cpp=) \ CPPFLAGS="-I $(SRCDIR) -DJSON_USE_GLOBAL_UDLS=0" \ CXXFLAGS="-std=$(call cxx_standard,$(<:.cpp=)) -Wno-deprecated-declarations" ./$(<:.cpp=) > $@ diff $@ $(<:.cpp=.output) rm $(<:.cpp=) $@ # create output from all stand-alone example files create_output: $(EXAMPLES:.cpp=.output) # check output of all stand-alone example files check_output: $(EXAMPLES:.cpp=.test) # check output of all stand-alone example files (exclude files with platform-dependent output.) # This target is used in the CI (ci_test_documentation). check_output_portable: $(filter-out mkdocs/docs/examples/meta.test mkdocs/docs/examples/max_size.test mkdocs/docs/examples/std_hash.test mkdocs/docs/examples/basic_json__CompatibleType.test,$(EXAMPLES:.cpp=.test)) clean: rm -fr $(EXAMPLES:.cpp=) $(MAKE) clean -C docset json-3.12.0/docs/README.md000066400000000000000000000014341477615276400150020ustar00rootroot00000000000000# Documentation ## Generate documentation Note on documentation: The source files contain links to the online documentation at https://json.nlohmann.me. This URL contains the most recent documentation and should also be applicable to previous versions; documentation for deprecated functions is not removed, but marked deprecated. If you want to see the documentation for a specific tag or commit hash, you can generate it as follows (here for tag `v3.10.2`): ```shell git clone https://github.com/nlohmann/json.git cd json git checkout v3.10.2 make install_venv serve -C docs/mkdocs ``` Open URL in your browser. Replace from any URL from the source code `https://json.nlohmann.me` with `http://127.0.0.1:8000` to see the documentation for your tag or commit hash. json-3.12.0/docs/avatars.png000066400000000000000000064274051477615276400157120ustar00rootroot00000000000000PNG  IHDR2bIDATx}eUI7:OCA(Ue (pqň( (ay:wn:s{ZTW]Eί T U?* fiBan߾}޼ym#R=^'\Zk>+VtA\pAR!( ta^<_~B\p˗xx-ABv_ׄeQJٰaé:991NU^4[ ƻL?K~|;eI8fmڴ_*XJ׿s0'^Oz|@Z߹9ZyO2r~EfH_u$` ox @J`u֥><qi4m;Ժ̳>]#D1^v&:{ЁL1/IM|Mg/= 5zŒR2뮻n{^җ.[̲-[<#w}wǞ5QFH!6"ṇ߶wgi3I Cw<U/-ʰP0YG ଳG>τax\~FGG_׶mzxl4}bO8e}غuW^yϟ?_NK^UVWBxis=ԧxwwwo۶.* ^{m\F];w4 c>ϋO.)֚1v뭷qmۄwy磏>*k0?{hW^}maSBRYWRZK)RR)E]N{ӛEE]}lxx1vW,_o}c|@JIymhwgPw[9 ń:W1R*/Y__W͛w_|Ŷmvi~[>۷oK`s0vEr-Ӏ"J5SwZ|c }O4g1X2 !~7-$>V+TJ}S+tvvywce/#\s5,ޝ %@FY%"n*T) xl_[c$Ow_@#fo~[l<}`9|Ko, ҝZG};|f͚|5y[=я~t?cO<{^o׼5m_q|;/ݝR(APM6 j׳#2͕80Ybo՟u>>T4]+ ' a;<Y8lɴX'̶;vy䑔Ҟ: /\hѯe˖-\WSc^{!/|o{]>k,)%眘&."uXϲv硵\"- pT.OgQ@(|dzkS wʕ=[n8o3fZ}v\.V*X-[ !4222h !gyfE/?;8_\J#[\.}L)e6Զ8/—ԧ0Ə;΁qҞ$ɫ_|#?_"V^v;5UVc=lA0+$Iw_veO>?Յ׋O=ԅ^w8Z}+CP팍 !$l~ߤ4MkJ)!Ru{]wu饗RJկfٙ3gBgŘ5㩟?XnlwG)uaxg̙3'?]( ~7o^t)<8kZb_V*ry^\B,XO[4Bkkž8ӟi`Pہ=K! z6mW^ywPJh)ozӛ~_xK,YjՅ^Vs0#o^, !ґ~W]umۅB!\z饯ykr\*o/~~ի9i@qc]Qvn,6`vHtG;-I֨e/pd!eM09¥c(^Z {w|| .tsϽ꫿/˿ ~w۶=qr;NeYu]7sO|z7K?<<믿%/yI&yfSFXyٟ\϶g D^Mj'hRNO_BUI8tqZ|aJ> /phhcWq?K/}|!/~JoY!$W:3_\.W,Mc/9zo}sm_~ ,8Ö-[t'x⪫hd3՞dßR.ɥg;_/Hccxw7@#+HO77?OtA]vB 2g? <ǯ~j\f͝wx/ ;[ouGuԊ+^0 ~ORrڗ+a2>яr-guB3LRy9?w1/~}{RJJ9222::-vm||+_#l߾_-[Fs̋0?Jh_/~SO=?q<묳!lcE{֭CviRN;Futt|3 .|O]n]7>M>h4_Wva׋R[T~ӟ^uUz_,Kk} ',X=B/)Bo~3Bhƌ)~/{V\yꩧ"r׿k[o=#z;c=8.xE1k^'?O{1!!`t ϟ?B|+_5k믿K.994uЇ>dz衇~򓟼?.]Yr 6}ի^8?ŋ_WGQ=vZA~$IJzj8묳Zֹ{! ?8~>{ gϞ|Gfcҡ;o=7w㮻z衇8>/u[~}J}/ڲ[oo|;֙dV鶾馛?Gm_wu'pBR9묳8KRJ@/O#klzmCsHQ_0\t׽u)//'?IС:g;)]w7T*j'?<|_җ+8SB{~}o|s܆_R_e aR>~1 QR}+_Jv؇?ISVޅ yevꩧ~[n׿>3o_Wbk^z~G.gqB誫S3p'Hݻ+>sD-dv' K05(H)=J__h4<0ܴi!T*MâE.袻{ժU '1;4'~B{ڵkoe˖]r%G p'㷿~ag͚v߿9cяN۷o߲e˙g׿3H [ip%dҷf!tI'e~se>_p:H7ޭ,_p)nk͛cK.7P$oy[ґ6l;\z)gҥGq\pᇧPJSI$I~_moCU҄Aﺮ xL8's?z^'6?JQw^veBoo}`JLy=[o__UVܬ0 +e60o޼:*—38s6\tEK.Z?]t4%Ne2~_|ksNww9sUW'?9#.]6j;vlڴiÆ `Ӌ/x:%@]s5k֬hRT-Zs}^|;!y{8xǡnhw+ }me׼f} ~ܬ?~bw]m4[oOҗ4=Nko}k}+>!n}{rAqzJ|;߹{җN[(WZWAxzV 0{ٳg޲}{SN7o[b(,뙏/ 6\uU瞛#I/G?*g?[_2O97K,!p 7nLj{heTz1/}y˖-fqWյk׶Z|3\r\`Ax⾾>۶Ν;zGy$׾]w]ww>x}oWW׾@JeaұO?rGyٳmۖJ;~dd'|׋G빣\7?O<nsw; |x嗧Yϼg} j?wm'Ir饗Ξ=[k],_yO?tZKUVַ500pWtIƎ;hmyiTQJ-Zonƻkw{_WO}Sx-[:͝;wŊiC=8O~BISO=ӷoߞd:::<3θ馛RHO>WU{|+i n+ӀPLd`.m_/ڱ7ٚsMB]1ྛ*lY&iDϘvV3f͚Yf?P'|rƌQk֬)W]uUڶ맞z*͏??o;4>GuȕW^yGҷ-:k֬X,Z}'%޵k ghړ~K`^R(t2w? #Ԑ2R9Tc8\}j_<~ބ<O?ݶ<0ɤvxxxpp|+^w5y֭[oC9OֹJʕ+/T!T(o/<Ν{oOC!.c[Vj۷3?OO #MV^}衇5i@zRܯhZ/Bhw:3?O}[nկ~ݝnT9-z'()gᨣ۶m=ܓ&{2U:,Kx˖-_וRW]u"=R_}{կ(C=t衇5iz>~^h_y_Rٳg^z3s9_'qr|뭷o1E<xbP,<ַv[!|Cd2w߃>1Ny o|o6W^yI'FA /`>яNK/ _9.xhk:x߽f͚/}K'pիmhѢ~'xbKfToooZ=}}衇7 T0#iwE?kݸqN:[VZA/,E?^Zhj3g}O?/%wqgqdnEMh=tKK. Z}O3<]z׵^{7}?GGGSHu Yz֭[,X׾V)_~GONݹ4^0F>ϥh,kZ|ɳfJ6lx^\K*⦛nڶm[^^d%\RVw or-IJ?SiGyDk}yo|ΛoKir(xz׻?x!eY7pƸP(UJ3P*CBQE>{}yի^_s'>Zvg"~Tbv3Mk4:餓/kILTK/f9p5פ逸1Nq$]x@ϓ8yRs6"~+_9SRo~1O_~g}Z͛[Bh=H>444-J G=#otA=ܓ=w'F5J)]w==vwYcϙ3'Emisw?;v'c=/s=_SO=C=D)-\pB賟,cIe8J%ׯiH#PocǎT;Cf}ӟ>w opg7|G>}siO~N1co}[ItM{G&9÷l2=@Y_?z̚1Oky{fΜG?BtA)zzV^恐Jd2哓+WL)!f}k_'>q'c?Ξ=NJO}FWWgO|!ttGj5I۶:ítR]L|!Č39З(!˗/i{a؎;gue2;v>>`:4Zc=Wo{<2(wWZ~ߞ=XjroZX/J3YvmJtmذ?)ƸsܹӾ۶m|L 'Xxq F)mszR{W}ׯG oH];!$4(;+WLt(j*^(E?^|/8U+r|W_j3gL{|'''SnܓN:)=c%KRZhwwQG1~ꩧ8Lnj{#Lkm~^9'?^z3H~aP\N!zK$%]|ɳgn4?{)!5)ev ')o:#Lc޼yiȔ}}^V)u9{H. c~4x|HX[0ifyI#T8 rJf0\oߎRk3T=B&W|[rǜmdžgd,ͦд0%B$\Ev}G$\'QmQј+IŒWEqvr+_()'8{9-R( Ŵka;ԘKcmÖ2aaJQI-$JE&S5#qjLĖb%T-bcKQ"WXAdK,)JIb9v0CBel`e6Kf569&ac GkEQl6Ova+%Bq{Ži2n-lJ\EcQԲmHeW#cًsi fZ %C! X!VS~6ڌS\5<3adbw@oROV7q1G1BJ`;Kma JK iq! (k$ϒZ{J{]vi"J02 ֑FuPlQ`i`P6Ni07Y|岯2L+*x9%qMp,Q)(oD"H 0xq?RfR58&Q$Df+88Zeo];璯_6 ) ( :0CD!5:Ej6XpƩ7v0s1p#&zmo )|pW2=[W# dN^8OE0'ਙzSq9å RFɔvb0P}9$Q2HIT,b\q16QpiC؄#BbRvYe)P!`j$ :zSH7T [JhĜIY ڥ3KM )H3m8 zEQQR;Mwtl!d# ۮH|C.s2}aM>JCl4('}&2!!㥢6SD0Q'GXS n؎d0e_.9aTGRyD,*@KY.$Cih#mZti߼܃s*۔I)x= n+>O}튫3e>qBԈٴr٠ & LD! bPӡI0]t+ I_b1KwKB6Y#3uji%3Q4Zۈ㓍B޳QL} 鹎yGud#Is]L)jp vH1)qaTkJ%1h7=FvPln)1J4UϡOOo*N|׎DrKrmVˈ2m92ly&'V3 |p:=9 f}q%6oe*펟X*Ds6I?ϕr R1Ɛ*iР: cͩC`*."v3$)"f@asj2LzF1ms(3G BX-zpZgTL`nD:ƚZi;L* 9$H\UoWDNi1RBԃ8֙ #ZUvjr@l+vΝSm[k5)O]ͬxg9VҢcc ZP(zX֎Ja—R1_Sd/څ58kALݏ 7:P|F g1)#P>BTœL&1 91y"I*:=LnrCJ__?zȾG>ؽszˈTo:J,w{<1x$v'-n|O 'h׫\:oq:slg]>o[)vJR8ĹiO~Sa*:b> bȅ\qSJ`pH#J|vEB ic8RG U0?h ɩ1m09̣NM`GSЖy\ΕJZAEBQ8#DRDJ񸝳k[-ׂ)HpE p\B3D^HoMD=5[Zx1"Ub猞j+k[G8NߥB&kaM mC֖vg)t&&4.MۄI)UZ$) *w@1 *()jܫɸUvj.I OJ7ClHUuhrG۷r~ULV&s~Assf3fY*,|Dx% xN*uPwmnHu k,+u*L|+t~- sV:OeH@Jkl9]K,ͯ>)F- 6 |Z4Hq}Bfg*(#1e "Mj7hTj"!gm=iT؋ӊf|b X7 u7MDQ 28;p$bYXv6C,Zhɭ\?z֢7=aL,7* Yq0?sЃRژr9BOCYv{)@w fS JE )xD7@' BI/b`{˖'[2sqW`FQm'G:),bh3F\(-(9c?*v8o5CLa]uFآaCH֖ \>-CcR)wu|<%Gm7 )LIH컩O4M+ `j7Jcl"g h\ĵPzEZP (H Yv:6c.@ж > LgK]\ZcWl;q,KS^13ƒԨsRgO9|@iYJql cNC8;Ԑ}*&=V@n`gHFۑ0`7 +4nQ\0yxg)XU"zBA-1w OxȭӏݣdR(vp ml#׮T)e#&酞F9cN7zbmβLŏtAI:s`Ö5;UJKLn(e03UyH iiPQSʅW  BDW!*]]?|hX 4Wfڔcr-/P27 ATL6a! kJkECRx5N* M mz37xtpKG (Tw/ޫP5[mXtowdjHԬ^%t?:R4DjI< 0!JHmcҪ7Q-ZɄ쬮9$*i?<+[2uv[9FbƼZkkd]]>::j6g7ۧg e=cbI "4^c[\9v6媊BcZ῾ .K!xJ2r>;`iR"FN ʤ\# %` 8〝LS8- &$ `=0 Xf( 2"H1iC12%%k9eBF:b*Qjai* {ZKBX1͚-lc=8XEVUuKY*&jh9K Ng%D3,3@֋Ϙ!ePQq( gOUw!G#Lk-D+N2̺U57V F}P%y`4)tIwKQPh ,~~n.% x)Wu[ׇm^?0T.c:-6XҲ{/~sI+S1N\@F&; cLJQRKӓ q8b&< w߳|!'Z}7%T|PNPseh$XL`*74g@Z %1w 'lE2m *B@ђ@ cZzSJJ%P{i@T ,VJ1 ŮDSkbcxR *X b0Fm g6Tc1a;2#&߿O'~8e-,kqߌڶi(T +%P)a4&adU,*LD…Xp0 V8;Ss)&n`=iDA(?U0R-m1C-D-(aLuG"@An4gir?S "5U)qg7pfCz5PUh)'Z$Y[:lv-l/Z[t-8z_=frط-'5VP '*zːJ2s;z3imQ-.:VDYЗ82W;'޽옧nzԮv3E sTP#( QRdtb² Pжb1X09U,ͦ 8@__m;6IIL8 *hHy LW0ijURzF#a#P{\x/yL#pPM|3HAL+c/†s@&;À7lF0X vbĭ7~gߣ Vʝ̉{:YhO.[]6/2Ϸܲe3-K]Խc#e˩YljeUhꨫ'ydJlY(l/ЅA;I}fOܓd~weKW.p%*jqhB"6`Y/M`"hB14j)6)"<ʼnJTL(x<m],6dkL5dFᶄ<#-H6ٸchU@)@0-L̐&X>@ 3l {#s 1W}\l)Q<̹v>2c`J*Zq4^籰\ j!d VTm6GTsYfMdVBcռ,:.mSU (zBтEL|,.9_e\ZT̩fL#]KD% 51&g DɆB<}N\.z,:W?oޡ߁ f=giU\]C/hA⹞M&vݾ[sxݹ}X\|rZoO FX؛,f1{FqV[-{X%qyj}3{p}%;@nJh Ak@x '43xɬtLT!`*j1T"|)4.£ERAUHR‘mr^,:2V2CDyx_!JlTOvZ0'X.u* MPHFnuzPAj8er0n?cbR Q;V\XZ!7WTEEqqm2B"t(Ѯ !Rb&2\oh؃KkBEӊ8tTiGeXf)Ips{k汛IBU^N Dmh])~$~0頨$T3qdj+zB٪teO|޴3w`۴w3H#Ee[䵦r[ڣ|cVgxRcl'3;g4FimC[w!V[Vl5vv~ȸ QgkcE.wV#k*:. 5IPi\7B&`|%0rS8S,u*%&a2=Se,4mp˂\KOLk$.t&ƒb4AA)x!'_omO,Y 4IS}CFQj#EPFm4۷](IxXDHҘg9 6JaآC^d XS4D(I" q?1@ӟMvP2.UR bK]p~'ݾqxPIZWdkX!>!DX6" Q"LH1NBG)Tr%P8,p(R>H6r 4.z ;̲U[9 ;r#۲NvR.c3xYW#{IȘHa7.ܵkMeal5j*u;È&&y?0qƱ0=_;ؓ7{)n JG'C[Lnx,Qxu #`}HipS"[5tSHRv l:8ZA.JAx)s&-.9\Ő۰2RFRe!0#tS3N -lrI2 5@43Z oX[)j m8j b; i%D1!HֹEP)qlǣv^#Z9m@Sq%G9u=+𬛗"`~AB"@SiՐJM8XOD4ޏND֭9GۆtDnWo 4vN{nC8Nd5*cTl1i΅!b=h?ԐjԱgTA)E Mlء6OtPp(G~sa}Ey,N&c; Io7G Dۉ!ʾUx<v= q2oF7oyh%?9Q^ϷKȆZvsa-0;HQ pEO-` $F2LH ):Ma<Z vM'AJ`:uoe ʌc goI)|¸Ty ))J:@PMYYdpm10=p$@9dyT굈j7 +?0 )<I,ttbq -Tm[NP Zcef,߬$D@&,*%Z ܟmcL&,<ZBlt8.?}% smrԶ\MN6sK7 ',zA5B׀#m Cp̆Xh<'v⇂DHMyIY=ZC Nٺ[[Y{7]tlŢ-j1PLFmX,LKɡzn(T%\,uتV'wM|Q(D儸xm0 o<6}UrKD;LS2rD8X[Y(|*#!q5A~{"Z֡$4:xa,L ) MS=]H[v;1 @Y,Ud  YHˤB0%ĆL(  @Kf7Յ{($I0r}/ ]jjTe[3]Xa[6s%-t̜iժ Eu$yB@= a8Cg ')^c¥պ6/M ?P =av߰r%nxg\GPngHn  ؐ(EAa ʄWCIS $Z긘 pnӂNJbBZT#4;nq s4[ZՉ .CGDJq\SUᘃZ P)PEPR#U.4pFmGAG-y1Õ%P6+wEoByǴ44 b%* a>;v 8(Ҳ!žƬ/q^Q 7,BLnd>0U=Μ=0-;(QC#ԖIi̽͛G| GWYu/ikeŎmsdy&"D#WB6lMl}ܻfloG D_O ἲ: v#Oﶩ818GCh~ێņ ޫE8Kd#rq_XehU,V1v;;:[am#í7=j % o(I-9@YHCl1Csy̎QBE5F#RDTE*m$4a6E]쎵{2/RQ0R؆#q &dQf0M"UNh ?wj5up,>4^T~h;qv< vBq\3U }6|c/YTKR~܆T^ݜģn2l83Gu!g+Pބ)9*P[Tnхt>,"w6mx⩇:C=f1O6%  #0P0v% PKR(:P ch ThR#mU"" ,2-tޡ9HlZ}Цץ%"hLpȐA,E򕈉e`]"LJ)uz~%Vqjlσ$1vχo2`}LY#D2̤,KՏ4Ʉ5u^JmC0^=q-q+WN:{.pdd=<(i]J 8Er3pEM,nhY5->$)>ʳ)5a,S(HƖ?wiթo7>oz՚82kI|_wuVYkRU"ndX4z}ȡRft (o984E']H&fC2ښtw8{XW7oYQDGtm.ڇTQ( VW;qîB:{~:'Z+dW̜sb//9{-Jljl Ho1FeQ@iQ~VƑСb bXXvFQ`(@P=0",'kXȌ'd>R/ ɐ Jt!v2 b%1(@U[30H@`^I-'qU!㵃ᜌ,wٚ2 U 1iF)')hއl)OAŷ()$$JJVy,.Lp1QgZ3ǚ*Ϫd;bs ,)IŖg8NHR1-+2gq|f]qB4sDc"( *}}ds]l 567F3 uM=^QhȢ$v%j<'ԿsYWy책@Z(ڴS5&'emDD-]HHID!"$tGK'p@ B 2 _cNu0߀ ҝ9F٦~)κJfEa08RBJ #e\f2㍓ݴ0jTǵ)Ŏ EQrA Z l-y UL$H$B7'6mYcI:V bh\=} wn IC.zN&J1zMڬ1+J +I80,m*?%@Wq#O 9zB mۦzd=$J_?4R .$Js0SZ%NeodI 'Fm7V[6+uZŌmPSVJ+zftY:/Iqhw3s1xb7)(D:stuVaO н4W6MyT3ak=26V>wo;@//9Y:oj A@eЏeX"@bA8cڠV2mqb\aE bw H*@VEڰ[ TLw;pP\֏5oG{(BVR3)0߀xya ,8̱11BZۚ*y $ZL <A;䌷~Q+,U> 1-pZRQ;jVb9pOGtևvN BŒ'@J9fd%о7R}!tnjPHDEe:b 4(h!0䠘l&NU(#.:짷މ!P+۱lIa~(/B+oRODO`$"\!AA۶ U?q* J8z}ŝaU[&klhRUIzj+DoJiK"^WowgTc'BlrlYsG?y~㷟N%ڡx$ F)v`hvR%]ʈP4EȚ(}c2cۦ#+}lV;Ҁ!>McYJƚRˊZۖ1kg 2tC5.8`6OkJ?hB[RDFQH[v\V&_RVRA ذ`0Y11W:mI4B75sncl[Z1fQVnܑumcf4ZJp >Am5Z 7[ڀn!oLꠐBI+YV>e}*lY5K-2GAJ Lo(T`Tw%DKUCh@Bo+"Q0m6!lb|d:u8M6;V`Oe:SK,pF QeSqT[ZZх,K33_BCF="R2`$2%\p$ TXWۚG Yq#m;˝~đG,KRt騅9" eYYj<7rO\ח:֠TV;mѾs{@)ws4O_cW?z@CCMR 7QR`&>9|C l36R* EZurLvrlE]lY<z̖8 mYB3F΅H!ik&,[*;0a+T+$:(]_B y|i̖CN+1E$:lISb+Srq ae\z-M"zu5BH$F*/aBͮ4Z"3B- Ta86֖qt <ŲكWwHsɤ759[V3P`0ĜZ#TjÌbmse%1KLEjŎw|~t uxDSHh!#d[z-s빭YJe?*' &D U8#4G\J(<,B,V`;Effq$}~~Uw'ˠu+e1?:glܺ&ǁR5 :1eHڎ ' Q!a@Ըp[#dt# %3*TB<5͚:zkVFQXDQݟ"vʓ," ;yD~5<630!$miʼnMM\bp5+,nʞu3'/ÛU<(d mGFr- syٙ3*Ҩ`]E ': FcC=;I5ͨǓF`m쿨wիcL5) wtoIG1r! zfK 84ty\_&X,=0ڰfs!+֮^H(tǐETٰPLk@[)ĵJKY}29Pǭژ1:0[uE7v=R1+`V\ >p*hah}u7t!*. K8K%#%h$%Ϧ, N;(`!%\ƹM %;jNfpOmnQ'l.:_4wb$ :]qhBʆWC5󍄫'P5 I"8llo Li!ep"㔫4&rx.7lI;VCߎ(m2LVXr(ALsnV ZD)Y6AadL>Ѿ1%ĠDjV)nmY>UEs n 2$A 8&d ʁ܆DUPJrJr_1h==X3&T'$ՈP5h)BFH=eTgɒӑ4|j .9㾥W=[?haXm(}ݽ=;FxIp*K# ǦUwVL&g<><;jUc]}1 CM-k'FI_9äR-*[H(RȪH-^mڪjvH@ VD_4svh(0:#/ʮ}|iSp'\J5i?ēkekŨPD8pR;#Vi>~!ҿ|K wdžE7%F3D7 ¯igO qtEKJ<Z[&"%ZZC|'>_ҕ+\"rv1Mw`X(֛ȳ%ެ, ᷡE[㩸0L"wF 2dP\*e,0`P -S*Rfΰ!'6sa)3k>#[~:[qՔp03\~魡 cjacGY?ڿsQnӳu=jl(9ǜHtJu Ӛўu([ )]tǧ#g\5{ٕgMQZxa~/823v,DKc,ĒՖ0"SHecvv۵-!F̶j%{" l: SezHTTm7m_Zp^1N6s4oZ1ĵlWMﳆaR\4cl|fn9){Vm8^SFdVaTDɖlAGmNhSܙߢB_CfA&6g9p5(uNŤ1dTq͌F?Z f"C#4UFQx;i< d5G eeDvo?05N%|RqTȱIi6Et°i:z-nޠ; g})t˒6"vMX6H'e q E?ء rvdRPZno#n@֡nm1YoO$*Zs2*"-8l0'(aB˺Ԏ$d4@KgoUfg[n[Ī`  r~"6%7R=iьc>r[eZ\eUG#֤\u#QA@A8C Ph@@ a,2F*v}l'7sf,\Pcڨmtfkͧl|Pu&G+Bk&C0 X"Ia]j# P\ -0!WAp35rdS]Z[3 Q^ACVN k2~ߧ%n&bQ\̨[i (!LSS m%CLf AHie!w4&7R}{9Ԛ#UvUEĒ 'S9N; ' N#PߖIVbEeW&\> `q;TikY-sb۷Κ57xVA_Q^vpг[gsجP'Rz 97R \vQT#U'IdzJx1 PZhhPO< `=_\@uPET/Fm:60cI2"rI;CޱvMX{.y1lGf^.i͜=7ߑU-Ϻ0He5#,bgw#zvlT2aԨ&P1TehP/YBVkcP1AYddT:CJrxl|b)TBTI iR8oe` \ %葶Y4d "h#sWњ G,](>1<݅R$,dC2 ,&;Ce `0 +mS@L`t2:DHZۥ.EƆZf2gY)%f~GܮJ:z{m,NJh@s!f܈ j[mBBΔAFpm=SDx,=ޛ9'YQ6Bαĺ2jJИq&g |('㉧`ٵZMbpM0V#)`{w"#}o[n@0"huq ۦ& 0P16gHl(OYK:j=_#xŰɗ[tl;cu?ir}wϺv MLd&,<;JRoIIqh/eα8!6qdX+h5'Zǭ֒gvbLk#6v*$qС~|=ۋ Xil*@Ri%@:V5RYYIo<(hG<%O`R 5Jݎ#czȒ?X 2̬YP ,AK [cBi Kti{sF3"ҽV$]v-]o0:8+&8aEݽ\v_+f eUF9fr{&M12 ,"Ud9˖{CFޠwԆ8$NAβ ոM*P5m+Sf ΅A2M&3!Mji(n˘H);w950LB+#7eA*TH/&j#T#QmXP )ipf3CH]6`q)ժ?tlYЙoޟp1IhchJ7b/؅\1n5ftZ7l٘\*zfcZ.ls rovmjk/ݷl<ɀH/d>G=;=4-iw6i=A5sݎ ;oVp2y>p\ePNԂfѷőm2Sv'ت:lTBPv^2cw`䋾5߶nv|q@4\jlyσGb/??}pu?Y.5)D9κJ(wqYeʥe:Bچ* =Kgs6U`3$zm@7pL*Wƴl nAarn&s3J( lr% FVF:F\u0T#͑Q\v2fmiGt*=]3z vdʙw3bmo"jɒyYD܆b5sp3xr^gI"Ⱥvw7EY[,OvFvNℴZmU0h p&;+IH" PX6[ӈP=oh4㑎qoH:~T%njFb`J8աͮYR߼A(@9 1G2'LBؖ^7!64* vd)rpܾkf*P)FO(oeU& qN9j,rNccc a~/`0 0d3m+VX]9:y/vunEs|QW:aֻhiˎh8NOKI?{&jk#k6={wrb fۮ t] 0Ж ^PPmC)diZY$ 309ZmL{4~,Wokr.. 6>|.'TO |u3n>d 7F @x"9RQWl eG[gL gpppu{˾j>z;β[?^WZwWVV7OlcaubLWT} b]#: Yg6l{VP3M{" `$s`O jL661Z[]`t{vϠ0"ڴff%݁{viXjJ_ O7eIIUvV&+A\9|lqx"E4 Ij}VH62Z~SGa3V=$Q$I4877.5ޭ{'DwP %Uh-8VB*5@ n\iWRX5RN2MdϙÍ%8@g<-{+|\)5NշzXR=ҟeY3K\]bIBYIb;]Ғ)}$Lg+sBIaĶMK}ý#^a{zǞn)BzC'uϰLX( :! {<0;r9)jpy  FREkp-xŭ367-i=@'(3#tAAbHb?`k|͞y趖KK[k+O sE2ZҤѕK-g寬 o=2p9NЄԙ@rB[vF lT*"l9Yꓭ4`d`xp%^DS"mZ[i/Q-Zv$ T\0ԇj:I3s2cފj';8T/XIiUڍ-Foi.ÚO\jsӳ*Zr㄃;4k,ĕCtТS/vxX]}s%wBu2U-Ar)a;jS;46 f Mu3kPOڅ؝7?8K& F{QZp3~[38y"Wmk_ ^jp)ud#Gg%WJl7J#}NUۨDA A\,$ D?YAQ>r=6ULt#$)[^IM>0PEꌭ^fh%m-|md,DCa2mBxA5,-k^! XvѤl V;gz%8=@]k"6@'е ])/S$1i4](k fXSzT#OnD J Z`.#Jd.+)Bd bb >ScVGGh]U7)y^[ uUJ0Rhvmݹa06uJckFVWe*:Eo#WզdPZ(VԀd UY/ ̖ׄMux:#+è-/@6_ ol BCyysPllX=c W[x1zY2Щ&rW-;Oo%s nj xVSXLC ?2J|4:5zjͪ87?ہqF5l' ' @wLO0tCCIOel-}y݂pߋ349V޺}b߁fd8[Ij}f=tVfˋ[.JT'v&ut&0pR*m&q6vUmD'I;f>pxnR{n캵Fneכ-WC?v-_߇1  8ts‰c()D'כ3OAK>PԴ / B .WR,]W9e׵ 0}uBϘJ=nDPG*&Uos ^&ǂJ$,WBh, [*gՔ]`4j8jK,j6T Y(Rn,&މp<KT'S/;g㞩[oٵ:YMڱ4<885(pame/k=[QZ5L`" m\s_nfާb9َY6`0\k'2'seuE1'HԙMئ/#SK AeN%WycK;i8T2N >.\)&Y7jiqGW DdIS*.Gkj-/ϵc'R2w&Xag re!EI:B =RV'SXH ])JF@! (L lVfᆙ 8 )5n&`-je}%>Ѡy-eYX\1:c9PALUzJRc\DHv0ZHݰw2DGbۮՑZF7C2Jvlh7Wܰ"SCشypp\хG71r{ÎSVq}lc14Z0CSfwEу#77D&k/X˕֊_ s !A$b-.`&Cj}m>f8Y/5&*믱o0(rM'e-SȩAP-^_k `DBfÁh\7_:6JY?I!Uh3%bJ+n/=Ҿza846P/|l!"}ɱG?|͞A@E_bFy@ SGU*q'>J$Yj cZI@Rճ dTT-wGX1XܩHz9u$BVZP٢VY&(a԰L茐YA%d8.]] O5V H|BOGjg&AD (lMW45 q$L-h5c*Ѩ%l͝n[4b04 =yiexa&:yO'gK{vƢåM,5ekvŬ\fиc\Yw،7n[Z^kD>84vBKfΩ }ʵ} Ǧ(JM4p`47*Dw&kl}e ya}֑bsB/ 0#O =cٝ2 /d̮K\=9_=As uZ#.o;Ɂ5","1  :p ij-)"ZSӭH$*a.s&Bq_yiqSvw]^8R6)D>qFpaxxa1/S'Ī(iԇDGN;Ҷ _L-G˗ΓdmfK_%VF6nFpo qYd,LPBE~I QEK8h5Ns J1e2I2P3t5Q͌BH$΂nWUzdUWdžXxu,N!,ܾվN%Gy:dvf~~J5m]W|ޡr&QooWlVK/FVupU{3̯&& jݰ^k62v1q&)dg-Wv[YQ_; 50f-|VzN,S!r&KCeʞjͯ?#1=詆..5(bFˮ_n;!0/o=yU{6Q4yU`OƁ#hb'j%Ǘ^$IsZ.:4Y,KNKdc]FE8Ik~|p.m7*B8n.xhL!z$,P"-۔~)Phf k-b)R/OƎ~D cRW!\i.׺Ij5h+IH V:d@  Nc VZ3ibQhK}K]] W!VZ˸>eK`]OZ,NR-_K =ul q#O]oræ}M.}ALl߰mivPꕫl6K><"+iR /Hm#Fw&%\Oaq.RLw~`txoB +cc*\) L5{/=}_ ]['L ~B+tLdLzwjfvZ}סU"K\CH,8T+vlo,=6?5臎8$IفƜ·xutpom#q qES6E ЙK j "Z ag(J'>x k.)amR?!ơPcPF1i!eHPJ-("vYxw@|ɴ0!cwڼ97|`RqPlWI E]i}&G-<ɠK4yQvNL|pde۶\ycx^wUG{|@/ݼ ]L6$h=aAlC&gggOy-M}ac>~uzkCMlz~w{//K9e|W5~;'^kً3ԫl1XX k/<|C :^SLe]~؟oo1ZXQJ?Oeq~o?(xdІsj /㥟u?/Yُg_c? 3zd{T\Q 80 B׾'J8o`+w/~?CZG?\pv-{?yh.ߎ @qs?&r\BƁ 3ѱ<`ԏ|yp?_w͈b~?moH7?C| EܫMT/qGןĆ}@/YrqM_^~uxj-`qƄNeȓ}/+ yɓ@iv_OaAhʰ\?we'O=𡏼?ƾRꞣתC ouS+ >@/qNTzxk0PA hZLe2i/zW=;Ѥd0/'^YyU߀d Q\zԕ`PpgO??ߥf`*РZJOv?x_d#%d?dt@A@A|spuc/P!$9}<+#;n9tVT38|? RTS4e((}&Z 8|^VdMpqoe'P=(*VN9@!59~<Η,^wxa~@|}O8;8?6 zP(ר!>~~}\fq[>3I/qJ2cmo}~>ŃΝ E3~]ُF9` kir?<i=5uR`(xN}w\F+{xm`_uݦ835(ܜ#Xtpr#,`G~>rzE< /[ˌ ._4@8{ { bc䧯'Eq||԰BTh9zcϻ~0\jwo!!1_篼qז͕I!Vж6Ylw r=JHM/‹9Zh}/ w]+xwP:0Њ|z/9om/k@K7g;M2X#]؜aߜD:݅uy9/F85&g/@kN1nDR+IB:޷+5KK"1[7$;_(sprfѝu-.U$LǪw?p.N\Ls?@ߞ<^.;?㾷#<^nKoIWtæµtg3!$r哏TܕR-<Sl~MH[^ B`sK$&@b 9N A1CVojjZoT>]W__~n'C`imZ~%+f=qq*S@"4 ͰL3,Oy{oUR(hP]k{%pCx9(.~ws4*gY<3~QS "[\O`j|TJ;n',5$e-7L.^&/*+us*Ә_jmrDJCPE-ļS| /`N0֭ڸP*"0ݼ`ot,?".ӟ̟;C`[3v14`Y&w_{K3h輡ڋ ZA <><:>q*S{xtԋ̖W7m1GKiJ]Γu =_\0Op#['YKI ' FZ;oTccdl7(?'fl8ʕşgO8)"\u9ع}KvE֛+Hˑͣ_?YNjt*lvxys%^=0[yܔ "xA'q9YJCu~cͯL*sg}}o^oKb1P@< pd3*uӭjc{ocj^uP˿9ˁǷ=~^W[l´֎I\~l )B ` s},"(EU)ӑc~fYg]v"E0SI $`bLBK6JQ%1ß? 0= =o~Ka~4|~k`ޡ4sCopci{T}ۿox`@dI Ǥ(ǬUl= rM5ethG >>:P _xG:s|Ú4]1/v#S1C.\X{ pSvg\ g&^D53ڔocyDΗُifC;& 4+7_u՛wjؾm">vܜܱ)S+ KO:aG a(tiW'ڝ𦝄o>΍Woj-b0d}"dS/rFAW|?mdx6ogzQa"VO3ƚ:rs;4莧:~7am%(HY[w ϑѾ}N+thW̞"Qf;~_|2 Vg=^(Shҧ_~z|tV7P2g҈#O6u׽[}_z쎯NcU:1\}蛏q*M7ۿo2 |cb43rxG˕"_얛n5_ؑzNk ]Kr7~r^g9 IyK&#X{꾣zI^󼋕v[ˀ!"4ɔ\X ̵DhLʌv_[ؾVVSM/+kRvZ=5'{ =rb)`3?O}W(;6뫫KN&驙ъn镯麣KcN=?؇F-O+&2J?zr'Loq:3- HK(u]hͬyA*(ۼ%BL qcGWDjV8G>?7\UH}wJstƹg{'_n ;x:wO<%^V) \XZjl[+|;|rɱF:'ǟ||Jե_];/M_X!à;??2K|ϯo& :gZ-Y*JlN&+ȓ>z-BL&Bq)=7E-Bc-VjOٳe"o98;p+$er|gb,g皰BhY)Keʕw_/~a_tz- UpQ>V[u4׈$^ }wy\Dǣ!BsCgQU6꪿oz3Bor}# z2kMm=މjP>}EFmʿ̦ggU_k Зe~/:wxgq󝯽mB=e{߯nݲeӎmW\u*RFwK{~s#@*]ɐ?C{oi_ySn"ALs @W;n7V*c0k8↹ʔ\ ҙÐBdLLH)2‚,M183~{/9iHy QWpd])¿AIڊk˔yqCc3cJA|~?q׽w܏с⭯yWK{Hu;^> ;UpJ=eBlcLzg u*42*yK!3qK'aOL]bL;F3PgCzq%Z\ '', vf">1ICI&ND7sb ưA" q +`Cnxqr{.i&k[EU>kR93)&Ng,Gj\0""*? I:GyW |w" SPOꦽ~G k_VrcwުӔn"a#Ӹtj_j.rw28s聩w''K健ns~:kg0U: J׾}Ͽxc?"S nܾZ=JD?] {]3hxۦmRJ/,K)&v4_QmLjC$SWNfLJ`Ȋ  bvTlkFL_&H+R+ćo1 _p)#JIP7fuWs}S3zR1Ѓ}ÿpZui*F7l8$*c "vA㳓SW~utW%~*99_($=T,ěZ iwx; 6kt֧SP1Cy }!بF.F.vXbڒ] ' +XǶu]hZkfS'=¤zWm*hɡu;`qSy~Lyޚiw µlZ_x KNy8$y@{{O>}6o9BVvgL AL828u\G ƩkTNMO~ɥ;:JMWKkWJ(U{D#FU3 @rV b ` kIcAg+>gj!̝:rK7GnwT/eQs),Cw+rrlKXj]E2@@o=\z誼Hmm5?N 3yNHʢ\ ^  PE* 4w,/5&G\ư!d90YcT,.-w~g|~}?w׿ Tcw,'Ij.ί87'6o)ahBD.x z$x]y3Xoz1Q"y?Ob1LPF;wRruB4~fB&7#%G#2#X+1 ϺphZ}wRqAIՕEddfXڳgcS P5., 8t3a;3{F؟:=2:a-.UWP..9_e5bZuLF+BՔG0I9.bdh{)u^V6*A:cF5f`=dΞϊ\](?x̫nܽv[fZHI VR߼!3Gd+&Tw O޾͖K۽0\s:?2+=?.~X,jYv^S#) rͻtÚt/qe]E-  lpK:jgɀv4EQ8@ ub&;vWE)d8H`>]]<;(P!ev|S_8]^~#޶X|\^+[>ٹv^}O&XR/ n~MXR a▐;Y(Z =$5-jkKf7E-]UeUH4CXg@!T# T )gvx| B*^ qj&!;$XJ~W;p3 #@ĔxumLg`ԧ%л{ysךi;NĤq'CifyxN|K78 B<]*?\/x QY2-OKLr)5z(\ _Mr8PjƆ*ͻ (mOV+E31a oy+^7B~XJ}^Q&T+8/M*&q>S\~ys !Jglug8J0rBk!]mD²1EWTҥaJ" C1KԛP̓\pܠA&])n%%h>k2: Gp.ngs>EF&~Y24W?:|\^^C0n'8*ZV:1b;]V'@9Htpfy|?j'ܺ}õWv i ?584" 7˒8<4S\O@x !TPܔW-Ua*V.ykoK^rt6aTvt>CI vh2:zi뵖(nܬlE^8 dg-$_AHwZͿ=q.n7 ~~{=QOq&d[;vu:s/lo<4^|Kw[^ym[p^ H ,^t"QgUvx<(VM.^aWuцBgu J W\CJG3#`%k ?3VVŊVuDm?2+:ZD[(( .DX!SݟA֜ߠuHPqx`{]>;Vl׬L`\U9 Bǝ׾5w'>U ]}kB2'rC/:, "[^h-7<C4,M+jhEˏ~IqP0jn$͌C~>i)<m޶)w_\eSI#qffL\u^;7oacCӇE?cS;vW*Xa;$޺-qUK'ݒ[w݁)wxVgyi.E;ga<5o1`<50T._|=\w!rCp]jF2<?.֌p~O`7_ɰ?a 2o#i)DܷwㄤI=ٻkC\{k^{}Wްzt 7q?͉xS4Gt J=lRԘ˳p4>35y7\K}Q4eͬ VC ²vdcLzY0KVd,V!/m0GO~Rq (àpaͮ]Z8&50[n>vp 7_>0T[^]_vҫ^Y$FpMd^sڲ/i&O̔VvS,426/|nxdY^m<Ӟ'hlto~aIv) Is^ aJ 2baI+n$(&q;;xgC1L*=Rk͘~7{dUIhig!Z8T/fg.N.:KB<r(nSy#տg>n\VNr+ـ /S8ʞsa>j ozm=WSg X+Ha MK<,[{α_F^ u2 PFnԻ_>9BcN 9Hci](NN\m=UiL4!7$s c-daNm1,jGuSB /0}ĆΉJ)40` iLت#E:'Lڽ 8NpEL+yBO,.9ܳqWX3dt hB#onߎ6)Tƪrmf9zse[G~Z)ó瞷}e</XK9xuWsj``cYE+gp @y.+9zy{q^eF=pխ[IMEWoĤ4P5*JiCuhIDYdZ3PnR5^2՟sY^=};K5Pd4e{^%R#, e1?*:_<\vWgO,dA?9s-KHp7(t]_v[|#kwLaY3{Xf)Fz f.w<Ȟ7b s3V]pN~t_7A,^dp*ՐUH̑ɓ{v_TA(\=_>(s=0յAy3hCV"]Ba|+k"|4g.,΁ Q ~U¾&/`v\l4h2?}tѤݵ/5z_>hWܸ+Dtl@x91qҋqC(~Q-o&͘j07kCFPa2*%:_]0;1 %2q` !Al0$0)Y|>㛯SMqgMM˃ [vra7|WRM&De0u]0/tw8bib֤J>3BT]qmhtZcc`r8b ({5?uQôCj}) ܗc>kkyk)G>0&:p^)s s[y{ ^ARe-275xp5gҜX '6valus/u{1sLngki}6D Fg25l.gñ %ȋ̡;%=9 anc 1e%0pU׾cCl +(J`B@Nɲ H`$P){z"mK)9瀣 lT3?D:sHdgua qvJuYF) Ŵ޸yʊHf}ܕte(R!݋ "bʤe8X"!ZWo\ǁ) n/XjL" (.,=0.pNX 1bP2 b{ fu:51JV [ YBZ&>5T B~ZU=ig|d8g#d$Gd<2O לF[I'*űZŒí OA jXgg&)3FC˸Kٺn>xpb0<5<=gL i|p>R*)B'qv9w`תZ-5ATG'7ADLpbaӦMcccjsǨ$I[vZS6%JRiϒIW9e|L1,`jky?Zج'^R aa(>eRnyS`?*Cõ69;FL~ 4O!/ЀB ?j5X:>9g?W=gg4HJCUeY> Xv+e(81u ,@ tv'2VUVMDPF|5Wc3]C`dd6 h6 lca>>>S!A* s$5R,>u,n3KYuF7`mВLR 1.swaz{wa%cDžM :k` )$"0`U2S"KHKr9N]aOPFr!AbWB 0Ӏ ̤&Ie8&7{8P F0H@^pT7mL_2TO5 lo ss2GK$iTB !D*͙p 6BPzveIZ_1u}盄`xp^lYLoT(b pSZ^ ajtiy\ QTxFK],;=hJ$Ý,[^\4X??cA2hݶ@DQSM^X)f'x\G !MFmV8w@(eIeYqHe+Y'5&"$60&D8LdY}8Lsji ;q'T454.SqJEZa=p ]ų$&X:v;TQEQO4?}Z- q%T3!bm)BjWR6LNN Lj52BZB-Wք:&@ QJGNtl1spg [9nz= a [S/f6a2Li 2q:Z0arpym# A+ s0#n+ bʴbܑJz=FK+bקIgR+W+ wDI&;?WA aClCAr'f(lFzE9%_ØB^@(טZ-lKq8%s2>08:3=Prxd^OM6mܸSkI$ܑ$ 0 QhJd EZ0/9nI p⺶ !@s3-a2Fgl3<5mx`2(i>vl[ٰe +u5 xŁ`yY>Z슚kIf1~dxnT.r FY~.hWy@#: a=,e:H*$=3S 쫠|n6}zh|3ZgRJ|?|bduVJLvz=c1"t4u(w=SHWja:1iq^,WGk=X) (1BeY0ʤg4ah#JIbuٔqO9 5I bnqD3irH!%q=ga~QT*W8.--,Wb1=V(:(1(NU9Z3pmn5 |)6I]`Q  T0Ր"eaT[3ǐm4 N 6H1q⮴i'xF9mZaK]cjPsUJqP$ʔVJP7*v4L (_#YFdP`AdH{ u^ +R$,(*`)j`4R̖aø.A"Uq/Ġ Y]=EM\ӔP A–@ ~t5Mdx> RTU&o'iTwUkux* F!V`O)qp(Bp=]4ԶIR_Y)uB( AahpPIzN2 F(R mؔ$]j1i5N gIƱPb5[D8!%HS 뺹 DV"] !J5u:` u lr]5x !a0`{ Vqf5\1% vsT5t`b%?0F5 Y]o!9}pVso5O71:h0uყNMQٶkPuei( +Z6Ev&dZi)m@Z)7_为D i$F,I/eH~Y,F _R5ZY^n˄a:rX);WͦW*jf3 ~1(KA!tju;,vcĘ[+4\{ mQ 8#4M2ǃ9\)z)S. .WRb …:Fm w(3""ɒDLI8'#C##j A;V;qh) w12*DA .΄ C?D=n] Se`9:qF*o\1wi=6rg'q)XH^fJt q@M5 *LA+qW*% LÔ2B - #1' BKvܴuo)[NJGBV,/ xeÏ[̢Fst8g(~m6Y SC{Qz$d&L}xndpdM&={'ZLc6fb:"kvVkEnפ"2l\o ؆!,,Ȣ,()Lp$TmZƛILD!n2)PEA,-;OvGcEyR JJClt$RJљBDA'9)DY3ƖH `@`@-3juQӋJ d0!H‡Egb$iz+F;FGcg.zKQY* hAȲZ26s 8a[0NKYTT}Y*enJ2u2tB:gio~QJ%Ei9 92Np1)(4yC'\TT fY#ƀ3lLWRXbJdݶTZX&TcnA! ^]lHDke(E:a(NSk/%`e$M.v:Igc@S%Qaiؘb aMLHAy?HB "g2_Z _XR| h=>{Гf斊h/ WjZX|;ǎ4VۈzNoо3pru7). .OO<~ءt&98ĕœ%?<K˜;_% BV0qw() )Ka?cCEgFKrpJڪ*Z\W*mڲ60bP1"XRG' BpRfJX#dtGY3:ai)R_Ǹ̑iv}6bj]W0,+a#6{QGJ~\&7|!t[F8MC9,3F¦>{9]!Cs,T!CPuZ[&"HCcARqH3%HuP*r{=:s5y{:x"&!nIk+O-Y}u 63X 9ZNM`0$Y[PXD2T_7[gjtoyU-zӆ@XqǰJ{Ł]zYB[X:7y204Z*$95uzBا4kL;l6+Ω#O>t߷1P)7W`$}d!Vvcm e0re2AP( e]g!+[qd)#" ˆrK;R*j'Bv&k9mIW1r,Jc/'BLFqOvSSr%ᵾr_P,VRpؓQaVs\w8rꨑ(fbrsVVݒ9@o/:o-a+9Q0ssp".-c"' 'C8a-&:ԛK=8dq߾Cj;s˫#i&Iv&{ {|v As('dRzas:ٙzݩc`-_Gs'P l&,Jbѩt > 9 ܾp#Ewfxy5͜ը؆YCp&]06sg?7QgNPJ3Kdc$b9P^,D)A'a8nl\2 Z`óPUNPmQFaRZku 恀R(qHΔTeJ)D~$[p]Lpqpz9+!(c'?Hu݁Jq -2R+r[XEPy-UO87X(iq'@r!FkH(aS \ (]+&ňu$'T :9{ʖ7lvqn[jRxgt !1ggw z6ժIKV$.r)3=\"KfkyI*܁ d8y̩`25N[NX@uJv¢t8^щ4ҬyAP*p/ǩtdX[F \.n1,^o2F«+1IER0 `yž+S29P {?,]'}~$hihqq " S@82O-۶ eA!"u\fP,2a(h^(oKf9 Dzn/$K!q ۱cT!O30?v|>+2ʩ+WzY2!Zp|PJҨ$w 崝Y"$SfԲE!"Ė Di ЪTyM)>]zցuvg5"t< TJ5fL Rׅ S+VVݕ8"$ [',WGLћǏ\32644/P@ Q%͹C"MsFl.Zb*QeZ*PYˆE,6G %b-oPDs=flLP:A:.s8B "QȀGngu-’ l5eɪJnGH! @f_ zXM)`fN~8;*j(r,ĜD<|irKF-Dm_VU̱e8c@ش3RazXҔK3yQ&WL'h^DݴV:1! xD̥q$!&F-LFF$;:,[MϣQ[ԛP+" b DZlm+[T: E!27>yUJ0BjT}>mq3nhn]0*Mj/vKiKT;1>==_<ت/n5>ޛnSTPVŰZ?9sD})$"]1=Cr` ,0ZfTXc}() !ʓDnm\FٲL giU`XH1tCsDH}ƣv)tB}[^k؃mbBGapʈrTRxp {A:' iF;琯AANLXs( AU9??Pq;MsrP/KC(/pIfhee4 IDATNO+e<_r1(sZhNGyڛ^_L۫s7Gd*RX^6`/-mrRYUFj遰Kj%ц=Y]DРJB9i6W7:=iXUJh:Ao+Zrc`X$2( /}K{Ȋ!]ɋ68ʵ*@ȅ548ȕ z]ɘykR Jbs$O U4J ,=C[+:?Uvv"J!,BA)%SȀuTʺ7t>uʻ@%p_i[Ʉ]Bg9F<קQi42X{vodv͏>v\$Brd5X*0T Ѕlo ,Ua9 'E jQbkm k? "L<з[vn߲}uH^ıϝt:Z_+RZN;>6 'NJ%+lٲۿX\Y~[p㶽Z,鞞>MP ;Ҵ'd|D!E\4ʃ8;]4ӝ(H\XfYf]ojcȨ\b߁ Íֳ ?r K;-ۅ01j5c| 7<Z cZXg /B0ZlHiS}a%dQc>uȦM&.pV=29HI`jY*=L߇JeTz+ˋI|o9Q*D ^]yrh'-4R]5<8>p:D>`+XR; BuH Wnt-Yܹ:ɣaݴim@$V$3sKJ$ H T ܵƅL6UZ!zk)XeBsuY7YݼuCsf V++瞮/"iEvjl bQ%ڈ^}j˨f瞯-7;ӭ%'̄+Ņ9# ?fkvZ+1ھU^)_[%) Dy,oqR(lS&ٸ;sܜd|NiE2gz-[N4RX%vQ0r*\T۫)YU *ָ.h UgȈ om#eNЍˍQVn"]]Gâlw21fhŕVP %tcǔ.>}tT '(FY ˠP (0YHQ!TfsTl<(mF/?Ta "b>ɯ 1BvẀBZ 7Vn:4JJWYRNJ\Z$ss-9 my ٝͅk$αVqcQ EJK^]]m,:nD]GH!:N2,CϥxL*2:qn/WN&E=w❠ } EuE&Y*4c"o0%@ﱑ0Zӭ"kGjޜqw{}&Y2240yc%YPش6ux0Լ+I%1uDs-iwSK )K\%9.զ@*3BLڭHi_2SDZT=GMXZPInudYәGwOlܽako:sxCl09  u{RIAɖH,^R&I`hrR)n2 ĄJJިN4mCot՗mFhn L eR*Ekuo`{b* c s6h6%m 6jX]k'ػΚf92Oy/>yl:;N>yovdJ钿3lPnu  448juƝ^j=ĸY3<0j',\mksI2t0!j f@FjSLK\qYvVp%sU:|U:7\Ҕ4,}/6 6x^|̂H!}?׿qwI))?Pƴ;n4:&Dzܜ:? 2wn ]RTew\h kκwOlc3& (HF ,Kwm[g(j0=;| rBjFx'@  PABhXs3Tl{y5;*a Hcَ5E K_QM3eZ=}}iˬh' nmx3 `-F Er/z u<+8r\O"$Z/KjBk{-yRF@b0F}EK-̾CE֛M&ApcJp02 I:vt-]ctx0&FN-\GqP 2,@#6"Ж7O#)Rl"AdGZ `(Ni?>ę~osaB Pa-zG ]V)i!9:~h}O: P2hU)~{ H8ՙ NAq@Kй]ѼlچEQ}𞉱㽨iFNNo/dbԯUv:[Q+H#8uvJ9XDQ:6abbC I|\k]qXe Դη)(b!tVbkt[\0xNUBU+T +F6$qp"ezaC!Q5[2}Raslw(Z+S1u uڭ^X4,X2D*|9 dydM mzHA *HTr$ znWKU'}b<Y_kC `/Aelh|ɭjk*k2ix\ʈu)Ѷ 4d [AYiOSm$ N:^,Z8? ꕉRLS@'ni7HqU w{I'IɂllE :V^o)@4jԋ8ЋB9w\ǣ+A"%!(贮 Z>߿r!Xitt1RpYvx&  ;a**B](i~3+L4"LhBCwA zE))&(p thP3#-K)7e*!#!]T*m4`g3..TVu&IS@Xa0D'+wR"+R(aBjaJjYS IwlEi@4hY.c m.V /Ib`4l/Fk+ E9ZK$=Fo۾󕷼ʯ;~rizHٳ\ړqtZXZXn#V8qӀj\kZ 2*&vs ƆvE'm餒7tɇx,5)7D-d֎Q' }I&`\hFI(=h̠Y 'Rd2Ε51!( yFzhȄ0/\F 0lvLhhAzNtAK6m/pAUhmPFr?':ӳ+;kS.K-NnQA\TU0Ah0@N"$%&=aA$ G mǖFAu[=t:M=>6Q*b|/ gP5wBlN.RT,(bQb43sxmTtf(Wv?+h,lp34!;(7fKasVGijQ)PN@UL@!4}=w>Nc2:$2.bUuT^X0,n6- 5Y8Ad T+Pĸh!/ē~NuF|W`:H?QBb}S_2B%dRx-!纺Zs:!lMv%?ئq@݊Y"@zDXVK^\ ط1|]Q:zPہ%0\i7QOj칅'$s'e?^UּdzŃB&EP/* xz * $! $|uӻkjDP,:E*\Ög< 8Aa'm!Q/;6u]Qaطm6}؆ۋP&,j8ij!/} qy%]ay(!]]G˨\M L`%4us\ ۙZΰ)u!=JjT|eY#9N52d(q^we,?L=`B4<52ȑ# )KDTQpkePOd<řsM65`>0P6MPMeYxlz`ȋp\Kq4q;,zʡEqs 69Mr]KQq\OluŗdO۲4A]Zi"yjjRY=ES 6 0Ŭ ,=x5*#X AiE F$*Dޗje8C>lKdpbLKul0z2ƃQe**|$^[F]J9aS6ښ9{fswl۲abtxV;oymLĶan}χMтO 0Ѷ00|9XjW4ObÞkYڊbi#9I#: zsB{܁< $`Kzv"͒q1bK?87P4w+ ]=Y,b% ebE%*L14"KGfa{vvK+,NTq...h V5/y# 14!޺=QH:N_T1,Zee/kRI fl{R Ι>]6`j jà(X Z$-3nWrmv ,#O[2X]6M@= C2'>mu.Cv,8|8fF/%; Sgc8j!0Ҕ VAS+S)q2XV̩Wm;GNw[n̺L/y#D@4iێiٽnXqx8f_m^hм#MM_:(/5F3 cI̔pGB#{3~AP0Cɇi5pGa>jRVz"JqE|{ QBoh6Cׂդ.=7׿ՓgOJ/Ϟ0Mcq~4H0.H<׿~$0̨ic KKeQ&cs9yT "iϹR4%6ElpD,K֊uZy3yz>!(#b-"VFl)`9"eNѳLP,8м%@1R%, jc ¸ %õf^LZЫ? P( A38hGNԢJx",۾hۮ/l l)]8"M&a%ayŵ.!6!ؘVʖQ)[P tLӶ`IeZN̑0p> vqO2őeIl3ǫNw8^0 0۩DT/sΩus>;t9Z' *; 6p>Bef`A8UVn`fʭɠ9q"'00@O]8s>pR8 \בRU*$MWVշ;n7XSi+x,T&FSߞo*fi7O+ϸ8D7ss9SP^QƉ3h,|8i,bi] l^As6n7Lmj42y@)3 IAHe˴pF"B̩h 䂤 9ґBuꗿ擟Lr0QZ(r1!BM3~*u%y\^ʁ):gJ{LCjr[ID \]w|brƍD,Puriֈcle\4R%peZkֲ̼D~+k@iㆍxɫ>O{!V~vh ϷĆ&}=S33FĖi2T)G+DibxtZ,+++g:}^b0r6)Y'SD]l vBZefv!)`$Ԓ89g&԰bK=)"DeMpJ[,a)3p!۶;3;[VJLy:B:iOBr_8(O3O0n3]DU1x+"R( 9|BHf[$3M&O9'F/ }pH̠8Si ib2=;7_.ġ_wܡ Sur|W7g,USWcv#K0$I8nʣt}hJ@`گK9$RhBdvn~fv^{B36D5=KڐU2H ayhw?h\lH\B,2pT znfg)Mʸ,Sf1uV #Dd p"O1Z@ na 0 )0[>Z_2ALھc8|˖r%@ ,I#.[;G&-dF̉yvɞXf mݴ^A)hɁ4H)Yz`5x,t 0kgMqbXE;=yƠo.3Ib;´@&#aY.WJSxϾ#oq׿Y8$(H0oёZLu]NvγP`'NubЎ?huz+@2Z65̰]gP9V1#M $wQj"X#[Vb3}R' &"Nktк$r` rqqגs}m)OaZ/ Px6AAFgO M Z b_9_/`hRh}w Q niaۀ6GB&)l ̱ĭ'NJ- QBVxc_R,|H029qbFt#KrN + E/7z0Ï/C 8: aeӧW/2?_Cu-ñA47 sc#:1*_RbBq HRarawյrį;м 3^[*p:0N? "::ƾQǗcU6 >5Y,E"O\e@X +D{$|'c!SĄnɁɲ˃V I.򮏷.'_EN:w>M&ѵIL7F&8)M5O=˝P`P!@m $G~;Dm2k3::.1T`,\bmdznrdn%N0bnXyb3NݷQrǷx6asY xOT}<6ep Tj'HO|>-{:e5spXfTq J=?ca6;BA(JA)$q6 6-iBXZi41V^V, Ee-C$j^pƣ&آV?z*Sjt%&g/X U3Oӵ@3x 2(>=|\p,vmo"D64GJ=a.:͓15]+8^kn9t~D dVݣy1)-TS*xS:=8W\2eU}VV~/HL{]˂!!2XN}e/7|K w-Hb.Ih*KC3mц#b"0 4R*"@qAcGO8a?LLR#&jՆ4{~/dziV!PfNT8`e c+wuh n̊J v[ER赘r)Yct4ZtMbMhbXuJu{@VoΗEdX4((.28e Chs)!` hdTT q-$<]@Tpk(V /%w=Z^fק |>qv:8Jt1(av3JF3_r ęRspLܶcGٞڸijSG!ݷ]-n ).846mEzf{E 9.K{{nyjORິR׋V 1V fpKb<_(ToNMSKܜDՋX$^>eZv?j |J+8jZdd: !񎥁A$-QLuӅ iKYZaI2,"nxtHK[ҷ ^)峌bK߸_WU$]vp.TQƙIń:Y܋n|nCfv=V ˣl S P"IAXl6CqΞEɀ& |Yp45+s֙Ҟ+ïMVt|Ib<Z .x AM:HwQRwW!NH9.? SVmL*Ljmv0j#Dtπd(zARc~|!\oCyWtf>&6Ξ-} D>vώ=?rZ &QR^vӫ| }"7]ۑJN~هlt|?أJę3`#8%6XI,m~?N PYRɅz~m޽3qԷdjJt>:9G۶gNQ(g*CuFLm<=MbIbq\ƧjBQ?" \w>g]C:Nr%mٳkpl:O[][iշsB\$}vƳT($4bcsvq&vY?rfi޸fBlzp CaAJDpI@qY[X;{X]M\Ud\fS8=; 4ȧ1ñ 5h,\Za`$mbGom׍h%Z\_8931ΨeHIm<zqc5xz AʭyœY ъ+E n07o9y5W-UM,| RmmcGTEQj;>62YI 1>Umol2iݴqܨ*K',ENypjVWƛͅFW?;( E}p߷17(î_% yW i 9vj&@ePJ v,~&ϣ–: uO^Yܢ< ʠ了Iܑoj>*%Beu43- $:5  }H::qve rj8:tܵ9OA&GJ8'?O #RF5S%)ƑUJ1-Ǎ:Ų#CW,y mrZp!K6BaZm n}݊ef,lئS>:8Mn4e2.bN# B,e[6oY T2ƳZﴢ8ta۶;n`BUo[kYpu5jX#aIF쉡!DQ彶Q%]m;Z/L|Ä '=(22nzJql|썎pMg˧v0qlj%HqLQWIH]20)`ѡ8 >ʬ]|i;¥JiV a/eAg3 +eB8%,<<3c4 l9[!@= =B e5 2Lnd ,f\`4ETGPHfD@k!zIL K PMXO*-[RuN=y!obXx$u>yR) _'Wį;&FGXfG('0L ϗj ߣ$%qIqr۷Kl\J6.-R .\Z?}GE L`?# N/H$JlŦ$<.q *1]CJ2ǰ$q'Kxhu/zyo~{F S7gȄ&RB\PG/Mg-A%_~K] 횗 pl eZ};*A*\[k7VsL 0@&߿ʥZ=O=q N_f&KH  IdđBŶovkY.e? `daB&btMİvjZA k^zj@YJ(a++g{B- ~2RE:X>::Ӆ~ܕpnZw)$k-t P%ZDi[O:|RooxϿkx֥W '=rHLߛҟOQ)4CV?X"e K\=rk۝,r0@x, <{P۲^"~]~..䏃@缑sss_ 0k2샧&7h~d+8H=,ujV\Z %`CZ:v;@, IdHqtfPwң'枵{:>0f)m x!(h- %&#4;mbg!0:j0Vձ8&1LS9pZoX ]eqTuܒc8NizN|L? @qP%I{dT|:y偩gg=^}~+uC#kJiDP]q,#?7s>rk7Dۮ@2cd[˧O}졵9`+U+5 z\ڼqc2.IX!n2MӞ_Xky؇#uj[E0e9\vV/ bYmbC`l|=EF<0/nm|-}RҔqm/3 +gA.a:8 톍Ձ55,.b1$2@S85yTǶc`XfLC;JMH *m@ڸi|3F+SY5}[؆B)*+Puzٞc:SʑQv)˶V ؅Ϥi!AxpbK>Yݪ)ʲ_Lxj;J&R(=-JnGeT)T3m,IRPB@)jM;.3<^P礙Kk*4)Ra( K,G"i C9N\ ?5Hϲ)ICmF'!wM=˵Jn3P9VhjlbǽW|痖N5v0䚦@A:+1{qC&ڔ4I*uӴmv:P)zlgҴm#e'<:GpH/tSiP(S#KfpT1Ê>&,# ` TÌd,E$=K@S :A0JySRkD]I衃LX* Bo·<.a~Y1\m~+1E|LՅ^@VҡvnW(,NAY6("qSC2QU$<-=)NLH䗜ftw(ы!aoxZKHdrɱvCNiqE؅jd;]LjWaڄrti.$.iGʶq Z4clQ$+bEFIJ{x^+8#nef=@G];~(v͙a ,qAW*z#SZ6~s+. x`hz}=z¥si~ib[0^^]]]]^^.EQ00M4G(.#,ˠ\aWJm0ucǎ]vecck͕Ղ댏M2)(e&\!ؒ:ַxǚτȉ`OOX/}; {8ej4Ri8LذG|n7ډp&Ehĩ3;eZ"Oɗī-nFs bauZՍPT tmXJUTXbƑS)K¤촛]'8 FE{_O_r-z&_Њ֞hh˩t!`U!6 Im߾[o[XxGvb.R$"~ mJ8j]r%v\wݵÏ>x|l aJZ&I`5-`+ֿ~x6<H^% 88> fCc~ x$o S% ӻ,Mri*"ۧ'#GD˕A0J9ꆼ&E},8Iɝ.yezi=3CkgN>8 TuLړ?(pM| @倶 s4"I 25000:>t&&&Z®]})ۆVwρ)f@*h6sꃃ+Ä{k300裏xO(4㸞a*;qPՕ$8??_f탿?ra@/@D# :5?8WJ UF+p,v4qÉ'R]+SÜ3g[04 {BZ ]wݵe˖?MY/ a0"=T<[Tja_>t3xG}Ol~S{߆-(c^k d@0Z6ٷq5<6VˣPoZ.ܵ_!7VWNEX%]i.7F K( $MXLx)[]tHw~C4eY\{%]>|{Tiz3!{tz}v gUϿԷk'kS܂;^X.#^I2|pryZ°xHu~`mkdd/..YՎ;mBo߹CZkn7L:{lzGJBee\gW?޵k緿}ORyzqzbknUwd~[[ou~847 ^\#[}Ma+HҴj8NydCEL!&Y11ݶ?TL_ ~8u:3{Ioz333~?~͛=|3APz4͊!g暍V|`9׎[ߩzKkkW^yx?v4Kf"!nZB-0&CYt8'9\{G+xw$2xte/W[CNᶻx[Gx+ BEk4Wevb1DQxƗyqb^rl|X(׬BeG~G$AXNjRj\$ki x2H|##òS,aWK5Rm@H {H?8Bd<p>W 8_ 7鿩y]YYT]YN2'"',m4WaZ sAZIOKEW~>-%^aj|vnhi1eLv8cgRld8-·j2d8ɹ~/^q xczc7G3KY'??/n~+^z+.hn(pu2F:٠8E()Ӱ>s#xueλdSX"0akcțR\0p A,%BqAD#xe(Q$?PReD5ZNq !G -t3w'^?o'!@U3ʴPC3I`ir'd8 1|o4|׿qV͵5@K퐁T5G^7h(B4-KBƒFcE600P* ~|2dʵxS~.nŷj7^q?GcQ /O3 "+ ܷM ɿzvt%|Kh=A\'W N:jO4 ׁFz[n`V?LY@CVCDZE*(H0 N۶{;QFyX"U*K"Z~Dʹ~OS诽귬}+_5I[PogӤxQz KWw(Z~?}J)3 9Of2t VZƧmcSPu q-2Ё)c,$G,א*A+*HH4ͅ4&GeIQ'C ~跿4=bɳ\=/Iiٲ+a;Xri`h3zZ ).!4B1JłIٳ`qK?12,KbnzAsBN۷0 Zr2!5l? \~Kmh(~am3լR~a9>Q 3}xUƿ`lyO|޿Cx/?)X5$6PR8G#ewa{L*Yzt Ƿ-Mz}֌`L(a Ϙ xc&unpȔLLpY  39b D PEk?/^ct2_)&K=[,ftmcmB~4P,Bџ̢%,@뒙 r*6&-H 1hƫ s!@q`A0Mj;N\9qW_oƘ: T.T2a5Y)x = OrB~m#ǏmWsK:7ݫP#_ *:}f\ty>z7m2| "pcA$J0CFK>02>axvqx\7vmN$q5ݡ!7eE`)MԚ'c~*Z $K9#[8p(R&tmB&0=;GL< 7\Gg~ ؄=822~v۝( AaWEB !~WeEu,  ' OpL,_TP\QUO=3k49#(bqq݂#3&!NK+4\q؀ߔ˿ܤR-rs=ǓhΆ\DGg]DDo~`q`4 ᄥ\H=7`xj(OqG F=u,m.7?X'WB`L/R> 7 'Pʕ3v1I3- pг,u[W3gEsð(?!#3}$KfƱ Ԩp"P,?d,yC¦aV9 CrM2mZR8rxпD :-B,ӂ 6O=əSgn>9wG|'7|w\Iޗ8Ç^k0>T^lSzspW<}oWcg_/27WC߇+H}8'6e '|%/|KS˶$ټy3ZrYwZ9Xq9 &70't`hǮ+  Bɥi A=CL4Qjh}4|@|h )(5$A}qZl^T#Ǐz`;l`^ՎT`U4/%4#.Ko_JHә^+TJFi1WI `;9M$ ͑D|ABzGF-H& Aj !ǚ#I+0g2nZKwdmVVI~KoakgnUP.#;ǨV_|Ke#S{Ug=O}96́_O!' ju#q0`{E"K$wڽZ r3НDd<4}6n(N9GQYC?7"hݑ'=OEPIy˾ۿpλn\e24Gf;(y4Uy/&_Se {~!sn.uXKIfeњ_~S_E7|ᖯbBN81::|!#!)Nƭ쵆Kl(lLKi y*I{mA!cBw55=188Thr<2Q0eHP@072̀m" Cj-6[k`J[.6.ZK2vPRx~RPXw^]A.FP 4Zݣ0 v]*"DQ?UӴlu~/RX %&Ъ`uhMdI,9 z~GusUOK}eOʎ'K{ߵ)ǓyЁl{?.|LɯtOC0X[7ǣzӍ`iF+Ļ k2E@y7cvdE: <$:DQ!@l5%gd&gƪgw cRZ RK`"AʐlI ukkJf)@T}q_?`A2 afn^43ApckgIMHxc/ $BD%) )dba atJV>H2o׶:#]>! MJt}ǝ`( ,| VE4c}}C75_9~h."n)e6o<:dD3^;>dÇO#v?8\]dY5$nK@pu[;nzm;<+x˂'H8r #slA:q 6m?SjXV(>ZgkMɂ™$*BxQ'|r8 JAav}f_TOqj[ [Fwi00aI;eBt [6JXQ cI Ћ$JQMQyLN`,.mo>Yx ߳1{OsGo ]ڻ>PB>6lH>O8W[} ã-<- )VZ*͂WV"ZWXR?t_x32K CixX7qLsntm4Nt\ 4F(@ yZ/8U)r1!s"CM˓h[LJt* %;B\=IY!LKoiHiqZ~y ZHCWk+~/6 F4 :P,a*xP"!>9qjRZ@jC1C5*g:6c}?t+Ky n 0_bO͝h?f)S(c`X."MىBW{ԗmn&֪؄N&$}9_v> ,P*ECVM=z!cǎ5433y;wl_a2Wax6!U _59=; -f!1\4J h0rn ԰m;7=|jd5[m8+Uev=[ay.gZSj ֝8HH@zR<rh4<ǟPJD{sa8H`ԛI& prBt= TqZP֩ 5A+|nCTitWA WK1ۋʱK?^n|`Y8gGQk{wЇ>|妛n:_ c| 1Bl8wT),>ęe%;L+H"^ 镜vd:LfF61!Bliw=xJۆ=X]^l fd'ۇ ֡)GWioG;Vag,e,K֝;vk9>xhnwaO Ya"{hh+| _a-;wvnwE9{]w~o -ćsOhu(VM ZRrqN&s|NOͳ^/ُ[wW]#G$E,2?qO;a{TvtyẐ$/|CSSS[l;]{y_^J+^ʛonfԷKUZs*`atm~PB,R @ .8$2l:@bT155d]d)L݁2Jb۽sn^sz$uK7Mc!j$2\<$I4Br 0ySF]7x~ n+{G[*4{,gRUILӦVKrG}Օ̤_,*SOUXQ/\V^!2c 7lyӳFvý=ȩ3ideΠ&Yvޔ|⧕48K|7KNNb KuOZLgTK.꽌/.V}c_;:~Ul^Q/ה9/!GzG{^¾ޏlcG;/Ї۶///>ܸcǎ7 ?SF M# giV$IQNWq%勭 7JgUKt-h ɱƧ'^ w^i_j`8g^?z>?oowkZ\~wУ~[?p)^q*)fcDfV"39='{R]N?B[ffe: |E x\59Zu7l:_g<tx#ЄD0ܫo5wu{?}gWv5'͵.43kvnS MV [)a>~ V_3M^Χ+0Fۜv$?x9{|=_dP+M3cFDfQtQfnJRn;@:590Gj-?y&IoSR3gg 2=zԱs@ҍμǒ$w- HrHYeE/y;V>{!b[A һ~;nG]eoٝ4c̔u0?xZK.wcltꫮ}T,ٻ;Gh;R/xы*RnA,%ahH `$x`'O XORqf(dBՆ8ڲ}TU*lWV Yyð]2UM0G>=yr٥:E'_.r7O'Ŗl59N|rMN@S[_#cOZ\]e/35\#IMyO~5 n _7Ͽ dHM1?JV JD?Cml9wb^Ncũ{'\X". c'2bA<18K Ĕg3K=6}ũ[e{ve7߀ ld> f yDsQ CSuAܶԆtCZ_0t?1lafru6mشiSt{nP+'O8V4BN:PFQ E0&. ev{=1 iׇ3&N?u.7' yW<9kZĮfAZ9`~}wշeI9gx> 섄l4^rqr^kcWc?ɫ8M/BRNo;w7X,:›>_얯ݲe=w~7++)RªF G*K# gL+ d2څ㾎 v9*ӡ DcBغdt+s2d;Er 'v6+UXtڰƅjuTx{tG?:k/OB)hAMm^"8:?S Z[_cG$2\/&6IHRφ܀&qFjZ-LzlIĢ~28H@(Ti0iAX.7lpIyҵl@c{ڀkqͮ-6L+U' ?)&ΖV>mh@S]4_v>2?/Ɔ7ÿIy J:Ve=ŏ|;YhLɺ>\׿TgZhbzos Ic=vzׯٽcS:捜YX= W^u5^̆.8bxH%Yl r,M ,\`NZIvLоozFكgVyo_:ve\*PÙWW OKvl&~}8$kI7Ʊ'6תMKJGȰE﹎ksSG<ïsx=X5%&aj$Y%N ȑ#c~_Z[5 &U>h a߶@tjjZ:veنl_TH~XYYݴis2XsGYvX׼%Iey߼t~}CcowG#SvK3f0n RW;7{ z]Ϫmػ#>~?~}7mڽ}zkz| RJRTc~qI ć aЪ,"2,ǡh0Ǡ :rTE}:@26dR 1޶lCo^ܹ}#FCg6Ln@nlK!QCrc: 5G:>0?sk٧\,"9*`bɰ-=GFx5 ǡУ n(ذyݻ{A`SȡCd.L3aZ $nJvz7oڱs\e),j  i2m5#70BRW_W~~G}#~"foEbo$@:|[tdIb33N?ηXyߡ~ﻎ:x[hlKz=IJș{N~ez]`&0 Am5igiw?꓂_epvj5:NAҶ^l%Y[[kWHyZ44aң1Q0iFѳ[]'~DPPX clК1 Bj \Z7<>ΏU4JPeZ %x+##c_OsXoBFxA3Lb°uvq _b{BR&8M$B2Vc F"eς RtD;yG@2Y6Fd׾M]rn;zRi>r%_4B3bP)ޓFbs```|bMʈ(WvTr.}~{ȭ7{/!$+ +- /ˇ*F >LڷowozuqcqFvw 0UxJC39>?@ dRQJq?KPb[3MszXSo <%, u@ 0a @uڭZj.9(q//+UWCS`kQY@e&@-RA6scdzƠ~kI=/7S*Gwnz-_ܧ?Jʳs߽;{kr{wzͮatq].T~/%/ ^?۷ms]W ^(!g;<B WS8e!=y5H>62yʰ\qux:0h? ݕӦ9c[B5-lǰeZi|۴C6\Bts=A*YVIك@i,8dfKc4,8v<%ȹ?`>@[?.O#z|7;64)6L­ BA ~#CJ1ɢn,~"E'c@';`8 ݷ1 l4V;6B'38)۶8˨e%0 -cǫ* dLQY£rӿU0eE7EW]qw/M#NKڷ}i͓y'.۲m]ZٽmK/5_dS'?993g.Wo8|c;BQ41-dV;쉋'wp1Z[ƌaj( J,kݯLo\:stmS3UlA]Dme#m&LU Y:0܅Dh|Eyd趑2q  iTt(@O`c =(X" ,d< Ȭgc~fbA5 'ubhHL7խ&;(nyRN9qYU*8?6nUQrm6iw={vc҂8kjQ^ \,[Y x֭s}Q\R3 TK)W\^p]׵b9NK)352<8<:Rꞃhg9F8{gf M[j/cAچQȣo~E7^Uarĸ۳hQLSM fLtr k Tj%32l4PUЭo/c NZ #dfQ@R*egյ]V;8X/n,iWTRI6^#E*q۲SC }c33@$ʤEē]ݞ$d:[N#ggV[.,H9熡p//oa:fl_ CqnyO^'b<< ՠ2Id[W^ls%ǏNŠ Ƅ>Lu-#" $D`)i~"Fa A f-Ȫ@:QWy 9a nT*b|}@p =ZjT-v8,a,'/9o&`Ͽ4EcZ7HBh߶c ky]{J9=>B??V|?u:AijQ YT+rOCIC_"sFlڒFMl ytãda T"F ?J 2:PIE2)"&4ψHv0PYDF[AdIBC]na|ZXL @yf`bbCC<@)?#)A#eZ_L4SYI ]#@Zքt A&a4IUW^>*~ {416D=ljupbhܯSkrP' <뱫21D\ iR:x{&Fkcc;7.i2:89:>i!m['Hn댏v{]-/޺E,I) Hhݛ6OpUkO%l&  vmЩm}H \SEi86 Us1$,p,V_m RA}F4CŭKAȏ-[>=lo6sff_ՆBB iXB `(Oj x]cc^28Q;zy4t<2(BY#(Ϻ?Pmr)>\,Y-EW1~cb-JF-)(!9lVM4'<rn6ge*z V&ui`q /ӫoy E` ғC, ޹G-w~lw߷g-S}}  /PX7_N; 뗞 [e[صwZlVY} R"}?]fC(8*ʋ^"K eĀ"A葀 _mdž JV537ŅFƠN)pI+ :ܿ,KҤ֐Rvc[ГY\YZnk= o6iCY~q19qzr<0R4-XKEBHX\jaʕ(:91>4`\_燉)cۂ1P۾ei CIt/\29\}!2拦nI7MFp}JtL > ؅w3tmG[RJgXqr/wmdŽmXbXҢ[~<0̹"IenA1)i֒=so"m[*Im\%U׏(O[eXJ]5i`,fJ3"`9xwZr1!/zNM582~+_ljf ř{ϞY^^X^zl j㛷JnR*|?#Jyۚ[&'^R%bHwg:lFSw$.8{kn3uRy VÌHq$8ck5Pzų=ܹÏ~ҟ8T;sU%e#\EEI!t` O.C',Y7={pr,ڲqc=+Yg0}SQmZu\b##cckjX8ءG:6@fYR[ je;ad&0dBHe43- (c !u#3~QxTK f='x纮NqT4~7eG֖8_գSjvm~?ab#"28%rt,kIǹ5Zu F:eV6){{DIzlf݇iM^W^%N0߻TN *XC}\\ 3iJ;}{_uӥNT}bJxnQy)0 т1)6q玝~-+o)0ˊ+]HYb۲ R*%JM E"`{aEQUba]Ƙ̀) I 4A/dL$XTcBa2q_γr8KRL$M8\[[$# Y&FfA.˴n/[)mչ؍R r(/1I2 k S* hh/PN~ n~pe禗R)ϱMMA>Or?~I&"x"Cg3Ƴ.& NuPAa"p0ugv䦰ݞڿwF6^}q QFp]Br)i9<89ה ^m/5w8r xĞjЋ.)1pŶm$L#IܦjF ,IXx3(!P@4)"آp@kTQ:6tYozD"H*HBI43仁2Cn¸ 2Q˴k6hf{? ~N`1V^xIi;`ڨ3xUFqbAt(L`N0ง9w25h9Qh)V;ZN7廇)  &cMNeTbL0|(ԠF2nmzx4M6<9^8qw6}5';Ҿhc=hZ6g{dâD gZK&{eyrZfH$[.]o-dЃ}g^ 2%b3?p^P!Aj4‰Ǟ6̠,K#[Z۽Y?SS A>XA/luq|l_'ߨD~8170-Ҷ4 a (Dea"@d̾hT)2 E횦6Y$!fa|rLauyKC@8 +_>? ˴[BȲ`ۗ*tfOw>OAɘ18r̔[_B?'O^gVٶ .n|rSm7 UeS|TR"Cvi[SSm ^x}X}q.˗&Fgq" c_z/$H%s0gkLK]j|]&Nm!7 $Yk@w .3"eٶmV=E$ bIٱ*M@ XG4I(Mc!dhmGzຆb Btm#buq-ǁ;]$+~wuTwOiZ"^LIi!|B*! $HB(  6`mpMe]mog{wײ-*-:q}M9sο\!N͘vUd(FB)M1]3bU^%XF>/ pu OOe^p~2,+7%~vOCIag,[z/f DzdjGpF:p]%KD}bSHAtBRFt`rs$UUJ-ի*u-EUit=j{S{7=INJTqj)*Uc>Q)b6(!UcF&88̹<2@8!z>CXyS09Hc ѻz”VA8 |'>ywaf<?lPŒd,79Uzw62 a̩74'W!4XRo`}:b]_ZS:7]KWI1@c24fy8Y!*wߘ҆ɷ}MkαU$($(NEg 'ήK(@ U0|uBzW>kہzaq8T1;_5 'thOZ rW c@xWVa\3R(^<xYTjlzWN{Nwv68^k_7А=?s5e(]5be! Av5J4aۋSbuju&3(68jsLX߼ WDZ̫ c_hnTj(/{|v08sqG~$tE[wEP@2C[+zͱ=C7I2NQGPu|b\!jnkjZ~00= 8ᆎP뚦-Lh$ /$x-Ѕp@2 a覦 yǪ.'k9nf8cƇhW J/ޓ%!='mqknCO>OL&Kڵk8F_5Kjk6(GO\FMg GϝR/Q*JR}wxKLƌ8RTPܽ'PievXfÛt7=> W^ֳYE9"@DӘIC'FaxBzhl6?pc9CŒIzS ;53S3.|orZz*2t<=R8;*?TkXBHniइm=bD=ff*; hBa&"j_'ߵjd-ݲ߷8nm8rt?޼'Ƨ{7Oh5HQƏOOOfSx!:Xe` CJLnݶ N|{Acm;G>;|(z>q("{H!p4X,jT#c+\ZcBK-915~^uUFׅNj~+:mWpRRT=ΘMmjw"U7^q:S7X">6BmKWXKpV澋=Bs=/N5O]Bxv<35P .*1Q }P~XnzIs$I^ >TR1TL#Ea**>".OcEKi4ȉ͇(Ѣ,ՙ~x4=|Y\_qX,naj+/[Җ \s+]#CB(f͚ugIg&&g ;aUfJ8}ˠ쥗^w5L>/i&D•W_uW~rt te)LUUƥT\御(F@fZjE6Ai ҶDXxr;&ʖnj ZL Ҍ$mA.eA{2S>POC R3JdĚӠLAW\ZqmS0hI$bq׮6e3d,pL6'w%&|䁕P S]X(wηQC9;>H$z{[dww{Bѵ[ e˖m8"SS㋖ҙh~ωD'owSXr]>:4i^ߝ43I]3#in>;EҨ"ǖG`>4Ut{*O(rUW5C03 1e%UW,J-Zx :$ꖕ&&db޽==}:SF W{D#>:,FBnjF ^ugo;DGu߮j ȪZM8up8F3jf}cFT_*Cp4B!T1&)HGxX^ (bMB ) o$`X @A۶dB*155k S7)#kjim<̳Z.753==wwZ1ef,QHG ;=TQ2tx\Q*tvtX"yBX+ݜэO`rjb2ќ]$CxuFP8 P ,t H&AM`BWp2SQG1@1/OCMP3 p^3g{:w(%֫sUi"oΝX%hk"w8S'P:! [9q=?rqjV! o~3t0 rNsOl3Qr5: V,~x(6ļpQ qr  0eDQ6K(ńy9 (ȿkṡ)KF\M=rG rp&026d"W`6Q$/o @Og\ "Ym6m Gn*sk9ᾁx @RaxYnG2PR?wwY~m0\8|"]tV/9N8ХbpB > bGCI>h0cRcQ8w{r[m@@XlՌԨ P{p` =7>| Zp:N*(?FN(愩H$ Yam3!agKE5"J61b4aKJrqfj­x&TՓXI@@E"'J„'d\)F  с8' (Xe"Zbh!*B* `Xux1UMR~$)0Mu>u5JȱTwoFL+Dtb'*# kD 2Q¿"h-̇ Ֆ,0 )?#ǘR6>|0iqQLZM7c ͷllXٿ:. x )\5Hh P|2< p'[`<9qd~YGbNУb*EG{w4=nHtwDöB]a*K28vg:u/d>(@y׮|]mhD$h7gG^Ol>apޙ1`SaȿLl~ Z9IPV/p5X UmJ%|t^-bh:_i.r2HE Ut 2Շn}' #J#b?S Lms@( EbPf):"v o8Zƒh(J*P ca^;gK+.Wп)DR7Ib͛;8/##"`B>ʂB_,|rXFSh2ƒ N{'#lGG-doTN|)ӛ("_VXo#бF l&C3ys uxDqъQ(5~˯OKds6 l2]hɅ{' F)'<|?Nu;C(v N@T6a+sVx Qkk0:@u mCi _,c'8 .AP=l9ccCN cu5<%(L}#zYk)~pݖT( Dm",ټb"m9^`f7BJA 㠃= mb̲;mɚi (u"i\ *> ċNpT ­.ʠc}OOqR@#ԟt}RC%IBʰ^iOSOL, yɧ@O6s6jŽ'̯lH P}_IDYwh@$xvώn볟O __YHp@ n١w. ш&$O8fxk (88.F07SLN'K/RGlWKBLb*saB C#=;>ƐkIjDġF؜$ȩ ٱw~ }-M- X*hGRḤN@^,y4|8:|y' CP4 [M$QaF"Ncb겣<&yP MD65G+;HK LBTLgJ>tsW&y.:DO@~?@S)(+09z xDQQ 8@86#N,G?`aZ6VTz*=h)?7G}N`)=U]7GxXO^/D4ww`}e:<"/t,~E*0Bï<?,K=}F|P!셝[i^(#U xthD MC,#En1hnU x1DM6,GhRGc4tٍTs4ke7˳w,V5C]G\n s=`Z&2mI΢;:oDcȞ9`Xh!\ I#Pe*BbS"IC:JHhs+a3\Eo r~\# 6a%R@ i7h1ǵHTqJX?xl-AaH!:Z`t+> 1c)ts)> G]yΩʂ"yC GcZ~m'.%ͻA=\0B"Xhe7?91Q%Q FNZU8P XCz0GHxLy!?_[aoXМ## PW@谷B6INI6A9<EfTUzpDY!@  RKOO]x {8„esntxɉ`OE̙篞cy1aYX_fTAp@u7JUL||$ ISY(/)Hyc11%B[!lB*KT?'y#R88'@D`c(04(TaÒKT`e{ ǔc6]I) MBg _0_̅NXʄq*[VsZWVtTpbQw/Jc (0C0^y"0 X$A:5jK] 'J "'zA{q^10C&@^8aaE8'O ٹrP!2JP0nɴQZ"ROSic躦6 DArW`wJF!U]pnIk. c- p:N2=OC-AxzL >46[SglTh8EL#lBHh{ʡU#GC&y1M{Lėž3 gBPF-H v?Ia;_TcLuq#\tDC.C zm(gg֗M{6PZ\t2L@!yN~Gx(AQ#V}muwOJ B(R.=XEoDP\EO LڝEvʈʠ_`yt}(xd'pZG -E Q3a >˄ *A9B>^QHDpBP@pdhMONjPGDRsγƞ;t810tt^7Kт!CG'%S#~7#ɢ\&ODG-v\P~A*dnPǐ3(svä6`gsusIB6F.X pPa #"*'H/6?a`8ZOOH?Hiƪ?; #gf"S )%Hlv9܃G58.R|N|0 Ѐ5ƛCv) @CLX J%0(G#%䑈Oj0\y <9wXRp/zVG%6ɄcJ>oX;u!,?lGp]4j"D`Јrp'Hi8۝.KaXw nXJ"cT<*蹟 GP K}ehXƇ94gHRcAX鉄W{YW)9Ʃ Bw8>Lî,¢{$*@,MPl " 5ґLռi I34X! Rj>k!JHb#x΃x,M~93#UNiEdL'}Ue_{xIk.̉C&$5{`~}T'ƒ >"A*h@w2 fsa#R*E0dQ zOp(⽯S3=c¨K_{>Ӎq ͆"aWЮS8 1j{yR!@ cIEau)uœP5"j'đae@,U4ý6 a~Jp)5za=Dł &'8BuBSRFH -Ap'"L2 Ov,BAiH6tP`a~ f'8XG;a,(`:S?]8!B Jc Q^:L(2 fH&AI!DK~dd eP2cRȭ݅!i !o4tYkX<b֒Жc|5%UQ]OL*N1#iG:kM2>8%Isjhi&KzKiJu]UQ\G( ih ~7D>W+/RR,q7u esպ3+wyWtHgd\OS[,罦lSS6ύ^}C35/fr&WVwn~rSv(d#|T*79~S {vlw#d"fErTutU*zm πRPJuժ]]H*DB7To~EI-4,RA͌6eV,[29ʶ-ZzT^MZӍxBL[ZUA϶Zrz Ql˲^@jaW8v̋Gjq^%]=CÔ1RsdIFSm[vb"ҙ8V||͢+ڐn6fG)%홦k|ϯYNܼ'cN^^}@ʶTҋ/ /L5";s¹łSkD"vlFU!k\898}SSbu`U+VXvDD_PXV]]] J8(/Ψw`Ry6ˋvFv*)20 ٯ.MUFuؾt$nL)]%4t`^\O@TG1?ښ]}oOFm;ܱgw/{Ev{xާMO*-RQmj^f}wo_Vr 7t` 3{z:"m51LQ~E@+_볓Y-rF(AX0FJj"r:&>hT-u5uwrfª &=499Cۗ>ky<֦bW 3eOfL=ݕZ`Õÿ̮Ikسwާzm:w+9)gPߊ{~meTqdb.޺brb:+'7CMϠʻSS_oV`rzf6H4e=% 0Vgr˧/_ t%:Ł{v욞n42Jә֖֖{48s}>W4mxxDOOwo_kTnIT"5@Аbk֮ص}L|E:SJߒ^RTԪ ؋4lmeԫymKd)J@)1\.Id1R{͹\Cط?:@t.n۶i?Ol RD(./o+½v}7s!0ufZoeIO%o}Z 1:}_Qt:ݷ\hq5=C03ʤ[ny+?_<|/ƢQ:'0@p#OS'5" UCXXAR"Nc#{\yUwn< BKI)T*TU6ugsё4wjL_{qjD.ql76+{gG]

PzoOkVdV*jFЩEl c_?@ )NmT+P EUU)ekJ)i]Ej{GGG[, 8Yȓxᶦ |rjIz yԭZo{ ^V{ܱuiO|]R脀9«ωvcR%mJ5ΰ۞et0lo Uc:z/n lځpk֎MOwRt."f kj@ҵ},'KwJ)P5!{+=' Lq>|<ըq,O}c۷l-K{(s˲,`g4 h<4-J mZ[wPU9=2_Q{QԋUpZ"@Ԝnoo.kժhnN;k=sV#L,^XQsQMtc D!uIo[[_9TTWEI0ctϴw0h#yݥ}Ӕn)LCwfkU/ƍ|,Tm+?8lY~Q><}jp;~g\ o!+ _)W_ҵѧI9}:cXpWBJۼyr]v| +~ALYa <1۲D(];wnټeùM Yd({,Q),m<4ښ"UJXuҧ ZUUU꫰[wm>;תF`Y_f$rv+v=׮:^#_ ljlxEZkiXJI%.N{{&xdtB=?x SfK=;o]N5<AB(yIiX%K{;|cok>q+r.qhS< -7:"􂌙L> D 3C0]Jk\KjBޟzޫdKB}b|)xv ZuVp1rULzيO?ˮZC麺o5}x{[qGwݕUUG,L.\ :񶃝zx#YAɔ T_R{K;0UZߝ}EzVH?óvT1sLϢb~\*һhq"q4V@2\!RxzZokpCk-X.%of.g42rr2?3o6^-)}ܒ^*ƣ=( u_{'JYǩaНA{"BeT}"䵞˺&yzӒRio[|6$wF ߛxXшW_TD:~xZߵs+(A^ѻ>[G:OnLK'*UAtЛrE|}%D.y8 [vo[r+*a/zI8wPrq)e<ӑtI[˙gTR.y: f6?5[vZiJ7l‘y'{ ;v6]SSQwDf.Ԫ I SS}K/a!},~m<㬳qv_W>'Zܠ-sLx 9oDYnL$;]Jۇ:*¦߰vh.-5YXc JyME]gݦ? rK;A= :0S秇313J#qYP ǜJ8WW]yo~ ЯgHyH|_9p0vP'R-ls^ec==ES< TAPҔ)jYV^-ժ"N`Ǯ]{gp҉| Taڲy:XJ50t#Ivk[rFOge_r /^IM< RAq!̮8}ZM[{~K{4gWj6W ;Ioc;VLP.ԨJyvf1C;0+^< ر3;7oֺ/>vÍo}{neLT"߷%NyA Q3L ?o>̳~]~ccpRGvM @ɤ]ӿrE&Len Tsh!(3TUIe2P茜/cizgUQzt!%]lLU4Cx"mdDKKk_Guppvvޖ׿,pp\`@tRݻ|qT,z-mNx"AZQsfR6 =\xjy2Mn#6TEHR )eҠ}&ǵ::l85SL1eK[2D!Mr_*us~JY* ;]O% V, v}dRU>QڼPȗʹm;ө_;G!Xr.DY LZWJĒ1CU<`CZ8$#aQ$3UC{qwMҮ@`UwWg DŽQzz#|cQ_{&aw=sO迱?Ab¨`8jx*ŮiYJ׽eȳbòrڨr9ӈkfPUiźT[QmSU=]׋r=pPݤX$ے]'F Bz%0z;d߷뱻g^uqLT^s+wWH6"R,9m 2ЌOl+f0f榔B< .=s1U\'!p` ikgےT &̱]˯?s`K7zul167N\mtY岔ܭVt!8Sl:u㾕/N{ /kZljr/?~;n馅B'k9'ܩHbeA݆K) لʴPH0 D8N~]'ǟ,k(VTPRJ V9 x!'2TƄ1raX ތfkAu ΉzVHӓt&V,Vl+ٕz)&Fh`{;I4spd|l~EMWUどk[>{` .|KoOn rp'2ݒk1-`raP.Cħ"ƔRꍤٶSbbJp/VsC]d\)W'~xBsccV,\]WHZSJxD!8%߾7 ' -u%Xϱ/-SmzFBQ$]˗sYW_xٙW`4 Td'>ۣl*NL#LQ$u h;u(TӆZW%RXv#0⚦y<x  So7JZggr?6oҊM54mo6BzD)߾uwbiHdUj;$P}p^m؀dL4#,Qz5TҬˮX3~ŋVdT#~QUV1m]_߽}Rł?2RZh$ .2jgٳ*FԫO??_<ҘU[yZsiq4[ge/~{rWrz QON7 VU%JtvTjŌZݮVP*0d[`łAU9weqƨmECayg)瘱X[K%;oj2Xۻaչ_߬AbmJJ1BmmMoo|w ;qHJ 9ڗ}֔n, |7z u^SK42< "W4m,̢ +ff?rӞqxJ$FزٝzL8%W5wn_ymYr3ByNM"OEn{67~V i~~x瑳j?3s+xq})PKjsO?p7o3,Gӱ^oSSh &ݘ6'҈aL2A(lGNNLL53lN&;3IHbBI"kB e )0*Q 0N1!sNϻCW,Nu#70R*WFUp[G=YO&H//LzUWn||#B\x޷uw߻^߽)CO-' bqC3ISp WycS xrexPx6>JV߶ʵ+^v9BuE5@k.VJ: cj,A+XFmīֶ?|˸͌}rSO5o8Cy{R[̮y`N@`Ӌ(osR4HUUk?Ƨ]}1&Ӣr bJ#LS}ƍ檇)@0*ߟ‹TVZnO䊅2#Fk|4Ygfړ-]fAR ZB7S)A,:N8c1γ1ו{vݓ7j_ߒ:+JTGgyxv+\+۷;쇒RS <0[,][8 )RFL/>-_V)@1i5KRͼBM8Du@:.P*Bi4‹Wزko|O.؀aڦ}&V $c)KgT=>",As.jk-ի Qu3L-GXTh!\X ۵9fӊBt[S;4t[k[OW7y?V<0V'SMm&;+Wݽ==sp{ygg: =v D:Ϥ֞xfn掶isSwϱzjݪ399ٳseK I2/OjeQʈBuQhn%9V/Wc(-\_ZMoY^KUo3Bnv)2"j\jY~._a4$#"!/oDYRnrY2,ޒIr6o!L& $ INLiƎ}\ d䩝 Ec/+'%)1X%߱솿z_?{GEq)NJeэLLX_Uꥊ h{{(^sK }utiF6e6FQ.M4lLe4lS'έ7t=^kG?Z[*-\ XFG t%ԤlU/ø)ٻkzf\rDm9g`D?YAkgAaf&1o~g&GG -em-/3TX.'G4e۾u\rOAK.~'_.tՑl{2سsJc ~~vyvq#")j&'~pWVZu qj#ٜm_K&v߻2Ru׿biA{ c1 *6 UU*PWQ"Cg'7ێw|\ܢf[N[ 7kPĥWҧ\L9i?~e,?Zv]۰<$ r~䥷oõW]Nz*RbEuw/ƽ¿͗W'Jҙ&۪ǴX&<8<ET:r/{zJU{ŞpOz*POOw3҉}Jlc9RؒLjMD<.;}$VUፚ+?zP7M-H*vZ)OP Qgg\v?f2\yY:@3[Q,^g5]%02<?}x۶?qp|==AX*8jB컘R}*ԍ#1A=Vm}.}wz/lJ  Oy<$ZW}y}H*#l FUv'N-&I`ᵉ{Z~kʋ#p-B(Y (W_rDnA#ajLTO} KWԿt\$BL@J915S^޳T>t^2\d=:aΖ @ ޔz(Lx~㢱BgGj=ɄΎOud/tmɿ}ʰkoAMRk˯3vwfwn۹wtǾm;z]l#wxB3E!<t9Py'(Ԯ"GpQBPEm3Uo꽯yIDAT\_v|n/jJt@X7_d|{?Go!W- mT&-ꪛII%NzjvlEZR,a =t$qsRƝ߿?<o8JH)^3pkKǓRpjzն.eꕢ DK=S[ ͤ҉xLo 5ɜsJ<bJv.^@:&8Pg{zLZoim*- )c?6u]miɒsB#XjP65N&˻/ieWk*7G4엯zۭy+SoufmO{߽)|l)5SҎlkgO*(s*ruBz܊XL1-h zVQUzT"UʥML {:65@UP)ץd4/(oxgf2*#<'?IpɉF[1g]L%Ё=|R rjgq?>R0d@MVcprPU)Irb3ZOZQ5Td= ]u؋jOfca(w٩숂)Q"X)g*nMu8i؞٤9޷낵gٛk’[dɩiD xY\'e^|C2D}@R|E`Afe::5MIPQbX՞8x~[7 S]$nUɑ'UǶ&gBFШq' đYN޺6֕jB<d1tN$XK(O HkQlͰEBCN {aʀ%k?ozzzvhsr5MTR*T-H튚]OLrUN&f蔪Թc3@Lxs!:1=1ӪՄth^8kv!_*Q=44V7S)MH0Z ?iɱgok7(fN5 #uDbKsխ5ccS^765H{}b1!ԑ|x ,B"T̡4@TZ>+lxSSӗeuC|Dkݠ'O1teg{}SՍ?\xvEPԑXwti1a#`,J) ď0})A"txFX]J?TQMm{|p%LѐJz ZSXsH+I(qr H3tE׌ٰ,"y<שF,iA}9O:>sJżBp*lIUWr bb nk]M(Cw}@abMw-]t޿/0hCv&4%ѰxAג,V08L2l80$`X³rq6m4-! 7lV,W*mܧo߾+_={ZR KwO&/Jh36Bcjr^Ṫ%'xW sV"C4S1 .MFsNuU8}U") !Z;;S+sfl*at]UJ$ܢw3Mk uu-9o'uM΅՚<#cVCI$b] 3޿mw n^YVp,9G J.{˛ow{/).?^d+p'AKr ^~DRa!cHDg5$#XJЧwI1zz2U+yTiYoDNT#}-ecf%l8J&2pD"JA"tUZ`"f-M),k | 繪~PzTab t9yR_pik> E*|x7O~>[ikxǽN$Gg**璫ēhP* #%ԱW+TA1ȯr!T}G|p׮]w"ӻR2Ftw.D+xU/.MՆISVH8 ,SiޕC?@=W.#>A\ S)xnT8'N &|ud2Hqb12㱶\ZRXLU[|H:mޑ-#b KBZձxIqw9TL1)j!TfRRp1B!SO/m1ӍFKEQ'O|xpb4տZgn7}ߪY0WK{>Ws"=Ab<݆TʉBܢ&Tt`߸pK BXTs\Bh$Ԫzk_~yTl 9>WI޵d|w}m3;zݒ> G&V[H j3(V:$|JBoC!xgL؎װ8CZoX &TрJ_ʇ, <] 0N}BϼB#l)G3--Q-[q%rbZmrbbU7[xbͷ'=+ϸ8g\xׇ&GX<` VmqH`fH2Jt:戹FX4v^!FJcةUQR ͔j|;u@NI,"DDUVnjMK[g<7]XO(%%hnWhYl2oO?#TebSi^n4tHPf-HāI rTRYZlH>T@7Rc]XFUfF\a@oKRM`.kl;"!+"~vgOR"HPsl8I_4j f3EQ^S* SzԵ\yEKG~wWnzÕܶdu:nӎƘ* հ ÄR(pyQSO>$vwGζ 0mۅB![J$-M&DNe׿nU.ׅ5 $Gt]ШlN@[:%otUH>󕙋V^{FSwz՗[_k؎5-vDKY\>&Z-骚JFCBS *}0$vΙTU/򜩢52-<_hjr@S1\ȃ;tSV8 h+r׎=tQPU^};GY{KTqJݱx9rU4< e1Ji&ٹs~-[u*0]gsͯwc^% 5m#bTA&Nw3svk'EokoJh3RC{OUɍUo1]a mϚ0џ+~-A)BPLW ]$J` knjk\*xRɕJXi՞6 k1\ BDLanjZ&HXL\cޠ~Rڝi9t8}}`,^:k ήbnR.[v-fmXm)TsmuE%k5+=At14? I?Ҏ("-(tz. b1uh|c{G?wk׮d21ЦM.]ڟJ=I_~!]h GMkNPᩤ'CE!ҥHvR?ۇw6E}K'fyWwtJ4"g•5|P$2ԇ΃zlߐQb(WFTlaXZkM08a)Q+ʵjx+n24-a?ݿs9bDC>!RgfJ㩉 NODL%3eeUSϷ-K4UOƘl5`|rd<1A]i߱W($Դ.y}vj |]"s֡gh7󪪖J[n嵯}Gc,:"GsuMknn%??7פ^ORߎKñ qk1R؆׽g7l;fh4;6DK?{iL@'0#P1y=>30VgXJ8_jz)#HcEm?+}Ы89T*[+Z?407ShS%]g aQ-$4W.J4cj;CSLRgRIݴc]Y׫0PxvtG#cRt: *Cf _p=1Y+Z 57UkѝOtc~נZ:"j̬WmUae1f$c##zϻb=2;E=cﴐdv'զrTDb2c־ޱMGᡉ-=M/AS+[]K>Ch$ɏ|#g}>9BiE3܌^_xџ3_V{YnK$/;XZ Uz1ԋ,i9 7iG6;o}` @O%(17Xʀ)Y=#9)ITp<3`Y3̄@jin;醋)!Rd;)MiTmX:/T5ct37T :hNj޹Ұ>W^+|ϸV$e]|TY yΔ) [I@nKo:>8k=-N˯؈~`5Wp==4EeFCՔF7x`WjuڔNwLfűWlRbʉ -a;S)t"/ 4E,-Ehm19U=|3###i>۶m !H94+s+/8OO>@8`A9Q=A8`I=HBK]E5owGŨ0B/\u_4fx%`@$}B_a8fRLs#)3jmGXSh{+WޔH].2] tMi "*o#+ԯ-/ \^ 4J L $4aa;#KEzlbx'h1%T:+eiF~cvck[ X&z;[rkV®ّIZjl AcbjTctjddt=M)>:>t=eK4Owj?{q̆+53Ӟ$TV2dpEe*E|͚5---w}n؏~/|Պz\-A"y.$yc~?=Ͽ-VT0P%Q% _aT`)0|$ Щ&H%PFbIw)?;28nX8*J=<5' ˜Re A"LH%p#Af}rd<3hh?L0lh%RanPVUgκǜ ɾUjZI'F[6o}j5_b@VWu;OL8]3/o6;]qA@jΛ BV$LOjs#[$&S졲ML#^&*{w1ռ]hi[}d2w!8ɼ5׾wu]vz:x BaZ_+7F$M,igJ #)hPZOV }zMuHL~П п 8 AH&FR)T:Z-|z箎EKc13iRNj:gdg Hܡ31EWL> ,TU 21/)'|Yc+p5/:Dxs7d}_5p40:1]v=\vy5-: Wܓ*]Y)}ϯˁyn~Uk\<}z8>Hr[??+lqLHehЪڝ[sfOeňgv{ǝ@t/M%S J5/q7 Lgū:`;[Sk <{ӛ}ZreV[|9B1~,/b.]寸伧?M<طhHE`P5=WCW^S0d±/Ī=_Aɺ( =;;[2,;#XNS,cfZk.]zb.B!S W(4QyE?[:CBgT)35/Ƹo# .1YCgm: )o%ZəɊuyz"E72y:й"T8zK-߷\Nm4Y+Ť{ ۵25;sy==-֎GwoSUگg N@,VzGtSm17%cӧS |ЙPi. z{{w}7(J*Z1@%o:#(gf9:]Ƨsv)KLI:Zwb&GX' JEBoeMX iT*lm~p`h$N0f 423nñ [{vT=Ca+8&DQ769Bݧ+J<ʩP((u*xks3q 0жYP[ZV5ߺeKkuߓ"Kg AnJزTUU< >0ٽ#Hs&G_Nͩ&W5@lXЎuٕmL)ՆsC3Ã5US"0{Olr./#ww͎? sGE:5`nݒ!kz Pܨ 0p5$h N-O%wf˕]vv UK`i7gbjaVe=WXi}?iM"\R{m] |b!s-+TX [hp`l:]{]!Uᡑ2?:ǜ@@ŀrDZw}?X7P+{Mff;j,mGܠ2[nImgҥ˖Y'v\`<>6>:9off>պO+.Z8JYsqO{ϓOgF%lFR̭q=傊Em&F7ohcD=51w_F(ϯ~KRր%83Fӣqa!k02sëЯN(d/z8H`i")Zgcdn._˔?w wiH_w#.ʓ.%v& 3ŵ`׮^WzidBL gH"dLiJDֶR1)j .j-seUց .r=t7"U3G0+$q}$^ti:**7wMwct2TxV"C +F=c9n宯~i嘩'Dbe>ޡ!5k1'0 |Ǘ]rE})UU7V}3|sCOOvuvOLN쾕OhI=ښNBjW]kB @X p#Q P) ܀C='m&_B`ƋUWZ)Q<3 Я"5]5G iG0#tQGssKOk[JŪJQiK:]ɕjmiusk xΧ7nkl/ (*AHt`Fq \  בu78(-[V*lێ/4$ct43;6ۈ%{k5+ᣣSܲW{FƦvM-R4Ywxpht΁t8fWJ ˡm۱X[zSzm43Ҩ˒bmtB(!HH&lHa1ӌlY]Ցϝ=SHSevf,8{.v@^q$Sp7qtH eٷk6B8+*[8u;EZp8A:1612yJ1u]ǖdW33S;fgΞڷww:;?/?A5\8T @8isQ@e4R1pqpvjaZs'zy֪f;eܱ{v]}*֍\]#Xeᙚ37~*Oy8EAi(MMMz=GSWƽ{nػs-7F7ݸѹ t4Aq9hM7ySyI( T Ͼ`lӼjcRva!92)PཙrGc篝?rsh859dIA4 [k4DVxAC((.0C!)s hh`AZ6-dg|_廹Fq1m?~Z`8c4@*-J|T P\1uγ%c Y`h ̀4`vPj | 6H)L(g@TY, mr LhV5ȴ?s?hԮ7n U-HFC_RzQv= B8N͛h0~ow@u28,tddB@kpu<Չ3+/F4UZ5* 'mp\ږP /W`%s DpW*.Ϝ=lqqsEL}70JOGt-jIL0YHeLYk`˒',]2L)yHxvO D40 Ѩ\WhJ`蹮6mn۸E V2V~b &=C/@Y:*?Vx.j]OTZs;\7x/,vSLYZڏ}x} s@_qao.w^ybc"7[V(Ec귑گ9Hb$_Xh]!/J++""( P+ lP ᡃ^? O/}b+pƦt >9;g3U&EDe&硑VҒ Dn,՚RJ@Een`$y\zsGBح* v( (muG RH(1=53>2Ή}:Td0, mt2=+ 9;E01y\X}qf-J]Xh=jV[Mowp LG缹0,*O+ (]^Ÿ!p j\G_^ާWK;:qyP喑9 8 Awkiwts"IxJf8ifbJ!+%4 $$ԑ U*l,}D#Ep޵/ 2z *2A<.tT-PNFm&Kpn0Ȁa|U Nmk6#*0dưjR!& ݓ̓3<Č0'z &`2qب q'TR ,u#@Wmȍ'3Eb{q+ 'F+K^"z<`S)%eZ淎x܀%3 `i7i]{c{82|m bP0/̼K^ [#""-ޥԧ ,6AGʲ$C_3ލ8ߥqQpԠ+vn1n0G´+;>!H9VXKqS]x<{ޒgF*ճqI(lx< '$ !*S9ԞFpsseUӟrDΌ Xgvn5Vue&7DˊٔD`}8`@+ʠ0`e}e  v"LG07Sa!B X-5Reb U,F)E((#Q|LfVMS&2?wUTq.p[,LѬ2 0zS}x%~]s/a$jC/F&MG+}#.#ippg+3w`4$d)}e߸&'؜#3.@;m=@ +䓟>py9mƬ2$(HHgRHA*C0M1c<H)h.$vIrnR[~ |pǮ}3!Ft5ϱ W3U(o/m0xHy2[ͲS5jA(ACȭ , +,W+ \*8vUoӈ4LC&0b gVI)ۅG5"BCeqIUo +- !߆] i V&E5-:eChJE&6?|$Gx//O)1k>m2w*![>X&>䂟6Ʊt@ _SU&o$2;ԜX)$wlǕhTDzG)5mBu u.r!amƱ5V(h/JbLrKĒ1=E9Dej@%!@UQJ,D/孄=Ye#ͭZ^qmÊWWwA zA \F@H ]#&xF%rY8[X`1 9ę.3Gj\xe|2t\Wk]tANJHb`M[UaĿO?GBaC ߈` aӁd5-C> )AIHa)*Cq]6OzNW ʠ4*Z,W9B\eJV,!C {G0A(Dh̐ Zѷ1'p[ iE6 eo avCvE##DN193573kvbfzbdQ } 9Y(FIk1!\"M466{Nc2i1P u_*AReJ(N&3.0/!7QȬRY1ސ|SR*P0QU0W*fSϵ?+J! r07^mj{!-,.t4m\;7L/{pMq=bT|'J|l)|JASkut9lOuzP6u^HOK8R:*j@XX5bhcQR_^O-=#'BmGy?F?b.e}_#m<"/BΡ>(p1<+OO/!g Ȅ@Q80 (PB| Q]pKwSh\XugN1Ro!J,i$}|LNQbsS$Fr4D*&sˮ \ k5jp!7ɂsy G!D|V̲l/vufS(.R6Z^'bCϴ=oÚ JX#;udFFZ7 -3Bgҋm\_* xS1~ I={Xo\io(zW鍶[l~z>=xy7ֿ㶷_.4qb1zx<lK2d8{IUESAFRnquJj,v/P1efw vNȴmLih$|UyLvsZtF))AI i8rtjw*عc^spJcmM vFT ]Dn0_ %S%>(VHbU̫p56!7ޓ+瞒CUZckvvN7G?tVj׼61z ~i;w^t;2 nӍΕ Lkeaΰ uhc;?XSB|‷z__u>ڏޱϷ&|hL_T׬F~.Hм9Jbl=FBkihD6%4hǔ[0]ƪԩ1ϥ0D(2J$lH!pDD9m%ZpsCA\f@#jafq3.#agCnlG h = HK8s/ zoJh[^WfCY]14 H#DIy#ᄦ!Ru=) !%  h0KV0l PÄ1!:%蛇-Ez7yb\X&hQB !3;f|O_*`?kvYoaA!//q5?Ps>L+,qKkc7O<[(x'Z]ǽe`'1EI*& eS]$')"*ZlN9txec7pg zp+J9OhElPDz|eU`4( -3@C(`[t0M߉f7" )ũ6(%x7kLNQ, nq/Æ3TleEA{-b X}3X`APi`g#VΆ]"jJ]H ު44q@˜X3t^BI85=.dN 0DW(kK~_vPᷳy GCe ޥF=āC#OXtOL*|t1J@g`ꨆ8¬j:h"7Iph38ec\ PA! (|4fyzVᣅm/bFJezyx $8l؇ݝBP% n6\Ftn,hQ:+d -t[Cm*`@rgTwq$6rp bQL±fma/ksg7ܰ!eP:r￸R^ÀV áF/}B:?qSSE[w=;;r&R5LQ Pdya@Ө4DXiG;@B1VdY豱=^~jHoK($% 5\԰Ș0)dZ sHS0y5R'OLSP]R*$|e\ڟ3 *=t4i݆d:'&.ʇhqBrBkBsB-)Ы-_' G(iC-""Bz^s65r{爥"@B'%5 N;szAI<51ef\{ceptF('C!̆p9(豑.>#̫ֆNQXa̯3Nd!r:JF)L)st=AYlc0Ͽ:MQ)Q @?Tx[v;= 2oAZG`(,S efﶝ7` `{I0*5/j4S?p`v޹ 'KbD :hhk],RGMς11cIJBǯOX#h1-qŔA=ڱ 8GR\+ \\h2ow/XkhVf<=n6jl5C,>~j[oӘY}_x];wڻ;rDh8oG4~-,xȥV`m#>Wض(uuQ(~TZgNiVX4ׇq,899iӣ ڝG8U2 ^gk\&>UРZhY@S8ֹ̫jMb9pLRv)K90dFjH4^%RTA8}Gyo@,I V VEo3ma!*^ C0B3u?̀bыJ d?Ϳ_eƖ澐{e^@EbDzymΌ>qCДA[z>g0XAMGĜwPRΞwaB7"H'Q̊Pd'|/Tf<ǧ/-Yz.!lA^Zͺ^ 6<7pfӛ\gYgq>:{gGf!W`ð8 |CIPEhy#͠^OWDI EQMBr_[7>{sKMhߵs s'QL 0ţVs=Or{wȡx-\ T#ZH#HJ*nGq8:y8|,`6 Ji3q:RS"k9&}Ng4δz$䉧0 'c_ cKEb3R{&qZE|.BhN0~K^AŌ(Ff}'1qkn<S:?O1CYqJ5EżF SCG&vNpmM@Lo" !;FظӨ v5@5DTgj۫Ze+BȢʐ~YىfQau5ݏ~>{w}o'^}Ż+/a $)(` &U>X ϡqEC k:^(1%PMuqP=%\!dc6.LZwy!G?G6 (s?R>/mo2%I4&SR 0I7f>/x} c>'..qXzh,uJScffEj͙É@ 0Aj;#_Qo395UꔸWȸ> x4\]ߔ}j6y=mi0)\v"-RxINxjo/τX?N2\7 t />c|oOpG?;[oU?pp{<;3yۡ#j^s]zܨ63[-XE_m%/h 1wi*s ?ܿLN 4P 9>wگ/A,gTf(M+"c! 6%]N?[-yZ!󋢝]y%]3`@- %V|i"> F`(PH 6zD3T_3ǻodq1yj%xϝlu`eXn5+L < Ӏh:sXhtjGcjj  % >J)TȜ"+8PAدT wOGac|?wˣ|6NN4F=P˕R@l(s+n[TQJHiR`lR5E3X 'ȕ&/̫y՟y=E" CmA ! ug7##5RcOӿ>#d!ySʾ-k{]-B;JljqxCp,/dJV|ړh.6z?_Ցp' )%V!(8XTY!8ԝA256vj ʙu'CY!Rёzﵣvu wlQM|&\.tW!+}"j ѣDpAGT)S,{e*fGJ?dX#ERx7TpxcfC0^Ԓ2kF0/F\75E$*9;C*xq~uB#؀FU淽 '>o @o)#TKK tF1 oJ)Vpܤ^D/^ "+cf!yzn4Sc%qE5̅K9lA[ʀA 䘜/  q2yb6RqӪ3!! ARrmyu 5,R"p,M˹Br$H`PHN̈ȁE4157 ;J! JkEVH/X>)09Ҭ^ SKQR|6x/pW .pT OkHN|i=~/|Р "g9o Hh)OG("f}1$:\)vbI@x^Q;YPׇЄVV`BJԖNAd_Y93eF)>hPԕ] 2zhOlA0VrE`sV054?Ԉ\ +\渜yOlXXAZ,)H)kA" Dm|'Zl,n잽zχu?`-mMcB3 20hӶfzi[Хʡ@&b 37#q4B1d%pCMUg 9^xT]~{Tδ0GD '^/ Hٍ%sl4.:N0`n@`HImB S'Wf+J)9ew0)AZ+UBtTq軡1yJ:Sc^oqJHYK:OqyPJ!}=nܜ~cbV`$*bꄜm%`:;f(I< 02Jx!(F|iuq5ڨґL391@$ {lcCT C}N[sR9i^y{>(8H ]Z85h[{C$NBf4gvVF!q|x@CFY4~~+EԓB A?J" q&8C 7yCH.Y/ȷh˾u'.ſW)#د0o֊.z̓*X$AW4Z-<.^(;hyʲ,t`J-`] .h*h4"篯/?QŕAwt|w`neĎ'vrm~:FPUFPF_<щTc*`V|hGvN5-}d!P JJ! FhQoֈ1R)4M۽9v|؁[4t N/ tP܍/=ҙP, - 1*Bщɻ|Ҩ >u8<_:&$QmoP~4SkQZ<’cV `n㸴4m)VEDfzhWfN-&)ֆj \z#_F35挰B:1_!IKvMA<)&~ZgT:N6\$ 7xkjU URF{wSY#Y [5q E/] ŀ'MA5SF//RЃ'՚7GFy8 W{3[`)Q%kQij( A_m-E# 7..u4 *lMܻb{] CūʉghN"q=nbp"{iE?853V)1\l׊SWڇ;ȈʳZz@L/sk_~ hе/jR -] .lqsՒ$M.-^)l+Ir-^T0ʲ )b$B\qʗq')G:ZzFQ#?F C W0U5Ъ0=I"@JhuwO|=wZ.DZXl*52Dz[ݱRLwlʥx $J1Ƚzk} /~ި6 k]¨4;3)XؗB[nweV}%U6\@Rͭư[PtV?QL,ܥY{G`z.VFY`CzkJZ]MsGfğfuϿvn0 b$v<EO!͑l ڷX⹳PA(` %slS}ܓMRV)ԃ5>~jo)i_,>hC7~蛪c㢐h+[u)2ؒ 1فI,T(,ȃ?~6*>;%cӐ k76G]~S}n.g+u&'F>&dOȌ޹~v&`۲zc \e%py?[ކ ] 1xְd?2OfP Rc|P/"%gΗݕc`Qa{zg6B|$ebJӤTeIrܩRo5s:!1ʛ;Ѥ*q\KO$ V!7M#,·^:fP#twM-uf0e4Ӄ{ww~I$RP5kIU u_5۝@+Kum49{cuZJ MVz ; }}yk[ ,;SmpRT"-.kXkv&8P;u Zek˩Y9HЃ qn9†CM䉅1K P*7dW*wqā_ƩTj4*AQB8j_w0֛}<^s]/ wMB\-) Hx<q'lF y\H4͋҂2l|GLVJ | j3}w<|{搞Cg6ʈAd|iC#e{jp&Al}&ջo=p|{fv:}J~[նp0 AD3 ,;/.ui.۳"s{|Ko [~+zRFvՂ:>r=ǥ  +ORFk!%4t0Y趟_<(K@ l|TޠfI#+4 ) Nx Txc|syjDZ"Xm̌<K"G9h(O[g_XЖ⽭B-` p1iVo5$kXO%&(1`&FN}p*ш[%b8ܞ@dIÑݦ?8u]uD4o0y^}%ī *˯]\mػ_V~* L+X Êc*HL-T;$6:%ԨMՀ;q( l +j';}^ v6Y# L\v6\[_CժF6ZzVbG:nE"kf3%:cㄠsA"EA <q7XB4luCWA6fQ5왮{$[q8'# Vw=CZX;H7Z ]44{ 2!Ȑhc5sC2hԻRԚ@AIk> NL׉WX3l p?? [#z,.}Q?C(R$1ZlJ &Z؉}zP ;C LJzuRhV wQWsOsĆSZƾzy-u'MIwkB&*YRH[i  ">;wם7u\P%EwW̝aaic6=RRV S^|VŸR̞!=p9x 4!y p^]I--p-Q4L*GVg[ 79={+7_{ YAuYtA"n=Y=8F;d ZB8UgJXν,"H *|nz^~FP AE9m6^^8 -f6ɳ/h]͎4F) 1102bڬWj;^\dqUƸ@IVV*:`9Z؉f5o@QR_M~J6Phc3'CT<_QZdEO:[VK/~āyo!PZN";y4BI]j]'K"q!~^șloarS[nt|CDNOӹZҩfV#.?9rbsR{a˜ Gav[aWMŨD{ީy%H<ԅ@4(ho7'ܰg{"eaP(P-{)#PFH*3L28R0VjR!s[+`;XYL\N)~}cB_øQ߉3;Ow|ݿ'rw6s9|r6?h`uDy}[~ϸ^p@k׎Q+ Yi66n833r}V eP6.8!Kz؈NV;˧uQpƐQ`xj5CDB0GXUWF9OsR[C(npj^/Zh,OGG'U{h4<)x(aW;A!o(Mn̾[I/M^u?A?q@*mNbRYγ6SQ܊Db_zQ`tB :v17讀X@tM{I0}C=rmHVHU*wc,?'P˸QtKqy,rY_l޺pBș<'kϯtW''$L&~5Ѻ84җΜzr&|N&R P )J[fRi滋O2Pg&‘~HZC,8sY@NVտAb7 @aY"V P&DA Jw J0PiP)VYG]b)De !za1gsըͰ7ݢ`z|_ޞ?@x[!ờe BVu"eI9E/_3jQƥM=تk\lj3` {ka4 ѠE[s<gdJ1.5R[ ^H'TA QXgAm> -zqEӪ$!s=A+!1^뵻g}u޽hz%v(1Z+F ˘ ?QLGsqvo>2|yA  3G%oȿS}_!PƮdFM2]Pz9S :AEZ65Q/"O1%SfOze/ ZB{2ca[9}dtI'*@Tмcjܲb$IsWG* GLkz[``/A(Eu`9rVxRJXZ\6V-=J 9X }cF hP츐Cgo)"9:w0Ϲ]A'%'ȻvOZET5t  TBmUXEVv|3A,w,_-xqvX3d 4✷{c/.(r i p(=/ygs#Oky:;MmeoM L-RYdRq<] % quY`PʣgkV( ]^F|4nF1B ^bS0(A,ƙRg4ٟWx;>81>83x}T(=o|-~ P=`Sucv}Oi/oM:h5 4iQEq;0YD &z` {³svҿ/zJQPfv5J!vTTKyuBv1vpǗz_R>iMl[ET azz_x4w,B#:U)ٲϭDQ^uDt e+BbZҕ`P j_d͌+g>[XjK?+o^_BXCx b8[YL'B*lÞ#5N2@@E̾BUް޴Fy*Lhنk&t Į龥6")TcQ1HAd1i#Y |.v\WRL"W.ec!2On&C9rhic8qq൲ R2&u]K)ǶC̋®get^`p["!--1 teNyZ` @OSs^RI{ We3ўà{he"SN}! '˰P,`ޢШ[1 NiWG7Cz`y$HToU19Ra<!eTU}b22ױun0e_ %gBW. 0ގp:Nd8ij0NecK" VZ[:[[27 I,OmX-bP>;a Γ lL iB !.hD[$? |u|χ>Q%hRf@:R%A3JЇxz\ *PU5H>$&`YI]2 oBD0CvJIj e?XrB20:o_us:{#lNzgv|C߄c˰ڮmrʕ`a -{Ge5l&ݴ=9Qw.ρ9ԃB V9Ŗv,6>LCǣXC@hހpG髬dK (t988Q0R,w#JuB8SsrH @&yv_.Prjopydg-S>, R~m>nXYZ¢Pb}F͢-1VLŏUeu| AVЪ2PJ7:}~'D?|]"mu`c[]V* }^BAM)@ IȚ 2ˋL e>: [nUW3”r5PVCֲJ lv!8 ͣ/Զ }xZV r58֞f%o(fzjPE+7G+nQX^ZLFѠ֠nٺ9vR@U֦XkPVOeLSvgL(R Hਁ!D+\ \NUCBf:133qTH!Uga{ii"`_]֓%`CwkW϶C[xlj_iA<  rX O4oS&N>{|~ĭf<whX7rRm/۫kk??1WiBoiyxJLRPSRٰEr<3@RILL%6`IsKǴi0_EJ)^?u K|:9A` $ݲ쁨4@^ގ&3\iN _O۽w;; ˌͺTѓO|>[{vЍE`~Y)/  /P WkDN%P =$Qkd8ȸ~857;h?r0D/e@1@G!)~)U*h] m#hJ Umv>*@A#K4HHBZ N:~۽|-ߺmAOr]MWO};.;˯ <6Ƿ|G}}׾3ZFc byiR荞=FslD޷ж`P6-wǮh{c'u5Ta P`xH]J]Blƶj}hʃ_%T{˞c]RmpFSN@T"DLp[4MRqtԐKhݘJps쿶 /2q?z% k,/NN-z΋S7ntzƐ;zǂ!MmY.&[-$l٩ mS5z K=}o'^RFə% a6Rk]Ǩr|B+m .jظ Vϕdl Eb` -J } Iix~7F 'B(-Jv:[(ϔ ˭o>g+_X[דoWA+`쭌W_{e㢇]n ǏY8o Ǥ,5yki[腂8v(lN1r?f4S GD '4.s0_o!:C _B)Hlxu/+j mZbBŢe( up =AAEX$7s dآF8(Xt l"@$:Vh20X~*EB~w7;51SUV(3==8rӁյ̱W-l}׃p-IcD϶aM VՖ:D((afADU$O\a,2@f8+euB@\1̃?6-i J,m$ZVq†iqKDP4"`P0JCBl$*H8lu0HL5`ng[Hݯ|ͨRYur4_~pos_NtCJJjYP(+`Z[?-lY9h.&U{3EUy5HIքc drPs5ta%ỻp%@TAN~}zՂЫ$I@(>>qsz +]sA`(짥),d+tTLn@ud,lnJ>h&@bY߶-L=ﷴ_>gvLR1Wjmą'X(\[Yr`<2ci3?7Z*E fgD;;C;r_6dPfJv306dY>K8gq>K❾ґkNKr86YlU?2z"(QPiM`L:-6S f4B?~C?lׁCl!a[ ظZߖYSqK]wx3z_~r߾}N?/}ё]iw~?KH\r =J[$΅J [@ix F T*C]D?3QqU[mo#ynq\Y[|3_ߊ ̱#aZ!YlfJk^)TSS1e< iW.6xmER*Zk걎`:p`B s$Ƨ^zaKgOQfz%IZ*B,Ggnc7AV6+ڲο]Pz7#F4: ؕ0tߡ={)3}\i6%ϞyGʼn1oń_ZM5gpz}{w(=P4t%e#h{TɮaȾJ.,P;)8\ws3%BW{kss4Ifg&op4- @0m[d %ϮVt{1ʥ=\S!#~-zo Ky,в%Xh~A{@4-VCa /~7*8F= 󬽾}_|?`jg iˊ*& 08x3#敾 |T8Z/7].^QH^e xy&XfN֗>neS?W\Ӎ_yTUO=<9rԉ<N^ +~J*ڍ`LpT^\J4hNTC_4N1j%&qΰWqvJ:eg~}FeyM'Ƒ W\x+i~+-k-K[JKA-6H+h)fq9h4^heij:B*H9846Gܣ+#DX}]~q|ļL_<02=WXW?%Z& }+>]ys̵.1*:K0ypm7,5}JsF -@ GWi "x #`v8N&ް?1;nPE`ՐRqp]D)BG>_VƟg3g?O8|❀(s[ieHP{,cnd(+K!ME78 ͆qg?MԀܵG(1 +<ᓠ|qDh._`u㷾?c { Փr (lVҖVE}}}q WmyK 1PET$vHҧK8{vTg.,,+O=r8tiic)AAq"Vc ˋQkQ>_]m={u] ,t~ɧl6[kkO3w>Ar 9f`ee9eh<162Ss;'p9EvsjU $fgF"9zurX-Im`+ 8k8me{M~pf429]cؙj{m{ +u*R_r*)I/32ՈGC2(ٞlB1Ҕ:-Hϟ=$"F|,ɓ'LΞ[8~s_\)jHÉp@6ՍOsJda'V{n.(j9xԴ(kUaÁ}gtҨƒPC\DQ{H y/ՇZ [£F Q,<0iTA\C 7q=mV6:]$1+$ ̃J)K!FȥdwU8Oui@Dd6/|\|>:,wzwW+2ڠF UUO,,Dq'FF*[z1s Dp% 8ctW!*bӧ89IK!'ƛ~*Fimz3l!ylt.-l?x6LڠdB@MSomٰmZPNiʰmزzshLDzIRIY)u]] F%D./l A.]= [Pb0egzd;nF"X,p<tI"26xྻ^~F3R%:६Jmˠ$qR +cJ%˳ ,WuqȒ'_ C>6R n=t:&@IK/2>1y^|BgjF HQ V6H#:w\]PꄾmPHK|S`TB kęb8>@чڒ^K"MQ:c!\"l0Tq9%+6(ȑL"xI73Xȩ|a퍬PkN=vK Lb$^X^wrS.ZqA^;Pv,7rr|ҭE6qʳ=!ܿ/|H-JE][ykS~Ƙ CO+KNxxX-oiA:&CoB~G0k8?Hc`9t.Ǡ9aQbh(G*e6٬uE7+] 3|ȽΜ sn1.^魥mx8:ښtD!Vz3~^2jr3X$w1/zR$;T vil;H;9N{.RaAC;?䛥Rmw~AJyiE(KbQjP*Cme.?a  fPQ3ʱOxuj76=~n^*zN󫌥k=R"!Q!mQhBMDN`/v p@~OcE.QTɳK ?aݗRDQ e+1{'}+_*KOǿ hΔzJfQiQs@W EHN\\)'k՚lR_f U흝ƛP΅c͡ ؕh{|R 8!FqE&X΄T`/_ףJu K~cAo읝8qjX: <Ϸf<%LJ[)}8@`kM㔀iTutŎ? )`Yv/xYu8xM<ʍ*5YP#nAu쁛n;,Q^=xY辝F$ƽ/>s$(hǑ[GD%:%ڊ<@UB xY(I2ʑ]'Zw(ᮝ{L%I .x L"`n<5+O=c纬2^zs3|͹( dұV9vVCEsB$i 퀲𡃝vgm[o4{8:lapwҬtq4-cz \OC: N(3;;$F_Ѭxw9 ҡDqBjJY?2[qQ:Z); _ln%Q7_\{f708"E19TR  G iE9 0J"!Q!s)ec>ÞX:ͱ]3?zΝsW^;30Lfl5lԏ? Jؽ {Ϝ_i`i`i{Y^&Y<B(,|{лD"N8-BPIe?sT!(dDc#K j@ȯ/Ο+,m`lj5:gyQ(g^yAAQx4BU!W @|[B!Kؐ/w1.ϝa}2 ~'\vP(e8D`ҢPgB`QÒci# lvHƚ{3kr'& $w+-n·y\ D3BR`kG`]<` bu?dP.mnM`qJ9UzYR6}/H`ӹBc;L;3I? J,HF! W _ygy r4 o6A;<ؼ"u.Q?tWsΝ3ZaEj==ɳБnTy]W׺.Z l^]X91^2U77a^zCVE9~f"O;a4met!]$%Zd i~>M_<|o8=Y,d\k1]v UͲ %k ,Z–4iibtOxozyG-;t{ ta\&\sL 6C!TwX{4ߟk~t2<+) 6AxE5XTןk o~ .%[nf >VkjٝMD{h% / .P"#k$ػi{reSo[{,{/rr:u>,W!~P(#6~ޟOeU17(!Jeǧ֚hßx{ak?F՝ "hjs1m ?j5|v6iSXzڻ?$*R:$-.L/n +G֋W+_}doU흞k'9ds&<>:~|CLYk4//hqVT膧[@1 -̎N7?ZWvinl?>m[G^ t2SJZkN@顋hjƦÃ},ͪ%</2)TnR?XA n+HGoN'R⃭P|`0_4鉡JVkLmb ]1 ޜ1pmu\lL,rLva+_h|zz:[~Gxox]*=| 0Fև"^bZ%q|f营\sXX$g~?K5.!~zR{j}i%D2Ox(ZԴz82K@LM%EK!uBD%\4:խiq4k`_W)lj|5ej^lTiZpl|1G[|:OU6Aʮ5<;UpC!hpig;<{6ע- ؝љ.hy6NH)5bT22 (y׿y/xyxRoΟ?qc?bYUUm4"HspJ0;IK2o 3zΘT*W q~W>Xd^M^ze6"gF<)҄a:cʳ45)`l+hx?lk9GUMJ $D%&!mA͍OhDao0676hmYkdžL-S;`SOh #1?Wo>CID0B R%V,2\Bhy#I~ÃCxc}3c1-&Op17N%42YT*|`sO)K+b| s`|:\WPZ#4&I bgERxKT2RB%PmY6׆ŪY,Wv.< C`Z1 u4_59pyΣ 7,1+fl#Ow$I4Q 󭛶i6ƮV%(9'E]}3_ acֶZ f`=XO$'''ӓ SjE 4^[wP L'Í "Ks ҢQ&i%A)h kAlnM&M9LWi/y~$?crθ EV][~W?W~ROW;N\nUYQt_Y{#)''._YN٤jR\{ir29 T1 -hu//+qgcz>_«==w) `KF>\(,P}Q*WфїfFo9~1|?ʬ\R3^59\l[aE% ^M)M4^!I6Q ^iBp`G:W%~׫qS))ML\^NImý7o81nҺc80$1"hwkۦ.eowns<򜭭N p(,7I!U{dK 9{2'G_"0)ܜ/ `G6Mku= |ypgVSE+ょ7zE0sC}DHp<~gy.s/|m|?맓~qE[XpvaÜт{/YЙ}z5ypЏyȦ0~  eC. }zާ|l ]̽1J&"] 7\5l$?w_\pisܯ9%vg}_u Htk&R6/Ƒ;X" TAi9۶Ko BF=tAO~6LNf'ܬb5g\޺u"Hh>O\. \&1mk_4\Qm,_@P-gU}տ(X%%c~inդISHe9SYB d59]WkHQYd1^mL*98C M=>5BmmDr{/h(ə]Wj\vi>}ZI]Mt7QyPb{Y[4 c hV1dgSRMT"Rexȇ>_Bkmt2 |vs[og}:C1d͇{!IX4Œ59O'o?22,_lpw V hWpYz:m]Nb8XTUdET~92t=ϯ %|Q CK|yK$<!?x5`,Ouky(ʲ Pv~}kK;ϼv}nuVk,9s w=z[Ww盺cIxҶiYs9hp+켮2pjFut,eXg;$YzbLhbNC@1-ڵC>/B~>xⱇj6}辫Wve"%f~&zO=;%T椏5Dyo^t:ȡ9mr!,!Fp ~U ?9(5MX|~T(Ab&DR$JGV v݄Xy|ccsXFQ}|/!ȆDa< -?8_]8D%*h>_&5 +mIH0%Շ8===y+>[R.{'𾫗=886}Tr0Z }&, a(rKc=ȏ~woTHTHgεW+]VӶmWf9L{ZN+6~8?zOӀ(b iS7.451υX.$IbQVG?HJ>!3&R$"Sp#5X7'sE3,cC3/RZ궪###""~bz0c+]zc=s/~ɯ$eٜik}xu[`0A^Z( Hɡ+"}]WhOpcHIk D1N~WRR!U~0 e.c9!x]!!5sFhԻxqmm,1#<|d,O S ^O/kDd!(mE_Cej#ERUUmY'i&cC3 d}4\4sئ*VۋνK ZiSY~|zx<Z'V`+;./ *$anVVǶMd8k{;g2ʦ~X8d,ۇ_yJv:/󷿲5,{8}r hԍf6iVG0;w|\w?_>k!>=;ה,.) 9H^pi>X)҆WJK=EYnDuk}|텐{υ'.l}+9g|E0ݶL#J1Gp'w=zpT-mڽĝ;6I]57:qX:ucu|69g6Pty,Б/w2]'0wJTuUӚJO8?JRzU^?pK/_on=J(r."_q)|覢ykZᰇlcέCWJ}]\~RkZ&VMMt{pX.bV/ԳԳ\8oAzxBG@a ʅ-&IBZ"ZVUbggG)12M;-AZiVC6-!!h!: -d/CL4T$'ƒqp$}u?vV G YxQFdVwLizngn5N'OZՔ*-+׎x[=˯(,ޭ 3i`3ĕp9Ms[/W<_*snpalTAUhT0^EhXIuYhS7+LkW˥gnVι,Nxз{7nnSkrn hПά5,j*nȎF#|1_-H3$7A Z<-hFކ2Z7&#,n[kv6o@TD澡ٌϿ?W7l|Вr i@!hjs{5In!ޅJ%Lsk,>&^QIIh;)ф D$$O 4l-ɪMdcbIhK W!O ~eq=f8%D 304HgIY /hãsW|먩t.;<-A:^|Zo1x8 K<QKc91rEsƛ6C]Pڶ 70@%=h'J"adW$֮,:Ǩ!({ _Y%VӔTESuflHZX|xc@6°rOLOxI#8|Gi䛴8gS? ̈́?q`<Q[A(T ?~BkH8M4! G Nlo\]ӹ6t#DkmakZ <^"ci^.*(r]";6NCd5PkT s8a}%gkɅdlt|"lSʢcd#|҄D۳zǭTԭAP O8%qI‚a˦q֫7ۧf|[)RM#'#"1OEz<,avT G[cB >/]tJ1d:ڥ΢+b %7u s7ܾ pFjfmmz,nmwp?8=kDI:4O.zĀ۲o{9ww-ȧ>WP,azq'TL m +%ʉ`lBY(~s~<UmU&Rq.feSѶ$D2k{4 xa3xK$LL2ve\oP7X|nl =$+(?1 ]e'q|X-OAi gV9ͼFXzsDJ/YJy"0d"ኇr 1K,8vY]h!**ze \UuMa7 trKd}nDR[t딒C[0vyC]wLw}JN?~hm]i_'p8B~&"{E }䍽ɤo_fj?״VHÆHJpT-Ə'BaR0.TOM*R*²v`c><~^,X"|{1_9Qw֡zA3bO"-4b|sT=$t2Rh q1dL8/`rg1L0Ä 3Rؖӣ{޺"cL6qRWnZK9.` AbU6m&w6n4qX-׭ Èw~[:so[sw!Kry߯^ޡbvdӏ^WL^%Z(aSGwP8ڐIOvsI)*"4OԵsl^Vm6yHC[| 1KDp\!.F ORRɵ\ȁYf(K'3n6뛣A._Jޝ2ثEuggI:3}xhHNzU:͸_@L ;UD< # gcgmr0FR$\1hgh8Tp!6@wvOݍ\Aiz"U18A 6)OmSKL)\.3kk߮g$m·,%}w&PJ D‘m;PXr~ȾkOsq-6Q0*i)|y/1JɀE$#炲:k[o9P YB. ɴ)=n7٢+g>,4牔BqIU[*KB{??9=B A)_j`9Ǩ\^a 9žjw;V8z%%r=e'j|nC )nR"|0׍^\(%02{(Y *6oKtZ-WEZ_fi6 (9p\%U hihNŠeOmxHrIn?"O"bN<.SlFKB10ؠ(JS$\ʥb xG7YgADH+4Ɣmi3]{O5Z>*1'!Og]䐇iZUl{u]HC&Ű=b$#%:,U̘E:>1u  #f=ht"QGKj4 !(P a&F`fLc<d`63m S&,:vJWerʲ,Oѣ0~N@ 9HkuG-ڽh7Y]W`X U ("wtL9۶GG777[wCDKp`P%an`hۣF?B[W*<p \YIyBgIBiIژaҺ+H| y b=X{v"A0f!0KOJ;oEF9VE:T/[4Iq Lbq/"w8XeghY&D(gkpoKqacmŴKЪp ~F>ŋ?-VuYݼvJWuuJ@l@$E]{o/'j3zbE \B" ڳ06a|D`PC:SiTLs)Vn=~ɪFK623 )T\t^.|^ x|-X2qZ#šE4uZnE5ҎI1WiY}{KR [məu~-ܘC g`#!L7.Q"yvyczk}Cf̆Ax:-udغEwFI1,L9l#j )eMS n|?kr-@:[boZ!T4q Q8%`܇X0Κ5@ uO "$"}8h}N<^ )zX@Ia4QIsn7֢EtJ"эi'[wz^ϩ)c5}g  ם8C8}'J _qZ-^&<]@SaGIWa@Ҕ9!6Zk;3XZ6E0gg%F'ktT*/Y&_.J7?!ZO^T: ukʦJmBԾfxE0Aɣ!]&5c &tBHtqY8sZ@6 \=h E)\"T3D D"O7_<|G~'G ?*Lfp@=88zAc1NF` "2V@\X[ x @SQ,F"qU`-ݘ =:L9W,6@|0N dvtOO|Ǯbzz2y+׍J?IibjOWƙ*oV&׵'48v+8rg?@b"m~4}wǃ~Hpyb;ȝ2aS8'ph d3H4]'󜧵IlЙYImQa6Pdz*kɉ޺h">Mb#>FxS(V+f 'XENT8GNV:> K`v۫Rf.X"R?(${E#JrlWX,Cb`: I,SoR~KuՖM;EV>X[BP5NZ̖%vtq-&ii=ˠ$ʥ[o\#}cH4㰘U6dbZ;4Ԟԏdm<e qT3HAM ܉BFm,eU+ϸE C2cySFrr @S YĉuC_`̸2$$>F _K@xK5Fq3 Z=^tosϑCK;'Sź@ 9{xKM\&SdLԇ9#&E 7;z#$琌y?c5!D'h"SJ2A)uѸH7B; h `qh$ N&(1%yxkxL %8,T3jֶܘ.M8eܙYKRV֑Eٓ$$E & ڜ?mZZ$B% !D,(gϝ8;_WF[x=FWKywʈ$88+![#AH.)UIVH&"p]Y+uy{  -{zmNa:Z1ȎV 7LR0 %y6bR16W8j;Uan _ a|G%dED$,B>5t7gj^VPs* I$ W` W[muHDiXPz-uhѓϗS"I=`9R 8U\)h . &0KqfyZ͓䁭tmWa Mccܑ<ݘpME U8a;ӹsPyB%b&'bBxcЃpi"Zkǹ0_*UUDBF'o!Dth< P'6u]kb 1WZ1{ Q#J"R]Snys `nHOU'pխl}UL eb…l }ADyE3Nm5)ժ@JRpUikLrjV=f~g+[.'ۊ$=iDJHb}z>&7n񅧿~ܿ$Z:ж Ltq𐤊:wx)^WP|<mnm8XͲ,<~$(,%Zgj&ы.gSxZݺpK+uMt@"͔4GtmpE lZDkֆxk{Gf=!ZER D{;_7.kZR9PgyBm]ӓ{`{ko_ycHnrQm\Kh87 y4\t0TyEʔĥJ\fq?yZ[Ǡ4@9)0W2M-Bzc*IӪ֔Z!B,E/].*  }]vPUM+F+NB k 9f9Xżm kbY(]6 5wJ|_3e)Qed}}NkғS\F\?TH9Y- !Hp 1}Kts6Jd0a&Zۃ~ۄp|r(Bʂd>&4|/M$heʏ|6/\^\cVYZٱZʴ^-TO*T׫ɱqoi[/%صs"sghKOt11C6"8産 Bܸac U߱9 &JSnAM^cϡ . wn7?~7xW`O`ֹ|]>͵>_@cNX"b#Ѓ@0q[cc-TiExɴ1q 0 8J`mwTP0,-FcjGJd<7_<'e0Z .UUᓟd[47v[| XO}Tiv)&O |fbۖ-0ǽoT~yg~7鹾OPe)3e?+#W:ZWxw1% qcOaSdݖuS%RY6% "4mT5'puKe  ,Oe=Sf~{~}=oĶX} $#~(Ѩ8Kt 0Őɞ_xuvtH $nubnYL2$ѝqoU3A' D*UʒI/[SIkN|$2TB:XmiѰ5oL:INj4IU"1O;c Ew-`\&Ci:3䗞yqԳjw|/?#YC(w>$8guQk@"YAN[iӶ T6Mwh'U` ˱(FLʽW<}Wo?kYYx4qqcmEb hC)m[2 sUkDp& ]WwkHΏX_ң;zò ߼m`_6+HBl` (ir7Ay.KQT*fFt4魚B,~P7+.]Vإ+lE\v^I% yլ,`ifrmȳ's,ټr(шh`Rbas#mvE#d3C(x/?u5uix+O/skJ~Nkٝ Y\G, ٙQ. Vk.3k\!ؠE^:;N=Kȓo_|7OCw/g]Dg,qZvp{yM9]YlIDN$hNZx9^*&`%RRa Nܩ^9P/Ҝ%B!᪐jHq$,dH2K tIנLyZ{@GbF|@1Y\(BL {\r5cJ<[yh{7-Ҷ_}[W/mj/v(Dq7F <<<X萺c S>PDA\B70Tw$qd:7^_7N&OOfKBTLQiY/ A8/NG[u;o[g_ߛ@J~ 'ړ>!$|YG#@u(BwLPq¾ ce6w?;l־*HT8L dՆ׵kO/YE/(g j,M)E@2$KS!`U) 9SE"^3Z%Q{8P66ɢjlR`0M]Ǡy;+70?iFSH0L,sɊnA>J{&??^Os\ri&Fk[_z˯_V+(ݬ$FG%br"lJz-&S";QEU|Ų3[@%cHXrFE6`ܗ>:}j9U0%,OjC~C"/Q/Oǫd,[aec P~'Tчej#[ZVz43룮<[^wMmR}@=_K2*xCޒ٢}Z(I ;!p!pq`˄|R;gª͑'DpB{kz MKTj"u mkƂxdQo^i.xXFH+2<;}ΫG_W@\-{'?oR ƅmL!N%cL h*Z4gRpLOOO??g'Ɩ'{ͧ{ʆi6Fd>;;_>g>+O+O ^NVeYtxhճot:g8Ds*cdnM3Z&5Mhx{t6AD?Itap3h.h{C’AQ{-)OTϏ&)H [΢ԙL[ܞ0s*Ɔgܸ>>j>=9:3=G8IDAT?9hZ+5`1V̺3F 3l[f5Z79Wiet$mgG$1u'eȍ$iҎ/ѭo2ϻa s+dž{4o"ukBF9u1OArrO?@}3'Hy0"6SYae`4Ѣz{i{hPup< t/M;vڙn슆Y}g^\d5on:XMM$z!,RdR//]i1rY֚7պz__/X-+W_|irrHf0;=Zf4?ƕڻWJ2RKg.KSϿG=x^J=zRzSdywzx7ȍR´>%;o3 aw;Gc9F)AᏦs0ձa>)b$U~) jk rP;U b%\;e5, P>^U]F m9y!.^T1|ztA8F4(&(F%%I&B:յ6 pb& ='NPoA A1'T@$%IdpVm@p.3W\7ckk_^9nmk/W 7f^9N&'%}~:Ǟx0ƪƯ (Jnکִ^!ALjD!Or;19#w+h@1a".(ҳF N̓a;?d_1)Հ_寧vqx!O$3GyK ԝT+X73 VBvxf@b8ٻa51!(JE[8bGw#B uIg23u|K}[J(Ԅ-0|k1EPzEX Hx Iy6X͓;\?Y[[0y~g, / q|:k͕%L7@ >sQ]V[L XM?/jmo8PFİ`+|2E[ FODN*vw{&e+/w_[-$\)%X<|iWl;Wõxr,~*"2~ՃB%YHGG=> ;SYі|^N`q 8[j611J:ja<`q B8lYR].J$ТMbT <-؊`LhtdnOuR?*ώRqZچ ۊ@!kQOYWW9 fW.nMNw^@Zuwů*FXOU;7$DK[I[/ZuyZNOee֕'?gG?o_ϫFlʧoNA6ղ7Z͗?=^nI>WxP|ދJ*$ٽps77GQ 'dܓqڝmҳR {(%  $~oFۯ̒= ]Qf# esPs&\30Q=MϾe4ZcM@B 'wjWڴod#˩Pmt$D%\.P!9-DHE"PGRpGen0@>F?JnkVR:HAPTp?g~1ξa=O/M& *MMЄ3N41j̇"=Ƥ,&EwJƽ:}A?рmζ#G<ekMD7̈cp<25pu|2T>>^zd {K`Đx2zo*rEaPށԶ?g>RiySG">>{{;Hy_ S/v!_1>zJw~̺캩x'~PHJ mww;ۈtnGIC[kQBK}Z\.\򑷯7ٗ/5ӟ9W`za~B44_=oڒ1V'MUZ4/|`qz3RS 3Shc0ȕw&&p+^?~P<H94..2{<Ԕ D" lx6zѵJ 1 Z5nm 8Pdj !$4 3o!IYhGFvg(Uc%Bvre ҹwemo:zOWT;"E `#! *ZR H76I;[[?t~[ӡC'7yFpO^Z >Iy(d'+xjʲk]Wdf nn˓<2U#TFdd0a:5N S@w~uhx!sJQμ~22%F;<#cFA*܎SF1'gwv́{8O߸W ׆EӖ/LJߦ^vy{gw8_y:3?Uew:}m@ KW..Ų~&CpVЂqMW[4vwpf0m=Ee:dsHPld0.|G 4SKhxu<$)Hd^0bhpCq Pt79#gtV]{05xFh3_~Ǟy֓_IY?O~Kt t6 37R%(ymLpb{CZI'?~3'\_7Zz)oܾzqU]ݾ}Wojjo}DI+'on릩 '17DGi/l6۔1Uۅnx\ψOi [, 0ձ&b Ԅ=Yz`2 qx {ac}~B 6IgMuz|֘)ʕu-Ű\@<%S kJ{I/I|˅(O?~Ν-5_9cYg>Ft6څMk8djg[gY0{'cUS75U&I'u^ޛ$C&n<:,vwpe\Ub |H/,@kEpєm)|]4,"HejkVƴ5J0%GӶ4SUҺBA"FѴtaXFDazT!=HugVѹ~w<,IŗF–~!9!q{i e*:_e(THDi2m 3֡rBYMaY:FULVo%Irxxϲ\pZ%Y{rڜkRΟ;x4n]ZQk8%+>t5Ռ4YR?|T2L-X687FK3X",‚(Ujkt@0 4ړi{=M#Š%iWԵh2$/lcݪ12-5u.r@%#Hidi̫'մ sCD1<@)&œlBwV+-Q)BU@ˆh͋xo`| G+ )wyCsJN`[-~ lBȶZ6et1ƭ%dX(9TֵYo7%*M,VqZ-tsA~҅s}k6ۑ!"3M{:Znn~oݟ>tZ7`" OHI\_/^`{gm}h(s QH@b'ԅv!MJ6 cyr?{W D8aǵXVw6K>P ^m:1ueSg a^^5g/H{=Af,! ,,I>Zn3/$N9#MY7[ا2EhLƫW+ LzI UWoCxo rf1HYwo[ zF܇ ՂԪ<82YS/YR$LNV26^.˗.Ru\t`9^;8ΕˊH9X `_di WŒ D/gq y FU0%D**dc4<gkZJ c}jSdˉ|i0ոSU B.,}u!\a7!V"BDg4!6Yq_Qb-]n{,i2i6N]=96"m*szY(i':{|c2mUx], x.LQqngyV.޺u8 S.\JÜ1.?lop1(|uiD (i$mЧ>|o=io_=:ϧx\6.Տ{/1ti/%%d>Z.ŪY.=<)8wPu:m]WPa ĺAe瞭)KlE¤-]xaO8YO?"3\N$(h&+ZFh|R[]ԡ L0'&8,m#g wİڏBwmH0}}71?JL bzg^u0X# ߯o=oOB?.0%G䈼A NzyYʴ2jm]eBJ!V彞#B(˺m5:{R76A&ZƤ@Jp:;{|`*D$-2pU*~`aLaړ)ͦRXP&Nn􊼟(^}nܘԫeYUU7ܴk><'ɢd\\IVꋿ??#Vm1BO0# IW" 6SSLenэDMaRF'mcρ! n:e1E"jdXāLZdHtew+.&~ɎQ%FRDH# .!eG>??]HؼPB4Ip&oH'1]Ҕ&ᚑG,1mKU֑3 K=rΘ4+<'Z/ne*,C?|UUpr.MS(S(uzzs=X^rӥBeh}|r2۹8[.''R $b8Ey\k帏l4G2[9%6MH  H@Hl'qzXU>dD@eKnvҚVJYomRVu S4gPKk̘YD1U]^dCDYn& u"g3+\ĭ# (C1.V7G}ɂԅ}W/7,kKi Ev %VkTTaJYbGKi#jjDʥ TytP*9kqP(TmH=ͥRɩӬPRMhcls4 rߵ|~rr,"+eV{dzduփ <~[|3]2{twS$Wۿ\J|u&S T5D%UwYa0.z#yI;ʒʄqs/K= E0$T7XvQ\6.Q$0 .pG) `F0`1Fm!WCA )‹/ONoʇ+W}bOot桷KZEmj盞Q 6 pHƵJ0g܉p1i$sIkX$Tc!K[kĘLt'Fųo,^yZ֛bYk1FqmI"N{tYfi"-⒨Te~0jE;t۷;lQ:/J23O{̰Dh Uqi[lV HrZ.RH VFsεfU\!NHP"K.I""R_PעDWcZR 㛖<%ŀHE3бE/,鶂0+z`0 YE/X|x~W=ůWVs~BO&]L2ɸ`m~L4#GVSrP, l%i.,0ZcȀٵ8rPl0^zzasD곯}ŗz9ۦBcL41|͛lX~MAj~~<hW1oGz0(>3z~.@bm߫wdIo֑w\S]2^#VM95L hڭ>/> $bz༌NYKfNdr(SG D'-Eng$1<Ԃ8o"3<x3AP*0 ,v};*f" 4X!zp}lПt^1ܟ43^$Y58s'~ږ7cZ_I4)Cmyf1K8EGx[SyxRp~XV͕ 2s2O3448 U.^?MkB V?x9 |UZ _}|쑇BDvLL>3CG/=wx?Ws=Zk0`x A^ule3?7*m3udFt^YZ84ed5͐#/ Lv1@<"0 !+2=gbVY4W. xt>ضKa.UE#6bdۻ퓇zY؟ޞ"|?ka=%,2Y۶θ4-Pyq\ ܙִeLTb& g\i6 EW.,ڶ؀l|9O뺆Gc2[(a-!j\Yric~+Ͻ_ [֦W"ʪ9^V/><|q*ۡV* i`U6z_o]r&o<ѭ6~1 1(j8Tr()n[W!@'`.2e0zSp挕,$(: & pHW/+( @s(Ki4Ρib0DrҴnķI(@n}|(M"!0: $I3M‡izZ ?Q5?g*+]#NQI9y0 43!;y< $#VY#L({W\ﯖK\{MUՉRh0<C>~ov㙗_}Нglkvsmta}Ʈv\{04S NQt6w͈SI!)^SVMOHux孶Ml=_]96nXm+/D)ײ\ vK6U$DU;k8f˦25 @Y"^YdU#R 2.JSG_ݾ5=?|DO aH0\rL-S\sY&u nxGeam*M*FL*G39mD.fj N"P0Qڽ"bAkDH~N-R75Q#NlsRY#vu&EX OԍV*]\@ņJlT-' A4Ps:&iUa6l)b}s'MӺ8g?=~_;8{AMtUVhKY{ YFlj\.9ш3lon/W_٠-&H\D1U *)%*yE,Tb$K6 Uf ĖiZa5 E!i 8ฎV! s6H~|I' ڎT:Xo0,* [#I zQ0a2He ȑAA|~-|1ޚTYdEҤq+*˹޺{! ypX eeYU(>tB3;8,uYZgUk]Str +eu'N$rPdw6T&Q^4KS^gfe?Jꈾ|*7?fZh4L,e!i|py(%'M$rŨ!uM>I($ޠ 'TdXQl6 !e/ -lv<7x1ml2V\/jYU{ҳ 5n9^KMEb4DDh=id mv^. uuUUU`_{>ȩNr=;`q]M꘥'$cZ ІF, Cd5 o 6u>h A_7~\DP̱mr@,:DPE\k51A!70DnHcNxZfmsZ΋ *qPy^Ւ3z: L&ejINңF\d*h*y\`,7{Y?3GQV׭.\[V+dzu Nb5_"Q΅i<+~~7S^]J[1CߏmJE:ۖ(YsV7))abREj55I_OFIB6Ig=ɸJjyPػu,B>-ǧBώٕN:*K (OsrNZX-אA1쭏I".Kj~jM;^Ce E>IA$I/S!DvveZ-`Go4&EH|Bޱ]_$;mZudd˿˟gaQ/<| … yF#94o$ĭ8F,JZL8RZͦوSbl,'[Ivn_[pBe#KO G r0[Թ`E Խ-FI//LepXio85X ;6 z),IY'~#39ەҕ.VM3N'V4M/\|@Y6ݵ|&)wbB*>V*;<nma s(Ptz,f!ZP&ߋXp㰰y/ }؉c{+O?}rrZn޼iq7F΋/}O?O<:5J)sg B#[-Ej)v{d5HT_4 [qHAtgiH?˝o #%zk`|hH=(G1x7]]\U+%P!ū/s!R$A'j$4{n~x8-W ]>3[`0 K3'j{k+ KG'l,ʽ._*kY HXrNdg^2Ϥť FIIjӘx<\[Ǿj,My'`{[|o67o1)ߍ40MF,lo^}}M[<` ɯcOq%+ R:͞|oW]B,nݺ5_z%J>^xᙧy믿C?C[[[_r!:IR:GH(<ϹSKFzzx\_ʭ Hդl~?g~OK|8e6pN'\&r`*,gtQ7(M9o atǞ WH9wk)EU!ռ<۴~6?5(XVWM\Ivx{; ڛʧaind>>~ꩧEI)gYUUoߖR?'W'|?w)!yo?I*R* Fc\py6uowm-մ{NNRHė1 D &Tce[ Vbz Ye^!9G+>41l*E顥FTk!w^`}^xMY% 'x 4vD ]5y鬄>4QkTj>qzrtսsUobzZYMH(&'֭6ѭHryӺTfkd'z2eލ=/zPJw(4ŻHg%I~ -v_//]~_"ϾZH2e$#qy _,*ׯ?iN'W..`͏Gu[e".0'u!X"MSJ  I-i^~7`J#Ec3nߚ洟_ڸ=oynuчFEK#ex)/EQ֞R75TW4TI?Dom רw2땋t'.#8/Azqn]?:<|0"x%%I;oll^q=/{8ɮL+WuNӓQE$ @cluuf׬Y ƀYPP#i4'tN^; =@X]ի{=;7lI8p)V^Al[ k{myk߂/WeJD(DPccGi"fEFV}ܽ{wRORD֭^MO\Ro}[˗CYFa6CsssڵP(,]: $K}U !l+V[38, \!JtkP׉Iު9m-{`jQin:HDM?r+RmCژK{:W'@ x4&% !61Vy6d5XaH04I"n4mysr_I({ݞ:-PS ˱l>wf}#w?Z̤%{(e`s%JE)y񉁡ehĐ"R΃0 eLM=f݈_U3a822x TJvwwJ%u9|+^СǩT*NwtvQJ'2 |׮](c'e_uJQLLF5ԁZ@&%B#91oȃx9ah0/R3s]] ١$d7[{m߷ÓKzJ!%490 D !'^ Bg^/<@mzI놽Pn4A*5;շb2 OOM>æn$TtT6u4{:a*.el.]Y5~]wL2C8gQjv|($HgBibq$TNQA>z>=2YE~ ;6q|i3euww'epp7 C`5MPwL^{ XfeYiMLDݩf9===33jժqIpgH隝+X°Z)$kr\yQ)a`l[-mr9\ƦG!}J`"#M#יstwpziݙ+V4Y")>Ӂ@x듎t.MaYf;y˯nٙ::;nrU*ӕHfKxV {Nre:ld6ҘZ.( m}{XT\[h0Yyڋ9j QpPHjocvD)Ѫ CdD4O /"DQ-PQJ(4–,YOJY,٬m[԰]|T*u*BR믿Ç=Ķ#GX;Q .T+ahoN:5;* R)'dY]5Ms&$o۶i1S?QeV^fxՊO8蒞zϤB i M,]"b h~仡WSo7; L:t1e S*'nf\rYF9kt6F@s*2͹>tywuTm?_JQ*UxrMkM>6A$ qU!xT5= l\U^[#bnnva`u}QHw{&?wT.4!o4 bxVb.bҩxS ժ"(e:O?b˟˃WQJJY|G!35E#=> Kc(lJ 8h4-炷O'U1P9b)t,- "fVى S6 y'!t!#.?r$fS قc 9֚MOY׾#閔q2=ݝ$ &9fhNI/=@2U^tG}[4Zz[ DSO5zOvE#cㄒЁ[ @eE't NDtҘDӎ_vJ=t,Q( P -nLL =# A,|1&Dw b۫Lt1SO<咁$LR- H>cf[{Yq 9۰7+0_:ožߞ'4jeBe&c7X^(".guNM`剞ek8װQ+?8>sc[=801SV%lR^':'PJsmz۽M)va:]!$O9'99~_s#XP5OZ '-:l\!m?s 8OVfS3v8MKდ3ete2)KUfJIX{g __=15ɯ E^)\c>\lubpҜ3(.Y{ǷXz`I+1*#_sιk)˸}(t>|ϏloÅt=CÅT5jZQƔ)gXEq؞C?ޙ3砓 E" Ɩp L&^}ALw57 Xd1 l+ϰ7tbXTٔM䣿#)S̻5 \aQ(,HWt*۝RQn7L7I\ճarɁbǑɑCS:PnU;)]"R0K*s#,",hBwM#=?bDn_iU(WڹBԜZSԸnj|>weJc5gn-#3[]p&J t7)#ETW_g+ciq/[ttr@ Srz|zH3TA*!* +MK4L)eYV__߶mےps8*HZ8(혷閈5(ׁӶ>(%zTɵAPXHQ~FQ>H0nV +d:OB׌siP1 vG&ds]<*7]\kM YSyAp RdY6W~f=C!>ߘjL(B~h#bܑ#թUgDzT]rȓ4m f+SSN+u@Ce.Twvӓ;vhk,dF;jz:U`ql|\T*tǀx+>ujx~-'z~-ۍEU!  $CM$ *ehy\[XLs4h+guEq(y]7s4 FgAt3 TYWOݶO h!`# /"ΔnT_(,qQFA4 Nð,V29N vr\[nk$@ Tٖ=Sn$e^z-5ɵp]wa.QX=X%( |ceg/&p $;AN>UD'8Z_8( pV @ TlIi<׵ vRT*W~rydJc Z5*<7"Ofٮ2y ^>2H癌;KMUڳ:3REOwVDd}( ]I$l5H[Xx Bm9ݚpn$YoOR@((kiZ9l׾tʫRm{.[PW815s%3eSE $lϒ5g9㮻}rO13C$M!,W*K;5lVzE'zcrnX0uAi)nJTA˄Xʬf/ꂩ(=x!h4o߮ڰaæMb-F#&EkB,Yr lGGiAd2x)ZZ)dl$AոPWQ@d0, Ap`Tjٚu} 8,R:vFcb5\t.^]/!uR|c_1A`NO4Ud<}Q ՜˧;Ө73nzs'\ %go^|e s(T~"& /%OmW%~W b00.a92)Ejg҄2c)`3 fF49-pV)"lPe#L|͙/w}"BGͷ1[jpS`eNNXhi["hDEJ9벟:wFZO<ޱ(YG^Q1] ŷ//^vO?A9?333sOUJ||>_2L___\li Zm֭#w_^,ϙ3;y4L)?ˤ -1ɤr¬NXiNpDæpOG_Yna:837?Å "kߑ;?y+5Qv4DfRo[v-&HąYF*D"56BH Lcb;Z>瓣dY/wٹ W ,\GiepW]Y_bi\ʦE4P O 떴mX/ty,d _҅9^hЛ-0SLJ1>>nYp ;Nya-[6nקiڲe`NXr㌏wwws={=׼ b1B$b6RF3*ՠS)&oȷ$PJ RA>`Z* ö,)H!,ʍf&BE;?Xz֭usB.5Hr*R+/k:^bMy^6-$],0]F&-w/Y$X0w Pt.;nAh2&! к@71%5öag~c#x(T^$B8X:[|y&IR^Jp$4o)qbqу+W.YDQd&1M3, Q>^l@%ciפ!F(p1$΍Pn^ivsq(pҮBnүzzt;F]1qLKCϏ4):;} ݊,`FrK|߁ՇĪV/BXmxaiRØH¨lwdE~Xq2lJaVriIB fcOQUVP9zQ|;@lժU333bWu\m4|D MZVJAZV,mNCTs|Rt֏Xꪣ\v[%Ш\mO%hTPutBMI5V.={g&+TNPRJ-R9"VU1j6 a c䤬BY'vt)sH] -G;BI jd``Ԯ"3'tLJٹl`-/E swYzyOofמ1:Y tmѫȒoҥ۶mx&L'<ϫjiLR :Njڵ^bK0Quvv4-Nk{Mȳ$Q(WURt,a+QIB&I82OZðUki(l]Hœd_x%@c6|Pe披/bϖf}K DRN~&b-"QҤҤB|yanddmO0cV?}+4 Gl(;ʵnv*0 |?(p~!uS/ȼa\.{ckL  0)e"u,aM:_ L0Yy*$~e @%1ju/b=,8 {LFrP̗5Z * q\r X"|RAB2CeBA"WZ-jue,nӺld:?9_|'0b*,7^po)WP։s^$@˯?g(Z:3f͒0l6;99ݝF*z ܜRX,Ū9 ]- K.{)談Idn0Q(3<+i DW^]p._u+<3RNv4ҭP&Oѫ=HFfZjf?oM:)x-ڎ[TuTh@XA|uB MLk<.Gb||b-o챇=5>uWd$28 +/utsFm: ydx Rggww/"l)SB01 hXEvW+._Ðap('QM*?i&ӄ!@$q]3' $bX Fu MW cꦞ8 z/}((dGIq4~8V[UrthDv֠<Sa=|jrЀ="ДŖfb$T=19ơBDVدCe\-U @sz3`j]v&c´RoT&shl{4.x ' Jqto'XA/hd`SJYfnn."u ƎĊ@E0GGG_nY y@+|v  Vq00ݢnQZۦvx|Vvo;3=;HѬ P 3t( . ؃ ܭd \P*[˕f}j(CPX*Zym(ONL:h["0k*@QH H@m>],4}R6%<}ezK2l3CF̲}у RV.>ӟd*Յ/gfuk5EhmMyf#@haDpOkuE"A.4sbQJiٽ{~~^wtt-Y2l;m;. (Ja~^5qdy)@Txcn1J"#7XDRǭ[-,̚=ud2i F2 }=7k}7=>y;u$yZY| ȷ+W7`(nç %_+Aip[~Zը['[ VRl6jժ{<==חdrʕ+ ÈQ˗'Mq|(I0e x% 4blݢ:Q&F ϪMt]PߘozhmSf֚5"$u7J5Q_[4D_*eiҠ@< +&̂-Y}Ś O7@`Š5~➲եB2LgP:W2tunv|+BPJ%Eׯ[Xصw7eZv*W_vֻriU㻟|>l-ttToOeUkVo{r{@)+Ieh1ӔܫTf*s1b΀g" @[A'_(d "E/$%|º iYV\Ʈsa&4Twt ]BT`ϧsO1WRǜ3 H:)XdCgmH.9FfUܯ/n2t,"E)0TO-$<9muZz R1P<ЕRUFFϻrg/v7I`H=1& rC`=uB_0щa`Umh9130=;CkCqw@\.uVZ?~ "/yC~[zM7Lk2z`%֚vP(F:p3옛]hۥR0u V\w;ޙ+rW>.[A&h4~ j$wuu]s5ƻzt|u%|L 2)djU+[r@rtf:va\^q Bgeˆ \]x>?8x/?ˏtF^V\z{iڟgSJ ܹ3ir_Ş={vܱaƞqZց(7o^rl*Ja&b9]ƓeD`} QkF!ړ5.'}US=  [%# !!"C]g3~ӥ=RC?˜5` s*+x1bR*"O̧<t3J OboNEs!ILAK{Ů޻zpt p ]P0[bEb8Kou2vՒ>fE7\$T*V cΤ?(˾Ǎq-¬hP#!'WZvyeYX~8 Dv~J\T@=GZU8`pH mΘĸ!bQ@, %(zmt (X"PAe? $D1+.uuڙ,f8!aQ= ]*{D9g]eav?^V3Wuz7k@z! oyG^[f@@F!C)t;sڠ!QLGᾁ|n=sBzV+a+,f2L={k?~С@MpE,B~)H@=󌎎j5Cz{{,YvU+Wڎ+>QP*Gb ٬"z6ݷ_W(e2<f@Jl|W!gB Ƈ! ynKgTpSdwP4HAsÐrcU8 oトǃj$R0pH=eHx.CS!؆͗E,T`s0;{nmjؑi(`_vɪ.Ȳ ̀:%RҴ3]y՞]{:(RĺMu8%CH2B;W0O8 ۥb!V|PQ'>}$+T~*5^ߵk ZmXbٲe %0ǥpݞ\jU"2pzŜåRXWbAYH(^IW4⌆it7Xz 4h h3RmŽHʘ#Z(Rv0k{# +o^R.MJS\OTkƪ3\nꜷ >p-7}W~_]Ij'?{/R p aY544Ә(hh'!y? 6|g@y_GQ% FHiL(QSȁ2M5BTxH$Y "2ۼυeAU00quxV"j!dGp)DH69K.$S-GHZNczw_J|9|;fgF .sY)ekι'yOO#nV՘ Z5JdY `T&䊦iGq`'G|t43hՊH~r0aP/ ~/W. fwqg?7M˗/Y|<NR,7 ra:tL$/yM"r~dTH \[S({]/(H"k} %BKu ZI{#(}1F( (uX# :@!Cb+C*-DnMNw@)h, /tnR@*:NZ*f`ص{&Ƴt7aR=&H4Ztk!ٳ=;䍴Z!_(&[}n&nZp>!! 9iI:,兙Y<@F)UpTJB4MsǷ^lۉ___>/ry!'s-ef9gyo߾իW kV.\r]vʯ~0!a#Fsq " e@}yDXH If,B&@d l(&E!PWg6Q4H ;x遡U\W*CNOGo)n:(X*Q <xc?zW1$ACAEXٝ%T,Jh"m<9rpmD#GF;Hȴ!PeaAfpFU⻐:л璷o_vօ.LnKH 5zw^~33I<%I d*5ke??Edk׮o}[b[ȅ<$5X:T&}+'":<(+#.J0'$2 [a!+6I($C, \nH}iIY0!!1 Xbh(mq珯3uSiPqA("0@ |? J+y<["XHl&t#}0\[ki9wo)r4Fu'lGK, nw75 I4`e"4B"1] GlT M[yhYxc=MWXl&ħg'8x >}ӟ8(aՀyn>@BZ2"3M tdR9N&>v~mo{߽k]r 7%h|j`@$D=J?J E4 BN( XuѨd'Hm $DeɹAIE0i1r`?냝 T SD"F,FH7fmT&20gFAuS54رu\pٛ53 ӣm;@Yݽiy)6ib۾{ @ucFl1^GGixQF~c BݻT/V8:-K4LO\ؘD^$p 7oG?:11l 211''zv"LN%tɁ&\I2q-oDd)n7#$)hp"y~ <)`>9 1C \qs!9`O 𹙐եNplqs} Dk4 KITJ*jژOMR%e sDba+([5gʙ@ B&#t:180cr)fר+ͺ,}PؔM{庵w~z4&AUjJٶkL4 4uRɅNT臔0Hl!$ ;gr7j,[D9|BbS$L4СCo@(@>u%tǎя~tٲeY@C(V issso#?~zwqLJ>()%\D^К+>u Pb(wnJAccOaDDt&R-2lj1@e mJA b*X4CSHP%B*o|6W2}u>0z;y )|_\o y=r|p+U(.xɛr)Yȟ:A 廄@ByטA*ΙưjC#4t=hGGg!۳w|TY"N"(Jh_\- .+>,q:~_jR[&}C%\R(Iž\.l6Xss`,ԧI@??NC*R\k SN7RJ`@#~@\oQ[ ClX0dňX**!y!Sr%ޏ#qB%XEMa˜s6^zm{ӕf.'dX!%8#F*@jLmy|%]X\*Qhdf^7qhϮcD4{:u @xgh=*MQ*aLw톍Y@wT kWBѼ?=6nҗO}`,|t (˟{^x\rl67??tLӰm;ϛ9==}-?mN-G?[o3ʕ+Qt]hFĐN:,)iB/Z>ڦn5"iږ.bP1*a^ńeZ SJNJ5BTHBAX@5Z o[ZDX!x>~Z Y,ajJLRctmJ{^Vk,TU4+͑#::SbH/fv=<1ɰ.\/-)LPN p ]3- *%D<ͮ^8Xm0d}3! Sӳu\Z2Rze˖d==WH#}M䒆s\2"ڶ=22裏8zq7߼e˖O|DۜnH#K7ڄ6CӘTdhH(Ud&V: (> 3$PQ%Be֔héQ@v(r0A?Hr LjQCsFX8hz#=^f CL3,Bk-W!|4ӆetiZZuJJڍhtbdfz"fbiEy" aH.TJd0=4u͍$FBB>6/#$Ы Z^ zFt]<ntm_5r?^RJl>ZK%O~GGi^z;$,*`o 9NkH*nl 8 $%6F# +DH5PtpV@_R$q=n`)|.j^Cd~? ժwueQF2v 4 `"9@^udbTvQ &c$eNh?c*aI|4R(!\ E!Dnȧ2ĩiXO&KW`D&x[r@HznPw}z}g?uy܎w&{,vVZCͰe$t ;5Nixzt @{ )X7bKͿg)J`pOʞD_"1o=+~/5Q}oI*9HDa\՞x^eOy2 AA zH9B_ЙEM6з<4$=qt˛5x:5群&ygTJ5+r6yȶG{堠y>f? H1XDG|j^OksYxLmWS)_\q1 [83;Ξ~Watw=9-H7 fw_%9rn_)Ax[BbL}#ƾ{y_'HO^"{ E^$MH)~"^.9dBvǷ^U}Ϩ8>|^/ k=?(h0}Ϝ8|C ÓQ07e/)\Oǹo? (LDig?aql7xѩEqO;Af{2QN$ ~W%坥o@-߁t Vjgvf 7Gķ?er_l(B!ۑ~Gšo^יk砠SC⵽ Sӷ'wWw0g= L172v g2,9nK|xq aȯ w]@ˑfcA zDTw^@ҳÃ<XMOG <~3n('C)s2SÉwg1\`vR#՝9qY,ֈzgԯj1y9IB^ނʯDare7[ULӷ~@?\*|_ʐ+0x=rlS_@*SوHsA; t sǀSG_Y{G35{&H4ݍ<6MaіC?P9M/!C7kW/6jG"d8zSeWY(jp@h<>'-7ې|HwnSM!34Cu֙^ҁt4с92Yyak E)[s#[2rg@Q~GWk+RCc>sDhn)ˮxelJ"I,1i_~BUT)."υ-_(P ߅R!J*EN|3Uz({P㾜[Tz?K)G Wkݳ M,:L!SG?^xyտh"av:"ƉsO?#+bRݧ1?ߧI,>NAB^rFDQre,@$  y'vg.3'uzUo8I+ &:_Hav bL[9/!Ȣ)Jz\(d'Dr",nP'{ \/VvF{Fb"u'M 6&83wI H ;FyOdaڰ-/DԀ'ZTKZ/Pϱ+! J]"RQp ,+j{N@|Yv)xB N0Cure(ֳ_<A2bF\uUgXSlYuo?EXwqiڡډ }+H)VѻZ)_9][_ʽcB2Ӥь{R{5mT%|Գ@)ta|I>3p/s_!jvϊ7+BQ|?/~`/ +.˜7Dxyކۇb '݀u-Pb; o=h{ v2oFNjU/V XN@> E 9Bӓ5n[T^D?IvTG^Pc܄hv%MȲcJ{3O@\1xIG}QNcvvڷB@L0a/sj9N58ӟyd",ls屇$@(l@tQXB'Iѵ` whݻȚT랧^9__NW*g뵊&6ǏCL3{gP3&K;Șlxhē]֯3l }ki^Ugk'bC#={x||l;k:zзbq`*qg D*W j̶N^a2Änڀz +^s) 4 inFVG-|vҬ #̞R t! vmSzWu{K血w?6֗1rG106ʴW[-lB~H.\#OL"TmSƘO޶ﮯ?AtV}lj4ַHv uD^ +W=IOx[q"~2 7$/rk =FCXVb_ЗK Ha@u kdX?Y@%7&P$@~| y{j`ݧXDK*㫊Xa"8}Ʌ"Hbj::ޓ =E :M:fqu  Aj7ej9O?Ji@0]KE2khIլzs*;[qn̡7R a@(x3j"D4 EM=)#~wSIvI! ^F=ݞfJ [٥["&k<)3<F@>0/~TNaSg%2OcJg`tq ,~ l~ŏ(^Ⱦ o "QBXއb^<-kS[OcɪTuMK!,7DeZTXv ?J<GP1K8Z攑lNױ'&--47 BTm FhM(@kߊW\<_L )CK^L1HyQ׊^bhɆ+~yP@=#qdx!/P6&˺D6*,y;p kAJl g5NV?|S(k B0z p?<}CCȸ`; +It42N i'PKS:4-$4ڬj);2dJaAF'ɮF0 0!ֵgs6lN1+s?&ČQ=E4 _KA q\jK3#<|l{d߷npڌ$X;ҧ(ʐTE [[ꙷ:Eh{-(kFּfo?wAנR / δw[Y1j\.Kyo^j;nqN;onk5 :PAw.R[mZg/=gT;(v kF۷t9{>~6Iik , B(`,:sy'Ɲ( ˠA{ۍZXk:l'Gza^oY]U݅F[?:>vu1_42&˘z#^tZ5[^_߹/(v\M}!^uM}?~G5A.a 2NItlJy ?UХj!{G?bPdvs)5̓i]|2'_dSS|^s:{{ jM+#U*O D}=d?g\߿&Zgɓ b~PĎ"9vosE8wEy)aSZFu+;XQOx~ƶ5]? H< 73S}h:en0 YпXq|!/{f{x߻3w@Oj8 ) # ]_0P6Idh /*Y\(?owE5!FЍ>OaT=.o1Lx~VcBbK?8t#{.nsM1`ZYz7͊vw8tS*1(LU:5A`gy+{zq>l^ɛ" h^u~?%Z^zY$q=%^]w^! QCoH`ssٞߺ+oY #oueC{~?L=ֿK~|2R6P 2*\ R!5^aXW;\{4yr~}kx^l2d|kkgfS ulS3/8m9~Gg0-yYܭ?T#)(t̜Y.뛯{DU|~{Vbȝ_iž*6h7;+\-$;_ÆLw+ߛǜ|d'|Ya"3)mӆ΍ƿ_C3_Pj4Q~rlɩJ;Vɻ>zJ|܊HX!=d $Nщ$/P($4&<9袯|"~KKSw.vZ%+]l^=R+ReQk=Y4 :lco4 g\IJADH"Q_bVkG箾3^k9{ӜfMWvvdmyo"C}b|FIt! /h}${3 \d gܖx[uv;jR*E)#^T^=Xъ+ыl8,ҋKe ֖#}BwͱH$ݟDbm,-@]־b 3Us!_d>Q_Z~ܢ$=Pg-5 苳 W c`dxVWyr?j1u sjo%Hq8r (]]mTU(a1Ȏm}j:2~X現#+n(WžΊc-Cg \=$'2IP#?ާ9rE>E:3!y"~~8/r辑u|a?~HFUW,|g_}[@=Φ xRɳ: ğ[ :-[|qQy>˛~2FBp !s`q ]ȿACSB ZV4ҜI%'b89YMh$`.7qբlrv^ Ol bS';nщXOnT rU?|ɩϸL==4 UƐᑔ>/D_ލ~xDžffV3mǿ5ۊ~?rqe T-jOlc6Dmc)wdX50T6؏! J# F}I|''{a'AND}'I"Ori'o0+>39ɿKڼrto'v%#| zDQK!䜻)^o558H 5TH(ڲr .4S7NuV+0lm?oPXm:u՚ƚ Tp6fSP,{q;}Z'b+.@w#8O;m޵sOVȤ~k\W}މeQ¦!i7Km_cF@(R+L]b@}m'^IM u{^sk)E_)_ʦO0:Qм d>[ 4CW.{a#TA(Z-u=jz WrŜѱefAI[(*CpRmu>(lA9ϵA&,D&sdJ5uwOP*|js}n!,%X)FnVugk_lሄLv~KCywDCi_EXW@$jW\ C(lǼt/o{~MHIukP{x|uxB!^Pvzsx`H?}uRχwJP&:(p|e~`Uʟ"MJ*bc )!Pـ{9_Nxߟ)t%x)^6a?{үt} ݻky t)hERONG Go2Ѽ<ȍQRc%[d(PdMi4'Y@/L T>n2< NMg7'\XK/z>j7z𝯻ȠJ 'zQuM=g ߍW>hSSt.k@gi?ois}l;~[1OtkMtT$@a/1ÜX{tsǫ?mݺǤ:Hy\=h`:t 0!`%knzxq{|mJIB7Gr;W [';=l*x|L WL2k^7OȻ'bN}y]Ǩ{'~[E_A }ڢ}S[7>y3=(P|6z ^<F'Kǿv ,NNo~@=l6~k\Sho=D<\4ۑe"-t ˎ5V #j(w(:?u}h#h[ഞZ20Bo-߹3s[^;<Ʌ=O?|N92 ,}+'&0R "6i>Z53*5l,9j80^w-NM%e9(&y.Χß̶`ROO-vrrY rhH$x燸PP<í } U8aQ;fk#H F^i5xDE|t^ttwmr#ɋ\FPoNT!+J].bfҎDYڬ߆ /;?eC _R~$_㿋k1`> BUïFGѶO"k >HDu'#j43"!|ttSp:#rN^_2}=@)~D5gn~ _?kXXR%|e/.n (^)3ݬgjȮM-4}JIe3I("B nd$2F1T:CN #%|B}Pj\iR]0 [#Rg)ACJ}0ߗ9aRm6ViEsxTGX6M-2H Keaa$ қm@9Ucc ZVg8:/|>ɿ}r۶VA7:DBf()]8i. Tt|-ٰ֬acp{wlے,g 5kXaEub)30RjhRaDJ:}I8(V$d!c8ݩ2z(~,_zA,1{rG"g-fkE($䄅oB՛uMӎaY|&P+'=DҮٙ0糂% kμoqOgM.hrś,F~~0,M 6z\C%J(2;UgiN: 44KC,~w5͢hF/ `cuN|pH!ϑJlONhJ)ͧ-˙׃K v[hHTn8^vaCَb*kFK|~\<875cUeԳmӰ)ER+_?EQ<;1czEd;)L aD"aizp2 `La2nxg5#cGvؖ ]=˗ y#)eQ8Mnh B`/4 !,B%SmXtMwL\x02Ȇ3 {C`#;sهy%ENQ1Ov$YiC+vԆemܹ{LatXsC Z:8ȝ?h]zS:'gQQBBTR!EzIJ00t]׹aieLg QD/R ᩔ ы?Hp[-wa*;:>27_ RiPtr]]˗9Uw  վvp~0jG€ip#jϽV<`Q]xP|מ(FlHT:JKŇrygmO07n&B]C`4$%Ҩ{1ƞٖrMʀu op[߻me!LHEƑb'+? BAXL*VD8dVa蹭:^E :ުA&{Ja&]/_xI1^;I7~CԬWKC#H(S羥iL*rl"`Xvs?g՚A[`ÙּБn[j4pٮVbx㻷0G&;-dq!ߘd p"0BskfۦTDubrUH慡JZsɤRSӞtsZ=S[7沑D:XNgW.[Zk*H/J/DVw[3]Yڑ/pu!q2(RA^ !8Z˅ ¦Jw{vuxB-BKl)  (#DRd)N7J≟@p:NL7mȂ; f &Fi"pd@pycX{^qEg/9O<}4v`k#(4Cχܽ,^U]wPn( M B+yX+Vg&f a ߵ1e92>=3jꍚ6LCw,R|ن;yAؕdtp)]&ZynYy061>SV-2Z#3#Gfv!AEJr|s*Z˭[d;Vvytxf"xv=іBJ5fByl7Mυ* j2"BE)"!%C`c`TOTjL߸~E_/.>Qd&&nKdax빔R4aXwIFuWvU:߰x9OM<Cwru \T 褐(JjLRV -j485@@4C3h5,P4kg_{Nh\i[(zJ63 @0 ɣ\pd]^l`E.wFW|vClyOGt];^ITF:ґ8Cb K)ڞO8ˠ6eyB stF*$2Έ*[ƶm0rۭ陙ZNF᱉H+:ךaaJ*s{]ڧ(/m?0z%]SJ I]'WMcFI(f`hwiK%ec%%%9{ /פ1UQ|<۬ܦ$،R qI)(rT?T'$I()Moد~7 !ֲA QĠ/"4 Ň8'H)>|)T$°=]K_v?55[=ӓuF8nRtLW1QD0 '8.d@m߅$o Bܕv?bv97;?@uTݯ[wcgX"A r`y)_c]i%oFw+\Gp!ɗ=?غ1(I.x!G/A)RI(AD3 QzsG0_PTm||'4MazcGm/ttr\U\2H#V@(aW*6MaD@'PB샚KR3lh$`4C1=qA G jv .I!1lLړ# \R0. cBJ]IW<>"C3y[XXg\ʰvrs/ _.i~H!օb}%Ds&B0 Cbn ܗ 4i$ CETJ^ZY9?0<0#%{EGJ Ul }XZrLٌ{b?Y Cܰ亶wփ Zgv!O{'ɼ$0ē.,޾ Y}]seZKV]C7Lڦ10xz\A{v:k96MU  9Y@+dOD-٨ Ś&M-("(0E?,/Tz;KY14U(4[~h[ ]k40r,]g>wWPB8' N,tI5A%h۶924(%@XAk6F"X(FvPm(72[l B*馮A]@z@&&猐P sw%8^%QŜb/ń |t~IgbΣv׽ַ>!cY!6{ DJn"Xqs29صay1`IC>-%$܊ yYaK?‰rlsȡrZ9rcTÊhqJRWjIf:Bꄦ2hQঠ^!ZN1tYô҂BB/Œx^8Kz +enBU*t,Q-э:aJx"tB@: Vm @je]- 84%((ZGH 3`L,JD2TP8Nl+vǍB,lMK~Gdc7;h؇wH iږB$ $JH.ÆG؋2m)xVA ,\2yL/JI!Z3H1F*0 $MO9 JKѩ٩ M͌NhJ"+Ͻ-tl.3ip޾-M)(ia/.c ;mڰ~cNM̏ ޅaR)k2 s6cZ)D#FTtE-_&"tMYL>X]}gkV?2<2z͆$Jr=%VQbq/>Ęb1IjǦAI; -BHaΫwW[Cbc7B4ENorT$$t`Gؠ@ i/BPxlb i#.'kU:kUHcЗ "|o;~|-w/lt ">?zdtDшkضmσyEOL!L1WQ޾eVcaa~fn᱃8N*BOpF^o׆/2Is6! JtJ5z]a0?9xp1,y6^_\䕗lqVD ϸ@3}Lu%g$jWn-kdrlu{gC r=HaTf6CX @8amksZ7ؙi pQ92W'\?oE 0KҖvK<bnsc|SG?x q /r &x-BQ;~ɪ^{[ zv$bVn| !A,a\1d'O !σqo?8~(ECuϙ<;;;I9@H !@18a066Zu1` $!$!jsNɝ>3q kv4;{鮪0a ؃Mmٻत]1v =iucn2%Ep[M.ts (lS JۄbQReN6 !fv;@Y q!P8= EF76[">v ^Do9%ˍ6"vUkFJn`wuFmdx&+rHgAL9O 8O1Mk\AF"dӸ64;{Qڰ V!V+ȱ6LXTHܶHA7/) ]'$ 8I|[C_+,aN,C},edBdH`Us{h6PHЇ  KV4L`?gmQ-u̼IaF咐 7ZNKWMEm7.e+]X]ˁ$֩L OV'UmZ{]tnL-(+ETޟdrVp&\Ar~bǡ J N azn$%$x1 X +feK ád؃imXQNAV< zM"ϣ>Ϗ"!a%?o! :I20$AC\DˊJXH]Q|^^ֲDOe,($I,|؀⁁ 'z\X(f}0s8Qx"b@OC> @sUJW 0A̭IZ-9:q=v,3<-Ѭ0rEJ^#[IAqR7/snP@LVCj9}Qt hqL"؉%`s`| c|/*݃m\8ho:A]$- $ScSy,0ؙəV0c;ΎbfHNB?]2D[ͪ "Q<߅m QӔL%rX\dvu[Z.a$ %YTk$sn{IhHXŠa豥"' qV(F~90%,;vP]nƂm4F14n YEޘ6ϰ/3)A0\ +/QjN{kO~:mb[eeAW_Zx^wKgZv4hΥ޲'95vf ~i䪿׾npx20a"( ځ1 ,J| }_ݿJ0%AI^)FE{a< \{*%*I XW>a$)hƔu/I( ;G[V+kfhA;m{yAX%),L.H!/HU3@4ɒeq3{ _IJLsHǼ4LG5^kVL',-,0W%iQBbwV&EQ3,< ȥR("^)kEJ1M,aˎP+Jap֛͙ٹ%YZ?l\4#J@"T4 Ş.X@ݶ+u= <ԛ*maxrZBQ#" J6L&0Fg<쁖xƲ+m’!9WlQ21=8VwkJ'HGn$qC M 꺔ro|ӱ ccO|f쁹e_R@ @n$tDsD~38Ʒ/|mo#_*'a1rNGw:>aJNZL}ǺBeBT2YgO(a &cU3(4G| Z?J/b;|£Vq*z^=wpӋIRsP㵴iFٲib)!=^mv`Ru::Y)J?Z֥C ^UC |B($ !xUqڭ[n~z_`M13Gyv0iП@,afgH1= %lMOI{R&ItMyn}O/i;5Ϛqʇu榦'g^l7?!D,?PC7>S{vo>zzC\e'Nqڳr6W_v]߽?IX&$+z%U o؆՜haz/p@c1 ùZk  I9ʵmⶁˆ: Ȅ>p/=ײdAL`?Ɋb`PN⸜*fu9g٬9 X.W\$zAqFfކWȀ "̀TD(p#b[*~o~c@qg:c1TR ^ I Q:j;UP'H[N?ǹ޲3Snҍ?,piZicw?ᓐKŬS&y ҵ "FZgMp텃ý?HOo~5 >$j=-.. ,U$KR#Q*I<`\1 }6!FAyH##8`\׳zJG X&΋Kډ/PR1n'i-VȦ$sO0rHee=E#MLC /\M߳%^u`E ls($Nb(πOOfY5ϿxlSOۄB#Iu'?wlɃ3*ل]ԗQ{$D »%$!EtVv~4P-fO^ ]::Ե}`B.1M"pHU|`񒢹{WSӒdʇcj}5a=ko}\}sgEA cpJ]̹,4N [!Ę bg4mwtfS 0ue0J |;hSXޢ5 Z> TI@\-XWS78u_-䱽? TnRǻ<=O+2;4`178?X4lUd6de/q~zQQD"cx<ߠjd4r8WL[︦ovn \MSEY L,lRA u-) 4ЫJ0,K{;vo +ox+vqM}?w~pnY=u~V0X䪭V180|jWx$^d=?Z\kpx,b` &`/ȲV:qjΖ> 'r՚\ԪBϖQi[aQjTEidE^k8+ge%VۏcNRtN1p)[JXr/{$Ip+;:&\ѝ̼,sA?ړ?`F4XP_.haSChFƮ9)0t%T0C(ڨ1j-4\-.6^2h>B=&+@g%c|nIO H{* S| ҃. 5}s7lr.WkfEJHxye-6%n3AwQE!>_7V& غ!L14k(Cz^,!;)$!j*4mҟ5^{=mS? [)Q<۷o}#<{dq~qӁ*Hs" ?dAfux%$?*o%_^vO9uf|`jzvbjaj՛myK /`:*F ~/G;,(<@)gȿ`FxtyXg nt<ϻ}m-,,:_ܨRkզSScZeDTΞ_0| ),%>*c8E1ǃJ3 `%1"0os3 d *-7b,e'e ̀ Dr1|.j[mۊ|'$I^5rOx f>q~>Lp&'?}SɆY\nV붡$\9nd[6Jޜ))Q}=I⅞e9 'RLDxTpNKqՉ:}UܕU$EEwlTc<_x;;V~\6t$` aFe2ٔYؚU ܺH/\=KmRP=;a[)8Vy,O>G_pvj(Jy <Ϲs՗O?F4)[ \" O z+uC1onw*fiR/Ae2 //O7^sFVLIQFQ9}X$DGOh%ݵo)¦*pO?_QjC5W~yٙcc ӅL p*5v<]'^g>(זƏ;bI 7oټRezBkܑ§Z$IR9$$ ċA?$TܥA4 ql,JN#   'f&E^H|$ QsG5=2eO+# >#o0\E? N(F|L.-70%uED>0i1QWӿ3gG6m (PҾc 8/5]o}]tb6~)aBHϛg'>o^~*br'xbhB~m lʅ1E1KeoV슢0b]5/`%^7W^w|ɓsT)'qX2K˳(ڵS i8u2qrc?a@DO&`sg3fYV  cCRoCiA'tNjՕ R2JXS@1y4 gey1\8I(!Ѳ ( Z1MK QvVğ9w@xCi“4'#NAϰbi~|yqpV37+u3˜lF$ #p"q y x0&"'FaH`uIQU5D$QIr.D VD'_D10VwK?ndY$)"1Oaofe64e_|ѮOlܻJlH; K ޤa]7;uT̝J\?iF@EQI~5[mpBBy\w߭y/ݧQh%")J~ج}?X7ҍ> *{%bZ._۾o$+Jfnvap0AvK<.KvōW̩o6JhFωP]\{Q^I݌4|\ʨJlZ)8fHGB19<2l`sr((r,  3Ie##ouRʼn*amR2\S ,{OUQ1[W]i.,,(Z.5 "h$H$#.M)OXG)S[83`NO}Bkjc]G1qܐ:Hi_(rŁ>Mr~_>A9:Rd){1o 7bH?믶luz0-W$l=='_tqk[ykkoG#Bq^:z[ow1ִ%YB߯8Th44; I=@ؖ/ԉU'A])WٱIZSmY$J`g)Ҋx|^T7  NԢ3t(/ԭvf9>5s!sVݶ,۫fK޶3[ԥm! *G"I_DTDop=IdYm?)#x]Lz!Dc镶PӐ~#96 a,?IY+M2p'n7VbAXW禐ĺ5AVz=FUre΄H m|M;@Iܽ/Xޅ•Hٸ΄u_#[/tFSpЪ-#|?u{v]Pm:Mb%rqiqⓟ'ox; Ld96 lZmuC@sl/8v|rbr-a=bAad2![k5ux{W%YФMԔ3&*zm(rdLo깅YVm,agL:GQd))sR{yiej<"AA~Iatӎ /0XT ,YˈrK B@@'6?yWhΕD,RVp\-j{ڬN531w 6ZnΜǼhe],z{nTY^;8hAy?+N(Pe}b Q@ y4mX>]"lO,4[N(h˶me"Gc˚ h>z}Sc>4N/jO>knx} A-LDeBSo?Cع}Pu0(7 /oQȽסGCw7yƆroo(|;;eTcQ̃:1$#bװXmNT6LԿgN<%KhahHy5[N< V[LjR_M =przU![/ Y{y&c Bhʝ8l"UY4q{Kv+c$#[%3MMQ IȨR.m󏞚W9?F*HӠmxĢ* 8Bb@Ixўwn>KDOw?Bf?K3/>EZE8>7GOGR埻}͵z+< c\$5UY\}o,Fq F4W9%`@ 0LL(5oI^rK UUu^C' U|WlvR L"7JvTI  (G"\*Hi4j_b9H{?{7\RƋkil!㋘( 㺵z5P;&|q֊XFFڵu=sJC$ 2G# j(HDϙ$vci_tמ?7o}frttZ]'y`WpQ ڛv_K/:pܟ-E|߆'8:8 Ö#]5a" Z{bTz2j*OY9?2dEIrdEfB*HC-c땑HZ)4^ԟx[э `$ Syz_x\|R2"s6?iH9c=o$(x| xK^{ՎmEfc*#MOlK9J]ǁ΄r Qċ,6kL=8A5TP\7.wEV@, ?ػ?S1pb7l4;cwY0SB[h t>#Wl(<Boyíϟ9bտeۖE|EUR 0LTպe]~#c۱IJ#LiIbPc? eUABb^ֱy( jlظ=G~ lL1.@_LBI#3yמ|u1X}n}b+ 1k*5 JbY<0}sKuKIOND  r-'] "7-7PԶ291aj6A~3J'|H\v(l 7l|`IHB˜Su\`$Ҋ}6Y5u( =qc?;| *[D򳳓_koW]u5C`OIĆMecJwL"$0xp`D~Qq>3EЊC":%}Thaۊ s27%,J>ˮ;F(&vN/ٰc'GcZ((-KD P&TzymedU1_^}-KV3 FHEm8"a+lQb4bHc^3jHXi&㘺?3f(`5/ق`NI²yLDVWFwl9B+d !F%1A07K.cGAwSZDAQeȇ$6ZBE6+Y/gf<~៘[RO{ѭ;/e9EoZꒀ|{.ض" ?ugd,>8qFjEȰDsom`p^+!QLb* }S7.~ի[JRbM-`fXeL)N7 .@$NHu0rKG+ݕ%i#?qdƭ+G<Jv<@Y1Bln߱h/e3B B88XZ*Q&F{ěM%)&.m[^]7іc׮{_@:s.T*diAW3EQxr&SXFs-La#*1c K:+DqDD嚀<bȃÊʬW"pEΝ;*?h j>{T1yx._W|iȹeœ7jSGzF r+ ?*d49;L DhHcKqv۶K#B$hzSsxs[Z}Id8ߺ\q?EBMO~3$9Ic;G˰ys |Cb¨}nR".LM՟ٙ_ӶZ^3B I\O5gOO|O,ݳ 0HJch3XI1ibY v]"-5Kgy40 UEslkyyq\cUgfXe}Nu)60*BG%V>[}GDU{Q{ ]yo-9#ɱG~nILy@zᷲiZL/on7uc.@Sa"E~gʆv5t\( C2kg&ykc kkwǾw \,BXDTq_Z“}Q-׽1eB&=U{o¡6f9PIDAT z`+Cx\0_T`sH#<@C aċiwLo>񝻶f gL4$gއriaFe3S^Qsg醱q1'Grrټk fߦ r,gvf:haqPV{lloMϨEs旂z$\q\Il#>s_{ɶca< >} 7NQ\.Dϔz~߳>')g w;nv,{o۩?GoKzκSsU`W%>C>FB% 8&>XqŬ1Ww]؋)&؍HvfkŚ%F%`41y7-I`!+AnEёz?} o~"sJpk_sc.\HQ|M TFV>coJc?IBpxuC;胿kg3U]"l.ˌ6{3TmJ)Tn߹Mu<fֹМߴaTSGQz1ql=t`G5,ӷg~Fgom Qijǎ@5 {vPmwz6T9ufԉw];fZo6ɤs@b*/10fɼ ȝo3~)`G[se ި!01)C*C:-GFB]zʅ|9 7^ԛVL{ FE]1oQ[ {|8Exn=~t̘aY*yPs LKSUb[I?Y7 c}/LLMoU('%Ic:x뭖뛮4oVI?CΜ3$Jqr m=? ^MƽeY(Z~ıE,`'@t/O[tfqrO Xe]d0xHh aqfǎ۷oÐ2 kPyC޼З|c^_BL?'ƹeѐFsDF2Y$p<318 Ѧ~kў,4<lPIx/Ffݯ] 7L=LM?]^p]kú+n.KU78JZ$BIHBq1O̹\αZw=o{=zd#c:;H8|B?7_xޕ'+,rݼF0w9iDe/YF6yS-*N{Dy7(.>?ȱ3W b |;kꁙI6SF+(WI"z}Fos`ǹQh=G(S)5Z/}a׮=g&OS̴Lf0C*lXx kI,2 BX/BGh LJVV=(@21#HA("K_"Wǀ/ C:=As{5E?G$TtχطM6z0yS⾓f\fDR^MHܨۑCIXvq |( C+"O:N b{@wN 7Oy-!%?) + | "ɕ A}Ͼ?ȣ"!5ӐaEPk0K 4==].2SG7-է>淼'A*k";K(nHz"~緾_?xfȱnnZ B?#"l&W)%2x7;~oO>9yߕEݸϜYCؕI*BkfTCG[7?|S װێ]n;uˮ:0')fDXOL<Ɲ$H LKȆ Lkeʒgb$E܆m/--65N:N*F>+5XiMI*{ B(blfB_j* ^|̫oq,ԩ r:~2vܼٟ^Ɩ:{Moz8T_-_PzD ˋ"B![)>',-X嬮`ff!h |_9bZTД6 HY(7 9[ UQ0%紈]y_=,?3>#`c|O%aj7O|lt߲T /"p.@OBQXZW޿sV>EU_]#H &耓ld5 5)>Α>v|`^_{#UoşKŶ$O͏O,/޾W6YNw5*͚ʲpZv;l5m!đ$NJ@`qɱÇ7nR+}׿pLzP1Co "4k& ܦ-wd.ojSҕ R(Uqxl-Kd Q. xW N-LXy:%,GϜaNh g8[YL>z٧JD l{<_j*BE-- A#c&!U/pGNN,Unw_3X[YJh83;l~1G)!qx}s7{sh]:P +_MA=Ҵ(C}TgTg? 3@ҝbfVF!zm(}R '䀊݄u6H(9UrAQ X10 aˇ@b0ޝ8@ioӏYH⡒(GkW@W"d50^(Ctdqjn%* d* '3`$#f QgKHMW0"Wn%6@Ap=wdm;]=}9j$ X6d L%p;mn71/VAq&$L&|fe>OG~/sf ,Ncc>B,PiON-x]7k%]^.n^- #Ǩrj\l9gz9Pp>̩ٝebzIMưO{tBZZχi\\ rbca{8hE W! 5K,Q],xz&|~У چ}]/2EܶEEIZ^`$`\:UN5jmI@yb:0"PٰGpa@Ě_ˋq0Q` X?7C)k w\ O9z'D1"IG`wDy$(FF6-<÷RHk7~ë^O|zab@T?+E5ϡr!!Kcgrz2cSCUUf'՛S< ׍ȏ|?9B*WWZci~|Ϊo=EMRQ\]?_Pw,? ˱Iia"8ʃI>z4L Su\X<(EM8h@:rq~l6qu f#H@dԇQK`=0,0~D YN+}(-I2szL6DtmQ2~ 0_<٘Or%,%(G1f 1nᑉ~LE) 1X!: ^b'i t4 UNO;/|/4ᤧ{\R6gc7XMe ߶ S XVӧNaUO}__}~W{?ZT9YX<<ՎI<=1)5뵞޾R aشq~o||blI7{wxJjYҳ (rg&\E'|v,pO88\]~omOQ6\&0ZzÃwVK$TI#QD+-&$e], 6=Y}px> *Z<_ysJ?a֘8]ܶm}/6q{ohRٱ>E$3irv μuR _?\Ib2ἄ˙MlT,Bʼe[\{SPlǩ0]&GAD]Hm'} RJq1J(dbgk^gIl fѸ,* [)RФX( Qu hF*k4{tr5QMA8 ZRA&EcA  G'y<)6okoP )?S^펛/Jc˲MM斛G9`"1M'NNW #Vw_Ů[v?t>ct{ FA0[zz&o5;ZH5BbWZ6xU%z!Dg$ `\Ė2V%Ikq( Zt=%lY{̯i JPfX`̭#x7MӶmqbp @K˜38bT"pb/$$ bQ1?#:3OGZ';tr"'J  DPV(0 $aP4Qb(ß/):/XZ}~GÏ2w>FٶYop%pUaj~<_*ˆ (&pNl> =p䉧c`E%ԫ1 9/vW_\hLf twTB?h5Ι7ڻkΩɉW]uաuU=q䰑eDÏ'c=w;;9iƩӍmfҢ%aЪYSg6 &0x=lhHH1b@8;^ zoS:4@g6bC$ vgyD /~ q4|m-0cE-C63H@ ʼn#.#i AL  dYr& )z /Pj[ 8˲f@+ŌYA"o.D.fk1C߾Wx?s譿S/ݶm a{XɢXRjk-f-yﺠQbeϋ$M3W] Ξ@=\~ 9Z$ 8/L@8 dVP\xyݖsz6_[}W?sEwk_w}nV{{v)˟'v599s%7Wk>0?fzl8(_7>W~S3窞kH3̡ ! p )x+8 L(~-EV! GY[g\IEk/~y{7dm!RV"7rB2@z *0p 80qzz{ XlŲn^?w4vW{eUk6,1Aʛn:G Xr D1.) g4+#u[9;zQoN< Jx@4B(a3_HgsV;q4, L\ I4/<׾5 Ϝ9f_֯_;4vܕW]i%9~߾ϟ<bʦ:דMGH#{U0%mDԎKj|a 1(NJh;vsu5t!;v6hb6i>lW_Ǡ1q0 k#2-OĐ Yo,^ʪ0!BhM3}/BML'>BAOb1;U8g6vV]?=Lxm7,M?m5$үˆ&[R3 `έ=",ِ!kobI˙Rap#g2(2&pKɉȷypȋʹ{ؼs1Elķ\zmw5s8Qv{ BE'J" Ai]DHi48"88Z`vRv]zLxY)m,bײ0 .RVUd%cb/)cP y@j nN .QAF#RenL{%ȏBYR(~q` 0,UH|ݯl`,C\%a*ߕK%3 \o_V\FjbGlyUg6)h#[$X+</(fqDWxMQT2&sKHyˏEQF_tg 6~m3)L 0 ڻv^~E tRؽG>F7Ch^-;0'`~G"Rjָ@qgͻ 9f750Ο? N9ݿaW_~ʊucGɲ}ML,N6L&nx0=ٔm#}G}K.uِ;yY[vΝ:@ijf ֒R]WUr\լZ( `?fH=υhEKF`z{Q$K"pYΩc50Vd5q^|I)=um5\F\X!6nä'~"G!$q<&#nEq8<'wmzPx ~ W\{b͍&VU߂'UR jx^!W&d\-INv&.=XHwS^Y>|x L5 q=onBb8;;}uKѣi#!Hw >r`8)Tkog*Ǟ ^i|ri jF:& qIZ9X457TWjՕ/\J,>Vc=oٵet˦_|{ #~nm.+w'M|K_xGy#[w0}1q@MKo{ B̩c !`ĥ1)PV+$!5/ ȴDF` gVBumHUU1;y~Gzl@fYfСxqX %IVU'.Ǽ}75ᢕ:L?tTU\52d@(JEa,H/Z60C?\gKśniGF> *3쟱}@ 0BVÀReUUAELpG b)BnfVP<(DEqW@!WS$tFuMI#8fhya좒{ &1sB*G)*!TQD/6a" h_!M^ABn<`'IN *(ȣi *Ű1R]ZyZrV25 c"G޽O<@ed?ټuJ#XuC[裏'''(jA*aOo7?ìxYbߊ~z`&FN3pLez6l[7p%J%IQ]PE-nٵԱ+ˑ~կ_{7}ϭ.WKFJdY2T5A m4QQ G?)T3VCY+:'۴D03Ŭo, &fͶHԳD$YY/~\FF=z ,> \O` lt.㣀tuW.M̴Uz wۇ,Qp@Kcze8 #975Di:tÒ!j^=j:.{W';V& Z}?Y\r}7U(؏|sW\v$K\xD~ KH1,*!DT%b.:sۭ0 8^b~)cEbK22y U384;^TNc>A}boAY8kpȔ%D->;}PB$^)D:ʡ(YzǮG*'άb,7-l Tp#ȫe$b"kn7 ~PC❅l|6=IHV,]|<y3Kddv<83Ky=ē =m iH"8N&10C!IfY: `Z_$k,,/B0YZW$nJXs}iXO~;.3/B\l& K֪Uu]0s?7[vM\xm놆=M501s̤o,z+K3@KG?/ܔI8c&σ GE |H"R_YvfR4\AIn;6T I ۭSnjĄAT\ZZdǮd[6Kq_}!]7oyXax7Ig%YV'v;cfo^T2LwW*cpeaH[YObKXraA:DfI ;w.Vϟ=gڎmܹRi%+` JmHCX ?bmySǘI#:Fċq ^&qbJP *IQФੑF-p[D\t#d&}IW]EvS/9(.q/ ~#۵lqA%Q9NI H$L2 ,iu)_08̸n9JEiV Hl6h4LTU= Z=d1Pʢ )횪Cz%wnx8kjYY4e8[<20^tM|k~qT *@ÑP͵6yN.&oɲ$ˠ6ǁs`yeQOjMCPD$ACOg>$-.] YSGTkwdƊOf҄1Q&|!S(Oz%pI'˱sXW_}uR{Boy[|OuRYDg̔(ljoG,ÄG}=8)qadPb'f2zA~@\Rk&6 z{*J۱%4O 6eޱ^ BhN^_],9Ge۾Vz %-Ԇg53IXs3T )'үBy.aXX(JX Z,I$ \f|^fL!sa)b ՅBAQF %YNϏX39g5MoM씐B /Fq<`Aw9cA9kP+Ū:Wyg3c}bZC(U)@BPB%V ^jfҹA]A`[<{1Y=C,y^ z@1Nm"T_?P4\!k EQ @̄i۶Z{뮓'?_+XY'_̀Ӗ}r˜;`/v+ťř0fΦ;1$[0K&fNզW{M(~p`ƃ@D'`rd!sjTT#bIf'F02#DdI/^%h`o/^ĉ/h3wlb5ZeY V H] RCԈ(:G[nsxqL!XFfxJ_ܙS(hrX}7`x3h5-s Wa>R nd*z]L 10u=US}<$,,r%]~r/E15 `E -K"O/v!mRkimz)fSlmʦR q, !h4Imݾm{ ÈHgAu&q(p>gʤ/z!Eqدv\bDL= B{q~ѨT_t-.3#lM̾דZ `fL -rGi.kY )sŒajZRo۶ {DW ny258˶f23ӧϜhii)A2aywW3rY4˲`*W㕕 9dXVWif&c&ҐX]*V:8C׳l(J"e MNν9@SXYX/rBntd#'vXA7 p8d`EѱY.-/̾P*$A\EZ C՘"z==.$ )2f.-- R5- `,t1ȒLb/>uc5μRЄnP3gΞ;wc7EXAYFٸqdxxHp\V PdFi...>wUt~ GYeIrR&jK33FGYVuL&C`ql~/eco4ꊢ|.')a>0qPX\X`DbBBel:>/Ťz"@>%ڎnY}g~麐Q. ۲m r}vlEɳGW$Q&fF,â BpN@Zٹ%Ja&jhcG?$TpWwqp6<@/l<{ِ^xɧ[:זJyI9,ˮs=7MߴekR6͌$h60>l?eRxqlv=_0'*ʦ MqdJqjT* j:\zcȲ"+9 &|5Ho_oxHOKҶCe0P0Xk"|Z`?244yj#i\qSG/ǎ2?-Xv8v? V`*OaArX'ٸ)OW/ `WdIbTHx E&{lgpf4is,Cr9ftY0\#_`Vۺd3s6M˲ƍUU$If2㰀tu]ӧE\KPxXe333FUT9Rٖ,pdEFjM_.- GvV]ĢRdU0āI,ZZZt "*QJw0"Ԍe}6nt?w@B$JI\'QͫKs'\ѶxaK@?q_LOHy):HHc,Ɋ.,,{UUP,l۶}˖͙LN4B ()<˲d3*sk1CYe;͛fϟ;m)k*hW킝Ì~KRInj(al1ΰ Z_\2  h",DpG,c t۟ a@ӁBA|iGۅ؈yv ЄBJYq< U7 \w+a5 =!vJO+e?`BjI3JZ.3<``^Q fpZ:MHkŊ;`u/]W+]f7o`krYRw@zE<bMQ.+ iIlg#~xrr2B0<<|%_>c+ډ'y3McѱIFI =j;y wA}==9rdbn7MKRZ3(-+b+^}ⅾC72DKBmlnyfh;i^ , Ge?uH)xFZi%q\Pպr@/~=5"dyqqnrr7{1ɱbWm[eE 첬S419yL&nh`#\{w?eP˕JT,kxxfSXQ^Zt\ZYj4 ouX,,5K.4Hnj#+{fڗgQu=x(c+\ F{펫H*H}”(jYJ}a643;;Xo7vxbZ5X-a@_arǗ[,Ù(Ivժ&Y?Ga38YӴV153z-˔*&X5faTV$$]Ş(pje&#P/wmnVѯ Ј/gsvCO`I0p?#}0@i$fsˋ SgΝ F6mjwz'6y'^4"| $h\ɒNRAtGFb :tZ\Y5UHox{ye׏(bqk`{ \.Uc( T.`$}^8w\Ow﫯~mSOWxo:q |ptES{wl)+z"BO)?ue{aޔs zSn_0?pS<r_ w?ǾƗr#|hg~M-4r9PT"oJWBSQ>t`vv |8[+}?KBH($zRk)4"2gK4RWv,"H4&4 CSԈnag*2X"IYǖ֭[Rm|~-vGBYR `Q[4=_ T*Px bع M]!Fcm6L\\\ܺuێ;rCy晡u^ sT $mٺ "UU:T=Y柛W7J)wuu油ZR~o$֭\b#k$Fqy(RU9SUe9BɘL ,Ŭ bC0"l3gθȆ Y5`A TDQwX^X[^Y,Ky:ڮkZR8 emذ!՝$J6 dE1 ]G*Jh)c ~(Ǣ_2PW>$1$0wwjX"et̗^qIGJn0:!aL eYzK7]gOe"ƀ2rav}fzɳa$y~' OX*u%Y0lܾm4Sfg'Ο}4%yIXмP饔.LO: gI-a8b4>] CgB0 6H3Q¾暕~nn.2 FR]Ν0-ͨx&حL)&ӄ'O, f- fmcضAT5E~o0MWV!)J.BnH2/kA=zуC:`_2!Bq eQ4UD^TW0b\ȧjn++3Ӱ'p2ɘx,``ӛ/fOOי$E ^J?/j9xj:z.` A$OβXe^Uܥi8Ar8YrAahs*{IZz16!G7&Iuֹ9bvBIFf~&cJEQffbʫ;%|_ Nm[74l6ӽ)F<]kB7bEFca~~xxXjtEd`CW94Xs@uk.ھ{4r5Q'wEPVN8 < ɢ+e]If`6%hn}mRLoυ?qٓqL,ˆhבUuiyKl.jۇ@0XSdCMIR54 & \Qta8gr* Q...b^dCƑ&ȉy۶ۮ%Lʍ BՕZ$$ ;s/%W^R;sdrwFOO[7276Gr^ѽ[f]Ld!VD8r@@ Trs3_(d||iBךݠR3o;84:orx5m|G81Lc*S\Rzh“E(`Cu:+*)štSL`IpQs(zhlXUnw+"IOA/ jaRgPyܰh8;Ӌ=?Adφ8-_}bS*1KyHFe$za -a"AAð޾ dY-)eZVת7-mGQS'  Nt,HP狎63Ր)5,$2E.UŁa]rH6"߃Aoݥjz(I4=3׊Tgw!P{uߐ,{q( AZ_L۶Bf[v;"kޙ`"rUf d5XE=L,eZBZzRJlɀv @1dY6t}}f@)˿<w7bWN *|MMe̠qM u]cX"a{v+/0T8A+M[Oz٣or(RX˹ߋhLN <)\#c,cPh1?}"Gf$,FJa6EWQN/DwA@X O $HTwmϱbua"*{j.S b4J"fk32K0/LVV5(rg^qs +y OdcܡʦbĢStvnzPT*LDJd!>脐,k}eLh֖-[:,/ Ύ7 xֲ.KK"ɒ5tU T"<ᐐZGQɘ$69IL|ݑsS-ʨ8$˺/0e{rn`vhz,KDL /Js.Y7. _ĸ?sgai%(!Ň;Ϝ޲{E,DyIrWZ{~Quki8-KDt4a3WrWh$JkXV&;{ٹ<O3yFxrq{2~˿ƼS'N=rԹgo|ssqow,towzvըqx?.o}be:pMЏ!0Ǿ,q/8x kěZ@uE iRz?q9Oc( (*\7p4;3jzW.W`Z+^oq~\*rxa(&HkYWo_畏9Lgy6 x4;>vt67\pg!҉1c,{$-W}`yy+ :՜;߉뺝n΅aUh daTy cl86u-a&^3_/SAwH,u۲oE)$奓l2]U?uB]!Ny^D)#N;w#/cM|gdmu˿?;4T 8c4'c9TjI"0u# Lᷥy4Sv&j*e5=3m{64Pumn\[~Vu_EX bMB ]mۛL4'8J/~\⺠*qɋWnG^LXܙұ;]K%_?2tS+eը"BHRn4v鏪=Zrkf}/+;jTT͘Y0;f`˨zYyo81f :g CM-_}/->AXA \Q4•J>r" */Jk,nsndukL<+PWַ:{FG7*gA#c{w[U ;?vKn&zŶ$38)G2م^$sPE(H+岝T(ƯLEӄhRŔjei"r15r\qYX^^kO?G!/HINBD!BH]A3d 5myyّ5S2%i|/ Ru,@3 O<Ӷ,U4Q4B0Q,Es2"esPVDuj4ΞB-X5pY+w>==$ oE0<# CFcogwرcE6l4<=Wo0ᦧ?kbg4 ?AqGQ&u?$i9"{Ƈ0 %t84Utv`2+B :W*O(fZqơNKU)i5DhyY0Ax2}-W5mR}KrN4񰟌Zŭ\/J7DLk)5Ć)׮?q 2H`*B_ N-!vhՖh{V I,.lwg͋^\V%Gq"x$5.)T.B:nѐa@$|Qݸqc=;|͍MEe]4u zPQͩ)h/B2KD0 l3L6p4aR.ÁDe!5v;{{Z !4;7טjzgFta G״NZ >5M`{Z?xtN@WS#DA ~/C J;q6\4 ?+x;e[2F"Yei; KQ+8DH mAH0jR%OgZ?i%֣Q?:xm55szFoc}x0iVcyR-kUSuu)p3W@ރ<3mEI< Fd2GeCZVk߶"̛r?(W+*MҚ`wj$T*UKz3gnn Rx{{\jZ*N: /޼y]wi;tTʕs qZ__w}Ջ/>#gΞKRy4IN8Ql7hh4W xow(x;8MTKJiN²mW^MZ+HY_#QY tU#YIQʛ 񕯠HHu/oMZn^GsqomlYUnz/[^^ HK֦4G)X{s=On6@(;yT*n6vvwoܸ|tV:脜 RvwwuU=wrZ X91N8@Z7lT,3MbR"^K AU['{o>9Ue)?m%- YŨ놴̣ @?yƓ/,_K@6hD$ŅzK/4x?mP|$.]TR_yucc]~ Rd4]]Jzzqwy_wt}ybqܝB7ې +|C4M|[ zܹB1f&h4ǝL&f볳R%%g?O8Q׷ 8rjMa/Axw]~uyX=T{~۫5%ؔIs?AEgϜ9"AGQh4>/~H__ǿ+g_mѡׯ婗#22ꫮGtX+c0RԒi,#w9ma|Nи?O|W~x`%GqSkMv}ʳ?AZ_YX\(M(K^IZSUu bīK/9{{yW/](?!4" 4HSӰvdy[W ?CtS`2 D'cbDnZ }#>>^z5RT8ăܤ,˜9uTTٝjytښz}nnw]W(Bd0ԧ?s{=ww 8bW+RGD{v֕HGCd`ӳMڤɓTpAOT}?X/ \]K/JE@:wVz޸q}ffݞt@\.|<.$≝>"%SJD~Iݿwwv67yo⅞o-ZE'O*ʎ@o8i\ `0,ӊ T3GTA@ҙ絒ן{/~\jMk5Ѡ7LA7oo?sa#(lâ,F?jftΜ=;@͛f3@nW_tmg~yy/gf`0We02꼵j\"n=ܢ}7:`"$nLҴnh?"I݃^G7; 8]E)C/|s h :Fa<_#kk G[S b>95SQK~F.T*"m{oiY^Vv-0 Q(-i )[8 Vp @X9)6w9|;~C[Q" O֯y*1?J(9E{ h+/>}T*a]w]^UUO87Qpn,Sp8v{zzZ.|K_j۾UN|h &x!8BO>*8-]VTL /J:ZI/| A4CGPP(~is{'nnnDs $ I 3Aa`,2h'2Lz 1P@5o5 o?~ԩSC0V{szm]QDL\'cuɇnH#vn鳦A&ɹN4 ;L5a8WcAFIb)ˤTQUpcL쒭~9=`n뺆5r 45M( Bٚv,#k=r_\r]69r8tO q|xS"g(/W>1.Ƥ/tf977'GvdGFdmm`B^n0,--y睲2{6+z)$h4O9`ɏ}U]W yAW>RMy@5Psj귞py}WFM~bB]4#.V]P-,,\p1MjJ)v33rԪULLOU[˲t0E7J3ļ#*yrđus/8N)$$iٺHu >B o4Jm<ҹ}mփhE;;+Wn޼yʕ͕ͭG}*/ [$%6^AQBVwaJ.OA1 S>Rbk[wr-}Jk%642bٙ뫗ntud\q?OƋ?@P sP|3ra4qd+*&Nqpoϴ8i4yGacV.H>h55ta6U B#76)'o[ރErpT8,Y@$U`CUթVϧiFˠXˣOp>zIe'O|饗TB͝x'bIe*/ZJYo.SĩBA++dCƶ]gΤ:" )"lxZ 5'#?Hׄ"y!9yPbG APvuJ (ˀVJ&"B]qk3{{[H8t4]7Ș58iN&/֬SvT/󜂒e}2ޠl /e,(Gb5 !2G%9YK0L%LӬT*iK'CLH8gϾ닋e8 ="eq쓧Nrʲ4jΡo4w+F;:j sK(*_q 4OQ1uiW_<q|_TjqykoQxNJFMEf½յ)@VlErnQ (R)weE0ĔqFy!ӧOÌuH[9|QsKV #5EpVƅH ?BPhm ]0x/ ajOMMpppw?}wؖLz2La;.~6Ceaȹ dFQvWb*t_YYyW,_a~.`f* zĔH,;~<}ݦiBYRPؑz(#@psA,wǝHFc5c$p;>9XhI'` )]-hb3h_"fLkz*F{o{h<:OXS(\\U +:X۝Nw\oÃUk?pO $?هo?hɸj04abqQt) T"S0(eUB{~g)=a`S";9x{HW'8Z wsLɻuA^?h4n{ウuw6ɣP̀/jTVKYz/)f9PȠR *kZTc}|eeeaaa0^p 1PK/盈9,R\OT{ҹd L f6qVvj7=vEB͝FN7SӺj9r讖.a+ RP=d<2ǀ[8AHd 3_z G/9P^' 8 ۶8yV؞d":zZY:Xӭ֧?hT"K˅2n0Msuuc<;;+ k? / / T 4jmZ Lsɷ9/j,VZ1laLX/`B'M}?DgE &J>dJOUIj&SUtm,2,-I ^r8*Z:='0}@ s!|˺w-.P`;UQzAjv;pP1@}']'?EG Xj؛H C}2t=@yix<غb@r}}}gg_r=--EH&w@o}뛏x !kh8߹,N{#8/FrɲLx=7=yaZ/>I(a0]tGEMNIV>o*@ mXICkv-;o}[ڑ5%3CP $ЙPt%1Eh[/DLS 0f꘦DSMЄ qZZ, osifX׌S}>JmCg8`,DZ@\BByc0x cY>u^Y a t@s`/#_T` ɏL0)v&iKj>RLQ 9QQR# fRPO XT~wTyh]'?'4f[MyLFHe^yV]?+F’W^yڕ''?M9dfCPG~dp,0I)'팢\P 8SkeW`N<=6D nqčXvS%瀾`^" 85 mݬV] Tp4$Dĩ:if1{}pPN։m|hc4N?b/P&93PEqk 2jqP5哉+ ,N!L" z䉅iLD,9tMcfE#$K0 PhH\bLp dG[v$* :$d"7aHg*Ȳg_3Ͳ HfS)ș0T`4[$ eD]yx0-dhQe|7C\O$4*LPBa\ E” N+lyiJ_֜)##Rpf_4k?yK,]^>G׷$RWӔu|<5SRYU4q&4gm2@ $Vil` d3AR1I,ǺK5gЏ ʙޮ8?{|6`gFӈ#TV1V2f*\+2HԄm SD'ҔŞj2uŅE#)Ʋ,DiR{"SpA)xJ@IU-h'n-⌂WsfZ }?X4/W2qvh0vmaa#LSM>DGe#cYZ~c_:|k+H0!E}k6 FT^+i 9w]d Ν5*`GW2 jA򃩰x$dk0OI60T Υhpw+O? /=Wv~:gizj qµ3goRCT<.;)it1#1hS2mEʽ8#l`8@ŗdr}C+ObU D- !r^OO\*_1I$`4tZiOvy|q + \iX L= )˲gTZ/鍒ehF8Hz^6 (NP.2Q~s3) H-/axX/XvD9rE\' ~$ 3g\H ars/=F[;YtYG 3 XcE~J?Id: L3ʓـSBY&j ORUzr0 ,%s`=>ޱ9˧\~ao/N0MkHu]`Q&tJa@)Me X (~{lٲ>pRʀ%1W+qHYͻerU o 'd,H 0XXM(%41]w}VJ^~ҔL *7n6[~?bt4L4Khw {[vͳfz>԰! +eGWD4'(*!AiOks+ Rr91S WunwR!*ih[ ؜zT-4]+ ,$6 -0Psp1aV".Kkw4!g'i+=ou*>0[~GV}2tb2Z(XF@@!"''Ao^9YoUT{QdQ?$f-2AHPO ^2 5=MR,4GCossokk5=-UG8gx++):J?Q,>~w>o~0`a b"LMw0X:L,sLX;_}p,Ġ*L) &Ks;; ˳,DQ//z=| ԫ(aiz"mE4lHRPUES <^TYe\vi߄ 2SNY`Ez/|+R 5dkѨ5MYrÏ0fA|w+Y."*twrkAڕS'Tn,SUJUt3? }#ڸ7n]M;AњPx jN O[eG7)lZ14%I14[6ԔKny2áVN5#XF9QAVHO@Ico_wl>yl˖;*A/r}T@*g (p`c]:3A%='iFm]1U{_]xed T`CUp{skay)cBS{ww7g/A/:}3?. %A?a8M94 X' P midEC QLC#f Z % b>u(Ufvlkr ޸1T<ŶF1K9 "X4vlaqp fNRZGCCr6at,ժf/: UCS ʁW)9,s%Lx+٪h?wzc_~vV> KcUpSN'Y̅ -U3;. >qJ!\}PJe[[MMMB~?x /N^o\qgOŨ>3sO?裧/OW!j[\!9D5 ,b,xB *ٺ*8Sֻݒ*{Wꁟ~5ӚTըjߛ8v?vB1EG]K76cOtM<{OπmWus={F|ay^ђk7~^IiOÑ80 ^{EF~p0;05S]f;N~7GȲh<_`W#?-ۙ)i%Ca:lG֖CmuqBw0#?? ?Tc0P΅? `%(XH}ir@0I"f+W^7#JҴ4N,+NIP.T% (KF>q~7+yc-_8ul\&Q1A uRH aJ\)kj ;ܾ>O>77_|/\2Kã~nYhPmKfoٝqL^llS?Y+2_^ppҽ؆nx/>{{ˆZZiNv7O<8уJíH#fD;mOTG~MYUYlCɇ}MUTM&VIùwх "ÀRȏz_B!p $rG!G~44Dr Y%PM$tÄhg&92o\ !h/f9h, 1FZ+JɄK+ˉGNZilrMjJ0qxaPLF 71K8U:e(qL'@%W2nh`V4&5Ӗhvy?Kf UPm>3u¸04-ϴ홺2~3 m]Hx8Pwj<n;lQg2Z;Zz䎕$M}vf_r²푦YTQ?$977x+2} y|{'4υ6l⍽Tk cQvj\ʾR<`mRmDLÂ=V0D7ǘU"2;8T}Z։= SXʰ_yr@oCôH}zmiӨ*?P+@ӝ{0Gr YqLWE4ٟOkCoOμVLÜqMfvUvL醦C: 1}l4G:kbA.0eYGP W!VEJŶ]$`l*)U`5S/YEYQEiXqW+FvK▭,GAk؛_|e^UKdmkl10ˆIЩEэFUp0b[ڳOBY5XK;gğӯ_|=Xv %[z7/I9$L.duoL*%[Ѱ燐MfKHx݄@6K>f$[J,W9$*Ydr&wn`Y 8W@ZO TP6ofŝ1QH]quĩbS^G!лLXlԪ5wtLE¡Ηc'Xoydgx.'v25؆b ШX9 -B(/LUWݤY H8 |Hm ~0tfeII+AT$ ~ PM T!tqqfmҚTv°88r;T4kEZ&;dh9ן}eVf5,J(u4S~ᅗndwT3~ cߓfPɈp+hY:!0 ߵLs]{Zr% W~2-@:%&\(y+fgNcQ2mԽy(1FZ'XrQ*jdi 'YeYH p>$I(wIoZ`gW5Q֬nƵk?<.ˠ(HrCw_0As5rxT C{^{|vY!XW B.l{^7y(dR`Q[n?G!ˣ8 iZEAXfʹ[Y'jl<9W^dQr 8 \*'qZ#KR溶<'e鼲fK8 :Ɖc]7Ze̹7p\8 H=aqei’ NIhLِf,I >& P4 ! Ȃ<ς"$=j>zJ95A19VI@)窪TH/ L4JʶjB_W.߶ wxȑAK+HJi@MTPUp !&1j=Q =JXg] QrI}BRxgjYGM5R{@DT$E" nab&iѠlw4i@|g"W**(1RmC??PS>$ ` D4EE\7ݎu0-Ф0$T9h(6h e`4lfĪ,5agsBZ3[h4HStEѠ{9dx }KxRaIJJ ),:߻sK-{aDJ$Xpf F, M+^|k=qN3œ&(rpUp5]h "=eNY\8u.bL9O5e0 -2> ⌗PLxK 懙@vi٬TI)dY@ PVLq$aId)XKvm,DT|j5$'@q(44~L ;k/NhBd?tX-©<d+Gle\=*mM,+ 8w{ssۗ+`DےM׃gPJf*сދ+Cw?kiZl|jO/o׿w h6\)ԐTq=1իoAC?V(HQaI)i1B6F5sdRJh*T 70@ NY/ ˊ<phf I\I; r`UWlSZ1 ] PnEdGPXq$ H?:w"(CW(Nf製['q JNRUУ[=l~a*I/nu,54ߪIdlcZqL(َnYF'"r5b!C ̵JQ0_ a$VuQ1<)i:'8、# =zRs'L"2 Hmi,-bʂ#L!:Fw?n./_yw{n%ˣ q f Ҙj0$Qgԙ)WLb*yǧK3kF/6& Cy&1/ZH<7"JFs C87LS"\ 8ȐYYN DusA%-&ec c 28o]#sQe[Z:nZr>$T4,ax{V25H"nilbkh F C_뷃C P16럟}" MtHa4嚦g!;8bJn[;A̚oL)AbBJ%ݬUSA ͙Z|iur[bdǣh蚎ez:QK٥$js, &B3`bhzC<POd]i"v  tINY#$I0nn퍸9!A9m]"ڥxs}M{>u7|9MvEg_Son SUtӬ4I, PHGbJ3UסqKLrָ" d̡&JT(e_W_ 5UM {ͯ}{nPsc<7U?9jN4 gIFՃa7`|c>0LGBWqI7b(" Q.AJ' O}ؼv~NRK)Ȝ?.л@]H6%}f#?$aDjQ2z3gˎ>ܧqFwwD+n)L%Ii`,eQn_P mCE99qm!дQC!JmX^i'>) }ʵ5glu;:&"9a P̥{mĽ\w1=3+Rq:m+[iWlǺ~v^ s?7|s }1vFܭJnٴ,Niz1ax1H0L I*@=L.e EK2u9 |vqPz1Z)XKZeݨe3p8XO$eU)"b)UqJ`A26 ˜k}®/~< =C.VRa(+SJZ#RC>vVc%W GC@LJR!QFgd$PiQƬ7 %Z8 9|L_**υ<;fL;Np{[:˵?混6ff ǎ$뺍St8|oiRWv{^lU,KR-< lfͭ7~#=3pȖ/.yV#G|hYn5%9[]2 %Q&~ͅlDH~s8CW4ETA(Pd <dY3ӳ3S~nv PCi+T*ٮu7'㉒ ݨ7`fRe)Vj6ۣhj4[[ [A\9͠Rl0%4 bZ.9`ŞptDZBY?ؙtwiYmKh 3V( w ۣUP Tk9qn" rV+?^9FFfk~iQ5Kl+@&BӵƵZ}nz:0v E9-i^3'$"IF(@}a7(_D.!ϑ%8h &tpf*+ AmS$fPJ3.4pB 1l(jnZH hyܱ3 ԒVsכ@L§1Ӕ`aaVR?ֺ1~_|! K/]'ss>h=+'ΖN{ (ݮciޘԶ-/Yo&UP-%I6(@+rXJ2Qw02m>v?4#X>sߙi 6W/FGĐ4ԎZa@Bo2mE(??ZVX{V2ro1cѴܲ[4E*2, * Ҭ3&;\}@7ٻԱEA(/Ε8L"Ͳn><}l$~8ݡSrMRَ>櫫L-V0(HWt ` # c-gMM3x<,k*bf0;kpĽ+f@x4ܽJN].z*|8b @ԔA핗g̦Ypߙcݔ UU>t;aذ*ɑchf8m"0n]:Ag.KEhl s"~Tq˃u XОYfnwlxqOL6b1<8nLU {n!˱cql^u+i *(77n~X*J%ϝ*DIXQ<< ⾗VUG#88bM/V-(Xh)ˠ c0T]Ӭ״@ >HY4(iaJJ2q 8D3]՛xL]L4S / <eVӲ-Jy,MI3Vyf%9{pqw0uð<-D4d/ zG YfØחNZzuZP5Aa8:Q8iggmF4(9%IlgMWKjJ&JEIp9!H'yCl/>8_As'>l%XMpz.xYҡ^ H\˱:XqQQgUQs/M9ޚ:hTImt0IZ;G:aTLF<Ƀ`yR12׬[p22zwNӕ ӌqPNlY.SDZzJi)dQLӤؓ,i12Nm`"M'z L 5J h:37[Zj1%?םȲI;ظyc=5;۾/n_{ϖ'A,MYFC_ر@`4,kY3|(RrY+9HᱱnꋋKe7[b-,#bj !z\q PRuӐ'[ɱ1$|(1" !,a:QNuaQr"!zȻw~n/ˠfvl Q?K 2tC92+ "X/-D]~繥xUmT~zcF)Ws<3~|ye(UzCϏf֜j[ 3 x#?(R15@Ʋ>ly0c/@6}l$) ~0PYB|T_iw_@-\dYHP43 z0PHByՑ^X-@lg ϕIO,T7kWmoo.Ϟ>g?4LcrJKM2x-QJGz@`8e&a; '݈$ʥj [UuUEB@wX@YQh1 Mt2 ;Il.v)saU*V1 %' 9fPRǼ< w{l*~cqf*"dzI 8 S \2~h GYbbwfƞOte(WZe@:@)e72e{^^vm,oJFMXc*c8H僞9ʵs-AEO1hBSP>XI0Lnw?NbH `S{QB:]G.:ytPMcIE+X!aꢴ(/78|41v57\Ut54JNrjBTsYDUl;Y*9G!<pJ<(G BiL۠7([6P 9Ge#by&$!PyЇA]wÌӀq[qg<(D(|`7u_W%(Չ- Ǫ]ժeF2􆈊h6 v{a3S[%c?pae+6#FsleQgYbI ZYiRmur|f?Բ[ev(!}s톦>sQpԅߺ;S p3*<da ;iSũnSCpSlI?H!^ jMCn u/8呢HlSwZg`|Qk/WSaaI-fjl7+%S d<KNw\1Kq2Dx}5[7 - WˎZ5#!jŌPR~7NcǪnQQjٲ~( *; ha~6 nARF!$;~ƭOyVSǪ*4288c)q٘a)JJ{I$@J+qFa)<)Q{#hRM&f ~-o'@:{A² neQ. XP{W7_[{nk!Mɓ$wڶQV$A=q|9 3wzR3T-Z͛BggoGe LddA09YSCbB e44;wWsf/9wngk`& AI=Ryx$k7M؏(]qbNT @ ^шjFA E\_߈CQ-E`ה]Shi?UEaF8@n$#}[Dq Ǟؾ3w'QѪPcA%qDcۺu)Eh<( t" l?huG4]9'9ȦPVi L/ӳ< "ɓ#pΔ,MOujq%ӅR4ӡ7cBF^8%- <;{]JRGrEH*eƣMy0t?mKW~+q˽ӧ&+/~ O_J-d?,/NfZf)8H-lTuM5a׷67Y׷{ gnKI4d,]m䲅cM!R^[vۓ8@LWT`8c 7ls@pYpR8^'aR |d7n MCQ0Eh]b!fX.|j̶`0j׫Irf24UMKYC,3KnmV?},~vXUC54MңP됟~S?*՛f$U7]SU{G> &a#yD3a?Aj8J [dsog}f]BBğ[o-tjSգq$Y/tUksfy7_P̌S-i著u&+/:}\hl~mzĢw)t tЪْZ%۱U[ǎl_vњj̴csn%+'n4tDX/^L5T1lVdT,@QFr_h~UreW^ RrVЬWKDs2Roj"cQLyRx2]ζbpeA\ݪjWn-?x{^hk ZAǙ՘B֤렅å4 l+3JJMRPHծ+r$DF' ci AA3@KP]%r}0R"Y\o9jT!h>ꎹO1 2u 9$ xR6ݚ]&zޮGƯt'Lϯml*~`4gF7w3K cWY@u܏zNsa}}0]oYV,ygCo;BQװԆC, V0;מWA@EM<qd@oˋAy+\Ӎ ڭÏ<777ˎr̟ұiXnt.^U(T\%T)DHWBdmi!"HVh}*fL-XujJQGHqF5aRgLεZYrfBc_U1%h'I ISJEENPB1Slӕq>(:π<@-o[R˹f. )k8`QS3C~'#ُ)qnZa".Ls,4Б܌)v,Rj\von N4aeQ2uKj*N](L޸RsJv}˯7׷V_tk]퓟'?~g3Ō"Vk6q hq2ҔQ,I(N4 ,MRUlۜƃ~Sm^<A U=JtH=@*[)7W;ZO=bE3~٤ l_qv%SGW6/otU3+&61' T O a-#"Bdࠌnwvn.8{1o4mjEV% (N9MS qƇdAt2bd<($znYˤyĽN0PԒV,? Cޏθ`ݱ\PPA`0j)5E%*&??t| =W_SSS\2F8rSqStTD~dwzRe+/[qlon3U$SKa m; BDӦg`45*/?;7yɪ]fkۊihHCF+jcXh[lLՠCWoHO[4I,`TkTK> k}z4x](ɤp\B P+j"BnW(Dje.xɱ,JVYJq0teYDngҤ눰 ZU Eϊ(B4DV\fJt]$1,U*[ $tSzU\,>Č24I(A"}|8SMxc5w~_t^d}__D /qsdfubnWā0ZؕFEK\]Z>{ʵ4cSR?w?w^|;{X-8ȡw= [Y UEᔮmSBY˭=|5QzW%w^uMZ'vs>ь?q~dp,2AzDs!f~TJ7DJ-̓F]?n :H* vѾ,j RlaQ&v.-S +Fj{4n֚jL'qT3ڊu#V?q ܲ)8 9Ra6-0折>vRZPBvI#a&y0 -?cs,gI\n.Sׇcuw6ǿp>{߸Z*W+n_|5U%i"o 2i?y$Og?ŗNU )-@jnN؞/uw[ ^"L`֌()e&S[E]mݶ`I !Eɭ해C`ZWm{ 0/Tːw&;w3!V,W$6N?ұ4 ÷VB`*_DV<2H\ i깟)/nW;xlB ?+10xYթzճzwZTpv]0ڮ9G.Ya bL{ $7PB!70-ncp,XM9W~gF#r /y˲4Wyʿd]ӤĢsw\~̩33) {?;&"_$Wu;39`[ TO iyL ip@'훳EϢs~'Z_qOMkql*!W Y @Miׂ}S+ @3C FiHn=_:';AFOЏcFԼ0שU[ZR%.N:\07mоo__uȊOG:s {`$+MNM)- *Qڻ񾼻qxS_՞83BquM0^Ob@UXqX6Mv,s?~,"!}E%k'kIq钓Oθ9Tt'曵vϘ h@WϽ5ۭjQ&2P";9pp5ӌfMo -Md9 0R:M#*u]HSVU/Y&xݪ9*,fX<Ŷ&¹,5Y\8@> cBsʼng]lҒnwy> 9Yə̷#Z ?`$ %t3SξV:v7X0ұ삛vimp{B%W^WSթcl#D.A Dmd0 ?PIݰ-OjA.cˀ)^ ჉10zBzme-7|sr Gran9s| |9W7 ӵYT*g%QP,qg iJ@G4)q7mZY?><9r3nH t@(8$N;T$h  %=zoW]V]nš}*GƎ? R 8^ pO,_.W,;絙iD7ۦ}" P(!wyuV*ӧCicT =}g:,Ƥ!QQ?ޣ>#Aة'cqym/H d[U$Y~Ooɏ.Auz~57vx&.4.ڸym[. n1I32$Q⊶C#@G*mFDȻV8sC+*PS_Y*68)KR$VhbFIIr _"/02 )Xvgr{BެO6C|{;.o_.vwrkk_2z'WprEp~$K1׮*nfa\[8z-K ЌbXHEr @`j8veab`\);av qҭΜfF+g[niٺq c3,i;DGIQ$D1d(5i$L/|b 1M)W;͑,4gBYl6׬5??__0C00Ơ8 B3svv$Ɲ(¤DVt,w XN&?k׌l65RB8&O9^~׮w;X'G-+*cl~٧喭ׅ~P2#x6HY|<ۘ~V\{xbtnQ옷s3,Rǝq#љhJ3:ihsz YqhL )!"bL`8 l>; v9w SFѨA>PqoL M) f!,9prR6%z8 $cq*l ڐ=նpBahMEfIZlOIdafoy`^Er?ԑ7yx9*jQgL975=5p $7a_)BN09Q}+_yp ңa 771a3/9@Y)D AR?,aa}MG9{A_)_ٖvQHm*^vӉOe)OpBQ5M_ʌKLX`$1 #c|6kB AL$ V^75q|ѓBK k3̌q^0֪HGHA $+y )lf8")0N{PGM@ڦ/_"Ƹ\.؏_!GXj'K(@P" Ƀd VsUC\ٴeB;(?d0r-&d76ay}hEؘ^!)3I} =^ % QǬYM3ƐPjUoF/TMB^'p2<@`$O 18!6s*,XXW$/`[xh;y`;|ݕ6sAWl8Eto-%?io9UY1u.g|&o_v?ԶgLMņ?!DS?Vz!PRPP QE>T Mh8!.X4L?i)A(LhʄR c,?ZHNT4[zmbL hˁ- oc|PA0Id 44O2Uf+Q@ `" Ȥl⨥l/){1Œ:: HgstQXg^Yw_/yC=#//Q&o?flSW5?>xh.bfytOp˚7rf2鲂N \VR>0$4g~׈3Jթck'ABg}wQwV γ[E e,haӨy\~Σ_k_kmYzdp9Hbfb 2KV+ `d+b%@BLKIuAo 03&NI5buDk!:ntD! 7pw/<_] BMfq!y0所PA`3̆ũ:vB 1u4iZ>/h7NiI x= ܗѻO] |!ťX(p4Ϟ= y٥X+mvfI la\;?z32dҺqf*xNrǂC{_˯sC :=93U $g\σ/L͍~j=đ^#Ag|`a%I8dI (16ٓ-iFA M$0 g`ߴ~ TKduP\xLP)B˛ 9J8Ӎ1d0!ѺRUJaxO/ݧxRkJ&z3~|'KMט<`,廋{7?l ?^iX`q?o([-X\ʂc7rh$xui%8ѻL'}]qv{uS07@ NfXvY\'ev2ktBRB&XkH1\ b4AT$&G@wF :Fxr6bB2H1v-*a9f'}L h-~؍Hr\Ok9R 1Bki`nj.bH1XR]a?#ZRxdTsROMY0ͧ9LY, f+|A2/w>(qK_W=ypޚhNOvP)ۜg}Ȟ}~-Blvigf@ Nt m p'R|!'vTf$1bЦhҘ1SBBR 3Bwhq,qgtaJ+'aiזOKHyn$/?<$!iLwDJs?{uTg_.dzv2;(:981]*VG y&: 3&//Ud/f 9SЄŬs4|ki_>a$?o_nSλՓgگ|~h6 +?JlӘYhH%6n({6` e;743:XFἮ`ڤ5NF`&U,8][e:~ٌ 0Ao+8\YUנK PFo:,P:$4L.eR !7JLjp٨{2뽡g|U;CE%/pcSc&,@3)%Ro߆F6,ܡx~y: q("+v8?vp?'V{+/:#oJmv%'zml:f s5u#A42rչV0%SXŠ\ ]jGQDi7-LFBg hS@6lP_"iسȁ;*`&IX{|ڛZP%x,6$nn`;&=tKZb鿋91MR"jӯ5}VXo%7zSPx ^\ xKaQi\uKx[7S,ki=Fcײnnשم+lxjbV禎TpIDATNmsPTt 3gy(LLe.  XҧH$JCв*3sI۝gX?Bee4KŐ@؆iP:0˱(pHbD$ѫ=LtoM R!p偹.^j^ީÑ( FT6-3#옐E[A0 t pZ?Tv6i ;h:ÁG,5Z;xx>|`svVXݰ7 o]%O>{zriۺ^t=H*mEiPBX3$b`HrI(9ydD2)F^5ڿy-kKٌAU0|/8Pc=f<ôcI!DiAHi@!41X5bY6@%6~A|$Rr)*֟iTD(d_zeK7~b)vI7.4,>:ۅ'A8A?t,&=(9u9BA_ޘX|p9܃% ,UJeu#02ԉ맔޵?#|6GoE fi*ء`)>횆mUa֘~Dqe\{%65))nP6 9wpњ/v;:i0Bels-2@ɨTlfg٘$ L"k qb690ZHK՘?M(;SqתPDz:qdzb{m)&vP]泖8AyΌ4v?HaS)'vugrw9~SKXĽsfaYbgN=WU0)۞TTN77;1Y5ljïjzb#XE]q i01+P0Cۮ }^[(DWm^;ꘔK fF#'q&⊮*ԫƒ{w:cgEٌ2K5ea d9$Ӝa9Bz?|;O P]|/=gZ9 /!Ev頰.3O8z9?n6}}>UAZ6b1[* ]{.J[=zT7$LH T0&^4]!.SI/@&eQϮKvKJt@Nc(; -|v`C/w=r3vB `AXdR,)EOz^j5DW_?\f5aд%"q% %eח;^'';+& ׁ4uNuL3tDV bD:A[8Q8 zG2`:fxη񃕦[K/^3]tR-۲g>dS q 89~9Tf6?{o\|h1"̻9 2A3&{;л*O42J;J@#-oCku;; Anټaq1'g%q*י d'0uQD~!4JGNCC> ,lFLKRB6-+Ias[+Jo- rv& oB j*YhGIɄt,MWl7v<(F'(]e@!P=u\Br&E6c:Ca?H??M_TNcឿo=Fknϸ [Kfɟ?.k j=rc(Hud4HcRm|˕@Z=Rx㻮7uևRЧ<>$#m,>qbF/Z\4Wv{M{a׆6gwSё]; ()bPcZVt͗]_GN2 1r%1Scg'kx`iI&b[#i9lƶlz۩LtśM`:]ph/ r(0%sDwko`":OWNFg6dpߘF7ӦNq*& L}ws]V9x;Np%qRe\sx+.r٩x.|~WuuM]|LE;4ΰ0G ⁋ȞaH"LOC#-gus3Ύ P.9 ǟs%U!/#Ӵ0`qU[/޸ ߟ$6{{ mt:5Q jP]U&Ј+B0I 4ݲff&H*)ehc5_#bkW 6 9f<B Q%?p\ 0 Ľp{yR3,t@7\-eaHK˖fq85=r|у|Ԥh) c+֮?xryz:whO^n$¤`ӵ߁{ Lsv4'>I|ƙdY@y3۷U O|{0K=U*!3o#'N_ӴzZxWM4#m aI"Ayc 6} -L .`\jtPcFHs( L@!sxWړWG6@A_`12җL!OqMw}$o(j{ s݁R >~qpD3 G0Fw!d|ȞA){j.Bi,*HӧҊHD@9Q(E)>\'@KNzzn7TG+*r)FZU׼4?|r_5-\ä'h6e4LPqlRㄧQrHdg(iۆᘔږ,ۊIl(ƱHJU"N2Gsu2JRXK âi$_!U3JYJTq46 QbVk|p'i OQL14)A ׇ E(.WqǏ̱'hL u6_g?{O'? r%N`p2(b*6a/"q]WrI18 hsJn6A*ctlb\sH0`cumZ-q@A"~f)ÍjSFݑG-2>OPiG=O s B7:m2ӱ„#% Z:& r^~}cTTd}dv6QѴ:@jڕ3uR9AN% j"iU;Bn"3ƪRabLcrvۏc 9q''#Is~wl+f fL'h  &l'S`t-2K5PgzGK gZKYH)oh+sXJpƶ\$I(mRĕ}_w,Ma-K >=wZ&Kb Oi$$ _}Ŏ-l>7g:/x疝weO~8?շ񵕵Lcq]-LjL̽m33nDᔴt/r͚ &:W$i7녌@2nM쩬錎UX]Fd$϶jG&t=ѩIy-s<)rz1ҟ%u3ȏv6ä1 g[Ԧe(1BI,iTShuvᖏ9/"i*K"-8$ :NuUC0yOX۶eOx&gĘjJL:BzA4P2Zk:9/5Nvy0ց/[A"@۸Mo~U;Jt[u;]v(u-Fh$E#L73TX7梴&===3y{Lm 8gxBD׿axD$ZG35-wEl(wpbd s$bxUOp(mH| jSq4b)tCec! A$ιޘZLS7ZǓsF3΅Ч"||ݹ׸D ɀ-J؎5jաϺ9hcuK2,f$L}Jؾ}xe߽78馳Wǹ"@,G1^/.%gSiOg.XV ]u3SQEGYL]b2X`ep2f.S;y!!=oٲvڵN iY 1]n3z`l[l\L,& DHm[cgrXsc޸{C{1B/ʚckdž*}+Whת*n^FG(y5җꙦ/X*7E຤f+W UbinX ,9˰̇fk''֮Z?"IkPl&M7NzEtZ/ ɥvoн[ :C7GADo&󍴃|YeE0^Z"=)aCGc97c6F~Re=2laQ(8hz㧧(#c˶{Oen{sXVRJm/6b6$}..;H4ţCkeEm2M%B(!$m8 w;5Gg,{ڢAݧ]v?vhd@ɶM$ڴv%q !"jHXw)Elthud"8Ssi(X?VM$r݌"@QG]Q-V($-;Wp 0_ۍԴo( J,P"4L=Uܾ^[- z~rh蚀ɈD'L*M c} R48Ơ=x&%SN|tjxL\` 8x$ck.x(DjwA`֙)FN^ml ӱ&X`K@1ز sBٸӶ,b*.d|a$;4]wZqr0DrVu@A5ds}6i0q6 DtmCGƝ[3(3ǔBH@̵b> #8{qc 8,V8_e4 [{rl78`䇠 q_i%"ȠcbfF&BU6B۶1eq_ \inn;.u ůJAgR&c3X n4Bџˍ'*FɚP `]yǺzƎUFAđxñ hY}*&֋k-`ڣTX ^yl/p3Rb]}H: Q~]4NrH"Ot;",)V7+݇V g PIr;&NOObAsZ?޼j9d)`?: 寸)!ץDY<D H8uBF>7=zig;:6)ccZ}.߅9qLJFF!806Q5!ۅl. }Ĩ=Ho+N'IKJFKD*5 ( Up5es` 2ajQeϜ"bxe K|rg. VV /8ñH&;;Df/rt/ 'I}f~xՎ5apP/>SZsb30K+=R(ٹyĐG8<^ASSӓWXIѓ~pyHZnMO?;m׎:7ӇhT۞X(5SkB(5t݇/ܼf9zrkX\*:N919zjZT"Ӊ>06 p^b`R0ڡJ1rW 4v_^r>mjf^TtDe5g5G@:7?C^&q=m%vt_D^^{ltnu(汩\]4 BԈIczQ9957;~#W]Gm-Ԙ޻Кl_ƉVS DdMS(8C/~Wt[uicF<{՛2 { iF=_#`LjPzxӇ7+BK&Aޱvh񾵛XUphz5;z՝عuܢ|K rc)R Q¿3g<g'$hԢ„;@J7|0uB1h5J) R! (iG "%|T$ld *ނjUI^i\ĩiZ@aOTn<1`YW1̛4=)u.EZTHQ#LDjϜ KWy[)dg:&:zjj7kKR)\V{KH0lTY9rDF1O$7':hy-W)?Yq#]GiMJZřSꡖv.y 8cvLIFjrr6l5Ude vl Kw]T,3s3N$OLS'>, z]O-sm]"nHh+Rl<``GE%bxuf & %%-!lPdL&108&E-zB?)fe"/9 '8dllA3 #iP? c%(Rv%u]@]_.x"|TG e Q>-q.Tp?;3 |1S  1*2lԬѹ(<N8^/eE Qs3;w~/i--[;Ў=8N #Uݞl&;.6 +-8c\]^q5lC)^k4.c澣'm1D͋YxmFPT䥡[ AG '< \bY;=Ί&KM2Qgb $BN..lihȅw$LAq0-9n68Ka,Yќ#79vtʈԪD*lCUI*}i$F&F)l *cBT|4B$GeG T:w.g9aRwݰOLTȰv DajXPQ [T}{?U;?Gx|hb&HY١6N*Qiٷ<`P(FI"-Jp(%DJK1(4 #f$PǩTZcp95]+*VWrӚ-MJZ y5LD b0yA:@ơ.osݢ{ 'Xd˹(D2 kǑL$ ztu+?+.9|`2\)dAwB?z9g1Hy,8Z'N>tzjǖu  of¹&# V/A,VABzQӷZ'$a٦I- ЈI7|K&n]g!O*]&ÉdVх 4~^L+8@0t EJp@%:lDʮp,0XxT|ԆR8Fy˖{_@V c(9 8#viMkyB7PBF܁ DNTT'R mA1"@2*93 Tɕ pIIv?뺨n{XrYY u:s-V=Ƥ#4ZkVrȢsl˟;œə1t~m?U, F\0f X.RHN1AOֆh_IaR$`2V֖@&wmϋ$zGfiP]m;-TksEB xRB) T_pJ?8_ĝWX\ V˺/ۂ@$IĦ]Cp[y NUgįUVls? wCcc00X3@y҅2j(HNk>DP-Kò57ж%>XX8k/TØ S)Q FjbQqhZhVd%:^N %Ps)4HB6jA4k!l`~Gk$2T;ZxjF*ޯ+Y0ȃPf1rA@FF],ss.lsGQi=xaObТ=:ľ%]aXaG QA'18AV"AFԚ5kT3X?H#aEQ`,F##´-ӶGQ-V(Rࢮ! JӦDDq83N9jJZdˆ  ACLA 8fu⡕0n55N4"@B{ZKp/-رf~EF!)!?JiI )䰄~ $xތ8peA"p-N0;W:V+c;cn8ËHs`/һOX!vW%%-2pL֔ 7Xpa9E!ՎRF5#(=!'$ Eka&kvnj-Qe20'eF&BjN ~{mAT`Cྭ[a0lI!bC\zXyxoC)LA$ 3)s T0h7=}GʮRIi6ḥSSq V$DImt-# BK/C#~etJ$\qЈZࢗ/%~sOBDT fr-/v6[bɶtCrO3cuɦűV^T;uf'ĀDAPMQӋIHoqk1% dsYN_QRdlI,#alY=P8Z!s8P Վb }pL$~㪛^5 Ck`͐}!,dACS ϛfB>s|f:WoMa:V CDet6hpAS[͑Bd,e?M@X^17cLN>9VkRC& ~ 睢Q}##:=^.K^bb<\i?$ma% 5݀U2 ARh96,-Ӵ.V U$&4frbQ#$cZL4 8A`M 3+a/+n[}#߽~ɓ5@*&?fp9 fX#]kL| I,z.`J@9~'Vf\3ي̹8:?oV}88.A˥<)p"dTQlnɧ]tvSi Ƀ]ÜPsR$\Q]]^x4h.U.ƺ^:4cQ/^31ugO\jFA)T&@RFbQiyT;  L$Y^~yp[u ]'PkG< N̓jf˯^;{ Ff0050Mp%H| * ah206*Q8$un}ū'GO% TpZ@ 4S>bwCU)INC^Q oh-NM==Pa 9ZcbnI.lL"$XGDA'bfmXfmVkR(qZp<u;mTt_bBh׀ɹ :w雐7A-9Qlq,\|lb2c+Wt\tLbڐ~>1lfjȸ[];[yj+u:S'9S^d="p%:0fAKa448blcՅf+ o;.xvߣ.^= L*Kp,Eb.ALLB O*`̂D\,^;_|{sı^;XFTHbJAL1PwSB\&ϸf.gSF+;@+.<3թTbմMl 3HˆWڡB9$^40tJeY8]mCu@}`)p1 )$Nԍeȟ% :dӇz!,@i/ E ILIpIB(N Ōsy״( ꑩL&g]'2ع}Bc!RhE $7@ arl)X({ d0T:x ڻ]}cHL\;2s8&0)&SLo+d9c0tp52lDBTx:$w'm]m]ݪ7N;CujǦY`C TRn(FB 6*5 rݦj==Ep *ڂ+fQ3vj'+7ui9VBn3;[[_WK%Ƚ_Yl%[ U _S<Kk֬k}{?BE!<|"Q෽.5oyW^eFx\ a(5l6a`2fAQ><͓д, 8P)H_[=UHG b$wy8 *lzN u͜(3;V'?&RaTy !L&+ZKPPRQk2. i4OYR8&Ƭ=v@F!0C)Y*%~`e mAp `ԉO9s֝SNG) V+(Y퇾1ri <^^m֬ixpƢՙfCxkz+P>]wjzֲm.6l7+[0|/`$;k3_{ⷲ>j9[q9;<:}˜i0W2\2:ti:]>1)J/5׽w?!"LZBnhY7Ho8O6 /VLh$QI Wxm_8gZi(cZ[]̨4)J> |Nٕڃ)99](?Y{Qֹ8__$0$" bEXB#o*uD?uRWE584:Aֱ Ss'gl[3fmD?~xfhtߑC34IM-oNPXn@eJ 5+#Ӿ/ݹ3Q;_TVYeEbX^Njyr%W?rͷ}J%E\M(TƶG?Zcp`AeRY)UТra tUfZ,%ަgz/!M3 [nڛޏ}/'ONp"D' 3:qZ? (Q0|Yo]I Cڡ^).qHC~Z r9±8uS4&Vh_\/%O6 "v)B`ڒa`lpwmIhkL3 KxSAQ\YcZ~Љm#UVJZ,E|ajgpT CRJ Mhn)b$%mOMF@Kh ) 6]qkko%az^;͘zwu/V4}3)mYV$p%Ǵ2"#?"E4KWe{x1jFh' c )8 '{ mUHM|Yxq87G \7&>@;OxDv8` EBRMxx]6ط4Tً8)Cà9ז s5 =gH2i7n? ]yi fqO<%Am{곧P',fs pH-}F8PnR|Q55zW]^B⠐evү{~9]c/l'$6(|, N Ԃ>*EMRd3U6<_T #ӵnk_:pdTI;gWz^$Pv$1l&^8C4 N@C֕vX{Ÿ# gzTRIT<7u\5j<76HO*Z hsnXpL\L\rw<DEʓ,)x !h۶ٺM|훊R-%$xw~ Vo9OY]{͊ЏLLbGP b QRˆi΢xeL+fQ_nbPMpeQ\Ug]#oF'iysmO(JsEa\,(szC_# Tpe@sI LOL9+G6n),`=^b͍^*r!s,=FO;L١ѥ1pҽCj\Z @$6\) $JXAZ?Ԓbdx孯xs.IP> 82&1OI(;4Nb1K!œ[jx@D Ҟ|**(1"q!&)ZX%t#h"yNp B20 n`j؍|%ڜ 2 i\Uy,tۣ>'TJH54$~s3 [YڨKTW3b%癜/]Lnv>bgAQ 0! bBDc5'g6碸gCf}V>4p}hM!ԷZ]V G\$G|`?7uFBاD^mk\6Wt0Lɥf=S)8<Λ ݀WnD ׊`n)2 $E=_ʄ_o9"vCYjxz$AO{`mm!ie&#8!(+uJ$;uzBb\u#r JLQ29l,W Hp.-F'e`,D'r2(p1Qf9(v [KPĉ%NS)V~LjZ E&>齠yy[{>^ Rloֿwo߹15 dXGp V_ōCX4SOOXBiՑ)ԛ{Q";,X(45HtC#5DK1tpP(@i]{3z׋]̼RO1.˪^2GY:V{a`BӜ\*'jҲUsć.. ЇVkn@ zKs-0PAAG-+ȫEF}֕LAI:7 E)7l>gg\Pݙi}"+)$v}P%q 85\^|֖=^,T?L]~=}"bX$ !Q.52,hڭبtAf B/O@P*Iiw;m2޴"4ԝ\YcpޒҨGO]K{{Zꟃs%R?bA.􁁛]GڄAAi>JL\^$^t{H u#Ӟ9Yʡsͤi]OׄE{ ct heKԆb0W*5酙0mV#%1$/0٭Ź!{)景s_=QO4S2gNUgg Mcx̣2-,"<\K~]a*ψ PEY> *jޙ&-ʳNDLoc{g]í#K,Y/ь:hq 1Ӽ MԻlw@G%*s#!DžZ*T*5^|شLa UjUQA; ځv8v3ʀmN+DsJ"-OM%_<za$= `rj0Zk4};~' (C!-#&5܉%9Ȫ0fxjO<0 PqxR$R7=3_H0lTy)k;98l~#i 39|EY5Z] CF/M3z\j<:O=U#jP08C Q;XT@$i6]_$~#Xhj1ZHBAVS}(c*ጲ<Z ހ=%&b!7MxVHX.3܍)U\t'n;`CR~vBhhqخ"hvj"W(LM.>q}싕3E'G8AWKyQ#0P"ituȕa̫Xl@..$/ޒr[)$/M6K'zU(C+TٓB1B-Pi[Δ̪(K>7#|P_=MKρy{6@y$(2RC)<6RG&OE0ʇ!a?z]}|9[_:Sk4]BiZH 0 !<$ԶPx*E v/jA6 -ZA_n4\/ t;x=qA8sAf212?~{oU9a ;-~mEoaPZ0 `Nq{A~º=6͟cv\ OMM#G7f2{78v\ٟ%puW_[+>ӿKO!.') S+D.. VgACCC[bhIR/XJ$a@Zg#dadX_q}x/q3~PfY'?|BSrn_\/^ zⅦB/[׿zCgŌ?PFa;`}&k0[1Z񺷉\»WKbq>1O|_FFF'~aK3H[_>^[6rx6|d bPsRt͙i8Ȕi#cE*~.<Ԋ& %Z&RV Џ&$) ضF@J\(DŽ "E!F4 _8zUsG~)Bߜ/n,SԮy׭'P=~;Qy8lc<:*K\!>ce;xV#0 f ([ggg6oaV;0<ݠtY:ޡy^ʖJ~>>1=/`:Ng4?sjYIkl yPb)aT`B)3@󗂢2$trs N UDIs J/ԐZ :/^xeR~b o_#}DW#7C"xM۟Zߜ,b[ڛv7U N"Uܲ)gN^7P<((P(!r&,SJ^:Ͷm7ߜvδ* FXg{Ea 06 ,]rrZnA̝X-83_ʛXˏXAnwGS V05|`40z(PoJ"ZPCkGbDRbK!*xLu #+;JTw| y>h%p`j_ܘ*yFf.ja|A6Tg Ȯg:`ӓGkU~ݸSvo.E;/uw>2A TP7]$Žy:O<933;Z֦M}k󼉉r|NSE1?95+TV=?4m&[xN74dm@KjyK3 ~٢ 3a%o0^8mdx1L0iM"  ].؊%٩gs]C*FnSer^._LBa0 rRLOwi?P2;yf2]z9:F~_ѲLZUk ~|KbS_[AulX͗k^?]g7,}񕻧rq3V>,#?dch>0w_X,Jsss[5<<\ǟ}ooR ū9_ 鵽{`yA؟κ/L}i. )PEcJM Xu<ƍtѐ@BJpF( :኱` .Чpf'N lX/~Ѝ9 5Џ}e\O|U&O zDAmh:yX'>/s p(2PxpՎϭذe-N'Ov/~;իW,,,lݺU)uC%/99sY.Sٻ;B.uDbk='x>U+`,$ +\IdNQ_ƞ^kե>t0^0@ ŨI㮟d'1n ӈD  bVH~P|)x O-ç(Qڕz\ȠBڑY B} .حԊ=o >eJk;_|>I[ox{yޏȏ| UJH A>{0HE ‘\Ƒ1}UzS}`1(t)FP~ڇy[kdFֱN.D[3GqZG|9(j*hbڏ>+6qt*nRhUkwE;5ViD3K8ǃ>< |\et&AFԒ0so.q+v'|m1:'?؊WaD6H"iGAʕY2 hu]5o1/}Ko}[=OOa.RWBH9oyfU c`/:,D63mUO 9J k>/=SvУM θ7Tʇ'ۃl?15a>G)- d4T0ئrm뫕qECۨQ5KH6VlF Ve1 Fa"ڪE^wiv9#1*̐I%i&-3o[j7UwYͤKzN z>wؙD ^n}?vXPؼyxɁN>" q~"k mSOHqB$l=]!q [=(ۮ<}-5pIJāAcf=O]r61tyetfC E͌s.lK(n7 "BH.cZfLa+TjMXq B$hje*կ `|ų˦!a2_j3_ Q1VP7@5YR03[o5Ïܹ qST@%dX?YyCwn[_ !PVfggo~饗:t4__?O'IRhd ;7 .jrL7LD);ӏ|7ڦV!6 6Um۫jJ24yD 6182VP sVo6Xv:AN@=8}-k}T,LYU1ĸQF(#2Lf ԻLJ}Bt@)~LqE׬{Ei$1?9M3\u+ [? 1/0R SOPYU rǼmEX11uϔgwRmíD;yGh!ZYBؘ &ٷfWx/O||ݞ|7xÏ u CF IE {?5h˪OFGMꍅG KL;t<3[Fv063HvONbccT *Ŝ|<ʡP=5ml_{ue7s4n!nr9[[FuqlByLLD68$Bgt8v#{b=/a'W:rٹy.Žx>4 X?xՕD{ .>߷zꐋMF6#!:l]|q&*RL߽NS,|~yMs2^/]e7>vG?;W7{2Gnh魏~߲7llʚpbZ'|0W]vho 8~bAʊ̓#EgNv).BVAL@O='gp:#{&_wk2]2щrc۾B!$Bm"Ll'cb%L[ XtNh Jƨs@*Цؖ9 g>S+;gOM|Sfر}Q{hgt$h {2LT`%DT֢ψC7|Օ ",5#:_W?([AG)C/;8O-wKrVl4D`I{5f[@RI 2 +ffyc_wbL1׵;o[I:|cKԗm_x{Dgю^ 7 O[.tU wi/>zqyW,gYA)0@E Kz AveX*F핕Nއ5ٻYovw_]q}}]jDP3\n`!yVq("m,H<g~!/_O̡%LLz3RX}e'4m[LUq#V#$B.^o+"˯Q?K32n(>S[^;SmkGx#}IS1Whs]mh׻ƌƺK]h(ɹV4a劔"5NMU}:/.Ν׬j#gIΜk]/"AՅyϏL R`$M0E3VW"6E1îZ_ySHL6g8%&+-8qrwjf~͕FC?sF^Wmݚۋ*-ә;~'O;ۍ}$Q"d]}>Ä^|W]OWks5EP"w|~GN.[̇Nݺ 7/NV~O?\^m@Sӌ)%?w|J;u*1 m;}{nKeW?JӼ(/RnS|ʚn͉OꞾ! @Z]Vn׽ˠk6#Ӫbb'q~oM~iz U"&W]wO>]MoJs>JWPb]qK%Õvn&6fkЕ6e+TZ377S',1:TAڗ'ckk 5 G[`<|?wnˌnzzY#Z9S$f]=O~埃0ڶ|롟yT.XzGMk?\fQӍ^ֆr+Tib*G nOyÙ.$Crb߁c݃/*7\Sk: $%]FBHnxdn>Yhr%?m^~=NX?q}WQu6LWPb]B2y D33N^t#PN)aC&l,!lE_}uņ.wb-d=cF oD0t2pkʆu2)#)EX&Œ%\Cv`} %Wv7Q/ ZBA&S'SMs 3=p4OO.٧DɿݿÇ:_mʻ֛^~ݮ+Orwo:N *Lg|Uk/ q7JpAxۦ;_2-οm75~Uh76>x߫_^{ō᡽9&@N^qS e_|{CXcw^wdw|Mu6|H5̔Lqb^-I,vկbHȉcbn$R  ĥt9e{?{@G$daE׺:%MPG K^/|vܮTʓY41…m;[M=z[:uFk"PVx %bh6w5{}{nH̖G̚>Xo&_}>?-Cwk^w[G&t]?ƕ3mvz*ζxG/{7'>4Ї6~b#eU ö[1T],+OΞB[azB5OE^a\8:2lkJ@1+#'\DK:s\wfe/ұU=M;F@iDQ>R.T R*E+G@C mJu([ZVr_MG}]l,+q--s䠊fRHt_7_7 W#__}gu{!!7#^J?eooL9_Gmo}OD8ny/z;Lo4|??[KWQs.U?|2H,ќߍC{X;X$ O$VHb'wNE uA5曓?~Zm>룻x[cGSS,K*st_e^aA9K2F\Bso>)˫o{@DrJ xֈ XN+W\r퍵V7 -bO=rR "8[ƯsC|rm^sUk_7|6 B ]-4$2A8dF 8+t%f|\Q[g3O'~滸?eR_2Nz5 W YQ勊_{UDнݳGM$,f`1ZpitיS~O| GZ3 ).uKUoYc,|vGoفd0sW'c_*=PQ{dJf񦷌mLIa=]W'70{2 BWyK>6:񕿿m7|_b1<gFS#gCK`*?mҗڿh5\ժ;0!qTʅ^cSs@kSniBӵ;ž'ؼ.pr8r܂lGRQ5ʍ F?0்mYsNX˜4Dc=#ʻsNiԥv{  B*%Nh!l0.`{};jƼkaYk̽<_X}prwX߆㚒n-ȹI}ɰg1UE_h_fqa\X˞ |@O|ï~sSe V> E -]w;=xjMJtܐǰ6Vݛ eOiSX,]1=ʪQF%18Cg d%ak>/TMWwG=Vsws\\׵},3xw2# FI7Y.%Cr,DZ5vJVmY*&Չd|cGP(6G6Cھ\B@Kӵ1M'Ƞ#̼dSK{TXaCvlgNݱi@K)f;B!Ѕ%woYomnkk;6eԗctS6c Dz(րZ:?2ZI^̊s딕Rs\Hh :^Y:aldY>J .,(QBcBF E2͛Ŀ+?痍:řus[|}ip?~rwյ|m ~/PE{MG}8J󢴯 -14TwOXЯ}P5M;2=PUƮ{d{ّ8\Nح'R!'uC߰|# R)EN 4>I[QF+F뉕$XydgK]ͣ7&xF:@Vb6ntv\h3)y'KS\׿׌g~\43tg )˗wl欦CDR2U_OuAM;<`W0yۃrPsX3MeiL=v+4%K%kS|R.jߖ7qv/ +#:Vס&{ew?7]O} YoՖ7L~mQ?Ytٛy2_ '畎r$޲l5)&|N^Sj&RڢֵI)bk^Ub_x$-Xيd, dM˟($֤cV!/§>}wEoʲm_Ufa]-U#!QVкwWn^{ޛ0is@G \{C)=(#Bīz:-#~Qz;:s}w;Y>k!v9{ˊ5&Z_z% QO)o߾52ˤIѨ?9Y6bcUNMgo'v漲hQ!-MfRUppp2S3  w`&̓Nuh-cu I=x\VԚ׺(۹xO߲Ͳy.kk?Yƣ)q*vC5S;p%HOiiAVB=,ʅ~TO(e2E[ɣH"솮w.bWO<|JG;w7W.儶5Z.i_!O.ƷGh ϝ_e]VW)5x3Dt2Xw[^dԢ(gsؒR45 B7_v~uWXres_n_8~xYǵ[(Ed7Tٻ7*$p˳E{UbEtE[AMes^:~\`GanH %Z~D(4t9|4#nH$E]4ܓ=J)'k1K )hf㥩DpUwTҙ/y"[|AiYȞ8)4vUEYH$h**E vj /s[L\(U9e5t`˛V_o()!`{Ye;%_LxJOHL?xmS.CyLVt\s @:Z}WC/s#N]T>Y\Z_]$;;sj$apcfrmW?spcT,~o_.>cvml6sٱ?+o+tGۑTCkZ#*]ݙK2N*B%A% >8"&z8!&]O|~U+- wM7pK#|oؽSc :GR4hʾc ƃCIY)GV5M]X+H嘡EiY4]\i}ɐE J˕:6(Hl+LchBӿggӫ?/ k´s?r ۩ee[?ꗷdZb=߬u]^~yjG/dž\E@gQ9Z!gWS𛷌KDzNz+WqzilT5$:@HNG\U(P\nA,<1x;LLnC v/)2Q7iٸh1xmNLRXh6FH\Cu(3J5Ia-KVohjlzK7g9tdN$C'{~tㅊkZ+wJTĢ?( wrՕmI y%_HxV>b>`vƉZy7[BEdϾԭXwϧG-DH!+ 2 G?~?fϟjV.@]'%77;_eŷ10~O+]vy:'cOaJMd}/?t3?N47s_׬<-΍uPe}}{׾";.Wl]yRy ?Tg]s#m͕(MHRw yBhU C:u_}^2ph-auU+?5~mC׼eNqL"ªTޔt\` }hAY e--q%7UzOx ~J8?tpf^OzeJzC?=\;zǷYr^93;;{&ugsǦg;wgA)ZZyS'[?rmWMzINL5mjidN>FX0ʸjAn>ʁiEKݓz0IsM !6Q$1FڲlƓf GN:R~ra5-(f fXDJXr5/sL)K{ǭb*㉧ yѣ ʹ1Uk#%+ʪTR7PDDz w~w ~sdtSzݺo}Yixo`dEz9`}NZ/]6n+]O}pG'S_|H剶U d9j??Υoxwgko YՂ(x٥OmwӚ\prL"JC_ZM_~џ<%__ݪevy{П,Ot<9m8#/bלk4 ( 8\d5jK~!kC,G-{=ɹ QV%]@6 /p󎣝]ScLt|>@ƇeI 1+wP DJ(4r6$p9v}ރBP}fzzu!y2*>M $0yƋ tPW:xq}I)}wF*usn_6USe=oԭΛ.IY}Oڛ6??l&xׯ&cnǟ^}홫.4?)jKZ5'&ب.`&hccӗ`,(rJ pC]Ԯ[$rh$L?e-vłz, gb')({VV>HGu4\*6 !߁<(yxĂY2؆`YfTeU=ˎI7KAxỴmヅO/M[yKyl`K_YzkU# 6&I{x1Y?]wݱkiq|e7+G -o]qdžb⠄?튲,޹q-W"hmh<:x`{*oo'NU'b=m+i.4ƞcovƀ2*rdshRъDbv=gӺn^E9.1ID_v$u7bIwXc bRUFzZ,=),oyacޞ{ǮNcc3 /x/垉&6ihnFbKA7"ys}uVY)s.Ovevbݏ|;QI'K;'7hL|).:wyI\0킂9*5 Q-H*,<&^yB3Dt[ȖG?GGӪףn߉͍+cѺɼF>`$r$IΝ^Er.zOPe8XXrP8i߾kwjy1p1[wut Dc(.%Zuu[/ƕ'.5n5ǛǼinϷ7?x?d>)6Ȅ䆽x٠BsAԸ.g>7uw=֒Ȟ袖_r>3%75 ЎIV8D֔"ƿwNӇz[Sr/ ocA :Xu=\X}Β'/Qg.;q×7ED) z`g|5 }~*[H0G'>ֆ߰{S,oW]hF_BnJR o(kS*ZODÂrQHɢ! 7ԬvߺܺjUJV7y1q˼mnLsUPسc7B[ߺlD"r#[u#+k-i1LWa;;K]R0FĈD|3 51<Ϸmsxpl;L>I6u~y!i@=h~0Z-WG{*{v %#Rת82|N/,(0Yr!+,MOn55aZ㺚R ?#"ClX_l0TQzӕWK?9ܞyXyߋ}M;3X۪5(k?6?d{|ɍV[bL:IdXV\:vSbz]h#B̑_J ZEL*s^Z1E#Vߘf4ٹ,#&@#Nmzo:';eWedGFcނxĮE>*S ,'/m=u DC3 i<\TW-PB9bP^!lz=v ` ckD1K ؍ѡn"B4Ex ~$fm+ 6BGϭ.vo}ГQ&? \S//'.JxƬW(0Z>9 %ٙ:U H0m޺z6wyW[hxg޹w<G9*0Lɟo~LE/o\,v`kuX,\m0yM&دzt?~F,QxtCr]zXE! ]aU@E0BOoolu b,|R<{1xzG'9 @ dA4ꡊ%'D{ !jP,9ZӖ0aìғc ^Ft!ȠIl#nɑ^јډh#r dyƸ TP&''AA|yڝ@aG M;T~n ".>S\W?1yaI * P&JD5R@y3TYŽ{sn2yyоėOi%F-2yZG24_#(C;l=" _e.Kd5_mо-ռl)ռ8T~x۞OC+ :Rs%vu3VM%kҢ=;J % Mkp f\hP<˺RhS_-#]S3_*`"d =HX%_dΠ$ѫRҖJuDюI[PLȀճ: YeѶ D4ԢF}i=_7O^''dСvʛ[͜x`[׭J,0t]dCLl -:C:QWu G2ܴiӚ5k2am###(ZEgg@˖EE2!֗eܹs˗KyiLX,Nex^F<7xAv3_6ݰ=SZG_$c؆'mNv=) =z0kBhGft4颠V Tvp^ӁF}8ZDx8ɚo'DW_aύ,C{'ʲu{u?!Žz]?؃%3P xR"(hP1o1ai8uuuWkϟ?66F)uuu8q㺮T?|,ӸDp!4텬~}D;Ʒ4_R'5j'eJǿݻ:-m8> ]BcjQO h} Yv)H1G%,4`A-(T]+/{]R(G OX9plMxtJ>9sWw?ԏ]Y"V,R@Q!MF Hs=H C8QTcV-O>?r%\Ж-[z{{XCϳO0VA/' x:uFa ;Q8xO8S=HA}cGxϞ>yM躜\]bԦ̉EѾ0?OQ$h 8 ZF VUр.Rh$hIR>`&P'ٷ{U_0n\ߺ5bO.zl"J:pӱUN @ ,ENXV1$8 zK J*wGǟr'~sRat)uߎ7 >\r;>Re\{e ðPT%{ $I(Uc_<88y^WWΝ;={衇nիW8p`pp0>|}{_WWWooaa^{օ 3D"aFkkk:T*7oqiVUp/IrEN<J.W3no$esH (,zEGၡWo5Uyx{E 6$ѥi # Pk *PԮڝ@UmC׭kN(v*YK%>~+wmwmzbt( {U-sٙmPg3VZip'$c34GNh l7C CB9JC?CXm >:&-Ovb YpW 1IJ ]cqvD%ln.ma<Jqxwoo:)A@>uWvtF& SÇ }0D{Y'&ƿoƍoK.A155f͚V0DQ׾6004`}p&󼖖X,6::dٶg;vR0 B/_9m_̎OdЈAf5ꨬGN/x`]S~ԇ dTxA.|x=(-۞ǧpW$=G[5/2}~i\_f\Q wGNŽf&M фi^32rʴʒBQ 30!Ő*U~.<}8_/+g Gz(L|+_yԩ|>_VBxk|w_/X`Æ E p9^ EQFFFhZrL&5pA_E.ZZp~q. o0^pq֚+lN:,^%O|Ȳ7 ۆRC"Ɖ%ZǞ~bh͙wN*iBK<=էDTQc.V6?tZJNy:XD =hPIuc_^ݸ#cߜ6oά̱c%YD~ &n/jDph8j];$o}i۷oӛ$o[./Juuu'Nyzr'loxMT5L&SԞ={( TگT|˻Սc_]mUЉ#F+.H3JU-?#'{)LHHœoOMWӴAHP/~2D7zX͟\muF62sˆPffώXJS;szni]QWN\5+kM EI{.һބ*C`gHfc;8}Z3!p-ߘ(h,߄$N &` ]SKj>%\Zkv0͹Lک|F(ʵk kxޖl?1k߉X{#:;_gvBSBBЦOF#q3^SZiP zmG싒--R~axy ZOs햛a&5gktf381 ÃM2YTa xS;w~r`UTk;$GBNjJٲ~d|~O3ws.Wס \(.bSW-|DdP 5AS/JjL?'hp3/ _ GZsmoG>*! Qd"Kau}:{+gvcko;g`r1R-Z<3{P5CˢYԃp!#Ci=#I{帚s0 m_/ XXi JC?dLfAęQƌa#p$7+- b~,~ӪYTHi ?,aw'ElALth܇k24a&wJ@*A12%j yh,@7E)(@F6FMWQ$)xN0(Ij,-FL*M0^Ux.$ <ϞgL}9Lb6vBD "iYszσz&) kڼŠ<@jpFD&EȢpX O;º2*QX<>^QHŨ*-ISv->ag: ~U~ ֔O풥s5YFuw%5/[yls=jَ~X:?2/5E]Yba?!tKU)?A@\,fU^1>Y <\.rxVň$""k={jhhdD!bDn-.׼W"B&D475 M O<Ehf?p=ؘZ6ns's=/@Ue{FF#Fty2ˈӷ§P;`Y>k5s]KȘ#1$0}2шAFO (O"Q%! 0#f?!ZHp"-|VFk5{$3S?P |H*xDCLwXi.jŕR +&Ot݂B:;#dž:7P L)'y$8nOE%,Zs(BN@K'd:fmL' eF@?\(~η#E"D,ٰ \*YT U‚ [ťccNZCP&۷lkWX㺕mhhda,,<3$g̎FT*`|T !@F+9a(I 5l*6\L r%xK1a#E?y"~uAp,!W | rؘPEg/C@X$8 FCg ^( Du)mJE"EU}aעD-He:+Citk>y}Elx>+oAc[/A\ԏj4,HDŖ.[*J3vio/KR^׉YǔT&]۝ˍ ta:jET)'`+REjo灮tQ<߯~UUU=r *pE BBeQeRu&Kc"1)lDG`OS !P6FѰY W|Ņڬ38(Nbl?(ʈ IGga{3:@ xhQ7T.|| !LO}b+ڍ(uZU`s:8z>$\/v׬ZlN˃zI&K-g |Jk1; {a/:S*J|5oH LC}`~G098o(ǂ-@׫ڮϐ,`EUsSdz GdY LhH iU1".ʬp""#˄p8r,t(@s%4_\1*T:6L*4b$'ycJ٨׫c j(:  U_$ˡ')H{ W(̮|~\p/~@Ƙ*K(LKH-ZZ?1Q,V ƞ?t: XN"KVw۾CcXDĪ9]3aVXAQ<3{=O&1F˂"7!fD2mL#MF'wkܶLbirr|,YH˜( ʞ.Rd%ٖ+P LX*f,۾=NhT__kmw=٪$HLDXȂ(o,sN5 X=$)tFxGC.ioMԂ &wa%Z>-بaANKn0!Q.44x*|$b'(aLzHҁ,BEe6CFZU31%JWZ|XU[b: %:Z}o @|@,hޣ?F0Ver=y}Óh~)DAcd1%'{502N4,>|ږ:p!-˂,R`Dj$u @`DR*0rag&>fcljr*33Qɗ=Ȫ`VUZ:cV)Gerr !u]X6G9! C&@@(7UQ؛e EyYUbQO/*J E\/.e.`Ll D(W6ytiHDHH=~ 9Ϧ _2Ix* A38|0E@Nl9ۑ%鲥sw91V ML"\Q̷31/ .@HVD@ $j:'$(|v" Rl&mA],`r-{JRPQUU(CŢ#⮖=}> U rc'PQRI-j䋮 s#,8'7/-(\{U2M"E{)1-I#e FcIQdzr>d1*5 \Y/ B9 qOy 7LFp"9~p&HG :ܞXxe&aR\X aC VyNd6=O?"" D `G0\;uIο{PZמq?q|@Xc;*)RT,ڿ6C" " EU{]ϧ `فGA6Y'@L.$EuEU5ţ,_*z~Ǯ'fRN!*a(#TelLzFEz,,3$L ]ذPtZ2|1ؔ'\*apAV0>M6j2#,!iNP4Ġ1G+20Ӄ!P;2\,<' Ղ;2ZJٹr b?qxa#\yIxh"RBu\ l{,T \IX/;k-毒3w"A?!x B;2D40D$ū*T1 \s=*r9oư۷o\ASh$*yc;9417>~:YfٜL,v2aN9$ެKŢm Ps;Z|5*"}uz0<gxB y ׃F nr$.B EG SUzx14,؄+F8j>1Zp3q?tQ!qO t6$dt[ .8 bӿ\/% kiEɞ#=RDBJT`Z̗<Kbzp ua`py(!UB,ފ i3HH$H$ P` =C('%QT+Ɗ阉S}Ruj4ż| y8[:E$B+"4jaE#F g6ꌒ.()(8^Dm֏s%G.8AA a9hU "Onr"te31%N/e#Sl>ܵ7Z<;ϼ9oL%8z^)g貏we.uA* -q`ʇf>QJC6z9|@b)ѰZ|< &*Z:oj>sb$[=W&lA{R㤓mmd"8XqRױ].w:Y֠OO} ]IQ!GW'82D0Yc%#db^d+GĄ:Ɇ*Y@#nUjF! Fp!M *v`na^Q0-$8+_% *)^  7ӜbɜqK(߬9`W!9&W6K݋;PR2 0.80i=C4`6y}$*-㺞;j2@0GZA/cpYG'\a-'hh!teF'dyf*jo?ppi]|b:jh?T_ URMT Dk[,Y4 #yKÙpx;9KDN#A&T.=W"*( ,StDjCefXxn\LxjxND yyG#t$IEq|8 qNFٙ4f`83O㖡GL=笓}i/ Bmo5c(N/˃Ћ="* (tdpUQO3U+:2IP_$ XǙ>@qp)rH#y݊r[0}_f8 \7#9u Z69ZW[,R54xezFD,TP'_a>C:= ("choҬNmN?$Mpm&E|8B:8l$ GS<§T<"qfLyÁgfrENEJ'.Vҝ{Bf0Ԯ%xAp )4.@0 %=GaQ&;6&$yHp y3z 6Բikyc=uKmۉD\.UU3k/ NƗ/FԗrZTd*ՊiBePKƬd_zlAغKЌDĉg( XܦPhID)U W9灂*d:#UA| S'HRCGa* 18r4kX)cfбqP(C C/ahr#lSV(StC"t= B0!ko y<^1!/mzYT<v  ; ,疍/_6b?١XcaMeIUE+ Ռx$HGzݧ~0zi ~=H! DV$7f@ L!Άő>1Q:|eZ8(fdUZvgvȲP1st\)LڕBY׍fYV: 18VcǨ|B;\NB|S$cb~=OcE*Xw`.>xe{^Wq<).H2u @B ߄<<8&_!H!|bIlO i uz L<i{f!ioXM+5+Buciex[ zYزmȷkGm/Wlw~|u @t_.P2TF,;s* ,q-N"z$&sT~B/&ʿ(2[ f! 4堠4s}Fovwhp(c}c MaYl|'Gc8yj>Y(Z^]NP4;-d!ΨIpep'Ÿ QT{k\R*¹΋\T'bDx7Ԇe\}Z0"t:S@d51LA}N"Jϥ?ȇ2t gɓ-W|T<Dwüeϗ!;Sa<%~S!‘8 8##0m s8us ]\ Niad<׻u "H+쉄@d#}L'w/ZNbM*A@"jK: PV2<{ms0cS8Y,2<.%1 E>`N:koT37+{RL:lzFeYŢ'zN w۸kçHC} ښʮ'Us:ԸILY\!̈́zB)#LXhOy0X*b=[X vP+e9Fb%xݳc"m$0pD=ϒMXkF`CL<)uͅ4(^~me14Ϸ]/_1sjɴ-WFWgb)W-jɀ MڎkyD]Uݦlp{ޡDT^$zAt{2jcKEyQ,5(aL׎vйFNp"Zc}'~獗`._Ƀ'{TU$U.㹍uu۶X|ڵmܸ>A`6ڂ<χ;DF u S\'ua'0&C-JѸ\z8d-:^1I!K>61&A{-`6@B0p* RE0@QQ eSf1 Q>>O464[vӦMmm=8h`<2>'&- 9R╙1Ml']ZE) ~*I5Ģ:2zH2'X gRBo1hT!. 5=8a a 0k{:c^ufka,ǵ=P-s M - cox*wwr[۱5b$_trOeKG*E9X" =ݮ8`R˖-jjhZVc"?:АZtm5==28>0֋w0ԈlOkB S4Ruw'+`|wrX &PS eLX^a+:\u,^0?woOep@D@h obH$%C3`oMb2 xP`7ˆN 2Iw='OhLS1LOlQBh;?mBD0Doeq{Q{`LbdOcA_PRej{#Ya<*>\ETTPTQ2VmOm/7Q,Y㿺߲$ B=XRX=cBS&x*:S ܸBW,YY{ [^#嵎!C̄=r h AGF9Ǚ& @AL51Fb^E r֠ a?"48bZ_fmdaA؁-¾ʿI5+ ))$x*iI4#( b޶Js!f|5uiT|٪%;1R^_\iv;)ou "A}]R]Ń)COE4فZLp_dZxӉ|FZUUE:1J. VyiEċ}aScfL9K7 ‚ B>e*;z?|$B#YV?HB|zX^~G\ۆ^٤6 MF=P*ϐxuUqy/]~ lO!!gNU!^!wh"DAIS yp9C/Nи qؔƂ"t}_Kp*s$褶ZDE1cZ FJ7xMx 1xX=d>\oV4k6a(`t&>u)D)!CVU͈K#cXTK@|^[¡lV"pfPbn^\EoR^7< =y/il~Jibdž\ uh\ތj(ħ] ]J=,jSY4>s`D"iGm!P#$`_߳dS(ge\N>eMLS_crY1(K @b]'W,P6hV@I:+.550_(ꄑFMs%׊z2u(0a6D͗.C'턔3v⇋5r}]xņ\!ʂZSgIW=Af&ùMQؒ &"24AlO $w|, AD:E(ABhkD-Ů\Eu"o6cPɷL,Wg߰>P M+#RG}>H$Q*աJN܉Mț/[*k^3^ϫGkM[SZUm0`-ت |- @ Iho:42kc܆[g{5pd"Q{gU?gF"0X!De}< T5zDc޹3gpF'&AG3ln![2h -HU9` ^/R(=#29+OAU.1h9@ $#SkȆTiH pjk:0*pPDiyi rϮ :cQQ,sȷL2JWlgIkUN+er0AZsĀ@IHp0BnHT,ʕJ$@E! ÕJ>nD?BK.@ {v;G t^` H+ĺ@Mǁmyk;vz0&R0#B}Ys0?kޟwty*<N995f=B^K qGasLj*Z6P _خa6ӰEN˺]:T ą!I(gFZcX"BA.;aX[@β =޵Kݪ%{:`"S@̜-e]W#|>Y,JvFb$H0[ Q(Judx.jCoj0\)ED|UBԧ^&#OfP)@0a.P6[ʸ$M {&8FYqG3pK3OY?ga`F혖wܳ GFP&a? , _)MǦc$x|\0_#R)QH KPQeȖa\t x>@8G{e[TիJ"xj‚h~iPV/+*i^XrvZj!Eb%ԇn힀(#C݇7K`p<hj"e$( VMSDPꋾ<=|ph}"u1a.ETV!bO4<4V*fOfO<|hG0=k]M9̄MB@m̟])`@2\Oü_pJDDѢGB.@8|DIV&S*_%6A g _~BlzTJ=׻w῿RL #QƒrC*EdP~r >}r1=ՈNױ=a fɓmMpF`HPR]Ue"1TK EMQҩATHeY>y %7P#, @Sh~ b|Op<88rM;kZ{JYqY6 ī@vɳޒ$W$bP H\<*Wɐ@1!^ '.p"2,QEt| OkP IRHPbsO$|N: 3d,;&X#ۛy%lICDpD9jܦ 0JɮV=˳urj{Z4! XN Ɔ, N7g @}lxMEZ<}C#Rr IL0 P `Īf"+[G{NI,Gz<^cktV6z8Uo JRUUUdLzǫ'.T } Nw%x>~sAf3M7bno[&eEMڔ_?hᄬ@%@Hg|M:34U,c; *~\nٕ|`7gKgVKmU)kg aJev>* զxP8؁ HF|:a b'[d>_D:{$D˗xB& \%%FQDL9eL Ŕ%25<~ɲ!UU5& ulpHf.Sj3\k3 ˀ+IRrNQNIs9rI@hċCNH1y\xd\1t#a"VL{ΰJJ9!zhJjY~8뛶Xe}V;:HC qA e+]pT)+SѾօKb3P85!p9ͯ3(%Gu>uj, Km^FP:., 39DPӡEpx-щ@*DžjUB)6!`@)mn1qc%<(Q]9h㥪 -iu j^ *Pb?pC*U^Ϟ1}J ީrٵmd+ֵfmS YV;w}7_<7b3{"ZDpC*ZN vC,A$V `1c0R>.?t~GC"Gxt3fX@'ldaINTO % ^=p]PڨK|L"LI[x !rw|FzID~NitRA N @xW )hǷ@\\Ip%H #Gzz{%V:ټxYjbAV.F2Wʚ;L@i0F yA3\pgqDQt]<45ø.]-,ɲ ;:Y5i|[DD h5盛w Q0ZlT8fk8VԈyoi%"i2PU)^c~4h&/U`3 ,6GUr*̵Qq7f qe!(74ȰpN yzT`[xzOUw{s Ж74ゾ߹W䨪Lj隵)Tap4չx`ө9mΔȆ!I*rY1|KQ5LO@kiy1fRBEXGu͙ 7qn.2$d !EI7QKUҢ mWx:\z_0Q/gt$j(Ikq1A9M-P ]x@coɒ;tq+ hBprF`|jkdb0? D5RJ] JyRBvS}<6UȢ# %Ӆx(bfxI#D.M]sJr8;EY$_% =}{Jj ش,)G#z$J投c˦8` ZsQsVka>gJL!3 _&(&Gj˹QYI)rcdIlYT8q:"1ZEh`B]#@ ȏ!2ta;ǵO. *QVrᨱD/L0$=ܤ*, `I}=i@W隢jS{'H-׵wXn0Љν,J p=454HMx$2SekX[o}8%]if2SC߿xhʕk 0"eq`&IDc~+W-[֧ND4M5njX g׋31oNLNPzJ}%j0h7Fj:p>=eʬz]Al K0j3h;q^|B@v0sU(p$ =)5 >B,]@.Ԁ~T,;L$ NPQVCev@W>EcRP8Tp-d6J~b:Z(Er^=؟L&/]8$yGtɱei4.:-`=9_)& w cUը,؁_*0d-|)h^al6:!fȃkFѨAih8%&ѳ?k6ACw3 juQqcT!"8oU.yA(A l :ܷg`3S#I1t]r`@ PAR2-1 Z2M3`TPe1u]"Lgd6Ved " \<u1=ҋyiE-j2N@i!7()Mn8`ްOq:DQ"d?,mr7ϬYQF eDض38<E j͢& e\O{%y.Qf%[o.X2{νe׷wLړ@tk״P P-9\*idũ8Re hN{3{!WN'3=Y2:*J|x?z5WBZeeVM7/8ߤ j:M'Kx{OWGAs.ß@2,BQ9$岸 A.9<$A6^^8՚\ۂx*S@* d*_,Ud5VQj-M-H0 #TM9P0"#V] I `cㅓ9T 0c"L=T* (=KaMϐf>HQAZ@ AĀp EلJ5)f.dpЀ 4@$G`ÞGh;g: 8JJnS3f81e{-<[B@阡blDǸj㪦( 6N-cxxț/F2$It<664"Ȝ ݭ[655[4}T2R԰L8$˒bv,Id./aV f{3*3-_UƐmۗ,]HħuF<㲁|POO}* h5_u8;w r7> D_h9}a-3'o (pQ]c|7mH**fIZ>ӏ< T3g現\="%mC#yY LYBa`EbL3*@R`NOQǃW1bEf~/8ϋu@%+jD*e dSI֣:^T^ #eП&HrV&NC ?'TW1Ba[w=v1Y* %2RjfSMA;%6`$,cdF5؇(2uR[̻S )dEhcftlZ75nV%ooXkMM/<:tiuO';Mtǃ< `< = (rHN}m}'<͙͞ek{,bx$*|g0K)lĀCcf/4\6D1JzuM ?9n2uǃw<A׋{>x9GQ Г<=>?!(y0Y {9R޵0F] vme;B7LnF 6ZFx9eL#pvzs-U{r/A7K T['߰( 7FqSJK&2f%^wP΢䅯>+kkg (0Q<'0b,*%E܇ąױ5nK/;[_N>sA%Z#J^4R 4GW7el#OԘ̟K-I]ih,kPf;-rioӷgfRkXH+'!ܾ׮_SnQK^ ٩(JyVj9tR 4ϝ.vՄ(>˷3 4-B$n's`#>O/[#c VAI <@ǷGR yQR8`;-OO}s_ˇAL)%2/to\67wzআQjcXw{N;`!TKP4/?0E\(.L6;B ӔގX_ߴl>X^Y^z۩w . E KOHT'; OjP-C̈#J J޸AyaFo,c5>Cw@0a-';`/aFt)fK Nˌ(Xx08u/QNsO>أ8g mn7ul_J*SLqϢLjќNS82Fo%i;`c$GU7K]PpHy-0UA4 ymP ) /G="YC( jZol~t[ErA2CBZMjQXB*;^ Q)8BpHO%0 wI K] n gN}SYJP }+_)رZ Q[. " KT>$ǷaLO?h{ ;*J;jmko1BxxY^tNN%TQre9l$JRe{c'Ru[ J$'w*aivwxת|V?3W~.4# qx_ޔXnԫJ2B(Qܕ9H.18!ҢgkWN;[Y~_ܿc¥37^?~σe|#Lo@;WpPe7Ί'D{`]XY+ gYjcUy p!]Z{-y0j!%0v sVfg]"ǹ_E1J x%'m.Q8wa1LlߏO'I:GE.A~GJrudCBY4а(Tx h 0-IraHepY%,ۺvcRՔmoneFfEok iFUZܫ oXUL`Ie|p= GR0A@ l*HosR??"aZhXio(syV'[Ro'޼';e{W_"W ? -]g<θ71 96NaH@h3B,tY&@3jXF@ pDE A6Sɩjt}hiFݓ'Gq8m՚VGZ67־{F?\{Ai\ ~'cݫQ=!?@s/oPp3qj6Oۖw՗2ߦq[B%N1% 盶h56Aʃ.e@K[\NiF Ϙm.3.]JǙT*NO5b8}]Bu[CeVq3ȇ>WNUxR. LU8\ cp\%ఒ)/G-`UÁ|=@y}s Qv$sF!JLlt6~i0XN j憧q-`€[#V4Hawx` A 0O-bDJ!>y &vvmGت=XيG -Y>N^t\T+&I5-TKHY'P~ۆR>4#ԵE pQ%u. 8&J&<xZQEf x? ɱTsl Jpfɱ;qo6[~~롯;^ឯivL}+9oBAdZFZ+[A2J@ زJZf̈4C"8v W 3Q|b~Tq%\+UJZiZUJ." 51P"^X!%E<..Xj!m:QQ,,Zmq lZ@ut4J5ӄ c EHq\IYvyx*&fthRiYT).@g( pLi ̈́R 9Nյj`qnڳ-EMr4Fg" x0M7wy %4&#&VAhjQe8@ı,ݸ;??}b4?=fllƝz"U*\t -u! UeUmrX!X؂)xH l:`SxvVBJ8zSSN[,U:TGvC?}2NߔZyR,#  %5Ƽ wW71\ )p~!~ qZ83G[qO؋h8Uqj㫋>t|s:PhuU?wU(ee)$~ꙇϜ|Jܹ%DdI> ]CJSpo=J߂+HN31]6mmyZ' 90`Glmb:~w&Lw[ײ%s]u %Ah\Vһ]BJCh9  _Kv{:{%;++ofW./^9y&k͕{ti|C P/;-Ἕ= xQ"djBe0K)[XϾV5ΟXY:mͷfTdEg[ ãGw.C ܊~P<H Y- `u$wBt ktbK(vmGazn!x0\?.Ɩm㬋vgNXL^}LTAyFh)|rVZT$ΩfYnų:\`ҕ?ݚ vL?=U~~S\=/Gqҍ' nÛ,(X {r'N*$~Ǹo5"ɇ(`w\B`s Uq+:<>3k1L-# !nuqn$ڸͺĮ--99}XSH. P '`K m0ŗ^MXَ㺑sh2yaaEtfE.$j1sˌHAr[~PVtWZN1'˳,h9zG׮m6 3lGtSC6&M#Pgo T*Bbᵔf=3?{dx `H(Ġc@ psiVxԱJhi1L ?X"b٫H1$N3[b! 2s,apwlDdr`!dQ׏1w+NǶ4^.YTrIwhaTۘZ67e$jS-dRc 3/vpw0 ҅:gVZL;]+t= *}*-E="R,JϜ:udnŗ޿~M1r)B aos{vƍHoתZ/QE/@ Om-׆α]h4,'aʲKJ'x/J#o!#LcQ6ֹ|3O>{m* Uh,=mRL ?zUaNL>2 -- ߽aLkJ9HǏ?ѣg)%'7ooFzck_j0LOU#)D+dC@6%=X|j`AjRE! dqJhԓ jT*of6sgZﯯBfffdܴXj Z9~tw,@h,+|cV}sg/d <;r; ݋<_y6ͨoow!&9-')5̃}+rN=4Y*YֶJEyD)NWu4N;ÁZKf",i=/iTnP'[_>; U"|nԔ rY@(k4jy -VxۭתJ|.m9^U]P).(,y* nT(͑,@BQU*CR AC7 B|ۡ *YyI2#BJ |/˂2p:w}O7}PSտϸM Ѳ,`pJלSJnMxUyE>j<fH²Jhۯ=44,;w'Iv2ϳS$ɟ~k #258` vTXިoIU's鰼UߩO=z8g1-b~e]o.ހ7*6V]5B>8$&l$F,$.}9*?RKmtaX\8MQVddkK, z1K!4WDž$PN:W3 ׶\T00fhX=4CwDGҐ s3Eit֖eRE2P`0DžHM*(-P]ܟj [V aRlJ52#?iM9Nh"o<}ԫq&^eK=1B6Rs&˱E% pB6fcW3APAŽm.K*bLwcdbîu*ըU JJgqT y`{|)Yw75S?|מ} ,%KR~LjְT}9R!(FLE3;N "l'Nw5n RQG W+E&xo{ED yc.ln9J'H4eH lF=ؠQTpn /aD ɫ;{*@6µs./v$*5h΀/ X}o&ȌT2wYmqQSI9 *(,:3K ) ~^ÏnNُ*CҥͦX^^HY?3Rjۄ"ȼp| R7q:bT2R0LZ(0E!?ܸGRH/.DrJQAlw(PL T,Ki8H۾{Ӳ&HMgV;|}]w@QdI>-1.N7^_gps!ddܤ=w'@n]By~.]/zt|8_.[tIoz+g+p{uwaVP zвX_&=.FI0BXFnUZ5HM~^$uKmÝ  T*8IǙSNnV{\+Gfg7Gi86 YT -1υy.8 v d/8\i*\ lˎ*aaQw m6ckaW+]<K1ʋ%//\ȼwmJ$7CaVڷ}wy 4`'F߾Xx 4ŗ._t1Jz~h@qfc{W0]U{t!)R8]̜ ȼ;U cΩGk[.:a:՚;?wyAk4${348;|Ҿ)g819=:D0u[H)a~/VYT鈱)/DFds]EQaH$ߊFHp?[>t eKi)5tnZdOmBrq eBFv}sB,ԜiSq\ ֙:FwxO.JA$pЦIX(fPec,o=27]+5ǽݭcgNÁ1 A0: G>G5ق=; /޳ 09)Xʆ|t^"ܪtmt,1^#C)(l1ۮBS.t9S;(Sau3[GfVT["Ϸ@EY%CV.oߎZDZ,/<{nz6%Cmw,In2&%XUh3ϠW_f|5V["wx"$9KcU#PaZחNֆTE.6IJEI"$0CX!F" \Z\\;RQwJY ? E$Sg+C yph?ф20CMe ќUӧŘNMUphgD ̗tsRh(ji9^^¼I (Ms4$C!XzgyZiM GCQ䆁#\o$˦e5k09P1 P)+?HLC9\&iS-a2n8XÁPVTsy&krE oM14-w0|ַK[*链+e@&'xDӴ䑅 &8*_׈T9άn";rrf=W~@(ۡqV2V筥档/qcײE$\Flִ%AARu\yz̛3-JyRlo]i“bV{Ĩ4{/OlɤơL0-ʒ#T"tmmWŸ2?v\VRlHfV6NϏv/sgŅG]N%ʨI4Hi87A}΍z>ׇ_ĵǣDI2$wǢ?*{cg󵥙hcq .ևi jh~Fؖ%s@[j@B --ɬƞD/~e8tŦq#j%ǜHء7ji{}{HUuF%|6sldFx9W<bq\ڲXi Rx<mς 68qjK_.hg.1V.SHaLh8Vhwmh0jêZw{tī6d\N=ptK(~Qь0~W2tA)fO>_iH*3+/A%k;IpYƇv?kViIM,mlt6Bu-%;RWkyFn+g.\DGDQl2;}d3YķkkY28vU]}EL"2qʗ<{/^ch43GgGYS`j~.qI>S+rme,9*hFHS@<7FY{8:5'ZJ6}'>nO/__g4B3SGWg-22;z,ѻ׿~/1r 4Bc:Fdul^|U^_yYs{~PBGHNτDXeBʔ uqݢc:ED5N.+Ds/CVVj?1DL/;{.#ӎOflj|;ge0v'7+ËZ[kzs\Zy*gќnB "( t4\bA2#q&$"ZlW?zֳ/sm'Y~5`miX:be׌zcuIAy/o?C<*6)m#:ba"oU"cd6W(lvY:B^q`5Z?G*Yűy+~Z7 =n@sq#8  CF۰PedzvRBI !)@0Zj- _~yG>*>BJ&DO¢T <GVN[=oW5}곝k5wEe#21OF٨wmzk/[m { |JRϜRk?\=E}ˋSO}ijQęNg|hȑy׭vvWlkg8Iw\? Ξ>G~ዟSɺE N5=zd=ݜ|p{ʅfąVe*A%dbsaNVKH&@%zcߤ-o,4yʌazj% /Tn|4X (F6L dS=1x*O2/_|ư'IiPo>>ooMg)}0fC% t[RϪ`ok5@_Jtp JaɄ?-EI:y?q4tW*UСzOy#|?+?074ݚp yA1F2RuFUޣKg/Uovl&A PEAFRd"#fIR𼈢`sdiٕZ!cjԥxZ q=˶`0jN8,({eYn|ǭT*J ,J^kkxLa% v*K0V+vt`04MOwv̔3`ax!big;f21Rz,@RJ'Ƅ5yߛy'c|n]z\qQj4jwfZ 7>gn70CZ>kk̲*Qu(eF p> 6ϭo^F4][QH:,upҒ2krQJc R#(IX`-eqLдyȪ*AB ffmz)qyrq=?wco^-$!̈́͋kLJh56~%8ƹW^~iu3%0Bߝ<>y# ++?ȑ2 ^@!4ox7ӻnҮaG9rxkmԩcRv1Ͻt{ D;.]Gv'yvEYٹՂg͓4ΌY"Lϟ#Zʲ̡R.G/(]F*el:B;;filA߶l/tюHV$v"ዎB(_tbE7^;wW֯_8G0=t(( . v*dԏ{scG~tw=P${q(΋55gxR_ʘ/?_Κn?0`5Of<`[5$?RƲNK0l pph7y`5HΡ`Bs$)'cʹ聕+/]|e??~w>ӷyV7g=Q*J6xS_ڕ-F]\W*I!+~-f@3s^OZa͍__cϮ.>tްc;dѷ"珓c{cl/xۻ4NV{a Y7f|hdـS)Aq  3"njZp&VeyF &F>#XJdr0FȲm;B @x͋| sF0/t;]JUh<mCd#{$Iܬ\pcPB"\bvffwo t A,QM.l Lwe ?- '֐Fkii>Y*"1LjLNa!L>d QX- 8 x@:(! CgL!|ou3a~\o&ǓgE2 K}/}bZI&ac;3 "AX[Tk߱ ܕ˟FWo*唉Q`2؏_jk){D"$t5Nؼtc=2lR:MyRfn.-Cdÿ G;cLn޶no0l+B%D Wy;DlƾB10uZFQvGʆ!l@H"BTh;.DJeQf[6(FZ=3H W._GWٙChw6/_Չg:NAtK>~s_'>h5<' \pZ17(' vvvTTCǎ3(BLt[gm B. MG(3͖}RXMs:[@2Ni$$&E0 ("A5@*%% Gٖd&:砻 N/zd/͘\kA)(/ܠhdrҢ$Q- [~cQJUmlEk휽3v{r [xg^TS~cY]ݩ8ݤ0ƾk_8}̑%rX^dY(z*ar]"\PRZ\zkyE<+F^UރaSi\MIJ-Y7+nTᡖRNHc0 e8+ QR}vo\͍FýWQJ9t] !94B.Qa/>_m!85 *E`4!J`2'`<=xJV7VMFL`JiiXPށ vhQڧ˅_/1 IE2AF.L{0ᄂXiV=G-04d ,[Ě> Ess%wT?ߒw Qеw~ڥsKv(\jS8DY]~˰< ZK 6WY˲~IR45_Y;n7~`sǾ#帙1B]'8Edav,No~򷏟:=\ʝ?p,: "( 8[f[m s,E~H>t?ډӴʲRNkgc4S}zUwޡ0/y?F <Ϛh8^Z^ۅ,6t=bwz26\( `|WjuȄ)$\HfZq?+?VЁ=i!c#ab+$bn oJc4Ȏb-bPh/T*h4k69lLɥW+g*x\Uon77;,w@iT_}7/λXG.E ֬:apƖV_:w1W(t\ӡNg MmaOŕSUݎyn?_cg+gWwĝyc`v NMjEH!SϿ|RV?[~Egko\ QT!(} S$E$AFVw4<*a<ƈ4KX^/e1qs`4HA*=n#!EP˶,@SnZfȤH7'_y Kc3ؘnE5gJ[܄|Q9`eiQ|ǎ0p}@B%ПG>3<ﴏ;953! VEXk@^*B$2UhXMċ2E08e4m*U`(jѨ5os;TPsduF)EPkM*n%zSHu{{_[e5#oaڶϬũҥC*EZnzyHW˵#5 ya~{ï}?6\򾿎"]l}mg_=~ѣ;Xp#Clo#m|R8&U,i7[V"T<2fcll@J%[;ǎ-_ZoMͦE;K, dܚQ0U]$1LSE4AŬn{w~쏽Ad %Z"$)à/6L[E{S o6`26#k.v,,M7QEx~FQB|b^%}6r-7MSsK&Y gZW/=v2hdvc,\Ly~?vPjf9aX~h9.xq…cGWNvDr|X9Xzy3n[NZ{u_> G<+P <乚+`eL@03-*,fy]C.:CXPI,z٩H+&ؽ[Fj-\){a z{6(=ײ,7;Yesr)ףs380$ sѹl{s=1==NllNO/~0'ex?IA7{ )TCxy߃O4& Y*wR(3gF'?IBne((/1> Ve MClH lr$4Bj1ā`#P.;t O`OQ PS C)3ōLaG\{0"~sSsaDlCkJׯ\͓|%-حzgY@UܶA1H 76|mZ[Z-ؾּQǂNO9v(I'RcGCKǏ8uGX^ aDə8,F 7N[ݸ~C/ \gṮְWcʀ1JC\T ̊}?OZ\XZc+{\weOar6z 8r^RȎBv-%q٬\>~ƕ4˥Tb4$pT/ɤRKeT|{0,\zT?L a3w"V]?׶JtJ}A#bQUd0;)NYCa ecib bD#1FTa]6Z癩5pݲ[3;1tJOƤ]aTXI(9¹R9S,3WuJYVڎ%3.M\Eӵ\ B E s-f^ě r ! G+"x(`J3`$EA@H}lڅK^[*7?p./<׵GBENO\8A mQY.E~zYuiEGXNOWLJZ:/۸:ݬ2ܠjQxfz}$KRdw`RND (aD ^ K`^iVu4C/&XhK"m9F8ͳaZ81y6 "cQZ:|h)Zs;rhysjQ s_?:Sԋ3]kkYZ,+ׯ\9}fE:tQJW5|}+eT6{ hD)H:O8A,۩\bDp1'$;ࣇFeEd AvDJA1qWQQE)/H-@ZBjS2TeYFRRKxO”Da'~oH &%>~l/iOL2x(We.d@Ҵ2R~ՋŕaA!a & gR7gǘ ooo1VCPt@RwAqJ0Tkna G iBI0s(*Qd:dT>Yw t;'fk;hVRj677)!g{o<3e55^dɋA-j6cߨ.4jV Γ/|m'NAr}g~ܑ/l RЉa-Xf>6p{9_s;jIyյ>]mЗ_zUkeB/J̲&e)ǝH2K!!GG YtCKNXK΋JB(Xq Ȋ"ɕ/Omo C+ @hT^DcQ#?/uYslWqʠgn`Ay-# mrpԎ[ƤG p)c|_磼Ybn-Vl^*f- TJ8% M L32mtO \)ʒqznҎk!2- 7r–ȣ a Z5Tv]E 2J`4j7Wοzx5;«.Y[\xs8%X0Tpa;D)yXm7f`S'iznũ,.^'䢠Z VKHͦ5$Iޞ]ygx.jMQuu۩Rz1Vp XV3&!LĨG@IE`t~Ys!TzC.HPKQB-&#l+aei"i(A槚|>[%H16 εLqцH\`TM[fq{%BE@OPPp; f!$sM l\I@6'dkfi~߂xK̅,$ʓ0heErT_93b7ʔmMwy;H'\2UyXebcRQvnI!Dy`p+K@d\-pA^LKʹ 3%5d.{Fxi;ۂ@'xb^) uԙpTm,,nnnbLD.10I`>AQk{c}OsϿ0f{7]Y\9rЉ,0T{A[h)]Z\AfgugV\b'<}g?%6|Qr1-}JDzU '#09c˫;ǏT* aYر#JeoTT"/4l[}9QniW0#T- L9r;RO"T(0zU^ +݃#/^8rp^B /.<I`.C#a'1(ܻ O4Ϛq AfVg9ԕ ׭w&aԸ*hTANb "~J\7ioHu<9Pf:YEm_֛ÈŹͼPblEsݝf{<}ڋ^:sR7x-nmLї‹>}㇎/̧V/5p2u(ƺXCbg= =SP I85#)b ٪FOU eg`5x-2nuu5tGN7S-cǑrg=rG_PTE0K!Af ZhTVǘ8. %ݗ2 5CF8% ] 8AnqG+މN 0Patk؝3һs{+Qb#L!+f/_9zIt^P.H,`%Aݏwf.0$* ~h9Š!mʵ=c=uZ'g.<U$ EM99u4_2WŇg\0 //-OG=3]:ۛ Dq1IuiNP.'1E6bk@1IXsOxlQ-~+/,.Nq f76w,L?rQ3Ybvvm)-!Hı<Rl"V:c-/ 61P tXf;@Ӡh~# `Vq7e dZ(9:Z=|柢\< ~4l,&P5 XMN}ٰNODĨbKʷw,K:qD F %lbJ9B){rcDr0DLIDwV7sbu(ӽx( ˃ oR zݖ1FɒB3ĉ-O(dt@4Fتs';Xύ#ND]"xO/{LjSN&eMj:*C5Oĺk>ÍhKZj-1"MCﺭz#!F[77x3'<'?s??Ish8I*V$[\|ꝝp4 sˆH(JڭHIڬ'V SV. ~#YUrq%MCGidYo s,Kvƃ8fU;!Dh4eVA50܄1g xY.S&@P#'y ug@%Рd"u{9q>99'榖n.8vND|o0?htb*zTOC MJm`0AB-oSS57RPR ^qnT`z @59`jǿ?ȏ>/n)"Zf3QY]i&A+r($?W82AdRzT%3сw-aY):$k9VI"Z!4HoiY^+Dc&P 7ct$B1Ik(.Cc[/ kkGg8o\݌"3;r؝8~tϟė{1 BX&EtAZKW};v%GS)bt.ZK@;uֽϟW927.mGw97X2ol05Vu9ڭ R@ (2 (òɤΫWbn7APP|sG@ ٘1~` XC:gE սVHqn0{5E~v)0*{6kSGi$' tf sO?ܽ︻ٜQ0'D0}Ny?/i{UQ0 >f vIwql3;x8j[ky׽gNzǞ{#+]d 5.״j?w]g5\l«rJvā9 OeЧgO/fg>/O_?(Whutf'ҹݲv*E5*MQi  c#" ۏϟ6[lpօ, pLдHQ'qDDB0]B? YB@k{hPTkވFzxVP0i¥CcluS]^YGk(bV=կ=weeŅ@`-ֵ,bj] ^X%Sw ʪۯJȡ;Nv̓;rmez}}ssuNH{B{z6uqX+P^(K4 l#[Hbvɩ\4W6dU8`wB2ccXG/۲FiͭϾtZEqc!3 (~?Fa|q#즈 eWeؕ3r} VF[L ^Є=>ϾG}驵$?_~-$_PH? OkZ+wjkT!gރG07D*Z*74 :öO 3b fiD=sYnlF4Uȫ Sg6P0)*wL@Z2`B+H7]4n?GCgr{JDwu)?'5NciqS{*idM.F#pb"6ȋ*kx|V ӝF2Lѱ˫k[,|ze3xc ׋9V|ClofY"ŗ.=裝F %((XsAy 1q/Xm9HǍd>p4wP%ڬ卖\DLCNZf4:?axҕMI128"| FPk5BQm =Pd6x\,&vZ#B\sN.&K[Zyă;_G;13WϺ~͋?]V9˃QFߎ "ǁkAS:ػirCk`@Q#XG'T20tU.qu3ľ'o-d^My9ݥOr ˸ȩqJZL9lȫ/oڬxEG}w;p~}%D dxec7kv4Al.AvQe^t`q 0ݙ3ߛ%an4ڝm׬'F4,/o2:ʥ`=R?Co[RZݎ%' !n>@f:h8?)m12\,µsYhUKrd pa6*9g_|~{}W'LLG1ij詤|zyufGCS@"&^Vq{YU];RXjPc䥵;||a}!A>`Gfs3M2ts.:\G4z?SuDgr\|BeAZKGޙ$lI'/Wa۝Z3׫TL=lJ;I #33NaWHԡP9Z'LLNR&HFIe_YYz`UC#, E)=Ǔw|f֣ t%9);ssd.W&k<w'vwv="Iu1juڳv]4ˠГRR& j.(2$s@ŘBMA>FB!*0)qM㺪tgO]*nwYo #s݃GL0Vݥ[;8i?ܡdAAS!ura@s82OYȺ2.Z6 tF yHKB6]~~gº~_vr{GzO~v1<;?}p U=vmw5 ˘-G"P@)'=fFAN?Ŧ,Ȩ=u.U>"w,6RT͖âdlƍ9H?0ΕjNoq1*lfqZiUಀۈOz6ϯ-c|O䁇m/-~S|5ӷޙ?ξtHa.h/nf4Ѩ F#muL$ h8ƔE1i4.^nC(y x;{j4Q/N;[[-F2Rk!qQ֭vw_5up u98ܖ3Iz;h X,bdd{goglfY'Gڂ_%y{pwhqV+bR{ÌG搜.v.nByz??TUe+7M+evߌ O7گUBBljI$CF7THlmFJfmghW767wIFZJ72PteTmaiHFpT)Q~kǿfCDs|?+.K/ezeb؆` SN%0JIN$K3-IV:* @zssF̶לGUUQᑥBreu]eo__yjv$"(8ʔ'S'Am*:\,`Kw&`XE SP9O5'c n=({VMUQPp9^?hw<.b^NX=yN_j7i)_][F}Pa6 ~tm8^ĦƇ@k E:C8X`yN k `mHB"f.%~q-ku{ZۭDqd_K aXکXC%@G dvJuPJsBJ(NP,ⴆׅtfؼ;[;XՍ Pω8^1is*k0@X8E,Gzj*}}yxt|=I. _zF1y>=sĔ C"ha`138TTKj<BDe<=qd\L@vE5 gƻ+>⹗֍qv{ʖR[p1*i̱P`F(5Q+$>(rdhbQʢHUa^j G-bjdoŨ\,.{/62>tS2P|P:Ab-M)Z<~vĉީ(7 D!̹p|oڽ&tt(iUFiʹV^|w΃ s<ٗΎG't? O9 V@A0jŀ+ tD<{o_LFJNWӔ*SS묑Zϧ *6Ŝi+R.Qh:jQ eZ<3*bO&3`{pTrk7ROkWv>|{m_]ZV˫[>yxwPT+(eIy =Yf@dwz%ih Ҍ͍NEe%ǓbA;N; (JUysѨP1D]hnܨMWBh#hA^s^BuA t&F6hmyر%ҙKtfu:H)ThTbbM&U9: 8W•VYF(~FIx w>僲0ͱav7(NsLDQIw|uEx?]\,ST@:.63Lʂx'+KD]F3~#"kgc]`c_|&!*elHW<>eR-"t4ɋQ1aq7vg>"ʑ`TK78إDuu ݫikŅ+aOW qu> |}J7`l@b`|;$6#,8; , }>u4Q$|UmIҥK*43n";ZI-/ꎃՄG@1tlc h šcO8Z+_դV{旟ԈuMm#xYm<!n ;X'KAjP}yy)AC2~tw3%HץR-!ϯt;G > if1ZW ?!]'X,6#KhN/|鱯t}=x%43JsDS%e>)՝k>?08 R#`)B*;/WeVc8j7,}Ž؏|՛.]]aЙ*t"0{)(a0I^y B|l67E(.,_zL|w >:;{\U!xa$vUu6Ql"neiWi!* <*j D$rUt*KY Mک|p{h5}~ᇟ꓃Rg TJE":bo#D(FP>Hxi/\ 3sqF ~*_qE_`f<2R=R2fC/\fMY̙f"+a_V_iY!uuUຠ 1#U;qlf{VMog $,n5no ,[ֶg\]?6ۦiUI|4h[Jq;Y!8nZjKaQFxҊ,2e uYh&a<11PbYg)^Zm>-[2@>/?{Ss lu2ٯ&/ןS05SZ:3??W+"Nٯ{y>xnsb=^W/> \qa!Q"`m\GwaL6Jni@{eU'|?_ՠB~C>qg~W_|j_P<ƈQ?iUg#D&Eۣ@:tXJM7[Hc4U?MATNP !kJ(+Q+bpb6TwIbWg1 طFAXjՕ蠳Gūkksdol A/֡(]][M \9/=cl0DNÝՕs/BC! gUe?P`˾("=0%I;X v0OK_Ҍ;uB&O\î̫mv;\؂Q>ۚs_MM 7y{}rg>__>3AVW"8^YY^qª\~RѰ.S5(kR3GSb_\h64I"6W\vg ~ԩϿxHn6rorҟɏ8T O;'Zd[#jƭfKaczk/m`gӸ9|{{JPAg@4YW#2ɲËUmn/NZ)NFu1u>j"%"h8CF*g%+f9S0ߩT; ¿D2x@^tavS]mhBŒ q3F{cpmD玿~JݝI,}f4 WՆoW+lv ɧ^!"MFSԩ?϶S?..tu ԯ@$hL($ H[|yk،PTMPs"Z *)]**^6Q0n8Ч{uu-v3=܍.Ju%(&h5].Ǎ{? 4`80KVg;;. &i#k)3F#=+ aSmST^]ُ_x}_$ƶ[Y1 sXkXp/鼸p{Xؚ`>ԅ676w $no0N?zRǎ[謬‹/_uc D*ivoBvQzƥ6E#۝xZ iV+I8N@n׋R)-T H/( -i-AISr8J7R.9VԠa){i h%6'>I&z/WBj(+ ,H瞘ǿṥcK^ WV.:sZ4?vv"7 *A<'}ԳF J d2I=c+#&˗&~xו̈́P,H,"dㄐ'.ڕy1U1b&MR% )-0{vfv/~V'~/StnԢhL;:@}w̭^Z)(R頜e?[5&pJ %zᲊMFRA̳?,.Yp``=KZ$a|ԪwH@fN+3>ŧοp,ŮO ;_=SG,v,/hs}KJW;ZW=.@4J?sߌR[~7C_@Z+ 4DS.^\>sxЌg)SȠb(\#)T*%x?ُ}DZߥ731`s[GmTWrss{nuje'{{϶:܉zm50@4P*cP8 tA@z.žƂm:y#b?;Kf~=pmG->/u]T'O|DU}%2 Gqq&u&J'JWi{)?amNׯ.<|l`k택lϦѵe@pwq9$s܎r_\?w2}4Tn,bOj ?`Op)t cJpqU].M8M@]&ä٬/z[N4!1:mt}FhiQ4G^W_0齲]2NjlXh_ܓsv`Bl^+a7 JԦd;|#p1Q O5,^\'[ܼuEW#mPB7s( Gbuo4`4 L(DPβ(}kdYx wk yœ45nym*e M/.f}0mv6K^UtXZZjY؉;gݹ]ϝUj,5pi1{9XD2]&j%2&*wnbԫhvqqs͋x}\cѮº_~?#g#]Պ3|gl ꠳1hAJ-@̪qAL`uD; Wa\Ed$% %ո(᠃Tp>p({ uU, 36zyJqYm '梭eP<4zjch>3F8T t-v~9zAQH{=Y_؟kwi&D^ #J3|`q6W6|Ӡ=k14 _O%8fQԿzH*ḥ1(ygJ0fs$VHpF: < 1 b2Mxeeh5Iubxf\Ѵb+8k7pFQ҄Ll `_Vc "x 4[Ow_;qOgZ7ٽ C.mwi+ Fm@"b0M Ww" zB:E(mCᔁt ÎaYWemYvՠq*2}X;5 eIEYz|#PW[w|З1Z.*j^T *%Pv:ťM*AT9G2_vG=˛ŠP`LS-M$T,6` 9!saR[>a# 6GG.t3b(>=Z  vrLrl86;U|UUgqn>5b4 N+Hdfc2l6 yep4|8f?8lln<9 LTi+j0'V`UI!d4J'#Xc.Tל6WeY %  6 Nm|Gb;?-Otsm::dWך?P4ٝh:7v3a)t$tGJ`5x~nTg%K/}c{usLн?@ 4%` a ʽM9q]I+9U8=8K[౨,])f~yG^4N6ӲN;Z/m?`oouIԲ04H3݊^X5of\m`io9Z qBửf3IG($lahm䡺 ө =LPF>nTSaLT\/W6hX*'W^XrcG2 1*ULuR糳d"ҰgcI ER6eY3j(k'YY;&q\1Ӭ]7 *m Nx\Wuli)̆W~sW@F6<9A) NyҪPF'q 7v>XN{Ghxyo휝Qs h ,DJ9 d&v ~1>Cv* :Y7 ڻxs<._8wzs> 6']>[cFalQi|( EdD=6i4ʖ we-T8(.>xGyMu>6{[e]+on-4nnoZG<@@n7f&Uy#˴6E]@xSTBU"sw%܌"i!z>5QdYF-?](c/^Hej _u>33[^IDTA f*A DL$ 8xw?uY#cfv6NOTpcv9- DɃ9 p!!|R4⽷Ꝫؙ 3Q>˕it-@ӪR>H+}y䝼q 7?5;Gjc"=&y6(xHWK  ,"w Hwj$! G{&⪴1EcTMΟ3bE>նmd/ !pbdWɥ;KfaU QlNvZ4":T qY{=ĉ" 6_͒,,-Hmڠ|as ϐMhwš+ⸯk(S$.n"rL4 =,g&(ITc)@OE3IK)8iJiHhMѐaFsfShx2[\YLItGxBP& ]@>/*zoo033jݱZ]lJ+ `-|D1گ گm?3Bsz@&DdP:3٫RA BPP*}MKT^>\ VۇU3zMhUv9Mq j)zBHT{"@Tbd(t!3hY#HNT/:1%%O'~hݏ=-i"=W:pY)L(0q88+AgKQ+rΐ MY˝م/qe@VWwtڇIk[pJf@~ҢU}MxQؚfz48KE0!vN"`)̋4H'3@4I-G .d~i+tK8ؕΫ@ |0 `ֆ eZ¨:)XXw-,W`o=%к nrwZ9BgO#?p[-><:ɖ][["r03!6£`hNALw+bl/seihJJ\vǵm6Q' t[/HZ&^jɥh>Z.O"m'.HpAX' Ľ r^-mUVۃBِDϯMlR+Aj LAXCKc9ǓcUD>M>eahA,0$b_|m4)e p2#4Z5}g 9*-^ qt[4-f{2Vu8Ek0;˄&GI[nоRJJUʃӎT9k t&1NOIL^nQRmڑ,+;OGF=ՕBĦI+b c-B$WQ! \^iӴ $qH6 <L"(B6π vqji$"i늺 ;h4[F 9˫\wٙoΞ8u#7F1e,$ NT}{ Αs;;.bVC,LXOEԈzkR ;S5|"]-4R?[EWUݷĢ94iemM<'됄'-o'PMp}uFnPU$.|>t,w!EZ* @nO$=&4"܋^'&.5Y]UZ򮕎DW6-1@gX*31 HԠ JA; 'B 8 bq$@@v/0@D*wE"F)!&a c`1FSwvp&a ǣNdΖeIQ(@3L]}or>VY;)SpT |ЪI1SAA$?FlX&h8 Q(K Uz8)X޾RFfC<ؗjXiV$N$m$V~/ԁ~W7Ptj?>c+p5P( וi tF#KV9;#l DD.TOWu7;L{[,"/sp۝F `aaO~W(RANk,xB8Q 0y% ɜժGx"Ҩ;mt?$Lj ¼epLɳ<{_ 6W}:#cmb6ÁG\+8fa=^}vV߿ ,@vPpque1 +JLХ=uG0)Bj#iFiM\fs qpk&T<0E?/vT#E]EE-`M\ `tYZboЛoҧ_ oz@bnt77sAPRJEaQ)6~8*j->B)D\ l>\}kcm`=tPצo_YUDaYԓ( UO\&-BNYe)Mn*RO?&q[ݭoA7y=s. J=)ѯyf(D;:@^ذ:勇{?vWOs v*W rc1&u]i @8:4TI=$" Xxy0o TC˂N =b~n_6Ndm7þV0n7ZqOT3ZKI9EEUckwt@nWo~v79s&yroKݽݘoPaiEaEWx90=9YME;o0^ v|4/Gչg8^ѕe2'hv M G0 5`j5PEiHdбhTxY/0V0C_e "09}cu!zܷ`h{so:$#u,9Zԙ_\)&2SBs#̓,Y\S|wbo?G07rW톯u=zxswuAo` Î>uPY5`Ҵ=^ . tkk=[1\ t)el :ueHţw>pdwv&M~G^&̉Z eix+۾DuxUe > F9lAcK@4bKEB\`a^1_AgP,wV v !Fi 8ўkG,i7;8mc[4j=H_x Y+)FB+jv> )&CЮusJ|D; Hy D Ꝡn5$ ÁtT#DR֕#)r͆pV9}L5¡쎻dU,J᜕"M蕋c a`V߿_`";({dBIC@II(BojST"NJ1x*:D!:RY/_m'K\Npz{EL467{<<:N&cҹF^LvT۴qr,Q٧|ktG;HN <75F1p'"L ތ:Nu!qqJbʠDgǬ%b?)DŽW':M EQ#&LazjǭOpO=~OnJ2Ɩ7y'r۰ {@x77hB@p`G;, @@IA[{$tٙׄޕV(擆&d ^NYmK5VViWObxCFڠV[=uմIO.wQ4n&pq! }0YV^#j  bmuT&lvHԱB:2z@[om5捶JKk䤘h)͟Jƶp/$k%YHS,3ݕ7ƕG{O.4[B-LYn\. !ZjkoHiwRج^U)bܛ^A  n1]=|790O3[·9}k>Ɣ2S`(5 )[M֢Yw֒r糭(4 ^H]iE1@ 3[ d-k㭒UYlY!¨ʙ`!8*Q>yE]A6&O$oe)mnIv꾟f?+u6} c㬬ղ8 |F6CҘ`D>0g}'/ NVHij7i''VP` G"ͮ!3fQ&H$2,JP0F`k-Zl9LU貪M }21f|1ild\DvOxˇNsGE٤I3#=mo 8WYĔKJB5ԙ xˆwl3dŤ6RpuZu7"'r4 *AVEWJ /d2BR"D"/FF"o9f|Ltckjw7޺_JU%rb5F\Mwk岲0ʂhkLP[<9'(p0F: ZMƀYRjggN_:wsi#!DЏqy^x+xo|^7nȅS. +od13ɷ'c}Yo?(1#< J|eUua}u X` :Db)᨟Cg@DHˇLra۝FS@Fp\ja@eqٛk^#sW^0=gv }[o8ޠFU| V.n1{PpT#1v`D0fr糛#&n:BY%qj{Y;BƀnT.!℃D{% Gp |]uU+֍f\e]X쒪^hԁ$6F!Z |5⹹0Nau`=夘ͥGZkGMAoBYāx`+[ k=ƴO"L ׿Mo[_sL[ur351fOn?{89Nnyx㳛ٵ{يtW6D:\G.)ЀdjEƾ('D _cIq'rM93/ҔyQx _D1%L3jn;e9.FKKsVJŭF{~n^׎j~9߂uoV汵hJ\H^jb[,@ @L8\ ߷("((&(A#OOe2;08gX0BJ: 6~DZKeգTE B+Wes4'rw{sЛMj3U2`!!þj_!,?rx {fuWqęIgZN=Q}k(|[U9@%O9?KmO*׆2Ii)x>I"BQhe /.U> O9礗ԺD]UU!x'⒣T6ˈ*Pk[&bwlmn"ոO!#(ٻuݨo`ˠК5H88rʺm*$"" 6%!1cqu^^'uMv2se)M|t;!2LT8e^f9yjVV.Gy\{: :}ԆbhdYԩບJe#!tѠ%gE1a6 q _;X3]wf`$k%"MƣRKp^ u _-j2`${fhsk|a݌S OD#p.!szIx4,bZZ!'A.a)RksG8mQ c$8uϐgxhjyC!˵u^S ֥/Ĕa}ןA={hq}→7CR@u?ü`QJVV.)nX)u56RM@i zc pL=[ejt;K1gepNu:=`P#dի!]87e޼5I7#+tl|7;0T[_)nEw4-Vȟ2wHsH^%(fN\PawBh*'0FU"ڌǃŎr51PIHm`R(%nj&xo}cVCNcK@NmⲔ 2[= Li2aZ J+`-| a[n O&-)9 ;:ЈC@3M:DojG:W%Ӻ]SZ/-&r(͚G?3"f:!~  `eU4mZPQ!iJjw2j Ɓu#DJFq Lk^@>UuVjڍTv̷׮GNsfU;W<_Ι$YT-K i#xpoReGFPMֈ@L`[&XyE&DY0*ʜG4Z 6Zy]'yKєb#7z<ڸZor2a)#yoY*))&Xy%Lu*kTzK ~iL{acFaGTX55I{H!4p ۠Sj4PRqQ9H-;4}xvoHlo loje2z=|}e4(#ui׫*Y@Ҕy^KI-9% { %l<a]Uo#;.+p+i '(1pkƨ1`g),x{t[H"b"kV?YkaU"@f7o2ܷ^ ;da;nb(I$bb$Q3L֮WG"Y(qܘ(qb̀Ox™PRY+D2WĘp0BrL1) HCz\$B_wxۗA˼b@<䌒l7r!XjRCz2Ma Q>sƓ4((4R RR @N@hlFR0$V9i@vW:.\o OJkkQN3``BuU 4lZeYPЗ!A %uZH>1% cch;(:]Uu+P{xiw)CR`ATݽ[(K9%7^"-ng |E "no@@um8G5ZRXY$c 40=ߠm";3 DLi%A&=(tU1LaMH,8e}(`wvŵ)/̇G B&B 7W6wW6>mzCW/XWqE# Z`#E^TI -KD1X`nNEC e17 B8q9k(F%%SrN;t{{2 JFrK }Ɇ@IF`Vh6lw4,ɭ'i 1x4RF!Ɉ1 ^o!ƌx HL] Ʊa aױP!{Fț <Ct%=F9Lk[ !&G>I8ϵiBQ4Cox/'i*67kZ+ eQE1ac)Hqh&LJLٸ:Nw-@FyD! X9SIQԥA% k7$%\zdƔ4ecJqլ˼jiUx@0NƟ J' Q*4!VæT}-s KE@k4i ՠNS"ՁyGuR%X`G)CM9Ȁ3vUxP0#h!^V<y 56\ u 38!U[jM$½hI3f+YbIF)Ϻ0}æW_I҃K9Хi7o/TY17Їb z?obŅܫ0´Z#nc4c$V,2ε-= dXeKLvZk[G{"P!xza/6}|^4$ ߲G8=~r3|])^ V@%錟s/8xÿzyr/fy r/ſ?d`\V9dU*Txpg k T)\KtcMeL޿%e:/ $@zx=?| w?_#*AvBUc߇)9Hw\W񰧁Mo?tx G#p= vZ{J+qu ѭfWF7I/Ω5 c ԁ"3̆[ \Mƃu,>\oj|^W?s?+FvZlL,B7Ӈ` "NNo(' 5VS_ta /Fp@R#a%=t3hwg4菔vc~nvqq!I[e5A_DaA#Лv4v%"o5tBܤ k9u4<}Npar Moukgjkwb93O1%(6Dfl7ο_{<VN܉3wc x̄]AAx@0mailѦE>+ejf2  3mXڹb{^}v*b N#?L`S_U9?W_)1N;WalfxC`s!˗V_xB!!`PySJk l?̂C.(ԿWRuBF<};"jx?v#vc;F4a( V/oMb7V'wu 1}:,M)NƱVw簃LfaǀoN˭``\|[;466U;BvNA:JsRj8c/=s]3>DQ"%?lLOحEuYGk{kuYDhZ&~!Yٟӄfda>No!p EBt(&` :4|*ax?@)I )M4ϙ/714U110U)'>Bl2;~":/K >z b!SY[YB Jc!i6k$B R+s:8"ʪRre#Zu9<ů|{q =yI,׍0G[vcqh$OtvN LKi\l)7Rij3|1[|_ǣvg(ؖ3M 2i"d+ /jMO=SUWw}o}8>T=eqK/~fn0_P_>{AFf&pC^r7C=RIr?Cï4v&~l UT`L4FIc†UABGeiќ}sGK?8uE'97)I pY2 O |>C&Ư}8 Čid[hIWku}Fo7kg!;`@u^eںy;*V6:pTmQZӈb$ &ÑFpDLfᙶT^[=ی暝ImvcX(ѹg./?:~b2 UuXf2\2akv`l-6B,1lؘPХ~`T}", j"ܻCpB#wKxO 2A?A)JPݵ GDTj! j(+KYbp LiC |tqGpGqH8LEϭɅw+g,n-I#;MWuQT$FV dkzYSqbnLa)vkjxyo<˓xue'Ow=Y0;^OS_LtU<ڜke-[Yʌ( gzZ؛zt#D '4⑐ ӄ^,bGt3͜10Q.È(]VP&(눅nsś1g %DPL|;?YY\]/%+=,q0DRT9EJ:]f?:a7LBơVנ\[-HpcKe ߆~uuͩl=tO BGn,[(K<n[s74A0"D@+98J3^̙=;;ޑ=eYDD%Y"A$"tx㟾[& *΁/dUuy@ ҿj̷?(pGoHj_͏O?@`B9LH]ƼP.5fԙ̵C<")J`'ʒVÅnE rW,KT`ސX'qêeqʩ O~7QU5uň](+X UR#(=cT rF> (~? 8%lłrAp#-x$qc@TuNiѵaF;bA"nb4H:aNz舛s- Y4$G=8(j$ jCPcqF a;O>?Y\5cзE'} ccǎK_kpok6\_:Jp2ڕkhҿ/4 Oym]\SG]U&`԰X50䗦 ,ּż$Բ?\vsh$9%Qʰ {AE58~Bw458F9yHQG(e2UyL`6qС[ەdzoK6Wd#AD )\n"])p wpa[Sk^˷oNzҎۚ5 4% "D.-MrD=j u5p&qa t Ceqv?WW|44QƱZy˲|ވYoq|̺!&}@RDGCUzU p9}Uh埽u0_ "1h|1þF*]Δʒq~g4j fեh0YGY܃RNVg>cBB#,t@LI2/|æo&pmPN q5({ f\If Mķ`J֗+JO(M9hq, 2ağp& mTFhH:s7k%=KXau @,vІA^=Oi]/+pP9&E>g,QBaMݟ B|Dw+ד|;T^W*, C>ūZ/:{խ WF)#[䠜EnZ,7ZP|>'8~':Hnt($bL>X 7 qy||428TI)/.H`l,ژR9-wOi"S1q1bqjM,3@p,aI… i8' |""A+kAc>tVͼ%4{aFPj!=:\cT9ul0 IQTϟþ?(`P 7$[?o~%ePf_r@8ޯiJj= |? |Ch(ᷪY]LFs͍4yQKF1`w6Bz"O@Em%H@SA ,s)Ca[=txx~$&0E<Bs -*gp!XO (,㍁Vv,06V;nDZ"K,!rJiӤƝVsJo<ŝTxpFb;)a6!7LhZK5>+1I]еG!f.{ލQ Q&V_1۬#s~'Q@q9~aoKm/sE_(ZJH{a.jL+V%~b`}JUUAA8$ б$twTz3` 4n>?<9oBS9ǕahӓٸI Jѐ1@H=nhf+=Oi9dHiDjϑo{3(^ a@P$C3go8Wu=@8Bm_ {H zϥ1 bvG}tY}^xwUUIܟ!Gdf~`<//x|^Q Mȼ[EpQj oRl-ʂk2) kӫOGI9fEἑyZ[yqNdzv^;,5=)%ICnj;&: W06<`? ]P-~oK->ƽnF8c6ZVB#N"Z6v `hu{,8OHPĬYSeLPQ?v"ļ8ͱǂMNGPUfRؚa Ygwf{M/hq5` Zi%!uYVy^"*N$"U> {-c J'^[,4 A/dJ <` 4 KwI!ocQ1҈F,igH ,s '(TxYf|'qc=DA˵r=g.^(ʦa3DfBNSu|H#_`OhBP{c%wthpQv{iY50'HJű. `J3,EW+yp ힱV*w  -v9#HB>¨,Ry (_EV6*d4XA~ 0#ƐXLBQ NYn&D0wI+)Y.}nV"Mu A ^KҘVq!2wnqɥ7,Wizp0^_ .k˽N7M9On0 i''3tH dKLC(X%C$x5-0"*PE$"<lv;9TjobǝL^xO4cfQ(<%4'ei,'~)eUg9[VĖhr(AgwńRwo?"ևoCOuXf+2`,G(3OmQ<ģO>u{:BAs:F.<1;>\]iYuE1켸8؝Xi`v#U.˜X-P|=|kglyazvocNS9'i$avA 4PTy]6 u[00XpE,'Ψ$ ‰ rG%hs7|HI hec )+;QL'u,!$_'a~e!U73kYG\lyl60N9j|j, UeۡMWQĢ79[Ғ0Plzii H%)B_|zMs߉c~cWsI)6dيC* 8g$57%=ܕp*LvmNnXAGnGLC9" m! D4Ip@A #CB%0YPEd1UmOòJW yl9BJUڔs=gJ)5J9˝V5ِ"&>/E|>߻jBqwi]xℑX+(8 *-mHkue4E_q=u{:G:O|6k eUYOрB04,}tH 8;`Y@uPP\ X `MBf l l -f}!~ * +SL9.(qc\1N8 !HàHG|"Фq8PxG509sSL݃˷/ nʔURQ2'>Wr"3E[^ojxbjS(W <)w#='BnԷNn0毼|;9N!2 IIցD8)Tj,G;qgP^#j+[Wy4SG8읐po, ?)~攅4" TWP7;bQIlo//77`"\kwP agtu+60اw$[?5PS5LGy]V]uYG^3.kiJ[/#ۗ3TފN[xye5 .`= 0<̧y֖kwS>\z}ݿyҢ 2М)J<f#d&aC 薎p gJ0,R /t篣5 ]vyV.]4+*xk >|6ƺa W R!΅:؏ ΋e}#~\kQ#`K~A1ukѤ(vA-"k`k!1kPrRyuQ8"qx +.#4U>`NI)dydY i+\o_FۭAש6vXDžO guW!^ @,Ѩqm^>9-B4`Uăvo#|5B3(~'"@_ps/М4ս}&hU[f1@%vu(o!&?S?s굃l֜_ gb:}߾?G >5pLм\N ($Knv<䡖%pF}.cMsʳ(b"k5H-)N{i#t)-rck6ևq1K{>jec•e ~^`j\>*ӄ1,M T@VC`5+%A!y<,CC@oR#lxJBN{ucj(eałhuGmiSsB kwl 7oW?_q;٣>)UU/ү$I {+y3 nx >S"d^NiU*Xki`4{wVNE- 2zάn =eL$,i9㴳|jepz}}I,q?۬o҄phkZ0Ā`C q8iq~6Vk{;i >>cS ;(,L޴Ю{# CᅙtU \)MQ/ &^04DjaVjDV(zbQ?EGLR۷~yq x<\YZNh,~4܁8C DVsth5̀;nvKh EIL*M>3gCrvD6jS " TvkOwo[D88v k`"jr@R$x+gJ-sj B8:y\ۮn,y J(&YpЁ, iձ!|ֽQi&TڕU%աxq#[E Df\zd~}~p9P(Hp kmrii8M5 MMh:_G9ȜR 2J8NF'<@FQϋgNNJuвj%/uneyE˒1`oGBO??o~>ʢXG:ܘk{_O5,BTnZhy񙓓`>+NAN!18Q2=8`IF3քIB %X1bK VJiUM%nq2JFQl"4P"7KȅRXڞщ'9$v[i02J}'@3GfDʻ2 ,TJ:S_Ժ!\+p|h*+RJq1[2'>ɽ݃AŘ~~k۝Lpwժ,&ƠN[m*O={Sz?RJ2?`@A^%>?1eY.t[؀7A6}! 7|LG,aeYRJ{~ȳyv l\ljv/M9Z/̪lVL&u!%**,$8飇I UbƹVT.WE9u3?M|LXg>E1>;KJ:` >>e7ϭrB? pk;3T-t7}֛p֕^i l80oEpJUV9#(|l`9 sNc`D_voX\|_siWosxH3S0AY[k*O܋(XDQx8:+&4ek*>w<ۇ0oi!0n%l|<|nBzUn RyS!L-)  0{Vץ1@~}@Ln­ cEK.A{ĸ F* c5**G%RO3i+3{ӓX0zO(r5mW2B ;ln[Im'sa[Skm61Q~ }cUJI0:r<)U^q&i&Hg0*_@u 0l~!5x!W{g~R@Z/[D?sFɷ}<?#d~4 ~Q`3^|W;imh+8ʜ8D&{D8#GG0Tr@,e5K9c!k01Ja58 v⬮*Nٌl:șJ8)SI9[D&%qovO3-^y kc f7=X;28ߝS{6Ƶ:Ͳ$A9;ckeY,:<%=B i7tqk`gwߊ;eRongMf{ptypL3/[eTUX`UFK@H hW`d 2G#~x~iIY2u=u^o\:pHR I՗]R3jch AqJ&Bkj4)< _ fYACp`z-f!mj sV(y.|i=Vyaac}k 'mp &Y@|8DFc=#ո}{멱EF56HFޟ:^5B$fp)8䦻pxN^p`Fzpu No(b!V̓ѱnk^tO;f6,xA A Ü ykTkuj欆T[Ii"°R+"]{[{-s;ԉcѯ:]0 \v"Q?ٖ;ek|ZˮYQ @`0>i¹^:- {2( R fpg$X cPB]!Jղ.K7ol`"'9+mw0UY77HA=t`L]ȊIE?T?tC5XNX6) m ik?WxwK0QVJahyq .~(cc8u+DHEAi۟﷒wFH^<2Djp'Hxaߐz]'EEAgp(E w!#jXai:?Rm]Lf02{hKl!4Cg:\'f_j<{eD3*'O>|V@ QF>} XipT홵H)uq괒N¦ "R:7gjIf-Gy"?T~HZxjc7nܾMĭ;]EKWU> :wE}c]th, fÝV<5KN\n/p@XpÂ(7+<&1C~kګ* jn t~ j6{YJ=LN9@?E8+W=b@&m(RlaH;'BG"ZMFWF>&+)a0Lh(Z$qŽ{}+ֈk;7\'?“s/muF]⍭'{뽳\Jjnbsz@"Oʼcpouot{>]9\Vb$QPsal6r1HDYjњD,/l_.?ɢ^_Z[o~j']s쓨R>Ζ rQR7"h3 ū *5ɢރ^ܒ|:[1M#50:\{}J ;y^Mә.jS@TI(~ nF?.>9Ziwôԓ/]yj"?|q%I織끰Ip 蛓{ZIse݃^t^֜f^o!i.PC6{"1wW?X<̧~(M;/?EYOR1~c_םfUAA(q +ATHy~LL`6gK,$A,0SDK;9攜W[ןӋg>q_'IZ[pC{WߐZa4 zgNo>o~㛏 >ut&f+%pQJ'{7n_~g>""\G Ea4\ػ~kuvJ-$iu`8brDT0z?#8 }(E$1z㦪!mΩH㶮g/m]>`sѧ|އ?~ZI0jBNXb! ցCKBn,8M8h92B, Vh"e3P$#1,+_8GdX 5 TX\{7~ej|ͭ+k7onݼⷼ]o|}ǿgN<ЃO+i|x%W\p$z LP£UyJD/AZh4zoËڇD8ppa(~C{/uU8,@!blV ` %ILՊ#Rym*XF&Եd0I)--0qqν?g_*?UW~eKؙ] ~:lu6W:$a,,ƃ2,0AXx@΀ՠ8߃XB ,VE | g "7ԝv2t`\~OTwİo<-v`%7C*f?{0\^XgO>S~/^e {i21̹C>Io9{mײ#FJ C"O7W F0"S0l_~  0$:BGɗ<{TA߆  x;0{EJE,$/k\[IW=!j&eYnÄJw㤝kןGF{ɕGZ-82hb El%"Ny XL ld,J5Bo`{8 8l;AК7N')zƀ9<cL;66?nz]*&ͫǦ~i|˿K׿QU`IGw構rK >0 !q޼q?7_~ @jhR[UYJLsLY@̵48o  p6HPF'U)̱8ySq$t]dR+ݥs7X'I$8kMHEXګfKÓ{hUqR/%iRߺη/◾>wBoƦ0m4TH [f ߕXQ0eY߁?NĂ倭N+k81w,?sB+PcQʍvM-EGΝ‡?9>GyygNd(쌒P:/䴨 F]Ƅ˂rp7dQLvK)𘯥.Md/* kܱ?$|?0@4@h!?.<{>oߟWZu?ةT$&R¼43rJ,$/$l{n+91 z>P B5fiA2N_Ȼ^ժh[b3u*, P:dv^̭[2 N Nj rٞ_w3k&O~mYfq̶PNGF~I,^1>^T x04 IMV'$+:Z5J3 X8ָ?G:hCw$|_F]!ІC6r4gquA"M-pn/ۻ8KV6О^9<ٞƻ˿&q1!ʲ ;R[Jo$Y,ZFO~^zyWiѱZ&b B1(e5LF}shsu/fiV+Il 7Nԯ 2S D4,<&y~ ?@7\ʔN*䱪RI޿gnL1g~q4N3Q A^`}݃<ýêVWvuL\ژ 9, `C6Ƈކ" π6qPlQ/a0'\h *h>8 G6<|W]ظv{Ņc>^Zs8{yf}=y~߽Mo\Yox*#^}w~?r?udX赺_'l%l>~bcs+ pL&mt j28ih)Mo=G!a+sʛS|06RIY+˲rs/mM4 w cyƓ[ۙs8&>-sb%o;JDȪ۝noVupZן=X\qÿx#׻{׮^L&[n|\|WWחNJ5̾%U1y rib*VOZ9y|VYྻ/G`IP\T@pTB|.Zݏ{K i8ZV9j ЈTcq,wΘ3mlӻ/n4TXsbL8_x即H$O !A滷n{KH^IX pAC@ FP? +49Q@P -*W.97{6p7T<+c:L^:qiPv@NֶJQC:Y,|:{OUnlt:UN+~ySo>cvQZ߼~?/>}걍Ոrj|Mmk&{{݃=gg67j xo{g$ 1uH?=;*Gx} F0FE^7?}ch'`ҔP\A!DK Ϛ$)d@,e}MoVw9dzt?C}xM/9$T/~ l S ]Ug- H>pM s28ۛ&EW~8j*:1L+N_zENAduY 1->=iQn耀==rִ*4Y[?uRƩA֡:t(t"WLvv~zsY,Kb=McxK OZ,^:("ꥯ kQLD/\//l.*`# =JmO{y,11%R L6xl/kvO*ܘ>tzު/ןN[I䔵Z@|/zWvA,e =mpMDHc0MBfl?o-tGeԬpz7F!V#@G i 2kU [x^H,3:{g/ݷ-~ዷn[gC4V8!޶noo3'6VcKqcDw,'u^۞2zlc w?(NV^9=j¿.$kL]V2Fe֭Q}zrv-`x`u sQn)!wo*n$I@]oH-MF(v10 pV?IpsnDoy9N03V $G -NIF)'(,"TPL9sk]h4q(8y8lȆ% Ƒ)5G&XoǎK( ,`acF^aR_O$4B@$ac E {= 8O!; W֖RG0L1Qr;v2@l)ޟֳ 8RنR[kC 8D+Ú.hb ? ̨w+k'@UMD#1`%vp,iKRxBI"xPަR͔*{˗4?N]=Fv~ s9q#RrKXL< @rJ lww-|wfv ߙ{~3MݶҌq d2FqM3'00oPCt86kLZ(Myp=w>|<;d/R>:3Bl@8:ppvu%ްp c4pa(VBDv \*Uh߸l>ۙOU46 6~F3d%`}||^ ${ 6.[Nv"{OnnYjXP-=-6p}E!+% H1;_+0OH D}+QITȚk&9>I" 656^k/ޣ'x݃Y!x8s sƃeeƢXx C@a0Dɶv LezbG _@|j]ӻx>3o>qD{_xݝ/nEI($ˆ*dhHε00Xô(T6l=s9!bQ &Dҍ;Vfw^Bje i 3tctS"XSyc(DU0~&a)E)VGs0u# LC^A6[B 7 .ӰhyU,gZ뷢 `@Xlib+AQa^e n}|{G?Ko\tx9-~R'ί=Cg 96*i43jE XA6 0ч;0(K`%{ x=>ȂSfZc#D>v{.=o|.cAASc|j})Wn/G"8g6x, @@т9dx3k@]ROtp1Qjk`r5!Ĝ-ZƩ%D*@J\;̂6NE@ۅ1ΕDXQi5$a$|`yvb jxߠ? <;s!3R(@v:t F3eVDƓZY?|淟~9Ysg^4KAoFvjUpli._cwi`fj$# )lQZ^֔G 8N@𜀳!A(#|0B$o ˺yc= ~3Mmp6 /dvЂK" 7)7e0 0N(T  ׷o\Ru 䙐8jQM=9_}oHB]A?WA;X!m+ryJp)%*ShBjfˏ2&x~gu,!bt0A CpJ!mLvGF C$+p}B'z[`~?MD%JXͰcaM'`BܑәC!C+CR-҇@aTw-At1`稦āAˈU0; >`X.;"D;Y;fϿN3]e,ڠf (&H0XJ JI{<(i\;zT)ۊD1(O)ܡn-3_/(O}C)kv8'ϲb$x5UT1rۗ6$S=@pN!ƝҎxݛNH%:hvV  0gxjc'ʨ :: % ᤪxZӗŭQZ]!%Eҩ|J)⍆ p D ͿJ%G(+Y > #eH{-,EڎrK4aI W%s8{('X 7am,/ASUq@T G_x;ƽ f;R3 { hP~x YrgE#LDIP S^!;Ak'Py19wG:SD, 0Xk1՘RչS8x'uoxSsi>̮\\9?:H#XA2;FՄC 8+k_h8zAr>ͷoxp+nMK Br++O~^wiy[_,U]]3Υ.ƻ*LJe{81+@`6WW 5ipqq![wDJËH;Ȝe AC&v!r @;LJ:cYN)֕Czusy<=9쌢8tz NW6UcTTO6e쁅c2St:F8i ˂1>^`qGI JV퓫4Y4u+VR6vtZPaCC>b3nT 9p⺪y7As0 sGAaQJM#H"ÌzZZK6dƂ~Q(5o{p J4f_ٻa?>⛿oh9b1\^Pq7,PxXO87洰aM,xxj k- =X{I^"\ c}*x,8G#U +LYREUH ӬRhI{˂$JBk`{67;kBSoj!R{p:'*c…/+@G#,v{K 6: A%Ce-"!%k+;L3Zʩ.TKҘQ*1i 6W(,4PSh35{3.]+U`yLeZic MYi\cVWVM$Qą3\ 7}Ӄ%t|7%x@ħT-Ƣ(:("kk뺪+C[]̫ٛty]3X6o1 hO?:6r`~XQL;].qxBD0pAXP#p #dkeO~;8Ji} CjRҪ) s LSzE`P^ZtvkGɈFE 2 =,SY7vݞim$~6T~;پ1Ha.~0%:_z+WWWJ"69‘hxԌB d`[C3.eq9KysmAQ"hRd6%IBYDZ]0&r^U2J8nWHt_Y[vH{M^gOV{ǸѺ$8mw-`ȼU7!|֭tX wNqˋ\)>\:rܙ3KK@b Բ+2N\Hp  Ra>!es =̗G8i˺LEG,J!e9b)_@OxÈF# }'4pPOd=ܞ-^ZKfAbyL֦ʑ.7@T7YuAxaq[au *t{l%;-&/]yR./JxOfˢ^k+Y+aލN;,njǯ3sYAϞx޳'Vvv{(ڝ'p>w}o_gwͿ{VI C7BF ($Iv` - p O@:jŅ=򦐣P [Ur, ~;[dn Gű{QcE![a]j꽩5A%Ij-=cY49zG;^,&]DYHt~io8:t"A*Mݍk.cх4%#5lU])rԙ9D# 2*n5N0N3"&=k|.ji5X@8ݤu`3F}9())!DZ[AQA+%Q{&R.U,kO&3㕕~&EUVS.̳ : aZIv / SYAA̼d f`'hk0s>/xV ,kaD()֎c˛i0I\uUA6 JG0㙅IfpDa@esXYv~ ̂ۄ}-L\LD='2*rz =N0᪮VX+9M,e , ԭ1 ge][e8uSMh3d9'7Op{\@QlZwuvH;[K}[/].? ~;As9)0 JڃlĉxO^ܸӸR ׺Q Y"ߍAR;1e YHJ5[%v+^^^ٺ} $vy>|U e/8-Qi˫zVcB\di a cZCL/)XBs0R04b&Vy776@ |iZi1YY˺J䯚(%0Rq~t3rkL+u]* -4ϖ'(o'(&>8Lx@-+PbA7B xl($$XéZ[,*jvnh$dE˛whg]K\;WBݕVƌe1+Ɠ4Bil1JN3g8ڢ&ۇ| pB+$r"wکm|D|R79?A۩Z5dF .d𩵾i?3ss?lu fdqD]? 8Y=f&OIޜ]gc(Y%u$*idZK.6X8)e'S戀1^x $w9 dR{[q*=El=yiVv8|M֘=dIu[֯D `E<}/tăޟuS:$>ΘBc("n @NvKҥ,B1Ԫ>|1JLX0j^ h/ 4 @`jϬ9_=:vTQƓ+7+#`@\.@Uj `5 hOm*RW^#&c00"W{r`;I`-紮+36e4$PL+,MDb-F"]iu7*YG"=Zkz6]/(^|6.gLP(A.fVox'OlR`\#҈3@J fud:9S%1g$a@B 6Yt(A $3Xg M˂ CW`O=gѿBeZ~>M73. o7NT uuB9#mP0&i,N!HZD1D8(l:k+Ow6T !=T(+c΅azD q V5K-qUa@Irx{]慓̠,SI;CfkL#oݸ=yzc/Onqk]K BM=焧1R҄seeΣ Y/NW)i{`H)Y2/#L3G*T u0\/u2^"a2`4йd#C*! J< 0LqRTDJ( Ed\DwzQEk10Y pC;FRV6dI'w|z[TE`{vvNs2ԯZ+Zb˘O:s&KL/Fغpkk4o lL$VI&"R -CŐ|dL9籈+YC-򫫫gΞi[j)cP`J#[H.! &\nnQg~6p0:pl08gHHD0{L)s^r4|+ӹ4Β\0!0|!I2!m\j̃$+Q@t]bb:lŤ"9k(iɝة8;Eғ/q&RM9q*Hh:b8ZV[%K8eYeDY^ADu)Ht,c `Fs3\qu})F=ۛNJʈbu[k>:HցѠێWk;;3J9\.|!^›m1m2뭩J0x };)8(wA_% v4(K(Da4Xj=w6iQ(3*\*k_jJRP5<u Ńu",+޺%l+ JC@d]Y }( ǠTfe-+/\u,&yǑ18"X`(ERډ`l5̹*NVz0tRr6e=ϫ\֘#CE$N6i/%hgSAk*Z[5uvdPWg XƓ,jG3v|}0TiLX4Bĉw&EZ"LWq]I^؟UOkKhׯd^ Cb':!JX1D$"?PV61x zpv)q:Xs5b!Ea ];fVTjPNE/b j HD(8^9Sȍ[ EO:j7fI"ڕ)@Kl;:Frt.eq|ʛeI_37ϟL6BY8裸Z&YJ +%c˽n&8![k ~th =ڢ)(mڝյk7n`0Ko|lq F7[xt!Mh J?A)±\ggk2QSEUN'ݥ,w~rpFK›n'cjO=E}fYQK͎ݵu o-]{a_Xs9ٽ۝2ƤvSd .K _WU6 ,\D"5!Bz)|[/KbT֚ڡQ=O{Lˏ~\ى4+$ ȎRusKMe)iNalA0|)i 7>7jU& s [Y+tk',$b-j* Mm EsUgPHQxح.s_$US&6l)U.NRh^bap"-uWr~v"_L'>~ϭ8i#{$`sx2lse<\nHfU+CArwrB,.OVG'E}mGii ( +j~RC`w@'#<ݣB!O)tצ>̺me\RfP8u-ZB 1W0eF<`Dk?7{ykJ?==Ue-<ΒYxesO^3-GRRFf kxja+$,D&k0ȕ-M^+{ 0Y(1[֪Ԓ+ s4غv%&Nr6K$BȺD8Fv8Yak-. a> AIYUyU*1_I̷z$UŜG-uA;FCx@B%|+80۝6ͭY^$N!k[P>B|o{VtkxpXF%Qdrv}2,<1:g/on߾ q03&3{*—ۭNe]n_*t(@:b' r!s]*SYūA1駝?H(h1Q=xsxO*P֡w<%^l:@ykwPSP`֋,c'd>dErαN}sZwiЊnVfѕύ[g]mb-Av;MS)fo<璁:4]_I)FP0`,磹vcT AuS(m#Yֶ@N7Y˺&h{3!C誵eax`Vו,*nN^H9nMxZ`F1oe-rd<q,at,dQ|MOinB^R\k ;n"Z8}r ֜FipE;$omb0B&^٢nnxMI$Ȋ=2sQ'h8$ᠿGN]}0<8}~F|V(l3TZsHG. JzAKu LA媜V[g'ռ',fUѭ_7R:S,?8}/g&|t)9ƤlP9ڡoΦO$XDLdîTv4o|Ƃ"iOcfݵt~?k6P'"6J 3 Ũ(Fvݍ@1eU^qݥVZKmeG*vkN6&xنA>!(fm_.#A7V DSO^ ܫ7.d2]?w1umyf0z0it,}wdD^_M~,PTi([!7a!c?F)[w+_ø꨺u9/-CunO3ظ@*ߕ@P7eSsdzKov:U` ӴIAZNlX% RwqvfCw],h*X":,58|陃u; ΰ*/4;[7ww^-A])Dv|}sukǏ2l I\ LU Cc`ME7meZjGf˫Kv/C26)9#Vj>s? !dqeacIOef,l1+VND*vY: >`n1N(k7NX,5š`88}`@=|&"ESODTYznnt,߰zJ^opl{kߘ=J! nRjLZޤAxl)J 4zOH y"jnY'Μ2:y;|7j mn(YfsRIomq4ߧh9x2QȢ5fnr`IB t)`Wi_1SD8NP@xzg`88/8^Y8U4DVjEyEm׋[?C&y>?(1a_-6#R 0ir|uz~ЊSg_tx{44}  e=0Sf54,5-y=cD1B"0 J9 9ȯ0'%D,EYkּxǓR4!z晝^)WY5孭7\<㪽''{me * oY2)Z qYĥLs4xL Z%aވ(a] VupxV2h<>{nd?[Obkn'e/'/-lo$ N=2 s@t")e YZVY?/TM4}8\ u\0*I5.%u]Ig%Rp..uZ!Qe+ -\z8K)˲J0G]]"EfRdff>jK V悇VRV\e*Tk%lV 弖ohѥ,I&cTQ[AL'()lż`F03:\#? z8 ǚ j *]68@ D¡!`0UomDkDӲ,ܕ}" ƞͲ $j[Ϝys3KSt,AʲlRM,˦z܂1Xa<b8 %QԤ ,I)`Fjf쮠{pV qdzꐔJ%Be97|kݷ񥧟R-K{D Z{mdg^ݽ̅aHDHm+O5; v }!dvm+) k@ۃ<<ܙ̦aNuraYPt;"$M[ &lU}a~;}os0qc`YbZaG;zVMYRJYMqZ{#p+B0g^V;;ba}}kkW|M4A߱HAmćLd|kiyn!GRV eY(R Ԭ. QWI>;B4ի̐yE)C<%,$6`K)  i]u`i'(yIo--uϳW鰡n׌Ν<0_RZFtg0E Բ뀺bt S@Xpu^8 (cv)*'r ~/Kd!Y\We;F^ `X6VAd]nM@ TӪ<,T1F+tE $whIz-s~$<[\;+W^dQGߚM;5浕yt{>1)8w\4k'NG㍍-V'zg %ۑr4֤t;w,F H u'%ڱrXUs 1,gY$ly.sHwBE6f?u=joolsB_t88 ZhN'v\#xZyNHmSi4{e;7-3ů63Ie/LC J h MA'TiVLSE6DR ,1rSyp4zL( ᢰ,>׮bLv]eYSۂe p=avO(JDqٜ(q!+m6O~MYf.aeY(-ae\P)3V-D+e+wev**L$́'dڂ qZy$}",a5Se3Ӷ],x8KGUTGIe%gd6v~GoǾO~|HU!E/u+0q$38uI\fU)ɲ VD# LU>Pt]ZV9^vXƐ9T铌[EbûyY.2 ٜJ^)iv21 ԱlU1}0|k`,+,d&IU%\VLBSs=X,!<&R2`.褳Y2Ks>W̝C+9S8ipXAIFi* [ 7jY㎧quUa `yY v nɼ \V{|one}o揟RR\Jbthc U*9hg2pk6gIZ󲐶B腇:Tu]T ~ۊd^0UlJxm.w`yz w0,(e Zb{Ib,Qi37Lc]qɁ6[8,Ig˳"m,Mp ^Nmd<ӴDg94GAYq42R;1iIyQʺXe<4&dĚ 3`ɲ?~xW,f ^8s8I _҄|7 KGX6i?%U&~;MY(`j`N֎u<HM|[JJ!OUyRu8vi_upRKу!޶-ە<ؼ Gi3ƓxϦN;è|Y$(4hX]JkYjbTJqNBYuLRl(@¥/}nB< 11U:Z1i[uv m(j')PܙuiSYtM9!enwd6"UN&ѐ] jC-5' kKevdYAvՐ߅iZa4g&6 OM@<$\mQV$M]yڜ יex:*2x:Ҕ뺴}QƓ8e[72Fm 4,_Hu}2#kͶVԕnd+MxgcJ)Ү9 fہD &nPYT(Z"kI,Byijͱ:]g%XOlk: ^MWOyH˪U2vd"ٮ]cAN-ۉg8Nμ^dv~`=G%`*"Ti%8Z룴|u`4K /83Jwn?w~[:%|fiĮ%iUTld̥Uts g]FBu^JZnXKx)@L[lbHgPAi$5#oU^ ǰ8YZJNn! RHiUD;'6@S*ISMJӱU2ܧ5f0 kQ\I?oꭖӚT ǂgQOf,zp/,'򃥹ea2o~&YXzjڍn]Ut2(|J[WvcQ41OmY_yx0a{j[̣Nۚ=/΍&K&Ui> i, `#&VN^Yx63BeHMuC[IZ1n(š%1A oIBup4E~ R'iRڱJ2-svqBJe׺k5)ea۶[U8E28iMfRy ѭєY˫&sa2VŭڊSa<7m34MH'Njaa-[:Z;* ,^r\nu/jY >0/5-r#6ߐ:!zs+]!bLK9VWneY:,5uGv$Ǫy>>a3 ia4`i>AQeK % ΩcHGDW^Z8eY: }Cd-b۝NgF($Qi^2p h|T;N G@Rw"h o*㛡0{ Uq2IF\&dpp%'~LSeW{S!¬9jegE=Yx/^%I:9eJAkN+fy4XVYV:xkWF5 qpSJ\Vy)Vؖ͝ {J i2zmdjYƉhm=t ?bTʢY͂7a2[\Xq\ݝV+D#]xcoV:-嘉&`jzdrBU^80wǵ&Ӥ˯x\?PR !C ê(e#V1hlJ"KL8! ®K:#QiGfHi mdţ*0|\@+01)6\hM#eY6Kã0BLJ_L܄F5.ӝDZNKj9!q=Q7f&AԎ,|m t8xB lnpp_ijS'.^Pnw" :+KxDRS˟[]igofq3` z،"4ޫOg2ViM6n^|mF~t[ht1c xX&|6*kXSI#@xX,M |}8ўעL86ZD1vdiBׂb-W}"dYJ,r- mGpRD' +d6YPřeW޸u8i]ajL8 1&aԱv+<" 4JBV `"/?{ݺ}R9n]$UUbMDDgi ͨeTAZIX]<izwgp F3f<&(pm|Qlk515t~,@M61TG*h8 pZyQ0NXkfGk;oE*Ç;XB46Ay͐㸞-ex)d<ɦ1f١Q/!]˗/؈p4ֶ5dn#\JCgeCBi.4/6AV $tFu2l\zyDEU|?Z9d<  :JAuCcti^4|c^Pc;o(Ƕ)a-ڊ3+TMX=xڮg;25='tN$s玲3^^ 6p-p*+JiYu=qT *4t/l89|oiqMjk{{k'Vnnl Vq&^ЄԜm f[{3K_5y4ibJ /޴1Y eҚ&EUpNYjQ6)1O!vD{G8M+q-S`F܀i㨥* 0Acƪ M,h q?[zlapʩ |Hu԰s(Ue"Ϥ,p p,hQĹm4tho%>.8TZGPQ^Vѭ4(,&˭<+,Iı ΀~/t=gjo*;>YG8U'"˂ Y_j+-,u,˫+{Lr{d:t:ݕ5[h0nŽ8\Gne,NR *FqD XIZ9'::qJ;N+ #ƣyq99S(yٮ 0,ɲWV4) 8̳/GAo.bV|NəZھ9xk ^̨%]Y岖V<E)98,sc02W:~n/)9`45XIE+"dO굗b=^dj&Rfl'ݵral6Azc:˼<6w0*4Nl˺uƵkWWVϞ>nEfv*u=2{KEQX?Aj;dVR. tPF69ș! nr:I-[*v]ilywҎjTUU[B$hX0}{{Dbl PHY/*Jd GZX!=-c[D*L%m"J&h M.y~fS kqڡ pCƸ.\{ıxly.yWJQT&iq3BaU;K(FGD [ \rFglJ>Fj؟Bd]woi߹ LG'Ԫ(lrs>"7"벬-,3ei&26 vO̯)ufptI^zVƻm/th߲%  bVͯ:@6lQI=?4un]Rz4?kgiȓRǓNgβ׮2?{svՊ,u/Wjdi:<ک &qvKoH{h}_ZĖֻwhug,ė}JuO:^b$=68}ysZB&YQ>nPZa\i]r\'RCSGo=zwԶ+fa2vzjy.K HLcH˵QTЃg_U6O8+ptujpnZg^xdn+dfq#,1pIA}K_oݿ 2Ƿwyg~1qu{k.YOfʒǻvUŴCT̟ڋfek4q:Sj:>t,Kr8n3Kt©i/t hܹ{x?qrz͉ڳ]Orma4HxB,% o8&fXDTA*%w۱]Y4= 4sCOts gip8v=*r{w8Jew=a(8&ǖe{-٣!c9>QA_,d i 㢸}7^! JV2qr}5z:ozd730R٫xlns^x5<oqBF˗D'>lzJ4X䐞x#<7|L1zu:s+^\<\i w0:soKBTQIkZʝ oNU}U^Hq}b;DyA,.Y$oܺ}6-u/2 =΂P}b3E_ zi6c)A*$U#yV <םƙy+ FsgeY5:N,,ں/0 6BT5ax`]6V@)G<uzyZ0jBKSNǩR܏'?=zϻIA0wߍNCWQtjco8NdhI\UJ纮fEvj}3E6u4Z*Q={>}`,ߋ5’m|}MK6k{kV?Y jz@:ߩմue|HU. l\&.iPUSlvfyI8-]Βs'qnOM3^TQ|BpeZ8j:Wxۭ"Q{tCTw{f!ܲ5Kge)CZIGwT؈y!Ogj]15;7n`4ʼnAe۞-x )*msʲz{{n3%YeJ'Euiy23fae7j;uiEX L?T nQtuk{oxS˽py4M+L;U ˊUh^; Z(X[[]|_)FڅFF. Ϸ4OM_r '?=1dp&;A4K^i˗oN\|N]W8>=*7}_*롗-^*Tbn_u:= I{Vzם?ݚNo5X-WQM{sb.r&鎌JKlǯw:4F+Yrʳ4K ׵Jɻb #|L@8]΍G$;7vo\uԠe!דLFyf۪3?捍ma+# ia8aSqBf2AEMw7vVݕ <*-G(|qZVE [!D >|<%Z%%ԋϿrn|`5f k#+Mţ>z߸/?oQ9J3)yuz"sTW _}4Na0d~V5Rxڠp*)hoNw1|}F6DgvØݸNץ:BVo=yk`\<•//:#+/~dw?;~7O;[OfN}n7Z= flnfr{hmm`'07sz'B (O9*m@~%Ռa؎$sqJIK.)#u e_QZRXK}#s17rdX|ؼ~[ؠf37jX1CX Ǔw56?oj; ጥӸFnff_gY?A 'NݵDsaCm]xQ˿}V_5EScx4xC9޺;ޖ\X%NpW'^eQ4^=^,(o~/]ADde.W,9+"Iv:q>m6::~g|MՇ~ǔ^[\-5eEj2RNۏ¼X-Zwo.Fk|3yY7zC1Ec^pej%{5+HҬs柌+:"!nYо "4;54)ɆcJO'Ӫ= +@:( c&ҭTYV7 ۶QBUW$ӠöDueMݫ$ 쭒,hĊyUCps9 Ql/~gΜIi|X <{Q>Wc"JT#LRGxL 3%چDeeTQf۠| h'Wb'G 4=xsp0Z@0P}"-pWɗ_O>wOGQ t:<ߴݭfQR)a!t~$8tOfWo AGri[bw JJQágKR~L`gxsubv!`:3!s-8,˱!@[8ƤO5Aܹ+p3oŒUN'ݺy}2I-D;9uIAx1ӡu9s<6 Zi7)(,NSu]ϯqֵ  xns";q2 :\4Lu`Z%f&VRL_%7aLUz8h5G웷1_-z*- ??~}7lo6Z8ӏ Kt̗/տs{@x2&,R ;fwfLR|?xM6RlNWCk^i ~o"G{{VgϟnGv!k❀u\{J#v0Y>.ضn6eyRE^GdEͣÌQv88geQ:e;*i{ ;JaE {MR"y[_5G)qKk?^ׯ| sU#sb JUֶ+εn^.Kp:Mrmo O' +k`5*=`4DZS~c~$]a-W7'dƪl:E# T֎؞kوKcܶ%5UL .9`/ (e$x~7_i6Nķi/ Nl޺^?{)!#4̶-Y/9|=rUY-Y@J@q/?;pjNm[ ,ځo-.gyi-&z]p2+zƳ),P;0 S]j q˜\v:_Ky^FVYf.,sW_KgΞbMf1_ǟ|G5Dy (%yZ ɸf<Zx f]lmnxؠYm)~-^ʶ2?3sO~O}Gx{(ϳ'vV'r-$ T2d J2ǪP^@\ ;3ag&iTW^x C틧VU]^`l _ ZjYGTXbqZmex##*L!{mE/wRxۧv4O{paK*i%( T&껾~ү}kZ?&G)#$h:7hQ[U< s& OJs퍫ğ>͖m.}w$IRa#Sy²}¸Ű bpK) Yeb°'ێGel8WګGϞ8~f6sgȳ,s]/ gI"p_<3;ogy{Fom.wHKٶ`*KI诼TyhNQhZTNZؠ[ad"ɐ0=:asq[h r[;AvFB׻~Y-;jv62OҥˏWA)|^ R&ɗbU7~3aU 0 4ϜoNF 4^rw]̍>7Cwd,+g#Z0|CWVSz·GJ]xdzZvz[Ͼ\1MdbN_zi;ѴUڊsN--g(O-cPHث3*Q`V 3&R"۲bӾg(]x3o#8~p] &1/֊ˏ_#|Gs?5)܉Hpjҁ?cp< ɿ~w~~Ҷ<9ܺ}>{??#?Gf'46q![hYAc04_q}iМ-eߺ}'O7 7KR[hV -7S")([ \Y!v™JY\)g^P9H-J)[IUMJ5i鬔uf.x 7#0#eP^ٗTzΩSN 7OK_gAę [ԙ'͏߷yz~0ߎd1󭺵]QMŨNntyKU $=IeSq܄GDSgrDJ6l(( pbF:?n}]4~9?Ovx0jlR:)%:oo?$ _|4^|NIV+ی"0+ʲnuܗ_??G Ýyݫ1;f@xX9n`;vddhޣAJ}o4&O} *ʘpmeH5_L Ԁz0ţUJD͘C'2@wzY=.TBL 'P=x?'GO~~)W^OM7k_AE|۵o{acS11W&ZC.addzi{j.A㷘pk*i B1olj{e R4F7Wqtϟ,HbHQCTTmAߣlMh4WHoq[~cIW8{!#m0𠆍h|Uj2#o]~ܲ"UzzÛ?8Jkm-^Ow ͢,Wsnf.)UKE ڬͳ"YY0qUkLã՗̙eeM @t5;rL,G՛;%!6pm7_Y^W.^`Fx*Y&_|Ǿecc]X\S3'ضw/__oW(FȊwTYmyVн_~? ſ_zG 3~G~ttp6ƒ[3#v4˷ycqD ̃_'ӗ7=#? NY5}ҝ03PE]qOp/4e#7@VȒ1-ɐ4_e@KتZ!2OjjV2k[8^\:WDr$IJR~Ĩ*|s7J<=6@ݼ :nم՗h|[;NSd}.-]X4KD@c.io: QZۃ+5ߐ;e:ma *U_m}kO>#o> _\ۅ =*'m}ڱ3AArՏKm[Bm}/|_}=zlGF&QuYc0y#2t̮9:f8VXaԆ wD-ZX$߳mځU-Aa,mla׶inFĩmM+0uJE΅-I.,&,Reh^/EѬn3EvIɄd1cQse];WLJV6e 3y[ܾݛU@ /tD۲%G ?+P+;iY3^݅uo| -Ui`%al2Fu)~>MY8y-I2y:¶[_ȇ'zakX>=ӧǾps}۟K o^{u|GW_򽣛ɟLnϷl^Gzv%bn4]Iω2z ;%~fׇʝA>u~>z_TWUsOȹoo6V*B_yǾ=ՙ<靟{橿|r_8"XZ8toӭo|avj5otwVc3S(N,$p1tA\#Hd!b&hiH7yH0yv<+ET^Y*JeLѦm"Rͨ( @9" V΢,\jb,S9$QV;;-d(L/.RcFk.cޘ]xcoĻSNUҼ,@ʇxrJ|RM`(8yJ=:S>Hia$DJ(*[΃m3>.s[7nЃ9{0wמ_>Ǿ#U?׈7nz#ҭ_ێȎ;~9c_"$HEB+W.]/Gд.̙}?O4(g+xCLg#^뼄kv^Y|qڝJE'3YPӃljo-ءdf՞ ZUp]=ګGow:SLrl~~S/|рo{&\繖&`[ eqP+oA8Anf aXkV\ȣ$C 芅9g??I'N؅yxNf#L{nɌ%vE2M,EZRzCܻvp҅s⹎heG)VX%1m xFE2Y֢SSƊRPSBf )~4ivYnW՝ %x&&\HR(Ss텥4oMl$e7noh*u6]Doq\ɟTˣ\0&GLW^4] $WJŅnHڭZU{ۧN^r" U]jcDá#7&!gL(9qj;8BW'_OzWbNH]I-c5)+IR)LsA]of{2IwW':\fYwׯwBzɧp]3Y2 Ff%BjH(5mMܷ-omm//}1Z`]P}f3ɪ<#vHI[BZ ieԖvI{}1:]Nj8"n>_-rUU!6RB~(Ӛr,GI.AmcB@:+I u*(HNۉ]ZR'0ϻuvbHşEmƧbrR@6e\};2˵dy\y)CyS2Md$wa;L e{e̿uc %RJMe]5 ct6XZ^%5$ǟ jN=_߇wt,w񚋚{ r%jRB`OJlm*e.atYSiOKg0eQI)l=]<.FWa8҅RS1fRՕ[fl "C]R92K Φizxxϼʕ5jPR$]@1uTiݘV;::TՊVA]HuFa)qv[vo&Y#ɲVԟy;lQE YA 2ؔVLgԔ *qyR%J)p#/̷yJsHug‘EӌV]-ARۆ?|()"0ü.qÎl`8i(LuJ$9{spYLc 3Ap덵dӒdcIDAT9gG]B > p'~u_}9A+ZQ-4tE5˧ElY]QlIVWUlN*F>R*K$N|M~ګګ.,ר<(FA* sQή* K &q Գ$9?٥(\zWnFy*֮eJI,,4T(4jE[=Lj$ϣ @s+CԴoTP6.-޸ҲKKK Ag.<Bd2 x2tiSդnT[nBJ.{)f}1ͳxuAۑcGw^x`qie١DD\qkCC#,׋P Q*lw8Ur⅝4n;B@[BNmϩrtZ)i|eUTK_ᯇbD `V)/2K&aeݼw@ A!@iZPJzN=_mKkGp9kE4$I}+Ix.n3)w}pz;\H'96 2-eL5+7o6SO?=L^cyM|NY^Y?{o_?kGSK G - S XYQ] ^^'I*(Ŝjl[oy kd]3Ҍr!9!%3j]=G'k_}f'7[B~1@,J>|-5ø0& (U fiƄ2-اӦ?dMFfՈhM N>62cGЏߛR|FΆjJ2UV bbFT JRKvbsiYfl0ycef%ݤF˱17fbTo'̉׶\F?]u(}h2x~2#'{u6K6&L&1*v{ey,|**y{%҂ʲ`mF2szxyY(k(9 H))}a$I4uնOuZ$'}y1}n8Wix^?\<-=g͔]& &img9 H̟h'͞~拏o۳c&^l<]893vFɉvt 7}E*Mvwkv rqin{;yvY!mU-`#FD+W{˒(\_Y ȶ]na}冮-l![I4^{lHj4[gƐ`D4/a8S(2*A tr¶a9OylԺ.dQ 3<2;ph7JYIbr8٥2FW&n+uB]=ow:p˱j,FQ3oukiqdV))9-kʒdS9%DV]4k>I ].bg )<(|^y KM k5a?_IEhu´*,xV"5y3݁'r*-͟\b{;4p ฐ  yi~( GTqlqN,1ǁ]Zoa`9+Jyhrmju݅[Jxs Mfqvr זza:d95ؽ`ۃV,a޷֭RTdWR\%Kqx#WVWv'|2D0_rxX$-HVZ?oƭQUY/|((U]( c&7w{ssNE h^`0e݃49yՄNqZx(˺, XZZd.p︿/왅w޷v/= z˯v`S<- |& գar[;6t6ߊ.~Vye7ox>ࢬT۶&KZEYʤH"RJܯ.wFsjVB6Fy|[|R\e{8u 3`v]v 8)Tfqu͓XgZ| $ct&3z5ƻc:)TAu[[7- d:t^Tk!N??|:i]0ocdq;nڶ?u4GQ԰J;PC#WqpP7~/Ƿ4kaZ *e|G|GMƅc.#(j[[;hFz1޹f{f?VT`Oh\hZ`hs#CgT<߸ryJ] ReۮsU;/{o=J~wD჏=ի}]ό߼DefX9Մͺ_;,8k926( [<֪ϿqGz0e ǀ*/,-"KeR`)TV=bV:ޫp1U>*!yeKR{WK\YtڄҚ lMFHi \LBofapFcB%ٺyVs#<# 3uiO)ؾk ak#ˋcSݵ7Ws7B5 Q(k6Y Z e^${{5iN ]mkT / ZӣkPC?6h>;H7cįkDyFu ".dRV_N'Z\xbѿ?5tX|{hWVO Ш`NŜ|w"L֚u\aԲ"eP;?_y!~,p-qߚ9:EgI;o(Л2K _g۶Mܭ9hE W;zۆ;QR"/?+@H=d>jW/"fbV<E9 (յ |7Ud6?N#)ZꕥΟ>˿|7|g?G}y|c]xwMc(&7/,um7JU<8DI<3l'|}4UU  `% &^8ʳRL&E(f'YG/~7|'姧0B<a1Js>HS@\tBSd^pjm8L@Cj9|yh亮`DݤJiHJs_yg?3/leeO"x˳랟| 8SʭV37?gi'T4$M.Gw{\He-u%1 m,͟J^UvnsR#;MS6@ qOTjp`:}BRXȡ}%^7{]J)ݲ ңU,5ΗONV l7\)j6tP;EUZ[nH3NrÔՔ=yI%wD_|yPB'kvksuJ52QE7  FB񀎃Jq$]s0LXȉ 4fU FXHDBuKM' QO)cⷔ&t w_:pڙfBKw}|@A.ژ{SODR0t>&^0Y,0#[)K޺euw=6ȯ4՞彸+k\1\R2}- -04!Em9B",`mST -0RlnvvvnRApmz/??;o۶n4ۙ*֧~JQ]LNV8J}Қ%k}nn]'7# Tr^-Ѣ&ɩz 3MKB84g*Μޔ_l. z2qLyhLH;Ka/|ۏz7րΪ* j%+ TA] RA|W𧄘=9 Aa$J/:Rv`܂%&BLvjl}D ]0MfьҚG{i}n;R1cRFq c?]~B1OU{?I »?(= Ե-J&wgfK%ҁ]F+'Y xܨފi)( czLM׳Cg6lêF:c(`->pg>6;?>?;Q˄_tDt(C9Ӫ)?ԩbwVUl]DJoب Μ& |PuVAĈh tH02T0smwH^. Sq0?|ner3*__zyן~[^rG=MTp87v`zS=#)hGU3M;w7P) 3z&zfuz\ - F g;n\3IGwQjJyĹՍiqE sԱ M@'/{nfT tK\ E YE \=9}:j3gFN쓐Yt$I!bjjvJ)fB,PًMLK]k2)N8Ԃi/{R]:~KڳDeo](iu+NM@%A rd8l8T6M2w(aA"uH P+1OU JB8yV\C2-?"T*<;??޷ K5O}?d>4;<:"{8vpըzƹzPFqcN3ӮKwe]!ы_I j&rL((9֞#}Uʾ3ӲU5 _S.,Q ~o=٠UJ\/~4r2 Kh3 aӴ:&h'<+A/ZTn-y`g[,/0a Ta.MnML`6+yqΐK- 04)ZCw//a 3Z7,eՃz;"?9nIň rWovZ8"cfgFUTH>@)Dy^>"Em!kCpbapEGN`/IE'I %&L= EHe*\[yl Г2w]F_uJ݁rnOU*.BnC1_56zb|RqMLА֙qv#C7Vwߗqk8[?u `4D'ATw .WI$(%DcNL$qd 3Ǟj-uN&\G;",xӂX"R s(I̅\1ٵp|@Q_Z&tjCOPGx2^!Q(8$ct,eQV`VPOG8@DRuP^ihq^POOIQgZf)[.Pe MGD$ӲʕBe`Ef;vޢ&uǘ[9AIЎ -=iD+8XiQr2;TΨ ;mZ;TBU0Dمv;lp|v"Ғxohb *EuZm˙ؼlۭP9_߻|}/>6]k @R8ZKd"!2量k PyP¹\1/kGQ=_([-<&'̫ \ww}όp x@(VS s=4y_m0 , Z:٥Zg_|t%DgJ(**%P~蛞c} r9(u{2}w.p>U bX1hMK:z/v1@cZPBarC"iqy >wlJL I v'P5TOZBͲ]E5C 2GIdqܨ KaӅ-Ĝ}N/Ux#ȴPfg#GkgO˅эkF .w6bw;NQ+b~{I}89-NLPJcIf';^GdWkt!-F۶)Eq'Nڞ%q,8r_}?!P8C?dkvb+}`>h,G!'^zÝ76;)a}_LZ]V=-y٧®z `wk6g?ɣ;^7$._xNLXS,UKYwɟyerÍO< iQf\U@cΰk%wB Siq=ͥij,ؿ߈bB繆Xåbi~a=Uϐ 4FTX!RT(N%▯cp,b#fcbfL\;V6Yvhp\ \*Cm}]D3㺶6;sϠASM.#ݫ3j+P n;**oh b&)60V0t7@" 1K[H9pil6<Z5g(5m4???9-,}?=\kg&9 xXT}W~WG}E?`򓟼T,{o<};;=oǞb}'~j R0QYwO{]w4?7yǓ/ [)Sq$LJB[LE /r~UM%8gƞ[A7.]A x\ܘ_4(`fbӲ- B?+@L`dۋkl5$|h0o7'ccr8"01 ϟC?џB\mfeśPq]?R@!wQI0(M/}"45;MU__߾}ÇA?8==4=MSwfOrrvr~Q0+v,>/^,g9aY#NA2KIlç+$.Iۖ-@`W%tj'!_ȴRt뎌m:Mrrʧ۠VW^2ݻE4iP(${R+B] . nAf cc׌ r9$i6Dž53$2^q]F Kn,շzύ'Kmu:EXC_ι9B=S=i@ J"Ĵ gRٶ]*a' DOi7 MB# ysֳ򖝛#ӍaKsgjȖص8(<엿 "m 6Mjj]V鑪*+ZZUΔrFhiLDA-M?ݧۀF X _'Q|GFw?߁nL`B @0cYt+C~KD@0ʾs"Rbi+L@_lJ6S)ݢ8j5ff['k Z+8`нb*wܩB ' p; fONM:@/$)x5#kF׍VR>Ox, d},Dltg " c掜uT莋N* ` A r<ϢUWm\o%jߓ @e`d I"0m${% &ʥr)ڵ V%^h8iوXj@;l>\@7ckSY;o?~׿tZ6F j&iȃe_wej̅m9dιm: RQ~ӟ9 ~r)5ޯ16|5JhM GPߘ́Ʒm,Mb4DP{"3SJya7XB!0,ۮ:aY\UjJ813iJpIsu#}J0\-r*(,A4H\Ҭ.ե縦e奈'J_LK;z̖C q!{+(|yi=`BwءduDhL >r 0{3_X9~~K lܸ)PP KD%i)06I1OVD6b`LE;5" O<#^W=&;ʡʯjDAU_@Nܶ!SBnH*Aۀ.P.QrM7l |x^^.,z̢[= =!K4N4e;i"&++J8Yb8" 0 lJM8N #EMu+RBF*cO@,_1-KFFR62JH@rgږZi D\I,,rhK^'4HSΑU. DWNUEmRbZ+}@FTy=}r2܊Ac#MWP۶rupU9n:djj/G#>xgɔAAMkT"TJƆNk5^}-7ι=]oZT(+ h^uKR/D<*rMQWx(e,Ne/k2;v[UDT͌ooWWF/ zoYCE_RDAJqD7 U LSKpqD 3qA=eފ=UD !pH-KNO~o[.KmJ}\bY8P%IJ=BS fe]SrlbNx8 Q HjR;_O>pkUiP jAc,}BxO~5[DfDzMd:TNmp"S .ۮuRM 7z4M 2[J%T|h  c WTX. c܇LNg+nٲIOHprY4ªXeсpEQJj5 T605MՅ%vɃRDį? 8lj@ji%]Q{feMThSjO>C ,t jSjT̯vV9RfQ0Xj$A~oOڑ@JC%C,ZW|y}K6v52U[u꫅WgB_z:;i }moڿSZ9mrBaoi ,{hi*n2A\y)(Cfq'i$ۿmww]Ak Dwnhk&bҙ].[է^Pe S`hڎw|8Evư)Ȏ7\ːe `:Rܪ~%gԲOELAp*he(,0paQxJU4s{e}jT_00=/bnBuXN*vF`봒w0DUynl{>r}KX<jaJEJ j2иVWJNip˶-3lRXY#r>{.5eZa@M m"ߋc˚1k{;8P*`H`q0*eY7Pw>O5~f/w׊<o׍m=LP@Pot1t:kjj,j_f~ӎ~? w}Og}웄:"ȝeLsBss\c![NⅬәٴi}bDhPX׿/;ze!v0~ꙭJyt aWu$)i7 )-XCSv.;v~7iZf_.0{@Ze wZ(¥IBTs!ʗL Hj@ Ss6}ʮTSaDF0ܼabyyryvbW  %Tj />mJuq'JplCǟzTz=85*W*q†5gk!1]EDaX^qb7zP)2aZ e:-unsQ/(9N`A jteč7D-BB3*Ev85k_|qe[QsE+YED 5D}`;౷pITY*!}Ή>$w򎷼qت0 wKS̵Խ2zvr.oLg9'v$͚繝$(F Nv6PVY1VzƲ%gv!ASЄdPPO$8,.=E9sIS~-y[*6VmL09JT0Cwdaȿ{ªRh8.{S~С㷿-cqѶ`nDDx^G'NARyv! l,50 ز%c)vyPO@ȳ6S`Zٞwѯ}˦#]8(Ck٩.{J4qQlջ[hDEt0Mut 93 ]R- w]3^I(՚VҐm2Fq(nwB[ o+/Ԛi @d޺38߸}=w~U[aS+!ܪ:;NNKN-ŵ3DcV߯zذƩX2NGU~TOKi"qf2h'i-u!4 ] *K0A ,qҗ15l5҈doSBAs+M aZ Ï?CO.i/ )a uۮ[q m r>t'3Ӄb;&3 Ҥ8M$u\"JaLND6Byv7d $Ī[Od;A:8HE,oՕgʲU9E#g~0oU*s6 4X*!戤AR˴Z̊Եь ׍98~љX9!0 kƲeC9c\-޲qtdhxxqlkٓS3 $aulذ2DiUr*=B|;ҚEBxTn^~0 )(NiXP[ZIri |u VE zuϯ 2bN -RsP>K/ۓ]=w{N~g+8AOd)2ZD(ݱ~ZgqKեȞFRl 9\WƲwVK/},F5Ù`ةDj:8YٟRs#2uUJkdWƕGzQL#Nu5N-BSzjOtQԔ1u ݭ!@r(YfY?5|m伯OWnCՏ+][(Hcΐ`t؝̙tz70kXҢY|acN ~{lOxǣOt>'2qgP>@Sl@ul@P9\P);tR/QlqFދ~]v"ά-e9axLNia:;Z(_*Z Ĩ5 oD2kUMRЯ?݌iXE˼=FT\$e:$S3IŽ_p`25(=(>(kӞ^ f^k•38]t9ٮ֟P͙#pf) 4p|JGƳxKJ$" +/@Qz[a:è*:֎W053ٶpar / .k]ihd{8PcYiF]һEbnpW*e"k׋LAau[DY;iv;Ju0d *~Op(oRBtwp`$;ꭗ@q&5l w{EK}tvcnx֍&y(\[RwCA:>u9˽>}7: +Q8=Y;.KOZ\-iin`E'b"mKtSŸeit{UX`ѯ+)JQ{|C*+2I@OUө^xo-`(ʸ2^eP+mYT^bw$@NcC0Q7gt 䅐~##VCKHtN &>"@b2]g7b`Bө6Av2M:V8nTIۯ[~ymj zyU`n=C-HuN./ʸ2NTa TSdvYڎ5Ա ᲶЪ R="{䶫7q-~ZT-L4STPx3\RKYJ]bgf  WƩqwM;5a0m эvaI!}zѿ`"| жky -J-8.4`ja~ǎJ lXSWndLtX] ~S}xlƒq$w~tedBAig]&#-i>z?@־jaxv3EIOϏ:Q1%F>F Q'Bۍot vyȺu7V ĕJyTW,9jh崡TG~ݕJZ1bHpJ jKjk+\XS'Hdn}1T@p(u3o\L@ NkSYV"N.`/dRG9Nst6=4ZJh;9;n|[(I37)6򮗳ZYDct2_|F+n@վhZqд0)3+BCTdpN8e`BEuB0$%S׿ }&u;@]_JfFPzf+zC#c?9x\i{I\yU7Bt\ɭ(q =+p> {Ǔ8v o1{JcNUK\5d2!y^|MK=uA_Br|ZCWCF$fZ\~c4 8Jve{r%1L%n5c? Gmو)Q<^Aes $Z֜+]+bdSlQKPTM\uU@}~hP۶ Kiڎ2mWш"GMNۉm=#frXd=,\eqe \51<e٬$MH=U4a&Ny{3?9sDzcQЊZ~D0R :IJ[1C\ST}#l RWu4WݩfJODc228,+M jt[tWIcNP-9QC2, ⡗wge;0#_vRz`ʘ?* $vu\WE  Q0TAFPXҌ0J`%'/V,Ӝ=rt#:KSNha%dՙXXH142னKyz]Wz,kTGu,`$H}m+Ut.O%ihA5U:jHmX Of-^q`lS(OO>/8r%~5L+NeYJ)4tv+`fwZSyŚ_DVp&%e*Lh!&eҥw[-gggko{6:6&P'"9g:0xUmsҶpPShW-VRuy $Q3 WZU ղb^N L[[=~zkX.~'mu0ϼd>i+h` hj/9>}!GYR[^T[c:yoHmYoA3YWki*je,x.܆^hw{,-T9 -tJL.U6_udמzx&OW6nۦCO4>këő~]hVNfM3HhU?!ҩ?wiHMgUuOp$V}ayBcڳ+X~VnPhf?D`e(A _;<`쒕iF5<XkܵG<߱h€G}"Tozu7K/잙-xõo }ǖ9ףQ5k^?@PrKB l`8,e^pvh`:=j8lzwfVqrBgX̤- K\1UVܺVrlI|umff82R:Jؽw5@ɘ0mE:9^lгh[޳w} 9(7f.Ѻq"*XĐ.)L S4D<򒙎,̌O0A58%thdxR ŽzL#pF;KYf]Wƫc@E q²p+ * qHy_Jfq_>ԚiNk wStZoLpő]-T$`+Ֆ =]Į׭^MLCPJд t7&*qJ&JIʸA)52)%bhi-4CjR˱a Db.Q %$b^/|ca>As,W-T6P.4Q`Rؤ& }tVLoqŞ\15 N!C÷*juYuJ>o-p. NFO4I2e=*SfOOʕ̪k^uh{3@Db!l/]엱ȂjHhw G^ȸ2.nt)hʙMnYE`Lzɵ< ItaRA`l54 .0Ix2l=~NGIGa9/xY.n8uzz)WkIc]vfj8+[E$-+Q"y]vJiƝZ_2cgfrP(@0eV_dW,Zb~:qǝvG$aӡӬa'N(Ԓ׍K=ٹ3իGk:}̘|DwGs;ʜJ^x"$Hs-y&` ACXv,Xٟ~Vhr7,TS΂ˢE] tA(!@WTW7(ڲ桁Չ ]p;9.'>BN b7qҋ?4Dѹ;T'~eY hgm̍bʯ4X=xT ,C:;?Es_!=0 9r.ׯ>4rʆ)o]?NQ',LP20g1C?QBuPnհGfȵ<3[)/Y\G21sCZ4u;wdҕZ܎J7-#,yן5J7KM4Z1BUo+rcQӊĻVxq$57MEK28^].;Z'B.rpaTxxY~%>(QntxhҁDPʅMWo8 b_raI#JeH:kPgZ^}S?qh$Rnѡ-5`'dz*zŢ3Vʻ3<Rsyܳၸ Υ.j[}}(ܰaᣝFc[R>Ib ,;(NOvOm7JKr,!9>CX&l&I0<42Ȣ Hq_ؾ1/kD9-W1J(쌾3n xHbXWڿ.:?KR69k2Ω?[\Ԅ !ha68 8##$IZc h1Y5\)`9 eQEIJL3%Q.@TlJD偱ѹ)44N$E\a9iG\V -bE.z)k9 Z/9,rE .Lτ<&2 B m[ Z砉 NhW%,*S&&:cRjTRj2Ʃilca8M EΜl՚믻_NShבeY\0FbJUsbQ!}"YT.=<+r4K)T*/4׹5~s.]<c&azpx 5#ʬ+^;:a :-i HM;|) <00&V<1 ā9yJ2)Ķ2XEko4fܤEmiXry`d٦J&a؜{CE 5Uq?4,w 8/k4- i poY:JRUic<|YtUe;ܨJi htvݕg$CR3I4u%lV( s͘cWcp2rx$\&cZqgۏ|!6P|DY,JjmnZp70, jHWkP54MҸs^ǽ2:IhLfc-IdtIuV:tAN&Lb2׍(վ@.oI\1fC5ųv0 .)2mqRX f& f0+"f B$I1T&rL7onZF̸12۰NCi")Ԍ8TDAT!&ՠl0Ц'PJ$NbY:$R&4s5U,WoX䋻Yz][ٞGJ$ r u!쩷:95l&h4fNHt>ȵm9A~M2FwW?j/Au]-/_#$%e@ cMscw^@;6.ۿ4MRH 0(xI!,xgXșh&KE&ض줋~+$2.L 86ƸZ*ktjGQj 5m;׀eHX@1 _q9,oVDb, 5n"v<,2B/chw]Mu_pZ?kv4p(_q %帡i¥JڐpTb#KL4704 ԵWBL:=POp_k*&eH{-U\v^{C,u+L&.do}7k[i8|Q#RuT[*Uu%r95kLm@CSlaD >+ 600% 3)Mˇv8A 8k{,XXcLpM \ŕ(T1޷`DvXA?_c4P7yT?~QįB̜(E |Z|{oVS@v l kؠXۏknxڂm}semf5JB[\Zr p@?t$90ӷ ;>mpMVё2!{/=eY!DOi: }4f_uyنd<}`/X٣N>%`C{Q(u1z?%}&4H詗gm=bT +PB)#8%e> e& 8 DB0-1= Yt玟f˖_ܥ+_ft h$S&VJP$(r]w\$IlQPaW3&W9`K/0IpəmwR9%nWX+Ju^";yQE1]aµW+vS~z"iԈ&ډa SLk0*@: n zz+3(=vrMV+zӐisMt7, pժ0 O? 5"ԭ?छ^z40.`Ao#םTथT-ۦTT' !ULWs=6+ow㝹G~?hY`kM@+u N)BE%$.!u}U0Ȋ_}7^շ,M0B&K^mԛqő?lj^RJL:'mA(շ9؃[Ojs&ACCAiܸ;_ܕHpiش6uLΑ`۶m=v|\)y,ٹپ"c,~&o.,<@jtsUtݞM]U2θګtʢOU9aZ&RM4E$2yޟ:ѱ m|gxԴ]lSDA-PU9[YtevuSjnUz?׵ f4'-돏O_),r&%djnY  d<tM3>:2q̑\P(!ӄ) iV*pWPpLwjSU

2>C)IRij}ON.{&2 6P65BBDJRQ`m; +Pm$AL(7D“CC V%[5Ava]BʔpT0Vc:Jcr_\.WVgffD4Xf$5 -k#Bӕl_[ʂT,379%זza~ V fԢpp 2B '3]H aYaRۦ 7!9K SetDqRF|Eil4s`肽MvMzb|zlu7_}P\(s^N| &4MJJi( 4M2 h6:;IrS3ӌF>64<w_f4"Xj9W˼A1.0UK*hqhef:R؊'&^م>&-tkݱ}`H vm_cC/Y2 u(Y*vm8 }uq$y/%#&Y .(LϢM˲$NӤT{[{# Բ= kHۮy \GY\AťDQK i9r9n.0t"I1MXq 95A@Y[Si= nGzz|#184u0N*$޵~+}5X 3u˝}Q5??8~u[Qg8JR!PҎFl$VDGk}q/ۯ^wc\E:IX . 6}5.}ݜ?τa/U~}߲M/~k^%8ou:\$eĢRB̲Lu?v1I5qF7l:ziZW(QN9վc0mj*i @+qu#Nv5's.pxGj@ՠdNL+0<ͣO*=7?Rsݶss3Ϸ v'zG֬5au7?Jmȼ]-$dnI).Hg^_|e^7t R6iCCcNOUaI$ Àl5_*|dgr?rVSXvGr{86_wmg; [#0Ώs>F/TohQ [U N'-6:-pR"P0%Dƻ)q "(́13ΐv˗`c kR7>tda&Ӄ&BʱգSSSbjU*J|q/]ǂ=&(Uet/F4GFх݃Kot ˜ `X;ٖ / W4(I P;#)qh<:Tff^J5'@Y[AǷ|{~ߏɟЏ@ 2P'G/ `2WYX1&RMSLos{0 b;gn!pmq$>kՁA.L92{DyZaSysJM,/9z\(fgk}}UccG\XjQڵK0_sW L%"R"˲V7r* 43R7_5 d++ezYkYCVi+&+v[^4OV09:e'|/5FǦ,14]W1/򉋇ʁt!"y'~{t]EiAyO/M7\sǭ??yb|4RAz!^W5֗^|R2<ܟcR֫jKC6N fX`}U5kV*q(U\8b^9_ l:0!&EYKDLA˄VHz@OU '_r2{8:Pi6 ti ĩlW={:r7g~8$gO_<9Y&7ݾv /힛Y=V| >B\b&l*ccc( !0iƦvu:_(xӜҮ-[6lظsjFGKO\1R( cbR 9%47:83GfD~aQF\'`,j)gϭh$\o@r'?W*og ùdrq2L@\4"w?t5v>3~-WoYηaZ~{?6 kZƦn5kFF=(ܡu q8q8BJv$ eUAe&I04h6F#õZohprB$IY74b6FLx6OI}њ )e.=Y,l{FRƎm;&v,Trߴ*)JV5q/j = ׏%?5E}/bÇQEBhrn7}qsR\GlwBc5-haL˲ԳU׌q4fggIlNw-j! v&qm!meS8I|m]߉-E%ћy*[kZ1q?3{ ; ڲŴTx!bJ?v/>i xr|בs (,IZ5vݻ_ٳg={nUC#L,mCib R S5>Hij\Ra,QONLضWvznٮSsNgph 0 *{,^Fwv ǯWy!+sg71S滛;/;ouG:wa"J8=2/[A)-cӹ?!8^ b/E\^8p_ܰ~CС#ǞyyߓFvM7]5sO|~s0sx`bc)٪˻ci*(jZ?$1 uze GPdD~Ug9R^Ti(Pd/D2دuh߿=;ޡc߳IrfYX?jJj羄掗^ mE ?HѣP9|[:O??;7G=:v}\5:cǎ~ONOB:t}mw 'N?9eDp"l X("ٙP@٬DJjɸTC #}eϏ偟f*@(ذ~썯~!0w#ssV޸qc'Î֮5DRn~hқ| /UJY@Ȓt0WIy׭[yQnw:Ji~aaqJ pqxHZ_ThI5so=J Q[qruLûddNai_,hXYQ'")uő1j5_#:>я|ѯ=[gݙ e]Jx5Rp4yZɪ}/@[ 8DmZw7/s@3r@`p`6i+9z|>h)g/|;2=9AMstllߡ>D(m:1>=eˆjћk2jj6NK;`a-'Rl62]TgOa7RsM?m̧, \g]ʅoe8֯:}V3"1 LKZmvu -=SdR˖?>7WY^'\{I,^C{S&Sq@(X O=/I!ssMK ;6WanVβM;Nںio>| ! 1[*4V8g\n!f}S G݋L4rj- lrrr2 9 #@pE`^K8pZ6}fY+KX\6gH!PdQ׽s׼lo>kA ,Ӓȟя/w͒U/P!cxhCAR)RA#MY$0_x4qmJ&ں/cIRq1ckߑ=s`(C~D (B6~Px0#~&O6ԷvN+m0<ҌMD^4D3#a% R>PiZɔcÃ7߰}_zoa$o;_}aZ֖5$S5)mMPޯyN$܎㜛)gW9qljo޴)h|yb|4zMf)}RW(+Ȋiǜ֞,#y `J*e uWT~hΙd9ei N:[Wmk;싻4`)-ծ7~ڦ[P*kBfoqVL3*N\Vc^k7#hpp|uqnuۿ@]"htP0s}߿vmoogr+ka $׌TO.\ X£;М{ꘄ2ʧJ-8* 8q֍ܰ~gym!dDIiB??8Xiu{g;AherI_u5C9ٸq3YI1' 8_2BjBc-gCy-%aTD Lpl]l7_殿g׊{;B/}oKw}؊c잫Ƌc>J|0Z.E$O)\HC+ :(#wy͛7/敦P|{gj덌m~̳/y\Ym_}כij:Cc@!J0"{x{0;{jƎg'qW-b|i/n{^9gKr ojΔd\ǞxftlG~NL^u|$Snvw/8_n#'`m]]YuZXi^_l1P,$fEH&1ߒ%1ȑ[J"ӖWN06i~]?C{|/+i0Ѿ/Ew8K V=cb'oaBp񄘟4ş!:(טPhV`fąE)SInGصuk׭9tB;p` Meغq]T}=p\M_{]oƍz |Z|f baU9;ݧ LI~ya v.λMwvM$yiH FpyTY.<"_K,%2Qk|Mwg2$/v&V߯m_~^tY#u#?[U歛ui2ٶ5;\P,. %dI1M&i[6}KkС|gє͛6yM'jqu:P(/ cɓ~~8)DA0굶=b^@5?pr|j,a`DL_P¶Ў_MPl͝v^~,ۿi[UYl #৆d :Evp$ap,+ 'w^sǭ7 TyN:X[o{չxvmn{b箮%mUӡ U_HO_PE'<)tx 3 XHi%iaq4gdow Ȧ1yYӤqX&8mq,A@eժ=pԃ*س@evv52oFНCi{iO'8aPq( !gSX|hܾЦI15Kujջ2<þ 9nUӀx%Q s㈀:S]€2jwM1Sݰ^eB6( T]Cl\i7ՑT`( M9y8ca@@'(kjspj?>J [v4?%p,#Ó v2 c-;VoO 6^1)Pw^Y9cLKPK>c<<5M i3TbBB; S.€ Uv$\\>K*̇TiPF 1CS(uOpD[kP 6vO6l5~ƉO_7>?(֕??+O}u6t 2`y oB_z`ٟ??T+M;Db2TAߪǞE#Bg=Rd M0+y=;s\PPKe8& RxVcL`XBtRɬp.p6))=u֩FݨX2"LN! vJUXPdhO+[^A~X#O ԂV$M f*&m{Ńmƺ# ! rֆM]wݪѮPj.zRj>cW0]m}_ `$ @* Z!AWƨ/Cr)Rdž1OC2u2 K*BV M#I4r{xϻzwHmҳ՜cT9?kV(7%ЦP'K{//71MPε;au*+4^ʲWؘfO;ǂ(!6_MLGΪZr"ca(˪]\ʫXܼ}Hmt 3s@p朤vA !O-E=.$PƆsvJ=v=%]pߚkç?JXZ)aWM?3MO67W?qX}a $?e\}_} lˋ'2Me:|GpB"M1VU*(w]k4i*A^ץj^k62.RB2zNPτ4 J˺ 44"֍y=ԔϢ< fP&ULؙtz[Eu?'$_o{o&۞{KS󳵶lrzxdp@lHw}}u=':fz]4bgԫYs ~K{?O]o'BAPX?M R!xun(Whq[6W۝5=|Xd;;(?MzŢ`cb`/y9+ RBbNAe%a ȊEYw"|akSȬjDŧ|֍U.,xz_Z4S>c_}::|>;l[7z}75ۉihY-wﳇE /~նٜ}tY312zl.tL`Zy@|/?*tHs$03Ӷbe,r[nDxAz6enO픥F&,M 9\Vľ﷚T ;~ny 5^:&kf`=1p+hoF Y@~*.RD1<#pudž 3_>|ß0fG>1/o5 ?ܷ8hL'i"D$z+CDꄪcxj?|B.OyBaJQ!+tM4z-_ٷ}~ ~GPWy$ D n޵w?@l1f[5cRäN0 q u8ўYfd|gIM[&&Z *@V;H$)άXT|tu0itL캣#-#JfKPC/=1:y@(a) Ĕ!Sa3 ^y9%Q=[\P9pr"L [* *%mM=tDj2M#A &暗_5P\ʸ됱U}rS3y&2$M954DQLVd{$\3г9֟.S=A1Mao  [Zz8dz}c DDu( ,i PPd@ NStdQU bTXT^q Hd7qbz럹sA(0 Sx` :VAg]NM}u< 69+C]PwRĴZ}[4R@ F" iȊ>6"VᎭ-~W?/||ga0Lh^ęT"Fv- mz E3H:0 bKЎEn~;w;x-o7 g]׹mCÃ/?DĢImټ6{kOۏ;l/,'`ǭbw̙0}@AjNI2fiA?*B 初E%Տ^#O_m -{P4f92k Mā2q42,}~4 j7{޶=?kyo|R;n@HW%s-?m hBG}ZEZF$##JuϞ]}M0ƛ~CԶ{\B086bSk\4*dBo^nCX ;K:Z2UwiQfV噶~sEAF4C ,ye+JPvJ2e"`=5aV{VblZ`]j[ݽk_<[M_[mI g E4cP" a%0qp%_* n=h8/g/ʺ v=cC$[kbH`DI G8Ff cqJq"cH|cd`_wp„p:yCk aϺ⩵uI3CvK7n==S͎nC0}ZFcZF+Fj!BP"uك gJ:TE5z (!hUjt7#ݰqՆ_<E]2>^VSY_vԁBq6hN" H4H(X7Px-oywڵ&Rl-`!I0F B5[`Љ3PłXrwٹcO/47Fylf\0!T Tf%ڃ]H98\{Wt5 0KX6u}zэ,X,q/`WHt.PU[ ѩw.B'νIXTJ%!d ,-w[Nv\`׳_-5BR= gIϽݼs7m?ǃTL( &ADNzcHX0F`'J=z /)2z ̄*֗P8K. "c~u~K 4xy.Ǯ`'wV"PrݺvD 9G:Kv:T4AJ)rwۇu\ϛ5^nb H@LCg> _ܽ.yk UeNIju܂*7 zRȏ3'q 8P0bLQ\, I0Q,T{ ʶ}H9{55PP5 ND%}Sg]CfzD?e[ͯg%.3̺Bp Y ٟBXafce4eII"Up/SD#Ii;1k;M 9 9jڂcil "OS*ѢzkZ.,ͯE7u+F} -!+w7.!{jd0sæYa-rש\ffU A`d `x CFP[S=H5T8Lt)CE]h4<_?z .LB16)u+~ b D<-Q$>EQ",Lp5 V-Mj?U[Q!!Ѕ"k~:8:C:%@O:2HHZIee܎ٙZrcl:&Z-Пb0Td ?UTu9Qz ҥHLeųѤ]zO2?_fS?K$M,H2pJr~  CjQCb&Al#3NCǧ7o2Мw[^so^;V,9/Ց $6ksIZ<|#O^@> Ul?"eBRCGj3I .UbMϤi-ӣN"Wt űĈ,/D1ǖ#<鹽]{֣ͭ1t((ָwg&ز,/{i;im/g>+B?z |20LA2 )2'OqiGNtځiڍvk@GLw꫖)m+VU e  (EzwWbZ2!3%/Iҵ[72̞<^^U037\^@"b֏3^ qwހ> Sl; Y@ؠ kQ*V~ɦimj2G<:|3 b>|u8qs}bcis RF uvHB:G_4[wKK/`ySpFp5,^]](lVj+bQ!fo=+II!ЛT{I,GJ&m۶0à&\ pz:&R2ugc*AXmD_/>NH[OWw!buRq[-gծʚ7&L]L,Fwb 4ֹ0F'i軹wl.<ÕrFaܚɗ 2C%;pǶ{o~~bЉhr2⡵c@&fLLpn1IMD4ICL}TUʱ2$QgadՆWs/ÿ859kã%?Ʉ>ںvۿ??{h-(兦oxmT*:So}5iWh J TC(XMǥ{.yJo$yig G *eUʩze7{I5nc'kVX 8۲)!~!&`ZILMXɗ )[_JR6;Awa+@!ˀ[fu\rСxphEYνCB[}*8RQPGՠ?؂9124)ͫv3zp9E{%_k)_ng4"<_'?7@,1<ěF֭]W)ئM #c$f¢44 ixLK,߳[{[2[1j?_8c_΋(a=c̶dAM#ޠ$D'w>k[y@) $N#-'%"8a]0NIsď\)S[h?G֬9 T^nd+lFS Ip(_Th3A-ŞWhqhIW(xmW~/N݄%z^oںu/mvh(iDqla{O%)b(H iCvrH Z8$WzJ;BT[tŭ\x : Aez+_=o=Š"5DD0s;>zr ugz:ϱ L 6-GP 눧AX'ZGO[n4(MXhT~AT XZGRibiB2hLU?PK N"HJ,CL{P_5qW>Goymc[ #ELKD 63h;eOJm*. k"2 hrڲ[Rt墋\i2!s F<wޞ/䅈T Ĕ'(L'ꗽ8li BMP"W)[ڲa]onH׽nuwyߖLWqիE7n75za94Ni;@3/>,89[#&)a`Ç;xQ(B4BtU1H TMފ6AULTDh@^#3{uYTTX3MˊW*E*adL+uσ :#]V* >&P'`f\MXׯIHm"Y4^P$r(vu;"$鱘xt2i l֚6sPCy1% %r!ŵPyiWzu%G%f!p8nql:&dxr%MO8|lzԃ#vdhl$lyaXW!B87;7\Ժ6Kd&+^ a}U?HaDPeˬ'h]XbדvH%oȸh)m*}K>3, uEO5&՛XwڵS+Pvce1lKv[˪&P"&r'3 SlHuv]qYq+E=i_|N3KUMZg?8S]p}~?yd\hFLPGsw8Y ^\+!$!GT͍! #C1gUG,拦nX.V*f>k$4gPl*:~VMEf5 +mٯa4QJb|SCRש;Ե|J`(A@PHq6bD\Pqby3Jm#-ҕ5b_ts3RNUUwk6 '_sYO>0PeзR?ĵ]DH0Z%ŕ^P 9MORdEUU]N##~ L5ԙl 쐗K-Ti?VonYe~tlcPb!7D)"` (Tr.k*J}Scy3f`2!y` !MCmq,4ͮTٴJ*#5FD]Ib <~pD{Ͷyl&"iz*ޙq(|6ķwz>ےs] ֫ t='[U#D2R40WEjk*+Ұ``N6p|63U#Kc]FHtVhuUY=yaA$yY:N5"3˒ &~蹁gS .vw*[ ZhP зdbu?fAK3=>>)Ƽ'J4JlzWiԻ><7uT5O?WԋDgqm~J QPGQg=>6l9^:d'>0 - 1ƪFMs1{zM" AO,$M%3I~EQYp lI/AA[ڡt]+߫4^@\ /,Hڰj4 kծ[G*=70#YeH)Vbq]!R{W =D0ah٠z5sbv૆Ldr-Iҁ "A&}pfx!Ƀ^O}`Yt>%Y",~wNAUwE,_ ޲jD3ZZ]P{ ʠ\RFc$9Fd]] #U2Yᘇ-jGOn,2pUg銪ųEƕb) l'r2Ĩ,,)R0Є4 !뺞i _92 7M#kQ5RJVJ; ?T&+(n;؂9Col?m +{h.1u- 24kWun][-MoD\X(PT]ͫcmЏ&ޖ Q[Ϛ,:ƈy?H_WyHRGAC>݀EF]R+nwh6W.̃(Ƣ3. l.fӘߠ .PlťѱQ\q|ߟ]2 "X?bB?-z5[qr0 ZKF6n2/lkyYڒzG.aP-z2 (fC*1$ɣæi›/ YF"$"תkukU}U2Ut#iOdڌx:ڝhh !@GoܸVqIX&kjNbs@R`(2XZU}j*BAni|\~\u% A?B#QMͩfth靟4ӿJj%9Zxˇοfs g~gO9$5=gMj>!s < \uP82\+8&$|I Ԉi2,R)UQ4TmqW^V0= lE$VSBy,nk:n1>Z8 O;K5L [qKQGD mmw]@SԘ`+l0مSEK cKuvTZ?mk,o,-woq7pmFC#B>7WܦlPSut/ju͈ӵ@u5odЯwiIf Eן좳0r!W}s/KJ͛,y3+}&̋nu ڋ^ A73> g%N? c=zPLb>w州~Uٌ<E3Mef=&ZL3Մ08SV뙒Z__e}qvNxwsϯ~3;;$BY쯪j&E/9p~l1=8k\^0Vŗ>s,ٲ9Gb !t`W.E1CKqF'<[?vQkgz@o3IJKNoP֩@f}$XuA2 B)+k0& !Q"jw1MgJ矲1qhGeٰ'994lk!"cn q\Cd$A@!dG֙!b>ӹiI @@ '*we58ݤwWK*C?PZ@fV WN!>h{˖s@H`(l{D${4'/I'9?Q*5HZs#sw>y [+*-̙O0%RTFյR*TȀӠBO5h2ik_|cWxAS}ڞX㗼6=vI8rpf<0<ȥ_Q1U yaW1;d8ቱbo{L;KŸ p) 2=߮ǤQ2jlPAiP$`--(-KƳNKe\!seUD \Ld?I=mF*APOzv2F[+LC0|&1/tJG޻ygzc]q(1sSӪH&:kεSN阭)8_^]B]1 /wIVC0q2?+-2$/7@3F6n^':"RU ~QdS\H:kjʥ2b)x+?F1TUUTՄ4c E%pL-AD Y-ʋwLQ[s=]#3De K6AJTbۻjе3I= ]z/}bRuɢfFPf@QeR)MywGuAdH*!>`q5  6olY&!Rɩ]~nX=gT|1(ް:MB0X0 >tKŊ $8rQl>'GOɋ_# P9|`iejΕCb.)PuMB0PKD]u*R Ѝ”!$dJH # ЭR#K8F|ѱ.'B+ؓ$ Pd|Ωێg<{}PJ72^(J ٹBR %IW%P_&e0ےjo*| J aZy0ӰW'"$̵¹D;w-KNZ$1KU3KWF(_(W_ti.-MTG_~"0(}%06mrPKV[vFRW?N$cl׼0!*[md%Ud3,)Ds7מ҃ePE`jąK0 FAsF=C `ED,6Vk9u벆n[ە+gRX%+jR0͝EXؖ.M=; eZdݰ+REd& )Ɋj&Z,ڵb_ӌ #pʑZ-62bNeTjSr!mA (8nKqժ]1?RH0B%s j[1*QgD.8)RW\HA0PW8>_VYA K#jSU]m29,p%ЬdQ 1H}iϓhhdK:PI]=ݚI#H8?\Bn~[Gv2X\N-=&I*7'WC >-k#|^Ub!,`kf2BRH,E$ *Gڢʩ\uTXUdS04E5-;\IJTs\~'W\T*!KJ1Dx%*R/Sn?Y1RaS#e$`'b7UxiuزO]qjXv[fm+Q&-^55zm x7zEV Jc N[8&\e/ R(V4D2fs:61Ӓ6a LÈ(cgorN{V3kw0L.Vv)dʫʄG2|%!Ҝo{n $LNQ'\Vz_ye\'(CP 3bh2_G:o߾Gәӫ~ʠC'{yi? K` ' E7󊕯K݁Q@ "]Ϲqb3n@%K:Ӹ=O,YִVa̺N4dSꗈ8n|m;ޑ40QUJ U>J'USP*AMjdZiRhzw<Ɔ&w8ɏ%aD!U4zelMYx4Wu67oW hW&cfu I?N?Oj%Jtӄ%P L&V"eu.BXir5>!p:A9[(ΕmpGXsrp ,N %ȝg6/wdn3o_<턙國VAZv y'7%C~iDolng2|l6^JFb=D.@0/De]zt]S @+:*SQ qM24Y ^ቃ/D=7 C)lDP\tE"B$Sq,}!¡W h ?@BF5=ҾA0٫}Jdei$i*ٕj 7bk@+u5M5 hcR%b,sCSi(Dժ 9,f~4R1Y*& h՝>4, &WܪG0lu2:0sYrͪ VBW^t@q|ԴCj^GhJ*`=+EÎB,9&})ebIȣZpM(mn! a9 Bh8$0~9%Mw"T-ͮQ˺B='r! }*ܟ#w5ŕjoQڶ$.XȳLۅrݓwZ R}R+paXŽTjzr-/+͐ kA#l| ej*QPY&>]F$ʪ͗%QiU\KSjX*DKRr]Pƒ$8NYY(p֭ݧI*sLVg<7[Atw@\LPyDON(X2337R.ΙICb.IHju&9796#B(x̦媃ƤrX*!ts3J:e)V:ҩ^ki\ Z_Q >[|%7ӊ΢_U t8_*, eiݼ{Uzpā@=Qe  vm۶EcMAX. K(V%1g3c))J>EacivyRP8CH?#`SPT?*|oVC, Ж=)x5>w|H%H Kӆi/tQ8I"WZT10Xir?4InH懑LxڞeSdT˵j `<D,NR@L?oRTՠ $&5}2OGKarpRHTJ%duϥJA',kV_)Iݜ].JwjZ.1v><&WîEzԷ (`jU+&iSgj&bqYM]`(Oۋr?@DE2`.#}Q#f 5٫j1V*22U.,PSUơYj ja9gdP!?g$9%Dh:0TߡA!qd z*-V5\y/W)]|͆'CswY7?vd!q%MQZbXɪF&̗v-U&-k&Ego#3:,2/P Cj)$߃jC0}u|j3٪F@OOT xdK@ p (p* =',RV1"cRJڠj)AN>(R)WEa%8&C&Dľ]FS%aX0KBB ;xĴaѢߛ#Ϗ'.ĭ1+R+85'ZL,6!ʄ2~." ݦ++M1]C.)`&D8@0+^|AC`qJD4~`Dw7%IA%%iqW='X, 5+٦KpW5aIǠ5,"ACI3P>daR/ ^%0! XUx&l+mC8K6RH q~JЛ%x>`|_]l.tޗ{'ؚl=:=˲EsHt1UGmSQ- DTӞsf:%עj6fe,1Hq@ꜫj+2[tB%+ I}{&7֭+!&2u-{9a:DzՏ > ĈfrD<OdA;[7 \8@f'=\,@.&12R>CLP]%ˑ C 0+*#[Xq_ý! c|b%8d$9L*%4T D27*DK5Y0LӐ뇪]_2%B|)ȳC+FBUJa6k1$+ ̡Hic#/+sAFf<gOwmг.CC7Їi! iB}FF.YibwnēFHJٶed\J߳lP(̺բgsE{l|:da"CP("A+q [0܍S~aIu?zroIDV%ꠄJYF%U՘'DRgdCRY؎!V!V3V$bfy](˾kQtWo!T\O yf8UJU @'I5neDH}B 2_uz>d޾Z+KI UԴD/Pׅo$4M׭xJ5' |`ZmxVumY` d}صZiI''gK9.t#W1|) ȫpz PTU W0՗G~_i"jUG~ʶX\̌F8|1"DKKQ_xqM׭ _3F9Ek7SeE,Cd@u q5 0~@GQ0$$!]uZ74"ӈ욦(J( 4MO57^j^A~=dL'a/h걊#B/N eC-[Ң7~Ko+"(ߛ˧S) FFm+*@2\Ovġ㝩j#B E5,]pQt8L$3Jr>ބ7APP$Dz2e~ \/>PXG 3:Ί9 e%Ec^< p%nuȁGJ0,Rqm(Sv "C2=CA#DJ]H k\]>ꃞ 4LQy=@zͧFfi<5Tu$mIC;e8! 3 lRsL[C ^֊ CJT9!cy.l*$ 0y>u'L&cц'#Y]B$cf{X*?^Avmv&LL K4"W2S5ZW,j͵`8%R[q]Q3ND"GQ @0NvB CmM%_l$uɠ=Y0rCJa5?HSJeAlƵ+L*޽sv:̍N:sպ(Q8|kjдBnbickh#Lq*n [4Ӏ"G:n!B)tU=⟸VO$?Nsާ͗ pRDɱU@iHS&QH> WB( +@+cOAV8KǯY5SmWy`[p~_i#ˋq+J=d'๮Dp<x,b.e4Môj3M<*DH =hkO$4r\ cFiPVV(3/B>>Mt]!=B4ύLK5 1 s@~0i4U ;N|̵؉, mY $KNJ̵,q$D05&A8Q4Fi\w`:?eOCU F~XB1Ǖm&!WWCD`g>Z`S̷x,~$Q{h+2孈HJf(EXn͎eZ̓{( [9mΖبneVHJ*hD֐F Z.:(J@Wo]%$n{ƗH( H)Q>H ZUc3!󥈖Ke-nA?D2(@嫜W}rKO A,N{K(U'f%%3I*i XCƒJ,YsF`Э Ca)Ԟ#:lU\ KB4EȆpWڡb "Iܟ;[JᅔƓ֗Ki.+,aYgf'b2pTzѽЎ0R,=9JC!,fGH˒Nu353|܏hLW<3L*@ ~ -ʾoz;6w:~(>Lb(͙ P_"0UbZ(B?I'E=/(Rv#W_2W4g{raxDN W@ $DnȊt:ӻTsU aK#ҕYU5U"%`蚂 俼^ި {VUup_) trz n+/gMOv'-mZ(l|N%XA ԭɄRF`lF麖.WjSԸD2Ұa^uFh@]1!ꃰevQ[UUȪsneT_Q-78Ks B?r m@ NzödwoveK?q8W"Q)(;>QF0tTJ3. e)J+WJ+ #aU<3ڶjǢW@+ ̓O6 8V^7]>h^j6O ' +WC"Yc1@` +|0A<.~VPh9u|,09LN16.Bc\. 0n 7B U9"*p ˺D,Ÿ_/N۠IDAT ,Tj50s]|@7oqRtCC٪ u~ۓ,ZL7Lc^93#9Žmkz&nXJQRI"*k#ώ[QPTǃ&e< W ԡ%e!n!fGI2|`ZHUB9 +tG.4E9LuHQ~bx6JӶ\" .iFIW.:tկj%IΙTxF(1Y$JPbw,t׮ݻ\K.eT!x*Hq8tR],xOUrͭvR0Bi6]rZr÷^+:8~yuvHM]cp$/Η +X@HB~xn?1x{ rOh= ֥5("2QanBpey4_ }4]#W0Kh"_.TPTlj3G&]ׁZwim#j-ukjy$w1".G#'B#jʄ(}YIcm.0~ boewI%ƭ\Hc\,|СCBc2`mOOOj5˲l7kwtto?{{{ ?G$IoWEűKe>ba4sՐGvxPw!BMp~69Ut2xG4E"`8eGױȅ~CfI.~0zPܧN)iW-ujrg/JCCCb}3TUU;v\z%}JE4 > a\Oؕ '_?h-_~}uuuwy|;׮]Ncؒa855G>uݯ}kgff~_g?۹s_@Wr/|>^X~}h47 [,Xx~-qx !"+u#_|!ޕF\ !(2wp.{V!: w#/Q,U;#2cO6l\ xj+xi ds+nŇN<Ï>8U5Bٓuzjvb|1]۷gqf6V%޵hjsYncӟ}d2_|ۦ.~\qo}{'Z?~3ϼk7+cw%7W=ԆlA*/F>5X7īJ+X5 Auj0~.1+F]YRv߸ A$ XVXM:YHX` |ϕDBQϠ/!( AJk.07o16M :& `j f#?O&'&cʤ qKAd OOwuu_GWa"zB'тDbA~q\~nѮ}ٳ+!sq-rtM?$I͛7o߾JDZ@'c~0P;y}kqlRO}'D o ;4L* g% L]'<") >B-KW"HPY)SC.A? Feש_~+]SODMFcۯ~Rx|ER )cc#,2BuG^`W Nq!;v`/}SO:00sN;BjutttppptttrrX,6c~u׽uLoow7uM۾x_ӨoM#/I'@Ѣ!0QOza2h2+*-#9$ X![e>d  bXFw^k&@ Pl v"+߾KxctRQZ:j`؃d*XU0ah{_m?+j#Jd:WT/2`7|>y o?s=o|K.D4?d2t:JAzsRnݺ/|ڵ~g>G@p.IY_b`[/%v, .qܵCF4 \0C,fϽ=[>OA v5k?+~Mo&sDEV%U+P;8?Z֋wݯ{x% x}VӴUVm߾}lllttGu@و(No\WĴ+̆=|bjrʀYm DQAP9` R2erRydF9, d`"D $pqn.JRꜯ9ypP9zoN Kg!g􊈪A,ɲ.Y2xBh*6 ]X.U  KMy<ٗbPڵ;8x oY@ /ܷow;oo=mcy 3W_q_-qiu]7xhK/PTMqU/Gydhhh͚5W]ǔ J뮻{f!DӴ..KCkkkwwu:::(:5KbU@u]c% #-%9r1*㛯{%yq-1",0OϔҪk q?2xow1ۮ"BRٮփa }91f0Pd{2UVo#]z啾ֽʂ^BAxikydddff[ni&RB6}t: Wk1 (/%ɿ;~gy/;CyAs_lYa"g_|<IlpO~{ݵk~۷ ]]]/[q3ZRihV/pomm꫟}YJ芔宮|>/V ,;\gkҸU7p*𺾾]ϼPA\6g1"~CQ3bWtϿϾ;?m۶vuuP$" * q` >gu6lPj߾},_z饅B! 3Y&p̚kNKK˕W^Y,O7y}󫵪]iK$ԗQHTX.b&8n ٙt& 9'L:|5o/P߽M=vh>_(neb2MRbK%L)0R4j$a#-#)2Q 8!0 `C##\wW7d+\+/ ;8ٗz422288,˲|뭷Mo:󚣿`^1=ٛK ;G?QE?OG?mmm_|͛:T*V^M)=x=sꩧONNfg}bX.B@o񪫮aaWWW2D̬[󼉉Ӗ Im .ov&E"Uh*fyڎ;NL%gffȑc-#)O#xS 3dITMW M7 rhԿ-H4UܚT)cBb8& A CSi?Xߟ=<~:͠.DecOT;:6fюL2eXVԘ}/tLJR2'tB?4X, __JPEK5%o333r~y_D>ͲfjlDxH`WWdbB0<. f'OcQ$4"2p *g0[m+C.ebTDfNLS #].Vh׵MaLE+z[{(:s0aV<ϱkj@9HRg4.+#X'ruwiS6X&Bز ]7ao) 2VY*t&,"u%eU#DY ,0lDc=UYhfBchσ^r'I?Fը<裶m_y啄́F#4;;nwwwf€]'''mDv^z:uww_p×\rIooo>_jիO8[[[}YP>O$_|gffx F>q K \;euvv 1N=T'{,c=36lرcGZ}GK'@ O! v^ZP1?p響;]PW=^?ɚFA:rJ*BKLa ik#CS[b!`(sv9 sR!<($!e׬14]vtLvCM0\+͕l2BBf<KIĐK`1F#ESf&=9P+#8tbbbӦMÃ7|׿O1~_?nA%<>}ݟ)ao X&,K 8q9>7:Rק(cL%0,oA\wu?]r7o6Msttm\s@սVs]VZu]4Çkھ}.nAv"P܄YUUd\0g2%?{ B4Fo!DeF<)UY&T"{eE((t5B$yµ>ʘJtȄ3m nD @5~LM/Iqlc9k#N&d#n Ku=N,T L$ ٣RPq[*Mдc)ni%-Ct&&&zzzDjYV"!Q}?_|ƺ<[o{ fKKD6hx;N8155U:::_u\s 0EQtnܸ3Έ5:::>>JZZZ4Mkmm=z`~~R䂤+z/hp[15b`C}ޠzyvl:=We$QIhPH:u$t2E X0D5WI'b5L㜕fdiXFQ"0$ 8-G+DUdUQ 3)#yvvHL2$8 2OchD%͸puQ90MSJͮdD!k8!"u3tM;3Xo|{= vu]766|Vw7zo/|߾}TJ|ħ?n'qV,+NΊ𹚦MMMMOOo߾}ƍs> l,"{7͏L&#;]v!$L~8q"Nqׯ^]uuvvVU۶bB`G-zTKFv,H_kx *kF]$S9><-Swi{{{OGNy#j:n F*ETU |RWg2Y OD  9B͉q'9+AAQɔZ "0wK%e `oYfͩ*煦iDlU TD7P1*f<@`&>+*\#<"IR\>3El(y۶m{_exxxڵ4o}[\pxrRjkΝ;s9I9ف1U̎)M740[vuujАo<|p\>_̜8qsq˲8 I6lؐds=WӴJjkk;p Jŷ,KUI0{챁1%h~,N5ya󵋀XDe"Fm7Vև/M -eƲ-Ǐ4e} ”ãL&L,K!&AXi)!JQI @Ԙvđ8Fc$-,/s5&aꚬ`U=Ɯz)D!uB^<ڵJ9nh$J,{`kLLS rm{qV(#8%'0&jSp$)L~\L]9(<ѣ3zg}z/j@맦~5;; .aiիŸ A8׾n__OOm[.L xŧ֭[mjBpmw޹(jiii@R91V(哫6HxRFv777::(axONN>K;֭[(71 K3L1Մ̌)kھ<-eY.a #%?b&ZX8{2+\1P4sQߑ8HBΓi`! z]8;edFogg P*'{^b1q4n@07KCT, 'D*gVa09 H 4%v ovmgygSOr??Ao{ۮZ%ww>c###("%d2 7iiZuɧzo}k__K/T$'"djmmU%N1www_Yq+ \rI:>|8iرömA[J{{{V3MStM%N|k_T*o˽뮻+_Y555{nI >u41+BZT &͈(=y X-SY3tc-GȩbY @Ǭ7gvmՒW]~B#Tx$:-`zZ' 9Vg^:_u2VÊaLJ'g|F=ׯV*&AJSYbײ٬Cl͛,UGũj"㐸lE}ٖXd)BQ `k$[fsX5kÆ gy&cu{ݻEٲe clpp>%/K%I:q7߼sl6Ͼ}7qWEzw}w;v,1,zӛO|◿N6| oxC,AڪU{9۶:,бcbx޽{bׯomm?t:!4;;w^˲!0h7r-rСCuwwp _WozӛcCCC|^UՁ>qDSչ8x@p96Y$ ݅]7G}G?{sPUֹbAԝC@-㗦S C$y QȮ{RxaMC A,A`U;P9X(`qق:ck]\[V!+/Mg O=MJsRanNWގJتL4,W*G'NMKՒځDlj dOB&6OI:ӲCܞG_W{g?}CP.w.,W=sssW]u/~kמvi~)͛7'G?~\l}kb1Lrq6bVfq9r|>3>>8Ω*rg}zGZ6mڄڳg׾+r횦b10<ϛx22%M6(r\ooo&l"1g?~#m---|;|0 sDB{41:bQTm#݊sU,>Ç/"Bb"OV pv?7tm-0 Cu]~u]8Ν;ۗds07߿sOSQd}3*J\r\X>|SO=sرCOZq ~~Ь,` E=X"Ph'AH&p(|<7#~Gܚњ nؕJɄB\󼧞{a[֭od&}kA Qo2$leAj-]-iY#RixtV.3tmظQ7u}VΜI[qj 2x&X*PT0OnشYZ}o."<0Ƭ8^QŮ.Ё˻㎙|#gx7 {!z?M?o|#|>]wg("qN9s=ooE%TR)pgggPm[.[ZZD!u͚5R) ||psP(nƍW^/~QKzĉ??nxxX,:iӦEQnZvĉ7gqF.CW*?|[[P >쮮;wzWzEfD=yϗ#eIi]O* r3n_׷*ZX.*[o۰ybI8Tv٧gDVԲϔl'deM~]k@7 N$BO/@n/S>;׽g|~ITZuTY:z`Ԯ}ycc {{n|қհTUkn )y3Ss ]TPy~m0?ρgPj4+EAMN6===O?8B߽{w> )]?OCbBȑ#G&'' !]t$I~W,=f_ɮ FRٷo߯~+UUEٴVMLLZg_|SO'>iڞ={^}_wܡi /1kEu#k677755|`Æ }{''';;;x[ggo{O$8p`hhhݺu9Bd.kmmM6 S=#M.HԠ$4pV A};N2, hL Wqimr: & t@x46:؁2_`\>99JAӲƤ0ToK[6?gށ1''<sowcxw귷xW FOz@KUhZե$j,C) (RW6;:6џIxN0\|]X-c10! -ALFL-[,hKz`w}*|oE{듟e](ʙgN8! Dx;֬YC~|wu׶mv)T{i2-0, ?OZ[[O;{[;JJr"D{{{___oooEG~_+߿k׮l6%Ja822rw~K_rw_&9qÇoᆛoYu۶mۡCP>S u33@`3 lI)!FA d7~mvXO||,%9l#L͛7lۂB:;>zƩgo|ț?zil:C%;qt&pt"6*GH(I**6#74A ܑ!/DAv0tWO~3O?+| 7 u]\p^ve;{nYwkȑ#e]r%뿞׾|_o6+;AHN%d 64?Ȫ3-(vIō3m)]g~ĉT3?tۊHҙ0*cS`sfb5A0L_=iOΦ]vh&/Osֶj*?^,xLOLL&p}' ONN^Gd2i& ]XT H§>ae!#o#5^sſW)5pStغaRc1:45-"a;"h&(B,w*H t"f 5źpע$XD| Rʦt+֔L#kMˤ@DRnm͝z3cS]Ь2ڳc$ PQ6@X@2 LkY%7p÷V0e2 6=Yv"k.ςfqw^}|WB;묳844tq0]^nW2<<,Poo(ˮ5MAݔeY^xǏQKK˃>cǎ5k֘yĉ{ObZ0d2y @4u]0lrg}3<399(J\M7+P6 RhJFGGlB)=t肷 SN9ellRl۶ȑ#p6C|jTKpev" B"d2!L 0t $**sQ6 shDˆ,KPCW^TP  !s!R'Pa_5 :РDA3&Ak&aJGNLLNUk5m):bjlބjeJKL& kks,pȚa`vK@qd}R?f,O V:ǯ/~gŚWVoFT~Bpر^G+J|ӟІ &vՏgy/nkk;*eY[nO} t]߹s5k~\q+M@h~O9J266Z* `rL+=qIZZZDTeffFT*%b:ggCTxB)b1ɈO6~ӟ8j׮]6lVׯ/wBOvf/XjGbɭ74eSӐe!/!EjbE(hw.d]pZJ,8p#FFSЦ䌂`U``>5ުk񶴘 y r9+$q\VىT>Z_J܊wv2::#Ǎܪo2~vmpmDR(HTJ53/JZw,EYa`} y3vX\UZ~"H{\~(sssb^徾>۶ š5kz?X,vtt8p "x#ڂ/ #P\J<ėUNxN ASSvUU(9- u0> Bw6G} եl_Hi yMjdIzKW\24G5"Gc*oyV6nܸ(?vϢM&^~46== `('"}kҗ$/ᮋy[211zj*wPU 1|[[[\KK kyXڅS.ݻ?mv ܬH|~ia666e˖'Nnڴȑ#:88B:62y[PVXcpئ^ٖ˦x) QuMa K*DA9n̂D!rAZV-BLr@dQ:\A:pFh<ڻ썰3 e MUd,x6ĨT.['ZO(:Vt0?p*5+q݊i馪[[7>.c؊Kj .͑ bQĭqx=; X{뮼ʋ.?C=1niiٺuk˿g=55%bc| Y3Ump8@;v;3Ʈ*AmC j^>>JGGG7^~^xyWd27nܶm[Zݻw8BIRH)H *-JSSS¢g>?|^?#wvv3قN~]v͚53>>^./7& CЂX\V*-7xbq]X[0d$ h`תŬB-:ށeC> AMa] "DnX(Z<Ǐ H$&! :Q)3Scr& 1u bQ9H8[q\9d%kv (fR qwPu@q`L_ACJ _W[[[򖷈lOEw{mw}^xPgh^^q=~ ;ww=>>׾V"]zBrK,۶=::Jkcɤiv튢(Jj*}/|>/PA8֦O<{,5<v(Jl}WWW3=p]wll#$j_޳wlzr~ϧ hS4wu>xGT*s  (]/ eSW K>2CA1QZ\w^PEA`pklnx!B=|pP&dF\A!\+J%P:_KbahtLf> j 34Ž%k<)w5zخri򗿼馛N9Q':t|緿{Kħa( dap"} DB U> ygzRT(ri333my˲?>;;JA N:8p!5kh[[Pa=sgy5kq===W\q(vۗn~xw^qqdY޲eKggDuСM 7{UPsZuqy Z |## H[L~+WXx!Hr@#mi7JH*դDJ]BoW{]-*2tU:pZ53VU:Δ*0YT]iVi&QyQ U#ө<TYs2怀?}1X ?ǗD)W˲Ćp-<3W䙈G?}sg?eZJd donvs=w˖-G9z駟W[*6 cթTR9rdƍC=tww.Zzu&k׮>wyW(B Jd2HT*UUSԁcӎ㌍tci\g<XH;\,dH+r9orX5mEd{,P*e.ݠ^//W ƨ\.7 SjZ6Sy8}3oXQaPfJJ Bs6!\R۴D:ֺfM~fS O]tKPBrLca7ةuq"8NSd/#6ϒy9mqn /_{ 9真G;1)]tѽO?Yg͛S+LBzj:11׼ƲGvuuMNN}1%ZZZR0~;;;O?iӦCڵkǎ{뮹BHR4\.o}{\.fAs)B!$U&sꩧ;v󼡡\+ȣ a5K^k @#֊Y):n/\oA*v@--,VSTM jGFGF::[-+D~*W*N5!&22*ա,R^sV:A3XI}BMOOfԧnz:-)ш;۶m{ӛ o|_/}K_W^T_!6jeY"P<><<,KSN:%ѱ={hvQƘ@v| _@RCyB[(hڵKHE0DYZ~a20[: y]FMl`rM4V^GV+n Г%5W !Sq"Qǡ2ca-Vt x2 #"KaBt]"{!@ 40Ǯׄj#k:dݑHga062zؑ՛6mؼ%׭Iu*Z*1ē  |PAb2АF絞z+^ǰZס9>]>upasԼ"}1vӳe˖\r%l^ -VL&f x'+7}|駟|kFhLwOkBG}tzz:LYgmoozJN8aF.fBeppu] 8c}cۺuÇ3Y`[[[EI J]uUbQD_\O&ׯ߳gѣGm600`Y;wrtxcْT ! ]3D$͈)V5*j(9~bGq$.R GA^Yo=a"+AsӳJ+ڴ^xڸ1͸gAF"eTGQ[JVO2ꌌt]s[:z3ɴFAh؞kIZ1*JQRH`:3{tDӽJ4u\M1놭+8(:xe]g?$Pps==9fmFI+!@<$D<Lp6c6H I(Jڜ;ctՕowέޙHƋ9 No[\\QZ7Y9sg_[[3~```{/d2KXu^[ID9|8ͦ6M^;e\Xӑ)lݺU:to6q$؉1622yBu{Mԕ؎heeEB䧦Zf6!MLq%JoB:Mtb6>)—_|ȱsYAqDtj|0  V!`C(aC霪TMB~ @|/  wa/,{J$MG=(2@F"Ӭ5~g\g~’hlܰifD9q_ʫPn#8V.?pj|ry,gWv3̡Czɟ>#G?џٟݿ߿m6-{?-/////]kIzc[< UU]^^(ݻwZ- x}]GGGeBqعs_YYlR}b%vF5iQ*ÊT7J =uv-!JK3L8NJ I`SQSXf]񍻧@XET;jGq!_T\^\+m ={ع5W27cB>sWj1WtdANI[g[u>]gH(˧U͛vӑj?='C=Y~j5Џ{=ܕDddfNTHn OPN߿̯%??TTs3h ۈccSc?g!8I*}vaKAПhwڭf5 |UXV;4=CM)R^镩.Ea i|#@2u]-IHE x&_Jeqnzq= 0:Q'D8[&Cq7P [G ;53ySDVxbsyb|٬2k* )L▋iLzѠ5΢1+atq2ܑK9zzuL(-V6CBh?7v@řہ/RU[Hj2C) OT6SJZ'v ׋3W۷^طog<6mYӴ^xajjj||G}_(zÕ5//\υ]rYa__eMNNڵѣ[f)cYV% bXTc˒3:::>>.=fRY^^VZmtt}##cǎB WӧMӜݹs'|cSQzpA&м Rylc_}kO'QAmXo%&cR)m{+Q.AZnۺ!Lc;/AjP`!"Xw="2DԴ,I=Y輌vVV-Nգ-N[|`Ֆ1% &ۑvv<v(IDe*HEDI [:^{bM;w:bKūG+y}:`Gy䓟%oV|_XCsk6{% ɶiJ%o۶g-{}۶m(2%X[[[ZZ lI?͛7olSSS&{:_*Ν3 oɓIFK0<|˯ ZH($sv 0x^z駿F %_źX{WWX%+ ?5iˋW9` ThرAe i9]ySMU.7q?*sbzs$B!M7N )%J/RIoK%)v@ (f<R\LSSiֲt*EDBO6L% 82K'wx=7`yi\mFI+]Ll?s?f%k%r9)s뭷AS<eso۶mxxz‚i)v…ٕsyЈo.--Z\CDQtiƘ\*۷Jl6@ӧ8=ufivv~BĻoH**#fϽ׶mQ!R%Lbw`дp9SȄQB|uN$,bB$Qb__c8><&*Hs qJ?c uiW&ʆ3qídH@ܑq Q$# ԴqʩMGgN: P;80]jUoZu^ s]?}NR Dgg??`UTm۞rZfY֭[_|Çڵ4ѣv[''']םmz}ttqz.%fF!aY\*R^8|p;{‚.SM&&&Zwլ׃ B{ T9a3zd &{赃٬a[2Hh }}={w V00aQsDm8÷v'U(BX$ RY,2J['Օa&!@zymrvEB=pztޙ/FSˉB,ۚtCnt.#À8 37 LsL$D/.^DEJNI#0C䁁7i?7|󛳞m{dddyyy|||۶mqR-I{``/f)5\E۷ow]nKu7i[VtEp]`NҒ_8 *d__HB7f?6<:jT_^^=ŵg@oS Y T:G(YX\X\^YZ\^9yMUfu5o%fH՝W^=@*SM ɳvSX兂NMIPm`KH,HsR>6e@\5bX6na$xRPsHq9w9wB#X|'Y ёTBNLJэ0Y ~{3uG~'y䑟77K]!kkkLf~~=y!Md||\RG(ϗJ9/_u][RP;Nݖ%رCΜ9冇 \g7_;l6/L]=z4ɖ3{U@7KH&[;ݦZyN5jZ0iqDզ [m`gzrⅾRxdW^>}WB*1 uh}#Q&VxcPքNP7 _v$^ޓU^IA$z1 w: I' DIANN?UC?ȇ?BI5H_y]'w7 ?_|QCH7 zeO|??cкNG I-%˲l?Ӌi F-[dn/sssa9sP(E۶HJmf9۵kW$۷o.R!0===::w^dX,J.F/ouM~HaX%f)4QT50h5DZ^q?zd9mCc!L8Bi"8aРB( t .}>х r O@6DlL}"DVCWF&jv-]k4{ U3":at]J5;g wX$T{i`afz~7O>Ul+$Z1v]E/[-۶կ~unnG9x$'y{!???\ <}Ю]]w۶]TdvffƲv-NsSJ^fgg$t`mF>o6 #83=@"t {'qg}UӴfi8Vu=I!=ǘ^2 n0|HqGI'{i-;l9## S%!Vi%X ã#;55u\^Y h $F2C@d\hoK{Bcj]% ٢boONj/#bl_IXv=1Wa.Zz4@& يNXLl)Xnw~˯`M:r2vox%IbƟ韾}ȯjM7\ߔ>{}ǟ|ɟY`)ova855ecٶma=SJEsޓ\\\/R _l\.KIFQ,UU=ydRq]wiiW^‡󌱻[-zg|X=/*Uc&i9M?BIcN;8K(chjݣUWZ "jYypZu1Q *#zPXmCRa"_ز}/?vˌpߗ$ 8fˣ sե0haiwNȘfdEJMa:jΝe/Wʆ:366699)GFF*iv0zf!(5;vHu8[dQ( X\\ ;l6wSO=%d(ӡG $.!H^?p`y6ۦ%y'7| QARJ;Po$D,+@J41;7ArVA-0BNōs,,Anl:>yowS v (uLUQCeT-_Y& ޳*p/NDEBi%VPБÇ:T;v *r=M_Ϟ=O|w~z=M_|~^~~W_ݲe˕(27:$)JFöK O#GNjbV+[n}?ڻwd 7Ni&]=ϫT* bq\,2ƸZNNNڶ$IӑGi21Raض]nj*gΜk{5%ڣ 'N|ԧ>%J~wJ7cRc ÐN'ICmy)$ Vs>;;+bB9"& nylT*aAV{giSSSRNbsv:g8=䓧NNNNB;_SRyc(d H a~PaXq4M7(H*hjqEtC"U" "z ޚJ/KnqO{E zK:1D"뀬p $~p:Tu% j8黇KO'd&o6}zfk,k 1$ j֠LK c$jj?h9N+  X0Z `@.C$}bP0_&L|Sbot#M{Tڋ'?0TAāM,4m6*ʚm۶%  t=jO[!bZW&9]n #z57Q3@ lˮ:7m]#š/$4Jl@0 3ֹ$hxNf!.$ s' [*/ 1 T3L?L&kvauڑj<'0&(N T W1O~78ޠ 7-C_o]/S^ZuСïŠa8FoeΝ[m֛f?Hl`򦗕~7ܹq䅄N35S PHq-+[뺶BG!XlU*}ID4B~S"Y8 1v AbnZ|;ANJԉt[@Cs|Fz|Qݺ*ӻU*^{uūn=$a|Wů.QpA\ׅ7ګ޺uӝo㾷 "Y1/)_ R7zӃsg\|:%QdTTX7lޣdn`Y t"Gj&cS3LY$qG4Dy2@8%5bީu,Nl L ސ=w:M?C8uS8K8f(bQ6P&QHpo0{Bjڮ];ҝ熶E@OPzr!1%kU5=?4f PLTEu[qGN8yԩw {M)j / hOww/ t^ 7:5$AaM,v ӊ"` iXBŘ[1g,@ 2S/;$N`72ɆZNFɡ*b #a'J/hB  \ۛk$3??jկڡSNgL&3:2Vawܹ?RoƦ]IV+\WLwM]Ĵï?j?kjm @3X9ۗG+yDkg_\|湗MN}{?p]waє@^6dXEϩs`%{^pB?d/vri0caPQ1D 1N1`"L@n؅`JBO81D Pzׁ̀ABE6@E8p ]c +I 4AjX*/o}4G~ʳ<F뚖(IEFyvƲ_o{ϣS$7P!:.eS7LPhq1׾g{뮻vog,?f''g&֚@޽opR4T4ȋ&_<1S'N~|1FbSb; =z@bwNB9 y0J)8$mx  _ `sX>}6>n uyhdL*4!ET37$׾yӦ'_Nӟ Ƣv]*JxŰ: 2W.LMO3v?wM=7pv EpY wC~O"3]{Ĉ覩iMjSg1{mD+~F*_z_ʴ|wb-Kd_DkGƢ T/1~F a(h+G((F!O$ H2$e P# a[hJ;ɎOߔhTm[k*c逩Z3h0TeunShף?vl~v' YqT$(,UU j/'~_x]w?Ѓz˛u($L AHHboŎA&٧zf~n ]o}Ͼ খ B4+%M59@N8WÕw?~旿͛V0I"HK%I(]+ٌ| \ է1 zU  Kf2cFE\ C _6]\ XDJbAU3(逄mZKjE3x`延۟uÚ>;ysn9" VD24['(v_m[aN}zf ?x/LVƮbP2S36ҾE[l҂5U׊:}qqUU8T3 Ƅl(qpa"Ju[91ojCGݓ2ri:8<@>׼zL.cR1!V"H !!*ϥ}Ll!`hah*;BITAЄR- L#8XB#V"6Ǡ+Bpekpع'O@F%DJA9k"b*#0ʢX;GQQhG~ԷIXrS%WYi|1h#y*4ޗ@M c ^5c0`+(48|Phu4s-uYPt.~5bCQүK.# Ke 1 g1X1 APJTGqdX18R"R)W.X{edq_2!E(, "jzcAcl ꠁjW9Z5qۆN c-r !V)ؖP3NbQBɢLX`)4ϜlGq5nUKj5VQ RUv!4Mi,01nRBUd(PEU9d*DOSL 'aaΊ=$0鸸_^ 6ΞCv:}R$Y{k*8J;h]!~BW .; @࿀n V,Qm2<4ˆ HTV"vP ^i"M%AaN;a‘!u 'Ah_p6-ĕ߉ ^!_UBUJY-/cιI)U5y؆l6|u8!iE,b Eu۞ҘHʮ1AH3LbcFa9LSLBID n|cfT5˙zӥоkawdn KM7EzX;D EX4T&P5]&²YUUM).EfP:ܶn@\B8a 1 뮉D9& <_??) U??o|&00&Pak*Uj܌+qؗz9(†B9$ 5`Sw3 QRoJƲm][r8rT @8"TrQރY7㵵U4Ca(@%S$psL#Cjni{}\Փ0}?|ldKF5}mmo}1lXW_D h@N ׌vXZ\xgk5wmM o@# f!!:DDP vmsH2@_7,:cϢM'$LqViZمx{ nDa+ -ٖoWRZc C+W2j sAFѹIr\8e|bb2@T{eyz :P(D͕pnS!WY*,)bwYwͿ-`eRVbA" dB8bD}]@t',L$jKEufz͉$ۥm{+}eB\Ý\91;HiU mˣt,C{_^8ftxQH2T$dAI~JX*'4{QV,G1rI<6XW1Zy`X9kkEmkG.,eG*^Ȝ(q"s|ʗ풕ke., _յIbIp@=X[2 }̽!xLY g4ᑑ\.0xff`Pȴ]X[(fg@_$! ]莝ɬФ7%n(@b U  ̨Bdv%a$tLI @!!4caե־~="d _}~sW^6[HW]+oj'_zs{n'|"j0F؞U_bM(h 5esm;v|eӀ0K”lr\`."Cn,}FvTLe]W%)Icjۭ7 V\+PB/ekwsUPkM-aƒvq'mSJ{CD5uza¡ft5ɕ,Ūvó'޳g[;ԩgleႎR'=^nE4@ ^BIC1S9s\ S8䮗ıreO}_f {>?0}||@6`?ÿ 0,LG ߪ(BG% a$b N+(ʞ}{ʸmHaUm*Q (ZAcjp:" QO < ([FVd91q!p&JR߭5@m -425mG;\'[Yc[83x`xK;u_oшOR?{J&4sva)V=~ra*mb3>O䳚A]ėv|vF a q(h^A+~V-]}=e}^2{$ [vO疜#/Ӎڮ©1Ca\8Л(-A#3XFCnm۱#S_nN[{lMSu(J 2DQJM?Ab.U2MH5 Su`VYЕ} -q% c#p684| @:}nP܋{* &JIWvoWi~ 695\l>OѵU|Q+[(F|y`՛rHMIx.ܝ)7pjzZ׺ e-zNyy ?m/DÑsOVKtU. 9OMiL[i7ł9\Zkţk'5wnМ629qnJ10DKP_I>=BGR^R xԓ C]_p\p몶T 0yg!BrbGPQ@y4܏K=c["^P~[inHJP.LizY8i{˸ZZ[ə*֠nv<S3svyxIE4E -Mr9yةyЃ^v}+W sA W}8w1N7drCד/Ҹm>PdJ`DV*]1# <;ω;Qh.wvz٪yGseQ 3竷,߲#{_:'7تZ1 PqB?,?_a (f*TEj"PjoV4M+Jf3gzDAD18``2AP,%]@O8uKIJ 0TC?PXմ+QvzD*[ەwQ蟂 /jqkYCUEwą03\ >4whW3żd,bAhXYQrDF'$DWBdZ"Ao x05_%,Rsz_򱩙^W44UC_x[ e+z:-'n PAtւm՚Ǐg{"@(+ }X>|8lC׈պ9[!5J͓[w|{nr`x+k}m& )TE{AMy-*oO+V:|lYvWd  ~~3?S%#"E#Brj0K 0꫙@:q!l@Gg*b~uxh虗'IS#x=%6X%!4EG%Jbi9z!VGD.!e<(?UĬl{3&.FxHT?GnE]ÅMe_ݗeP8 zں5#_$DnjX1u@NgJng K, $N.C;/X&o4D0.8hO 6>afvO?\W%%,шZ`I;~ji\vUmy |?sznd`/,g]Kx리OVm."f6`DT + F <<4C y0h)e(p4lR@v.OtM2s!gU5m \ףqglLU[zAM.VgkH>ɄtRd+{(pZ@vfkY+o8YžoB{ڊ&b hmu1CD(Fe嚄=Xs.u4Z#QHe󉣏wKꀪIhE@TH'(Z[ +SYŊSrg/GƌW-uEL.ܴexމzTQM7<Sv㋶f""dY0p56(v#GlKo\IVDXI:/;!Ťg,JfںeAVyV8*)+~Ӭgmٹx7֔ 'Q !P#. pWAz6@\Ԋ㡂ΖZ0$MW,f秇Gfu*W 0,^ @#`HcFUU깈,I<NJƎB<4tr˖&W^hkCX@喽CŒEJӖ|(9)&'k^mH il~o>xr: f[ClK4T,8qךR~d&Qt\/jۻ08`$ϭ+15P:pu86^Eλn)H|-A^/O9͹ )PSGz䰯Vs4U!CGi PNV?T4mc3ھZY@JD~ϭy`=՗v8}Ab\#Axi.4GUB@1ZvpY8 c%$PBSHn95J)B|4F EJm \D薱[ǚ^uXВr:NBfq256?Ip6h}7%AR4 R]^\_߼3UѹV,uayT/PDb>,2LX;M58>voޞF K˓bTa z܅@!:eT[%%w(MQh#>x_TO6mCgfRdr:s^k6}E{1јC*E~LÊB- Z(Ac8Z)etn~r=R Ue۷wq~ֲ,C#a32O(2JG_)f @ˆN1$ӨkÕ7No\lǥr4:-:8{vfyȠo2yae/OSt[ yᮙa! bpEF6En&n}!}x,_Mt? \>+J`Ut:D`=@h*u-g̘,1) P^UjPЧ[ ,g;L2|n\E-:5DS3￳U}O~S? !Jg󺢳ZC,Gq6QMuQU7hA/ج^P0 + <e׽0Vmy'Bt,U(^W/+ms%Jr_T,./.v8:h[rL0bhUo)JKr:є4/|/;k_XVR+ji QDeMJtTKvF5BupnwTβfi(3nlj8ْ-q}^R^&WZxF]ϢAFڣhQ C~~3GO?bg0d74ؾ]6eWF3rJ̦CLNEz)Lbx! ۚ3De ;?ч 5RozŗΖJ333U72Љ?H(si6J@82,}l@ 44k|]vBg`c_ `A &ր<`]8Sl6m|Μ! \4i;1DU 7ɝ*mq- _7!4܈5UAM?.qz$3lugaͼ[N7:4L"3['P)bl_wD Un R҄XIik )wJ)UF3)͑؎+,!3u Y.w\ۙ(Ϗqn׭WziQe= N @#e˿O/W[27cjyoVFņU罱̑hÊIH/hG#+-:X٭CCb(ҿ{)*.țKVʎ;qԝ<}d6koݹ}g~DvJt&Qu@+p+w|Vj- (M@cjAWyKz˓Ԝ\(DHy%8?WZEa&Kń۷ۆWfqP G2pa9˓%Uϫq:+qLL#P@8r-z'NapJ7^ẫm@{X^h6fgN>7o61z.·(eQ@e*ݑW,W*Q]߫/.(JVfb1al *)B!TR [h=eä4 tVUb﫠@KY:̢p`x󘡪<N$$otMMm!cShQd8zEXƪX?(%J\}ܠw+"8[ v !Zm'_;~l> n6ł:+udV@hi;oM( ݣ=tᓝF Y444[Nߚ UP_{a 0$A"U[vn-41n~G'g~o>k60j8Ί TY0۝a2R6+G,y6s뙠swut d~ἘPy$Ux,^8@md RF?đ`ifJf|('J.cXT qP^DmY*K*^+tuل,䔩j>UqlgW-'_9]Ckwi| N( Lc`r-Q[aܙvС]u'`d%DsptYB?_GX[W9SXBܩ͂\c0ۻ Zƶ,=F*K>I>E,#tW0Ͻ^xN҈Gԃ39Q\+ NO-f  NUV_@T6\ٖ0 3;HW9]. VfZORyjЏ<닿#Gv ZH$ xoBLsռ6z"$%u-)ƚ+=>wԷhHݿtaˆl2h'wtd +lBuhqh^2;U"0l7Bg856Z-;|bdêF{me>P*d zƃ®uҙ/ېud@7=`!5S -"VZ~-/zBTs\=f1G*ee6G^C=2B[+1zo#'^7ޜ„sA<6~g?[I~&W@ k 4"ԗs䳙D!F'ډ l}bvBtjuVl,-U;Ɇ-cmjzrv-5@AHh"oCOP"ljq/~xA%C!"0#G~]nZ_o|ݜe_HA%_(n W[+ʫJih8|/,J$\}"=<$ERtA ,1gU*$%WqLN&d& @4@SUʃfqH0A,ڻj 9R mTB9E& QQ յ#3Ӊ-vN;^Q5R04T@{gM"H .B%bǥ[^P=(m$HC 3M'~K';jFMP0y4SEzukC2pc.HĠRlRnq(\z0 l @ onZ4qSWIU`^͍n2jЇH LylQD]9yܩʕ(c>yc1r䊖8@V?F U9ON[Y6}ù;(V1䋣cQ|!Lytd+}-cnݚ mcc?HǫOQTZ@ =WO-Ο-jyUD{u!v@yE!Fz{z7 U+yIW^~Hj"Ll6}^<76@dD:\mQlf3"řR:mUKg.Cؓ֐`^@4Ŋq~Q8~M :^8h@Yq<4:R6@ tft-{zi܂ߔ$䗾S]':PJ|)" wUj-+-& "jUS8L|=7믏 a :ߚZkZh o(Z:躑e?Z{B-7Pc'ɳmLI&CABlkB)ZW Pؙ3:beZ?3^yC+kcӚ9,Pm iP͗rkiLHS5"VNkP1!'_>wdb ?T(8;}yM n / * ĩf-[MljřO}+1޹㹌*޺wK oHJ `CUGǵ3_VQBG@d MF9NɄ km\clZCƞ!G=#p8w)mk m8@Ա<4C\& \ g鈀5;VΎ=u]tC_X^{򅣓g\^Mc[QV/i=1aIk>q|?rY@Jx⹖i qD^WN x)pWV[ çwmiЖ>JQ6lAJ sW0P{F qt Bd|.+7 Aez6ojɉye{_WIw/x#_>R]B$ DG$'J WglN5Lؗ4FT5|"xkS *!q{qC(CyF}S4(f;3gz~` Itô쏰i41`jvPJ83ra{ϾvN>66kϮÇ!x_O`M;k˗f4]<7Iﻄ0c]_, n9wjóܲ,@ UP+&xV`p(uEr"27}/7hM=~vɍH\i8/ Q SM4@EqQ +xMA9;N锱 o*4MՅU3%7H*d??ytW|~BBqȨ`NQoIyvp[kSjqCgC(nzG_92s߭@侵(#:rZK',/9 &Ͷ҈g MAbZ9yEFƹ2bu$oMp ]xN/˫PtY`@ȥ8esl?籨6FVPDiMT-a9s]-B, oJCn8}/ܥ}}鴖'~̫%aFO`9QmȋFTug-894:i?}U0ruӪQ*({šiY1GOϐc5fdc40١+4ݶm۟'v kIپF !d 1d҃/I tG`HQ$~}Q#E^JZӊx.{n 7qٿfM* ۅhFr7+}PWE Cf0e?y k *!^1Zr@3őjgЋJ $q5>f4ض0rT>EV"h] e*Υ*OrwI܄H.8B[(5x$͊f R97!&=UMFlಜA4Ǿe p .xk]~U.MjF6SFux-+ Q i Ro D5)< v!l&;ثg]7=1G<ϝ =UZ^s3AQeVFuӰ2<@[uߵXïTZhۅTcpD@TryAL;=Em8UǠ,YK"kHY)O*]Mq'%%[& HU/]GM=|ǝwR DI'vx=U5M3=(+{mS(Հ\E(X:Ьj7viyڬ;YfNT=+D)j&#iU }S-:e^w?짟>|Ӷvm675MyR5-=MLE^i1"^`/%0^9(-|)}-V /kϙPEi{BG@!@I{~p*Pf\(3qq(A'Ο_ݼeK/rnK{^ݙM,[u%I4LpSkϵ+C /zmXQKvُoB(V!:f/pּ*zUæʅBHc?4MEQaEa8-!Y %J߇d bImM7qFc"^5U͞ YaDYU8ن #U!}Õ5~%x5 vd^fؐE@MQS3ËGD#٘)^$g>+&|$TD5s:{ LE7T}EOj?z4.R=ꁷN M39ݴ ygIw5iS67͠NmwM`nhA"Cx 6IP0:/I&4fPPm#DLu(S1Y,je8Aర DNB VN&|[s(yKLbw +i:Gb{$( !kHsBc^> 8{ɭp . p:8^SH_T@)TPu# 6ޚ=o}xE:y(uJ0eږe^G o$IFFGw|>wmCipuNͰJD^J+fRnf/ (|HcEII,&fJ'U_A\Ĵ_R1QD%Ly]@A%* `ԞؾfGgF)"IoҮBB "д'T:󘱈sPH_HN??OJBOI0:oMOzSZ ,\}+;)Qys%}B{]{\8?yԩg}駟wL+ @bv!89šo0p0i'TduX+0Q Gq#F)J4=i@&hBzDˡ'kH ;Lu 2 .#U|#%[}=,0&ы)LR9~T8i?c8'4d,0'Qz A|.9e  3.18Sھ/UNDZmZJV[:"ImgҬ9˜!Cf~l=\W[n۲u{/>iãET0|iFw4߉žPq,t Ї^ 8zfR# JTi.̔FcQKLX ҈[JPU5SԷ}mBPa 4>D9Bik-̳"#qbn@DRJj9 Jnٝ3)̹1Mw")Q2#,=jR.JȂsq]QX*x^ 6=g^zj+&P#%0oݕ/E '<rBll۾_}{'@a5!#Z!)\VAuq-U=RS& g)R|)W;DKvۑ#H㎮>c(8z7)&/%ġ% fei8;!cǮf3#"QJu] ! 1Ba%,BQA~& jf\r0M;G/*Ee0)MYـ9jGZi&@ДB/a C$#eE)ԹS;6mFY? ,AZTk(B\6j*4) eBy˃#_NM4uBW1PNtPGSUUj|O(!̖d:FQy^E`*wI/ou0 B6JpW/$'o < (4M"[A T#~5G2}4aMq)[ ]':1A_ i [\˹ZOU-5 <&Vz+-X]zz4 y ʂ1f[J,׬_o3$7p97䔂ҧ1a(Jc۶-oT4-HҪ dd#/@P Xo"Oa,p8g65$-)P*t}Db_q=u$qyPVa \z'['$WR.wuޏ%kZ FAI D|>HB:j[-,=QQмjÅ&ޕRp4u]]9Q d7ey^R,?HB䌗XNh(UXZ2 #9mۖ)O0 !gd* YzhN:(_Q~qy86zkw6+NJۚqw|L( z[P'HZ(n:\;2; &$yb$"k ɳk_HR_Rd`IO߱[$Вft`ܬN{ > RKEU]˯LTT".~Ȗe T.yr"ξ\HQbU"T{ò,u\.'i}T92nI4޼M Ji- 90^UTPQr2eh$dɄ[xAeX$z6V7=ĥ $zji(yy~3񗖘ag(!KgGG56\?drcPxrSm߸}nEL?6\~jytĶM f`'a% ߌ!BCV~Ro/& )jja*M.HQ( hmlp5֚&Kv hْ!:Үy,$By2ԙ5L]̓g{NȻG#B!Ibjo' )uBߴAl"J #FPR a S dbzy  /k˩٫Grz MX P#WHo3^:!Ӏ"8e#7~y,Gɼx@U{LӔGt]mRB1cVQY /1it|9&V7>cVݙǑjsvpYZ!5kدmYPqդEpøVg4쳧3 ֝"3+CRN!7W[rWZ JWy .c^Brk@ 0SP*g 䍚eYlȘG.0a(GE XBGI"o鸬ضfsy0(҈[?”ЩNn:W|YemxuՏ,X2jĉfc-qsg%ݳC2́&:E TL@+b/:ɟq+N\DAP2t Qi W'HϨǷnVTY%'%Ykȣ@"u]쇇kfئWY1 CA$M;[@kK y4{45]C~сB_>Rnc.ۭ~Dg,"C2U Ǜ!1vA| ӪYg?wf6\+L'R_0~\C<"i-s.tط W>jb#{Զ(-,dN 2F,$5v9|ߗ }ߗ<$eu!\e6ܛrˇ2+AfN41lʮ\/5u}}8$Y FQ+3`@( iDgY[-seNi>YGԆ)Lɲl ˧>;ՃOm;n4n l/y_SkMCg2m h||B6R;Zj `F 8;P FXHN>{@HnrTrk[\וg\ww|sl/r}ו|!N,_ Vγ]ȱvv#Qވqv9-C o^3Z縉F3_ږvƑԹˋ;*O-n 6UF\);35js9ЇFӌ.aC70'!!G욿AE#S9S%Asqq!{q&hަ$I/+<ϓ@ z1U' <^2WhYB$>C/]x8 Ō峖t/\3Y&RE3id5[Z\ͺ_IeͿ΍UA|wgGW޶6w5L5f3S2XW FyS"l 221P%HQP ~|sM$I ,#Ja=X2ad۫,9{^Sޭ,|z^*"eP)]H7kOi6Rv|/qTqmHQGS&_͆=h광%'/1`id\Y-:;Y83rwXi6 pE!|C&B-E (Ao>傜zȾV { j\m\PtcK.Hp }C+D49z ^+I)(2.t[-b+ylk&!]#-IWU56T2Z(u]("B7#Du5w,]vh7PAa8_Bs|O2i)=:q;YuLҷγ` %!S#:QRuLtp&].ޕ-3Y7PQK(ï8TBʷlIx)Ǘ Wy\i A73őཬR-htsc=.W%ܕP};d|/K@#rV$MQ5О \Q2(=!e BȲ^wȂlA'Xp*Gї wo.+mD0$1I;0*ʮ'v;/ eL-_zF}0j̓y9h17~-{ #*\'|YmÝ`HT=&^ԯ:OHB1}O?Jo2 Oy'Ѱ:{2;/ ܑ;q(+3 Ku.T5FsڕSGF5&_@7z^f,U ^N# Ur֮b[V-'x lx44O`6Olq$SXbCgV `1)8l$%i$`b}s~o"p&JRRu q a ["BHhƨn- Y>.k2eYsL" An= Y!aN"IʃBbKw:Ƙleq-KQr ɀJv$?Z99#Uʷnb9oL-E*6Z+q 0M6c^ؑ~7^'Z}3W0ŖfdjT'j>d h[Ċ^G[x(Gޞ93|y'&;g@2?`Eإ_چ[I|6k^ZnD1,!./_ g襤rS_ܗ5y(^mTeYdeuQJ" ȣq9{e_=PQ i@,N֬-_>nv{Λ_뚊!O19Wwr|CǓxX _GwM[1n!شP ]u"hV~xhYEOR2R!:k c[J,B\eā]\ئjՉRek]}H$ĵlJC@rI'fmoW,Մ.8nw\7#F*P7r I d|*ޤ;{JSpNSY.??ׇl̽9Z쭃?y3dӡɣ06p}A6Jen-X^2l09JNz)ZmO ް!=+ QkMn)os 8xmO d{Kz9lx o}YM2LEZZ4rZ焀`&"bP<3ҾRj۶%GtGD^d@!Jp;Ȋ!VWTk;аQ(gVtxuodNc UcRgboZYk3ZԌi4Vcj%x%e}6郑?KQ=9푩J=Q|.sfj+;U1Dljvd29SnõGX ɒ{dK0 v\$.OXaq^5:ڪi;+ƥ~Wȵ׫Ȉ,G?EZaPDRvZ;)X! OkܶQ{]<gbsJs>q zlDƨpZ3 }}UX+w*iB+a;qu \̍m:{kʎͅ8\ tK=|6m;e2˲俲)x''ܤ| pj6aRs#cJ@S"zmӴ fSO|T.Ndlq6amysD&O f_ c8Nr:*Û%zPkN(;2 ðl‰$cB50R>wPӓ>u~)pm[-dQgah=GCMB/.JE6e9; K]gy\Zr3z>;^$A⊡2d'l'X}& af+LP~$lpa5 KZEEd9^ݤ8/%jkޑ R"@ 9~NbfT}DEף '*'INk5F'O 3sCdd:UOFn4X7ILC0 y& żWՁXOP֊QYTJ9OrD% J , ߇.(P!8)otE5XںaTǘd^Q'" rU*ˆe,NL BJ_zCVy4_gv,4Zk%1j{N{V9lg[Ph!yT"2V.oܘ\èUmհ/mkVQ7x8Vi2gWrԷܙ7CTI[2GҥFL*Kmo;>uf\>6]\dUQnaH8P",ȞT] ёqcv5~A^aL, Maa}1*Pv> d%+&EQӑhfc% /[.tZ:Ѩ*aWs' fn/VZU3QvN{4vbsK&U믬ita:h}iշOxCkBŭDt,&6^Z/Vw>]w6GjR|s^](S:#k]/㔥wJ,A,,Ic1! e&IDmW^̤]2:<55醷"HP5x'JD3&Y^ܛIjX][ʙwئ!1W=ʕ;7|K__x*MF A^.@r/~Y}%c\Xz.If!dW:KKd* !6قX~D nyKK@5`t{瀮20)!M4d.#fGc/܎*rZ+m;n;6~n6/U;P?WEi+ᶭc.[yuo{ەO$v`ͤ滋ӂ/MU%d$9M-r:t7#UՑ9g.0mxg#Q]ЦJG#|׽`o.{~h,JQYWAG;0ܿ:.gi[+E su yΞuԻLg?Nk^Oz} -- O֊VPZk :_/de/5G<ԢxSwxtIgN&ۙ9~:[k'sfhQAcrīc|eJ -r]_oHr71Zg[=; {ښv:LݽTq#& "8zl1(#`kl⏷={6z؛?u;~:D {S(δzWQ, n-|aw@?Os4xKCAkfOچSUUe(ʺ5 ǁ d7Oi 2 a:f0:"xv .~oHLp:[3{y=E3vg>1~6MƗ^y}0,la,LηU\;jO( Ʃ*;O[oO,v{q4=}k7 a=KXH6]o1q A=)BE0VKvc ˺.JJ}k6-^={5197 6Bڔa|km?up4^w?43_//Ũ+h/ݨf[ϓ&Gje>}>T:cn(q6۲*m>s$*qZU"^/QG:REܻWr{Q++eyH<[}x3rJGzM)^~}x^ߘ|'>8]^ykwlkSb .;NoG?sN'[7}fpq{gՉ:c2 }t7w|otr:2NDhCgϏ WTyPͦ3Rs/j'rIcTDKR2NϞJ߾|ƙYj9]ܾw78zkaA7 snqTUtNVa Ck;Iz~>{meޫo/;Z+ 78KɠuX_Ct6;$"8%{7g>zބNb쯶[ؙ0RQ?ef4G.qYN$dv{B*[R6ۋ'_yn޻ O@m?90uaF TC9 (uZ+ٍ6~tMW_ظ((FuL`>u-7|cA(reGcQa)Ϯ_7/nwx(G+Go>E;q㶔q6&:QƊ}b;?v~ή٧ϔ+٘̔gۣ 'L*`ݬ} >hB2LYF"L9dG7n_\_ܝ ?ؾwSZTR˪N}J3$I ?(p c|U:g/BgOO6ֆYn;k(]٥{{]B~nQg'[5*n o-&ZV;Jj,>М.fplaF Ȥ;Zl_8}WNpCM KX@q!*wLo[?lΌb~J7s.PPf14@{="0ZРDEaWebά(ୣ>WWɢ4afA?pkQ/577x8s0>zErq` -x\0Wm^V\([++R{=ىDMF$r/fages>;ݽ` Q#!lPsyikf;ҧ8!>|w{4}w[vtU/Q~D7>MӰÙ@-kc ',bQՃ.:0᮶6NjDմtđ38]M%b 1srLяzarq;#B0pĦ|VBG`᝹! qMZWG~EvYEUy[w"ܓ7[2l@ 1Q>Ҥ5s1OTx|߉/F '~=0^C0bCZvݾwg?eY6=V:VP}PbuHqU^eQme!BTմƪL Q;ry|7u,TgX"HHeGGnS5n͋%P#\i ~ݻM_nGʶx|N96Բ= kւ̴=VBIO|6r?L)񮙂?(Z+ 1/\ݵQi2}1x8?̛_7f4C*_e o0I|s Ţ[(<ƈ0:gK)^<; pC5e*$EvQ7ݲzX?(m;t׳l_y 2Tjf4Jg4g(vK 3wfb$N??}v\N&_to}O F6^>nSA0 녭$chYu9gʅD?fЕAл7C?b>};釖1?<5uE#lDXM,*t҃Rn~hC0VRU5e]^tF,BB ,067 (H+HS 3_a K8|RXP=P19qD86I(Te:R]Nt ES׈ڔ I[T%ʻh~n脪|s w>4_=h?_sQ3Cp(O{D+8)s4?&B߀^d+b֚/&-z^f-!Qʗ틿[7RZWC$@U@:Gh9?E8VB A`Tdop覌4 ډFjZ+d0~{AݣPO;/?A~?%-e'^)cb_sǏ:Y.gxl纮,k(\ @Z s`iXTRnp]Qp~_l0a*scZfr@ "mLB UUYJ:ÆkвAF4@WD8=c4޺_ƃΠN䥏DnvtНyyzeJ#F^Ozﯽ[K-* 5/FnIٳklᄒxfٌt~=qF4/z|b>?{D(f7 q06ӌ! L4`Q`3D1*+| 'i_YCUvky_e4S8i80 _ 9iA<pM@oPX[ТŌ([vd:' {cmΐc+Ƿo0HWhU~;ܞd.Pƣ"Zז4֧i/uWx--8w ؈̚;b󧎩ٳX,>!l@IΛ)I`N(60R+>81hE\yܺsohuU.శeP7^=Q 2_'zZcfS`Wx?ic2'Ap3[ݷ=KOjOtiigb.EHb|m6]/'49kS\?q7"+IzQh!Е! pc>vιS77W>YFSzqeFc !)?u "f6'Vmun.&dud1[`A+q|;kG|gn/-=$ >CrW}I;y?β)2n&w2AF eP`!}<8n8 p.${@H!+_O|4kť3;AQZƙlpx~kr-tex'bQJؑYvf#^>I^S= @R}Y/𣑖N#W}{rz>~ &8!}7ƱT`NܸJLKuUV*g$zX᥄@ 㯠aMJ hĕxy$I0dM7o1܆`cA6XʺMw}?<•;ngea18HBaGܟmznn(N}둄YiNnʄy5_6/}OYZ4SN" .` O%Fh-rGX.)pM02*4!D֕0FX3y]@+ί>+v}T8=x5,#mZ0X, `+7%\% ^vڝ(sF-a GL3YVp5{{`@g<͍YgjZɷŐp&P;P !86p k) 5|Y~Fv4BN"2JJ+1f> Ġj|BS" h2a9&2\Z%IT E@ʬ.$j[P< 5qF9HE8 ؟QcϷPf5{Y0~_ß|送HVV+'.>?,J ,Js\1PINoPxh%*߸VkYݾmou}qՄGk vici.Z"aEwJ3Wc+[ JѬKqvܯNϕlgwqU mv<:snuwhvdkA.QLlM|},rW"ov_{VO:n'vggJazx}N3i!L|\uW!'3lT2H*Wc뢠ѥaxtXZLq {9Plq*YX;"h3 p7ལ*uTH*vN0[Y`N9 MI`8A6MG iV>F|#bh)0|cIloܹ*HyM+u%j_Eݶp؝'񵫿'Uf8G ,ڢji8& M<{_x_NԤeVT]թLN~?>9b˻ J9AiJw&ct+{<S5dj)d #SW.2&-3,] ˃@Iy**"Z x!n(vȥ{ #¡mRsAq]209% DŽDЗa01eU{1 poJfKd(8YMa@.}tiEU3㌑ۀySzfܿ1PS| |Sx=hJ:V9fD?qs7iHxYL zi5fY.o߸wwD;X{EN4Z2K|:tM*)l@GGXRzzTKBwނeQ4夣hF:8;OZZ:ժ넑q9&.sf) zi&HPJi1% nY5e`lNeQBɜd]UՉ`tT Ѽ#cfi9"\kڶ␂3eV*[fY}tlm뼍:xTJTa$I Q~V>dڻg [2L@Ulwq G?, P6[gdf*$ `Bۡsg˛WowڵO͸Ӛw}FE;>@!]xu +pt'+'[IPV0ȫ:; }Uklr雹}^4?dۿ,1iMA3j6׋?y2+?~Go.zMR?OG?5mL dL50g(1 PNj%)&26F겮5Q2>^Gk!r" 8vZy^WK ,P¨N԰jVqhY(d&ubq )i֥”ynၱ*c94J+ke  ǗrEoXP"I|t=xs5ZkȉoRƓ p7% -u݈KOڈr`G( $R0-5$!)g %!JVX hG~@, |u00 rl^ZʬcV3`?hck` .ig4 ƽQ}` F2@ȇY@qo*zmͦ2U_t6Rӻe1-[mZ^狚aYIt9]$4'7OˉΌ󀑊aƁR!h>O9ȴbW9-ooh7(*Y=C#:< bl\Qsmio-_-vt;`WTn!1Q٫\? w6JLCrwn4HG4=MBI,uw aF,c" -< }V9<ϡfZ#laŹbNkRoĦo0`2' ۆf2+l\ 8'Ŏ",7g.ʂ)Z_4+A'x:3E ژvJoB} x y' N?D'I3tYE_%x%=$|,\…S]`H]Ǖ3?hy߷.u4c8 tzwnK=u9ͫJZ %,xq vtJ>!\pXD"BPBygeԷ{)@Q ʡ0 #ȦZ)}qs ~>Eap#as,h8QF/I Иx" `n @~$Aە"]h['YDX\8e Ze>ZhM,ܟh9-'V;edY^aCb@Qw;A(E=ݺP) /%W[遷c!p{K^"QN}6}?iK^emMkDjK}kQ08HF}== [F|7u" YhfGG UFikG8rX}7PA__{kCReAmUoQ48(f5NK2e_5.- 97Q=CDˎ#,R+˫WY*[8}֓=+v{.Xӵy'Jq ? j[+8cA|KIx~}RMVN2yjN҄WRIdl3FAF\& 3gTi5ϫ1&{YF92,F3p HX2 [u0~Cpz@ xC ;cYbkj/r:MfE^RL*9l >Ulgۃ{WPA,Ƚ [48n]vL6E4Xk fRӗ~Ï=kC)y4(Y0lCYSywh4!UG?oU0J {9u7Wih kGӽiG,fgyw{%Pf#g2-[vHK- J 7yfe1  6<>ƫq0 3F̕U Oo;T(CH)';GVX3t/Vd/qL5W>t?A䇀$i$il@J(F8iimj %ޞe]`/woi* $ "˲|RvgLQifA^vI#%܄ a߰pmn{?AUΫ󍍓RB'ս7%bP3-7_{*4;NZCn֋7'N , |dM9<#À A<'UBjZ`YU'gWЬ^'zZK]_\ե};+qn~?9.g]G'B@Dn$UKp1& dh_(tЈZ~7W'.,igXGVUjY|6Ϝ32.KQ#Xh`bj9-‚U9G0J8kSZФ6YC F*>ʖ}i Q1͐(wTipj9"6iںyJgcbY:|@2r1[iT:Θi~E8mYLڐ[ep]{_; Kx+FK\[LUY=%dJܣm~A8Ywp*Ȣ'X'b|Ԥ|Me}tZ-z,ʎvLXCRȧFṍ$ou{C< J+ (%ruU;Aa 4H*x B׮}뭽0Me^v{(mU% B: N@|4` DJ6X2NI8cx= @xf9FL2@*Af |أ'țDÏnݺ%Ԇb`i/ i@<E6*(1x,|$DO7@`nF8"N!a035fu%] E:]a[vwQ$~c[q򛇓4lј[~>?eY@ aX% L&2Ƽ=\χ pu@ur{~"z{%JfcƁt[K8?X!n: |A+m"!8a1`&U^`i✩e(VݤYwgVSe(QB#j$aN`< gٔJ6tCεjLV@܌m߶@X `6:Ax1/_}uQ{i#ՄFL)wRȂh#E0$g6q`O(H4 =pH6&JnubQ`}W/^g_ bÏ_;|ڽa0YGȖ" ) aP hUPS:ZV ##QUY"ˌaK HR[% pUdzg&#kmeI.,C"͒^;@CLYup0"JkK4~ͳPQÉxҵraSU%ӂnP5έEՄ;`@ V';΂<*za wK(TI&)"6+{0`<79rly8m8+;ۣјhl-$ ZW YbW|Nmt2:+|k[gRKenz䞾5=\a%xHd/uϽh ȃ@ 8|zb;8_N7@B.1 dU#`PP!V zԀm`,BmZX%-Qtle!xVy>VDZ)ԥJ'۔k`D߇h+)'2f73tɾ@؃#HP.h:5:ΐ-;AtV!zg!J P[k|c.}y1ds[޺{⹪\8+ k6]g\^7`R"b>Nf8 _jݮ]5)+Ndv}Y:8 q|2g7ia5cew˪ZY=i)d<ۺqwuk~4;:s :oezoz=O}LN¥=1Wn޹,5*=t:qWWD#+jwvxW6OoLQҢ f;\c7 s#ixgw>yEYc,f.GJ˸M'3uZ ? reg!X88(sO,Қ$ o(ս\+&7 8[q0Lk+V0).Jp 6MZ<(nJTyE,BГdgpB6c=3r6gkŠ[a4{Ԛ[Lr)IM}DYne/(` `ӢP$ hMPhp[mSsrwy*e޺7^=7o$Ba4)Z!Xڗj-UQ;q l-aֹz/-z}UAsp biH.ت6lI @2x~x"(keVC-o-@{k+ex8f0^ 0՘0f8h}9|879}n@9^]Y\Y7 5Ls7{oYg8Q~}m/~>?:͞wGG.';0Nz{3h`qsw4s懭Ǿw}Ԁ% Ϲj W[ \ hp1C-Iz=.С?kt`np<%QFF8@^SPi[DG" Da(h[_Y BTIyu*h1gB: 1A񭭑T3=#XYM+w'WҗڃV?M{ž<3s\^;gIYUָVy\ZIVjU$NQ! g&%Օ[2iH؄l+=5(DJezq48.7<8AuBX`h#9ReՆ71P$%H y"d@;G("lU%Xc7{:l`enNJ)F C6 l#Yul| G .Ar$=R#:Ӡ <_Jlΐ\ICBmhX,iA'BRpht4uӀ9[I9/ Iե y`O*Kue4PR&^u3'8"ڭfE1IONѳx/~_WG~WRsm[~zuchwD"/el1%88Qb'T݅ F6bCIfivmz,wB* A?1nL?:XHLJbv& ( :_.NkbH!/#\ i\q (0$RtQXpYx'^|S^Y h,SO}v뵢8JC*gNgzo!m1Ǚ qh0i+%wzH$w) 㢐 .qLl/dK~87X&Z]9~ Qtw|`P/ QK l__!r ƸqGzgy罤O /aD1"lgwANZO&z,wT%l<q8( C:y9qq ;sFKZaD-ĝ7U¸DG+;&Å۫͌| ع`6kw Wh4s#] #0^9i kT]$ ]]g9q='^ wl~>|t$k-̉d_wK Vx.0 s1QTsē`[g%CE@KZ((=-Ui%eqt]QZqrPF懵uoݺęc*# e'*V'CFUb=mӺp&`t1L5ՂĚ 7ΕCΣ{/o}stbʅGͯ~_޿~t)mݼz wN[ŮfH#$1ӊ01qY uZzI a*ABԐ@ wp |%:B:f]Nx9x 9P`mh/tξ7W7qNlw|3{u)/k>#ÔOt1^S;t[Q;}='jŭ^oyiPhՏ"^_u ߛh*`273?W3Y?LYȉYO~tAV(/z0bO>/SS%eY?Q29Cf"2k#iuqFMJb2:|Z`3 MY!qDZ!iVz2o_rғ'.훿オ!lG./ן}L(Ya@*stmq]qD_yۊtWgNRb2C@V/@5`Fy>:oݘn֊p#4;avk~:]Bc jf`W xԿ䇱ݼ>xD?Z8]o|FACY u`,'I* 0)E; ><]Am(鵹:dKBFIv[.Ӭ ܙt.KAKW+kmeB<P Q' "ŘY qƆ+oDpQIH8Zm~oxRzU^̬~NZP顠n+{<ϬpV-$ _Hȥ!c2@{—T=@fQPWg 08ΥS5U?EŅ*,\mChȴu Bzc3==V<$ 5@d SU.WQj)#Xc{cOyc{p{k.9ȝCߡ?w{SFHf1Fl\36+Q7*TYaPFPMU?I~J(xB R*(=B#.Czշ>GG it;\$Nv Ijʴ:ͪj|>×ʋ_8Tuq_`[j0ζQEx1[i9ZA ̧4<_p[YB Ws[fmߙe":uE.j:4N:bhe/Saw{2 LTĀe2R $@Ia9O&Zo}_\?[k[]>ݻOw͵(EKXg8uD^I+q4Re)k(!QmR6!8pkEcEm $p \#O;yK/b1]w/np=gy@uQJU^6 [N jK)Ghm;(d枸xq &D2H:*h#p -\U͌ԅB ? 84|Q^I#ֈGJTRZJ.۲,v40p^*qU~8&q5g>)M;87eqws-#6ݪcyT4Db&hwUHa1M[ab #B.[eqm*d6 IӔ1&mx{^x,9R Bs02uVa p'4W2y: 畖<gp@ IV.X,Cu Kn>2EO.o=7wNw+U?Kwv_z~ ګ5{GHXX4KcNY&jW#"6X:,mٚÕup$bAXxwJ.NY(.ݗ,  oaFrbri'XF'kfrS{#M-{z R{⒋Ǿi7F_~?)DH]&󱕶hX@ (ͳe*vֲ҂j<.,p#}K tZdp Z'kg+NabyԀ(djdU#E>+ ;;\Ѝcsp+,bDBX-}F9GѬJ&`<`J0"Lopl/==w;7AM+߼zkϽtT=0벒Ni1die*ţIBuz#nM (]TaA\zhr4{{nOqi\gf9&+Lf& QXҗU\Kp=@t;m;&^Ϛz0z?1n`i p 8H.>?BtVJ=⌔'8P/lc9[N$Knǫ[Dƽ/|[t7o^R>o@Ah4}VfF]fa"y>_1C*kNKV~NVyk, K&ogo]|/}kӏ^>_eV߻yJYiBF1@yYu P`M_|я8}\]9rk.ݺ.v׶WRu;b}]z+dUPh >aT:x%ߝ4q]:R%LŁ6qB)FGE+ a eԁ)hF`pX7w1ӟNO&E<ܳ9 {[im?lI0Ipjr,x ɥ㛝`tήvg4iVgݕv'r|p _AZa(f^[#B`\:YKt 0̓@ ATYFfc, Ft=xEJĒ/~r6B_|>-O~NM)*URh:10Sj@:+Q”Xre(I0 dy]>;quV7\yC+ǏoSW6/[{N*% 8X[V !Zdd-] € BדBUθj kFt2-x4Q?pK-w8\S&4W Iڃ9 uVZƻ٣NtrSfi> W}!YLK x0E4ڂ;JX]\zl~isk++qzXg4/,ӏVn^HדB&;_ZoQ k3εݙu-V XW9DVmР(0r q6qlQU.`@Đ;w *ʼnvz>GG0+KhdڪWu$`&T[7u!%$ $0gxO 2ͯ/^Qu] e74ه76=ÃXxFbf:+FZfI&AK=ݺy` i;BܙYV̏20A fV\e5KA}$ڼ77vHI}=S~g thrxJw*罹8@#57i4 \ d%Q㎶KlO}^=x=MY[n91|:yVK!4U|EVZ8s$.ՕӒhyDr p# ΢EqˁqmP098Fۺ.t)*:uIh80e<=o{k+K##q LB x̲LSJeaӸ!$4]`<0hb4Π# k)iCMz+//~i<ه|l~_#;lnQt6IoEx7JȂʌ2?o Li*\BVNP sT Wknl6ˏjn$`^ܼ 8  n Anm e- ,!G!(ӈU;cH΃!0dx,Uq3?رD/]ڝFN||4y{XO;29uPZW˰Y=\N ÚYWA o3uaxx[cNEb8NÂl&ŇR86S s `hߥPeB Z痱vN)M(T0k$#7;G%k V9J1j'5@HJr R^锎ꥵ'^{~}Wi5{ҵ9Ovၰ! X^TM2 ';Z+B;{n#JS: βLX vuUa4ZcA'TcpG,ոh8Ւ0VgeI֋jRlW,/-7l>[vОۋ4@I3O`TCh xE8ΐ 6<]$ͱpQ|p}/}9ɥ {VOO rJ]fL788Je q"sc N| >]hf",KsR$,ٯ5uoDzbӺ/ 2A1nGS~ӏy4hzu΅V*Dȟʷ꺴ȭ8w\I|Y|7*^; GbqGW_ybкw>ZC3Kkq(-<:6'I\ZbOY`&l+oIY{':`1CmsmnA„58;ď((g˺r"~Fm«\" LC q[Wo;l%rCU-|vgeQ:]A 0PGl*}<[ &4,deYaHZꥯ:uWw?_s#A'>W_ߚ܏Rԅn\*gAYN WUŐ,YSz:ep)mQLQxR M 7X]FZdlzI('֊Sj14.1ֲ?( ڀ+aUXVN҉H`YJl~c0N2/,)O֭uUxCWF2c 7x :~bؚ.qaz~]H\QOz0Usm)$Qy r-U;,j\Y?ӵ ʳ~eE!W`0*MA(JK8BBa&;.~8]NQoe.)Y΁k+& Koz$yyw^x^gܿɋ-?8y*s?Hݽ%X8GGcpw5̻gS%Ak݄J]SU%׆A-ϊ'EAi hV/VE20 2T"@(G<!j9ԃ,PB:r/5x ^ XB,¥WY0I۽SO~fʷݧ~.dm%/ayjU?d7_S"xa:Cfu Ψ gIE!+Ђo *@d>^<Dz7 $8h'cm];N Uo;HF(*^{c:wOLr]nI v<2j/F0B2Q$!~s˝_qc4IxukN"6p3qy;c\ Đw0K#lMV0?8BKwDVizz  6W AgsGZbZVnxן}eYv9.}^by hsK,~?_/C7B$HhqWj\џx3j|޸};Y"lnl"1rtk>m9,AB:<󉟜fox) HHQ\'?V ֲ$1+:,ߟ],c=YX$9sVj_v gVj*mٝݜ3TB|@ǺƴGB}w垔0S=H{GYd` c-% X]&Ԍ &%RQkT5?s_p8$ (.A! `\Lp( o-!'ZH/=QA;j Z)ZQI3LU\δ#I|ULMF׋rTi㽍t=unlQ}f+k'\ o<㷞}]Gq\u @1^-bR?}սͨ5q*x^'A('4+n䫿X*Zyo넃ϷȒ*SENj8 .&lo%*`QU>|qqAu% jڛAg'%j[pBNֈ8 3@}u5@w֦r[X0ļ2W Z}%ReSEZ`sbmrU:^UJ+x4[oKyS">}ڵ[|]!@cB(lW.-: C(d_6 )C;hɿݴH4 ՠ̖OwVR1;u0˞9`"j A?qw:)-E !4(1T98<;sK0Q#@,2hmݼ~3X[̡$y6M|28ބ oye\r"&5.ñO?gPH3fE4AjIl [#%y 5 hAAy:"Q}P2`_ҐJ8`JuƇ#r]9gYV ۪f joߞ;IoǟW3?v3 >Bl]_{͠q5>m nPꐲHHcijRwIuߩ4zX<Zg6wc?Q~Qۡ8 )r Wێ=Q(8~pQ<7,23@ *R6@Uш́SX?)yޖkw7mD^.& Cv|ϜhXd_}@Q4ozKF|#gGV- oxCÎ$̅!3q;_F9ʿ׾0GRAs6̿r jjP*H12Y.;RZhdtBy BVAfX(m>ıӓ|d8:#թ`JOj)E (^{>ID5eݫ>t!ƄƽM \i[-€`qpeձJԃs٪fS9RA&?!bSFv4/}(*/@{F{ / `v8%*蒡*tѸO1(^q9;{UQ(,a(2`lccmWjsgmFO;C"4kG_~'}o~i r4p"H4rwbAPc!Jk L 8Ұ,(, /?↓,ⅼߎ'==E'=z*JF LEF!DVÜLo>^\ը.*T,ldFCR0\BPC*q1ss䖭fuAP,qRk3)Հx^1Q@r,ƻ<|$ZضVV%>whQps3rN3(cAѭ[YR9׆ol4Ǜ7o &50O X0 9Xya{uUg⻝v{y?IOroL'B? ˤ0 dLL$`l"KVw{;uo#IlɶW#w˹*>kXP+ g$a' 8ŚRB3iL/]qu;.sS~}]A{ 9ͯ#Ԡ"@0+XP#ܖ/f[[LJQ`%B7ȸWX Nt_w53YXVŕ@ lb*|ehK_Ĉ[?ztC4ܵpYFKQMLd@,MS4ˤd< ݻ]VCwIH4BN(械eF2i,$LQx&f@ƃ)X\-eJ O7.@jEz ,Pa :!pea2)]^+EΈ\)O$;?| X'9թ&SVp g`Fχ;BR X5jt.K`0>WN'"bAea #.,@x<ǚ^U~`Y߽¶f݇hՄAJk1Ȩ@LI^㭓EB22W W0VBlQ:ÞqCjK#?ˇ/0NkpGe&8 !'Ĵ2t9c#?{TB.KwIűWS8H4^4kFͦXY;/SaN@ :-4yD-0P .=1}tZJais㺕RR+.8hdvNs];'-k ) cF8sPi `? aLqx{cdSct.9T$UdH C x! -Qxo7kN:po{541wRcltՐT,դ O 0 a~afDS|m%oIC0s=n&R)#G$;$Rp/wϞ\|6{7K.Ŋ-8ot !C bUrIy0L?[d4r^mC$pcZd<PXܡ~^ 3d^0zq}mp=j A{RVZ-;u<)K Gʣ?& e%ӂ R+`#jI,͐umiC׿vu u {kkF IIiL=_W| wEXD",- ΁YaM7L;US3oQ ,ǾK6dVM>fIq[iBLTw:V=ߗ mLLnKMa0 ~~ DY*E R}!a>KI8Rxږ+>N TںI-Vd6L%>~uFFOb+вle]j\#f j\"3e4@|0Eoxɞ_c>TC?zH}#?ٰ]ZDbc&SM ㅆH5 4ժ^l%m)Ɛfu?ڨ]m@H7i,r]Xg*Di>7JWjS^*3?TDn  :<߿<7FWFeڑ1ul/_!݃{@Ό?I>2cutF I *(Ht (ɡW@ TkA5UIjkPaO<P.<1ƆT+Ё YkHaZ>z/~ïQ43 3ܖ?y@jxvzsN};1z3tw'({PFEC0Pݕyql M6ImLHl!FPGbr 颺 \YZA@eg/Dݖߏ.I9-@uGlQ:/v߉Z557YֽJuܪxJMt- OD0@g &2? #h.l9!=;D$0UC8i$b8X7f;!e7 `a[drWʰ6M2]Cq'dGjGQ ijx/{XM,Gn侲DG. :Z%=/zCI6!زXfnz/oH;"ugŎYl,ПF^}'}ٖ*Z[8AG_uOiS'PZ54Ak}$>^K*#$+)&FĒJ>̆j8SHWNdQfTfaDTaIF/{#MrQ' :֋΁ELc}?Q,:ޞ}'v\zb2Fyլ9|`5E:zkTӆO0U nL@GZѨ>rmVd&BdGC̢>=+iё B5!bgkko&:UY RvkT){]}(Ɔ%Y?@?CZWddpA+<L\QUϕoı/Z Ig61q%\t dV9.J^$Nfɪ C;8#kF+_I#G4k| mVs 2kea`g ?nö6myo? c^ 73Le-WGlJ;,DRh0PjwE&0ce_{+IgH,L ylqwl0*?ண Q =l.o/quAR#! #SI!Pr#ovu oePS .t˚>|YCvSqN*̈jmһF/lB[spEF63Ϳw^Yz>@ւv_ ,΢.9C,)Lgۼf f4 1C\h0+k =(]yř񾡵a%/8?أ8hPS )ڥo\on΋Enc/ko{$sRAc!#U4v"ӂq؂ ɴ8qd2-&M7]|O]'A_>}_NZY1\|hqBOMyPˆߢk1=s˕|W8B +j o9Cm#Rq{sFkp3~~H/ƺ4]6kV9 QU悱 U/8 ߖ3P-wi/l~iMff( Q~t7N[S,~5Ia-^iN6oRD}%׫kএU&9g83^nlپ}`"iIP z A #"U\Y m kaBo<;8l 08Oz j'#Cdv\-CfM܅ S6YRl_@; 5x?9 h9CɃhTYS+Z KI:ZH&g+'_%A[u.9vӨoj^~MgU׋c{oWc_dγ}AieL a&A H2Jr0Υ_0{vlYWdE+rz^aP"" S<猬6[%edj@фaFURodys7(|5{C{X* ¬aRPv w"C8'ޡow?|@q5ܪ#{Q|rqh*/p g;Cy`l\1=ZE4,!LD 4*28GeD"iɦ?L+ρY9=h:OTucrB.5ڷZ̎ޡy3BFh{ 2% Iә\*䖵Y3f|H2tB.m ciVxN_ZV j (fS a6Tej w wK^eq>b8 *SEEuqA. iy!*(}Pȼ]@rK*Ն6Ю ,YW\%VZ5R>TT:ƫ%d%:`+NѐX30^R4]2c4A,%1#&EL!ϕӤ;Ҡ2@ I\}ة+/#jEj0c15q68(r% N8bT|(SyXZ3mriNpCJrVw ы^i\yaStYpp'gfDczz Z1 +zF _.٘.Ȥ`:!9H҄AI'8դK4 |g&1dȕ_L'6骍jȳEaºg oeA[gǑmrRYtwI=&&c/QQ:431,qƺ%g^һՋth=Dvd ,!]TRԬ1,9ģr͛߃a\~/Œ`bz{WXL[vtK˥)MxfQyS ev08V3dʞb(0)uxߟW03F p).abM gp= 'S^Vx<TJ:.H #/#]~qقGغxL ~ݛx9qA'{3^F7_)gO:!L!1*'9fi90#ڈ 0,%팎&g6" WnC@LS̮yjVMeea1nT-Ub5]@ؐ "n!pmw}u!Š8 `B\ Zbo$~ū>jラtC7D-k'zg:,R>\qߢ&F_3\[&F<@>L^x-wn~ScsNcw”T} ?ڙ , G;a{N![7kcgD~ f"nA.5q@bFۺU_n63]SGAˠ -Of[R8"PN:zY. r~F~͍8mF25#]_tV $ͅ1JC i&s]Z=cɦ[N7e)PD&Bbw^⧷]4ݫ!U+!A%L?*E7^l.d}; ꬣfz [Q̎*} pڂ@^'AYn(.՘Qmh0ZU۱@ Hڏn.^ϤӚk"LDG`(z9aD§,OMUTxL ϔA$t<%`u>tSS#Bz6gp&̈́񖏊YO 14?<.lIY G_65.yK`ʂv\oOxO׃1%V.hZ q|o._S0#kh*Gt-.\xd[ {n)np(zR2)h "WP:K5"Ɓ` Qב-H!(Pl##j#XtZzרDc8U[CK灯d``b}I8 ű\,D擯y>2i?|). 3o?}\ܔPM7ӝ-q,ѱ}[AO:7}njq|+sq1/95zQ,) 3$ j|~O IffC-OK?^2qt,XJPD|~D9-}4s%Pvu4M̐DJe;?VSƪ]摦2-ҿFjrqJ[QN߿(U85bb5;|;tw⦄1ҹ 5x>=Zڞh:;_n9TyVr e2Q=k*Wp\+ۦ[') t^T][,jˋaZoRmE/S[J\'oT#c$8ԝůSl?DCB->!ZeGt2:Vm,]1/eʖOE}angP p8='N\@< [L+m?Յ%;U#,ΎT=2`cYSmd3=?@ q9T e Ǯh h{/@[MurmbOdq%č1]{\k5Mr_UX@UvX:+b MJ(ߥ]8"jЍ^/߃>t=:BC}=CU3 ;^W"p&,u|Q٩~N,JAT  :]c: [u6 ZNx&R)h033.ρ4nC6mK"Vy٪ѮUѬ\'!WYsmBld2j *fVۇqk- < ͔^SJ"TNTHgƎrl4X&4Jc0˹jܵ%pZqӮy~p* s8.6?A埫hz'Y5P4#lQ\9x||m+ *鹁m,&ھ7{ԝOuvҗp:jGSfg>%zOHl!-@?}|lG5Z*XǹL$RW08߳ 2`)a,P{v(ܘ\6iǞ4&=j ;YbdŁoEBpfhcQT-Ked٬wATqOL?2_P|āZ^Ryv-e7wL;|)ptcD8[޽0~<5~4M) &(?|;0mÕvMU]WvhXѬ0\Y<4 T)b2scAky$M:kł"tW28-~&jUe\i 'Xj",8u|jֵ]"39y8wG hcAd ˱ÏUE(?sj~sуY=͛bp.}SP&sP̂,\ P[LBIM/m|_❛vO\ʭ]ɤDBA@Rg(E:X{ӇQzE4.pZ 1At û&6`4 kk Ud@m^TlTAi0Q*xH%1ɖfx(X\D5%Bb=J-t [/ $Nq[ζ[W:8l?`<~d©xsz-P,ON O8h\Jٷc I'u:;q uDO[ 2Y{ Dřdp4t сuM<U3fNV|7_I=ǓH [E2miai>]jC{+=L ~|!9? {)PJp^)7)PG|yӻ(N;gF%ߗ_=[%u۹nzͫ~vGٵwN9^ʅ\J6<4wh#(B x7%/޽ۻawKsH*_&>yL`j H:h &q6%@%ap^=ڻ&8,/ldq,\"u>>} ՊȊ! ˰G9c@A{ڳ|EV\şu!G׼ރwYLp_GX^b*㖻mf{Վc/wv,8/gm]RS ܹ_o~x]qƛ mƺ q*r|hS8q_kV>zP0KJ`6gF*esՃmmkh/{M${uTNJ2nB8VdœaB]d,F̷7<GwD7L?pT.JQ;?z,иCm=4w_Jn,8ū/1#^&sl֛5Ok:[\Ekͯ?xoƕ"[{>P֝Ѓ9g|ɞձ eޡG@w('$ @şfd n0aq1;)٪Q$jqa*A.H@?΀0hiɵ <\rwFMJ4m*jYB} L*E0RLjB)8w m3Q&=21:SϤkrpzXn<>68dWu'Tɮ⢭G+Ɍ{q>yo m^˻Dr׃cÖ".Bltv{M3Ңɱӌ"nh<Ԣ,;_3O,"7}4U̪T/N? |TV.o-PkCth-_Z)l|dTy) F(! QR`$#_Ǘh*NFCLL;Pxc-ltm/[w;ټ+q:ìQ՞_Vmx)6=cd`ۜטaj cZ0;w+rsHnٰ\w̚ONu[' k23>Kd_W3DJpHwXlUQYYT>eޔg+׼:ua1`)̢!jJΏwf |ő]ƛ>J]%BZQz7[.aJA乐J4dB6_r~/e"VpenZsfچa^1?ʰ{}:? Ӄ&A{.Hb@ۉcuٖKD\\y^;MOsAG=6mm)iVR$#n`v6Q4bͪ-(\/f^&\-񁷅S+apqŅpH[NAQ0x3XJ.\_yce-yb i|b#,Tv{0B(NQ*&D jaZ|1f?Ľk@(%,%dݔ{V1$cxymN8a  ^R$)ǏBdc`]tQ؞'6_ Iq;9 o`[{WȒGTyc0R zg\{h5O;3M۠TlV]Y'K?[ifDn)+>\:fZEY9Zr{s);f*{nll~3fY)T'Ӊ#/?TR$ӽgd $3SzfձV-W!NcxW&;-ӃFOcO%3 t0,ODdyAi;K3nҮ>Q-l~TZ$k?y97FI{i9I*/'/gTd̛8v%D0\Ԩ8 Yŗ{ۯpi@Ć+a15VNBJcx5%8͛ߩ a_^2^?~VJҮ#[-DxOVwNU > O $6s잜ڟ{dqidg`4'a-5AZӛЫV.vdk;=眖4m.n 7j}ְnf)FkpF,GLǙ#>#V (#,B̳^@w?EH:ڄEb)b;^N7^4SuQqJM=,&ʂ87LBHpfvn\~6cZ K2,&d*80Ry.v[p:& *-cqwNV×XckZiJ܂crۃF&"iY mڒ,֙#Vdu{spO}~AVkj뢮shlp;-^fGǿ;fR'y7lݣV:g9וR[y7XJl~R.NXv 1‰aPHFґmxhQ9HWm=$rxVĊD!$R) hx)d#׿C 8[/:Qa& $!\ZTuJ[5l}RJz:^ 6%HtnwQf3 }h1bT[=WmiܱQ\JIƔkόWŲ˛AQ>[ѹA狍k̶Z̈́W']f1񞣯={ī/_s|Te:1Xx^4e8M#$ӮOzh |};~H%2nDjȝ}Kd*?]w+ T°'j{ɰAZFRF?|30Z5Ԫ&]:W*/#WCcha<ʢ"M[E)k/UM{&=8_+~0S|:`*gNͩBd^]m\6aR-ix5k6g# ѩ.l޻1͞!$,-Ljֻcw(OudfǦA'sd3q)&ziz2a$: 1/۩ܳ>ޘj5Q(e#> *0TY*,뒙]|,ʥ,94T;5tXj5`e.f’232!:e_*DaVШkj; Ou#FjC5]j9մ2ym)4T |ތsZl:2U#eZLK.U]Z,U13}Ӊ.4<庫st1ܓm=f%?0WHP#+;emukྩL*}=Q#k]z&:A2&%=DY>q%ifMMbąYݿ'_BDQS86,hhG`C]>8ۮ_&dӝR#ߓY)Ң BeȨ37cPQP'!џ!O޲}ݡD졙FkŪVitE:{s6aJ+[Uimn`,zST+ʞ_hrܝH͕-sslDBMs&^:i2jtaޘّ%}`дrY[\K'F+md :XQ^4⤘njdڰnȟF_>odzv 0*\02@8XIW UX8j׾Qͮ{;|= p ڮ)=9C(C B*E0 ) EOPJ/xuXqζÅ]nf =Vz.jrJcsq<^*7K^H*"r4t yspbӒJ RrƩ w)9 +4)/.okP؜fQ$|ZD&Χ5ːFla%r;K]B,;WTWM/(ev\jknᶼt \mV{f/QR"nH\ S@41 'Gǃ#7U5;im/6A1,]aM>FQW֪4IHw?vUU:/xfeջ QG*<BppphFBFäB)\.<+b\%;vLRQH>6tJyxUs5.afZS x(RVq SK>ZLo4dp2k5L״*%Gmou/ضS=RfRiC]|=Xm^Hć;yҒ.(yx~?m=r=Ƕ~٦]xv5Aqۍ7ޮxz ]xzЗ6Yg4mJE@8Wf#W5 %\2|5NÜ@茜[ WUt>WCƘrQ*!$h Bꊡ&aJN :-QJ( PLSs|֐P::Yô+cB\/P yFi2 pX0BzAt>[v.DJ;;{0]N@d`}GB՘Et! O8|0Da$IJb X[(ˁs3PBa|G62m]}ٶ<5xBhgxAa"@y:\2:xD@MSȋ t;P\6C+\""'|Cb0Ty&؋؉Zzщ\F^u cKmwvnnΌaDrdM;sip/7"uv&T(AM,*',BB΅Ww?$p\Ȉ$t@c<A9;pg J9p9>6p8\ȸK%A )s!\_QL|1Roԋĵ~e`/8LULdHtM9&@W/S5GH9߷o_C$Kcx?BR7>WyN.>O?cŞ2!:8ZZ5DJ '!IrwF N>BckQJihw~doD ePTL %(Qu1&\ek8Q׫q[Z f!?.D\၃.k PZoJ)ZDy_wc{{p>Kc'<;,鞮aHN%DB)-q֒` ZÛYj%+7fBg{J`acAK!N w(P)t8o~Бq)c;c8JH4S]p_*_ĄI4ʄ:,K(-Y%Cߐ ( TB.$!Q??kDDŀB@B`lrjss}7 kWI GqJ1C[@HR-h7M !d許X^Fƽ-є+)OS:@s;$I ayUrezB Lٯ |Zgd&" VS@dEPH„ ʛRfɩ[7()D(a6~B($r ݧ`Y +љV%RdQqh0fcoʌc PN ccTXb C3j2BDH?<T1TA*( qC?~dna/fv% P8$OyBV95B`-WcͱϹg8xWtbG>/̉WFarANaPǿ[v1b +M׽uVR!dׯ? B+P2XBdP+LXq~vݘ@ \K=1da7UHj= ̤)U+U%/Ӈ bB`0Ump;,ݡC080G͛7#ٵk3/vޟ2TF "(H(0R8^,@+ьI͸H沙|>J:("|G&6zm__wWw[Gg*i˛L3@Aֽ/`MC#G s+ OVC% Pr蟾7V.|1}``[nAutt|jm۶=馛6nO|" PؙQuŷ=ٔ=ݧT^uJљ\ I%BQ@N&!+#̾Bb0ni )%t6 g -~o}[/r7GJ7,϶uJ]X74+!V.;FJœ)(L1U45CnkZj@5Ԫ"$AnQRo4Y#"Ь;`<|,df뮻}14M[/wuuywe0;+ QŕNU O <9b+X zOpR,YQ#-E8.Bbs{!L^閮1@?DT-k*o&W2w亰 0&)$0'suMR6J&y t ; @agdj./׼5ox(ʏPBm?x@x@H /T"JB qTZҬBB@)+khJo[fd1ŬDRUqܰMnF̈Q! KΚ*<`btAiqi`WrA#` iaORå͗=~F)E)R5?L'OӜM$OD.r#yXan~llk1(Lr; DuS LY 8R, >G 0`6p^X,7*eEyϞ=X,_|]w1|7 oo^泱AVx!yMRI{ΞҲ 2N10fvt J3P#_++# J"k˷u\o\S ed"KըK%L"0$LpK(!v@p(C*Щj2 ZmG/}C Qwտ{wK)o>vg?ً.ooZ[G(R)b Pf P"tTO(+ NYtʅr;89u*J jR Q>?>a]@W3SB$46L&<φ` lHw} ('HSg /co?dُ}cz4xxx}//g2Cjhwf͚L&'xT)LmN3όT Hwj9.m)ݙ) Vb`hC[ɅCK5}0 <1r^k8 xWDըV saMz&L(d+pAlQ|9VluO|z׻V^w[[wީS*us8ΨtmvQvs*ڽ+t0h>K,6HB/n-D1ժT3=u.jrY,f[wQ v )h_50vѝwz'YnktO~S4mŋ1ݡӽoՕG"Ƌ*yD*a%0FRx:{Бa [[!#uŁ5K%lM,Mj69^+ n!A7*KKřj԰[h6x*9ܭ,-MC%fRO0!`+_the׼5z׻.˲\=p۷o›lNHs1%nPBa$ڻoٲe͚5c׿((@e6M;!;\&WuVi~N<Usi!aԙ|D|B%#w!OA^G37ӹ%11tΞP<*- t;ug (O"3 `#T4{hMJ @@RZ)WkqmoX2SZw kC0(̛8P$Z[r%42H Ĥ |馆#\bPj4j66zJRy3VwOwk1tSO ٪MtmL6`?@G& A J4w=5(G]orrn7mmmo{iBȿ?ӓ>v;@C !\Qp Ġilnv\,3&sa[b5K )i@\aP |aq!%FaWoAݜU46Ͱjq[8J<ans‘D``M0g*6!qiHh W_}o|?B~0 HH@6b8OG\,M-̘P-JӨp<@ c@Hy%)XTy@/#T|4-Z{C"u]˿Q Rk~~֭[GVGGGOsYN/=9:e!4gOhT(a- f9`0h#Df2g d]!I'L: ӓB-Hk.1Xj~tPo~ɝ㵺x шZMˌB_ζtNa+uBCbqcmS~3ټyݻ)k׮꫷onYVD塇e΄HBYkak;:z**KNIpJcәP>.>uBRڋ..T ð_rj+j-it,DZ)K%?~hUI≜F4ILi&b|jcRq49z`faΏL^-qߋd@MX΁D"!xY.0^` VVKfS-|[uoou2{{'}V4ul63L$/y6|otnT;)0>]dfxehY!+N0WR Q+<mp.D!Q׻T|CufB,ZK )gX8iP zZÍ(lpˑ4VԱô8!Q/fiYwQ2d! kxyxC{~ \#iaj{gz<ɆSHJ '%d"0 HFS$+<{[Ї֮]j||n(I8#&H&lZq?'Z?{>cs(fW *IIimrr {@.T^$!_D1V 22ۏN)4 IX,·)S(k얰^e$=H(P FqP>I7lzQ)AӀ60}a,?7n,qG6 C (@D"\Sc;SElZĀNć%axbp{4Tw?8=5h\"yz^&\);s̤L '!LMpުjc~zⰕe(#fQs# ցc2$ ?~-ElX!FbY1 ߅T5DJcDݿwV՗iu͵oձ5-?l2Ms3(]ǵu|Q (+r--!k͎NgsΎdffhUGaHu0LX2^nBf+gEZ&r<^DC؃mtvp}p[3cٳ*LM,)LU+ׅ3H1 chFC3x}`Ă\Q wcz؉ssuiҳr֞hprѱ?MfzRmx{eIUEnHcIRйf7b@xv8gK@?.LC4 J\MSl.u80`^q`"4N>P Eg``c!o+Dzfm2V 0V|?= `;ŭ½<<5WT6wȖUG:ZNsi0ѨiYk^^8~UE50o kb i(AʺnP(0rG: `G5Uh%w(Ebrӟ??E>q'X.?7 Q!Tl}]tz@&L 3^FP23ihlhQ7盀f!lB)2Fdj4 0 ,qЬI!h1K'FfwDEU4s˶Y[y)tD\/u."H':4Ӱ.V,܃%Ȝbca dH.Fi$[S/GtYp &Eɘ 13_ި Or('q XHZ1Hzs 3! Yb($tͨ5wye4NCR}u 1&2M&3Tێav`KY4̘lөl}^QBRhNG-!\ D@=9p^p5Q8%wTŌ@#T[ K C2wq..X \0b֒M%|,Kk2=QhhVSP 1ʋ0l^aa3Bi AV>Cv3D{фᙙt>[GG׾۷_veSSS{=pM7dYiZ;m~},kՖeE*˄%e-@/l !$-JJ)uu뢪DZ-J|ȑ#Ìl6y^I$|tz&ChL}~7dƧ:k>5?"}R466u֮.TZ+ST4Vo߾.])ۻ ,AyDy/DA:dW"AD5kA`Cvرj*yDYbePPK~>aAhT< Z8s~)fY{?z^^i;q|j5[5fH&5]c|{hlw&#ۻ%1z3<{4e,CeDݢhR׉̟:ƌAԦ8L~"=2 nB2Ophֺ ܷfGVTEҩ\>7Лe)ܲD2yBaXT듀˸SB&+]_{|7n߽̎wmo?t y3h>00GرwI^)o]¼kzV-6y>4X:q vtm.;otGM\y8j+{]zwmި}:x)N~Fn|~+Uz~{СCb(d+]#VFo~g?+^񊗽eGr\k.o(jZJ3]GKo궲IaGl|l1v/~ytgL=;,ό^vK/[$;S,TWx*>̦KSmУ|Kc~s =бyM7m$sssQ4Z^cRJ'&&>|qCj9sfF#"؉j>z[ֱc7-}FAt9CժT*ka" PV,Vmܸ>H}J8&OϜvW /on M8FͫLbW1O/56lY7EnvWy\[e߷ť.07;[UbZ`1N43QrV{d&'ը+GZ{}?0O;^uY?@h=\Hr>fI'rK.3 q;w6͋.(J-/ǨnC)u{*JD !L&~t De(K>wW\xlqX?ZЌlu]q/g̭V+jqtV^4\<*14r:0 v{;4̯w?yWYlʼni/.m3䮄\ڞ_]lv1"m)ۑX,ŊgHGQ$O6nS54,R>_]???l.o@!)O&>Q+@|.N[.vRsΣG^z֭mGrZ*?ȑ#b.\%1[f+k:7`t ['^gߌkoqaFbG)r{&= e NK%'VEc f^ b v4ؘˏ5=6^xn䀧@1C ^ilϞ=Fc߾}A\QZg,kffk_ډ'Ry˵˨|Ax(OjA$ m7~򓟼}ۺuҒmQ~,'Q+rH4/OWq)CS!2v_cvWNjU4^?VR+]OR# 1P:|;2nVH|pϜ#-F&-ݖ.>>g\%`$S5:ג]>{w^TYCHp{͟nyǍ蝇xJ4v?CT_J<cG>799zٌQEwwwGU8s] .;OT,Zڨ\E>BKG1ڑ5tF iM4n_3Wzyivt?;͘esR|N;2sơΜTuՆC]q㉱F肑t\OX$)NJBHġ-chewޗA-I)u]?|jjF裬w֦ZTnj=ϣy)d>7MVe2__ _ŏ~{fՊ#[>\9]NMD)* {D_4u|9hHp3ّ#WlZϥlz&ַ¾ARgqjIdpBP+M꩸VkYFkG ;XxŚWkfڎ Fm?HhXd[wdЖS?ynWU H!A@tq:̈8X6:""H)J $Z_ DP|z@r)ʿe^0 [U^Uub344k(:%y睷x0 '&&U<`L&1>㯹K.wٹgL9TVMˌL k_"e_PE#[pӹdԞb6YmKsbnF,#B3dct;3wG-7?QO%(&$6kS$FrA|8tV+fP鸞OFjvywQk3^۽g'^#"KZZ3Ub-[~_(g~xpp\.R)PJ}o6Gmlv3iqZU^x_|G}w38Zei(  @JjC@[I Jz2E'K"UXy =仿M?uz}Ss`h-hT,tGirQ w$tBA(qmda'~kT{# Jn{fzڧQo,C;iI z*>97k?Ls5sΟZMu5܍HbF188l6ZgT4UV꾦i]g1{zz.go~R)>K3_5"Z5̲ͼs@̛2Wsfo{Xl=O<`eԦ'.]L>E\.ҐCC-i=3>b1 "M_;8B6EkK[|jASJ:x<~+Ltx<f QAKJz?[nlllܹdrll즛nB=I*PT>я~#9/~QejK3/4t"GY-Y G Z*ݹ߿е#o;k h9TXIj4=s6Y6MQS,]:j.DD DžhYMU|?Do+?x;R}?v'ڐ 2%N/*C/k(_6f9?88xA0R"ض-R-XUyF< 0Zu=^pJ+S++_XHXZ}׻޵|O6lя~ fo.ޠ!e,zƚ`S'a'c"Lm< 6po&[!,, z=3alI z E1x%m-sX[bH,va+N ^?U)q&TАb(vKWW;vao=Z*IB{`ar5UuU9;M -ri]tjĤ?@T3VfroFw*bt#z!cQWU9@a T0py}. eЙf"(PJ1SSSrlB|&2c{\.纮eYfR"0Jٳ:K_҃>x%l޼.www޽{jOUeaT]wݕNO;37o< PE?~ܹry…I9B͘J i6Uܴ֟'w!!0Œq/&u[*Jv/ϫ]> 2ᇼ861yYH ? ;;[굦]f(Ė9#f( MaJ,,IDAT63B&jr~Bqb Y]]] ^D0 ̠t!}w?#f ^O+V\ׯooo:3ln4j m۶Ͳsa>66^zqǭZJq*ÿ%)cN =4S<*ifWb& Mg_ؔ?Fbv/_V>qylRGSR3Ly񘾰')',sB C`KqJ f90_j=ŷjoM.iE#zҡBaX(z{{ׯ_fd2gɒ%eU*jݺuoy[f5}+_JT˺ԩrW!z+RBO>׿u ]V2&뮻nʕoʣ@۬!x86oӵXa2j6ལ压[26L59F /Wb>:Qdnk⥚_xBZ³ mS*wX rI EDdP _--ŏ0tdCo.-E"n&}G"!EQG)Xkkg?ّMB(+UsK.k˒ɤ -o|'x^ve7ty_WL|ꩧ/_>uϞ=֭Rԯ:8{FWa\w~ WfcJ炤ta%HVNbK K9^ d .segwUCAEIek۵L KS{\En|kFO[v<3S&А#hm %~m +Ļ3*3P^ՠkp]O!t]3gβeϟf͚믿Wo|=X:6 CTrj~2t'bhzHvghh #լLѵfRqk.@3ejX1m;2IK礟^Q Q¦cs?'<_|WC7i8RLR[ng6׮y]7n|S fh$Z@u;ڇ@q /aO^{[ @K.mmmjU󸯯v#P\~R!Lwߞt)7<66wS-Jr饗V{ghhH?l6/|/~'[[[ggj*E2T7{r1^uK2LډBTbO+>LZ 1B ᧶ۇJ5\m%XԗjMLLo\t*eeYccco߾m۶/˩TWW\xs=WYZ0&''O8ᄣ:oQ5iPTJCA1a# -[Z޲Lf;vI bA^[{B֚\eXifc?q0FHMTb-k{^4md|`Rh?rec`Ab8>k#Иw nm۫V馛f g$hlp .ULovw__ߙg988xeJ3<O(SGhrr?y\d2[BJEN=T0fteYJu3ęߘ> Oup2F CG?8|KXQ.Bt@8 jPaz6,XsJLLuL;䓏;8qzzz>Ϛ5Ka{r{{͛/첏|#7|SNQ#Į]t]?7nݺulllΜ9|^1wnqnv4m׮]76lؐT:bgD߳gϥ^?fݴRINzΘ,c}G}${y~J )B.bbٝbmCU~|Dov*&'5j]sN_z݇@8#ȣ~a2|ӛt}͛7o rN=TJi:Xl֭w۷o;"cue˖9sxg}{kZ&I&JPQJhxw9|T4}[oT*e֓]Qc6mjdi_ꏷLl"J!D(a}ebj xauțN/g3(GrҳOj[|G1cc/R ,YBQZ'@);w-2gΜ0 jV">Р\r1sw}۶msOX|׻e!}(H[/y^,| 9^O۸qwW_],0#VAc\O !c>:#eˎZS_ntJV&n>'dYz|iߙžO9V3UZ`+~@;g}?u]r%wqzdwwW^iYG199_r-۶mm{…gqF%3qgvanub1uAh4X;(RҥKA1PanJ3b /?91oݗܰe2zo4 lT' BkK:knVwعטu3O/aVsn /3̦M/_D"[֛K.ufym=GKm1H\|~lQƔtTR}3VBbc: .`ܹv[*z'&Gq)< pXTn5ʻ_ԾJC&z>o}қ, vRpا7T7hܯ5=9ϸ!8+=msue4L* B%4Roܸqʕ+ժ}޼y_+P(O~RM{ol6zj:Zxq{{{ZU:(j?_cǎ:kΜ9wybc*CxXbrr/}0{β,0 X,.XhY 60n<(6vH PG?_}m45농r+& yFBO{n)rSSs0,UAaRLPXz=3qz]nٲ//Zo߶mݵ,K]|ŧv lt] !\Rz'ٳX, 6U{~a4X Ϣ(:6mbڮۣp">)ݵ\U}8{۞{}_x*T5 ݴD&X!}wzmycNc7}/?}t04MsF"Eo 6ZJ( e_tEJ%Ny睱X-oy… >z\rI<?#/~( _8ꨣvޭd2iSO=h4Jp"Pd($va,^;T fXeacGYؽ<մo}Y?k>mwO|ȝxV8e PJ LHryDYy{Z:;C^^uT @i8x)a}<~/[LmRtp /|>g֬YsE=÷vۂ x㍹\_wءt%'&&lVyPH7n<ڵk򖷠b\&W*BKU ݊dƼgF"?_5'o~~}Y_ @I6o E]U, /W (?  nXd2|__߿˿X,oU/~1<#6mG>yfer֦`?JR:22266Ԕ#  jbŊR455Ұزe :X[l{ x_ôRmP /yT ~?:?,Hl۴b)}!]I '?bYFYLMMIq7rSNffS>Sk4?TVAi644}l6kFZSao۶m׮]t(m y!(K,^wuk||\gE ذa:@EnO?Tof&fM6)X,6wL&h4ne˖% Ji,;C{9BkXr^SI!c}:D:DЄKsO|%z[e;#6M+}ѳNp2[\"ϙW_ `ٲe|~ddDm-Ymao-=̭T~---O?R}_Ts֭7xyV_\ru]vmݺ5HE\.j*M-ZiDXjVڼyeYI"e_={T! i2 055Vyv#? < i͜SЀSHW3^9U7jbbu}zNy\?Ӕb~>./B`bgӦM\reA6íimmBL&322WA̙rwvi_~}4MS'|R̟??N?ӯٍض3nE D4SONt?>LA0111000888N/:۶ P3x\%*s HYfjjjÆ drrrR]D,ZhΜ97|%KzzzV{{zJSZV9:@JEo| ϩvRa*F6^8Po&FnˣqZ{X,ՐW4͐1Br_x/L&jjjNϸ ͞= _E]~{^&Qd.@m;J)X"(֌hGqzRn4I$jGyRZו#a###Κ5kٺyر? 4=5]+97xG̕w,P{[29', 9&{a/ZR |/Ofw5B\Fa+^9N3~/.Wɖf?֋bʁu((R vuuQJYU?{-L?[>9TĒN'''w۫*6lPZQ-ZHj@2R!(x}a=GU*7o3oywo)qsf_b`)dߋa!|Qdapp_gY z/yђ 6^~*geF100P(m".Ի3pUΌH:7fe oNz'&&u=+)d2bŊfAggF.?~KKeY_Vc =̗6=w(Ēѧy3__֖̔:ɺy]A w!% aMZmO\\jq̞֘M0ys@4~xM2s3&8Hb 4J200vwQd_UW}m(V\p'[*{KK[%Kw}srGu4M,/~ aXf/<~_ 1Pvzeтr^ɎG~iӳ-t,B-1% qH *W50K v̼kn{ڛزcȏpwgz{rsz9?S:K#RAL&0ӬUvJX,0 U>TDGFF,Yf͚[nŲ,qԖzmI'OEJh۶mS-n- þX,6>><{N[QV\xD;Int߂!.Alq@:;#LaXe#?2box] {ZPm jRU+ S7; IY5-6&*&}b(ⓥZ.ɷ o>kB $PS9 t:E$ɑ6 z={1 S|>E-YGٲebxxXiZr|p*Lfa.]s~m~3AW~'^I ysV1~?˙OM1sV-OK @)c*OƫK vuhÓųRKf5|)^cZtxPӆJύ7Ot:xir5K!K$lSt&}KB1ӇRFC2kB4MBarڵ+|gVYO8?~֬YwߦM|߯V3Nx 2|;wܱckoobw}J7t:jժL&uŋ?DNhz)&M7}"S0 lk5Yk[!gYOh| Z3fUH4.ASu1^ALLmvglb| d6B Wq,{zgv&r93}+șJy-\p(̙͛/}ixxx``T*93wEMLL}㌱f8 ad&&&?(=Rߏ1^lܹs+JV{7oެT*u1 y晣>z`n~'_ȵtq$=v 7Nd0px:`@q8)rh4j5OgwU\0:FmƁ&~GuԼWKBUEUK5T^4۶9]QTcccX,tuu-X@Ӵo}KOTU4;P(x-[lݺ5J~K,ikk뮻6oެEJi>_z2->W\ϻVCgɵv b67],}\1J$iٞܮX6idFI jȤzg{d´̃y(f*IVJh!4]2lkkjFQVawbbB!٬v2M3LٳG`5׬YSoN;'Vrk…?fxxܲeˌ\JP8Աpq-X@9CB{V#tN$*WNqgm\f߳,+ |)YvwRn(L p6llH)Cn @e3JYFjϔGgT*8a8e2b8>>N/^\TvYL&=|atWZՕd,z֭[7sΚ5K5֬YݝfzzzJn7-@a[Z '>S;4AC1 -YۀGilp.B &EzfsA#00k*<G M`cD9=&@8 )--9Sl~!je?E dh+QDS?y%FP,EoMM`|AƑ e }?*Ψμ z#t֑rF2E + kM˲-3E#C2 >E: B"2[7yݭ{ YÏ߀Os?y۰4ˆ܈s"I$&$҈H#, z(~އʟО-[D2O&ɴcDDE.} Y_ɻ+u$f_ HyH}@>?B !0|2SW-sf]ꘝq_ ~EѝB-@sS#O5 kFGEbEDWW^{ N-DN)X%`3~YPKxk&jE$dMD}^Cf}^XpQD8`gA4&wnyu Vh:mٹB*f ݌w͞7{!>(rMS-inY3syjO#80x̬ϢH ̬L[˓'L`HW5(B?2-i-B,;ZrTij h,W'A&* #B|^}ca @@?Ҝý~ =?} mۼ.А1Fn&ARa#A1& ,:9!B^gA h6e\\9n-dy% 5ٖF-jPj5o=,+n3R (!Դ( PF9J*#Dn n3z:5nب _+$ :"IZRۮ{~d| 790EPz3!f05@O=*JgDZ9gb$H.O ɫ>DT2 +rMZy~&,'HrESx _BQS|?~% BIV: l޹kn{'2sOyI̩be6g/|SkA@=NN+ @2,GM"ȴLrؤ}k__v6!$'2,3N'C( . "K&ֶ$"L$j9 dwq o>+5cJQxD9E5A^ifu3"*(9BiZ^%xi:J$2AZ['JJގ ۔)TQ s 2 }6{~Ͽח?xcxnT<ќO8tsnsjq84L"qP0MX#@w0~uW=7qΡ21x#PDӑtJ{2.vcDpM9",7]3[7>sx:/[:V&fDzl I4"y8A]DePeB 7ܷ HR{(@IT2R,a7FrсL'T8X8NuLMȶQ3-13]2YK{JEŔ ɑeM0b¨*J PrpxhA{#nZ֖?fMaFE\K%,,T>nk6*3<M4!TKخF)rLǷo|̉Y]! {܇߶vZB*iI$S]^Zmâᛮ`QwFh媣/%v` {9{mʹ~gt1%.mxCB6Bȶî̛?Xr衋-ˎ(2ɩ#L&.[p Њ@T Yk$pJ-]U$15 G:|㹌pFIg*+r 0¶e#!(Fwlz?pKͰJQ)Ch@N$>ԭRsbiشrRkvV72ÎEATCFi 2oݽ{-= BC4?gE(๮-<#\׭l'v,=Eb4=m|~K-mӔ"P@'FtʄbFi@# =#"IҒyAq٥Woذ|GYZGRX]h&ZP(yz\5j!tI T<֯/ʊ7g]6k2L_2GC *WP t]ӂjO${AG:^yAŋ*> @J|.5E DܤZqx{|RU7Hk4nf$2Mv5[H(HN֒ebz6[qP|dGr۵L$+a ^2rJIgHؚ9ුj{\ 4_vnzz傹G.YhYTil|PmZ_ȿH!Y" 3옉vTf~ .kl@G޷>Jƞ Q(dAOVz!Fmt.@C3QbzBx,51T?ږB'JN;AgDX voYC'"lE"Aa2uK0p5d, G˴Ѭ놁e q-N,}yZ}!eQBɤl j:"%ldq-U# |lK4Ӓ1޸u{ #' )ElduWvXx  ɒ(&1x#ObVlӆGg\ /5%;"."bS<_O|sḦN]*6(}y}$Y6p2ɵ!0ɐJG{ʕK꼹Zy]aB4x!lGP8Da.tj[V-w{jT#q3aeP԰'tDC&"*D܆&4.ȶ,- t#@FqSvIgz -k3 q9LxnI v=t-h:T:@[b57ݹ/u,{E 1֙ey&xroFQ#5&PW, Gv_K* sF9ᘆZHdqonM4}O!dS'sS0A l(aYK<@fS ߶Lҹ7p*8,06X\+7Da!Z `ә~1+ jˉ שkl:. xH&˓ L)ۢo !7_ }H蚊ίtUV@Qq<TѦ^ؾ 8F(52 e5 11a8mj5m%Iʱ*y<)ܘLw3Ь?}gX?tR&BqKvB(Hr6اA3" +s+O;GXK@ ]#5VԞߺF0.8rι]))ݴl,"0w!?H&(?~`A~2I}(\0tnP(o1ݓ?@'sGSš0,Uy qjcŦaBF$5,ȷF̠.YcYP.MC,d@i$qBօid nJ ^6|n=zWGsn[Ozß>; !( ʄabQۋGRrejسӶB DCN^odS=ݭdBpF,nQ A n̅QFE,Y4 b(=,XP35+fm] @3$ k艭oC,qL*Kݷq[Fvf{Z+:6jX~o}?:&n㭓cN?waN03ґn۳M#3Mߠ%3?LSwD$d²l@kjU8j&Mnxޔ]gt؂~Eӈic423׼Էt,w?Xr70FՍd  k,D(^<|.@ OڝD"f[X$TX,mI5g5F'Ntqogk:&!tXfD"s]ՑYjQ P=u7nxv}1G-qˡ jBĹALRڛ޴s[b!-NV(Ǧfj *#+?[;?aǮF2%[ZG.^4BӨbj֒JR1u@eRW@͎J =Q2ha2l&N&lٍ֛jRu {W-lJ^b% $% 4 (6e 0\'0- H[vq :xko.K82{Ƌ-8iԄ0KӃK:f* p~ !Ji1s?WxF$"wsNw(|߼0jΠ8F #FeO ,(MIeGFXu;t1/v~멧1=ol4K( lcND{zՊ|ӉB_x*s҉X9d@BΤZ dž ٜ"<&$LM26!e N@ ˢLBt|(H]ޞR#سb)jL;|{-noAQ_=iٱRSpA=vh b78bsmF:thZU4c ]?H$VUZ/{S &9}B\8<38T G{t]o|p r\7 %5H{!wĭI;^H'k3&7>t\]CnP.i!N~M2xPL2]׃xtfe" AXE G:9._`Pbl @@mM<3sN;ydk#R,{ϣzYǬX4P$ں,SՀss}׳zf G>HKFRDiPpp \k\9Q4 @gd4$(E8~ݝCuT' Z$Z{1qŇv/ZWӀBRR$_aPbns8n`ɡ\*`iƭ9J,FRi:62] H4Q@QMNTFfm![&:&aJpni%Pdj:2 50lp.|ɇ2JejDq8*4$P Po E:~,fVje9 4=]nT}yQǾ;]@R}q{=޿}Obj_S}lw'#L;^o6=S7tlCb;rf@کA]A ^e 2MJZ2^ 8koinqRQTȦM]Ln}홶ׄmyA1~igvC쬐dJ;HZNc~>8T @ D5~ LC/O5-qMAsO,Hvc``9<_k1pdA3M,|4XsPRn1Ć\9!&iDK$vuő/y?7#XfLB* AGб?q8~c l0 (@Ȅ  M6Fͯ.ŗ\tI?OJ;auw֑egxwaæ9(þf v,?H,Hz.85oiGb whXCO'1:?=dYAH8h 4yl4\!0, }ѡg@*dPzi"g∅qB;*S\f9(^Q6٫X(P*4 ׮z,f1i,1J͏my> 3P^Z&dĒz$hYt%M \|vC AH)`Qǒqe #,C@K[-9d.BL&F1h貮fa' #ƌeWsAS2ݒusA8wB1$!' 3HY`JW# {$@]"DضcԐm=}|k!344fnC ,69 RRID]hLS<chC,9R4AT=Hxy}k},31q Fuכ(]MR#f/<0-2Y4™K! F0eCTwZ^ԗmipAv` QjƬL|_۽H{6V[1Sucp! :JCapZi-u |`K(brS}9cw;iB ߅l N#jLcS1#iz"ӄ:T30$!`R|W72(uaf>`r4bLmҁ͠tfA09$i\2d5.ZrT jhGI[[#m֑!ÄPx2-'3XhD)gM+V"ÊgoO< `Zט4-@wf# I+KVE8B`70`oMu1WMkl#CۖRxP@ 0 0pBX RrҸP ZⰕYR[LD:.UF 0.T٩PEDy8%CRP+M:T{fhRdy0128dv< -f+ZCf xc,-r"Œ):CaN2Dgo Jcd^J5/ CĽ7ȃ OMO>nEXթLXHdDxšiXI!"jry{d r]TuC,Id +T^!D1ڥd4HK6~vƉk.|!L ZംrHp]%j Pe2RHV$P5PX"}3sr%$!pQ 0>,53`uCbq]8M8 \m԰8b]4qv̲l-[S럝60\/4-աOIdّ9 x^".$YΤ3 "7T`-XFxi߬v%n+K2 # S_1Y/`eAwV6MDzL6 W -b$"{>BBFi' zPCM?a; $Af!hd!։@dP£L͡-*;_ņuGrĒfeLXB0D} S;Bm)) k"(B[% HC "{Qi A{-)-FUC<Dk\"?OK\jַ# EACHQYBS.a\5M[cuز  MBO8kЄR$†=n!dgG\% p KVY}a~H lRñM4#֨)J1D2#ЇgX4Np F(kȥ;W+ޞȕ?Y؊gL pW);RE>|:aϗ6u<~> $I A#P87 QJ8.[NJYMxiLp*UOyk;(tM{Q#idYABC(\2``U+`h)`ޓ hkNw} q۽=٨ﺕ.MgV_|5"`JÁ%,1| d6ё0Mʤ N FH[ P@7M-1ohJ꥔u?\3 tTq ".! 1+ `#jiD|u[åBM0!^d$Eb(Gbcyeڜ!qQ47 ,3'6HTm,Mˈ,ҰVe`ZB.K`m0f蔛 eX&xCKqYD((ldxQM):Й0ػT `(Q b-sV*KJ;M/ 9"b`?:<#qӈ黌E`Bfmsst c*2^` hD *oItLf#P8xѱYf8>ӌǥ<`&C%ep`18 r=PgE/a⹁<6r 6CGI\6/D㱄]7 %ZVkf! K7ufYֶ|X\Y{w5HJy1J%(lL{kEkUH&l65Ä#Hym=7֮^tvbi&& Y{Z:fT3NEMw?_]}g>_@ʀ-N !!f@aOIRAcZTޢ8Hz Lˤ0ߢ8753go}>Q̥8(Vq:PSOHlm3l{μTS-Nlq4id9@yn+- V4r?ux& 0SPa}IrD*e!e7'$SxZϗt904ƣȂe'̛7Gܩ7^sԎ]۫ GDa29*&Abn?Uea7駿8q+C%[!G:<%5fI9]|6 \k dTS.7Z|:u)'wrdU(_ٺcH50uD՞MWLclWG[OW9hb)% !0 )pQ \Ä%!|ه.ND"T1wd;G̀5l4;ڑ`(zDN4!Q3A3p5NB  b\m̃ZihՑo@FjT` K(81(,vX,F U~!AIQ=;ղiN3;@Vҹ+iT'JuPhÂfmUOO^h󹖍'cZrg!Ff}xw-+^E ǝ"bǞ|3>g߾x/zYOLvttg?v_E9)+_\aYzL` FGP j+}HGZA!ZW@;M,2+>UzTt jk^N:nȔw!UF gLkq vH[%K,`DX1 ; jsDmtӂd0|Nh\_2LH?p? TN95b*)Q7,"VF 0 4;?4-Sm9T*eXרˣD" |qe薅(΄tpr<>>rI'ǓPV3̈́&#s.ڼeS6,RoFam iAd-Hm?Zʹܦ?tYXB|1>p(?NX޽C$/]uͷ^z卉q-w j)LsaZHXyNM/4+6VlPT(~639Aض-O ˘4ϖW`}m(Qzy2OWs)@ h嘋1 Yz "=]`V<3fRަfWUG i 019U,|?HӱX2JCxdjSI 0t9ߝ3;uvSaiUrQ ִΎCBS(+o?ڻZbJqÓoy7rNf#o;d}η?qC mhD@ Au%]Tr=Cm e JUNT`R@1Bֱ wic!%/-*LŸ˳"EŃ`ZU] ]o:Ry*  f_#ze ^&b"D̯5%C;cIԶLfZ ǍBVmVrrH[g&? -?L2Fv&Lh=ƹsЯ7@BT*&իL&S3 [q~)uW ^Tu5LؒLJJrZϤR F 6;ZF)EU)\o|Bҵ|^ h5cM#YoXs'kMm?Xnښnx_m6,Sșޙe<u4jwo~'.[7p=p[7> iDu?1,˴Y<()j#e9s1)* C>H:$,b7;Љ % t YxE|jeE! t"oS\>l/'_9Ͳ{l >fczC>Vst<)0 8.>㩸N"ʄmf iX Ep&4=)5ev0"WEB4 SÜ842@dgO_* J@>xX`,"x yc f?"{K<MRJ[Θ+)[[<}X![<_;SX`v7X&anӬhQdc"L:44 qW4 $x4 @`hQ\i2 }ɫb:0R5 1GjB d{ȇ \0g.$BXup"%z$-5#lx$pK=\DEGȖD42{uwf`ycvwܥ#Dݕ@ gwjIıH]#t*WD z"j0G'i nsA#ꕺd-EeL#B6]*NǂCb,s]GnY6H JR=5f YbizW\P]1LcYZ1=`ÙnLa*afX$Gša ps A1ІTvN I Ā^;f\h׮o|矲9̩恱O=1@Lv5|šAe%CH7uSZ%X!8I^5k-5tXhKԎ,;;|"7j^hiY(-=qm[T 4IENz,2%#>gZ.աqO%C4aL[nSu1y^ETSTհ,o[pmǜf(T E8Q }!L\[AR*D@jFm⺎n6,Q!rBg̮SyNuv65;:0 $*8ň f8f(Fj( ȣZ[xs<^)j zkokP , m-qtjζTwWE 널4($y07]{~L'A_k47?I0悳!Ђʘe[E4"A' Sw(dfXihѦmۓf0-Mcr%P˓l:1PIDwFLcn5`=[7 ^BɤmY#ˊ! p0%Z3–AcWo-6Y#iW+r!iN'xX);vLT =؎;㌎C{g7'' w@vO&9TtBAAYesUE6w{ 7cK1eV;rq[?b0Ҩ5_߰9y}}&dR(e -y&ѳVx? N8dh }q3`'v*a2l6qFG5<ڨkպӬNt2)]u8ޖn6tA04j@FH@( ȶm xso{luvaZF"!b ֛ cu@+hϞ\>9-݉J[. )rfBY8 xYMxzhh$Jf2,eE\fn4IւE'w]k,U>My0FAJ 6de|[W#ϼ_[o?QQqXRm0\O9ا7>U-{f9|𛡝_2֯&X)t jg7hț͗<̤3n?)MijcV}cfE&5pq"f*\[O[ =5xn7§߻sI'qptU~P#la~PÉG_w?5#Id~ +9K*s%s!lYq{mM!+`Wqt|bRZFÓÓ!E +!T܌+L n㑇6:Vj~r>85C}Ce|_k̋|*nȞ'}dK Y&1hg<&88U\TSFP6&8rm3a<ҭVI߿}msT]7cBD,t5$ɎBڏbH/@ԍ]w>\w!4*BM$ ܖѧ^0wv:q9\|N_A}VwޒX0 eP+ؾ 3_uVAɆFkQ0LS#xRWu$l(Y21WZH.UfmΝ;DwtDZ J@Ezk7K'̟11?y o&xVXZ"p)Rƒ>5ejG5/UKLXܰm!j١O=qpl´MlڶfBB0u'J ]G.i:[ݳu{{#nxG;oo[y`٪06=ozgwb35`jBLHh%㌁3v; m{vm Es D^+Oh׃@Ыl"@lM67i.\?X@cbppCzv"/=z߮OEK]uҬ4Ąx>EXD`(S ]:X޹k`Gs纮F(l;鸉W >=T雽Ġsm 4c,be*ѱaBIQ`N!T:9~bBcVi6˥R d"Uf*7L[Ԝf٬o>rnXqMxÀ&NGIst RIq&4x˯t  H T[V\VYZ[%e˖lV)$& 23s~|Os;Z ~'/˳7(2њ{O=+O=daV]‡eQ26Ve1`Z<'殯wzWϭ_BѾ?GſԩC< ۽G$#piQ'Z@i-FƠ Z9Q1&-P@ Դ}7z=@$?gيb{mM띆:~τaEHW^Ʒ6vh!REZ(2hKMQ0CbPHQ{tɥSO1ӌp"*DLy2q!`}.hA}kOo4_=@9 \=i %8+nF.+MChg:\ 4(g9 ſw제#BW[1 .#(K7P5q>y$B$E 2cUh7 m7kZxu-oƕNw._ܚ;u~"*qt4e|c8oo~@TjCPeeyQYEل$pBTxJ4+.u);1enW*x0DHš8) y3 RťdOk"Ej䏀x-,TJѠ/GrYxsrЇ|4+tZ #I g'89aRr7A bPgu} ({ʹ\ٯ(v" ("izk/3iQȲO959(\e0Ž͔(k"jm_؈3 4w/kPi:,O͆qG J4xמϒijq v9~^H[g@bI,T<2昖W+aY=5(.]T^4Lݮe:,۴uӏ V@nnzMjJ((m4mj  Hȭlv>[nS镳d. cK~o~~UzHJ Ήbz}S.xf/hd]-5X!`aiM`$P EXnrx1)ho8>9pw{k$\Z^]5opcpR9wmCUf|\P뀆zw<߈Qh oEZNI]cfb ʄiҊAɎɡ1W<3rDc+ 0f<,boookPJ pN*haV*(pl>P?0\z7u]# A+^huieg{l70p*9Yp4Ipr6^v2|H`k &RXFC )AJ1!@ntrh?Pn"Ԕ =9xMwcJ#/ӽnou~'?^s翻2ʂBT\[gigrGᓋTĵ(Wj"zW' rܚ1Өcw,bccj666^{_}}}}<id>peeٳXYYqdmt~+sv~w{s V.ɶ-B=-V[7]s)Ѕ~D$mp"8DDjo%X*l^FՅۼ߾x*_B4bXȠ*+Q9\*3V/!Iяx*#8MYJ&ű#5.JN^\F oG>q7?i{KqwC=unf} ۄHY09f04F>B!˹U흝7_z^7 Xn6;I|{0Mz*2%4+VsMtw"4 9Io&UՍH\>0y!\ ㈱A; 6uXTx 'QOV1͂02?}Äʯ7ec50FEi8,͌!R2cxY";||WB=&RK[8;)h=I5:ne* 9 t[yA(iFc7+*a%9x(%b0&2/SQPE{{MIެ}Q˓ MNK ++ s>O?S8~2)G?Y x Il*[@h #pҴ7j6UTi=`,<<<Pj`(̀Oy5<>sETq=\q8.P:Gtr ( $rY* MjrE1}.'#quC̅P(onI|\UCҬ+8׆T3-Uw[<=}QT\ qQ!wןi6燣.QE`Y[oׯ۔J"t nrMgCYu}Sa-;w~>ϯL%g:SlUgK¦(K!3B1a:nP `HvdYvz[4`hNqk8y !L}ȞmK D+f֢7f$4(a j"ߏp+r؊FB#"|2FjȲJ[DxɆI2 QhZҡx0,Qe6_"vIcQRUCat[V*xatJ?V U O9AyVhJGc X_xW^9w\+˲R \1@GLRn dlBuhP8o__<|tOCw$)/Ji6U(nEe0~ TV$m-v^@ N`+dr&'(QZ Y^{gt:])^|Zq3RPV8 |/Riw34nmm}ssK@'>m. tii\PΓ$\Al?a;ZA, :bPן,YIIn HB ?!-ņE{8 0)gJ0=n+ B`gc+X}ZgWFXn=Ne&.]|VI_ ōq?as1] d@ȍxd<6 g͆^C^ Rz&?ud"3k7AY 3X\М(ꫯɟ:8\a*+~Mp@{;i`ŮF?H(5Lqih@oSnwJ/t%Xh6qmDp*H BWd)0+Z==(ōW#z˳25Wrΰ=nm{%nҐ,/ Eu uY.̸_ %[\$i~DEz mhSo(7ɍС0Rf&]F9 8Ȉ z핣T"$Q3:/Fc_W~-J 9Yn8R}nn.jƘvN|^n>SiFQt^>ܶW0m'v ye)蠟%JY`En k5,]`p8 ^ͯ&7* >py!Rb#y1g}jp0==%2VW iڊw9PY֋p7a0|f Ca.וRT$ d_Oj?jDDds;YB<]kBGҬ.^648(z+še* bQ%Zj\{Z2Oi 4a...j`0(1vСu󖖖/i60 yO|O>fz6͕g~>P" D!S$):&<$!jSXkl() Vt{ u􀂴Ģ`AT# „0ia'$Jr9{0w9xPHv}|x1$BG/\RaʣrmRy>V2 N=K!b/|kg՝g)vƟءÇB6_};zl|ns`0U|˨fVkw]B^ uKגSKϜhU#Yx[%wBI'u-bDnTՊJ8&fn)>\J^p=k7⮈B{7v5ieSg7,,,]@kUJ)t:nv}[0;NI mFPx+s(aA#Eg])쿨~b.k' d`UC! Zs:@g7a  4glkWUM,ScWbd(fvrYe*p^dTZ 32 ݴF=(<'@6}B-QŁ@Dnu~bW1RFrѪV;w- U*8} 0o qǹ ~xnkzZ}l6]FQ!p8towhh8 i_ T WDrۣVw{=t}M#$EVƣ\H@eS2EK0~ӓ/Ԃ>cer[xZdd0``E#Zaģq}NbA>n3U0ݑȗh/_@eI-4Dr`*F ‡N{x$/TRSHO8,xkoa7IonJ_KQQ!HG+¢hwͱOpgcD-VusWNNWКSܑZFє|Z(ƘEWq 40RaΆX$@.~+<R_{^+ʋ|dƸL 2԰{E|Si"@_ñ a+M/zJN/m4fo_}.Gq9}f||)Zh0 D[|8 wFm}'̋qVҲP1,WpS@]҅ݤw`8,˲UT]dꃾEQù;}ۯ? |/e!J0j 2Iixlј$k^YT2jQ8hG.hrGB3&xuy^T>͒wpq+GQ 8 ZVpa~\?ΣxZ%݂1\|Eq`ߚZ?)9ˠTb)Vs9qArGElv;KU7 RQ9QkvÕ7vWÂ^Ȍ̈!> >h 9{ڣaȲv5dǣJcNxXX==,~`>USJFA#k=z"2)F\ (%&. GE#"1 2:UQ`jtGnVcO{rU_ BAQ |X<SN\#VU6%̒BN_żHb8ka2 .^Vj7 Vjٔ* tPTE{@6E@{X2T1i S<ȡ9gaB>(C9X[-( G(+_+t}^ ,Dy 3"h2qۂS8Ԕ +ikVJ)}p/^Qɯɲ#Z6b@i@{B̐A=^ R5"LIJf!%H~H(ҔQ=f DQ}Ua׻th4Mf9}|ޞ777>OK葷gѰZ @~d2QT|VK+/^^^v6w%ܓLj(.JH%r?t~ީ&ſ h@')d \ASm{@}\\ ȘW3~0q@>gv=FR·UwLww`~fv?'T.~.~dP \ Pi+%9f_*4oѼO~#/q˺goJReBo2sCƢR "?Nۈ9N^:exaԘR/!~;WAU On\ f!^P"(#Cka1U%D /^`y2@>D9~8CHd@ ; RXG5d }@MRs:ӽّZ!c!j5,GkZER災OS )vlf|[:Zr1JǠ ,eLNǝ-_*G*A/5z\Y6VEJ&cՖgn$W5t[ol6Fض~`rU/Vgh.]3*W=̎bH% ZoqYqYhUUΫ*/ -1L ݑ+JcT^{c+d^d?*:*6[J]"]xDT*>ظ;AW>1w"zccfz#R#NU 1 %8I;t:.wl/*g,GXŵدD~MHj)݃<6 "!*AҐ02tUõ~o0y&YŏB?xLFf5yx ur~ѼQ1$+s ,R-[|<ꏅyU?+@_{4vP@I$yYcšsWJs4'z[L\yo\e} $Kkמ}`|iquhP 06󽎘OwiOȷ^y9I\ۉxL3\i;[cVSH;_u\c"C~c s;c~9'é.h4|4J)5 =mW''(͍Ca0oc/EJi8q~kV4ex ߽Ѫgd޳?׼qisyAB^`9c*Rp3%ϱ(5}0MRJo+>rΣ(rypZͥVB-cj958cqEKKKanll9rdyy,Y,Jmiq)7Ű} Bj Rc!4hzI.)9_b*8ETP^Cn G4< =jB2`Qꅊ~c9+!tj$# K^h$-`e$63uMl4 4(ᰫ T|_ʒUzZGsA|sJH2":;ul ô.G K#$9*7ssKݐ,e@T>L#Ru|e&zhktkceYjE.c[tOQ}CvP)s Bn?nǭ2]WHGIL3Xl5:;;nZh,!UbYH4ZV:0Q ՛kaj%ؠP[? ¨HcpԗMD 1dڑ,i/!Iכ%+S K ]޹dό$͢}AdƬdc!H8@NƒPc2PGvb#PYg4zܣ+_uO[Ukk\l|ލ=#cvY 3׶,8kfyrJ6cW6UBrp.v Ju= '8ry Ԃ476%Fi4"0K*F' H"ԧ@0va`f ]5iq ,"iUVƣ 0(Ӂd~ \NIWC_Ymy[BH"mean/CfGr3$ĊTW{1 SǒQY^mlE^f`V\%tyW7/VncN~@6t,bFÅHk]V.\qHOHX})PµB8 @`0p)`n*5ggjКp5(i25c(FAP1FlO#q5l$#%Io|Ո楈j Ї>@h/9@=o!ԍh kYZWl$^,MiAUJ.<~o?v3[X[[Di@70֜ +qňOFעlQ CHSVXLH K+$ J"֊RX 8Ύy:˭Y7Svt^l6]6玎0 (r+d 7 /:gCY"zx[S ̅c?"/F9pHY!qvT]a``)N WlXAabg@"ZZyMkGәVTN-?{yۣ SS E)*P1E@L_ZCw!ơQ0mrYm40nm @J .Su($bQkXv+t:~_7E 5TeNԱ9d䲂zEN?2L>UуbrRR$HjM!<]q qS”pj̉e&EIN@+LLT+J`.[[(s\'kճB3Trt.`3R y)3~sQ k),3(/oQ ``msk \nĈPY444{X{Vb]JY )!G2f WP~bn`-΢FމaY8$hvrZO}X?TjVN;zk\' .nVb%tteY%G}ڵ%;\՝W0 yX·:M"PX<k%@~RHcݬ7 Jt` L B}}/o48jF|C rUbBGznor^#Jѓش}8}pp;`q|m]\*~ ? b16P!m@ FVTs6SNI,B`js Fz U(Pp'>n=sTl^ZAUC243h~+  UžB(` V3d.^9es٨,/?{gVՐ*opcCzz&=4tPʂZɌ@S* +˝WHP qV-Z^0'#]}d0\jQ#P~! ~(KPh44lf'N|wOp~W<(F8 fߏ DBUt ,KS0X7vnl":.Zs GoեOq%>eZe~_Gij]"챀BI*38k. 2# 9ԪS*0㧻zee% ^x!TBdvLǦw=`7ekt˟e?eD?xJ:;;}} |Z>XÀ9;T*YJ B,`m4YV2=B4Jq9̊;[ pR!k/DA>'e jbSZY>[[YX7뵣s!gFC dXȀ:GG6{N2?.( PPl;AwGl5› ijGV ; Y!Bx\4Y%Ea8g|6.<հPto\ GV*6Bb)L3|)M~^Z__|ee^g3WBHRq..r3ە;1ITե%;ư;fCymeݘG6q0HQFt)J,4+o@|;g(-CZiS&.!vh ri$ Rj a^V)-H)@!Bh+DQQas:LPzDUBZUI}ms>\xAQ% KF2Eg:Q(D'D|mJ-+ 0Z tM6خJjzƃ,h+[U߷nA;J'|r0!nZp3=d=+c8q-8 0bW0v]>}/V\gQȣ}h{ $Mp@ SZG@:6#D,IV$g(EYH2'ˆl4A !e(ij.S$Zl[>#QgSǗ;ifZZ_*oB5#R;rE^Yjq^g8_P_?"|N+QI!jORs/=GQ/Ws^@V}Jb?\/ԫhبf nw}SqPtyMOGiwwxN%xVp擮e6]9t f!s|~P%7_Z@ ]ȃܵs(E% 4yP)n5B*(JXICC(`K"JXV"8csomldYZg0F]S'hܷgNn_~B+)Y|~uy~2Z<nlwZc㍆a~%=q+;೦!fRKebHVKV0iXdYpb7\^Sԅ8ZŊhV9Yh7mimtit~ʛqe!Srj9ˆK^p*o~Of㡱z1VobBBT;f?4$ =ȇ8MPF̉ [yBBphENԢ F\*ӚkiMSg˔Sdтge l,:`vd͋o^582i7UPu,;(JV<>MB-4@g|cM7Ԃ&!D Y) 'lM`v׷QPՅ31&,/3EE#m:x1;q8cP`tzN%{󛚐WԷJYs.˽ɅFI&ݍg: "R)֬.Jipͣ>b"y^;}VbN @hTX>E^o\х/@=t8>x; ĩ3+Ͼxm=L]g4 oB'NHtWNdj= =%U:(jJS$JN1Ӑ+DX4&`-Zؠ(CLB!!P`L1GZ16bĀg%m&pG,E{hE>!wIsE;F;@O˿}۽K[|;oXtɣ0 QRui)7/7Va?á9e\9" Ul ʔ6Vu"01sVǪ|73f*p Nl@yL'y0'Ox?^0NK}Zt_yNԺ1S&v@og AȄ~jB'y &ģ \y22ԣ$ DUE/q ACA.|f1DBJÐ2 YQ y녗VRGƲ,4_(\Ğ)'?1ow^vާ~/}7v; /ĕV3a\0e!]JK SKQ,*ַw * n3A 񀣋k ]Dv ¶=u,e::qJX;4MRL$㩢tu ܟ1u&`XNI7s; N,6G r:֑+WzXiyy5\2eiH< tߣ=Nk˩ڟAk3ߧ(N"RL\*<1;ޗE= зM\W/N^z!_ so[oٟ/Q`aeV>|2* )0TfI㋧dڏg,ddEqis9ZJ,"ERO"gN<Z^mAiΝqF>-}NSjӹRd+."rBq3pa]˝*ӥ5 ` ~)9d7zwVuKvO@xESJ!sZwk,ժ 4l2YʁH̳$FKaTrl Ri42[;s,=HK<:,x HFUZ=PR ?ֳԓI;Eovݚtnase=hrqv>n}0 `Tђ0j>t̋bꁓ^`g?rKW(ttN0`n`?gy5&'"p :[w^rCk60E(LqnO 0.peYVH!Wr[ai+1!ʎp;Z+Bi(< P|v/v 7VшUeG_HӾ1h<WxZO"% &o 0]^)!r@,Sƾ=>XEtϷVAZ~֧<GO?_CFoo,k{y~G,6!%#G {bZ<^%N4<3 H\Q)]hAO}ŗ_G@,@@i%VP/· zƺž>U&t鯃L\?ߝ4rb, ]6< pV] GN }B}R+TMLi^H&4sFD)G,${Ar4^֢JkZA f_j%/iD4c`!_&[z0ݎ|k*Q"s|ckvq ŵv?m?O=p|ިD(rcl8X$FZr(>\oei8UȇJ '$IG\bqu}Ъ^Pc) (FO-o`. [tS;0 +"3b1&b<;N.-nZ7UtYԬZlp$&!7u!,Ui:6l]l$+A@c)IFB$z91T x4ϔ3@-@-Ipim1Hپ~i(}Q_H$I:@\]B0 Nإg$"< :zE5IDK=iO8#cB`V (h?^߄t7zuA2K }tOW[C@4, ,N xϝZԟ$Ϗq6JjD}棏 )Mrc葥GCGvy\6>)<EYRyXB+ Υ[UW6[ߍ9d>Ĥ5o Q(izT[R!~=O<#2}TvKy藿G1gIZ7χq<Ƒj _ (GIs6x~ѦHqjZ0Bd~$Mfk?'Qx,ou-H= KyO?a~0_oJZbs66fsZ FMJu|#?|vt?@V6\;B1h~~F#4rkʕ+kkkqflXƕl=|/nx0@2;h,$Š+Y< Fڿ8n+ȎAnC=`+VhjP̤T1gz:hYdY:_vҭ-Xv5moyI2J%e{z`'{6ctTp2PF0NR h#[T/2Ew9•Ì=S+Q[-{凖WLqm//Gcepo=p~j.(Qk;{Ñh'v||Wlyן}J<ͦR^s W槈Y+Wƙn.//c>*eYv:vjp0\~y///;vjVݢBj+%_FgQ }@` X1ЕP|n`6m0.V2SMHis_iy'kB wRqb3s疎V=Ch垯 '^N4>֡eAAQ$/S!IA oCH\V~HȘ87;licdl5`j@D e88:}ofw^~+۝xhc8#yQ20{FO_l r16oVXHQHŀ<9O IQ, @ ַvv#EM$V{=ǚ2J6;=AGm]x1tLr@q0&:|Na*2Q8tX+Y ך_/163~=h:FQˋ"8 ? Z hh}{}iuyXʝNߕXӠ?C7:t}t/r(0:A"y"!bf"%$IVHԨ&AɁf65RSꥠ0tИh(LDeC*Ǐ٫Ws A30Į7{3f9J ǧ@ ]PV61o"PnB J* v9\!4Sg? K, @ E76]΁*wx1^\Y ށ[[Y71fa:Fgڿa(&By@,P⠘0ɭ;Pkn@ >3 ^ GPN`:N76ū:2[o.8+,eoiAӢTo&$4 ;Ě}e\09"NX@ Did[e:Bo>ጂ/vguS&zώp<ϭBǎdHCX{|=>L6$aVߐŠ"A{Q ӄ!$b3EF ,ݭz0f%FL.@$ԙ썷B[YDpfؠ`m~_(eD Uo PVm=T&-O; @KؿLa_A iiAf6wMwxdE5a4D/lV :% _zqm; 56Svmw&'#-M6wəXWnx 0Q>!)f@F z_k-$[$ ȷ| ~1p(Н@DD@ NzV^IVy 4T*XP+a׬=Q \ZOm=7`7}R~a"T&&.mթ"Y蓰P7On<;6௼y2_- yg[i!w9[f}\.ubny35axoj~awv=#AJ(H?3 ªC 'kōqI%L175<p 0 *"*J ⌓.\Vx!BLv]&m5c7,{@m /+Ae.ځlEA1qc + .| yk1w¸r><@N~r1uW Yn%x{}ɰs="5Ʌe`lv_:[dM?osyGX<6pK 5\ؤ= OjXR)(֗=\cLM۽[ <6VvEBONS :P~'i8\.ow ɰrIs O,]m?xAX=Pk%Ac<{V<>&ӸcshN@`Qu[r;.6%- *R}1G.eI8o}6riZ۾ij[@d|RG;.H$B{ D ǽ,F>N9)  tbdM\.,Up$|c`iAt V"tzL ? +q#a4dIH~- <jl:6nws/6`ά/FpƕȌC&7Ehpbo=tLylP Ag- D.ٽy'Sݳ%#+?b;e8*.IM+x~_? sBBJ|,{s6Vh>!b%њ%1!z!ó~%-+38*-xUiìڨ lk=F92>x@"l̎a`FB<&&R/ U(p};9췻lʥV@Qz8 :RF-^elHi\0[zȺp2s%I2NV~8޺ j]:g$#nkl*BGɑ`Hg!=e0Puޅ=LG&|F]$ƨ&ˀ),aL2a5?$n-hTa=*+A3jm=aLyAO{>A A  U T@47e!LÅe6 Sl(Ch+,"[=t} mUBV$&vC bDL0Ul aP6*(&Х-cGG#N!xPW6u |4y׽K{;wb:o]*]2Ev LZ1v `qewPuo8N"Q؏g.%)=b3F{E%siJUhY#0sƂVnۿ ``;B!@X gtmkj\\ma֬%ۓpݤo{0PujijpW >mB,#aakܦ7{ݘ:gF0nYw)n~=z̾!-TOjV2ZiXdy!zdDBw6;qM2F U46%JYu9?lIrl?RL)a<y8<ٍeȀI!Y }dv0D1{@:t 4mMhC&pw0I# #YP-87aˆH^cduDbPB2"[sObc&QƘ1B`wi[ޚq( 0v)4~pk`s;zLХ1.P!+߮W{6g?;KGko-Ef5]W:"eD< 2`aKJ\bDD3WKh 'gAal4.XINXBiqʥ&2T @ύ Q= ~*aAZXRYQy,Bc%LZ>xPP;<{>b5r Fg1a6X5`#^P 7z xcLaI r=.\9*uFuz@㌿S.c۾xO!-zݯ waMd0]&[ UJdPC^rC_G{˻7vT9ͭ(LC#Yd!i"SCȐ@B'CpτDWcU?n,,4^ƥ|ݒ/ۃ"j޹Zu]]6 H^Le֝HXnc2!JH4"͒RA,V9pԡMe>ۡ mAo;|_ .>@!sČn+z{{?:f|CbPTиJ.yΧ?{l8+2-!Zmy`u (w54zȘu꘢L9Rsp]a!A%&pH^P/Fv28t0~@ڒl*(tB 8$&{\A~rDr:pC2 {LR"} & {pQ8y;1rWq %@?DwOe+s(:O0$ps?@Gz/_]>.P9re؟ Ndl1cƘfP轂 TAУRScF2ch5IY ENn Zn Vf7w(kXmv3BCxn"%Pz(6g8gyl6$6 ( =a+g@ly3V H,{_*u7?9:k˦`uދ|p˱dP4j2@/r.'Q&䑕O_85e^RAaD+^. lBAsMABF^ULdh# m4׆C%*iWO;WGQ:ac! leP N0im n 0YB(Coؠe@t[H^qLY@,1 PA#_Gjhx>g| ]n?2 nYirkr۞mbB-hŁWy;t,@!#K&Zm嫑_Vŋ+~Lǟ?7<<}Nm٫n/,Yn#BdEhmEd =TWSLQµJ\R*֡(K%s-FqJXCQr)24"/6ßcZ1T KTwj=M_Xw@F-a464AflL>hHEP K~A,.C{&8 ʠwz]Y2w fM"l_2=tDQAQ?`?V1? Zmx[=2|=|S G|H ׫m"Qxk* ٪[FR)ی;Z,KË$)QBi1xU0-ٶEoCEǠ }*"` xη.5 L5!(]0I 3 ypԙ qx(3EdLhF ҫE!ٸ,a,ɟ`GN䜽sMi+]%º !;#5cU ֡E2(s:hͲ@5}&-n7WuÞI]9) %z΄&ft8(eV󽾃ΏhJz0V.ܗ?/VZ]]}rw}3"]xُ==Gւd_8rѳ^\5Fǐ2Ĺ!B~Eu rp5i85%utKr'4EQx|X,7:: PuZ7h Q7Id"-vdv22x ¡ԁcn`Ɗ?vS 8YvKmڅeT`#}icJ6Y AoN~tƐiFT6Gc﨧?^;|VuWVݫEOl}ٗ'O{䑝Jzϟ:qG~wUpq 7zCؘr"(8GSIEcg 4?_**_xKJ֕uId6Hs`g6%e?YcBdHkʣ&E`8AB#Vhkۜʁ@WB|o3C?Au-DLFo$~+aB콭;UNAO{4?doTXDB|Cz#~N>{l/c!}wVy|>c^->}ߥ<4+|6ƚyT0/jqJM&F13|Z\rWi 1<<4Hm#$E5aCbǸ=9ndkHHs P!Bk=MwKtϘy0y1PƩA'o[C ?.4G{'e֍9y~|<>﷩$@GY|5;vyr5H\p tF+~ß8k?Tkg;IwxJH. T />K#d*Ԙdb y"mka$L)/ycL 9oV9`=^0 0lTC-nӏK47LIQa׌[ܠ[X@Qo<"cdl^D%9tlI6\mԉ:yv7Haw:/_9|_gE8ͥ< Cnzފ;\pI{KW,g{RFxzUdԥrad+?|!"Р$S$hw?/c͏3|#O_j>^W 5|984??/|όZa0]zaVqr~ZŸ zj˝ =&w0O0 @A [xL(f$:. P: Ψ#Z3CK&V7}BDR#sdaXLMCs1J(^xkm,~Rt+j[ooCj<=>n<^oQ1o}nJ,q,yIquUkWo׸a (*όͧO=z?sϼ\_\z'U6N/t7o,_&rtը@$+kCjQZ J<*أGMB [n5t_P"cB@=/Q"$|фcP5\JC`hˆ| 8 1N@gh:M#OD&Anv76?Uϧ *?/<,IRUog^ S_эKt@$D(/AR~X+DxPlN'*6hiQ9[èt j/ه?'gN=<3WWl~oo|qVlW̗W ì[Y^/izm7c9R3 )P![Z >] 8yPK`ocG $RQ`NGD|\1)VcHH/ؚ`8n`hoO>= d~È >?O`aclg@eժ\20Ճ&=Yka=qד_DT@w53^5[ UnLO[T# *_=Q=vFTǠsy6i9 ةoOGt@{Wf^?W2@>?*U죌a܉>+8M~eV?9ČH()@dVCFlK!M-R Yz/mB 1ғ|ZsD`XNAs=_wl?ݿ?_c <%Z"FU!ʅ*jZ( ϏXXJl(Jsr@, 44ԭp'(0_AO1הC<ȴSF) hV25C+/D汏q`2ʄĕo A[}U  1],6Qw矋#? #&uzʝm̘}iԍ{y\ m(皖sPz9CJ/_HW%4@.|-Th&PaEinxJHS/SnK{?]\ O(OF\{Ю B )惾ek9VBº0Pw r YE(px^ICBX @݃lծaX $\Fz8z@3N :ݮr_Vi8g4(@iXp>q1>{ُ}죩Irs~yqi,t!w1&9˿w|o kk,8/u.4l'<鹧R^D_;t?\D _&Ų_UEjUCZ/2Hh]Y(P?>ʫ3z B)y>JI1+U5@π*J2tE9IB"LWa vg,5GW&"^I͛Fs8#ep0 =KձbäIV|L1Ch֋vt-Vˤ`̬L@}v٥Ξy;Ϟ}W~W~~իAϔ; p95# =L޷CMйXgʤ`u7}w}\ ru&nw@$Ar(LN5MVA~A՟YCïF!v\qC +*:ʼU'HH`TzܤKHm~(fկ<?{(n8 FIy2 SNgX6R~]}[&В}b(1h 1:G >"mծd6:ǶkZ4SY+IPF-ݨ䋹Qe7Bc()+QЁ"b%4ʟ_S{wo}Oտ[I8G9r0G+oNʾc1,2Ԇ?vߏ ZOzBxcڐ_}OT\M6޺?2#W2-1%z"cU/ zO^;]{,P*tbE*YT2Mz8Fpa\/CƄ@gJ5E=|ڷ+,(烥iEgU/y/KQ\FGZJsz:?$#$B0QRRRRʹŸ"$jM^X;zFk,-ag1b4't]J )d)8!0lkgCf9& DLB*,9>(yb/! h4b /ւH7jhA.}}4vU$F[2E7-3]7hfyٟ_wcp4_?ǜ(=\AAb#Yh<om-TEdν2<1j`,IbHGf mm_v\O%@J;b?Ci jHm?:&igH}x^qa|60F5VjL}@Ls}:ɆYZ`wRksm{{3t0Z~_ןgnyE}"\seв,;GAm6> -⏚gRwN?ߺsq6j/o^)v7eZ%iVO3H 1X&&Vaj"-ߌf8'$$h,jaҺxpVHqb)p@^6@֓_Ҷ+Kփ-&, .'YzeL~iSwՒ,t05 .ĆPL .cpI&m6q,Yj{~۾zZɖ1}=;sf[W~k (1TNij&:: /`B"A(ІS!xܴ +,a[͉ Q-2$1K+hv&x2lMX@J佴mhZEdV qB+*y($ τC2 npܒ |Np#bL qCڱ0xLu$pA^b1a3eN.T.u3N ?9RuI1ƶ- #wjE,/žy%?''TX1+ʚF=5eꝴf=6x/3d.`j (07FBmB(NZbA ȶM{+P(X(7Nj-DQBf!E UFTJK 1M^|*HAW3Yc-dVl: JāihM;nPEDU@ÈՎlnH{ZFV(PX5iG5d$sYb &o' .<9ULq"囡v9)r$t%ؖqcl;cb։k`8 =}x }//3|%Zr}Qt&L@@lN /I%)10H+I)VЌ3S@3qf0qFPYO YGS֤2EJ|2DMfR7è/ČoX;UƽXcڰFȆ8{0kI QEb?2 4ZGD#$BѠێ,P $&ցzu LΧ ?QM}^)q,(2:<0ْJn`^'ާK6ɽKŏeŤ='%x*Ф( $p pOh~IцJ3^'6t0;tϏ\IHXs9iYV!c0g4ZhaDeUA(6(6SO; v;8J)t tbh$1@$06$B),jE(S8G;]co (cp/SAUbgLV UU%~pG1i ZY bB63!+ "S7F@MO=Fp |>rI:Zm|;w{\qE zV/[C3 3Ӆta ^&y:f<~?A&@4]|OPڽc x⥝͞? DE!Hf@%*"|$ƫ-A H[; @=OɇM0/`X$  Nf,I$rQpUۀ퓯(acqVcެPp7Q2 :Ԙ3SU%@GAp&1(`1AJ 9\݂H?pNǥ{H)xoJmYBqKgJ(u9@LdNq\Ⱦ{s E4ޜCfIW9MÎ Nߟ@A#d[1{Vcꒋ6q4 "Zq"݄C81ziz;hR, G1 NA<)ʢR['q?3J;Z2Y hЀPb/QP,Y5n~004/*)& -4c\bNba̘,c@ֱib#U%2286(LD%6ǎA1É@rimp7J02t|XQ0d,SI4@bm-YD2ǴfGд?u&3Silsx͐ t"~2??@\Sh\4ID9n:qlv(*q4TM1Y@"@2XÉ9s[23H RIpC%eMC)'ƴd=qFaEC% ~<ȌPjB(2: ܴ#I@H7I8D( Q ?1 Ig%wQY SiT1>Ng_Rd瀸,}92Jr?PW8xWy() xPT L ANe d,H [HRL%R5-cCtik0Oj6$pjeSɮp'vG͊Do1]JS]BPrW*24^̍q kM$v CjB1b8'J|4xJy+Ո:" RDS-D`LGG=Z3\sJ)#z̬$p-QdNC$tM0yb@|G0`3@*nr{0SR< H.t0בH2sKVS M=cJ|LLI< ` 3:'(-%Zʔ %9 i*p A-$TQy Ca4D<1 v$* :;rXxOl9chO?(l)>Čopv45y)i {]a ?l؎PIfE"BNR0X[De1aB}f0|tE%hYEB` pr'zokLXCX8^mh PyWQ&C@ 3 o"c" E`ܰ&| #)ѿp1hLrC0Ay&i%J^S]?#YSsPQ&DJS 8:ҍqH0-)!"n`2gw lX7o/{M70qOPIPL;IVki w i>ׂ2GV&[!1Kk'tǧ_2$66b6%-'t5JNT*$ee 5|`AB c0NRBNT΀غSۤB#'N J&%g2ǚ@y;CSio^DdJ7&,fHKcl!DM)w%-Ib5 S6 40OX8A!-f%@dA84m6jzJRJSe)F Bv92"-4R1Pn9B%´ՉwkҀR%S0 r>@‚@{:)\]gIЀ-KԠF ' g11yTN*P$Ϭ͐ꟻjVoWS˥S>>}n$]X3O (}Xbtia v9~}rɞP42< ǎh3cΠ9g=}8$!)]Pc .8S# 0I'AБ2m$7H'iZ95Pr* VHypAO#B(v#SH>,=̌52[`%gij2nMNiQ(Ԟ6T5j8Lp#eIjocf rNi?gU{?#M~ zo kj]iLiͥxFvk~>oOxK CHiElNFWj I?N 63J aHTl Ҿ!IRAĖ7a 8IZ@iL*f? PV])O`u pSǺ6=6`ɤOSƑ2v 5ĆGd[B:TEZUdū%MO&yZ$H4T$LA%6OV@IHS)$:k*C~PaJZ]٩QB/PZ[qSHa%2q2-(\b;8Q^@zl;8Y}Y B%9cz1731͜3>džKOڮca J #D\x-p!MN0?CDawST2綉r_h;Aդd@《:,ɁwJq|D{L?~,DIN˙R(d#ͺwuT 6UϙmJ 4IQ=CZ>$aeidŒn,ѡm5H[b0] 2kN;lPQ$J:f3E(s" xfL2 Zr~9J* t `L*4"B &d,3Qq,L Zc 1J5 a=bn,%u"|ĘA,̬Nw$ͬ͜G!>j I?3sg~$_d=HtR\yDC65REZgLD8LI8.I؍rsډc9K*t twdJBi'i֑֊("0a̐T@ޮ $^ ^$ B2X16("B8o^cŇl|OO%O(MMmȄ 5[Pa٧sl JsYQT•՟Y :LZ{å12{/ĝV&ĵ'S'fyha& (Fe:?,N'y$$pKE఻a %0dh%SvrNL!/(:y96c[qVEW% ;&$@A:ht1K:8c dIA$w@ً͐AFޒ;f'`GZ}ƣsYMܣ0a~G?︙t/ 4aUkAYE#BDCSt,M퇣( ;oÇ׮Y~߼կw,[5^v׭x+^f C}/y˖,]qCo5*Gܿyۆ5+W.YGw|'%/>gÆ? 'ܹ߯\t.DZϻ=GPx@-)cx91S`pz3TOW$HmٲY}9md2c`qQÊN3BH)%Fz%icuڿϲ=jmA|cs'|BVo|˖.pl"Ω|.f]q\M0_%9 \nhlZۻxwX608ll?aV{K_bJM}}}?я>ŋX[\]x;Δ8ecze+BNFتL?Q MfLKlK+lٲh"ױ3`Ѣ{v !O].ek#EAe09,JmTiuZqؘz#4#(lu;BYqh;+oq}{wލ'>헾%C7twݱ}Ů׭t:a5z衍=!466ַI@tU5aX^1͠ұx5 bJpR\&W@F |1ޅx`W .- wuײ+[Z׭Y焐B!CP2s.caqK)A)2<80v<7Q8()-2{΂ -1MyBa<p9 ! z;5ne_1z0!_ݻ3/ŝ꿽o{WϛVuxN_y^KKf֭ }[\'>}kW_}?A9E,hF(f۴g1ӑ_k1qK[eqq亖B2"i:;:2ʖ.YV,*˕JXܲ9s]$@!d% ;:[f#F>Zi)lNc%*MNm~ @D+i^nZa=#}GZ%VY/0._{C駿 Zq"fiӦu=S>X&)ר(pb@$5"7O>ɢKl0׵wL(AT* , :a@R6%\):.?84z3dɒB!)>2X-[{utvv^xigs߾[nfӯ*rݺq|{ԵmY:((=Z)uuם[?yÏQ|HxJC<_йʼ2Cj5-}|f2uɒY)oۏ S{bcB -ݪ>KrJ`izIvg"sEbR.U*FT߿|>_*|>66e۷OTZ *Ez{N`__k剉m[_՟j /c]:sPSs%/oYd2hvFqAC9k/!.??2">wCCO7wkAq7tgìF sѝ ߟ!ȚPO$rrIۈ{ͻ {R$!D"B`Jʨk r@v%2V۽ 2aynG[R ڼ\Pc:6omo?‹{z(AUUQ#cBh~;rFkV+e(##C,Y˟]* *z |llF1oŎ_RekJ|uOCvVO]p;r&V~6Mφ~oѧqlZ29xoce%EPH]G}!jժ'CI9";XeRi 6ОŠ¾8X}6.\<Ȓŋ{{{߯s=WJY,z+f3?O+z \Vj p%~իםn:G򡵦nڴid:zzֳ73fKf? +;})*ɏTZhkSO;Z]u2-&z]]K.x_p׿k^%R82-\|WLGG`u{:;eSպ_*]+fM[?J7m{d`^L [r)2$8'=8]{z+~x+5*뿾MoJ%`-˼3b8⏗S_INu}>[^V^W:- Ci\`\ҘAO?ٷym?qrw}q?I$8)3+]pѥ6l'q0`*ᇡP(u,EVnȰ6rdȶukףkN]x^ka`Y"BK!m([c(6o|K.-[rl4ۖ-[100<:4Z~hƶ glp3ǩ-m=]?m ~qZ70bj]5c`G{>ןM?{HVF6՜ @V s7n@}-rG+CݞJѪQJ<_x~7Gm It;9tv{U/[d/Qy"TnO|S=џj?BԤBuRoO>)|!\\_?=gnKy؁l~p+A=趻PkBm517c_b^/.D?sٙi]#|C=未Y֛bU?U׺䪢Y2hesy#rB``h-r׷N#]lܳgBSO'oZR+:x[_ :r7XkG@"q%6TsNXDRdTUF0e3u~­ÇGFG6lذdʄn$y`ULR)KUjo3 Ϗ6'( I;yE,FNkuRQcns&whc P9;F=[t bYHӹmvf7Kc6mzHk=(%`Xy}??^}Bl6u{zgf.g"R{$.#,8ǂyU7mӦTĘ}P b!J8_twVZAMs(49H~?>aL'T޿? yw\ŘAimkwtvtv!-ub+u_2ɉlT:㬳{ 8d1;;{{LZsDE?uy{MgWhQW xkW/iƺ: oeq#lZ2Y-x[sqBMc@;lbjJU[}u3 l̟fx˦x<# o^'?.É\㵷> ş"V7jSZJV#D}{ņ+L[w+*DbUK(&X*uO!]lܸK._{K_:S4ҋ}Jl6fsi\ATuQOD vuGqf.Џedgk+VRnώ.F}8B1jal3}{^.S۷5çW_=,]z5ԥ0="N)k#A*b_(W:[zG('hg _Ζcgdy;Fڴ㉓_q7+ۄ*m]CԿ ~j/8laاn}:Ⱦ\2]LZga˻Կ)ʏfkUb?зh0!xFP7f 1@HH5z+v+%68>{z-RQ4r hX Xt^$H~`:3ݼgsu9Q{BqJ#PXUL R:рAJgv /BiTFz^R鏱k .XF:у x{ߛdjʉ{Hl~7>﹗YW,F x%ʀ~bӉ9\fY/ 5o-^ԚqeròPK~w^Df$V[)U*BB ؝-8H?sSخ|⥖d喍];o|k?4YIm/=+C]mbmb;s Vv<|'>;ɼ-?}, sEؔ7>.8v@KM=飍Gjh@ i{16X=hR4 ʬӍDv෿;xc銺{1Bs96Hd_~F%Zt 2gf>7]{fQWz.R I3mSzΫj歃B4?fL[aCzt+Eg6Z7>3O$ֱ sҲTt/ijDgC?~ Tl45k \s_Mص{+iϲZ] [etCC.uw-l'&Oۻ2vMofg^u9yq,M ^`wHm f_ m8![-AVNa-#SaiyQxMK.G?ԶSDزe Bhٲe-v97oOOR)HYf<HHhE FGCG6>_wu&7o7xy_ro]hBG`lZF-E,̼tl8mɊBș#ˠI4Vhmjxh[ܶ߾d+`9YY$c鱗,[$[:˗9?fSZ-S1؜W9A lZomag> kWKX|ѲOG Zz ^  h 9kӑȡ_ryd ̖^H ub 8ʆѾ-Cb>*?Ͼ\nSɽu~9CHkPR}B7Q)J+V8jn$QL6ƚzߍGn~t5H9?x4A<\qf=lqѢ% \xVCP֍Z٥fGFV~h_{ښ֎bБW_z,XrT{܏j"Qmfj;bCmēS pKvJ+֯9zɹXNp4)L֡ow9dO3q[};% 9c`4ӽ6,2+gmxo|Prw]W \HAQӯ7?VLUVJK2k+4 t,&`6cH;LP@2DBa&Ӿx9[*\d[jTjבZEF縼nxThP[[ۙg93Hg={>ϴA8NǫW"(0vÛk~TxQYYk;Z|/o|I=X|悳 isI ƘEK9箛5 2{h6R +Zкlkγ>yw#'(is3oBe%# N,S^P Ay+9:k7_as.ͱm236mzbW#M}oǿS'?eYSN9s1}{_fz{7G~QxsxpF)b9-yw69AUf Q=7( (`X8n&,[1lxm2/-5u+G';Zyk^UeqʲXy# F3yTj5֡]gȇ&QȂp"3N%E,\bSv8\x 80IL8]o~λ~eP-^JS]`tYg^uQ繹l ޻{㭙׾sONnXςuB :{X:O^><:v_'>N No}[u3μlnͲ_`>BS8]nݕOb꧃Ue,Ięe勶713CeQ"+~C:0+-S]dߘaؒoe3lye/hS7E,Sh8!@P&㍗} o 9ZC"庙#>^qljW@*&\xy=^S0z/!VLAWV}v9/5<8XqQdpgRT cgM齦hu=P!OMwT3Y;1x>͸XKK95Gñ+RsJە-)SI'ޘ8IZ82e ęXt|Ѓid7B]Z*Ãj{ lM;vL*d&ܴu=]Aa .J me;Ύ\>ԉ)R ['ڣqؐV`ƘzSkSC"_ )j%|@OնD\J߯^eBd4!pΏ i"=7|TF `|]ցGo7L ~",)wwE4SF8k.}+qr#}s 1%hcB#t)@Tt 2R+zЦn(1>:~pȊk/Y\oI}|au{G*Bd4|ZhpO %i92X|6+Zkxn O3 FB`мx^Ix%}HZ\(i3Cyx6&8d,CsƩu|! TAo'?o͊ך N钢\\n'|0JPzի_sȑ[Z,~Rout*-89$X񑃇^6u5Ƙ[n$uγ'*脟qBgoGs޽Zs?ŧ;J602Zpw6N a-\#VV3ٌeۓp1f |? fOnb,"~ttxl60LqbbbƇB/ļU1Xb?`2G=R+f3߇57aݩ 3SB~?~qs3&$CkLzӋ;w뮻.']>s' Z"C(yZ>(.w(3_¿wz06|ݛ7o. qr `ѱzy$nƱTƶmNf9b۷TjSpp?~o{=NYpw޷Z9:<űtWe?.l1?nMIJ\: kZ^veOs{QJ x1@mӏюCcYDW-.은 AxϙtÄ7EQooaz}5]˕щJ )8VKK $BH)ڱȑ#,ecxOec=7{^+c= ozt}[^gݽuOr獎kUI $X\6_W/( j4b!u(lXx=jtxJBnSJu@F׿no;=]B_߫森y؄p^u%/}e{{XV>Ct/9WM8Ӣ.8mĝ4;?(RLꡇĘvO~Z`pɶt9UQ`d[[*VpEڵ}oPH y20UhTl[wr,-S+#JքQ"$܍B33s#9_\&fn}/=Y/zγo޹ᴦ_"Iw^%`etccCCCc!Sۮ :0jlql6kqgXrz?hL qV9l HB^6빔;_~&>b><~}\ZZ+@odfH7tbbvǢ T*mmc| Iur疇ۇ >]5/[V?o8;Э2egKt kl] P(PZV5cAd؜q81nr/-wo{bH͟.;{ c+-vk4v&o=,h)H)Ѷmw-׳ vl^8#cc}0lmkmmmk)m3O::H#\V%e mFh<#q=8D❯^go|kp(~wmo\z&uttɮV1V/>ݽ-$40 7:6K0F fDc_Pb6+-{L~~#!L [G*azo0Jr)04J,M|>yVسgOTzrrB焑(F*cBk˂ ֮]I0TC#JU+@PJ2^={Vg2Y֕NJySO;ږ)3HA讝;,Yt9gsFcIPBqa"lt)̢hdR<P*f#!$yOi=9(oO9hS%GjqlhZt_/M4P,PSzمlh4*.F& ,{eg gM2M 4\~0^M?N<#[~\S,jz]cS~̱HNWvudW]vAVt?_d>Oo4ƴ>9GV([W :|8\WKllιUj-vnRp\Vl֪G-۲g5ڮ2TΖ871#%>ȞWxٌRJ+p\S QJ(%)eŶL;0@5H*wJn[=} cw\Uc|LєPߥ/~A* I La*;c $$yb E8S xBƵq{L QhlUPܱ̄YؘyݛN$uCX7s|ɲ`MjyӃJ|>.^{m&i4_WzzzFGG)O~ġ@ ٮc96WpQ0LDnq0FrZut/YP{7?(Z 0dA.vo^r]-m[ڸ2BضsτHg2ݻW2qpX(RH+j]JA◟K*q\)+eU6D8,{tB4II9suzڡM|rUmdA"s5{iF*D'/*㾯߷8P{{ҥK'/$oy[jZEo{.;# {I<{b18)@Xi-ĉ=XpPDypxw?k  :xWV~}߼%~;eWx"xg2BOz6A$qfD4b O{jGh_)}9Z '߅Q;ǻ5n ,NA}vEߎAlډf:1Ng}bdd4u0b6H&e~vnEO.% 0.@-Y$˥2|#l>>k '}r9~nz`i 5c$ًYjo5J aan{Xܖq,UFg#0bq\ȏWCVP)) Vtj[rcϞn<ƙ(۶ Hms.\.[.Wkc,pvߣZ'v1B3,AKF?>ԇ C#-]_3rR;Zc۬v-4?̟?O%˶wޱ1֮]$Bm۷~u]9_WĄR mpI*@D\[B$z:0LkH=9m@I D7#.)|>?wLo|\l?{LQ5x|jLGN)i玝i4"$]eo L'SsX *]Z`-r$#5q3Π AIr'Ͷ/A ZRON?{J`0E:pu慢WOXnݱҲn}{JjO~SHhNXZKsP%33^bgU_VS~_PnwyW_}ٟNC[pa.;? ?}׻.8CO2B(r5Sķ+r`Jq YDR1@G1ƸۨvJL.,+:R탯'0ۂ`FBplJL|ľ}zBXi*`0kȸ`,) =G\ c7,6> &2(jEvKYG?ֳq":IvL2&_ g<<ٌߜfaÆw]R3`)… ӟ~߷m{ҥg%5.Tpdg?,m%DR[Ad %Z6**&b(#T@3"ӺPb#)TJ# `Ua9-|æjݭ*$sNgF>sO{}x#?=gT3vƵEqp_` +QzU? HotH1p8٩lF}mbF&Ed?2?')-!C=4c>Ϧ~ݳj裏Bh|͖eI)rcj1cI~X۶MY|quu ;.Fxxh(!PSi@{@ l OCJ3Bж)5͛m挕kmbalN?c}k[2͹J(I+1 )Jog ׿+_X[ !`(m;7Z#9a۽1ZSk!c,I0H@EatvH2ZZku[((iAqbƹkÃShh kMP+!E5LFkŭN[giB=͋:)o`l27(&?<"Ǩ8P1#*nbbSJ09SODRtwwkOm?8?Oc=X˿/L;Rin:ovb`FƢȈy``5v]QA,$lph0 qjB@=N>]*A8NCeZ¶VXct[K=ZBQq}k[V6 ~;`QjÆ oۑPw2),Hf$qLasgPcle~"(0kWi5B{82]zWggI)åujű׾W\qΐ7nL~'&>>ٟn۹\{H@+yhyˑv{I]׊ŠM$L,QMKdOB=H>boi%7P_, ; M؎l ?]ױ}GڱB>z4 i gUߏT#5X*0S72FL37 BW&Q|7M'N⡡!!?򑏜"v911~??NF3Ԣ"3zO}ӗ_~`ʟZ; n 835l KdoBpg:yd~(_zP8Y԰rw7p ~f~{w'J -o{ۺo}r?]F.ȕBƾƣж<^tP_%.('qز e zԟy: M#-FK`3ǖŔćr⥋{ݾ9rhl&\F'Q7Oa3e]CV1(o44:= T34J 7<L73VHwq`m?5Se^䴀 Їp.73OTBRɘ2N&ySuc!dg>oÆ~tyObgO͈" .IKk ^:}Oi@4CHQ k;]s2ddy##٬ۻ`劥)J?|Gw9R?YJޜ(O4?A2~R|7co幋/8'fJ !YպߨZBڛgM}pDϹO|rPG2r1?С{R'8:LA9aKDk%}A!-yMQ}CHؠPƀУf}E+-_̟=GD}:{nm|B|nuDarHYQ`~'1*ˈFUeΟW}mTZ}{wCSJ8N p $z:;SA3͒-Ffls>.*gN"MgY` Kp V dE8+剌] "qe?y+/{/'2w͛!~+Wnܴm=^.F0F)Ŭ,YGzg i")Z>w0 }OuY>|饗_)Kaell, k QgQJ% NcN幅bۙHX @!A5-$ih0I*0P*ž5Me;"Fu],8M-E$1 gz4MNt /sۺm[ TJUﲭ--/^|%K͛fGR@ׯ_̛.P nĖJF#QrV*d-B G$6SxIT^`Zi6#*勎M P^F3j,!2sK*!3&j|Ə%K83g*9p^.R6z><<\TҐiLf޼ymmm"}q֩63rS*U^qcN#/x['63%jqR;HDX ΍>6Qf#Ysc [ŢRH Q\:me;oQ[sA$1/loVs猏=Dm/(z:}B%%z'4*gD"J`dK5քb *R3'r`P͔J%ְM*`]1ύKͳVmG "Jt6HJP2H}i 00rRaXjB!6CQT= %FJsF[v:,ndS#`ʨ!/@E cڨ(1XN8qInq+! CfKQ< nLWZDC{Vzz"wοKƕvb˶MF0딎 b_Vy>]xSk6t.2KD@4*zMfrmkuyr0"1(_pr9c/6SK! Y#!MTqjZ;Pc&:ܴgY0՜/YTmy 0FSH~z-R(h!KE R&bԥűt`Q@b"QH1jWEu[H<0h=W Xz#K8Y{bcEq$M( &E30D ˔p"f*JF22~!*HzF9HFM#bFDڌg,nseZ/cqs ?A"&@H&UKs[[oy׾!cc(|MԂJugut,nTGƆkHtך9p}\|Sz}J: ;MiB&EئH8&RҔd$rP>g5Ēp#9&z\6riR`8L*1 F­XiI6ȔMUÔ##hYȷ%:RI")^ ƏҰDzN';J%"3Sbg4aw)c[I(f z F|jMXH29X#qXZaJNCFև]2kɚe(E9bFY[K)ґ_nݶsɕimm?ph17I9N4;K_&YcE 4XD$d$BF2T{(hy[[ch"E،e,b)4&,{>qZ\G7R;߄#i4 smVsfa P+ LZ-[H{-UnǾZuInW8v ';GKn0a/<xƵYń@J008921iACE& dEcRƏY|Υ-’ ->hLkم"﻾_F!ٞl)J]03 eВ:KkKkǹ1P ]!I`gj^p 8+BÍ~)K0Ә#jtC`@Dq6AuT/{^$K`VGQɘXuy #[@ _XOB"Znsg@(neBke9|!tᘀvM, N,uS7g]-KZMR ]0ag!3f"M$%#}#"!(%APSfDUVɵ=I;haq d$8.99Lݻ n|ZuY0&{I <'3062v;wqo"%$ڀoP$dP1F1 :YCη@)QG+K FG( <@f4*I+# tL |o$Q(9(D#̕@ lDx @K¬=eJ60a$0'@[E3j 8PCfԪ ĚQH@2Jd &\qVZ@0o49TpڛL\h 9rd_\qmo}>V[ޓn?Σ"F5TDE!3% L('c]  &P(-Q'C8uYd)7łkacűP~j%qR7c(/mN OuRcC4GFhS!FVQ2.GAԌ 7D MmDz2n{2"e4e8 FBQ`[(xnٸVhMYw[Xi*X#T1M F|0 !f#/Ʊbq@(6"eS!teds`լKDY0܂9L9R/f!@x/@.p^"sC$:1Z-=/a0:߰HPd2u#Sj96Q-'[z P H%J246vl`c{YkѰ(eu8cKQH L0nTB+/Sa/,*4:@,c_I]M`A1G*`#ݐ+² `rcPRFqZ.QyJjٌH>7 "!]!+* O1TP!^d)ױpł L6/aԆ!8:P k/jm3cI%$krd )<CK$08H#pԶ]6/REBg!6:h' PQJ8]vAՎBȩɫz&x-v4e̶5坎e b\9ѻpiA:*u%̏Fǘr7mՉ#K-˖Y.++htH Pm,G (86eF5rRd'6E .Θ s V'V! 10r7r(,i kSEKX`$ ( 5Vͪ*$rR%rD[8L=p+ :]Iij@͈q{2eU4sQ.3ټvGDQISFBhkVm̄~؆ ]ɑFk~PlRϑ'vmDca+6^墧 qۊ)8hB _UD :vz:nZI["B(a8Tg } 1 ?pT &YEE\ MPc! D  fLZ0lJ*S +]X`udUE+%ܖQ$edc[rLJG`aلpexcdVkkٓ[4eTuH'L[nF#C}l#el/@V*vg֎EF J"+/~J짆vMP:A: V `@UJCA ;4fqPZ>1 Z3p:aLuxr(a+,Q+I31x.bMcӊ4sŜe9([&%nVtyBEɵLQ2n, y؞ke-r3%ݦ:6?4>QEbb|v8fQ64< Drʍ3yom/ mqsQZҚ2ETJC)DT5|ܑBЏ7S?kRZzT8, eȈxB(D1*DrS9vC?RQ8A~:DEŠ T|2k$;jPh!n:$űUfYPNJliAQd[.=* %ad0G1&C9ɭ mÐ"P$XƑeGh}bs- q`=(jh3,[a J99i9Q3R;4L1"B@MC !k( p {680M?,cAOgNLT3kt|<00N 26a5w632$ 2yl t:uN"ԓIuhGᰡ9+Bk%Ҹ̓RK ao ]c""" rS1]6iBfb>!N$.ӚUF-N{l"iS h8Kmh@x<'t 'qNthphBB ?PtCo4r$ Z:ġ"tfp` esvڲ֬\zռeK"G"F3mz]jm޶u[\mmLKm1<&ݶ|9C ,m;yg:* 2% `0K1w o8-=qt 5FWx,ܢ<(XF@&,FpDY 6I L @$#`bp GARmh> +a3UaE % nQ%Ni!ŔB;hb)-ʸ2Ʊ) >(DRfsO]+/r8-u:Z{B)L8QR0 KkFwʸm˦/tQ8$:+'Mx0AKpdw;Ó xx>UAFcm((pERc0Ɖ1ȱA: b K(+pMu,9`RP=2+ +:;zuH+ls* nealH| ai06VMЄ"`ePS{t 8+ Vu2 1x9,Cl)+J-_kbʁ`#(,EZƔ1:[,+yŗ?i倲8Y^(R!#2L DHiuj ԼeH3i4Eb` [`~kM$lC @ H" @K _V2RJqd޶- 2 5e)iT%A @H:_f=gs6xi% E֔cہO8(0/h#RF]e |(8hXQE5R2QB:icѼLJG;(x!T'aXW'+dAB(#9%x.:KSC&a (BvNLm3 |Sa(ĀI,yN!YV¬xHA4$ZXHP"@K@08)b"bX8o(r]N? 0Q{zR벌7Qmɓ0PRWH 4jiTWaӄMXAh,;HI#E(B_ ybaiq(" #@D%hM",GhB 6´:z`h`/Oo@ ƳXe;4a`ӥHl5Cc 1 e IT\@зg-<S'GZIRe^u211Kb +M9@ QC |XvK6GnjhƖDLs:uh@ĝ $Ơv P8R0 v%p;s'D&"@:5Jp2h eH9Zn$r#҉ES?8&T 4!D&X% xr@3îO))I8ФHtt<=^Rh pZQ"p/<5ci@RٳrG8w'"(pMp .21hOXQL;nIsL#F9R?:(ms* LY(ւ$E6fRD$`xo.ll+ e HAa%f/ (C6y!B}90˜}|R<1|aV)! 3 a-D5$C@"BqfvÄiJmBDPr+%&jc0-V^I z0PEygeZl͞g]m>.)"/ysk)mK+a]CC+`D`u^Yőd<̻jzԚU& d&$;&y!L#3<2RC ͹@$5L'j͐Z0FZn&Y.T2d5hߤx}';Rz׊]+N@3s?p@S-ZlQ`ȰR޳K[sK4X 4аWĥ( qZ[n$ev6(JmR)LLd 6-Z*^b,bfyܶk`4w[02ǎA?FJĨ\A%X +Kbef@cbY';0A[ Px5veiG84yks4ME,ma %f==ZWrw,X!|ЮCGFq,L[K,jslJ ǐflT&/XJ=0'oQi@HAum'pMI.(Fh: v@#0hxTW w8掗xY+6lV^ ?RgBRN411ed p+iI7 O B>wR|rǽcOm1X }cgs@1[R‘̱b)* X-B]`(  n]qgjRBBB@B5 ( (z*ۢ-vkO_.EIXRé3{߰w}:UuR.|sS'{{}[o; IGU뇏X^>*(q'F@(]taCQFf/2Wb G6Kz>yQ_Ӧ ӸF$FƴJHNX1Dy_: Pkߛ! ^.YG: yiz|o[pܿ73.8KOysQ=[O9χ˫[￷l*-=+f6F|ѣ0B]==Z,D8)Ei<$aGȶ[FuZ@D`҉_u0eD8l0vDjoo,[ 8bq6FA8L ]ƘQQIiOj6gdo .ڻ"}s+!=6̢~Z*Wl0bV[y9i#nmB4~=OQzc R8i`97Óɞq>p˟A;'i6)FCOO۽8Y?" =38Aj*. sE ,BҞZ j EXAj+ K}v@͹I-ity P0YjӢ6^׳ѹ`zd}T6^O6/Ö k*x}2%,$0VE@H[[y 1g(窭¸pǙC S_lh#Dlom0ιy5sp@i*x]ב ׳th=bmac@zΚ$&=)j}=iWtiIMvS@n]o1# 5 "̢/ra!Ii-N-Yk!꼬4$ !28>dD=d=熱^LMQle9B9 Y Gm+YK (BY,5o!4cO؝cnlmocf؝S)aXtEӶE~veP{JYe K~1hս6"&"Ɇkkcj&Ģ`i8R_1[g[lΌU`t⨪2_mq 4Z;YY9}`-¾-|o p70\^Y|S8Mʶ^fQq;DWˊ:jm`0nTE=5RrA6 2F+=D bqVmFau$3%:F6K…uj'6U>8Nb0:p%$[ȃ Fr^}Ԉ TS_A{[3,U|1x{sg8hro(h("{_ǍnN~! FKkz/it loo\vSOL6vjA[]H>DQPkVx#,Xw6Z`06hotphKqp7j:;#qĆ" &@)tjDЈa2fm44 ;M$VG'1ZFph0ڷ00FN>8A,LG^2tH%zT4tv*O~(An @Kb63eJmwfU-[Z^Kxssguzϟ>zxŸjmJ) ^5&{[#J~w~GQ']~QUU"=:2-;nBxB@˾Vk.{D}nAvߪwm7[5uCjD+Q}ebaK]@0sP'HXdY-ku)KMzZlqx?0U0:zȂC ĉ{  {hO gНN7wn, _aҭ{C{D9~;/,B~tf.8g;yف@,zsyYieAa@0I9c{zzyC-ʜx5/ I>]=2k|8ݞOㅬ, )Ww}ߡtZ@4%{Y]UK^˽OK&`xw@PuC՝ta2fʕs宓ւH:2#53[ ZRcʑ>Hb(rXj'c,|vRH(cmY BaL+0HZ6 dGHliGh_sd%$4VV9ƄS ~v4w7tjvw*|?ݟ@4R*5j(VΊURi%ѡձr8/8No0KU|fi,T+[پ0L nPk@uͼ9˴(jriF& a`?Nt޶\g{DL OIj-cBAX)V)kE,)]-mDi;0lSe ڟJ.~\߸U9MҀ%9o+ `vekI|zs ʨZx'Ja #~HQ^oS!O)aJN [a,./·zncyF5:LMNWZxHFk˶CԼ˲Qpx:9BD,580bLNh;%h:aږ#&PrviTmSGQ4'NgٴcH'Qx]}≪ie-9G$A͇(+%VDE]^9v{x0TUJ%'<Nld]Y (Qt dI8@LJa@s(\2O> &!'vQZ ϰm;]l7UERNBoÐF5XZ(!Y-i6֠KeS{CAS¹8P8J]pJs5ZLHݶ{p&rogr 2'KHjY{~ >ޛzI4--?x=cB-MUʦkSZo/omcw .l9I< nZ)u]Ʋi1,\؃y6 }AC ~{PY¸3c Kxy$9 (m` &"v@ ^hpFPd`DнsֆXmJ FsQ%g{_Pz$1@&Z0FV;۵*eBͼ n9z{_N* ,'y KB=*BHw1ajJI*,~'`AqPU>V B0B#m= z8 BBcRFHol8 f[OpCڂț8~mx)pn"^_pK<8TF*5cCZ?(6m ]Y(C8aVȒ0 ?|,sBVO,+`0VfRhu;Go~?~h\kY9 B,,A蕵JMgu ꧣ罐ں%x_mB?7xGD%-B+L$ d\< NyREiD4H/J2@sʶ ^%jG89S`*4q< 0`33*;㢞A;j*CtAԭN1TpQZ`1:yăǞ, HU%^<- tV21SlボnΫ|4F N5_ZiX]mwƋkF|?KtFT=VR $ ENbd zteHg=Q׎z,Ű)^MR5I Xbў &*RU8:" 77!r$>Ny)Hrc iu+@n{9:?F1i1e) 7/!Ce-t>ƽ՝kUY{nn][F[U)Gns8Fãwh$>OvqolͧPg 1%<S\3ԒfZI -c|#yk˾ɓu6锽*҉n2iOC0@ESz?lUZ{,40YuĀ֥00`Ȇ4+a:MSRrw"lIٿpYaY@u L7 ϳ.ӳr{? 1=՟jx;"/;`Z4o3㮻zip0wN-yOW;{'N~{h^.@_~B)yǷ|wolc0 r=+\j 9檩! 7qwL/4k8 @_TE_fhY'NHʅͲΌIOg ق4$@ƣ2_Qqx4F`N4ThhguIe Ci]^7,T> d{;^"8x-9-vP}0 vyrs%/l<)ο9.I[sk't c8ϩ+[RJR8#g~|MI)h0$t kFvzk-!h[ Qݠ!$UҔFUW:$b ]腽x+% nDI6v}T" XJ'rݴx{*^u*J"YIӔH"ӠE( ӈp-q,uGe0r[U7((?a@h##<#mAzpH7S?cq$M1I6T;1E0xj> w=UMɴ}p0|^VmCADB1FuUc 8R$V:([lo:)"Ιt)Aڅ܈jb ^O< xj!jgJ򼮒8alO iۦ#XAdpIP-!C]kk VDʆr-Bֶׄe[ L)j8L!s&bq@wdo# H-U,'p8:y/YӐ2!(Hzc{oAWOZKx޴U&ّGgө`Τ ݴ޹?'}i"lu[It>۬{ۗgM8DJpƕҳ aoxuhܕj6&RMe]0t!ﳤK"hw@&mW,H8e}]Lx.u}x.}cw f:K :ka=ֵDcm4ҵC(ILRa7pM  `5;AϢHז׎S6 Ou0z1e!4>LzKd)7s+BQDRp|?[3 X]^f"\;zj6An8B .y]߄%D*A']*jqk=( 'w0^{yiZ. $r` l8ZgiX)O\o0s{&IևI'T\pdy7Isq˸bޘ6/aF'b[K8m(Sur(_}0ǯ+rՎ(A)v{~{\Y;v9TP]j(e7+N\{3e^ #Ic^@GyOGm}A *Q2N;lDwaXec)h?\}7 xm^yw{ UWa}z_ńIC>YHA@ܛD8HS_EIJ0ѦxB52Щ(-V L4jvJͧ9zF Aո#:k b[xhBNP4Y"O$$XKտ}Wݟ9t829mќ8u[z˻#`T =GYߛ1'0Kz6^ߛVDt"{[Ce>u6=׏xv!Jpؐf0vVs;k~a ؝}okϿX Mg7_Alu>@mhdCqq@@ ZzxyhzC4ΘC!ݝUIp : l((NUTYy}: N/jDS@`笓m;o0A K%haˢ( '~wYBj(nG*ƿT:@լ,P0;\^~Q#[Dj]#ByoB`ql&` iFZpR]ZcANj41߰s(,bH g€7TM=V66$J|@g̼r YFb@&T"x-pdGL82< i9̀r5V=f(tJgbblVV} NٳW6Jש-&ͩDi,$˘Iy!B-e)H$CGQ /$_*~,CwP[)+Zm2pW sc(lzi`3а,k;TQEa[lsҤGzQ$|Uk-ɣT`Q꠩tI^5b]U4YȃbqPQ,.  /(K"Q[C u&>8pa*`7[FvJh{YP%FFFV$XȭR D7J IĠkxZou*Sa vd] hs4 $gd+_۶- 5ڃ M?'`n9` 6¡AРn2x;HnIښlD[5K- QToi6).Ժ`%<#0}4<rޟ]}&xۂ3$V7(-$ !Gx852҃B1_~=ga+#H6̵iy vLXQQL!D$g!D]&OТagGu藍ζ4Qw6g%lI69c3 `h}0 xB1_kj[1ю~G_g@-ysH[[&E4PW~[eF9nd1ZO&NYG֗I`{qLD^ ֕j݇>Xrk2;?ٙEQE$Ba LB=SӦdU^U7ukV`aŁPJqAڶ XH2k, k=2H'֎ugMJ' '8hVXթ"Xǵ0#biW1& |=${E,\Y#PJfǏ&BD2C<`"aݔUwy%!˜y/Ƃ4 Sf8Kܠiv5c*R~om}-ZQ]#mb(,!LB ;#uȮTA9ThS%_y ہ5nBh̀W_0(_Ǔן0B֫en9M(sш!P."¥Y@:c GDkh4'uŌ"'ZMr<MzBqrlGFY!bć䎬i@\6,"^DǼmk[$ #Am_` a,uu6!n&lh-/) ¸=BXQf5=KcҶO =c U u u8ֹ0+!ɘFH*rSkPy;0tƸH ]rfg/n};m[BGZ>43Pڏakjd8xV)ZT =^ T&)  †Eկ|)( m'ÿ_:v U֚XOgʦ3[ `iQKqZOC'jѹn|rl*Dp"1m VjQ]{Y`mH($̔ 8(+֍qlĈ,}s%E3{ ;ZIb v3`lCp)@Q P^r`-R`S@ &\'7/``2zP -a:=/!/``ښ[Ep)![2>C{bӌ&~2AloL3 !YT v:$ټxqwxjc_7D9ڂ9㉪k)8qb""^RKY̸ƾUR|~ŏ'onÇ3/*B}%s, ,o^<P^G'Cۍ@;߀@(t΅,Tݴr#ª[5OE@0 ˜v!S)kev&4}U+yo^ 4z7)[-&<w} &oZFM~,A4bׁ<\tdnR.R5{c_C]P)x|ջ|yn~;0#|Z啠8i$c6VM 1B$1#8 vGZ%]Třq?+gj Ymy]LhZYtsw' KS G= 2v֑Zڊ,D}UF;Y=bG-a!DDkcAB+ kFk{~zƗY?wKW~;fkѥd>89YE\8Kc>1?M{׊q>ol<?!O3?o/q V`j|A{sow32`9C#K`W7R@W[)3ݵ$ "j8,]NS_PL'[[Y!ʢ(tJhsuBB琌D*Xd^ybuݪ}JbhD3!(nC]Fm@b(5Q =҅CJ,%0VSqYQ-&x S9>vs3oF]'&5W¿C3/q@; $H /~϶]“כ?ͯ,?֭pUTwA9qCKI8t!#BuYRgi#SLʶA0ԫIoY1iKz.H1AA-PD$Bdc/JCnlp>:(x(`׉CP] +"xd`v2@9,:[S--po6;gb%E]z0oy^]6¬! DA ̈́JS Cs8_`M ?|Gޣs1h\>u}/3h lGWQ4hP\%$qlm-n\8_{N?}eu QX4??SRw&9O Nup/hPJ?g8XEG?*YFXF1~Pc(Q* aV#SMӏRN'sQhPHplBD`=D(ŊPjjSCk ^i#2,]bz帚 V{ԉ=9 \(w}o`7 O,F]AY J0 XqРԥ!$;H[7TS|a.trKmQRx'}lڶ26KB, .KuElp*U l 6didrj'xܠ)i΃sFYpKTaGr4UXJgiHD!Nk~שzڡG])Uho%@o<9`?>[Y6g?Vse;W?W?@иy1BYY(/]Ųqg<[=YdCyəueHIN &,q GŢj כʫv#+A`l*@$鍋 Ax*ҩn}xuLn\UWhh_os%, 7Cy@#Pޢ0w4a:0 " ,v?T_.Ϣssz?^.e'>@2N056X,b&( kE@_R*Uh))SeSjOvUt5U5E,'Z@ ;C^" "S=(5 GPAWRБ_Hڌ1IY@tH ~uȃgD{Zj\gH/q;xt p9eP,Y_k/a;)^`d^3}kBz@:NJApU`_ X7E7{gUux&"hJ`dAA;ʽ,*UdVa aԐg1jg MGBbi*ue[J`iD} $ Hy+;Kw61a--vSAoikCTe<-_D{|ϊ53L"իX6kVŘJK-ii%2'b R,TF0P0+7YŐ yP)}KxZ:z EӀ{[Ky맖ZIi6V0kfK?O=YX Pa3d0Aygs3EKpb, e Ybt\?un9-7 Zufrڗ㰍PHy@B5JY+Waqo:һ^|" =s [(,һ& ݕ,6P,i*J_28&BU窲Th)b o 9wھ2袵.0mazKE g,y@SކCw0_๬~Z`S)O_Lbrmw iI[F,{] c N'z6VFfwS^qdi4#,bҬ0xzcccH/vTXdqD DT+؈GM`c'vIg C{WŻ0 N: +ʑG[v M%J&a@ DǃB()݌qhtF6O[R+S6< ZeWn[ n9>rT#wԿEtp~qōsvn'Ap]ug/\g~_+{Iz"!)n["E|O** |;iXDAsVB;(m hePsL~#o7PzğԻs5D߀ Eʳ}#{0Yz76aҒȻT`ɡS㹪vխ*[E|8T rY6ްa}50qDx>Zy:;gTw5Wq6$w!B7hυ)Z1p)`Aƨ7Ufee й>jOw"ffw,, Uz"4 2Q_ JPGzށ|>0ZTn\d&BPÀ{, Him˹;=i 6q#K-Mp FL敻 eNڡS<_\zeUsYAHN;~(><,QHlV*T{ʼnI!iK3`*7^"&fWQW7C0_봰ȏNm~l&Ծ3@kh=b}=Iƭ Ծx1ZrXH+3~wm&Gc,ܽund gzRP(~FtoGwkNHMp$-cz\0&l'kxG%=0Aƽޑ~BMhbʢLRm(IhmTN0A ~:')<4:8KHx4JOlm]i :DžF/v8, ծ.56[k]x 8{N9 1N}68LE6NGM~RM4+vJ.Bߟm'N]ԕO6O~,&͑wul=T¦VTUMGU31Zd֖,% \@7y?97E%җδ$_q 10/n%Xy?I) BO}ЭjNA'dyrg7N NHISTD 8Csɤ D"d1`M ŖPpB`RFQU(ioX#j܋jJDCǎEG>g[9^Z//!'{':A̵2E8e9dD7> ݮx#MH>&Ck#Yn8V,޺c#zA\u |Pa0O08 4) ~{K¬-#~X-wLm=Yq6^^>Lֱ/mg}ԱNztmM$ʅ{%[[ rz9 0mՄx3)$tf[#תα ˌ}eFsnZ0eZs4Boz5gFeס'GK9mK@A#.>/'\7zhq6c{ϝqz㫶zʣj)[ʙn*+xD1ERF$,ICH8Sf,唡~ZVo׍%޿Qv9 .Ǘ.>~nlGl}-[z?Krc΄ejF`C۵0LU,`;DyAy.o vv1δ9@+F啬rY]4E@EBv\]ߙ2 wѵ&^KXT,3SE - !r㽳;i&l{OI]iqibRR'11 Ƨð.0b)dgtXZ2x;KmK>mvAM铀ЋWBB,"@xs8xbNS/"z(gvTo;[/|sl:b= a\)B o_Ya+oBk a5GO5մʂ 8 )z²~HX]#wo?Uء#yfF) `&s{FOil^/S rZ}lJU]_3+qOc ؚrnMӡܼs}8P~E ,Hwhk-úC CHxDM[4F+zr a֤zɍO|O\ftH5j-3bjpsQX -kQ%""46(?hь 0:I5vz[?齇WSdS/]Y{8oTܷ+w :*|j5Mb|}GmмЯw5㷝7V ~}<MCҥ/B&v"g's}Cs3O3ݦ<3E[gwﹹvHx~: 캣 쬃8Z%x#qh R#+0e n ͧRէ}bULnlQ8T:g!8SՅm?{w5FdOG=|=a |;020;k7w vp*ӹy~vd("s#a$, ,FcF󭧇*& ccwb~]xߝҵxqIW@4ho.l` 畲p iֶ΄ኖeoA_!iޢ6@7G=ێ0b.繽jջlLJS9#Q^ɺimI$ɤקE"L*#RP.T[ԘSˆ#ts0waqRP]~qsj>x|ۀʲ׆xf5%uB+sXXݽ땫@AR{*0NVR)zh?yRȶfKbeJUmb[)U6Rjg !4j>S6ݹO1Бf`rV3bJ\좩 \xo:/L[N$oOOFiZ3}g8㺿t` " EAw{Ip3{]>pPLL:(>v[yש;7#l$ؙJB^ $|yuź<ߝC13Qg##3kud n9b>*f)A(# (9 Ξ&_GE nGWyşڻ0W/_3`kbG!mV,9OV53C蓽 4 )ғ)B=NSQsJ(Jޮj}1Y@_[}b8+J814ԥGxEMO쨳LԶ癕MYX=c8F4;Z/t]F˩+_§ tUwta<帿H=\׾pBu\2/4sPqu8ĞJp9 * {UY{"M~X&Bzÿ9Tne`?6@ 8vxм|y?vc ƝӘ8:s(-a/LL7=YO\Ϝ1@k TQ;짱m7< |۶Syit!1=K\]pD8PU)5)uQ (PSV:a?hZeN0P-蘾Kmx]/l1@  u7M yX]p|; C wσ(G`i$?_e7~륏ΨQ2so̦~vE w\VQ"l(A#HYI &IT{̇Y:3aDUSPČYF̵fsU˵פ&E1 -OsTc==~duQǬYVUz?[+l\T5QD¢B  lrFE(Ww2p/z1r?GΡ'PEX 4gb@,9,?LG/H VTUQ{m#Q*H:Uoe(2m$mY 5 Dlnþ %-B3悗A,m}xc-$btYx 8#MSQ&Nrw6W.jvp'ޤnl*  .pM(H`n@K Es "KCGGqy炂Zvu\|o6_*OPL!pB]= X ŐZ9LC>LiA.u)?$!:+OݣӫoڤZkm0;Ә -i(ZqKR!aOb|q,Ag^G"G{shoҺ~w@dG.;q^(,aКA{i"eynk# #D)u+W:q O rNh(0uUVCOA>zRWıdCwKuJ•8:BlqoM &bL\5Tow؄Eө3yqQB{ M1AA{X$pAly6{;#lNhW2g0N|~GCbqK>H^ |i7yس7-4"DX+ ;)~0 r9Cg1٭?5l&E# vMi_[sDD>PR|0XdZϊ64]s%;Ξ\/mswOtz˖q2LFXTm3(A1T^Qv=Q'ΚCs/I{ Z(Su8茄_~Vw=L<vDiha61s"D#e#k +sn(Mh0I' 8a2)$=zMC 0ӁQ`GvŽH0tZЎ["؅D 0̯׽GWM(BD)Cx0aƻ ѲU QZOHdž>z}[瘡ӖR΅h|j.~m 1bM]bgOn\N&CAGb(ey"o;-H^K<{es?ט |}r0η8KD18YK[3y"lug~sɧsW]dB} ׅJC E宫5[=X^N/MN$OA "|ޤq0!nڲIIKc.;g p|k09t`E92ǽ!5xo}  SYNwn_rh(!&xD`Ht jLP^jSy?`_Po!tyqg0T^MBP?/Be^ KbpYf@f]SAbkDHњߖՌZTW z!A7Y(bwpЗӽШOtc[1q},RW'U1Z:^-˶mYu9XS|$ '%.m99ϝ5h۴6DB>cL;Y5-]‹[靻67|Nή֣t+@ M+ ]X AG!B҉P#k$($4) 0awlfsD@}Ȓ%_̿tv~z) O l/E}|}D{>ozm_+Zn=peltɰQ@L!xϦ{v+,U"R5'>';B(Bj@V^ ][;g.-M a Qm&uI T5O`e N(3WҔq&MEWեO_[%w4άϞJO1|" E' W2;ó:ǾL4`hRњqL&! ( Pmc}EA > "eRȀ;E ̰{iϢ NrI]DD_X?pP@$/*Ss|m21˖w;W.-xy;:'V|B M;W6Nn{yA `ꯍ;ϝLHѓ? $2JƤR5a$2) Gߐas{솳Vš`A0nHЀ`-89x>cic4`SWJQQ-Q6JgBt68kv1#xZ; 4Ў t7Ś;j/$b&,^ χᇀ"7oNB䈸H!c%15xS"ܱ}vL6ʸ*d}.9Z!FR;8 uh?shOo]isBSݽ"ML7}6"[ Ƅ ⋞#O"}^9^?7]fGQ6F7 &owsZ/wmQ4Lx]_z0iv?PQ'ͷ|WїQi "\#]uEDi(V#9o:3j#QbW.նKn!zWbnM,@qdmiJTtǮ^HŐY{x\44cbٵg3c8cJw^/9ugMw'+#ɫds.!<40wf^+2(`P08f4pjkE(vB J ";I~Poږ[m9oHh{?}48z@&phxňY,:WrJ/ۗDZ"eهe'nB68?U-TXt>di(X8 )=$i*t0uAI j3ps~D2:ˆU=3Z 0AM)jC0Ȁo(:ą{Ln^`0 Ő wҟJ(Q1,E}\qYڌw2,?3 wMIXvTB0g舶ƢiF*U "@;XbMI˓?9 7'8Cu^n&Ȯ>;k=w'eQ v &Ƒp|ctCՖkvw᳟Y] A8J@Q[WmYQVҷ^4HH-x'Goz{n?ߟW}[E`0eAs2w.pL7语񳸑AfMxϣQ޵GԻ6x6~g3=?o-H,;\]~k}OIS riLO$۟F8$pDH7mi[&'=2@k; GjӶȨMxφE1-W2yr,JY#3[yQϗz55uCw䰁\'!H8b kۊmC{p]Q W4&ўi\HZ]4^Xoޙ4 dyYk*\)Y׶,k׋`,0r)fU~c`Em H!<+#E5%}g&=Dzf.pr@SGV8'ĨM=~[n`= 1 ,eȦͶg8YPg `[vxOvYZNBNa~gľޛCE^Q y,a5귛;;C[y2ÃRC/_ ߺN0 $CD;ʲz&NHadB'G\7MتMLθomk.yQ泼RZӈ^G+G4I"ƹ- yv {P!iB  IJp@tģZ-9gQIJm=A9W9lݹT4Ĵ7g(Oo3zQ ]nc'XPj8 9W.O,4c='i>1//N#cJC% Yf cRMٰ^7cu;nF<(Fv2w#Lʿ}ho@)!u3֡]Yv1|q^m!6%P;DᘸS?Ĝq߼1kڃ~?C5\Pg7Ҕs==GGˇO|V@W9OzIOꦎKGvg7*9- x!MqM[4I\q.f44DֲJj]yLa})㽬ǃ\j';{O?[ v[#΁duuņj=0<\4OF$(Ăd< ouYVHw}ݱS %ae԰==3h 99ڿy]'s{VGkfA!w??UUUKagzc\r9Q*kh5Q hoĿ)#A7Z2zD4[g?sY(debʗg~HD xuȂ٩mw]顯} {@BA0`ý*8`w3>x#}?Ik >?(DMgLžoj-~B{!} (ΐvA[^A#-/o'_=|m|7/ww?P,ҡW{acyߘ>!?O<ğyٺ3 5{[ʶwㆠ@J2:8̓gG0OE]"T "u0":D'-zNģق}]38*Az)o9ǟK,{ޓc!MGaLVZY]8yo_zCvkg=goۿ﻾vH%(auQkQ[9],̤A >V cwD"J,y nD8ôBȌӵXU ~jȂ{H;ĠKAQ F¸*=~#_v. wu-l'|#ɧKM}QJ v^=wK#H".wyзܟW)߇ݿd |)M[$s`޷9~{俥heip3ٽ\Y>z'Z=UĔT_ʹfcg^(sͭ)E,Z]Zj_x:fzn8nhVFzjkafQJg,zL:JB!ނZs{W^:TLlLI_f|4FfuJB{]߾rGӈ)za<^.m>ci=dEX= Q!5HXQyxTtnbìǾxawItP"pA  < m=;OF͘MyfϪZE3uO;'>!_>qހ_+Ƃa7+st2hhC!Zl<Bӣ4zi$ٗqSփ7xk LUޔ~@rksM/OMFlx3z2$|hn (aM& KCjeNv.H}^_jTgNOŎ8tW 3]PLZzAtfuٛMf2"Cwyp!t)mh &03tRT $zOj:c4Gh(J2z6=YNl *Ľ`)eXeMc43KCLo0O'2`)ѤY9:Be~}0%e S0K) ?;'.i KZ~߱óNsrue#{yskݤMx|;wؕ&9y뽠VJ,hm,ʭm f{V6 `" jx6$A`2>^{R8f)Qx~¤J>.~`<B >7ꩽW݁|?y%u;XbWUܓ r$A$D%Yʖ'پAz^l)Y-Z%s9`LOt;ݵ!$狷LOwuu/<ـΙi ڻhihj&bSٝAf\CJVJf4 1A .P7Tb"r6z1 Tg_|Bj1z&ݎNGvb^:Xq1(=v̵ۡa-HMFnƌ,3@BIY!3ի 9hDc:\MKêp9sXL DlcL1cC1haJז(̓T 9-2jc;s;ygG[$ZI&cJ2Ԙ?ͯ4ת1 1M,gҹ5/?֪w gRJj8m}fgۭCΩD ~;CIGKzDWLHEZ- Z4AfB 2J9W4ڮ$:u%B!P CSSuvڵeu9?141αmf)e)8S:P4cJ-b`]'a]e=@Lp.ՠ8i=-&BJY$km/*dŔaaei$QgbOŦQPv:qC{#8?i_O`I$u+r(/( $գcJ= -,֌}-fnVn0g ]Ɓf*Pc Jo4k  (Kjy ׃n7udUX+mlm9 "ْlZ(E5N7c7XGIcdЌD?rmw~ǿ5+PSq lD3@ .T·JC,k馛Cڍu{^5#w 7ZA7<4;2쓕b wmUӗu' ]DB0E$ܧ?qmw4iHE q@TKiêD)~v `)IF՜Ia>,M7SdԘ^z mV^mcrSnpaG.dm39E@TA%0BC9ٓVOuW>QS ȏNy߉iKY))!jX Ld*GU?4DSJHMHKo$zy#*8V뙷qZ~h"lޜ,DJ |+5.=aq2 TE"T@ݼN[>gTAt1&XӰyD&F&cW>8Ut'ۗԦFKYԑz5Z>R~/Z28Ke`m _2~iAN0 <3@;5s|ec8@ ?cJMqy3gWZ&넅 6v;.RAmsa$n>2526bLNGg7UM7-Ӧԋ`J+ fsեz짱hn #`7$4szP܄Q,226P.܊'6O@ANF<}?TF@ѷ.Zcl\w7]CԹ PkqĺLJSx[HMj(\Sm( l\ J^JbԤoD*y0QQ#ٽFbgKDWEְa4w&v2=PCxn2RG0r}ff ~ZJ߳u=,l2g3ibbHlq6*D. L00C7." DP }R50۟Dǔ>ߨ?|04`e)rL!h!ii?8hE<8EDil`T30 If<[1LF9C6 .8Q@{]WXV b3܍/ 돓?#~Kd<˝ (W4Uf->AgU|K@h rЏBe^w RT7;+u플44dʰM^w;)"] BFUźGjTĘ*yf#ֆ!KAe tG;S,kqǓayLz$yܒ<%qwϺ^Z$dw6oҁ'*wTM >/S/^_NV%QIB${-۾֪#f=D'rK W^n#Ms'asHB77CCom͎UƭvK_Cham5@&p+t'epbo?1т()R}m]jUnLNK.` m)fUVɋ@0K!H鶩P!v )hXd2<+HWW#ve- P2Z ":O}= _G[/5/QJDzoz =;|MoC=?A@ B ;KpQg(AE0p̂5;PjdPcR7cXW/]N+l&3_zR'FǴ{YD/<e!ۯ|爝RHR5BJ=[^ҕ~CC<,Vk(5?`P"Ӱ  JJ~)i-5 cUmwu~v!U.=@׋BGi2R"_t^:ꁻO:>=;'1T2JJm5Rhe pK@߬.Q,Ȃ R4y22)b#! C'E5'ۏlzq([g3Jʅ/{f%xRO17{h'xn< /+ `k4j/cMC4.;E,we@džyc+A,sN,x͉CD(V Ԉɡ! ĄE5 i ywx h6Elr )m+h` '5/s-mv%@Z$>zuՅŹˋ8% ~0aaԩ1E;HoQ!˒,p2G6PǧѲD.)$~_R ? ƷO'/)ۢ!&&ޱ|&ZII滺,隢< F.v|J~($M}sO~ԎT/(&6F!%XMbA̅E={#ʑϩTlQԀwv4\0n")+St@H5y:{fiI akT;,E k=␐(xo"Υ14nd[+~e2Hep(4sᾢ1+4z]|ԐWh9V>deț7VJ9( geΔţ03/ e7723 q}rlGH~I "h"]]ǀc@L@&6uUuy Ɲt*kY"&m pV%o~ѯmkO=:Ǧήzݎ~cg1cPzVά5EMT9Y*\% dx܀d b)@DBʺ@v} m 6z SJNB ">iEA].-/ [sF Aޜ*22Q]* u;IYRj覺 {e>W50t9:fbEmT8o=ս~P}v|4w; 3jwo~'2pRUjX*X1JE\Ҍ=`\XefA YZ7BJ9YwzavNY3ScfP׵@LD2p&yF ЉP0΃viZ0!nu.쑁3ݰ쑗!PXS2PkfFM0עJ3,'緆RFN7 QOEJOw#V- 6`3,Rhu)6H*zR=EőВ ~ R8"6)m?:s^JGN"9`HA.m ;JpH(責l.q߀zboU[Wn(Pȗmx;-i eZs?Jk}FxH1p) D茷(4(\e`W  h)Mϙe[Ud3#R0E`N8Rz.B0b@C$S͎Ie(Tw%JTPzsH6Q9ړa%"2\* Bu;S3+%#EJ6㣩G4F`݌ҴA#IW@dZA@!T$!SP'CX"̄qQϧS+zIiDqj+2 4 {J屓0 h^N V/ .^LGziaSU}'/+qT MW|L&Di Ltcu=d߂oR-+R~O+Mbj{='!DRvR"AT:biɑ =#)N(oIԎ^ xv*ݙ˴p%ѕ.$L`H:{(7΄UR7JEUqxOR0WbڷzowHzٕ祿Du' hH[`:*UkI(8Tr:CS3S: XN .fC${&Lz([2UGa6o5B ͬS`8}\]j uM[}9 /!LtHZ\Dt8g."\t%#2F63M(k@*UP-l~$%W[|@N T4V1GcIz]C!9]l^mw39i(M&)5C:4KGjLϤ5=cDu9%ap 83RG9#.@j z{M>/*Krqq#zi9u \%+yD{TsusHbYF~ %CM%\u$(A-T*DHELNTLio)/DK qQ(& #]v|Gv[GiO9aQs}Oe9I&dųJNZwY ,/AUWM!B?b!`)JCV9 `,PqU!_Jl_p"@m|{V.ƪKJf]2YU!g.MSRH3!2p*(@s 1j&ӈFCSo:Po$<3vZ1 +bm"NێI?12kDop3B}7xB#D1}Պk V*X&1 D@CPm$PUnf$ 1@Ui/o^`[/"A`LAtUB馮R *[[BZHa@T䩯Db%TD)F]CIATQĉPN=ou)K% !C/{3)i5b6oF6є ':dXNFGhIv΍$;m}DDL c@JR|9pjn#mL(DuOr"M5KRm'MJ=Iz{N_XOwalFe D4e0FQ`lړƭط a*޿TǸTGb4xx 60! GolPd!DtZ2!DT={fx!"HA{-Tr sMiV)RP>S#T Ga(sz){r+t_aSV6!Yf68Ji*@%1vD@Ðd` Rd/v #Pxj}lP!ׄz7H検0Y2DD`P%F1`1f& A`3x톐@ }9ekmZ0m`W.nm}#~]'o>h/޽opjrt67cd0/G/}R&C׃)%I(PAAkk. ѕO5a{* %xJ¶M B tF˹};Ʈ:0{f$יJlhd;r~\8<-oLs7{0֤Cޭr&r9x,)~ dN@'xwrpP_:mj:-9űdhyy ]H+hl ;F⫝ƬBHM,njw+H%*\ema }xIHo{K޿r8NQw{M>+Y Q&X#]CN[_I>63f_yX0 N:t7kkv״~󧟼>*+Z'88_tޮUkg@}-@VvjuZdX(! ,S(qyЄ !DP=u8@*s4<\*߷klbdhX OE-|Mdž9Luz2I ΗBߑQt3i-R.fʤG2*նdJCcf\55 clYzym!cL4[JCw/m֤mN *w[ZOZKX9ͨ1PC'Hxni+ Mb`<[R#2j@܌g{f_޹'6x{~gg/5,0<6E4:\[UrzE,[!`@Y-9%i~=x1 Ԡyrt2T=roqha2֗>s䪽S#B.o<j]7 g!*AX*0͉! #@{3 6ZP|e"㥾¹KGd^t: #UED kܜ| WM`nmuGޟW]PJwJ(Mbq 8s{I>JQ6f`A;pb>ܸDiliޅ]бPvf͌֎==-7ݲտGWo4y;-ܨp`0`[vrB[-%PǨJP*9Ԭ,Um?ʥEΡH tY.n US;F MZȥf?\`uzƅC[lcAdRDWZFx7v]y*`" ­0 &$RsemVvop~-=mWRmm@fb B{!WiTtT굯jY; {_q!Z K6_RAK_mUPЌlϘxy ".Sa@!1w/<=95cBjxX;}/?#'NSv7prqXYqLVm:b)sj_Ew՚x9i*/`,3@"Akq+n7|TU{'LM6+KB ۾xDcE<8#dKTdQlV(([ u̬dĹ\ʮ3^[=uWͳx%}+>zoa۶asB(ᦒ_-!DEbI q{N ~j+~@ _qfD V#+0a.M|y ;Kl 4kcc<ܘM|vo?m7\o[x̌ZY]0Z<i'Oy4=z6"rv6vW*c'/pM~-hqH|CB)+nxcn^ziR$CC;{deG䣏};;d{7G=η,q. D<>D?x=y,wh2!+ 4WnHh6-DeDt褴}_ԐN1uݶd8_> CbmoןØڹ9ȇ־ݻʓ9{YYo0l4r;1 S33>4-e<SGak̙o5jj}Y"ѮzTy,gf~#mic̵,+ I9W<q'QNB$7m۰'ȔK IXF~*:lb(kg-5sXWX;3wڝZ^c.\Ya׎={6xᡡե˹LFVU[zKCNЙWW`ӲAv#O|O :RY:sE;8EY%DDùkl)i3˯t>7ߪ݃oݻȸ#Hv>o]zl^.kNJsS5P[\†"+S [Ȍ )BHAЁ2 |] "̐eɐvҲmr`@Yb5\9ƉM,%kE3A+Q%g?V`"3s} NI P`c^rnFzM>FͬgEQ.ҰOfD2a8qY019箿nS]%c8uЏ>sZ.z+E' R_4'8740x̙wNR!g߷h$ {nyyeUVkiԈA4 zbAYʷ| X[9!D\톃lm.u;ȋ{]#QO\f|c/m~q3~nn`&fF*#ܬByiPi@!zaXmpծ,9h6.>)KA "0a4i{ɫ|gCq4M0Le"~O">y{eNqmRa{ItLMF 㶜b2*z25sqToFXW7?dobP(Ϲ-3Nڷ?S&k 7C ү?;wmw{կ-,}_Wy-O>>FO~ SJ1`xv}T93lP҄/Zoh<  MsG}t}6ZQ&S> gWVW0|~A,-/]/^^k;N}+tY9ͧB<&ѽmJ37,YlTxs=h-dSߪmnM>&7L8V[^M,_1JR|>?44$juyy255&n&#+\DmL) 䊸FF^OLf^5~?nM]݇ǑŒʦ}gҤ1;tYF$cx:f}E6]hc`˳ wډ5q5I_w5W?w5?'++G~򖷿_>?}>bs^X?? Z882;;{YJݻ3 !$%/8/wxӪxH6aq'{`>y%!,x5?ʂ {=TZEH(MVVvLRI')mgNxszɱuc);qC\8tݵWy-¡Rabt̩_^<|ix~_F,ݴ? =4vU6Җm8v^X1FN?'7W[]>z Ͻ_vۊȱo@gr_R,ڹf*?]mVLqDl@X{kx/* sSr L}5{e oO(J!JW[NꗶV-A~̂\zYGC:od%'zLR\.Jz&IҥKr9i%W̹d~GIv'ɝh%նk}X@&ҫ}Kphe @kņ5:nxK\<{z,ekYa[;GbO _صsW:3֖׾??~iiû5BAz-<5w۵B뮻˟Dw-wOdON?c?}_[04᭙} 2^nTؠf7/, KDTI6\m{\0~l_db]|ѳO$oRVŵ ؼ.0$N.Ĩ>{zyuyūN|OTLĜPU}R~&~5ɫ\RnYV6-Jmql6 OjRl7 IooI^$zA2Jd$~z!_]Eр,CzMyJb-U\JWOGeݿkfD 3:14)BɈdҚ1/M_~t쩩a uƿ_߂k{fvl|8>|Avc39񹟷?O=}vطgVV}'|<݇G4ohGg\4[ıӀA’趱Zո[o5%26+Rb֨p#&D`SFk -DWY93DwO7O~{_Us}|yYnֆ[YߨoFF7 dqL9-dq'qdXJLesJ T@`Rدۣ.0\.N9nl&aZRJ%˲0t:\.ik&]8VH`(v}O$kz^Л`LF(^b!:神XLjRАD/FSv&nGՇaXw9Kii&$ 2n~z7>wFgG?4{`q)^};~[n?/#iVܟ:zyȄYwܸ?j{X?9?mv!HEJ$4 j8CCC\N=^c'xPR-$+ѫ+!g&3%֛Dh.Zh㮷Rݬ>9xavw_ZZݬl&N4aժnb_ak@!w]ȗLa´G}R37=Sc3{s?K9cϟ+db~DJM[hp% bVf&&džG8sOZ!:P&ymsq9IA5Xso׳_Q [3'Hp,}``S'kҼfu;Pn.eMBMK㿶C샠8\Qw_LB /,QDS%FVSsdpzI|>Or}q*d2TʶmuAy>JrWӴI_o#M-2KDcX+)pՃ,m^tnǮN˺yl\osqץF^,pּJkG3aۨpd;v>^l=;^~&FP u'ݻ7ˋK;&'iV(|V_r9OV\}յp B?t\mVbu#  S,q߀<(ki#mX͙OzdwI8gγ><3tO+K q-eCyb6?YQN' \(TV@opl3`eAXef~xcc#˙`T&o/]WvР뚦ܕ2WWQ[yI[U>l}6!Uh"&Ictoܲ栉^pԉͭ#SNsO׾_z{{ѣP8jhv|!˥ju\ګ[h64fBQ'95=nqX]K x/}k?4߿yLɝVNZ״Ѱc-eN?Xadcrh LmkA8Ɵ) {P4|׏;-u5RdDt(b#x,&:oc_X<`е;3R5;>^ʏ30sW[F!X}똓oMgf*%)u>TO5VhTN輶mR缝$\EQl6=ϋzJJG 3M3>&A0Tfk&q ((6"I@S=X=$P$ j:C͂zS}?%~)T~ۏC0 ee H«|x_H';^ا|~=Yu% Ş569t)w=C?[*粹lW_|Gݞ/»_i?~k3oݧ:b)of.heƹs[զ Z)@47O}'g%Ja<=۱XنW&V5-lݟ?V_~2gPjF:3ਅVd7qMJۄ4FuMi`ot0?7[|_kǧ{ vqeT®1TM@w ul[N|HfI39?=U(,KI%[(H$N>c$ߎf%aY\.%%$6䓯:*)|%ԡ'f|nsH=p9^|*u Z'.]1elǻ~hn4VVV%7nWݭ3B2;o`C^Uرw/f:ԁaRm}(p;8^Ы;|h/g[㟾?M2HJRrt__pM*$dȜ$ONHl6lFyv3'$#|" IړD$=Z$ptxpWxĿ"@yyz} ov>ȧ5#h7ͮKVkǏtoqzRN|s؟|빓g]8Who]?u\*m xbB{1{'vqξC{\>koU`_9mjƽwc|dzW]uZR6.X=^J}rt왥K)PЮoR 1 K]c [;>o ti~@!l?H5ʥd8yY,#&y]%4nY z\,eOX+ESW( I!^;v!$?I>I|NҩLBS91vi҄71<$e@ǝNah4Ig^5(_%hp6Ub|?y ]d}n]r(66Vɚ{Ld`693|howꠧa:Q8u׈w#O^>󎌓&KHiZfvn?-]3a踶I# \^\zΞBV`fRvUg)|؆On9c˵5g$<(5[on>}2\Z[n^m7^hʔ4/Ľ҈XP9Fk{wr 9s8ڏ4dHnΞo[&x!@Nzz@U W@HC0M9)'< *`mNӎlSU8EQt*m'9+n4R+y\W=$I-)uUH!w]HGO~K< X˴ݨ᝝{|b|#kcK΁fįڏ~'~ʗǞu7^ ?3vVF-}xNN!Ui+j52Qt㾽>?7{ǍLTsS[Pd|ۋ^d+s\ FיL}nZ:\u'g{Loկ4(/̖\]DMGd"n>mF#TVi4<8}12v:7>O<_3_loNȥQd(%4ueyD Iii\.ɑ)/I*t:\.h4c{ C!DTJ=6ɗl'NoE[نeOXѡ#onZ\}yߘπPyggimL9/nD[ qAؔ`H5_([C! Dw0z;DF6cs'. 䌷^՟J/5nҲXk>B!k-wbp@JWY*[}vuⅉGfTQʕsWAG+k=1WO~ϑ]+ׯ\}^5֨44RN.w M@88Q.zM~ą}}r!Uj; ZfA[Dt6k#"t HbB죀{ mhiIpޥNja +'2A [q RTg٩G)M6x;}Jk7a费4;Q1,|yPطO]\W}oz߿5;6i6y|i=;],GBZ)O<慳ή,thNZ,9ʠ/7f/,^:gc:Ȯ;-iEhD>t(=`dEͱ}[vw:O=8;|c[s^gCCq$ȻT' @GM Ð<IrVZ^)5^Xv׺4V5bF *1Q+MW%̲^c%G~[- IIR Fm֋y(Jͦ2ծXZv \+coZ(D [2r{Z'w1 # uZZ?v )۞!^ xd,81~Ј&w2X%wdd~㇦F&Ftch_ mX=T4 ȶ/9n_|څŽ|f~"Go{UTiu V},Kzzʚ[SIH{Lax ;sx@'2-r)%M} Dntc 1| k 5'yK Y|>Ijj$ H߲lBfKa~4qT*np`'& ` o5:Mϖ .lD8|7h:XJyt;v۝r*l,d]VZ 3e6[ZX,8}cRYA2 K*xpLPl $@㡲m}m}ggΝLZ=q޿c]k ™ zza-rx;K=n/v4lOw5݈&_Gh `ƕסHCIY%t顬C! JJ~]lF4^zi2ЏE JZH9 AH[InvdSJ766ͦQz:u=ɤT*!l6L i $$OPM l'S-u^u 0Brz|/fˋeu,O1@hV->ylՀ쥮$ 8 lH힌WVFQAP*-˪jQF:th_-y vH/J䫒K#%诵ּO|DsG?z͡&zxsiRn}{33X4XȺ6Ow4Θ;f6*[?nfʘ0;RB::T,ږ/Z7R\])eKc j#\HT3l ]#t:7\,;Oݿ ?nZXe߾:|;F6ߊX+-M5Dd50#ɤ%3iĥƔIHJpyׂE Z`#̭vK9|H4`|疔L*YSAzƕ=ߙ^k n'Aw Iu9Oۨm?4}NНI2bfHnjܹ3z#%a Dn&a(~C<79vwɚhvm{Vesxpmw\o\RgjrPZ4Fs̸h4NgdxhcscrR9wM{~y Hs.VW!ndLƬV`9Ǐ?{>|?+7/-n5[~JoollnP4b~̕},U͞PI͛^AIP2f8fjui_ŌJ:,l减w44:Mi! ! $WH з\ɝo$OҿOC#A"whH\A2e\ɸ f8 )6B}rFpbmҳ}sMη.YD'&5Lg,Ա ln]%H-QݎR+E)5*YGP^B PJ R _|WMqpnj8'JiZJsݳ?O_$$Ik\.~%_?uu$g[=%ʹ慁+RFẮaIt;`MefC3Y-7.]hV]ӱrD{ŕёW"}gϝtnSOQJr\FLhvjq"]g{S(w}k|KfW,`HuV6ЌK Nѓg݂8Jĭc ]CR Cj9k QuȈeY 'i$^F'hۤrJT*ev9ɄA\o3gfg=qyccgM8rydiyq}{ᖫ>{w5\l vR}limwG˥zy\m=講9Ԫ[Ѽ{tV;UNk; bX62Y(FHJH@)8*#Mj1ꚃatJ@yw|FD$[y %0A Ni HV}/iGQ1 SL!K*\I ,a$4|HRi4|T*---jkRe43@?IFa`% <*ۃRi'8im1t\:Z:n?S?߸-HCEVǞ}C'9wbP\|;oYWÜ2?u_O6LCn&Cha߽?dEl553YTFrϊ,:ah81GRP%rRB4#ʮ_ J h 0QJ2СI(T` JڕC(CT;НŢZee&!*@(TI~- D4dBn&ّio{ۖ{k}}=[ .(9 ' t:=M em٬Npo@mZmŏPa ijϿpTF}smy3L@fmԩ )p xh1BL& ?wuh_[ݻmI;˛+| ~_?eJGhh2 策d#Hǿ>r.d(>sqe yBOiWB1ԣJ3P M{At7ޙ'LNNA.b$bIoiJqAB#=cj6T[eDaѡ׈uS5 6$1z"RͥW0 i'8n4&ʊmۻwT*v;H"bbw(T(Q@I66:7&$f/ "$U (@ԙ3mlz[?}R?r`(e7129ðpiqϜ=^Qߝ)K`6J2E+ fK Oں83}n M`)gPb7\",5&X`0 G;f@hS=i=uI2vxx+Y)5R! M}t0(CІg861b! M]Z00H@W%0LJeYrA$v}ܹterckƷ%x0 R3l_oW8Tٹ Qk\.rwE/ۖ{ sku/s'w K_L6?/er;v}O~~ގh-uaR\t?eGqi# Ѿ\a {Wɇb|rs2"`Xmo` y] Rr#aq*8&)N} W}(&| df7hphicSi5&{f2%%$1:RBjT*b;y\jՉ<χaHy~$In7N^o|߿hg({]^?~ gO8~ɩ˫_Wvf?o]?{RI=sC=\#L]?Sf^l^wd@e @! L Q!5hL(;{_2šweC.E0aDY,)kw#/ЄԠ4]!1 WsSQ i peӝ;fhuXVH!d\r0F.}N' ?qJfNIؤ A,ZJ#?v]Vq2|VM|ᾫ.):ЪqA mC imcr@q|tdaٟ)};gfԨUmxكO?O~ xˎc'_ڨtI pqu>bߢIۮMp-[ 9X2>]JY'7 V?kcg+@t3 vhAH"I/gGG{AܬZ3v(1O Tְuۼ4`5D3P.9rNV͔k\?aˋv*]\>#K ], m8W}Z 3$Y&''BF#}?u[0 %܀䓷j "ioG؛$_i|dl,_ouùqbaF1~tF{ lmtr ¯|勿 ?w-?,+/??O͗jshho_yR\&aԟ]Z~g*[" ϝX޹c_h\|; 9f]R쑜yҞ|ߺ[nNFOWʨ Aȋ JFR)3` );16 Tݗ1BPݠZ>e(حgRF={8$SRsۤ`gh2Fffǡko<[fxNA 0P\ߞ~O|oܦ&wf\8Jy;"$MOLLD (Yv+z?^(Gߛ?5K< ,bjg_֛{FdXG??KcZT=wٟϿ>ןaAя@Gy_[G>G?y{іz@IPK^2F+R<2fbz3BvkSkZMpd@``j˃!w];m'bH he#ݚon1ݰ݉ (j`vJ<'Tz͉'شSȠJНTg"`As@2T*p@GB"۔X?"z)P躞 痖F BP( 6660)kkkI>'L|0L\GO??{7P0H+ Ө5g\wCx AW񧮺s'N;GG"Ż6[TckCj3^]Bk:wjnԮ;};N 4xKz%">pE]kk .,׍*ty[1AdtƅfZ#&9zujx'b7Ͱ}i-l{~4ZaTVBsdT@BMCmgmM`2˥9Huo6׳rtMT;\ϏikbUC `e,D3vfiR1Ms||˗/gzv(JZCI)I(dt&?s 5[VBzCWZ^<ُ}_jM.}o07zsϟ|锳^ZJ;v st #;<&nUbcCн .WNk+=Zӧ74<@Cd;`w_ݱssne!r=p덨ވЭiI)wAMb${$"h=`F `1g7^df)3ʥ\^<~˖HR p4W*;"FF d|JVۢ&I1j###\̙3a&}]v %-|>/JpI?MɘMt| ?}? rfon8Mqyhvn}/ңEknaRAh 3 2 2<(<x>Qw!q(L&7Mj.-/Rύݦ|ĩc ΙKS(4\Ԃƙ8 4:2v̡nqlDԲ# K] :Ms=OĄ zN覤zʫ=m*zҾ0m6#GxNlt:痗]MID${K6}4"o0z PQ;m:o(|jcsP95y \uxWo=Zf|2j3SƓZIy1({={\}ًV~_^܏o.G_:|-:"yV @y$12cǔ1iͰ]\?6umf߰O##汮Ö:օBbH0VmȀR@"PpEX*,3FK8Clٯ~]H X#1~ j D9G4͝?#;5g?/̋;YvY}gOF]B5FCE$ y"e֥0XJ(c\.5#mtHFK }XFd}ŢW+2z;kJxdqu%1넚Nꑫ]hJq*d*s_+@BX,5Mk6 st]w'ADqUP z779OFӧ=lE3pQM(rr/MN'}CX/MRuLeFuSR筍v z}\:fa9{3 Wӓ]E/,<V,#<TkF6%_=7{aP}CWOcGbD0zht QTC(zC @*)@,rz$Z5'M& C?hשۍ.#~Y𨽲 4 Fa-h)g3q t4jgE!}cr( 3yh4PIT߫>$8P2Hv%*HBzhl-zi7'eSz"뤙F}鑍Kkm$ ,JMl!N\o8b 98ZweuKP+d-[/;$Ր0tH,qd< WK897^.wG6^LQ AՋ7nŕh}RŔ$"(;m߇Ҍimar\'L5ݹ e~zmVTHM_]2?IzN\_X?PtU=<jn*%}&Kkwf҅7_pCT?ǏK+O "".TLOcA! Q*WiV"f,A4;pà!T%錤@YY)JV,YhF6a X0R%"q{e( |}y$(D*ay @]_;u_u=WEyi2;Ȧ\ {a7\6/èU}mS_IV= y)uUEmEFyG ۀU-RH4 oϟ;r?wwNTF+=g'zy't a *F{5kNJ}6n>͵_fc_=я瑿;O-sLaGܗ,!b(+,UTYefьx۽x#1Eg1gP$xRKSlV/ՊnT9|C$u'"c ei * Qfvk}+ $!3S")‚乏$6H/M{pSa\eh+/|ߗ!.6`Y:iL;mL>t;N|4=TP%F'ajU}l `siW?87Wx&ic}=t#}tKoyc_y;" cz7Y@Z?Mz=ujg?sr'fѼ oyQu}}U^X^:sa`!10`)`q {B0d$c$I8 (QU5UьQ/%$M'#B9,B„q1`L)S$&uj(@4 Ё37  ibNLs?(Z֐dؿ" HJd?~` ƺm)3B(6<+^ܸj`hy(3g.\٠rs3 O=Dbi6 Y5dg7OoG*DuB+TU*0y3?.,iAjv Pz}X8:q[1jcn>p쮛8_}ng ubA@i(DY11StiՒQ,V,BL9 j`; *0T-u<](H yAH\dASIDFt 4{ƯeZiC'g4)ZQ箁D_|wᗌd SĹDq0r@!|"t hADp:ݳ@VQSΟp.@e00LӕBkkCg 4)?9ϒ1s<͎˩襢LY$D."Nq...N+eP,P6Q' Ű@0 kz.-/#t]1xQ"wພm!,)2̆Hm>L]erL+ uiߏŶ+97Q7D'?0H RHl@ƂAdX2r%}!T&=T?L~!Te@J%N\l+Vo|N@s~m{"j̶w<;5)DLٚ!J4(#13fN RMTUM0b ScTp+0fBaԄKꗜA7@4%)Je*SU$IfҘȒ0ͼ_P =oiTzCTcF@)G[v;*% f8/wk 5xd.lM5|p|/QӞ|b7sRtF.ꌺCcn)];g fs5n,$^$D N0T-}LQf  0ᖡTI 8b! "DsC+9NSahV\v}/̈́mS(v+%.uѧ{?wDeYD4[NDU%MY֊cPUb԰ H $8 A @^ IʐI ␭g;2\KU {v}6推\%Sn!9\ݓ1dEuWn9dSٸ〪B8@ v{w *,v.j/P(]|// vVi~`/*cggs0,&хҚ;U9ܳ2y2;;>ȳgNk ~␈مd#BPBH=EQlm0I@YYTgL98!PpBHjnrZvu;< aqa R'y#9TOOF.9t`ZTp(Z84KXZ:hm-mc4^QE1Ǣk~V0~K NiU0Fc7e`ȻWmq.T:YoF_~ٸ9`.}G}sYJ[[}{^vF\>0w2>*&(ȍ732&/ 4 #H2b%Aa٢ :K$~ɶ^}̗񩒥ݩك_}S0}[4EszA(]/MleFid%]=21gbkT:^fjy/-Jhq1J CbwhTo=~ƇakL( F,p S6:N|{:U)Ob(8ׁk jbei`,c~ST8 L{N Xx+.p6\.4F+5NZ)(q 2My3O;P?v4v7PV14ى/~%ܐ?S@żg(uQ|+[}_ЍO$, BdMQZ.ȏtդf *4`U?T,X#;!Ab44!Ba& *FizgXeLgܾR8}077 MWJnB`.BMȶWO_RYqRj<ιӶ^XMh0ǩ˜Q9In̬inӨ՞y+R{<]u: 0a真yc\T^/:s#7gW>0O?շyW_};n;5%= 7ѱ7ҴOQꉩoa[ϒHPOF D}A4 =Lp<8V0b:cǟx|qiX,.bTX'vgjjFQ;/E\Qv\vRB$'L ,F[ɮv6b?r/S8}&D!qh: fal۠$ĩ"S 66z+La8C<&jݍ7S*~ SE3׋8Ak""9L{8ٞmU<(bMb>cD !NuƍCqߘb/D~lߔ )Q RՈeRy &&jvvUULMrC樂Gi tL  EgZC2-%PgT xa"P^v"_dc:ZRrc_)5 {(!QcifZ}4$@r`p&UغZ[(xHܙr,4X4D5+ )q&wӁzٿ]h/3ӆiKk.(PRq+keP8?zG:D89p]@/S}Abmk'_N"i ɑA& "!45ExH0-QABdP.W~դܪ1+z&|$8aJUtfR+3X[[dW8B cgJ7[oR4婍}Gi$)LZx;x8 L ˜K gPWX@RRݖ_/FUmegm7⩦i*~ġFaqϸ06|_pi@tq1#EX[YRuiתU078+U郊l/w?x@r]/iG 1T6Uʕ+޶-78RJ9uqqCPFDr0q-$I%Irv<ϱBqqx J ;+jT+$@KhL`FifN=g}u3ER (ɖŕR1 ]8@1 *WMsTSlE( 4#$@w I q*ϒ(o],TdUjL8u G%;xB%鵺8 W68p$tuqۭVUסeNT %hҢ֗Ǖ0;!iʫ&v M9#zn# Jw}Wvw1SBAܝnOLpTG94bMY(1j UkP!fM Έ%~L8N~j])(I)XyS$Ju]\\əF^z ʐ & Bމ$5#I L#DmvТiw c E`P0=ɒ4f&BmS_~ !  QS;bG;Uokrt|.1r๵rz.CJ~UbndC,[|vS HB0u_\лz?7+AIW5RUcJSh7MR9j-x%v$;EI2O՜5 ,E8p)vjj"U\KUZ0V;hz!~gx_u:s|]'fS/ UH STlz/-FsþfBp!J 秄3yw@yU(DŽŠ]! @2p3NqjR)[n e쭾Co\ޜ)iPf:E)1PUӢ4c1(wJRQN^)^+_͕)ŷ9~s/t[FuX~.|Jt4HP 9pSE5D1ShEzB-ZHԂah/*͎2-/Mkfl:6akCfɚZwVC5-tzI'f,]]^4 z)RR; JB $B%Y `j-0G hk$-Z\~]Z'_u-A2M$aƆtT_Ɣ"Jy̷[`O^H9㛈$2Ysv#p15  LDq;y51q()ԅ9J]Uu=24U<( ,"+zNvQD 0V.M=B.[^vW/a(rj!2 iaj\Jb A!)e$V<@AfQ~0+MvA=F|!sYw {#U`\wAll?+B-{N`аQpM$qdYBOcLQTm0\-$b$Y^TXU#ىV1ժc&V?Q)sO|iQrv8Su[m QLY4Bglj6,PWu Al6ю 9:)v knOܝW͍c|:ߍ9?sx+ W a64ڃA5=1}a.-n PP g;غjtX 'ӢhpnFcV#goG[^uZ.ƺ~ ˁ|vOؔD^坷=ps@u]5hɅg hd\de{Pfve#L,(u7V^+6աdAhDG>SsBwib͆"W81, ϓ8v! 8 ys}0w}/s@#R֍8 $(C"_Ƕ dwr8; B|abtSȹqB^䄻kuw 7?/D5 Lwg kDY&x $b'Vb8C~^!4_i`!Ʃ¨e~/Hq#.9xrKEfwtg |g(K o!YtN!C{.m9x`뿮#(%%SnhjrI`эcԘWp\~G3t:56>^1]߫+zHaAs,/ijنX\ʣ=EO kX74v}=%=/ tS,Yy*ƒXLOv}w]Oah@=V:t\3tMJE%t42e7i=7\ \N?ؙF\ C&'fg#Dwjys\C,, ,KU@ M@Lʙ3 )P۳iVqձKKKk~qzY@w__WT#]*a66*ʊQܳ$<d`r ̤aQ^пS~nP+EN,0A@5TA/`dVo5UJG1VSO훞+Svڹ$菏"O?+IT a0({3ݶynR;tXl7זBeu R" ImO;0Bi1 SW`HVSM]q,02[F\կfgǮo<~) /_?9zfE]t:%5mhSGI!0biIp0{*')18!@-V:o Zs?Ex -( :NO8KtL*7pS۷(e7ii/B7\U s# y*-a'Ek:9đO0 !lAp-W>ŧ˖V+jE}N(NL O 4%M-VTesuMKygbajF],ݮpU3: Pʶ̨Fkyvގ, qDJ -{WꞿwWswO7[LU( H @Ռ 'êqƸB9|1x& F!"Kx8aNk͇'>޿HpzKb ZE@^k99a)WYDʙޟ;_xfM"I~W4cǷ+/%I$-UȎp]WǶZP'a]3MqKN3Sc4C,M`Z z@1^BИ3≘':5{v`A` 6ĝ(FI FMAy.L' .@.zf߄1`qQ$) zVVKnjOU:Vai6E>pBK=ШUOi CUaY R2 $,K7Lp3`?}T#dI.IrTVu0Bt:@)^@G06)qh9J{u>fd}cE%IˀD+yzC+Kr7a\gْɇ|ɶ>v.Scj[&>qj4~3R Ý`u79 >N5S!eAR:'bz=M(J?$ymI[[%<gAp1JAY# dN>(fg }K+fA.Uq0UU]a5LJY9ogR\ $zab #~"e0c'qBΰ, cCHFjZ)+0Y)TS hfELJvSNIJiT*( 0TΏRek7ƄeUB^yv#k;LY!6˳daS@>D7Zy"h+&EJ?BoW~~h$1Z֭9 ߹Û=پxݿLP)]Ӄ}w|N?0?kPh^1H3HvyNLt:m H;jmsc0mcA`eq 1S˕`fI $6,3W@$14V)UϨBX(PU!D;5;-4jLNB2iÎgmg]С!5n?UKktA:a1TO:÷202,Xw1rV=g0ƪ 럊_u\O4jedǂ *n.(LBrh(R0(O~䙿_zQRl+'RS(W7qo4_)7zti oxk^sTmcAOcO\gROREtO) ,P{YJۨwrճ"PEGzZim*\R fa5o t~cO<EAwu; cysg~>'>ϩj#Oa’ę2 1O}ϋmw~2sכ8!c!cG0>H4_?_&rx 7 ե<'gm7M(e enRBV (.&=Goo'!-MLcc2ŴL1-&MF0 &7`b/s2f!R.=M EC R Eƶ8iE9 x|leV7bh\[vAA2mL uz~/B ge/U EcFٱF!+&'"Qڗ.:%e2_޹~4Ĝ <٩[V1*(w}2K@g'q+ef[p.& ; &'?yݨ/joO}!`k L$7LCrL6S^mB ^"퇧(sh ܭnG)g(}@ Z.4A=Pj.:'dxh!&''n>/$`.0Ob( *6.e6Y(kC aU9h4rШZ0Z)Sjfv{z.TSJ^ⳏէcӃ`k16ADIċͅȷE;ͰccQේb(Ah4f(PJXiZOtccJᓻȈ90d]2Fa7_:u,0rxZoЗn.%պosI8YRUϓq_cA Ì0LO}֠`A6E|C4W *BH;?s|47:ZJ>+k~;?9rcիc_)gKgֺ59G`D"uD2;Iln25U28J! tBi;M{Y,,]QTdQe1k;<`@f4osX9gA@(Lt@2\KiR(Zv7I2 Z ]XKu]12K}_<^y0juj+Y:0 a!RO1fY'Iar)Iy S)w'Q1-Z82LU]7b*lCߘi5^c8][Z;*erMlܣW&E]sb0U $IP\#A>=@gkv0?hx|q/Sקg|o{='nR+ZTe !Cpnėwя~s{jqq#Md{oy6ſg($ypK-DϨ1RPqO0A < )4`,I7UēOA4,\QMCg$S9y/6:r2KTĤH+Jys= Sʹ7;[~Gnٶ UU:1ʌB1~߶U3۶buVjeW+]d5M]ptFvjQj.fABMI wSqvmfXa^ 4üTXLMwU?}pG>5_={y4G?5w._>bn ʟ<͍8LBB {zξ} Nhunssc?o~#!8vs6MX2DEF8px"ՀN' dd K0$Q,TIQjHOΕ{ KH-%e'3y*ay9'o^K˹kITm oV";J6qt{ɱ1U!ʥŋ~Tz8$^B-hEmyY4sd[YQTF(2L(JN7`W˕JE!(}HcA 2fH9N@J:~8=Y;S.]2cz=ҩu5d0p DGޱ0yny 衕dRr`@)ތS?l[1JoC[g}'_8T{<==RbjDb su u9?>|"F'H:>Y =p)y*I #\ }autT'+Y\V<_Fa%Cq-t%H !mum qۍ_0+`䶞d"?im]4*IZiwfYV(iN`vv,2M3(>3Viz^FZnuھXUERFBTjhQCຮqm4^D5Jㆢէo/_.Sy`_"…q͕剋PU!b7Lxs[/TBo{ pL(3/ FI'K\u딺C.[ǎ}o>^ &ޠi|SF}/?~aArPX(I!] )JF9M+Hjqh}-C{⊪,*LP 7₁|!~|AplʥZqRƪe[eb1-+^aX #ֺݦa[DZK35DpQIhlE;99V50ז-D 2DupO.0 jQhf,3HOGIr<(ʸ6Vm?—0*dƑ!5ect AOSl=ץ>| >?.u±”rq^o뙜ץ7LfeR-"%=w3L =>0SZA"`iSNP酒A}*K%# 8+>)4Jn3%|' vín/v;8(AC6\PPJ.R#@2ɂIL(Tw aZ-*Fm%i hgV|s暪%c>616sO>fK7 jmaPךU MLNiFt-(fZ8|05Febl6k0y܁8xu Уc*sQgyqzf?Ms6Fpr*_}0yHYbJV/U&ϸjI`dk:sNCE4V] Z{˫MUe]L0(Q)i + r=KJ>VgZjuM1l#u(L˕ʠڲmQY\(W5Ʊ8*LzږEjoܕ`˰,uP.,rit4ݾNU(gDk~߰J^Pʼ^K SSSD@%l 'εn^F: ˒%nȶK4/L>PF 2,j(oֹɣCnci*,[7AO>w@g2,,g2^v,$w!k5XZTlFy5P˂xıeg/,m% *,Eue.MqUº']̑>dߔ:0ڼ48wr4(m10˸밭(9r81.q4bem^,r:]R.RBBtKL2 #D*X\]_Y23^8FsKuBIbLm76.\Z֪m7uu-+vןwN3]NbZZ\661 jםhĆF}cR{oG[;[Q**kPUM`!~j)kAGq*y\L"ts_"5hTL','S7~g^zk~[kMB?1?m3?#RE5sO:׽6yuB4nT'/v.5݋޹Ɗln47A.f)*Po.^d&SuEHlu%ibkR\.YiyYròGKg/\KzMY^Y4fT( $v!4EJo)FBgjS(in5ۊ¦c>YK ʳ[O]^jGwX.9T4Pj\/rYEBoGdSw|_ Bo_K;uG ?<}c0~90 7}OŒlF ?ua$[+A-O=qB ӅB7?tK'5:] V'Oj \>Zqz_un7>QCv;].HV Bu̲TunzL E`4@R :LaA_G )U3A4QSLfrmO?t7 I]yMu)U;[ʚJaVR*38q%A;α5U0i۶CTI2zg=TCV̶ f~^ݩ̬kei.N}_yŽeJi4xSatn7XWv(Iyr<9sh`~3+Cn}` g~?=G>׿G{s8UqM}ի|.;T\J\U_~Q3 U(-/㏟ßO<cc2/}L><ݿc̙׷ۃ?ӏsNsϋk.cv|fx%OƳ4I]ϏU܏~ǫgq>YYg9|󛧣359=V/QIrB#AɅ{V*z+^X@څ.8Bt-Rẃq sP,aP(8U[[[bE{u7K.], MV}c$it^)~P4iX+*bPQRk1TՁ^(`:15f\,>~b;}e î mr;Zˑe*O~~}Kw =(;~o?/|){6g'7=أO~w}^!'n-ǿ}y:ٿ翑!E,=iBL6{zܣzOΩ*Aa +GO pRH3%!z0wtϽn /@>B_؀xq-;zlVEd%n뚪_Z7ew.|(gϷ~]́ 닧:1wz~3O=vwʺb>ťզa(dtt̊8hy`9/؅b((zx-Ǒaa%i RӤ0$J#KceCqإ*"(JIPXY"!(0mł!\Th1ŒgnQmŦBba2J}4VWi)MNrUbALRPwvCK/r}ڻ:Hnʃ+Y4Y&NcO=n_eQ~%m߯G K׷6wtM+S3?}wB^7kkk=Ч'O}?77] |U)YG9ȿ)WUoD1ePҹ1A)?i蝎#;W z.>'@ 2"XMk_~"KKkN + <t*K'&n@a-% ;Sꝷ/><[?# IDATI=Վ2+w=I ݁1զQ7f{-Ψ|,3m˜5>5a.+M,M>yQ!U(eOl$YF(,AؖA('a 0\&P } $1 +M҅3Ʌ Θ4S7&1F4LH8>9uJNO4|7WzV?G 8񱪡Bϰ,0fS8hb|BR!}SϹLN/dCR#WO|.'>7=M 3[ŸZ^Mw+\)u} /_uwv255x}ŅR%_]ݱOg|\'uz lX<_Eρ5y|o}|䦚N\|׻~cu#(ܽZ?p%':鵕uh8m0P}!KSS7hWA72f(x_2&Gnםqn=~/=-ɸI/t2Pz޼gqV~}?~~z~~zw@B81^ĕMWEg.lq*b9ux2QLTL-FQ u V4Cnj"f:s#3;13ר>;Qq>HiB^ԩ^S7 5AZ4ELWuvg 7+,CP jqA&J^[^4M3\Ccz& s]ʡMqQFH>!qZ9a~(ivn:z"Ȳ~mZTL ŋz`] ږZ%Zcnl6ku Dz)$z}ԔIUi ܾeWga(IEo;by~=s9 +M"eoSV*O|kb Rzw}Y@]6 /}=rڌ-r~G[WVWPwnFLtߏ-9z%BgOY*a ub Zq2u0hOb3aE5<7'pb#{g^=W}}7 ^n5fiʙ4c@%is ^"y;%Qh@Wv}eP hY*A^;QE)aP,1M; piF }XRNi%! MsZZUL1qq9癦iӳDQS,833L{c,ʍظЁȫzCWŋ;T/<%@UnFf~=]DV\??UdE7>}ǿ89onA^P!gg0|h;ߋq`6~H=m=UQS"' ֻ~'*JMwM*eDQua,L1ҳgzroT!ѠW"fqY'H!ko:PĴ)$Ӈ6$>+$M?R`ܷ"g/9O(@`y`]H#i6e|T,Ut#h$D%B@/`0k \V]( cD+a1E))j&Դ7pDmTch혆tݲ̒iq4s ałe(ce 4|:V >MCGavƯt䶗@kKuC. &xw|?Qc;uԡV=p/ˇFǣp_! W\=ؿ6s.//~lJ__~o~|yfS:69뀃ZiA&qȠN!mj$2Eaq Z@+zU圛(J9Z-˲ , @T> iEwqizeпK~WC/{.}x#YW['W <:MR? R:r4x{뻽^Y]j_Z뷻NfqzoT0a+7'f#.T,Kf2,U, mUU@/'ѥ -Q S?}$`alq ,^d R)Wt]7Ms!w.'&&tAg=u,j{aY dH3qbyBJ!|٫; 1P*frk>2FMmt&2ΰ 0<~Igfr\k~6HB xH* r'i9;` F C/E4ILa;Ws)H25}!%L$,AQܼ0m;ǎdضANh ҳ |,ιɇc!DEY!Rj}-m1f$=Oz#A$ {O)`}q(r2$ touuurNJ?Mg{ @tGEӫ*&x:jߣ?s>?{^i+7(y @r )O:4jW9&sĜUDDM軸[-\(g/zY [I?tڅ If2w wv @))LS fFHO: 3֏1 2u]W:heD; "P=:@.$k:0=00 7tF$ GGq]9/֟4Vz)^ pR2m}0wH F}=pbh|IYWjGifƶhڶY Q9]UmqY,Mۜmn4/mKQC/qN*AdSk 0hT3 8:U53ytV+0$a-erYFA-P(( g^'3&@ly0cyf{ zr YNsVlٖ0[}oieCxiJ4;^?ո-TS~wAl?9[lZęs![( #@1s2e eYu9Ja-RȝP(Hh}}_.A)ڶDc"y'dGArɫݭ/f ۯr^>k\ծ .λwǸ??~m~}ČEQ$w4mjjJ Yʷ^+Knۜy,<̣˄O}-D]\븑mN!/iD'X:nQWMMkygv273Y0յ%O/7GIs.ȯi @@H BW.2/SyJ$rYˇbccCR$B8]d+2>k~Tǹ/]׵rz~\'Ukٕٵ3HunnR<~T*[__a}+ GyIJwY8ofYٵ캰aFhW| 'II+W~pae'}ハ|:t[Q 8a*@%J;Πzi R6n;s:xcrܺ$y0׸7'!\$ m;NT*u۶ݮ]a$뺅B8p`bbbsssnni8FSy~5M<Q0 wGz -[#cbIVM" J2x:zhE.\p'IJRVw'+:ò&p)*yeۑl'Rs>/~̓ZnQ (UFأ@*㖹#gpؗ{zq[o0btZy7ŷ,AMj!EQەn;sԔaz}nng}0YQT|zRIG(0&L+#s3!CrsY`WsWJt0-1t)ar2۪9r40 GnA+Xd@'aU"K觷Z$5J h"hSHcM&*#s7|hf~ѨcrT__>e|~j05S\+~p9sX JnWÌyF>"yjo>w\^7Msbb" v%bѲzy4^' 7H=|hd&0 r-JrVd(cYnG0t~ ,_paeeEUUuECyjxF7y@?yŋ{^V G'זޓw'r5<Ǟ:)qhd\zZҥ#Űj%saa|~~Z-SO4^W1o7WiM9tr+;h%kn;??yaB1333>>neH#ض]TZgff x~՚uT*5 qjZEH@%lyM|W<t#@&Öe{ּFǨ#Arnz.!gp헯AUN<t:7tӡCVWWerbVb5.w/_!ߘLhl~K*vGC,L@VấJԠI!4My00H@ cCVĎ?^,LxencrmUWѠ^. g*Ӡ`&PX&N uN<BUULMEbaโdz)"8/Z$6"Ʃ *,8(@5Rn8T^mUU BhllLFK!YVkYte޲,&M-BUUE-//+eeX,*"h~顉>=/u#Uo,/xF?,m^O$ə8, ^>4Mgff!dX|&''}Q%1v\. +trW6bŢ|EVy%r+L .]4 xues=)0,HgssS"d>C>Vu-W-v947@H7W'[Ly~j93UXX[mnXt`vn9vL[14akM/ǍT!蘴AӮ*:hȂ=HkY3̎$(I )UAr4SVirZ^4Mfl6 ] V -ul~)"~D3`7urffmbpol,z6RA)ѨT*Em* JAg؛ăeY00Ɂ,8XsDF |% t}< (]-p ]~,!% w$s˜l_j< <4 M3wh);oPJKS92a;]p%B 69( Bp "z3ŧ\)$X%Mx,媪ZחJK|`2 E#6&mh,j C$Bevڅշ7hQ;`8:6y=wNYE -:$K@Zsݾ+Y&Qq 4{0>&txD<;aplǶMmܘڃeeIVex~(}3^B&z]kTk-RUk6jzWšlfqfalzE Ɗ;綌R*14Ӆł*7qnE!d)0 !K <ɬa.t:nNj"NGFIBHRx446X^/..A033s|~aܚx≛oQ*ZS4fӷ6Q㮺P$%1#sBr" ҇3O8) 1u-=׵=f崤R(}83;b]7o?^v MiGaor4-j\چUsoiu`J؈LK5ciԌhͶؔyQXaMia2)ЎyaifCX״wB dS_b8d2o!4zvvubMܣI & @T6 r9`rE^/h_#9}@ 䞐ha19Bru fK<ڦŖ>9]{^ݞ$)$s²kP_P}e^ۭ\]~qQ Y&%ɑNv^`n v-L(73MC})@c2CQZMN>=nuT!|@< PyO \%1d8??OrkĉcccQ-//۶]*@&h=ZŧIMzRr1, &VaUgᱱ$߫zӇ#fOEҤp}Av@YЅȨ>Oj[V]덎 Taق qC:mځX a}d1*0?!E1(۰Qr°9{K?{ӊQSf2+}opT&|Vx f ( (i@vM/;GAd)jZ, wn)W7XAi 'r&0ϻ[TJ&},??lyA'?ױld~Ʒ6=>ZhZ<@Q4FCѳWnNwOє/D Gϰ&2뙾c;"R!Eb,Vݕ9QWIg+fr!]}XEx^t\O`.[ei a5g%Qyb6u^ 4#wfB#]3[V d֞筮r;@RhkK>-,'cm E_8ä* rCRAH7ٙ@aIBI~, "~ %?x6]mEJD,/{,!sRTQY mv(pGfO/Wڹ_"Ps\r\ff`S1Wߟٱc!~1GbYJ%C{ tмT*%k#ӅMLy,m./[9k4t (KFFF3g&暜 pjjR 5M۽{7[ TrL7B )fT2)PzqC&TYeU2WmC9I)g.Xowu;#~ q|~/eF0 5}'R2d,}OHiڵOC݋ e>НX.P#(,f5!k;3:h eYzV1 iZ&AbdrmfӶmUUӧ T=Ik s׉b1Ja& 7BJV;o!cΫ tb:q~Mȉb9h ܿ#kظ%w?w 7[?ϼMo[o=8X,o]o055o*z-wݟɟ~q¤7}^3dNÀЉs- R& $%j4sv0ޱTMtM@kFLL>R5/;r LJ:f 9RVOltL- TNw$iPi@׵}|Z(T#)>8WH.%u1^(V,qAn[ B@r^ $L&:B#϶#F(1"vk蕈$E-މ%#mbt[ Mv)# skSg# 'j__~\.j??h4_W>nrOOyk?/333=Q宻}//~[l?\.W1HOr[ʹ{ ۳)Aϫ aV٩?y۾oГV-2ms(YqA5V.\\Ĺdmb'Jӡ>iR)MLL aqpX꺎0\g(2?8I2g"\?/}Y F'Om}4 gHRMͨŀc+ؗ](pŴ4:<2 `u]bHԫ|lx$2hS^ww:߹d2h}/J_җ~wG?d+PRclK~iB`&x  ?L31ٚiyA66m0957Z ,'ŜPխh{48M*깞[cF>l6tu˴-?S;9:dXbٹaZAG#cL\}mC 㭹@ǐ(Q(tV+ ۶m+8Y [lU3]!vHeF-= gF PGuDYA^ie xn6n7Y$7 __cS[t~"1 |PzLS#LCOsK?8dcȚ$2hH=3fZ5Q4L/,]A6]b8#8@F^MM9o.dd/U pi\k=ݠ  +V/z{?]}x5gI$( bhq7"Bw3A&l60Ŏ>ԖDP(2H?81L}Ҵ^\Eדizeee۶mۿݻСCO<bIYծ f}!#j1imB>d0[?rb~H>qKmM{w˾Thlɩ ˘njۜ^l 4ߢ\i;ne'r?lkkE-Ӛ>A;Lxw :}OOP kAov 9}xa$zngk'Ζ__Y x:AA1n4M5g.5ۋzD(}NQDN,fFieʺe[i,K5ҭ0&,QRn,K #81L6t9{^@qI܅ /?~|aas^yUU6.ZwHlu]:jӠ a{ F`;6b{ >Eռq }c%JI p+I$(V,W__~y%A:tӆ/ʦXQ>X|0@Hy}]jXN໮cC,6HGiX; vybz[2uW~3'ߵQD12"5HW.[jǯ $08*[gYAxM&P śjA1iPB=IKڮO_<44kk,NLL$[qlVJS$O"G(E2eNVٖg9vF.`8v=?B,\'`(Bls(R7޾"fjxSlq<7͚aNu妹s uaqjK Aɦ iI*F25ERz ء9bƳRTt::ȯy^VC@eYfG!f\dlwdqBR Q'=[1=gMISŷ]uz]wGf? >Zz^9S.tO@0" 4> Ryu\qb(k8qf |fْ׵&3>τlջ濜\~ŲF,&@:q-K',L6}QGZQ}S3GjVv@("c=s>t Lk\C?R;<9"qBJܘ&g8ͽah]ZcT4xL>X}jNǝgPD6r+I7 ;Й!$}*ND8HL %<'89QEkAҵ-( 3n, @Ǵ -r&dYtY!) ,(SSU٥.NybTɤV]aKUQTYhwڹlưV&" ]+WKHx}5 x$K`I$Ixy,vCBٶ=33l(C5??oYVXox5jצ)D&w2IDɮO$RzL]v#d?{5 @3 X'YѮGw WMA̔cy+c\kr"F% 9`9Onr紆*ce[FZw|lLd5A`jl6 =NzN9C816 3σvv岪|~֭t0 MZjۦRXN<N}^dXd,N#"ڐH*+tu ;s2eZP -I"M1nT[7~+<( Ѱ 2t*uR%uFS~Jcib,7L FH ]\!4e& .D7sGXA0|eeŶQd;$TRVx$@Ҡ1:QDgf8G LX/9&i;N7\M_ M>Xtx=SQ\MzQ@r]4xiZZol0;L0qD- &!y5"Pm@ w$̵݆I1 TMRcLLB1G@ !n0t:憆v588Qrl6qِyoʡpE4Lj?2rӦ??%> MRbЇ~x@ƈPtp:~uL(י>d6^lF 1<u(> " +]i.STȥȘ-ٳSeň?dm o#/FũܵTӑeC+|(0#1 2b15_t{k=4yrӣNYXX8z^e@u]ױ a%wScS2|>B>Tbnŷt@^dH/Bp !1HDtlq-H˲k-`(Ea]|pa1iXۂXhb_vO5zTYPՎTh>8 {ĵa8O<e6C}uaZ˯efڶq+)WK (D ^rO?y$}jD'B# Il>Սy e.2J %9X7~\jHdX?tcK5h/0A@]a6ּ\0bW9~tb-Ɋ pk.QAd9t@l 2a{ۗ$"}jbU D͜."&IPC?4OAC$_OZ|Sh&~8o\Dz^os0cx1u"&1Z$h.^{0[aav'>E1@ 9*B^n:E.2{_5K; E8 P?uT 2bx_AQT*fw׾Vu;)%&Nlc=VבwS5M%c/ K' 5R۷_~CCCq$D9[ #^DIiG.  &kuSzqj>ByXD1T5omG)&H[Ѐx"x/Sh$KF.J'Nj5DoݺoO:^ٻx7\y?a(х ?˲=ٳg6d\̙'GJiǎOj/랬oPr8G׾633 5xB `X>[,Vĉ###۶m;x-[HiWF:[) ¯l i00gO>CRȔ|syMN~A޳_@a##v!kiX!X `r1ho&i~%>l@]v]s5??qz<(Q |4I<.fI(h.ۆ! U\`9沜Dl- "Xϥ1"4bK0ˣ&Km:SrQFYc(6NMFp0:_C}aVe~9un>|Z:w?: ,pno}+_yꩧjoy[~g~СC/Y?V50atM]NEc Lffffii0vwީ( ٬^r G(}$,ض=77Z YqUa4'p~|lD C* ?IT}"BzCMMM7^2ɒ?~4M_6-EGZ9;u]wu.,,wv.ƽ'ӧKLr‡KU=8bvT_r?˽G̥4hRQyI1?Htu]M`(|~hh(˲Llijju(0LӼD'՝ 䴒\343)ʹ*zRDz^L$R st slGRÚv(ZLq,c9^K=à9UE#6ieslDZ/YB Rp5 H+'C8{g뮽{nݺD>/az=Ͳ3g+_ I9kO|b֭`,;==裏NLL #FB<BUUt ww3::zAbA.Y>{{G\ ܏٬븈$Ibϣ[UUEi@U #A J@ (%ITFS=;I"3nJ4| (;fZ1)@`iE 1]'ⅬJ e(T9 C&Bqj(TS$Ff,ç(Ɂ4م15,G4aD:>WRwgff>O_v$,&\a9rZ'Rk6(*| \hR`.h2LG-//?cVlR۴@"ꅁѣG+ rxU}.DJJdYrõZmyyZ6 }QQ42]# b9Z,]^/ŋ<'nji;,ΕeR|c<`1s<7>P, R~X[nn02_uϪ,~=;1x:6pٚk]а,IxxNX|z.2o p޽o{ۊ% _z_җgFӯ,--'N O es)>+/#HnlbV[]]z=_0aӵ 8>#'+pN5]N䃈j7{n5/0Wm +^ջjmwE6WVg;\'&yjL3& i5hW=NNNaIM??裏:tH$yIٍv7x$Ibay Ήٕ&K`(UUX!4汇8Zr՞ +޷p&[M[Tj~!7+ꆥp, P  g*v6R.S,!:rݴ,&{.Hpu-|=~xMе^[(6?-!Zbog1ݘ6%k|lȻ8ĉ[lA F>@I"B6|Et"pʲd&~_߳g޽{`} q$_' Y 8{,Ԑ \F>2aB7)&ImhT*N:u'Xі1l߫EV 7h7lc:uf1)-݌}?3cXcYEu~:qx󾡑QQDY-Är$iUxA)FLJUĻ뵁 85-˶!EVB3q7ysss،s8tH~"yI ȲĉllG2 tT91)RAw'lu'٭Bp"9Ѱ Tja̲ӧw&}7gmlz+\4A0?? >*;~"r# `Ŕ h{ l6{WzGydX!Pau0l?u_EӰj͞aN0:( +aB7}Qa ,ah>vı^{ǵ7ݜff2)IM5{a ȝCnRVAg-MN+r4<|I+~V} _W bƒO `̓='T1A~3 FVR$b*۾>}= g.꫓\-J';9{BpMHI#`HЛ/ 1' 0xꩧn>̾Uz.FNn}cefz(je `PP>a&!yxGOcǎa!I7T3F OIi]7,SŜ:KSPABA-Ǟ;z YM@"8DrB`]pR\Wpصk{R nEeIrH=y>Ͱtl( 58Pھm[:T*haZV6b||-׾dhX\8Yo;yc=vW5I7NǤ+-M };|0qr_?55Wk#F ox>dKŝ۶) Z'B&IgH_g9A+х0<3K@ahò 8gme&ɒ$Ȓ@Gp 'ϳRBv|\tZh[Flnnyǰٟ̋A3=d.p_5XT%N+r)Y ˂59Fheipd滮k׮ߗ$_"X&SP($70}{[nEUgr#ҁd;ӟ>ʲl?o߾\.sL&jqHm}}-8zeY$l@ :81sX)Tj1D^ձ,4333>>iSv!KIۻKKKGz`An:66( )W~%I#ֈdƵʥdqm;0 KQ)u˰g5-Ljhqfjk˳u796T )9,:Fm; j{Z0+ ~|a4R aJ"2eET@S1gN`((14˳Äa\xG?h4x˲xd^{ٳN'|#ٺuFI$a<>cܳgD*:x֭[[Ds{W_M)0M!%F$ӏ^!V#x  .b[B.zh20Mks2t[(ryqqֹDQ"fr&-Ց.!'ƀ1@ryttlPrÏ<7Ew_m}7`p` SȤx <[M+fւ|/۝QĸWŀsirc=\=X/7Q,/ώt C۱+p<IPdm-tcH&U昞nQgY64">qO|￟4VR-c0(‡?adΧa?Owη|;o~:cǎ!y馛o]w').C8=3f~X4o9 b4qV .vɗ,ء ,dkƬ?n}qy`昴'8Bo%gi$ox!k1j6A܎s Rih(MUN3 Tq=[F)+bi IB2f>O|=xQ+$YE2zbY`ew}#GDŽĉ J+?|jSAH쎐`qa$ F FK0`ӹmۦi"tHjC2c<+ĒAX܈7;%\.3 s-LOO _$%-P,{.LR).dZ|P(MM2e{/miYq:=Vͦf,{Yzu7_784d* 游; BU=?ìȊ'w,/,>d.p\I L (N[MEnE6nZj-/iӲ:]޳PY)^?SO=ev^ǔ 5M+ F xLuɟɑ#GUUBΉaW\qoo'VDRYZZB$I>8Fl9GKJ2[["BTtJ#Pld9_\^\keZCPa ZqmrR)m(LWH⛯b:o=2-99.|lo~9_Uƌl6{?O=oA*g?YY?Ej6<#GT |%M)5m۶گڻ.4@ǣuĸNܬ-uJK؀B(e"d4<#Ib\!XFePҍ]u-`͊ڇrԢQFL6)ENV7Bh7m$e@t:=99vg6!Q {bpG:W1>>>66fvm3!y\333VklllV֐bh>-*P q:ű/J<-K""/rp2Ąa,)@Ŧ5ov-:8De j7Z\d9MXӰ4@[=NAdXpV˅\&-嘉A6Nm qz׻|T~ޖdz꩓'OV*Ml6L(rwV*}sfqOOvmbf۶mGN"~u5MZe00G޾< 40Ĝ$IL8BozSSS8C80 x4}.OjDyxx :Z[+Ju(āȲ|:Ѩ$sSrqW/s,{せ 46#Xg֛cVDZOGMv=:|~n9Kz. _EwzE!)YQ]&R\>N6k}NLz2)VmVLMM+瞫T*\sͮ] sssKHZ/6MLL=BI@p_ڱcǙ3g&EpZ,..b_X6 QFI:\, nȰPB|{ǩ2A e(P-܂æՀ] 4$ {[d2L) N!~appV<w dzeeh` [0fiUUwڅ^K4tt: =X"I0t˨&q/!x6ݮ:,R2S[bzZlurtz<̦y4KA~ |l-< >ewi @0-.>{H0ϐ%.zB7&CPx(,&l6 @ON(ͦeYh4U*7aaX@뎾>oȥ%ID8v_Nz껧$ǩO\jRɎi!BDg׫jiMA.pNZ"MQ|>?<<<00PVzPxӛ499<>B*  0 /ȼkـ;|)75Vnug-{sKtFAHَ3|XuӒUVd۵ǶlXJ PX@`gä3^ m>E$k}>FwR%}}r~_'i,o}yJfu-阦>8z"Ja;(z U$,+۷/A0Hc-;i(Hk``[o$dI\% tlf> $AA SQnh v[={|5Y`Vrtj\IQDۼ$UmY!Pi,mmc"'ӝaȰ a*ۯb:;۱j;Sw]Yچ;2:⋧ә 'ᆁlR,{f#1Wmgf_[IJ3St' :0,c^?ͱh5MCq8Fk4Kj/|vv$弆)Bl#l׶V+Vɤ):LHu$t'$.l:^hڮHR|[6<*b%Q 05doMC1z%HZ6]qߏb8](JhIm(Qe2Dn: N-I5=|+b4a+&ɼGלt9"UƐAd"+0N8Rnt:Mt>߱cټ{p6OQrC`8 &YN;omO4} (m MLEe0x  P&币.t ƊyOn$$7?A Ng'^ X[c< OppUW9S.DZn@6sYkAOJ>IJQTՒ$R`R@Ä$4">SSE:-x;vjn۶M4" \g+ C0(thFa(s"({x\)k6.IR&-Gs[3wr#1M1rx6%CȄ YQ Ȫ2?00Vov#$:t\?dI(ƅ29Д$~QvYQY c+aTh4I]Q▰I3 h4?m۶QTu爏qDG*1i]1">R(`v/Z Izn -$3`0 oxd,dzΝ;=ä f'?Om^ŎOݐ;!* ( |aq$GrGIe$phχQȊNAƷd{BB81V.۷<5˄T ^>= en1P-(,JQ/"0G4w"-|C#c,14l)*R0̕A9Igs)-mQD[*$S5i.o۟ޛfD_e6?td2qUkfۻwmH.IC\EIR(;S,sveeettk_$2+x$zXzԼ$IBLM-_2~ǔrz"v"#t“f6IעENRSCc TU%od|/,9`%(/La, E:v];jjwxQsߞFHǎ=0 (d(4N~ A p,p{ƔVv\B\Xo4; 1҂8ADY8.03j&Qݚ7:Frx얤!^뮻>#??|S;w|^|V$If_7M8{} ) R/e4ҘG3Ӽ& $n$ P$P,,O1P{}?خ]uGGG^m,cS߾:&||(EQt ؿ(J&}%82°4'G%I[@h4Mk8Y 0 ڄ0ɐ$!k};^i,8nbqhhg/t:b$Jfsp49>* O>}Zu]}e_!3bqeeõZ t "$Y3 0rP( mScU hG  ȥE"v˲Ξ=;55m61$`,( @I0qi`Ƴ>jnVg! &9Ȗ-[(ZXXؾ},ˈ(DT*׽.pC?^/dTm ՛++B|S>'s`|Xezv@f>--L :-feYt:Xh4_A:l(X,">)zBжemèpqI{}$Y,rVh4c̊\X# s0̨Z;v 7bVbLE NMNNR 4-F'M73*O>wm:M^~pgہLM+r=g-:ٴ87w5wnt^3QQ e˳1-tXq-;19^ @.Tl,ʥa*O?7M3t. N Kv1r8/S% T( ={ֶ푑$kG|$޽{߾}w|frr|'^taXJtE i$(C$! 8=I`0 K<_io\"dmۆ1,{$&1'ERih1i4r^XGnx˲FGGC4tq1.../M7c>KEt:F>~($I"K0dzmݻEI)FNjН[f{+\̏ȟ_xVxNi*E =7#ֲZYЭ{Cӊ,Kgf`@R 4gffJR.C4Xb8۷o߹s'Υ[nT*{} hP)IO".4MeGFFJE{sa7g&A?D`BVU-[fMdm,:|0v#fYV-*؋ 8L^1 s+KCȂ1T<*O0~P.M|R=iqwWbXADQJ=/#jedhPv{8YyҴ"kVFG?jJ ,xz)YZ ͥ}o%"{a)@UU|@I'RxǩSگEQ؅M2v:l\PR.b^oۘE.}L'F(,²W\J0!Dtof_}trA Yu]_YYt (JخE8[]]}G0ZhZ݂H Ů}$ >p#>JrcXTO~7Mh7չ&ZYQMӆ t]߷o_jۦiόQ<"#I61r@ޝB*@I^Ek؋\^D}HSiHWH͑9e4@ }j2 9iuۧi! ţ30[N-6vlʀB`kS$9A Pתlmxr]o=մ$2':' Ѽ0@J$܈ yJܭ0ho- M6D_uUd7R9p %>", 154?svLZW ^P,%o.!m[, VQ+ZN";8z]!- lױt虆Jr>d2eDaon. [0g\.ʊc;/l/תm(T[mob|p.0zho"h/Ϟ= :22H x≿?eB uqFM Danc뺘lE7DcHUUN1-H7MP!~ @q~nz=JR,<-fff,¥ 0ٶy1°;[j[XX@rs}8c,0;;}׽utn>mٲ!hN!/4|;!I5\C)@u/@".?MLL7ԠV< J㌌sn6n%3yAkvWWWzG f~S,{m~ja_,˺+O1Đ 7Vm6\!%J[;vliiippphhh۶m'OHs|H|788h򲪪t֭J@&p)2 eDv!2^ZBqW7~fŴAU 9 5* aOR$Q7k͛ozWas Eqz*vX(4 $Op_u/i!YOH)pF&ɾ3i>v;zq|F/Iʱwjjya>3G`YV@b9Έ,wrr0sN':s /gg/8o>tLWbeKUW]O:uq|>az&JnݮeYTjΝ7GA&d4 ,"A/7MF. / Uӹ;EQ$˧NOL޹{ϾTHAy'pFTuݳq%x-X@ UkWFE ܜfm2;sX,ڶ 4{aL&SG8 Q<(ʭF/PTLݒO}S0S'\9ɼ 1ġtP aw}>L&C8v6-e@0|gffuDC4ъ# {9 a}k /n&8EA":8E B.ܷ!qcOO+rQk^d aPUuk*\߶mcC[VȲy*Df2$ CuK Xzw}1ncz粡Ƚ<84<7sfthxbb2GN<=\zqֱjN ,7VdhvjҬux n;!.P@3W|{w q HyYiCÃLz=āf$Zۿ뮻6 p|W\qFOEx??:I\sܻn"޳Ov[i]qmc9 [l늢~, |)nXx*fc˜D({~~z!"ъZM)2(}.,,`XUUQOW0Hh-2<_0uq,UUs22l3۷Lo^S5$S49~SoTh]aL7bV޲e5ctu ysgxIY#?GF9s, -.,ٷV˰,êvݾ dwh`~S?{ޥ &v??=r^B8G410=uߍ\ _bWNV[\\D+,ebȘ v;<9B 89W*av B.C gLo4//b_Xg?`1r9͖JgPP]yQe"mÇC&wObM8wуZsf@o71c8kt%YyT*U(ӆ3S]vҖ=sԋƒj@1pCʍft9PggΜY]]M,)>쳳KKKv޽Q%No?D HIfٳz4MSq]xC(d1 M(HL8QT? ~jxlֶ/c=EŢ nśK/| ۷o߻woZbyHRt^Yя;s\eļ}k象 PF >c@1kiUaPe|(dYv{=-*r\ ڒ,:$C|;>PE:: /S^ˊ?V @i/)Mٮ#r|@Qmy1ɮ BF>Y;h:]c=؏I+X$z5gy qӤRVMs[n G!D !n@g<.BQ4ɉFK9f'#8?? s D gL?^l{۶m8A1!ZVk F #iV۷o߮]N˅̸u Ų ~MGmExsxI4X$90 I"u]wq_ `8|#'O>M6]\>=yϽKQԕW^]P1~n8Nn\DIn;<C!(χ CP@]:mYvi ê֛ +rY-ö- ൨#iеw]"3قcr ] M ĴZ&Mv(Aa2GV\<:xvmBD 6 擺;q֭moݳg{ソIQs$uGǨ$C*_MTYJdP__/yk^8PPIg Iұco~hO[s\^Vˈ6) ?3?Jh1BR< DbI5o0cC3p}vD9Ut6n#J!ƶrm Rє4=.?Q=Bhty1eXa'4g9]\^yn``k`>׻ޅk`?6%6⥺w۷o߱cǦi]wuXFjX<w7a{x;4x_b"#*-/@N&Sj9]*2 FL#ò jyp^FaK>Ν{:|eSq=sGL]n8?Xdiebb#8wHȮ__z\zͻ̺/Gd2ЇOĉĶl?|;ѓy{wC$1:2`u1&&!;mc8 o֥9m twzR<,1Be{(o}k2gJ!a–-[vevvvqq4Mr9d^A3xfXel)IƗ˯oO(J밀C.0c^6 F.UKEUK!Yǁr4#Bg9gƆF::\hAϯU*'?Kb []Yi+F^ZmahQ@2(mlp رT*h}n7pC#4M裏.--!/; ` *82عs'SܘC"F1ܾ}=yo n%An0 =cЃs!Y)p{e;AB vS hI& >J*㞋"褭Da,(}j{l  0:&{L* ϰZ. ;JZ-! YmˌP0" 5X ǚ-DžO?3VSS} 4xu&x|xއ" )uATFÿEkE[o=p$ cƏ_[EMNN[7qZb? ‰A$=ϛ(jff[ny1_U_հ'n . X>3x82.ґ%IQo!zsn7JEIXRDav8Aka1yTёn7VG$wh}6 oH@i3%4HrC؆;5~=]7bq4RLyr |}GfhMGi> jjkVA3!OV4!g=̃Q8j44Cӳ&9(qK|] cnЌÐ!z_yzc MAR[ɧ-pʍcÖ̥ q.W` xǷ _[7קcm~mrs8pW_&f\uB1hdc,[U=kV8n𫹎oT,hEU]=(Jb&bYPbYt7( OPtCC|C/0 l gAHQZ&b7zLfw4;0 5Қn@| /EsqGGX{N羾Go8gEgv5UlKL7NR b.~`Y(nċ,p;n.Av pbF0Pڎ !ykbP(p8 `+DƬ!w2^ C>'E8QqڃWEp ˲A{Y1{)h뿸3_up4j?h_=bx4ET/ eX.uMly?t /NI6*LdP$%Sm)U 9yAǤҐ xD.<\xc9aCZ |!/͚:u6 F<rޘx}1Sp KVh;ti`N{`_ȥ遼k7lxgmK]"X1jsڂ mY|Ztug\U(Yp аg0QӠH!i zEuWCYD s=ehfۏ0^R$)dž #usչǰ2rbe Ja$|&#I$E)rEE9 X)N?wt#_]6S`:wV , zG$F/}(}UFqَ>;*Лf( 6eo6EIZ& v#w\ҷDŏcMÀXbG{ItHעsa$H8OfP|Ip6{T/ij9yaۮc 3]%* H%H%l(DbqQa8 F"7 izITɚZzFYNnFÔ&m`YpeAȤ@&dQBߋI K JI)/2O=;]6yA`CB" &~6[=eF..ij4+32wѰ9\lɊ ll L?) յ~׿~G G'8n}\aض~_* CH Ail)9^D)emFl(\1zN !f|&m[c?q5;LP35x#l6Ê||lBg-ȇi i668Ɖp:tpiZfLr7jYQR(IB6ڶ l \O,(}}x~=9xFI$&igl\;oGجCo(j NZ;ҲM~Yċ!1O|̋G,3c#%n^7),;]a,q f 1,J\\b: pb`@)6N ;}7ty.Hɓ'(/)-e:`SC'ZSo~Wcf:OMS|]k1et6-5$Q ?,22^:Dt.NM^shS Q8GE')%W}t"[s0it\hHX، lׅP|ݏxt95o3-ݿey $V{^eYlfVyOxzȚ5Q/pXcZH@{=U vD={Ϟ}on:J%vjzL,^dq0vS0趋k=1:J''|6}h>-k)q\ǫ۶%+rju Ӫ48@Uё,jF5X,/bynsO aY/^ܶ>~+%Ul' Ȼb/2"Py(j: 24E^]\4]}/; n@VƲJ"- 4lKí4;:{굊WHM4)N䥠^ny=~$]9)v@3 .ƍFRD-f#6"e>tl߃L4Mi=; YE[r`nٳ{ll̙3/ݻb9fllO=wޡ^kft}hVDM.c rWg׷b|Fm{=Cc{',2T&%E4g;a*f }Ri u$jcbL6{qVRD!HŦ]2`燴teZπ\ˈ&D{pʙVs$Ѻى\>RnP>WH]ۈ q]y^7:ad@銣6BWmET(vjiiz=4^l۶mΝ[ŃЭdۓ8P^Mzu Z=+jVc@_ɥi]yа+@s9L.cjyu`\TnCW9r')'bEJnMִ,>fO[ǒ!Tu67XJ0""Z)P4\wxTȦ5U[,E, rTOE 3EVQvz voԏ<7`؞hRWXLᚉ!}Um~\up0 EF<}ޑ T`ouC)'9g~upP ,X'Z<3 v 40٩b:ʥAcV熁['X'޳u](BO3,b6/@Y`hiP|dIܺu( e/JL,͔T$YRpڶ]WAZ4ı4}Nz^澉-_7B:^3 BFN&Wt=fqLEU|cP*Yr!5c|QCk@')$ ,~(ޡ E(Aa h0 DZNf-DTeYh@ gc(>ʵ2ȹɼ q)Í6g VE;#JqmKT\.u_w?F("vqgN=v"{jhL^ o^Cn5{K IyU)ִ]dq:w'~O9H mzKП Q(r.rN0s@xa\ CZt:iP,Mì+[2.Pn䄦ɝ.o 0 f QО* ":?:/幨bX98|Ns R~K@yMY,oUd6FVPxq,SQB6ðbw:G-Q]wxֽMB2D9?[q/,hG,iWBu@',5SszFavAEg~&r5?P4=h# G8u$XgDI%Բgs'yS +]o Aϵ1-(?Yꘒ09&njjv>Tpf&NR1ALIӲ$k|@DJźFW>782:n;3V XR't*Kn< 6Bb57zskd?42|DǨ,@fB: $^yc(lˁG(t Re<_DAx#ב_};A{#=J+eAèZ])>wSy)E/D3\sEMfҽvF /p*qߡ(GN(K| _/F%Yӆ3LP3 zuJ𯻤}xzv}3ڠ˅huXmYk錦+ նl1`y&=%f|6dLF$k]msBSUy!sTXnYf &h|1[TT(p\V7gN.%fI3Q:2 =W "#IbE4VAPU@QeQwn /Ԣ 0(JNxȞI[́;ыX|}l@OGeҲ"`bq"C Y6xQLe α9Xy)d(^ eqUQbb ykeR_E4CnֹϜȰǛa8|vnD\i,*N* Ř(*w;]cˡ|xdn8t φӬ(ڡ3%,fX;PJaeQnw-*sIe,lDŽ$g,6q&,\{ݵiE:몊bVΤmTDYi6fyC[`x.,8d{t=88対J222rӍ7W~ٽwiy&(hGlW#ݵ@^OD4" Sd5l0 Ӱ\I-(+Qn[Rq ͅRz6UY`7 XXǀPoBGZ>q x1TF"&Zufuq;mۢDEԲ^\FS.OSj Rb=_#%Qdu. ѡorЂh+ 'QS7 l-94\t мҮo |Xe6=j۷oЈcj u ns+c=8¡ㆡaZV0{?܎Eg͚>{9؛Dջ,K؎7g'}/ű}7KXrQ%%X8ަϚg+J~[Gl2g*+ixj1Wgd"kYL$_ti~VᡁL* }" R6$ Ja'Qo"jNCLxXqwybU.3MӪ*KWWkuba3ef%OϪ"a5- z IYN"`!>F)"F9%UՑDG ~"BQejNDAUA9y^H`s$Ir4ΟWHSj4:2jۖND3 0'rxMS}߫VHш$X7}m*lVfǡHzL_|N}@kķ86^qF|L`7!= 60Wmztd07xB KG'cf[jg0s ` ƹ _Ks\JDkns_qeIK%TU|̙r<2:bfy&ADF `maFG `  -c=  <%<_iB2˼ЀX]W`! jf`S^1*R"էx3 ެK_y ikzP6DP^cGNzŎ(Br8ف1!)] M5'%1WRHun ) =QsvwH@E8(| <.2֢6oD3ٴUH˿Ռ)C[!Ԙ󠀲N4!L`qiqe|GꍺzCui@%Y;'O}}+`>VD-ަhJJhZ}tUVYݻkG,mo8jBB>WtFIdjPT}]OMR)oq\\k6сT"@t1NVѰSOO_)D$cNr4`0Zm-0zo鳗!cӃH⚊c$EzSJϿ}rɗ=Ylk~l`>f_x"/ $JuA2DQ%!IuMQf/_\IHҰRc+نUHT5RIyؙgV [3 ;hXTʕJ*I&bmF{9UΝ[ydb@(88^S/ؖD9β;f nAڦ*Ϟ{{j; I`0(vbsz'`."ʌw  vu0MA|lcq0g/׾[}QO BP,˹l^o?8DEm_TU= &ـxLR-.,*L8_-bI4X,ұŕ~(b6&.h?,:-n.cٿBO)EUŨf [8 좠C.{M7;^ 953m €QQdzkeж}Ւ!t&I$@аEK1<߷-J)_|})k42 SQ)1~d0?x_ RǴÈ(c)[?El>ZQNaga`͒Φn9IMYul[n:/d3f5yiy| =uyWDj`,+`.j+B)+Bo=h:U*5cc, Je˖J44<ت]ǓUMgB"yJrb 0NM}I`h$0o@#'vM_kEgjHr bF]o5+>G}ay}ި,y(5?4!RD2577y&aE+w9Es;O<Ԩ7̶9 CCCcqÇDDT Ͱ#qQE&:Xv+(~a֒2XRp|󨮂=+yAU|.kw0UgfgZB:ĊE#cAe[fS~yf*шȂ",5s|B:vhAe"zG7/FLbToto=x@W N+0*@}隞(Dh ZpO}#׵TݩWrŁ]m)dH>kJHn AA Ra^RQU-۶)BꘖF[/@BqxVo6ST*tIzJ`i*x۳gי3gWWVDFԍndSi\(I48[ ui7xRe( Bk,(cO7Z+qsBT 愶PEf_Leu]I8 iJOǶ0R0VcGO'/9ƟĀ]L&c- QEm6ꉄ\Zeg N{qq!Z,#XXp?7^z9H MOؾ}|x\xX;B$2HǨ2^9ǬSn o DfǪLδf(5 ] $t;w G~wRIg T-bH@'#'H{;@ᓺwmbl|H Xļ8,xuBQuRd߫?q gR}e-W#ƚ2D̻vݔ5%S^yK'^9?XJ˗sרQ pJKxx?I};ZmY" qi \oj$3۴pQtl܄Iڼ/<\ 1ưGnI&TVP|.?y/]7Jb}KKKKb\8uv]sm +j)V>%`1 X|l]@q<8:nM~:AzzukY*H7Zm$t zfug0c7u9٦c^p )/*cjjч<2'_.̇9,]C)E`#ڽ8'Ջ}EM$4q!A ]<Ц<Hz>ڎHǴ:ٞ D*=12%i}N ~ʳGfW/[-7URAFƒhHm-So!`8۶ e|;-SA~Rܘ8Y eБ#/--MOOصj13]{yu%Wb)0^8MHh;hĮm9b'UlE8*HG9h<К:Cu˗D0BI]˧e L+T g(4LI^=w4lbTfv4ID@^`~C(8v~@q~PSsuڝJ!Ԩk*T#hsю&"mk@v v<.U\9wG(scY۝>.r悬QB(䅝9.| knϞ,䊊n@{f3M|Yzyxk `t <7<ͦ #$ (liinf*^-X4EМ>oc o<葕v@mNdɿ"+J%-GC;TSx2GoK3 "Vkz~2癖aDT BAcH44]m9T*SF4wؖ59yjWFGgKwnʫk߸λٙW ,9tȴF qS,r/&K9p(`h E z/;=u x=r1o&r`kxAx\i65'ЄRڰsDeX2fRiJݾ}bVr&9{kLa"Z ~z@$,,w|SZm+7]GD(" 8ƨ &wSo,HⓟdQo5rȔDBR*1LՐW&mI7nټdVM끇XZ).-Tf ٶxCBbɐ126rjy͗\q0f(hkfqJ3[(ʡNK%PS4۶A߲ ~&>Ȟqߗ˕VL^.C5HR dfR۴yj*VUW|g ǎ\,;SS##m@=q"GB0vnĒ`vX:Þs㻼^[JkuP={dtfdvK \QE -)M,zzT}4;WS~ha( pչ O.KefWq&{+u>NY} zﻫթrVUMV`,6R4 eja޷WTd毟3;woݱkۖJivz~:?=s׽X0hԊC:Os;ziQZ=Y(f6:jmy{A1 i ,,x#2@0ΦS}cc#Ǐ/ N-~9sJU\.T(TEi6خ8ˑy#B3m߾il\Qj= 1RُͨF#9ȲNz: c!Zz֖T(UʬX|3suӨ8 j(p6Hk*"̘Ӝ?ꃣ%q3?⴬&S(=oLYևuqIwٟ-:n[l›NЀ~ Nx ׷`͋@ۺ%~=h@VQBK//|__>ǖ@`'M|1fԫ5rO;@ɫ=LMD~~>|ٚ4V0(st1_4T*%Itxx!$'JZ5UsK04TTf ]ȊEƕ iL$ HGF6!kRfsbȮ K.mL" UɤkhyXFrPء2pU R}2yL|U%ݏefXZd,w28o:c Ыdo_`[®,c7 5!'!My9xCkE߁}$^(``F]3g}nQ:l2 ]^p0AxW^ؾ?+OIu X۷wWJOIe;mǵ<4M=L #&7|*qUMKU˶8ntUTȘkfRVU4Ehu^˪1@DsntdTiuG .T4qW%P}Rbv\VE1$aXuc_؆a oUfJJ ^Y` c Zh6Ֆ$jQ4ү$X֪˯PʹPhs>3/[w[WC\^Aɍ7A`L$fHCs6hϜ?d"?Ǚl4;i2Uo6ssl__!tl6C/6, 4)ˤ2u@4EdGQ=D +(bXu ΁582haBG7苁 O9ntN|jivyQ4]ivBFe8J+s#v70@PEPmȯ .\k/{3{OuH0SfXz{ˣߧk} o 7YԖm[ooo\xO>䷿3]Y -l]YY-}iffF4K$i@dQdRc48yqFq6n۹Vo^2uB覝:o[\O7'DRKvw CDˀǼ(D:pBGDLI@qSS-urcILalrw-. ! d@9SxXd˭e~~>qċ*ǕX8f$-/w5Ţ_S.p"șT거g=v_^</';K =vX5ą^L}YdQV%p_ ZՋӹt"nu¶뛥zǰ(DPKO?yneM[)T"`ĶӱC(8qrpKC;wZՠdĘ"Tʊ(TUjV544$Ii&]smCޜ./-ٖʀ$P;5iHP^} tz8"\fġE@\B_q]{z/#q2, W{!%aG@BLI$kJ 12tbr ^|p~WUPOkm &W? .2 da_3Qkk9= jۿsχ??;| dVk^|cs}h $@΀@x VUD#j.,bMVΤmU[v.6: ֦R)^(*gNU5g_, s OM4R&!Yƻ";qS#RC 3h~oxYtH'oGm.^5l*J@ F]H0+.8F~$#mJU c*+ ~E`{`f/.]E13"a$VResg_0Mk,K$X9 O^GT%Nۖl5Q{Z%qBţGd&i6,iIDATr+9< 5A:";Zż7,y!@_NfwC[3d*w\%2ܪxp6M hA)J٥U@C^WQFKiJ&;04?iI6e2FO9jy΁vˬ73p*L(}_=Âh[ 耇U1vmV"/_,+L E 0`p ۩[t4%,*+jmbK6Y\^ޱub)QR#l6 c>8|b= VnMD(k#R:.8I(DZ8g 6~VbTێ`HkPxqR}rxȽ@ ^{a..]>rxWbF <_5\9_-,P&Y, x;vrҊeS,k͛6U**xH\2חg^d #ML$b M^zCrAyjۮ}e )!0ec*̮46JEӶVWkj#/kM NNg g^NЩږ |҉o/.V*-붻N  NP܈$ Zcؾu|ieS_>L:6:-$m՚N6)qo?+Έ>HD 뼴~LGTeE$ $I +҈TBg ohW"fad#m+U;Jyi2;*|C4zCUNz3r8uoXr3ySxtm{<_-t4[ɦ<*n6y\R9N8 ~7=.*@/?^x\rqałF{մ$.^%tr`̇\xBәtzqeO?)-tn)2(", h Tڨ\.X^!͟Ξܱ},DeIaBH$/_\TTML0:_0-[U?>")Q b HMO͎c ˲eZ몚Fm۶oO&RSSv$D馱={/N_o jyٓ{vX KϿР e cBゖ|\^XZR5jvLM]@}[>xUY%"+ž TR&Ҳܷ:{Z[.^|yhl7x B,/yi"tLЗN%u׭C各k:|2s_J߼Nsmw?Vy镩jo}O-7'ޡl3.pOn+f/,jqhC{WNJWJρcGSUwLlrչyl'+2D"0kܽvc4)Qu:t*Sf+jRO%5w CDn͎0$Ek۶]t;U9.HgrWZb?=AhoYZL8^$ia Psi񂀩 yI^]mH2drj 0+U~0Sg'G#k Ӿc/Ή|ڛΰn?5=[Nصw S^k;?Sr2&9I\ ` %ͧ=8⡝cO; Yˆvi!~P4MN907g;N1[4-1bߵūR21.ai@b R4Mݻoϗ;w\Qv/_Ο5QtMQR C=ϭT*SSi!)W*L:_T.^f+%\?i9>:ͫXD) T2FW+tk!!d: m}yiRMxo$JOՕi;ի5M|w}HV{f]o:qq~*?tgN:mAr4]fgZRQ$(d . ף.jopX!ŘJWkz'I&N)qǴӹ|S? @۶4VK3 wN?7ӭ\ ޹Ι_{P:[ou M+._](%VMfɿz]-5AIAeľS'~ZFRM` sH%y !Jỳ%麺4ب*ݻ @',)a&/@_i/\h|NTxy]V%Drvǜ_\Mߧewt^|`wV%.EyCdOL1ǟҙG⧇|ذ@!y ;w{~Q@OfBkׅFbûQ+ck=1F[5==]վկ:u :*^1Zq EfRiqq{v^#g(?(xgmxHjd.(ȯev,|tHŴ+Jq()6~4e˜xqPHn?}YG8FA'ִK㐅#'KfUS7»ߞ({\\#oGs ~q]P&*^İi<$JI(hEj5ĚG7ln<0SSS/TBǍFCU msD"#...jC?w_m#SpG;>#Eʘ9]2п{$3dIxBP񁗳8(A+ mDj`J<~±w!#0 'DYN0S7t!`0`YQt&WVԙ?V}}׃B֘J=|-aǮ 譎[9MՕUwõ=bKT𺡗N]9$;F`FWI|cq9v؋/+f3wv֊{{.tuC>2J-z7޲eySO*oz ׆c\Vx8e9͊A "_Gsy^>,B3N9zٳg;mu]$ɲ脸 b.XV+L&^fhOp0Gg"L g7T^̧A{xhIIx>@":H.'ȲD-3^mF& pbT3|ij޹cEyqhl\'Qk$:9>%oDjkap"C`͢vᗽ]>#YNuaZ8ԝ;XBu,>brL>_YRmrN>.oZǎ[\\d20+r߸FQU5ɀ@ xUUz,ғjl[uH# <ȦlV0g#hDo`ϰ`YD尡2ScߚWǓ)M;,OJkϾ *m+(M__PF7?p~YXX,K$M<@ޭV+L*"BPUEd2al6Ο??;;+˲i+++ kJCnZUpF $g@l0L!#4 2"HG@3-C`FLp+>Z^-.oKgNN0W '= (ÆmT'ŜncQ0ecbm{ Xp}.ah;/u7&[AaNK/}lZnhrqsic}8ͳ 9'Iҕ+WZc,*iZ>O DX@&F40fȯu]+W0Dd c0xൢr8DVhKy!A9l9a3Jťk?:h=q=|q\qA^r:i'jzN.÷ 5Cɪw1 e>\s{dExknn6QG YDnT UurکVd׽ǼNUj2҅zn$IBX94  /ˢ:IK $-羋N2N$߹3ӝܹR繓˭NI $E+o;}d%ߚs@KVx^AؓapucƆ+tMSJzЋwn o-7ň&֖.rZTB:sy ^Waaf3l6VUBH3>%5cT*5:::00*cluuu؆q\˿ # Z@倏 K$Xy hrOCʰ  tBs+'C枼R\ Q;61O$ ^6)#:f1+:-z)5D,0TA;UM }{ Хe n&]?|Qo5ً֯ H06oo{zIBhS,8V6^7ϝmdE +*:Ӣ H&T*u]ypጴ?B1cEd2bqyyY徾7̗4E]ݐ  y M=c_zd6 D]r;t5URz~^N!t/H$ѓMQ@RMӴK Q$I###bQ{_l×c5tc܏vfOC !X1Ha0W/]y^X/7ڇ7+yh?չ6S0}37 }bT^)%|RBq@N\_099{?`vCl>V GgTbp 5e-!IQDEAk uoSr ,D"cU( EN^/.̉$0Q@ࣸ<^OnٙM뺞J BmJWƺqWc\Au\.W -[q^ه#L==r*G9B|jv3< 'bXg;=ڃwlv6|Ӷpi-4dz(EDNˈHl[*A*Zy}G͑J `)nRQ?`1 b x^o FX wK6̕œ( O'ܩrz9^2ٜ kAߘmV  %իPiRIL&3`,EQ剉o۶$I###,"=_|1N*ַ7PoE~B Y\p{s$ 4hUDZGo ICY1W..g?ͺ{ %ƅsOW$f)HONfRb*P6?sїwޟ؏yMMh`CۖgԦN6so$D sjT`4hXcEorCOiCm/AV33/J2E׾|dz{?1 ݨ7-C+%4N~aW~Y#s5ͣtD%D+5 Ⱥ !>K O>S^FK-..2aD0j~~P(Č0JiP(bm۶=䓂 ޽;mVi_54Q6E*&1rJ^c*("|TfFRye"o:j"ܲwHO͵~ykz"/ ]Ê_ZՖkTPTd4}sy/]fH(yA RoE`bLXA[/'yןt=lŒw̦e#'_y rDufξt!d24/'O+>x@]kAA6 RdPe\(TU!;n,V%{> CI t:q ,^ q df H$/..y]aK;SȈ ˿&!P4iJĢA3,o7R&b]<$ueY^z!X*Idٲ{0޾9¥FaႢ<_ >>T;;Tj>hK+5<q|AxB|>5q) ܴ>C& $$4IC}s˼X=nե#6볬}خ}sb!IՈ.g[%AD_-{-3A%qFqm}`]W^z\۽cq%&1eNvުƵ&Mkɵ#uttVœUQb822288AO8q/}KOH$c0ƛ6mr۫w^8N(kH@uQ1H~&'(`s.\hYr.B=^\DՖ;~@M7{'+伤lDO$! t6665mDFgڎc_ӓo rndA=]-1mTUAW[C94D}̌^9Qek羽R^]:eܤi;oz{Ы7bzSFAOo׮]gΜ#$(Bahh^W*d2l6ST"E1ZjJٲea=R!ʘ9]8vXxAP)TEzAm#3l}(q?puK#sudrn(3y92FVO*Yѩ$rNu_iK{C,MXp eUN $x>3I#k@M9ѾEIlo`wZ]YZ0ڦ(CѴ ./|uj]iLI@ +֚޼ N{dQrїӉD6Y^?u;_O 9h'N[cm2ȿbH$4 t7o<<<\׭V ^"ժeY1h $^[e, 9 # |ʇ<> Y#BCH^Y1=}!VVP0M|޴ #F3r2'%GMH@f[AכKWKbat<D u=z#_G|pbGU0- dAʫ(q =#70<}ucOkAJ8KJReckէ8ǀryjUС|e^$2]YNR^'rc=t$IŎ:1-|]xRVu]O$1<( QJ;xf I9,(7 ʝy&>>*=p\\4SyYDpr5#B jڈr,^ݷ)*; nJJBC<(h>x+/6ұ~97w "=ǃ#HFۮmx}?_liI4ːDT4H; ^ѧPR]|DTH=EUǍ!Эʋ8L䬪(Rl6 gY\2Al6WWW? Z/φtOA{Q߱X\좔ZSlv:۶;4^ײy_3^}sֱlZ]+zF;٫jvƞ㩌i]@&\# +W;VnjPT3 DKD9lxnHIM cLdITD>=\h_&!' !@"@K :]C̉zlm |0!pIHVn*D`gى"бy@<)FR'$X$PB'ϛv ȁ8R^+岩0}}1ֿ7ahRz p"6g 9 V$N^6 0 cxxɓ[rXl;wce˖L&k4T= kSJuo RDITɌ"vjJt©)kIcr\>߷o_>Om1q/~^ȔJgEwvrFO&`e8cY*plUR+:>/ c = lgQQSqrFu Jry`FIp}GBlF3TC\ڱ"hLCsgݻ|2թU#e]dnbа" C@n[=޽k]F;2aA/O<*F@x Ӟ;22>  VJYC44"0$L׿o@Eaz<X^cD{v||ߵkדO>jf3Ϗ@*^eZ-ux FC2ܹsgl*w?Ь_<ϯ4- EA}o=PFL|R)צVg&^tbum{#P*답a⍭Gq}R)&jqp9(m'4Di3,İX۳W5=5/2|?L"!ہ ]G$vV擼\[W$fRdU=B1kXhh_f?EΥ>t»>E,)B )af)[lGҷPC*J!Hn6ga߬* b;l du #}=r}/<\E0,@IǭJ7%N.˲&&&_xMv,Z0t(iX'=VVV~g~&Zu+z7eyXX*nq̙Ǐl^&yß("!ccSR~9/9€&1OmV"& %et/\-ӵ$ *uXGw|lia9"a]ɄIpxY@! G#>ĥ#y3)|A }ΑIs`\:nX\,(]X32ZSAlǞ\\:95?uh:c>J {|SJWe6ۍtϧ͛L8P427u4ɗ˵m~+rfOk,emo{ە+WVVVcq'K4qXlj5fI) %\.8pf7\F  N7]j7B>W^umii';9v(($~":R4.֝HSvV 4wmPkaZ8X9^Et_⣧UBI| wTB{Pn`S_!ktuZoݱu(ᙒdm/ig;/N.-|56€$1ڜ, # /-x]0{Ym<+pgN\=]\jXٜ2Sn\] H` PxC~S@DƔCSx"^e"8@m>O~!z$tÀ_Jlab_z^@Jbi FٕzYOR Wyϗ'd9cE Od1Ρ4C͉rMD^7+·87}Ï]hL~>a^U]CkOzaRM-F:t'zÛoM9=#I")_GEqi5u eq܈ɪ0URkJxeÚ$k5-ǮQ]O`{1T{1φ5BI N$Q;MBi.MI Cyfݤ SFm>~7bB}ų?wvf{kWoJk@t}?U/VWk? ԛ//hF#2tEsL6UDl\vvIYsʼn4siZZYZ^.-]:β=#;w#'86Bl+e+4ER6cak -_ERR]A( GrYMu('2*|BbH0[@֏8x1ql2??h6јI9r#u/gOضm~G=<FTjUM;:@4 )k4˗qݕLB SbH E=HqX84}޳L7nqk3 3`7o 9nd7zvBtz=55uԩǏ;ie~kAl<{a)Mߨ $Bќ_(k+Afr#'&E\ȅ'g-NsU0IJ؃J鱎)?lkߗ鬑ܶwyEfw| F=y vJ\ضQq;kdV_U @9$ӟx4)eAĢ@ED|奏>vYJYMeR!iuZ2ouL\&x\eqgr<}CՅH4׍5=( ,`$Hx&Gp >N`|X7{)q='LRBڴiH\wzIL&n:gy&HJ4nݪjl+{ C RL-e#?8'|SMו1) yJ!\}R!c7QH>'f3`Jn&xY!kc:(<]Ξ/OTX5'o& ba Ʉ1#* ⚭Ǟ|B_ν{~W~_ ])/8[V_]IVREep#{ d29KAZDѐ@Qw04nF '6y!OpcgQ4M $4_(0ESB)#l;ՅLf```ۮ! ,N_u Z2uri^sWνL:}{)-n.ЊC@|y+W^xz1Qۤa?880(;w̙3ӒL,xIi61b4H_tiyy9NFFFbvEQzE^(S˅ H-B< C=W~WP.''9Y ӭm޾o(u>ﻋ_&݌#\ 'lb:O1YY+(|eq?Z>"jTR$2EtxMП#׬!p4Lì_# MU_6,'7B|'DBs]Sճa\ Hx^P: Q'Yͦ/|>G~.]<PjRO2BۦE}ovܕ_Ρ8|RC K*f'UEf=;23Ok_a@_Ksssj5ȍ7X( xd4ӧOjl6iZq'@[UEȢ(XdoocpX||5WW{WØ /|w(&ěT(~_YJZ#E#Yo2O>KB1%H;,fSe]1ƕJu]z:.L ^ZZ 8n۱|_TG?͛7:thddP(d2؂4 i X>{`Z~RoWɂC{SO-kL9d g tVYY(oJM۟_b!M *Av8ЁdEGt޹+w Z<_voea^s]6냟x0.X25մ˴EQ/0tӲiHl2*W^qg;ƌzPb8^QTqlr\KX^xUP%R&RVfjT6f@e=sKV+r˳.$ӣ[ۮ:11M̙3333N'&PJ]׍ycEZ^YYChE#{1tBUU۶A4miiW}ZXXX]] >򑏼]T~Hˀ2N9>{nR4,. D_#g! D,J>MI]R=U/}WENM5v֘^ܕH慫e֡a!w{VX&Olwڗ|9VOyݻ2YiN5[.@J&|Y({ &r?_=₤mX6x04QL sU4;M3BNLGġْLdREm8_vckI].iK}bAA ?@/RjkG>!f~U%DH%(A˱;(MҒJW~&`ڋ9Nh7[nhj}t4dY |"P~xh3^)Gzc[;+a/Jeww]'SO?5 ]0 RDWU߮}ׂ  @HH$>N}_$ !$xːs)9[>][H ŹԈ2SWxle;as__Y4BȀ y^t!VW]tQ*??[GGG{n;::\.Z"a(`EQȤt!$ @1R4JiA9'|anH!'}'3:/#7(վ[>?z|ѓϼߟW /ϵnD}#hnXop_]u]ݞ9(_lc#ífirtAF\ͭ,謴ж~ycC@̂؎qouVjjsx+,},3VZRb,O92=l펍Oͯ6trjo>  Z!_l^o+-VJ4v]l]Tjlխr/8 8 mA1.ce:Ζ63 NN6n͈ˡOq<ΗAQO '~M{د?ܿ;8r-?sw4^m=ID Kidp2(ќA:v(Kzpoޓ 2<|2dw\qIw3׾>g@#kr*<Ȉ^ƩznWh%ɐPZdfZ(])lr~/I sn4hGEP̌lḍ3YJFRāHzR 6y+.JNV6K ^ZZTJEZiZ>[UT8Cc1fll,JR0zT}'T7 M_&X][ƒj5JOzGaP'U\^$sQ3L9cڂgNAR^U$I:vM  Hi,-_-&`?೯a"xw8恁'0ۉ?v[}mKthUw-PL |TEGĽKio󖝯ڟz%Yz|ujo) 7E(Jg%jqJLdqֻw{٘e''w]vRXj%,8B&-jegR:J3H1B'O?tPjQ8Ke*0,rF,/{qsàE2N"UR铟?\­j]8,L5؊@7g-`OaqkDU*4rWev(8V 4uѝ(E,yhhѾW}e*{ϡ]5W@WΝ;'&`[|~8hqJA|=C?[vg}gN'+fvz#vAMovM7 yc0I(xc=#u[ge(Jt_dnv^M{e-uF xudA% _R\p΋[>m#,AE SL"*b٢ivR)"ďxS[-gQP*V`.D i$.yaas~ɉRUMzQн z|Ǝ'o&dR)o~[zѿC ue05~~~!x;5֊gOϧ _椳Jur ƿ>Ϭ\U2{h5y=nY#?x}qrwWJGWF9 EBE@]^^Q1lzeRvXS1}dz4|^ ;Y.Q<#0s0u-eҠ"h(a:w9E Zq\:;wfVky蒫[VkTF3U<07ӭTKmf8BiլnvmZiZaX`CQ [  kE QDE c\󋘪 8uZEo Hq(jZQVVt:E`WxA*?v$xƘma4[o7j 8w޽ȏHm] 烔ݽ?Q49d& uۻztë>W:ydol>O}v=N|r6Z\-ﻴYoLyN}Dk Jhh6& \TcJv|7%gY%W)%'0Jx$^!˶Jtp;qm(g)u%a0[c?np.v( "DzYBJ),+fv!S~饗>O~BjE_L~"X*2 yEEEBThQONNp^7^Qǎm֋[[$I?_||+Ǐ/*`>OďGt6|dYŖ"n =FFeS0k{[hte9A$1`q]\Wv+ٺ H;O-5e oa4&rRM"6^`, Tu=@I%6J ic Y\2F%ڲ}mhxdԶ奥nh60_Rh^YX]m*n'Nu-*XEwT6RTy#喵Cx4x`oxy_1VK75vZν8)s- Ndc b-KMot_<*kǍve\L7 3зxwg/)4v!kGP_Eh3nzxhhR ԫ4ZFFa9G̙厷;&wro%M@]h H(> ps6ΞTύxIˬ}񯰒H'q7g1Z kin (;A$x?vI:7;솸Zq積Ow_jm箘k{ŋl|8krDji՛_]oj`&7ɳ>>m16/N>m%=  A^(&] [rH!^;HA}V{NtRH± ;?>nwFyD95Í;i,kvݡ;R0iwtV?TkL=@ 7O7ˬ[NؾB Ʊecn/Ɣ @bZ2:S{ rҰ HI ,33//x[kߪ}yMP eVφˏ&FQB+׺~ĉqdHdiDR  4Hew5v^5_dDz i@aREw\ߨ81w .cr߱R78F#Fe)͟xuc#/ Au*PYͬ'VM:ҹyQ{ycS8 |m.`j 'v0vg7@*>3ʭV/M"0*(}YL&4[ ?dLz|4( 0}=xQkZ?~JD]+i$97@B𒌂HNZB1 8D52B_;WN=tw'C~EoҚ %O: H~c8gO'f%x#6Jb([ iT.W\k\(Ј ^-yQ̢ȲI]QP}pM82:'=f(_w 4#yCAjxя?鉪߿_E1^^A%/nZg>:7NN1dZP","CI[]뎏l_mu BC2k)R8;Vve:`7iRLm u{יs{\yØ%ZMi~|h߼70]Xl1p2RhJv=O=ttFd+pK]?tOo`Z@}3P+<RqU/>Fx 4:gÂe . )RFfH XvRd*.|mwZQzWJMGj( U/<)&n6a5{Jck7FB+%'@3&ňqhycn|Oj<4Yo"͝U7W?|탿}߻,KRW=/-0#Qv^J|%|&KK 9z|#9moXH!]^ &' ћf K`OUKвi$RTG륺+eV15ҏ؎W 2|K.{"np=pK?/+c$ #Tn˔6rcֲqu 8%1iu5`"ug#k(S0/}X $9?($78Ci>e(Q8b3i^tV[mMhu,Z=o뮻SM"u33Wƪ~R QxRϖ\x9`sG; z眿[B U͏|0Yyxn߸IgHL1 R<\0}~f[\ r9gs~>_5J@j5aQT;`W]o+U5}Ju9TuZw1uSlImwwD(Mڭt]f:m9#W0B )ɟAJctefDkȏSocyHҏ&k* /LfHYk a 3fJ0┏VFJ;3G͎TSӒ2NRxdPLq&MЏPLJ2U:HNz<{a6tE{'}9n 8uVT+y}/P!yj/Zae 1`0`@Jj& ol` IT Ȣd*c3jŭၚ{X?{W 0|qtZ%no+:-,@)xЮΰB0L l{:>kڋ{@$N nr}~X^1jDZz!; vBAhltT"4ҝNwetY.Z=ە? y1E*Zx^YleX>TǺuX.'^{%Ё$b}.J*dϒ3C @IEE|%@Y߽5ڳ.{3K/{ JG]?**:/" 7,[TYuٚFr'/㶈{*\O N +~DW*aLHʞ&Q*FH*y/UIģo}A8Mzk=4002BdR#,brq%zZ]l/рh%}k $5'-'nG}9#yċJ2ڳ@% [_z1< S*~_yZEv밇؋g`DDZ8kZbhL83.>Ax6]骀@n^!H{ĞGϟo6#J1Q9*&!A/"z0(у3V=-E AYXc&adev*K> ,?yt#;ʙtT_/, " [ͺT^"Drb밤߻ 2ŏ]eT5QRD%YgEhsN<-|iQS!s)TAq7ꙵ~l -Q"D_~Q"RhԢ4}}"㟺W\N}/7GƦ&=6& 8hܸkªx?xf=r"@ #C)GYE[E@-(!,keVZ;;Ӻ+0 l6!˅BD9t{NV[Y_|]E+`^9Г-,vS88zU/;ZMsrxx`eH 4Jox|4eS8j}eЗx*5(1[ i;r qVtw[X[S3CB% /¸1:zvMO<47OzZ۾3۷5pZ׺Tue̠D9~bӁ읳o6xi +Ҁ"_!ȧ½yb1طal]'>œ|ӁFswLK{u3|뭯^}쌄*eضhYgy=IPyU~"4h9)(6`.gP$If شDPmi4 ZkCf'~ʇ;׋N-v3# KT:nc?s)g|FckM hA2|n3?cܺ}|={'n-k`ⲎEw=VWޡ3~qhEHIB}kjc/ 0XBM/+L!͛c >u%FI M7p1Ei)oSqN=*683AHpF*9ToLN]wqJR!L=1fa$ٓ KA(DsԊ/TA7.8UgতˉOrX^C#O *7C~;;_y+nnUWny+w7=gGuY1 /wۊ^$謼8 ?K^ ;3ʥC&; }C^V9usWCr!X#Gj(b~ <:RjJLw8 -HbE^K~7^v:L?rb~= +%"HSF 3/?iC)yƈvZ[CJ8o͐cZl/؋6X 0PP/O8!iƋʑk:$AB~o-+&qC;''.wՋWF9wff_)otWi iiuQ m[#g x;1 dcA$7$ΛgԳ#iDD (h9XkVٵ$7x.7$:9trq%(Q2 Rn,dT[Z낮4s~11o6ΥW w#՞o\9y%+K'Vn~[rW~V~{vז+?O_xfb?C:ɞ zۖ.,}%M$@pUg߾3FA>/H D1D(M8ey 7)gtvի8FV h;\)h ˱28K9̜ܲiwڀV9w[@ s9@,ԫv5|oکKAFSԟ W6BbPE^#ۮؽ?RFP7E<_ӏ=ѕtͭwF eЗx{|QH)FQ>,l\]㋝V+J-(;m)GْFδ( cW]Jla:0ʮ7>s& TZ킀!J4W1@0O˅ }8Ӟ {jώ RF, l0*1_W}E ~%3p11~#!M|A3&wg3aЭ,,VDW~~y[[AbYƂF/"MDf}o;==Cdzyă "H =4bEGe~{F l۞JA5Ok`â$ 1e<]$Bzr(uJ)$ kvV*IrB-g ɛ ajrDMs fN%$;.ſCyˉrD~*.n/t^׽y RvD)ƈ,ON#N__^/3(|ٟBR( ۀ\9oyDۛ3JPkIhham+VW=mLۚ\mjp(N2TKL3(7Y\s-Sl۲,Z- @1fQuؠ#M ю?e_ ~~mGrWaU^P~xyăSBi ᤆLRq BR}ꬨk,H+4 ]RstǃglS2t j*-=#z;F(I[6*yؖmqbm968 ʀ:v]HaIϪ  81-^x߶Gg!3fJy}S?˷modXO~n /<%;(Fa:D0q gk)CIzq<$x!eF*xgHLK#~FF8cBz- &2 #UݔhD@B(a:. .JEե%?ћ]exRJ*Dm5{ZfI,(`>"^@ڠ_WٻER18y.(,Oa-s-%LIRrӅH* u{Fj'V{i7PJ77_w@(DVk = [`9I!,[BS YHbR߶1"E_{C )!&qn^4E\ɪγҼT 8g P*d,3% //iu!l]w>>lyJvIy~Նd`B*  M F>mjd\bpN)o 5<Vxg|CADG+˝ӧNR#kH ÅVN H#gP JW\26Xiaˎj$a՚뮼x|$SU`.ƨk[ olpۏ$"&K; RE5_b)6k G 8f*{{\pWQ M\Pjsjw-G?|?jHǠO`䌳a@An\0 f^AB 'ϻ!پnxyjw 4v^B;F_n+eizt[]#&_ڲ,IN 3H38PM)39ضmnRe45{Mw3X(ѹ9d;_mroSwp549td>z9k?an(Ld\W:dGڔx>J'Ov>cVVmCUx9η"[\H<7{|cexhvTPT(_vǗ0 k(pf!Y.&!)_ć_r=uLJ R7Qd]:!1>1/!2WD1&3- @=$'OyyWWFڬ!F _SCUr+u6GБNwWZE_. 5y$` kT_{Nv3Ibe]!ol4`êU]Q[ZOiyx+g.FJo94EAT*7pU//x@g #A2:ڸH:3iPHp.O<{`wH{"& a& IWbKԲ P[YpMY/>veJ3lDElTmfO4&;H3JOO#u 6&߈Dn6tVWo/_Lr7,x4&@uc is~[o~GuHH(՗Vx #s'd{F|$3B79Ik ‚[L27ٵKF2 I @S rD2Y(vQg)k5Dҩ0rmɾI&lyHPѢߘHW#vVX61@ox>*0ND^5g,Rhr6|b!BTX 煘:/Z6BKFh{bbF4*K$rLDj-Q$/hũEh/(;2mb2 16u 23?6Yb.Ef`u~핚*j Ȅ 7Ƶv.5ݝ1, z^#gB V)1TdݺdzJtÑ*ۀM7ir#Ҿ'f]x?Pya 0ڞy7HfijcHz0]yt8&d,)E`mR)q4Fpʤn(?eb17QNKzޯvpG&6Qq| ̴i*I4J~\h*Zy`X}|#<P|*cޠ ])ob7O/,o S?aiʔ=b_@}8(+\bOZDb{ʟ8o'#,ݮ+\A(%sO J6S(hł2xu[9d HFifzCnRjlՓa̘L%3J(a%΂hZ*F3saVǠ|d(":~WuW~ᱻ>vtϳN-xDžF?'V4H Er|(TII T CY.w BoQ&1}sz=9vu+L^YtZ6@-yAk;>", {Z^ qSkI; I6T#3wrR(@)4TpzS1 2ӒiVz}d 䡫G'*c8 1|^ƚN=y̫y'2Xԟ4J,ۮ-̔ ""lmTAiB20JӘs EǘL?R#e/>^^/r02Blʙ2;@-"QKLÑZKB LONvеoG}e[>96;=vpEY[Zh՚n0);H *i8'RlM(pkig$L)_LIFRRN/eăA\xATs;WHS])/u}{+KHZo%v ?Yypx(A_e0&2mI$dq) ;m@.(! (1Z6%S9G?ǟxx^Y⯢ l <pf #,?+,s,b\"!9/ {cJUTϿd_%`m,UQ S #dޠaϵ6V" 2}E9UtxaV!!ʷ sm5*ةԉ?@#j!u Qy7)ƈ?d ~'kY6=G}DByaÙpBJ)x'ՂJ)(ͭXivIaR| :*L,42K+8^_[*}Fia(!ABvm,-;cswd|Ψ:<.xNi9m-oܐ B?Г,`}g1!<@YX3l>IH9|30sڇGѼϝy@CZ8?(aZ 9-h ><\Gu#f[5\M+#9l6Trd @ep7oL $Ǖa l&e.2fiyL$b ۱@x"6~dc %v]@cpxhh" P( ~wF{o( @7`ST 6|e9eKW/0*x n,A`OXm8HU$| FYG, 6=a+`/ TALAiXQJi])e'1Xc"scR89^1=/cqhIVRRl 0ma@i|2b r?,9I!1v3̅s]98+ C( PM,QL)4%Fk!n}m\D=!Nc`q;M3saQ$~-a÷`Ŵ:Yo@ mx:** ,YpRϙ]?s[[jF ,/ٰiMBBnmu]@Adچ$\/Xmb+%`5$chp``r|8sz>R(33ec%fr:ՏV(^OcǸFW\vث*l=e; ͜ܛG`'S\*r'+Xeq ^c+Sp8e bLD YZ4}Fifi@d}}teabL,˦B6Ixumq;˲"K ~Dž@59{n4,_9f;Xi8eؠ$(Ψ$ [gʬ\t 5QC Phأx-@xERE@(5Jc*'Jy*n dY}h⦄*J^+({M1Z֢`=;YgΐYLj .ӌzxHlxE_;y+ G4 4;󄉟i`-@JK0#9`cI) xSРc5|R,s=^VƲB SeTZ'QAq(NAWk>=k]7424d (ӵN{]IUkn}$o/ڦ2|QY 4S;\m HZ;)]ղ2g;1`Ɖȃv@z&p=7X$B!pERPN$Zv)x@S$+FIgV YZﯶ03L(gS*" 3(хc8QPJ-Nj%B>5{mD,Ӏ c0lP 5E[H3CD8? RBPj +!͌Q9%EĠ(`#g&I`V7?Yյ}{wQvsnjzmumu~҈q#gcls-)[7tӆL EJ i,5B}`,cK7_5lV.8۷%|%/B EZX/%;>ty&/`J* gIUrVN } ;dlfQC$PGr@da%\ B&ZYS壏}mTfJ?\jT61!F#Q{G@n YxY1GN{ PT^ "iDIAKc"W4t~n/rcO-/_qU]Sss7[$.8dSxm˹/P Ј Wq5=V)L ¬^}ޑW?x_ްo}s xsCs')KaB)!)uIӹ`! U: =BhL/꣹Ong%(ثp+Z+Xi{J }P!pC", D*sSH_`inzj% cjccЧ0'BM!1 +#(754*<5ӸPb}$m#N)tV^2}% 0!iB1q$B$s@6YgrzMnJ+vWVgN22V1ѧO-7]4!Tfɞłagvv4y\Gyud!F a *X4;pwqi |J 1Rղ`۲<-"CPR摖`\2q{V eS \"/P۬, T^^>gۃ_Zp^B1w[6g0dK6bЋCl2`L@a,oHSK g<_ =p^}xڊpO7q-56Byr놅xQ0X@> `@W6\iaRj&LE٨X9.(f1a\β,a a_cI_aPO$sγ,e'kMR|^;76w\y8l".q|c'yK Y˱ϭ>9~Pj;7W B@!@Ȓ@2JhQۈR*iۍ10ÏQFNwpp k_̚Eȉn{ۨYNb!Q7mV/3GWb08M%C=~[|jdL;h Şu>IS8՚WQFy"y(cT608L$ռڔ$;2ZKB1tϴ۽,MsL aP3e68NOO}##㍑"o?4meaۂ>FLXE^Aw*NoTo-\.xZ ?HAƤj-4 q"DAz[]]yG`'iVu/ C!Tu]7I3| ~ҫOǟ|.ZY]w|NV ~*`W("Mʚ;JlT/,Rz`\\giktJx1XٵPz\QZwyհ>X #%HaWu#(L}-unWlEq022:Vj۶?[FG׳ފʠ{lLEGa A "'FZm:!Vv+.&kvM6KA$jp! [zA< pr+@eVA b2S+RE+.%D=9tb8#ZBqg^|e<]W׍cvɒBZꖔI1> 42{\6! kbz-`*ARBLJ/of+yUnO DGR2!j5E  O+%D+ zC~4kʲ4$ ! !].Um9l2Cahkwn0qJ~"dހB5zԄV[}GA}oyljCUXc-$EG~s9[R^>mkZs˫0tAkm[iv5W:qfCz"Y;ݿm9ĩFr8\vWYRPɸ#'~8 4-B,RXFLƇ2!<\$Xp~13=R`%>kVmy?*GpaG:`jRXQ m1l#0@:@if'IJ= !Rb[B~*ͩ'?,Ͼͭ7m͏./is)Eez-$b$o`@! ~N "Nm1CED/:U_q:RdۖH:;Fx;Nee2sI"~hY[[+w%PE..QZ N&aѕT qWV'B ~BH8SiQj؍U)WGtuH DL-mg)s! ƙThr]ΘF8M<1y$ [βlp`s+2#CC>A ȼHM@Z8Hb({8=O2|6U"yjvD{h2@l..volKDI(uF&JL,Q'/U*CqaU.)D& 0z[aB4"2DQw B{msD.cMlFO:A^tc=>7?G|ttdjzrvvi Er+.T?qܵj2fu$Ԟ{wEĶTW'l}'2Mz[Q" &K>DdtA,g4DXdfx1Q.* EǺ=KLa*TB"P\O*#2MC?? ~Z&yj^RbX+,1JW%l)g_0ͳuh(30)7wLo3 0 (/ BEJw$vAF%IV{`c&Oo믵{]q]ꫮ6A/?Ѓ =h@M鉓'_k=,'9?arr`ĸ oD!QZ,>1Pٕ o3WjV.<Ɋc0lnRN4U[UT"nh"ǵcHM3M,QV;I>l^14e[h%C1Be&&DD:sKɉ"X/ ?-W$T8! ;-1!b4 _.>k7N)TeH (ZQ ELv28x G(&I$Q{0,[kQ.0,jr8}GG2(Id 0D}7q~GYZ\5Fye˲, Vn{?+^j@Ϸ.4jhғqё>ъ8I{@DCJ@2i[q(][[=~|,W(:nWtؤ^{tM38J|``g/J={RQ;^ *rrjf#89ߌ(зx6Rg BR>:ab}ӗmA"s!OމZkimlQym,:TjzvV]NPg/vubȣ_8=@GO|7! FmV87RFIaKy"覼#SP"ś2RwQ^#|&M@WU(g~, h>3:MӒR*J K@*eϞ6YPHu6pHuưF$F$sGx, K1(FC/h&qӞyG;Kko}J4,ĨbRF\*\׉xz{vH۾hFz~f=;vNY6_]Y|;oBm 6L!:5D:”y$x|h|HzLP:\U)=&4҃R~K .{t|Pr0[zlD?}x-SP'bS kRPs!kCatKiIy~ID&쌌MO]$RSi2TNO8KQϥo-J[ȩ;9N+>N8g`+;1BnGZ 1$<*YkQG &c ,[J(T?)4raEO< 8U^!5ԪZVB6*Tn˕?򑏬ۻ\){KIV!L_4̶_roA۱(Z]]McBhvqժ΢*jZP'WUqlcG U()a  ;0VK. F F#pZa&2Yƈά/ah&%ЃȻQ9'֩8<; zZipu2es\l'A?;ZZO3NH|`ΐf%29mjmnΞʮb³xH6x, kļ cۙ\'Zh6m҄ ֭L}uu-s[_B\ rgB+PVZ1$9|? c̢\*4c>=7w?޾Z;-g6 ,Ę8Gg@*v(gPn80t'>{=;GFFàPGƴY}!TJJ,eer- E2Oxv" }EDP?FBb=Ynivi-΄6#- nT5s|Ul]Z&R)xRL)DH2"IGFŻg/k!q؍zRyO6zlgG7kj% EijqRRNzQҜ8y7cR@ϫ2 EZIFix@ VZJ F1=i%, xhp0gb@9T%Z؞UU:Ï>7c^Pﴀ&M5GT"0ōFcמmN/x:$YzttdhwIhmجA-08z^ukI M=@؂Hg0BIku2jw Zв٨@P sr?[]w̰ᄸ$PGaLvޱ{&FYNɱ(*W@\-Ε $5c@lΗFf?DK(Uy~ Be+39mdBs6$ifE}oHA&llع޲C/w,Iǀ$A(LlXB®e}jpȣ"kǡ}SW\VJ^>vćf\ 6C$ }` \k5)ufiC6>8 "c3)xy\2(ZBh @0' 4} Brp1EEi) Uo'sb3?oi.9n^ZDQl S:J{X ]ﶦv[뵻'Q%h9hVCPl8BLfC˕VOj }WVxn,ёSc^#^c4W3E$ L%?uԄ,uqlܶ+"3"Lf$6Hw;j,B55A;^eI=wܽY}۫e˯mֺaA1Nl<@q=/tvJJ`iHnc[~plx`9KrMVxn|bnB@*TDhb Cq`\ u,jڲ&HI6U*@^  3 N`eCUZQi>6.Y4#8+zJ9Dhi*layiQ/u[_O `i>=>ۦ~ w@, Q2`lB1~7C&5Rg +J1qfyY\ fhX@1̹my2Hp[m;r%ΛdJʕ۟c;~FpJ|+UZfSOg36>zk~nniyiu}J]J*@{iuѶbe7,({{pr>@s+c&lF`6^gz=JI$~Z/3R-9,aս񡉙 I_lqڃ޳ ;J{lzzlmvy. 3Lbvrǂ ې)A%EB R]TgLNY= ȸ #e񂿂1}ꍆ!q,Zve%SUJKZMJcGh1Eu^jxx6"Dcvje;EM *L"ϟx=Qa{iOfR=%V\+|dd$a˶1Few$Qک )_-*Ç?Tv{JyΝn0I@\B`1;{&Rm::f) 9$x3(QQ RN/I nkJЕv ND^˅J#5ԗh꧳VT'qZn2(ifWZe N_4biI k>l4]gta۴ʀ95"K;oŤ4 r3(kʀ_e! J$LbhշMU>}lz}{B!t2 ZH)p"NyT<<%\q민D)č7于G>R*rכ?=v'mKc־C!O<#ݳ\X 4<>~ʴn3v{,vNuࢋ.Օ^_ג$~,,.͟pLrU#L (/W|E-'@17< ZMӥc,mپ)Wy"KO̭wW}MY򽯻f셿LomD zĔʥ$[醗ն5ٕҙ1 =7gg!Z9A9!Vi҉:+]yu&L3IQfyN7nbhnꥁCTHWގmӶaR{nrxPQ܉ښ8qj"@dC9d&]2C~װdq$U*UQE<V_K;o=c$i&i\VW[ܙfs[(oޱsG.=Xq/ؿdʦ_N>~pe8M+5؜`W@obC%w)R(PP]9ֿ˕(OW5yeZFAgj(_'Z=0uC"`S;˴z#ܼO[U{wdeFN`ӛKNxy zѐWkJm 2WΑKDضFɵfFUIS$N~b+@\LIPUyJ)F lm̜GR͉>ŗ^/$@ڈDpL8™D׽*X`02~uqģG~!r9JnsǎS'焒wĮN s^kǮr*Ҭ904f3fR zrM25ݟSSӽ~t*l1z?~ z[p *,w4b14T]6>R+yaT+ŅL6B@ՁB;DZ8k̬t1EM%YV%q 5*lY؇>pHmi0(jpPں‹B2eRGXKfe49KK*VZ\ZZķ4%1 t䏎qI۟\Y?XT%j5)ee#VVWܒ[YYK>a+Yzw.^Vm^ҿk OT+.{ֺ_zՍ7ٿ_n%aiF)p %ᔭ-.yܾW\X]gC2 c~6%c.Qj-þjڽƠE!R,yTjeYU벁ޡzͱ"i)W)'fqa>Vj&UŜ$2#)Zb%ʼnwD$e< MQ"$LU<>2g[$W9} `i/Pz2z sɩ{[^\OdIuQi6jZł&2]<>6^+K_$I[j4}jڵ3趃kz}iVZ+I (B9[OQpاyapQtvӫ;1P^ |! Q±X$y&}#(M`kWRl5<SNPZK}b>uî3/\ 7BojY p(#aRRS G IU;~t^cۦ/gI?]|~$9PQPh*Re՚ H! JtVڽݘx࿥%6lc䆹Be3j/4*K߲"HөxGO\E!r+j!0JR6og;ɻx#_YnWR :nsd\L@(LMA ~Qu|?˲<%ol%2M?>f!<rshc;9i@Qz@sTH4nTjSᓋi h eUz3KHJu:K tjmX~8U]s W*[r!9eUG )Tr_@XfY{0v=uvo¾Iܪ~e`,9s`j|zW=81U4mEbCK=~45tgZdH(Ԏ饯K^k&".:릡=17?Sm>Hs.!Qqۜ7 )eZ|/ٿMJ{׾I^(ۺ̩ (㙙3ccj}^yɶi?gu35GfN; 1( <ݼ EFOfgƗ0JFſ Ey*ЦA2wzAجNbť4(X"R!:lhw ʒ4Z&ceϤRz:PCB,SB$Ne]mrC 1\ePXoıcQ)t+k#Vcch//W~uǧǶ;3 {f-ӊJC]$YBQgKXֶ4aSn[S̜Y9zQe11[61+L?.Y1nBsORN6I66v#' EЗ`@OLk}GOtWF,-v쒋}q^^^ĄE>1T*#(+뮯wS!VGF ,7 [BfrǁWd24ZVm-,LM)]jGbfmzcͮ$Ǯs![}sY*ng]#T239gvӖ:% f8]F0ʹdFL 䳷vX`mu(сPVOq-pj{AA/1s _?8.a<+.TLNϼ}V+̄v40qxzaNtV][NZq=fA?Zj-4=895>v{k;-!WcуiVN6- O-ѓ-?JB̆A[(d%*"sC KƖpiiSUd -dWVlM퍏xX^,Pn)?PkC\ py~x<މXL?3ki:ݮ17De^7IFiBfszj2~WѵJ[>YY}~Z[RwkFQP2뷻J xgK 1Ε kzqLO ?{ Pi>{Bnذ]J7R46)0^a*EZTRͧQq< )!܎Sd2QѺL"!mUv/3bl1;k|bnn@k( &Ifcώ~(F'B[ڷcm4)x~aĩөqY2RS/3H3,H 2'wg杷޶7Xro8NuH#6% %t~\: څ@ BIؤ$V܋,e=3<%s3Qs)Oϋ] vS`?&( m y>g8]7ks!t]fsG +LgB%jDBbm+^x4 C!Jә0 ?qJ Sgt&Ƥ-u܁GF=mXVuxaOBkcq:":FFyK_1=PeXiuCXPC?Q*5iu}U2ix>@9;d /bic$]d&RUJ^FVrȥADqjƉW' YH')ݸ(ЩΞq8^|zf(7t_J5麮ѕ#b"AOw~}Ev("6X9b?V0lND*lPe?ՠjjnDɚ#Q1TÎ㘶 ]\Mcύ{;~a~0n##Od^TIT6(dXu;3omV ?b{q*bD(Ie۝zWo Xf "%m5]?bK:F^ /TnZA܉c?CbR!{lGK/{.qA CbEZ+m; ^@D V^~1"{,z}$00#CĚAF9(lNq/dnPuD޶ lB;<ҡ/5Hjr=`I%.:ݺۍ".V˪|9llyN{ZFR?bF!5#(馂X>3U@fw& 9f{\i E 8{Txh(\y(mY28}g8pe)&|Y=_&B PIZ~v$*lK}&̫ȈèxG )@OřMR&qFH`.Ds#ʐ4,UQPPR5+⌘6ֿG(U&ݤu &!4EJ ZX0 |&<߅0 X1 $o pM|q̙B5 @_X4@{H l]x6lhqlu}?0t:~R-`BY4A0w;N ?'gON֬4mۀNe||b=3c>/ nUܗEZli°;DLn1XLvrkG)<豱U+v;}d}171Bϥ m>iܛKKdpnqǝ8|\iaL/!$UTCP11o\&,Ш4Ȋ՚n܉7' 8l*J7Wb)m,ۚ47#r0IL/@#.,4"-;lZTqxy'3PȶRV`HuXwBUPh ЭJTL"TUuP\ 6!JCx$vcaTq0 k? ^l $FtW/t8k|if g{O;pjT7T:[*B?:2?W^5RhB6eFXB3s"@%ɈyX `R\%93[㘊~YTB/R2d4<4rT,)ջw~TI/:ACW9Y',)7#]"19$eicM #FDD0FIHэ,VaTbiP0!KAg2 Ąp„X |G1(=,BZF*V V@aThQ R:^Yt@%WBlޅ=O$hqPt2,TC"H55 [6;9ygVшqG?r W5]C9ݒXe*c %~b_w2](;XQϾf&bץ tD z!Bdb Dqȱ#C9;UpۿhFiKR,2){8:M_>ذɌ(f(㐲[%*:i s(5- Zhv: HMFqޤ(juvnl5u4MВB^UQ#4:M@OlAxb;Q*Rg0O+8sIv+8h)E89g@\[Õ.ipqzO(BPvb@E\/ڞA]ͥa ; D\yPM K?ga8+(9jm[X rq+:`Tkzv1͑A+Co?y"RT#2 JP$Ԣ'LWCJn.#y-Ab*Ä %Bj 5 ~1͡B1_]ȦW[r|qɟLRAȨjLMh0 J@h"[ ^BjY[-qfTl9ڦ1xhph?s@Y@˿9ApYpo&S]l$ ZLJ=X-ŠGa4_𽊰"8"D"y%(1b*:,LB;N,%{dc}SYFy!Kd)3 )02x$.v$/EQM HWMB(zU#k,{h\*8qjrSҴij&SnLlvΤa)1,b(6-lbõ8oف;|?$S]ppq(D ; +r8)Ai` i0n( qȻ/rHokS1P:EQ4!t  x $,m)IQ'ſ"a};IPEZ7€N1"!TM4X Dqq8 n G*xz'T%%d&Ay2aMvJT~c@n9'̍p<2>FEQ8L^"X3;'ː{Ã_zJwZY<l#(>B} aDu=6 : i:@bn~~uGO L;C̹x%h)P0?՞|" a-t}@~@`PUcp )dTbӨze'glI J"5H6l&T\ Tp % &5 )XwALzo߾iv"2 e*.6]ObiM-,Mu=[ B~, It|/-",dOBEb0P8 :OM[M?A0ZSI"{C`JTKWe!UpdݎTrPjuS30BiNՅT*|-W(" t2YBV @!#KN[G&(RYôSAYE\pqC+@Dk@/䍋]''_qX.lذ1`Iv\GU`F>ƝXv#O6-!բ<ʥf6ye_Pi{reԑ߻:m@:g;,v=''?!cͺD@`ރ]Z!`EJ<0l"51Hዘ<XT3d2JU-sٮ/ H@qM`< |i۩4ﴁ377N2SC7Z*e :1i:m$Pj LIjUq]"y&&\q]БBv `-E\ _.гe/0s}FۋO)ϜO԰+WooWg!؅zHca 7 75{~ǍGk#0c)SktP\Y103]յE%^XL~c:ÙE5y1(tB `>8% l2J67[-#XD(9㩧ѕ.a! D]-I^ 0H.W"j"- RQQ x*П# Yccc}#N-ے=6 }j>d1a'yH\@y$Dei.gK2d-W28ep 5X]F_'(9?!Fڽx/mQ|Itv^zZp ռLοdJ 1"'f1H2b`, IEq-,A4nQ':3};&Nmb~ZӺGǀL RQ&p`$ <%a~HxqRqH|9A (j HĵtZ|nUXd^D_Y{:*[$Unt[%rSKr1ȇˀ[ `sI'[ܴC֎-#~ڎSg&L>y4"aC%WU /?W71",7d_,3d'U/ [p/|$H^^HU[`I:-/Ye P OY rnx5;N 71PX1PI`¬k*+ f#ĝځ BA8@ ъ f̬: 7l -o}8sf>1PqkTA3$X%DY,bI썈„!8"ub ˍT(MJ$JRN~;%s Ҧa}rA@Zn.qD `4dFƆaX؁JUwu>EjtL&+ WN.Ju]EaPZJS2^=8HA w9rJmt\_HlYZ kAeH+Dr(icsC׿--1S"|߱]8YP) 4lSUi T'n, @XB`T21k3`VϦ;S_bn o;/<'f8:*O[8- y6@Ӌ B3yqi@&\MYlLU76@$`%10|xX^ R`/!uȰ"K=[^[ Ie6&ݓY$<\-2^8RRp1T ]iFH 35!#0S7C TIRk 8gƼcR3 m "V y/a/v:\. 1'jq&U8V) x aQV}7]pٟ^n-id-]oöC~MfR 2TJYZ63cCE#^\TSي4&,pŇ ]{ȱ]!Jd/h `#B] PGjt;~;LU@,.1R;4"sT-uyzlB-9'?]$j ,KCS4ȍ^ĆGq. S}}l.;Ԡ! z &R Mbi~v6k!d}ֵQ-/Af!݊Y6T}m$Ѥ'a)[%[6ʲ!}{tt ,ri2@cli{4P^GHB[ Bd֧ !Z4?  8` hMBb"seO̜u&N^^P 'ý< 4S VUe;eil%m']C*8B4 F d["8/_5=dC 8fX@|)'3uX,rVl#IO3UUͦd4M2t'H%C6 } _%ӧvH B8iyYED RP zAؚݿDpM**!B zI[J@IS?A+X'5h2~Tc}H M,Digwt7 pa ļ C^e\:hX<6 #k%NQH*}_VRTPE>RxhHR,w(Gg2y~$.ӥݔeMi6BuYAnh46lؐfu]O 5>j>PFwSO>\ۿן1iS.R)&ɾA T4b):bs+̜@jDlT!]HHB@㡄+ Üpg. O|G,+ ɩ\V P1|ES`6܌wH1V DM]i d+BT*qLL#a&~pDGl}##Z7}Wl?d@xGFhZ-qyV;L&-y/dcƃj_2BUUANƒD:IldvRYXXPUkRUu6hYoYLe)r{T1޵k-?3dXzOlr kBABW>0G`%b'~:BJUF5bQDWUɈ ~V,=L- Q$;0dP9R.Pσ_NIu3\m۶p25/=K\5a0`說u۶_ڵkZ̒GFFdq)JE7R!d$wq0d) AG} woWc H&~s5k۷{}Ζ-~##l_eΝw~^bؾnUPJ&NWL]S.;e5tg \`+RARH JNt U@s#݊X cU!nBH%[!:H*Q4|"cD_Z$tMzM[m)Zն&!TTz?j{ZILKڴQCROju]wfffxxxݺuJ5kրN QC\2No߾ݲh4\׍GQU4 d+AMM6]x2zƮ]n }S_LDԨ-o`,_ ۮ9XA籮3 RZWu?6@^*R,`X Vrb,4KhFC†"tEDZDb8 (A$4$%BMZ b wnuM7!n Bد#Sf?,qjX\Bɐ'ft]Ӯ ƸZ~}aa}۶[m+V966&3nիW &&&'&&0ƛ7oޱc<_"XK *6lق1a2ڹs+uh1W@$&nX X|T&PZ ,+6tֈfVTSEDHp>E@OkX,܋0gSa<@4jq:1!ڒ+S)!XTZ)m/Fw>oQ9'Of >9KtZ\!!o(x3oBR뮻naa!z.gڵk d<$p|xxԩSO=PR8٬4Vկ~>^R?uꔬxJDK}Oҧ߲6o4n-AVP1>^U࿛T B4]QMi4Ǟn>BOb*AEkԠ*zG`ZbHS1V=dZʊ'`2/0(BTՐ:XD^R2(DEREeCW\q 7\M}a4~ёם::sEVN`G|;w"vWlmg[ЭV۶md2s+_ ЩS֮]kvVԡǏQ,׮]xYja9s ࠪȠH6doXb;f` jܔ]B܌'>%]WM><;;(,1??_ *@Lf( àaD3Vڪ \(H G л "UK*R1kq*aPv EkٜHπh5LkK$Q[%⢎D:a> N#jڍ}}Cκ,i]X_.\w\k_~A1lOG͠ң_‹/(?yzv:Y?}P\HƊ+8Rt} OOOWǏ>}z0q'Rƀ)Ja/w= !dA409Lt 7SUb'K6 %{;_kQ8g"A)~H1ujraF`f Py^֕l U$}T-:#hHEb% 15kS$]0e&;GHPQh‰3ƝƟ}ߐj_ow7SN5&.쪷mlV(޳灗?_ߐg*t: ,$d׿>99(zcv|>j,ZXX]*YܺuclddD)Ne'˗uO4 I@.Dƕnܸz7|_Kav;]f  m%R?M_U5դ$e´UPq7`CC6U-TOH2?l L33 CnX:V)SN?)ջSsL(*A$Rr(Q q`5)G xHH,ag*H/ #=Ȁ؞tv]fΣ{Kݻ;d8$<hwrG<=33WUtA GW]NqBK0={M4M„Bk׮m4Bl6+7az-CRA066699)k`Aw^clRf_ߵkÇ  ig;'+e@2D-/a-5UښfcNtlXUb*JƎ,WPOQ [ສ FP:F+!ԴnE@ꀠA4&M,ND1(`mEXOxؚT`8$cF )T?u=Һq)6/pvĭ7(t:'O4zDZL t>4̙3=TI}}}ba+WDLz^K2ɂ79|>z ' MV^z=KgܖIeN*f;XKK>p7+/?_O*ӆ궭g-%cr0A8$:!OzT<zmpNiBK6L5 =.TQC#"n7J:g\x5<B,4蜂q} b` Bªf-; 0\:?2TԁUk;rT׍br2ff0=zwkpTܫJyv{~~Z6VIXA}[2Wr0$aE2EQ2LP+Vdr2룔 2t:2SFS2ݫw~MvͿvCk0 ۑRh.9|)Q5 'R*v(|/Vۑv a8`un'jR 82m Jes3sW*|)=\.p̴e+)gצVAQjJu'#0Ax7qM;Ѐv չL{'(%^c{>?a_lm~dbU-g :55%( eMLLu]>&.an)˹\nffX,:=R%1 sS)[b " y u]YQs]^D"IK !n]?Y(:}w}h-,:j$=6fX;?T,@^yE&8]T=t̙׭ܮP by`P녦FWoX7;7N)ós8181&[+֮[Lmedz936U+F415芈 XM$Tqۉꚕ}У<$Tu|b"snsbh-[Akw8~zo^'sqI^Ԡk1NvSO=UeWn2!.q2$uHNkt?\\qxpӚ4 a3ãB4ۀĜHΝhn*V8rXAh&BzkIe]=R }mS7Kni/`8hӑ$`ΫbxW31kHPӔ?uGjF?;;+q$zAH @eUʷŷhC8cF鼂l۾>㆙Ai V18Xihz٩z,xa/pSݘd3g.\=t+XS@fmo~7ku ,B%,1G:'4\lE %g6Y/nϕGfb|ulh"a፯W7 [{_R:::\JUUu]A+4{u_L!!ISZQMOO_V921 C9gzZ&a;vKx 2ڼy;IteDޛr'k![_n?O:{$ DŽપ,km\VG vz\. EqdEvm/ZhqP8eLdy%/?A) B_jU UQFK%h`bZspp3U;LB^cWnx }X*135틏ݹqxc.E[pqU}g>oo[tjʂrF7"qq&ѥ7 Ynm.1||~h?pٿ?OlLno[=߾z^pP+2YU=[Lrby,V*RI$lBgPv; N333h4y"5e%{ɝNT*U*Iܴi?AyP$`!zhJg|Z [/ k׮oy~B &n(l. 6J}{_|iXL~oYv dJTtH!+]#H@a t*OϿuwL]+/P&Š6  E|֬wƬ CBvָP`QM ͷkܐwt _fi9_L6D7E=@PRxݭ_~ |q|lʟ8 ڢ 80?OWLۗP̎wre˿1IܺP~rrCs&S^N$=siIW*\.'xY|_r&e?زT*%GVZR)u7nܰu 2v!xPFHlx$/6ڲeKty%ٿ㙘 I UU{Rn-Æ,rDQ47?]t:t(Dm{R c#!!dN C/fR)X5ЖLyy^j> m]DKv'[E+~;xL&MFyFGLzg{dz{w, 9ۮxd\Kr=T*27oZM-<+ɉUn_(H3]}o>ة7OLa:k~6|G~Ǿ iA=ٟ~$ 7ח24T*Z-HLәn4|YBoܸ8pc\To~uIv{L&R9ɒ5 rID]E5o㖝rKJ>EJսO> ŝOZVbA0 nrمLް\TT jZ,f}MD'U%p13ȀԅV4E '{JcӶuCiƋ7|kߨE>8&BB(ۿF9cYY_ЂRLr0wfm6M_pwn%1ZR+ҍc˾|o|..ot_꺫ߴqO}{V}˯"2u6Tľ{<>f)s(-JI|ZmZ҈IĆ `^߳gƍP(JOrAʱt%/iR򮿠T (Nة7J &O Z?L VYQ:N:=GXw%1AL6/~q~a^BL"E݀$ҰT- ema7=_M(1Bc;wv#ԆF7āp΢>7s͈xIU:pŶzU>y}>h $n+L0h W]50?fhbbW׽\=J1_TVT~}?;/Moǟ@:- v+ģ?n~5}|#Hl/r%]\2,(:7L^w1V*dV*ʧdITɤ3_C_䡴n+]٠&@/\L澿 u8qfffo(^iCOsωNNM|Gn($kgFZ<_px"|K@uI}}S{HX\r՚ǎ} n4/k4ZS%NC$y=rhR;h뺬o޼X,Jqt:-Ţ%^JJc\.}ݷwJ"mzr, B)u!-KiL%d N*ܙq˲=yDw d+l apP[:{ f_,3C}10ir#GQ2;7O}&e1Uc0nv^6MTDeKz ۡąFA\2rRś+>8&t=={-k?m߼Sn.LKDI("Y˶/7^vť=_tĵk_utNa|,u\}͹ѧNE7__lLg^vꗏƖ*Ç&g(nw׮]O{٬iF#˕eP+AlI*UU3LXDtӴҴ>,QQhA+{I8 w.ر`T=J H[}\Z%No !-˂!vRnb 7\`ǜBGw^k^3<=9͘HuW]lGɘ175 `yQA\?`Gq;*[ cM_!Rq.eo|nS/ڱa~vfwq]K\}o}^U\zH1*ן~ oΝw}s#k69uǣYdڅJͫ/}~f3 VL;~·n;7&!}W+;Je/rniMoz__2Ɗ-[;&g+~R5PYi۩Tj۶mБ#G Žd~ seX$ДBЯiJvDT )Byӧ A3#{?7ˠgggbTtR|Y &GB2%Wf(vI>tc(l}vu‘\ckb!X_h9\j@uCefjQ=ؾB_>nV`ߪ+ԍ? V8{|x݅_^$IP;Χ~xuMV5VTA5pO\zcccWuTw}ۍl&T L:f?mWVF힣xwi[3+K}_XY 715k {О-Ӟ^6k?J[Vӄ$thhh޽TJw}?S?uwdK8J]ve_4M dhȆ.Bjq<55HZr9׎;y8r.8's͇}N@@,l, ѧ @lB>?,O+8|[@|@xI|tPT2vd`. jn^zUwA\JYrǡeū !5j 4ij l%X*(2Msp~w*HraIņ._nmOOÓiOӴ 6ȥ(}١eVVv&t#<ޟ>9DBf*zq*4p)Uڬl 헬{Xp;rz\ k(eE)qʲNk_~{lGX?8KV׷rA*NFNi{F.1W5q8z$v?DHa0@$Tp\>A='!J5zsYgWr멧+jl6 d=A=ԾB099ٳ GB;StNrt:1H!FJ=o,^Uk&1v)u? cl]Ҧ\ugGQaqR} t,ˢ*}&<fq0^0*5Pzۻ-թdw3gFh9ޱ5Wm`Mk=Yku 0'?jFч?̶.|E4]+rwI˹ڋ.|>o;WS_OGmNS` %?өSjDu֪QU¼U8PhP+GT~;{lfJĆ'&F= YOz89zEϞB>MyO$q%|6Z5;;t+@n Z?Uٱ1133355mYUk֭ۨ(TʵjӍ"XK:or-j&TkBuC,?pHǗ >bk֢ DYg?sB榃r_sM ԅGb㳺n|i fiǎ361ޅ_i-|,W5D,yj>~gkUP/F /ۚs߻/wo7oYȣ'$k$J!-rԩd:\.+.Q0ahcGu@M* cw?;3+v\/) ⵅ8b\0 =`/ߞ{ˠWm_җK/tڵj\EB>Ic R\F6ZדB'Ej#G4o1lذaŊ훙b蒁iY{T{8n6rF>Go~5炦iPLҀsK:p;g*!䑄,0c"[_[:^Fbl:&j+G,RnS Qű3?y`G6mڰaՃ8 ҹŠU@h**n`cnn2r7:Q9-T4{d}Lg\:}֟˗V f:aе|3̓zټ;v(]1*!맒W hRE}Νd\s(>K-01gΜlHR!ISw>|XVEԙT CT̘gٌ?om|2qp7o|jAkfF~4Xε-[QAͷ V;=18#b.( 5FB,SOΚժr:jp @ mE>}ѓlKc3nN~O+rv:R1[q_ -L|10r^8{rŏXA{Ha?h@X;}0 ->s n a5ꁉfdHcAЮ[w]G? ԋaѐi?}wwlj}_d&QTtۿt[zG֭[788x~_>q HLm֣LZj4KSʳ4zCRn_TOvbm[>#?ɛ1N D (:|'M϶Bưb!|"}` ?'=/htRb_sPGP®?r|!{\Zmv~n&4 x#P\W~j\? >wVD*6رc_{՟O^9ۘg+~!yar={o$[vHVf'A.N#I"зR$5 A?F\.߿qJ244zPX~Qv;nsܹq7ݴF>ٟ-v̞O h($W9_9H@U(6LVSUc^0ؗd7?T2ɱ΁YYd?zwRRlZbB4TaEn]9̵#' 3J|Ѩ6-CuVDJ^Ʃ'?˯L>uM9AL5C"v0c4^O}J~ y?i9QJDQ8م4j Sv ,f:UuhfRw~=%Ew ]-_RBJh6333>>^*F!5G0Z$4M644dfVH2Do|iZ\rG?Q˲tX8:M;npFN5դJ^7TgvΙY $g?| ;!xelL *{k`)5Y˕pbfhԆJ\njf*eY)"JxE.TnV߽x[ un6fFլib4#kYq;qx7 1%")*UT!b{UR-/,̪PK6FU0Bܵm7\v a"3~Ȱ3sߓzw~_n7e)#Ă$jHӴ+WTb).ڋRdMҋ%̡ :n^~ۗdzv9[z}9#_ey]wBy :k8,nOV0b VV sM=g!HADC( =3=;A]ͫF5Uݲv +C:<q(YcD빁׮q$`o< 7~߼Cpq\1^\kMyauw /YU`jY ¡PU7" L(!]vDp':1g}C֭;?~E30 =v]j76oX={m7=\=O3B^}9KzDY LMMor]ו02k@Vy%qY~KZds^׮]s?s۳gO^xԔhg`̜@Jjy8c΋;؆+⡍o QEy!Щ/w$yZ-Ͽ08_4f˴|!r#'4F1tUӔv^z D0 bQW-+fժUq(Bʟ?1=QsQ|eזs]w'}!,SWnZ bd0N[2PQD4(.A[XJzjC3lK$TDw:ٙRo5[v*U.'۟Z=]{Me*'O4?-[_;gQB~>\WC= D{a;᜗eQ0塿H2Msʕ1l6|I0iRM"7@eY\.sFE I~koLI_z_0X]} mvo*fPg .iLeAY9.H# +:WBRu?~J>[mő779߮e*?nڰb?3)THIC+ 3(tmXՉ3tV0/8XUԱߙr:-&܎cg s3v&BMP($5S3@4JApbhA*a8(zuN |9=?`<?>t,}OEe@FGRP{Au%a.*aFi߾}5^I%BWyΐm2̜RDg}nd#0BXEe5[w [s1+*.4KAu֌,ʬFiљD~>ql$X2%t |ESނpEЁCfq% yr,p5hq2Z\/)rO\}IsHY'yܔɒ9$ !&&& >df& ۶%aa̙3SSS&mY,1AAz[wiܿ릈C(6#3$ױcUG583њ@n4ҋw׊-׊ ⠨/yЈUƅ(h2X\ 9V-e3YLZ(R}晦-h!](xNsG>4LV& JTQ DWgH%"I;QСA6RwYvOǣ9?jj*X-^UӳyqT5,h HDQ98 7z녇OTRm0R^o5yoҡɇ7;[l_y8y4߿?ƄEDù[e$\ʆgƲ#!@R_FV c,u{rK!Kei vh>}ZJ:jUimrR$9hF,ivjqyHY5\w`1{TaӳSMC*T ~C'DgVp ;6^!+6 D:u͊Mp ,-+8<QTCxX3?c+Y{{6.X|#ۮc+_7}k?-7pL!f9̃"/o/ORfd.ג~) Þ^P*+J2L :VȳHOY\>][gJS CdsEB8PǾTAϪ⧧2Pad7Ɣ" kIɓcxVJ,&9*-F"- ڵo9@T-LqbP"D@$SM*fEpWZnsòi+Ac1^mXFm#SԔ.D]S-yΟ&S:Bo8"X,N8@U^?Ë85k+nؓ-~n^g}ƭt:T׋:]Ey|N;FN[ٖ4Y rXr<zϰ$L2dSL2!Fʣ0 -:2 i`o>ar\Ԯ+OfE3V@0 Q<\'{Gmu[#;MNKi:(1p$vh-Urg5̨.bk 6L2fi²yV龬BSRJc|(JഭǠcM쌮fڤJq5Բf ^CA@}ﴵt4ӺTM][)ՙDApۥlD{0ѽdgmw Ϋ֕f1Z: OPUJTس Rr.mz=oȀ,wɹ6Y'Ff|Q9 !lV1|Ex}p ~n~Jv#,{{! O ՠ D;AX7#FNGAHMD1f:sCPQ{BZnVT5=;G-ˆG Poc 븳t"E)+TW1ePdpNǦ|uQ8x$ҋ{58Ǻso~~r'Kv&jMAJ h4{/jv (r&}V,I: U^h{ OrI^U^O1>-5ydP .[dϧ.%= $G44 M~Hq` %QO o֊8Y5Y0͙ LMhq:>W@g"6 TP JdX`ٴ"`cYVOğWyj.DQd `$AD"ϒaU!& 羥)y< Ck6Eꖎ AՀ&o-m3?!w̹Vwxޙyp8A=y cBBն8/hm6[~ OH{ccc_pV!, xF< ˹+BpHo%҈0u3!{HҞlj箝?߀S& k\<H c`"P* Tk%}0'A "NEbHmPfϏD3S6 ˫Q Bb[c%@gLcܯeL媂a+cGAIэЙGHevѨ7r3hRyя~T4\r_X(A ]&2,či-M6 創7ys-)yy1MtBh`qPhM:g0h>2+Tec^ m2 1b߱~"|S%m lfZOg-šw m.T N;ĮQ c5b$B¤]~{<^H:<ꫯ\nc+Bաg XH"Ie#c*z` ]ץhOWcHzO /&^S(!y>1(c#)Sxr^ IkzӖĮ {2U3Rb?`</vbd}^4PDzO#QsD8j?"󸆀bj"!^xRR g"F,+Cނc0M^#!)gET;{ޕ0T=P5jЕnωkVp'o( mj7BUC'q<_s" nwEXjBb2\;g^;2TXX&"*!f1&>€P_ph'h{ģ@kmyMj +0M\:gsgyky WS7Me}7F{A5B|{ӈyUN+ d(N 7 CS74˥S:?cA4i㐄Qwu֖(R %2?x4XOjZw:RӐq=3?) "`qȤ4ƯDZ `//ޟ[ WSSV*)=2o/?$$i[ǎ|[oYa+L_inz،n8ĘUX=\UiPKVʖq6xQESb5k_G QCҥ*404"(i3V  #wTAX`AfUVϮHF':8 4%kG۞t-]5UDLSLve-l6:o_p ox^[AVx̑}w? m lҟXLl[O>n/*cuL>uO<@T:#E#?}?^ÃN?jVݱrS" Qd1pvK}+;oÚ5&&.qŖkgyd0Mje]a=2DJm>Lc5:FOm_7jՖ53OgɰqlKR"$Iek]9LЛUS<5]ߍ7}F*? gN;HӜ3 ɓ~y0E  ~MJ,(Z4{?@j9MPi.W_$"F LD9Yġ8Jbn#p%Q(v[3 HK\tLYB ,ajQ鳾۰[*E[khﬗ"6MDVm%VΖl[/ׂ7Ϝp.6fQa+/85A`7Dq4H!? ‰c:<7#ݦs+m>ynؓЭ+.G&GO왝x5?}͌: { F4;5أYCP0>)g-Ek](E0tQw8H -@ I߳r3IXجN+&]7ۊe) vC1hD0H =F[ 3]7 XC!LG ޼u5ɣ{X8NM 3`%\huZI5ԮiO1GzM[o^=q݅w}wYհnaYl>/[:bf&9@bz8A=gRH48^BKs#/7bd[~MvU*}|o]ƞ $cN7N^y׻Z|xϤZ^Ad$@z*ga"^<&!ždKMJV~gsHɟs ?痁.skϥ$~eŻ{^}YF Sk֥3Vl+𼦫m(p:~]Kai)`JC`~N5}:8C4 rr*AE8>"Ć#tL֭,x-qPBбw}k;>庳,Kֿ1!H(BodeF4Ʃ3y) &q:c HZ.F ܸb$<|#}eS K tMU7PZne*ؙ[/XӋ/mSӧp'bNrEd2v: M^pB0;@|IPtb#v"";B x(!*<YC#k\ S]N5=RHycFU¬:2s "??^s5!5R8|&us5zHJ۝FckVͻ5e\򎷿ߝ瑻}^FxA߼GȨ{iaHG1&t0xQ5S݉V uÀCDctl}=ntV+~I[L3;9Utg{yq^䩶7K}A'L-naxfg+LOM#45zůĽDm}r%q*8Lpw͙F:er)C3҈alc:.J)V̓a֬vBo4YΝtyꭅ=16ob/x.U,7?c}q/wnmyN\>C'χ yp^*ЋNZJ|.B0yR+)HTزVgz{KMپLێ8 9J;uy!͘|q^j8I5vW #Y L}`׮2RyczBQ+W^ݏ@н/BW$&a?wY 8+Bg?_m{aϳD-J>Єl yklϽ4D?3'>7WwiiGQvfZFb)bz:S\1Y ۵0 R@}Fi*I(Q5U]ZE1.8IzUĵm\ t# G|f)kjZ9"2P1/r(a+3`m9 XAwy{&гWSy@TS2gynU}gp P ϻc~s0g=o's+3/}ps0(GoTEje(7"{iOFBU-zaw8C5d5MJuAu0jZ!0W(S@8]=w|@4Ȋ`A8g!H.;HS} :G/?5 -ie9w=?NDgY0hفhs]@?(:\!e0]_ӪEA@k6b8bv&_9n[*mëG3F6Nq QSX7ÏI˾E^>*!P!X#X)kY;f=ۼvK>iuhxh [GƉ~3Euh [b!H Ԭ7Z*ϵ y>7jfJ5tVabF{AdMݰکqd\I zUH? 5Pcp[CAqgLx !BR)ֲVbv Jѣ{juRMctvPn~E࿭,]~rj!Pp0D-]t:PQ %BΰSU ݚחʹڱу,cs6X,sǝ7=;sꖭGJTs|jvPLGHttt]SDcD7Uԍccdzm/jVּzw30S;^iQ{$phU%YEp\Tի4B+jhm{Z6sT 0-43s<NjԼor#QVGJ΂y[\ ĈS!UgdŬ=?39ji ykaoOs-BRE[P˒^aB|[DJ.\2p(E-71+ݽNTf`n}5/;Ri3Y_P]U,2-9&oD+(D Ӫ d/ټ/^2GҬP?zh%7AȢ*a pHһ,҆Oby*eQwjߣ8}X=D*i5]M4J}M߿kQ !b6r׽0&' t1%q[pVb'jdNc ?LsVi ʇ EH#bwYIN"֬Z1=]eJJl(j`d?Y)~;*[j<`Y@ ;q*t.F~@'ZA4Vm ]?s0 s =<5crrajS#VQ?$~mƱxYL*z% ]0pPM+pv#tMv_M!6Eތ;;Att@lub s-{g"JʔUB}k:x ITՁ p|Puγޡ(䯪n-Al`; SS ,) w1^h>+9s<ƩlR*?8Y洮vey rCF(r$b(%Seɖ۞mwϴ=35={^-e9eYA,V΅B!goì @e&[=w{o0hiqC>& @3ihtXw5\͆ҨRv|p`h-w|JRձ@?PfUhcJ? |!W7)7Iy9Aa<[ p8RP|ןhcZv'x8 ,UI9Pf&))HޡcwЉoYCHg6޿&wնy?aq Vp * 4ZP'Q.MgR9;tN%MJطsfj&f-4Ј75VwK%r{BlhuTzv~C5ȑ2`hj1RQ.Þ+LJGBcwm/.b$bm}T,G03>nY A3\U2WΡAcszJWNxqiqvodu%Ұ[诋(BS1?=a?Ƣ0=wKB״)IʕvRAJh-D4ާMr:)`u3==t$6+oweZaI_h~1f2Ou.rxLOnS)4#*T|$"F0H0yf~}o؏;ժF`ZN{%) KORDXe[6tcǿ\m3>kFxɖy`) #HV[,sA$erRPS>:pfʏ=UYk6h xҰҶ3Oɀ 4C?&eC3􍾴 Jxi%!nپ/|F:5 .8 a`S<&1۶a3Ƴ ofz<׭ʲ!R6ALO0P$I3 aX(FzfV!ZjՉ¶b~ l~3p 6U_uM‹rJ1fZ(SYCx4IFki224H\Ⱦ^>vqvvgF"2xZrq㌇ݰwk2O7E#RID^x66)kTRitK-OW{lav3"n}.PI|g]@:(i: )!pƂq$I f`iush׬ō/-ӆҌv1ĊuoGp#;{|[!^U&NFcde19< )L4Qxđ/?)&nqP{C7'YجcM$D)AXS d3Ȩ(WDeAy[p:rogfb`9]m+٭UOO;*:eӌl`FyЇȫM ~1'ӡKp-HR@kZw֖})UlT,G'L+_"j͍ J~#+TmxT)2R/ B#i۶ bpuqqtaƠS`dA3Mu]Us8 A~ml"7 >bDd a=wS?mtR?My00@@Hf^#@טϕ^By3w5.UFX|!Smr5}@)LuׇQp5w%usp_r &uMa2V`f=ԟvT_& ִ3ӛvZz/I/RgeC~bPinZ&H 83 hFA$ "-,/{f3Vs݂-3ܽo[0\f))哅WYBk6ko5qFnR;\$bGm1U%E;g]BDJfx7tj J#5˸lbǞL_cݼR9..ϧD* urH^^(eqnjaDaOu- kk i^vgmZw]Sva>$"iK8=_l:d[uE4.._zmAx8;j~z@R{ ',/]K(,_!oV𪫽{Lt+u^4[agfaG v*-c{iYx~51"O+sKt5㔬;_1_{=C"1r 'BmlQJ1Va1$ [ETk*rls* 7j uU5~ OK{}|pk.\>᭖RpGMcsBb`qijvN t,˒L0LEis1 IJxI[Mَ*{trǭnG*Fщ[~vîc phC-jQ):ޑgf]2UY=)H R/55}ՁiXnlPA>sXE)J}SA12qǘ^X׋UMzaXtFttqif YnMԞX_w5n {+#aO!e|d )2gVK_=CŃS;'2ڃade8:3:`IEa2H"cL(A kN)W?lZ]>2llJzԏ'ㆎKň'*LyOxnuDS/lBB28ۇ+N[]" &k{/_n / H+$ -iRLy L?)g(CR%XՐ"̛?#$t5fǩ'ڽ%RFK Y2a?~DxdUǟ}I[u;?7?{n[e ٵޙ&p֧Ο9k,1 jG;\4"kTGmۄS,ˊ:BL;nkW"8N֘F#+JUk/װTXoҵc.5HƆ ΍WMz;%|]O4b$`mkKp>3SvٮΙ@kx(r{05Rkۛ]u*!9ZDɔba4_JjZCCCnPt R拞i6 ag/3uKaҗƺF/vW!ө锨H'nc|ޞ5-J~ï7%Q\J(K΍!!O%[|y~DԋNf'w aDj XW][1 C uw;vw}nJT*B:bT,q\,{aJ4tCJeF뵼ACVG qn`x]OBbƈFui../PFTn!"K[taq|!mR"WO'^cV6_[Cٻh }⦮}n <2j \\qQ78vt0-8i ` T+œo:4Ms_8.%nGR8ۮAsV`9*jeVgbctkX*K$x+SجruNF;7y4OJbE5_F&e MS׈eG\mmb{1GGV/}Uf[*QF0o#H)Ӳq:S(gPx*iWUk[A2Z Jgע2X0JzwA_yS?*qPL_X){KU,B9gU5Z5_rzbDW[$p;HuF(v }?a4A00DPZ)7ɼ4 %xvqFV.[Kg3L{XJ@|.7 {O:P3-'F'oA;w98D'$QjOEۏ{~Ų7%uC`2K.l$aA0Mcqqicc^r0v]VGiO/ %qN2 p*nʼ(w Enن7xJZ> n$LV8?eZpq5ݺf0/wz$2q A_֪At 䡦9|ӵ(y餷X)Mݐc ZFRvܸwn{28k+_?-)¦IAǽ~Imy8RCڅy3|V9GȢ).seJ+z#, slK FQ'a2l*߻Ms|]DtY G, ޕ]+UzZ#vU`G,PHR3E9ׂ4폸#~Mq*9Ar.iIvj IY(sbifq+JӑB z= N[˝7ZlMnSj//Zܹ,]d0ԌS ;WCi*,S_PT]X4qF* Q{ضm) s/DQRElҙF)6Nʺ0sm7LCWʃ ] 0#~hki}e--UBn( rXhjc䕓0NhmD\v tb80[N>MH6]mt֮ &n%y'ȔB6wsD'8?t-kͶ1Hb@ۀuA0hl~.u嵾[0LǮ yfʈA)IР^)AG+A nG/zAaVrTV0OS2#vް7cS |))a(<a;N:Ahl_[J1!KPxH]Qcݭ;ѭ.W%V\m<$MRdr^\(H8toqhv;E˱8CϠRS42uR\C ɩ,8w~Ƅ0M(B:6&8X,_ (vK7$ԓOtDstUJc7ᄤ`҆F ^з±-F0}NP"jDnOcT2Iq(Xħ/1f!XXI4n {%m4;ݷV|>r^4MLȸrP<̋bPIRG<z^I=/JDy~ћx镥$I}b>4)@xP>:ZV?3SS a!lV-L~a WwsN|cnR$78a@tH(MUu?+DL*ӂ \[[ 2\Nߢm¹(GްfdJV~Frpo.k2?0 AxZ4M8g\<@*T$){^Ӭ2,vr" (WT tFQx  |Gl 88pl?J)؃~z"tol)4!<;ՄoH~W>VwSР?rPWj>3ZE?y81)dw|1 C8ypDTfRdIy2M]> !lˑkc((ծڵ1:5m\F6oa"n*?i48JM- 9 vPI'G9(; ~ wpy\_ʅO(Y eiEQ$2sJI VWJ0^2tByЎĈXq q3 pA Ů|<A8ZJ͝787"lfeH$I! "ti@NS!LbYrz.9DSN dLjڔf{k{c@ {-7)eSa뵭[DXVFSxz9xi ڇS(=.:a 2ExB( ^”`Fde5MKFD@R N Jo@LJiYfzn:j=x}e-Ɠc~]-`m)*'KK kfΕO#dFy4)3=(FX?lYBܓ1!ݤqeHe=5@.R4Scݰyq|wYygg}lZ\)(U:[-]Ӥd?(]~ 5 '7_فy>Ćy8O[77! t o~ńfoB)P&4[*cO&6i9]B:eaaF^?`bλ2Jkk7Ƌ/ez7>sܽc{v5j4T-na04iDre1 xed(*sn4Ms7L!$HI3 N4=0O![B@%Ĵ&uJ)+궭3jYqu vB_V~[Ԇyrߣ˿_g>GNg׮䧞}ߵ-ضu0>vd*CJJD{|;@֨b^ͲDFlK>j6@\PTGi"`gX)2Mo@)x9w'CE ̉+S' U s7\N6 yR ?=o`u}acoݿRjddhxx(c4?ɏ|WS*9w>4&"nYfCd6?(kwJ W>GJ~ۍ#'VHaq:D^;2@dJ)۶K2\LS.`HH_]?W&ы?DZ ^gJ!]+k;׹_i ]0Й苟)ozPJb1=|(txu?$ejͲ02b0}s?(IoR6Y;Zxa0! 䅙jq 3UavA!!h:1˲`gܫ>T*;w>7<2kcC1Aa j\pl6 7׊00 3(>(U[n|?Kl-!M۲5~uCoH6t Wy@>e}ǎRs懀z0b/i9~ƹY/v7w,#x^jom۶OMoڹss}L /7;_*…C/8F]53396>LLF jy{xxhR-i;Ft1&ܱk*s}'IzlE]}r΋}xV/ɟ%-COS@䫝je;JeWoH#tdd 9]r@3صexrE|pW^pq #/ڽ8F[]in7[tz=L~-oݭU 'ИN"k%I/cn;kR蛔0_x~UCۿȫ5|fdr|Jrf: BIA(Io²`!_9Ł!4z} G)^0\B$8*Qkh42DZ(t׾]N^Y[_ħTBVd]Q[(ʀ"ysiRUƆV*Ţp'SJyWCzT8?;=jY@9/K;3=GXpj}'(N{0 5ݰlDz]inolmQۻYhyE'w MnOttV5F EP(D @5C+K5\TrťLV̙b압h%  Cv}RF;YYxvh>\Mv!*[nkתot|߿G}u 8R[nׇHkWF[x zW@xe#g{s{)꯼1SS,9Ub«~ Oz}F^0B[lüƻJM[ׄ`]<'0lUάԓvC@RJ$ |q!v}!RebKE{{J  8.mۆ#I u^a˧R.3E5eTYZ%[*tKe ;c! S. '"@0RQƳٱlb FIׯUεgvu-+޿e_/]= 99Uِwk`9U+3όV⟜Zy@NoϮ__"a9^ߘq}ƹg?=K寚5O:}۶q|-7Vl3Mw}#ci:2|{W8;vmQ8>\v_̟ zRMӢ HkٹV\(A*MD y~Y_Q9hwGHURz):N04A*E؆ahhK2= [9AoNFNQ 2JMh%vWH(^jL[^^ 2O7Gmg>k0^`0ȹ%\['N5JǏ=L$Ӓ8A\5V+"͢j5 x!ZR*^hz}ߴLIVW Kv cUN BGJe[7% x AO d*9.H ٹ B'G9]c~k_kyЋ*/,,|ҋ/^+###S 4 -#+Z5?q o@Qpg; @ 5_IM 9aۭhbV;[]8qryf,(*łc5,y$1 E!iiPf$hv&Vk|hmmձN1K`r}6>P#x|X-)re V~ @eoY/zGu\秧Q>O,{vl[_];xyi 썗M޽`eNhGeQrO!9utWyM!&S7*gm1|WĖiI0{GhA?Ib/*%L0X zm[n 86!OԅBIQ07[p#fc@3G;NA|.(Jŷr-} - d4MpS`xy17#/rY!:CF_WCF"[mv;xP4XZYe,GS"@4]e?Of2BebeNNNS_\ ֮][֖[RbC'Bpu8jq]+/k|<_YYcL" VXBp6Jd}׿;UtH>:T*2`{ cJkmLzg`AԶ/9?~?ݮ !ٹsO?iJqс{`ֆAw]MY0g;l:6qa3QКa]\[_TzRg떑r=uXP$eID"Jcq=-Ht1}uORǰ_c^*?Э-/aIT4u۵AD~>莛{o5R@>}(`ЇﱶNif38 #?5UxoOśO j%Ib wG;y0foˁ7kRm߾/D`I##m?-3Oαn %݌Iz0"Ksn+Bضկ~>6=p4]FSJ4MX)ڎy(2btx؏_, (K'Їܳc۹szs( ܺu}2+]J c\mpc~P|F8.rR~auތ5 (oW9 s^b`ExS2NccSSS/^4M3o ?|_[_7 #BctV5hlNJt2ZC1иN9hg0^жÞs. M# O^ѣJJP(֫BƭWl¼ajS[ƩL)2Mݶ-!'PPӔ &3ŸOcc cچԧ?v쉓g_\GWMyW=p0ر}/C :i[o .aX(|}[s?7/rdbdhr&%[旖_~&ZT4ldbV=K1t}ݶ1y)]kCwMtn~!:nSS=T۽ f !r&Zr$(wEtԹc>!-cK^HdDZݵk|?x%~!j_Ưg>UV}߿r!v:@iNMOONMuݥR)g/  CZr3!HVg&:j:J~*LQ Ƞܱ}Ϟ %TrfsVCr S7:?F lv(ebvvc.g>u BAIy]'Iԫa`V ^HPAu9̲m8J@'z/ϤfmFZM øV-3JVV]'Q2J/.]_|)`  NqN' \P,Bi8Kt2`A6:6 };PtZa?Fx?;n5 :eΟṹxvĉWmΔ3J_=7*\eQ~>sy@J˲-~aƐΫٶ3>>0MΓA}鉋.Vɱl6cc#udzcz+ 4az14HP(1L~091Zbyq3V FDzrh6aVeӼ$z~| c ^k"O=5;;o .yЭw962 -/ QLl6=ӧL1*\hϯ6TlC'!z87_% .F'qZT''40Lp}}>GA022Z,t8Z[8zd Hkղk;ssKf'Z0j9Dmu`OD%s]70[ FE#c86M%P3Bb?-_ki hǟ|[_zV:lB>q ~_υQOEbŢyO{kDKV&62owWo*+=z܅9<.ׇf76:sm*ND)~~Ss]'b۶T}U2`ز(%nڳ!N+/RX 7g] v0 aj~%Rۻ zyLp6|R0N^~[Gj͉duq-P9LC[ӵՕ kn߿gGN464<2]I4n\8l2V B5IRσi}>qR[yC?Q>]ے;^k_fYB ݺ t~:EP4qh'.X;75m+_~?#$Hb|!0xaZd|tLAos7A{" Q~-*E$cFF&GGj?GXŮ*! iiKeYEו8uFcr'L%{I szŲ)$[%tm+ 7i. '_j&N{)4͈ f9A!hd(&uݳgv- u |@5 #Gco0_LO{)DZW6}`?v. eqdT u;F}O|~~qmr1ʢ1ذX__vzY){ߝjct^[a_thZ øTĶS:jqmʊk;ƊW 0U\vu:49_P,O}Ws)eX^XZ]] AӆA쁂8 ' $IV\(v2l&h`p >uZߝ_i5SLmltfP/ً[N¬ggy)ajijj225 G!cB*<"ò|HwQ@~uR?Z>@iPT^.nW|.l3[^^mAq`,~{7ci HJٖ:haԠ~g''zvql&'& { 8NjXIi6:cHqR9XlW w$L/$ԦL(G Ϥo|l͍4I`f1PnN;< e9dhRu-("Rcm/, r714{I/bӛ_Mˋkg$=)t)!~ހR233~_.ѝ(i-Caq>F̫FXMgגi`M8zmxvv(* 9==Lf:T9妬7$-^H=2>RT*)d%Pqz0])2f\ } ?Bڠzr#cK9*pumױ_or}5U?8@T ־ A]׏]:I N^Ż#05 \bHa,$9& MئeA($/J $TQ 8 8AXzTK#cjP"E~/`YEufYV\J0ºSJ,ҀuAA5qƽ^iy^N[7o`vTYeffh5 K3iF(6) :$N*iPY*),`J_AS*"0@@cγbVD"i"9l WlQX܊-ř4Xc(##Zob37}zkpo}[M4#߸4ךϽh'Ʀ1ݪR⹓+d~OLcc}cHmXn^s?stG_0I5fnq-خ'{[o]]el2=TL>EVG =@4@ːnDM6b^>-\]%^v)N0,`;3nN lKWAPҗi4ryG%l5ۄhV/ [ti܂I480gHM` z}${0&"E;n<44J4@ikK^?<2dW{rScovĖ1T,+ӄY{k]bum͝~%]ڽmT)cOt֢J)"Q,UbRb Mxmr$Vƛkݮi޳}@NUjEݿsՑN|S/eF(h##U{rW\2SKѕjp dih$PEQegi/$9l&%&1 fb N1%IVVnbD'ȽS׽ O;RJWa 0159iZNԐE9!܃7d&2-cth5/\::>s׉];z1QnP C|lKkI0Nde$ή\ynd&F3x͓VϭXA+fan6^[c/+Yy?-*A:뮵3g~ᥥη}~pPM2X'iR,RqLN.TX!`vlW QRTBhqSF1uV7C)H3gTTIu R*1P(Ea s SJIF|ŗnw]R 3>%I9ٞa>/c2E /7yjcG1PT"ą٣w_z۔).[wx /;}ܩvɸOo|㱁=w<țKϚcI^\(jPl@ER- Ɇ?ux&qlA( 8D) ›Gq@S sLӞ(Vb)O%¥b^*jf;Ḛ0 Υk*\ÀW_. t\bງx\Ɍ4DSq2su q%/Vzn]W<2@MÞCsWCtjK {L76 @92<5;`5xo$fjmQ*C<^@2`R+FN~?wmf l!KsJD-p\ʝw7uSbZ}ܛB~?w}#P\ \obr~C珜:9PIV'};92xQ$>ʡoaۦs;H%p _~c;G~W_9~pfԅBDAcD`՘kF>v.a;G 4E*~wuu%A3~NЏRÁgxVG1)o#&\Ir!.5m X7 yE%Vvʘ!)vʾ{ #\~.G޺:y2f !P8 7cq)D$R@QJ໇x{] kkVwaa֑MKv9E1 8Ie#(ԫ!I"IܹHW/ C@PɽI#ᙦ[ٱl(;aǐPI0 tQctw·~d)ygc)Ysk˧ނ93Z-w'o)~?[[jMlqrP?sұh?,DM]o>P*&gN{'ھ{_edt_~ÖV\={cWZQ޺D"!>@AH P/BI:۔оD\[A$0$x]( "E\DH"M- =)W4M ”a2M幹LۦF2RSv^׆WK7zKy #]87k]3~pz@*iHm|۝AH&[CO""Is/>\H ec_{qLWC+ Ś6tzmʷbڞ6 鈡/hZ1J1%nOI7䷾*A0ȕ~0#2A@6ZphMӁ?R\2I2(DKBNa"ht&g+BFJ-p*SM"GXҿXsccaQ_mf$c鹕NP/om?kWFNw*#Óal}HhiQOgrх gx`VpKrKLmvqiÎIǀbFF',D6\B&RD2X,\ b-:tKcL}BJH$J"@WJi6 0/eeIRHht "d&͘!d ٜ}u9%EGyM2ˆ)#,{Zr-QfcadGFT`1fu'XE2V }Uʅi AJB/ p5%ά xIÈ(gl c0$P*g~C؛9)mIq*1 [/v u)Ppf鞏<\5J)ÙIa\ښAf[ݿR$珝oX9ȉwSk|=ͮ]xEMAڽ^or0QREq\.knnP5pԋY- H$ ($"H`G7]Jэ$ l @n)Ud4I (Q}$B""b@s%_%Bl91^f[)pl(m Ate{՜$:Ә5f{ gPub^Ѿ{|oB&&sA3=БCSL~?| BA7u9W+뺴!x;oF=€2YYxm$$PtR%HK.A2ՉK8 #'mKbw=zumX}r_X\8#pqc)I魷I_cLqpnݵ pj^/ +2wK-hjq@(JPuV,+7֟^Zo'_ Lo ?G'&]{z՗ٟ}mז{1OKPbچe ᒃc%4 !%m@$\D",'weS4 a(q"H@^'{dҒD`(-(6t F408-Ic*1eK,u@!1./-'D g[%ȞzR m%0uSL %ecBЙ<Φ4#eZ.a rg)_jy hEx*$#ETN߀\&I %jaBU*ju'vkc2+f!fΐ:`3T Qؽ3 ,;~e愐PmR%q/ELPDS2(Lx@m*v"?":]&i+q"E:xȹ~j}sNRdN@lf'}7-X"Fse2~[fo}}}f B\*ڊnHsC O~i [{%":Qmv}n'/FajJ}'G{EkT懧$SW+fمoJarNr,d 0kJIIPTpL ),4uV0bk .14gaf{*Zv SaHrh7B(|UPM dY&d:Τ(T97 ŌR4)Be |fyȳ6W k2~ uBLt8Ϲ"6{C8"0jDe(l`? uSrSUB-Z}KΓ ĖǟPx򱧉٥gP1szt:4SQ$3Ǐ/oS[}p_Wnsne5"xO/9Zm}LY ZjG淿moy_]+=b HцT&i@0+E"p0Cn6Avۻ}X0UߥWDIXM--j& خi:zak;RFKEZ$ ^5 &"e\AJ5)qOE4pd+Z’8}? iu;AENVݬ_7+u=ۨS 94s6x K5&'F : 0 2 t\" ,]X7b)dֽR,UE,ӈ)cDKB"Eo#]74vH$٦h)%Gv=[(8>cn7bnH6qd ƓcNwWnM'~/9gμ#{Von:p۫T\^^);{?tZb_۲5KXKL'NcO|[MUXM..jC[TH O,ݞnk6hش4OuSCgJ4BabHXxG)T)%$]jY,լ6m$KIԋ| YSq]әKB1GĖpuYN,*J'^Rt-< $2Phe&1LD`RM#`DSEdQ{AٴlR D-@^n uRسCC#7U.*MC/M|cF0blj}d SϏm.2SX;p)c_oPͬ?;pG7չ㳧;u*Nu-L/; 綮&ưe١װL>?K-G:dnSv[_X2=bZ4:3a$E1R%J qd&2ERf ($@2"4) |PcQdET,D~Ook떱e5;;Nvߍ0 q/ 2MOiejx(ÐC^ˣMb1F>J>:::Tw; !\3#tfI_,!=Ib 3 $m/ݼ¨i6%Ȳ<4Ts J_D0ZC((y%f!J#9@!D%jq}T6 ARPH8XLGWNLɏyxxۃAfDE"Bhe}>x_ ^6q*hؖ-SfeJK7?u'#rwxxTVkمڑkR_8yv_m_94y-Fny~%_k;mR96L*$c!9$G_:qO5VHD~s4i\^q-KҞ:szy/?i,v%?\ZƇ_w{BTr vk.w]WD[K?ٳG3-լP9{ϟn tTVBQƜ꘦m כ~?v]S!PPi $sq~GaMU卶kǷl> ۶ARK GL`™k/Oy!w˄1==yȫl1ktO|xoofK/^+x̼[۶O}IjG{=|Gm{6_S[/~;gΞ]XVN>cϞtݰu#̬A%6 xdz\/Nub@%DE q|K"aʄ$fdqZcP_FI@ ̖vs#2` 7O`"Q8}su% LL//z(iUAП cMLM]*۝ jciii0~ϳm{h4Ƨ 6ej*KK]$\=aF-b( \@8K KR/pu4ۀnhQAډbA3$s\@0ۃ4 l⒃Y,Ȧ2EoCz,T Q S)S2iwd"FݳO"wsO=ocg~~߇9 J`#Bi>Drf>U_pGFJYپ}zali;szVO}Cw.'=IБ+TWnx%):x'wϞ(L*WSZrAЙUB=ϯT T%biY4橮9Nݢ! I;:A"XrɓT%a$p>bFS H)QTJgc@]2+B>09Z*1R@ώ˲8t}=֍-hj1G: TeOX}U䏂@8C*yKw01}WV5 JGF$~srQK)V<&uڭf{Cyۭjҩ|>dܺ|;™ScgNRriyz*yw{lvXq\џ܋ジR7&6s?74Mx8g/,ckԤv4p8&ʩN(Sv]:n0S"c+Qt8JeA"a\!d`f!/ lnY-B p35',GVJD4/ :@\=p9 ʷm[t5Mk6](8 n?h6oYםrh&[8JVm4;{?HaUvT(8:wݻK,kllL86}^We38`pfVy#pvBg$;ȊbA`S(rďY+vL4 {&*94ښRΡi n`a"L ePW :xʜ dRpP;[ȶ 3m;ao\0Aޡ #c4v랗&jڏq}IC}Yd-I t}3j#cBFJ!(cD"T8"XjP(I*x"P r4 v)6RF֎--m~A$:rLU$ NЀ-s?e)dnu-ԋtSCéLi&8th$qi p^6c놭3t&z^"q'GAo}Yx< B(hƘ6;\բ5Zu L Ol R uvR& (sǐ&l-, ES8F^$6uRf{AvݷNn۱e;]8xmi [tLkyǿj  O \t?z>t?d^7 yZK]g/+dT%ֱֱ#'+U= |gvl3<{q"NDӝ[^XhllzNlNk6 PgDi(MR%JI13| ;7҂JvZJ%6,TaJח)- fT6qظƘ0 bԀAHf )WO OcIbO? #y׮qp۶LLM [R Ffc/Xk:[GǤR+˳/.,//-@@R>4@_  i !Ʒ?BoedW hʕ̄r UGC|kYS8 Y:#GV[)YP-{Zڈ{rq3*i,fmX[ϜuCRV+I FW F ɦ,LI" p4k ׍t]%?p~̅[)‰nx}f_}$+/~7P\^yW#83<0}gi#~ajʼS V@HY`KMyE9Fr" (Hb!$=p $%A^#RΊnP:0`uBI'X kH2%˕SuJj̀lnKc:cp.SH<WU HE%P}%:yr7& et\2 "ôRcGGw*n u@=GSZ7˰MҸ" I`@OP aF 8)5WJſ|e?=y}7O/.7;yqz8Q tn'@VX*/ ɈNT~Ih"TeK[ZzFiw@IP\rJSf/>57pĮRBZ%4[n*G{F)|GY^?y&ukX:ɃH$&Q$*V,+[m*slSdʖMK$fR$HD;ʵsZ{k HQ{93tWW~H8sfyc(>67NLۉYXͰ9֞IV/GC;I~۾~SH-MDP(PhI#2I,qPBP0Nb'YcRY(0BH0hEcɄCaD%> <U{USPLB4欅Ddk`bgV]ES5M+Fq"i`)Ep9 f)܌P8S x͉Q rYEU ( i$0)& SZxZ|gO,KouL$ԫks@)UyAG$FH0MJTxi&ԇ* 쯔L0yn3/U+@w 敭A*pռ =`IMY2}\i./ f"\D0Y?l;'aO !Jd󔒄p(%']>'(j!0G$!.x,'rv3 44[[={݇g7xvydq8RߴkNեȒP1ɔFԣ\pȄD%8a5;nDR$0LLV `~56X:QúS8)}A^tFc~n_[?g[Ѿ=B<Ҍ=@ kvwbzW-T?֕bj9Su<ʅEKԁzG/;|ZD]}d^M)-TF";-]8;;lK7tN2 }?lPB`HI$s(eQ5+HJxT87ga&)b"I (P$yBX I/ $KbR`pri)&L p4 1, a,TcQeҙW`%q`@$Il3sifJC-V>SFUyQ xZS|?H4IRH&DHkyā)E P:"9p ΁=z!n`#J"-jDnbVBdSra?7QxmF,xe`!7" cc@IRbY[K/L#+O_ˊ '$=Oqgny {ϡ:M{Ӎ=pTSdu{w'^X]7{XX|#LNz^xRt̓_;4=\23s_S#ʺ?v~ gLd07Tx2lbAŸdX-*0nvz;vCxz0axS)SLS pe_xrXV AeA$I;"+2$T%׸îI!|bf:tV}¥N5M%iZ)Zfc5D. Bq,*:˜Ӛ+,b,sWʁB 1!L㺮Z,"Buu1$_&xyQ P`ja FB !q׋nAx"l8`(r$!}<p(<#d'pDSv>8s+)ɔs݀)g7/s ,_)q(˅E0g'o:ovOH3Z:;|li/ؗ7+k ZًNdaZ/=zw}w8\Cc̮|Eɹ3!{T2ω?98[5B4?(5n%]YuyL/<͕˘'w3=13|Kj9. G?;o=Vo̗+qt̅SNćo;CW2!] Tk  V0l`+sp&54F!:pԠŠ/ ؉} \'J PDS>ᯈN [RT-4JR=[7[F9 p^ϩN`ou# Kxœ(5{#MamȇW]*)ȧac=a;7>ƷO~Rښ55'岙Daw.'"vg*xXaqwBcy .u09Ʀ䵅JYp=8.~./BeznΆׅ%ƛ ^v8^ {#w.~"kXc} SE87ZChY4(SyNaiNl!AK'G)D )WILdFh:a< O"#.1 !:>9C]C@Qt4 ÐyVWWW&y^E;þkٹJ94IDA*꬐sϜ9Dg $@NPYzdM8Y@8%u^hru(uG!U0"2[ LƄY%rNUJ^ɩF#ω4m;FUYTIòrdig'@#rՂ9*I4ٛ`coe(hQ}-\ivf&.Fꩦ{]JD1IѱO~}Oln*Sw^k''>7u׽~3ʗ?z-G=qt\Ţ&Jm ǟx7<|['i8HE{-<4uV@Lv@|~J,))(()QhJRL Snºe'B^-ꚤrr$N60"8YI^}A 5P4c PFRXv;z1 `K j-,I뀁& |4 ~s<{-ܺgSӳxR C啍R$ʲ" 1$ku=3TE:qV]&„z\F{f@ @LGjQԖ$lFt|M6媀yBeqjO]tYN80D1z!߶K*kZ+뒸(Eٌ)p0>sخbUt{a$l,_iI7ʹV`T h WUt$8~yyșȟ^Y>y/w<ӶיoW-GGLYmH˛11Ok9Rj.o?tӫWk/;[- C!Bԉ(p*CIs%znεk\+LI)` P2ʋ ĢFĊy+E2GQ=W/v BNLU[r%k!pqeu;Ƽ $N*SSK9j./lRLyp!&ag۾O~aʊ;pQ-oh=ٽ.D\wS3zNsy>R||kO^k7~CdΊ߿,ČR'8Ap`Wo^;[낈k (3ɩLɶVUM@&P؂(.0|)+*c^B)I0a1Ȳ~8AS o8˱nL J$遟c0#8tUa l )1 jZTdzUj8,&YިTZPhmR@4,t˲=mz]% aWWV7sDAj055DZmQ6bݏ?DTu|BH.Pl9K˥RI2]}|GW$cfz; D $0au 4Rb$L#+mo M is{aW2AҁjF~i'qKBMJyT-/+jIdQT\9~)? [VXħŒy>ί7o[/4mH5I\0cUsD^iLAP(M)rGn׿\}_w}/.[N;CIzu/IΖFg{>sv9!n._:yW<5Fdt|:3]#N/._+{OfBN/EP#J,,)A{}}E4!˫fw[]㙱B9 o4\7pòk258)U$E'$H0p01%0Å@;PqէgpIife3@^ 'ΝsDG8p˼f\>jg( <:tK瞗\ D px 7F(i R ] ew=Lr:>MF%B&a0Pc"(HR-k^{`c/0֊HX8?"/5ZYdn%hŝoȟ$T5!DAZi'&DYnu8G")Fp=R- "< u\Nȱ|AQu/0%,Q_c{ [ھbC+[NXdcZ, 8aEg*hTqCWPnP _0'ίHI&?_֨Z;eLJޚ~p@ck2/ Tp,R^\Pam~dESFTEC^?է5g D(Jح7xvOiR_Oo~">u3# `8?1?7e/}w7gUF64닣RVc>!++} 7=I\櫍ǿs7\v/Ÿ2Sޛ&Qvȇ81T [4άy޶sq2${8 pGjj!MāE7]3Z)t;-Jx3IMd* CXIu 9$" kđYYvb~}.Q$ rR<ԳiJJŒ'[cUV 9/ʲgzB0RnmmaJ\R)WӚ C EG3ՔkP tvN|pu0,<QMw㦅nA+WBg<^O~Xm//~CKsjA\9 _MҥBطp3O޳ܙkʥӼ+ڤȡn5p}w7N3VcR@jPͥ+FCn ?+*ﺗB ɫF1)*HW1TQYPyv{}!H2@9Ş5{!,ZY% g^}x( 8DFHDyʓg6&bpT#WXNڽgzq^]8[8 p8f1I$TYj*¨(%I&K]Ƨ&1Kc#%(޿$*>ܝnkeEAg,-h>M~ dN%^JtNo'Qߋ_w@V[jfJCo!늺َkD`2_Jz>TUb q ! ]1ġ */~EER.4qMVO\1]D\Ek Rtt$\]]<{Np9i~], z[˗|7~o>257s[ͭfʭ. s 7.֤>T+gύMѤ+q6K((td6,<_.Ji`f=SpFJ҈r6X8:MS. bgfevݪWQ3%e<H|5Tb4?>(EUxD~?e+_ 4M| )r4ϳ'iЃl1s}E#ӳ RCr\iEE*Χ Q㔏"N0" /4=ySP# RDC{SUm  cvFs|Mj 0bgu/ڢ魦]^yk*ڹ02+_[[$Ry;[ qH;\\Xo,ܸwG_<}Ugc+hMqc4A=+^Tӧ!E^TJ @X۾fd\8L~"i8+HǓE6VQ56/6u')JfD s)dfBdh=fPH@QѮ$эnԶ~7goYQb;$/X~YMޠcJBmJՑJx۱ƉscStX ׎&= {dyrVT>rGZmzJirzv`Ifh[QZcZT˒(1pcY-K̅1tcyYjg$~̔V$gY/VRrerIqx{-.ؐE-?" ,$@H:ƪ4tzI Mq+ Q_|4JYu~^MYT bICky5TTe`5%Ei5z Kb9_*+~b,)b ԗ4-|˞((9X)/7kuK,!XeYVTEѲ]4"?{_csfӛ6ڠX-ʹʗf1ohaA}?-X,-@> (pً򆷺luv8qp`@8ÁĀ2' Fn@ ഄ@L.] D^ZDe=0j=/Xn: f x0hRp tZ&9;Sڽ_7MH;^j) D00N,[ŕֶyAa h0no:38 ڮ'&&_կK"3X{Ĭ,]T8W?/\\^߳{jk}%U_ãy t=% bYû74pя<5C]hTѕ؈|ÌJC C4GRWѢ9ZkT[6V5ϋc v1:6lE* "h2qan(^XZ|[1cq (ɧ)Vddt.U47*]\X:n^J gBD>fP 2Ȭ!edvU BsDfўTǵ3ܮKNr8IB þ# V-˒h]hAʲ&Gk\ Iq;,I Qr],š^Ntw*N}7KqN0tL؛* [nKue䩅'R0:J !mG&s[C,B]t=H0 .01 g "' Mlŧ(53i gY c#AM`lPѪ,3d Noe㍺ﻷZͅJEo"7=;O]JC; p(_@<N#W,T |e.!^UBw~7ûo=z(ZЊW.%^-I7F o҄{݁cs-KWH 胠vp`RAF/9ދ SCY2fO ȫ<7.爢 u֘.dC ,2@7YLl`dQ7L7YȹtMnv]AA3|74ԔJȕK1kV.We(|^USr@Բl}4UUnMcɎ@_px/c^ALE2XIQ  ÛKV7$$&swby8$j3{8e)cE9A.[]M[vZ7.\ٴ-K ۂ1Rq4M`j/GX+)Obp[P^ pF]w/xB\9#i (J< A\X5|5vON0Lms\޸g ٹL!4I2$\l% ~@g bq)S ftl^_lёgNhWʲ;̕p:Iɤ輖SCK-mnuIiBQUe˷BMoa醾EаT=DHPF' HwϞaRctin7}-iwۥb!#MP(AGms$}"%"ǧzLN0xX$vЍ@fI`6Sx3u)s~M@`>?' L& a0`(|!dśb8).2W7Fq]}D~lJ,P ab\)tC\I,+B1%)'^_dLhs{afrq~ߥbQ#h]?iMk*p@kI`3w.gEQƘFq$Cf#n J}fmB!z:ؼW9Cunb5ۅI"P1޳6K Qal9e *rn׎AI 5ndGTDE>b0ԁ1}31&P./bęNj @S^QEUxym}(rղfm$˝NsݡgjHFRڄ$86I߾cIVl ^|EMNوEH2<QL8B sDf\&""Q#xa4腽PY0=)l̡^H'x˴keYs2'I]oN*Se!#*#+_5 hзG' $IT)OjWtS-n|K¥Q8\~s 7(3ǿvMwf_( *e\ ׾-[+3 O]9rlvXoq|vh@9s6m]ZOW/?Kvk-ؔR#*"$Π74k{QoZTv0a۠] f )G[.Cs3x |a{cصN&laj%@sK0ҋ, =OW dbq alFK+kRU%࠱ˀOtk{V A ǮW;G fLhpD%0,p%b~H*B!̒!3/̜#(!i/cqL0P7J"Ű@ZY.I { /T(iQ녓"p8I%L9:$ņ*X#:,,(jxT5v{-XSr8E]/u8A4N?]gcbYjG,ok 6>ae Ф-"E`cS <&%jǰqIDvGF'Tm4K߿W?u|{m !ayn~tغtԙ~C~zaB>F7ڲ" .]t.!p;^à 'ְTA,JE$)j#BQNofvWnNr1&b$B!|ΪIʴ )M@2 #L1f}`!"lԲ t@g‹Y+!f: ^}eLJ% N"'Gu+bYZسaW-5I\׍\Fj SS曪bGJs|϶yQtztf*l܃wU#HS*; Yf!2"1+v c¦&P$@SYF`(TK//{R,Iy =R ~ ݊&U &>H)q._ IuOܓ_xū_g TDiҩau7_:C^9ٺ7>Q^2w* ];g$(N)>|[?Fv K "MT;x`xb?oL趶 \~d@q (Va %Aydl8"p2V-QpRa%RAJzA4QNW.e_=[ q hZ8KPcP)IM[K3( 1 ~0;1*ɳgD";Ao0~`لvmmGQgv{SS!'Ǘ._\.ȳ yqS<tg}>{qEUM(Q IH8E0\R \ǟIA9yۂ]/seiMՑpҕr ;_m7BN{DŽ"kdPVcE|nJuUH%B@(KO:{ɉ…SQ,. vpSҳ~Ykmm6ou|_xBٷQ$}󾉺Gqka:rb$n}fDLA///ࠆA0wssON-xyej~e]iC/("-bX0]/cύ5MF)#@(6EJ!ia#!Gbek~]<(2 jQG Gw6ؤa kzB@1"r?Dv:$,-j(ۨV'47xкLIq9X*WUvt#i;9=q/^|얛3Lۗ- xAJBX3R< oS&r*)ς)L-6< ?B+TA{MzEt};XٶDECkO^O/yg:iPɴˈ a8$2Ty|FQ4._~'^aos~{~hmOM?===KU7ϟ=Oe! =o|ǻ;=t}u7e8Nw:łzԥ Нpll:IPP,nMa3\tfnILI ah;/;0 ѐ`c~( T&1efW PvmR?y̹EḾ흀 rpᲈS߱zJbbA0^wvm]JUɧ> 2@Cb9M;v*Cs$%)7KbUʵrU_i(Au6Yq*ztUT nmI0eǹ |d1k@8 82(e;/6t[ jiLp X҄1dѸEk Xr?`?{DR2nG)4TA|۫&41C4gJ SF X"RRDNL+ [ (XkAClۋ"kbzw67[_$m\@+36 rr1WUva8g|d4ρ,ngOoj Z]m'[<ۯ)W&jE{kEGDnm}{.kIꆠ6! iŸ&㘆A Ȟ!*ىQ0-U 1@U x/N6eߏXqJ >S2r10!a\x N ɵBS$k͕W~i9EÊ&XYSVrl۶0L^hJ&FG'#X4NtF)pCy Ca;u#7jf2CG z%AB8,[99:#-DS8]J@C1Jc@. i^yGMnT@@hvjtcm>Q@ti/<{o%%5ʼnogN.є "vy“n?M),HK VjambHK'7N'^7Zahf\݃JxVehC7̄QEEp $È N +AL@z6) 8'I,"'ɭgmW( `](/ASwȃ= i$67_ |1t0Ox3T%IBh4Z+ի3cfb\nLO֫JQDIE)_,EE~/~es#J8<'~WiںhxQ٩g8!A-Et^Vv ekMb" ( ")@(< +8m*$'k9G)5V']KUG޲C9P1i4]4 ~౤WT%N}3FIѪZ>Q]t|kjTB\6x %8nk..\non^zQ+RXggw1F)+M힜5!P6'o~ [3 B8IڠiyȹݽzH`BҠY֓n2K) 0I\ ; aQwG #A1yٗ2)/\Xl8X @)YڣO<\M:];3@V sQQ$ ,h8L 8N(Iy0M CZ'$qYV-+nx Ka*>B7[4TH8A@'CEAz4<oNkM(66[[ί,/N[hzfOKlj,˚N+6) (4d4uTí =j?wx\|08-MYZ#>8.ɒA@NdjI:Nstt YdF:쁰LlT`@3bkh#1fJO9h YJbN+& ^08!dQtBܲZ1I1#bE e gʊn] I9n'J\WqƸ|QCU/|ks,^ޞ+;^OUڝVTE覈ЍGFZU$_>ca4tmyskP@Naֶȭ]VstCm2 weAE8 }}a q@6M1A,:0UUӷֶZ-"Q+DŽ,/A2S~ :&Hĩ%OhXD4/)6ɃRO!L(ij1'/,0?-}3.{F76ϝ8)J^ei&AMSYGj52Ƕ0,-ف~veyRB8&ɲ9Sz˗', , r06>Dެ'sӃ>>BtblFjBDh"DAk}%/hѢ$ *<2ZR_{K#űʥR? Q1 NRFkOFۊJe躾* \SHLRpX()ůמj0!6!Q}{FءˣtAJ%+.R9Й n>3 g O[# dr2kC .?<aTuEVytϳFr4M%ygonw$Y.ݷlM땚e= PMD8NH76nhڝVr7VZ{v6=>Ѡ(%iIyQyWT%Xm_Em2#AյŅ'O44M8rao0޳۲p>ujc]X*`&|#$ 38EH ,{֍B.W;1g$;fhaA$/l9-w t+ XRv#9 8R5\98c%iNDwd,j3Y+];yN麅Oo$^K4}ï:8k(гU@}h}ϼvdt"h Cj {V8 B 3A(`5Tn>is+Yv\[Rx 9I(ڬl )&Mky( ‚fHPr{U4 O?YUDłnqತ.gҕ+ӗ0*zdnTJ,^ԙA\48@+ooLA{2;; j<Ϟ[\WE=ޖDN7Y(sj%X̩ K O]qR-| >/Jf893;Ɨ/_}?|40؈dڃ Eo~1jӿS?~gg&i%>}E_O~罿dV: ד~Ee~7 -at `Phf!@*֛ K͵ZreTzp_w}9OS8 ~_\8.N~̏KkM;rh^R,$y!NBi6DM, W6Z2/QSr2s+Ka쏏aȅb* pl{eRy*̭у'>;+#?by``оݟ|G/_W?܅9o(Ae~U\A$ȴ+Yq@NIa %:(;\52/u@y4-K>3?_ɝ3ܖd(g&c-YjC>( " צAv 7r#B#n')};_23Ԏ1Ekf*M8skkC^ttYR 6¢Nmԯ[,I"Ab&5gKr_b&₠z hhhaTw~￑Fʐ 3s3&JR1H4J%L/yj_2*X_`õ " 꿌z}l|ٹɰd4Qe%Iy7G gͻ@KpJqf G)?B/$&̾oO#{Ǒbyz0cѵ /݉z(b3g, tox8bBݦ *Bi?~|ڽ(C{Ȋ̓2UM'k'jp5ɥڽ׼'~~'߹ȕ~'t0' tM1 C#+f,8 ̐lCXvql0"Ol+rJ>g(,=bfoe{'ۅv#HAv볣ۑ_e+/K&D)14BQ Oo:]yi`f A6 G@(8JB|4(?%8?>,O=+0i9{ { zv1۵tAy;ĺa_ھv'>qC_xR zpR-$&??gOҷYbRv",jm-H"S,3+f Ͳ˗loFMvjge"vζ|hm;N}29ޠIf 㓓CXbw#ԝwX<f e<$wokr9CA/ #ۺ6^99;"Vmd/~߿PQլ?[@ǟzKDQGa{=8D0|6ϡv'Z_L"H]%QyeP 1&z{̥0 GGNg-)ܠ؊ ij?+»1;P אlk"MT40$y]<anTȾbE,fЋE!=(i঎K%rrΑpmm еuao蚪%CůiP|Jw5MQ1<{6q\h @zE1G?|%J՗}\j\|̞7s`}*8yaksQ"@H@+ZgY01eS Hvc4Pe}eXL$%9`o@8"G$ "YXe2οbmBJ8" l3qI$U>30@L.(>Gl(VO4;N6A 0cҵ>{W'eK.uח^y۱8%Y,v45 āw!}˩rGgjnPEqcc eEnuUٝ=QNOO۷"%QnZC!S/h;a> c2;dBLЕuܜˡaۻ&SATdK23$j*ӓH"D쓉 Tv +"W ,Pq`bc>%'CC&&JF|"HdxdQJP:E Mq""ժnz~I BΈI?]F妻nqbεY׮k8 :d0IwqG 8IRP,W'YQլ JRFn۶ E bQ  AxU5ET%^oa裕8"~k]݂ ZcH(X8m{$)J4IV/& (fo Ue@1q&zn^X=52{B&A hLd/}ٝvjЈP voDvJ!c%,uf2U/fZ-䊲,',V%tԋE 5AqS؃6Up%$ XW0 q&ʋ~j>}\[ou76IO6hshq򂀣|C $ I:Bhۛh$lmoOLq-fȊ"$QDUD&X mD4sQpB@h8HeU3W+ժ5Äڑ^ɲ*4" "u0[JB }תl\Xnmj1 &@p;&|ލ ?Ɉ;}4F I$X^4[㐦aMW{SbึY-; zԮ霑 STAa:t}'PG(B0E \N@!DQ@5_J'ums֠A<”~l#@2=oƷ9Cl7ZEfKQyjFi亲ϮhVL-> tL([ <*~f RUSPj N:0IRʏ*# @/,c-k'@5 YX YZ1xbN\',hpyY ^vr_ yY'^#F۽BёͶ8=B`Z9+JqUm|S~3#`"04)D c7tvyI CkxիM(܈055\p`ssR05?d&fn "\ʛzW~;4"ei_Im?D,bc&FE4?W0FmhT\P{I &ot 7dbM!/a{.n\JS`b +׹BP& e 7Z(*-;NsRm^|ف *ٙ=Gjx_Y0ٶ t=ʂ6RWXiF9S &#. @j Dp/1 ;W@'N3KKBdפP(.G=,˭n?ӗ~xylxNW|ѧ^pc s{3voӧ/>vzsenZ("|G++͍-UU[z=H}B t/j{y~BiA9RDXdC"I-hA%WwB`UJyQHP'$q@X(bnSU]2n7B'b ԡ ݥo@VC-US%Jxƭ5Q-\۵$()dhTwONf Į}E]B#[^0tz_>uĞƅ'7ڹqHU eBNCH=$I8EDKf5rG7?R0E.|q+gCʚXfG~CόTqg/s7{rvysC_ Q.>pƈi ƥqm+*^5t6xL\W8 _v0C,܏jz?wa}}3"_!$#c^>^`s.Mu?*Lc+fT^𪜯Tضctd\]A8OI 1H> wFTIIko0N/oWzN\L(L7?o>or }ۊb pyeai!T^uӍ顧dYgGG^yaR?!"ϼ-o{r6kX̩vtmkhEAnr6RkuMHрe*)2q}+ԐxTaQIHTR (z> 㬏A W8A`jn9WU8Ay8WGP jv)9ldzv(!''*BRĀ@!,@Ai xl"AV7p$U eA<&$i .`(Wcakb@R 0&oNإrɪBA_eYC0=2c+pJId?t8Ah{ڿ#F>c?lj]#‰|Z6 S3TS74in߼=5[}kZSXPZ-TJz 9QD|}6#1 !X*f&p"foݮ9/mfo>ZVoZ%SJ.gn3WG?-ݻpɽ~WGg_9UTgΤŝyX^P)WS>+ơO|}O?/37 /_XZ?ڿx[tq"dbTT- =$ q(LKcp  f4(\'SgA8ˍ0 g{//ũC mc|+_˫^yקּ>:5;2̻ݘ @[-_ZXC"j V~iq׽nx;ϧ:wÁ295.`+#B*ж0H@K(yQXG" =D1QoX@% kA_?~*ܘ͗iCq}x2_^)*{ݖC4bY#)(xYFXD$mO;z݇窆:XB󅋇&^}]7嗟lvz9hOt[>TRśYȇ$I/ČH>谨wf߲ ȳ{w!>=w4Hsx(P Pѕ$I1J$ѳ,Qp2q rAjp(>75rg1`~]',tԉon5x=Aӵ#x>xt~3_x622?7)W(@S A"GQKTSM [@T8F~J@ cF%QRK4b&e0M  S8)!2nH(Mop LV>a'#&ƐF^01f;,犘>M9I0B{_=|/E-025g_Ͳ!ج2D8ǘKżYM]ΩȊ -4LB ډyXb 4'0M} y?̍)aT3r엩T]UYQXyE( m;.G򺠢z!tM3>( tr-gjmF&YIBDIUTMQG |`/EUUMTMM]7?x_~w;bFwtȲJ/> Tb %5(+F+:&Z\Mlf(R!(I8b*/?Ąʷ=lwv>׿!{óŝu`0 $H vjHk"q8ȋE h$ %EDb2D:Ap |BqQ8.;e }ib}D8ï@)&FZ|YˌKi,i<&zJBV]j'Q@̿̓{vq4>:z~a塧^(1fI+ ÛPILCoN/9\% L(5U64LjYt)qb />ScAJsW?5P{ule1"fK,c,_AE|F!MS?cyMih{n^ $0!0Ą Gђ@\;\h!9Ǧ_J JP+ة^|eve3,3 P58.{ Nlm,U-"nR[.Va>7f~8 b>@*HN츄9~BDp_)-jPHyqI)ҠkM.il#p"$Žv؃1.~o'E_z~Zgg":ސCX̟ C;ESӴZ9o AEAVJ>{O?{v;$1;;=o|oƼ}Hh hցY0 ϠaFq?XFVJNg_E2*0cs<"E"J'ˀ"iH'9UA8& XB` '$,!99N 3,^~S04KS2*0 $p(]B”00e %nnXQL%/HczSe6Y-)e9ݭ v9xfi ).1%dV07{+rh18C I7J(iJ'>@倀'PVp֟(Bwg>}څŕn0=9ow}xB(lwO\^zԅ.-zP^tYr߾MO^\?|ǦNԫs;zUWΉK?'ɓݨTzz^;7KRh2}2G-6<ٖǑ(s%!Lq-ͩR) }m@c~Wo}Ͽoҗ=gOBwoc|O.[ۼ qqesO7\$^v?V*aU~H~=?}i}= At HB\<;g%-$ʆznBP(8hd'T?1E6B5 R&b!'pG0iBxu 5KDAǡGg?Ē( MҜ#)3A$YY+:Cât`DO&67u\oy>*HRjؓDE򃐩n)0"!Bx8|/u^tSu$n ;bjW,; v̻l2H$:%dZy(ĐBfvI~ѡpk8:7b!*L;@W BVISdG&E݌.ib$cn4f9^eSҚg|P06cvЍ9 7 KœLRxF mjUHl =!SȨÄl?$]DZ|'Qko(>se3!wz|vt}=?|r\%7W谝 EQ4?Vfk!gN DBaPa!!;)Gu ¸K*Jb"xI>?ݻM+eYec ؆R!! iK $$B`-Y^Wn/ӟz;J[Tlįg-;33ʷ!Ӵ\xy:̫Hw}֞KHg0Nak~q%3(%P}V.\*ƘOW{H MIt+ZyHV 2|š^DtZFn {@"{dX\ ia 9̅fFh d`$ Q"c-A^VՔDQAw.?\0.^h053?sO:MoSp[mBO|혛m76k*BO Nֺ0>dW,aFq?ӛnyoĄ ,M_|J3z X" F-(YdB^xP&ɴQ ^xQP=#Ɖg Ipp!RnLY* Fx̀)r$<ׇ)b8@#s !z3G=uM s p%xA8ͪ,Y<펊6#b\cQ!d`ϓc 2a(J2 ]c("Π6B8Q6y{$A&&=˔R3??666N>WY~~o?CY%F>@(f&>G' WWV|;7rY3Z,!(L3'O,l,Ib4>F(5>FD$R{GH ZK(1\Vd'clǕp-`4ptlsGΜ}w9> e1'.,oy8p 0ɟiP) \y@J1359nRd&&0"ectK!%:2Vq u 3pDFX\ :IZh9 @޳kfV .@>"]lLօې=whuaᮛzEBaΠ7"X;B`QF.D3ځW|nJdD;W'/wGB`;QAM,JlHJb F AL; R PɓiW(L~8wcB;|~33%-rjy?}fș'J+\QJp>QҮ:y퉉pVW^L( HTZɐq9f*(T*"MOϘ4E@@Jc*bKxb笥Y=]Oz!ș?xB987B9mG|~Z$P:oL:\C#DŨH`%! RkS b:!- UjTAh61 k"h\3 O㤐@Hj0.teKq0vͳb8JgU]:H ͋6V由_~Ӊɲf#MAy#V|OaxW5QQG~W?34[oln|{VWtg$9[̶Y cɵ*`sV`}(׎19fc - VzY؅]D( ;gخ`.*4w%> $j-\J4ת5C" ,E29`΢nXW)U jh& sz2&\h( Z鰓YNJLÚҢ}<wɐ2aQP4W,RP!;c@K"0)s~/=!yUk_odI)K?~E%> wj@Qӧ  Ni /iVFv$z4\oT"IFy:0pQ,͍ARp&XHf\B{!5Ѩ;`|<%h_PE4r I|1kŃ~>oY;w Z24gӷ ZF>gZ,u;]%)x)JZ=cZb$YZqRs=!%<t$2`T.rk i;Rǰ< !P4-wI\JʕϭTX)Z#i^09saetכ$.YfS}aat nlAV7z3}N!D I5u5 AYj-+nQBB]ښumkjNΗY¥6EѫFR|GAE'?'%[!с&rK~gpPb4⽡QGx_޽w?F36rʠ 6i"u=2p;DR0HzcrY - h8r eL,j*l Qh"V:ʌ]!8ƫZ .0p\2݌:@ǵC8͢.\ֱTE?2z,q?.\5mtg04PXHPMP.5D^D€j B0!Fizb_p B>W \$x#{OxE oh>u/>{O>` 6q*Z=DnXZ}ihSSS~s+J]s3F}ms' zP ܺCDۭoa2t# uw\|9n '.Dy~E@wY,E慖Zh-0PNyy0 y(Sl5%JWD|Pu3ڷΐUrQ\ l}]y< {2j™hrdjwc|Ԩa-HBQf$ h:i%M-up+_-MtQsi;9j 77:Bsy#AbK/ '_?@8˿Kѳ6eK>3|?_ͮ$My}!ԪFwƇ?*74vЀkqOG/Ue 0݅%&XogU\1@#j#4D;ZJGl߃2Dª##@_zg@M/A[ +Op˕zv0v!(# LmvDmX=+izz84I*eﻮc'.D!nWx. MbT`̅1.'?ddi)5yÓr :lllq ?\"/,Z[ XO!tHN*;B`+x9DX$!q?~~w71_.*Sگ6<[Yc?_?# k D#hHp4=*ɻ~_/WpxC+ct QklS"׈Ss,.p!חe%(\ΐVRoc"Dj/I*kVi-NFDe4<߭z8Ru *쯝*v8MJ{0B8-D`jJiNU'0txRжŹ6_2*r]Z,ˤF" "s!JUʀCp$j-R yP׬YO~wFI[: "3@k+>A`kLģțݿkvjԄp6g9xbem&$KS-q0hk6ZHHMEЩ0"{#SD,0].bqy}u,A ze,|fTc'Pf p14ʳ3(*bѡi"ga.X)( =T`s{Ѷz:4IE/|V!U`5P]BpzHiQ)T/ ݐ) x+`S \S@Z0FC4 b&pxҽѨݨq2ry7έ}+5800ݮw\$XIIoyWJ(-iFY@]*L8"21}n8;3V2~7fO|8ΑdlSSퟗUY@-^?GM ){?=(kpØB4o*RK˅m6|X Ԑ0C9k7Ych.PB@ `!"W#:e + $Ӽ?jzRARYqi9̙SEFoh`BO--A D0 <7IAW!R@ި)%t:xve:L:]u7W[d bJPJ0` 5&tyUtHo'Z( J/r^8 á ԫPhi,/ꥴ.ls(P Hsp0'Bl:rdccިj5exPR4ʩ Y[F-P: pyQ츈Paܐ}.sG 9-9 gozV=yzF\P u^_BRęw zaGq92ʽ`3HW "qIAUf(qҜla41l^TY1Gt}qj̕=$hZ-\)`a_?k88;L7dzg_Ꭷ&vM~{0qY7fjD UhS%(?hh)\d0cO<>15Q5`B4AԄ9N uU%+hLSBUQ S8{,K?>U޽K}_ܪZȫYWl X#` |`0kE5,+#zq!B0 =' O׫S *2TYeF%&k!7mx${U>lU8yzNYWRFQH((2ª:@yӗk(!>_?zZ_(@ 29;wE4dKmoP;<-*ȩj^`ZIp'OGI!PS),\}0 1W]d{3۶}#w@ۭ7Fʊpp^@ EMqCj<,'0RVJZ~W Zw_@旵eRi^-YHQj¾jcϦA1{3y7QC<*vyp9FxNϱ1CuBkG!ڀ<(wa#,!V淼O/, :׽Bo8l՛HuUGAXHZi~'8ډ!}8i%ÉwOMd cB߫&t4sB 鋨5wk%ݰz7:)k_M|9kKduuqqizuik7F+[1BCpcz3`uז5?r!+8l C5 )(rl`K8 ^ jɨ((]:y̤=CN(VD5dPdm : 0cQ@ԄQgKn:Cq)RTBgl7}zWwYkL~v %׬EQiE1k߾_~ Ķ %(j82ዎn+'½8q)_րv:t:0*&N 숦&we{w1Ik_!,wU_]FEe£344;q%ݴ u Ea!E TUb%ɉ]T2NiXӈx"_^=4U6=KQ?+R(?:tG%y ݋-Oٟ|ÿ3O!OT^y!9\?ko[baP9e7 v0Ay<p=.ۯMSS`QdD_.ハ5+jH:qҥ5!ƹ:Q5kɝjDCiR4FAl}W+-i+2TUjeV"Vi:*Qm,. no?X7Jrdzzbb.y,{BxCPe./:Խ4P?! cKd6ei{g5j!QX!8nu\RsIG#=37\[nk6mX ,V -~s\E+;ʗ'*Ȯ0$ŎY^ $}V"q''dE+Icd h%tƱyVBx&9`yHYZƄ:SRNN{mQ&͍b۸7D:v@zz%޿dJݕBI؇~(cRvX)fl\'1eX`@W\I*VfdG?co~[W  Wm|g ##Pݿ7H\4q> ^8̍ dŋBNdpP)ʱ/ւ]7]>Fޘ~6ʙshșGZQA(ᨋ +mq;<Y" D ItaHaIH?ghoSAVۈPX .$x)6V{;e'UF m0ì(1s` 䫳SŮ%bmF F&_-'jN/ҽO^m[2k< ǴD%A i\H}.7ȆZ{{E!,v0y8Y-D(* 9ܜɩk;xPM\ 9v$^sza!4X -! B\5setB1n5^8y ˁ] 4nӖY@Ysړtǿ: >h96)!xˆEcpd7LZH\AЪ+H@ZR kb8v+ç2/U%&8ŀbWcܬWn~x}c]0)B(\?Lh!. PI! E!޾}^}4rxf,7)dZ$ZG:NjEQ0E.ɫ5U ȳ/ HR ȤH>yt="f2E.efпQצVa֬!2{R; fwAt8nnlv;^e`foV}ʘg["@'XIZ??mUE/.&Ը 2yZ$ }GJQ4WÑxXuQ|=٨oA(6@m Z|Fkr) & &@E"yZ D~,!t+(XXs_Tx 5"h"pE7M]C\E kM:C@-X% k13ǰrN`TBN,@慁e:KK J Vgժ68~o盛7XV &|P:J)Ei{K*/H! 3Y  UY85[9[M+嵍pk&OQPÌ-`/M@Ƕ`|/^ D/LRu)Wd̄e{(c \| (F.K\m 0rU RDDxI 8I0tߨ%, ȎKZx^n6۔lP]5XhL$%>]ڍrнF,GPtN3~w܉ U_)a>S3ӭ;[Z Uf22]ʲa!Ga11XzbHk~P5s>kՕ<@V~`ʥF:[W'A%{(miԑiQj~Ň0ԟC`vb0Fn9S.H={X]0yZ>KI("M{Z IcgM#_:HTaAeyFX0l$롊Zu>bGšMz`vV -M LZjN . RO)*I81pḚ44' O3:"ؖs#ѲֈLN#'0sCRcO^*jYu}BI~*q[ EB60юq ga9͙0uE%] b~=Y"[NXf4lE9!sZRRj7/8 @C5K۸t: .0|>=,w :#{ij0ɲ fޙ  7E)<? . ʀy5 v"00x2I1Ր;e"x0o (0sFi%x_h0QE{.БwmuV {|/K懜=؜۬́|#i;8RbqN#G[3 1(xY.}:E@V- /Uv˺ ®œ\\T " ؘ_b\"|z9CMa_bANApNC|(/Jk=UP㹮򤐹%w 2'p^ %Ee G l5LfǑ<"S{ aEG89 n ܆}x"7(پp㇗ۯkΜ> x4HB͓{.B b(DH8!)3&gqm \$SD:Tt:2Y&Tڹ}u<¸:ˇX] s-wmE@m Kq#:%"^˩mDY@}bPT.M6T- Bi@#jѢk(j%@|sE.۞)SxaN Ѱ1;ŵG|num#pU"h!LWWFp0<ڽ;|$g:,87r@O (h i"1~Q!Q.eo >%P4DZuSg;]+`Rf!2nOͥ'^B8w(wAɢ,8Ȋ BB XT=e)zQV:;:pC=w{}٧*QǍ#J\ƼU9E*%>0%)|da#%YĨĹ>{h)E^8qZ?SGowQR>{݁ƫ@aA;~6='jd*1q pևN-Rd{ĕH1,8'"#( mJh4JFI'uҚeʶpE<(!+g5,RnJ7jI%j?pSms{{sW7`v.vmi<̓޻o>djvfbt% Yp+WN7`Tjj;V*g4'^PF`F-g ǁe0ذW\R5u7Fy8!5m Pmlaa#1:^:bP>b^(gU,9/}Acû lR*S\ fk/ϱ}Qe K1vԯ\>0PP^T{Zfy`Mwh`sQIwLQdw~ƽ{+NŮS`txd?sM?H CRzq1+$A" w,0Xj #'5vhB, KE^4v=Zy;[4p!z uG2Ƶuû)L㊛ϯٶkuF/ps{I)g ?8e"6>.9ja5:LNz(PiXvC!#@`څՈҐFy>ipįT=urFӭu{fĉՌӫwzc41񮛯䉻۬T3)s][wk^?t0V$ڵaء59NZʳ] Yس!y[AA@:s媍Vu=;7YW BR b@j֘fE176:fGK tPFB-`bdJiPJ--~BbL\mbnU }h l~U_(9߽- ῒP KTn.JӕG.537roTF^yH v];ojtLi~dN?a,);;s!0)} &Y*@78 ڰ(mz'5Tɔ)}ҁۢ(*m8zѥfX{B8AV+/mۣHGB K1hAV# #l;Sr0 k6EU^yܜZqp8΢zXџj-,,YSȪGDޞa(=;I1R^\- H<z8Í9pݛM= ;B%U%%[xX"C`cuQXT"ꆐ-JŠbF\{'w#'pq2: l6{w^{)rf87Oswr08AwHG(25V`lzƨHEjyX7jl8ao;VWW?Qӓv};vԁ"0]DFiE1==},R!7l>D,^[fiNU*C.6A}kmM/˶wE[Nz׭wV d`qsʉ;js>Rc9BagW!tN`)̈7_~oGI6ʫUϲjٰ6x׾˺_0(9uU`%Y?(Dx"Ő73|$Q)W^{0:l׾=w.}CZ×nV];PSW*f3[ă%jFB) Zxsu Հ j>[&iZr&YA|䉴׿'}(6ǟpٴ(ц89v1J)8{O?sGWgbݍaw(8Q6S11mz7();siLcs,1my&)j:{uuz~۶iw|ӫ؏!vZouG̶mۢQ֞Z:úPCGc&3=F߾` ̞v_}q_THO{p2ZCon慶^p8Ӎ͕< 1}- [JY t&nN5 QhGx}z P;SIU!L(3X܍Znw0%i1̒]vO4[79}\LuWxFsss_s)%<-kY]Y^=rqr cROGEg+w(I4 cDVd9Z;: Zz< +>{jq4#R[ WڸAű,Ts$)<AGzl"a/2)>k+p^k59ߏ$eDW|cˮ\ܹl Uvf+ѺX#aN v=v i"~ܵcz܌!ZW(Nͥqc8LrD뵍NXOXqND!Tv_q5b$(u:Xox@z~E|/<f?zǛzoƇ|yL'RI2=3 ʲP,`Ƿl[ @)B4˲,/ vnf~n/sZ2DDua ,ت0㹾3]mxfE;p&d0:1bXWVj7 F~8S eIA_]`-䟿h!E$@Pz1\b RXR ' " ab7*W&/! eFj#^TY{v7f=ǗRSGU|A)='foQPh2nL4 \?Sj]KJ$/x3vux +7^ge3<")P*A>>0@15 . ){1LIoEzus kV% 6P9f\qmܯ(oB_4K~Wt w |An_Ua>"[`&r_ 2f4 w7saN=t&:Ϭ5Nav8z<,MIf-QW\$)g"*~ !CG7oΥcW@@]CV鹩v+$9+~snv\pp+5k, @ZCWDQϏR'Glk{t/.m[=o{FEYΑJY>vW7:% AWE$@v-RA\kة2*(1 uxP} ~S}>2{OP&#sw8/Se3}4~ŭYws`o^iJgV~cip??%+"^F^!S gC)#LV*NWy "A+")e_=ǟ)=ar Paã+ӶJiIç/|ӭu;G= Vh^z5DHTЍ"o : dI^(N>&,>a͊N?}Qr;x6-e+YdI'9%V dN &JHA7JmbÙ f ŮˮupXpܯ?@,H.5*_ΫBPc 5 * x頋>|S[U,f{a+T Qeww=F齏Wz.3Ωֶzp m! sٳ~St~پ~~ÝI8f9TA$C4ƒg>^Ffr6pqy{íO=jVonSK;BL$ 76;W(sU5SDr[(2 !(eUǘk !CWrՍwcXDEH/U#Ux)e/U.*WG]YmWpᡰ1‚ 3CݹM @QUkG>F>rzua|TR(!A/ gN,BovFpk3s3O>unJZ" BBi1M 5jU`1+ü3=M0V5xF.P* PiD|A$:35F?w8cK)Z0dȳ<+*sf3 8>JJqf;ePTXp3 S+aj `]g%c>*Q m\ƣ́2=2{iAAI )ر~ O3i.6vNoi/yZdif\VoNEMQʟViQ8@e2"eQ`% k< N 0zE(f =&9P<|3 aJOtV{_:9ȓ|Yy5{w왟 \JFi!D'iAf']sn"[. y~~ Q\b%o2H鮯jVD4+vεpeo13ͳ ؑRe)8(+5KŇB:@B0` k aRM~ @ 8Hoqe׽Uǿ>.=@J~6+,E=)@>˃p`-=cV3MQ=Z?8٩zШՐ{l׶}gg'Z pZa!dcc'ʲZFg_= A*sQF5E9R}jb2j9׋̇g'>3g76wM^y4i1am}J0 "{R*FA Y6BKkv(=7_;)ʢ`<z -G @%q'JtcfUz.dPdFՍ0]ikLCVxv@-r;%H"AmBD`CB8YB[!$p=b]`|\(x.>Bys Bf/}?TEz}~+\0ZRP?T4<$D ɨū{h8o/lyS^ݿsQ RC (/c:.$ht-#ڞ=6C'FgN뵃G6&d4X eC q@L a^ <[Aua%C4FA ;^;R>@@ 3HQLBeya;fv `#K0Վ=n{w^r lJc9)kkc|<:8ѕk*{sHj_5#^3U3a_ R/9.*&YEܽN+7]? ~^.6N>u(Qā@kYm2ci- G.BxjSY_@Uz@V^:a>myn4XF%tApei90IHhttG#O REÀ*>%tam +^'uƮVk1,,D1}( u8n4Rʢ(֣Ѡp\d!~[ ٩;'j&ۜQ*gE+ ysBfȞ~3Ew皛y˞7J+~O= G֦/B"Kk*^tw=sYEl|Qys88dyY LG(,u%,1q2*D py\Xk )$|eeᎃN{`+Q1JI\9J@]`6%Lt8UiP)*DBdaH#E(JRrH;~p Q 5İ74jQz[KBQī7Ykm* X!ф *[E8rF Ar+R!䲜^;M֪j(RR`R%+ˌ)D#pf۶'NcӬ3O?wۧRRР<~Tѐ/ (ĀiscpދBVd7vnxG:Ы '1TY]ZZ}^+\)Yޠ*^`l\&B ,%lP 4B"BqsyPupd JR'vot8-q`41Zmt6V7jDV0`-I{x?˱r茔:(Nn(t12\W(2ʦe yDù uz/x|mmm8eY=nY$I@q(q{}Psx!MC-fb\Rs>gq9ffwnBy^9z؎󘒕UFzVp83R*FʲkolD\{vufrjairT=`)yjzzkӨUQ 6RSVf.wnrf~Z/}TTx_:E~7w˿ k 6lvEJHN:Wjj2y$Iu]<ΙRf8Gm`V8ʫ}EY0Nڽgj_d2 (w P8 >X2oHՕUHN4C:]8$6n喣ǎ<iQ@>~Gz~˜L:D!0Z֐M GzozC4pB ˥˧?eżz焀zynIwPO_ RPʋ^wfq!%'P$Da$y <93^%*: $)AիG7V$Ƹ7yR7v5њ Š8s~M'(O uma puyyye) /c|??rcmH@@z(HpƓB0rzaBO)]ZձA\[ɖ3CJNPO_ůzlv 3fCB*p&^,I]<'w,iL l# ctզ2z~133ˋzcjrlaD] !G`>Za(HAǏ/)!!YwADy?E?ȱ]A$GG0\ w;ę9LJBkdu77ZĘ- dY^DBB@SEYZFqfaA2@:WŔ0JRoO ϬʴZר$MJk(SӮM1Fbcss4nNݮw_USaPU\k`mʿ}dž놔m,N].50hyYlw]Yڱk| hk<(|c= X8wfpp̩ z%f yj^P&o{~occھ}fB*qFi9acǮign&F}vn6V)(BxlȔÂ( \cb, d35ɂ P`xA5Z\~v쑿x Z8찳'R` 6'o-J<N}:y o Ͷ&n۱7q[%+2__(nf-v]L%ģdΝZ-ImLVt:mƘh4D5 B~/>o;&&Ó;<-q뮽uݢYEQIj# aXf̋dQH aZ͉,O M]j`XTwȈґQ'5ʳWgv;~םw\nPr{WeEWS3%Zn.KzV&%KXmY+ʯl| *4!([-Ტ$s3oa/.sW=湜lKl<;Rv=]cLiV*rE8N(4v0JW0 B@yFv3{[FbEqlny(~+RQf䯖m݁z{q˃ | ^yQ v~YZ>$# ADg9;my6V#.)( \(GauL1 7x7L֖"%6B[|x_Z~Utװ׶s 3=Q Ny,=@n r}n0mwf/,-~ٸv5^˚ pײ^X qhDu}8km?HX(44AxD8nJԳ_Z|7O~wH6GȀQwR#!NHtϞ=i @ťZj: q]k=vp8D5nGCU*`{SN8uT^߶mɓRJ09KVBp!BǰT5'Hx!!N+ɡ|~ۿ=`X-Y@ !ʫ^Y]/>)~x[Np7\/Dw;'zz|Oz[>?oC>~7𦃇7q-=׿XF1=7h}>y{`[$'ʸTXu]", ZSTa% éVY0>B >2[EٚZj+NW7*O={v#lTq5 <XiݳQP|k_(i-Ei BELaH%,D e?PXPRO3xuh5صQޙƚ%XC+vp qN%6( Q^5jjRVjJV*a5 ZӳZԪQTX&A6R H-4}Ev]՚--\,h4úqm{r4j臮*d+oyv%=8B`]~@i9XȋeNNL.oy[{/|ssۮ/Ç?ը빏=W_x8$I}w'?Jz-O=8EQA_)}'=`Da N/,^9ᣇOb]6 Zşj5F^u\'R@ (v Su^iVL {#t=(X]_~=b3OHqHM|(ajwch60AY.=V9˾o`+kHP׆ŸPF{qL1E1Qȶ?`@6Q(rb8F1mEb+%A#Ő'Z; 6x8ml|6֐ رT R74eg\9( =FP@c n5k~<.ʛj5 DJ+ fw8Er%6E!z#]︇?x{w=w:u=SO?}oGbm߮oy{V+v_zA/~yY?|ߵ{?y(z׻<肕9}8lOt{ l@ʹz&e(zP2 Q*;k++++.[EL>y2^Xɥ6Rp Nm6#/p_H%HJ]vLm.oNh82-wa~he"w,:F2c;HT0ɓVFxNAX*S휙l_w<Hu7~}kRRP!?9Ƈ^w,LV9{ݵg]6dJk٩jJe@$*aM@NZZJXn&H6;.!^jU7u?"XG1-/p]s;MY &6N;5 |U@ެ +,d ل=rmlHjFiF QReE@zӻMoG?mnKPGE^PՆ`}\ZQ (aZ:3;{@) e>666J?֖l,Q[B9-eQ6Zĺ`(ֺ7}on߶f-g\Z{7"``p:IGFiFRk6˳N;#GF/yJ%p}%DgmiT\A =3_mMqw.d{LWP@rI{O֮ط-w~M7SYPǨ,`Q\l sѮ*3c f+EjoA[ZcY) Dc=mk jXy/šYF W&˔hR{ ]g.>C$踜K P<)8] UK` r#R"Ы+QEIiJVYBhvf֩)P^%:\^==5gGZ }GWV|x333B<8A@sv8^ VFhJI:C#}Ng[V+INWQ>~?2R@K>,ָqv0 n&)6=1}k(#Ǟ=i*< ؃u}u}Zl6(&hTN{ &Bi7抾Z 3]:<'9hLiu7 )\b74]3g{}=a6jO kim7vB ʞtLh>;!!`jG pVM۪.g$P}qUH#e) X.tYZkC9}M\#aE&3cʩ=F(XgFUwY!vIaMѡ>'JZA e(Eun}"*Be;w ѣY;铇mj@n9qYd@#m GiSJ!X766`e'\QZ' s^sЋIbhnU(19}N_(eiNmD Q?Iv O^8q6D@R[9]-v _N1 y[!XQ޽뭭e{K˲ѣ333o~y'N8snq|2*XyP繹c u벷ab"\hZy"OgX@F?׍+kCudoJ;vv]J':q}׿ᦣ',b,ߊ*jS>İ %#B-?FA-be~ Cj͙Xf5IRsy8P$|I 1 ŗNJ̍!IՔSٌpTNHn{->٠@ւCZTrc5y Le[\mvkн.A ~0Q18鎆blwl[T2 %sDvgJ# >sʩ_ݵOVA0c@.gg8]VHTUkgϞJrRokޟ ʋ(P :4??<]Ly'[Sg 0Ъ#C%@sBU"m5FQPtzQIƯ/fa)CM8qk+mjBX픙T>=E QeiØlnvBxLNB+!1;;8 Q3Бҟ}so]sk ]Rqء4`mb$1&J\n"I{{9Ul<}9`smkAS$  c.u"8BR] ""2܊ce:'bDIDAT3B jÊJըTQ!ZdJYA0VngXs#G;aP`?u½yf~cEr ߴlE[tܪ@Y0/z3IZPK;’R+qgP=ĉ%% ^y*XB6 $ZЊb O}t5W8p!I{y]׵O.AUaCbiI慓ɼ;RW֓tH826sT$BEQd*-r)eF$wBÌ-Զf98ި!+*xCAiaB#ߏ<n9zI޽n?Cg^@b6WškV@mSL r#+31S*! 6"qƘǸKqA>m 1tcu䀐9+Ck_oӘheg"*) U?gg.oEdi:T*2]+X^f <Nc eV1 /ai^W}UȊ 0硃9V,\ ;}(Jw}opG,2`o z)SYpZTe` hoInBf_yˡk>Cm߾o}뗾jZ6H#fLس>\N=#ABxeigV81;`6z~=v‘( *Ս+oضc{&uT:J~0/ZJ%Zi CMD! rǙP Ι-+}n֪fmT!3||娾C9.`jQЄaHÇKմ0o+zx2)vH@ծ[ewc{6ͦKG 'OÀ:NXqhl }S\d]~?2qBȇlzܦU  A4zyf0ĻV޾\m>[RYsWM`t?(Y/8#mkJ~ sŹ]໎TK#GL"@ ŪZ/={7N;yϬs;L (c zz *VgmVl-i5qMP< l֧-īQK' mEGr`vn惤0zCuרO@mN,OoJOB=~Qu+,WVEhϞ=Z'Nֻc=[/–jPZA5q,Kdphcc#I{￿~mZq^bM<@~P 'ǟ\[hT'IVlƙUh ^WKpoEu6m 4*2`06۶BVKK)Y_w8ᠽ=d13 ;)򭪃 +a{ tH$"M%R[C) VBkr$d!5sa>ph MEh7q~ աgNmFu}g~C- E$ 4̓TH\W+U?p?ދ_m6 yoO_J\)j9w6WW0cISY8(c'On6&Zvю-y!e(lkΗs^ 6t&IP̋[=ϺLsbz[ٲ,+v$;RO=T,B.oNpɂehTf#ˮ‘#Gw~_\YY"n8z"j:4Vvl8T=j9Lep?E\`N@*e#X)٪$ȇt@ajd j  9`rQiJZ36߼= w0q 3X9#uUCC TlʴwJey)ܨ) @ٚX;Du:,ΰ?ŧbUj2"8&LEyhC݇}Eeb[ց&%haلƘV|zeQWqV!K|ןlMo\Z]$@ :&&AFW*h8.sw]$%e1'&mw"۪0@rdYj677V\h7|M7766(*afszzzΝgΜيA24*@(ӧ[g +[IyGҩpc`Q("ZkD]:3ξ ﹕z x8BZY{)<aecPC(e< $` EhKl7>ַגRT s)r?ݲ0 2q@*%@< DT)TsmE!L\*0<=~rw=?cLuY)Ɗ6BiQ \(0Jq'sRݬX-?=[Ğ ZK6N8[b$(ϕ,`I ,Lw>yjqscLzd{;"h@I^/|Dze7hxA 8sڑjYiw4)# $nվ˦&|o}/+:jvqȈzki\NagE;ͱ$S5 eQ9,*=tiL.|?oZ~oIs3?>>1ǨsAr(tŲ`!EA\ (k\2Y'l3A:84(eY"x'bG04<43gHdNE0[ː?96@' !Bc͛7}t2&9nLNM|_Df IV`g#(CJE'~Y A`W•N[ ME RFNAIG8[fߐQflM+/ZQ%9 G& 1 HP;9pj ")j(,oR L qiivL~ f!IXLe{n a p<„LRX0ݸGʐSFy*-g@"c\+WvܡFec13X5ި 5"!L苲>3&PJ|ϗ`W%ǂ ڎ(2kձeqΨɫpkt=ߎlJ ðZ4MǙԔm۽^!t(j0"I4Ms]ײPk0~߶jW_}qj6X 8(ƒ)TU,')~,q'В%E Y=e#! CX ( 4"BUi)'Qfr_9)`D{ Kj y$V >;yƮq,'i9hADm 0ݰiz)l1P&HrAd&0@ϳc%?1d*Zgn=;x}@5#Ii:,zI%ho)A&VtGydZ?90!b a l p/ lazZ_t+K{R(#<1Jmת:E1Awqa~e JD.(C>>lK5A !?ёQr^' ~́Jٗ_~̙3ONN棱a(d {J>uuQݺuk~~ҥK׮] |cE.ʩOFŒ#KDDL Hv=Wp,2dGXbACPz/6)pq5M,|?aG 07﹚g8VA1u!J[MkzeԎ`LÐ2G\Tpi 1Ss@x$ˆ֨֒(LЙAqvxuZ=U-gb4bƁoXQJ%Ī!O̝um'X*r,nsD(wApcJG} _CCZOB?<iQ @)ɒA" yi$Ql,-]yA1 @$ٶ=3u|2 4 x!A?Oo/|8Ȳt'ckjyyۦi5n跣1mnD.p8Vccc;;;a[658743Wn%Iwr/ygyC"Ӗd7|w \Dzd'ʾ˽-k ȟGާ* z'oޜ\0,_|YRD)wފh Ep&r/5- ANvZkSVIS{]l^PSR:$ N:G7 :u+䌢Q;\I&"1^+)DIS R eQxC(9KBX ӑt&yC28(̮Qd UȒ%azN[ʵn( );w܁ SJ"yi܎nBXnm/}Xjȵz魛wG<fwܻ<[Y4!{N׵:mLtU;::F~x*J0N]x{0fjxrH)hQhV3^2sgerr oɄm8f8 P$˪29Xa$$yow `j0փ( 6awOϜ=+8zBkY6~Ҋ8$ϔ$Ş! ̳9Y4͏}cajޟQK`vE(!zwBg|G>2??$ GGGŒQYX"oG"z1 cee%7i;=Țl!MH4h H`WH"J3QUdMΕ"ez 4AJWI͉=I:x>~@@ <=hp!O,`(dpiɒT)ڹ~4CHrP3'aLz#kH'l$4[]?>ԇ>λ7O%h,o{iwvq}?O_yi}7 n׼{ ͅov7 Bn䇑xRw=7Vv5]a6jU+%hʶvfI k X. 콄 {\ģTCb) sCՙ), |AT $b>xy cp9IÚyzr=r۝!m'X(D8 |4,ЇÜ3$k4# ibRZT~GT^98,E7?C08 Va;7}P((rK)ǚOOe# )a^`"/3<ᚢX)`@ͧx#̿'!W΄"34 ']pvїA*2m^uz=]Q^(X9/5&.Lpip[¯R+j&1).ҝ^[ /ݭwtMPS@%ZT/ٍty;uz]:6I&R(TQꤘEIY\ٷHP~#"11 ?G3Iۢڝ8'<= ^_YB3?>VnTԥ_Za#AI{lЩI]Z9"`'*ãGl~^?W^yemmMQ{{A!Ouf/{2;yӃvQ$ЏH?!/+(w F{}djk/uFV"AfO6˂3j PvL&:/ #Hd@'2&/]ٺv0S'?~7vʕz˓5ARⅥ3olntw}\2\ DA_;$ivk}sg*s,Ia?5MV*Z1nDQ`"f4Ы@BH(@IJaw5 w )0 Emvv~nr>%"S"x? m腌iݮ5xAd3"892L?WOb!5Jؖ+$k4f/7 0VY?aPVd].B)9Ȑ(16tMc{e1Qύcۏ>$InʧE#TU՜ϳr< [[[uhOsG)J20F$qBigbԇfnEo7HUEWg8|'qiY㔞RDkͪWx5׫07 BU ^*w׏݁@Q70vLZÄo.N,-/=|?x)%q㾻@)=,Ҍa8B7bftcEI=Q*B < QL4 ,yWDCXD$9'߯IdgV r(\3aM̒cc&RΟYLN'avRMff' wwL S<^T4paAG@ض}R=K%du`+WÁ 0fIГ󝛻w҃F0DØlt8G /Ѓ ںzjX|s~p8TUuffW^QX,B&LNN.,,ݽ{g KKK9(,/+f??)u]pF)A0= lԎQN;HG6szP4HlOpp:Qpu@9qoHX}Bd,vڽC"c Ѐ&hPm-MO ]2Ғb PhcꅢndrJE0r]ϱzvtӏ2{l*pl%Yz倍H0$qzl-T= 9Ӕkܿ8HQT+D نu?G ʝϽ5(RP Zr3roekRtMbGqor@} i8sLP78i/^D]tiz՛+looommuMm2wu橽ϟo6qommVF H4!lVS\xe Ԋ!3gͷίƯyWVì't'oaZ+k>6lSKȂv:gۜ|`y o-иec&obC ?? k77BP3 .6`$@+gy[R>9{lnwww'/rN4mff%8N~ # BSSSVp$`8IʽN葇z՗! wwq1JTQ{w bJ[$?pr}[ғ0>e.fvpR,ˀFQfk :A` ngi${AH0Ē!h#'",7B89YS =X) c cEMSirLɇ&&w]1=- NIq|ILsB?eu^kb*iJ8em~8Q;;=kJEV){ɱQ(œ7799O0m{OITaq\lFxB6LJL@ZO+"V5Wor5m78 n9NAp>x/nH*zQF$ /2\}BhJix1vu=ym  ط''''~buu5?sn _OO.//QP(@,iր|ss҄CӴ||F.Ch$R6hA̽0Zv<q BJ,'g".ćg_7Z9𭉁 nOS?s_hىZ;&)\i Z@Q(3o|8lCKGQ00KaT1O"( LB1RHT5"ʢ VEkJPTY%iVT탽' ]t :4{C{x3͆~$!pnY*0i*EQWa`յ/|ŗ[Nɀ@b3/R:VhrH,vq$icb mϝSɲz6Jk03?L4S /]O-L<^7*S3*lֵ_۽ JyA"o踝g޸{,&Q7us&h=EQZp8̋uő/~W^$^_tuݜ՜s֚@y8GQ ʫv{+3z#A!B'x jsv0N5CnCc]/no~zzsALM_SoO hN0a"Ď;qߏBA։tO2o왇17}DB" eČqmvp &"ă3p qRR+Cwbw={'zPPYZ(ƩcΖkQ:GrC: zX"wRI$n,Ά9CBǡoA'6?p#cggwiiyj|loo/E'@'2XbKq v&3O4iy(,?HҦ޾x婙GxG] $Zq79?wRamht˳*(1|Qj\ĘsND^C۶ϝ;'I7z$seYgϞU뙦  Wm eTxZ~{bIb)gvc<FuTo{nչW\kK3nVb+Y(ѷ #JG~R=A8Yy0"kFt5_y=sɕUUsoV BnFH4όmooo{W*AԔin'ђM0ƝV/MJ _Lc F`GUjby4ްH/JVD?cRBeQUdPACĉH3y.CZ<r>QhREq΍kCT(!"a-hŒef4-%(SS I$]c϶0Lnu(aBAń9"oY0gܶS~!#!"{9:"aAI}KX78bvko|v\gt676&h~&{{N?%HIH1njEB\A3ƒ`h5|}~3Wpɻ{'>GSw )7yQ:;VTTj+۽nߺ?1=+tizwMo`o$rߪcy#s| 8WVV]$V+7DHӴl!p8;;Vw}wzrR0l/ّqbr9:J;DhuVh09SQҩ 'iH%%A 4ibNq`֬JӉf=KE`di U4$`9|0,ˢX.\;={<(PKDQQ"rD3Sfu f9&8 v(aݮh Ǚ1^ Ð'aB2{TqXP-qخK1;lzzcK􁧞yxnr ` 0!0iE-xhYT0s{FTz.ɋw_+75b ΦW ssn(C^Wl>* mku?Ęp4s&+g$ؘtw 3hube]}xV͝={ݻ9S?2 #}`ٺ[>7=>.kaW+`!}<M a5"pt;CP dUf"):FU>egvO|:JecY\L{~$ҐIQdE\*ͯA5@e ˺UD &Jwmp8eHIiŞD'tT#+0ʾBY Œ =_+5Iw!N`h ؗ{.R&QNNL(Z'KuZAu]{擟O|\Ptpx(R> }8 Ŋv,^6fNt ^Xak~{]BÃᠽt!!n.U}ڶu\Ü {H^{>i ,믖tyں*n7v9F_H:*5R%y?^ٙԧ>ϚI}"p{^ȁ\ _5>}իFݻ#/uAV,˒$LFt˗^x "!SdZ2.Ryll,;ECRelJ5,xڂ(ڎ}5hI`bNO(2,I#7uw=X\`6 *^[spg$J1kH(ccc=(CvZɊA1'lzD @Rvtܧ*1\RE/ ,?\옓e ÝRiJT1 E#NPpKpH!" X`)#_X_7=ESrhO 4nT($tڕJ`j繥R-ť+oG?gW' ^CͮjШ3{qHKq$wib3EFҹk~-]׃ϋMz^EKKK Þ97QJ=s9d/_=Ge,w͑JRp8Q|iޑٖ,˥R\hW2A[y~\ # (l? JhAB@l"MSйǙiT e>5y-ͧl`ьTjw !^D~gh[n 3T $:AOb*O$8OPFHDH"QĘ"KP ( Ѣa»BLڶS7%", *bHk/>,i` YA#0v` g~_*{O1h8%S)!]FAoЬU;BAj;wvs,>HzCh ?=p8h#2V)$A!\ !,x$v)筬酘n?||sg&k9BRty۷Gn$3ɼzk9) ]5z(J$fql0J(xƎ+J"Ze8Br<߳P \N㺹ӈp"3+WdDa-//V%J:)d ׅ@e8 Ų4= e-ܹy•֨?ē7UU?Cd@gĨ̤h!uxX˲EMF8+>G⹳{xwgE!lHIĩ7AO4ʙP@_|N;9\,T<\κ˞zN^XYYYZZj9N::Gt}Cjʡk:661ƍFqӉWSJrseE~a801rnp0u苣X%x9J"ЊI1AB03y~YdlwJI85Yq7K}<RN >AfnpSS0p]u:}r@:,Qa5]IxJt7 q(n>٩DW X]T(n6̀"es/gwqXYk!A2nP6cS>u0vT)[N OF)Sp#4VHPR.90Apx~l} cUӌ>Ծ3="wG|!< 󦦦rZ~Ə9( íK.iꫯfIa P*n^M˛|DiHMӠ^ GqbJZEaT.E Ё:.XPe%w:N8آٶ Cp4$dV9njZ`0͡%I#]˺l$`OS0& VAYf~7+T)㥄)(&(ƘfŠvM 4H yFʅ¹KqZNw@:ݪ./M7Zv?J`6 ~ N'} rvJȒ(D12(TEMݓ˗c>桎I2}ecccjjgY__GN9T*5ӣQu]7|vz0BO`rBH[zA(墳X*01-2\.$u=8?%8ncN_];vz< ^I,.ð2958@$htC_NGQaEgyyF SD?h(2"`ZURADiH+ q)R@IH"|VF+-:\zH"(}whO-2{s$%T" '}{@Ua:I*ݍ ^XT Dph87'Xg /ISQ7dI:(IAcA`˩8<\Y:Db8vV&2ϰ,/;;u}v,#jǪ ua g[I~ €y Vp辗_4bB5w:>>xbb"5s,r{{{j><<}BHPt:W|}$<'.h624FQCKZTS U c}b}OJXݸuDZ-lV2zptU%h~BbP@,p0t]@T{^'ݣMY/^7 d'zeЉ,В4 '$8E\P8HՔ <8<ÈH.ÈQ~qNe{aHpL e~H(Umzb|x]&EÌN!D Rg1:0V $dqpT奥3oZh<¼뛌y\ Caww\fY} tsr?plLS6UY{\MX#q; K=#HLI@Fڭ$72h%g`ķWh(uY y9Dt: s)pPX[[v9t?|Fbqdڔ|'@'hb8~;0>UREE|frvZmt;+s;^C{m 7oy-vkhm;T,.}C8wf)3Tq6,KŢUp^EvG8bߏ8 Ei䚑˥'FN9C؏r eЇ3/G$AT(iG"e. K-/H+50PDDN;XeiZЌq`o09%DXC"PrH V+O嗢+7p$ e[|袮PUӷdǮ{> A!Q`q?ڔo۲ZpMC1T,kT'5Mt0'E|x7ZQ#'XXڼrvq0йV4e+,Ӯ]C.N/}ћQ(Zo k$ߐ1??W(+]^>s,x =<\>sa~׾j9O< ߾tmNQYT #;麞(->#<\*I6E繊 TdǸyܦ`eYZX =0A=\"':+)򀒃a߲8&(2#NF d3)0E1BnN RaXH$ic6,땔H!eL*Vo{bj H-|3liTbJDt;ӭ^F֔V3=5ÏΗoP.m_? G^nohvZ탣ݝݝvxjnv;TN7xkcpDguM%߹έ') <()_hcAUEA8;17ǧ4tɷ޽ןVh/tDio}O4]\\% &N#t4͓ojN lD<]Rs˲vWV0—\YZbDpBຮiICN۟Gis$I,ɧK'0J Q#0<y=nwo9)Ir^9ɹs{wh~ga03x{zTvw6z^wY)"bI8MN~;{,)[r2W@Tбb;A49>fx'&w-kE2RU*b JE"U&yQl:VC_sA wFeZAw{gkjfbwgKϾ.;EiS޻^L JqzfzyisF\"Ed.3`5F>;?˿_D>?t}"&$o@O ͡71RwIo>0=riNnpkYV.ud#iD2=ш7/G%g>eڦNŵUJ郏<0?{2^(̞{pR}3s/[߽tҙ ETJł^Jc>11AeZO$g^rG|. bIS0L6|%VޞV+ko(b ޮdͽ &80[,jg(pZݫT+XpC4;˶B[@x>" }%Q乎}8%̙bB ř'Ew-,$J(8 ybP)FDN;-DaYte{K )ˋfy_c}ksjjbw0li&/V{j!#ɹA &Q0&&rVUkrI;C$,}ga/\=zJcs=k<:|c㊤hZsu~~_G>O=/|=ąoݥ='nkoam4jO]x1^ǘ3B 8F LÐ~<Ѓ>A\i4ƛͦ&R^5fmUAFI*uqgR,&گ$B i ́iG0l]Gq6Ix%-wyVN㈢" Z۷j ȜrATTANziSt|Uh;9Ä`4]?0yb9Atڃ7{^x qg_~.krgݝW Ks2>c[GqW j;GD@NTpLT,!(Kcޏy>Aܤi^$_IEQDI$@m;wۯՇK|羋W?я'ҵ_Z_ 1xѡz\}ŧ譛+Fmr17*??;! 0s슊yLhvuc]''o]t~7?-B):(EeF=lʺQ(|Zx3?D2ia  F$)6)bGzIdgb?e, z8Ivخd w_LB@I1VT};&B{'7NXA`RFN?0"ӲX{w?( $7w={:_O d,:'|Bp˵HHLP.nw˜a 0 햧QZ)9spp(Il# M]&]7}w;mZC(2+9[EG qG`#9SSS8QW2@|fYvF b9K_̍s5\>OZLsCأLvRZxկ|?pګ8%n(`8 2YJ%EV0 T$\VMA&I}13W[E4~]h$wo^pQ۝nW))f ݴZ+i$˒{{[C7,Ez_gσ+fxP(I$Is ̡w=hع HIq"3i<JeUnzAa]0X`¦S@!d<!13C7\f,w7'WTMK;owu~-7B* *,Kbo .H{,8 #>U1vLuH1˒\+0N6>IEo{18nL #P?-8:z$D&Mpz(i~f&uA,,,SsH9_:O ~!< (cz;t{'׮ѡYctD"`X,3 j#|@%q^)8.箽@j:AyW iw˥qw0WCT*K soҍR^s(IXMG|'>c-R506/9f1PX1 xpCKc%4}?;epT/NLX"% L<,n{R;}_3(etUbAʟ`ʎC3 r񽛷N2cɍv8txp" 6˕uj>V1 R ܋F1JJ(5;ؠ׫*)Okr㏽sgcu}r+i|PBϋ7Vab^sܬ`7ʷ(vD9$w](ͳo!{jQ19ӟx~WΜ[^xyaqibNp卵|"NJAc@ߟ?ZGG7ksկ<mn@8Y[[(O#7wvZ\I8NkH2!P@_o#1`qf6{B GY,)y(m)zl[ޠwh8r:,n-{z}ryJ|/. q,!þȹݡqj&U~;뺍rA`Hio#"x%C9~u])I 9c´.aVgfg$U*8E~(j<$Yi]7`MV&6F<pj\ۻ!rqQ/$ yPUYI3C ^L42x(vK_ ?,)&aKKwO?Ճ旯4Ol#?/ONG!Xcɿ[3^Q_\\Wka_x~va鍷<,$o-D(I 3j"Q (W)W?wQzqiY75Jw϶-USQtz[ۻ;/?:>44X*MMmQN׿,$(k H f@DQ9/^:ju09ˆrQ:b7 ,$唊̈́)ř?\ixmE)JAC@}Dz 'DCc/GK[ Vt../lmSEIFb MO$mE5O1%*%ABܡa* v@1azC& zY9p+c%K0.*¤(8TО|~#c#~3 ~{8N`hJHf&9:T+osqݷ~kVvKΜ;J-G1 rހ>Gm~Kps֨:!!)a _T+'~w+/q] s㉢p8pC;4sY+zN1yI;y4x 8xO>i A{sHF倠BuZpnQӲþ,+*DQ l$"2!HBB5*iT,}?N a/|oT(9 8*~qc^0ɇI.+}IpzwkH|fr}ӵǝΟJqҘw,gck돏Jr}OnQX[o.D%{Im^ʡQI3;|Y2?Ysi[?Ap5ue宮?_UTQ`-]_yI3u]ɼ$ e |4R,I'}o~(ym |7# h\eY}U* BrVon" P ٩'zBpu|_z[*VB3VV# mIЦ ";mgeX V:WZT&|ڮD! KRTTE+jwDiZ%>HD @E {L4ڋy<WEC7jh#T4Iq%&ݕC+"^qZ.$ ӽ8V}4"v`-?t_hnCYFo9_s{-Ӭ|yez:&wZǝnknYaU Iˋ LÔYlnDm{c'ř7/U4]s晋8NI ?Vgm~JOp>B!+_mMԻ~t2X4TyuI^Ū0Q0$%AJ0uwrUPejD5d],TAU645;/-+%ٷ_ޟYX(T^vX\ C z2gٶ81,{,2} @grg29q bl?ewsq:qCp%(;bTD*F04P""cpd.A`: RdWbzI #>av,Tӥ@rYjwQxmJ;B뫤"vA0 -A,hj LR+y(=ՀCwbXõc2l>7xumm|=Kl0Z'f!BSĸ Z|7{_wM3aEG|k;0{¼$}s $! *PBS-2`U͏qHy1sO\cTdDR=+@8MFwR5+ ыK/\So,d(NCB;JBaPXis\1Qy.EV4MWkk9])9Z,|ĉ8Uk10bcJD^}oب2O,7_S"Ѡ299u}=[ݾ7!5,z)z({HQ Ņw߽q8f]~"̎=4/uwN_3rFyzlE_ 82Yp3~FrjkN=;pW^xgav BN`{UPE5ꫯyZ_ٜ?3__[8cl%(>wF] %i )gS'YůSx$WlQrO;.s[}>xx畤6 2=Q$!MA7des޳a|ztU-O*/(B)G<I <fJH^R 3LLHz V[G,=r((L5Y^hj/S5 LuԱɉAhiH8] Qrjč J⨓VTmDwֱp)?eZapbWz^z#}(kyX(Iaݍ-+0kDRCoOU!78vza2U( IYF5?Pu)rV$'G{¾We=` Bٓ0 A$L8x[ӥ_V E-z'D8ƘzCWbX;6q;MISfJ ΐ%$ L9A]%n+F Wn?7i €ONNÔXlEBT2}b9PTyl>3)\dC хW,_~KC Yã#0^9 Fe5"D{ .r5U1;z S|kC;;[D%ىa%ÝuP~dqy0Zf1c9JS"KN 9T`rZ-'웦DKolrT><.Kєl>w3g e)5T%9IjyB ͍mSԏ#Yo歷nj ^aѶ\EV # f!V5s zX\,><Cl9g3KYȈ.4[Ž+ )"o>4$s2Q!Go|kb-ƫfF`ezELV "Q[sbAC)y~쓳iYgAX dS]`YRVe/`T BQ< PQ+ʵ$5QP"R GGrQAV3-LF(q18T +o=|Wq&i˸ E]h咔NFĪP&LaA) Z\bJ4{LGY!?r=_y]{&X!lR0. Ɋ?zg(yREF%C 2McHaaH(Aon`u-Xlۻ~KD88+ YwRt2`'] i<-IZڋ{C83ڃ~Q΋o~ [U]/4"28x( !Bز,MٳϽ4;Q{m A"d8>Ʃy}U(Qx#hQ3pj$1^ :YL#EARMV'%/Q5Mq@Bd$<X<8@v%ىʵ*]z߇C<Ĺz)NYoŊ$ ,xH\O3{;vfa׊@ЕH'Q6On?_w>d]9u} >yd .?ggƮaS45^nՕW7vyمxasDEajQ.(jn{l.-JTgn b:Ń N2mD8ۦSf$8}ۿI9/NG[{!A*F}Z(*댳0G8Uqwkrж(;庢q___xK T NAQ]Ւ$ b֧}vALPLWfg 4J$Iࡪhqگw%t ">])W|$? BvØ sK57Ia@^!8M7;NNć?NG!') r *>($vܡC*"V/u=zF 9U]<<[5( SECiIV$'LPC 8D1Y X`tZ>?tALlS"1oq7cr}uO5hC\U4 6e,gjT|ŗ~_fo\֢vujq\zY<6S)eD/ʂ)U֮p"ODZF0d00PRKґgjϿ}K?Ls;}75=ć*Gﻬʭ*qP4xlH lECHHB^Ϸ+Wa5BшUOdov>iG2ΝC/R~~KҸ6BdY'O'B9YLUk$A K;ͬ}$3s*)kXTq>n',14N1T8ŸJ&N.O#{J1S Mͨ2hW(!!bZcDYè $?ϔCl C?Goέ49q,c(Wz*H%4D+UϞҨ|Oo^EJv|ctwr)΅L)F, ѓw_h<)[*ndP3IVbY(H&QJzED1=c\U<keIT?[?{vK|i'uY4&bGv]~訁Hlb ;NM}ϓ^tvX,_R R4Do&7пWPm;VC E.\@ss#'FI CV 1N{9S.첪ha[举EIںIV},ێYd #IY'd0- UcNLϯ=@{ve | +R'"IB1ixizckzk=6!ÕgvDb AWB׳$ٓf;XʕPaPai6gŷյ-%vD qƨCg`K >G,#NE+ c+rrɏ3%?έm+RO9%]M;q'_yeOP`SO㉦D\эȶ]Up MCŒxLF;">h8YT88z)+ Z ^]^x{].]BgϢb)oJo݂N#e?(Ώ?+I M@;D Ke*2Rph)*t]0y~Xd!s(' Q5t}$0Ӕ3 `O%uQo֔Uk/?'AT! ¼{1RF?L u!9h2kL`56O/N`"*D{ ˞F!7!T@ܭR?miiW4Sw">Y": 8Cv|z,*!9f^a!p%$:L(DAJD}<٘K#ALE tLxxc|}g ڦwyv*io=}lAOT*OV{%mLd>6gHD庨)~8VcIeȳӰr *DUhH J /GU_k/} Pסvm}JP P,]R=!?C 0v5Gpz%ܽ lw޳68J'fzW"1Lc%V(=,WdIL)&rٿOe*xpQ(QP&7Q&yzĜCvĢ⦈$ yP^4;+/Ɣ ӛ/Za*pcnfxPSxA(` @8  0{b˔)O<5_@;qwz4&A|ked!⌷<,K:1;>{ΞmWM' {z:>h]lM?dnowI:4{U܌N!(Qhw٩ˍ .=ʳ/@+PѩA QhAQq@yXۻD0q8J"cTdM5/ t~6g?Do +Q9;;jn`:vd`O6_xN n,:߷F(K L狺8>O!8^_/zҘ!O XNWUdM;b9!Bg1@)cp ceOAɨ]; y|osq`'N{nn$ Q$$1hԓ0b0LPYyA3}pdBJ *vL CMH4~XU]-)HQ|lJE3A`].m$TK۱@RADv }E߽Ӟ,^My7(*tp?4Ә%vMg~lƱ- e e1\iWEMA`щC-K'/NWDzI뿎~!pA'';!0zʒCoçlet vO`\zh8O̫2{Ph}s}f*O"R,#QC&3*J@H&&s$^,ɒQƜ/(g$-cp!/ "<⌜[a ³iX  D.QMў~?lP~C$/o/wLRJvƀlEpD#M@`$8D+k 8-sړUr7_aL S{t&J%I0.:\PҵC}O 9LP/qwn靖 Ki3~Af4т>=8saG@Ko (9>Wvݓ6x|O F@7:C}`$˒.(HLi$2QR&PM$4k=("*Da2=V#=`@%l$)QPbpJq2;', [8JM2r2%($IQ6G(E;G;&|]ZYGٌ]F"IxPI}=JuVɣ(Q(eCє8(d6=tb |^aVoewJQdr9 Ȋ$+yY,Twjپ`H~ԥyԺ}fzYbn_Aͣ8"'0vd=!DJ0㌕D&m6B|5 ~PUM^g??~g>G0ay$8'PQRFZ`Ti$JxJ[{`@BؙK'ݕkr=Ź1IcsdzڇAxk9|_!G vl(aK R17Ǟ[<_3u3?Z:3]/˥JMؖDn1VWЧ>A gFNd. _7n!6)O8Hy J $'<.[ 8l׿~coO?Q\VR&dZx^:K3ۇA?QwLDVϱk|Ir04OYiTSJy7;x}\_(oEK%jufgPz^ݍݽݝ㻫I&ƒWϊ]?wŅMshsc7̈́4KsWŒ }h9c5أ CsZ,q!b.twTQo -^M˅8^? ת%:֦3a SFAJTY BWo:P0NZ]_X%aE6ã,ǐZ(V(I7֦]7"ٱּ=C 3;]/]h꥗/`}sPqw_E_Ü0.|.Y9z&4ǧ cB~a0kQQ%0B8.IivҢ%I6jw,-KFR)\?x</^y>dA{>tA@᭝yxЅ;冑Y5ur@ c3B`rSIdt<*\F6h:E&B.( ?z*}+0ЊLN;_҃%e}?>3;}No{ҫHA@ĞS4/1{II4Q^\X`~﹧3Yûgs洷|˧7Q)趟{ldDAE3Z-")cI"[,;@5 0Ʈ>.'0bRqL胛0TR5[%xA9yTF@,L*ղ²q]`AVDbY3LC/ڱ-,)| J"QіrȕrXRf87$Ȟ--ͺD)Hj<%U:ZY/H-mw ʣ9k *Ġ ]Çawg9P6QgEhz^N-fP.D kӞNŒ2\!.$~6₠ IaoII2ej{)b'=G,P. QH9qIpthۤz |ͳ%\E*egdEF^p.> R(@yDbne$1fuXϢ9m UK$v`7M|v$*G V\}:XvI>ݺ5D S0@mEG!Qgǎ}h6E(4(P6 `% o 2 E"AҚ@Z>|xwin`7 H,)W#[ґC\twj#l3vv # DצG t5DB]< MmaDmR&3q9. ƓB1[D\9h]]J,Co>VO;+&GR&q\>mJtQsh %,ZoH^w"֒J2kQ݇;S"yȁ0Ҽ8C&Ɛ(2 a")}ExnlmbC05 (Cq`xc5ILׄh4IpxNQ}_д:àrR"1@5q84 Ͳ/} ƣRP--Ш:xnM5;ʿh8(8)C!'K(l0tPnƶ_U;0₮000z|)$Jgm\iM˕>15cc1Y9nfQ=ql*5؂K59-")L 0P Q4_o߸c!;|}~3$> hl bg&1Zhq1[mc ޵ɯ|jOfYaMg"/R](ϩS jn++z}`iϥ$d6Wc[dw13G( U0WR Y=W@X=? Bf,++jD$$DV5aQ5腼%m]۶OJ!eP Px*e1h9P\P9fY&087]dW% %CmIu6[U uʱ6O˿konUǰ7;e_"dÊiRO=Er Rȑg;]W@&8xTy-J(PQ@x 4|'֦s1hB||7,akW,^~֦+ Kv|ka,Y2Ucp:ćggJ,HBM+b8 OX@nկBrя,)q* M41x&P!&` \Bqe:P "q@ r|Z/ds:y5M *4UW %Fm8eDKcڨFU/є EJo`qL!rчIph,BHw}SN-;'t,,gƹglT #Gͼog>͕"q975/tpLI`ΕT87_Vn|k6x68<yc.+.MOcN}^$)4}xTJTPqXF#npBJV}AtiRl#=I9A'0zaqV1m^0-q-۶1a=GxNl[c9] $[ > 4f6h]nZvN1ϱp(Գz [ 3ɯ0O2|(4!M!0I}u4uht-""g}bh9;xM0ضئu+LuuR(v0v`EH1|(cSOtm;^frl>pTD0a#lCELWJZZ,T֭u0_2rIN99+/'Qw=^ZVG[_WM;y`ϣ, R^f~g?񦫮d.˭\>x\HII⹙LdV9|…b 901s wX'`vaړE-0yVp>{r!Afc!\ey5ժiA<b Z{ۮMœT=HG}¿ӌ{0ܙ/T̲Fݧr5̤,[hoZZ"sWda=?2S$=D=0Қ5Q]G]xx%{aS75`Q``PE8<ݪ+uTw 9pt۩RVloK%02,0BD{[ ˪ O(mÞ#VC ST(P5\ 8ey"D$Ҳn=R$ wz*)+.(u>Fֳ6{ % Gs}V=ph8ݞ MY`?Ws^t6f0Q/-=tXu+j c:F% -G‘ܹ{\\I[g;#slcdGԣl :͞ϋh`C&x5roO)#$֓=MGbB=> y^0okaf|qgsufH'L-c=|d(ؾ6T }YPf}d)RQIQ\M3iɴIJ Ӵ>gZjȢRwx`jx 0VׅR_2仞Gt,1U`6sX W^ G^T,Vs/WT0yaH`s,Zg]lFuɮev͠LcXF B(pxÒ@^-;&)AھKyG8u6v  =fEd,Zdy.D"I|ƎG5xc4JO GQ6[Pw]?],Z}S~S4ཝCO)JeC3R9O'Rnfr x,m?{&37Jã?aATȲi+ {R,h=k" =_ZŐK2FkOWJU*N.zCxAt{+sIv t<=Otl:MLg,"u K3^qj鱣bXٶavu>/-ڵkVT 7M[Viƺ5,dOĨw/h.ss?w_oNbf fY@&4DzMtl{uP.{WbA Qc߲l1 A6'مߦ*rC3 YuA`±xRl8 bX ^/JFQDE1T8zrXC~t}gD<R(R1g_YDn9WS5k4 |(O|'hycE_>@ph}UGΟqۮGk%W[4fgC_fX@^o$[էy[-K# l" k\3soӴk4rU3uVJv! G±RZϛt(ʵr cܭ3 S5jF-y%,%K/mffQ;ZŞ㙨ID sbq1R$e7Q6 =u3մTK4 tl܏U@S'w,GXc,s2{i\LFj:R(8f.ۨUWt\{U,ұr酩[ǎku]ϖ>VAS}m7!6z &&`"Eųl 0E)V@ RS[ $w^R_Np]f):a*m( cAL'xyX@ZqE{[ʕ%U׈vDVe.dW?}cagE0ap0|5Mۣ((VDXB ѰԀ(#P٪(+p[oQ/֖GD</(Bt5 ߶p ) EC=l[GX!x+JꁍBZwؠh364+uP%7(+pKIj:?fu=-b f DDAtAyI$Gx*%^E)֯8oSƎGOt%|zzqY浺Nߔ0"]^?qb!_)kV.mˤ=3~"_jEܘ!_G Gxy"O tg˦\Wz2&zo/]w`3I `<uy''+zb~"֩ʦ5k`_q,S'GHy!'7`0xmz`TjNP9|nV/34+%ʖKp5DIpQ\tʩF#g7!I3 /|G-3Ӡ,UcDʞٛ{n%[\!T_w2.Mh, f]$E,0Or㴯]g<{v&QDh)fxQy9ȡ !b#΅~)_(dlq*ѧ,-JfA bGkPwcpȨr 4&>"a%%!J4m>Y)_Zʗ 3$ !Ij-?[jPm4޾6|Kò鶎bAhְѹJKGobl{ygv ,C|ѹщ)R-Scw}r]g^_zK 60l[2v`{X/}vGe OhX`RKM}ǁHnX3'Y9XVXhs@| d$L ᾲf6 ]wq̀܍ϊTեsyf ÈG+w0\/Y6k*ڞcE26c2"*yJ{ȳP9  )8C X(}aa1 $m/_\WlG5- ?lP>n ј[P_AVx>[*L*Y+Q1:Pէ*ݳLN!!f[QR<#UFlKLTvXvўEcY7Jz(7ԝ ÅP uv9Tw2lr5#)Š?ϛih h؈$ ,nIȧoZM#o,{byfr[{D̟RpeץY)jF*l] vbYh<;cORisX&''bs*/VkN@Ϫ-W*LE-"[V.cUipܧ0/9dZDY[7T]d}b/JjED3cmqA)/>1if/|'H94tt]k= }48%/OGt;5G]}5O;;_>к4j bydZwNv7OݽXx`O3(D|C_qL(Ғ,{i w) Vᕷu`Wk46\b]|!e˱ Pn{09Eg8NSnbG%&PFRQ-@>R222Mwp$ioeWyaءɩJ`BT GzCx^/ћctfݷq0*K-.mWF"+&<Ͱ~t,F]8eǑ|uLYּ~ΆB|'>q294;_;/pQϫxHpDml {htjbGw0% G!Tm4bV ߇K%h,H" J]uv:}?ciR!i peZZ*|[&4XRu-ou ڛnza6O7E=%gw"C, PJI7e_K 8sEr|z?0 Mka8Fm<vUotChZ-⪻'ϼݩź8Dz繞 r6QE޷̺3/KSS^]G^][8Q,Q:%FGiVEdiizDWyQ74:zp󷑚",]BѮaj]дݳS7t$ғJrlPhx~{">"Wxm? ZZ;k"3nYjk"Q!6ys+F.( fƗրfկRo;'@Swd#G]b@߮֫(k0' W9ͲHV&jZOk"\/_>DզȅiGᮃGdDH 5x֬#sm7*4 XoYn*!Am{rz`|F`bJ#лz{.l-9 Iv Ҩdgr {GrZZc(1 0 B?svˏff\7Bs 5AoR~_]Y5/S#DW:\UD VCөlYV9h 0C86˲FY44L,ceG@K;hP(R4lv;;R,E.D8h,-2IY¼ިz-"}`l p@,OHA@`ro#ht{僂8VbukV;61okm(¦ÞgGB͎84'mlH@o`jgɂ `#Us6O.NkG۶MT<j!iZ|,SfePPѶDcSRiWmùlgO?ag;Ŭ^iD+rG{GY%mvXvtMfK%2 uvm6*@'V.$R7yfցղ}8L01x؉~N$g5@˿908Yا?}v^|L>iUVRuv|\ F>#˳Xqq9L[=0ۖ8nyH-$"JGi㦵,J!灆1Q8bLƵ=6m[WeRT(XKc~ ;tXp ch.8Z[_\pi!Gٖ>zt R*j%Nib{>|уc L%#Mh4x1Xk 6*&q(jj%ט8:I5"xW bZ„Dzrqш0 HQYՇ6]wLj̳b"I({_*+=9zT5_8spgwXcrz} gCH2dfGfF I4LO7U˱MjoMOB{gg '|7h=^$lUW,BOX5_5<76irc[ z8A6V<0oFضE3[(Q,iQ>DzEΏ.g΄~YP{kHGaZ湀= < 02Y!,aѾ(Z-p`ygʪuu/2gݔ7y28aζ u-Yp){ˆu}ݩK.<{blZalbj4-ofp._TDl 倏BmۭP_2Lv?B;{N?jOF2T"J`a-x E,[nkio4 tGysLݲ4DZ<ϯgHlG۲ae :iX~^'p po%ޣl6M=ں]ޮDYZ(Xu=62ڊ"֡Ye|`&\h-h~:;t0ExSZqꋤg,V0+>56_oN9=>!N6꥚V"J♺.-g,Q.ԣZ2z2z:z0VPHñT[&jal`ybie1GQeȾ]ҡh,0(RZ/,E֖Du)7FbrH(:lA"PQZ5v' 6hPfƍqPw?`ƃ(P&30#0G)2`F2)y0j]X,b5t G1z4x.U֖rY/ud6E.1Tǰusȷo@~n,LJҾzijE9|h$*b"dٞw+ݝΧ邭B%&aׂ\jT,&م酆Å]F6',N9JLUwI+lvm.03jY6l:U?YZSy}@4mߓC!Nm0,-cGݱfY&!jfi%+KK ,YZY^IaVBmg3 H+YlHXL)2g::K}f=GÈ}s4 k_0[RzR3 JvKu[#?}, mߺT="|mŦ-nٲ̀غ‡blVtɡW1 ]aCje}Iˢ:7=-\VLcoh&B5s?, зu3n($EM+<O/ 3 \;H} C-mt*JXPTV8h Ƭ pgCe9n&'?<:Iw|vm,U=~;+UaٮO4 uCQ)anbjQEbkqj~tr!_loPu vO/v,S+6֮jr*: 3 49 h4ql ӂϏͮ`er VV,MVp"Ig: hI[+I&SzT\*JV DA3 DAxc1`Wn:4L:1x[6$F@qgYVY=4g3E<)P*&#ОI0@0~X,"(`BHȆ|TͬX6dWZY5FxԐ[~Kw\1x'8jb@V)R|FĒLά~ǚ<"(Cw~ЉRM4F6\&|zt|cZ^!0vcG\>96?,iv)"bTL\ dT-bxN B\^B!%-dZ8Db!)ido'c!u"<}E|qMJw`뮍ۻZ)d[^3Gc8$ՆfJzmʕcmTõ)I =O<킭Gp(pgDFGe FЕ(޾ȊX^0afQrϙe@{ +p* 'CQEG&JӔaz 9iIH&e*teyb7oؾm=eաnZ9gwjrh iҴn{5r@WMu XRS[8x$f3<{}9>f3gm۴ORf\e ģxVI:r-߶%?T[,f߉wĺ6a])8Ω΁Gp̉: 'rXJbV8c閖 QG82 M'ģGO !ZD<-G5ihtv\Q,|ؒE^ZaA|qf]Ah9*B$I[[*fx, +}<\ږE` mqJ.7;=[WMrbV ?>;72(DC±zKG3-cq 9;,-F[zIfPBB#d#+k5,b cgn_;23dTn8N5ko ʱ r`3>O"VmyIm1roʋQEmȞ=+⹊j-]>:6aI;>3=E¦kSJ<c(cL4aN=h&@%{{ -vh P a8S R:2' ƜcZ"ZfC#j9[[֭uAЎ kyn _mӺ^f&g&^xs-װ]b|=%*3K.ЄYj C`/Ɨճ]_PDð5aƩ(F|Jlaf BC5/v*6ISTbt"ZN(X$H!0u R'!¸>gWWOgPLÑ5kFȽkV}Z;~Tk3Vuuzf2K:İ8H^_0`&0X6诿6mOC?ѿX̭ sjò "I"!eyx<ϋ 6r7@9Auu,JEmd&ђ%IeYVee4MPW 9e|v^Az|f cv`S<7_tܱɉZΝ:ӉX|?@zE鹖S4㹼h#G 1$yEi  ܆z oYwjX?(Z]3M2$Peb繴G-Ri1J:d13/;Hv졙6LhZk4-˲zЗj[[R(x@_kT_90XӞb5pBrv yıV/JzO➧vu;yXa$I )$…JRkxW,~`܀K;$Bh8WР 1zу}bhfAR4~؆#R,hDnom$t]_ruW[#㓺 JCF9\azfƦLQ>z?rhn<ͤcs%w=W 1koCt3#E#N[V`I9ReדOOOZ1lڪJ];ZEAJwwũ[לefn,\!faaIGkRf\hq4do}+53s2%hr ~s o[wOOMf,8h>Qynafϔ/c'ʼ bEј$K9^(maYR‰d2K2h[B$a6SqXQZ6=;I]sn{o?wy0 6@9.F%c XY,iv@<2LNF<>Ӷl}o,K g!Zںu==9$]{ŧ75Ԇc ^rZ!MbnՒ)N굉#tO}S_zQ !ad csTcppk݀1ħ,xE _mДXvMk J"tψbA-a!VɲDqX빎cY8Kv bC֞ 4 \-9vb("),fZ e1DQ ,KM+@{'!07o+(pG[ J%L=%W\$r4LT0TUUԳ51LQan ֡D@$,$Y+6zq<w7 !)|}21㺞i,0`1y"p+4ϓ!_ o+&~ZKV\\/=o0/t}STO+W> ~<R _\yr`P4p4h;h"1BŪMt'C3,7%"6M`&uNIb8rPvh`K<' \p,.s@ydoohca0|FhUC|w}?yzO~/6#1`0zV6x 1 ԚTT]( 1E3I%A)d)Dą O6yXe \ 1c3gy@0i5Obv U`g[>#Xs9mEŒZ}_iur_q/O(MZ?yΡ6Q/ Bq׮]iRjќ{ߴmtX12W\wݾk׮/K6mzi jE;!Pf?@ B<|pL ϗNfZZnnbN,hn: |pfMn3h%4EQQMhw8R y|9Hsmn'~:]e˖߿jjRĚ_,~>8M7Լ5u1w ~:1 o[xX?oxjȖ-o@P u7'1$ T۬AiW@p&%M  o\ST\hOX$M uxr,M/HiFJЭ@Ň8F} V0(T @4iWb8ʕ+%T,{ o*wG޷7ayoP%dTCg3؜~TNLο7>7]~y+C(at݇YtAGeA˙3hPq  FM8l~@dx~a8eQ8Ͳ7,;6}ɉ-$ E/es=oyo늮u?>[O}S/l3r "0 lr3(rƆv;mYXēO \s[Ժ1773eFAY+VTXih^ŠWӀ 3'/ 6vy)Xۃ{{{/|s\tR:OO/3Lk׮M$i?Il}j.`*{LTj|:k]+d'&|' Gڻ7ݞjZ͗^5inAFKaBZLM9H& X9]H*ݑL KKȭpZgg'"w-o'G u tDcEFFG ]CZ/rCW?o7<%Xo yj逻;M BLxIZG=p={! el:?Hikkf͚/dJsc[2bYlMj֝ elӼ|htnHtem-ێ?m۲<}|;v0XUKjv N@e7-[[z|ߍcx6uIOT:xU,Bh``??~7s700/94H$2LZݷoaMʗ?2T$:Wij٥Դ JJ^g1s\sr6|jc{I V@>| x`0U=h"|q= }>MXLEѐ84+Ņlggt\L=-TKiݴ:zP8Hɲd U@o{oȰLA8Xf X ֱ`OB-yA'y9ʕ+EQF~ݶm[6׿~ [o0---jUӴ6QnaŎqZcw;6226;VE3M69CQT8]?>[|x؛7{zϾ >b1L>IN C$,F,8Ife V] XdEr|\ƜX6BUu-+ *مeTfiq=NOؽw_ŅygoSK!E؋FX@ۡ 5">-U` >^ {]{hhhlٲe۶maHmEG>ڵk+q?\/Y=goT*K>kۦoUm!WY\Z*  q ӚYfFVt/ЁiI6lX;RfycsQ lB#(2S@KppV:e%3-DS~^ʤ[}l͢K,Bs쩹j*hQ0 6`b+FFbiSS՞/Uc~F"[1QS$pтl$wTAZdf0lwwwؾ‰D:+?}駠4RM:=.])|Eyd2ںPV}TQV{ÇǗ#G\uU/?_XmjáYSs=_Z՛޺}L&Y(y>? AàPl3 M8¶mw~cēd*UrM[TM7b&.-$NԙT"V*LC|2?7iXc$6| ҲtWgZ0#`FH&I 0tO>ǘ MЫ}L52gKs$q '}ѣvɲH$={b*}8EQ.ү|+m:thdP(:te`pAFGod #j2;l?=׮:@]qAX;_,-84jP'CBX!&8 ۮC^:jT\b!-K10-ssaYu05&&L۴-\bI iD [7+}Gvb &R)&,>v*,|DZR/W`Kb쳻/i-[h.Gm ͛wLbmnwfbzLGk`wk p{ UhƫTO_2Ѵ+U*ihPcsG G&t)|C;cLL(l/?UŅ9j|C7ԺX<rsrBP״b4>:>==mz^TJԫB= f6uMO0A!&A//$^vmJh0L{{{q[(ReʕfY#zh");֙ѱ($RP+CߕErHg:xNl@x~i8'p>@W @ρQsٱQĠf۬W!qtT9>i$Xr\Ҩkm/,*%Um,e3zX)M#0z\eq%LQ$ AI(b,B0` 't4 \.{SD[[[6ҡ?P(y&QP3?qގ٩#1o\LusSᙪRbDzK5TDMC,ugеܿO{[N<"2g9z<{c5ꊼ~rjp]MDvaqj6+1kTzRz(a t8b:yY͋"&z CC ˒.6 |2MI4ySJ A"O}yQ5]MrC!L~!P(^g㚕_>"[5EE7܆a 5MӲ]ǩω`[ Y `q,M<ϴ@=n@)5=HFL5=˺q+y}{E>e3|=qhI6o_7Ŋr:)jFfqrÑd`9 KSHæc{4#N()?-8;v"1+v#6_cYEc~ l̍+僝]]v5[/У7[?riƧglgx酵+6v,g3_rf{yǏx<+H1 bG|8ߧR#b( Oƀ-xi:[,ϵwl1+’W+7G ؆9693TkEuEkw`ܖkVTvl0 `l[>C8r+܆ 1gFjeXF^'"~ 1iC[[[k&vWD3Jڊgk?r9ӕC?b?#ښnB֖|>_.e9DQܿȚ5kNv*hu4CPI,`PAYyf4MB!c=#%sli0\25a!=,75D-fQZ40 A zfq{YM8RґpZ:052mk=Qj4]WD?w:%0D=gztѡ!4MIQqI 'iCIDATrk֬y&Pp fWP0i"2F {9^lU!tV Բ lvD{KV?KEfGۊ˴b}çm];=1iV H`p:uQ]-0l(ȿ~ǩkҀhKQ}r 1E~tv3n`ZؑtCї-._L E<}MW(iB%I/x1,(@e9tU1 U7tQ:* ёwlv~~%iD98eu-'zxY<Ȉ0/ 4i-[mB E& $yU5ƶ^A{RVg^SмsZ޲rYwz'7jPW_|ֹܝw?"uuumZXl-R?4:0,w!w]a8{PЖ\h!h,f( , C 9EF)"EjZ QR7Z6=mR\jzit"_zڎEBE=>K UPrHr|&WaHZ-j:q(;6qlI(`,7( J* os=A)w\}E;gn{ے%~O}黇gڰG}d>D"xP8t5@e3pBf>y4\!z) xGV:hBSUlR7LP=̍L*LoZj0?ڒM3hG~._a!E\WoyՇC{&Ǧ8xL3>(&?a/DG_UŻΟ|+qv<}cl 4 YVJ՚[k@⧄ByĘ$! /’vv_npg`p&*Ry1@ Xʣ:NSL8@y E qY5҆nJ\T4q5M ܝiu=_*8,J7l;_+R8X 'ʨ䍛7ޟ|kGlZM41 AG =x# ;.OԿb5 <X=19%q{gέw@\Z_}O|n480x]uszC@߶mUm~DF9CMhaKa|r0WxŎGQcVJc1VR$KoiW EE)Z4rҭX/Xbyaa~ú츧:3GwfL,Ċ"vCsW.$5_ЅR*CZ('("90lp!ij"IS~Oj LrRhڂ(ȉ(x@iˣ#3qS] rH.L9Ms8pZԒJXTK˚[ǏGg #[7rO֪ʡvB;|3%_sQ-0!G|xygۼr߿w} uyXEQ^xdf=xqs}|K]!pv@1qЅWwmcko~=OF54R]>;=wxr5vnAQǏkfʕυ5_:4mF%8(!TDٗfQZQy`0rR,0l.U_hVN-'1=7o\qpeH:it8zb*GkK/ouK+ q[DC/2wb\<~=RӠ!$ WO!@O<#Dc*om)Ǧ\54ap抪Fc#.[ QxN3|&JڳiĢW4ˇϾ];ۼvʡyz~rڠ|" hW\Jokڎ +$<Į-} "o“E6h[5>[FGiYNC7^{yzIp&l3b6BNmiMtO.N^ݻ9Nc|ڰlM~NLt1UE KC*#G;u,C wgi$2<A lWIۀ^'3n/_y//G//}|޻t%}ӹN†atٹ`PZyyNJ5^_vC;]!#QQxuW%r{^*VDwlT{_^j>z\7~FTP(-?oEX\kؼ|2:=Ow&?x%,[Z w'TJ ~g4Zeb G1K(NK/ҋ/?-KroZbCOJs_%$Nƛwm-G()+?y<e_@sz~^!tyDus j0uL:{h[>z) WIKut] W۹RJQY9t.Zi4x&UMv3Qgg_#A&nO="86n_iH4Dt{GG8K"tR^_[]wزvy\LֲʡLR\ c Y)/³|dXL2MMEpjޚ*FE9BeB@| 79P诿nxweo;wۯǶ ޣ?~- f|#ܰjEaQ&y|["Jr.f) "DA`mɑaEQY1:plpl@<кa!D ,/ #~gg+.[3T׊۳QGPlԄd8=t#j]OŕÇO`Lyxĺ3|P/`)A17h"g`QSw}>grSnك_g^~Rk6߶>kO~nŔΏC׮߸{W};߱wHֽqvQP+V*HP5j\55u~fhm xlս:zԴzj-z !E3CKF{gBR.25Oh!rB4i axzA2UyiïYjڭ6!B++l:]n\e=~_Cuuضr0:&/XY-ח 80xԳ vlE+ؘraH|};q_Ƭ4C$|33xbz \[+=ǘDCgrr@w*5uCٽqݪk0zV˹K,Ri}zΫ>gftw^k^TRqKkd: XYV lyK|˶mSu 7h99@%{){e7"H~Q(S8d#: )|2>i /[w8r5N_zww¼Gy<3Gc/s/~N+ %+̟};0y>q{?z. &'SúXie-]?<_<mK;.[7>FOx/wT~ ߵ?w_r=kw{;"F y6Fm4` X)y4L_=,4ͺ睹>;?[.b8X6ӎ59<8I,n۷j V㰆GαRюEuR6LX$GCQA/7O4h2r_8G}hFZ9o/1| G z`N/3}`/[x /{`Do .{[g|7l\-a=Bx^8kgkGƬuV~|^<lmk8)AWo:{_e+]$ rÖ^7c{mYzϸ3;O5=Ot&B $y$"*(|"KE "QBHtǪn՝3ӷLœ^u=}~~y}w jښxZ "W߲x&DhkTZ|\k! laqauZQ֦euvۖ7SIj\7q~w9MFgD &Z#D1Fr9v(ýZ ii ^KJRJn|ޤWDGu/\ZYAԫ2I>_mj* 4-sgxۤWI{nWػgY@Ȅ;[w K$I3aⷝ=},wS H F,HߟsRnt h}sI)1F}sˆI:%"Nĉ^O-Qr% G/3Djف2֘hml>3ۓ2bTG.0 sJb41Q;wbD6F-8M͍Wz=v>\2~|s~?A\go6&gEdeGV{_]>0CFV1sK{0Ì Iv ZV15vkr*9i!1N@~rL,-ff{ZzŚ*qΕJ76$(\ҍzFYcb܅ XZ*Wʮ#ksg930}Oak휏V-@X;w7lqU5={S?;ONLJ.y'w]l^W`kZIq0Fӗâ4d=Ƈx礰,h!5@7Zcbj%^8;Q\䔪:wQ8RZ*LpSeӅ=:زHE8mZ%ѠgX_?wq-x}#ZLNH+gq<ҥk{JY$0{ƾ/~_[wlo}7?j9N!zXm9YڛfjEBw_Xkˡ5 HPS˒:w`1V&&rNvwdʕO>iuQ(3A¹PZh" 5ĭ5k`~|R ɉ&2{mKԓ4v(5K A,d|M8O>7WWH^fڭ2RGa#^x3K ~ie42prn4 _91ƸG({i 1E Tҍ+!VY` :ZS|a+WZcJ͵rb`8L &bnƙh#gϬZr;xѠVxi+ge;ܶ$} /y;]սjLNWĕZRoTW<`dYRWJٹr ]74lq*<f D*%i8ttl{c+ڛh4 +ɹ4TX>7>2u˷܉˖0Q \9.[ݾӰ*\}uӻ< as)hXJ2C g/7u7Fgw=Fn<0MVd괼ȧm̾4jR7/9YI4 {h]^d4bs ">'3%F+1pn;T<6Z{:w78ۭ~k}W.$a,\]m\)}^~ 7;T"'}~bӧ[tPBF6b lttF-J~廏9|^{F@J$6yq0N!}#ɆOtpz. ս dGy|{_蛿o|,"W@5Mh]1ul1PƼ 起P綐ܾE"C2pYB cA7bLmRMEq|`yGx'Y*,CeNϖ?`dQbLQ!UeVEq:kkvbl"b*1*#|/ȼ] O{ m_ \%Y+[YmR?œ"ӓn /Ѓ3H1;7h-4}b !)J׺Y&{qwSW׫+O>et؂7|Tq'=J>kZ3kT۾>p0غp*6:O}>OVEҗ91,Wq~G+'\[ʼ77, {_5 _@ lWC)N%|br\pF=js:DAf`'38~K-gUzm@?G{|q5{8Wrlqa/FxCY!鍒Δ ff!̑ a8t|5&sҾ=o<29uj =TMz>q)FrxكfʼnYB6C6WW?fWncΒEMmj  'O_7oeͻ}|3&3kG.Qk;Cu ͰKC@ ˳Q ^ 5.ix+fXGpHORZr;Oknh|zjI?pL\pYqyv_zf"RZǪ#Hl{߱=8%kjޕlcA ,JHRΙ}xiWX9R;߶4Z?<8?]ݵy+k1I۾o'ԾsR+M.Gk*;3FrUMܼ_q+?A\* &Q X!),GqXJ pӎ8ʤEрq^,|kjpg#VR#XݽWBw1|!ا^pܜT*Wns)B#QҌFVKYoM;B.<^qBak{1x!+.K s/?Rbvb*v\z]i:z!|q=ST%F-?7-eYo4h53vZ׏qprx%one3TP̅?dKdiGʤ8:c:` OHӈV$.S^T)Y#bAg`vT\ /UfBHylkŋRru\kH,TQkCi1 P\!AI->p7splpշ*^%v?vwT.)Ֆ@1Xz3+xs˲޽{-*@||<BLOO|K_u?obX!p&"#c֯\aPFjp9jEYE6ȣeQbr%N7ɚM[5'&3Fh0q^%1J_Z7ҳl϶H$J arxQAQB)6z>^cnlq-+bKph5|uvm[btۇ̈ 'SʽJ}aw6x_yAkv:tQgkӢg1vNp[<30jh8&or2U\w:ffܶmJ1c̶"RNNN"z;olp1(d:X:uh(``WHZN_(RD$m 7*A"!u(J˻&)dL+VʷVȺ`@ 1,B?8wN9 |3PfQ3=nmUrem$qs x³oSiH R8E~JHze9":+D}e/.?sQ]t>}}߼{/8cFc>rOu&z(bsLjߓnM {U-2.ix(. Lw,˲mPm6c,*z^&h4zǾ" #B έ( /_ZtyiQ5// )+bL_OHT_i˪ɴ YP92 n%lF!$uUOB-%ݳBs[LcmnPÊPRF*0ˤbN` jJR=`[ff.v+wJ33]&gaD:::Hywї?KF΃?վH9=2|,zՊ]Oa,H'#xf׏ooV;r^ +,V9<(4MLL_G19qo_YYrDvo_q0\b+aB d&(Cf2gj.`ϴg( :N:d8AVFqE$(>#HYz 4ta_XNŹa"0nQNIrŖ<~趽 !7::b-gJf?:uV#޷Sc_=49;J+ tVaio`M$F,)aX+c㐼GPLL+~|s|J'-lEEc̲,8IBmAT*fi*Rʽ{67ِ6 08;+k̃gSla *y"j2QHEHJcB"9)q"Ɍ|m77*)ݒ rJ;|I 9aZup5Lgs܋ յ`'.zHV7܄qnLs=|h{sϯBYZթNQGkR&!{*ֆaP S]Xlm /{C=}RzCћ 77~MnHh4XnccCk]Vܜ "9mz}vvvkkrU3Z^48Z[8JFksW:N#cePL1%ȣXc4^#=[YAÊhՒ?Yskggk͐mS"cUoXSVm;StEd?Nq%B**Xt:B&h4eRl*[7? >7 qoo| _(9F+>|J5-k ;> ҏA VWW%3|S HJpgff۾}h4*7 1N{ƐژXAEg Phz@cX/ԠKff|st}z^h56Cl+#D+ܳw~jg Q!P"FDOzXAP_v|CI+)C83?} e@ 2A)qa2̄Su 8KuMMdT(EE -U3pj[O~KıZ&9^$e*[K#!αWFF%CHz[#QL=nᄏ}bcl6瞹7GY?/CIť={rS"b)F?j5K d`fC~ aFBLd43&&1ńcPP(iaP+Qy8.j6&g&jY%N 8S:y™s Ms6Z$b\eHQО_lf~3-J=۟#R-[Ӌks<4a2[ZKCELRmfML=HԜ3dw0u`f[kK)T̓gl/4" {4Ƅ"4CR˧ nMqLE8&z~ysCZ#W1F{M>_OQJ)04Mz) |?u̙0 !wu׋/$MnFY&l+mf t1ScS\^hmd@!!uM'MFx&{(&zy΋,6*kL7jQ?+)- '5\)C h78 p %k.ī+\>q7'@BڠGfGM9b(͈sb3v]U%S/Rˬ< Ң?<~{{}K]ѣH k0pڏ?loHD#i4ʐR% ID๘V O/E",'''8l¢;GWz\渍Q7c5 PP@ɲ/vmAF+w{{{;~???>[t߼b)=/nEb(T(1[pPu&(ž1)-3T DVQ=LhM8"ME8 %LM6{}@0 . PR 0\ hn) cKd@KʡXjufַPqWub m$2rn1C-qz")5z 0'6Z矃d#FCIxo0㚄Q2v\J孧,t".( ^_t|c3)_sO^뮻Vuqwñ)֞R*zaq!YM11HJ ɤԘ#=5Qj=:uE@p@:M͵iM6L͞l0PiB59^@˱ As=FIYQԭ7dmoiRn}s€K~Gm >MiEB%dseaf[^训IB=džgI־ zO)$ޗ>;rJP#@$, kB4۶_nh|?? Z=zt~~SSSĸ_1[_p8n;a|f~~~߾}0 )J5/rv ;i(+k% '!%Ԅrf-"0diBHF8bHb)y.Lz9 ZlReF$aŒ+)g'&k}n.'(\ICj@[m2Ap؎z^T%vy{i6iRI4{?P{P8Q,:NPf85qpkk$ bAN,$:ͽzMnLPQh@L?)Ԉ4:j;sooH;vlbbСCEs)7q} )ر=Z뭭ZߪV!Fj.\pȑ'I8p8\ZZ*VM{5De>LOQMWP4DE6RJ `He3el6'ΝUnȸ\hF9 ]a{]wXJZ^p8H0 (Ō”T:N<,j$j!{q![84:3L:qeY' }ᘅIJ3 F\P eY.c7_x&Q6ϵu9?\.OLLĀZy^ǔ҉3+⭬t]!rs蛫~YkK r<"&h8}vbFۭO8JPiڷ4-k d2!Rf 8ZIaL딪آ-,5J\z xqبGz΋~eC TDE=tjRɵTEFdΞ:sA2pR6(ӨRN!8vtau vnbiкɄyiCዀ7 R&F+b,!pNc|"T8$<"y.+ Fs˭U_.ǎk6*z&x#_kOw7}cYJJiZ;ܹs>w~wNLL!JiRZQ x_^^^H>9*Ü|N-`P `WmLReQ)ͱq82DZ*u;s ?p4\_]>`I8??}yZ C!^mw_eY?EEVJ;vlzzZڶ]0l//^!X ^ <\'/GgfZR 8XB ZYa!herl㞽 o˦?8_~RVzhsډ/+,?k +rH`[y;o(o ebcKm0ƯYfh1&I&qjJiENS}777W`(N^(zG$t D> ek0c4N{5?UTؾcSxRrRqv>3$v: {vwێ~jg]MÝ'**p`I?rC ylv$hlaK= ONҌduׇ" H6$E2^$6JX9YY*3!眂i[ gZrfT$#9)) G(\p^6uEe:HЛTtA;:t3={b:u{o^3~/4 g(Ltuu[$1^|'[eRW\ޫo;Os6**9D9TU2%(|8.I`YE0x({ok,V.VuNmCCĹ־Ayzޛr&Dj)+lmv̝"1tGHjZ"ƤƨM@)75^noh=jeQK$H\:|t@a22!R:PDI} F-R~d <ƺÁF(2"7v4M) AKK#pWѣG{7# j0{!:4nl?NZ'Htǎc CٶP܌4MKЛP |D͑fcD?nb͊ϙkj!jbyS65"~\G;f+j^N.=hGvi{g˰  JAJ6#/BYWkcka!b`()RZ͊$?-K:gT*zQ[@ *-0 f(,)˲rlt<ԡkȄk9bk80 b>AX2 Q } F|Az?"/ѣG''':ToakW?__k %4uveR)vF$I qz$Ie^ ?s(>jk}5Y#8kj/ow;{!{>9x<„F_hU WCj4NNsUZ.jm+(*Jvkkt Tb淊aJoou] TߺQs~zWC BUmmm=sf\.z8M}{<^ɧ {ce%`jVc.]\W\ϱ Q>Xbٕ_*!Xq=]ru%tM@}Q:G:{%wWA #HТV8ƻ ER(QD&GaEG2F^¤䈡pGJʲju' #*ƢFLaN#o-\` qp8b@z@lF5E3 ]*}F|#c {=z[օb1ůABֺٛh5[ ? !^p Ndyy9 cǎ ~?8zB{رcKTf@[GL((0`@pmD?.T3wFb*0 σ%fĢrwq9>*q]"鑨ԪuA;#ID2N~LONcEi e~}^Teee}D*+)DL{%xcLZޞ Q.mA뱊'ئ3)؎aZc +Dͩr@D'B0a[JX@l̰('A VOԘ ưV)! `^yx__lZB!nZ~s}cl>tV}3DnƻyOQ.˥RizzRp8F`{{AE(hPvY23,Y4JuwNa‡[+Fp3G0efy%rDdjaOOFCOO#Ḍc Mjvwm+Ilu-ԃΓn+(J#r-D2 &*E07Sr~m}C}sDh'!U( RO{ S%2 ]  FAKQVYp8o*86rx!8,r] ÍluFAANR>I0u" c~ ,+!j(rk'A s`XB0a Txo4|dmmϞݭW5*yͬ'ڭYbޯnllt:h--4}G6*p 亶lNOF~폆" À igl㉐:G@+@m7/ƺQ"ۘm,NxX$x,W&/<$`, "@FTf!]^-Y38!<&(Kҡ@Lӆ3i&n}m2q0AmP@=JXآB#ȶěpg1:F*62ZecF-iF] >6xI >"&N@c(js׸]l~=6] K.w|~#Fu5ALd(0%t#3euNlWz$aX)`v`Jis(DAgخRb\:KZ'.]\f7ypA Tv\9$y'T2lX ei"EZ4˽~:C3'Twd1&nQ X02qbRS$D36l 1}cB8lfQ+DG1D8' ʸhGpW… c<33s38|zÚ9olk,/Ǣ,]x嬭зǏ7~)eY$osx"C CDsۏ7ݨDWN2*N[)5SŰ@j;M7CYJ&>L2O6Ǐ {~N"B+Y~ H B+ j rH]-1 #@Tj<6V7U_.Q<67/Q|,)Y=$=QRRaQpQY|y)s! F}JJRdQǵ FFێhJB`yxs1Vȍo??w(˯ ZJ~>W[1w]#12v":I]Ϯ{C-Bv"~]HI6#"%=b,؁ H,Қp ڷomB71B_qM}.mۜs(!HBƲ( 7I>4j qP+ wsLJՃ޽I*0T`xa ~f@W*pRD.>?$IveW/x(π5} <$&6!F-q$Lepb2cؘ3U'JtTwKJDZ-4`7a 5(Js|c"(6$ [i^RB.1Q\0%Rc@PeK.~&*Sd{*]@0dzAJKb;UREC8@☀Q0RC--2Dm6PgŸ)U1(Jg(U zywoѣ7{|QPUR{wkkTFQTFX hq z[*nxۖib,²#@ء `E@U#̡Tw"7Nh( ̍k(,'ʌ^~H|>Wg+R W\%o ٌͥYZ\YXZV"uS&=hr!, e@J᝕޲^N kpE4/{i͟2Ҳ|Zv&5òn+8`vڅB߆l`݀[v< (ÖK4Kh0B(bG:`A,;*7ĕR^|',o`cWd7~Mߺدĉz\-˖eU( ۶Ǟbx.s\ :`?Z6%,g Ji>8dB>Zxts! ubYLGs9 Wgn,zX 9JPل݁h.b"$.S[3\e,H!%%72Cgoi}%T^af!WJt4ggi@F(_*FIREC9Ga+(Jar8GA4T5q'Ġ!àlR[~şO|'Nf/TOE#@ob|h״ƿ8w ^c۷|yXe yH^p%R\wJ@rFϙP-2*!+S \쾐$@G)!J-}xҲmʘ6le~XŽbJɼ 3*C9tI|HfۭOL $b(;oYz˝ӷN52zOXj: RbF% XT*RR UBFg93?t̅r1LLbjEHrdY,6i*5)hS?S߳gW$ty5zx≻[oݽ$ݰOǍ1GQ4551n?}۷Ϳ7[~QU9b-w19(~D `R9<},Т[\F; s 6pPmYM{HNs0tx({HTNEig=.##fԈH!*02婰Qi}n*!S l5$5MD@lŠ - @~Sx&aTfiРl" AQlrĭJU 5@6,zl@4p@HREMI`Bl"r;Բvm/|xXM!Co`;vrwY!vƁ~!1|}; F>?vظ F)B9s&1 c7k`[e @,SfFH6@e\2*=g!Y r)Z"Ú! LAԐ R:YCHNRURĦ A۬&W/-鍅>m$#o~E$F!k"մSb@5pӳL*`ŀ ٶ +W(6CA`8 X ?h)s|[!VC\-jy5 0*4*Fdz QD?C?4.ǃ7b)ۯv1^v[y6.:kA\^=Wlć.^ӝs~̙|zYұ6_WZ0"#&Q3mE.'fi V2k @h pTaq4ԌQs&]+yfąP;_X8WV JA* ,&CfaڳN>d_`bh[jԽ pˁ_qk۔%Jl*.J4I|:QJh"2M`vNIw!^ļpr~qXJ+!KWڈD[0ƿ p/ab]ם>v+_e ~~~W;| +x'.\7C"oE]xnnnzzc쳟:k?0^קχ\0C)Pv@dc bVW)1ye@5 vN@)d"Q.Õp/|mr `˭izjmm9yb։$F 5P([1WB?(ugE!g%Ro0igݷ9%l 2Lh"> @m* SY$2yh;q Y˿ZA6[Kuku;QҴ?t)ね0q fe(jqK"<e& 5Y߻b!`-8aIVW!RvmzXdʬIT62JD0c U-uFs’bTS֎ C# 28c?ZfNn&bXV2b%H ;:g0텻WU _Y!kF 'LV.y3qٻ$g~ѣG{^T(ڢ6J)WspP.čJw9nnhP#i$ ﻳ.gg׵O#( Moq\mXmUϩ6MW1Ln~_U|2$SjsjPeY &\D t v@4`B.>T8ۄFtÑ"`ೊ"[zu{&Nhn&Y)":`l*^z; Hb7 HT2+i4"ǬTɑN4$1Y9&n ~etX~UcxnizeE;ǑnEk8xcccssRض=Fn/`ciE}eߜaj +ws{P06euo&ٺB7;2cԾIĚeuqdeShZ_/Mz8E= 66T=>SGqɺݩn!O2in*1gq-9ЯrBa!p!}OobT3AZ W1`sIB\n UG/͔v'|Y Nwky_^huTzVKjP/&J!?,J%B6voS$@6+4M\Ajuȅ]9V>E&R FsN^ic lmPPȐv\c W)5%ԇ#m}<5Ch%{f?Qrdo.TǶ]LR,t @ oH?w'-(s  sw-,!nO?~s]5a wx[Aj2)ǵ 9y$ hB$$(:3~Jg`D2MkW-&gXv8/qswl}Rhi ð ƘIXǕJpOlbŜNӴH$vyHNOUdh4Cf,!W7 sdHY#sǏ_BE@8NjJF>~?Ԝ6:8^T{T]ȵv|TLH9=~*1&R2#"C|#}2\!ׂj1Tee5v:gt>xRkv ?]phc\Az@hw^?RqH )a }\m;җ;b޼YFdu1N4w[Y|yԯ]*~!h4[[[҂7ejItݭ")޹țYEMŊ-3fIbDѶmY2>4 (sWW?[޻Xo𷅊CԲe#LNspi¬P9XV#T)Ԩ \90g 8;?:ю^ydW,&5]k[0w&Dzl%w̿| xr!]ֺ~q3џ]?z0R0UR)o֕쓏.Gw6|;]x'ǧk[~=_<2Okո䩧{ǾN]~@}9yY03iep=4$(K31Y-kA3KBzqF)^Xz=>aB8 4* bUwuCKӵJf+ׂ=?0Qbis i`? 'i:d=(8ww|kT A#_qZyϜqտuWY^\@r/_Yq9_[+V /ߒ RN-t.ԔI[,Q[:e( 2*DfY;CPؓi 7%fh19ϝMOZ"9mg<QAع4:ʒѨOY8?خއp͘';[ #r8%1((%18C-4 d{ fDf127?O-{j~c{'FKFR3, тN"x/ C1QjwzQpqɭVb [`^!T?*xE])rpO*zqPS v=cGT r V1p )O/-`=/l>{z֣ %lFeW2Jza=Xm;JXϏ|ۡQ[H? ,b(mn7ӽ WV֏Zhէtiqy`)^0_~jr&0Sʳ(`wL,ǃڂJy̼+>0HjKP@΍58@"Ico0@F\R阚FY/- XIAr5Hq_8iLDXJhqH%CR<; % Llʑ©R[ڗG#ԅMU | ]a` z $gh,pHFo& 9.^R[s7{nj/|/_561>(JGQgYu)!s~xi'͝{5l;m]{h–%i&7e) 5AT~Jq'(3wr~_<9{<}~ev^/3D$C f$s~4Y1FF"595ɥT3 Jvc ߧno9R+-ֳa֧_u\{+kat =_P7$IVZvy,3<p7^w~6rLn i"4 B(|q4iVm߳ d;5۱ ֶ{Zp{0w?S/pBhb"Hx _7@k"/!L>v{h4vvR?Μܬ֫ K{.,RJ8@XΟ+kp);]NX:TAc/}/v?{KMT:7r(F8m 3$#t 8L05XlYlq Tjrt\Q*{zy޾Qt s~ JA1Qg{!ݲ? m;Ȟs=Z@nK-GQF8Ln[geJ!-LdVe=z$y;6g'jH^ jnz>nWթZ'N_qm?p2JaI MӒk}U 5\T^wbk^!=FA=c?g>no2X;wy q8ϗk?Ga rB3?w,47WhLd돼k STdn,FV"-%(ķ]@N eRsFکa \iT.6/ #[gΕ~}̴̈́bZx~u{& ($g̻{|rxYɁJi O.eo(b+œxy,E Rfc|/|[? gzg~&r)vڥooвe啨[ڷS'@QQ)^`Y?f_Ǐܵn,&O/+~mRx_|w5M`~;!ο,Rs"h*]o3@SAxOeG_>:yz- av"=0[Ru(' br(} Oϝv[jrW,.!$k{YX[29Ԡ xr;j^=+6qgDK(QZ?fc Sw[k8D8j=se䕵c3gmzM> K'-JR`gB0\J} Vg6㍑r=2.\Je`PGH4s"W3Rt!3)KAT23NZ\^^g$}͠ WڝD3LuA/pZui1Srn?X7ɹ!O-?5S}If8uIA--]cKIgI~ vOҩ~q<}9cxi+dwҒ;L ;OWv?j@9/ֻ]@zh3UWHLc\*MC R6+r'<8QHYPfV[ޱo䥝!yZ3A[5H칋UQ=q@hγiZcF!3 stVy(M3Yzjx^8C% {UKVRh%QjFD~+ssJmmlqd@ZM/\/$lWGU)cw$"=)JPۖIOXZ߉Kq/#tDZf9>029 Oq<޹vO_[o;/\-8ؿR|e/B3Xb 4`mr612Hjbs-Tl[YqG2yE`PPHWQ"g +.[a(Q3) Dg"I͡}LSGOmhDu]wGQ*Jd8 B(AA]JrϽpΰ7nH$>C$v8q۳${b}0{^o)2!|+3w: 9wrדFaB p *ZXg?J%K%+xIƱC v:<57ܷt]YaLl`|&\hQY>ِsMrk|PsLՂ(죿K~0H6I>o(\ſrFrH:ھOO?^ģ}#p+cE6óƲmeTklt~aBbaQ"5Bvap--9Ea #g«0{D:X\jܶXtQ3 E9*/AMR@SP2WN \"(#Vm;#q #dF))J9AnrX}0>{Xh59фRH;sfC۟;ua;$1enko|M}r;SzYs tlogath{8`nԕ-TN֭A+R1?7Ory]jy7EP\re7^OzE OW9P@LrLU+6:~;{yϷ|`y^yy_FG QEJF!,SԷct[hhL9ML7k2N$-iBE1foGPK0kX/=ait,f%.1 `Fak#Ll"kzHc]$Ͽ ,vϻ*A>J NCq=faYi^-swkGa) i&UCJ]<>@R@Bٔ]zEZBD=K[ZynuھGkͩA=Ӏ8X.BMS=~ATIf,XV ei?Iq 2b|!tH b)f^Z.40Xj9ol$WCqŲh_>szOMFmq0gnW۽v7k廎8 ,_xo~r{hj0qݽkW!9{Yb n +w[P ’҂ :cVm|Y羏 $߻?N8{3GjdK+[6kYI8N66MaRs`sL֥$Ϝ_;uHjHA-~\J@nc .`d"n^IUY5Xp&5g'-Sv5a|bPS2 t(If(/XA,.]Y/Ln}fch7Q㊧(-F [X_Ɇ\JRbUQ"Om6(6rRF[*mI['alT~?7>^Jf>9k i\gV~p0רM7kZڝG`L/;-%r2b~{ WhWTWPe8fj8Rd%aD)jFԡ ƀ+^cZ$ a_\MgT 2DeF*.2C'/lJE, 4W>G%4|\~ęl4L@Oڥ^GםzVHLIƯ{Upc-à+,.Eml~j%M}8E27:ݫ?:q>V'}|m(_E+ZJxخ Lc gO~jcnA)MH^:atg\87@EP!m;egF;<0>vqouTYZZDypK*;O]ϔTk75v^b - "F]^pҞw44&ъϔz&^ar'Lp* j>(EOjt$WQ:AF݇2(T[6(褙(l" x(NG1,[n MMΔ}$GpYȱcSe8>1з(7V{[n[?wbg0He2d"d϶3{ cY:?^;n+nfKil#3[ϗ'Uk^2bYYʽ,k˵}AԪБFH7 87ȳќ3N^8i1R ܙfupMnN"ԕ5ܤŸMSs+6~#?AOv&"*Krn50G_NQ8t6۫Yk=,'+ qE&R={o&&1/,[LZ@wpCq6zxy)q"sm,#{ E<%cmHf|TS|K>> e &j]JpJǷ,tQ/nVڍwmmg s"k\M 4lZN֟pz\y>^Y)\[VRyr.Ҕ`n>Z~,&@=8j [}MzF(6Ơaʡ' 3Gs@jeit#$deIANp:0duQ Z^PR(냟MXoN8,QLvhIYm}j`sBn?twy=7*Z~1Yo>֕0뤩0.L``8?,Ef üzX◊Y94nvɼdnnu+ p[Se8z㦤WGح!ʏbSBXW=7}@ct5;Zǹ9%\jՍu(o=*& h[pbuf+O Uɨ-LQu'S`#;o5^Ѣj hǎ7!u%;R\D ;_T!d9OWL<g]N(JhYmr8c&}ӓȲsc؉#ؖ([%REw c{>s}3 $Jb>Ι3_y=DfQ"rv~ ,GyR$9ӅJ=]P{ Z+#NRJEݴ4ˌ}mTL݄`B֍Q޸*W1 n v2b gBS[rDN _wKΝ?֎<֢5l~ B6UDFcBx0l=9WiGeZ@"6;'P(N5l:PNÄ+r9Yz'S.D)v4 # (y"4Щ)dZB N.=.|exͥ#Z^X~%PM!]BLS E036_yqJu( 4$HF,ILUoeu)M9ZR2 X)δ~vrd9*Qz\*|.4awc.$Ya-c#̺5X)M ]pW}?gN|І8c&F}o_>st'6m9ﻼ{p(x;i6йf 7 Yc HȖܹ  CZ"bjZ &e <{!QTA<!WA_CԨ4ZJ(475e臃4 |K: ^0k.PP*86X[}9uBJ.Sjڶmۑa#eM3yۆ/rSJ|TȠӌ9;_ 1ⱍ-(#DQRIҥ%26-]#(Q5]Kmg0LQk頵Ou yZ(>;>'ejt,?|bnΌ̜rżm͆4jg&(,t>\Ğ?l=.q=pg{+˅wO/~=TxP,*2eCC[7Mn)Ȍd0l=m&kɩÐ Z9 Ԡ\ޱܼ(C::\Q4%N5-Z 7rj?ҀYkoƨYP7Ծ'}bSw8)cn/~u˅{TFzS7$P(M0:V/ B$L8yʂ8r,4R#֠ȹug>twXm0-X:hJ9j=SpjCj5[ 3hᱹE1g~m;b)QP3 0ISG #"nA[q0 %zPss@]bEwwQ%00dwkuur˶I,nJE<}Y V keH$ybM@;FF$"p ՜+xh gh8򥢻0Dķܵ2GqA~QEX yAbD"\QyFfZ&+#_,r6KRZ}g\!ki TG2xnPXMO{B}MM8'L 4e&+R I+:Hi05 ,*.Ȉ[BJ up ד Q8h8%g U;݀U |c󋳳ut> FqÛvmCʗ<|Gl]oɻ6if9&$f-TF֖V3 ḦsZ:L4(cHu'}|yb'O<iT-@xlc|r13T}f)m|G GvNv:axקOS,%3,xK?yb\sJz+'f~猪OO.0<5  ʴPdO5ŌuPUʸB]/ #L8MQҧxm%mr͡\PvǟV_șm:QjX͈HmL_>/ީfzlɧ~"0LH2_` tv'" M3e 4]8]^DӄC XPH>4^u/%rs%gD[y9ӢSƈ{1K Mqʨi>Tpl". 'ć)uGybj[W0G*'x~x st"9f@ aSÖBc#1/{(51bR z}X$3[Fa~zeb$ 餤QW}/x K&G0 "^7E( e7vuG[ ʹ`mf3'wЇtkE8Sm_y׾?_4t]74[ra[]X:Q)Qj0~Nrw,=B[ gˮ{_v7nĬչgf7l}K,[{7ύ]mv9vx~#ܜSD$H)fvB'Aa :Rc6VnG]cuˊ|5BtpB f\Krcq`\,bM_[QbVc/6)DΡ_}xqRDq΅[w6g?W)8H1*A}C29ë5S*kE֢fj]WǪX15,Ycjf{xr2#NT&4xފ^wiH_TI>;{7Y0 XX Jն~<xŻ[i뿠0ݪᑡcGji~2.f z<``\Yv󅉉Z)˦ J4AH&oVzCfY'?k$!iaa=iͿĖ_ER7^T*!m6iǖ׎~\~%'q];AiL "ؖ_7_>ɧ|'V[q\)Zqq" ʹ>GhZ~ṛνxKw}2 q)@͖h]swq'^A+h܉Yi_9t|OW/)7aP4&!v-\.x E ߹m1A@kE2fsaaAIaԆX흞Y.o[8j 35[0Kr*%pK,HAu(kgwBj%^׶ԋ/5;eM%N:M꯰ejB*3)ei'ijzgSt UİLܞcO>r/7lq( #)UG~@ NDn $ڂMq۰mc48E'Z~;LpLXYI͌X! Cr-.wM,LN j_x8 RA7LhP)q!Q;^B^z];K##nB!k}Ə؏a?pe,6ڻٕsM3N?=xx}??}߷Gg̤YQ&!S$cFFkd: G+a˵jVхCQs֍f Cz$h wzȃOؽi*(P$c8y^|e`]<â&1a Am>V5&F^(nTt;zG*Bߏq$VG' W%24*5TIsi~_@IBPq;+I*e2$m_`ޚܚ4^K|;‹~{;68fHI\Y[qrرqCSU_Z)J?ﻻZ(DVa ,A ;GFP~ἭYҭ;wy;M6Z%.r "K{!Lڵ}̴,*س?ŵ%]vdL/J8q>=+J<<\v n>LFϧlʈꞿjOxMEuaputl7ߋζ^,e;? D)EJar1z̒K fs<`XF*Ѝ4ۏwo:|u]|ZEbE1hw"[mvvv7!qr(F̘9Kh|(RE FlePe(-1LW4fs r ֍O,ki_?:򥯏 䬽84_]f=EnARҚ1Og8.Fu])8W^{EMw?rQ4I6ONMo(WAlˌ#Osӛjk/Y:5c kw6LMn:SL͠zViX۶m;.|fCrmW KulR LMDJ lw-7Gbl2:Kmh:Դ&<| \(_,\ympPi4hտ}緭c$rnő[pn}֕cg $$Pc߽ƍ<0!L40,LRIJm }LX{vvK; 3.K+ :0PD۷Y"c ąb~|FP@$SbXNY3Zp@E򕌎43m?u ҘpƦ&"~GG\DSNaD14 0LK)C'+ 2WW Z]]3=Hu\[əzץ?rU?S:c}χ?a^?aDRvt5v\pa|Qe`b& Ij&{$&۲c) vZi2F睻ilG-. Ayj^bI 7?|\^;$A6ً۝f4Ԟ'hC.[t:s~ @K'\ |o^; zO၏=xbalGA BQ Jpb<1޽gY\)^k7Oi->)R[`'.VD z0 xF1C D_І+nx?l;}g#ԅ|.(C4MLP=Ede|Ml[)x&g e,M)4쌚(e:M'л.4ZnS> =+Ʊa$ivO%%TӋ|rL]2Ia\aEωRcubґǧJYe͌Bn?չP+ZfRFO G߸ ժ2|h[ã\:nN9O#'{g6Nn$7o+ nz.~`:96XDg8lb]De DX&AA{!a44TȍRqjjVQ.SZ~>Q+y#ruT8N\]vo!6E&,x}V0comC>qoU''þlye BĘT$01;kV1狐L7^YA7C!8곳+KӻvJƒMMIMMՍ3Çuf􂃱fhFw:V;^E-:nNB~E 7Ć|A4BiD9y$5D)1>I zƇ7m*sHiSԇ>^șb{zu7򹜝EAϲl?ND'5%YirmZ0y{d`D/ >ϟዟ3-Qt?N,\vA?dfқ R(bV'?S,]wbt9p"Nӄ78t7w}0wJ$ ;9zGcTrRipJ2{䇁fTDgueK @)1t)cwHg6m۞./}w1sJxnF|!Y\NSi:0\2XcXK8Oj]Q42h(hU1 C"0҉k T3T5g4fw6LU [osTu>zS,7)O2rz})2K!~ERN^LːuMc |啗WFkc'K@бνxi>4b[Mn؎v"b*Yz/ jTBpDLJdžG0 ZGZA]]Us_~+]C4s9HlvMDc&b'3;}۴kJ$dT'Zq$~7 abZw}us͂?dH.'/2 ~ aM=:(@*1CBdz+#$ $%J2C;x-Txrx*z=o4Q-pJ;2bZE`  0(2F6.L/G|bQZ}Z@qTɅ5QH#ŘE)*i{0pza\] F(\mYpfjhZh GBUQsbi?`J鋍UBjǞtmK4( ,Ȼ.5Kl2 c4x ^LL#Oi:;{xlfݗ3?s'Vja*c/vn٫w 񴙮W_&77b(s@SJ(0|S:Y1q4̸JٶDM{~˭voki^Ikbd~`2hI43^bXRq'aL$0 Rʰj$|-KnוaNN@ CO` ` ^oi@@*xzR?xZ[R!/z廮ta+(kxˎehp3d>#gxh% 6IQjn8Ҵ^aj,M>tRW&ErbcbaPՆG=T&$0{Ak5m cmY5uŅ='FζKI2%l 8N;xt3Բ4.S24553IB0 c]oو@%&~Š]zmW i;vKnzu{y:6arՂVJDNu7Y>oی,6 x$=|Fy[>!ơ!4ݤ ю}ڭBw|ݠ IAe 1/SA5nY fY N2d`8l'}]4t6 Пƅ2}A ?>(e$#*cֱKֈ=~u'wQ&ID[zubs1B|Z&&<^IFgrw4O=LPű ^wtF6/ j~ιcm*@RI2!v&A)N!765 ;6 ,D?7ݻ4 ~;gTť 3q aP4 zb-Q^XFzmF}/p,Ӵ 8ZA&E ]7nokי] HR.?R$n:7/weU~iwiмVL z^:HcY^n8]}]Z>xaQ,w&QYɛ6ڷ03K:P_c׌lJB82 a"v \\(*i ᧎mjjǎ/[!1ܯVJ#xt~r_v-o;V kgۖyl&I{JOޱrd9Aw_D`]FAD1&"4Aa_˥32~G@1$N,7@%3 lo]ijYDKB Saua =B-pw lBJ18p|z溛~믟E}fc>rhmeO}#ձjTo =Mk̀`6g@ ^TdВmL@8O3'IcB 0s`J 4!'a,̵?]<4ؼuak.Oa"UTⵕ|pRatGFFlt^ҋ>$@2&_wJ[=ԼOvMmh32ɡY?|zh)WxjӑGXhv# ǝٶ2:@]/WWona|zj#tVtQU6YGWeG,ᑾ]]Mbbti:idprnP2bN=/qlk:|Z v_i?Jx^7O_s{S%~wh."hLflpSd;*z/)`-6s@J 4I:Z{y.j]nGFZl4&*#U lyphᆖv? r,{P*^_-D[YȗT% K.e(ɧ'~kn>,o޴‰v[̗N<02hS)`mO< EV|nDpH%51c'K. b3d뼥"N v+˝ըB epr\IScDd,\G4e6DD92~Ѐܩ&Xps"d(5JĀtYGw\VKK 333\yhzA( 9RX(0MGzDvx#7>}{+]Lfc9%P,W Qw虵]ș Ks)[],/Bla PgU]~R6T}S;=Nm>ە_~b`TEjo?"x IcKzy$ű+2]v̄KyއzKGNm\]X𣻯l[77 V fB)P@: BL sσO>>Y lyQ?VHTEuC]p1^xĉ3#B0m+_,,5[R%i9abk!FD Kiy߼uSܠ/MKEXZ^Z?8(Rk\l{/bק?_'~z[dmRVi5);/bM #GB`?]Cp׶=;l RfT ȘTKp%gť ۶w7ϹܡC*_oSXnX$\?/S`l2SwAQ* ,pqʶa8wG~KyJHXVh%@#X?r!(|?ɻ^5уkd{Vv}e_).8gCiǗ( (ЅtcͅNZw*c¨p4{zM00 1u{!*T9숯?wx9 ُLOo?X(jÛkjٶe_S{9zĶ^#w4=?}s[wlߺaJaR@&PRR,w}K_mۇuVW8huP AY΅e \֬ `%ؕۄ 07*G#;S߷aQ5!xkroyů#7ͼe)t\4mi(vކ>[\40~WqY#g|wI""_Օ[.S(@qxE %c0+a}'o0*Zm4HlۙW-711^F.!|qkQq,G\(KsS^dkk}}pyz`R{mV+Ō:y{;6>SOѺݾ@?#b_8KL*{E;g.j"lWLj`ScxEkKݜ㜚ړgltR+b %>=Pa-rqh0(f_ҌHSMW%dͿbet<2&=l,;xPcqqvs9*eOABA@)ez~b[m8VD1 O[FFuKijj IM 15PҔ /$GiPZh7Wq;<̢cBq SVGx'=q_H cvcWo1 ж-cAaxk}؉czW(B CQ>VSvfw{e?o}׵ I\7 ~1699V_k6[nw8no֬bL=OTjȻ_6V)weBHNjV'旎/o?;6]~jj-|w CBBIS{ L͛?]{מx*N4A5+pJ$琩ep:%+ _?+Vsfb`酱!<]"iP#b ˴ŃBUGFmv JR :siWw}x6LTz4&Ff:i$eh '++KBs'ǏݵkWkl߲y܉#S Մ[6F%]WLF(_kf zkpLgPP) W~''ƫ_ MC#'@U +7Q68B3+;g~g~tzj !ʂ);+S9 LS4M@%PɅ0{dpe~~[hN5T.!T'| wBqie +h!;Vuj遂NxDvONN?u4\κ; %$J,ݴ/'ِJ#$$k,(z1_tg>?WKUQt',_ڱqjq_$ r.dM/%SEd4HiL9>IG ݓ-g4ɰw!2((jr86fCICtFv3?Ӱ 7}805]wcsv7Rk~oG4=]zΉ%j8YmgX~dRߔVͥU7t}0l۷q׿vۭ8tMk[߾6M_^c7[vN,_>ui.E749Qo|褐ˏf"gY:(b?ɭνOjHA*3(N7MOx9;@0N 2% X!+2%TS( n3q5)8)LC@eP7Z_B-y띸e շ,H]mbTjlrf& *B6g虫:5Gx(0RB7B M7.4"!hQC=p$j:h̢iF)RIZm51ِ^9d:ѩB.saBv~u ޵C&ǮʽO=}0Lq׃q~ۭm2Z]߬…;7_q #CùZ#Buǔ zH`2h{0B^dآZAw^u{T*uج Md:d{2002߀5Ɠlj\l DY Fj}&3 %I(2)W:qib42pJ) J*<~y`. RӲ(e1T `9k~eK q'Jg6^^O=E` n=l֘QeS}QFD\4(MG?狷}Ԟs) D_}3t0S%%M(Uy\ׁ_aEE]t-/ln #08`\.s%SZo|;R,f )كGG:сh0\V65z+rK!H =w}¼Z` 8~3=ЬdrcK@@ߊ~ 2uF,GZDqp)4ᣏO?} r,> Z?td32q3:CRφ^4L,^Nc|ݏ~(Nr5ڮc1UYRq1JC0~7_]lփ2ӱn"PE l7$8yL/^"?\o+f[~Q'ive|-n2Ͽ_>>;lw4Q_DqyC:}`];6 Z:- n`Zn9@4@`ׂ܄U4za!9^ޭ+t\PЅ! MU /yG:cWt͏0qfʖ0fq;7MKN-L;gc M( ":4JSn̤Cu((SǎFCkTٽ8A8_5nU9ap6BzGA 芢r_|b$0T>+' oP-˰,tl#f&;EqT!X1JJ b){I` vlД>Yw0B!rOB6;ᅽFJiZF PҍrtMj<%K Z>?1T+RRg;qER+ è{R",R&zMToD{KT1Jtw,hWN{=o $[G˗uf|B'\=F, A:d%gȦ A(zOG&_@*{ 9B(M #RX/N5o0\I3ǎo.L,-,m;w2,.-$i62m{c[KIǵr1 / 9QШeЋKł_úѴ;\.qvTpuv<I8(1 ch~o˷,Ҫ3ёR~z:wvo\{k^cb<^{ M[D 2s7%b*x>Y-}+RH3mxC[8f>еV("R~w췛ye/.um a\oZo5}R|buey%o+^C Lm{CwO?;B~`TU]UhMyԤÅE/8{ ry+Oz_IJ:Tay'M[nG`؎KA{}A(J0hZK!ک薼D"l DI|z P[ȸld6h * ^W ݒqZ}*)y1qʃ(E\U ץTt," r]j@01v-S[14MT$Ҕa{j|;߀z6b_0T@yL:}l@F>ǞXRebLi9g wlO\3 ʯϕzUv7[nL7 [Dav`ۦiBsKfwlzCojLkQ+#/WJ4EIoQ +Mj3{5mƒk*W tќ~D'ZkD%LW~K8`]n]n G4X5p*>>8e85RRè=1M mt;~Z]{`n~vGbֱ4˖+ʲlh1]㣺n|cZtu(nyƽc|g lz,#ẕػ~& X~IDATk>~MYV'B.w{ W\qal}#{^>4v_PZvG+kF9g3w~{f:u+- ;[Bo?gٵע6 1\.t†iVIj {S* ><,RqrX*V˺֬7ۡjub$AÛxro*e,ogG*bauAA^K.ot@g͜D+UM Dl(B>D/:12\9#bޢ$ ~>zsnMIFr㚦H#ODaTlt4%/Tkm>u{k9$uG )1,3ISZ^rlc5[0 X-T 9T xm cUJ>g{ädžF:~sr4?>4T.bҞtbѡ_wA'u-zoɛZR\7N KknrKUWg=`O@cF-ziX 0NnPT𒥁NӜ Bgtw_wc[kݞFmjY\vɶKm+uT ;F\ 8i9F뇽FvU%#L$}74|PW;sS +X{m/ip߾ w1_yFkyL\M+\Dt+G0JE4)%I?LaNۭw Tq_x"xEaq C񯅿?SԾzA kxv7c=O=To\\Tvm-,ƒL$@} G)5kdx!M>_ZZr!?)B<"@=裗\rRwGj? 4MNҘk`5kC\?DQj2%J~>R{}Q"MS[h_#7knh4X'_Ovoc;w~?B(0Q1/>뮻SR3{//>|歷 ـ"(_f8*?JiV> H f8hk̶Zo.7TtA159ϱT04 Ad:Լڏ\9g~IXO{__7y}G| <Aי믿0JӴw]w_^ޛ>kn{?+ 4W %RAoaB43kD3LH(& UlIL[ 2+j8ӊT2 !`HQ )]gFC('{]ghyOuo^+u;oo=6(VH" ! K<,'`/I#Ii Ś +,Lw^{1jVcQn"#218ǘj%)Zӿ~Ue7\t/ًb7}?w~? ØKRv3 4Jp #T3Zu|5Wr5*86OBi&(M["#[[QfhV0%0Ql>쌀N|S 6{Ç@'Q؇?zt xi2:^TaLG#Lụ^fqé` ,PM # nG[<+oMytGLhWfsBYbAlӅ<c t|rr'V=/3"r0]H) <ՠ k„'Fl0HƝ\kZwKixT'UJPƈ̎l tPȎaʲVBv?k^?L~g~ۖZa|S!M_!Xǔ`”aL1&]35fJ(a(^^XN@JĎ #; 6 ΁ bB0EU!g" aC?P;~^ 8h(aNOEOhFRpJJ`B@ M5cJ Hzw/]!S Mm*wW>J0Ej@);}2 ~(&ajm88^~38@ }׻Ϩ BI(d$ )8eL3!R ,$ɀ~\Itbb @NQ}}\¹Q'_Fh]vukcDR!cYEa@'  PJu{D%/%^^>F8>] }cI7]#I"°!*AvӞ(3iD Hy1BR3 M7ON cwoc-[ff6 ݼ+O'14{J ȱ3iJUfRk|GYG)3ơ ,A}<oeLfX~{95*;%(4ҠmG1iV'8 t)ZrwijN,RÉ+͹\]|յa;@XmL,XfM{82Q%HIV??xo_D>@G 2k!T%Xeu<EC? ݕIAbE*hRY1Q,$~'dC|-Xʨf2"Ti(M#9<\5J+E\i=7}ܬ [;FdA5SC^|`n^CƩ:vFw~nox[*K~Nu*ץH!baN))N~0+P"e`JuSKsܜX uO;8wǖs/4IlWb5dA6#ԏG?ѻzoۋFod{AFWQC90Dfp_EQچq4q_,[(tx Pӕ)tA4Mя4|#;xqRM3!GJpݮRiRVq,)8I}uC aZA4Xabbl_x xeLJbnێc&j,=8Zy<#HI&Rig~ch-Rn+_~n)uF-.å/׊TIVa4 5*}?L;4eQV%b I(xL5 n9/oa>^C~)ANxrU͒2+)z?zvI9^of&JINi܈cFht%*%Xn#R&\ yB!9vmRMxjv曌`n 1o>Jm3ıH; BsNGLWͼg6R  N vs5RJP v-6)1[Yebq's`:IQy-9` K~sz|n1@Br(۝^)7^Nv2RQ-(MÀWK<505];_T]SS1zn{6?{rqF$\U40mXT4e8ߏn_r|+?،Q] PCe,p+OOߕ1F%d WFFYF)('RgWZGfE( 4 }Cy9 &t~4;z?Û+hIe& 5 "c+Km&M%Q z&1(r8Q~LBDzVtU=KJi1%\FdhVC'U-n+!MT`IϱDxmwrJ^J׳Sb%`GHH+ xRٷVD %/h0pf88Ifϸ8q&S? {tAm%;aߩPP=_RQ#s?4 Jaz9 j4`߉tYG쵲m˨Eq.8箕#]%8 RKfIk aI)K+˂c?&v`U"z=1URaMCsQn䧾bqR` k1欛tMTTjbMǚj-Vrk2v$"[,}ٷ9+DB&Kərٶw|}o̞ޓsLA奍Ӧ vl%RWW4Ar3dkX(|pCI$)`p:Ra sNױih~"سn$AxhtL?@*ƞ0qmGTJ<9eqsuU(&bA,4MJ=RӠFaX[&yZou4SG)ӚĞ΢$]_4KttDZfjSyk;v fZS^zJb9Si?J^-?&ٟ(MTuBmq$>q;{y`*z/! 8f0r b,:6Rd Hi0I )(# F3+MRL'J -Wz)I J$mL,ѬlUcƆC`j23  %&\B? #iL"#+I1\m$"?>QIHJ{Dş1^mRIUKcA]>/E{"Mך^$(J)KI!'$גD} NJȄbj3zZ{X2l٬ϾAвNɋsLdm86^j~\NR-8Yme|F8!~p.(fL*xLluHk;z' JS+tJ5&D*o-_ZlTʅN.MlCL}&:YV@g+F:9ذ0,b,f$TO 3I? <-A]V)IJ"R{x!n XB1˹f ]ʔƈɘ)OzA훫:$E&{8HIk#0 *،u*Sntre(oԍ"r\GHmU8r@>*zlVS_o^_/j7p;XP spω>0r~&^;D}rS=N{{Y^eCʍw/cn7:4S"I{0X8†줞xQdHxG~ iA};YE^_jvz^h0~=]Geɓ#ij_a$t޳E~edu99F{{,d/ƈ+φ_oW FJu莡 Tu;y]}峑֬7AIW51][Q[k5,XqԹD ] 0?)RRC,NN+448Vk%daϻ0E7@<`%n( 7} @x@̝` q¡O = =Oi`O'JZVyE$cS<{*N)O8-@$-Q~ #CaX u4_\8qR,HR$a4ZN\v:=Er?>=Y+jRl\2J*J%ѯue+/?wObĀ,C̒1䑘RrI Ar@j=_?h6 ` q&8)<@:;."f v'[g-Qi_^t%eiuu4ٹ%BBOCg«u&b\d2DXT!hWhì< %dL ^uK$̆%zYYY*f\:v 痗{0E{]>wsXcj •ӞkG<1s4/Ȉsw-fJn||`eB) '8i.Lj~DLma,ZMH^.OTd0d^S"'_Gg~ۗ,')u3޴B IbBMR(c~rѫur ܩs0gA39'EVa  3(zrq1*$0X_R8LC©zx(D>'drjVWa:iӌH 4bu+XqtOp-*Dƪ7\tW1(Ai!2D7/b#ektw^^wP~Gyۂ M⍥&)hzN2 " E^TyK>Y^s}2lj'T9o@S>Qul{m?51r!#F#SԦ  (HN Ll AR"0Gz ||XO׍W{~H_5C1✛9gr$N4M[YYqG8 B%̥?#iJ-e@e]grPJ"O`;_(bLNr¹:QGV0z۾iCmÔai5OnXi53SZ P5|^ŋԑvڎ?z"M"w^uǗ15?~O`ρ,a0u&xkw^|= (E}Kԉ3侇٭]yޤċ+NcjK͇^J2缬꧀={ZQ?(֌8MqЮLuʕb[YOVg6Nx RizEG:2cEA$bi_(l 2\ f줔g¦5ġ2 }gy\xZd7 W|ٙ`&\oڝsMFfq}=}'9rp.Nej֖#!T!7I*FH>z`_ȵ$Im͙ڧX7H7&>y|cTl{h 2_ERc$E|, P;,4}/ `g+ع'砑-9I Gp'.k.b0%N`K$ɶriɹsXO[ь,#'=t>N~;q]oh`0qxe0uk"Iˈc9'H@)8ERPL\aO&:FH0&V3;oz8N(b#0wlOYOHzmz~tFNm?;54J߶A\}3[7,~=89=k,tÁDT7zu\>Ry=HOIlL]PVTTm^'JQRiƐV]{ٹգ_iɑ%"`A HbQFRl5d 6 4a3 /t끠+T<p^\K!zzI] UͥZ3^Ǿ37h1ߺӯpk6߹3_G(2_f][w=w{sIw9{ᶏiac굠QtS(YWCm^;:<8KzafeE5L0N$0A#`a\eV q9Ě' ({RD#]~;:>¡*ő!d.2R2 n^^b"ie EeH->Vzdӆ^Bk@C1`vR}y,1XkxY 7 'f>jEʳ\m4#,Lba? 6sNR 4 pedKۆl*Gm18. ҫ  -#3sfY;Vp U TYl1.c8F0#,zq]'&ܧb=Gpj/4_=B0f5_D6i"mmq+lrmȑdO_/m^mlF g:|. {jumd<Ӝ1ǂr^Jd8:mt3z,Mv~SiJ?>H]ti U"R\sqjZ-M9֩q_Hcq6ku 4L[z`@}vWl]Q`s)(qs(4soXd*$Q7RvNJHΞd<]!d+Ye ű@ƄaGI 7( Srm0*jQB (xDBlNIZ#7Wʹ{^[?O[ŭV:ۓ 'H, MT,W1H+ٶnꋂ(eh.rs|N2|eĈ' UޞkT6,4/@kC0 ^ ńz/ɋ.CivOUl9vP IDzRරMˋ7z/m [_,{ ny)jb 2e ;/M(ly?'K8 @L1O4͞)폱۳-[AҲl 's>dg T=l ^߇v Erfeo]ˀ!J&Z2u J p/a_z+l+ %W]훰(W: c[K/$>vQf ~_js_4U0 ڠ9b%IIILR*I-XcyQ)UJRʖFI!WrrcT z̃oA~ͨ8I}-"Ry9}avx@E'UT]׷/z/{ C2r%6֙b.1g\Aa_ZKJ 1nMO ;TZWK.\MΣَ>8vozGs#Ԫ!m19C'aƆب5X`R fZⅣJQu_ߦ05xo"v0•Z%~: 1mܺn ^7ʬtbȑػЁ{d X@-ľyxrW?Kv'ui[ -YG4QJTFh́feWZjڵ ժU }g09ioqY<0E(uW{l.%n$FHQBA<3P5#<(ZZ_~9<ҷA ꞇ䣻KFzкrZzxp V́\Z꽂$WTca,8!O P2&ƀJel՚ulA';v9rh\g.P(-,H2 EŶ#%~r,fqVUZ5Xvòc8GRq\C":-MV۶fzF394aU[tSv7*BQ400s R #g̟]gp3JÄIR6cfcWnPfڴ_?g \X؆ƺ4pr[?m}| ΄D{ꨖ"&-rØP>8<48$y.:4{VNMQ5=I>MUM۲փͺmC ZCFF3ԽB! 0TɦATD6v='Ǖ2/v]w! SM,7 `hbɱ?ob|%Ӆdt΂2=PE#m% # I^^=n T -W_ bb֗ݵdogA]YJP zzqbM}BH!Y.͇ǖ \̠-$ъU?xiεr@;KbH #(X8{ '5P$MBT@Gg%YĬJկBy4?Q`z2kX ܃5#-P_?tf~]y^AHC ՈMIʋpJ0/LJ1}Mu/Lu9*4vOkԈ 0%%9)W(úm!ȣd ,Ǟgt3xZZly%PAQ2Qֲ,x QW+$W?(&QA^m^_ke)Z>mTq[ V1 jg~HgL$V[8,}wR _CvìU1hk'^+}g,91yfS~Pmz6mZ|Ŋ#G'lPi)IPaZX|FN`.D^A=;{^S*l[/Ԛ^" C 5;@0ܩUAI`7W6]u!2C -APpݢHV+𶊮@S0 c!mupwK|GΪD<̞\i'6w~>w^[՛7n$e>6ei7ߠd:7q^t_jzYBiD  O^wW(vj#;!saKba)6@P _Hd$ECUYiXi,|a'"h2L"_XSah$,꧚QI8+3hdEalNf'c _|mZ^{/;|\^c46:|(ls:lnv/]K/}O~A$鉉vI HR+/GY]_&Imp7Q"KaS.@!FNʷUCk;'"HA!EM2`+별1"k)L"( h4xP"L+\DUc<*5e$1'$qan(֑C#7EʟSY '{NCzi,X.6lڼa6+~qh5\|SVBj֋F;Rz\Y 7WQ?K9Pzk_;qd^zӟx4!Y6灃[.eN g17HӤA ˢ̙5 UBD+!EPAG:LF02! ` \0,$ G<'$!yj-\Tgt!P|*):>c r uIx|qW)2cR`"/4NyO: >U!k_y#(J 1gK!Ɨ/Db\[1q* jgf~|Cu\q|=hUV+FT FqױJF8NK/q;qfBJIa ޫѰ1CθXld`ϊY;'M7`l3f[V%IG5Fנ|]j!Ø|ݕYz:+ذҞWit 0o#7Ĉ\|v쑽O?/ݬ^rcy+v-O%o>/ΥZA\nϨ?5>RIS{= vx}?gZ#=[ sˁU C'Y&3PlQHI!}̒ C*WhZ%aEZQQ|*6X''Va g5Azc[IA$:=Դ䟒0ҘO9 X#K/z板u%_[۳e3k_z}_|L*O 7Kwe3)[ڰ꭯D߽<8t >=-fr{(Z5I^ty[q%R!U>xMq0" 'I:֚/[p 1}\Ԟxb}11LٸK.䮋2/EmoZ~֮!^yUȼ)finߏz>9N |u.Qwz})Eju ( z[ ']S,dNBƏ̮J!ߟ$Sfg'32ƍ Hty~7Ngde=GmZe[Y;3b"8[Az;/笝J;;ٶ}oT*A Y;N+xm8αR \veW>AOO<裳?~g/GyZ}ߜ$ɽ޻jժ]v q\sv8?9m;ˀ謝atG3~C*Uuݒ袋.:xR'c=nݺTݜ0[z50?oV?cw1|_6|(in 5@v۶m{Bu^|YWf'BJ۽{={NeNsC CY8;C~uz4Lk[wYʏ ;[ ;te^<42'.ӟSO5J(N6nڸgΒ,0̰0ض$w=Gn^vQe|iM>pzկZwՋdgk/iO=oc5t 0-غ?e|Ggsy@2Qϗ pСUxWC-M)XHNs7c~^y ׭[wv8yƂ~c:6nW *hZL`0m쯳ѭ4MonS^+8nYlO@ʽDP(|&>R.QcU8v.R|M_mz׺޶f?n{ڵko,~aQ큼;!Rʂ?xK峪T11B #YN< V3NOZ϶\}-qv%l@`P{ïl']bo<Ͽ/U*wJťuײr%^X<Ѽ?jL>B 2%0,0@^Xb ng^[~^wxں؅k.q֍#o#8pࢋ.t:)(x)Z%Eyy۷o?x_jJi! qC=+<~V0 o&1wk^SJGyuݕ+W^uU*?u&CG+qZѣƘC|_?|#GGa)zPTQ}jd[+VRJ%IR}aސ$ 2cO$pȫYT\r%;ˏ,}VߥWǥ_5kBsOy|sBկ~u.uɝʥ#H9Rw߼;ߛ CmA6;;[VOw!{7^Ƙ(V?\vm+_8rHVn4UJi:77(LJnݺ-yѣGgffi [`R1of=Ƙ0c\Wji,9Hg]-i--Bnp?uc^B燼c+ԧW>ώs9/x lvwivmVwqr0~رsw_|}{W^|J-o{ی1իob/!onyk9nugp| Jycb`Z}jK98g?ӧVfi>kZP˿|%|sk6QU*O~?Ovmg?я/z'1G֮];22)BSԖ-[6o\:{{8_FFF21119 x$I8)_9l"8I҃B=e+K/x+^166V ؜)Oʽ{/͛꒍[oVG?J)oqwr-333۷o_rfY/~~#l7x Ç#Jғ! RS91yE ðΜ|ֳrںukөK2͗mK@O$slڴxG>Ji,ebgbb;'>Q<|9F-*+!/)zիVZz;/}OO-[җTJ979;;7qEz^Uq1)CCCKoJi PJ,+캮mۜ YՀ(z^To_uUvZrE1n۷oNt֓$?c+s?$]\|_ +OaÆK.77;??A;/}K 9nnjO~{U<,EQ

x8\''?ꪟ替oܹG/UVts`ӦM\p˭|õf5k秧9r뭷o~[O|bŊ`WRZ}/뾄~}{^$/?O_w}饗]/ٶm+֯_TΕe??رCJ4WT:z'>2YR[w:֎$IZtE֬YsС30{-_|vvvŊw}w(&$m}\b<!Xb^Zt)CUTi۶FRt̄f i3*a˫Z-%(d;%X{5ŗϾR8e52̏p,ZkYz&vvyZ/U/1pr(X/MP.`=6)TZI4yt-5QJ- r;* ֬Y9?`V~6 õk6-[TՍ7>+/<ٹuɥyGT}pS'ilzTG;@}"?ä2Rx+˼8٧{}i/*Nc=S'i8Ҿ(Snϗ P>Z655v뮻n7!!T⢓$T*ڏž/V,k9D̔?Ö uNQN埵ʞ/D!u]Ԗ׉vlKPGQٖŞהu_۶꓉5]⩸ӕJEkv˗l!ʪ3v4ڏ=/&@1%%o++?}Xrx*JY*:W}~lJBgQ?v]JO *R(,MR?l:W3Ɏ %LL2TƵq&,X6>4 ϐ= 3 !6FW* ڶ=33#8e_=7vy+z6+Oe+ 7g[7!Lw#GLMM !bƍj֭[L|AbnkTdeY;Z3Uć^iʫfinxڽo$⁕ }#7#y .Gc=6;;'O%S7Y_}38-L1ز9zKOg47t !b}sc'!ek¯>yOscccR\YB喰O{"1 v]x[o܈B)^[ `\O"Ep|BIPibܓݡ^~;nX.fe=Dt$2''.^ B"0HH 54?iD/G|0 C ż\5e:}v^uWwПi =&v<{fLb8Nѭ;P#k׺:ȓzNYLuK 1zάdy6?S7U/(^ $BYp W$Iw>̹|O[dA?e\r\ۀFV[ƌsF3쮜 s]ym`=N+H71"U @iZ߾뾠ض?vycBBעJ1"yTo"jC0ŴV};{|wv=Gl/鳟"5C Fl !G,0̖F*e[>XA};`gHR$Ib0f~o;UW]^i`BK/ob`*[apɨu tj6]!S`gPڦ}W$ݿo n !Nܵ51G,i 1Q ݻwp aLkDFQOK9b$xe3a ~urFOcཹf;xH{z׻.›n rZ>,Qj!I #Pq;Wv@ۙUHZCG("~]A_wW\Z[y>==cǎ cTJkǥYOT#"szlw~ 7.#DL390+5!(4eD*D,RCÕj#)8V jke#+.5ly뎝Y$fđNG|tW^V/l˪ebL{v+gOU"fi11 9X+ P1<R>+ފJIԢcA<^]rg4>.aUZHjAP.)Jh s /ʐE83X'BF s![c;m;B,ɉh~C-pj`@X*J6XC T0ňb`4륄JՏc<8YS$Z}+ ١}$VY*jqXI!Gؽn% k& KyTifIrfrJ5ۃvZ[1*0}$da~.b9•腔,,spJ [iP,;1 FrAwc"YHQ{Iټy$=ns>͇i&J( C(U`2#?c839w8'0,JYp=r\fQE~PeYDdтq؉Ío[V.6T){ ONu{qw=,\`}iRACX 3 nцtSɹU&DSt* C{:gzpYݿHpO>MNao1a-{^X?6 VC뙽sסzxB*xUjӹ}:qyl8oVkpZDʋ)'Z h9e-k@ (^2QU7q' í۷?z4bUoӁ=q&ii^5Hbl?z_RQjJw<4Z΂G)6FK)DDsfʑE-()⎲=(wJ#ðK!$ 8QL(Rv"#|Oz>dJ ,Ke)3ѩvܨ9 fveSzb,Ъ5k[әȇW ;aVtj_#!=8떍=we[m? 4s;#S #t>2RDeх``pGk13,,w|iσ}^8N92#,==x՗Ԃ\d cb8SyRQ+ V.Ӿp Ps QbK8Q)c$76`ʔeC߽{gH47}3FPҦHɼX݋ vEMyts;җL]6\> 8gc6e6X0!ZAiajBB /a:9==Ϸ(彞ﵻAU7J2n/j yڝ$RYA0WZ\ue4?ߵ-B)xaqhLOMw{CC/HGܣLr&dH$#V60W:L@ 6K)Rπ.{-^0g_G!Bm1CCý^3N54Agi(TQ&qz{ojRIHɰ3-xKwMaMgZ^Olj5!(61ʼ=}Sg~;'|{Ԛ4:*!ඥ"L$H/L e0hzu4x+15lWXba9R(V`^,uʁNykH,$ l,`BzRmauexG-\6QL2OLE84>7M* b4xI҅L9* )t!K s1BXQP?3͸,)LbƎ~=X[n}kcެ*CaO IiAa0 q 1 = X+nd_17r<Jj4|gy[ URKr9rÚUɩtfdֆb)7삂XaZ$TYnY#PJj#2PՔP9&X?v\*sm7ݼe7 T 5zAGmIe{~ x@i&ݳz>} w5GXVŲІsj i*{?r,˦s(IJ(cV $Im4aGG'ff_7W CS?̬Š%p ՝@.x.\e`FQ\kǹϪ[^yCn`(h*#"TL+]V)FiR:RiO{o,}a$ S, T(-@TPZ3fg0sIMj1lDR;,!yjČ9QSR33~(IT,KJeiV>@%@ VW)nT-k;ۭV۶JW|Os4C}j9"NhcVkO1 =619Ns[l);-KM:BH!^w.%YKMyt`}x)8j4~HiAݷRW^7FLitrOUϒ"+|vQ$iQ[X2 h(BhʥCZч#[^}oЎS8V^9E #N)"ZX*;Pu=MB޽7彿ĝ-i"2B3$g"7vд g f3lb~W,B"EfffnQi8Rj\@q2l*T l빶{7}+-X>yQ7[-Y?ҙ=:qfiODN פpԊ`Y-AQs~\8b媵Q?FZ44+Y[ƾ{.ZM OaLL}oy+_Z l9J0=(;[Ȝ]ԛ :Xa$)@IܹΣV\O4RZ[iʉV A40`'%ǩNۖP|x^O)lHwv؞G5HW8-y P!q:v:e|qaFC VH~ȐnPQ)m.9顔ix [*Li/!AXK%fGƨ,\>vnRd N,dd;峠24-nK]YX$P;N'2 ;SYfQzȫ^tVo>/-bpo4$֬]rl߼\;lDFB}&;_󊗀'_FEtaE0(X`aʅ%ȶpñƻhol-.Gȭ@b CF96RnۖyYP*~ jFFU0$VRtEzGoRZ Ŏceq0#Ye91ʲ9Dy'ܢapcrvP@ `E^aen#%ũTIcY@h˱333^T8NUιT"R;εIэ_9!ǩ5|ٝ LEBftXp G';(.} /yc7mS2 VoIc81_НoMOMo=ӳAkZz%#Ш u^|%,!q")aUJj8B8,;nG͑e;Gg;-mK8m3m0E}l0(!1jq!x.5dh%FEˍr{;5UC#--m tŭ-*P>@FGrΌj.ց46s8N5ъsj-B qx J؞xmYzJu 6,f~D߲Zu/gMn~R#zNۀpW*BܶߓU✏9N#wߣ{XU}-k}),{xT;~Me cPn _y٭7}= ?xtLu,!@+l l ZAH H\1nW  FbGJ33(LKKP[ F]mj;خc^V L]N`RH8S*6⻷r-?/wHDR0E 0pL^sx6Uǚ!d#\W<UqF`g m>Qr QG)*Ŗ&Jg `G3q0B0-0fV:7'i ]Ej@ pLaرD=1vx7%މVzHyg&?վ*|?%'#*Ag]=ǾZB_Œӏ m ||/҈Yd{]m tQ(Z-bPHJ1S#LPnݲuffrYٰzc Zi(cd奔8SxMEUMB P+ ʉiޖ;wl)[̪yuBdKA&.^YF bOR)pFsL9Qެ63jv޿aj*"3Z#bV&rVf+! < o;= G~'\tLs]] u*6b݃ژR|&ќA-RtJ-l˦K)4l'~}"(φGjK0*:& RC'Ϡ]2Nm2e.8E}O-3Y #?:i;as֍睻v-%a䩑Q v"9`N%<FѲC~efiZBr[N 0~1~p|Ԅ"  ^AK).M'Yhiu*Vmj,M!.PsT$)UD\T@̱T΅4*QJ8X{>q#J ^WK.F@C;%3F+9ҜSk`<}_Bېb)%r"τ,P{6wm+׬78:v,,TpQp`LY?u?Em)_d%k6Ykn۲.hZ*KtPgRJiR*L -%<ϊu 4kW|Zf9ْp, !fb_% f8ZHQ Im1ƈaei4 H@7)N9/HK`7F[~TDSxJuC^~0Æbh|1Ҡڰ+C;݂!L3KK]hIs,F,b'Y̲1$|%lB{K%vx즔R6RT!,-cvhww4:{d㜰d 'k84'֤)r"<)߿)")F P{0K@4[)0g:uQBS!6ҹI-+0Ʋ݇m$1-^ 2տ4쟰h-<{x!ISY*R94NEΈ-#e (l>/Bj1gb0Q9c^ /ew?:3 Y16F!bAWd2K*Z}r!uX5D+Hr],%T9#RPB@s(ݧ,82Ƶ\ǶDSBlJ4F`w  Ts,R@{$QJ"I73}єHU+r2̲uӞb)_lD\/ AqZ0)yE`S"s&h!ma(xXY"\iA~7a KQ,5O\ Kc#N~\[_rYIda4ڞUДr @&X^,siQUҢ(j%ԛsx cj ߕ-@eaYܤb^ 9f.3oI'G|ܧ۞&QXx`Hʲi%A۲좮+x% I\ejA v(%2He)ȳ @OJUJ JǤ)S Ŝ#}H~mq]h:vJ/Ao NrsE-dZd"&#m*06W5IܤHR߭(qJ r-Xu\Y>$]\Bw}yQa8l6|qJ6?+kwPf<``)<i Y!D3j;M8cDA A)@\9 !yN`n9̲0ZJeЯeR} 6!ꩀvQY0X3 B8 $0q\f0 ֑1rzI$Pt:4$cDnYB暐#8v6 B<7J 4B"J(Ru6(emR|2w:chbF`FւRǶegp2Vݢ񉆁S gcr/ NE#`M)G&jh4dfNvvQXvQ U5Ө9\{CZc۶l圆Q(Lَ]KPy3*B@x2S'J=JR(" 5&,ӏ2d[NE0@7Zmg5tnQL(rG+O DU@QG(xJ%<'ZO+ KL, Y|AmHI,:5s;<l~ʼn~!/$촿lR4B33IM8]r~>URVC ˮ8Fcp9͕(FxB(pqHuJIAp9֭Xp S:_jc;zaWimam+hŐS2S+`èq\ftlTεlx YYJ>q!,Ll?e_,; Wm޸nNqCspM}Ntu'|?`i/BT//*ZfAڿ{Wrdw5?7KUkW*pv<0ٰbhf=gKnV+lkPbX2%hEXƠLvvNTy "ׇJd䚧5R\ي(1YiH0G;g]Xp&}b͜ۇZ}Y0iCXC7.Xltt;y.ys-#d;5oXhsg[ `}m40x_rt`gh mQb#5;t`WږF#5nxkl0lRcR%<,1 kftb0J,WeeU6A :4M>&m{P0!t,p吤<NaPgy */@ O!BC 2$HQvj6l9)tkYRa ) ~Zcq @W,ȍ iCV= t_ [nE׌9¢h6O[)f*/d礝t^H|BjBh|hxdm>5=U DRdl{{ۇǖ]r]4Ԭ=⇱m{ag.)`疔}ﵓڵ\Pe7e,zKtB̎à*`~.8D;Mf֊ŻkV]TzTl[i=M]ױ)"01 .6*de<8ͺiۺJK%m׳]rGw=1tbM}ohZh) Qѵ' K\O0@Kn*wu/gED. רɾ?G+B0wʍbKq$M02[FMd5F\VS 3yDQf~.3=YE$v \/C[' *%go4Ǣ~<;;ɜF 2i^CTZK(~Pk/$ƪ28\nH$ kWWi&2<8[~1kc.H:+7N6`$<1CI1l!Z-BpxI#A[]hu&7th^rFSFl/~Tlt`dx;A>b^1`!<T@$-^$21,FSγbɵw3j4S[6V[}q0eWdf(n5ٟ>"\6U)@5W܄mer!41YThss\oڤEO9Q)U {B.[Ajr3{]✳N3Pcو3e![2\~+=9f\ )@\,9mM΃2& 4jA!Bu1,)0<l;Ke|uP?o_SELHA=Htk'YռFWmhn ZfF2c|{6ϳvߨŹҼ-Hѡ1 *@ W+:0kL~7lAB< J?OI'2P1$8.B1x2J5Mrq{H}hdŪuY"jȌ&0a k ߟy =>69&>X7DT0DipCl~S}wNyn?rZX㬨/@n4ʗ\z7d:9ѦةyN*5ɡ6`,aWDHE t]&B} ;葃w<6umbs/Ǣn;#aӃTXHq60wHu1Er>FƢ`XO9L*(  7e@8E]0 Z`\ CSušQF`™=U*)Qgcnn8Y:PslFD.jԀuя9™BA+=4?umiz_'ʱsZPD0 =e3wI'cCqs=*$8PlRqJvqQNS 7Х6SP"|)F |RBA FJJgD AI>)T&,jFPfƓdҗ4N ̑s3Yq5A y0X#"w9:lhiN\,! ]{tQ½]C%ksu]`ݑxdscȏ%TC,A>K(ӜI9c6 PY91^ ByT2,?fu'M쮛SAS-)SvPTY3U^j;!R:}?3K+˫G^LboP7Pq> 6{BfJ˝a2)n_~KG}(5\kpnBR PLb::op¬ Pa2BC ]* q|u%Wqܺ21!e-YRǺh j$j(k~i$l'R)By#$Ǟ;Z]k*}h!.qJjSmٲRT @eSpïmo_,!S3vMRwvdQ-GSup4R^? "L8&J 8FF8&SXC>zϠB3:sm .ψx_To 30h8TM<|f3HƗ._9}ߘB|SN'0xRvz>X7;Ow% xoU x pVE;z`VlбQGCy Նlffv ]yᲃѣ%w{]%,uhM .2/uToeVze".rA;u/mg{TC0HØXɒ&S:xzٜl*`GTm^۸=4&mXȤLbUafNaPcPJNU c`:X\Pe:h<wJ&|`+fRhS)me߫0uVɰiQ,n9Ӑ}'"k׷SAMڨ:%gYVC|mF(.]"Kxg`lۥjZGh+Siv7@$'b%^PPG9U ΅\g֨Qj˚ݭ4 z|[&WaD9"`!x`S4Um>2y("Y*{} u) |l_g_۟43~bff FR,ᔩp4S9Fhv kTe;/|鱉( rwi4m5SEʈ!a.*iomb `.t\LlY)rѝg9qlY1r)v(@!vӞVB(%Ҳ$H䘸!#1}z{_ņ f]߾qukcw Pyg}Me6McAż:CdjhnOXn֜v"n% `x~ inV_X՝T'ٳߦbU\EkCO'~3+uITu  emI4 TޕF J}܏>z]g.϶k5-/Sܛ`(Bd}g"bw}35?t[ *rKô,Q v.y L<䢶+7m"~BZ"*o+ixo]"$wX @a餕dU9WaQL6.=#*F^s`yLCB36.^<Փ!C%2Bc j%3 lW"H;t93wst+[8J©F8r+,  JehџUoo6; p5"x.ZGhg2_~Yn|펒Zsűr)\ &f<;՜-DmsccY0u۟a̬=zGMM5fZPL!?> \}{6+Sc_ޞ c4J^B۩?$_Y_RB-h,&( 6(Z7%FBd=~ZWQhaz`#߃k:e0 JBӴ1b4,CHP*=GWf17EVoL-==t! rX%CSsF[~o} a}0?oS xCo^@ؔvi!lFϕJnl~f._9܅3z,eK2G X|mms|A^GBP]e:^ҟFjSBw45U2MQ& %Vպԕ0#GnZ$C, \3NC+p7b<dm!`5cB);w$>folPqnXT6(lVˀZBuj$p-Bwv;swݽ S|K@/t!`ϭ#gh, F0lot5V w\"9c/~_|R۠7['IE(g {-i>c-^/'w1tsb'\}M<)?ŋ_xVwuiޫiVj<%P\t݀/YQ*}*"T2'ݩftI?t5E I)%2&YzmkěN~㤸re7ZLۮ?^m]܅2ZJsq8e֘`4C'ً.kQݦ{n^C'Rǣ(10!01ܽih(fEX) @kڸqBEpjbD߃_T= \"q2n&agD"ߤvrDP! )?(p``J[3z fvaSiwx<szei}W *`$ydUeR癀VSwF ǥB G(pq3lt4bkmHx3WN&R0q*M>tƕk{͂}_n=t_FԚ*tCh,QXڱ`1c$KG na2NΜ8#21503vv/]7q3Y0Rcm"Q1p:d:RC֊uZv[-v@NV [=LjLdEkO(Tb8hx* uS|ꗇS `(kaĔloo]2?"ڞ VfA5zq`' hҐax@.m4>D$)ERҮEP;q sh8 ^S{wCN(͒<_xDpBO H THٿGX@c;<=╟?Z^^zxn!8Yk^&Lai{M0q2R$`cu8I,o5O>/gs},Toh "VTh{֒2*(.\|\^s\煀O1N_knii7#NꀯfG([Wy+4DuzFNJPoƙo4~6vj?Mjm+_5_ݽ<ѥZw߮AGI(JӣFu/IA^3@:bi H,TM;Imosͱ k[332Q5DzɔAeԹ: ĩY>35WyoIJrq0]Y:$wRd^796XkJm~un:ߧޘFoyտSAo௮_ W[yEĥn-~ R)ìDDRR,V D:4BjtnRv4#|vFr"ᤷbJɨ_yI0KŚwV!fE~F *?`4L;RGR{[sFu3' @MF&G^]8v\+&yYk$AowjS)w̍ש z5fX_h=a)rz?ozNc нnZDAP&Ct{# %l1Ons-AB|I*R) $ ;q,&02k{d9 ThpYV(B" Aԅbn"NJƝ,fNvၾS^/e4ȕ)Eh]@!(y{74ϟ<& ^ͯ7jh ](ևgo9XNwrl?ts]q+& O>kdjԤ}coѱcAG"ڏ-GS?c;t͞ɬKU!]sp8m T, jf:u^H)de@g17G:O2A0NYOS i0NJa3ƨ)IJCz*˰3goZU$Gx:Ņѕ2ɍo2h:t6ycwn10Ip#MgdnnhT|uoXQLqSZ{{wz s}/UeʞRyF)h }2|6x{P-iUPruo=xsP <`ٽYQ(&$L+T(&tʷN, ifd2Nf3m[ `=|s#]BT" ET i:Px7z-mskZV9mF?.[A1"Cc2YٜRv$:*n *z5ZY|sl/ZH\.~W?"_A>ѓă9AY

B2qe55v_w}U?^= r;}|ihYIYl1Qн~}q!LZns_6w[\=G~-kK  srr i،8T :-1c M*󠬱:O*nh8~%"4ug^NneI-Ov .,. S:fKI-4cN p iĞ<aGӢ %d{]I5n5S-O^/sԢ_]gc.O8pC _ їPg/jg51*??K/vFLJ<+5Qa" ?;V;l33AׂbR GҢ'دΝ|ر(-=ֻ 7oy#ӱ6su.O YjUmrfkbtO>s٣O~=,|N TEi4AY}+BUVއ&77V{Pn߽(:m@,4V, #tkAB+i oGN/idӝvoVX}ƍY N`~&9RkwG4w$PbQOZ7;; ňL#n_n~VK{=g Nu8~rRE 膬8";Q x:'irufuqzj|J'?E<' %Q}Сy\i)p#0ܠS ˽> Y,pMzTx@* ;C+A]r-mȤ,Es569l,v6F>u_j8a !  ZØѠx%<ha-@7{`ZE7rl*8L4$K Tq\AR3$>wx21e3ԟ Wޱ<G.u=DT7"ig{)XBvo: '+E-1ǖWfXx=!tdboFPFY=;Vzc_rwW}4ү&'m9qxQBNXZQ%v 놪Zv/f2o\qYۂXSHAY~׷^mgY|nfY* (Xqzn <={ )fiFiZşBjR^Q7p#atay5DAJ Sқ 疧;E@?\CM9(uT Bii?$޲Pq眔˩+13A;CKbZ^ +]3sw+wen .Q>xq~p4TJ36꘰qGիWqyA V9ۘ꼚u,K(u)i\^C|w87wTKiѮ5 S'sOm'OO.~P}؄6OYL1rjYƬi p%0}m~ݳ+b S^u@0 A 9p44Qe8yot (صi &!Wԗ\F ,CxYRe~:M=":3Nq 3C(bP`A `ڡg!%\ԫ2$YuŢTm}X罤u='ӶάTa cQ)LjҘ$o!~lz%^i[} w9/vB*Rph5Y<Ĝ`y>dqBCQ(X@%_ؠMSiݜn3Re&EKrdB,3xqϏT2Lƅ㒬 A7b~cc|Y$R& ,.o4iuq2`/gZH}G`t e86ZlYGyZg+ ~#,qNE;^wDu\±.SzLFHמxC [/#Ckӹ@0We fv+JU,v~'IжĠ!,QƂQo KQJ0~ϙ3i65.A̠-$)*EY`UE³YQ2+LqOM5>72V=e0l(wxQ)ap:6RyH8IPkG=hZtמr9.gkqI5|s0+OcZӳc@0.hd; )_iծyOβhx4(G3;0yx׽agt̃vumgྷ"4yF1΍熵7'p\cDZс362>D h\JzٟR(t]ii$/(s8] YĵcDɯ)ƇA+4.`h k7ؒU Ǚ^^=%'"i8%ݽYhż,8.}쎦k>{ tobV\k7>{hTItevz)"|o Xtbd & ʦ:X[%1݂n;sltGq7ٍg_[/B<) =} $H7ӥv4 C -7*zI9N]TkF$d3ӳNIu= 7 vP 4b 93G]|D S PN(ϥ'gNsO Yiy>7޹)Jߋ3 Q,i;'fw?ߛjsѵW$BTbB<ӇVx2?7?;K/5jAqSwC'ϼ}o'6֧dٸwֶ2ך4Ew`JM;oNͽta-ߘn\1)'o40zzfNH2AP^Uͥiޠ5!%i´&0>b88z~f)U}Q^$KIS(lN>d+JQgn ,ty?L\ vAnǸp pz9bHm8]f67LT(S`ՓJkk gh][W;fB rA u+Sls@9 :Ș&|o_8`\;e qa'p4µ}2ź ;8˜I^k\Ggo;sWF;71v4 g9MPsGsV &2ה  z'Ϗz۩BZOeY̋|k5|D2P9԰øOʜ2\αW1Uteȱ'BډHIЃWSWk%]Ia St馃' lou2' GV]1s\OBdk,'GNݴzd%ZAjƄFwcS 9xb! ~#2s6C<eh2jQ>;{툹d=ynLtS9"U2fdTi#1[;]5-48VIƚZ~FM7kQ0σKh$!@uH OSG5# ieDZp7aʊ̙8,s!l y7I}xRQ)zfsAT_H^Wm Fz^׏,KYn1`ɍ׆ܿvu瞋j;EB\Y5'aE9h|+5F r1

;~;ԻM̑ D T$Ov=26DHHn}zՃVǛl>ـW? N`???E1S`>E_˳RC,V![33#I&5DdVI0ѤI=\޷ 鯅.|! c(P(#nAA#/@#5(&V=dY)+=@Y`&om2@HPD+FfY?db7հn|#(9OJH )ISTtV*Vխ",-j U;*WӪֵn}+ ׹ҵv+^굯~+`+ؚ Ab:2},d#+R,f3r,hC+ђ=-jSղ}-lc+Ҷ-ns򶷾-p+=.r2}.t+Rֽ.vI(a.x+ơƫlP"^m/~.aE@|W7=0LY [D"C$hpИ^/\I(V0S⾲8Öp^ AKp"$oa&%3\I0],%&fȍ x hӬ5&C@,c9.vH d0D\l8І>I' >|eYC@`0 &J&`È>5S\=۹U`Qԛ(}9%٠a]im_W׷ ,`HL̙A06-. LXa K`BmIA NwSGCvMi&VCl_0$&fJabxswJ氀h L YB9}\w 9I40C]_o"e6n} ( 1s}MX4[J_HnoV{}T(`k6$ Pth:c'"q $0񺻮s~B_w;#$Ov7x$DQ|` hfߑ2yחAQY ;{{(AFx"0C10}<8^}1LQؽOğC<`} C5ěDi} ֗ BPWݧ5A YCܦ_WC!-D !Rd[A5!a1^Cl=^[6]L`Q,U%&%V qQġ")"PBD5D֗ b}"ضŠaN(-6*W=$Fٙ#P).#36cIb}`0,2. [C(^b5"&0v!o@ 2:#=c)BcA$\ cC)-$r}&LE";;0P̣=fF A^-D@Ct.C),>C#D M֚R`FNrIb&$Dd-CAŤ"TN%UJ%:᳙EFNX^QXePI6Q.Q&$C::0 %"D#"EW`a&%HAH P$]\evc::y!eNQ$!bj"b!$ BT!B\faf&T]^D^Jh n֗!+otNfvE`W]!d^n n&uBgpX_al"Ku~Wk(>DueVW8!D[eKƥ|!6"gD^ "<fn($of!$~(VWkf}yh&̟!L!(? ~ff$a $8ZaC&iЧ".Fr. FgPb(f)uJ!4@(¢CЦx"'X$lDoRzjq}ᎮTJ_jڛnBfO%Ln*ph>BDiRmj%]ߣ~aƤ>g&r**mgI̜ @e&C"%9Bij*_bR)a>z*i߃(( @5&DBB*$@ A&šhkā>lW+ffU_[IOޗƎ,>}Ŗ,֬]-gR8ͬ-ѪY^HY-FmRѠ,m J-v-NQ-~ zٞ-B-*(ApI>)---..&..6>.FN.V^.fn.v~.膮莮[amI@Xm-ބ%n#nMtXhN..*M!j@"L ,ؖ,VoOx@"poI }LH‰/\]/ML/MB/D [LAC0Wp"B(7C&HpJE,0Nl?îc0R'0 %D0 pWMDAFALL  p{G cE/j<GV` p7W0pf:D/[MƱժ(C`F@ ox'//o w #o!1 GoD$$!'o"s"C@#o2vW,%~'#+r&+r1HXobD.g0J&V,#V20'o2;232!s5?D |/F%')_422C~DZqN险HB83JWܳ%ssW38 S|3sL(43A/A'/BoED?DiDL3rM\ttEkIg4/D#x3'/J97DJoI3>t@73N#o4FO@RkszsP4Sb6Q/N^sZɳNJpS/ V2DYgVuY3C3JC55[XoZsF|t4M55`wb+(6o/CL5Cܴe+/H46Y5Vx_T405j_?6cj3HD[]kvEV߄VsND[u_oAZWq/rvZ/r'os'tTDm7rwrvG'`HLd7sosoBt#tτ%LKDHfKChv}oD};lwwci2j7zzC@{7l5mWwhsy?oMosWbCT6(3dsGWK6$KL\7CB8wo'{w#oxxĎ8V9kHX.`#/wBL'#Pxxclyo89C\9TVDoVoxVu8N@敪|0VCYDԠ##$>sӠs1"OUnSׂX5$Ib@I Od/LȮWaD}yf۝-,K c!6҅,= Ӆ4݄Sby؁VXy=pT`A7bxq1{9Oj5΋i\9A]t&A)X6 e 4P˵W^(vFwߤ~7˗heֲG][y~vy(KX/{7oJ$ N^-̯}"5d a@k IƦMcʶ"%sM3m!j>籌9/ <2 DءAT5D%.MtK8@)DFXOWK0 !. ~|$W\H觔P; G.: `(N!=0#"'Ba "yHF:r"x-Kbr!]4#ѨF }d IH _$&@or`H8vr%#}6=vEY ӿ#kB28U2٥B<`ZsսRZ䏁EXIˤ$g Jx@hPI_gZ&&y1HēY2L", %c!2Q[B)5!f}*aSΔ5ME0a=]P%Дa E]7aԢf NjT*u =#C'EݪR{D? {% @P'Zh"Wյw5AzԂpի Y#ul5aZZV$UP% ,ZSɍ>+hSB5$B#֦0"v2@;.$b ٶ5$ .XvSi*D"KBR$M*jO"ZlbY ])vB\$|$| §/`)#:8F!0H @Cn\o|d*.-eoveP{"$/а֔ER6a. ʇe, 'fԆXp0}p  ʢH JD/0<$p)+&ep EP!HdPux}z Q1JN"- `_P#쒐 ` fb:ЂPm O$ MB 0Ȱ p 0 FIr+2O+=q 0DLp|$ @Fm_#Q&B5mqѨ$ު-G1 cme^벯 bĊ',aZGJj 10n<`%Y%Y(LK"7a1! I1=$gH(2)r1%5Zy2|j,,' 0,g"2 R+ / r! y1'W"*hH k 6 B-$ bvQ!@O&r*q' r'h"r1.1(r\(4Q35UZ%NG+H>MކB$"%7-7-'6'BG7.B!!{q.a -n NY֌R^ ^G F,"P"0}tU<2IKQq6c"ےBP:)"*W3AtAt=Z$5`>oM> \ꆱ vH E'BE"6>m DDIBt$г L"?ts *4>13S. pX \$MBoN>546A P5Q$5`>j41B>m @8c5+ JU -O Vc R;KSˎT%8bG=<6E5s(m".1!! FVeh5sFW'`2\|Bt "5dU^=TѺ$"uRUtKUR6XsXۣ cub)brQKPC @SKꅰ KS]CZG@J,! o'8` @n6tg)i>*+ [HdQ"Tv0Ffi&JjV:4уeeeԐ F/` kܦ{ʖ3h0\63kJfvhKYk` ^%JΘkl7s,9v!<dEv*S~g}ss dl>>ÄL4bq7wuW1$@V{@Ɔ$;cE:vFK|<D T[w(ƄW>4edokr=wE^u{V$>u6GJ'ATUbLJ$`-M!*@St>;w[J3FtewzqXfx6@= L+Zj%vwMQzw"X>$!|ѩd8=;[*Uz"LyX7w>5 \7sq$,Z|;X`5\, $,bChWc7[_$,!zyB7akdȬ >X+r[(AYFY͗}x SFkwblrRx)#l c'bpQ#]+%aywи:Ȓ Z9^=1+F[(۰0$TH@u?=HY+L[5LXE"ZxsVT1QBJزJ=9+[x(awt6gf;yd:=O߃ :0ؒ::tX*ڡ$ ۣZX!@'Y⣖ [`nB(ī@`{gF#B]h-B'F$VZ(,q_!Yi;P\]ZyJv >tZ+x:\W by_:%Z Z"*@ =L{T6G o85p[ E80 4z9%%`> F>`v :. >` :=  `8<3@ [ {"@ D6`px۹M"r dmOB۸[+a 7;+=v;\䥯7D jx  @烼[@«$ܻ;b➬@¥@<4@@ ֙`9} r[y۷[Ņ\ : N;W_{"¥["P[Y\ə;#M"ڳټݼ>Bվ@8\U!8 ܩ1$Լ]0\08n`ZacV;)doJ]17[;nM]}#]0D5*Z.wa|kΕ@q}ص@`0ؙO ڥ}*0 `ۉ@{y'B@\#ѷ9[, - #!L}?`2$}ߣ=>}ҳb9 ~!>%~)s`Y7'}=~IMك@`A@vCYamq>u~y}>~艾>~陾>~ꩾ>~빾>~ɾ>~پ>~>~? ї !?3+@TO1?59?b"@ ȽMQ?k[Eg (J_imq۽b.[&>(;+?7;CT UJd?P`Ѥ+"PC9ٿQ 6B$_"]bb <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν< T@賨,@$ϩTZ5֭\z 6رd˚=6ړ8b>X老m.Y9͜;{ :ѤKN<큅 -0Y ܈,agIm8%RO;=ԫ[={n6(Z``N<2 >Y-Pq0@!.Q!rICsP-`>aNHay Vs)!_?g&urߊhH(-ĝ[CXdBIdFd1=Pj-V#(aeQ e(E5c Q)ߗJ grIgv)aeE]P^4IWv L#aPR@f*k&xni~ jJ)|e8N.wQc ,@|?X"8[ ,) l> mNK@xLl˄qm%EA$ TAPY?aOR&4[XJmLppKދ4Ot"D!*XP@M p'r. s20R[T+7tOnqQ?'A =sN? uRO\7O3: BKU\\& T wrMw6YpM_0@@AYhݶݎ?yOn7Wp?^撺8nMyꪯz.×ۄ-k1O|h5&Ԇ"c@:Ao'~O~]ً;δ/DB4kQ4^=esOE o~ "K@xzh@51[J p?H%+ Hڀ6fB H~X+5p<o h ~-A$!cS E,Ї\FBn!WȜ Lڡ%6LJPEC q Y@ r\L24 qq ((XJ1x ax PrԊ 1d  2b̟ X/ `vDq <$9H(@n5ō7 NR:>%JU4LD@])I0p.f4 [:?*O ԩ!I+B́\JB1{]-TU "`&9jPk-,*Vϊִ5N@Y$ibo|_8$t$"O"^E<c : )9Bhvܔg?  (mi%Umk_ vmovo w-q*wms Jwԭujww w-yϋwm{ w}w x.+x n Kx/ kx? x$.Ox,n_ x4ox< yD.$+yLn (KyT,ky\ 0yd.ό4yln 8yt h>Bf_[VQ,ύ]XȺ P&#H C@ : bnAZ% gӍƠ WƛD^@&j#{`\cA`4_av̑-  Rf/#ov "O?H$p0c yoSQ]%] ǯMqg:  gc@l5FAsd+dntXA[T7l\ i[.ӽ ??򤖼Pm,NH.΀j# ov P1@'WzE 2?tv: @!Ѐ 8`(>7tx3pQն@tq}vxz'zc6{wUA%XPXQOd"@m&&h ` _wl+@xB pa i4DXunrZWjPme`vl)PsG؁1 hi huIM~ 8pCgbp~ \(0JZT"%aGD=6%ʷlW~0?wUx7GPmՖl Sxlh?W}|Zȉ!hAAWl(pF`CX1O Ҥ(<&rY Q >_wlXxS+slxx֋'pqdliwa q'A'pu+sB. эeDE ŽtȖǶ!qY*uyl{Fz;l\' MylYrȖHS7 qYّy&A( a;n!HPm/YR&bV r%w |Wc`z)QѓAXHJyLYmO 7fն!Y Q #a Pl0OT"US"-Y+"qu߉ !2j_pf8r(0^m' JqVRmQFw鹞ffXmV/9@ A l0=t0ẍ́.+B2IQ8IeSZl8@l9PPmBJ@6Y*^ ᙠll_Q QzƠq_IHRڤ'頸Ymi I_wɡ!CqqmInAK b/"/$ORx &x$7`Zq'g x(WY]QzjGqnsJv*ا`"-Ȩ 0D$̙l,w+rD9a'?%|9mʧ/q})imsuGZɥȶ|rzǁ! ) (F*inZtA 41jSlG6{l8n0]`A2PmYprȺ KǶ|KexDzlI@F+> BkDlb{JJ' i NH'[iqHZC %:Z,{4Sh˰ F{' h``ro:P;R[T+zZkl (1 kzjˬ  y{˷U1 slB+' Vѭ5PSL?aLB.0[2 Rlp&&!Luz˱Plйkq;漽SG˶V+; &q^ɜEdfh+Pll̢;Q1̱q.)v GxU,*q{9Ȅv &iI!3<AtJ'ͦN9T<|aGa畲hi8Ϩl5a1 0GNt<qoQ+Aze<ÛpJ|ǿ><M7-6 11,Ks Z]Hj< '  qVoPpTi|lW:TР1d0}akqc|l~ДQV%#ғpb +4ڬNЈvz=BAK61/I2 G݊ځ ( }L?Qڛ܉b םF,K !%{lɂM] ,0U]4 >~}}ڱ{lpPƺצFZqax!,9Xm= j} 'й (PעͦL@2Vv%!-/:LY݋;ѽ\>zԒkaDL !b1+b`R j(7!["mqnAT1 $ +-Al yDXQr9L.+=}l1 ؼ:Y’n*xx6=<얮)q<>^l@$5DFlt%$U`6m `J (%Ge盰*s(Δ!&1&Rҙ%\į\);lF쎩r7H l3 p!{/p_޻?*Fq*EMϛ$¯G#r[8-@^ !}ĢwJ Լ .SQ qH.Y +Pnq*]2#a6sqTc&k%C~(~l.P?7u?{Gχ}*Q'1azYs+%5έ"qC1  PM`!a/d@}{P`mfA 7% 80@ .%A8  )1@Ɏ HHb"Tِ d3fte ZUYnWav9Q,d͞@+6kqy$wn Ag+"HȮEyKxnݝ[npd]VcԩUfkرeϦ]mn'=ioދ,Y2g7sYԻws4t`! H|I;H$)$褈 "1V+6xpM)š:( '"I 䘈J,ZP :0C Ma⤁4%b@M&Á*>Aȉ b'&$.!6x',':'170sLZ\ ے ./P9-܈i@ۡ#R,!Dc͍M*8S,a'A$lGuTRK5TTSUuU9d8ڐuVZpB 'ͿIqb 'ؠu88K֦#H>.8pR`I$l3*FEJbrtb":ˁEݩ:ZD Aʉi-~1rYwB!-Cx[%Ȁ6&JVkfވt^Ha.kP3\@?b 433/$41d1VkP&I)μ:CZq{oom8`XUܸ]kLNqb` 㤣κDف )!Zw [k]V&Cr"d~v'dZIz ZF|+Ë)ۆh "udKj h UeRVr|`:=^ 7D < j3DbB0ּA EAw4#B @ U "p :4~ C 3 ` h@*U"1  PЅWt _E0Qc!  !acojīFsl 61!4E1uaR e$U|a]Lr!2& Ɏ0L*,ٿ8F5(lyR%d)ElTc0ұJ,!$%(ddf5ö iMpS$g9yNtWH1eWm r:x[IYLf'VƑ pD$* @A] !@2I+# H(EG!&U[fDy @$Z02&̜EFW0*hL6ɲt&fe^Ե8USjUzUfUp4@l<^}1hָOU;(*YA3&,*/өU'wq%iF 6Z!/ NI"ToFy@HgB*eBJ+TFF %2rșnUa @v%nq{\&7hWPLduY%(`PBɵklT吪lU Mw'5WRK& i.AJPb*HnrP%TYlR=v/ˆ !@/W3I +h{Ġ+nib3qm|c8!h &TĬCcp׻#.lr\irI8, HV&1?H3 O a<"@,S:*#V~1*,W&Y6\˩{}1AT+ WTǓt-}iLgZ$@ >ruKgDuOVH;2P4+G 214립W5Rgʨo7!!YҕůU8LkyNK˕Y9& 0@S!o]䗺 i|[wg bFS~&6MlpUoͺ/iC̭vٱH Y. x^Âk*hkcJz[ޣHCN=:E| 21_Bwxխ~ug][$ hAѩ;G:>X"NuS!uRLjmarCʕH`QM+d_oB"͍[>7YZDmj@ܑ@Tǹ~{^}<'akB*9j j?+=/%wddWtwL*m`ħ?OW7ͫ2B -ų0)[˰8,KģCS=#= @ @@( !;<͛cqs>6P٘~9AFH?/$wSɨ0js3BcJ ӹ8<?@{r <C;8SC @pd@C3Z`HWy,6xd!(7T,¤9`:%|X/lB<0%N+%-\.|S `Áx? B[I î@L>o#ChFiFjF&x!@AL8pTAڐ󧝈b:ak®p(ٻsDp#/ULSpE816xŝtEƃB;9d\vI/QFLI\IE%(D|qLY6P&@ TG]rT6GS|%hS[9P S:IE9͡@`piH= SGE0Z vdM27RlTTD9M0163 ^Sk DS(}Z <Sc=VdMVd]6 A0''I&XD]}:GH ˑ Rt i;%u9JL,=T ʓT{W[d) v"HO8RW %9hqR%M+*F7%:cQPN"NՌh[ ULRPO ΃H5Y;m `6uB`= g©ɚ̬ITfqĊIX]fq%p6Y%3G^`cv1TyR3V\yq%iuUpJd|B0Zg 2F-W+<݄MH-S.3 c݉Ѓh`Ӗ Hq %Eߚ9 -/5!&UiCXMp9h^LNx\ Yf-ś :l:SWRd8EXsߊ>6[}cU^e'.1%>mjSUf[9Q%[%]~˝Ml2KM] ONj|mUi=>ʈpfҎJ;Rg4 gEHjڋśh5>1]CmגRkRdߩFhԈŝK/ ;,I':CR`~=2NLh4l֊PB'Έ'sùݜ :[aa ~U:ވVLXb0C=c#d6vt,*dhiRO5uB t/40oIOucr5ٳѣ| msp8Hq'\ s13`y`tGnl0&fF%6x/KЫIJ bdbͳ Vo{A6.3!O֏X^ 3"%K՜,\տG)vsArk`{<HEX7OX' NP}ם߄7V?wBg 0Φ\$p! NJp"ŅK\"GA0 9@G@!Yrb._Œ)s&͚6o̩sgH&~ *I9 tD@*2 㒠68qE&]Z)TT>$"tB!AA@q(MR4 d^PdP@L,`pEPbx3Ξ?-z4ҦONz5kN|` ŋ lLP< s(9l#Ѹ6).yb'2(p2ǗdxD.1 <,>qI4qZf!-2]I֚bM'e9t`IbvmJ#dbG(>$D0DDb FZG 8[}*$D@SBa+.DAp 9V!k٦os  (MB~ `7-B,Ws(V4I%8ݙBQLMZw&PL4`@s('V $vldA)tH D@W2-2D^QgМ TZQDٮr! =Toec+Y򻉎 DZH|o՘?$B"tBdDQ10Q\7㜳; $m,1/tJ :)4l@L J8+MAQ6_DB4l=S tD8f#D{wJ@=S^g7&xf/<;q2-,P?$qD=G[Pn |%M"D7 ʖcs߽߃~n 磟kb00DE0tA-l~2~(2;Վ# p@UM8S p@a#t:03H8!޶t1B"h#|0' yHU"D\ !Oإ+R$|;\0K_ej HL>qȸ%gzԘH]92{!hKb2$'ŧD&v20Et3s!"Y(31R:$>'1L*WVFpBXZ΍, 7J|pdAL X!@M8F# gisu<)]PJ2'=i{n'?9SV% o t2  $@Fb9]e1͋CC p%!Oϗ42)MUϚ4O̦ XKLu}+>jSh@vfd{,`|-Co!# g{w9Xاsv9xoA]O뭄hBmF `uGPerGF &(F.:_ ` T4YV8GpYy b$` hN N,XAEyל1PPW؎@ t aUAH(E P/A Ć g!!С`!!o A @<@͆!b(@!`b4@L"  '.b// >e0"c2*22L+MR3ƓL1Rc6j6r *\V7^RS|69c:q:>;c==zJd`>^!$? @dA>rD(A2dC:CBBPdEjDdFjFrdGzGdHHdIIdJJdKKdLLdMMdNNdOOeP PeQQ"eR*R2eS:SBeTJTReUZUbeVjVreWzW"M$XnYe[0,eGJ,Be^%lG%0l%$e`f\b2k_2PP`QJ&eBeIbPcfhUCA0BjCkf0BLfjfAkmfnnnClA#Iq'jMxfVhjlk's>D#4wCTvbguC0l!fDtJuj'zCx&hg,&`tF{^tB8(FlKfhA$t2(T(e^&dfnAd>h@Am VM~FB(eШ*hhB8Ď"hb(" )e~I(" @z闆6ij4jfȨCt)ĩfΩt)ieihMTR{~ƝRfi(*0*eAij(iA*LDJf"DZ**M@Fh$+e.ɶB@x>"~2ALkFɵJg뱦L#uaKy''u,|_H&l)Bb$ +J,ŮkJgiN(ītV+M|@hDj&ɪz,BTj)Ύ*k,+T¬r,RbD} ÖT(΅Q-|D|zA^*hph@(<(ٚmmЭtmj&LHA (en@l nff8nAޒR@jRnnBBRf䶪tr\@KHvK(ZY!H-Jn(hgB@~oj&R&/otgA(C'oHK=oX|HtJ*2f"#LtAtf~&/K a0e ǰA8f&A/AHx'LAhA &4B7HD,LXs1[Cl1DOCܰRjI0묂*LK0i1߱*$@tlw?;1KDw˄#$P`oH 1H^b0Y>U=]p*WCtZA聂*(n4&ԲfrA!a 3e&frA0e:&l*'/(/n.kʂD3hDh>AH3G3eNs3.jD??32ACAf r꦳iʭt~Cts򓺳KڲA(t>C>3LLp'A9@ r=2<4Zt0KKtbAr6C4DQkQDRKRDrfH5eR&Xfb5ZCfC`<)hsAt^@n8:S:c;D6)8Ft5|uXSXIaRc#cguElaHvUSvCSErAXD`D\k\i];_?_iad_KVKKo| H4=ݴC57qMQ6efAS/7=;sC@ttKguBphpwoxkx:DaG&4w6H5uG )lcĦm8BtSww'xM,xz7xkyK'z7e7DwC|tvAȶv*\+|Kbrn#xxDUvo%ާpSq#"-B^JΚKfn1S0k7B,8;CGgT94yp>yJ#;-p /7ZtAw8u &t3Bɝq@_9gyElf:c9gCEoA C8BC$z/:FڍogR`F<AD 7T DMB 8AdtuC/[”yA:ZDcg+h5p&q A Tq#l8+nWK2aE,CkN:ٺ_uKt3B,}j6=>Kգfև֋9}?6B4C4&u{R3:\A7zدfI_>ׯZ8C>5Ds=Ex=hPӧo W&fAS&Ě+(cCDG_k}3E @=_%!dD|'|A t+@VMDOfVgPjTbtֶAXB!64h@U6tذB"",HPdH#I4 F*ti  ,zyg= }0j%8Ơ "ȧ9d=9K*pmڳLȶun\sֵ{oj'd B:Qpb#ҁ}A2sf$-)ZI6}5j*Pw FF-a|t9qDx0iU؆"0ZP"ÛWfS#d6rKcт#?Ǩ sCR2kJQ:- 8pFt[p34$K lҵ}Z%T/UbY-\I>Ĝ!pB0v]Uٔ7І#x o_[ЂiARq]*sӭewE`:Ng*~ j(:g2FK Zfydic@vKQ5%iҢYdm2l! wh)T,!݆ow\'k <$F.]Mv5F5ܥMG8_ƻ[RZ^nn= $ I(LHH%U vW]l=$ ;tyK*``M(\)DT "ߓ`xe>#QB4 N!zp:֙yAfavbI6B\ODXIa UV@<'ֱ!e157 isVl焦3":4H $0&bk'k 8A ~k *%ٖ(ܑH#t%h]lX0!LbKpBg]-'zt"g%ҜC5280ǼI8٠>v72bR3.Dg3ɆQdmX؀M.LgBq%,h.٥"$YBA$sb%| #0DruCIQ *H\P!S)'.xmN Q8RkR"$b"$B!O(R 2T+$"ք,q`@XceCWzEa&lY.Vv}pYud RKx KXY`֗L`MT\!bE:ЀȚ"Ѭ[9ںֱ\e͒  BWϲӾjTT5E`C$"e  $҂4AͯP0uNQ0 N tSͤ-=N J%m%Y^Y*Fp6eUq&1,Y 0$mX>GN Y `%9H(El ?U_!hj<˓+8U6H@<6IZRMu yڻܩ`09$japI=$RMAڰZ+mW&u}0D@(ya-kŃH<sk7ɀJ6Pg?l\(k*>;̬ Dᐠ #P&,a g`'vK`m`;] hF[!"SjndFБNt&9>h2$ -@O&y@<5t'27iIsC`G uG"W.p.I 9b,$ [aYYH-IY.XZڻ<)FRyKGej5dɆPR%J1dydAP:6M T]@oFܟ{ K}7_;mJ.I%붋SwۓL +$KefP=@<2"M$>dXg3[rD#ҿWfAs \W_bK1&J8ݛ,7H4!D!τB@BM@*PD-j.<:^lBxœpK Mm '-|m3*5>$4HbKM t.7P Fz/$ o{NB"OŬ6!J,: s.,0¼ ٫"  V%$̏l$ˮ@@όN{ 1GorDB{`  O- Ϣ DPFт0 C/ Ab,D.[,f5L<.<2>bm%8༆%,!d6!  ,"<<2o1@bPv#>_%q_de+.81-O+V,F N-8bj\n @j~pTA 811-0r`I$b=n$*"B"MH$+5!1Xe/ȯ! , _ ӂQҢ8e\nM.p7)?#,#1X +R,V$-Et!&1k@J zqqҸ"  @⠳Y/ .JpM4` $0"1G`V2[1@bV25Q1p3pA z =@LL9D!7<& D.aؠ:p5SS0lRi +I*7hm E!B%"''E5 b" b 5.a @P S;N(uKb/o3ڍN3O4BNs"T]<+8NbRg$xS;5 @Q=0D6:ZB1M$@.'C1""BbHb̔L AGN&@44BBpf[-O-4!6>+KCr|#W![b!5D"ذ@5H?"(:v0r!4>+ %S Y`5`Gsd^ b!3Ԣ] :ZSG?hv,-vikq\j CF Gi r/Cs7FE'+b '$ B67" fACbc_$$UE"zd7!puvV h& \olpGZDhEBfERpVJgQcFv@LЪ;0iZ7,w{w3Qo Bb?"t$hyokqjBBB@ Vx%ub$DB"WqA7gWDp" w'|vDB\;[$̷^#!F7$JCXO+V-dwN$L7Wx5x 7 a@x5=MnSأT$yoC5T%2$WwkWu+:\"}y74_W$rVo-N-f.q!6x 7q &F.ҷ$mBL3_ "|NU5 RLXJ 9 4#$V7FR-`uQ*,Kba'zKwmX[GdK#ES9'r"f ByCB$,J7|'8- "ΘOBvxf☽~Ձw`+#aQٜo>יC4bXtB8'fEI [T$!7]B*&yiVH{l,fBpPxgE}v$A"dC̍+4i"GL-U-:{:}"g{S"d"Hg--8$zqY1*I2tV pI# v^)ӆA΢؎bqY©;- WxIB{2-'{+ա "Dz$9 ڨ3[7;G{ n.%ۣ:-$ҷus$''v²3$GBpډ wq\h"A"L LWi$B_qع]"Ab⥍T-ZR_H$(3O@=[כ۽9f[+Bb !HdZ]!&a8Kb!h"␧{GL{qb2-,}{ XqGbՇt?|H`>Yrȃ\ȇ\3$ldOSd%,>oJ2$$֮A"eC{>/_8'(S5;s;K"tq @,zu]wq,<+/3 $NUg+B]G=Ycr1Ce2o-n CBy] NscGKI5u:o'1ܢqB{l=$"P3sOb(p{_|Z]%ɔGkݷ2;5㽧\?=AsDZ{۔<-[$gq[1PZr:Ak0L=|SK 8E"0ϽeK#Y z,|\os^M"GfZqB"aʵI¿[ĕ1꯽!8E-6m7S-:~]K}E=n-&R[ >IezL~ ~+"O'gg!g~$H!n{~b2$7`--a+?e!D05 ` _?rZ痟ʝU;h9î$._z$}u_ׁv?Q?b$H lH&c480DB"1Ǐ C~<@ I @TrӃjV₋Kt4 q@alsсЁmLӫXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx윋"k0괡Z󩐋Lj>ꢋ2@C9ŞV檒Cj(`\,}U&jb=TqUR(B)}'oVn"8hr b˟OϿ(\AUFFY!]Al\dd<]uDB D4B$aBŠB 5l]"E)TW&SXPprOq!Y%\M^]JQGu VSv mgP uT8ъ9y $ dtix|矀$a5@yٚ[Dp#A%dWXv!ftU5$%uvc:U[JpD` TDd:@qǤ:uzjuR%^)Q)TS]E *k覫춋߷ >AֳD^=mJ˜{W1YC(ˆB=pBR*_6Չ SCF<֧OFWU֔)Kь\eK kL7PG-5| *kA:K#\Diм ѬճIpB1NDB5JDsWYD\ Ud>jsDErĦ0: @[ Yn8&Bk51iO]an!f=107UPP]lYSS|EmEIO("894~&tkA SHRCIv% aJV ɒpj"7(D`aN6.J\(Ea\5!PND}4KpY9q$yMU 8Ir3-dA7ȉhxc\@ٺ*pP"y3"f2%8[ ! yk7Bf)Y5>T*^!#FʖԄHu79X}P P"Qr[Ȃd~: 1L,iA P@QWOExC̫6D~r vR%.;lO,~72hpAX7_W-Ql+,!``\{xr~V8YGa?%PG g2W *R|mK4)WmL(9mNPK~PRhH'pvwb*f}We/sWSC7w_ HgXH^z\q^(Jc7.yj5\pP,!gcw^qFK'Q,QX}BRT8uerQ@[511l2L 5 su/AKqZ4GLSxȘ7 |,Ah eq]meYvqmpggyz3,7C8Ũ6_ q7S'XhPtb5(|@F7 &Q)ڸ7tQm-K[`Ru8:\*.,~ 煪'E,A9JKI[S8Î!3]q^H}2u2͔S)ah92l͸xNn= e` qK%X)Xt)AH[8 ʅcU)f@ 'qThwR[ő 5};TsZ2 mN0wig psPjx:vA͹L ) |ypC0K-^ՕpsP6qМxBEۇ( omw%Yy䞯vsiTӜia Q=W1 p!rwq #S]Q2%~($qisр٣>y4L`[L0Cj1N@Kʖ)1O:H(vK0j؝v5J^ ۔KjϧV*xXCoj PhLEj3ulA|c*JMcr\(r.V9 Qym u `9}MSqsڪ.t٨uz^Q$jj:&qaet+3H:zS2TQ[;Uw"Ë `: 6ٺ:dYsV4ǚ :z >j s$ Mx CkV1;$[&k{1R!#tQ8n*L*<۳>\)h4%qT^UQ"+R;T[RVKU Õa$DZNYhjFl{Nsᵦ!EQo;+ n[ѴUtZA( `a~۹mq{GzѸBq*6`KV{O;[x{wtI": 28+ۼΫUI<'6cuT1XkTQPKқ껾 k@PC:VB:g>pJ|Q LsѻOC$\ HBSe[8VY\&|3(.Śqw} 7Y+>ǥ@l.7Z31LÛ@BC|XєқT ()9y1%T\K t\v|: ZWs  p@Пc4 pP,1L5^xɜɞ6XѐL~*3ɮʰ˺`B{L'[ŵ<\ƌGUc]H*||؜M~ h ̭2i'lڜl.ZN6(pG,d< 0= R!  ]} "=$]&}(*,.02=4]6}8:<>@B=D]F}HJLNPR=T]V}XZ\^`b=d]f}hjlnpr=%MkA *C KzfaxףL׈؊ us3hy ٜ]B\9ZHrb&٪ڬ gd2W9SwSaۺ !g{Hv,}׽mU p p ޽ծ %f(daMM7qeaRSC<(DoU0I-U1"efMts.hQ qr1,NȌՌ!),º_}|4 D^}U 5Nڸ2Dq{.ߞs>V},r*:4O?BPO(yWD!I@'!P„lbpNB2)8ƍ 8~@  2I X(r T. K0\iNNJM&>`xiąn*AE6' (̺J"1*E $6u%kݛeljN:Siz# $SO?5TQG%TSOE5UU͚UW]]$%)[5 [տTYbp~$H0E)b9Z(bsO!= 6!"j#l ]C`*>v]]!hb8:8fE`ȁ|t:M՗&4n5Ij p%Y\j+VHT(R@|b?%}`U;l&lF;9d8ڀ;npB 'PI 6<9焖,h%R"ExEr<"X4Vi2wJZ"hڄ\h[C)(7!SZ.(Ivpȍ}Sb)>%V"kV ({ r!nX%]EWm秿~?翧Ip6ͭ sAS N^6bY|p%6*q]垖zTS29szZX K @)@!{:3 "^A#(t \[E*L= U8L$.7G:юwcG BpEҐ ! Ba^ʗ% D (` @ѧ)$YX0FEoz|r;Bp <$H.R$jvfG)<,?ʞiBʘ%'S\H|T&6zh%չNvӝg<=aRHDjCaC D2/ZLHR=z a^Oޤ清`DR|G!l 8ZvҥGr.Jt1@)^J JRdQk Bl&dq )(u @ LjVUvի_=LЀlgONb% R/c C:2s|[FUdsNDؓ-_Y<'>lJ/U2QoMa#%s,V%jA:tR D^f񭬢y-E`Z,`np;\׸|X"#޺(f1 X,d!,Z̡ch)ؖPJ0 l$GpNڋϜ!\'F\n,P[߄HvY|GMȋE?zҗ_c \=Q$ Z ?6-^׀~;q;%ld6t7Cvڛ?Z ~qi ێ9h,š8C.USL$܄K #X‚Қ 4k6u+R3.$)90$"2>+8$b4cDƲ&x!Q; 8jTHR É/D8A0GaDS ǍȾL :h)L,;B;,Ă]ZG(E{D"kEŲBx<#pZ M`LƌȍȎ,EX%p+kj$6P&ļ8hj qEHG+K fPp`;s$BI[ ƦByB ʦXڈ(9} c[s pbt#BE:9$H.mX4žD˻˼K!@i LZT,:tLIxwAF~ |ݛ8w5sz,9XJǁ`# l DEK#lkB'\["j(m-rd% Ǯ{\T5 BjOd9S̼2;xDNCs,%U~R؈L-=UU2i bBӌ lCsckͰwvfvcW.=61 tdh,JagS䖋zW7kM[![N 4\p $OY%5(O~hyo&Y+/,7/Ǡ+& qo0pq9 @!h(B0>Cmz$8t"R]S-ɏefOd pBCWk+gsGNEZľuARrl0o-b/ 9JCIdzb'g8itԙm 0ls/jrZ Mڮ]mQLղf?Kt6tEdVvD6tوy6Hp OYH31H@HyDP05p֔yyy-P% y߄a2/y7803y/o/z?814Mz{c'|Rw 7ncXބZd)rXؑBQwU? xmx!ȟׁhN{d\juh>*MEh}~eXoH(\E#H߽hf L?2 a n 8(N,ȣM 2l!2ODF&A\gFƂ792Yqr' $#d:w'РB-j(ҤJ2m)ԨRRtZrzD2jv+ r 'V<b]a@Vpֻ:j=3lb)x>[,uN[ @ut5N]9,a‡/n\j$u&|*&( x8'cDrx`vw"(ft*~?1f?S~%7]u _J1P|9H_Fqj!z!!8"!Vb Aj?)htmu6V[=4 9(nrbVA];N+fDGYYC(f;g@-ce-d<ksThl9Z\Ѧ] T pY :hqd$NNhUw_ N4tTDhA1<IF+( ͧP}Sa9: *+A.$7X*뫄*,:,JkEI >Q^$5l@O<#DAvMyTnn: @=Wv$^(V]eV4uYuКY=oIfW/Um CL;37;\PTY(kLK _qZ:DC?ĩCO$q,) T%͐ ɯ CJ[<7u}7y<se12ĕ\ Ѐ?9@Y`)Dx ĄgU_4oUPQ 4> k"["AԨUhTtD-J7Q?T  l/8;UOB V d7;A(LUsɀF; MXB IBdiiZGȐ#8 Rn54 H_ArD$P)G B 3bPVkAHbP$$; LP~V"-lPU%wK0䎌JiP" a "8&ܮf^T8? n"9"9q m#E5dD,)Hd 2f !D*rXQecLT DP A;i#lH$g˥ AeA`NNē DF^R'*%Cтn B*I|'<)yҳ'>ۉĉa',H?g[H R! Ie.Cpj"Zd ^'͆@ u%DmX*f- dۜHIy$!~ȈVI**_>*թRV*Vխr(%EG!!#P ֶ 0dQ+['[T'm&Cz?ԤPC:Z,dg'hCZ)kA溓N+Oΐ6$L`"X=-jSղ}mUA8nC[вcUp'RXv'(B@é`muHHc,*ޅ#zT9&65BoZ'x0_uٽ(l,>0LiiU&aZʷJVȆVI+uW сfeނ|x!>r"a 3 N!BV0%3N~2"s%T  c!74wW*NrGb*VlR̐/7$CsB #E0pE3ю~4IYMRe173ji>XHUC? V۸ A??#-a>6͓AW'+Tt oi/,sџ &kyȮs-k y6zBPoB퇬{Έ5One38#.|!#;|H8k9qeZc2+WcwC.JMnpx"Iap yAtNxO03N:ԣ.h; F_հ!$Ȧ k8'HNԭj~;/-S C~]!eKC.̕>Sd.۾y"rzt",6}fw6'M~RP"!yrݚ2W3/Sֿi^hV&ޠU /O0VBB`Vɴukv"]_ 1MD(_HNLٿ ֡^-u~ N D ~`\ P ^s$Q:^C I US܀`i٠Bmoaؤ`ge 6U D!E anB E=E!֡!pD@` 1!D1 6U|!JdX>&]H@Dh5"  NII|Xl+",Ƣ,Z_N"+JIN`D#.dSAM]CL ^H 0^.vS1H@/Y%,#995#$:Н "/NtǤ=11*Zp&"]8JB@>m;<AGEB#b:H$IdW aAC$Apb h<׃D td! MNNj$A&dXU A"]!rJ4C*GOO^LLN$e|ԘBxPzYI%[[e@eAtC%'jH$Ȁ Aw Nn t @ ܀@"Db.fc>PfJBtq fDf#"hf$ecAP%Qԇd*&c:&dޚ^_&&a榄h&a Ā ؀A1i&j&\fvn'wvgDaOxvmeHqiw'|Ƨ|ΧV}DF'g1%q!Al'}(&(UpA Z.!V*n(vG *vDh6K2TG3r`j(֨ި;(+K@칖⨐) J"XZhU%FN)ViQd)@y*j)fh&j}i))Ʃ)֩)橞))**&.*6>*FN*V^*fn*v~*****ƪ$("mH̬*M4]!.}1+*jȴfE*n+xNt ȵf+r@N[ԫRLlEF"[$kCk+l>AW@=́^+>[XR,jHX Y,ɺpET,,UTVhkO0jȎSLEO,AlƖ,ܑ=ΜTҾV,TȬVt VR-~->$, @`m=5->jr$LV*thtԩ-U nnTHmESYzN.FFi:B܉T^pP,V.,AN 0A<+.Tl.OmC~C9>+.PЮ/Unh/4o&KlI†@+R-rp.bC,Nu(C @HPKjuqfT=JY;Dep*%;cb>wY!;wsl89{7%x^W (wB~ejOx3Ĩmlj#z$02ܐNݪO_o[IjÁU@N~= , d*Q NP9\mWO3')*pkmZ6',bXT$ et[x;ȹ%>S'6HD\ݧ=4 +KӺLJmCS"7,mt!a Bh@o2cJd9s|Hf t$#=&2ѿr{ ' s Nu3T`j&H$Bt<%UU^FiWM\-.=uBR 4C%Vl"UK̶b'thWְNE"eȳΔֱZY[[#S@OB HXR"DkC8[DRH< pmmDӃV bnQҧpѰ]yAWW |s^W ]ۆ6E!2zC&,4*X!6V- &ς<% kb$M1R!2"'"/2#7:AP fRQ)&A 0Rls*y'I *e 2Rr%[%ٍ&b$++2,B2% *..(JJB3kd6^ [-VxEp5̂ L=6qSF*r$p!F7)w1}20sƒ$Oׄ3:4s\)Wn2ؤHQ:s= =@ "0ғ=l=ه8 9p2$J*3A4W0@35l|rۼ63  8G4DE^LO:1`EqD?i  "¸`G[O>+h†B3ʞ%CB΀JJ0 0JFFi F-Q@"N)7Mt0 `(/^ l LQ M P$Kp=T"PFL\R#H&B:G6Q蔴&&O}^mS]U-Q ^3VRW X Wu5A; t I<B?BmJVXu[b [UrM=3\%[\R]^ٵ^X mI*MOxn>0nU]B"j^aa!6b%2O"OUKC! DtbQ6eUveYeb T+(%`=BZ""ʸ\]6hvhh`vpPM &cv><Avkkk֊KS̾bHjNm1qdD:naönn6oGX8_Da5 YPCBuo!7r%wr)rob!pv+NjU xdVy{7|Ww$D3X$>"(O`1MNw Hj|7ww7h$^_gp v`ڷ!8%x)Zh +znA+8+%` BY؅#`Qq8+X5+i$SkIt=}BBj~R,KVR@)1 ؊g`ɸ#!On C"TztIZw!B/D0趌2u&9y1Ƙa# @!8 "x`,)z9U W-Y$)T191X jjy10A68.y#@E79 V`Yw5 C!ZDOVŹ1"xjϙ1 yy"W8T@%9ZY!0#噞y :Wa/Z%Y)a,Z2zcx &!MZ"WxY-GZ i YBWا93j ١+ x ʀ噡Z!T":ez'zAK`ŢYz]7y oѶ,1 HRώBޢU'C [BØт9Z B;Y xٱ{9s F³x ]3b >c 2*zO` ʂOU5;a[ V[7/87x fDؖ[};3v@ A="x7Z d[k"O;S;` 8+[y&hP5ٺ%>$r&;첹fO‚8Y,ۊ#^b,#;y;ø[]Z 0cǯ ;ȱ p\)`,܊<“|o|[O7O˧;2܊c 5Xbuز/#ss"`?` ۹S@2|[_K-ӑ܊7ڀ)&@ĩ٪0x$-cXu>ռ>1C7O V+ r@ ǂx (/i| |=S^>ø7+~>yM2$)$-}[V1j}s'906usp+Q lRRĈ[;1+bx7x ;f`bѸ b4' <#pS 'd$|1ĉ"bxHB%L/Eb`lX1Jd|)㎕4kR$"C92L䊥L.3N }QALX do8yֵl`"dڲQH Tsŗ3bbb #Ð#KT W!{9tM4`B(%&y:k}; p-qd7T6P~{I6ɕ#@Mq7vE (oC;ۻ?ۿ0C1Wh Б@b`Cjv rI UGA Q)fw }qRL 4lYmI_ AԢd^H_hcgP bA(l70BBoPH 4 FF$F:`ŐFPnB▛ڋ@' D&gNFii 'LceX|. FD@gEt@M@w$\w 6+eMvznr1k lKlyB)!zx1tk^$AU*fB@W2&&4CEJ&-TzfDS2D!eDDp$dng WED? D>P }kPTn k-RqA3D离i TmAnA1'4 n~<| Cq4e5LQ|``43& ,p6h ջIɶM+̛|YP\@bvB4cF~(Wᆉ=pg,+-Qmlu׀qApI7QuG@K 񻮵 jW! ;)'柏~~+EC_S썑}c%dA.QAܐ&)C ƒ`b_i/HXCjy1D-e PPxaA F L:I"bp d }& _ |`A"x D bA , SA! Q" rEAd iA0 \ FAĊdE(1l"C()DH$B'4B)cD0AG1EB?{֓rI4T`AE ! ';Gmo{Ω &L@&2WZ'DН$`8x ps,9'B/$ z6W$> 9X $?镐aN4bCOس D37#<BG) #I2`?Ё'XM- tۄ@ r䠧aK#4Kl CA] т`"I yI !xa}tZkV2^Ⱥfz޴ 9QOSԂY-\M$մh.'FrA #+k< ˓̀k$I1"WF-9EgjaCD% E-cir&NDazo 2bDA"CBل![@MV RmhX=I?-u%EУ )0^!mv>!k dL.Z8"MP t S` ?EǢٖ5BI l}ަ QJ_n >\JĻAĻ ě1M{j41\hAªgX|rd pDֲ9uMQM 6CnQ+7D@s&r8j.D+#^anh!P>8:g;`g3ˈbPSPdKxix21:cC|laE3=ih%GpCy"XR ;dc%MJIw79NTm|f8Ept2OKy_.hQ )IYhиAT)NZY c%.fKA~ww`,AaC2SN3X5>S=E9Np[6?NbY=FVyxUi#!o\A{UPLIHtn c'A)Iih,\RP٘\i8NYGrD *@Y%_iAg>U>(`\P_pFFqUdT|2H7N. NI9dShYx@%bƕE~@hq Eڐzp iWY)bD]: y(УI]@6bPmjUu@ln Z NrBe(N*Fz$#*dyaQUn 'f䤣C S%)!"V Y^sJgT꫿ s]AdW?QgFlU13h4KU{1zgzJ|yC;zNI=zݚK*M1J!Odc@v9N zѪ' b?~ zJvBE ˪*')++-[U.UyJ LaBt:'6w}z{\YO( a?vĊ< 61jN C k?z!`O\,{˷}Am'X#a945@kk4Q zK;MkhpT7/o"fqY+e߉>_ O I;x#5t[ui6k׋;  fżԻ9ר?ѹ{fJ;C[[ iqK4! <0eIN˻z wƛț?m'+v{ku')[ a) QocJ)$& $x+ y+s[8tGڦk1OA1)N)?uл]xNf$,_k;Gk56"QF|Py{$eڌm\Ǘ060zx2ubWF R[2IȠSql u@Qő6 > ɒE\!%c<c7ÜA0 cr \ܞ}٬ N cXL%<l;]ΡXc[;P2I8M!^\Ta{t| WY'q\X;XQ9id)go3Ub+z  -R]\h 念K'a]hetxӜкLEmG,om|A_Gp< wv 6jdwH;db.bB4Wo dp wt@]mW'0Ц.Co0kLHE@~)Yj`Q lk8wC]ͺocX=ᇏ؁(p0zB?GN-§|@rAE -ݲхk>la}Q|/eׁ3Q-+ÁUzv6x,=$[a<Y(6Cl](Q ym4b}Xg`.$f- ,0+mpE 1.36.i5uζ4+4U(t.&Q+>¢v߫@ߝ\BU<`k|_]vI䢁]a95" $ں#DB s,4n臎ܐugQ7 n-`lq=Mc[T'>+pM^$lUNqY> fAsQn7CQ'ᥚmkp:錕tvNU (b:Sq1ݞ3H>:poP4&\F+f~]'p!V.Q2CKBPt ,?C~ "LQSq\l|ox~2T+](A/)+)Q1ꮶMNOj _0.a ]QjP520<AOW C_du$NOtQ'-]޳QW/Yx$|GP.b.]o"m0vBi/<[Hp.5`vQXEqon`_3`Oo T͢^P6]8 70:MOQU?O~(oCb>>8W'zh 'ARXC%N|؅3(nG!E$YI!`$K1eΤYSmOA=FI.eSQNZUYc#׋^AQTViզ4QZq,\y$Zҽ&\aĉ/ p6~i$17blg!g\\鏂0zAڵHW#׹uo'qEŕErѥO^uٵo2F2LSկg{ϧ_}p@ 4@TpAtA#pB +B 3pC;CCqDK4DSTqE[tEcqFkFsqG{G rH"4H$TrI&tI(rJ*J,rK.K0sL24L4TsM6tM8sN:NO@tPB 5PDUtQFuQH#tRJ+RL3tSN;SPCuTRK5TTSUuUV[uUXcuVZkV\suW^{W`vXb5XdUvYfuYhvZjZlv[n[pw\r5\tUw]vu]xw^z^|w_~_x` 6`Vxava#xb+b3xc;cCydK6dSVye[vecyfkfsyg{gzh6hVzivizjjzkk{l6lV{mvmk dvXo6buËr4sA8Nt_.6ZDo78JB xˣ{i^G40" Cy0 .t 5hv3'I|cpk#/K#!*HB :#Iw '~ CXLa!A 8ԃr"D_ `#( #jg~CFǐp"9@b2 yC2q"AO0DăAGhB0-i EȐ2GE6R|$3"@~GDwDtpGEA"B0&nxEMĒ9ɤ/F̐!:Dp#D8wA.Yǚr# r ܎(BJ47A7Hh&9q d9C,M4H$xA g"FW eCO"w11OeFT>7H(BыXBO͓";PIW"RE:|< :=e  Q8rDy"I 0!”H$ \ eH 7 b8BA ijUo&XJVgP+[ja ~7&֫F^>,C&ԫfU\]&&T1ygU `p_Oظ&֪UY۫>SE[Ԡ!c0:#CH D !1d"&@C"D` nQӾo}=}1"׈4= R|&Gq &C6fԫ_!b o?ٴ/:2}<iH=`sCЧ-U\ѐc^I)?9n[03G7rDMY]v"fAI ߑscܺ7Ls$<+GZsr$e^KnՁ?ᶷ#n+xQ2t tΟA(M@ǃx%%7 &XEew|PЉ? 8!;`cc_BoVLKVH2ie+EvDpQ|/Wq](pui &l]xI N/Hg1ܰtЃ撍}.~^$E@BBձ F1GR{Ԡ f jx^yc!}m{Z~/ 齟VNC"~+~}Q0lg< mD ;3=C$'Ӊ2p+M"/P%0<@5عkP8;A9:k:wRAݺ$:H(‡b( F"#D XB+l'7)IYKA@(Z3?PC!z 0BHJ‰8K )3#!0;*d<@-xMc&ʫʟ@HsbÇDC8 dR89K:0?!lsTLhGxDœ<7.0MIۈd;*Lͬ4ф tm,l͠M̉AWJ܄y4zҜ3; 3颞J8YK.E@':GdHd½d%Fr0IEO Htǜ g ιG褩d7#7K蜈E< e(j99{4dPfЋ@;<$I\S JJ ||m DG4h? :OHϙ2ArMdJBKҫ/ Vb4DZ8q$#;f"V=#@ABFqr5e݈ UUeN܄mTC"2MXׇXUI?\tUJE ,*"V WSDV4UeVҨ Y ٙK4x}ٔOӏY4 EٕeY snНnd=ԍsuUWJ=kԂzzC;F4!ՋVpU@|D']:[V@8l-֊ۘp.剣uԐ :͈xYT=H V5Eb\5e,UT LZZmWxWVXQ32mQE A]W\45H >tRR4I4#[Mm< _Aѝ3SCbJaMFFO>;F4FJC yDv_x26:Uf*BHY6(X=%W_݉36bbÈ@' ``8Vݘe0K5ïhFi6]~{4a3/2H'1U(J8IdMPdv ܈c1AP=:e޺#ȤM!ˆLXD(+a]h6x4>g'* 2ir5fdFe`2v^ uXR|Z8ژ+#SVsda~I8^Zt KA$'3̌HAH, }K/'F5=dzg^˺쒈 l^+B颎T'7oƧJ'C$jlz예l~ VUD:\jFisL0 ԕc袸RFJe6,%|3@R\HNe:=n&n/vT ХذNPϦ&L7R„n![ mBj1Z6c.b%Omj vx«o>GPF "<_J[pGuM;:fN6&hq mF6Rp=lr^5:tA"(J O7^vfrT?{D "rA; ܗ(R"xĈh-b߃b +6,A#tAtB2+AmqWc[kD_o4x.0-b~JT7wOҀR4fЁ!pЬ.bCRj3q-_ߝ|C4I>pPCY.ߩXsC A{AJ(B/;|€9@a#+0@ev6KoDBtRSUyp;glr#ywDNvn{v '@_D>\ +h x^8hP",=% ENC' 欂.$ $1>(_m662:eAtІ,")iKkj활0E0aI݄+ƀ{0Hp5pYօH1Fl/శlek6oEz[!p3q$Hd ʬr7,+1iP:V+/ij!@IfW}|< ϓ-\;*Mc@0*E KIOT@Z+n+>:+GE B$d ~nYON9!]gC:`EmC0!L)g 6"LȘ9;7iOZFoT%5AU5S 0!R,J[hy=@6Wh`r6yvoBb퓧%on x]RbZO.qyłLqy&},A^=[A ۀ'M&Oϱrv"nhr3d{\Ў#q'})aqMS~I M2gDcV^oR麏%x?=:{t*q C-#? X BBfʨ'qkC=c?->)*b:*/:b;罢U_ibE,qQdEZ$Eݽ z@d1$0OH&c2$D0cB=Dm5#D c7=2#V@x9$ ݡKV^(J ?ZUbi@lTMGdBc+"@DaB@DdEىFl&tW"NX%/"HR:N ^BS*L!,P8흤BH N2^ɁfhnMN]ވL$_:*Y Srcb"%~ h&ʩRQVgp '-%4Mjd_"lBZ}%\2Lgrr%WbYclIa,Db~ |"=5c$FUOXiw* ].zjlgmByeHpbhjt'onU/`:F,D\wn};(t*J(JKhDe>&XN吭F`+rkz"@AXs*DO"{Fv^"i꫾VeI+ DR! jЭj>-VCkuBa%J(b2bKТR>fJ8@ hɪ@ƬB|VƬT^O+Z AY^ uffdCԆjrmfX}$LJ;nl-$8A %UP=@F A#-mڮ-jj26Ċb- ę1k eRy斉m-,A`2 x.[-=Dy-)ꪮ^fIm A)H>}DPa_Mxn׊oV"F40ؘ2I2ٓyX&nލym%HC$ O]}oBfRm:.WJחA?oDH ę,ooPD/CаHpRj0Gv_ofn^*/j bBDH1 ֢3qn$s~C<@},/O~[Ct}AAü@0fÉ7~yr˙7wz,HLzAۡ?GKqw-'9㔪WлICO6q! ph"noJL .0Acp@Iۑ} "<$#,"#%br;3;lHRѿ|h˼r .O̜-/ 65!:s7AB^a$Ѱ(8*Ҥ((Rrc:㐉4 ?ZRCe.К½ erynhܒ|EJx6bh+# OxR)" $HtpF#2wh?41Oj/!H&!'s6@ב b .@k"p 3a$SIDHB#_r CH!-, A"PЂ'xf|8I/!!H$8CĠ?І4S4) BD$r 8?(Z$r%Rq"S0>CT"1Xmy$'% wC88+CV#R$&PZBڐ)D K2w#h -Gjbnmzo~P4#Yz6կЉ^txGs#gg rK# wQ6-ҢL,(AΗ"+LnJ&QR+mzZ$"|GtrQ"ۋ/ց w7,!l mX#7Jw =&".&B*-!Gt j<&9o:B7ZW)M&L*.v{BH{p%*M>"0pBkxF殕#hI! P>b 5 m) & ' ABzih &ID"6dbBƍc`#Q"BF".$P&ʩ$"&d&F@ Z !kܫfb);gk95}mq 'B-#` qP\p"!`*Q@[1E%"0!oQilPhP!#<1%h"􎘊<`j",!ln^pQ?"K#*R O &Jn5W!FUͤ f dwn{'(^o#'1j B!2&R"VUR#1422pq'+WW#RBʭ?L Q2 (Q]"("r jt0(12Bvq)$01%R!Rr">2\E+'+h,#9,"-Ue-74s$E.O P!U*#VP"&!nWh/32:;:b;3I纑&3>mb"h?k>/$)>s>7=,<#  @RBt%F89!f O%X,%1;OESTE"x1,E;GOfY%"#$k6B$TPnt"(J" (D8aT -b+kp8-!E&jFIVcUVt#jrFE"rU&4lx&D"% Ԁ8"Gm"O!“Lb#>"@tZb[X3!BQ5BB7[St8oBY9puuoN;P5hKp:tV `62M8BaNCX%$5KA3S"GoYMQmx"9R"T{ߚKPVf[^S\6l8U!d5f+=B_c"da{"\"A U#Zb al6[#v$[WbJN@k$S A@$%fQd !*-i7^neqA.sq-Qr+MDQ0slss)f,"_#oW"k:jq%"tGt,KcpZVFޅ(7R!$A !Z%AHDі{{./"v5$T&D.,#{aBv 9DC}#*JR~W wb7m:(w57'Ove6b/bni["~5,9$? JQ$|Y"~sl {W[ƶM< WFv$kagb$*rxoߊVJX,7/s).bv)bx^%(9*V0۬0a 8cijbAVR Y[6_̅U"m9$v%aN#&DgW8ر,p"YRx V!Kē= iADQbA}x8 y5PRzND.xߕ&*99 -}jx%&VYG⶚B|v1x$ntxƠ'`y1 \L &a vc89y9${Joh/B$!xy- ڌˠЗgY,Jb0-Yh%f n@kP1)vosUyKdj=~a`fb`trBB\@ d t# zĠ+ Y@bF Z` ̚w As1ڬm ub3( |b O Q)蚆3c&ળzZD@f O ԠYbVJĦu۸dsSࡒaB|9$l!PSkB~8n1ڔ;UV#QBdڜ{9ut]"0Je;<(e7a3%>*9<ɵ1KY"UuR\g^_'!^ 3^1_?փ@^!X7!"z~ 6 H*\ȰÇ#JHŋ>NtЀ`L2\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧP\$cLF BpȏRÊKٳhӪ]˶۷pʝKݻ07v\0pHNN02È+^̸ǐ#KL˘R9G`֎:˱dӨS^ͺװc˞M6KdS@Cȶȓ+_μУKc t,I wӫ_Ͼd a,(hu$$9߃#pVhf$HBH~r4@x`u,0(#et4ec(J3)DiH&# qPC0@ rtXf\v嗩i1`lpH\9tG)Ʃ|矀Z؀iU&袌6ebCfrf馜vNU-驨ꪬj(@tj뭸+0-kG D4F+VkZ5Q8y+妫+k,l' 7G,Wlgw ,$l(,0,4l28<@-DmH'L7PG-TWmXg*!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++333<<*B-E2I5M:P=UC[JSA`OcSjZn^o`sd|nwiq>6B:F>G@KCOHPITM[TZTd]jdoiicrmvqys|v~y}ׄvى}׆yڍܒܔޙߜࠖ⥛㨟䬣泫尧黴꿸ÖŚǝȟɡ̦ΪѮӲն׹ټھüG H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxq LÈ+^Xk iL˘3k̹*=ӨS^ͺװcd@ٸsͻDRiȓ+_#IͣKPνwo `S7=(@P ߔ5}&>o0|ǝx؍v[ 6!@m t>8 8ć \`mp\LL0h8"Ԉ bJ80!L@I<&'@('(TViZ %9F @ĄhbFY#Lp`@Ih*&q ) Wδ  hfĨ袌6m0Rz:@,b K$v=m@ @o:%r&o$b(+JiGŕR2&,z"zdv@Tle (> ٚ+ֻP &j;($v zjPDԊɦ'gDp8@[^,$CIVį<4co0;m A)&%7)I-TstZJsGoluLktD.Ԥv W-$I4؜3-+R0 Q̌@Azb: YԎ@bGΩ; ?ȶ[=Qc@9pʮ_Ѹ'*oZ$_2̂ޔ ڜ_X Q0FLp5h@A"v%Hz7ҺǑJ~D/9I+8Nm} BA "`qV0.HWy$̲E5tVHd;z1AJ[@TW<)vH*ŀQCE@{ y ;a!F/I]DF`S/ز/>Z[D+򐈔 $P`Xސ-[Fz'rE&-ZDsC#& ^ā̒.вqNacŔA 0 /T(~X!|0&P9P&\2)2~q^8Zs ЃV#>OpPkdn,!N5124q!]L8]!6? $PƔ;6 )VJIӚ#b ĭ"Sj">%M@1uY-8@,RZ;6#wҙPt%Y%:Mֶ>}cXi,!MMX?I45 _qHʔ1,j~M"HH6Gu5"8ĥR2J"[GKZJyAZ1 hvB> @XJ˳l9A{nP6T"K6n\XjT4Fd"qKB,07ē}X1GA,$9ʀ4ĸRBNk+7#b.E8cl7fDZYJT< WDIN9Ug\u AmT r4Q T[Rd$i|_^em9JQEPӴkX9AɪyYܲoNcFŴe,iDM۪ܣhrd2~e{ X/`1X".Ny4u'3׃@1ε@"~v7 Z q7v V)ah:If;J7A!SA.lWV*WbR&@gbti&wA;JvFk(NO QR(>!m]ELsuȂ"x$,$ bk5k=d~Dwm"ϓ(چϽcv*i B&o+g =vL;b2~R"WMeSŁC6WQ$uR|oNkt凜"Al+s 1WUg'2w&l 8oT )H7d: g6)u&xubx"Dxg+)28I&Ni5!q4#.p$qQBx"'Wy'ц|34r!Qbjv/L3~y+X|5zqc(<52Ct+AL̘0ye}Y2%(tv wV,-cቿŋ ъ8)yG% g%"'W@`?t(ik ixa 2H϶.8 SHu('5qHt,1GhnA? #j8a'AX P5{ y瓅80v:٭U*งʱd[-C<Ъd*!ǒa+\; 4$ᢢ+&:y"ؚ | zΥ4@pC](sCD 8J0 @rȯIdÙkQx{8x(| +!/e_ ѕWbc 3spkꕩ(0{e|c$hU#N<  A h;X@$뮬[|Ǫ #Z:6k; Kk+#gPJ#\Wǽl£Jó Dß+8Khe+ {GUwΫ/fZ&g'K俌3G>_ *p)7/z >@x[*-\ \W a sƲ.?֓|溿m秫ŭ;)3.Z|W\>r> b⒖L#6I\jüz/艉IWlk_62H᳷iylɪ* eǪ3%2&-jGQks%0C*y==:ۘ(hT ==E=9M[fj῭|KU NB&&D~ i,!w,W5|cɊ8*q5ϥ< e)}c..U]ڨ9vQYR-Ę} Pq||yh#rMbФVL&[iͧRģPG&ƙ=-QD _%l𝖇]`~'ɪ[m$D|\3dvI"';m<Ҩ£"벶Hp QIZ aHѬ Ł+-:nti!a$Pi#Ʊr׃2SZ,Mj|ݭ{Yr9*)c|j="Օi2Q~(ey`N6=vqLa*1^ǖzJ Lٸ1 >d}҅ Fq>-3ˁ]Ξ=9A M!~K>]9c}8i㫠sN(JɯFA .r`>4| Ɗt%a֧΁ Cd`nȜϾ&x],&_E;fK&@`@nI=C+;z~~뎟w Pm pZm߃,YK @hߌ&_ ;L>x6}g!Do A:y84~ܭ.c @0"l)b0qO{WŻ6p̚%N++Ԥ<_ ̚bO^D?+Kmk濴 X`mO}TY?*\ /QHT㼭_k?. 1J@n@B 08C D4PaL4: (H%M! T.AQ—B&lqdF@F: " 4 GgSOMN:T4=ۣ$M$t <9*.w"h`dqM^ƍ?Ydʕ-_ƜYfΝ=ZhҥMFZj֭38l^Ih\,͇Ԅ,@ ܫQl@i`$` H>: ֊ =$DxIi7Ma')8 "I7B گ) ΋N%C?1DG$DOD1EWd3z1=8X!5( RИ)*[?b%mHRC KsZY, A/!- $ȏ>zcg!JLi4ɊX#e̡^iK/ An5 :sU+јDf2Lf dH.%s=tUFv+J3KAX1#+\Q#x16?M"UQ܎~)D  xrv2̏1*47r$ ]B8 xQJ𹔦($J2K :LԦ7iNxU2 ;%# 6> 5_bHL3 " D 0RD@3SZDdQ!(_::9ћVw6I%cF$ͩRj$qaO"Ϗ |I"VH+ 焤SvֳmhY 6$dJ3SQݕ1꤈@Eğ<@`RD)mE`G-m696eL`JK…Ъ;*Eт;ũ$ATZm|PN1 {[˞[%/Cb: 6Nd+ZFpBمX2VEfB>&Qhv[E&pa2$`r eːȔQ{7/X*6/]61r XZy_H `kMUV&S?! -I Ŧͭռf6],F* *73LrEY4c3\0`F d ԍH^txuR'͞1}oDž,PH3dlj'9F 慧"dsFvl5uLp5AkIvlc@fݐ zV̈́)*f6n㡊 Bފ{ fH "mJ@rz7N*Z]l 'cn)_"2;oBMm2'GyU!C+ f=#I'XFE5VR%Bua`/K! 늼JX&:Ib]QUKZ3#Ri H^$!CML\z|?xQDIlwDGCF H"/-PamC V՘;j|PvX&gHIg,N:L\Ac@N? NxWW&swS}cP42S%ٽjÌ"<>$5Xj @/3 H,x* -*L s ;$ih6x<{=hþdtQ@=軭1ػۢЈAZK58…x)Z8—b) *@B8Bѿ?6H )\QáA iKo:7Q<@ D{<=T ?CY GÚ8 @ؼpkk%ž%$92`7@C%`">hiT a;h? #7p(PxB$ F \ Ksy|0$ Zd7<գ9+1ha;?IQ(H|#~SŲʴ$W x$t |ϼ(M͋G\-4= >=-ʨ5Qb eDe||MHIΖ8"$r )>ǐ@:nQ@ Om R%M' KA,6Q!eFuT uSΒhS+k(U 2Q-QU$ N@HHȭy4133к,^m0(MHT(R8_TVxӒ͸&4 4ttk|mnթ ݱN`@̸5;)TIBIeX)WA } t bՉ3: \! )]\ JǓ(M¼(XlMM'ɋCToUٕeY/RMr%17a Wl UI"TSЀLC>J8sKokUHBy- U*% ͌ VE30ЫO )syFذIvmٺۻݘ/\Ԓhҫ}L% q ĂB<JlLtɏj .hRǭ:%ͤ1T|Vy)D HvpMR:WSFޓ 1n;8- ͜  kcQYZ|]Iʽl8'aU|gRz&WFuNVAP-e*Ǹ?);:nc~cg ƓGB͗;emY'{—xwf8}X}偰rB1F꤆S Y,FKcG@;3`pnin]"dV FJ"ˋm c z zD8C=HG@ &kXt K~ʆA(Eh.bc( RAlB4`i8$+uԵB6$8}pQ-?hg\$j:g>Oa-jXΘ6>.5=8F[;XiQ/8I$xScx)p;p#'g3Q[X8h0p>ڗN{[|GaPM JCbk= 8]N g#<:X8wjvg`3i&"6!7 >q`F;7@jewZ)^3v[ ɘG})NAr&+jmdb@0Mi`VTm!9&8ZsrgW\(Z j#Oseqa&X";WZw Nk U͞԰74T`L>= d7-ىkd)f kLMhSE^لӡT2$sس[|w M$)VoϋVWfj}1!NG0c~raP0,+c@ O+3R@ @4` ?G (p&`ib x8<8&VP}O͗ y%>z &gӀLf&uM:Q{qCns\ WGV=wH8͗h/V{ΗIk.sw6,/} Z "b7ǀAX wƧbxiG({ò {ayJ Rɡ 0?fJk >{sXnJ;~ 4ՈK/ :'j,hA?6j!Ĉ!&@hb&%#H M(IAȔ)ƒ2gҬ9 J|L|b? 2G,|(A6'>PjPѩZr+ذbǒ-k,ڴjײm-ܸrҭk.޼ Pzk1@m%=``ƳQpJxIrS1M(+ELKnZ $ʄni h.\$2kiHO啳o=ӯo>݄Twqh zpmCfVZZ'S@Z\N0@[@4фDG $|WTXQR L079H8@Ltk4 E8To,%H@ɞ$@tS ]H(GhZL4g%q$PڞWe V 8^ ]>ZY>pi I XYo4E00)W|~|8>*^Pp_IfδIQk~$@l' <0|0 ,d·I$i),-\`kI+|U g]!AYrmPqGymr@<@@$!1WПqN&P @@TLȨ_IpM?$0T@){G?<Ia5X0=8Pvok~U7$*9衋>:饛~I@snyw pr:H 1|H ̨@){=?>>V%????b$ < 2| #80Z%+ 3 r CH'&X/$! S.|! ch:I0!s>!? /F<"%2N˒ D'RV"-r X Ը(1f<#ӈG/R#(9ұv,Jݱ~# )A _4LE2|$$Hd I#Mr$(%< CU|e%D%7%.s] G>tɏǗ<&2e* TBKfRּ&6٨ 6)qIH(|'<)OH2$"J7}gL&%(BЅ24,(F3݁&NiDn&=)JS:a^JIT*әҴ6K7)P*ԡ\KCS2N}EP*VUs =3=ǭf=* 2eȪh}+\*A2$ H]S"~+= A%w,bCȏ,f3~$gJ-5+ђAM 2-lc+ٖN~+VJ*J򶷾%S=.rM|aR֍Gvt^.xG΋!Aë(6o/~:_T9S~,YXK3LݮlH0-#0b0C,bvU%1SqJ0]1c,ccW%ތs;C)@ey,!ُX%3cTkNd'SV^"nS_^2{pf>3=H`i~3$;r3@G)|P_=І>4E3ю~4#-ISҖ43MsӞ4C-QQ:0Xuc-kHufR[ ׳5^ 36e3t 6 fl^G{|H#>O`Eo@5Dܼ&w6j$ !&fA n}%)úaՉ֭mp3c xPx2A0L ( 6=C¨v"D>\@o0ns󵘁CIO9QoC I'ҏr1y#~k!^Kɭ. #5<0H&v[@ /D\^Ժ& XxСjwH~LAqy߳kwH=Ğ׳!Rb !9eO 95!z[ b?=9x!0a aL![B \C}CL$#Zp @1Z\hC\!& L| \D#FD#8( ^&t_ L*]Fb/ Fc} U][% (\H jbDDC ٙ5 C% `cC\B͝b-B-Z.6.6c 8# d1 !69A4$]I[ 7> `\\#D 5::#CԣYGC3_D|B<]8B-$:DBBBC _?>]=I: \G%H妥⭹cI%["@ LLCZ A$D$%ҕZr(dYDX_>z$3BD)e=DSS6DTT6$<1hbAR@ArX:CekY%mV# n5Z m+b]2CLɝ@ _`ښ`eNp )X%\P6D&|# &<V:@d&BF8wz-.`CeI酧Ĺ%[0ݍ'A?hCA< @( &F Ć@&L_DBKCz:dJs@ttN`=֟X#ADu%6#|i筩(Hgff@g^Cl"(te6D2ޚvt hzbI_馵TNE"6筹[e۝aΨ &(ܣC`XC|'ͧAQ[9}*ښmn HP,6DWҤC| VڐJDڭ(djC6gZJ"^iDtm z^(Xhdw\6h=&%TACDڧ:~fClkeB}Ct:+NDΪBFNDEw]FD&c\6BҨhhRWlz >c6[dj&~j"RB:c 怫@n)]6ZoZ666Y&ԚND&de 0>Dj&ᗞ@&YD,, ,Bbbޚ3mWFD.-Zҝ\t"ÎD&lbM.+Nn $[WmD ]JLnMlm͂jƦ((J&♡DŴE҄&sn.vnC ]ZŀnW.DmLJV.޺,,6Ν/&]n\>F!<(T/Md_zCZ1րhX/kү,}گ0 nr&Җq'd(D[>VA[@nD<.zn1]ґ/W,j DT# |##0](|fo6D pl CD "_Ě"D#?2eDħ>l@%Ddߐj"[`kV-oJCH߁^6>_Cp^zok횀"jE!/.3_! D44m(T?6qM q#C,o(䪭m1w0ȭ22SCkF)BD#3;*?>C`CΫ 0oTtECD2K2KQ3thFH@Wr1Y %ocD$ [A^4nB @C1E@>qO(x~#c7h&H:C(< `CbtQ+DR !`\5Hϵ!LصX$ Ad%KQ @^jrD @  @Vv>Ԃ0Xx,.va7D#@ @ d%6暀 `)JC6 , W,X,okZkZG4]Ow-OʄuŇz7O >]iPjg?DloYrc6XFVɽ(\i\P3d6c? rF9;D>tS7[X^5Ej]w[ d']z*P?D6Xlaߚm_<; D-%J&cfw &v!D7-xIUʄ!t@^~w\+D\J\4' DCd=o!@9fҷj8Ƃ usgۉ9D0C41Ϣ/Dx0oDlߚ#WbD4]|B|c ƳY %DJ*gBׂ xnDsE&@e,d dBL6 ؀km#~c($­O]epAi'oz3$˧^<!uY`AqM|"ЁAG""![s#sE&')sŃLdw RCzǗ]W|.;ʟ˿<<qI<<<<=='/=7?=GO=W_=go=w=؇؏=ٟٗ=ڧ/==~0l @SJ=~in!E/~imXA|$LP>OK`4d^y 3/ @g}đ C@~D?`mz=DK9DNĉm, UߏT8ADV&]#Ԙt|?HCĆe4DGy D?@8`A&TaC!F8bE1fԸcGA9dI'QTeK {)eMIfʄr&> ǠdќlF:jUWfպkW_;lYgѦUk5fε6qTp .I` L[Ç'VqcǏ!G;.N[Iԯ(j31 @8q#({LPj*V|`3I/QO]V e2eVj> hvi]L,#^zq(]&{)t.__u{$ި>rAv9G5 0>h\A Nt>MI(ཱྀhL&|1"wRHd0aAPB^Af ƆA!E4(DiLbRNm ¥mDhQ&ZLGv/mtG9^PߩZ E0PAȈ?.$",%p#!GvDK@š> Α'Aiձ 7BDⰏ,H X.D caeYw%DV1Le.A$DiYH+cddFfiҖt"]h]Z@&nzl=O},!%C$,[ARHfqF(I)‘3J;%\IQRtHfd-j~:eAf ޔ +h{y" э2,UUM({:Ү|.t;Rb/hZiJE$=9IeF8$eĩDkuc!YיT32\nDX&*pK5Z&C[M9BPTUo\!\P$$q¤xY71j^ L ܀Ew2ٝWĵT ve$$}_1.լ(ZPlMY Rɴ],buAbvU Ҧ W[/ ãV0;$AjlWW&񑑜d%/y>T3PD6cj B~P^ LP[VlG6uێ3 `f{a\y "Xֵc69`|Fq[^2rQjU2C&  L ($}`Qn<>R hkgemieWgc#& |0Bv_]]o}Ul `p/+qOm[A8Qr-wasϜ5qs=ρtE7ёt/MwӡuOUձuo]ve7;]}gw־du_TV@6 T_KM=jO^ IMl~4!- 3?Vy??$|K+oO>O+1F4FA/F OIL*Pb9G"L"o7OK*|cpB9#ǒjЌ!lB7  7/ Ϗ ! O GB<6N 7 ͐А*0>p0+2~& 'Nk!`a sb/MR"Q+0 58*J7>V7/B'C+n >$` az~Q *qq11h+17oQq%`rpq  @(` aQ *qqͱ+ 7 b!C""˱ %C&=r B0!@> &@$<`v`,1X,4v b%[%cr&k!A <&4t+u@ r/0,($9$%!4 .#rr b G,u`R)0S+ S,,-r <1Ϗ+ !pR'y'/ 09q @,r &!!,O2%"6/R!%aR&i&+R22[4b**r+0R00 s +sls6!Rk2$2173u3 425W2] 0w V0!Bs'%'#)!F.`  d &o!BO BbBA$ oqA @9@"AEck$`tdth\trQ bq vD9oEAlJJ HJ-!t@'AF@TAbI{G7OLLK2BtD5D BH H4I4F˴FIor"JGKcKTL^ @RN7oKbS߭cQ7b 3t 0tU UC TJYCQ7@BJ! DHU LP50|$5YGaY9YXu'9O.oIAIQTX Vɑ UUbXKS!XZ7Z"ZKTS]w5XoX^WWB[7[__U@\JV/X#& *Ud]]b"S]~`bObίai^'3WKTu xU}hiU\ochf9fgOg-#vvV A *:` R>G\i]-X5jg U Vn6gbpvl7l "iXSpvi l9/mGammtvpv!6cOo5p"d9oddc *UV!kY^wpM o"v3E v`! "67^V6eP]tyw Qm4r_Bxٰxw!Q()$wW Wb B!rj wC}vc|z^YQP w[/87y {yiV}|tA7yX v )xxW"~sb~9"UQ#Jv7Ovv zW!|l` ֚B dBO b U &| 8*y $& DJUUXU7 &ai9/wD< y< X Xx!jFbYG[/GsMHf] Xّٖ [4qYs֘ ڸ*<a7 “7EH*Y8ǘr €"YmY yIkWWYd4qYyٕ}^!_R)oP!exG1 @#?X#9e6r9/t ,c! QtK.jU]q*`$$Ro*ఒYY] 6!nyo¤ EC{/EHn/m !Y"#Poх7ϫIVMc -@<:(p#*T!؛eyZECp}".{sfϯ# 7j.%^me@ p!: ߵ :!J{Y1s oe:>&b[!Hy9G!E`;2TG [bVі9[=I6}7 9B,6!x zx\\'7r5r@p2-Vb6  ! M|u 6-ÿ'|VSY ,|\o"GU_"ƹ4Ǔ۵G_܈]\ ƫt+';FBMA44@ 7zK,KF`XM'D|->{7/;ColmV 8ŏOѯ6е º2=#< ɷ B){ !]҃BA+6̾<}k%L7b!U|c=iUjJ7i #wGA_20( 1i׸b ؑ8uoM y2ƽDɑ;3}1 >1 Ve[;%̪La6!f+J$W &UU]592 pATÖ/}ߓ^O^=6SMGV!}֍uFkkjR#o#gWyJ#c~j$*Ej]c:d&7ѕ|"s7~24  &qt >i_~5_ 8H1KS!"޽}Ȍ?J`B@!ȿͿCu@j'{rv<)~MߣKL J:0!PpKC ^aD&Q ~J8Ō;~ 9ɔ+[9͜]໷r>%& iNJi^i*ZyA(IY*(- U2A6BdD"U5%B&|@ ZmLRX%\ U1 k&4ffo0/Lk*lCê9dQ .A#lC"tOڎ­OA+-nL$F%4IO ePλi6ߌs:s>|h ,V1AЙ2"DF5IwI~JDGcBBip) JO Y2I~~*n[T4A#"x 5=$K+ zY1a_+ص&BccTAgc7Buzެ37_rCxw75(t@~2Ԕd9H|,OO}_}CJh ,&{CE xw++FE א iQ:t6ĵd|;_`a <1tRL‹Q [B Gm$dB75ɏ~Ђ aB͇>l(0Ё[A0悋cX "w4ZDdb ad8?%8qt{8`1"F:f\ OGCZlL^NB0 @!1iSPHJptF,]S%A\"e(M($#I[x$B4HtR1 &Cbɕ2)Y#_FR!ljs7mREƌɏQȗ`5\k%(!PC)$xMXrhH23!|'ADy˂ !uL 3Li:)?PL1 ?P,s5)'0QD+&ȗ~sD-QԤ{ EJ>RF(Qby>9r.U8DH* EL p bw"Ԟ'D<ӵ"ĬY*H)Bb#Y&XrMgmҊ&Įy+h q88q%-4K$A"Umo"ՌB!|AX2N2V0Qn+d̖oMt4&z.(H3|y.y{kW(H(wOU!(#H҃g} )K> 3H5HzbP=x1x `/4Zw @@0W g%ȅ]hqn{)/ :wФHLpژPIq|Jmp{*)K%` ^j)rJ&k7{+Q +)98kG z> w )7HY=А] Q+4T )Ag2*i)HpsK pyu˷} +Kk˸븏 +Kk˹빟 +Kk˺뺯 +Kk˻뻿 +KkNjɫ˼ +Kk׋٫˽ +Kk狾髾˾ +Kk ,Ll  ,,{ K5YݹH&.wz-=,q֤:dۊ@KpJl "|NY,pX<|4ZlVV Ҷpk)i|{`ؙF Msl\Ϩ l=FM͊Ќ pw ]=  Tr$={ [̥=,&(.X.fH5aք] ؄ =8 p @0 1 pG-0E؃ o0ٿ0\| q^]ʍoh0ͅn m?p{w0{A/L2"I ">i{"go0|> ! &Nz@%)".ۜ<kFn(-&·I @hT c)p  sHʊL/Ѡ& MoE`e&N }xēa8y^L{(s8@^nԹDR QwN#?N-IjLl( @qWe3tĚN<%2cL{N p*& 0!^>p/LN;KnddqEn~}}W ?"T#sH.Q> A> \I𞓋(Jq2! OnI APJLVzIkGN0Q~o q>p<Œ1a>۾;_+x|iI) >2cZ%'oؗj8s?@cі$ŘX0 oI8@B5ߘ6o70ko300`.q bB@3a4~.eP0Aaۿ1O??2ap௿jSr%Di"8dqw:1 Sw$ {A ah#AB +B 3pC;C=DGJ4DG1>6q >PQm$$ȴhԐ Mސ8^;@J,߀CK*h*7bH-m!r+G$ P!$Z QȇShhHxH-L RJ<7Dɂ0L2@84҆GN"Tq N7s!J "!>t3253#ׂ}H'W%`MM!I|-R؂ILKJQ6unm^.<+:{!o+ ?|ݕpËbK6dSVyeeđ; &*fG_gq0pTzf6rS}mI^W .m UeH$MV֣u Ot!$'z{9uL6M+Ϯ|;6h5/m]Z<Ĭp[C qӖf!4t'.70E>@}!502Qzr藽BOyaMأyC{ ; _}_R8\!$QE md 0=$rw&%Tָ%lGx'+-uC6tET6&%$up֮'))ȠC; 1TrșdX) tY H!,H<¬lц4<Uj;/b"Ѝ#$Id!-I Z58aC^ ,`qrǽ4:ZyK\RC$ N"5gopG sNwCuebRHBqٛ ÔEg t,]$*q AArE\%ĉI4F5iIsk#]$GJASǭ$N[,#>)eKԟ댁.0L]ڐA'(wN`;2h'$y&A(˓JR2L;+O"2ݔ.KC"z4Ԡ^ 1)KMtrjKBDt^j!( Zp@e8C0\Ah$Y@0' B P NWWzֵn@!4 臀"׹ =nCc Ppo#d ^pwwo Ex 0gb!#B+nnU !2,UeB':~BLQ0>ZmCL[.d 0>:t!d]Xi: r Q\)C.#N 2rg#. w3|i>K!i_{bT=!Bd4@%{_s|;6 4fGV@ ^.GkVmIHwVUW u r,UH y9c:Cyϼd!3 q)?H,@両H@0 \#c0O  =8@60AӐcC/ ODxm!LхO:Ep'p WqWm-nlq]pysrе܎gVPUFp͘K0 ̨ 50Qw2]=1 /ʣ}qPHU҆L 3%4PC`ͅp].$P*f0 A)6~%%g"5\5)cz9*>]=6.VV 5Ŋbn'EscvvyF¬i C KHNDU*ʼnL-E NO[ԲiZ`\΁=WXivEffj\sj!DHqz aRwddN5F2qQ!K5JVKd<.'TC`^=x2(4#4Hp4vC.mkkknF!> G8Fa&]nO-$܇8`W#ׄNl#rڶ;=m|QXEnFc5@m{Vcч1($ 6缉X)Fr 8k L0N8oo1HDֲjD\  S#hdn:LG@1!C0:dԈ>!"C$fh`BfĀ1Iͧ6<> "U@lҐ08=$q`p$rU !+!oPS6gc dV,rC'*M- v5H$"A 5HhJ. :*ql4WN]]G!Lv2"EHٮxP@1D? xE!Z3f FTC( M3qfj2=ْFZpr1dȒ c G+&yHk6:xISB1l;@{@ < ppD7"$ pD`Ci- v3APq+^ydކ EN@%8І0hBC1b,'t!F@D#pϦ,Yb0/P|:FfH٘MK:^H/vkLu`H&:w-<,γiBn`ydcw|uwj^BPčSCީ+P dB*8!l!TV' a" B!.WJ[ 3d[֤G;r5A)e?,@$Wu-8148@I1E)E}^EhZT!Ձz] Y(S@ DT)AZBDHbXJ%ذAwL`}PMm%A%v9a4P 1 \5@ 5|B$S JHƶ̀_e UC H Gdܕ6^%j5KCxa1D" ]@,%b&2h\ba$~ d#ơ ™BhU/c0 cH$ )#$Tf0> aDlTBLHm4#l D 9D)F]V\G`C-]D !@ !J:TV M ۸$dգ7:XBHBZ]޷c]L-&H!Txm 6Y,DL#&AL' OGlQV"A!T |SBTM椥 N™ abWlv#}|ˈ`zmEP(0AJR߱#MP%(JM *^92Mݝxq@{WFEDI%$!]V0@8%0;^У4(x!ٌd]dfu<&cˤ%7dFg}y Uzg{{֜\j|nF  i>E'bPZ˄hua#֍ )$<4`F<&D7&@( oNg`j2Dw@$@(E0~C%B?6@~@AG\4VmGlE@  )iB4 TVV4@Y$Hٔc`fDބGed2$H)F˒*Z:m隮-n& @nk]]bA@nV.Voo.}hSA,oDr*.o F~hmАNyA$@.,/r~(R}.I.wvM,c G@ apJ(@aA-@pI&#p&A 'FO$8Mo$'8@ 't1Ks@110L0Nnp!#A "3r"^"Cr$K$SICmq%k&sr'{'r(r]c(r**r++r);)r--r..2rcr/ 0s11#s2/3F0+3Cs4K4Ss5.3P&[6ss7{7s86+39s::s;?9'9?t@ @>E?tB+B3tC;4t] CStE[EctFKD+DkG#-HI4GGtK+4LӴ@tMtM$q5@uQu>4QgP+S~,TSuUwsR6[upXG#7AX5 3rY,rLou]0culf];-2Yq!gS@ZT/L\dS+#`vI;`6fpe/pf76!b.c'oV,Xvmm%i3Hjji&Hvvs;sCȱ-ۨ,](%]0zxor{'{&Hyēi/ɦa x[sxwxƓW5Oq4`DsxqqAuTw +ӄSo&s]jxS!xʲfB28yN88ou]D!Dg/3G :BBDok.D;j4Pa㹞5`BAu5oy{kt;`O+>0lX*a`߁غ:[OԖZth@ N}AH  ?S{o`&,ΊI:filЭcB -d]f}h5&Ih@PBh*p`;G45`]Qօn%(QJ_:Z *v^~C]K(TIB聉\\042'J&M&U`^{ o_rCNW>.Y).餕^馝~j=N6%VqLgD&r%k %2  vHͅx\EZҠ;(H6 7D0n)XE+^(8!pBP?Ȱc@xdWxQ"B5%QXHCTŃt15C~ ĉDE<Sg}@%XUMBX "x`oxT)( E0s" Q:FI\"jbU!8BkF6!sKKn"x@)0m#J7 *px@$L `QOĬ ;@ H@϶@ Ix1M IȤKFG 9>s YNy,@%HTӊ0ϒN̩J2Eu(UjUDVZyIDtiq@Q#]խ? d[W&("kڤU.d S"U0^ .6aBf[. m@2վ6QtUMi4alM V6Ura3[Dmb9&n$=p32x u"vuͺ&iQ,oN ׶Q}_)獒jBHRѺG ]`?0|OLv8!'$&vL/&@b$HT.G\cP+a,T`\$ .IV;I\]/XF Te/IOv0$vCTn6`\Yjff6fv ]RVБ) D?J cTm HWԡReeaiRֱjiȬFek_Ǵnt@oЃ(]4>`(@ /PxX&LfҜ 8@uB]IShGM8@FN nr8cqk x+`G\*S!w,m{(Jr([&pn[q+Iw"z=(M|Ǒ)`jp\aط@0.ifjpDtk@HWGku `oPT([ɷ, -@@!X&pϘ (8d<d[j _-v=S&HxD\p@;ޗeGስ%$&Э%j" tݠkB&_\lB)J=@SdL[&1B&Jh&@s4 Pqk~L= &d' : ]#+5"/5&o8-l`0~`bp*5@_0q" xp BP'Q``$4rO# ~ 1M" h|R &%##')$$$3"P' e!l'N1G f0/0,1M2.MC2K1!~P1ލFs pG"μBhH!*B^re&s0! 7?]bo8&a"Y/&`[e"j4hm"pkbi_Bd%J)`♜uq_TƦu)=ufjmTiL#D-!`m] t2`$@,F` @!&a68< P5&z10@@``&7zz7{c"0`*@> O#@X C >` xwyWffyMPyyyWzzW{+B ؀v4 &@v`ZXHu @ x b"x%NxS X؁[vwt@򖆧"27x:xo Nl X% 5ԂxuQ(.w>Hf L#iPlô&($%V%3 X[^O/x\V)x%H%s>wI#F/!"D \"&AUqJX#/QSW%\ /1!" Kp6mM"@E HY&ⴢBKGM9yY!(adBByt ٛ!"Ĺ]B ~9 "ًGm!PI!fq&xKSwGkj-v wt%b+!9Mg(@Ix!:!i'*^]"5clF&.dS&1!# ҊOy5! aq""z !9zp ukBKPGMЮzb!ٰ/˜QU!_p&!^b <(Zg'sc(c>NV&Y"rE% !邉WE/#b&L1bܱ*{ [p!b*?"!Z8 /{[KPě_"C*"웰Zzx r׺=[ ƻG;xuAv<*[5'JsUH,f\oZf"xNb-"NucbKظ!Bh"@ tb[딛>mV*(PoUhE )@`:!M.{Áo49 r3"z'!Լ7+ &a/ѽ= < b;"  ^%̯ʏGA1% < C"+<Mb@~emuy!A& ~=JG h"B+`'?ejGFW&%NGwRe[ab *}Vex >&@I]#vŽ!^}$(x7v:h#[Y.?);YA9b5HtHLc?HRjND[!!"MMH$IGX`ti1mAPA|$HDnI%BÂ9P:ҡ9W)1| MkB)$Yާ A} - @daW|U 6F !EYYRRn&aZE$P>($0GerT.*ńI+*)&wUX%o`R$  .LeQ{4WQ'҆,2;QDh :\B #A}Mb(* =P/$3A|Y GK2LE4Ip5J,CQG"ZH^ST5A"@7W|1ItXWyWPHvO(nH{EQk^oQc$xQ^~TxRT[+Q @! {Bۆ~HfLV'A @p*$GgT/@mwBKsѫJ >Cxo#>M{ԣX*_BWDԾ"]@56| H` #HvAnC7z 9PRGd#w]dK+srWQ̃^,yPJ7\j;Hb0(1jp*RDy"EB%~B(cӐ@H:dBNQ`[gፏ#E?/:"2A!"H DlrHL6Ri1K򕰌,y#$xFіRP^6^$Ld3H.,(1"K_:b1@hb'5="ş.!d 162 SJYlbn@Q&KÌ$?aE9˂"qR$$4e`F6 cH#HDr <*!:zdB< PVP0!eL?nAJԢ6dxEY]z0%y2ǏlsN$I*8wd"?P@!$PH(sJ\"@&U@U#ibIl7 G,zT ;'4[!hGKѢ "VH䲙ݬ<{F~yL)XV]mSԦXeNG=,IdPͮv{p'쉓;';H2|n'h5 K^wfaI,&d@"#W*rek;-!$^4yO*NrdS> h-hU`#5IOL?d?L1q{t(6)0d[~JRpY(≍Xβe¹$hGLDyMH-5DM6 {*ɪGU "髿Wv]BfFyKma]H igIi>M/%bvݑn"2!Om -x !Ĭp*qE rӎƭ촴M+ 2PrOsX%Yէ7U;DHrd$Ƒ@+HH!!X8G$9&Ȫh!@0Ӳ&q+d}`5tPvQbIjα[ɖkt>Eaq5obAYq!MWnPgfqۤU$Ay?:x р@GCg`!pTxgC N%zzhn&PV7)Q#^Gd!;UA6^w:[ 2b[؅_8Euqsdk5pfR'vZȅ^r "Gu+aG4%HYk)t_7u7;qpj%QFWn''z#xzpLsiFDXqRg;w{wFLM`@p `vGt#y X|1Պߴg6}hٷ>c6)(QdζckaX\`&e8uc+v2C yiH_bF%1+C%ыو{$BW~3#qE?7Ce_̨`zT`?(qH9W!u/Nh"Yn:aAC>%HSvuDWxÖpFc yk96qH!ti4c)bh4uSYY |d~~"F}6'h[=Ї'hv9FS'=5e.@Hf@(ј(xr;`X 68!X+.إo%ey" T`9 =yI:3n)ypo')7ILNEoci#1_"aѨթN<! jzx"$ X0꙰ z0"0QT!:aX ;`j2R 6` 75 uB3d H0uG#7b*ZG2ᔹ.DiW@<`YW A@֣ M`j㦽ńz|`q |JX9 eڥy.TR;Ju^EtU`@PӺz5!}\n *X@!_`~`:;5{9\HKw'oIt"4k8d P`ӆ9-j Bwي&W'_ kWѧ! sj9N1LDŽ WqߥSz`B#q^kqX*DjJF]V]o`[dPp;T BbX:ۼ$siL<>ɷJqq"k&v2GۥIz@AD6 % VZچG)wZ{v;VPP&Ќ0bpy(ۻΫ{PGU;03`}8>vOL&3V>p?UIV .H?/ j x@I>- PC{;Pq Tx[{,N ŁWkwLx;IM>>=Xw `kvÀ*+Sٙ|:%,f]#%x=ҹ {#GIM@]%v!r'r_$:*"< "q,"L_ ,"{υv o?J58h{ 6>B0У+TM\Ϩ~zƎVW!ƌșA2n#M>Bx#!y&,fϧ[\`›)u͵a̲^-7M6;)j%#+% ']#ֲ=-1dۢP Mĭ|G}o*/mo-w `ݍ`K!|F^ m<z muM; QU<ݹM U@@ݐ#^">&Ap'$0w@` =0=; p@~ D;GN` =^@ V   ǭo6^ g|9qIP玌}xt@n =A!? Ln!L5@ע^~ꨞꪾyG>^#궞뺾!>^~Ⱦž^~؞AԾ>'~ޮG>^,? q?T3U^x(_!,DAX._y6!Q+^%K;Q>JG_Jo Ix'prto'+3:!@z@|h?;m/dk:J߬Jv?{Suw~9t#AH,q ۨI?q4/w"ovb/_vt4ۮBi4O!,F z!80A >QDQF' %MDRJ-]SL5męSN=}TPE!nB؂ԨRL :MU*I^~Į_M8vCJPڠm!;pZ1ҝId FXbƍ?Ydʕ-_"!~rR3A='"YM(w;5HƁh4L( CFb 0 (A@lOD re(1:`Y?G "G!w0@Q8_m^~Rh $g5ޠI%>"CO"ǽH.~G>rH3uЃaE8BBJ C(97vRyU 2*/z!mG )4 FtMc/-kQ"mCcā qJ$H @n폀S7@8Ch4{q1rG|C|@ <"ܡd$%9IJVҒ40DԤ 2:dX IPx KR  `I WY/$A> JQR$]CYW.!b`0d2GM6E(tOx*/!(gC 80әn7iNuSRJ@ nte:*Ew9K6@m&@`z`6G5G6ěp<%{ʩBUqiT*AZ!Z݉ЭS&F/ɍU{HV7Բlf5Yd(DUm eBBKٕF\ Z*`S>1-bӖ^19Z?Uڄ!Ct"w (A~[6`7s˹+ Z@!Ǜ$0YTo~_Rw(> iu{8B AnׁY;Rl*6I.r-~ݝ:+J)}v  7Ⳍx5R'd&T}_&7Or50YE@RB%v!c"bSk*$2Ui^/Sf_\釁L3u 1X4;D{ [蘰{S4tLpO J0*d)ԧFuU-4lۗF=\QHcf.P%hc+" Ӛ5.nug"X@]+@xonȡLbә֘q4EhK?NZI {7jz7ʽQ@sIskbuXU 21{͸;YBgD /qpOD9we>s\`HWtC :D`><y)N='{F9F2d6C>s#19"uZ`asw*@&q˛!o ; A:7Ŀm֪zF}6{C^xW =E>1m}qg=${?|QC hK07 ^\;  I!O7f7j>CHC؏r|?#7?@G!`$3DT@`c={ 2wr?3#pP`WQ#<6k47<K D$T%dB "q>4,‡x 0-` 8hPi)#K^{+Є(XȋȌ4@/ЁZJ|4Q-`āQY h79ÿl p;RE,|9B4ÌHI-!A9,ɜȧtJl,x -F*˽˾^d EgGJ?FJ r9:k{QaLJ(@K(kka¡$̓|  Љ3sLL[dcw$ydbr4 h"HI3l M* OG#M*BΗN0#gLOp{Έ`{)؄ ,UeIqR}Zz H)_y RQ8)fO$D!Lt&(Q|ʌԧP$#OHšQQɹQ( ݌0m-.R@Q*/(+]#.PD+6+Jr 4e456MS hBQuEՀFuF&O؁Z€a0Ͻ9@ 7MC%DՈ7J ls,#`a%V>.7SA$喇7$hŨ?/D |E+pkVn֒7.s>F)~؀ʼn4Oe }LU؅e؆U7V  hC،؍ːlXː]58H  `8SM5ٚa= כ $`Y~Y 1P8Ǔ Xhڒ(ڙZڮTՂڱ#&zAMxTP0[|Y@ZۿլZ5{/,ZŎ@ƕy =е=[[ x\`E]܎ܮ!5%]Ȉ}]و`ɲ/ޅ}&;`pݐH &Ye^^ܥ.^%zHZ`M╄Zm5u f͞u;I-؍(@_00a0`=B &>qM] 8T4 ^ ~^()F5,NЈ  4V5f˲⇠} "M%2 !>'n@A&zcH2 6c>•4.KLdK9(KeH6JMfVvWNfQ m $ #8(bS ^F;vKb6cFfep]a>  gPZ_M8]]bNM@.q&gXQ@_i. Z ވ=6MH^r]jd}ފsf琰啠cPڮ9.Qa8mg]~ I X]4>gޖgJ=h`T^qfD =鞾sPU[Mt)If>\`pj7jgH萐i6k >ؖ@. xZyfj^i=΅wሠjH\ ` ?þsb0lؖ. g~iXgF}ml`Uܜ(PsԞsVMVťfFnV͈-@ mmH> w\&fp͓>v6\M(hIke7ioeQmI&ߔpjnQ-^j^p@oGXa鎀pmp[hTfpUk߽goq)Q(D)唈~5dia/Qg G'(rHC(@ f(v*H8&O.(!(Q`  sPx.~(s`$k3_/K7>tޠA;fdQGwuQZ히_(HFW kqHK]MwZRuo%kvXk'oǯX56huq] &qq(o3rp7 g[!o8"|v^/߄nA5eIXa,q7$htnXEtqNqvxkR7d=wɲtx woGQd5['PqzxP?@@v`|/Fyߐ iߐ8x{`KFv5rfVZ(p>NeW]OfnpϩgG_6Oa{PpK۵7$z `>0ş֏$o7  m|ǟPzg˧/ޢnA^bzׁ}yVpRs^>~%0X$xFuA_7/B?w*h  9!DG XMLw)P4ң.°w7‡/n|iygB^ `BY"k>H`s/o<= 샎^Z`(֮?H[mᦐnx * :VrTDXD D$e|*=x")"]wLdXhG$MCY%V\yA 9$Ey$LS MyXF$ոP^$$a9aY$I iBfA A 4' :(zAJ29c\B/0f9 ]%z)70h$P4ШB~uf[+J֖݄B=4BLDbwHZ{m @{+eA-"m@b. kS } Mҷ%P{0 o&ukP H+@ڐC Y>)0-2:饟85eW_Kie%]-*{D8n#U'#_'~!A[=u1LM<;I3+9}!e>GBZ;]C/xˋoD9 c]2 h& RĮiKIA0p_n"%A$|3!(DA!X]@v!QF=%2 No^\82>!D+ D=((8‘lQ Q# )Omop|IF=8uI mX,eRYEH4Arc1B<)eMQ|(ʐ&7t1'<)aESD$"CIV.j6*j  @x.T+sdrݳ%Iif$)"ukMz+ŧ6 HCH .D:xr햾~0#,n @(4, ~$~ IHT$D N61s>1,!F>2%3N~2,)SV2-s^2,1f>3Ӭ5n~3,9ӹv3=~3-AІ>4E3ю~4#-ISҖ43MsӞ4C-QԦ>5SUծ~5c-YӺֶ5s]׾5-a>6e3~6-iS־6ms6-q>7ӭu~7-yӻ7}7.?838#.S83s8C.򑓼&?9S򕳼.9c.Ӽ69s>9Ѓ.F?:ғ3N:ԣ.SV:ֳsWO v4bٽ&xPrg;>N( wCiP]H$Ipc=_E ܉K@ڞ:2 =R2:D!@ ܑdAt@AdM֝Q^B ԤddDf1 .duN G !6ۡ&X#ZeJ FR$YCS ܤ^FD&@:M0 :CeSeAS:'|aa_j%fU@8fvfOc߹@ $%Zj6jJ" I1>lVΤc_e<5^dTcAfݑir`c^:%of&vk@IlOd$ܥl&jl& wZg߭g{g',%IBU>`]Dh@&h_e'@ 8D&x (Aѧ{'dۉ'y A hF}A&l!؀cƒFfh` O`CHڞ&f&fN߹~#D$Oa.vg륧:DC]P &j"ݚD:C)D" >A*(})I(E"_]o:QݦD]HkΡEۅ(N)U:'v Di)dM0 Ĩ@HFVjA\HȪCAs 2`9Dݛ"N]]㆚(dV*A ؁|k~I}@O0뻚D>2jA(gu:]D>ļĸk&I+DnC 춎m:ɒ% 4geN k7r@cZlAAl lĩDKԖMmC 6%D>ܢ.*Zm>ڎ. H.D>zނ̾]:ߢD'ThOlrdDVA.:f(ln. /^@쒄ҮX0^b f zZBD*No6.2,noA>BDFb/+%0D%<?Bo 1 Y" 2Qdi>]t0F(LpD^kݭH$ >& qA(2:D# I'1)o rB߭1Is 3Q&<&D#C 3FJ rx:M'R //38s9߄4;42+337D'K>X%;D?C2Yx *BI H_A# BCqE`Fgtj큥N BFgtzN A@e1(8CA& H4K_A,>>'5@1ufK AD5s 8D@ x5XXDc&RN(QKC 2 A lDs(|APUcV'E( ܀ ؞RovA@Ixv݁6YjSr5:.lež!.2D#]1R6 , ;švM:omc'k^[׵ossԶv*Y`suaK1ewX$79X@7C0e'`nAx7i3zcb8sxz2ܭ!vGo3ӁK(0S_ dw[;!2QlB~Ýzg2 xAx?=gxN8ZC،(AbcϪgv>W -D9Z|Bxd d&br7NyUy $vcၚ!ALwT[Dj5 6vIyϪçI9 (dB5 ; .#Bv1~!P(7@~zǹM sy$ w::b#A! ~fo~X˞  ڰAd;gT;X67x;5w6맘;;;D;eػYud ;;XDL7?Jdf^ap<^+C\W_~N1ON8Ll$ڿ}~wȐAH~ZD~m>D@]]4OpOlP/_IsҧS^&gQ ^܀ /o<:S.;o ,T*<{h 9A QI,QLQErBhri$PIQhOFkLIr6a H $bsFSrġ U QMUUYmWaUYiE >d,RQ ^}[ @4 [8YIP.$Ԡ;u=GLJvNbڜmRׅ3q "\tMQ6qWbi^e\^K`k1X9?#` ڤ@H5vd (m}9[OVf 0I Lixeu[N8`ZFhX8Ni5TRb&em[;UyzXݯ5^ʀ{G7X^Gfّw&q%g[#+7'# vp̖TL.OA7htJuT_֏-(9gW$^驯ϞVGj\@4t>@:O$iBעݝ'԰,r/ڄ$@o I' v&(l1=#A&&K4a@~t+tN%}_diI@ZhG`MdS2ĂpVJN8/Ta G1ʏ~*!xÜQMkR:mtG9  „ pQ挖Zl#AQ&#M~7V"2!Dm*#'8P$$*AJ ,$r,N!BYmDȜP:)P5b+ KȲ}#-#H]Mje0 I}7Nq4W,iRrHqqQ MDD=;pN @I&e(BdgF ՘΢zGP k=U"QܳP)Ga&]<= Rb*eBP9y(Nyl wNNUU NkTJVPnRtYԊu MI?Mrmrˉ*^\XWꠣhCB${A~ִaQ,P+'=lD.Ӕ!d=HdICUv,]UΖmq;[M %pM nMkAօS*9N婝ۃv t Ab{ moD[єAڙ6 z^K  i_w]*)sa OI]pW x`(w*s6J4pD kļe_7~ &oq|A~<2!"~ȎC8f1-xdAjQ:cyG悬m4IQ3L[#bj/qE<'~:WZ!vtjI> ) ϰRN!;flkk ѶHnuvUtZ4$jr/N2,绀e2iDW׫ +1_ծs}]k\H:M^b a؛߳> ;?D!|'j`xG;bDhv9q 4zώߎIANh &9Z4'"}O{z%ǞR`u|"Ht=!|~'=!|R.:1O Bn/%z H Lh\/w偈 P! !ibF.!>0 Аmq0A)6a`QN bvdvE%Xc (Oh-h 7Op-"H]r }"fv+*]O!O%fc!b SaXnjDNo mD 0%P!Ⱎ"nN-115%pzd "] j"IpP Ј~ BQj !0 rq{?F@ h~ࣀ0$e;V_1~BT!FQ 1|bajDk]LOjD>62 r 7lҜldfWDN lh s* |bwRɼ%x䤲$(`d;`!䥾tWH2lNR]T%%mG D EBEEE "F QFsJJT@@ .jx t"&@$H Nb@4x) !B*( tLM124P 5&5QKH">SA5TEuTA#Tmn$a Q<nPGc0'hTq5WuuWݳ5~W@9!-"U-PoQWP99}n"r1yuZZE;X;F|guU5%7TRZٵ]]-[!#QSzހ\7z@Q%`<^ ` `1L^ ,a_OzU{\V6c5vc9Vg@F݈d e`;e]eanhfJfit4cg6hvhhh6iviii6jvjjj6kvkkk6lvlɶll6mvmٶmm6nvnnn6ovooo7pwpM$`p p%2 r rra`lsAnHt-W!FtMtYB N@uIBwv`ZhwwV`7wUxYn7vLĀxNyylx׀wlvi`!Wu%x7ovcWuWvQz~`7{UWM" lqq` ֠qa"GAQDxUg‚a5p9*DƒK+"x)~ou7v^tU I[`d ^v `W ?X Xu*8UDK~bIX+tŸ#x" VD l@jv`!Yu %2vUyU" `w KWGUגIW9t=E@d`+NY+*Vy[Ya7G79`UWuk yjOvawYuvqNU"#ؙU$dtgš3?vt*9$y 9UWU|9iv_`q%8"Y v@ ڠ"Kw ZuzE2*t!1zG!Kw/#26ZBY}Iy!dtK%tW!h@uQ` ·tלztZ t*tz:Z*a7geW:Wњhm.a!ֺ]a!j@uU` v@ڇZUwIM" ;횰Kװ-{;ǺtU fy!D[ui%(!tW` !^NZ r@`ZP fX^`Bi۶q[y[!bUh J`@vG lN`h {I!T`bsIM@GKBks{Bۼ !`R{& jY- I|x3ܼ[۽ P``3< ¿\I] {;> B![!F3[{Ulj|!;;$@ʇ|A !H} K@a[!_b<:!w`ˏo .a׼<]umƝaW!t} ]u[`+!vuw$"=U P]uU bݍSzt[ F]\ z=X!fxU 3 ]׋*}w tڳGtK!=8!=owoݽt t#>۹}w]ܳ} `G `BU =7٨5!Xާ_%jY Yu XR@MH ^~Mx f^% p~ vt{7Euv~ ~I7ۉ`[= ~vm@v^U7GI7 B%> M@ "oW9^A Lt9O^^~!*U7{9&j"Kv Z 2x v_ = bW}{GIW$ԿybU ڑQ 10B6 :,fą+>=EgFQࣅv.<2J E49dD rÃ2SaE$8Raɔ&] ᧠8ŌǍJ %'~0" a̴BUCąDoHQ j."F c^hꅬjCØ3A EN\0tGaGhoS^XىIY?Ĝ&7c_h0g{ݶ vOg}T7`gxD5YP{Y)HPW }PX q &m)gBc>dBIdFdJ.WR Z IVA0|)DA|If"]҂B(uSB*XF  FGH& @&a֌I$'iDy d~id!0IИ : 鐅ѱ&m${I&h`P =F.$褑b)&hZPS p(~($z p +}gB| (C!l̦d ^zI) DBFr簲\k.n^%CĉМ٩/tk\ifL s2Ls6ߌs:&@ ƠF'l]Ƨ5D ;DB8 &L]&@YZ: (<#Z୭Wtp]pD*=6O*śhS(,V;7yCjH-nn8Ax _5*PI6A9wu*q[qQ/5AU+ԺI[T?}OO}_?}/} fB:,Em,C!Ro+t~[>HPQ ld8i ,jq\8ϡm4 4+V0C !MqZTLQd:F8h~|H[]G" oS/ -Y@p>%-PQ! \!9${DKMJR!wv&DWZԱ$JH-Qrl3 hJs3WTbMœq#"$22 N!3;LI.1'DNq*0I)d| )|UBY™g=|,xiD٭.~!<XBF Qf\H[Jޙw5(yt=I!5RsLmS ը>^nR)UgR@\Dmd<%H9RTM&L] I^:n\[j>1!MBLR(Vu5iAB.ZeCȰ֍du,Md`xKv Alg_:5>=+Uvo wM!7!U&b) j۠G)=Vu7r]!tM]3ڎvY iP.hBWL"$-7ӆd I6%Nl+BfPjx?[7%"VHasVL&ċfe1wg\^: RX K}%{_! f[7r 44U!A.);ֳ5IM3,D!"HxWd8F SB9!gF6ơ v7]|491Ek"bְ{QOk :#/SdzB. nKpZDZ3ߓ&IzBFa2ZsmvX!=OH\!+{J7S :[r, a7( aЇ!R2X iy(6v'Ư9(|XX>T~ n&v\z` f@5>Q׏;$6c$S/} C, 1LC0T:~JH'HhGB8K y1{2SGgO/bkBM5'Eb297(35pvvχ||1n C2%Gg+C 9jn @EH,4PE-r vYAos!-B$dDx] K(w.(v}1q|&  m6Cww x(@<(Hx rE9pm0kcpʄD`bPf<kxCi҂vhg0xtrEfy kud@"x,57pupX|m15Lȋm6%Z&$VX(Ȋ5 ј8MhzQ/4_nb/p4 &pM8+H' Q {gx +p'J>C 99qDŤ.0$)$2qLE(1xaxqQ^Ux'-"5'e+9.IEq HՌ igigT&Rq4AaPJEĔ6uI'?|zr7t Xzej9;9X]SC ihV>锔~sWhoAHITEv2x ~%雿 O2y#Q݇(Ѐ)!Capߕ7SÜ(Q5)ItWzIH h!t`RQYq '`D0ePK[}Q/չؙky >)"001 7n)#J%j=1u)<2vq8)ka14e`UE6-x3 6dXdS\v^DRhxf!Gjr JS5}T6|#.>gAJt`AkZuqv0Im B/:ʣ(Q1&ʩ꩟${])`uj@`@epBc`zꪰ*npn$$Epi@=^s{TG\)3 =P#;D%z -+3Kiz?76[3/tS]mIO h@h@'1U{= }gQK$A )>ě ޺ 3ì ^H ߟ48 ]M ON6  <ٷ ]CM!iR `L=-jn% ]P}$u~?ڄ~q.,M'ݠ|P&aHnږN Hb pPڛ 0~ NNّ@7^nsT^?٠ p '0\n| OepLb^/_Ip0O5o79;=?A/COEoGIKMOQ/SOUoWY[]_a/!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###,,,444;;;DDDLLLTTT[[[dddkkkttt{{{27"=)I6H4*f.i3l6B:F>KCOHG@PITMVP\U_Xc\f`jdmgoirlwqys{v~y}؆y139;NPst_a>@ZNj}ݘܓߝڍ⦜ᣙĉ˗Ȑ䭤洬黴Ѣ•ŚǞȟɢ̦ΪѮӲն׹ؼھ¼ԩ۶޽] H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠO(ӨS^ͺY5@۸sͻߔMȓ+_μ/ 'سkY*Q"A c}>>IcS0@ ,A@QLp"!At4M}  C<Ѐ2'm$&1!q|ݗ~ Q4 AA4,: 6q`I["  pZSfzUJ<rR V  `p fX6V `tH;l!S:I"q p@,5m&d,Rɽۡdgͣ(U1oy|)!hHCLR 7m $;ݓIx9j@GH@=z8my4iJ;NP#HT0)"!'|I4GGgmPID5Ԅ Jy@i3Lgnmc3 ˰@,P+[8=/}p+XaڠY7D;ڜḊϩ'(T8R AR<  f(`C{*8 #K "ȑC; 'd:I":Hv1#t6!/K#F8;VzL 5>4AQ](9~q N`/WvoU&g"1#9>с 0aH8vdMcͿ$E$()RRRg\!'EG(qL$ XA(Vj<C/:r1pY$NB:ESudʼnbeW`iӱ'AvNG2q'P2bf͜?ـab$ҺF9&fKlt WdHhMKđ'Y ! F{2jx1&=wƑ0i3HWNQͼw\bHc=҄f.$'lAP #SX @Ax@ڹH^HJ`h=j*۬t=E۲}-t1]Uoye6!Cp(ܐCXUXŚ)[dhvڴ"F2KE,ढ़(O /q* ݝ蘺[XQ284 JF9yLu '`ʞs[X82/E.['j2R7P"^$lV,(4XL0ctD`]wdu xO#D'U֌<3c3vmTy 4 DD 4E8! 'B!MY)&FM\E؎n^o f70qH]mT0|u҂C >a˦73k'y yI(8)t5wgXr$tgReG Vq!gH(:CYS|afd9p1OTvmE8G5d K7!$8&xj(-ܸ#8G׍!:8U6hH؆bw.G](jD79H W"Q j&8/58m C'Hi'(YdvF 7 vr}1b<4Q90qUcu=$ve10 GW# 13>Ivg?9蓉y.xIau 9)hXa %lGSm kg]avґ*5`lY[zyv CLf disٌ! Qn9Pi'jFsY g_<;b Q2 A9w'2c PY2y1ɛOV!cAP Qc/9&99nQ2Jv @2q!ILX?9ڋ јZ[;t|Az':AHW9!Т\(-E C9h`8;Qhɥ1D<Ǡ*dwn{6 | _ޛĕɞ\騌w0AQD\ĘQ#F(R2cLJ ȣ(7 (R&.CRYh͙wj$S႟q\g"TdH^ŚU֡O,詴萆^l`Ul& ͞M""p֥݈km+٣Z$ѢW+ x aU7T4.O7#uZe u)#]@K,i"; hH}Zko"JoM*у!mb j " z!U<*>7BK賩0D7~ JQ(*大[45v !ą8p'h*4f(§bnpl萳IƕjCq#$!JFI"Xh`r'&$@p( @!X!N87/B1@`+KϬ(93OJR4 "ml m *3)3rI,}O_ Jk-<*M[|G@؟l5\qed:dz3'B(¯2Jy*"Ĉ[Ξ2u\iBxuS,*V!8"!Z˳"N tPw#e*ӝTk4.,E/DZ̨*ejQN+pbxxeV᫪hhA:ddn I‡6]] X=RY!]#'v!bE!{V\m&!?<}& &pn ^#ڥ)paNކy[,=:ѥC*sH[\w {w4mC>G1қ* L4(+\b){PDb@R )Z >ɅJOZR8v lP'^@ S'!97hy૲KTE!z ,+Ɋqcދ(! Y9tI,/z13@dF6YiHڪ /=qo1Bݻ,%>Y$Ce/-MH+3B,ۚ8 c1#YxH,҄(dBCL#lJo]tFeBEj8f޲3X!vBDu#hsH0Lgo!4l`!;7X(u!^D ^18(4?e Q^YOO-S,91#ȱBH̥!Y:"D`xF ƐRt)"MLj=kĻ\/5rIkF/b]|_R7m3+# nAWy<GELHIQ_}=_#!^#^& BUbBUKўw;gYr1{Wh7 Wlا`_"mbˈs,z뫊R:1%wh@T" È<s B g2"ˈp5>(ϣ;(0㬊&ۼ5@dr B#x\&㗁+Cqۈڼ #21Ns񃹍BB>˟g(5|;$9* *Y:HZ'ъ: ՛8WhQ̡,L&%ᣆpA>q>DhJQ@3xŒ Eq_BzbN`Bc,*(F \? EH;(03C`(E`C'B͙CNj(7AAA+ T8NjGl̈ztC& ^ Z EE>@BǂjHCȍPEd {ŒIȌ` /;p\5GHHd&š40C\7G+ YGvDp7(+CLL 걿L%̎y̢;$p:$Kj:1ŵĈX [Ӻ Cb>@Km3dlEDC ~.&AoLiq&C=܈P"̹M0: 7(%(HJMhD1L(4K t6;ơN CEJ1T:8Ȃi \L)E&Hɐ H hĈLt" >Ģ34xI8Jt29t$22 MHǰkԀ#DO(Q ң фH{47lτR@L`@x/qiLI˦sCzIC3P1PCjɱsy%%ԈѦ\BNW DGչPO@R>`f1UoPΒԋVUs*WN* +>m⬻| !C ;^UX+TS\TΝPs<݊CBf p DMRѽ4EltRXh֛iGW8ӦR3UpXy͸Ұ̩oD֞cPP  l?Jv Hj)Z=!Vd,*X*ӭYO$sՏ Ť^ܧUށY "r$ T"!T~ͻ+t V .7ˋP@Y5S%;Wm& d䮩$?8\Dϸȥ X- A.B=Tۜ\P @GLDf(Կ\gzoD/\٭B^oJh7^Bދۉl 8%IGd3[+\߬>;Dj]F3܎]a jK̈YS٭3l,lM_d?_{MX`8 3=(^#) Q;X-WgN$oB_H7ň!Weh,BM-kتz%`@s#%_4}8P ձJM(}`Rd84*a"? S _Ĩ=h3PRt5ԓu _lhdՋ:S^I!CEr@:eO$_(!xTHZ>8fkaj]!A+%@@Kf_ݻ*HI[_CBhidȒ;ڐeC,X6>hhg1 _UNdYKR5lNj)IFD(iW ? Ӎn&>:l;3 {6/DlN% Xފscfm8(Sd_ЁXJcCж *o]"*V`޲bCBpCȊcɍaG"Φ3A.pƈ`ޒמ& + 9SYdeo@r "GM.,pd_HFn4J@G 0-DgkFʻSUa\"JrC}ȝ>89!_P * fg;= fVc@k{ξ{TE!6@Kqbλjr]a{} bJ4nöYt]?óU.?0of(dgC4R@trǻ~03s聟PTÅ%rAI ם>7G&'&Y+(yq+jkݤw_Ei&N4nhBy/paoB@K[%Iwh~mBώ$w̸G&w8QU~f6Gp, éEf=|JСtљ: ! bJPU>tO~Y*ȏ3e",h`W 2T( ā85\ b**T`|,i#"B9YPʅA\$ T lR@3]h΃Ab2m)Tt␤}fM㐫 5 2ئ-u kشPD+W,':6s1@2W s1_b}ćPF4MD [(DZ֐! ~$ZJΦ4tNQIȈiAB$o`fLag;Odӊ#IÔr~ 9)QRςHTGBb@(Y4-4H r2X1R*C, [$d=H9l(ܑl4[!CI(a R, xoh[!E&Hbg(292VƹlË+QLMS h" k)`ލjm/dbtgI+YwxAݸ{5”wbx-9g6)}u^Si&r`1p9!-eގcB ku 玊׉9c2@T?A/8"'1kzo% 1Wx^!oGi|^{I|rHGe@M@3,ρ!Gy#^c@,"HGW PPuB!>S}D Q@A.D_T j <BnE |@}HA|#9D:*D"0k4y9ID("DJyH`z% cXzI{5GLtXN[JC2c]yxaI#GpA+"O&bqXMc1iS!|ckLm߆1*^RъA8~"W?YEtcQHRlyUS!E< c}!L=D6N>☌NC STM@W67"!C:UX]UIU\0!C`K&i΢$vѯшgfSh#P1Xd]I(\r`o'vm\i2g ll&fW`tLETbU0 &WmA cNgAh6=DznS,aAEHn5x)rF?B$|lRjrpigVŃBq>-EhȖ4AYBmK|(Tq]u6DBn$Z~gbd B <@04PMBD.f"&Tf56fb(]>eN&-5lcmRjћKgA"TXe~V jB!(G(iЎNJD:QȐ#Cqhh1rZߊ@ _*d+*ASDg'aE܅Ddyim2 (hJհT8)6@TAz :`S@]I)Gt>&FJii#jShDb?*DUkL$ByHY{likc-9tz3:*WBn" բBȪđ*#G(5ŃPlC`ekD: !*zA:eLUHb*FHБnɟ{h"2ğZ*S)bi-SPApnS`mҚ%G@e誹X1mZӟNclYNri"S+C4;T*]hD!2xF2" jmA*R`ۚf2YA,Po *D`J+D!>*(, SnA /weޔB9,Ax޲Šd:Ph.#D:1 ۶ND{DB)*x n&-q*JnpEȢl#RBnspߎblܸe.{X-@v,۱rFl/˒oT\OZhhT3 ^E)X6l2!g)DBX$ZuܔN+ZLe [1\ ֬cȕ*&EGYexvefH#e*_%ڣNe܊E,,튄ffS$z^bX*z!؆^^J3~SR2T5oDC/9D=iNGmUlI\).rDhꏑD,e_E:Ƶt6Qk3y&5A3SB*BKUm%1v"\Fj2Im[*:oP 7luHkߐy!fh\Sgp=+XhN4`n4:vd_*@SKPBcsScU gnMp~ao0$wNJ{6bH$7kv-CG}7- ^[GVDr)R碵E3EFuQxO(so$u) 1j$22A&pDҍu˚ĄnRY)t'Er5h,ҩKlcDQs* lۭBZJ0AX\M!c59T(&x*;FfcxYARdԕb$eWb;E9ry5?U$ ߏ7GJ:AEAud-y&32J1c6 {*{',yn\:C/F rzicsf*twĸ{#ֵmU;_ͯ W(c,(~{nj#Jd8?Z!͠^wI:܋0zDh7P,@@y;Z"zeʅJTvПY0L>ϧF^e@tsz1(DzTmU; Yƣ.pamm3Ekub.U`8sF/igTXsf78ĸnd5fI&?ʪ@~7zXJ tD>8vSta N\/sWp)<WI6'AlD(ǪqD{dr{DFjU2udcR4ƣI@0`ARaC!Fdp"8@U8r rB!)V%D%6(T*. gODP2JfKP@>',!TCru`,L)i !iIY}  [<8ZJ""p`@!'n؛j!E*)%, d5b\Ib 2ֿ`7^NZjWTq#arMqQ>/ ;LտguXʨP\;d.J@"҄<c+Fn( p ϯR ;H+h* yZ-ar ,ĒJ""R " 7‘R3 N.R6x,DFLJH%ʚ2,`,3d.JāEMIDK҄C{X/(81}VIR E$~yOvl\F< NBH8Q>  z>_$I+.csb_T)8-/IWQ! (!FJ & lL"xneAdL9 xbÍDqG5&8$H(*HpzHð0uCh"H"O4=xh I(1 '2d[?t %L6rQF="2 cG!K$IH'3 rFR'-C_htKy9 Ě`JW$NOnx F鶐2)KID$xDN,!h0+"2F~I C`gbF47K !vXIN˞"J3٦+bЃ4 J>-( iBO < 4;SBBC DVǽO!*br"|& Z*dkYJVd$QHŕC1*W&teIjA~'d _zzu\Kгٌ !P _Y`EF}'Gk VT*iDJ"\Hj6]=EE>Ĉ $rnfv!j%AIׁ4}($Tڃ *m tIP5c%Ux(%rrpHvљwmg߂,ƙ>b!5H,\_,1*6 :g2 hIPc|nVp&P! NR`'Ex©~/8 ,:""k(: |p4 ll0x gC$OD2(JM,#02-dۂN "햮9" c)).P"/.$J줖#A PbPJMo4;HKC^+$/8" "XQT 𬄀 ݂OcC"-H07L" adR' '*]輐8j@ )QRǐ'jj³R,"Qz&&"Jd#Q?">r!1 !+ Q?E&m%qnmg.p{h!KE­ v/?3$*/`DB$ JgFfa' .4j4 @H 4'l n+4ÂPN!Ilr>Ь183& "2цLL}|C` AdO#tF R3gM$CO,44;".Kn29;usBL"fBi5M@grg\srTϫ=)V58@bK Z5+6pM['Dk0z A RQ!K^wvF!8A ^ Tf'@@'{Mjt'@uP^B՛'Ft-4o@LZwՄ 00H,'BԔxn@W RS2gJa:1vLgIa$V/@`hSUs vF2jJVR@#L,jop֛@NGJf`0 d`6lV7Bs~7Ir`nd $ @nĈwsxw7yWsW!n6 nQuuךx Ą x!,O){`{!W|8.wZ Bֵ6Scݥ Vn{y\ `omȗDx7UR^̈́fυ5r}px/`z$m; 8 z8.yl&Hy80P8lmaj8"0KY.lI@x9A A%xxΘ ؏"9EyI0ֲK9UgAXwa9kDZLWq9"B}9y{99TTU.CIyyr9͹'yT9IˮP99],9$4KmB%z)-Zzs K/ ZKW=ф,Lڤ Z{Wwezimq:u'Əz:z:MKE:zY?y|:zɺ%)ʬzٺ:홗}:zL& z ;Ǻ[BNu;%{)-Y:3ʁē1A;E{Iav% OM]a;e^"ZB7g{y}Cm;{;U$b;O!jȴ;{ɻ[RЍO0ʠϻ;[R;m;{1"mhNӮ 9/K "@нY@JN`h!`!L@۝m]ꫝ tϒ#Rw~%W$^^^ۍ!(!!H!C@ ^ӞK@%_݀$*_/_!H"f =}!ڻVQmXJ`Y^LCbMQT_=iuy-u __g$ʿϟ;!H!؀] ] @J\4d P(ĉ+Z1A:+:zL$K<2ʕ,[| 3̙4kڼ3Ν eRN 5@TPe^~ fbBZT@gqTCfIFW'!Di)s0 &(RF%AD dD6ZBc~ jW!}p2jj& ^ŪЊ:٨@i(e!9 4jBR)DBjXL*DܰA^E TAA5: oKoދo+m:P+:B$իD,;б6"m0P кS*خF !  tEJR+n,Bތs:s> J‡ 7t !AW,1F $1+‹/5PQDL4R@!KѸ D($qA/x?yO>p ɀa(! $JB jo(} B)Ji@rsJR I-°+zC+TކlD;"5k_}o}޿CHt`B ꫟rC\kVKr! D{g(mjsBDo $kHm9(弐yC>p$, +4:X/;) R18 ' HZ!7LDFW,"]Lf$1AV΃R (p\0dIF(3*Em8ĉ6!E(ED|? Y  d 9@w6HBŋH1:AB?1rl+_ X%zR $|]t+9 !aHG-.+("N4m&R\ BU$&-ŖqH APtsl;il*DgƐB 4%FDv~l *H$be-Q"<  k*E ϐt$-I)C)gy R ᆬ5&ݤgBA@"h! rЪ~28n4E@j K}މ o Ƽ)Aނ!ŝч,ky"0eŔtMrKhjSDB2R)!A S;t oHFJ],x.F@\ GY"5(-V.kzӜDS@K9ѧ@hpTy & APJ ݅́ÏAnp$Ҁø.s،YbZ u"oj)8=[W܍p$b8熔X!I$^O{GS[O$J@N„z=_CD!Fh̕j{ܐ&z 5HM,-.-CAPpQ glIq)a=Hq*|D $ՕBU-Lěȩ A 3vm X TEԁCY LQH]L`e:!C!\m<ڲ8q $͇)ȈK}0}F1ݖ=j=H/1J݂+F*-`9k;9 Ϻj8|!|b|󽯨һ{Y!1-Dq@ϜmDaɀ d{8`dÇ7laŅoz D<Rm *m41܂h҇pU~PPЏ{ 밑*]P{ \h,88B=\;j-{iF٤ aZ N3⃚qY g Q&dÈJqa}A  A~C.Ǽ .J~2m6abQ.PkM-@ꦍ]K]u|)辗=B 軓7h~|ި^N4k (.{9%*ՏJ -Х Mt=C+ڦ{@׶>X+WS!{, C@MӕA @Tߴn}cM@CQHP0 @N,ќ^*A@ M {ދJsOz  @P`N!] o?=NJꨭ>@C{.CaBcE6,c ߏ3DXټO  LA .Te@! %NXE5nG!E$YI)UdK KqTMMT?Ai'NLp` \ĩÁMSPj2VC[) 3Vs"ۃD.YjjV( :%,RXDj:\pۇ&<0ĦJ`Py(a*"xH:m0q@0`]LUEۑuiC?+u!Tw"逊H=@C.S(iA`8 c@!*K轖 |HBWCVp RFsqG{G rR4 *bI&~z'Nq$$@Xb:`);.!֜Bӓ0L&*̅Dh͍jTͬFҩ0d2 Z7O("ρ"E=H+ƉH}(τJ *EQ`t5ԅ&TC$UdV4,BVR+/Cih(0M@Q"tHvDV t%8!S!@DY[QzwshJڔ~(#xb+b3x*"F(ZD@ ʕ ۀ,f/CS= ^MbTO>)>$25Y߅>h\ 5}*u'k1,UdV{Q[Hk9*2^cGn@v(͇&:U_zcQJW E\CWV<_ZSG8$Swy裗~zWI*H@Q5 G䟚P x$`LhX͊ lD)y o#N"g?)r D6K~lh 'q@0"8!"GBi 8^'M zS"DA0m  Ap X7.$pKLH?.P$tިxHD&Rdd#Q" $f')O)eЇdVʈ,Bb"8 G4p2\*R %hA zPڨȞ$ YRp@L~ˋu yOA("a"$>yLilʩPd@d \ I3wdV%dFD>2NaDʅ[>ҹ#w)6iM1SU? HlwqEz,&5+  AH7ƭ6I+dGz2`D@2Ykfsլ>x сXD)}X$gTW.}zȉcZ"5NKV$hHc$!Dz(G+B>}H|]i3$R=2b"*M= o8GԊ h$fٍ6F4fG[Ӧ6#<QCIF>*H xIEO]do>؏v }HW%]%y!J+r[sk0ұ/2cdF=H^XUCU@BJ˳l'jd(Ag^\;y}5jZ2M p@`bEJ]Gqu~O-ȇ9*Q:nZ#JAwr8\pEl*UDQ iQ[9E>̢T>#8<7] _?m\z;*dB~}W8w 8'd*Z_I>:RtU=+2傏&PTȸx+@j8̳X sWX);=LA\AlA|CH>MBHHDКԈߙ7?%C* 93%\B!S"K7H%;2@-?Ch|&W{k@[+ !(? @W9pJ {AFlDG|DHā&h1 !h \:A#\ECNBz!D_ު;ILGu\GvlGwLN&N|@4Cʉ?;+r!KKVBNea2bU#G4ᤈc\̌Ƒ&?A5 ΁ΌpdB$LS!?σ`@&TO(\PmP}P "HC @8Cȋ*њϲ5YB˄NhL 2IWKÍJ%fH C;H<XMA5jD6lOFh5LCӴ<-S3=S4MSD(9*J$+щ80DW=ϕpp@?`t EO4 M'RQ+SRL(T$N=mRtՄh*MÈb5U` Va֘"NP!P ߄;i<E`뜑CqК<k͈YAGWJE;OOU_S;"Ӽ㜅HשBUp BEWRL]rYU?yMJbXXX샩TS,4 \ǘO:omQ.&ktAcwLW!) "5FTԠutWOY]Ү%OaAkO2+bƍm[}[eͤ$"/آ(9 (6΀U)ؔctgY4<قՈQE%H{xLM]z=[H6P=ի%m5.〮RK]R&N;2)&`}IVj\LD ~;X7>agqcAX%Ǘ9MrPM8>PD^ f>$Dr9N0( Ο4.[.O3ܚ?UTZZםY+m݄c 65Ł؍,L3? dE.vIhIR  D^8 r\u!*P#fb(3O@`sFgh㮬b -__Je d8e*h'-X?{ff=ѫCT،"茋# fs.j?&gW֑Dhl3HKF@a`%xPNT쀟0>X]cb& jiZbj\b% ]^~QLКgQ^ ܝ@ ۼT][cS}6W iFӮG8O8mf>6f}mӎmW6mTX$Fmf:hN<;ZmKf~( 㨘2. raKbY :8[kW𜫄Ɩ븐A@h.-E82QE;e~Մ7v`ުЁ ]`HpoVLBqv/$qq!$Gr q r7rF$&!r);؁s1ЁY1H( p։&8VN gl$,TkňIcW())N2Cp&s^.UY!b F-> M'++vFMfmix %Oo DXNuasL午Ӏ*q*,pqgrvv!  v*)+?$sqtv s{stb!reKhg&SОAC?DO+R?o W$6 +hFWՐ8d!Ȟ_mZP@v=ug!W &۫׾,-|9c,gz!gW{p Lp!ÆB(q"Ŋ/&`6BHHp#B&OPae0(_Œ)Ǎ"A9s HG:mXMAe⹡t)Ӧ88E`*Gbͪu+׮^24@u,Y6!KĢn 8바e[ b"S4[1:Ӂe6N$'Us+B郳dDl$AB'AW|ajqߊ৯*TjAj&2h$+Z4C, S8@ BZĉoU#U3%a<#UTRD` U] )S"5 es`[D[JET/@۵#M/.ĉnʹ2aIգ -rDB0@aQeqCWVf]4[c Q)HdHJ#d|b(SE6 (c (eXIBEe/ c'd ^=(׎=T[Cs*GBK4OST$-#z<"W|GB^RTwXbU_C#}a8Ed4d6j Ķہ;_SP,POd9[%.tGSP9XY(pP 5aJn @|MEtH)@DdoC8rӉʒ dLg/0ע`80 K&ph+12`D2$, ߂ˆbOŽw!!"*"! B}&\_ dh49*FiL[HGx@ )Fx@qaa#MU.D$d94H@ rd*JWZH [#(DA/{2B"?e2!hH J [ ͒C0AR d*]ʆ`9 4WbdC*YHN%C9ʂ"ጞ-Kxh):hH,2* #G;Ѭ@ @pPGCP  -"B`r>0PP)CJA`(p AP@SEt%=iJ-7tX*  @Vܔ i̊Ԥ(B$`hBOR!դc"J!|D(cw2:0~4T$L@!gCAz {Q ^i*&@\ x!ld Q \+gX -C),(̜.uWBL>x o*$\xjVw%D[溢moABS*ĴM-Cj aq%>ֵ$~QQ_<Ľ|G\D(:`J!BfKl8*ZW/WxF6$mA ʐ pfc8ȤTH<%!WȂCd( RVBtLa! Vk \7!eI2`f1,,!/3_3=y 0 DƝjl\,'$%a$K yFc!st!VJ8ժ^5[=:)rp,[DeTᫎ5OĐ q--K GAfC=[ck@n숌,l.f"ټ yt[ ވ m۠6@m~6Qlj3$߮طAΐpeCF}R7JSQKn<[[%%2O!Fr F }N6:h8A8؈P%\6A=! S\(C#ۂ烜Љ7o97H|4@qsYrnW?KW7K fXWb}ug@/loB2plw0v$C]T:H.gym>"x;P>PO 9CF<<>S߫d~]M @ Y:y-(D9"@ZQlmDmOA)-}!B8݁CVE8ݛ$PMi DJ,vA^xC(\3AT^H:XdOFđ)<)|<RzFDaH`C IĎ 6+LC$ @`Ha "ZY,_l%&D=5ll%}MZ)%p@b؝@8" H@bC(N#zEUBD"$$Y#CZed[\fC>B$SCB_Bl+YAdA[yzi i琮ZΌFT8TtQEgC ^%.fOc6n|bĂjVMȩRhj6B`huhtB\iE(C(`('s:狖(ب@EI>>yF<*z꧂{iXp M)UdEghiC'x~6g .DBKifC&.iuZY< kV~T+tTLDd)5j'W檘* @IQg$&IGC$E,#@ȊȊPƏ#^QV+"l ll r"f>‚D8,ĂģJZ6ĩk:RDB- B)TMEN-TIJCPȳ!R+2e) 6Jrl+"j O&DV2(8B| TmD`Mr**:mЭ.\tm隮J ƹnQH=n~)2nBdiy*ނ&ʤV0 0x/}BYF\*J.&h%6AD5DSC|Bn0CƼ&GV*i,ܾ,j<_es^H0žgn~'U/E%KC,OǞXAIZ,*D߭fZz0WVXA+DlV0 DD)E4,XFd YlG\bEKYNc"(1No>1gDް&Y1N<YVp\zj$i[k*B3=S1@,F- A26]l%(BqoBA,I@37s!#FKlrx2PSdB\RDCU%s:k{a;FVlAԕAׁ *(N)pY!0,Ei)mo5s>'.??uhFgOp2tVAI_SMET^l+z/.\+ofX& Z>q|~>DE?Ƭ) z^-lEWA4 GLV4E-@E,̂݀VZ5s[sN,ˍEW/'YA3"sŢ*kA\_ϖ_ifE=sM KEha2tlK?kscO)v]-c&/V.p9` )bE)T<~q/EC];sl.CwpB@Tusm0omaP Bd2+awiOf6)_Y~SBNE̥ȇn-{FmO-*1oR]IkE,5rc wx}o(Vv+l<խkQ䏿RSyBԁpy#V`PU|w[,eC+4w8ӽxEM8x5o+k5P<.EYDISz )B"uLhsDG[esiHHEW<`P:;=dY2b1UW)_ҴDHTsXeVB+:<նw4(Xzd>FMD:W=:77&$B89{6*ph@mv/(|wdt`dAgX_;~H|# #hA(vl~Bx A8cz{|c%H;D @:V"χ5ϿD(@,DB$} NO֪6x8Bbk<67D;<%2'lAk@k,C;;|F~s3>C#0e14:dz0{ vd>nsz8)7ܹ9 b C= ^!!HL$)BJA5HDྶ1dm`"({sHo85%E=V@W"} A<:TcXA@ ~8*EHƖN4 4E@@) vh&H!$&$U@\CH>'f€8A ;F <$)dz ,i90 up%,#.Һ0PF$z# p!'M1 {UFǑ IIh T Hħ?HnLAHϋQ%zJ aO}@ j]Fȍ*9($@fd2I9V6/ Q!9 [ 'R΂@*&9<Mɡ0R`Q IU*yД<M u&c 2Q Yħ@DP RiIi)! p1qJ`aRUZXþ,jg2&TZ4!}cE!^2cIF|s8+=\,!BBUW֦ܝ]#Il.4B\`w1(8:Sa!hBڃb`+KXL@b_k[WmTloN-!uEֈԧr#TMH78- x0>kȸ[3%dĈfmԞJjH_֫!&+\+lcr@0ycXތKU )Tlgy?L.^pBwqAn<>Vd,6ݰpd1I Qfe&j\LΘ(/Nz1m)_c6_hpY(JMxF ]Dpt~‰!4 0.$դuPk.jMőDF㕩7"Up@QGkD/#9DMs#} PbV$u @A+ȏsu;6"Z%Dſ'oV'd`./9N)(4 a)*VW@*`Ȁ {r$iJA4QH >r ۩_jsP &l6&'* yuD @B>:A4r#T[|O6O;+bIވ%M0i x I rІΏ Fa.xR͌ @E0ZcDD4J} @貦ĞŒG/YI/ kث0R0 k ouI`!j@U#b P}O# |"",o74b) Hv 6RWO~N{8 ؏khʆ n k ג p L\F b )LupH ; !8!~n´ 0#p N2B p"p P7B lb21 yGy l*ë)}` ~{ }&PӨ   9]!ר`.Mdh"M|T ne : ~Q1B!!Ь |  @ G#@f U $/I#"rh0]A+oQ ! bQËTDlK 3?N Eof Oo  D 8A%=(GZjJrtS7syupS7y7sgPo̰ 0ȫ "v<ѷ7M"ҚP=úHl 6ȳ6,&LRu0(H>ID3 BCZb. }2ߎ@Q3  KSsyT.4nJDJ HyXT LI =rO-2 ɉrh jO@PΊ,>@"IH/ AoF} L((K]q=#O,'opK?c21Bf-bʸ R&ijR/ "}Xu JNeNHR!(]$"K'RBϷ"F=?u/-#>:խ#s)NA  v!l`Ev]J]Re^RoROcD!*E^İY+PմG˴ӹn!p xQ_uXsHAm^PקA#$T'BV#ԘbuJ H($D@/" BU?gC7nVi!h2ް^V;/HueC1V!,fb } U˖y.m)b،qeAH~TP\U\9bRhL! V 6Qu@ W /bUel>L{^`$@p7˩V6j_;N^5l1.Ql4tB'atVvv!1!hƿv#dnng1Hea%!^!.,xCifrb]aΖ!P~ +oW7 D"HO(+xqOa׀#WlVok!$U)xHqx' Op4@"FD=zC6qxs  aF8"! b!]jhb70 V6 @RA/o+|Ix؋#NvqGs!xquU)1 jHt؏QW#GYXH xcs #pjw[ |x /B*t!6H|siI}cY9ϸrhHw1~wi!x[Dr(y[&M#*&˅ "zpH!IVƒf3*z~I9A eYgy^C H8{cՒ1) S KJ!fσ8#&]Aר2:Ռ'+=XseuozXA.:,zZR8I$~!0L͘)" !@"4 vVxn´V "䩓];"cbsH9ZYɴZ;[8GFK*Kӹ 6H0i M[G;^f{ X!ڲ"vZ:HQz̴|"Θ bM$Smз/q=۽{5 ]!7ֻ!0z!P}V W_kDyV:@L8mдP-"4 hu{\'G! .l.k<6q!5~"ٞ :נGX-k58uֺ)"3v_|+!O;UyQOcَZݴ*u/Aߺb.QʧwsW\\c"l_I| M!8!g-§޹NooC6WI!R.K1i HI\`WpJ*=B z!NL6!:"~7!xjV#D"օʨs=>"=:~=:Ng[9;p3bǎ};͝9|"=R$%3sj߇cbx"|!0~=μ#!!=["48~#]} L'tXID=z@"i1#o6|>[Fp _0^!)stCTv#corV۫;_U⸜彜,IJ[ L=#*$ *!saa}}aD ֘BC;l]P$|eIQg%ߙ1bn_g$ʟ"| 6(Q \ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0c,M޴)NY !CѝE P 0]fT~>`8tgU~&r@*_yQO MT~fRm2o^gW?MӨS^ͺװc˞M5w6UX'u5 sߤOiw֝\1M`ᅽ*~s¶7L9C Vs:, a'AGuf?0Qui_ efcffv ($jN uGu ѐ;-pNI-tM$n]SPhY hSvI@}x&DM)MN1`wmG})CSdA}W_;=Q"?Ў;Qc7MN-MFe&袌6裐F*n my@CTAO|7YR[ AJ2y-juhU ^?( 񇑬6&&YeFVTE} )BU!+kDbNg. կBJK*r O1E0A_$gWk&$+f j -egM*D4:a!aw9!rhIC>3L*WJ A%ot!Fg*bLBWӘ"8b%&2U'Y D;TM`N2ΜFAoNi2xrژ͂&zH<9c\[<[IъZͨFeʅ02&*E[:1d46|o ;, "l$n ; /_5xJ^4P!)Gȋ9;| Ia' uhO<\k&QYqm '0ǯg &l2Y  ֹĮ)+1" !iQ:EWz̑<z` Ű,mSZm7u,)G㩪*_;°LrB`K\(ɮ):ˆo\lNь,K%A {LJ!D\ -=*\*"ݞ$@޼aQ )G m.p,aJ), Ui+\"E!Av ),SΩJ Km[ʑnў%˛, Y<\ll|n[{0 .^>*^Gx|=zL!˚zĜ]b<^8nGyJԪ>ݮL!IQG )н ^z:Yn=֓ɭo>z R< /*ٻN-u>A!Q^nq9ΑǝJ\Sڽ 'R.O/\o^! ֯*-3 9?E. &{/{iZrɃ; rPg&S1$OO/aߠIЯjO]"ҵxQ_  !Z *9)!&p t5@H,1 -^ĘQF=~RH%MDRJ-1j35męSN=}TPEZ\QƤ LU".Θ^DF ep,DV2nȆdYgA$#VS$Tsڢ+ċ 6䴁XP@P& b#J~(:1*%PxaD\HXWSo V5?g[sM078$WJ5?ҳVH A<3(e'8`(#8afaH*B e#(I@U+G&yA " 9y`S{+.VnyAHbB.NNQ06aF *A:\VpE(k9[[=J4hIFK߀[̊ ]~"`7eF=$Or/' љ0s?=tH_Jd6ha{a{SY#h+v~#R4wh*^~:i|jzݷ "R_ "}g(s&8\HD@9WMļKMQ_DAv!CE8BЄ1."A)$H* B Q~R‘Tl\ VA]Dh!H R$ +4ZAJE7Ȁwa,rJ#Z@%?CG&"Y A @i$Q "Y9wM"% 5IhB @@  S(@ x%@pҗf0}R ? "OHhHi[H2ۡ\+"53bhr#哦OduG\8q(z!BP/y JVInDJ0xrd^Lh]iOH@H\L "-Db)ܪd"'J/xFQ7e"ӝB#N( `S&u0UZAm:"8LЇY@Sլg= @;3sҊԠwzZdW5qDIBD/"ĮxJnFRDO P+:muE$eѰbV fK ˤ)#-䂊艇ldmY]DO) ҹт ~܃HdȊˆCHs '3RtC8<="HX&*t$Б#|e2A2Q)ͻ`7s7[A Nw0A{d.M&R 'FNbsB RqEbvd YA=(G"0AVq%MN ( %\ֻ_<@I h&Bd!He5諉H#R-8T2؜?#(! L!IȒ b'DkAV1ċ 2XjDoI5~gN!{ ^\ qppvf#FUW+҇X=8Ggz Fcv `]wfv]m!' VpY0Ak9~#t so~YCn;!A-y[%X5[0=ykEij!DS5bЋ2lF<+WTJpИ-µ@DzB͕3wi 1>L)L`C!G V2yF-WO5"K{N3 4#uOsSxU&r#MD}9WE ?gT@AA|4t59$ M%Mngt g W/s~}_`H64 ȶzƪec1 F(p@ DJH".@Ah84l Hd@bȖ 2T@8C$騨дxѨ3'[ ;߲ 9Lʲˡ=X D A8нjѕ0:HAR{;(dChS!0؈ˈJn39TSDX6K5!ğ؄G{3pC˧KR@CAt6AT*><@T?EDUEMъ&=  { 5 U$C9UESdSETUUeV-4Ѿ;@ @<ӊXOGӋNԍ>pIOWUeefugVTC ^kH?ՊxR Zuevuwu:RK- z:Uh7ҋ胃68r:׆u؇؈ҘU!R8* h`;E5 =ҍVUHOBxԉٜٝٞ%=dX'dMmenĈcE!ڪZփUZگ۰۱rM;<=~=Uـ{mӊ լ2<%ۿ%܏6 @O0շjs[[[]ك(ӻͪҨأ2}-%u׽ԊXu͈ܒ"EY7[}]U^OkE_-8 (D(RWؽT٭Vڵ\E E@\%55W=ȕDD5^X۽̕ЫbۘxY5FV@!EJtlU ňuuTu N ]Vf. n_3`r`W_՘ݛ/Dt#F$V% @ߌՒԈU^nMٍ88 e\&&263F Zl]X_(^p_m(PNE98 4A&*&@pB֤S[^~ი(X@B >fTVUVChC@|e9ֱbRS΋KL6Q^X`Pƈ`!?h&hBjfWbHDfA[ !ŵ؍W:,dxhgq~(Nf4a ΈogkÛU\O͈Ob8ֈ6NW'܌_V FEC`i_=fw]6RS .ڊ`Mi`>⃹c=fv+%vKj6/SgJviGkBᄞ(k}գc&KɮUbOVk{Ufg݈l 8=j<6 ̮1(V:`BހlAم>v*tlI| ;铮`e=5nQvl>n0GE_iH)Pg[kh>W6d b6tFFfUIMXl6>b>FoFR@ o`NRH$ p @iF܎nFb*^6BQnVe*i䣒o@iF$ ?+_ 'ݝhVrB1eNXl@" Qg@څ* rB8m`m@H*hqCw &wrrril voD>[WݎO>HkcXiG؃=T E'PEYPM(@>7G(CHc&gN2w:'eovj?h8v(p6p& Mvg `vbu3=cG`wfww rfr8got]N58c-wWcmS?0!?h,l _= <`u'̮y0Ȁ0(0H\zKGWwߪ^?ɮ?{9^Ԅh;UhfpU{_tzxz9>zOXOڥ'{`ضOėc?xxwқV ~[>>6Kr0*w᯶xOc0' zȃy~~yπKp ~W*ct_V`"=t.*{X~("",H 2lU'RX+7J< #'8JC"9.(a 0˄#wN0$ϒ92g'+"0%ȕ#:HԊ \>|PQш<)^$PHJ61-ܸrҭk.޼z;Pmbs N䥂ƏZsDŽ}'kVrj"~Wn5زgӮm6{T= G58WW3-a/\[G' Ke QRLSClhU";bf>T{ 79[~9k9A ]ro?ۢ  D]2" EUBYsW|/t̀LDP"Ql@}`k}XP n=C_OxFi'd}p5 5՟W7O"[B7-$z߾a!˷l}/չ&ub5dc@C2fd%)jaEVʖyw> A%-ѧȵS]&zIND/~C7$Bm]E[ FN -%\o0x`DUtKoBԉkMqI\paO 'OyuS)&dE9P'\.!!HĎQ-2JaCB@E Hy:)Dr aE)T[FJ""U #6#>"$DB3CLboPB`oHC \`L%#,&V@m|! VNHBDE @&4AqT263QbqC@ Y5: #E(#3:cE../F#TA1>CD#7Σ]D"e#b$VE^$Ffd_b)P,B\]ga@aD! )DH!a虨_ )4@(@6NAGN_:?RCDYdHS$^N$hMV\4 TϽD@h$[[%\& BОt^N|rdB_2=G`]NRP\BRXA OdVdne86Dc GLKfBfGgbbz#HK^EHf4X8[Hi%qqQtd%,& #"s\Boj8%BF)F]JOΛ&E(Cf8BcrP"Dx|#%b`ħ]R\|fB'x_|zgEgڝ灮wQCjbN Q#!r(W\b]H%tPiYN^u%%p`@FqLE *MT R"wDWv' m^eKb>2ns'l&GZBr=aibn_N0zD‘>fR&M<@b aRj6>*,@K\*KB%\¾b*b,@* k@c6A@&c>@0P$C`I2@UXrΘK$hć$%Ub:녾f@$ @8!Q0kRlJɴ&6+Q촮kkş>Ķ*S.JE*ɖ,E,˶˶X꽬;l̲PynlCK|*FA-&-jD hQAbl1-8-.a5eNm,0K؊*-ڦڮ-b*rD,"ҹm/9Ie܆EДi}.:т*]xX.X4@ܩY)~.nf 雪K&pvD.nLn.E !./6>q#=@h.‰rP^~/////Ư/֯///00'/07?0GO0W_0go0w00 0 0 0 ǰ 0 װ 00011'/17?1GO1W_1go1w1!P@Am 6Am퐔P!n$ 2!  0@JD<@k<27D!qk4ǂPCp%[&'"@+](2 Dz,r]HHKB$%}&a2D2F8F)}&͸b^$¦1Ӳ8[O %3DDYN¶GE1dm$mDg`U[TA|N/+D0W3C70JԩX@[`A#sn4 @9_HsB$NC4L?4&MRͩ<3tV13m`e 'δDsCN uLGT31D !T.D'oOq|mn4lGQu:˩4TA 5Í.RIO5b'6[Opc;v5AFQ7SAٓu\Hۋ!@9}E.^<]{S<]KF>ǾҕU3'TBDMDBټwb=h_+zl7$mE6~NW#yF?1S!@;`b=D~YRE*')65<@8`A&! !pPB.BTQDtG/aƔ9fM7qԹgO?:hQG&UiSOF:jUW,uJMJ Ca6x(d z(SN ,q&,%@C)r, /P -^<`.Z*yb') əaQVukׯaǖ=vm۷qֽ;(YrԵnڵ3d0#ɜ4I^!F3Xc4ZGbBFRG׿ P ,JDT0>+J&H9.((Z!N@c$J"<ąNIŅB/>( l(0!yѠCD;E(*/ S1,3L9*B9 @:,S8c4~L>8w [#ZO^oJI (!U|Z O|Zi5ym&8ag?Hi7e(_8ywX:oT\CD'<1A n@ћho{ރY]-@^O,A/tM-Dh2qKg?,P`QÝ@,y@lMDwjkFA-n]F$m 0@ eр-`}0߷ C&Ke$ĈJ G% QpR4< C@I14)Q]iBX Ѭфs1"4R|_ǐ(7!ƓDďAjw,F"9DTp *NNt;OyΓWaKӄ҂VP=4[eFDķФ(BtD 94DW r%N$UQ_`gF&KbGJ#MqSDVPԯpQ8 0AiT%d @bEdF7t([VIZp1*)rCow ]S}_Ɖo: H 堒.R%$B Jȃhr6%Jgj%X4g[SQn$WivcZHu!s%X`=q&&0ͅ0 |*+MpH` FDT;CHEݙ(mG)2DI&z^!Si2[ug0mU``$ZP01Q]q?hD @ F YoPlcV%#? ,{p~3gYϚֵJ&@mjV"aM]/iBn{2g?5ӮrNi=m̄Y'IatV&v1Y`iC؞6mN,9^Ti DRPRd% mD igAe"#-~Ly-w_s`(0‡PtC? pB"m &M$2R:J{'M3DT"gqKdmavmI))][ |+q:˱֚&b?]AuhRí.p:I1^x"˜֪OOP=anXq ([(P 7|CYdO;+SvA/ָ_2掆u3t_-jh23@#!"?~֚BL|r @d"’"B6/&+=f"X *P /(>;T\Я4GdRMjF J^@`""K`R ת vo $, @D +؇rЮ >/u&"fh($Np.L#2N_,& & DAM " O !@`NE@ B Oڸ$'  t8"Zq' pTB:l *+&""@ "qcH66Z@ELFnڦ[jB^ eBb&nB/n.g⪎Ɔ/j iTMl11R@)!"BFrcOu bBB%A` tP%'?(p k `r" 'r "!"OK4.⪲-) UB@R%B*#b̐m.Tr 1 9"gw$AW "cR&%a"/ qLhl)Sn236/}+ `{>1 **R 2@l."./!grbp * / KDG" "26M-эI^4o t "<= 1O1_3A t0 ̤22B>3?ɓJF`re@,6= PG(R į:9kj!sB:!C0lp"N6Ϳl-c; ڎi, bi@oJ 3Bc1S%) ! ` p&k)@O@0䎴A(q `;m8lGiVFe I!Ԛ t2 ,U8E J>k!>4JT#| Zk@g "JNc`\UKR4$3s)junvuT(mNTטKX{\uY˓bYQ Qp  L4T"VFN4"-kbib,E$u^Sh] 8!72.bChWU tP"BaafV2&zynrU)*Vd6a{ W$ :l d]!E@^%";)wGF`~,u7 O9ut) =HAK "62&S@ @&SkԀ `$a`n"k"BbSkV>eolpq6n nn` `&egb'A 6 Vov pl6m׶mJ!v]m6& !@ @^(upq)dw ~7$Nw ĖlGw@ `KbGv!Pa{q+gvQd&4D#"%&`{h].’O\AP@% !!3J D!"a@ EX$ WV!"sAyXXL"7&a$}b)A\@%? LI TUӅ "'*}x]!Ur/ I" U҉ d K 88$q){ч. Ri&@fohS7$PM#W+$r@6t}"u4*7b5x!NR(3Nb 3" X!M b及 b㯄 3&8'`xe"vy{(RW~b@ S╓ 9YY lyq'f@! =! up ӹB n Bc=W Tr JYlg*::t!YuD+D!BYtdZ6$>ռE:yh00B㏧Bxi j` Q 9Y  f :&1"'y'.֛u §A@ bk/k]ay:'RU TAOwbӭXb B!:Xq6E{5M-/"}ed!` ]2&8!R"@e)u"r h")Eh3\=۔9 "(3VS9A ]az :zﯫmbU2Xw yW8wBs B X aҼy"Bt0U ":ھչ @ke;c `;Ϡ 2hr5uGȓ- v47)R4k8 Ƽ{"A Xe̖ @0`$K 5{b!k"|\,]'T0! sW@ @ "= LWBao<{tzbzk=x b@%S`2f= Yj` Ze 2;*ƌGI;uܹ"}x"@ut0 خk 8 o=>)Ę"Ƌa) H upb흟6=ꋢnzj+!^~(zڊ5|u>uE2 bM84@B{b`  bq " : "^Cm>?JxL T^!*u S͞#b <}'fDD4;Bao2;G\"Ew11!S|л H| b{c"sB- B :x0 A&:$p"txXxH Eud1F$%u1ș4kڼ3Ν<{ 4СD=4ҥL:}1S9A5+*T 6رd˚=fIl]*˅:.X +H%J&HΉ80ĉH+RMDQ.DsSD6Qڬ␡kL\|w}1F,&}v7/ XzִuJ=Q 5\J:E-0$&>_g%xg]qlU))Le %](6|v"i/vMHH9oC&]A"oIk+| oÕX$ `mI DxU$3!XN6m+<ޤ(m0%D`CM{G40GKqD'SfiBS#PQ lNLFj}]֑gbw" |{PF`) [J-@ V0%8rC^@! )ІDDovπ񎇼)RB!eB3@xGhYUdw/xXC>Ot*P`.@ꟾ/: Zʖ {Py)02Gwh xH\3Bg9h@>_g%h')tI-fvM1h79;)`?h&>BȃkvKȄMOQ=eRhWY[ȅi Z](cHehg8hk2{hq(sHuhwy{ȇ}(HhȈ舏(Hhȉ艟(HhȊ芯(Hhȋ |(ȌT7h׈qb(:(ȃVF Q8H2cTx{3@J~2jJWA ( ))Wi  9 90h!Y ْ8A Y /IK鑜d(C_1XGIil+@6,@”lLq `!vfMK]gOCEq75JQ<1 /nkNo 9aKabfvyWmI! wei]M!  QaBLQ:1Y$&$9ciERgaEJ `1)B)wy5x")"i;ș93AM "̉QiJ96ʹ1mRIq5њgўaH:afqMG{ nݩ)2? "  *:6oxJ$.HQmJkEџ1j ErDF2j*i/"1:3*£BygQs,P(D,GJWj,p3M];sjhe1 4I0l_Za:QGQH0Wlȧ[IJirJNqv֧}b*y'0ЧJ*FC1su zzkآX*! Tp*f!  tOV *&*B.s*poEWѬL! Xa۪ݺߺ^3bԅJBJκQjL؊m%pDֈRRg {`N:! ?B3~o[ ql0Pud1 :/뀂Q3Ux+K+;Sf$5k<`R;/s@ǝ/Ү e 9ܿ N1S 2~R<[\RI?naA"aa˔l+ 35|7,qâ9AM #%L6F "@B,BPTC aL baP(9C*@B^AvE:bz1x8qit.'|~,b8A!<L`\FM& PK ѻǏ %|˧\:A >QMZl!Ɍɜ,f!́EQk =B1a k@b!sܷuh6a @|HAM&QXmdM5!X-7,nw;y AQ=Y=7 ʠ -m'L02a' mwr)IѮAE];Q4@ l0 錀C!,q7, sJ?#i+D̕J@@ ঱JAv՝׼*!.P"LBMjUWPE8TˤZZnן&4*>- Ջ{M-ڴ=6tLtG@hMϠ\כڿl=3ˌ}]· d}f}k<{KGCPq }ۜ& e}[=ݔ="-m^. Ε >*"6q ]zNlm۟n "bW d}( .oa`^mB}m]fL^N lN ˌ[i4=4=? q4ő{UyZ*WuD^qU2w(EBd.>3/$8͆Nsubnٮ1Ė~t誾T>-^R.]p鴞Ŷ.X kb掄jPcI  D𝇼%[މm"5'~~%.@~\"a=o>XSȄ^N<ECMa 4a`~=3`q HIV KSJwCT v~῎fmGl V 8XJ4`/d?$@0Noce?)ڻ=Yl/PVp͙k)3ˌ.θaC h6Q / =݌o!<<aDG$ά".E1piE?-t)0Q^ }%V?[ج˿p+2wKK INF\ tE(tu$! .y"D5n$@b+ ldSaJ3FDŽ!G<JA%ZQI.ESQ mSNLnWB>Z!iHیD6[]yHb~aȁb .nō '\/͈])&q'oЄ@s*)b؟7&HS?\ue?MÈ1N%pxaسYV$=(Mg; 'l>a)>lz߮S=Ռ $P=sAr**(Dj"CĊ,J3Z+E+*ZqFkDJLJt, $ӈ@#RNlIV(%E$2#"]:RM*B"ȇNjȌ(ˊ̨ˇL3̢Ҩ:dHM|MLHNS*E=Kk"HPN{)rRFpH"!3oBЇUXYJR ר:WEDXcUEbTYh1:6BfX2ШH3Aho#(+Emd[͈\ͨM|Ρ ܥ7<#FWg^(vRrCxTA19t:񳳟iM6*@Ϛ>:*ЏPlȖ~=y+a)cbbT#Hpw y["=9PBР%%P R4AT!`2 J`FBg 8BF 1*$ sF@&Ő!3A 1rCP"JN5p/D D'J9dC3}FDEY?T_S)*`F0M\嗉x݇p8FRNN:!_8D?嫹H = ̣3È@`{ x q?TT  š]b{Gl (XEDH +K8C(Ń;PDm: FBl'1ӒЏ 3̈xǰ#I9x hK@̪G HDr6#6$!:r#",dԴBb@ٌ@9ʹ M&1͌̈́/IN NK4bRN`%qNNpM6 N& -X UBTL\Ԉ5ټ;rA,ON$ Hp&!ڈ h[*?C*B"XQ*(FBx&J H!hsE8]<!&9Ų́(Q(hpQV } !X9ECL @˷]$ 0m73Qh|%!adP~RU  }T%$I5MPXH8H#7HQI8UQ%>QP8I@6J@U\Q%=LNTUT-Ռ8UTU@I`a7ˁX\EVҼVMTOU\EVUfgVoV4hUM4Nպh%֌0QWPQ-;hUנT@VWoW WS%W.tVW4T6QՎPػ`acekEգ o TJH>+ 蓈iԈ$?Ч38EWhT=e t(pW܈ɬKQtĬ1M(SOd̈D.pQ"X Mځ{[sS(%}ZRXʍ`[Fī?8 F\`КCE(Nňz̨E]R]m]}]u]e5L?*̭4ڧѰUܨ\WXT[0Z =|pRޥE ۿҋR8Ѩ 8D($8[R 6 e^ Zḩ8 P,_f] 7ÿ ~ L~]&a-aF Va fa&t =?ٌx\B} %?ap&^LQ  eE\᧭eMӪFbXT 4N8 s` @"__ ޏ[_{LpvN0OX(Eddv`Kv%L(MH~K$d_Uߌ@` } =Y>_`,K@Kꕈ0&C`e Q_> JA @8[a]ETY[qCeu0w6ev~x^gdDٽg g uF`6ƈ}a(9?cZRft\M 0dxb:FfXDXi+1M _Hx[qӍœ=]^th^ja4)]~᩾શfjaWH>?s>9>Nŧ5ޢ+K0䈿fMLd壘q_P4`IWYU1;挸jʮ켈w6Ѱ`~vϮ.і]Զ쭶 #޿^ D^W(ie0gn(ƈK äk\~Ո+fkvq)i.ԁHk`^~ڹm>oNo^ono. e&TJiV6.@\&ƈbispbU = 6$[c!L] nGa7i D~o_qoqq7fߘ jjWqXi0ӈBXi a^bnV8%"V@n(Y6ΈMs8s9s:sYqP9qU.sWP^X0'HD? >a /i@Fݶr#,oXX~ڋ~-爈Eeod7s[u\u]jW@?Tsƈ^sPRn FT3C"`=AQ߈ZuqRHwuOw@vlv6qX /lqwxvF,?j-w eXLjɬu^_xoxx)_Jvvs6!x/w :m8x!vvF?y/  N1Y4.8- Mn|u exzzzuC$PLjVk>zo78h Eq7zoY6R⨏ X/T_ z|||uWh&^vxM_Kn> ->p{M_sN(9_d6 Y8 @QgKoK|~~s-^ 68޸}8qPRwng R|Y,i/;p%p ",X%B|)+ P8"8 &"OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNBEĂ !xaG rB "ٲT)b`@5`XAX%JDBrP):xP $аLN!B :8 fMzCQ.|8Ə#O|9ΟC.]T/8@Pú^0BΣO>~%2H "DD4[mz .`͔@D fc9Xw QRy@D[EZ[n!]u' t7☣;أ?CYUPUw4m$!n'o}$ M6]6gݶos( 7S 3D7_Ct =bsQ"6 S  };納k@ȚP;D$kUbmDxCs/ 3߼Cv#d2X8 \@J5 Awe 1uR|kDQ<]Cd6]"}El/\x' 6E3AF46b0"! KhBPQXqg+n;Kdu4oc |Qwc8wpsAAdy)ibp2D"/!w3E ;CFԨ66Di@ h6P(( Jяő#G="|\$B̉$iɂD|q iIeX$(/iI6œDd@)=8sKtM[U1?Q33XB$)47Ei'Dtw~.ٟ=\ld(ū ٻH&뵪bv&(E6+Ԟb9eO qPRdL=ڦ'-j U QyhKA$U[ Z ޞ4<9CNoJߒmmr2[6#-[v\*&np ]6ӹjAz'!  ,N5Ub3$ٟ$Cr%c1kKEH|ZhN i&ZRD Y!Ą,paekc xMHն㜤"M-oOK$=qd'F7z3RxK6.d5*phPq&tA{4Z\+l4jo+! fr"#l, RDNz[7$j &2OTqTv72332e9MmSBII^xM)߄[joj)5(hݺ%tCh]| }`ȧb`raU?d@}1\ ~8Δ"??!j?9bSWp yvAl<2.| dśAF6c.[ 08\=93R 4UM{+oy)'Pd%g y%p Ͻ Zxl|@̗ )A>ٔ 8qI_ys?-ܗ#!va-Kgl& r@|:tqor\XDAD|ПܟAH+ELA`]A E]=9VQĤ'\u@Q bOAH BFlTRԠ A $@MxA@  FI ^  naDIH uЎ̕~0K4α]|+B:F6EɟC& D<e] K)du"D1B4Dب@B\8ZI_CaAtc3O@L@]BiB-V"fBeD=WO(YA"HA@$$AڅQUj5Rc@c@AAjdBB$lH6DF\E DF FrA]!EpdJ KK"F?FGNJ?@K"ABT~p(%JOO%v@ȤAHI#q|:^uE<8U  $BUD_`G PdKd2"@4 A1@@HCA,|&DD4A@A82@8BQC 4i^ZAdBDDD v&] E֟ "y y$z2A{$(b!%TܧYQgzj%WX6A~Dp$h'"?jAXhqth |h(dA@hDNJ(ټhzXD(EvG[XD|I)Zcפ9_]iĕ@p y߼# &D8^U^K8`Y@"cv”5 o" ];EӐD::.6嘑ޘ  aO$ D  (p*&O&|@ |'Rdlx+ڈ*A*p6eK@w1Ŭ@pj@Dݕ $p k ꨖ陨Q(rtA,+A4+<@Dkٜj$qA@++ fİBo0+m e4FqU"AY7eYNH@*YtgD)Y@ٜDFąeK)c5i6fͶm`>gB0[XЕfgÖgUgqOݪ H٤B@J G"~A-AڜmK#E܂DA㲁ZSĔ "(+FbhO %)sM徭ƭvn|.AmmJ.ܮpAhn.&nA0BnH.BD\DXfkX4 loH'iDL:ʪY4̺&PQoJɲo,FxdD"D0NV)<%m_Fh::/f%AAF\d0.A.^a &*4Fnm _ '  $!LBppҰ@0@ppBPm^BEB/+4O'nanC@@o1{qD+ .gDqq$@#7r2#')$s}1҆ |xlmDHpHr)4nNe=)E4:**LdHH2'X&cHr$7]YV׽Lid#;24.$/B3A#.@]p3ì"жէ:DJB?j+LYK+B`٘ @ WܱQ3<o??tA44d#G*aNnB_.OY#IzA :T1'{(ԫ 耋!'(APy!{~+w*Be{TWzS:|zz3{G:J{jxNQИ2WUp(h8Ypy:Ô A z%88Q[{ {GA##D*lBS.ٴ<_<(k]|ad.h1dK(|R(xP hȈȄ $ɗt(J䉔6:㱢21:o/A0L96lJ(ˌ J4EjtKݑГ\3.#RRM=UV,Te%K8\uF?#$_4˴8,G$i;$@/#ʄ8i25Qꭿ{J N>"/K"R(>AT Z=^|J0!`QH(oHB@}COE1G&ޔ! vWA_#r@+L&QU*R &0" tZf !DLW  qn("aD=/~{"WQU`TF깡6'.SKjE@L oau';OlBYA  Ǝ#(G?Z ِF4MF$hKqYFp$e Z  *8IU#}e师B!H/OJ3~L̒yeBCIf9JI>JgO D B9фBPnh+ # @`D6 R0aR#GczQ{ _,j tH}銑!&JU-;3% %9ݩ_zn!y삑U$Q^UDB5d%4Y)bD$ΐӳwrhF*T$ʼn{ꆕLIZ&a*d*Yu.tT1"UZ#XlbZ[:L[<p˓j$שOl9N)I䎄DrZ07_ult12" W Ι ^&ޕc;ַ5^隤`] ڛ $ˀT`Wz B$?|""k!JrםŕKX1yc6#'2x4#8RdHPwӆ@"nBA al$)Cna^$u*srKܦ)#Q) y.aߘӚkȖ f7X I֒\d I|? ЮtF]A:?:s43M9m.]T0$`5gy>[STy]Uw'f"1@UEf|EmJle`"cM -!]l<;ѴI[6qtLmm!}Oއwh AwE} Dp{I8n9;I(rh{b nNW|"(kݺD,Љ^t%Z&A;Ceنn5jEBgkd}L]!| e&L=2do٥ف@7(G|w5—4(QczwoGRg#z-$o]ܥlwW&@_x b7MA+XA ZP8p]iо-k>DfW o~o_[nh̏j xҠoh l!2OHB\*b /Hub0$*".p26P#bZ@f P& oOBσ\ & P w )0,0 xʰzJ VPo|BO 0!PR#P`0"Q! 1!q+/yes"bHbf`wMw}{-ym3_cQ7@ [/"n>1Rv~|fQO"L@MbN.mִew.}m{Qבslޑqэbcr r RR"{L""/#3R#7#;#?$CR$G$K$O%SR%W%[%_&cR&g&k&o'sR'w'{'(R((()R)))*R***+R+++,R,ǒ,,-R-ג--.R.../R//QCS5S?J?# Jg^1֧IA#@d@FtR@9AA#@Mt=.;2264/XK!3@T*Ă^#3CT4XT0hT!D$pt~lt?Hv"TMs0sJ"A>CGT04"| Fa㪴C40T!:tCq04!%L4!Pt34_/ԽCM4/5IKP4HUQ$5J"VMm0tI%R9cRRSRd"=T#TcT9<3>5V0ZD1N3CVIVVmSWScWR5_zuQYmFhDF]!ZbZQV"eB@:u35_/[BUCM̵/$4CܵM/U/r3Gu/IM__U0;taY#VboF"v("./` [c0'6tv}?8{<d0H{$ +CX\6dc#J$BTVZag}f Cf_52ci{P2e1Bdkrgi'VmT> N0~L-F `H@j+b`_>CnnU/NRPKZ#p_op#%hEu"0 /qBpUr#rM@C0w4/TVt uaImr7w`3@w nWtST0DI`jFaH;wlJ6%$F3WKy$WM>"5C{3{%*~{&|&,E[)by~_F~+B|1( bN?}ׅ%~e~w6Tk{# 68(J׏wbI6(CPx j0ģM!~!ʷv+b}AV 3Æ&]İDxæ_#hߩ)3"~#{#x.X˜b4\S1xxvc!x b#0C؈, q8aX(J ` C0А `l*U]$T0PCI-6\aNX,{BN;ÕIdyl@p$~Z&-+B͘界a) "tիO_9MO8Is+9鼙 bcb Kڡ0J 1t+ H$4 B BOҔ5QxHOb#LւP&!$e}N oGs_B)U oMۀ(לS# b:\0"Vw\InW!Cwz'hP7d I b|Rl ,8c$Cx"@"8!.2Vx(\p3CoW$~;G.%*(*6#DuijI, {[vQvD \_3d;\ACۻh :{)ܼa:zL{`g#5{b"ÇHıMDz"lI$8/D[1>$8A+n%V%@P&drK1@"1c@FNmZP$O!;RBnD ?9A\L]ٓFiA ;ʧ\|Hη*Pcu) K}#l$ǎ<*837eI?O_=)Ç"B$HIB %A{]1 Iz]`(b2~\`/#ɗ|b%l5lC=&V`# (!"!M$\M7}~]}]K90J}]1๥`~+b*8"&0/~48^Jg3H[e-i"Q$xwSDX<|< v=)ك#XǛQp\/=2קзH!Ξvj)5O``IPޑko~IIbͦ#? !>T5C=h#1B#&&Mq> !B((騫["2|~9|AkM)Gܷ`  K |+@P[)"#htǍOSSG|0,FH+8~ H *!bS#JH IH-l᪄7W,\F"#S&QHE(!U͛1jTcB_,$̔, M ӧ/&̸ǐGB4TaҁJ:0Գ8"O0>׉hD7Ϊ>(4ܜSw&yZlܷ˘3kތϟ M JHĩukM}<4T'ا6"rZJC|;Pp]9kνDMkVݻO_Ͼl0IE?_d=D J)H&1P%ɄAH57~_ P 68IR+aDzX'*HDIk0G3BTB"A:DbD&*+tB!QVdM!dBWBeB[<&4gccUPeufBQʓ碌6gi顦s j`t6u9PQD@mAQ=pUe讼BiilF|聦^&$9 zS ()@D-,a!^q;K$D l\PB$BJBBRFg 5 EL eB!DĘ J2:l&fl3w&,33+A OQjy*Q)Ŗ&De6!JZZz=Q٥)p+vTٰ ~'R.ECAt0eЮQSJ,_uA/D mTB3+ Rp~yD+D#d^@CT|BG<CDdPR¯Ne?=BLR31G(>QP e:j Em1@e~QEmOMVA&)MVMWPg&`JSq4 x( 1bB=zBd0M,  ( O{\A )B-wCA"3Du"A84FD acE'!Mя$B)Ƅr bȑLa,Dž@!%EIHAWl_#H:gI^ Sf ~Ƃj\M"PM67$'pfm5 }I·*:<˄=d*D8HysA2R >SψS!@ǷDžLi Ax]&" IC!ЄD"M:2YcH2҇!'}HJ2̠G}=UQb i`FvԞj)Lp7!تHrJsB͔4`MYSUě վ J_KXGT!0aɭ1H`R.(GRx@RPC%dURYT"$AHH$ KWPEd)i-I_٤mDhݢַHkSB$*ͤJ DvFG˲}v]yU+̫NUN/#S[DRӵ8@5M3x2QSޚ@[+"Nz)|?LwsE1BbI,?#.e jXHibƾ81> !bc4帕anfk\<! X":uQWAeZv_~% "VvV7?ɉ3Bx\W*k( 2?GNHM!EҏRMWoU B T36j6C70) ]/L"ƴ]bxvEJ mBJ,-ĶI3jc䔔H7DDcYl=ɘ>5o!CJq#o3j (GZVoDZE2[]iSl +$J숟;hٴлzx "qꎈ| NOj1oo*8+c8DheR45_^dO/_Iiv!" h :͝1F!&+(b}.uCzK 5 =c<^_D(ww ~|p=xGLB5P7A h/4Kƙ!i,4vWŢiTL61jp-3u|orLŇ w,[],|,~\.4f! <Qs\vx}zGLFW<˴~|ѠQK.ܕ] Й= Ѣ9ތ@m$J>δP܌E m`U~.n$wl! 61TVnDX$ג~]~AAꚾLaϰ= H^1p!?o/o!#_w1lM|aWY[ Nd&~ae $-.)\QU_j/ qכJ@ DPB >QD-^ĘQF=~dȑ&&"9RB)h2ȩ\dQD9r \X&R8HeRRSnYeC\Rh䀃)R;A\Bq NMa 䄰@ʕ L|/ά-_ƜYfΝ=ZhҥMFZj֭]YdJ>]6Nddt|pqȞ iB´/<ԮA. zu S֔UMI"gd|6I漛7TU&boCcl<+<Ȋ-B 'B /0C 7C?1DS{nc 1p:8hѥ;/¥*+Mbҥr$(lEH 8WK#IR MkD,TRȿ8F$PCE4QEeQG4RC"4T7xSHB,+$HH.% N> Jʮ\bkXc5֨?+6R.U H:pM%Hjz3\B\cР=UZq(Z$^{7_}_ Mņu"eH^&'B8% rȃKLn,{ R1W[ho=Qh`ұ/ہZ!=hh@I ! &בj:kkH`FHSNZ' 2FLiU&in2NHΛJR#26;hVHj{E|IJh<~|G΃xvGz!Z5'Yu&rAY];vgvo=w%{* |^`6#S}vw裨@;!^]9!OOq kIBKGj_ \WڡHY;^ h]@6Ё`7<*SPcH sQa$rtMc28ccU@*(E=~{_PD%OUς#ӥ\! Ȯd8F2ьgDcĔ!!A-"ҧ."iA?ba/$ & (2m$~Df1脕` A( G]UXP  )1aN ոK^җf0Ix,R9qb!,51M)B6D VTNy}dHܘ,R;Ajl'HxB8WBZAoEhBP6TRmKCP9m!rH~7YC8;-Vi=Mй뉩3̤57G^.LHW-8vS r C:UVժW*Gjv썪q R  kŃRmQ,$)G'ڎfA@$aHI"_mڛO=iԐ*i QN 67+Ee?{ 54jpSg<K ~ se۔>+z0&ȃodiILI4e렎Z+g{t{$$sK d+$(H?Wn󳂐<;%Y>H#&D>9Kc : 㾄距sI칺^;F (شp=Ws⺣# 3()B@ʡ !Дx0CH.dR![=S+M'W8xC9L@LAmZAh((:KXxDʧ;C:"XM˽ p.+8長UdVt;뷵8H>̢Dr9@A31`ƌzRhDJ2${`A3H* utS$   *uqOd XFZj=AWDȄTȅD/>D8A]̢^tM@)B*A±H3<<A!Wp }#!Z[ǨX+!E+H bȣDʤTJ` H$8c7|2cI:4B>wStk$4Mx1?; k B5CEDMfiOEuGHT)KLMnRNPQ%,TUUeVKWYZ-UN[]^f!T_a%b]JJcUeef@"SYRgklغop׫˵qEtUu%Xdvxyu > z|}͚pS~؁%؂h*0Se؆u؇؈؉؊؋،؍؎؏ِّ%ْ5ٓEٔUٕeٖuٜٟٗ٘ٙٚٛٝٞڠڡ%ڢ5ڣEڤUڥeڦuڧڨکڪګڬڥUAZ%گڳE۴8m[$Xu[[ۻ[CyAX[5A@9HE]UQ[XƝ[5H(7PMU=ܹ\he}[JX؝[م%E۶SIX[ ܝ5$ʝ^]S$[7X[mMu#34 Um[ u%m[ HH@V`œh}5_` TU[.=߹`VTRX^ &ޕ8P7ER8`7I`H$6ہXb$Ia A`6e_&& 0aEb92>cxbM5h:hb^! =*% =U Q@֣eUH]dUWGNH nH;&7ujdxMIX݄؄V\W@ Ne\\dJd8\N_He TEf$8W<> &c )DZu[Mmn[n m8f\^P% N](=(綍b>g=Z[^gbg g}Fa^g0f@ghV\i&j&kZu[Mn[[8h%x綍炘gggdbXg]n-h0i[.&fNdb~n]%$6X[ ni#F%&iW閆 j&ꂸu6`\vjng\%Z&Ȗ쎸kP$j.v[88E`k>m3Pon❞38]vl`h6^$PY[@vN0%nn k:  HPݗV%[ն%_(AxI2bWpn~oUdn~ƞn[%T Nm7^oy۸(T0-Q߂\/> Na0iww[^ FoHݹ[%dž0 끘 vgH@eoWpo[806s8oS6fn-.q r0p5[v&s&['%()6r]'m۹n /0n%_m=tH=sntK'p6r낈`E`D[E*v`aqt5qJWuh>䃰=l8m1weOsW8LV/WۃLu tnn]uupz)v9v^0郠8Px'j?ikl/novzN-w/^Wg7_x6"y'zo]w0{eyygwۈpx!xwTlN/sGgu}^pҘy{yyxl?xuOzzd>/;WwO]vۮWۘ ZA[V_n`{p{vx^Wq?'l\oyO[ ƧߐGZ?~u]q[knїEg_O̯?.o[}}I} }- &~h_o/yAHre 7tF!H Bjb _` D"=P(cI0THi$̘2gi&Μ:w'РB-j(ҤJ2m)ԨZԎV.굣}=j`kjײm-ܚn "9Wa]-ڄ1Ń4  )%H5Ĕ NL9[L|01+gɁ'EJܰ၌Үm6ܺw7pTb]+kaM.մΧSn Ef4D@<$4z 8$)$vvE ̗DED!p 2x6D wB rPk A %n'P יx")"-QYUZrV5w"tUIw#A  8RWH6Q l8]Q*$BtH~MԝFMa4UYBmpȦBi 9'uy'y  P <@xC4@(@줉 P@IC2^%T"C(0 @16,J@b00D9i:hC9VcLqh *Bħ* B&0+z;.g@L*wiThlQ pі!eC9hbBg6\%J.K<1'WJg\-Lj"%rX[@DM4@U @2i@A@(Ol3}LgLHBsAĉT % M,PMX25,LP|;ێ b9 SbŌz&2U!V L <,:4T1%?P@15!|p'`hcT ?;+U`&Wx+M{#A@##Fb: J%PHT(@At 8$d $+J)d"C8pKh E`B F<"{.& Ue-ytV=PH;!bC Qi"~[cLŚ~#D赘\:FyM#IG$RBLDPDBʝ 4h V dnH V! )DvMd\H&@4`EDKd`.E9R6D44lLJ9 N<':өu.NHΗ iiNO|CcO4Fģ+ʘIĞ[Aɨطp"#=RkQy"A2O#EQ-b.])#5$WK[d>h&UcE"&PXiÅHBBVV2dU5z=UзRb[I+nŪam@ Kv.EAJ@!*+j 0*UlXhFDBVÊĨ@[~nED'$bI@ X@t:͏o+:tQGbT8^ YM# VkYv 9 `*U@KaQ -ZL1uP+ɤ+}HƜ4C2G"Vz_.͊ġ%O<72#F>f>>ȰY,ȡ# -#@ER5U%X,'al}T,>!kQ<-yJl#d[@t'(7D.[A<['I~cw$HHiW{Dg++p `m挄H)$胐9 >XÕkj%43.6nH˛k&I$@6Gy}㎼' ټjO%;c-Ev%bw;o\w"Qcn\|+_$k[V!Mf#BKɔ{mI̓$WY$j9M?LzaM]XܒLD :n"'v'~ FY#bG%s!M Lj=b$ +Dqrq!Fp+N!TA=⚥H"Mx!QЀ"7v7~#8 (N)2Z & ;;r="waMpTъmE!8@굌/F0zG9(NL4fu4VAMXH[8BG~$HHF86D9v@yEݓU<+(XJ­\T)\`UAFP+6%ODJXXDЄb)YHfVn%Wv%pAGcCd0+|MTOP-DdCKiDFD)DVD$\_zD%̤WFdN&eV沤a)`He0MO LҥA"%0 eC#Mr>\Z>%e'r&rz%XX!V$gb`M)UmMp A&U, hB)Uk&aZŹL`WJ$znVlvĵG@pN\@H.'6>'6+<9@KVӕ;n(b}r'N$"?D̕L۵L$_LL *g|[CE"MhMPq()&ϕB`eNAAoƎRr뉨NPAn]5HP|z"CbE HTDtLA*)r!4iOAG"dNQ9y~Q`%]&ֹHD |vNE5jXi)VYL`MT⠞S4d˯kŰk4 *ORVjNO%D%caEiO,_U0N"&LLf6gӹA8W"%*T,MX)jͿnS lUH0kNqLΨfaDagYYbDqkO%YaUkN"zD͑ʫ[ 6žU, -T$!$Ĕ&-P:!F>tf8odFnD]UT~DxP^RDuN>9z9kEZ+(.FxYm%UPy2Ԙ(E ,>9mntŴ' qq- C{. D&qO [R"nyPnxkΥM\-cD8ږ v)DoR$/nnB.K'^C)' [?aooLD4nE#3 4Os3ro`&F\bq/XE]ӈ~,k#mU$Hɕ-~ 3&$tv±pЙ/:~q3gtLn0/5ktCp4%3n(\NIFŎ$A`bU8z0ؤ%;o:W}Q0+D`n0BNMR4=>}ѺOKIk_ ۢd`eU:H'"@92 @XmNUT(FB\&u[3-^ǖvU5OhB5 d!ȵM5[[cSLYSYAZddN0`GVMNi _K6Mup`6$v02c6kG\jCfJm6b+n76vkDpBį׈}=yAK\}L8C %5 3DDI's*NwpUfd '@jVᵑ1vK5PAL8Wl",@EOD"8gAA&8W[8SxBfP$BaaL|x#T8 `[E)A 8!xxɈxTx8Ɗ8cx+XxzDSmGxY+x+Mő'ooˡű+@cAQ[#%39_yD" [ɶHK̡ !|ўBᏆZ)cpWzOG-@p-Z(&~)yFqwG/"{2n3hBUTBi yj02+O1C8HlM׌̋X@] ІWcpTAYo7UF-&<Fě <Ǽ̿<5·ŏOۆ|Si?_;o |Jƃ^"P9A|d<9}dybն.YTA"9,0$W/=3BBr{˪>b5O٢R$>Yݬ>G0Z !4u=K̻͗9ʡ@nn6OLDŽhM$ E;OgmŹ 3Cq@8P&T A !p+( DDbG J #GQ @ cŇ3Nl-vφ&i&Q+Dg͎ Z2 :vPL"EԧǛ8uF)SՖfV )"C쑫S(QӃ^[buPЌ4Qpz+b>dD :JuwDw? .Wr,Mܛ,>x[n2(>i t4)?= Ɯϲ r+oE6A NB(|2ĩH@"`K,+D!"\ϩ&z2A"]$ȞD˄D1:;'\+Dk1@sC$ Dk@5*n N )rCȷ`#nڀBԩ\Spʴ8kęNz.'J!t Va-c%q2C-h8bփFlׄ``…pSuYÈpnilہ|0DXcYnڃ `[ *!zWMv݅BZnY x֕hx նbB q GX!"Jױ1~Yb{ k~]C3惒Fjv Uh,vVhcWnV%=(_ f" *hM8(jb,:3K'л8FRH[WCN{2VVՆ?*wB=R~C6T=Sކ8RU"]_/̫V ́nN|2^pM93M!'2?#Iۈ@ը O0)A]-l䧐00![B (;\_XA~?/(`f‘(D!AH愄7WBjAL;DH2 "m Eăq. ;dhEݲcnaPNAHpr1 rR9 H H#I9 S g;4sd6"GB2$ 4 E  e(2-("[#RM Df`QL M :҇ɮ7NqpHMPTT3}0@X#`!bOx`Fz<|}/y.)RN a#YE@ 4ЄT;PIQR9kTu󝩊'A,Ճ2>M hk*¶tUȅjPz ܱeG2C /` M!hEZ!@Aӂ#I65SM-+ ݑ I*6/6W-/PJ„ F4D hB/a>PF{SAy^ !&쐷J+#>5׻jeOӯ߬{i`y+ ʖ=m:퍪mu;!5=vAҚpu)wLm_Ŝ#ⱵwQ0;Peq{";pM+/op/(1?1ڈWKo/! Fo2%Or0`|q#9#=#A;1gb;d! U1Q"cR_/;Ju|މ!+D$P gqX'1B70XC3@t@ @&V3!hr%=9q3/T"9/;lbmtjSxpC B:rFi'8-#Ah \&'&y !RQHcH'(4G!5S;FD ,L TIJ]!H FB|*4Jw"K ĸ4SEE;`A OT: tP P PPAI&NJJAxjHӥT10QBR)R=t5Bk XvT"R'RVlmQNPREWfVB=Z %U2M3,p5fT':TU]U!VqmVkZBWGWt0~ >~!>%~)-1>5~9=A>E~IMQ>U~Y]a>e~imq>u~y}>~艾>~陾>~ꩾ>~빾>~ɾ>~پ>~>~? ?!?%)-1?59=A?EIMQ?UY]a?eimq?uy}?????O``ٟ5Y"Fۿ_dlnS:ӁPY‰+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL)j"2,`z 6رd˚=6ڵlۺ} 7ܹt|5Q:H`W >8Ō;~ 9ɔ+5xȠˤK>:լ[~ ;03v=;ċ?<̛'~Qy#,Őܻ{>˛ikA*2اۿ?I]AT _E>aNHa^V"QeJqHQ|a&b*b-fhM<@!4t.dBIdF!Q%ru4"V^eZneXPdTbzfjfn cO@}X%~ hJ`d %PhNJi^: `Ђ0ijzԡMUAQPފk4TD0E$D.l> dhAqC$HAm~ niD"2hn ot9{yZ!YT pLpL0E[pOLq:Z^EB0$"Lr&WTi'Ls6l$ UTNT DLtF4~'|+OUIOMuV_ j!P%fvj|IFevߍwz3bɰ Pކxg^TJBـ_y_MnNz馟>r)M)A-H5Q>*f.h6n=sJ}Dy[IUCk[cSjZte|nqo`>6B:E>G@KCOHPISLVP[T_Xc]f`jdmgoismvqys|w~y}ւuى}؇zS\Nhtc|ڎݖߜࠕ⦜Çƍ͜˗ȐѤ䭤洬黴꿸ÖŚǝȟɡ̦ΪѮӲն׹ټھ¼Ԫӧ۸ز߿G H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx޿ LÈ+^|60L˘3k̹GӨS^ͺװ]B=:ظsͻ'#“+_μAybGνËG˩Ruv$˟O}zdG2HqPRG& 6`nR`m(=q M `hm($hj!!*)hIШ<2%q#%Eb@ĐPF)?Ƥ3+.@Fwc_ihL\H1I%Цt|ym6@Hd~*$d%裐F*iW:qrN~C0驨:a)mHvdиh|ta+,EHj\*$V:-&VkNav:ⶴ!Q2FrK!/nvyl4k +`ˀF%v0F*:gmy/mgnqdL0,g~,qj)3mHI6ӖE#jEQJa\wbU찈~H-E`-tlӢkvMCWt݈'*t޴ }#aw_57[d k bn/ˤ{;Qۖnq0H 81=$*ٹWo]J){M 'b@D:iD>ۋVrD\#ˎ$򇄭haQ]&:ú[J1i;pyم"b[ /K (L U6aTB( 9i3R!N!8"P*B/"=FA?74"!H2hiB?4ň.P&DĶD nH8c%Y*fL"Y˵)@[D''Pr4| xq!C"aAb~Vˑ^4A"@Hi \rQ!244ٛx^F[2=_g ѶqBUb+:Ya+@|X O6)GҁB IMЀNӆ-d|fij۠iWYд+C&~f"Wn~oz*"Tdȍt}7Ǥgҽ+ #հ!$=z׆ ɷJ3 N>tT)Rrz!UDڧ8}E* Q,Fʻ{~(LzIɓ-:(IKp'(3@D_/$5"C!Es[gSmxR~Q j3'Y]!l~!&O6'Bqy2~;}O2Xc_WRuX?-"K7$O^g 7 gn!{ y @QnC t77$f&Fx#zgG<-oa G7BՄe%}F %x75 @C3}}z[!PWxYr8!-H:EGUd}J8`^yRS`htzЉ2 f&fȇݑLbzm&Է֥!!fy)H`1@O\xTX,yQ+r7lA1lX(긎!hXR嵁 !f,A؋h| x4QܲZ(/>W8v%MŽ$YAF Q`1")x$(P~B2H8 m戓-h+)/o"GZQd^!% vW*4`!TRFTD:g{U]!W9|6cᔖ7bGnxC4e)m )Q1OQхA8|Ǖ|_A=v7(i 29Iirf FM""IQ8/9 ICxA}pVm 59WZyTgYi 1".7[ 7Lyx"hIXՙ Y"/'@*I:i Hg,vנL3~rGnRW^"oi)jeٕќ7Rx㉝ BJ(XAV!Ot)1 C0l~nx mp6P>pGTO|ν.νj\Ka/..e? N h37K;O?C/@0= q/p+Y>WoWoY//`M8_e2'/@jPGKO1?591sN l x'x7~f: MS0=CbyKQs:0c0n: ,UfN5؞8;G"n֝{)B'iQX̔!zQ~PB/`0+Du /|CbCrɛ 0Ɂ3`J( p648[QEހ N$I 98hP\FH7k q! eXCB>y~8/!`Cx9cB0. IRp0!D2VҒd&5oy  RCuBKP@E!怨`A-8PÜܲ4 1K#6(LXS5L|xS)| YmwXf2IN$`4dI 9deu! u[[P r%Ɣ|"$Q\ ăX9"A&ᕐJeiF@vҼ$dC "P(cq$(1mF%L uC;~hMghh<r:pÄ 1,')4FtGӸ`q#2 .k#@@ N`77TU24zb3*+ G:C G؃8QC9; :*8umnčȎHB<Ӏ7x<Ѡ&=Ҡ<@Fk& LN0TE(I’8xġIL`XFEv47QuqDp& Ւb01CGQr`ca?샌 P?lDTd}L P505LY !e IM%kl EAN~;䥫DԜ<<hґhR(Bб,<NϺҍwn+JN`05$Dp = Q};Oje_U8 YHeuLUZg-YKDXDR٣XQ Ymu۷%Vt 5eF}~M =xHQNܦY I8SEApOܬ< b< %< L<\9N ሄ *k I*T ]NPQ0[DD RD05Szcuஆxy$/qW ̃d ك鴃] Q# 5K:m"-5a]:lV{`^ 5ub nD*WXW3;zJ9Q NH\a ܃PCW5x=  <>}MН<`9%  $ЃnD a񮓨baȠ؁7PD%آE5 #_߁VȁBtщݟMaMf}/ȁޡ*!Bc5f vHGvT8c:%xB:AZ!/Z>cia68%hM.02_`> m,3M+= $π\`X[f:=hk"4m>Be dfEf^FAX0׭T,: Kch_`.PZdNnEՏ`^ d9->LT]UQQPi76 ^a&6 Hj8 >~f+W;?p}|N!. pfhq(4 E@o 7/=NJg9)-ƤJߒ`/:EP/5V0l$( \m娀wHCNZ솨h4 i_}jٽFVJ0 x6g甈HhnԈ-($ a|kZD\~]Tk˜x\M, =v)fgN!>ȖDNkQ Nm茀3$t&X=}ZĀ., 5^ZvpDmȁ4}K(6@ _+,WnCĨow%P(oQ,-Ɗ$lȚH. N@@)%GX026l)t CG8sp&8JwW8/q1I-J2xhX%HrFVqH˂ޓ(ޣ"^+P?8T2d8mhWȆ⣨[&آTޞ@+&kP՛(SU?~P8GtvK$%elHVȸn ؘnF y-=79)yt8,|nJt˻nw]YGe2Y>RރEP`Cc'|9XE؃5h>zA6GH8R>U7zgH4@OE5x猤_7hz'' PyQotp<@'I x_fd҃FWYk)0}!;  _5 EW|'`ΙzKx 07ru|D82g@OjΧ ~?x(P}f`p~N)#,hF1lC?'A*qƂz>$SD-g\$Μ:wIA*QJ2m)ԨRRj*֬Zr+ذbǒ-k,ڴjײ@Ȯ2'6)&JQ2o q<' S D;t%}/Ӭs@L pFxc5xVm'0-tܺw7‡/n8#+t6/-b9 g\l/F>@y(0;=Bv%rVmȑӂ > Zx!j!z!!ʼnj!~!S IVa 3%]Y7!GX〒={5[=F8I!G4@cA("i&m&q9'kwPf`qA$xNTIG=*I- >Feiؠ9qr_G&jCjЙ;-M=r(` h"pj ;,{,*,zI{%j$@Ģ'yFkOwWGR ĕ$3)]͔TWRqR-M ʐ쓹 @$ ̊<2%|2)2ryDIb%A`-RMA@`ęG&SqD@eEҀD(5SO`{Fj?\LDFUuI 8Qq/ˍ;8K>9啧IzUJGy U$~G֑KQc訷E  SYH<F$ENq"EF8@R F<9T@@ $ 6`AYFt@ 2ђUcG[* F׏$aayWMs%HN;g6keHgYcjI҂ֵҲ'OT. Ƚv)B|‰vu*5r Iv-Ng-d%Q.B嶶`FPٰǻeHmc{>.A\(h'ĥo Y V hIqKI%0Kb X'&Hϫa$5$pca*v\y=y8O &(B=q1-tbX1Oxl$CLX9YmMS2,넢_썌i,//e 2+퉛l9T-)/C.1ә\fUgn 3 gtah4'ԯrVa!~5tW;!~u(m{P7O5ݰ{~T"}$wuķ{5{`3ٸO4ޓ'[5OvVL?jIÃ?q5E\[9A!yQIĤD!G@ %1AC zSDЍ!ՈF="Q !۝){/ڿb'IqW $i4q2y^' ޕ.{dY]jSL9E>—}H8$Ap"I~$_$})ki~?$|9m ߂I_ŝļXE 8D NDI`qEh`NhK{b DpN@qMN ])A^CHCP>D#A8M~qB$p45fAlc7bv d6FJ&bA'`Rj @bd? BhCScAY$B>CbEE^q9Hd}dA,G#-QJcO$1@ASHP= 6WAĠ=DF`~TW聪K:V*^WzܠT;D_IPTYC I$̥Ax(XBDVr !"Q:RenU@fKBbdB\A!d*"f%g%OtNԜUf,cFAxnlk׷09MOX[HpDYMdCGSf`u taBũdfdNfڊlxVzA|YdargC'~&O&OAH&hn`M(ɘE*V-QL<,XlCPtŒI+*`ɊN j&*6*̺̆-ܖ+*^"A>ʙnme&-*rG$S,Op.~nr #P币n>uD-CYnl^nO(߮lAVnCkL4:onC+J SA oTˎ¿Rly:&bPMzDP/[oJpgcNk ®R.#DThm`(S iAP&boRs=#[8fXRc2~ċ:E D/'Fd&.}6-p,1Zbpo_q6 ;Dc䄌)i֊0Ap CNiE71N0hQ0F1z5D#'1$CcHM$_Q}O@իCJ%^3DpC<¶yg ,@S&'!!t׵,-S0Vo;rA(A4CAH11 pR@sfX3gGE# 3iq!q (x. GjN>oL8Wa&3D\-Ex&@p `h,a9 (k N$BHD $AHG4G=pIĚ/3"職Z=@ynqTз}/E}KտQ T-SS.}&^4wWDݻY s"q[~Ws/X+'rO (I{ryL'!#-FpCXGelT?xq+G4gϡG>t $+6T(%I$q^o}xO'A~}^v~ P8p40b! 1PC8a?6 QI,QLQYlEN\B\qQy.#LR%l'?0@ `֤/ S1,3LS5l7S9;S=? TA -CMTEmG!TI)K1TM9OA UQI-SQMUUYmWaUYi[qU]y_ Va-cMVemgVikVmo Wq-sMWumwWy{W}X .NXn!X)1X9AYI.QNYYnaYiqYy矁Z衉.裑NZ饙n駡Zꩩ꫱Z뭹[.N[n[[\ /O\o!\)1\9A]I/QO]Yoa]iq]wۘc~7 g^oބ瓯SL&^zELx O_fކڗ~c"翤 ;|GxOz  A ވ'^ B!~0G=&LăCT= f )Lta=aDؠ%L$Q0Jo!jpJoXCyJ%b"bdb,6Y '4VeͫUF-&"Eh#$R0敁#H (C{OHM~CD:ټO%cJU:p0udr 9̒E"0I]OһDzټ_E cCh\iXrڳd~rKiڋD ŤSzNqs <"/8 lPH&dK R0&p/J" / fJ@ jPBĄ^,A N3L-AJtS`;)OK^ jNDLہ0(J/GY %(iR՘A"La pI3XcK'[v_MU HYփHMQ }ٹ2{`S ])/KD\: r$ݴ.Hu%|]{a b\z 'Xb[ŶP.@zFs> IA"bU9vɷ\n'; {uz=U\7e}Ar?uU :=V#c0]nQ~6diVmubkf #mn!"0oÂm?mGVpO_Bo@r26!p! o)+8.W2&+3: *60*7TwuYu!  Jn @_au"  @lWvW"@Tw~u !D#!>7by'j73"R V  ;>>bl9b!"6j+bɝ! +/!#Fw 7?OyI"ص bK%i7R9x';eJ"|`m >C)F &9u)a0 @"J "iا"?GT `"@ 08PQ!"x$ő$B'z$RƄ2f P@AG%{ 4(Ě6 'C}v4(BZ$c4dPdÔ6ܚi6$tڽ7޽| 8 >8Ō;~ 9>cqAѢ 8EhbD1kBR XK 6 zfӣ`[p}=s F N\/ꂪl2s ֌\wѧй򟾭't(]W]l#m@wIEEq4~NHa^ana~b"fH^hFiU!*s%9^iAe=\݋?X*Rh0)ЉC'Zne[eeX}1H~'aiV=XP#g~ hJh b#E@4ޔ2gYrN&mFc-(Ep@T6dyT aNBA!BĨ|=2$~d#IB_AUVڥɬ5jP~ nKn枋n~*JR$O8@l&+BV{V_5 !GyHapy,P<:"BPRJeK$A"jlK/v,zerUkiUZoB=#}FɤJ/tN? uRO@E"E6 `Q|PWAn׹sDm/FŁkCzC7>auF]r/ =nzdGO6tUKRf kAEy ղN{ߎ{W=PB 3)?wOUpIFIXc EMo`B!#?P<-gLLeADy`D 謑 / jpLTҀ0G b~d{A@F"@^ p, vQ IPd HF+#)\ Q{qaCNB bE)$#,EN&%rCB_(B3Fj}B "#hhCD!;J<|TC!(r%/LjrƯOT aBH ̍bbK"9=LbF&D$8 ʂ b0fXklj@GK_$Q%+m3䋌B)kf FSȜ,%IKWN5|fOd鸒Sd^.eɟ=)I,lC шJt$2eEHXr  x;'xǑoH1(r  A B: % B1u7QIRDLM`$<WGZRPZ )@F#юND3F9ͽ;%`4>iiHFԴ'|WZ6^Re/j5CT7(^ i3Ց$ EIHtXn3=mʰd%fj֛jzj9 E_hCN{$d7 zH$`.LwOy s~ ;mJIh7F 6MS-P]{rY!yXLY?pH07Y .0 aQA|ՌG)^OSܛ8K<(wQnȉ1sn-ozKW!G|yEb>c<:63nJ;:P, u'ӔB(Ck#FOHB# )$! rϐ'})pdf C$Y^?jO40ׅBw${w|JzAwo^&naNvmCv=\/HЯeu'QBQ7ͯ?_[m{?D bm# /mQH{]6OY׶eOh}| @yxI#e  (+Xly3;'˷oާk4A 5kƆ*胛ԂGKȄ R]#uMATm H VQb`Heh}1׃gh;cyzx8zrQy|(,vnGx }FERpy܆ /6X.e=a"doIvX61Fȉ(HрNPmV׈jce<ɨȌVqWa!3a4'~!_Rl˗}聿Pv(Hh pe>,ǎ^S ]'Ȑ .zPf!㊀qPI%i Ez`Dye%6ё!O7'?  y xp׏0y|?1nX ܁2tl=Y[_$|򔌘L H܆\)sI7H w0@* hHB` Oو◁cY9RF@oSqtG@* Hyp 5uї :PWUa2!GoIP I OY fqY eВ[|'빞i칞l\9h&s! O0n Й ?5X:V ?1qɚPy SP ~AjaAy@ @cr?P > QLC!Y  ze~ _0}Eew 0ngi[ѣAg6G{ED>aSMz˶k\\Zj_5j@̪*TPjWq*_Z{K k% ~ :RZ+0_j7UT6\?Ju є q?%q]e 6B ˇ yqaE$X|pgqS4?7$f% jO,~M %VypgY;0v++;kk!{(a+R }i;yhZrz m~en OO5wngE;gz{<iWwiwTѸa})8e[_'i&:3 #+0v?IL `ç:6<Zw |{sajz0ːltrg]4!-.Ck }wIr&](_Gwg`6 7mU.TȣAmXP59MA6A^~,_eՃWu橯OM'Fp}1}L^b!U:XN((]a.bX|=AH .@{^wy|^nn} @2֮^ߜ0 `ܛ &ckX2wQqL#mi ZSUL0=>W>Q0lC^GZ jvM jȘɅ]:CiѭU0!N.j>rݪ>!^( Ypԁ~ӈ.^h>O7F?\Rj%|yxj o[ЫĪ@>ՋkB!z-HNŖI?9N Ex46V@Dn ե(jnwcRN4#o@^nj%?< 1ACM d@__y{}_m_})F/"`~ $bd"J\n?*+Q;o+Z@}ZjNWt%]onZV=AZ@6%^Ċ2[N3sjs)@6= Am} 4 ĂC#~X8 HtxǏ 8$YI)Udӟ(F0`$(N99yPOvyP#RlYRȏJ& U|T@IU @UDUFZRJU##~ 0AަP6ͺxbk!⅚dR**HQ$GZ`dתGF)홣cG$l#rqɕ/g~ѥO?2Hd8 U,@@@QLA@7HPt%Ġ .Xi{?A3=[(-$ *[R#x0B?"IR)8/:@!ZKa  $ 0y 2J >’顃 `7㜳;G$ج""RhPrN9s+Ҡ-겤QFPCuTNo-'z ď[< )4*4 RJ: W $:Ԡ-"@2∯L0 hpWJ!NJk֠iH:Yh 4fG+,jm%Jː#K^NCrGcCnJ 3-J#`+8idO'Zj(HiT`p[Y"?B%vM$vZFi9".!bh~zwꇪzmX7롮 >i,*$#2 #F( &_P8\8+?tD!ZtFKtDqKg߆{wG}$#8e'~D9cJuT^A#`A1j `%܏LHd!zx޵[ƵxnA @]TŒz*!G` "HR>c؍Js-(," $/$VqWU,8db1alxCjPn eɈ&7Xfk q#.6BC4mYbJŃMh=|QhAHH6J 2eHD1F p$$#9ɈdvH:䑑&!2ȁ ;IGXR%kEX)O(Ja_'}d^ G*3\I_(R"ǂ6%_)0"m[J 3%jL$ҁXjkɁ| >6u$ DLvCΤW!}D,%7K@l!#$,xfFOP.{PC{wT{l wFAZbMT-|ǷIK*(er *>nzץܔpSs3GԘc$ C~$nn "$(֨W\IFpLpvW[n[WrTH!'QP)bQ!qt,Ap;F! % BB1@BP'hXXYsv:23K # 2 " >6>(&UBY ;a=X !*+`Dľ@YE). d"1Y@%g%h|dP2LRN˭)#0EDOKB(Lc,ѱ(MQQ >yJ^tJQ2LFK;K݉R*!Ə85#]F %;D$0!B<4]6-N 3T,S6uӉQ?;=pNC??ЃDPVT IDU)Ĝ<N8YkFdL贎;8Vkb+(ɒ >CM>6e U|ՈpWTA WXQ"QQpZ$rOHs"wtRP׹LK|.=v}Y1|Q'-L~=t(RFR{%$HXM(2xSٴӅSa†S*WqU?$>ST?H),T L$Q=IYDNt*UrПDSud(߳6C⛽@ecCOD1+7 ;MJ;ؙܩ!זؿ̃9jsWQTeO =(Å[u5XEmƅu,}=)؇X[`R؇؅Y2R"ٗEݫlB2m%AB(P13)?()',ڻ\TNYTڬ\ T-uJ4NP[/+"65[QV֕vt^=7=v ?5Em p)nV )X .XxJ7HPEiQE[~ݏ5Ӓ^;}23^=E^HZ^0YI#Þ=:6XTI(I=Ԑ1Z*_X- sTmyEFU_H5iU4D\RPZ(MPˍ}}6j [ ~.G J5Ccє)a QYbYyR\LM)$ENKab.fyeMR!Omi>uH"O''FمgVa0H݁Q@g.h]m21.h*lrA]ԕҾQ %5W&L_IJ 􄈯1-z2{Ҧb*epUS~֬\֧T6_`on(dbh kF 1Gf`UL9b\fzebfse. >{Mˈe>s)h+^{53gHh8<=}hѾ!J鲖G\7 8S၏(Up)e4~bbF5}bVQ߇оʫ4iU`\ FVJJ_-jee lpT.(8$0Wj "]3FylN]`þ梓H' WjpL p)q4h-M{F|.ӃHMH #W0zd1 $!7$CSi$<3vԡ2F"nېnizfPnUjP >gzE4zS4t'_`fm&jojeXo)8|t*i,O <]EK;5Eg=}# eufg>6 _J[FVGu[k>]cgab7mOv)Y(h0Iuʃ6V#c v ]!s@9~W3xG%GCZو$ςpW,(3#([1],9Kp,@Y 5t8?"E;G$0zdPE\FЩ6pX!M> xnqxR?U~s.zN ^|Xp:f~qVLuP)߸RV { /b{EX' /sbD2zw>zw!m8;BgJH }7JМ<K:2T~Ԋ<\pϺ4LG1O< 6˦4EQCsz q?D PQ\0P y(qD D8E(GYh䣁>*\#K LN(呋&\X#N\r+)ذ >G %R 9GhTp,۶n+w.ݺC.R*E~^H'\|Q8ry󓃀U>L╢́zQ[~;PoV\qd%z׃*_\`dK !D0}zQ7'( a/,s4T!H ;A16>2ݴ@HE `Dq& t.Em:m|Ert.By\ &Lp:q; V_|JoR(ps9EWtC TCQHUCh0D`C[zQ^E@>4ETGZqe\Dа ?[1=R *FAFnjxi˨;SvK4T@dk}m{ |׭uj3|[=~PQL_N,&@wC itIYV!=(0͆l""bCG4D=" X##Hl $!6x:wcqo 45AX\A y}<*=cz` Auai(IC*W O#Ļ.MJ)icydI-QI7tr,"8 .Lrhs>X0a#Hh |8%\vL2Ւf 6woɱG8Nuj|PٴzZ @ ).,t4XAC24R">"DYҕG 2jԖDBPHR!OHB#Rdn#z)!A>UE m!xSPMgTH#ќN2T"S^!A0 =g 1?40v̚PZ #d4;]~DK$AZtQ{ۦ 2qHj*ұQpB\`Y["- 8ח<ς5gZٮD[us2NcҮD8\dmB"C̻; ~Xd&;UՅN!GH!x"U 9%7?"P)"QtxC)D@3c/mm$0wI]P= lmC=H%i!c[b%;Q`=j[2Om 6t%ִti(~BEIRBuo付 Kex[ 2PY8ƫC;[2KXnZ RH, @Q2K H}za>g凔JێbtX l[&U1PpB `*{u^pwA]eϒuAݘbIpB퍵{~&n %_Hģo}c>ұ@YuS@py"R]~^ rE׮=XfѤM]dNmFUZ-UfXe4Qlile[Kؕu[A 6s "Am U|ʮ\ ` ڈ&-G`U`a Z!,D^r(He(XPDmF-^FDE=Di?AEe!`5_[H~ x(|nfO`vAIR†#^F9va*\]FE<`":TE ź]~e*E$"%_"Xbb0"0B#Ib4RqmShDbr '_7elAFaK@ lh/`&%ڄhȢhES`(|PW]Q"%A*FFKU9(N(†B9UcI2އ,U076`[ֹeJJDL$]diddOL֤R:o}X$@UV.D$e 1JAE^CUZ O1$\m:L$QK, fN&of'Qq2gs:s#<@@<pA ^[DB)V&0* rLf@A}\X4y@AS~NbrA Y,tg(,!RAgM\61t*6@w^!}!~Bg e@+>S\rEVI$(BiJRic@Zijxx'|))rJziii^ij ja*2j:BjJR%jbjjrjz꧂jB㥊jꩢjꪲj>*jjj:jk kj"k*2k:볦ܱBRkZbk2jkz뷂k)빢k뺲kڞkk᫵&m*2m~+JRmZmfb\rmzNj)ؒmٚ٢s mۺmܦ"A`KLrnzn,%,rn.BF|n.a nޮDAn"o2o:FBRoZJjro>ezoؖootvoү\o/,p ƍe^ 3p.鮙!Sp[n2]p{m 2^ p +@ iw pU居lp p"@,[(,/1>l0"AOɱ'G"qLRKnof[t^zq,wa$HPUjw/E2±}"Hhq1 [Q$o `T0"; .h2%]Rr*K%w8nqzI"'K4r/ ,+_ߠ@r5NG.T i(r4+0G#,8"R3Ks8Rs]b<\l~ 1S>1.8=ǪI0i9^T@h F*3>CtD?ޛ -VAosO>^\n"=DtIsE\$N6ACc(`IN7*J\0Ԡ+2T&1ލK"uT(x[9l'* # F)[&fE_Fd5mwK{J8YSdm#( `6[Ʀ'L}[gI+ on>@t&Y#:Kz`I亪PappF(V:&Ŋ3,!tŵ?iU%=+qp{g˸Emhd<Ұ@Q(_ztD{ԻYб撏3PFH AT#C=Z?BP}|GSU=ՇxIg@ @dV8d[WGs 9[y9fp>~(>u!( IpT@Lg" L1٨g $ p`";yhPC5ziRK6ujTSVzkV[vlXcɖ dÝI\:X`Ali"렮W pqBGVBd@nAby`哉l;yĶ;-Ը#C+Nd %C+ "Z*OmxpÉ7~yr˙7wztӁnȓDL\R&Co'>) !:`aX6H ~#&2b')6[ "-R#h5Z#(!bo @Ap $M<U\]|eQERkroiH&'([oN@B?fhBxHǁLi)x*m 6zp  Ils:s%1'JbB =D]F}H J$# j'!9%j -oSSr{,?yz2 '  䄈MܴN}(KݨXW-sxߐHnpr=DJ-rzڍ|'"(Vɭ ݵ֍ H'l;@NF({*X]6wµiڗx>ZX 饥.?h~j )O5?z,DH_Rx"|-xڔkemAۉ+i>_|:ךȝʤwIЁ)YuM?N_u񰊘l+A¹'ŤLz%V-oy;ωݩŊ襟ꭿ{%q-?{#}auݟ)uhߟߥgD(x5`t{,߭ #OE">j6!rAej'bUHXB)T K1XÜE89ԡ8> KzJGYXE|(t;H M D(2w[S@PWE4oPσ! XG;yԣ\.Q$ȇȭn,  ٺ##QѶuz"> Гh !8xe kH|?0SRUv|mlI1i"Zm.)^q_ 73gnd Rw]@ !{M{'$J U.9[xҦCc"ҙtRS]v ; xҕ{Ht mcS/H(5[(´Rv@V3s"#kW_.ۏ]N&02`?oia{]@2{"` @ ܱ^4f! @`Wtow  vbww!7_Y78.AypWxx^vm7wz v"{u{7o vswb|vvzח} v}5~`^Nn ' Rl` "a x "XG&G!pN`l * Ba`S^^zA|(n8z87?87}8KX[؁1A ^ Z` @a0AVb v}v N @z"@ZPh@ D!` ^X$Nf`ؠ} ِq VgA"uok@w`#@{!B vv!6!@!v\.oqg͗|BeW*F-דA!cK^g!yA`k3" _[yi_"qǙP _Q@AyZ`MocU5`qoYk[y)@ufنk9): !"uokř󵑻6xǚvkقoˠwv"~*@c7!Zos@;!>z^zh7vWZuBpk_ j7w%ƚ*o!6:zB:u6>'c" ym+NMvb*`M!ZV:!Z:(R:_a`W-'z*!5-ط"09!'D)hQ9UU;%~^=!´1=!H7_O~\3]i~^ ^}^ ;!~S G=:ק$2*. b@ٽ-s^ "7c /JUWbM>{">_k~x" k~H^O/=>_]""Z:uiw`'*T'J"^Q^y!~*R~iF tz꘯RagfaHԶ(4% # 9w/ Qd~KCH)ؐ ~1 k@.ȁ Ei=S3r[P &NRl0( ?p!)…@jx!iAr<~&@pxٚNXAG59PH*Z phElq*HS=lyDCڂM@iE!Ɛ|P#|4gw%0kM5.0x!1T20bN7I (GIR)hJʌ8sCd sD{F} #QphF=n"22Hѐq.ͨ˒4R\"!|$ T=īA:v"Is ,Aca&h-S~ $”$}6 J"jƘ@э!AMД\|!/h ҩ靓rNwӞ@i$Ffe@PWdK о`R!qAN5qi&@M$HEgz8YD``Alu-JWUӪLN: Ƥ<ګ@0AUcQ `LM$:URP hGK] jCL #P Abh@DU[*HK,bjxm>a{XpM/`#w W'H j߃ͯ~60_=m#M, 'L.ʀ l {â<_l)"b(NV. egL 8njr@&XM`\`";PLO2$ԄqL2hNRLNM,f5xγb6$ p@ :ЈNhTY&`ygBF[Ҙδ7G69RԨN@! uWMZָNZ8uuMb>4K‰ Üj[JkSnNv{=AMzޝ7O~8r~ O 'Gs"o?(@D 8)‰'4 (`%HX]{MHhҕB$ t,y|_9 [$ W7FQ XzN~vp `p.զoÛ_$~HA v]#F; bh нѾ· 7(Z`;{kF_ˁ@i|p_[y32+%pUf[p7ϛ v`A8l{Gܧ g|D1 zPhZ`xIk_?kY Pop<`@Q@1Os,t68TlXPK)_eKKk\Lǂi$b}vnz3}NxuI`#^%{'PcF=0 )fv凮H1"RG5L֌[3aX>S^Ug%J7!*Qv^4LN`f){f8ؑ m.~ZmxU  ɔW>^~> 8~ԏnґ,~΁n٘{NԞݫGT!I{ .ڹNQw]pKCn5ߪvi$.SN +u! ϺT.V.ޭGϣ>oo~Z1)Q_.Na5sN92=5!vH`UA/fЋ|2AR O;FN NO7?!oMO^[_of,?oO澌7\6,meǯjÌ펯  u+eMΣ q6P{<@ <0JB >0 8  %M|# 0A) UdH &5RI:(ʏ.ŚUV]~VXe͞{t HvJ U2d[A(%-lM#q*bƍ?Ydʕ-_xtәs%tD_Qh-GI1Dς56%aF!%'P<n,t #'(h&[uQ n{iPB3D>PBvn;(SP*ӎ<0B '0++" *)@饂t #2 L2;;OFT0GwG2H6쳈BL >8H(@ +1 J¡ {cHBc@ *ЀGˇ$ˇ_F %qiCAdKH9M*KaR8HB2-x!j%*"2 RrEѐe(Eٵꐅ/E g8#Z0 r?=,c0!z|<6?9"NNEK<8X|2ΧNK2heCI%:QVt2iP5#()Wf{a"Axi/Xp©xcD8A(s<)x:aw'PLoFo3+IJ҈1LRSDPRŬ$}1[‰ 7h\+} b(dGĪ^K0q@:W6ֱ]F3T4pd1p b?F?,`0\. *rAb 5FQ!Im`֊joIڿP&n%ׄ.-akakDnۈc5IsNw]EV0fFH4 rP f!33G6Xawþ'Dp=BUbXH$R<  oG\CsP0I$`RHBjxfujq[b A}p|/ÛNSҾ CF9/k})v!=J+ rDa  "v7-Iܧ#EdG|x7g @rŢ$PY.xrȗG}Uzil}e?{w%tʢ聰1]]X=Fd؋L4cd~M'a5 5.d^xE 3a;4 $1 E}{HihJ08, z>>[|MFw >ff4F[R*#PuH⒭IYY ?OÍN’i.bI.jӰnAN5(IIΫ0*˗1Ӝ2vqQHk EHq4ʹk6QPckL%Wdž 0??9*di{Dp~N4.bKYvvrƘ쓨lmΠlN*bm^ َVn|$C5Oajةm+/ȼʶ" ecV 5hgF&pc..~6@6  0s]f" 1sQs~H397_K$s$8h^[Ef8;_-:D?!Awr+-GrSc2W<^Tq4KDEa⭙i Hu[lTn UǠVtܛUJYS_]!8m#P>qY矒g?&i^_=4 cPe`!%uowwp?>q=B(igs??wY6v^fQHf$x&-`xx}>~=>r x? Hw^p=y/2y׃y^yr? nvhW= z"QNJgsփ[ 3zGzk {+ON,!O{['c8n4W|{+[37!RDwO)x{I (7w}rTMw GA}PRcH?T?=|ɟJβ 7=寐$Gx'FփFٷ /=(1/I'_4 „ 2l!Ĉ'Rh"ƌ @#H=,i$H)#D3ʘ2gҬi&Μ:w2T'PP-:##l0?Z+ذbǒutiCTNts$-(B2.E.l)G \|ʎ,!1̚7s8󂇟G*E#W;50P@=b l5ܺwz:uC`\3F%O$NJzO P\F4CtBz @| 1^H@aCHq魗F~v'rYjhPvuE$ @%oXFtyy { U#љ#O=Epr)^zGx#%x#Y#t92@*DO4=j9ZV􄄟%I~,6# k$E*h@xP#v)@ꛣe* @80.I AQ IQh #vl{S}PYQlD[SΜSa&3ϫ%RAg,#TG7/A(-tH8'EtNO?!_֣DgP%&D A@ؑsLOH.4ԋQ$˪u%HE$ٞ# zЭl+$c (KUG]qrpj9 ?`|DwC aMHPM9w/2)_tpq5^~IBa݃sT6!uDB:ӡ+~]‘CwN84yDF3|orQ,u#YG('aH"c#?/n!+?d# rܕLXN4$]ؐm1D$ w! tM !QY ($AH;B4*"^.uGH~̉&l r!#J1!x%S"j!C|#@ Gἒs"(8ҀOx!AyWZm@"JWhQ12u*`TȐm$>7c($ʌ5RN.{92G1P@ PZgYXF^efЈ$ LFA겔Y??Pp4 @Bс`'8@,KVK0 prtI< T% {C+'/FOa Pd\qul&02mљ}6d,L>DDbaZQl}`ͲC,ANَ U1GP}6-#Q2c zL7:$a"s\Zq-R;Fzj{{#/?Sط!I9{KBQoTHΖ.z@@W\J忯ժ$T ?]u$u7:@-@pC(5nC gT5A,^L<'Մ4DpYCp٭gdB9DC BhaI D [6q1 fLaEaC$_RON:AL(dSTdD[Bp]h޸(e EQ. ^k@m(UFMBvj%WRWHLDE PH1d İD- _V$VDe`rd^ CTTiE Bp)V(\f%fBlf%vV*DiVb)B6Ƅ~F% SjĐ̽BpɅ dSڏ=giCYH8DOVp]`y*xh,RDCD'R_PFœ8s(@-h14aODTK2(Oh$C@~ LdG%B֟"ć*DB:DhA)jkFDBXM]pI.~ +D ^Fx&~BT,EmBh,e&V&Vz%)ʦB iA$h#Elp+*AVRmUP"l,H8l9Oe-Lι$y^4@@jHMYg y`l)+EHJhe^>ĞgMDn6u!"\+CNOGp( IDFhRFg`k>޶EĉF1HmTDt 2D Ҩv l((H׷"DBTd}5Ozfc pAV,E,B,E,ʊ離,d&mĤX6vɼVeިBe [vID< hE~yJtյWi)!F#5GgKLw܌1/2aSt.r14uM䁛'TNtKWңQ۴6S"D<T{YUq˟HsĎ/.0hi@ֽ`u3uAX{IP{J}F; vIp1BHTKv2SG$CŇ?6Ci#DhRTH|/DCʟDBB`E|%9|󫶟[>6K3@ ( $ |JA(44( 8beˉ t0HG 4q?>XhQGCb(IF:*RN~4xSWN3f8x'cUBSBUH;"pR }ٔpu {@(Eۆ"f PXDB =b5,$(3i .[4!̣9  @-{w?|U(O>ESr5r``$.:̻B8i`fh*P#Q 2ЉXd"NQ J@?E*}lŃ쐱eԯР qD/?($0"6(H Qh̆kf8 (П- J"٭);K/D#(諰,=0K$ SZ-9~rlH>14Uյ(N4@T2L!W6R'R( 74*O7hPJShKhNҟS:hh1m!XlL=3*QX߃մD߆\73W6(!bLefhEQ%~,OH Ɵn<1ǣvG~:N*I砯ޠDZ~y2cIvH@rm:=G1g~w-艁})\4M+@=RI/U'`{UmX׬~( XE]b’)}@V~"urX)LHu &IBi{^-_;ori41(|@q@e} xiwd,bǝ 0 2ΌBd( Dw)9 9%e})x4)MYX0E{F 3 c]d~^F٭G]a׺8D/ $` ڟ #r 9љNuDU^b29NE&1ROp1N Heg|03m<waG=JD@,M$RDHTh"'hQDSVD=T!hC4T !pkNLS&ZH2R TU"OLt{:($`!Y?<ZghI; Wb;%D?(N J%tN$xS^omh6' Qdm7ݖ^hأx f*v,I SHdњ\.7u'EIxF JQL ԪM!l6E_{zpFe 1hHjRt62_3])/?TKrPe_bˌ@ͫ&N! X"]˴wHMǫ< o5\, uȃ) .j_L0$YK6ŽSg@KwTC0hr@QE+jYhF1E6$qZV^ũnCea@,571颴*DJLEOp۹F1UXV Pr$D|$:qlahw 'i\@e $ڦ=k'Ÿ> iqά-o o3j4:6s/]4iC8>R?HT}x{IY\oBm{DtﲓR x_Hل SLD@IlE<}{R>?o[Wo1b zzF2&vCo^O&  #'ƹBl*J "tP$&Vg# mL 8{H: >L"Go*r**pp I @v, گ(;n Vt"ߠ O! bhn-26 7Ւ.jch  ~bZ& y M%(~ce` N."@r '"E-@d5@" 4)=hՐJ Be\5hHy Jp<(@F8 `dd †Nr( p 'e fH`Jkƃ%{*# ȍn ~"2&"GhT{ ,1݂0#s)n4gM*nf! qha h"   - XjgQ$0/u_ 4/C$--L( 'и "&KI'‘+(nltIЌI_лK`D#Wq1s< ³!3s'0* X}%Y豄 E`M X6Q*S*"Ÿ<& ` , JRa&)4u [(F1C6ŕBeԺ!-|Oʴ!4  F('n:?:Mr̓}H=S#S=b&5S%w(4 #IE;)L'ʄBOGDF@ 0B X/@Bo(*jJcW+)(W⎗$#Q>NPDTFOFA$C]0qP3*LU\W+*~fŃ@28G/U؂t`lQ*3 $a@S0n*Y 8'Kzo,=q16:'g3E4(V&:(h4hQ'_}v*L/`DuQ4.EksIl eG(\" "@d,C y"DVm* \v@i^X P4r(joBe'W'SBt6G!\V!K*vwV{4$o'V2qsT*P)0  S"g ku ֲI@@cw' @F H`I8'Hr!tyeS 7)Ȫ*0D-gݢ (vP&gNu/jP 4i?pi^JVRcѷT&}bzQk[CXZomm@vt` Xmh)mTS}4;z@~ssob*Es7~R"AOdZY;)/Eucfu}x<&8`rzoD3"_pVq}x n*xBjxr8#ָ<` "ib2;! @P<َ9< Z " *@& `#@ ;L̷E³}!g'Zf&Cī3}JG䁂44Q>Y=l )~TY?e_.mq}Hx_0E WnSޯ(Z4v}GC ߇_sEsԋ' O?-wP% BL\$q6US[I'wHe… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[|$fG.kڼ3() x(>V"y$Q UD)T`tbR*"%$1'Y~.n$'d(LrUϸj@,J Ū \,PP@Hi' |Q|ɧ~ ٴk۾;%'={ɚ;ċ?<̛;FI;D DN ?扑UZ`Ts^V6Pvї&EO-yHHĀhB u# UzQELTB g=aV]ggEbg_DO]J.dN> eRNIeV^e`GA#F(`  0(f4D*@yIx'y QaHȇ^:YYlO8 mNKm^mn˭DZKn枋nn@ Koދook{pp /p?d>)q_qoq;XA}Lr&r**Qe5r6ߌs:s5!*ES>tJ/tNcvQDT^O_uZou^ W >u*%d wrMT `~$ wxJP9 'R]_5yz=A>+۩{>)E{:W"|vb>uF9OO}6sPi}y<TO~ sķYwZЄOR4N1,*%O9Jp]AF jpĬ|WJ5iXϊ֔5G@M|Bd9 { @qȭAΌdg+ mC -Y7>$?7C:=#sQm+27<o;NGaO`+D3 g@ n D|v B 1}? DJv!H0CcP|bԇO @Jl"}ȯ'N޷ #xׁ_0>gH4{P> yEw/yeC3Dx*?! rj}!5xFs޹ SQ!? v;"[XEf7}wQjb %v^˷Cgm1lg]H~{sIpl7 czax]A?V~x (C0"${qmɶx/goW#$ekrGehc3pog uzQoQu !z>f8pnkgȈ/i h$x+XFUe;(>Tl舭k{)wcrh+$hƤ~~upa7aVl-nCGpaS"(P$׆p{bo|V](h-hyeqfȌNHF>wHWHU]xg[29}ӏPH+Ga ;ݸMg 'ij>NEsV(Z!i79, 1 usҷ9#aL\/D9уNGNw7V8Y%:yyEG~uE)[ThV[G'bxO4 lZyI%\qv"9`Mu(PY(T郓z|9 0$Q].N[%0Ws@O)69vd)EB1Ӄ 1@6UjYYU [ٛotϸ:|W acNzV9{yi9uӖ牉 [gNnCqI#4Iǎ !jiO(~:񩠅)33qjaL "f Ar&Ej+JzчQ]y]O[u' U^wygW פY9z$OHp7ķ:W' _Hbʡ Zihco- %A9 j[79cfi|" `;n>\,6ĝ0 <~N`l,p;QG|5n,> :_H!q*g0& J516^V Bq^; qcn8@_qL6|sneWnY\.NP ((}NGl*q>nN~N=nL|N;'mMn_ȞG 1nQ_.3^ _ G~& n(p <F<~N!^Aٌ>& ޾t+r<*.!!kĄmL W;9pNN6ɞS=r&p \AޜĞ;6_i6~ "_c>+&~6MFlMN[xoa & 釀 & _.#Axe02+N% <!`n00y/3/ӊ`-0&h1A .ddg{cQ4tkɓ~Y6ڇmyկg{ϧ_}p@ 4@@Aϡ`x0(!d/B^@( !>H4G= ra%:*!HiM8a6b2BE4ăP|HEr,Ff #C},1!1"Ӡ&T()TUXcuVZkV\suW^{W`E AX"x6!U#EH|&QͶDBplq|Ǣ4 H  M0! *->'0~E(`F#nVtbAjZwv l 3>4!P0B>aBA%bIdD5D0yMVcl(b&v:XXzkk{l˖yBOفEjws!t:YD#<܃6otw\ aR|#7 |NHY^gV(scQ=Ϫ=H&obO G64xwa\!/!=oaޝϓH7l~~ O ܏ۚh Da9x @%Dpl2AfM^ZH|wā -84.TR! ؘ `M)9a|4Ġ |`Q> e\B0A"DU7 =FTh$)$|+SSp''KHҧ0} " h :q} HD%Rdd#HHFRM\hJGFэ$E\1} F$E0B0idD-sZ>DrC1ͨ@l#2Cd d[F#ń&ON)4OTKNĎP:9>lfӔ4 l`$hA zP&T e(ti#-  d5)x~&$_%G\&D:<ͰG|@LH )`,YӓN IiBmfL!#]|)DӦWz=9;7ŋ(湪z4TA䔣-kiϛGMSԃB8E015@5,}0AAR?MH7T3hRToqfiGLNr@R#iQʩ&d->_rTunu{]fW%0RxwR$(3ꯙeo{{:<[AFf~Ž]/|ZK "(JuH4m9냉74/\NIZ6zY=7a_>;˾V4 B%]]C,u"d I|XFx>d(GYSr&(ʋ vz6`٘ih^9E )@LA )> EZ2 =lYzp: D!q:2s1&(4nb=zQVyԺ5tszr}k`[6[ &EfċeD΀ӆC2K Kk?p׹g-ηm0Q{ 5Ц5]DuYnr_Y1=e-ϝEl\#'y H(( fQv\ Alns<.(j~݇6,@sN>&< Q @/(0}=RCrzp7GT;gm!F!U?170-< t?(sI5w]&|=yЇW^TMP|A~ӑgϕf QA>|D`{AR'S''\+QNŨ?gm|W=9;Jba nw')"Q;@.;S۴+Š>= @ @8PIL[3C&`3( w'+J+$3-9:xEH9X%#$\Bk A4 &88>j+l,< &d@ȣ“s%x22á{<AÇ(CCJK')BDNDOD*8.E fEh;QyC5A'9>yERp1 L4C2Bbkʦ3B-d_Bg(^L~ɦK;EŜ`{FR!kdlFHzs 1kXdjFPG~GGH 繱i r˦X3{LD)Z-*6Ck3:/Aɒd4Ȧ I@Zø"s7X,IrD5pIvv,DT؁HýKؗFK씣HDЁP(d<<\ϴtNjě<'L8QEj{2H}#Ldl[1O%&Pd0QD< EH9P{tO NQQ-Os+4`Y=P7Qދ!- F8)4X>A܃EOx(mYR"RX5 H8A</].1H4@-0eRR+}, TATB )8Tڪ(TG}THTITJUTJ)&JUR-US=UTUe(BɉhTUZU[U\68h^mE[]_=W=>UdMVe]VfmVgeb5|VjVkVlVŘLVp WqWr-WbStMEFsmWw}WxWyWzW{W|W}W~WW XX-X=XMX]XmX}XXXXXXXXX YY-Y=YMY]YmY}YYYYYّ}# $xTYHx@ڞم ZY}Z-(P#(ԩZڅ0RZeۨ][m[ڲ5HH 킂hZ[ZȚۼ.[Uu[ʭ\͚<%\ZJe}܄\EZ.\EխZֽ\]IE(Mxɽ?8(`Q0 =PV. $ۂa( ZZNx(]>FHٮm͸mn?K>MwdV1^)\fn&@}]&>`^NhK>^N`Mox(xF 瞧pXie}.&fD& b_.&]xQ`q-' oYp  7ߏgaq_r\Gn,r^yoO6 /6$. \tVp@KN}av=V/pqqsqs QhPj(wPpt6KF(s7>?dg N_o`tHaauqvtHtU<oN7RgT'sKN4OVwu-?vdtzpr3fvgoA_Obn7?p`@odlO^tg僘xvrN.^Q(wsWPoxlwwvwgٶWKwzZNkWghoh_Ov?_xގ>s_gdόtxN m_v'vMxEp1'z5z?up.twgNr^T0xwKszPNxga?zObҶywzήc_|Qx*y$x˷|6|%(FdVfv&qM%vccN(g ?$h^=Hxj|}SWԮ}6**pw\Npjo⃐ބ݂(H\?~=h~(~%p .(e@C zT?lQaFL)Pc'*_Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNB*u*ժQ4xЁL)*dX& 8S1D"G4(0JE 4 0AE T<90O U၈,yPN {چpFP#?TrC˚+I!sb&ylզ部g6xtqxQ6Wh-S6H:gϯ?X"8 X5 S {3EG~^2A@6o}ai#@&Hd6(h_(8_NtLىd{G4AbECXZLTJxMN]HdLLU%FA(dcU'FEBg["2ڨBR {,Dzd!Y1ɸHm5v *FTD I 1Y+J * U$'Lt:YHOh(9@k_g\-Э4KiKHѦB(9Z-Uگ\#aH@LȭTp#\R磟}2%+|=AHh/z"l#i)8km53n}P hْȕyzIf7&[{U+x:^W;.yX@˂[! [02W$Է!IbOqX $\͏&=hDs}=8_' l$*e*ib; %INs(`N882@3Iq'n4ghC"2\$#H< (@܉O#1 oqs"SR ET},e3%*Sʔ|8ȳb$[e-ZʫV \Tƃx!DI.yE(*AQYSS^LcXBUs't$;w3|T$4DZ3_⪔MJ Di76iJϑ37BqB/LRGMӠpGBKMz} $ L4Ns11IAEi3% E;RiPrѝ4h\*SԧB55b$m<@)D" l CS'#%U dNVU%;IҮ!THZM)u&gH_B3F#HUq| .l8g>Yֱ$+jӢ6]m&J(A0Ɔ@&N$6BGH2fJ,L^(ȸwu+S0ʤ́#ӭnTʄN:# !V/4G2bDwl40 xћ$0y>u$s}I{U@׾ nbEK5amBX/a0y821snPHnܐ#4v p9ѥbD=?##n̹TNEP#s^Y ߌ[Y!X.FTڦ|Id$a!|#p$]6fD 1M"{a qJ12%`9;K!$V C$XtKmS:OWH f+MN, 0BiZ!tXI\"@"="5yDU74dv]U"U$v#x vvEj{t6㥒Z0Hi6E&Gqnv9,`{ Ȯ{*!8M!U<*_9˯cY%pZqfmXH( )?k2nY|%+L-1EVt =הD6 …nw#X(LjDRPijJ%:%Snug=Lzsl۝н_<Eѫ01‰WFN(d{@2UW^y>Ν%?3gyAlh|aVzA݀hﰠϤA)L=)y8L@.?>??ȇ$Ď˝d_#D!JpaIH A!'4uJD'$uQ^4EXj z Y򉟇ٞ n ߡ=YES-\ ʄ . >͔@H߹ KacK aH(Da,*,HՍ',@@qɇIJL ٽƞS"UN4QNbcT"\ѡvNEBJd!j"@'be&%'V$6DDduSbJb=*&f,]i& nYbJAcc88HA<D4EAdJADĴc )Ey#?#J"^QANp =@cOddH(BhQP!CFMFdP#@<6*|@&jjrvWv4e|k*vꪲjS$$@(!A DjT$RAj;*o>fE2k:"L-E G Jeٳ빢+ ؉-P(Nث~fZCjFyȺTB ܫꖿ*zlRlZl\SN Q@ Dg%BGƒ!dbJ,l, ^l&JD1nuX2Hc dnjLW>ml؊" 4SxagfQ$6mnmm bDJ@-"n*.A`\nSx޲4>QDrDb/-II*-gT[En"OK?yGR ^^,o0V@HoN0 %o/>o#@NdMM_(@@aLj$Ȧ}!@,Zoתto$)NXG6F^QooCJ0[0,@ɣu^o0&_DE' EH mDlX-F<:^WK_4(0~ƄoTq@^ '`DE7p O pqŞ@[/ /:6 6DFЋ=؏=ON$BE !#P4@drJ_nMIr-*(IO\ ʆ:'aֹb$r0V O.WL$m 0Kr2uJ03O 4r93J3eD$rYm W$7sXr)IOG::PȳY\?n37D@9[EϩFsqJI*Fp'DJ >KexD~BG[^n@D$֥cFF{4NPKW%'FOODEmuG4PF{WiDMN7@Ć9GIEHYxXPK-uu6M3mDY-uC#M3T^ChudKuU0E.቞L ^i\d]!WM^]_Ufs'F?d pie Y 5×u  i?dVPCvksL6!41v1mDq TQw|7w7Y 2N`,sX} ͨmB V 7.G~߄ߙ͖m{D G~H}n8!3"8VN_LjxQ oq}zkx{x#y7ieF/ORЊ ѕޯaDk3xcq8w w!qc\Wya79W7yXNDΐ#@ha8O؞kKEyL 8׬{i幓#Eq-ӆ81_cNw78i!ezhzN:3{h^%GDH DQQN_:rB DQRT"Jr$;ag\uf{\g_f u{]{vyEkw4ㄿa^{1gRhNDrȓOK{$޶PdxmB'|/<DUȧwʧK|ͼk '@ti-LZ'[/Rvac4FU=J=NM=S~ǟ61ȶ@p_:%LBM\ayΒ\MiT;A15D*&5-9O엲3}YwN5%ăFj]M̝T`~]}x_u;Q p!4hdbFQ,C`?H 2|$&0 H6`&͂'dB?GRjH3ŸȰ%— c&IӀ J Q}Psֵ{o^{p` 6|qbŋ7vrdɓ)W|sfͣ$]Zuӎ!Bљp$@JWirʃ#JGLhĕQZ+¯9N8 kd8D$;'͐ip-Nh(lٴ ?N0C\KH:Kh <\|% - + O+ "9 ~$NHuC¿B8n -CƉx4B@HJ8LC Kt "#2&Gd `("3:2%IԐ>@B =D 4XL$x.N@"G# $c>( #:2 # RktMH%(N=1?4SS]Wud]f}hj!e5CTۄӣ܃/p%sJW(xݗ~5a$ڑx# QBh܆Iذ6`a\,حʘ;cQmuޙjhPT` l`,窂9ˤW鼤>mǪN)\:#=$̃jMRYF鶛!΋_ș;~6ܸ|"%U_] " ­Z)= m.߁襟PKz?z>?_域ߟ X@ T@>)XA ^9A~!IXB)T YB1 iXC9yCAXD#ITa2 @)RqYE*dKyr<L*$D4HO~GHIJ䡔4ځ"J2JU&?+yJa8O)Pɼ R(?qPDbf)ɠ!$g R r5eȑ.Ǖuƪʔb~2HL$0Lx-A1K!yꂢ JhTldJ KhXӞ` 0, r6np.`@B{X0@DS0qЀ5$8= @k$o)ejo[ ?8 uQ" `ݢ'կu׶, p~M4.1lթp 2< ijyc9@7X84NĄ$qq$` y`liZ!k#;RQTg"2A Y*cD @E)8,U3X|8^EwSJwSW]( (H.mo( wmX%jsFh\GyDH2 &Jt#F1ɗuEdݔD I9X7$4vx]O{.']d!Vҙ`h&ش*F·{dhHwa rl yC¾>=S:-ݬm$o˛Q%&iH&p: :u_oINzoCbG)1 Y?8(!t8繏B#,eg,Gbٓ_O8ZV}C6XFȠ9'H=CM "FaTmH>B#h<..͌dJCjmXbd@'2"Lֈb@\j$o"" ]N "Cv>8fF(' E(I BJpT!p e!°#p/ .b0!]RLJ(Ȑ+ "(n.*k @ ȧ(CNH .Ұ ,Lj, ""GX,BJֺiTJP@";0[PP%!0 S PQ#j B,Ls!M' (mΐI .0N&Ci9E e" #1 ꐶd-T"P/0N"+#.q.;#Mf q (o.b&c8" n&'d.*k^d1q\&2g$K#6M*윉6Q" R**r#,܎:#7R#?R.O# 2,WrQ!XҢRb'Ǥ'Ac M1!%) .[I> 4r6s3iB/G23cC83!1"Bj1-0.6kSPb=%B%E%%1S0.B(E0#2-075b7FM3C|1;"B""6s6mS=sZ)8@ {S'~!23&cG?;8/9A䌑J3T4s ޼TS>iAQ;#.(5b<9_Ds%DٓDK Ē>>Y18#?>>?9l"rq@(yRD EW4cJB-3!4Jt>^T2/:.Par5#DTM( F2+'#"S Bs>$yЄHPHCBG MK6OKq<RbR!ѲL "bnkڊcL{COTUWXBHU1F!8T L~8ګ>M  @(4yf6(2u.`(S.>duL baOPj F%B\+U]U]q)! k5 5 k>pH1J\^,rT.+H(;DY b]۵#:5c=6 ((>WcAvJ"Cr m@ ^Yfl. e12]Vh%Hfvㄪ!l88¡-,/(w>$9dΡxMPa*h 9.Q!sVI(d(jH/ֹFVo;d#&+OĐB\c&"Ur/df+"WJ&Uo"ރ`:B\-3bZ .1 TN` 04) ~A%vQ g9st I!jMd4(ezz!xvps(`VY$0q r*!~wb0W7%몂R)늢0ǒ &bBkE33F/$)x1w W#LAcIo4RpeT}Gwu3"pC\XGt''@0b`"7EP`|5.R"VgS5,X/48%8Xy|/SVɠu.XW 5b_8enbGS 5IX+7h ِ% %\̏Ҍn#I%3"4Y!>#)n!8$.%ȘcÌp8O=Pb6攎5fY#jy]r?tmuard"$;¦.@*0h2M6MnK ~3E>Ez߂#r}k M,BŎ X0T('dFΛ3rzĖKYN"P* 'nu$gO| s~} (8w2e/,Sۢ2 0X m %c_uS2Wn-L, fe59)Z1E]z00 ^i"(XPگDLD&aX `eb"W#[QiF@85 i\kbxK۴hp*80 f/XO۶o;w<4[tEcq۸_xPjx|g'{HZ[ۻ[Ǜۼ[כ۽[盾۾[ۿ\ \#\'+/B0-%  C\{@-˜MF[IU ]kI :% {O#(nڅ\ɗ=򠥥 'd Hʯ|h@\κÜD6k Z\iIuk\KRU \|(ɭma r">GoT~/- ?jT:9O9 V6_;jTlcs+gGA\׃] `]ٗ=f^Yз]ڧ=j ڷoh-nǝe 50םUD$ /(> L#} (1MgmK+'9pJ;'6B:E=KDJCPITM\U_XVPd]f`icoimgrmvqxr|v~y~ԅw13;=79?AHJ[\TVOQgistz|op_a]SOkfuxa}ڕܛ…Ċʔ̙ΝȐТ齶绳䲩ग़ÖŚǞȟɡ̦ΪѮӳն׹ؼھ»ժӧڵ߾ѿk H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M,Gͻ NRУKNp0νËvȫ_Ͼ}k9~QϿQЇh&9) v0(Vh f v` (∼!v,⋇wbrM Y 裐F*鐈$DPl8punŤ* 2'uU`*무7C>oQ̘@k챼5+s:|':fg,C)&oz覫e{"aejh.d/Pv+ 7 +檀Csm29w89)'R( 0{ț6mVf@]qې\[")PGpB9.my`-6;jBkm:p-7Y'}B&{}wN`ɥrkmcv=/Dh[t,ÅtS `'.'KkdZL+ ׿b'N\~^=l i8rr |J( 4[Z@5g0([`EZhRD D||r !oWr>/`U;:0T[P%֌,hLd@@ ]=0aM xKQ+OFX=o&Z!::P'!%8-V1NS+( |dƢ6q"[ZE#e%d|P´:%i䒵d8jꍈL" B `Nu㌈wJ~W$kؒH[1ᡑ̸RR CnrC[(0 i<!ǃ0H*W>(B+Y>4gB!t4fr8lAA pAKkL!`$[p@٨5yě6˄B PxnqYD+ ^jDKȚdQJ+Dz,lHw1;ѓ:ԑ `#kW"x"1F$Ԓ@8ɪȠOZQ{y9_Ε#cgdz*ˆ^-iiQHн̵f lO5ē3RlCx>s6:z1CV+,|Spxu7}?sɂ6O>D`mnbz " yAY VErz78'c=!FmZyt!:L"<m2瑽mfBY >o9=NL?ZzCgŻ\6ODm?"{ϕ _r;=>;?9=?i- G#gwX :^d-l>ߏ큔:W'O }~>|\|埇& :W#}O~V]Vܩ~ĸ.G}D"Fw-=Dqb5Snǃ=>k[}U~k72R~ݱ{}j}@y`g#y3R|`Qug$d%XF9G3)42ƷyXF'8 mBx1zz0R8, T( &w"Ц3 y A&5#;B m5gwGH=P݇K E[kRU6Mxw<8}Zňhowt*QaJx&FAu7xyh1 ыtfu/ 1w!a'"6X(jx"wq%.G_fG!*8NX( S{}1\€hFPzՆP񇍘h!ASo7 |( kr3ѐ%'5X(؎"9,9cRMrQW72Vǃ|8\&Ɂw׶\`G3pxClHTYь!\g&Hsh~#ÏD<'zуU po7ܷ,BO@aVy·!灌O4w|c Q'gw>x)  'Dy)X9y%1 F$?ryΗCceH#Ó+P Qء9x|نҌWtђءSyf t]Q习 *Xz)^b騈r&J  |їuDSq\ؠ6ze @ V @IY>ऎEy\ 9Y 9 9$:j8zhY ѥ1o#D:2XYHڈP#|<q qC pi騧`RKfzRW v܉{Ė\x]2v:iR^'zU)>ZќqED :J $h$z@QwyZ /qG yѨ@JS`ʭ(r:'C/l݅z?Z|* 7e:(Y *K:#[ʒ0*v*۪XZ7h&{5q2ww@+i'xr13¡ _+cˢC@(P~ jR皱4I2x:,^mԾojGA[mQX  -xWc g9^ A!q*hmB$FBj2dpA?}ڄ. ߇ر.vŻ q6ӧ .  ~s2|"{ Pn(&A";uT峾8W Z\"?"VE[U()Ai˧ qY JY0gPc@UI]`65cХvdP㵀.UZ@A&$*Rn^P\[ NJeYJ+rJv3_'N_TVpYS⩢d[ ]ܭk is4'y"Y0 ZÀ `> q ru4aO۶YU7ٝGU}C1>{qމU&^E  eD~m0ޫsO>ZJAH/_~L{7db#77hf4,xS*q@ 4(Z >Q"'-Ze>(G^M44$(!2!H5mJܢRjjS(nETRM>UTU^ŚUV]~VXe͞EVZmݾwkf0,HK]+`T-w*XT3Ρd pI r؜؂tfdڵmƝ[n޽}\p*0r(; @)4K̝hkȀQ:`e>of g7qG*z[ķ#@D0AdA0B 'T?2 "%  x 5XDxಥ@y ?x :, `2J 'B+ IќE 6I(d0L1$L3D3M5d P@1 BE E 1bd )h(0JW B ))P@@-*T(h , Q<$Uy`4B8J"W7E6YeeYg6Zi=Tj!Zm[o7\q%\sE7]ue]w߅7^y祷^{7_}_8`&`F8afa8b'b/8c7c?9dG&dOF9eWfe_9fgfo9gwg:h&hF:ifi:jj:kk;l&lF;mfm߆;n离n;oox'xG>ygy矇>z駧z>{{?|'|G?}g}߇?~秿~?`8@ЀD`@6Ё`%8A VЂ`5AiU8ĕp6 .` UhC04Y RІ7<֥T,B0!B(шazk +abb "$:bX)Um"AhW GD8Mb} 8Vюw#+RG;jx$'ZD[Dd" DM#TȺ& B4I>|z&E @lDe*st;UJZ@4*җE4 s $f^6d=PZj)J dVfMQr"B Lvs-0ςsA?]҇ZJ+$gm4P郭Ӡt >NwVԢbAgL4et R& m‰Tӟ~AOZ](AxQjXiMm+-դ!R0UV5D7EN._kX`Ԭg &!ZݤQRN>DRSB+ %CRӁB9!ZسbZp݂>ˆ,`ZAVT!xդ\ Tb"|XJ33m(F")PYwC"%k")Dr  0@4ž$`SAGQD 5q&uZ6&PCHhkWMr5S 4$"6W.Y. NԱ&2ֹ;2ޫl! 'F1%*yzKw*CAuM׵\g9M+5 S(Cp (A_dy%Ȁ|)Uȕa(8+/HdlCWһI~%W J A8eFw7D=Pa#MtȘ=R< j W櫼 vI! :ʞ5vKM{^  \nt-m[8 #0fI h@MO`fS5IHmDD#KiY|@o{BdMXBh&! nCm0H Bl YĘӐ1;к[*ș ( @-x%țwV *dkޔ*|%v/w9% yWO!aK[*;TAu !]Ѻɣ.hR|"5|QoZJe =D^^<@phw>q|(;9^CDIW@o[CE rWv/U}P,do{[}D,M$Ou (+F^y`D8{^=9VX1Vttd,ƿ V؄$=?M`fk@2)xо苈S==s#w7Q1pM "7*\ :t8/@@zBA#xIB(0&`PT8=B4+!0$%|&$l : ,hCDDTC4h;S+ R>3ܤ $# 36Td))0#ѲCCÁZD Dt ʈįTIJR#'QDx=x;UF ňCpk=YlZ[cE@Eؓĸ$K<ƲMRƧ`mrFȤhƂuL-? <Ł80sˆHt8hNjxǨ0L. V%k3ND1T?*G "Q pt2*NS?|BƭƨHȧGra LBW%MA4(?]ʚd"D'#Es.X 2(|KSf/ҧQӛEr2m%((%;s 3\= } =3+%,Ih&. (/u(GK3 Nt˜ѵ[DNTtXd=HSVZ҃tE;\t*H H0d'Bs0`Y(0,(LZF¼W`WHdC>p؇؈}XR@؍ؚXVp#! >8Ӌ}XtU\8@5>|s}2(!UנQ?@A&B6CFDVEfFvGHIJKLMNOPQ&R6SFTVUfVvWXYZ[\]^_`a&深<@f<8d^bJfjVjknJgmgoFgpXgmntf{gQJH怞~: fYhgmfhpNhmlj&iYpF8imN鉙p钦qp^im鉁ꎁim(j>ꉑjf衦ꋱpnjmjh*g9 f UHNHD6Q@Y<6D`kgUkk:`9v:6;배j;7D8춆®kVrjj&fjxx;xw^p~f6+mmfK8Xj>;vɻgx6imv:pھ܎h^; f^pg8:Fgf*&Y~hJΊorppPpfp6iijmFHj^g~Dn? 7pK5~Ln⦊n&w0r殆qrfQ?r*f.p3s~T8r'򆘅i* 7葞s+2ws4CWfA EfFpN*`8Ѯ;96*p8-*h6jZPh鞃kfpvY~BIKGfwqgT d KPnݦf~wwLPs;_hFuwqhp.u~z.+olvgG4jX* duw6*7z96@%+i Ym}懸񔇈x) {O'2Qum8jNz2OWgHoOHpyxodu8 hFfs@vL{ 퉯@vpx9`*P|{_cg6{mT|LhjVjhm^zm.}p}m/y fwɗ߇؇"ߊҷӧfnwmf_f< f;pu37jF~ɯFv:L#,hZ 2lo@d(1 &d`vFT$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*O̺ǂ![9h( x Ņa e8gS"ܔ ftaù^m1Ȓ'Sl2̚7s3Т)1Xe邧*8+a̡d"i%ہq0^]hys*?e^q KǓ/o<׳o=J[~Ac]hŖ[51[Ay-0EuAC.py!!8"%x")bdzFJV4C [1BA$`P -\AuLh JHdoX,Zy%Yj%]z%agcAph`u A>; CV(A*9JQA-8$A6PI:(J:)Zzd' JDjVR,%1fP%;   b:,J;-Z{-fp$JڎkVJ*D.ۜ= P|5B@4,Jt"ԑ@Cz$. ;0K<1XAvqA;JUB  [Cwb2 !6ݫ',92l1A =4E}4 W'-Q3DϺɩ>6dP "G#/ZDv'3I=7u}7y6Aҝ@~hKtm CYKt.d'DL[*PJ-2D&_$)q <$ީ:뭻: !_E#zKiVZ_BM(8:0E{ﲄɐ D~=k=cI5/!L\1C -L~q nPJ P 2hA bp6/(UB +Ԡ컁V} C(SYA܀DbAeҰ6!s`(!HAx%2N|"ؓD(bA%PR"(1sH豊1)X#x4v#=*r,H A<$"ǁLA|$$#)IR2vl&3I8A$(C)Q<%*SU|%,c)YҲ%.s]򲗾%0)a<&2e2|&4)iRּ&6mr&8)q<':өuӐB-GQXe8!}򳟩| R C0@}?#*щ& C jJPHa (1C<&ESҕ8FG *U|=>=)(pS HyESJԱ0`uO")VM:}:% =YłFh+dXU B1s\ 5 0y'1H|b& *&! *^ L䣌Y!㓰8I1?&PqRv. "q0z%P'h1?#"^終a!b.zρ,+)shݐ'IEIpa{Wrdž: lsJ^I$.]#!hmvZ!v7e;=qGuh\?T,yprґ걓V~d j ݾe'QnkkqntGV a8-𝌢8!]l>7;ʃpN9[ !@:{"gb%Hqw3D!9-`r,MIsFC)II PWtE;yt7 @6, %0~W!H4 RD {ZBPt$_|wo`I|&5ծs( 3GzCY&ڶ tu7$ .2C+d:D鷕 >u\!@UDEPy%+0L =W5n3=_5ıqC1eN_ܭ( *)@ٝ^UD d M\9D WA2)`5C=N0 q va1]1jZ[B@*  deZו`CxB9:ıaMT<=_O`a^V%S->D6Daj^K$+ޡ!=D+lҵ'(5DC$"{,D$D%F4R& 6D.a[C](@'$F8ւ^5U626U7D/  ̭1 I$2D3M#C6d,UI#=D>Z>*dC GbJ(\;#,΢CbEH=.DE^$M?z d#*cO@iC%QDd9K~"[iQ#4v]IƢ#-Σ5&6bNȤ?B@NaK#=T['%D$EzeCddR$$J(A` [U£\JjeDr%>M!eVeR"MN|qQ!\i"\c.nq#SS!Cab,fC\B>~IQLM%KŃeiN'uQj:dCA[)kZ@lI=gJAn.wBCZiCp'[y'ND^12JC-BV'&]C{9wgQAC|A[9CxBz*DE`Cp^[$CGZ9]hWLC!'Q,!dJAhPHf*)1hCg5*ZJ(~h-,)[BH[Q)C&(1UDA{_B|=i (QtJPE9#2@'B$_[5Z-'x*ErTdm@fCL%[]ؕ'pZa@cBjK.*9*ZQjMA!@!X(l*`8$khNd*`PffO.D+cn=76R)QC|Bn!AlHB];"v1ɁkdMh+MV:O<(#QHIFĶN.[j-RA%J0AYz»nǝE*e,Ox,+DlD2 RDiQX@,PHDMmT\i.gԞVD,|d%록,dielCH9N:Zb`R|X.TT"m(B@UTz~#SLV!@6)Tdf-D|BmV!-Z-[mZI)O)bC.Q-e".^ K@B$,h,C6"."8( 0A||/JxBBPD\o.o!4@0,K@NB0pT[:"VO(@67QA] !B!V$ CP/T"!,Je|$0hݩgR0G#<#V@VTh G0C 1_e1dHR`D- '"/2#7#?2$G$O2%W%_2&g&o2'w'2((2))2**2++2,Dz,2-rYY2J.-08$0'23%ĔD3yd02_36Rı6D7tGg93u@:I;G4 .=ME3>>?.3:t2BxLA P=GTD Exd@At2ÀAItA4y@IP2_GGDLh4Ht-נO lEDQ1βZ۸c6LQoC@1 *$p ,0{j!^Q( @cP:KM?jTDI1EL`hHV 3f"KQyǘn  Ib"D'M.@'C) S1w*:2!4;+Z1 3(lD d,2.!]&7C!j-A 5>,D>O3E(hWaUYC:$7:*(hUHɣ\UX鉖,sk`ZgIJ£#lҶ̓ѽȎsϽ΃hpA3'*TЌ]ӞD9SYJh(͗O De<(!A&(`3'^'ChvW(`e(gf.)VN7ǝ Sr Q1 {}1w$"5"HS T-V()f /WNX`6\r&*˟|9O);9!~z#8{ojfkXޮ镂ǚ)AAD=d4 ӝwaA4{OpWO_}^eE@h}5r&폀A8$]i 2BԑkuU䧭v4 "kxN6`;No#`&֐JDCn E( %.Bf&1fn^(CeDAB9-\(iAڕӉhO`nl2VqCFؐ=R $y&O v1LQ>+C" [8v,)zhV EZV" tUUX|4N#sW3P'6xPFH$  7 MH l bGB$D9qr$Z@` d-# %j4Ay -d1E٤rXDhXrVGpD,U NdݕA:P#Lb.PniUf`ҏ,BI 3‹ R,xN\FSGpJ Լ`ulQb`mukl@SR Den(+5h+9:"0==<u4_ ϱ=C狽q4>CR;GO`߮&fZN70B 6toЯ#O:jr'^GB+#Lp(+S֨,k$NUj4E%Tak `j-M`b.#zPUd=bU J"x)SH2yFRHp P!! ~6qn)O@O#mO <" rc:.p@|o2" 1gpbK@anB%p&/P!@!o@ 08n^absb@(D"(Lv#bwq440TFV#(lj6kFg vl[Of}klvej'z#q<)s+)8g '":-X<"^D`2 \!-V&o+ @k"& &tao.%o#(oBWN"`)0KBc9"<.4Ps#^Whs' s(|U#j#B7:H:f0exo/r8pvk%#?|7}eA @ DrruUelgU~D2I"ny%'[1~hoS;W!1]Qa{Ӳ$^#S!ih"?bS3B7D=@T9W;970"*:âBy: Ve  nѦW5.͕O"h3Z##*/bY+"Gv. z$f85bq/:DHs?zCH:⯿ b:%ri197Z!0~8[I j`k@ AQ;eb Ueq8Bx.%Zy嶫Oַ71% 3k9+]Y#,:/%;s9g_T#ĚOOB1!c#`ɗ1")9 %8?:x#W| }>@ $q˹ 3C]Ww小9tz%hƣnq#kA*{)5yYD#ԭ03ؽ) ;w #p/")$oy1¼!?bY~<  |Vz$eU_! @ \%9##p w#bT?BCc<#`y(2y#.ݫ!m3}0pI@K##$g'7b';O+ϡǛ[wҏB7ޑ<`]]%"[@3]sy+0+@ 痵Mn`A""b=~s@!@kGA .á>b1?3V|C%C v5T!R!] T~%x%A(~#%GBIb!kaOw2+ QZ=i=?C>) WxUY/~tz7"\m;#" <K :8Zn 2hdž`ȕ,3>8D-ȬbF(Y(& P('7Y.8(r#z"F4]+BdꑦA2A2M`޽| 8 >8Ō;~ 9ɔ+[9͜QJՋZ/bt-Q':`܂F |@FUAC2,n (|\p3;wʲ;Y΋mI ZOC:)VݴрAadAɤ5P4X!Hg"Hb&b*b.c2+H"rj!B HRdHQr %F 6(LYsGPLA|UA\`AtDAPN!|+RWQR_ApJ`Z\^UD\KgR#IН-Ns$UDJcj kJkx# "HaJ-Y9"TD NȒ [,2JD` D[RʒZQ;zRI]cMDuӹ.[##ti:XgY,B24iA $AD!tk)AJpFoquR6ߌs:s> tЃk!< !XV)2FPO| vb}BV:V Kt՛u+Rz&A1YA'31r`[qActfA :71AcHw|gCO8NYO.S/_\о|O|(DaI69mHkGOT:t vJVBݹи/43Zĩi_[X/c%u-3ҧ ^RhR9D#ʈ!hGP"˝K`A9 Mm9P  ^pnxC]p<(p$fdX@@ 2amA ZF=& H p+Fek I6'& c^1tn2A`« @ E-!HI hp%PFr5#$;̃~Yґr,)R]8+_*F` q #@q`<Vc-d! ȂvemUH Hh1nT #%1brcɸ5*Dʮ;.& A%C"Afk]4 [`O!cr7 #p%cI;AL+Ugu 2z2t0K5{An+qJ mڀu%rk_.H1"7kG{fK?{UDV[TN}wwO;C:Q"XJ^x "`OZOPRVtjbOP,zMq>4.]qH!}le$z!ײ>F^G]r-AP!tt a}(gdcmp9'+SG:%CV7@,q##l7l`&|V gxfyZ" `Hcz TՈH ~#BYQE,' j]?~FsVAKEMs0so?_G(>?cD{AWz QY!|`qt'8yq9Q Q?sp5u[6&g7Y%V:u@Dgl'xu_*Cb12&TXJtǐBAWR0MXj! u!EQ+3I6Z-z=[O$ъ\#QH؂X[Pe7I)q9@rql |>Ox Z[GF(lIwMOOlC¨l`vݶ5k&HFa)͈1:IF1rr\C A禍Kř43D=XPRH{h>@|MA aI.>6 cUL\)UEZ 3J5:ɤP!O ?ȟ=ÑE- "yl()㥜mTE `eYJ[9}8qJf!2Q8JY#p-A䉒#U,?`oʬn%#AfYaaHEPnB8K`b1xE9IҖ#}ͳXZUGK| P*ʷNFRbr!7W7| u+7J9\ ;J7Jȼ;2 !̪D<LJ\zy{\ p-:y5,+50^ @u/3n^i;\M^#Q( Z P' &ۢ匤aW^ ,##aX) ]6@vϘn Y$s#!K] ~>p>NR@+n2~袡$P ZFuCN"yV=E1.] { yN@L![#gi Q?31цY vc܎n֞~yQXrn .7)0-թ-]Vk]u K/ ҕ&N=QL1e3?#JI>, ;Is>|0'¨ b |z1(37AW#Oޫ& WN[R5u_"J:v 6"@,8="b&ao1eph fj\Mnʀ9pY( a/v# OQ3?Rz>_aaIU(Ag]07K`OK}-,&qab|:ϴA,"C%N!ŋg$NC AP$YI)UdK1eΤYM9u灄Q|%ZQI̒RQN} hB HWX:ꀄ PVaplQn0`[ d -\ ޾L䙎7v0$ƑE&]iԩU. adֱeϦ-AڹuaZ"vMub݃w =daL^}('WPкUp! d tGT1x˟Ovl :@8¨>(tA#pB )2ĩ 3p HH8Cq-CxR`8!JÊ!^<;p-@$H"@ G;>|,HpL9IsL24S5(;sM6tss  !X,MpHIbDT HuT* * IF]rK3ԭN?Mm:/AV\su uXb` -v٥F1gK(=M;Rv -b,-<C@9Hr $HҭE Zd \-!q|ڷ:L AAf3xc;cCn̡4ጨd%e qa#z@EW) !(%ۃ'h p$㚷i iPZ1gz물V̺͋KI od|p 7pec+( xr#'١Q" w".J"+y)f tN^zjFh@`w}up˃&'B^Pli֜U3qw}~b}r ?#2BDLAdU2#=q-] b~'<*Zl-o& (X9خ-2 ߁k@fi| 4G? QC$bxĚs\C@ K|!I =!9t{0K ™&r|d>Drd(Wpj|e,gyS֖e0Z[r,f4Yk,#*YssWkY{sxEYЃ&t7Zыft99ZғtsNқt=mκӣ&uMԫfuM= DճuPZ׻(l<v@~bD;ڪfv=f+Nn[J^)>wͼ@eDA=o|[%QȊ0hg2dApbGg"'}G\e%PL gڅ)\ }x%il!G>y+2v\C/ qzl9tSܥy~u+=!67Sshەe~e%ۼOhۍ~w/}MmA.kl#{%o+n,ŞMOA7|x/{OQw7:~CnNz PX&!(yQ@"L @BX݀(($nNUP ~ۙzjv"|W!ro@!,a IIkS?P=X))r ֓.:= ̦(HQX X*)*@@) 4@Ɋ) DY{α!y=@a9ADQW@S 2ttC`,xABz"tWx{$Q@4#4@,620 DC60*h8 ?}1A2 D1@hDC0BVQC t99<.@L|$C0,g×94*lS+"Z7"eDJt#Z~U+ %rŇ/2bBŇ@zaF%`a[t o4ńPhR EPadRP%EzEX( E D&hWp /:Em0ǁD(UAÈ<ņEY4 X-P4 gO6̤EP̊8ƘIT,ltD/"12ZCYEzj${|}l ~,..{lɘ2JØ'B$2[|JBGj`FÙ4 d BEn\lu 8%AOJÊCs G ɚ$*́PJhJܡKvɉʬ<ǧJ ˯#K݌A%hMX9(62;LʃH(Ȃ(0JltP#嘲ЂOA*>։货$,I<ǶP ȶFP5.;(S!1|L,ζpÁp6P'Mt`7ŠHˉv|Z0M@MhLXj-)0}dKT"ݜQ$K1EbiT$<&DāHz<ۑ E˰K<1PQ|:2,2uW0$-CaR9ߔW@S%[4%SǺӰ SMxpI[ 5E2T!ЉPtBSE@Mv9(M,|,C4K-.[Q]A1 L)#&"kau)Fk9yTP@ZPT(ÖŪo}E$(ȱ2\u$X2!$`.FRAXVtNT "2 CJ|8pU4-(C]=YIBuC&ʛ .:X2`&K1&d2FHNUzM q ɿ[Shc8KK; mوPdXRE)K8OVP`=WEYeoJ\Z0Sr5(hGe? b{[cl+ʮ m5JP8̂Zp64R@QY,ܡhǯD\UO۶@\e\R6pVVИܒ]]0cKʊrUK⌛[dL@Y EFbZb: e\3v^Pc6eF ]n v4Ё$&R= DE%dFE aQbO-PTjb*2v]k \ˉYgbjvK^ ;Fp&}ѡ~^Kj3cug謵N`p*Em-fŎںh1_&J 4f )x?t6mJkqx܏иU0KwFe^Tg3fil3!f%3(Ho^ ST`oVlYZpݵS Fپr$p>ŝED{ˈkopȊP\Ȋoܟqnn{^8m9*nYq5LEDlŠG9E.L@/n<<&n'竓XvO蒸^x\jHin_) ~Ȯq?3]$h&T'Yfc(\ܤKG"*NJOYۋ܄xnvsp|  && $wsP>8fp8vb,l&/Oޓ@xV/JKLo?9d]n -8P 6>SEv wí]{'¶_=s ʢf`?xGGA+G+j"K5%aNz|uf, %Qwz/ˇ %Q"akm hAӫy@ _%{rFrzu7r$XPs9D|}Чr^lN|βF%yMO(Zj\G 㕮} PZ2P`BB "b̈" R\%b>R0F)}RZ[*^"H`!F"Mt)ӦNB*u*ժVbͪu+׮^ +v,ٲfϢMVmȁڠGPaUqA=5ta*ˠ"#dUGirF 㢽5VĨr`ç 8zoaB,9YftwFkjHS'Oj ֯cϮ};޿/~<_o+aUw4o=~Rb 5cUe9F+TdUԚS4VV}a[RKjd@ $@=11PCYG"K2٤O]!UUAs F,(U+5@nt\F$4g(j4&|iD'hM@IPT6 $VzJ 'D`a)a$@~BBtBZj@e$uP⚫ګz'%J9zqi:%jA!2@atR @ QF)5 NiVP4F@a@F$**йI9D \p>F$#\'C~$U6k-X t(D/D=կ)P@FDEFUI3쮻<Э.S' U톒c4F 0D @(gFk@+\#3x,k@FTdtQi9DnC%;UFF:DOB}جIյEZm1DA0=F CZ_*Gc@=a*3_㟿A#G6? 2B6(([>V) Ah& F萊l-"WF.#͢FF*`Q@ lWb{=dCJת!8TFǑB$bךsrwr!H48/b#h3:h4&o9[#E@6]oG| Ch1! j FgD]yFCjJ IÐvT[Jp+hycq|HB "PIhc"3\&3FtMC"JY!(?"tY4B4bc<8;c8⤀VeQ*oh0nmM{<")]QXO$/ 2R`Jl5jGCEš]N3ٰa0bq w ",=r;AN܌p3:Um0.7aq )N[dF"G`ZOD!gGVy^I?T ~<}0㤩Wuֹ,@%@ ! R9#t qTdHfeXEl(pO8A Y[a B( @@8o@4@S00@h`aDPaW0\DaLa^aHA <G,J0a]E!@tۭU ,@+HAla~a6!<,dA$@8"U'@TBZ4*22c3:3BcXJ"b4bc6j6rc7zx5~c99c::0 ɐ#;?d@ @.#A*B2dC:Cu $$DZEbdFjF.z< GHdI@M5KEdKKdLJ`\SȰLNdOOB8!PeQQ"%AdR2eS:SBe.eTReUZUbekMeVreWzWleXeYYeZe[[¥ue\e]]%Re^e__%#faa"fb*b2fc:cBfdJdRfeZebffjfrfgzgfhhfiifjjfkkfllfmmfnnfoogp pgqq"gr*r2gs:sBgtJtRguZubgXp'PGlgw~gvgyIzFz@{|g}*$%ĀF'|ie&N}"hh§ dPzZrh,|,d(V"t犮("J'`(hXzʨh^& h§Z{'|ANv i璆E瓢(%䊖v'h6@~&F)|J$鎲iNXi~ʩFA~)| *' h'^GJ)*|)BWH*Zg*ʟ'jA~F*|ji*A ؀ju8jfjFz~"k 'f§Z @Z뤮g6Zkb~ǰ@:k%g h§~ ijk걪kQA~ʁF,|W`"H+J+,`, B&L,& XBFvdžjD*l˺,"E.l>GPŲjQDhUlО+BˮA~RВ,BXBf*A"BMf-**"lFPmZ-ֶ֢z,Ȋm|@mzE\,FhtCBFVn^nDBgb-JFnD .W|.芮AX)g TԢBC.&:+ Ё'*.Z.m:D/Ɯg h'r(@jDD4.x>\/VAD0CnƮC//D/GV$0.2B%H/|ɪB~@"D#oz:Ax00D0|p0D00/'udz(FzqV'"o~"p@bҮs|gC+pD1Cz(h3 "o/ TqDFgFsiJI#P @@.BȴzMtt- t@/4|648 #ܡe~VA;Vhs LG'ւ 8?(]3p^ĝ',uZCh\?vD؏D z~Q,;އܸA[' l33'׼z|R+@2 %8?%T8׺$Ki@,P')kDD7G?;w?6;|rsï ϿׂL>CD-ތ0h0@ 14(gU,TpD#Β3F#p4yeJ+YtfL3iִygN;y)B@Ҥ~6@iRNVzkTvlXcɖ%hJ 7H9cTUN(D X0aQ$܃r[uw,'ձC* :LJ//:A 5;˱'S,E_xpa˙7wztБFe:*ԨSwU+ɗ7=+ RqY&;$ 6  D {$O!oPF4Ih7RֈkIÃ8C@(7RZ3ZjHr0$\&:{%, O.0c4̫2čHlpąl QO,qA"45Gh3"8E΃Th9ӡ:r HQ#JTh ]k)S6CPuHՔ0j!"Q0SP@0]f)ʥJ,.ݖneIBTA)ǽX< f8#K#3IG^ס+Ũ87Jסujס x|iƈuhQ>(C)TV_dbcBK%0c0b#XM ^o^馻)cz%mޚ뮿 P{*zB<0  y;D"aZbcE(w߇1BpwwpW\!9[ߺ'bf{Ҿk[#'!o$_1PXb#(:JvHf%Ot>iw]dDpS|y/\_j'F~ǑD=B@q, l(A<0"`-$(HL!A(3B:Ѓ HFB"#C#䄞IHV(Y#6TG8% %A]YN>-n ~_ ɐ#fW(Cn@hD Vv%G; 8:9."uԣPn&_!&*1rz$A }(rE%G*xU&,Eh 8Ѐ('eоQH 0)%^|+e`N &e*dO!Դ ("'„Ed &NQ%B`0 I7p Y2ptj*Y. D h(CdQ`9RT%>cb&u!~ZO_BLT1[JMb2(馰H:lz* @SPVJU2 J3w[UjUM& {eJjDZ&+Pb!"Z,V6%Q V.di-0l mTڍTӲmgP4 оUDxUt?=jЂ 4,g|xwϴbC>IRWv!@\:&}jjtT,ZM9VqGܩ&|OR@ 0Q"[ǎmy  Zo-ߺ5͑ELֹF }]ր7y_~Rhk#F-6B ^؋X0O2m#m#^A+"^aor jb^!o /*28R"/)$$P@%O) a^Oo%, P o! K#9, 0^R "@@bf˙pS QB֜kA@ j `IkM"@< ," xP!1) @> DK+ "\O+ @q #0P##7$K$O%#ױa ^r  `%6oyH a^Q)b!`q#\&;0)&&R)ڍRϜ@(# J"` R!t1R!f 1)N#1/i'oOb-q RZb>+  ja0K+'pR)@!a$@!xm#|O^pi8+WS+ b0pR* 8oN!9S@9:S::Qb%QE$t9j4#1):2MzR!$юB+Դ! @ު-#r8*4b(/#B?S7#RXRH+6bq2b3>k"qֶ1*)q3u"334/4*^ :1*:t!v±js#sJR IJTJ+$Ӳ36h2Bm4Gk@"; B3%"1o#S)Tt#H9" p)L#4 %.M$S;FST!fSJNF1#E Llr&kOK+PMN#rM#XFM"aT&9?h2JsUWwW{J$4%qk4= B#OSTMj-WV%&5,K5GZ"#23*t!YkA:!IB!@ItU _mBRNBU$ޓ`/t BU+W3Vc7c;#uab\o"MIm"ZL_$ N$3 "$6)V,fkUm3!$,hk+u EPf#Rbk.\ Pbjs#YUBv%R>Dwc.=Vnnnd7BdMv!5pbhObZ6*V!u?M"#f0qCqBr$wQ"[ $&ӈV .W)6b %uBm^AU%gU";ww! qbnyWyY /%:p",t`$tM/*J6"Bbk)% Kuw#ȯ|BXWt7rI~kAtt+T)`U , QלW> ~y#ҩ/*xKyt_" [#㐦",Ym:!o%Q{㷎}a:"`C;KZ Lےz -չ`j1c۬5Y!8)BYs{۷&v7Q0):9% gk$O}WЪW8`wY"NxQW%i㰋R7Y)y㔝m#p]%5 _xaBs{8+Wwkw#\'K[#"{x7}y4Z/ZLbIb[}bY=0y9kY[%◾:Ў ;& \wp2\y·˻˗wm7OO84-8"Ѫ3Y){g[ߜB!omƽg^:%n8%d5zzU| ܿ9\ec1iP3s FKO'¼Y`g grF֓r1ѣEwȳ {&dY%;A ϕe;B\Y;WB?O³]pW@ ܐթӥ [])k77% Փ >I]#$#^'^1YU bq]?Ti\%D`# _٥1!X/ړbm|!t}+v\W.1Sҭ[ ^ )_".7⯞bKOp?K}ŶA&I}-G/}!H~&3;'V'bGg^V{>%{#ʝ&Q8%y+[{|M{Ͼ,@J^ ^! @Vy~.EsBi!uy/q5Oe^@W";ؕ_" ^e+bR=';9B5־l 80Z*,@@ Z$nX:pQF H*d@"*cʜI͛8sɳϊH Uˁ\ʴ)ItJիTJʕQI]uԱA^Rpʝ[uDHdԱD)>Ai`oGF ;~lJJ|Q(A;J|xU⁑j9Yă"_ILp1j$""I]H v$АN Cvi%|N'XSAmËoʓSUm(.Aqb󏵟\ɷ#xucq&hrdWCxqWC|y( FZCu-FPc]e$F`1NUDAVZ!AY@ J.oep[ YO5fI!5!eMRHW0@tEY9RJ4(2m7FaCs4M6MJPJb)79 ?1&D*V6ĨE[4xT-9Pz*DO`%RDQUgiYєۑf=VA@^ 4^-jE٪>r]CYq9A+\c ۜE6$L2P@LUĭk+F&WXh+R۲xXH xH=gH9R-'D#<\=U2,h)Fz]$_L∣hghQ##@:(;!p$y#nbZD 0&vbUg8dU.}8 x׻].Z7a-/N)FyCҧD&:qzQDb-HD#6E{bx^$:"I@~CF"KKUy"rH]'HScS h6_@p ;D 9P!zs`E.'x.!92!K8;9_x>]l &O2#$\^n xSf?Q󋩼fQ9rs \("HErQBĎ!G>Br7!O.Ǒ&|I q'DHI8!>@ɠ:$ϴeS$$]:rQeIP1'EG#ـ0psd*;*N}jM(Ջ5*9]Xծ.\PXM<+Rprdr|9א곦;pD3! MZ&iȼr ]8h2%dPn'ERb %"qhYJZI*B4+`WũC%&#ODzn{vRB>Uˆ,`yۂ`]z׮X Yw;iQoDŐ~w+ҥ/^6X /]`4w60AV.,ȶ*9/bXZQ`^` :r(!-+k ϑ0`޻*نL H$}ʊc-P5? )bt'[PXs*/)HH8 ׂ*n!(8-f2& LDGU(H &PTiՕK" 7!-R8~TYqJgR8B2Z2 Mcrr~S&3foY9Qs f j~mcAgZI5)W 4z.^cFyXR$8G~ P!0e<$znRAH8FZ`'3ev">0y(L'wRw# wL2w M-^7jxz3l5VȧjxeWny1nV7WXWGlZ{yqkCJj3}񇀨n?}p4QS)'gd+܄}~8p7l(tw|+vϤ~4!rԀwQXkef&bs#W0@q  W7Rߘj`Xx&ҋXdh`O.4S t+% &Z3yV$"*hY >cmZiHq[4{c6X JJ2y]ɁII$'-hZ1w!w2!}W4kk%[p:-C;hXD 1 Ĩ _$PdMYZj8{u ci) 1D .Z۰S7zt 0yULk?1KaKj6 'kUۦ "-K!zKvSDM [hU?h)lIHe<`y{2isD j=:;̲*{ y9:H5SÓXL7A)-EY`h L+q A>k _X2dz[DNZ cV|{ě) 4{ȋ,X.3!˽1˚1L+6}thܴ0V?V.k;ƼlI ) ^ X=["PE܍ȜO>a)I R Bj`Qt! `Q " pp Y$ Ϧg 01a-P zz`Oƌ|U|SkO0̽C *3`ת2b`J(A⺙)ZP^Y{bIQ9ܔ$-B9GJecXOi՜5aMA?S .֢GuHDC/ q353=ٔ)Q•ٚ7S#qjI`(>ƅbE<|]gf-ZY xuy8 XHպLJ=#;[ 9صnMVҽʾa9!ٜ=N=-](Z](*\n\F1aݵ`I8m=޹]UTn!5]ӥF:l::A-BHJM( M(oC#a࠰׍] =-zqx$#䙝ӍpK7#ksAw~)/n1^357Q K階sě頮MOnQSqp:dfm ^_R}qC{5|K3^kP*XEfyyMkXQ7!!㫙^óBJBH}H.YUۑBno+~=Q꧞߫n(=&$,ơC,cނf(jx%31q:c/O?9ZK } `oUԎ.nt>>7LHADž2qr!4NˈNչ.mmE*!lG~@ 5UraK?nQzI$ .B 4xx^nYJWh0U[ LUO(?#c6Kd Ѳ #>nIlqį.Me_Mq:.: 0d4A3w0?>qpL@ _jD!) $QF  AG B8QI2B9@.~< Ea 28ـACBIjӕ' yQ |- E+Q\zrQE,jmǬ!m"RgB'͞ 8ɩC゜8'?ةbʵLLIѓ:<92ᓲ3Oؚ+ذ @C4Hk1ʯv@R͟G^zݿ@I̧VH.j22S `DC8` EF9d C :˜@5F(fhqdgBCiʂ;ڈǓ|1Ȅ0 ) 90%JOm ul6,qRDi(YL@r BP<HLr'K!3qD5620`iNNQG%TSOE5UUWeUW_5VYo :jw(l.S1:Th`aS-FMJ}&ab#:Ai(eST$ZF% hʊ 鯧=ie\~Vw֡uK$* ]xh r 6+6kIVg] 66Iz6Ngfo9gwgւW3PXeoNPތ8"rZ`X4'KӴsїzb79+ʚц&i@6z^.mޛa$5x[ߐЪd/W8D{# 8h}qgvo=ww=!o%I _=`3`-Ŗl#@B@CjO(SoGa9tvF)6[ `;=AoAaMjԙ}P0.hVB9d ^GuY Ά7auCЇ=` %a{T(T,RG? @{ {_ PVpdWG8-FsH L?H_հElbX6h_R x#RYζ,faY1bzZ=d׊UP1ǹXge;[ֶŭ@B_n;ܧ%Bj]bml Qnv]v׬xzkֻ͡-yAB欂,iU^bXhSV׿p쪍"Dp{`] W70m+5aw&/M?t=hBЇFthF7яt%=iJWҗt5iNwӟuE=jRԧFuUjVկ!Z.(FCb°v=lGB 4m-swf!9bWז+.RT-;df]s=ye =ozb`b_@̺_ ,@DaZx%ஊuxnn^ μ'NXr xe>s0CP-,KKvTHa#xlQm紵عB^wǕ1͵unp/=F~Ox#jjQ{n]|aF9,ٻ{<=M>?*ڏ+.- :$¼z GpGKr0 X>W$ֈ%Kշ`3|<χ~|T=_4E`LG՟!AmL1 o_Y;h#4?RQQ0,-8c,ԈQ,0 x9A`,FH|A櫅(mR| ) Q*1W*(F:Z8`y2-@A<@S:+Lǡ(Br9BCjb 39 ?@>d:D %-EdFtD)pDpI\D)Ä*dSA4!#`C Ä1DADh@A`F EEE;T D3UDR(pSL%&'=Qzǚ҄Q-./06KD(0 \S<4K5FTC8IU[jөCTUUTUuŮ mR>#*ƊpJ$PJR9UuWUW5TD}aEPeeDL@՞AoQmR$Tn9:;]pwWw'=\-JX2rtAU qu 0U>JVpE\؊]$s=WJY]RTU02U?Uŧ8e =MIIEC 8@XXEYY؎ uIQS(%%Cv-̍ |3z7刱2MZT!Z:ڸ[R[+ZxZZ(IȡW!ZE,tKHLW1ۀҁشSڿީEQe7| :qݕYeA5 l ?6`9n@"nj :7Ճ`|>Kj>z}'GV?vTad\ЂXyRy̯Q8Ց& E ,'`(Pc'p e5u|I3'ndĊ"-$ZZE R?j T%j dbf" gg`%X,XWp~&(ТQhق1/C /0fhjMPh;{ FfCBm_lm `xj n<\L'n)b(∨ n2)f>b уji*P9cai +$;@yEF -l-b؉܋|NQl{ݝZ-ܹR96l+kSQteĞ٠ڑ5FڞN䖝ʬZR > Zm8S]mˈi ,0E*: xjL=zWmZz.pXEŊ ^NNҌQx,U2E*h)`fKxEm}# Wf{ިfno%LD[Z "-ehޑ--E,r*"ճQc(([*-МOFт,߂+2'PXF-H2 *CB#P[ZtCw);;awpJ4튠YM|1 qZ;/sK)tY_SpF#k(Ot|Uw`Tn!#2#io_׈`W#ZƠ?_M" N'hG@Ll`(^ !gs[ވ׃`@P~`w6ŎМһHp?w/bh5GNbvs ψg9;j6$5^h݈)LxZD`vt[k*%؀rʘH7|v?a{z!9g/TyW k e ug|̮-z4H&V!^{͟m@GȏpͯŅL N͂BUQ<ф UGoe0GIDd()pqF'#|'(Gg寅ots~R1dv8R`T 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'PP  QFm逇8 ӬDt@UDDUBD-f 5rҭk.޼z/.l0bC RXRTA+DB,@T-D@T["ONl6ܺw&i p<&>7ʗ3o9t6~x`;Spa"ZrQz"umpF4.nɺ.')bCPDI*ApB$$v1BkW_EQQTg\ tG4k[|t\yDSL\iO(P8E^Ia -G22#F6c3ϋ&dMDI^ET#A O0A: JP={5؉pe"Ma!\)̲o?C8_Iwav6}kAC_E)(Ệf0DfiFِlXĤ@9ʕ(HD:$2$d([q= r.:/ciBx%CK?4DErZKwD@ ?>wƕkH>꯾m~;Bן?mC<"òH' V&ȠT C@\Z!!Lֱ-vA b( 10a iX:]bz8FGDEHDWaDwDX-v Lvֲs DFs4Elq=C  \)"LYz& .mܽ%1g\BRD@ B<܃DH\ʃ ZBYCPHlThC`-8f1 > * : +] 2G) Np_ED}g Yq4DyFLHD.SxDJ)UMe! QKDU 4ҙ9 V:H^.|) RTTG ,B A'b %"pghi. ̀%u*+<p#\@pKd'0YG'%<{!xx&dJB  H(](F!R#,B^V'\ HąRHɗf΢BrNdpޤB0Ds:e&9fzډܰBkI") \IP.D&+p#qh2D LUn)vbDRHD>Șz(,9'BiB`1'$I锒ϒւ(0(`(05c.DΟ6C>f(hB t~n*v*u亩ۃ>*D01BR:ߜN&Ҩ*'I5k MlγlB*oc~*B* fn+R*>ķ>HӇRFҪB(ܪ] 櫾+3+ % ,%DI=G.J! ,a`hF+@Av,ʦlYk.˺`jM냔B$ cƾldCX&2fjK'͠2vDXT%jB-kFk&~*T xVٞ-ڦ-h 텹a\]VZBDebSmDfDQd-f>İ/B$nohP2.AI$Beڞ.ꦮnBDD!KdeR*!2> ( V,>Fd>)DL!6*^^DD:ڢClrZ&JD- $C0EoI!/֯n`FDLa C̀b1DA>JRHKBf_˔FZ lp OH)ZN T0 Œ& G Wp '00-Ls{p-׃؁C&/1F,D(@ /;(@}6_;;+dAd B,(x@DJl{ e;ǻ;%X\!J0Px'¯:}҆G B^cSI4|WY&',<ʧ@J&!!Lm{D+x{)pDK<]ǼEA +G} _$%Ao B[ H{F pass}'y}HS @&=+`=BHRׯnH|DK˽E<+>7?*DWwG|S+D9~QDcԵL@@.8?H7o{O@`0pQ&TP F8_Q"5@#Q2쑃%K> ;hOJ7qԹgO?:hQG&UiSOF:jUWfպkמ%\j"Hgk}4JAeA-9UJٛu/e)90sOHFXh9re˗1gּsgϟA=tiӧerTG@I|cսE$A%ٽ# \ֵƎ8;!t|дM71uxF=~}׿ 5X6 |;!Aʭhp I7z(\m , OţAGYHK#LR%l'R)bD #C(zƁ 13hø~VRnJJ,oLh. 3!1,".:?ʲA2l&=(j5COA UQI-S4H@h(ӄPQў΄1MּM޼3.'T<Z#,DRUWaV[ʕ]k5_%J FmWYk֥8쥉sM]TX .XxbNT_1 w`Xcd1`9:zݐDBXarPDhb%8ё%(nሙN(b꫱Z뭹>rȎ(:HeHh#@wۀB \k.f,/ ;* J{7( 2| cÀZI/QO|1&;r\!ȓBq]IJnݎ] LY{G bu^F=:ﰚsBo_ib b2c)؆%x !sR, AyaH7-~M'H$+KW &JJa4?-t aCda1 .!-P, ɛ@$`DhhCP"D9\ g҃ɐe4јF5v*<ˠHv=BDɖ`D$Q"} iv6!)e@!Ɩjk%1IMnTa`C#G&>Q"|M(S2J2%D-]˥pAz:Le.tf_׌%H"l6xSNzK+XjI4kC*M.xFHJL5A4҉մ")yu>tʅRD #:^JM5'Kl HBK|MqS4by6}QDcR\M5'\йu[OkԂ@2"( ZDo"M )X*jVt&5[WΕAŌ5)hC=(u'LESWǎ&!H(-Fp|.JՎ,(%H^AY%niQZծg 5wpQΗ/W[V!!v#8@<#)/vT{SO.Bл`l=:B@ b%6Q CD]̘ Hh<>E9@g B E6rv#98CoBS,K. &b̋,f(^c ?qw̐7jBֈ 3Q`L}4OЅ6W #hȘnI.H}U'6Vw kdLg.vr{N9fEYec ykVԠᵯ{ No}:+B\tfԶ(K#DXJs(Ϳp !R7D:w0qG4o-Oi)x^rf!΅.u_ _#O+A]uo맍}^RAmwn {K#1O"X|=D~vX@+OD AzS¸C)sPwa{b? C)MdiN1Mw}00~i8r,DJM4~'+K*w>) k0p 0p!0%p)-105p9=A0EpIMQ0UpY]a0epimq0upy}p0 p lCa0 p 0)H p  &p ɰ  ;p ٰ cP 6 p M %Q  1qQ1%qϗ(11;/K=AĪgBMMlRY]1%^qiuqyqj̯qQ" @wVk^QåF `;,c64J@ Q 8/+pq [ r!) !%r")'fd*2#5r##B#A2$)RQ$M$@qP%]+ %i&{q&ur'kcr'2(5a 'r)0Κ2*)i**)[ ++P+޼r,  ˲--2.r...2/r///30s0 0 031s111!32%s2)2-21335s393=3A34Es4I4M4Q35Us5Y5]5a36es6i6m6q37us7y7}738s88839s9993:s:::3;s;;;3s>>>3?s???4@t@ @ @4AtAAA!4B%tB)B-B14C5tC9C=CA4DEtDIDMDQ4EUtEYE]Ea4FetFiFmFq4GutGyG}G4HtHHH4ItIII4JtJJJ4KtKKK4LtLɴLL4MtMٴMM4NtNNN4OtOOO5PuP P P5QuQQQ!5R%uR)R-R15S5uS9S=SA5TEuTITMTQ5UUuUYU]Ua5VeuViVmVq5WuuWyW}W5XuXXX5YuYYY5ZuZZZ5[u[[[5\u\ɵ\S\uJ@.!|Jb@^k0\b-_d ,'A@x`6`C @;F,a1v?hŢQb3(3vdcO\C+ U]HecVO@\#"]6gK#rŪA.Vg3瑴"#vj?s! `&k+E)l)6l m3*Wrn1g! o+*}欆6p,v 摨7rdmx$7sbqYO{UsEW( #1,j!XvtY(1{fKZBum(.FHlowʑ zx&Ǫ !hw 6y%JfB%zw"֬#qv{u$s}RolJ_%N~vW6x{׌y8ƀXg`:]X~iׂk`g/kUW`m tAwAb@ Tximq8uxy}8x8x8x83 !! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 $$$+++333<<*;&A-M:H4Q>*f.i3l6B:E>KDJCPITM\U[Tc]iclfrmvqxr|v~y~؇zS]Okgvb}ڍܔߜ⥛Ċ„ʕ̙ΝȐѣ䭤洬尧鼵꿸ŚÕǞȟɡ̦ΪЮӳ׹׹ھ¼ժӧڵ߾o H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx)˷߿ LÈ j Q#KL˘3k9jLӨS^ͺ B~۸sͻoXdȓ+_μsԯسkν{sR( 3tr@`"˟O?"@I4`A$'U0d9rl-2@h7VhnU4` 8+NrHqH'"(4qxL MEy!pފ?6PnUFH@ QfYR f"TYoG,Xh6UQbF$tNDʃpUb "P砄jDn©C(AArLQ(^o|.覜ve"T**zJhp:bA+xVnXjk|< ꮠ)IPA+Q*yLU@oȡVkU"Q*`"9蚺YL*(o Tkk(%P(P@h[3 纻jVlŗU!-pEo|H1L*:2n)8'4ls_p̱Z9]zjl,q ]7G-hRΠ`DX|,Q %BR΢(a:Kx͕XF"y<[,Z6k0瘺 zgIdty> 4L)Wi6玓XA_sCFy2wO7W;K\v۶UgO+R7Kt^rgGIŮbD=VkWDJ@r? "<S@AJlS\@8M6tz ( NSH4dH{Db|^mGKDՀd BCq3Ub@18΂Q.rKUJViނUiMI yE#1. TYCH4X^L"m0TiUi;ҲEE p*鞑Xg$4QFd茔\[,g9l,H'{萐)AbHmzbdG Idr y\ؔ(Eu<$KTQ1cG'_"N1$I0bI٥r9X6Ej_P[C(=9pBu'=J\ gMPG˃̓RGHG*zvL Hɐ]:IJW%XB$ #ӆdIz*p:A8P}N: ʆCCȝv%Ň`u @fzrHAɗll/A(fdQ)G(EMN9d2ĤF:`C2u:i!DA<1BAcTS5 wٓ*ka *nTk4* #C KW־n'HZ7D;` t+z5nKb>QAB IB:*lV8AoP*P!I0 'sU MVC۲#5kK2]ŬB#  LqZO};O@YSIa)^PgmXf:J<²XVHI7!P0!2-  @c,ނm*fe@Hp_0 `qK+v%dpW^NXəD GE5!5cs,52cftˆ!P[IJ#9 STF/C *悃uX,HD#0/eWz0(p:[~֮V-Q^$8΄28?$ne &-*!ed坐3ϣm|Yw% YYAdәqbȕXp;!bl1E 6"FH"8~ۤs" B!vm" J xJm斀 1 TGDqtf$N:g8WWS"*Ex fS'QD90'G@=`~ hHQ`Wq"!&m =b}cvFTᲊޘOHUHq9(!x"hF-b# 8sqz| tщe=ń ( x:Y+x{T\GaRp,QNUR}q}!m灑h^VuW#XSp("A 6xV"tXk8wq} qӱ}(y(Z{XZ!B)h>E QS VUV-wU"̗mrq1e_! Fq>aA7Lva+XY؇M Ii3s'j sACh~Qx Ati<uKF31ᔮKKX%Й7<' n ),IgzZfPʭ URQq:Ѣ r fZ"w+/k#۳h ^(9eK1PdSB3yj/qGyš`˳, ָu ֺ'Q` {epV/+Kjp9pu"h!KI::+۱[ xeUҬA+[^l[+m" #ٲ+'{]+ p,Km9+XX Q89$3vtyqf$ p@/P0}Y›R~ڽI+[+ٿN!;F$% Vʯ|7E;(KM=G*r ;ڼ-x(}p N'ȻO|%Q x§*(۱ c%R/ .|QJ\zzY5zʡܢeї MV xr5Q| WK>=4 F5rL%q p Lơa_"wqi)*,Lh S ?2ŋ|aL,a1WyWL<ʠёk+,lĶֽ%nٚ6DzK{̕/bsz7Cpb+Ďmb2."ָL8\jÀk/ 7,(ҷ (Jѩp η0{bѻ}LVk1X?՛@+RX1D -F qɼ+عȾ*YĠӕ6}YΡA!ڠbAK,]3Ay7+> /juY( >lw i+~3+ =]=6ss#L}`ѭΈݜN#/ qܢREBf۬JǢ ȅ 'ʺW-+4… zvM(=8Z sX9ۋG !} ɐ"8|+=0>0_! J+ F&.yز!U%v,t+8G~YûvBnN-֪jQOYA aRh ++>ݯx=:l=1ⲡLڡ1VQ ,JU휄 4֍1F Js2OGQpftmE.-Zn.QJBÊO1:VkQݜ\>>,N_-ϾF\t[\E qUGjpVx4ۈѽ[,AlMzȖ/S^ !R FLA;S`= j^#颢"#:G"*B^}+gA/Ծ2wZ)B QNE⶚4<f˵aߋlѾ/4Sgʚ\/F+l6_(3n+8 ,K M?B/!rDM` :AM$ml>_j#w 7l~ z C+[3m '/3un+Č_f9o#~z-iB6?K_j! @ rKB >Q ؐŃ hHFBrTɃH*\d\DRMH ȇ VL4@R65(V]~VXe͞EVZmݾW\uu%F)/!]6$5@聗Xb|UHφojThJ$qEQ sčM;|e셒*Ay]UMO2 V^iǃ%2ـdSM#JcL@S4_~0@$@Dp+i.˘k9sh'{i>PjAz=ch8輫IU*Hz Ґ'%Ҭ)"J@(:P(BJ+&쳪6D) $2EE-0/!jRtjjɇ#t!n($R"2'"ғHUJ4hҖJu2-R1oP$'7j@(̪JaMby`φ O)4hJ˦(G)*aWg_zςl4`&`F8ae ΐ: ~yX_XZ؅V;)cP>IΪlj{$_"\M'VmHԓUȱ򔪑3U#z‡gVH!hS~$՘gfZLnd 9d@h=+o=H듀^oiZX6[e舌~Wme⻡q}mmHW*HPܛHnXa%VMblD!&Ȓeύoc8G: 1ZE t=F@j8bAͼd' D iš&`9i2A^F.ŏ]b-QZה,6ē2$B2I|$ăH oJܑ#2YXB>x!~9Vug89NrӜP I2a9eA,JR"H I"t2ȂD!$aUh )u\̸VA Ҝf)E}OAZE)<_lKTMDj>ĝ,YFAb#Ȍ0CK_JeS E&:gT:UVժJG€z! !W9hjLwJIZFq,.Cׅt[!Eq!Y*9RCx30tKFה O(ĔP+Έ#mE,r~Ldd\Vd YexI dZ)9,§wUȩ[ַ.YHYN+cdIƃ0HN_bד!=H,؊T1#14ט ֭$tWϫt!Z2rŖ2iq|TV$vlG׊܍'BYʲ Ź.`ۊȖf" xO߆և]ٔJKDz B;Z$yؼiGxYa!in[{DZĵ?P+IHfKm]/YI9 ( |FUhKX_z9_;$)ړ/6"v"y\_ +h xÓ( G{վv-9C[mU }KD滙[jgIXp/:*p6iB:|!HKV|  f R[X$Q,{v4Wܣkf+#&H~!zH/uf6YS5 vV~E4UaA꽕`4Wz%ȷ"{l̡$O\5J8;5ÿ8`9,Wy?Y? >軜F5;S 4c6c.A:F۾1kf'С709@BX-n2+(o[2 '!BPк;`8p BO ܛ=Q <2z J_ /Á.ˌuI4*kLM R(08S;6l QW4Dc+ĉ06bC S #^|Zti "lvp #H3PUk Ʈ>˱ ZCS+;T{e8G xU<3w+=O>2Sd%.*)ądȆtH8E& \E=|l.s 4N[H;s&|4 (нa"+ ?Y:9p' esH)?+JDH[,C)q6#Bˇ˸KNTJh6DhKKJHӈĆB[Ȫ ląHƺʧX́@SJS *H$U\" "KǁWTK˥Cd977qM }\  ^JE#kʹδsE /Nt 챘 c< ĞXDMJۮPȮiJ_74Ŧ ]3ˈj,,=LLKHL`,U<Ѱ%?+JMxGԔ%|мD(PHry @4MZPQ+9 Q˴HDw,y# *L!ėLZN3q8--54P6H$e$lr SKrɂ&AP΄Rr Ċ&> D#%Aеy:J#Pɭ`OpծNpdҩROyA`OӾ+= J%:&s ւx[VD`Ovuwu\4{63%)È˅(\I@F1J g-WpV%{ |03D-f= -FeM-TV5,D܊4^BǂToe~Uԁ1r4} yX$9 ` XE[JMVxEڤUZAӃE8O Hժ@*xL *d % Y5,U@TcWcmЛpE<[CYS@9Vz(c)d*sڈ0ۊ`Q\%mWhYQZg="04ZȇY/%u" Х@SԳl?I5Η#  ;]UP4с(,)ŊBmY@$J|7ݤ"F+#^By0%i" Z(W0O6#ҁ=3_وxh`QW}X PKZ7Q&Cc#a^\MQ\U9YRVCz(. ^-@-.)8ӓM^8gҧ([b8@+!nb%ý'j#^ꐼ#Z*paZ<{ +c 4<%=Xym9Ua̒>V~O-e Wea,=zS/]e0{Y|C1^~s\=WDeXmE^91K*hRR/U35A[?.`7i\̤d8fρZ VGu/Zt 0N9ZR2z^W-H! "&=Q16t<>߈hh, E}F-֗L0mƊڬ!R(Ebv۪_A䯜@APF Dv i6k6k<# E\뺶 b(1LvD𰹦j[}o3j: kN0aƞW(2hše%{+΍\$\vc_2]FONE 9dg"e0V!Q +G$kC~CLh9&[*WF2qh]. 1:f?q R;sfoBfF֫^Fw]:=yD#8G¦"Bƻ 1iVB~9AA%,zAV/XZHꖪpd9 B(XVʪ0/8S=UsiOS1iI'nFj`o+=CM1iG~Gq=tnsC1F+O ;2n]1+O]#DFPŞw2fhP"K|Z+ Ԓj&Uh 喰"gdir`_h湶@8L@xGW{ kw*G@NK^I*̯(~%Pnґ| =`DDwr 6㍵i @o!z-Xހ)4fWHI(dȊ?EuI*$M:$QJ9%UZy%U!u'(\6kf^#O gYEy9)isyGoO#BWg㡘M  b!anʦ!Cp){Ql )R9xZ[졹Ӟ]gb %{,*,:lG٠LժZ7 Hz1V`'Zݺ\`Gg ID kض\50g{W0N_sXDLjޒ+C wf 'ǛQuTW+snژ;"\!,+h}4I+4M;tU`, pqd" 4H0z_E{HCe;%(L ,!7@~aaGwb  + ѿ)+޷,ergEE%f @"W q`un9@y~v| 5K?=[=%zi+výR )N.\$@JuD>Aa{@@nC #L og Krg$@,HYI ?aQ3#pPI C dH0wZ)^ELM-ϛ€ JWqNZU&hÎ2DES9nu`Ҩ5n|#%xyD)By `& 0B</?iQ<@q8#$ 5 B*4(  M"?"Kа9:  Py 9617p2Xe{jRp%mHq.$F` GdM P/8$SM|&Al p8r(HC*REf" Fp*L9@ڄnB,|SQ#<0B@fT8JB@-!"1ԕ2gUHUk(2qH03~0#̤*m 3 s0C,8 I.~1c,Īs>1,(ĬI񐓬%3N~2F+ƇR2-s^ml悹f>3Ӭ5Og,9ӹv3*\&3-AІ1)̘ю~4#-I{tA R3MsӞ4tgԦ>5SjG„(bIpYӺֶ5{ ,U-aVo Oc~6-iSYzI* W6-\ @ǭu5A')7}ϙ[0qvL~?8— @.Sw0Hn8C.7&ہ',6򕳼.yHaBz @2s~QET~ {>?:ғ;+;9:SV?8Cu8[W:.vhǻ!B7n77gro;w;:Q.[VIĿ$<#/ Xna 3s>}N22w?=36rc/ik=9g &g>+ SM`m>yϒѽ$?ӯ~ӗD"9QpӿV%Kt?*?Y[ & AGyȟN V`^\OA!""&"."#6#>"$F$N"%V%^"&f&n"'v'~"(("))"**"++",Ƣ,"-֢-".."//"00#11#2&2.#363>#4F4N#5V5^#6f6n#7v7~#88#99#::#;;#<<#=֣=#>>#??#@@$AA$B&B.$C6C>$DFDN$EVE^$FfFn$GvG~$HH$II$JJ$KK$LƤL$M֤M$NN$OO$PP%QQ%R&R.%S6S>%TFTN%UVU^%VfVn%WvW~%XX%YY%ZZ%[[%\ƥ\%]֥]%^^%__%``&aa&b&b.&c6c>&dFdN&eVe^&fffn&gvg~&hh&ii&jj&kk&lƦl&m֦m&nn&oo&pd&q%pq's tB'+sF Lgsfg]u wZw%`v)Awց\u睱 X'~:,u,~N&'qʅ& (.( 0\(qfNbzp8Aw&'&tŋZgRtY (t@ Y NNԁugtp@ށLhqhn@w\xu(O(F' hYA )tH0it:@)tJp@Aw'ꓴBw\(u2juitu€JD&Ʃ(B: G!tgR Z* : tgEZF&t*D +th j>ujptjwfku *OpktzktH*tDBif*h  +)FĨ@2ɩ:jtb,tdBw΀\(u2l DuFg, uځN@wRu}JD,t,rH,*FgFBBl&+.rdA!\l\Xm؆؊mE&A'&DJ+mt%-ؖ-o+t@9J`pH @Bg@H,:-AŊ'ǖũ\ R,8AƩ| m+>noAwYu oD,ln(uNw* nq\B @ $N.Y`nYȦi DB'ކF'EBu>ow^m0/~xJ/ @tZoqh)ĩojD`0/OH0@+doHp^.ӾuN@ڀCg ptgDktX,p6N. nY4.Oz HAwBYu1"oDxmY N@/q.p   8' C tޫѦ @, q%nђ1*G\Jp&1 w'K2p' /l}hB֬HĮ*m LH8 lNTuDH -Ú˪̦29kѪ@ 2w* @߲D2F'2p\ T-}&uwgz3CD\nF,PN8 kgY8393Aw2Yxu4;O*p$g<#p,:i%o#*A-O\.MBϮH/©OstDh4GG-.'Ut2O܁4ë;2KCwǯZgDRu@XGo3['CZG'(_kBBn@Tst'b[gc7V&ȁ &.XX-TrN^C1O4^4 kutui[ko vb2['En[L6xugKJs]1YHL h Glv4\G)kkC'l/v[.mm߶ ˅x_njuҳ*6r[jtsDPOwVp+tDl+awa_+x[gBłGg/ zqq1|k|GZG'|6Zw'tK~K mEjwҀ 8klGCw' S;ӀJǶsD`,9H0fcuwt,L4o6IxGĖQŊKDlm8o与ml5ru@Ǯ7O<8t޴H`a1tj/qĩ5ᖹYyD0unL:O\B|z,@?516?NdNt2kG}upHBwj_N8߆G[:trCrz^\ps@ @+qD d!($zt-p1-KDpqd/wt:[^3E@j ,D{- E)߸,syDd%>;O(dLB~HF̑%SC0\HN8&UiSOF:jUWfպkW_;lYgѦUm[oƕ;n] w-+RJ|Uha, S1,3LS5(vcS9;S= ͍Vh> -CMTEm:rTRaK1TM9OA UQI-SQMUUYmWaUYi[qU]y_ Va-cMVemgVikVmo Wq-sMWumwWy{W}7L]߁ .筄 !X% ,̴9AY^A8bL5"aYi舓q@!}NdPQheQHըd)/\v橩X]DkOT).{Na#P9[oL 4Ѕ^=N<)R#j. ꤾHz95; 3 0"=V펉 nyw"Ct1"rW'@y=\@({x<GY(?"($jwRie_W/0d_("}A!b†U1A~$NAO)#0O8IyFTb ,DM ػ>x@t@BĿ#]""NH0)n@ꘗت0èA!;Xb2Q uF %V1>!E8 :0x$bBG>z#"30ȭ08VpMnrI&g22`SBP54(.#HR%>QHH^$*2!Х"0JZ+ X&&ʜ "Y *{AHh2ݒ4~ LCod1yDSt\#PrԊ3hVe 1Yl3!(_H2((QD}B5Ns!TLb 4}ԟYh@Ö&d)5=(dn#AH^Mu* p![('Kf aRPD!{[ƒ16'(U #l #T(y}$Ч 4!(>Kլ#_T`Q+3r󍖴뮢g&t+IR [XEdbdKzIJ1)"cY%S,=YMգJ2+mli]NT0j׶nU$xG7ué\@} l@U1{ V$cEV|o-n{L$+/~1a 1`r$`0XmO``{X,ab=HX 1q#ⅰ.>.W)OUr"t:͊gxV"ʱUe63 |pmlqݭ &;8,rrӀu*|)@эv]xo 00\b;PB :>{6mkN2JR_DxhYϚT?"iEg`q ?JA lveAt't&k!M0F՘oV(Fe*^RD_8mrԭ&gQdE%!?rlM!͕*%7ITky!tWʱY5yX~\O66E1tB>M42|gU5ޜe7{T>A 8E4ߘU+-Lwk5ϓɰ+Ξx/~!W0E2$(tHr |_Ox,gJ2,^D 0$;@,9x9q-^ev+ߘ]}Z-hO`Ra~!0]aBrT8y`Bz``@o  @|@Ƞbr# LBN Mr,g\ap=Hpfmrbpy @oLd ,/L^ 0 )M8 $g ɰ ͐!y 0qD0H@0q  1q!1%q)-115q9=A1EqIMQ1UqY]($aifYh /=d/XnQ rqa5 F؄ L F1𥉉,&؈<1]Fq+1Y1jau;ʱa0 $Ɠ<A"j$"c#j H_K)g`  l9!nY(9j+h3$OfF@U9)Xyu\" A`A UT(γtuyt7wsUK)"WگWvՂh]~z!a& H-DMZIʧdg"b|o!օmUe:!XZ!d!i+x؍+ + q8j)gZHOƮfmjBA)&n*@/s! Or⳿LBL+Rږ"LЗKD+eR=,r.!!=8n)$)B~;:+>!Ҿb ١{$=7HCǹ^Ah VޛdkI{J "ŢAb֟?=Y1# J$$I)dA,1R0PK T2,0͝<{ 4СD=4T6t@ _,gzP+FJB)]B@0BZ ݢ(iZB8@K ǜx6r F^+Ѯ͜;{ DTETլ=@'ٲ۸[?<̛KԩTp nLjwEQAIYn13< &^H+yNLT@K Db]1ƙy7dMeYD9~~bRE$b-2:m6[K5F\F$u Hp uQKdJ.dFe4 CAdAWeA[eiUQPpC5uA*[g,$BZP~BYP%-=`a-8PXn_Ġc6Pirꖅ&Ey:rEګJ+RFH4f[q>QDBBbPRl.l_ZLQ zB18-Ao @DVHrq nQVZSڒ2fKDLB(N *xּ*׋i= s2?$ T$+q a&H@Qs p (p 8;}ё#F K^Pl vU<|D?1GHMN)ZOF:s[ul2^3F瞏:P.PA!C;zD$CYuyPQlcXyxVޔ>aޔ,(䠑q??BGob+9\5~a^F=W-aPV,0`&1J򇨇< h," r `* x4QC" ‡$6 nPhD-HEX(#"`@h/EWZ܃&ΟԳ)"gJlhuHCNGB^TJ= 80AH)}\̢63Ptz%;Ai6EM=M9#DZ'j*&H&6GM%#B^ bAXRM0TH E-DtH73ғW5>|T g*r'sNn *|B $XoAY%y[J@" {$zPQ hd؟0lB!~ٴV-5hRֺ3UuJ9nN7]u4*RW2`핊EHĦE5[${`ڈ:J YRNb%e x%,fu &x`> 6 CfR`n05!$ E(qʐ@8@T#8x/N *xA9~ "&*UpU]@p`p9' ܅Fp3DG0zyA<1RB a| Ek 5v R71y{5L6$>N@FuCKEwĴ^8MU!}*#H$_pwR `qD' j` `p3Nj"4zweximprH~HI2GP7E{,p pԈ]r fI3@z?V “{TV-Q{48GhH @X?H!i'HOg$^T!R_Ȓ-XjHG.I5i-Ifx(ȀS Pf@p㡋 1_y$Z3 VpzJ7kk< 9uDafU6} #t ;Y) yɘ阒 Dy>AَA LCX}P#t}yl㢌{-eJh)G5'M3G^xD`!vCAɝ v<PGˣ(d< {)QQ6 GTq49z8CqBћRVF8!U^(uA`E131z'+ʢ-/ )? TB Tp`IiE@Zh jT#z!j KAY[3!\Jp8\*5gtQMG^ʗJ&?V qJɨ0 *Jc8>cp3@َpP 7C61_T}1\yzfb tLByjW: !i*sJ{ħI 46z9|YYT:x骮ʮEb(hF #@dz  G Kx[jSP;U*kQ)A6E kQ PH58J@RKiz eڮCKEkG"P3@CQЀ 'vEPaEjs7֪i9vmo۶!Z1$KE۱xKE,*gBARYh'0k2 ;A GA빟 K JpvF+eA-X1qzu1_j|+zk){FӊT98$q@] <ӹ+˾57 ]8p+xgyEPiiz {+VK7Ѽ;!pKoOl[lAU$]NtWLz_=ǽ뽑;uU{V@[ A,CRky[yPy"Wj aA[ҘcU;JH  |6,` ]EwDLȅlȇPl& đĉ9@ @WZ\L^l{NfJ{<(`6VCrL)2^v䂬WM0 aj j.5Ofj(p3@`x=F7bzG0x]@Cm~jʿ1k깷QcM|1z *n*q_;zN{tݲ^ "\Ŋa'£a8֌)eu# 0dz^}U1B=A-٭OYN !i;m9l>!ѽyt#%_'S6(ڸUY9Rz ~Tu ~  noIFPY▵FUCPFW͚{G!r wEt 1Ni W>nM=~ i{ OߕQ'nY ndD? TyuA .dC%NXE5nG!E$YI)Ud@E8B 2|%" HP$@) o!r[El,WCPKdbD(d}=TZxz󨘬$g`Ha1 -`Q<6>~ւ>"Pp"a 74:s>zʇ6@kT @"?*$p"|J$xIX@rIp#r@$#U|&IhM鳛hI\Re/uC1MxWTHa1Z#@d `H^#B*i"^/RQ SJ>@URJ,/)y M '25T&dΉBRehG=Q>ᝲx"&OEb>E h~qIĤ6-G#rI5NmEHQ!P*GJy*DH͔A2*NJ iY#L!=ƒ@X!U,A*P;eTRɴ1kcXFvKx&MPE@W2" lheQq TdT$"gQ@U ZΖ"Xmgy*($W{oՀr {6#E0k,fu YDo7*ٲju#T}$ZN&d5 1&ܝ$AAV*+E+FXp=B HpT!@9 (@`,W%0ˆIl. ^WcGPa8`ID@ NIF<GB#PcΈz%2d ܌> zl Xo4CN!Ŋpb2ZЃ&t }h!Ěh YKi^Ȱ@ΕvrMCZԣ&uM})MjXTYB$Z$GPXC"oBxuX'[fvV-$} Y`IT_ 6p2,d_[fw[Y}e;4VugL}p'\ 쪖|͛wSZoexM~raPH\N;2!+$ HFݬk S-s']KgH{эSpMn* I !Ha'$O!8B ^u]kWz: _sɻuc -F&{Fw'^_\ӈdc|-/ub *Z s  B,B-)j-T9N0 @P-qVBRZ@c&B=C>E C2$YH^q p`"(@)(Ot(DODp@DTLEUd+ U|7B\pD:iE_E`t7R# FvE0Bh[<i#p46BFnFoFp|Y/p4‹9p|GxGy8Cd t#u9cF qG,H,Eڄ:M E iMLNd $!\NN缝NNt܈Eέ\OԈԱcE<Ö%$/lP]ň :IPP{PČЋЍÎ$t2]Q5<; QQКպ /jQ R +0s%N]:ElQ!R,Q#}:mR2-Q4#R5]'R/;S ߔҭS\.eSAq؁S_ZRQ1SB}TH%CM/MT0P:GTN6͞C^RTTTOMUUIEDK QS-N>]U[UiyU^"U`TAU\Vb=]^UXYmZ-Vh}TKT #T>O`-r l*xx(2k-XM;, Iφ`#1_ ]vFXXLw:Q6d ,bY։x*`H=VEpىLYRRBE!! 86,= Y-&,YYYMQ@.ٟƛ5 %Y e*: !#" Z IXO#('Z@e?ZTa&@=a-}BYD8彴h\HܙM]փQB ( Yx ]CqƄX$(ݙ#h@V8>7Dw,?XZ#҅}DM[V&[E*:9Xv7Уݕ]VVhx=-ޅ]؏t__\^=d~08*$ H)hA~>CcmRUpx%,h.?T>2hYhhh>[xŲꆨB"lV㇈f:C"E - !+mZr5[j ?VWP[|n@Πь>َsN= kfp V^ ɣiݎuNf. JA nӛnodf#M}c;߬(ؑܪ5!VnݔX+|jSp(m.{[U ji@c`])86cˡ2.*h۴&>P]@Po)Bg@[ y߭p _jEq qx#b[%cPnSӮj"4c*oipn gRڳjZE;7Ui)tnh.=K 0OtLN"~n6^SWK8}bO햺?œӪ&{A'= *[ot'!cXtp g+rӛ=@"-TsnVc󓿕nsnPm_[P&W[fbPv&WvAeADD1f4D Xdvf]I?AFCDH5dks ]xPV*9iZg_IRA$C`~UQMTA $Aoe tA%l\4!TaFXv$@ŹXڪK.DfG z씌 ALNT'PMPE.k]wc~}’|'Hp'kY$ހ;(DfĮ {Y*rQڴm;Aj"\G4,csܱȧI{)f',8X1&J&dI`1C6QnrstEؗ*zt ⵣM/1TAQ]B*H*Q5ܠծr+_Ui6$`4TLvA)58ebR4ZMG3L)1q|iRw4dOÁ R?wDIP 6G:P T!̪&Ѫ~tJ"j[J jH+Q"7*DeQ֕.wJrM(Ț[uCER@@S.mx)h%M䑪Dm1Fkp̛l_k覺-(& ?&^UJ\h, f(+[yWƙp[%*87H#9!;=YY SHR)q odAbCiĆE~k$x!#Y6FGmHlزs-QˆIs;N/ߛa#栵StFyڕ;,ڄɼ@7pԪ%=FZVXS:׺&\iI'/EN=^יoT ~ҷeOgtE$œG>6D@eBHZ b!ad-|U jDr[ox.@B2B4!`9BtIc=y{YrcT:@X_/BD[̙Ua#Cda mgCVXY S~qrF5 -(Cfqܨ)DhhC+8D&4D&^C)CqZCA u &-4 <QAbGpBT&DB~F\Q"R@b0 ~ @d]ɣ k IV RD )݆sۇy==EI̫WYLr^՝jf(,ĕiimD@ ėB|i(̀llzDBBBȎZD\ @-©Щc@-C8*B@ЀԚ@$2-DBnve‏֟B\,jmB `A T]!E,(T0 ;ʆ,z_ n@28@ƞa0n0Dm<@ՑA,\ nkZ!=@<@GTA(|!`<@I+ld@T/\/fMKjULK$Ay;R "Pmn©Ug&ͪ"0Clϲأ,21+Ž6,3*/&`,΀.4.iI-mie2 _jvlw0/]J-ӬoRr bI^FeHK.LV0SVoΰr1,B@Ma|B1~AK;=a]^Mr1~hѪ$zKC+|i \^(oP600>p LpC@B(-@ĥr,VpC, #++,d.CB h2c)\) 7042IQ3[3ab3ƭ@2ˡ'aoG"1 3q'K/ gL;;DC@1 j5@pJT(M4#/"GaIqG #PFrBwDB`rC:sdA.DOf( 4!&A6 2 ,`lj,,.6Xdp9uCku[K5U[auY CB9  ^iA-p8 ((7-ym1Fp 0Ʈ!_ˀ_ OcGdsB08/PQ'Z1N6,oQ?dIBa$nOW"sm m߄NLʴzt /arOH/DvĿhj[ vXYHOH)2 Ktn(ä?!#o@ԴWyXql/R)H -dBӎZ9AFpcI3Cm 7ɂ+sB `366Ą//GZ]@dZm-mC@-D3T D!3/+$5T73-&p*B(g:@@ZI@P87xP+ăKTx(0AF @#@`"A@pJ!3uDBй#N9$J:?oɁN+H:x1Czb6&F깬F"zqйB(?-۳@g7.H:B@T*H&:яO>W5V#13%B{P5C2\.\Mk{8x⻾ZBi`cZ!BY':Z-l Aj)C\D3 |ɟ|Y8W/˻_!0 @<#J(@A z+(A?N=pn}b== zC{#@,:Wo8bYн @ xgB4}@8@=s}_@;'x}(AH,C79@ 4=hKk7kƗ8fbKrΌSƄ伨N;-Ls aDJˑ7JcT Q!U- j ,CC5"4UaM/m\uݕ^}E<bcKVUf֍%kՈ|$iڽ\S e Bh5 R%mIՋNT!ōLUՋ%4UEM=~:gg؆~%⊭KB(,ޘ9*cv҅X`t6Ţv\k@mveo7;*E|h@wH7 GtLg=4ڶKj[Wj"/"d9>N-Xn6M.nX7v 2ꖿjA+jlfzk+LDT~zߕF " 7SXNUsK:Wi u[9\$$SxyVь)CN6𦘎 E.E<";QUzJe:{.!Vv]Bz <~!I,#'Jh&`EyaCbQ8dBv `DB} VR aĂ#FDRĆ4~- \6)\T u,zZAjɬ|A02zA^Td&æW(A9aÄ!-$)YIK^JP:-q _U6?&^402HfXYFtW ]!7B$̂,=r˂RH .a4[(S`rHFN Z5:&.!fBZNjq$B@hȀ.T"VXyc @ ZP$O81-%ź]CF' i E;FwPRqbCh,oApӤ'գr\ Su"aLd(zM gBԒލDf_ [P +*VJ7PBjlGOUQ4UbX@KFEF:8vW+G4JB+ hUO Y`HMҴN"Z@`!ٶ~˧ VsA&Jh{$$BDr_\U_v 2VdA*G5-f^2Bd@bsU@} _,ByR4N ّv \~ВMrbh Yj/YMX~ɼ2*GgM "Mw2%~D[XJ 0AkX d'?: oQ);RW ZvHXûL#n` #dO4#J Uz?yk:w]$#F">_<_)_y˗P<8Qpyau}<_눳 3YzׯME,} `>:kGt{߄& qDWO%R G8B1+pH)z}3wV3_~Xus=藿ĂWŲ 0P#P'+p }g F?CPGKOSPW[_cPgkosPw{P P  P  P  P ǐ  P א JA[ 3l$A! Qc .nQ11 B$>Bq)([D j]-+] Dmt b`Q3b*$)r1\a(cC[)Ol( k ndA=1mZ?#k?s#US9@E9$* ::m8]M0#Rs<0M"5`@>S@ DcA#̲("ht,ubB@{GIHTzA2Bk 13kKŒ_`&4 $XUa#-o5AI&# $H! /Ts |51BRRF[B [oLIZ[]3 6"] _1W$(#( &AKDTGQ5(@@17@(a#~2('̀cRXc";@T1{4BeR 0BbbB g4,611Vc5"J>o! i B4C1a1ڒ`hѾ0/Sh6((U 3" 81#e˓\qB" hJB]6No#7O45jUj1@.`^hY/" NVJ_dt$sq=rsnC6!V tAW==7xf6j#T1s 4"1{A9ee"NC^A}0u/w'6!n6g0Buw14r-4!+1Bl QB7W H!5T!L(` )DAK"6(V q[oAm)+&p~]}}YB}[-ooW W 2t{Y(.=,:W#j$RMAuBKt}OKtQ#\!xH&1}A7b|#>!svgwyW(QxW1"P3`/B}uZ7BZ"Sёؓo3X T!#5&)wSAj#s~Jmy#+abKU,67ϊo$ohIbnx# Y'IJFW&d8(/buXXi6&(#~ MX nxy}8R1"*=8'X#H7"=c/C=U) |u"v4l@]oal]ښOa `$:'y%^!~䗋b]Y%" 1I?w3 BV2oV]#OcU!@!yXx3BX!#([(-;!0u/BrX1?Z"@}Bl9!(3/a`/tgցq %8oR; [N 25;8}#JQBE"R4E ` 5/dK {4"L.w"~Xu_¿" R<>T!1_=ܵ{X#f#4Ǘ{n@=ǃ{xo=(u$!"Dŗ((\95R\''{6ۛ##Nzǣ(ز{0"ϱ_K<&||%lDmG@3[Be//Ņ `W"1c֔ec#l#."Loa#kqjֻ;%h4eژ|C!+9B,ѻ܌sK&#ڵ#$b(ܲɇ$B}`$% ]]=%ׯDl@K#\1}@Ӆ!¡a':$ta @%~gܣa[eP=)Y( ^ ~zIB15 Z7]Zٹ"Ӄ\wBl}_ 艞3EbLʳwSKp]~:bΣ܏Z!7 `~[K?Yޥ%ZD,Ti#:=(G"4:(A҅ 0"%ʾ#>.\1 ^3>7>w"(@!`:Qw}$]!boEd\, :-9oAnrʊ\!~۶ڭ&#}#T6ܵ}=!ƚ !멟(]7/-/}O%?;#ba3#hUU# 4dHA1&P‡ yHAY3ReF }( $ ,yJF4ʜѥ4.xɳ(z 5y@cnUyy$ӧP3z@ပE5ڳ+D͸tehӪ]{+ViU4WNr5JVMEhJ,po1vIeJ™/ eMӨ5) װc˞Mm/ֻzC-[ȓ+_xsr,1#H"2hcU1Hǡ Dy 52A:3Q }]+M6jѷDqFBR%&9iAѱ_Q(KNc,ӴY LٚLM:v Q&H%! ۖtb'ܿ7q 9[1M=w8*,Qf$2r/m  yP{9EzAg:AAlF kCC` Zk'KKei/!EGdI~gl͂y[f6w9ucny`SX8蕑oXZ@ۼ$&Z' Z0qL*wJ !@':lv B)9?VNPhK>JtwSV8QDi-e)|+qVB4@' RJRhDYzȐG}fM"qې)XU A̯./qL?K;R)HF&3b.>9DI %2JuP#XDVֆOA&A0 .$(:E rx [B0gr&-bL2!?cB?AR@+BAޢrۛ KABI TNvj6 n᫰ͪd3)I7& 3@N?/TgQ#)wKahDI/Nf,.]hj3칲NwR%OJԵ)d0 WPBQE.ߐӤ4OA< *A4 zBy| gIS ւH5! D+Zq4Iĩd Ai4GIDc)g}{L9['Ux2<ധզL\5\cNḧ́ EaV!L$Jo<(u, QCq#p_bABkMܨ(kYhngڢv.Mz=Пv&jzޣD,AH!r˲L>Q *#-ߕ$QE`<Tᤈ(~r8e⬾e?=P" z¾w6+qd5t"f4P'&@y4 IrXЀR  4i1aC2Wl}N)SrJD&'yI]`x"SdƒF d0 lF%o(GȎI6$b`ܫAccԎ}ie%!~ɓSZXNmV3%gm۰!5& 0W&F` 8hyE}$ILFLHq$5ZD{^`8IK<38Ѐ$T5U(x E2PkÆ7pCe36?9dV{κ`ӜjzkFS .OLG:îB5T3ᢉ:#4Eʓ >#ZFHטێ S>\jw 9ߓ{R$A~n\8 [i`]!fWh]N7ֵtn8'Ώ d@h2(ˑWEAD`]u |t0B=0a`~@y N9t;wr6YȘ5uhEP|g p3FيF`Ey(d8~JBe?ppfyV P7f{ILsF9>~Ys=Y A[iO<~N!=A,QYR=%(x"Fy !Xٌ dP b\cM{qQ,R# czI\Ffx+ќ1myNF+Y4A h _{a2$5&!Qѹj7zЗk4.4m-2ad)hSnF A*H1S TX A6 P Pj0@tKd1)*JGpsktkjʶNKqM>epK[=ZS7vڂk-jbt*񷷐EP׵OɘYYk&;{U"n:M[ehkNG8KFV+ۓ !^4Qct[ZSP/kY|gO2{ +pyrJ[uy;п9eY#1ZjX5$sDp ۓ%{*?N23E1)YjHE `x)כTmx"s˼JLNܟwKĦjZ|L3jAG9aQ4a7bOb<iQc%X±o| 5/L=jt=!bm֋)z & $3qđ1ǾŜɞ,A.,DǦsŔe@IbXvǷPi%aȆgdzk$ĺ|<$仸$]1[$݄JQܽ4K^jA̛|Ί v[iѼ?9lk!ƊxXXe~;#ѸæCz kM<$]&}(}A Qhjb f??SǜA2k Mʕ59EY ɌQqQ#4p1$Q`b=d]̱B9OEO;^N8dž@57!AFaE FSE!ቕV Rlymٜ֚ٞhlWţa-2QcIRŘ2x%zpf̷̧]%mGі= ]}ɡ A,N,6<8gʅc/1FkOk+Zܤf9ޖ[7 t3 =mLZ}` =ߕELݷk}%Km i@  ,~XZsjPiĭ!N+QXӱ$xnp6xN٫p=n ǣvF=Yg6O㌝] u]}G5ꢞ%^`XS@{tm/@C=ɴR{.#ʻ9vp+c?Ԯ/nAb=pq-룾p׿QtFHBYmpc@=e忭p \5 / ^^=A>*Nw*q9NzՈfNqBQ߱M/ /;,JkYI:, R?T^ai-澸GT@$%|@E@}'aO Lb.jtm7HVjYѭm?@UccQ=x=ip~ytGRRQ9kPq RX_/1BQ$^|!=ުb!"MDRJ-]SL5męSN=}TPEETRMw2H|R#|H+D> (#$j)aًG^\P#|KG,#\9䀑r#&.(0C*224r@;ej֭][lڵmƝ[n޽}Lc?z(2 H+3lH?3,2)98!{L0~0D'Q$E" :Bm#7 '¦<CW,ÃD!$DBCI@Q =:1K1Fg 9:/9%*FJ#J`9X/边FJr$Ɉ,"Q4 c;LIrO?ʕ =Qe& 2@41e5ʮLJ! RK!TRO?B;;="2F#L`CW0¤ =-.o5k,{YTxkc3]opYx'yFk\[>'mn3~܄pڏMͶIqnRnw$I"=v "GtOvL:D@y4l(^do)ǻk<E"f9"! :en2 ㊐fXomT[48PUGd(B D$|\d(?x*<# C> 8w.T\M@$`\8D_t#~{g}8`#+f8a$yسC @LCY9L$lߣ%j:_ٛW: <@d J#0[{,x:_[4*(ȶ2Ad%|&A;K85@$% *,(ȷR9.,c p34<8l!:,8[P&5@C#`:z::#.[>>R<+ťy0>:Ń $=í2܊2*$jJ΀FF96eb`_`(RԴ })4?%n622щ*>֭bbv7ci8 !>!`Dbe $6C)> &4H:Ϙ˛W՝pdSd:6SFeMVAa] p[V &et_1HSFFb ż 'm"v< [e;lƝ@fRff#gvpq SrFg lEy>~ω}BC (bc2 V I~Fn Iǃ(m`hnrzh@5@HHt6~c/fDix?(`DрyN4ixfQl*jD(.R5AXfE@Љ6Xjc!Cj:iY:0 ߽5X^^IχP1P > J m.`DxQHHB!陨.fn0Zp/ *Fmƈ'EmbmؐJfGn=F0U2I-{Fˆ۰1 ."Y"bavmxF#چfȜN<9F1flC _d Ž 8n9F-!@sg|,I֘7-pD cqqn Ncex&w &У'rT hSnOMN%Ԥ"q8qx1]]j!ۃp(ًQT NڔPDW@D]t ; s>-s+0XQ,pN>fTIT:U7 ĺpI x_AN0 ؂1>j100[vki)"3HDxx-Xh2oh--vM4/*0x>?@~_GgstzBOek'7G{Y`{̴'7GWgwLJȗɧʷ'7GWgwׇؗG}pωe]GW~Bb_EIw~Oik,aW'7\6/`5 'QJ9iAt „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w- `О B03t*֬Zr+ذbǒ-k,ڴjײE+ԨQmIra AķCY)޹.l0Ċ3n182^`2fEM"4`ɪWn5زgӮm;vE*V9`n=swJ+IeioSn:ڷsWF -JT% E|SQ6ɦQnQrt]L C0Q0'L9j\x&ՑR:PjVjz+ǐ*EUP-*0*C,Ò]PtiQUTpP%D2-E%vgQɫ&e/Dpb*džtQQ0D`Q"T42l0 )'.APQ q<m צ<DٻsL./@}4bPP` BT\.D UP\½tO/۫T]I_a<@E0)Q77SIVC|xJBH4Q2>9啃ן^*1HR{A$Q"t^(.Q :qKg9wyK<F"E{CEMƖKT,>}H){=/䀯E }+dD'B+g>L+WD姃DAY'!ӄ=2,{E C(°n (\BlA׭JBuSI rB^, *@-z!R &1"4Z)R0`2PX KBpt y`"5lVE-B_K(R % ҉ol E2r"%4@<*i.K" W<2rC\8ө=(`:$^+ ҵ1ttfv Qrd7)ю`&э" Q|R6oA-%P7K0L/QģpBF)yCQU"Lʢ2Rw4nQ#e& XeH.ǖ@5NR*`լ%u(Q:9*-˥ڵ~ ⹅bl*EOfD֐&P?I`;W@lVWZ5-JCJTRk٥jc+ OnH[d(+B Ś0m[zjEHlP Kζmkrlr5\* WVlWR %ep\BW$U8w'w]Ff7-M0#,N~AX.ğe(9\p(xQ_PwpB &uO"Jh ^dȒhe#%xT`,8e_ ;D˃,9FDpB^q4##Jz"f 5Jabg<'D|ފWx96 (K{o6K7-QU'C^DS1EbRVGeUCX*pBAcBfCu>JVNlz'{DE9Qchi0 ic.KXPN`:B:D$CobD\cwwCN&Pb\~e{~((VqCP#!:IbBB]-ff9$EpM(rjB*j`X>)Fil$ >%DpibG Bav\dbDi"G6DyB`gi gC$g&٨ْ^k†1CjBjKpP~ *IQ e"MЙ"ET)*&'D()*檜|%A˧D~&-|krdYDl>d| vԧVP^i+ͤ+k_

8qՉVT4&xМwouE5wj^8_̨IKX0IS1Mv.jY6>KȰ*]np8Ugls?~pmb-wђy͆YVD-`8 4< ^*UJ8C 'p7v.rIJ?6*SJKHy4eE1Τ)&J03zG$*"R-kAs/;Y{~<Sy-ԣ8_ʤrj qfVtheK'V3Joooo]rҵNgʝ^(VҬml{Ϟȭ&f$9A\U2<[[_4>Zɼ0&5T"2ƵZd,ewZ(jSlԽ}GP;Q}`Hؒ0mheiUZ>TZ "B)Ԙs677cTaLSIP?G@D{tHXj܏bu"yjmgg'EkGf1rbƟ{g[BETR!ݡnNoܪg \UB7jkEZ>帓Ax[ A2K-N4rND7iRtuA$p͇&]\h@Z*5SKEb4ЦH=;O4SHu? j W: ҅Y3XDŽ߱ʦv}Lzy(@z Խw2Ά~aɸs%/GxgOzɈ =#V 43Uiq@r-0M_;g f皍 H*d _ᾳ88RXQV 5CkЉox381B=)'m V B; F(#OT& :WńAv׆Rhwm y>5 leN7q_B˲6+޻:SsS^"knv͏SϤ! j&k|oTB0zy.(fZ拢ljUeN2,ܡ#x %#C Yr^VeεZ0bPIyO}v̇`25r8M"֏Xqz}K@= }, %p F zޛNQ6ffzFw"2N>uktuR}~ŋ{YYݞ$l9_'j,om ! )|gdeZHϋz dzn*}~CoLAYf,r(RR;^]6C uTl`qʹPZ+Wy/ n Bq?3]|?b:_LnєFX90]߬LCzr4j,gFЉ`::y? (X)RfctDo~|e>z&A<; 4ǵ0xx°:sPh8he6i# }k;{>7w{|ifMXBIeLc5vz Ћc_YLM`fh[*Zyu \)ej])ǖW 5[õ<-C |:Xr4˻ϞiOB**((8p9HrvQ倧68'BҚ*S"P3oigq9a(Q'*D+wm؝V-5%3 !:Q7JϘI=;=UKna[q0-9Hک6?XJ s)ONw8yA8(U0I4~29}aoRU {¯;8nT7t+?_tʑ"EwY$pRB%KM!ˤg!.B8A`jO'Qi-ޮD[Ɂo`C_(̍ӏDZ, 2*\[- WQ:{<0p k)8107`6`Ы~Վ~w~W/5cOKe.BE^ 9f3qH57A_7P|{kB5! t>l b=S=zfeL&x}pJ0S#UP5KǝhkaK%N\/ jL7Ry8^I0u;7 lcsnkM2UI1Ŕ^Xcm兹Vs6I&ZBs-0M&Wo,eԥkXd7*7cR՞vN Vjo9qޏ/?vR*$gѩL{5S+HU47wV.=pm da<23|[>vl3/ Dӎ"K=XڽWԡ[X8g-_m2lOcs[a9 KԮz%{5sqoS?wUm7uT24I"򾫛kEи>SWͅI'TQ cL;d*-&N+kFG|zYOAoydEKZ1<R))B2Dg^SG&AZ^luQn0>*v?t'x+kү9uac XZA>ϼ{<}(gPw(|p=j#KIFИJ gZ?ikk,lRxVIoÉ'8֟Lo|3r͉О$8͔C%e'YAuі*wgݘS&AVcُ <.Gs<ޙ_ο| yzʍ` ^ Ӈklb# CHOuKcǛzyr=}#QGF e{__#<]j ;[/{jR[y{ϕ1|u7^'7_?p}?D{gx].#DqdÝI.?f7wE1CNJR,:w4hzzil eX+{宓&VSAVLc8K#i4^ufueCwey).]ߚɣo_r]JA?NӨ7ׯ-/ϕEY՜<Ϥw{w}ǏN.uEC`Wey0A 4ZW(c_~q/ypjh~b2 UHgP*p#I^qc{oPPukk R%yC_lԭ?&ܩb)B{/zWJu: ]/̋±wDk, aQV(|;{酹܁+^eyOK_ѣ|CqiZZ.]QUs_A/ \<{=S OA/_yˍ=y\Tw=RQ-2Q*Xʹxy|Th 2Al"+%(!O6A8۠H Csx^;q"\e8x4Ѻ2 K HLj5]f(EI<1naze'|8l<c+> \0OUJ Z-r>dƖ3ʿ$s 5vPr+x◟6NH |8tc`a=we^"@ d2GbƟ.GW7x?4u22/*xƀU)0ѯJ!ѵc^7zEQ%4v<Obʜ|/\}pn[sYY] #DN&^ۍ'j”P2ڕ IP+?Cw=k|z)őCHk"(JQ`uEΑCR5=],IdA<퓿z!^beVI%?='>8Ѹ5XhJXO3M`Q{zc*nhOpxx<*AK?A$k'8Q{\,˫# ).JȂ!\P{p{ ; ak&w2]tr<;aEC V&q- ,..y򉏗6JZɊyZK[KQ 0}"Ǟ짟p/欄N{O>ȣbpPpMs+#sy4{:rʘ Av<ԡ+7 ?0pQ)g?|'OѿS?S/+[[үvy e8NT_ЅՐN!@Ҹ0gGfXpu6~e?T !|rND+28kc~E]K}zf;N$jf͇Ƀ!p#?Gz4̉W>  [> U' l,þ!Cɸ-P_e%y q!+{wN-z뙣o;[rI.v:f6^)e~1?K,•s ]R,(~S5q+_ܾRXcƌP@y,6le됏@ {C*9z*S9g,C?G}#G?Zrf%>4* @_4+*).v5,GqMP7\ =py 99K 7s?o|M`8}:Nu#BvO;Ls9((LeZ.gDH@^Duh4tcVKk3Qm_kݽݭ,0`<8!<q묔:";.Yt(K UoB vyB'0l;~pcmR4ժQ/z9=`u.%8bNops{fyp()>foSBӌy拟 nЏRݞwdQ!',^оH)fǔbxϼOsO׈E27u@8إrHG}G>BfE  != ^zsyak5=d \%NQzG珟Ïֶf/]WUՈ3l !P1ڢ^|E;ӞjsݾXe4[E˶r@b 80RAUDVT}3+](YXX `i(wCIr}l%s( w| dNϭ|#sL=p"c{I#L19ݸx< 0s)! ) ϓyrBIڨOF8s`Gc[%xw~E Ԃk0YVg[WvwS`YH9L&RЯ"Тs?q{/p{ؠ> ;O#7Sjup4QtYtu]<Ԙ\pPˆˈ4q,ƾ@bq-`_MDș_}yg#}Y)r$c$IdWc&G?|c{>;'x8jf,`l׮^M5F[]Yy>x4!xhv~GB*5HwYF1ft`jcway??O}o ?XOhH2T ;?ധ?B)URۦ^# G§J EeY4/&02<+BMF|۝qRuFW0 |P^PESB򕙦u8a2@Y!d<7뵍Lڣ8n Y < -3@ YWs4aAYqdRD)p׵t2RooOMAJIYƓH,o֣>AEL1^KL#'z! |>\O|7~Ww%1p/-/ۭ$-?HD2E6;BuhȠZP*K `2ycƃnghlx~ǟ|29Xe@5V (1"_\s/]gO]|MŃNr·yE;qfvy7P ad@g`vX'N|#_-fu0ɞw2T+0 !yS!dusR(F9zj9Sˍd%4w8[lOrԎ0@#h`ކ.Ma\NvVc;[sxޘLbY)eiB0?L&cθ !nQ)w!&ut%ZKB* ; Ǔq% ]'Z [Ozb"7Fgy 0GC\E[*'E6t}7?痺OɨȾ#o8Ca;&,S_p4RĻ\nt6\Fj TL\8ҍ緯E{07':# EWfJkH01e7Z`v=lݿ*lT};RQn*^"8UfV2  B0;#jp! KzA^b>'<S[H`Q}^g0 ky "HS ՠlq!eC^G A>(K!Ү{"I&d]՜[\>5x2O)R0,-TKp'[˽@<V[#ZEFaYlCa)rJޖ(t";qE?_|ycugـ;OYx}L<Giw;<-➞|wI>j=`AI B{wܓ.N+*t iW,ceH 0`gwWwJo~P詮ʪ=c.E޵Wj]+|t4qQkftEbL<;?#+ggrAUzU5(`88rs[. ^K__}fP8A k!S)zt(O>InEҠ:pՁ]Kk{_%# ܉< SWA #◱ElYgQ$?4 ^- }ϯT*r^ozn)@$ 66-{\R>:%(${C;TIJE9W)76zr*¹CG-L5,q pjJ؁8M)a4gYg|ww~_|2{ge0|嗽j#d?zOGe0G9b%lo|y; jWt{ ްw{``azEQc(sfzUȗD~7Po Ы<U{~e (ʝ/p_ܟn`JdL{K(.\EAO}1;Ssv67&Li;.țO4!DQW~o:}=N)˼Ѕ$#թ}47". C0RV!9Vxd"GP誫U׋;6suwK-~4D3 94oo^/ ic8Y<`ݵ]X 0 4NJ<v9w)fIȫPFB /^{8sؿ"N  XBZ0SI$]˳4 '[n6\xooET8G&At&BW\ըbÙ0X[VMuŇBroq)w*x/mfOB½m5DSq<gZL' q67;7 'q<>Ȣf1b\?(Yc8Y,CerғipAiQd`8pB9-*'ȲljECb{\snEƱxy/er<[1ԧ>: ]`c# Ϸ[ިmY`?&d0;mCZ/.|k4}?J{tPv2I-T' pf:tPeE 肝w8# Jvz#&{B#K$w5wl̗SaXLX $p̴j2͍VYL>d֟U^~RH04MBpKy&-y8p1X.U(y!H-, > p+F8ISnޙ1>%A !ˍͥf121T=1IB jʸ((2 uOb:$Z n\`HH@LA|r5A d{RT7r6F+jp7Kk&4bds y`@AX SJʊN}[%Ɯ8` `$ \9A0_A`2d=H.gqAXf$aJOiq1pM,zCef' A3l^ Kvяx Iecu.6򺳞1ulSGg;`8͆"%OҙSz/b:C[mĺj̵IOi1-WP/'ꬠϲ($q|>33*$9Ϯ̿s/~qg7#`q)5EW8Ͷ (̒0%m!MD fsA#H]ڑ&gOO^<8F`_>s{l4ɠ1L\ X mSfCtOa3`8?,mܟmJ5JڐKa!'d(AG$1Y1<4/ n\cs%3r u=-@!_'8) 0 1$_<>~ԩƌSxy4Gje@?sr*M8L><ܹWg3TO כzܛr$ sQ݀+3%+`-rm=xǾJϊ _][[zDsxw t d%J#uRi|#;cV pΈ /u%9xmp[ߘ]I,O4uyL^:Wn>:QoCRFPTֱUi whh 8iMbdЀ$6f&#rm2jXDZ_YHʱPU:gT0][=[J'\ Wd뼷-&OVԖM9n7¼\seKۚ]''/|ÿ|3X|ۿٿ#.ίn;W4򐸜E u)lZ>xk{z+ƏiR}"iqqdk@:w~~nnkgccՎ͸=t{ 0:_=f0KFS8 <>weWXE^ I8֐h+.mc_*)5%j`8r'#qp`B:C܋aZ͔HT?1wv}v#d!YQ ȪrK ?7 yOĔoW+SLo^[X}{[|CzwYM8楝t(J>_Ď}:!)[n-2u w' C||a9q^|-1[ᇟ䇞P8_͛o׃D;(}'!hw?}qz?9ۮ]\t2ϭFmNG,7Fͯ5T:^{l3+_noG?6Z[Z^o ȣ+mLPFW)#EۈY2::ۅ%89ɿW._eg8}ُ~cqz{>&2ぷRkm;\XH5U:[SelEZFաLląObR}$i?CQ*~N2EI =l9eCOҭa&:/Uԉ 78L:c3Ay8y ;cqC$.~W`A-!:NZIݩqnLdavöhFٿ~c]\Zyoz"cDM/I UPNP˰\o?t9pE[8|4:[n"mF<_ꬅ国ZM~Lwk!t#ZdP Ql+xIN(LCe?W7߸5~4tzbkV j,>`4pLChj 㱡4Uct%HFawysO>[B~Wj.~~~Tpq(Zufy)u{? 1p8f:nP0 { /Nłya4( ,gN6TLQhx'έ$6bݝl*6B3FZiEh܃ cHL&\ū{u"@ PEqAp?{Y{/}`ai AJ b(2F'Z58L5^Sj*d1T808/PBN@.,?~Qڗ^+N>qy'Μ8}Nt+}ꃏ?m;Fqo0rv! \<&QG,_`xo,/ :d4Tḍ+IAu+`C9͕fQ |8g0kB!yp'# I}w|||1)"+sndꀋ̱ l+~Z6duEJ]{1]]JN[FVylFXWdo{ 9jsw"ȇ8IvUjOQpcQv]*&*%o]9<]{T #a FbklkEkE gT%*D+&$o޻|gu"}9^!q.|V7޻~i89q *3 uS'/xΗɕ7Ɠ>-~w=/a%K/yٵٹ̒rG)T@lLw1\ kJ*vM6 :c{n8o* q$Kr(]^'./xj"p"`WmJ;T'Qtgh0 žTJJLX-8!!p킔tj |`]m5)),ϭUN![2m-44jZn$^;<{kafQIM;L|ǽyߘ1F߾][_*&q9mlxo~g0+gO_+~RqRoۍGW.;^w|w&y+ת~ВȖ@N=󹹅xlҪzCRF*Kr夑Tf L\؞.d8?Ae<Ef UJE)=<8qsK0 Eyw3UoP9KeFhNZxvXVw)^xvϝ\q[6XS-9ݐ<}[X`[}G؃Ggv5K@&pR)PAӗt| Šσ!t2ټqu8֨p\q fm:75?_Yw:{af7o]:_q逮Ts?xzs8Pϟ|,'sE_-^3gͼUkQH5 kR>O:־V&ԌO`厉bxg)A:X\phNr{#$r% oU'4 R( !*"7 "Z4L0? $R_V[z?{ O?K K{Yox72 <Og.ckk'¹{V8s>,-n//5F[o 'cpЖY spԵ*2Ls/'ȖLF Gŭ? GbA) M<~紘Llf )u rI܉D;Uen{KbR6UbܓZnz eFR-ƬҾ Ry<QA(& K&Ah*Jd!E#jyuzܻPկmk +LVxv_2. Bk '7CFWrpwL31?T8K&+W^q,m-ʁ J# #R*ڧT,5  &2Vf}W? 6~0p҂[O$cž?WUqZ"NȀ wH]p(2?,LŜ(M@ɲZ]4 IR{=PC~)|d@C9nnp܅`q`c>ۛ{{{ :\/N8͘mIJ<ĊPk(Mj@Ը7RjY2Sy̹r}4dϮ}/>׸P~{FT`כ@XOz}< <˸ĸTIeZ0\o.zAfLN M{;(NifK)ͪXفY1SUz'|nbQAEbtm!A?uNHnXm*%٢)3.$ǾS|@Sv FgV4Fy~~jtAؐRQtJmM2HCHMd _Q=tɍj.;h%`V=9ԪF#| ]a?{/(|Ruo3g]nͻ[5I3^T&!(,LsI9ئI2;G]#4Kaw;rt@ís[rqK0C䢻8i@{a0eMݤ'3¸!RƪIL}ɚES8@[d1TZu&bv0}ڽqR2s=5;Z'Y3I gl>X*5(& +X5w4(WjpeA&9xPC \\Ϲ#fYulqArt:%婆/--B`YLahPm8R j6iƕ.?ؾ~stqlE7~+O~lJHu(0L(qL|lIxxw)a/`$OQ"s0 2Ϗ'6O83r?ؾ]ew=U̸Cst-+Vw<ABreڨ;mXĹL&W6wpvsD3 0^TfG4|<+c6y&U.) a R4hDx0o.JTz Qɤw0OG8x [,p;[i"G" QeFj9t19 J5  U-m1,QfEųβuw.]Cؑ \ ( 9 HEԳ]:|rj/(C*$Xd<3@YnNI0@14_YD|(+5p,2dI'c>AT"c+ثᦦne9C堼Q- w7[3Je6]e2 @(ЩGɃ` ՈK$_Z4#eL(tvo-A0o8uK53qs\+~PFZ )JhpMRPvJpGд,p@6g \y&!L(tFmJ&%B]߼ &θ?MWg"r7 _Wع\Gq5{rC*nOR">[yʍ^~{Yq8`8C!iDxi>Wʹ86R(tj쏐$~g_? UkbLJL)B/k0= h q+ M:.Y~^ !ru7O&:2G^O)TT1 -TEg^IUN,Hcj$d]c%qG/Xhwɤ/=t234`w5᝭7os_9s-GTt@\lo/=GWN%Bz{;myyEJ3(iڃE/Yuqw9 )1>?`yZ\p ]5_r-ɦd ;-p'8szTގkNCP'D!(ǖCιa%Y~e4B(8Qb^9'q8.,M\)M=ҹΕ*252R圠x!Ο}y7.-CV<'$OJV+ihcO.>ynq8l~[/ܺs,b76~FƐT-h*"( ᷾}XYZUŅG9U-׷1f"J~è>ü 2OJIsHxjR8}!K/_P~=s*8}X wR}>K .]N’X `2T&h¼/"p|`.񪕕sg;W&[O\cRyGq?uYuf Upfk T:pXQazA 3BR-'%./ݗ/ x2VJC1 |} O5ڇD9nʍQ<8q7WB1ƥcLvmw/߼ܳ.o ~ 'ʵB%"DZn~(뷢4Ϩ?d>@[N#KOAx@ {SHAE٠;nura\8Qcfe0l`6p¢j?w2Ղ:p>prY*WvL&ffReLsΣ=sj޺KH!JUq\֟_x7~w1% _5 2un=3>'=ssN\!B7w/Ƒerxƿq;qbS7 40OrQ% C557,ԛ@4 8G-)?z8?t|Ishja:-!r \LGɭ4-$x@>%uE!;NLʦ9[kˍۻϭ/m,8RL5޼q#(z :HTZޝ;APB|lomq8Ǯk%?LZSުf9+W3sýӫ':^KE$3'kku']0QȱkUX]UZZmC\yFAR z4Ř׾0H2`>0M&L㳋}>;!PYhf1FЍ3g&0VxN|O9%@ۃa`@3N^<&gjZ\Mt^Zج-bK1&!]9iꩰ\+7MUW&8YIrы[.BbZwМiq8 ˏ}Bho3eEJ&&p"0LFSIQk5fvrY+{owfg[Fر:TQ CжCB$z'W$LTh' I͑λ-^;a"1BU`c mxNLq$pPnFN,T:17o鄠RK%C fHiW//$ސz5\ѵVsNuP֒8)>n:#Xe ݧ;>XBT6GJX 5d$*}(shU7x8,>ԪgAM} oJc&&SAjlbI[aBJۜhWhy&ؒ%Zp<#SV]8N lv%MP*} o^_Z<ʫK7YFN.47R7DH|).wݪX9Z=lm]ّ2xjgj-?] (0(!snC48VC~ !ZBdd4V@Cf=|?ؖmfi%y2P1 T: BbVځU OÂF@D+{߷q-=8tz*D60P=/xin(dٖMbhy.!PQ~خtL#4 ;sTZᦿnmmyNTS$I21gN74`ZDM n180V| I)9/k1pdXV= 4#*aVomQ6B Xa4@GskAYib[*VӾGZ`"; " I8a$I03[W߸7?鋫%3NjZI Vg;MG?#vQUJުP{Lg@H50O=_h]xcnʵI)1>@pf @Q\%yf57n6l21*|(eqfV֙Rl 4GI`vfR5hgHdJəK,S.n{=x}yܩ75vJ+.g஢ BEO yvڹRɟ64d$ #c1ˆPbG*}jJ!V=Ӝ8TS>D.O3$Ts8-W+3)y\ކlؒæ%N1JŽmbt>AMRF"YM5(w*+^k+8* 4 ~>p)o#411XERHF&xQtrJr݌K;iS!js $0^fqY J0yo+Cg,h1^p2 :唺0]}#8w_}N8}? 1lBhtk?.[8݃T*5j*5]x.7yZW#9Si2K|NNF&3Wdʰ+RJƌWϵʠ;f9k@Ήr]To1Ry)9ϲ<\ֆ$W!9mng;w#&1h4*\$K2IrnʞHTp4fv+3-EV) +Y*WvfIssg؅wiWZ\nS;Vln8oJZEmQܧκӘp"dmx?j5gggWģ/UM`3cwf8M3L|@K} *S{ؔytsRC:QiRw:=@.^ L}¦SsE0S?d2 Q`]l4τgItP0_8 ;iW8ěaK5VН]p1|4֡|B'x&MZuGE ewUb:FxBJ AKҘyU2z0-E%Z*uWI뷻6"z } E':ƂLJm T0y9c7py@t|PD}`b+9Jk<.zL iAS.|:Ju Ȏ,nF4Kd2ꅋo5gf9;xDDska) *Hբc>\az7_FҠ+*v\$S-U>us-FSfj޺TjPݏIqιZss*ܳm;I.0bQ+ 9a& +o1cDI_CHNw2vfsqEØ|qnk~c`vBrJ4<؏IRM~8 _7*`I8r]6\I!ʣi#8W)n\ [iawxX <7w \/J;޾ukyeu OzA؍eK܋:3áﴄ畞 aős07Xj\6:rmV Z"5,,L}AJΫ cy:-4[zmk9>1L^$ <?8ytY&]lMܰ4vaQo| )f1M47)hz@(O&dfE)- xY:ݻw֦c!U@m|cܑ-󃏧 SB]x}gȪ~z ?cfqOnnD\4,_+(RˤTukI;q>V&MQz7ɖ|֒%\l߽wSgܻw¹u|J̶jJgA.d3 {x>DjuJ&;mKs4GNze=&d[/ O CB+bL10(a2i:ۯ^}f}X3jO,(r <! ҿ?UЁͅ  XÏX|~A=0@M{DBz_v:O# g:AuI:M/ y Gi}j^|8U<84?;R&ƉG[+8T/PW&6ǶR_SaKU0A$7 N{gqAsCMƊ^?J(Z&-#0+C;bՕT{Ὕvפ` :SpS{zxQRtX  VPSpyr{εwެC%1F&6yp q1: B60N^!pb.ROVOӮ*8>M!A4MS%?p~(Vt7Ol,п`q:a$X[l`hHdMIv #u(ax~P$yAKAP]gaR޽~RiQz7ren#giy!^F1 +{(&LdaRSR-DNAn|L(a@Drss_jr;ZL)P*6DpPM 'y`k@ [x+6kj1{q>?,Ƿ=+TʮW*VQ̣ǃ3-*;X#M_y2l|¼wןŏ$ q|rpZwKqܰfD1j N M9TPYt>ߌ- UYX|=?#Qݑ4x"˸`?- PNiBq+.$GsEoTGzZc~O쇑\C.mFJa ]yx9&ؘAC_Jp2p4"$)1bBQ,QXbJ(u\lkEOfNH=)Ulz7G-~?ڪj~YNjkYKk-Aō` l,R"r -/L}l"* >3XfV 5C c`JLdE ) a*±RCB!B O65Mw.~?2yN/6z]sb0E4%BzQ?ԑ!L1Ю)Npj-`^uU5{i3?p>CZ6 Q+U{XV(U&(0GI*N[]D|#5)IH!etYLR!~ +oq+ӧd7]iڢ=#hKp  Ned]"qg]R1+Θ:[V4Y ׃$pC0N)l#pr`θE "PLs&YNf 0հS/Q{8e9`X H`Qw '8 0SMBeJ_">@ՏF/4+*4 X3G pў^ȋg-Z Fql>TX%g;T^ZȠ+c:hwFD ᒯANR|OaFt5`6@,1dWZTk]][}hMz7Lvqk2긁W'Nvgw^G;gc5B#G}=JA\N %(塿 6 m[@  > fI46JqX2m8pr z9Zr(i1Cl7ְbF9}іĴ6)6E1(`|X#GxƘ ,~ZCZO D8vaNJYaaoԍ|kZ]KTpEFf'ϭڴ˝=%S5vODqLzC80^Q~C9+''N93z##5NSpŁZ0"-hS3'BZ9rNOZe;JvazxW6|sV.چef) M>K(b,6+E9 F10@`/^'`[gIL6 9~Q?XjCgm&xS  xs3B5D[.LSEV+H%,(~(bCe*=K];]97r 5<#S֌2WjSO>b&\s %?wRTZsFea#\y;*i~Τ݂pd.p4veɖ_|,LFq{:sA֔eS4g-֒ݏ?T]hUT0wܝ"hط6q}y<(yˡOZP)0mG ]AŚ܆Qg <ӕ+/UǓk8O]Y8['yVPEqb@9qK!܅$? J3DX ]&kHs㑚bIۻSWZ=ИiB<ңR.܇ry80D ]ziY_ع{S~,s\Q_?}{&rcOKŐ~bUpQմyF8yi&cKCSmU)cuv8dnO6J I; h[;.9{0Mq l'`ȟR&옓qD |󦰙f6W1W=>bX&3!HWNpV*Qh`Loozwb8H 2JC`umŠV/2A TbW@hj?`}WpV7eZ!$qF )zԐ*(7@Z80IDocDoj+^-l- ̯2|kd]hK0`w~?ƓhP2峳^)yxes/u바*=j"љD?疸Okl7H^zh=`c*oou\JinVaO=U) TQZ;w}N=\*Ho{[Y gpR9VRL0N4Vk'~o=AQiEٴ)tezX5>w|r> ]ɟ-IYo%i`PMxK h+؉uo yڄi=t~an^j1_QFNSB07`~LX$ (>3)M>ihY@W > qQNc+m!e+7RG~ekҫfwT3Cݫ#dI"I< q8Ǔ,!ڸ7 s9#=[olRig`O2mIo߹>-޼Q)=yԂ|\WXۊi\ ..DHe4MCΓzɳ'oI0Wb '$&͵m5[iQO+b4-Kjy./nOuc{ )s99`ZhC;X ŗkWyx<>qR<rRw:lcFp^Rܽ݃,Zz+)l'qg{20xpBe/p_r3pϏ)g*4SFoӭ; 2mL) Z6??u?=7nh;N͜-APw:{Tqvy0e (yJ(p.| OQ'O_9"@jc{۷6w$ ?9?ע0߻zJ5,Ђinyt?8Ʃ3J^g쇞OO}w^~6" 82 Shݽxn[[M&z}=- Ds vw)bM@Z/0B\pTr0I'+cSlMi ۀa1քISdcfr̨՜b~d)@0t:Y0Vm)-Q6 :b}f&ck۝83LD}BWCywzݗ^I%Mx x$y8633J zeeY(*&qǍOR+-=?~tvrjf8ًo݂0I?FXw^D \})ۙ6@"H. 8rtV}R{+]8~o~woR>##$*l ,p:h\y2`cdB pdIhsi!rr ~Oe#LTIP.<# ,)ii]Z`5) @>* fܔ<_/&xܐbOAq:C m%:sL+.FV>2[kF#\#/}qHI !9r@¸; '^~gUOml}&{9s=$120A'CWp7:5yVta7z $D4Prwqy"VTQp.WzkJ( QJ&7")녽oǓGbs{ap2t, {qD+b5,Ք{qp„tz/}7F|whҪ4S B طaa"39y8޻w3?xe q c,͍oszY*,YÑ<`pZN uKt>rEC2WY_~?^z\=7wn=U&+t.x-S1Ӕ52\l/M%o$L}d}z D Ɗ-&}%{]sKQG%`q\!&&GZGiI.(IsFВ˅%,k #x$=]PW0z[xE󵰓NVY. @41iZ;uU Ae KaIǹ 0F6l ]ZDѝ^yO,.T%I&~>I.\=:BK9*{J(\չqc>6ϙ$xknXWC@4†|՚~W/|͠>y3gcD_^̋u ,`O]1VGz mn5Ɣ`n_<޺0TEg K&[:> I&ǩbTZ(u ^T DY$%4HGT!8wVA4۩yx `;L?o _ [(Km-/l, " */b$s+J|j5>ZiU2 ߡY8bCr*8SNR,H2V#8/ۻ{gk<̢G~o@]Rum# ZjcJe/ 7RC ʥ[`#ˏ.ʦin-l3e8˒,Ix%SKT mؘ L4<fS3eVJyo+^_Y^^m̖~:WnxGKG*GWEKL2wWWu6RO<&YHV'\Ҋ wn{o\;7vo;w,ax'> jx@E/*P526kf'M&i7berET{8˵r"r܂h\@D,5 W l%jY, c橌p</EŃ*S r@pR ;:TK"܋Ri2yANA+EUXaZPÅL"c['I(o<-=R_SNPH% Կz]pqyV/EG)GP5WZuϟn9nw sܹwC{mFCuC?tTzz@`@.!6ATxxd A61ɀ\h&@'\1atĠ 5܃v4LVm-`Kõ)q+jt`,]pUSQC&bP n9|›3@`ͻk3 |·kD6Z>&FKnL<4voc~xS-yflfPȱW2[r6Nv$u'M??{̙Jtmךa߾.VK޸ιՆj{jTG{{{lR֛O<>w2#6A( cjoTAy-ta@QSO_]vw9q>w*VnzrZ "2Eo~p_ŸG8Jpo7B W\y7W+Sgfg)Wx>(P: QdhP,pLj!vY*w$WM*-BLB2FԷ GȢ2z3!=}N%dUIXQ Uʃ)d0(mjL;ЎV^ulL)xFsu.S~(N0DapJ1؁*HQH#`&9-|̜RչąG6 %YݸO!O6|m0U(\w0pqC\%i(*M"Lᰛךȣ Aa :H*Z36\BHs !36axl,9á꛾给uos/:OHU`eE|}Ljq2Fa3N S'i8 $2;!edmTזK-nƕ2F!'K33dq0K+Ǘ.dA,lK^k|fV)i]fX~ Ilgw?j;߾tۯ?SFg3%oe $.hXMZJ\?مA8.AQ,I+7PoQ8beh:!7?8m!Wia96uUa@ > "ۋ8Ԇ7h~DZVx#!Q;iT(=pzwbj%,(E@ʮmMlrBC7`NF ^WPiqAJ~F0D:jG]!e`BJx!_DMmQ'.㑹6 g8PpG=t #,($eU۠A&VPLa9H-6iYYhthaN@&&9#螦jLrW߹N6rS3/~k=9)%mMhURkڨ?x_}8nJANi󼌂P@0b]k?FmvymSvtG6 UY-Dehm<ϊq$Y83Oe;8~w_]nLVcǎ/ReYZk?k?3?g-(<>Nj[Wo&w0 4BczQ~ /!@+B HwAcP (ibΙhY.3"y$UJ~9ABr.AaS$ {Y-hj[ OWP,bQ31NZ&оơޥ֞cm}Ə?vr}w0>xT@Tt?BYM 1L_zŃY ^E!d?P>'~3R(hsGl5ց3 S(~`WP%ӎ -)Gʅ)bUwN_4!DWy )lj%!h87`YX2`#uZOf`JK99n!RR ksOSrUl]M8 % OϾD4fǍ.DAn q WcPRjGɭ ]&;A֬ZyYD1D.`ge2e0C): kgbщJ;eQ^tQ=A Z/@aN\}0;@ Q v" r,[ =W "`ACsA>F$n;7ov:m|*杸 6(Iei ~b%lH "ө*Ys#m PMGiQ 9|_'x!7 i F'_ON/Tz̿_k_ӲOHyoFϕeYHy+F5׿()FނheHR +A%5xhDD4,-tQm:x蘈)pDxPOoꈄ a !Rp:͎A19J>ѮdsS 4B( 5 }RxқL蕯(3Nj8AuiP 5aVt]iNcey$S-xЈ#Yd2!.ʀ&@[‚ y4ԋY_4܆!66; gVPiA6 @WeT =[( >x|{j]rٛHe̙gZ4v J%Zpj qd0:S78aFMC-3$3@ rB$E䠀#F j(byp'[38cNg63z)^T]AHUS R1{vvz8€wO8G'Ӳ[yi:MhkoO lX*l}I\* ;{խ[m_Q'%bKP- B8MwDڍ} D7ǡz bc[-a cuc) ,G{}sNLZ/1\X/_pֵaU3X]9rƍ'-ĉӵO6r?Q[qQӺ~Say&(--0Ni6X-ZQ൩G]RFK{reBGSe9n[{$$Mƀ $@9jHD>wt!$l6>+!b F3,t͵#& d?X J|}߿=s$Z"{`O,z/g3 k,fgD'jl@Z7??gGҧh5Eۃ^D$y\gbj5#̨hPX*` [k)()C=3-MZZզ 2?bX:om~-wCڈx GF^|xeٻa0Lࣄ8-w g#`䈷s}"ڹCÅd\y=nNycڸ<}[WAOHBN 5JkMVک4_{ۿj^oBh1tی8@zk\X`$6(m o L]\c^i y׉wO-X{ e3/W৿rU]Mؙ;zV"?~O>#Nj6\$N0䉓rk%c֍^!Xʢ%᝼vr$:#+͡m!٤pZ*]('9!Piޝr Jvڱh&AHĢӢdSGZu(uZF:3E0(`*c0@]EG`Ӏ}F+(P1sc^kwi]LQ33dUϑ륥5K M%%L J5ƾ4UIxAz:) ¨6TPYVjYf#Z]ˏ*X 6;9!\k_c(ckG>>Ly;'LFB __Cy٥'"͍:c"ާy-tzS/L0yI/1K>/})±9c)ʜ+uͩ"6sZ6[G6j 12H'c G2 1GL􀤒B}(zD Oȸ+eBXLz*@c&%2dRY15`Mnޞ[tKm<'llSK^|/s]<?x{&$ FE`H^H*8E* tz ;ڔ*]g2%%Vce(t0OҾ}|k }ćymJ3i%*Mq ~ w}pi|^˃"%_ۿpd}@ XƄ)}⥙n7^1n РQiôkSw2oM1̀A0y늚ȌI-hCs)l319%Id6(QWZHt)ݛ@1g`gTB#-. l f 0]k$rbLx1_# v?MR;9w}0,#х{̹W]dݬ?P`) cbTZ"hmGk<b1vHTS@!q!*ht( 8k _յu6/_k=}oQK6+]*AA(eQ՟~.sHy[W6KA^L:3"ԉ߀)P79 8W_7! uR#(xȼD&a ʲD1 J ԃ!W湰{V-ts5L 4W}#l2-|Y)GfVϮ~}RN9AV F#L097NE/G4CRK5Ue bC(yGgRzA-P+Gizt{~\-A-"FDIw'󈫺>.M݊$]HުѨ?Y!_s?'ˢTJ5_W_Z:@L [;|J,^'ЏҼAIVcUX+-rl6Xɣp@Lࡔ~3*OA"Qx0μG8y@AE^:@FH<{qL<3pDcc!J2Ya =4:[W.r}5%)j3nmRTrh2W W|&>ԣ-vہ`EA^2u8Ot*BH7Ie Nh)"Ԧ`8`m<'pipLe ?_}^񔴕SEы;6<)9_{[Q'5_/σ4"xΌİAf$O<ſY& ʹ[)a @PĈH0B ߸F@wl;: 'q( ) &xC.HmGJ0)Z:"oT%ց*aZT4/S3g!VgN/$~MLPS*œomojգ\ֹ$`e~O?F9Jgf a*#L;"4ш'ڙx 맲83R{ålK<ЅyÁQ|%=3u(|."͹r2^{pÔv|~!7h(Ps LE=c+ˋ)ʀ[/ u_oډÿ(:%{|L QRkɏ|'FT7_ <F>oLm?t5' >S991\FP2E"#lɜSd5F0ݶ>T!D_ =}BpV0`́h \bR!/1o0eH$ұґUWnݺu+SihSҩœ4 ]̦*q3፸vd-l9V'P`i6.f/u wڽ09/ձa)ߎ\}0 q#cŇ+٨QXE-0c CYŢǕ1"Þ}vju6|3gN˯!.1y oJ ?dSVK SO#dz`c;?o#[y\x (#E9(ұ]mglw €nuH< b",T1 ZR]YS*cdq- G^j+s`qaC[! ~wٙtpq:e&I(U#O-4,h> H޾9Ws!=^otZM#/ٮRP&z ۡح< EC \oޞ?q/z{oT08?hܿh;t>۩=7\"p90:#{՟{t @t:??+_yWz P+Rm_gݧ}g=y!lfpEoMngեĤ,&B҂[v_~ = 9a ?@ېH ?50H. P`"+O B腊$ ?`&=瞥6.phz <|([<> 80HWxl1XWx$ *%RnFAiZM)A $'g3bʰAPC:bKԴ8|yK5 A.I%m,45.+Z*5"hg{Ϟz9LaTh$uCW("k&RN}㠃J/07V+S/`8`uzK_ngdv}O4ܫwv8hJvU?vxn$7CJp3ށ O/Z)Rc.A'0 H9Y1\UIo&9s );~] R\5s{1yT_>;Khw ZyQ2ɿ/^>}R AIVRWTuR)eYUeTG٥7^}֦|sH d][yyeޱxmZ9Zw#-?@_ 3 o,,6hb\/A5oQӔr]tꅯ4;v7jMT[4${YbB9{=/BP8bh׻imAr Sdyt|P]fyNpSŭvtQ5`E!tw_($q-!TSyܔ6*NTa^SD>]YگX#j,xuv4}/ N)mfL ϴ˳~ AJ)SKNK+$1FR'LM*_EcW" [J\ I omjhx㽤R´jB 4_k'޻;lw6/bDk4ScO=sgV~+rT2BG;ڕ+CƄuxj\Bu)Z}Д*|㾔),_s@ Ap4ϖ pC@k{p7ŷfq^;x?.O 8DYۻ'i\& -]¸(XCƊ$ n)(9Ɋ1kb2;@eed'ٮ:JgV,(+3Ҩ͋,"6MIsg2 " ̻n ҁwscbtV$SGDJ eF oD!Y#R.0x_MMSk2 (u2ޚ9fl"$yaxg~ۗxg_8Ҝ? 7֯.&У^h/}8rY5Z},.,7ۘ,d'FoS ƨ"4uѼm]2!(_wd~X?];ZZʭsˏCZ)"A7vzlq:,s* &~(ijIa[dHJy I4>רּ*tU#'h2ɳRZ~Pl&*vuB U`{Ty+ov$<1zDlؑט,a -yimA\( rd `Xh Ga8dH-WbLH)TYDiQHbǛf4>ov38S[[ŗǞ駍vC\~Bď~g}:A *0v.r lK > %At 3ld"b_;qd{i <5)Ȧp],U5Ҡ |H< ac^o$ۍ]\\xV*cF…heLOi ߸z`3,('h1# = H-dJj9-I"*E6 fo*o5TzAz*u#ljwu/|2IMRfGX Y D*44Qd)sȪR;B+]Y:t8#ʜ4b!tQkt4z͹ZatRK BLgvYrw^=iK}Lcn!|k-6>z򓟽ϡMR[p] h*i&.$(2- b6z٪5ks'>wů(+0Hۀ12S@#t:vOjP7Z ϣ#u7xɅ_3./FE>dPq =G+^D:UPX(ΧzV C==GМׯÂC{.R4-!7\<8Pz7́T*Qgg>22to8yO֢应n#|#L SuO%Nkc'q'gm _͚8&r{oae1(ެՓ/~ǎtZ}{cnPd bf/8{W+s~c㩧Oՙ٨i}g뵺ŀt4aR R? *w`!en `@"{S!( {'߽WD )!}1P)Fg[%iXU! a.7z v"k-,ikt69(rIL9n,RS$e ch{z5*u697uߵT~="ztB[:"b:^QKdQec A!SQB,l'!.F3LEIVю"tu'׮E.eYO@ `[ہNlF V4cujr@_7dS*u'uv  GN"q7S إPm= 4X|ə,\[%DZWN F-%s׷Gg"9R<}TEQ[;:Ф X8+1XF\]{ܥFIuMǹ-mmH]-fT%24:呷i/MP^ \5m\@"T's7>} C'~ѽ/.U\R*oAD ps-.B0׮\J+Upʅwȋ4/8^8~tYi4ۨe,@we;_s=In=e<4 צ}U)$圅!aŸJ*Y蠏p eL@8υo.'N)lP{_>5㪱tLc3D:nh4g¶LAnV-`&;aV s/=a};/12ҥ o~`Oy:O~3Jqz_zim(h?Y+hN9Z:o>rF +JFVK$Q q'cNm"pxpdm''`qͨ,/l5h3ڻoGO96,/qJ=HPzB0m2qȸHpHoXe[>T# < -PB4åN~6ɽc]H^ޮ"ʞiX+ε릛b^{6IKZS,f:oD;=,ޯ,yWDGfU$)7ow 8 t:N(C0K.|W;ؓ|Syhg}νkb@sQ CXcCڭda[ xJ0r2AVonzZRPi 6A'E.FSq v~O5@SxK{[;[`etRA4q̺m17ӄ8'ijN)J}zYCsǏ֞?wfjՙٹ|_J4dem2G⑓O<_5!Y:L_닋3 㰓Ԁ[Pta^|$nը]ouR:A`I}`qj޹~OgC(S7y$$+ ^SR%\29# TS,[m2L͆0:햂EdC9ʗ s_J6T1Z*Ln{مO}ӌR)?Tpȫ9.8y2/P 8r3[R>krIH˳3kݏ?st3kJC7q3&I;>5{vcq"b2p8-qs>Zs[y*vsu,o82 v@n7LGWCp R#_0+>lKZۋtʁ6ed8w='*gx1ur-x+XDcm N~fl,]0eZBḳ6|i$bn8}dq-,7z걋x흹fg=<ѣ+aK(iG0p2CaOVB?=M7o.4›Ak"AX(~|G#i>| -mp$p Q`v?qߎ83cd27Ǜ| =d(^ ȕ)*kßiS;9ǩMՁ}oӯm\;b%a;M8oN)4xD =v8\ETpf@\&u lg6( &E)u?Ңe9_<_5z.`[jqv℅N@ k#o}'qgF$bfsM:mG{sK'y/AY؏ol,_LוW,lF{y5WZ$<C`xaKACE4dw`NƁYу7mw:ykS&DH0: eypx':GMΙHd]3 簕;6\Vgk0wl6(\@`ivsL\Cj@}{;{<>Bc%-As#+@h#Sw _V?WJǠ1Wᵢ P*Of- %TEѨN6 <:>pfDP4L?Pb1f@ !HP֐Яzr [k?̶|R@Χz@i4}oG DQ B7èF L/ _ ł%: ".Cip2*PQCfj1iփH8FaC3$Ac;-V1ugwk|i՘i-SҪ=x;Ʀ+UgG|Paa%FIDAT( ZQ z 7n\rvR `#`3:58@A!.dFCAz8pkH ޗE+eHxec\(Vc)O)R‹Ȋ ~Gag 3ofސ6:r!HC^ϔ Dh3oL, 민_U`jxIĦIvXk5ijܪh6IE#*K2DFBk EPU{ Sm7ASOo?Tw&þ)(AD9t@8!%Q;qۼu{T@b2AC81ĺTj ~ (PЀ3 0=,A=s<[KPzALFNX [OwpC{gtjyđd p)O#ap#'p"p.8N~ji>C֣_b6 9DeFinc?٥$Į,nFiw.0[]AQ"˜0cVVZJRLFk9gNO0mY# \1SO[SH"^Ճ. ł˔.dߝ"QDq# kanר C jC N "xUk@@7JfJ`"zB*x1,;d0HucۮxiZ{xH'A-nם ))$TV< ` 0 $I `:cD-@jJ [D90<+ 2XIC"@tz5ܭ^FuUcP ϊK""Qה˳F%2*ԇ0 ~'T{_Ԗ?Q|l{IY-/}ǟ{[Cs_؏+㖺/T,p" yGa|ˀJP0X=h9oڊo"p-y4,@pu#cXA%p@PI5D 7 h֕ m5ߪs;^<~0J />9,TB-.΍^*J*@[*ci@(8E;{r8E emECQV+$=|tŤòLL4Ϡ4+-zֵ j`F]cpqU]Z,\I;d}42Ƭ,h8]~ ?lJzsw\yLb]͏ިhpj xPv@xp yC xop.!  z"5ɘalj+J'RM7<=R"4I*BCI'¬ ĕ=*TH'k.A]i8( ޗE~K)l4IdU[Y@s~$Xz^ؿ,j~AJڵV'ҮWVoe l=tG"Js۟VV1|sذ," WAx8"%/e4g,ٮYamR[o߸ GlyDh9knm@D3`&7^^zbA!%5gc0{9A [5 Bt|sAy @$ KVi+QYL]#" #د*2Ձ <wC7<,݅ y5CVceQ:,4-BL.q5ijC PIYݽ?թqT}wb8\$¹vGʛ<}HS@bNFcYjp`#Z5)K8?+΍޾2#O>{Oz7^Ruۭc"Kg߾Pf4!N>zOQw֯h^Y9rMU䎀`έ̜ E4AT4*bǝX;`s' 9 F 7rR`!I@p`'|+8 EP0um9#BQ ga |DM6deVA- A35l,u+Koڇ,;(;l RLz)p0a=Cڝ[4\PYzaGa6 4@yU5Fܗ$+ ($/uGq#䳍'(D|ԫg׿/tmXYZ8ӿJ+E[;/\S;HN\gfy*Ԓ[ j#I1fֈ˼8t1"D:!F?avp ADC-Z P0 ;uvBAQ9W@,DaAs-i<͇ B l3imnl66z$ 0 N{4^PO}`<CF`E/Pge ;k}n'$-@ް/I"h8΋eֻ3@PJaTry5[J0өzj߹recw{w#`G 1Htn1.8f]'qʉ1$!"@[Hp 88 Pr)u)Cn,'lIJpGJs"VRͶ|A'lJw}]XQ$Q1.U{<8 Hw8H h2x/wEA4G𽇀Ű@ GCzhĢn՛͝~J{س#p=~"gH>Ⳍvb *񹐔^lSe]}^ SPAz uc+Y[`)߰8x4tЌF9[bT25S`?H ca0e#E ! &d&:E"p̝a؀QF'ؑ5(?<wqk!"B m#řS/|zn2vnwK駫/{B_ 새&wv:5w w퇬ɇ,D `9D!x\5gVQsJcE,ͮ=s%s)⨮ybf$4yٗHb !"GY$ggZKKPk"gYh6(r`eՠ( ߾H*G|J@AprKU#GCcg&]* /DqJGg"E!IBVKPPCqo{n%Sɐ1}PgҤHYtf-}ޠz| ;桘3FS0}b!GQZ((AJJr4 D("WqHZo#pezsTJRi݉VFyFDRSIIXۺ9 דfcbM VI,S.1WkvWںy=7/#ƝHxj.0vTAg J{( ~Т!z -?N;vϗ= -T\[r<`'Ֆ%ZT)qytyA"OE6 bF8l*'{_g¦z OZ\Tݞ~ŏˠ2 j=^MjT8h)B ~Fĩ[[*aK hRB4 :MRfI(ZUo7k9wi@/uJ Źl+kՓQc58\mfy,V! !e8u҇)`Ҭ5QsKV{E9[o%ڍ0, !a4gI/&8h[bti`gߪ o5{.8ա껇ٟѱKԲefJDuShpAޗBH9|`@E}+5,J)WT$uV—MT![m8X|z@@NOvEF9aokg:]h45Fbq+^iF"{h 3$`Mr3"Ryi )}ֽ: V/z5 RLDaҜ,CfsA 6!$|4F#UñNGZҭ CIRk3t]"PkYժ]fwS02XGpj7{m(gm8{o u.~LcXc?߄ҿ/'atV_z6.B$/P;$?za4w(-( j0Q<'\+goM2&tD$d.U^}@ZiP6wǃA-I!cQyQ6Bhm E- 0h[\Xi= `4XZ9DG~˜ak@G4&D7Tie2q000b/q:|!,G&K(I xli׻ZZS: SHb(`,d8ygvfai и "X!P- } ik9 )(ط~hZ<, +|WEa+q/oJ?J{WߣZ|6/(-mn@ ׯd V5>/>fq"R iA(k!"鴈v0GmFBw =Z%A<{ 0#kB#efEY6Y@E<`\) e4Al-JCh}왏V=P @EtZN 7 BLFX1%"f4l^=iz;.Xgqc˷οK=HLgtFL),MG4ZؙGDL{m H֙w&A6wuxW]?t*4bA D[oڿ-.'SNN3]t`]ic\(Oxm0 xmƘhd%-e(^ cL)2Ɩlc@ǩ;Mcl;vW`81Yޟ nȹijjzB`ޚڥuDmfc|h~a;? j ]{@zU*T$A"Lԣ1bьiO0OMC(ۻM](n\ޫ_bk_?ǂh0|կBۙIå$ڭU|:ƻ Oztna sϘAQkCϝȪ&?f:w-!z"H5Ѣ}H Td{{%?ըÌ;k(+1\թ{T)O=Y[F82/!K.Hb-VO0SP؂$c0`>A ְɻ_k(mln )AΆ3^o  'EfD 6qY]N0D`l8q@KO~HNP8Ak8+AG=Qh4ư@@#W|z+ג^_o]Oys`WM]<Mci I0PJ x<ܷVFq {gt1h.W߾u@Qϳ&!B(hg7=~*7 "yv=k xN콀~օ} }M8@З`8;'z{1SԂ$FZ9 P!EY-K֭ƃ]ux%^/= B#4@հGVyqbgz\?;Ľw'iF2QZk*rIr,% x\6N DZTk|ךpJxN3)ңſ~U!`g9 %ఐfYA,e9 Z-+!`[71#K)ڰb h5Q[NU1jKvFb{o3?|x$34 !ĝAXs}mmqu~n}J@T!=} /N`yajo@DD(P Lim^g֢O>\7F3'h녷I0q'&mH@IF<ݭ{#w(:w'A3ؐl% +`b aJi%=%^" w$4h(bHMsATSޚA]oI=  6oJ0)d9R A9żJŜ!l N 1 4h9A=4OⳚ˗G5Y E0\9䉠֌ZR!IANG^o^kB_=o5uң/|_V~X*+ڏR37Vⅅ,\&< FksoKE"A" cۙ&}-~56Ĺdg} zX+ae T̟u')mLx;/ *-'x*~zVcY.(rvkfuLͧZ`[*\ɍ Cn(Rd c'^ `n4Xڌ`eÈ9a]66pE?]‚$=(Yܛg3K] Qs4 *DK6 0 Jhcj+x3f)qd-~ҷ$04x9&_# ,{Rm p*(R`!@[t05rm^EFyiMd:?KgpIG4m X`LВR,E3ìuMH%o+g3C p@aS[?@ԃ{ afz "}!ڹvC?֧ F$oϓV(*RB Ik ${Pk' :C=Nΐk׃lk ilQ<o&v3)L@ sޅbh?|DcL87;]=6Fc`]Q*0hwo/~o{gnr{:CXFg+DX8sTFJ&pVI%2Y&{7vth6D< F9tE}A"-&#)zsmւۗ^ٿuM3U:KJxk69wgviBmdA[+Ak/=4`u!ݽZM%!CgV|IPA~x=PoS;9!oX{yCa`~^ڣnC i@ZZ8R(BB|9YB_tY `V;T3,K۬"G.O)'K " %КRQ,/^J8h] ~3ӝ p}`@A.aU` jclM,,r/ڜCsTè4}HdYwb E(zU3yyρJUܾܘKd^=mXЯIA j[ؕjɝq//S+Z@C$=.AZL~n,qd< 'Rv u{U!Njx#xQW2߻ݴ nqF9pp1 EP،1:NZ I#E6eU1%@ԓq$6GWtgl \Ei>t,Z9D:ޙ3-m{3;tj^D.NwaB|Pk i;uwWv0 *,O @^CPmx1F @78 {dn @IFʔI;X-4HܠsAJ]Hj4Ԯ@RgUPy6W{1ت@/XղVZIS=ʲݝ,KZ#Nh5!D$qn耆c/"7mD.bywŃ}w(K#4HNQRݩ曓8Sj ;A)t) vK/:ɾDS3y(Oi>:ODAPkk0&¥k9ĢW69~GpRǣ1A9y}ԇ ww_JoFi5޼O|iSJL9b siRJ 8G t1dyuI\J ̈$&C`8 NPKI),K5{.!| pE*z>5oK^bp< YnLvɢN0n֢F. =J$el؜m+D2WoO"*yJ6PQͲiEIi*ES=T$Ǹ`RN@IB0nzuLOT6LrX4-!Z(TEhU6/ ~"a3lnc{]mkFcgp@s ^e:t>z2Wy:”XaRcgzao]lFY }>TO8ŔS{N5\(]aP32+`6FKd#ʀX-$=%:*PU* fLi 5i~eskk0AH0X qcڈtjtb 7Ͱ m?siII=p 0cofgbĈӖR*#9@/ P'mDrzgA}+CPP.#ьݮ0Pe;M~//]_G]NB20i +W% +@wrHB᠟TiO=GB~y={iÚa^;o2#SHcRc@m* h-4txl'ݚjt0rxUa @* K/SPmO,nwo/jR \ߦ4"r0 _u@?>;XyeЏq1!Xr(7TvШ WFK6y-% ~.8Fcb*-Qrxu|0y6^Q4! nrn{$^d+FLn޸87"x#>ǂf#nP3^08xEXNK N5cR[L|CWAYn~V؂dD$q3d؟u'44ī G r`&m>¹/8:*7fyP im?rMlAee(v:qWRC'+ZAvIH.`YTA׆ *)(N0/PN.M'+!*1WP԰ c`E4dpb, x2ݛl~')%$bDF Q:MTk~ͯne>'Uۼ4/~{Kᗈ.ӝ3qՁmV`]Ȓ.zif ȰxՖ3rs݃wҷM8b AD : pF4e%{0\ҝCJyw ogŏ1JF3lu(I8g3TisaPjR9ow9|q@.U(]flWXRc;k}>Г0MIȁn_8 /@eR홬yη#eetRD@'I9B:Cդto0)IS0h\O1f/.O-cRir^B:~*Dzq\eÕ#NH@AyJʔ PN$d";oϻA/ӏ}PQYl,v؇|7 AP?8Ovyg4E >`^b.9@Q{;{i84q$djqQZ!uHa,tl0s rr:-4̾VEVQϟ|4l%VU7ڝ ֯{rKax 8h8ғBNd$zP/ib"xB N7^? O?g!* 흿>x?~\)UE \,%%$Bhy\D-L]tpcinwv5#b4Fig7֭h!0 R*R4Gƈ=VaaXl:bϵwsT"r X̐W-׀ aG?Gg]'n 9<#!@H CCQik^ l XoئD*#}78(B.1d+H`.j3ʵ, gkp8Q$8h6kY1H5AkI^ͽiaڳ lMHt8ͥ-š$M3(@/ฐzyu Z@q&a)֑Ŕ!#/ .1EQRJrkvrskFaZb\S[jH5BþEphZȬv@t:cpNwߧ3; q\5}$MX A6 d=$ 8`фZAv?+x*MN )7=a -&/]}6Ƞ.jd1lx5fknwP:׈Mq=Q8.r󢴣fBly6ͳAl[Q +|=s `%^mz`+T]]60`,, |1V^D)% ԛMo- t)%@:л&$)V6q23:G@F9cUը;|'Q-'DBfӤ{$Seei!ԃX@*.SH,@Wg2Eʦ@j8N Tlj AG$ c=wSS-؜ ج :0:ە/VцuRfL+W7jdggP;Hs՛Z\l\9ssZD"/K6VYyfN$ w\xؿ|xV;  D7<\⹃"Chsg%4<76lk oc al* SE>^Ƿ 0Z0JW<4tluen 0f`;n`o]i>я0P{3*)5D` }kRZ^RoA\,2u1RN&1 +0|g"C[k4r(`xK䝹o[R܃; al%X9g2 wG;ٺ;gǍÍk#YcoNϦ*N.~ftNK-!QԬ7f"LjE1xe-홝Lf< VґhoνwGfA:^St:Ip:&A,Db@`4U8?(!Br<ͤLLVY:QJV] W3kZUb.h0@zDZ!yJe'0tr)K@D/;?>!ejhf|&1P.,F2U@!RlȤpn7H-ZF!.-+$ɤNJ:$ybNA'3f.$Vj(B @u܄mm 0m)׳T;Td&[o^ffVs߾=1ʍH-I.N yԘ F lGFK\+jSogASْ0cthn:3u3+F @O0ԐEpC&S(,ɼF Edy^dT0r8jiA Pgq< {8Ns{yMH.ْl:B  $l@n a 8%&$`1qmٖeY]>{S93ϣb[|%g޼r߽ʷ>\lP"ݺbؚ.iRgjftEd)"0T𸢩jVCIpPzRS}?nE'UHCQZRK3m m ŅjCK+e '1Pᘪ1úbifZ8U9^0 0A Υ-;iӡ$HMY7@V!Yg~5i8!ğF8.Ta]m?⩍١qss4/W*v=-UFqOiiBP^CzųWk9FznTo &K_Ύ NuvZz:ȵv$~SL ԯ- 04j7g%vlB䇭 A9eęԯ,Y XcI@}-A)FH,LCk5k\!JRacR1At,i4ێ 3>GX6 jwTur6xaCJU_T+ ݓ;GU׳RP]qqbI5jOLsE3/x hԘyf#lkWzqԍZdְG' ln{U3J"x@VUjhgUid81tD+Qd18(4xjXս"D1 ۩?d0$$FWMt2Ujb XF&aC5dhjwHW`i -uiVV[4S>% 0T;Z@̭n/8*~+TK6D A)h!BQ>q>D;*Y+a[ȱ@0`JI 1556gOaYcz`(@Ms턼ϦCjS#fAFd]jU^ kiLw m? VWnl8봁- "RQ$UYBsSaiD5 nk053\0T%BFVVY#~͕' JP3.6vٞa97`'@lT+aj0/|Pt 8&,8Jp(% J 2.صT`B$F (`x*VYECPAk&T yPi@' 8i0(r'^552qkvё>`u:[g;]O3",'>?;<ӌJQ>oϑdΪsWg|p6MWN^4͢S* ~#0|7v;MW]cm탋vh!ѻj%6՘LO<L(2 au!hFaSQ$pr2H3 |@_S3[iI4d!hapT'-t'Q$q+LED8w4RePLR-( >S;]$:#oq?jaa(H^tƨg*ЈMU<s1W禍E\\  xQuEUhz 5e Y`FGu eg^3a,7:t} v#6`%~譻>-ۼkTFϲBZEX! !wV1~[vx;$g^1;״vC4s2O{,eϧx@[4U惏ʭ 6XjjqjI2BBTd6!.]r 4B .0Ancf~k4ªjKV~9Ρ FvHHJR+ M0a ,E~TB*/l ۤ"JG!r\A 8i- T*Q`HOKTME7QIIY&ϻz9\weB17IͯOs4̟|, R fP]h^ҩf1!)֥`0D`c!;\ʃH\@ׄ꽬) ͬaiy#0+Ofp"/ Z8"]G˲PQ[1Z>蕏I#W!؊ʧI*b$cNЛ6$ BSp*m0H!2#٫r IM BʣK-:b>qI~zCㆦajf)?Qb{5 ömG 1ʷ:W>~rx/9]ח"QKXapC~IUU= H *aK&N-BjJГ#KQ, C-*%BlSͽypTU5˲Ʌ8Mq:ԅ 4PNbgu71`|o/8.f/x&(I>~JM!МU!L{V'1eزbWĬL\^`F;x3㹬W];΁|4< X氬vaT']OOu9/22K(J̈_|,7M# Q$M# deac]ӾGG_P:~UȂHd?O:rp2i6Ϣ `#A ,)E&@\q |@ Ltig80avH :* * HU+*Q$s)pM3Ap$IB?ܗegO[fS+)+JXW][}'d9Tr@L9́N]/BС6+Wʒf/cjq *v2={,'JA )Eȵp "7â|;7QY_Rb OL+p+7}Rw2ݻ}Gء+s_0lM˿<2ekӷo$}+ :k||RFKx̛QeY3 A0ế>a g_pɎ~Md$KIH(t!y-!hz:%4`3T Z@@^D dWP=RI +H #WFD 8 -)؜TFC$Id(j|\eOVXndykt;4m`zYd/dpr7nq,'yVad?Ƿ(yk_r1ypY}檱\iy?XU3J|`;o|=vrGጭ?y'5 l34(U ,2<_VH< xPʡ*-#%TL,謩:h H"O&RI;)x i1%`8"*@+Mg8VvjZTLj\;akZm=_ա$IS}S=+m:pcms-3#4Il`,;A&[4>hNEqέ$.VPk 埇P(4:-EUEXCa $[! Q16 qȒ *Xрb(?C2!Yrn T?SpI^D{"w\Q:Ƣ%.J9*2귄8rX? **2q'V-+c0@JURFk94"(w7ٞh+*caAw`1e)e@A h   %tD( 3(Z(ҥGD1 T%%vY fRZ S_WfF@IC|PA΄IcYzr|QqO{ ?r!|,Q B붞pdYÃBQ .lY֩mYUtc0t,!2SBK(1 HpL"vB]34/ `UA 72 mP q̲-`C ++AVM yOv+ӠO#r?%)ԗ:`)֯-_9wj8 Y=2_|?=I"Չ/`b|\<γ (,dD״r]L˟' f<r7 '?\1=ߚO 1aP1 |'YWPPFڭPnH&V}xwg2jnN W5 *Y {c4Z NSbPRL(2036=K_U⏤H&dQb01t8*BH?IW^B9~r*7!yJ"4Moi=ѓ_S< PݞarJ_ x7n僯yݖriX@%y'Xbua$er@L @Rq`5Vz\n':`?A,&p@D6 疦hh@0 T@ۅp%JFAX#p~]V{:")TGmXv 00a,k99}I^H!X146Tdw%xd&be,+?pdې;eHq&?3285;;k_ڮ]{_]tQСC{yK^o<4S{jeYy^PVgq%\Wrhhh?qyEKɹG-sz/Qp\S5Lw+9ϳLuLsTO,mvڜqϝ(Qo<9K(gLUC䝀ѕǃ-L3#@tO ]?J{n<|Ѿ9ܴj`9rΛ\cfwM&QVjɳ@1kHfe]veib \ X^ 3f[BFQ3iBah,!$7u M!(.o2C8)Hc,MS X$It]WE/^Ѽe&7 9, G!ow9eۯ M7/|?S:eV>;;;??(5\l6uI怌~~#9x`?o? o~;vXXXx׻uM7}S:Ť!t_wL3=i)$ЗlZ]-?xh2G~WʰJ(ͩ0ݾs5>r#}?LAxΚUqFeF5לR$KeH,U}hP \p' dt5lH02 ]9uÊdQj*\*mDK!KW ˿wqRlr;Ivm@Tkl ~392==mYVRG$r ɕ38cGrG>rq5M;|0Bַ'qBr[oݶm(SSS[l phhh׮]'T3׿[[BBx~o}o~|歷/Y7o7y 7u-av,~WGzIPt9w4z!.[ U:]zy}vx1Pʹu[jŔ@V {:OpBjjѳU'Χ,,PRPL㊡*+1](g fL`x2k#Dưdj-b:0k 2FI=qn`l5 c޲EOEIhaaAZ i8NNjaNLL]RH<\Xh9)A٬VsM @i###PN('r+0=9zǶo.Ϙ1v _u/o\\O|WW_}5Bѣ[nhxxx'o511Cؐ]x7E?|׮]Gm_׿}( .; U5_ؔ3F 0@Wд4㥟. ao(.d&>irΕt^q8#99=l'z j[:FIJ S՘Fa,l(5nJz`$gcW&5X sHу ͠@T@{ JR3A/X BUtJSW^'u]7;;[բ(ٸqؘaz} -,kڵe>a8ea(QX$^olll2>8|x2/[z{Zv헾ra~^v-̬Tczxx+xK_zܗS$0^ڵkݭV}-[By{ڹN;_U|{[(>OE| l:'7~cCgz~Y?|k%]L!p_ןox֨ئaZjeӅD6#8n\XYwu[,S4T=E0  8R2Äh hF L-U# +Y8Kc V+N2Eز4Iy4ԑFb*ii٦RL'7d8\t&''$P(:thaasQu]0fff|?r~6l893dYixxѣYm޼9I'=~- _{IV%W+/~+8UU8F˻{TU+͛eѷO"ʕRq79<Ә24]Ui`t/>1kvY=:BVȽן/]721)il+ {Ʒjz 7l;WygxdnR jA@%ֶM[W¨) c1E!Z$L$ FR@R tS0x=u40e$f§J|Jw|A=-a a\pK^}s7o>|)?HӴK/nk_qW37UL;=r-L4oF_ѿ-lxk.9_yA*U=h%70^4 $ZǏ:? Hf$Zt8i]s,ZE,KSzJuljGCTt@+!ꦪ aL(hgEdP$ PSpPѮ##IU qSE\kJ=.r9/'Cp OaHB=ϋ"C7M3I7YF4GݲeK^%f988(juݺumOLL۶éʂ͉2VN?;vz<SFG?'?tqr ?}ի^cǎbx|я~$shK^O~'ϾK.p15}+W<K.آD(w;? mj]_p9 Xn2mF ۜ7ivFEGiez$M^]҂i%`cibQ@K bhBa8PӲ)i\]58<깮ic QS  43~<} ~FS,mۖ%KsE\NY3tV ve͛fm.C@C=뺬?Z=9Zyhh覛nOcǎ7 2[[lٱcǣ>z=|K_t:<.T.暿)]tG>+䣣Ư/҅& Vҟ(]w寽o3NK 'yo`4[4LLSahILl[+X3pE l4=hIL|N z8IJ U : 0S paձ]wHUC3iFrĠdFFb׵u]  q U*x:؇1s}_]ڿT@ɲLܣ(,0^'ee%Ie`q[TzuR`$V9 2:nsX:ۧ4OU7x_jYݻwMNB']ELOқ9iRż_k2-/}#FقDdHF}~D"OG[+Ax;1|K_ /[oi>Rrr6v'gzÞ$IT`C𘱫z6R44#A }|a|p@W}ɛ (Vu-HaB Me |s3Ҋaβ$)3ucK0 I t:=?? c wzTU3 %5r.0H c݆T]a TUHm )d+ B ^u݁~o$ RCEQr,3]`39fi>q>Gl~O}$|Os:'W `Y;mǾ'ε:!|ꋞx4ޭ?mWT(y޲~ygox[0AIvҨS ;=E!8.>MG$cf x02U-Kc0ry۶ tLmρ'zf4C>Xί0!YJX EfbkAaF=y^nu5TUZ;{eE KU%I%1Xj&%yyAtyǑ`}nnc,e)߷o\ЧP2ŭ<>+%3NʩbJgݾ/v=Nߟ|Xw,9e)awܷK^fFjaD1 X!Gk7l^M;ٕiGq4OeCuadPi5 8JeEq8J'OSؔr^.N-˲U"$Tl%`b0> PeFf Gςzk|}*FU/{M}_۲yce lI(Ғ4' W5m\. WU t],?p]w)288뺄6)'&&*0=\ٙkke2!qc,/m!ڿx=~g[qfdMхm80?9XbC=<](F<1 -so^l_UJwx헾]m-Rr7\Èŏ~W*Aq !q)cQepR-GOSJ2n^$ d( #Ċk*!4B5QS7Ldvet|;߻kǭgwOngƷ__K aO{߼y⢪qgY*"۶=k׮ 6jGB6nyΝ;E]tgw}mo۶M &JjJ}3Y Wjg.!"!Ya'/(o`S~}佯jP"BoCĮuam.%4] ahSZ&1A6ٟ_}uM˺[o??; tMHlL"V c0'gYf͚Z{nI"K=sssGIdaaA;b855nO?,UUl"7>4M>T:Yck&I{{~G?Q┩2Z97}hĚck++o0QHו7]w]߾=S-gݳW{oyn_G4t͵{?]{C>r›_q\zQJt7`cGnnO7FfQ@4z0 B,-㪮v:$I\V3\>A^M!z]u@ RMaĉm$I؎@Q5Gf&~Ъ}Refz\.a(2p{45ੳ;,q)W듓Cl6mrׯ߿?0XV:>>z=[jcO%TQqOE'y!77o{u}1.o~p&O'c@\o_WW|~4c|^ &+L˻_wyooȨyKl4 ,=0S[lr@1MMQ)e@ !%I4c:H/zN'w;VyMֵꋪxK̄2aAd<Ś5cmڴiϞ=sn{T*q;_?55588nVYCGYYRJ xT* M:/|j>D/x 3x/9gS;$E`kL+ݟ[u߷ɻ௢,gs{q4qoՕ z~O{|\jbGQ-kǪS>ivdXǑicc[N۲e릵FWUU ؑ(޿sC?~`~Ͼ# VECÎm+|Sf[okNQJx7za X JIH/DN۸Գwkv}_ON, ɀO0\S;ˁ. $;V%s+kڴ"Y,MӜ뮻fffݮdKg<Ð8KHegժU_|^?~g}]/?qfC 7778 1Azc/֛^//_HIv_V%\v9Qԭ;o~_7|tcßаֵF(1ls tfW̟ض-Kz/s=@xPc ( #xa6220t Cw144MKu rmf4U(& ,yW'IkfF䬭4}b4"j{wi+.~ɻ a&qDp>tܷ; y^\j2ǯAAiZ- gddJBUT,Ji>۷oOӴ~b|ܨ[ʠ+_^!tX 8Wb99T G_o߼q|P05#| O_;<{FqЛ_X*;GF_{>|{w1ן˞lEA,(ȳM埿uC'LsIJЈP7TF)hxР0*a0(i;狀7jzAena禑-k |Druyi*PSN82qރSk Peq+`CZF)hΝR^˞ =۸qcrY\]0MIq_aO~ az_)6mK/]?A)5'ᆷ£sC3X/< 瞷]it AiJ[DF0Լs5w:߇ސ׏ߌ%1 qZg;sNgr~Sl}IC,n/$c:!\mQ 婌d o(N[Lq'u KzljNIl08,&Dk+4"[,kv8y]ºQ 35Ki+ڝs5iuα>~^冇shTr yn8>9!"V#k4nqJ&r}{߁ʵk;!GW\}2b]@!HHgm}ņ(aA,*DJV]}=2mg(]A{~e@Kp-70P(kr& SI|SFH#KkJZH8fIE()cf/Π.)DƐYUmxiXx?Na)b0"H)-˞ ^"(Z~}PmX,\.g$Z-$s/XժV&OU:! 5dszzB/ַ%JI,yș c??׮]+4֜O7<ݏ_A e˳ Fd5Õw~|o?YUT"o^os}NizsЅmTfA180bzX\uf ?n:(Ic _#ԳJ1CA)RM#a[3l(q 9dH SFe°j(&ZE@+@X:6T*a)C¡GFF|v/&A|^6t%ز,[FEIEQP*bL/yiw͚5}e=};TUW -ykJVfva9ևnxwoQJ[G pc$%ÕCs=)nn~/TA"tBގg;iC,,Z0 2ݴKb`K@qFJe/ai"Jpt5DbRtj2T=]\*raAShcaquZDiCTj,kf\ {HFcqqQVc^Ojz̮]j8 Jq+ru3O;^WW*9G}S$ŝ~_G8ڷ~cѽG~d2k`I-`׵b/jaF!wCQ(-3x^Ͳ4(;@u;xZ>UQ񌩴YƲLq\q2ƪ9ױ7VPov7I:%֎{!eDa'6tϳ$TqLAPF jʯn!`c`iaeRqb(OHB033nT*u:AXtg߾}Ir9i$RSZh8F3U@O}s?=z=yڵk'&&TUt:;v옚/ˮ\.`]o78jt£gFGʪJS'PVVP/~o~ql$Gk-T 4@8VXɂ=vp3/dv&NA^-s580"͠e$x65L]W Mdy5~Pg H ktv##TXO @qEՌFG4Y;Sˆ-2BU ”sS7.( G@W<${6wa;.kwΝ;ޗj5]VӴ8n/rSSSAT*4M VOS^eɩF)}_9\~wuה8nLܶm.;/v\yBB=4]:m+x80(~<1RǿzϽktS/{RB^S(pǣaqtX<85A$<%iL҄i2͂k:q0f f r݌VıVl,0kVw(MR0J2[LKfOT@:A'W\57ZvGu gYt$l6e^A~EbA'}䗃ڵko喝;wNNN>ZM2=?֭}[s9o69Cܒ8') "ptqF]?Z%Y)X 1ۚoUwxwg$4N4#B̀ڿu((#8uTJt@He^)p5ME+z9qzMJ2ǶATsPt續 a'q#lfuh,ZV&XQM˰$c]8 ڕ3'wk^;w>|xdd$ ñ4MbI$ իWK#OvO <+KkYr8N]u{GzmW'ql!(m4}x)@@t-^#Q~qiBP6n}<;Ș_l hgYHB ̱j躆qVWou{GitҌm2B뭶 d4gg5{>at]1K/eCԆ+qеucժ2Gҳ8~Trt"2x\+2I nݺ+n{oCvyOI}e<~ed߽_}㚑n745MU7?o{Ƒy\N "̶;Wu?oDَI/]mo Ju L_}B)Ne蕤Jt4T]E4^Ӌ;~i) iCT& Aܳ́ɒ$9,a7 [\DB! C閦xBf/Y ,[=><&01iɴJ6że/qƏ|dB^衇RѰmîZ6l0444;;n><QlVk4֭t:j\.SJnx"6N; WG~StÈQFYyh]e1ZP`LH8eYۯ|qߤ(miCc t4,Y2zCUUo[nd'_7oJ+dЇ(c/m)AnaQjF*V}CCC߿s,:) +SIRDqAi/Nb CG$Ib (R%sLDoB#%z16\Vq㛦mJj&4 J(-#0F7T82- Yg0UEu]KˁRw>KF;Y}gggW^WP(HLt^۶yޚ5k}5!(5ZMq$oO?|[nIrCG+_ o-6۾cidx8rAF s-j*[gsCv-LSձnqN8W4 sD4̏(A%~Ĕ@DU `-)0*vs Kp)ulsmZFyX "FaFRtɻaخ*3ϵ]N(0,fq5Aboi? / &Я|+7t4/@xa'I ,K"fVm4r7CxB&Qa;vxdv}x7nXRSds-_ u|OO>O͗m<b,;L-^s箫oӥN?λ~) ^U-HfDI(E]$ړFN9 c.4by4O3XJ5-JTUECQ_bqr,$ mHU5 "eeDY uQAmV\וuFqm'?yG|D16;;+e n1 C[NU&d/!62(M78p ːRzI~tjjJN={x㍿,[;<==nw˺8cѹV'(y@hιbn >g722O>]BէrB7"c$ b *2]SPu&O V8TUS-6x(#T @Դ f901)q몢N r M=Z, ˰3剐vR\B8|߯ ~$N;Jjnb^zG}4M(<Lmߪ4}{?Ϥʡ}~,Id*NQi*/yu?m>ソ{7~p6{7Ͽ񊗽Xio< |석0K@ >@LX 0%sLʨRNWٔv/TR-*(!.ڢ zreWEi94u5"passHE-)۶46 3]=zQk{iZJErbWV6b0YuK.d֭R.H2A{(C 8p~E~޲,>_қ_KeDyE Sv#nM gy3z?ʛ VlGֺn2(M<!َ~mAA"!.Cn iTEӱ㚚mIRca.6ڽ~uT`0r.w0l9{qBXRnt\[)a=֨YQoefYX\ݻ\e~[@? W]uW\Q(z޾}䃎*\8sC}?㫮J̭e:2 ˣ9ؿ7W|^g^w|[e7_p>>nyЏB_׌ס=}w^Je _EǪ'1 @ &%д|AwA:t7ٺ)BLt8mF*Z̻c*Phy yR ,e ;Ka l>Ry%}e=t% EX ˲Cmܸq߾}: }BvNOO~*p$P##hK}dCBEw}蕗_睹ԅWvpo?P{њr|ex꽅w_[nA^sY}7ܥ k{ʙa`޳1(54S44`~; PF,"> u>C ߧ DaJضm]KekDZBA D K,hG.',g=) \x≙$I8P,`BөNl6 p?wԿ'ť‰=xwXE9*(]j,yS}YqNT8<xtpei~OaXsG2214pt.ڗ 3Se3umlۼPio `j0QV-ծvD2h%|rG:+oW8[#., ]sX13{ȅ# 1U[󚎗v#|ri5q2X ')E3 P D@3"ʸbe4I8<hBH4Hg@Hl]ȉ9#U F\'tD_n7{ݮaX7-BD 3+'^7KKSoI šhB 2C1|0߭9VNQV^Τ|+ԻG_׮XeƶO.-/W,i|,mp}A_ˁV?Z)m0̰"".rЌ.`F8JaQ%P{ГZ`ccD;gw\ S9D &W0Nb1CC#5E{‘`k2=R.H/]bkUrXҘF(+ Q7[mT'Fe\^d(1{LA/gԑ0W\<&6 ?Q3))#pEhXv{@2hqx&&(F.AP VUH\spC LT1x>+:4PhܜG9VVqGD ʱ|tP1_ܰy9眛+{id 8H4p_2[y2xX2+u@Ӌ*Zw:ٞPy.UtKQ9N#UlÐrSi`jђͧ$9\g[G,}p 7z4u1тL˔tZQ4G0aa#PK(2@6UX@h>yw Rz&=hʈZ'…{r}C^ #A3氜 MMyi.ŹK'P2[*qrj|<V.+.b>_q_wC%]GP@"+tcVg7ܩ_Wʠbm_*ɲꓚcrs ">BGAĹ\$BPwffsGkk-+Za|4˸X(8DXtXf 95=W5b6&&Y;zHQYF >ԁ߰ 7Rc"HO p=fGr]F=_),UdɼDK~AᎥi&did9<3y9zq&똉F~' aF$ObP+^6{ĖV͵ qaV0,9Jc |\i)e\\YY4/}qȀd$6L1fa|O~ |xm٪-4'M[4I-ӰLY[׏qbbb5X "^D^_8zF]ER)w{C{0K^m7:ͣS^{kw~nt!1H*'8j*eVJ/X;2z$`f NS XݞUBݠQp0 Y2TXXk~'tjܘ>QlN|!yiVkāmZXLI._Lu;Ua7b 2y3Dc,#aaIX>UTJh~ֳ&a9  ti:Ǖ[b5 >BepUD0)qhL`0S2101sJ~ ~;ܱ5{躟]U:j:턪F1 ">Abró tB?I"Y*B#qMì 8}`゚^wk:,}9L? vޡm̽sq8ͭ#OF68TT3Ja8{K2njcU3:G`a3UU^@HVɭQصdJJѴ'yf(C<2+H2_]0RmzD0A*8Lʝq[Hd{o4ْt,42Mö Ώn %TLE^``hwHS$+8#~Cl8'L}biuf?׼󟷠:Y:Ԫ/n9<[܉]\LWs܂,vM= vO&Lm3d&LRʹ( t?#y9NQU"1te^`7(%e۷@(-'f+j"9Ћ54H0@jdJ;~xxlyϿX]ꞱuR+UJ[ CSG:R|"gxV/^qP īFG 3å10oz-W#?qpOӶ-{-۷o ˗4^1t8$ Lh"=b!FF0uٯб+׆'D! 4Fv)AG6_XCn Kb̉8Q~rxn r - .,ڭ؀ 4@9oXItփlda *^n^a*pVzqݏ=a^twڙC}\6nߎ {qgHww|;w||xd՚rXSkm< ՕJca!,P\%ڮSMk 8|uܞ2MF(U~0LN\? qƔ(L#KMŜ' CL~2ToRui8W ΜO%Q&%g@zNZ0{A8݌Yr)kZisZ8-<2gf&c; ^!+@Ԫ7kMόl>YŅFаg%?JY7f^3Al(uI.HמW\u8R[*1 w-[B䋿RN[ , UBbyjZMױ`(5oA P=`B{*IV(Bauα"{+Cx`9oyr:0lpU[>[W=ܟs̄hI N Fb+Z9F@FœSh&FZ~n! Gy #q4 BJnax. 5[\>/FQ`j8AE\VKv Xj.*D<;hyhÀ,6Z5@:ͨpUE*"ASI(+*gF @"aM.=pw_jd$dbt(NZu#l#tȑ8Hsom~ƛt KSs?S3_cd20j(!I`P)縪0Z|G{p{w7sϟyb߁Fc W4 RDzSGղ.g̴G~=g^qBl̢$o9,X`@\7aP`ZiZYf>+S٩ɩP)Z/4dGC 9 +A vzUS0:$d/8,Iv; ׮عLŬg~s+&ogQ dӡF$~3UקO{f~ӝj`1!J⌫ܰ`u'5dW54L{V@?Rɯ471Mc0LE9!̝i*vEb dƬk ,yNUh%P5߇88>߽wX,XmAKO!iE|  F$}&ALZ% Hm99۲ԠM-NĐx!\fJHL2[&eYu 2tMIϷ[ł9JXfeNd n4 IBi Z ⣄pF{sOT@8!](SXTbeW%c U^.EXqs "[k9}w?LtCoXdT$IV#ӭvzLgTCYSR)(M*G!n y {F'W*.̟z3Oqݮ/3l"hC8v\Dy=28U0 U?R*xer5>4"膖jEJa b CA7z?(4KxO<gcyyp*ծ 5;>ۮoEZ?mb혐[WY,]rL P`-H&Q5Q!C d HpX-PG\b w5kד4@^1/p1% ]]Ӓ.l嫹eI8-`>@X-&Qj9NZ9R \E^h7{!N(G]lv:*UsU-|߯u݄zĽ^Ga6bű.0c$ r 88Lƙka'VX:+gqԉ~ 2rǕpO$j02T32N03@hxV# c1CP 1UL'@ $CpWACłmزR%qɩ ӤF#Nyk_~=%jaSC7 }pn 1h*9 +fY QT.Y==X8Y7jFLրp}_V2p ۲aDp{!gAEaќj1v[.6[GuK%ڲ̆^0YNAߥ_ji闐x5A#qW{W.O){G֮۸>`uC3'QQ{i`Ri>MS8{嘚ifXf;={ åCG'w,vQ?P^7u!M Me/ݲucXQڑyt$pd``b|m:0MSUF16cwހ" %*z 򉎕=!҇ǠC*YDŽI\fNٲ dĜ)cw3V0\2pޙs6)r%7,Pĕ4""Kt /!9”m;}fI;j22|{ڝO{~k鶺BIB!ak Thj Eo8szytmo=29wh'1,C>ۼo6[380|Ǟ =3;E|эHQ!ãgU]Yv+!Svxc &YA ԑP1]Cgx B ĩp@{Cf&-I2еbnBH5[$I%+F+~]!zݴtKO8_! '=K>k ˪~;hδ'zMyϡY55#\ui[Tm2>\6CWFhs7:u#֨uq鮗qԩ8u\(Ƃ\4B0t 0Ѓ,֑R-U!sH%X J9抙j:r%c|n~ x]f(P 5P*'ֹ^ZzX,KRF30ԆqF2S aG*@1TYi#ÃRudYw+&Y4UK ^py]ݹc鹐 4fxۺqMr湔^::=;=OIB\Lz]Y5- Xݖ~ lZB=d+;󪪔EOIi"/!W+O#,8PN2hZZnZ{v.H)xME/e9ϵF J,AT%32>4X%$qMi7NV" kz35Nء-lYsw^ijF|bvn6_k4;QT /w (LT4, ) Y1TSL9D$/@MTÆfjx15 чHs)],K,Vb4Qj欉-#3X(GXHC&o49ߝ1;͇*W >pvS9yxت m:"Hyxsnk-w/ Uio\{V׵B)aasg96d>A+!˺|q(4iHS@A#d=,l?\64$fڃy]3&;=i%TK3Ǵ)T;PnzD15 xQfT-$akۮ8O^:=ل" hbo^u5] 6%MU!@:VnY`nypN1zO߿UkiHX Y+ T=aїej|%QB %09RPNUQ)3!KrfLO5 $0𗰾y@H,g<>05Mlˍh-.!Ek Su%J>KIT@ 5͍?n~h+_#WUtlm>9#FfLQ3iVΏ&fa<ΰ:TY oUm'okYXS^ @cn0ytJ8or"MYxmo+c( M7R԰`j ^l,U$!z_3_)UjwH]6luꍳV->RXn`,iڄQ$fX@XW(XU%>VTe 5k:U Z!o9<-F %+:bqH3feG@caR@h"wL+JI!iJ(m M h>Bņ_Y5oD`i`NfL^CKS-$$lS zތa⧫׬ ;{9”fH{"vN"ѩv\7C35r5;ߍt^t65==W,p7vJ~`hzb/';e<6!2,GÙ[Ub4flyMYG=``s05#DDm0q(%iED4;Xߣyc(N|l.hVZȥ_8  ˊ0(%PGT.ijb%S]"@bff,WS@ WAE+T791NR:1kֲdcNZ7AŻ`j1C!X})dťJsZPS/wE6JI8lB^,&,arD-abhۭTP,됈T PlxӆQCD4e)AodG{q=5%#\?5ժe?yfT7 +Ŗ{mĵjyajG^hgs38qSMx,OsA7o$넾]tBFfW_wmټ_vC kך2~#,^yZr9nK9@v$N"z%n3ɒHAӠ#65[Ťh58X-*m$i>@A-/4k 74+e "\!ȌO[:FFq.2]^Nǚ:60Qݍ۱鹶z/fXOq<Ѹ`g ma)$b(xRkjTPhq63ߵ_\8IE4<*| }*TQ`qW$MA(6|j6`qM҈0F5tae43~UK+ SBo(V$a!kPO+'z.f;Z:>yޥUYPЁI 4(iTKn-6RKCf֒EF$ }Vq9f־^VVTK(*fʌ/s~_C vsȰ! ^z 75(4nI^c7ԑ#8QJfY 86V;0>1(ƙ@\2_TIQ=Lt]u-ԫLACn.yQZ6TbD3aŰ/i֍||HLrtU9ɇ6SCb[= IOs;c[!RBYSR { .N#M!&x^5"9yzq}{quձ>вzDiRl'ԕ+D=S+{^ttK7u#jYY8w~pw"c4#3rÄX+ZqdTWBMJ8h8l\~`*Q(!4_.aeQX5kvaP}Y69hm.{(t:ϼ~,VCUbC?,\0Jf5;;oooZQ,hXkUPhE;F1^ybT8NIb#m]<|{Ϙ^"dѬ K z+wS$J"uC'`Ke8a?5Kfsn4x&Zv*iۺHDLs$vJLV=JA\-T3 y4fLSSTyOD25t$3&8d@0۩b3HLeV,>CN;e _ JpXOeB/υR]F1V(GYoN(`-  QH#D%s3 a9r"u#Hn Rmn~&$ƄBib6f9V.w꨷E@f*$θ[W*M`4ڌ1O@&pg.{^haLt4cz~h26^vKy)b]wr &LSL%aņFFs@@LX':f舑׮UuIiEbLkvd1^% DE1ߥqj@'YQPU9FaZѭtVY{ɟ8r`:Pꈠ,Y KSk;+@H)L ^;{q.Cɦ`R4gdH1GJ<+,F !k$~G)zl &5PNDzB׃#ϞStdbE4kZ^Z .wd#$$ ^0I@2#T'Z^ dQ!NJ%QiN 3sMUfR ~ЭUZuvaT,2ƒ( ]3-޺MO~G?q}e)I,f:VтE<Q ܟXNXHXq"vSV[1' %b۴k_5JBlfޜ=hnr ǽ+m?Э¬5GB<doTR?LX(e2XyVo # tx5MzEria/te!ip ^Z)4>,Tj'?KWJޠaFT.kF)r.i :PVAI R36oy~6VWRda)6"LĀf0Y$5({lGy%$h_G:b{J( i ^ҍ(Y,@nqwwkSQ"wڔDga\F y;d&XbSoJ(:!חZk!en0}"B,;Zd'NV*R04ڠٶ~n# q9NTK#t&]onrj0^Z+Wwח+Sx7|'x|fehV4Jڭ\\-{VoaBms S+'+oH杬SjƑ)K9}hV#?R :CgaQR(q& &-! R̙)̳}b eiBR L4S*AquRiO~v6GrWE]w8ą|{xJglpVkQ4ʢ4 s3f5 CC "K3ȬW:L@H =xsꖜg͈euE~:6^N!5A@JcJ{"`$2 MTDlsZ8v;N,V.uS ĒXEpdĂdV2huvQ? T Vq`Q0j439YͺiivϯuwZDg?ϼQ}YN}w߽ :*#vWf^=w6 RJU :ӯoxcs7@ QjQX.Tuo,q`7I}/:qJsfrѰ[[;f̑#cuBm'FIv^xy{jxct!Dw*mui& ]P )L5'f'MD7MDʒ c:Wx|l?<5q9f 3o\ªI7: ljR-'}1=_?ECRZ,1 0''pqi1˂@A`e*OŚu}1s>XBP40 aA֡^X4S3fki 0v8LTпKj}ee)rk"f E%B:p> ۛ[SFmLa*Ty& S $,w&8"E׬'ѐN,w0zN]]=ڨ ;$)FX 0S k) p5|B˺nԨT[XB"@Fyuǧ̦8o^>/ zBږ)8?uZrywwM? dXkLLs]7MW^x穦0R/=S=}fѻqқWj^oN6GnE;xyVC%C/*ZƢ6z7%7Sf13&u `z1Sf@fǞ-{Z25~T5 KJJ0S2+i__uz+"eJ*Nb[' ͡{4 ]HJu.4;1g#ȣgpeFʣ@GQ9՛[;N]vww@~%g)O/?$noX&^K.Jqo^z1Md2VVErv IE8U[]} GO ܟYX6w#_J]QqQZQﶦ${™!f d(2xfw +ۦiNA o b˟$I4 1y" !CqJyyfTmAX H"l9ʿTl0̏pg+Uӂ|v0f Je iQGa~bHR BO!\c nmt2򢭝N64.M=w;v*D51; st,8(|v7¶x+v"5|Y^v"7K*93+^3>ViC !s1ڤ\̑HJCa>oO} 4p-{m˶̄!504W!XEdދb?weR4K9@|+"5 ͱ7ozg֭ݍۇ]( 0#na J!g.Eda`Be|0;GCH4)PIx/\)2[ )Z6 iU2ӄ2Y^Fac|^ C?|hN^T 4.qqҕh)۶Hvɩ |[ Mϳs ͝{o{Ny2(zCs Zlޜb3Rt>-.`b:ɹb:^K!^(WolKg?aJ˄D4#a4i?_JcB#!v/QC+OٱRC!՜l8x}gwwZxdKNǛ %avD'IgCgłQ),ozvMI9J#^ިrJ gd9#A"4*XUb:7Lڎ4Cs"FYbA~cF&QsUn 1Vg}s;Đ93Ԋ)+tWnYq=K2V o00aQ;z|"S#;ݹa\2%A PFu#a8ZI&3 𳂀mO.DUN࿨! M1kjB35̎i2Ft!RQ̡ !: P)8jk붋ղbL+%QlOC̄Fq$zJ0W/]x'8I[(!:#4+@ >$ZE y!0%~E!ЍzrPZ+9ɅKx>zGwKW7kaxJ&k^X5༃`"=/-:D״(~W}]#ǷBܑ["pSJ`=1S *%2Mu ȟa4ӭ"+ ]nYύW{gBCV(LAxi{Du8ðnYۃKY7&fkX,$UrR%MdHA }JRnN2juzA9Loy>d/j/r9botKN51 #MLCAvɰ~~{OY4rqPy J 3PVƄBH@춠[ xZp>tݏAV5֌0(UL˄Ĕy͊U-2s7bXQteDf|La]bDWŢ<vq]p9[Ws 38&a.PhS?EyMs U!S =NZhw)B * WYVfqId/HuQJ!G$yσC VZb0s(O:Ū ^wzGQѫqU ` 驪nk01L 6 .T8qQ{mu聧=ĵŕ,N6aT!aZ©a#^wvqD?]P0gH$D`D2˴!,tǒ`ȹ XcN,0|w"C1R#m>̇[0Ġ(; yﺔ>i(€ꞅ 7v{aAۓ]zRbX5l5 ,6 bcl@X}`wh#Cb7 S0v̄( f4mv204fܬlVD x'rl&Tk:Q\8Bn;kt&Rȑ)eJf,uM ~F{{9gY=fI@jhS&BCI((nZy+;[n9:KRKx9QE?IYXݱn!Ep(kFQ0͢:)E9SF_Y(]f9L W TV^RqQכhԧvQyiF}?œvKi`.@ NU+,DL4 Lt@qrQBi6~R`12[*`ƚr@(+QsQ L2J$&a:zLD&:pkscgg{vnPU:7pmv4J +Yt։13 "I3C_4qg{C{[WT5Z;8Ұ݋l(c7 0J+:'PTNaagL6'Xɇ>x#dJkDJ\Pa4TV]$04 %dCaJM{Sߺx]3|ɐ,*Ѡ3zn"Ny?*@0AHxQoJ> 4wc4%,԰ aFRdBBG=))LjȕD;wўT,ӱ#c?:p[@Ljf N)Pب6QR:q*R0iwНGX8k3D36ntkywBBF##NiN3!74%I3iQ5K>s\.v1 #gFT$4òJ5Ss'Y* 2>}]ssKeB_1VGxNCF]P5JQ$i\?%tMbTj#1B5J )uX2ʺx=B (#*z.q4$sTQzCjj6&,`49^X)^ŢXF"./;23μ :r?K@{: %70R4x 82!Oqę-qYvEV887G榥k$V+&PY=|[C\)^_lgiHEm^!ցBss^oM&ת47Qs v+=V eCG>pxcy?`P(JA^@22F_3}zq tte}rFhaQaX`4$h<߾yc#Z:XoK`n~}-10g@k4zc(O// @)Ʉ*yBĒ*md QJ:c'e¶)ZɻUwȄD8~FJ0qf܂I&R YFEzT:3ArRi˳FQ*~$7-W蹍azIؖR.qS"wn8@=,y{g4IܾS%k)0 5EηԐaD gsڶ( I9mplg'%T=GwVVvYz;8l3yܯ^>\,aG1]+J<$hyCEr_K~3v[(N\7(eI . X8z^Qa`lYYo~oiԂxsd & G |u#ͻ2v:C \-NҰL?@\pML_id!G 8k=Pp"5ZWnh|b*w,%@^2ȃMN*L;A~3xY=9,Jn/ Y JSEQ0L4LMӹiHbΨc؎BuKK00#hsη=e{(,%WC@H[R?uT,e({~\לq% OEk%|z:3Q wZ TI<'l_pQEq/~/ ^`:^]lo(4α﹟O?Ɲ.@ /&)B(o8cBAʛ *ihԼ|$R$ltEŷ_бX\3 -A!Hu̢e`kBE0%C//LW210M7 eB@pd7|C1 QvgY$Ncaj')(=2?1'N3,h;MpwiuaN|p+fe ç+ϯmK)@?OM3f#! 6b&xrG! =r9a^ z7k)Ǘkrs;k Rn@q4^6$5}jj Iqke|=?3L)b`D)j k!ߕ(3{ve C٫sFPgoc*<7 qЍٰY4/09'B1Pr]^y8C)d( .oݨL!i"IՋXV!ytF&d@6N#S/AKX]xڭϭ{'$B($4IREӶ@ (4ђ(2 fʿ?ơs%srG8*_*môz_XĘL.,B M V =t] D͡pdYZU.UcթHN9 G MuF(O)!Dѱ7Z_{}u뷖41Eq'\$gJ٬U+e/}ͫA`J0 yW`>7A<2.zq>sAd{'g?>6PU*h؍ G8kB!MaBրv&Fg6z=BH]i? 4pg$pK8Koa#/뽻+jF/< gW!@cϻWLW$Z8 ])=2[9{p`8Λiq=X\k]^2bIu=H7qLpCZO5̰; ՠƃcSh<Ş ^n;&xy7:SG>'hN#:;7|퐿kUXuV{[$&qH^}YȊ2jTH*1 A ?x5Z[qѩ`L.{fi8IJY4ꣴ^- D8y+.=⅕3q%\FHrVA2*") R2$p{M<+mܛl''{8\y7$rQjBWPei`Le*6%x'ȝh .9 #yD77r8"mgq495h4U[ΰ>UroȽSXIL]Eڭk>t D1Gج&bs| z[$fSiIbi"PB|T>\θq&4˾oD'\eD0HQXl[߽9 H "d_xoN}<rPA i<"4M@Q zr;^_ĵUt {%ӂMSP0-a 15#P(n>/65MĩYC?x>xF\ M"ɯg`gG $TCD`>Cd"еڑ= L_nm,WU:-qbJ pLA)#(s.EIa0T2XD\0Z'H1cڑiqѠ| "B3 1T}F^CVYcvZ>ϝl#=Ć͔eX(0RAL [7:p% Nv$Gu3CٖwGÁպwK(oj !݅SxqOd/jW`&DE*E2ضQOb &fEsE2ԬXC? sߓ .h> T"fE( >XhIlBRj mhY1$8DzCvtILhc},VSzJu"dj B3UXdI#ĺnD5 t`^ Y(P< W'\1:n۠w*䛂Pdd@~<FFKS?<ѡL2*ܐ n#d%!y0is.JDK9g=zZ}QfPyˆ{TG<D{;(N)?eM!y' dJD,7a3MꎡAjk8 o`(aaog1c rZ,L= &atU*8l6g'r߼ُc C} fa12NSR:: -0BIbb1FiʊpL G}1ys W=|)?2LR`N)Ψ5tŴdIB a(n;U6fI   $LBhx3^jT+^^9/ !p%n!zLt}Okۻ=?RJ{`o:~GZh&ӝda@:u.T `. !վ;Nҭ4q<zh'A$/~G1dgI$7D #nIfe S~1V-Nb7mV:s͉y3-2[sE< ͂1f2/9sWZKX]stRǎvj y 08?hQ$Aha`QB& r?D{\^n` !S^кB47K-P0C%x5e~2eԨrRu1u6 SJ8W1Ĕ:;b j1bV Y24`650Lj@Vo}RgOIJ100 Bed.8[tphyc/ d%{G"Pȇ$*Yjo.0^I 1RM|O707I0LĠÀqՂu^I6Dv}ssK>8:3 RJ,b/=|d@;r\ts*5u&D`zdf@+n L!DsH R#1@`%c iq" de\LFgXobvaqy 1F.Z:5^><&N(L`҅nwJBffEVDP`ql\")`ڬ<>JH&7Mg>Ռ&ei "߸_>.i"Q,CdIݑ2BaY9<{gRy BM`I"u>PSjj+k'7Zځ]8N` *rЬ7Ц)TimEDFUYT.lmnLZ7t:iŦii(O QGQ&.ɳ " ނf+b f[[fA ,<]maɌq&2FH3LLvz6Z!6cjI M2b#H"!4D3 4  /]5PLQ%4zWB߭T0 l[OxD}ZAs/HK85uBr&up^1H0@fhyiXEh fãÌԡ;/KD/y jaH9zwϽG0bݖ^BHy`8lGiӫ^ټZ9p= __Wku:цpC{?=:tT*ݸq0 iX_ZZ✗J%߇ w\ Ka},krrȑ#gffOdo{/ܨ'0rceAzeXkm/+xH_xU'rf'bm03>xѴӧMR͵,SRMZ6Ltj@8w9]7M0 (F\JeXy$BԤiB{{HF턢a>~IA'U JMÄ@/~pkk |eFK79 ]mF}o&TCnR؆V@'d-5ͺFL!|q̣xAAsW7~I9p}4Y`9Gy'jԌ{auҩ@մN'yl A d;q2 $U<E˲زj}`͛ZJfjҜ%g3XRvk7b,u qBA(Q(0MiAru,I1`G768- IuwۅJR3m-mFx~Ѿ1x/u~/֍PF^扄l2}Ĥ`b1*SZ I1a䛇ПԃtMM_Te=ȡ4/!=9R !^~wbbرcz{{~=8 d{7iat%wu׍7}UEfS4u4My߽Fq.Ç+:K//#;W,trW 02-  vRf{zr7^\^=z|qc$.TRql)^ήئa$”Puo\ىTcZ˭V)xkk!&`1~h/..ll9uD'݀z#ŚbyQ #e8gTġ(JF'+[kn,QV2\Jq0g3f*X2@!!#>+WyW^yeiiikkkT|", \.:t 9A6px٦F0+?~?I~Q$#Xduk7{ءzYk_=_*ScQj&)<2V$n4`XaJm0,ZV*]׃ z ~' ի.]x͛7ݮ.0DSN=#oFEbQJoˏQY$0CRTfgg=z3gLOOsx,w`JDI}<Pa:s] =}( , 7tъͱ^鶿1qb{G,DڬM;?Y/HT+e۫xx`]#'/_ oi!佾/3>9֌R'D%(G!!VZFĉ' +/wۻk j)(zb@9^cc篾Q)9v'յzt|4Z^ϟiw~s=1yf_|ſw꫚ 㣭ѣcccJ 膄S!YEQoa5j"nP7r?0y]CIY-L0 zfي J-,#|31 9,@)3 N{>|0^܊P cc<{omi8ecE F`~R hs%h6)g)CD͒6 $?@S CsPC*H0<V %$̩ǃŨ9voskgRҝU)[6̰L<iwuK7<CO=XcKmʆaq,w-4R<1M4+cjʄ(ˡ8Jū?[1}?EX'J5'q΋ݙU$=r#;&SW?֤dH[]}aa00i9_'5-l=8wJ@hy;Q9rP(.D_eer./9r䮻u\xQJSO=/>˲'R\v77g~Kͦ??V uݶۃbqzz֭[׮][\\MҘC :_'qվpn6*WGwnp .4Xz˯C+L`!Qe)F*04\5Ac'?2>unl^ ~xf d$D WL͋߾xưBV"? $pr`R}卷JEɉk?L%s*XEH,.$e el;*êa~Oɒe4Ŵ[OLA!MUMJ6Y+'B=}ݻOX0=5"㵤Owo#+8Xհ']Q}"<[ˌ'f:\5IgϞ>}zrr^3Ƃ vr8Ƚ~ꩧ([[oY,k?ׯ;v o|n?YFF ԧjښm94u&''-[g[oi<]#+wvwϝ?_xeQvf_Ñh Ra?s/ OS):+DAJr|Ww+l0Ѱ٧1-Ica]gڦٕK7K);,:Mˬh^LFYG1vB V׋T&1jCؖ*FmQd\j8菏=r᫷n b?GDgʼn kL( cMl8*%'iav-捒唊% WaJ{}cD ZT4MY湙aU*H|M;>=>>7]!$_׿͒f_ai[38FA MQ Cr7/?.)ƐkN켖N: mŬ#wYhU ifPF*5.d7nxƸ?ϼ[Y=jYbx饗4}衇0tκx"!AY<]0(Ogg{} ̍9TnBuwol>/?X|CcBC+8 drsF n6A?jP7N8H"#&wv[ѽiQn'M%(I8š??ԩ/| w8~Μ9cYhu^xAz=ys=O? mZfhA\o3p>nlldF*;uL~zͷx[7a@҈# 22s@;d0-馡 ^rhoa K+vz^X4ݜ0TvKSđmuֺB^v)jkZE_&-BSFAX0@/A4 ^}499݋,#xR2".nw c ) P:cWXq3{+Mʶv2433=g5YE3tր#9Яt+ $xIөFaR=lrOҹkR216U@0Ȕ)b'pO iZ»zR .`<8XUT  nSJgff~|t>|G5mqqq0ܺu+ gxt:c8BoX,RJwvvF:B믿z *h(16ַ7AK#0#Ġ8M9H3)UpI!K3w|7QgF%AACq,NFJrkQ85[PD:I{Z|$<$GAZ$΂ q gf\3 I81> q>ȪM0INq:( fmbj"NV{8L0qdž[@BMM`2 "cΎgyٱO-Xn~? S')Hk +9$fKHI/ &>ęC==5C7_6Վy+]3^$SsәnXXYO#,=|б"Pe%I=EM|`{@\9"IWöL~0`0U۾=zREg8du$Gm4M><:V*Q}8N^ϲlaa\,'Y9nJdbbbTA0 9vݎhta C s3{fscciqyyy^4U#lL;aiT<`L8AZaEL[ hX4  ۭjZ!ZJj99pmNV z <%>[(%ǥ࢞)mȕ$6/xREhr&`u# 6DS@Ґ<ݰViJEnhr}yyrb6L3IT#Ɨ|p4=}ww7I+J$c&yV:|C=t=\pŋ'O<[XX( J#4=ϻvڗ奥z4ӱBNatjrf9vnqki}kiw(΄Ԙ^0$8S9Lȯ%p[,Uak{԰ 10lZpu!V)l+6T@%ɛT(Tc~A{lmKB _a*ehZ*>6 E;AXu0yM kWV u!\~`ɐHe}A2NCw Gۭ͝nVA(Fʸ<`_?cwujEIj;ʊc㩹k,P)>r}sw5a+"%t_^kF~wmc>կ~駟ԧ>O8n4_~Wakv~vz(JryT> !~}cccc}{> !W_җvdϝ^5~<={<7}˧R̹~1*zpisF}w?Khbajɏ(>uW\=v7gVrkz^x8p殓tE Y[MZZZiUYYfԏa;ۇǃ 1:ZEƍ#Ç?a`J],~k_moot:~EѡC )8o'x_Ep8I !m)kyb(oA`ي]HԠPX_^y;j H3D8 LkH DGxcPik9Q^ta }܅3(, cG|'aҜ?9k\>$}#/^Z]^ָ:F'>ُ|죯y_o մJOO=h%G8Wv`l[,01,O>=˲__Wz…z~`/},]9G&'']m_w:'&4 hr1VNo L&p~pe^"&&*ERr|,Tc,IDROlekg"0K}?B05!(2 \st '{Sfj9Wec}yD`YY2yn7 S8Vpf8܍Xilδx$i%mJ99;޺|i \(^}O>췾ۿVy{iL-M$#I$I5y`< ]se$ּ4+&#ZǍພG'` ڢC XK?Ͳ+_[Usss?{֭z øqƨ~vvvvees>99.]4^|g=xG>b(X\\<{8;J;v@wAD@5 JXre7o9=oƲG$Kˊ$& ;9|Ύn4AL/%-{n{jW}_pЇ>z~˗/i::_g]V| ZV@)wxXp^(E PYqY ?4@Opl<^Ͼpp9_N$C3KK??GGOp  (R`l6>+'?IBc=vС{=y?x<V?'N(_h`&( 8@fXwfC3e҈hcY>6Q:c(qr}xG>ߋ'm+BmD!63Vޱlסed%PH 3 _yAF! (OERIVelh W$E1_ (6@ e(Ər}wݺЪd|d>^]bQ`2O+)Eg 9de;,@'8< p2r$JNOD J$'96/\ʓd2j QYkm'I+X\9vfj6KpdeQHZ^[pܣ?t$sWsgm >AkAzEpCѻ+$%ƲeKSvl8 QDIfy*@ܶ饗J5d2r (Vիwqd2|]wG?| Ilq/x4 |.\Bq~qqG=}} /Ķ}…#4L=K~|JۂX^+HŞ] JcfJikjL< Ƽw??0iKEEҊb iZV/;vT%0\r2'}5'}^3E˥;I<7{:}Z#(&bL!&Y-1y_\x |i}̟f[.6d'=sdqqykį\KZau(m!.cqEIj*AmRm #WY2(*RcժVAInV3[3"ߏpu{us<抳x2\]}.TvԛHS9QW}6boqE!*ڕ$f`wDnOl @S}`AE toX-JR ,J&`0}---a/W*pyj9xg];'jΝ[\\|饗Y-W]yx}H15bE x }nqȶf@mh &רDNɕc ؕ~Jmvqw;^FgO\z}wLz(€'^\4OC,E\DpJt9:LzQVqª3HFdZI`paUDg%tk֟ߵ /_jf<x:I$/s(5+pOgfqG<&HK=TkYH\<^2D"iG,=d," EƯG҂̶T=U>׺KKYrɲ:geeRt:o}jj_zoʕ+g=z#G!q2]y9rRzĉf1$)od]\XKc@('J7#ssE"X6Eܳ(,A]xdtoWov򭙥nm8wz_>QbPXVh˷(!vP@Ω5+vf0l׃im/#$3m3 d^"j .+ G5J@PX"JFӚgw?x'8~Gg;wqd̙ngYWw!ux Ϝ~u4@rgW'+/|(͏6ϭ/STw-rǑ3\^?Ts0"~KrΓƳ(4X62\!a*FVP߶4M4@&( 3Do~~ZUy;wC=jC=e+RV>|뭷r7~wBH}ff <|0B(Mzn)q+_+{|O[ %"/R _DC3ŧb/}?q=|D--յi${݈M#(d6Ldz6].onjB~`0OR!!zit̔+Jl2c\˂52$Mҙf# z8cwzKZ?0ǜVcN੄Ppw.kuo8ȿWFi!i~7q_?#>5ivq?WW"7FC*. \,`F4Ea.]|% ] %qd6c'Bԯ}[r{Jw}_zuϞ=e5hj1gΜ|?drԩ+ /ʊRlb</`0 c`67 jགྷ56Nkkk0lB,}W⽵V'<:ye{3'g˽U?pԊ(l7?t}{\#7uB5.^~Z;cGolo^\}lG}(xȃ%: ĠWƴ(49ߡZv ל7Y_#)뺽^RZV,x⣏>O}O&s-,,s=w_iBmuݳgϖdn}gF%-2BbY.Lk$69vEPu^ k IХ-PuYU6,(Na^L& _ſWVVJ/m>, K/S?SۿwޕS?SB|3$`hD,GZJf$G[ZO+VW^]UۻwZXza>x 1 )tb:1V fjZW`;_&'DA,C 4t爱G㵫WO==iR!*Ӳ|7BSF 8XYHI" E\zřҶӜrGʛMaN&9`ny/{g׭.=G'}Qox8.~/koY땧[sٷTVv;?8{o3؊Cw"{ Jȋ"e[CטvEa4/_QZ3J ΝQ7׆GKfp99 v:&xYbIKȩ+{~x8x8?U _ߞ3Jr!{6ԲjuOiլSL{zzlؖݯowgΧ CTG0YA%a^%t'B'"-;N DpRf:`(ښ_x߾}vmnnwx3gC)^:|u\ `P&Ex 0a5Z`q6M~=K#GOz_=3>޺{&~ﰶ & Sibr^xN&)vW=$aL*W,SŤV;y$, 9Tiy'M zrڿWp|Nx;U.o>{jгX<O}aӆ\߮^exKF Z&pG5!9OZuaQSH jMpٶ˗{p4J7}͇ *YR T@XͳwG}WqMMM]zӟti/!SZn8,?jS")%A ]f4cq#;@;`B'Dko|Uod)rY*KSj(JFy/z؛] ~#bS 1*H(Q27W>)sSFҾ&-?9v}n^k~?}a\f]5-Į[):ޥ$ざ3g}*GG1s|*dA LpMa=wwÍ.'+kWm4Vڳjnl^=d|xŕa$Q*;whntrB,t$| YJN۶-h(2PU±q Bd<!9pWOF3n <(; o*%4˲~G#u؏=GtNel4ߞ>z2pc_~ g(H4RX۶/S(S8a}@ nW7, òWUjVO.Eˎ@keӧϜ9i$!t'* y晗I2HXa'2HT0$G s{8:a~Ҝ]+÷_:xlzy<դWN_?[8TжVdZ*XHe˜翰+A4ēE*'Bnӷ J0%@QlqGޅh(^;)&`14>9w {!˺ݮT-d)Z9B6B-nQFŪo^u)1*_~U^^`i<+Lߟq._|ɽ{^tɶ홙dro fszz{`i۶S Ip1xJi}Fܭ|>PhϹ5*2APB37YEk;wEZMQc\=}tR)c3unfjO (?RMe)XKV(34[kU%} O eDdl-7[SVkzn1dn?m; 0[`H*LGBc[mQh3PVNFok1G 5Wq{=/t[^l@,"-I-}gJɜySq57~~?ltD2KA7BWS*Iciвoet Rf@d#5֌ vZ v|3h1C_FBQF4\˵1(h]ߵD1=?.^0&KUm^_xN=kG ! u*(iCfT 4@3"$ƶ fqIRcm (!ߧRFQ`Ki37CRݻww}a,Jg'I2Lu(!eF{Gx< &?;o '~#(|¾,ˮ_ Ao .LHP;[C4yx|9q̉ki0Auy:& piTJhY,+J~љy \fK_m{.^8 fggB rʝwY]nB}O7tڏ5L4MvKK(=w<l,IsjI$x-۟G<~+GvOy$T~ @ f.r0"=X,Ldx1玁Y=\m;i'P(A'*PXhNƱPE&2ohU)qu4Fɚ֫a=&#?2EW\x$Y ׺@< ^K(4IMK,d{Fjat% ت SBsyeN_+cv#8y=8njp,h}/eas3tq)D۲K8lekWm (҆Tu섔(5O/@-๕0p,j'Y"rm;t0y^|=떖NEQڽ{wetT)y-㱢(z,[^^>|7^| Ԇ8RXts2FXwZvvFq4ryy8Oq7ol,7ኢW;5JzB$|1`R,5Z*r--E̷j7t*Hrs}>|)hoȑHyzkUkaM$XxJ pR 2tW;lF<&0K(NFmE&y.Ydke e.'/必 f~9  ʒ 2V q,=u:5oAo&@kюbȈEԥ$< =֪8(Jy@b+m=]2žtRSƸ_s֥L@?ydY  a"oVf1diJ%y4|:6U"cfku]iIFTeݳ3N{sk{m3vxމ*bwHO|5#T6LE֣ C qlƣ[r,P;k'ڰ:P-iGXmⲴ/"{K;r32Ez-ĨE ?^Ik>Ol??;\j27XYĈLO"QdZQɵ^gI.lSy‹Yk6~N(Lbe`y\D/|3ky @jK#ǟܳWd߁ v|gV` ;4r K'̶u^j߲wAJLMU@h^(B&&Xh>S#XIyb鑕J˔ꫯ5ӲE(}L};uT!>|8r-Q ,Ȕ0UL&h&S#+U4iyڣtaqSrN_ m>Nq(?wz46& ºPƽ?v6'l &4Фfֵ0|k\*!  hZH-ʹ;KI $'$D@F9*J< ;/b!()i"9OAjUmEF`B=M&! cp#..SHKf)8^򕵵#{i/=|LicaOU>޻~[`Mp)BR%So674b L Qqm9wzd,w-R:&˝؁]{j2Γtb&r4(|CV4\7^?{zmmF766$IP(Jo7Rwĉ<ύ1JV8JjnhE`}nmGCũgAli)Yh0R;3D2j/@C[->ĢNEb.0nhowVc86d=p,$X,wϲ` ͢$@L_Mst`_|HPq)dV 6k~m[PH5޴QunjŶ4IO/C߳ݍ֟^)~%Z )8 7XO^Q8HUkܳ<فXJpqlIV@&*-FX[63(\r02{P}uH(r 3ID1l& PQ%jp!3f7d·_xL|kkZXoO;Iibg1# $젎Rp<c3LPB˂i %-Xj!9bvg=}levZ8K5EQh!~xMUZμٸ~M xM BUlh{:v&6nMYbtSX|/~;if<Bۋ&mlFXX5":†+ OXV}[cq`giǹ 92ɣkԵ,XEiV̀-ylkzfr78Pðr|fѣBAD1iCm0'!l|? ;+Wo?z4ںzge86}eM2 Tp󬟥y$ame|!xC Aha)T]1<” TcwC>34`,ɕȵ\{:H:kgE|);JW'$[$QJ9Za^'%s=c8PUfڍg;iprî^,:xzQ!Q\"Lx-e})#vE{Q,uʕf^(G ©qרin{eUqqDeym;X۔`E&ڤA.kj_I<v@tYԊ{@~S@^6a,]Ƕ87ݶ41 pUikma@)~g!j{_z3r@nz8oX5WD,p8ͨrQ{dīRṁm۱%!&u$e<cw׸w:M?U ]s*2:c31,p2l8_LA;JSpOP@Z;i]"w]*nPPSpQZyL)kVM‰aLAO=<[]lW?qzҦoT[t3 +݈#L=g( t\0]vX>5Ӽ/,".ɑTs/-IvMӥf 2Wo5+U+ Iߜk&p,z㛞Qo$?u_!5.sÀ0(Q@п_懍H4*+&i b8C@q@rr~=:/idv{mÊuԫnoݘiaܫkӋ+³g+NN;i,9S-ӫJ{X0:{K[_9wL7h=&a[oz`doͲ% s"< sS&k_WrILZ[(2_@CRO41 p䕭2B2*EZ5!7ڍz+MB/N5%s44³ Q vNEt mQb@8^9H34n/mDzs|-2#IeZdV{m,[ӮkFqumkgFU̍A~M#[>y/ή}xa1'QXܢv> .4ӄ$*͖POqyoQPDWF7Y=p5@wO=y*Ȧ^\ZفA/P[ѹw?[qU9[?(+x-9^pNvLn( G@w,v_b@Y4Md )M{\pUxDS>1 \U 2Rq@}-L'L_!JzPd;߷577LM׺љ(#D )lNO}K^&#ޞ bpsӿ# I.m۬"!#EadL6ODĥhqM K6|ʙvնNְB:Iف~-tj5/c?j'N_Ŏ}mc\o͉UdY7tMV^z-8Ly~ 4 A߰`]i *s (CB (9*4鉂l`50cKw/Bk֑0Ҧ4f6FKQ@.C,QMDM(%i.x&}$K/|K􇰈0vr [lM88xWtfv/nkz>(oz|FqW?/?-~?;|׃vm `$a[/o0YLIp ҂(ݑ]iJWc %y DHstxlIb3I}PЭ̶ eWҭ7 aƁ+HY7b ?}pf*3Ld5ЏS'^g~6Loj=dgBWN.`.N4R8IK-!#>xBx{g=EGa%E"9UPwwWkm 7~/fէ۬S3solu.]=wˠYǣQU*00XpnURBઃgÍZ0q];`e =ˇ p7(5U'b2_d`p) DʲqCFx{ o7/TX*D-2)W[ ouRzŵK* R;܋, ҢTAӄ\,[36H0i&ւv-?/] |?gH|9v#GSdž~F ;<_12m*yqN~<886ؑRZ;%L⚪)q-%ȦJ(4lA8vՓ\N:BB -%8 e\D ^!N8 '׻qrTT '<N CRr 9v4}BZ+6NU(”U1i'I8kn(sGk~uʁpF'\mnm||wrl\p}a躁q\DžxX,fGVpv A-Px H$BDJGQZMF1p i憎] F;0T56`S 1; ol,iڀǐvT&4ħli0≭8UԐd Τx mxѳ,PeP= aH n(p] H$Xg\|w~wm=o H?|?C?܉QoHoI:hoqj&aA%|$qs!3%ADIU#䪾dՀ`5IԱ-B Ǿx0K_>,֪ 0i<6?grtc=V<FiiPǥ."A#%;|̮NpNV]a(]tEh2! G#&be 30\#e0V1mF%ܲgTJ$uYzv8Լv] wM=qvS?L?񅽕ߙٻI FtӉZ "?V(駃^vFw uF}op\ G)1 h-%jB&<Jk/VZ^ƯkDeGC;YghC+k# ʔ V9Og #Z [ѡaKO%W p8ܵvk6YhۜObB@h* 5>>RR03ɡ(p.d"tAmk!`4{5wzZtWx?KP}K&pIKyRG!a9d{v&_anV~_hD<>`;ݸ#`?x4Bч_'4b5ϟ|!LԲAÌ?Ҥd*G%_8⬳#66_kqbQbiRS?pܖs9!]Dz^O-sqrImqftu#Px̀ØL ,J1|AR˓ ٕF4J;3٧ќCǬ;nY0vܕVηB%UTc]3w5f0ӪEqsi/_Y)eZIw{ r5f6Qx3c3TnM <[E#kyTmfDV撬D wv|n 2kr2soY?쩇&A^YoNꀔsx+WF, זWBq/sU W };66,{ .|cYN=?7?l~v@)Ywo׏q_q\o^5 ɮ*~fmkzXX[NJ(y]S>w~ޣx8/wЭ̢KJhGڕûBs-BHZ'l!xX0vVʉ$N&i$l30IZ+{vzwuN8^oYr<b\|Ÿ[&.ooozܿ JU5J|լgJRUiqK.~ bbw(sA=N'e)C:Q0&x÷vX ,_| 2Ag!ah8}ipJ?Dɥ$ ^3HURsߑ_Qo|M|qy{nuvkZ, !8$$SVƐ7 M}緣qPjj'f2$;ypwwa|iM@-<2V+! R = { Ná:n=`hq.p|FVoJkP.dRjL0z~jw%~(ğj52r!%T5e,hQXJ[fC WAofEO@5Fm^"& inSBq/q9F/9mG#Gt*ۡz)IxA\ț0±m(oVhAWY.c?orUͪ܅xmҌG Tk #%o.r}Bom dixv"7d-!o!FNy "!xgS\|I[̱0kڕx*B ^>(vJ IҦD[V<ppeHaF\B |aX t7RhI,?ݞX_WFbR\[x/5jhy+zEsSӵ=MQ8Cw,>IQ6 |K*[}vz_Np)&T""gȕ ,yQǨȞssG=k=Lǵ)gV=8f2߳p %X|L6Zʒ; 6fy0iٮeؒs6[D;I\޻ Q%&P"eRx.k~>)@@͎oA7? Sa\DJ0`@-셴:A½ u'@I݀ilj~ne`vz6H `xn1w2қ룹91gqL3(+Y}޷hV\_3q0%ajvqf+ArRA><5D7=2.d.#ec_]ܶgUm'# rNW*`kd[n*9;dص暽W*[q!)(8I䷦Oq@ sq(^%`fAmӿ ZHEIddM&`Բjxn?~l{A<{xzGcO.V2emntV bסz0VvQ&G"H#5^N*$zBxM՜U9R. }n'*rHZ 5{ę~*t_;T;Nx4Qt׆u}FW<0W[hWBכk3mFP1lhZeNWzNVѨUކhkUSQ*a%Lw/ prn; i*vV{{N}Գw ~mbL@UaSN3UXH+apɍFؖ9tT 2-f/L3?y;J84oL3$iO*>TQo$jW7 ǃIJNzI>n+B?ʕ&Ar3jζB9׊Ӫf-/]fD(E]<.Y @k`Gt@Vwn I8u&[iȦeXت4P};:ef;&FJcoj{j(N^x|uq߬AfggМnD'xzdyxק+];pru-io &;^UD!L 7M;dL<XD5*n2:, }c,xa Y`!Ȣ٨8جKxѹ& #4fk5;SAྡ,BI55$*]xn2bjpB4m1̈?fےKE}̆a>QaۭXK$:)jnfHiT,Gq'\`%ۓ75ۣEa1f;8Qj489RDצU3&۴pko|uKY>i+|`ld B@Gxp0'NAs-gȦud:XM E#p7mqP3tgW 8sREi"-pd4IH Z,Ϙl+ ! }r( f&LeR^K/\d3uuTCkE sE IOYtA,81ؘ$L$;:m-eY[4SwZG,&qG@~%^DV1W)c(CϵW9 Z&2l 򏁁mxfc]Q?HI8(O-WQ̥ؖMHdkx alhY^WVW;qze2guYG]ey I&Y43<2r,*A$!Q0XGo|cIeqmffp9uB($*RSLO0 HEa,I5yH$IdDE֘І΄sMݢ"ʲHxN/-ZgUJ=IHED!`XmJ@P1C*Qd2l3۳UgZi'SB;spN.ɩkBhf{szp(mZZ#E`$L"R(>4CQ *Ae 0Bw̼x--Qjf(h%T>IAn%4\8 [<6x;'R1.!S%qe~2SvVA?zEi)>q/.j2B P$cX'IMcDr:r.rm.yKS#Vk7 KrVMM;l \!D`& EݿAF/7ם49#7}NJ0a`^^\A@G8&x ^jV"3T1Ùh!QXjHn\%JVELF +af(&(ҟr)zFd, +<6QWo5ҙ:0D- ځ=sRv71.pDUGj B7Dl6҄Tg#p%R 5k=-]h^/o^[P&ly7(k@FWM $H>[>o~7o_F}z 67Ek}+{nxTʄBB@Mt8J82L[ i!XDqsҜt[@NrT8iC8C0@C(З-شZăSTp`f]؃q>wXr}yCq--Ɛj-ǫ"˥Dd3b| NF}6͋krLũVkX )|ow/J\Mb%`FP[Zk*عn)*8:V}Ey5/ތ:cw()cFѕ^ '&V x32Zual8Ej(fU6+("ʐV6?ڻ'aշw 5C?hϧimB*8hyy7I (6'z$lD~Z㖅]ӵ\ I!L!GˁRuV5Vq-.|Rd"RhQB~w|Wx: qo)'3˲HLo3(qhӉmjJ}]`bǃRmyK*Qq +Yu"-]<*RCR $[{BlRo/'FwՅ[wff ӓXx{YzoLo;][eI%ْ .`M8@0K&$$¥04P$Yn;gN?_{};3]dY>9g˯Bees+Q0Dߐ"ϵMGKKyq!/V}f;mUJ@`$|ùLWa0(+h(Yg& ?.0ƶVfRIL[X&JSǶB+qmr#;(7p\($۲')pRxL;[=8ސ_ƍbd/PKL 3t}BPތJ 7%_(?54HS$ Rp8S@^H'1.TN!)os; "W XD@^#l5"FI8Rj!3 F0cr8 ,:v& l,%tR2?4H8J덎EPyR.:^/H!vܠPtl&Nb$@ L@qFVf_BMYߠ~AGj|g\_@fC"̱16s@b.EiDŽZl BYAY6AL ,*NU 1$ 8q|0XbeJNiVs_ߦD;Z Bj ʒY#ŐVQ6Y( *9+H+"lvJyWՕu)o7yyɔszj8TxhZ !J>:9Lje<-J3ǏXՎ0x57Nl~ЖwOLlU+C!}0!з$Nv]^Ǡ8X 2!qJE",7!l; cqO&V\k6̮X&dAL^Y zcd7CR_{Tr)8f5L2+>ܓf/^u/-I$^[]HYYSG}Qp>_{eY|~׊֩]wHʴ8tmA?a(;r(hSԵ/` aJڄ7SxpY\f=85d[G9Cr'#uZ}1[*90aaT4?Bn;&PbR6K_ۿTX`3PFZYZߏ'~Vd.xbcGDfZ<(VԙYܵ!td6&:fn=[i\)l1 Y`Q +++q0J] Shh+gY^u`#a\RTR8 LlFp#tg7?Ueayr8"RTT$)kP6MQ֟Z_(0<+@_g@8 'O-(e-B@, Ԣt(0`0lF΁a-eTӵEųgO.,i<~ڇF R%O%Dfk}PF/|Lq 25 -lΓktK6_d3۬KOO`}&ρB F*5%~nU"&F9usMZmkvlq%oEq&a37pSO>X4cJ\е`clx %f]\H:5m%(CĔE:`336_(§{FDҹ(h 4@8\+@l GII 4Zvf P5f6!W&v™o=24tǘ_.b ;e10}O>vq)( ?=3JSq@fHńb( w>@sR?@ BLNvH20$O  wRqM'hk6~AG 4<}d`s(B-4N:i qyR!.y Ijƶ8\lF; }afeu$'I>~Б/!&׌2܇tk CK=|vwvbZl {c-&UɁ缂b:w݅7kE5U I 0A@YyzPM=/)80r=BIG$H(+^S.-~ۚiɡ͆ E6"jeyn.,v=̢2XW^(ž$F US7 J YU 98R<'b lLaQ򜰿vD~!&Z KCK'#̮@:AHWtt WOOP ٬infɦRF4m\ό3e& -f )NX(Spȍ\XTX🝙?Z5S=7sm$s\ԨCB8aLZQQ }\֒`))hZ-t-RA`r% ""eq"+yY͞$I.a$6 `&^q RH!ë-t+_edI:7b}2,0MzzJ”`85Q f#@D}vҏRKbQo |ͼKswı4P~|WΗ*(NeKy 3q$cdn)_F x m͟gBoi Jm3qb~3N+㻿YA& PO_wOȓBưzcÃYo/L 0h/) ?31iu"֥)&kjfa,?n׿V*N mSа9iN* BiZJDdʵ8(9ˈ `\#^( -A.d_⧄Q/Kh7=kԞ~0 Meڻ, 88r3o 8WTQo]^Z:3ZLQm#GgWE?kh酙ٚ{߮'g[ =NfaF鹳gN|۽i&a嵵Ƈ<7 <ꃖ4`^89%=7O$19X'ޏ2Gܠ5ꦩ?1KR ^`6데רa"bYTk乞F XM(ÃI")dPq\cY\}{X* dZs5QA v$^J؜Q522A\1ϊ%*S}cocJ9(r?7߿ld Lw F|MѿC*J3c2z؄*j_I|&+pJ: lWZ4N @?8T۱XW9uZNgO>xPHx9N;qϷPoͬĘE(n~w{^yjV㵴!"1ҙ+@%){*R2A =8^ :_@7ap&7?yȖ"%]0lY+)ɅţkysA.-ʀ<820:6}'^۾{{RÁ;I }t|օ;x]+ ^>]ֹےۇ h!X\d3":qR3Gk8zfɕ\/eVi}ţq1FFofu,kVn(NE$(khڹ ']K6ic9 ٽض-s(A(,oYH*&on{?o_(%άaVYEx/Ā^P@ &?6=0PȲmu\-T7;a9~?axۍo:svs>j4R W#ƮB$ . Rޡ,ToE*Vcwq+6xSӾCR4D"q_gmׁ@AIӔI/n :H(ac1 #)S}CGNqЎ:!vögyNu;YcgO:rxD'굻a;IZM }l%0ηn24eރ)(2V|*M#"4CHeu{glI,N](n'Lz5ӈ aH8oЙq z'r&DkFdI!1fuЯƗà R`JH-fm.Xm0ERr{Kn/6qpH^F ^̹[n6tôًg([`ƶLߙe~foA3;\+ ]fcHW|#uyK/'?F^SFtor`ț iX]{r_߳f(6 `#p P2Au)gXPEJmm'BŜk-ZaS9Y^)*=L^o~l$,N. . x8+I]9,Ѡݠz@}Wmq+^މىPEpg'A-ul\6 =y?~.~^2`jc;t]wC6i-$txcK9M&aYVƌ$ȸet!%#da~ю]$}zШ,'\DݐRm/^(0Y}6>WBZ؄J\֯0rPWs&O~A?Mnp$`e+v ͻ ~p~68e93HCEY1Zb(p1o=f#J1B8ռB!5mcLR@X[G< 6U{Φnu\zo/v),]aס7's%ӲW6x)y, #~Rտ;*m*PiIO$hjHJE |/%,BE!u P#t1{tB*ض-°jrpO0ԟ;(żX뵷"}-zvY@DB{Cು<%![N8V%#v::0Fxü4^;#Kl@Bs*E/|sv;=#Oǩ"zv:+axۘq>[]זQ'+V#[9@ (}ݲ}'QHts>இIڸjCΑaǜ R8sT`XƎDQ]f:MgbZ I21uMjůԼT1/98>{*Uiq.?|Bv߳m/K̀ /xNmwdH^0ǯWy?|ߨp!ca-,@&RN:Ym  nF+u-`P4QVi5뽁\4IR:U *Y|%%d\ ckJ\z|7<0"Z=ުo:p}(:LLSªӬVzh$Jk_KU.uh fao뿨75%Ff✃ Xgnx+g&(lf'Sv04}u'PR\]__o|'ѿjVAfRXE,38nG AYT1I7FJ./6s>uB4N F-, A\p)WnH[aIu~k^:qĹU'Y++|qg^ܾkreb\z.՜ U[}wWwH]LS:V-}VyIW@+5x#GDoX7[U@hÅO ,$L"%ZicgRBI@\VøKYM"*3<1:8?/w}g|/>̹ BeX5V:K+ 8m.Nu_=8+$* {9n&J0[ci#hxٶ-BWyzVQ~sWodybCN~=k߄*>Y`9aYB&@$ße~x8P+eϻB:D*.cNS)tJ@S1yIPA ϶_<;:Xr;FjF;~~s><N]\ 4ᮭ6@u#W@*7.[f7U _m:K\elW}H #bw1<9aU^M3'oKRJ V z0BS)Nb5<,}aV I$_ocF$D*2 pe(&Z(q(M :06Xݹe]]ziiX:*l^=̹z-vdؼk3_edhũPt58R*W}h>ٿ|`y\nwG"\+vH|]Ce0^n7NXXi p(=su|sdpbxisko;^H~2E~|&sI:~zeHRRۇœrc`1tmM7ڃ3[?x`p'N/-vbXI?}~e*K/?Yv`kA_2d8S*Bhv&\($k6 AFJV 2:HX'<&qsnmbv{qu¨qt_Y-i%p_X;ѻ/\h]%3;*~gYoοc|pISS#F롯<'2z _s\cXcW7|+¬ki0`Q/{v)3Ȅ/,jg:{8RRoD)%6Ļ?Î.G5 |;ۂjg?¡Qͬ̔RI}rt@&wPjuRL{[ 510 2Sm]&.; ӗ2[c0fnΧ^X ^%ZD]S|:힨>|t\oy/]_޽v(\XItӉPa}`ޏ:kКsÌQݸrpZnRJ@D|Po0WQ12Z]l j2 \X8^TR?Ry7B_k|%LA(Ge{HAo4 1Gi'I;<&;w?|cJruP98FS BoqKMw}x%Y\>a+J$VK:gj'Ku׽ҌJeod2RBY]hzO[Z*/\ҥ q?AƵX707U+^)kq $q  N,hWKNmtsZYmYB߶rG1dGj^'V\ٖwNuW;ҤdU2QQ>?\1$M}Vx ͆R|8:$jك^+_p({%B O{:q4k ՁRE%\ [uP/0Fin*I9x o 0Ɛ\i[dF)U"0I"Źhn rX./6&>TB9b{_YaxǤfSiˢk#].k]C&绫1g0!}Hz<y{d.)m;7!Upo|pۿ~WmuTj\7WڎQA2cZ>v\+#  EɅkVOx8#5|Kʶ  i##$cjm+i-[}{>KZw| K˽|(8H'69J}z߾.8F"GӡJss+ IKF9Ϯw[ ֞Q Zk{]=4*zNIQk1h|=/v+zj['5Қ b_PS\K&-UtGBiϳW'NU[z}XηbD!g19gc)/tk.*ROVK;:Jdꄑc}hrzTSG6O5"0c Hz*dʹ~,Hv(Շ6_EL!SȚ™3IJ:HwXc܋n,v1Ӌsm[d-VsmҍRXKJX\'5]y6|c%Ku'[JV:8Q+ZQhpY`K8\+ gзw.}џ/A-.c$ LtB$ dBX!c3k.E9.2 qοN%Eb?LS<%a*XLNR*yZ5]X ,l'RN{E$%yjQ8MB@!eeЇy(|=}Zs#h??zӮ!A65b Γ4֙'XXמ:£d baWDYh׬Jg+\O/rw\X-qL7d#JR#㕶Rr?$;E'p%Xh@{ WϭEh\ 6VP:GlK$CA7c`e'Ca5S7V {oHϬ]lY^`Q*۔@TYY@e, ʳaC6LXhJ o Pmp3lܶ\^#)\B<ρ'ySf[^-뎹W0`becXuQwW䃰_B_52)` #ˬ}+uMJ8i4+++N'IZFQrf7<"?>{l>Z;cIvO͢JuFt8bqnKBrjZ(VVV,r'B0<<NS(r jyB^ 39 j,YR/TD_\B[`7Z%am| ̯mD!Hr%XXc+M,ӈ[h݉d@ *-V/3/YJ@#~K3Su`QBljzгg\@Y1ǼzIҾFXFRxWφT*fϲ,)8v[o߾l S˲JR-c,MS)eb(\]]=r!dll^c05*RZ(4"EZ/..BRh+ƯzbQ#$EJnɍ,vp 2<ňdc(ţ9R8b+%hOo &G}`]]jDFܓĕB~+ J(^F}P(|}!)ŘnO=X8DqƜpI_l9y̅^:=.?M{ m*wVg(#ǖQPcؖL̹لrwl)]eiZ+ 4N2'Hf̀f^¹DX2JmY !lƊsw_ݚ/ z~ɻ`^Y:Tp;^V.Jy挦 痩A;B4 U~0꥜E[j!.$%1*T Ó-ɧ:"/of@!70gOc{Fq X]]}OnfH)mnZf^Ϭ|>$ СCgΜmgϞ=sɓ'Y6\u``ጕ8fysmH)O 5iMˇfqB2)=wh_>COvԄ ~&A0꺒 @A-,;] |SyAaiS1+$lDEVw[y)urRꦽEyšPԈuphЩ&.o6އyG;}%R`Vq,&i\ʇFQt*VʱlLk/ְ*u 9=cp͂m[ DUDj_\bH=,o|sFg' l^~7kk b颯eD JSid?"`4^\m:9ݫ AK!OP9%UlDJW0s1}s^ΆaZ-PJ}oZmnkuA,1;0\ZZ2ٳeY;wgΜٵkWm,^ڶE缿Rp_z F>7O}?cn!}-!PʕPrRLLZԔǾ^iu>E~;>%I@ ĵ({d!o ۟~L&ɟX$4_8bfk;4Qӭ=f[n;y`)f-nIFۇ8>um(x+Jc[eϏsǁP!J(\o{iVVVWWg;ƎOzs_93i#4a]x3ϾZ!(0Ply!S_ f9B$"Մ.DL!(#Ae<a,T22{[ag'A&tNx9k2uD DZI7(Z{وȬ0 Y60lfoA;wnnnnmm-MӾ>\=tЮ] 0ӧ)Jeݎ<䓝Ncq\}?yG) Z.XQ(L-㫑3!^L鿸M:w~GN|w|g3/th՘8@d6~2}?C1 X)q#ҪfD[rܚ+jOYe{ IrHheY` cv`ڶZ2aƀN!M &r|[f[gbAvff.x tq3'{y~I|f˂L: 9 q{adczjৠ,T\ 7:˸SS6\EHLU۾fJ uMX3|:Y@qF~aZ-S~?&O9dݮRqNSaPlx<|ZdwC߿߾}gZVۺuqӧOGQ$XRYXXmW*cy^.v}$8+'K1l`Nd>)D%JVw @tۭƞ{\.()f.^~'OpCN|"O0 3A& ]Qfy׷0tb*ԏU!i8vkuuM.fd%zX>}*ӯx~P A9ńfVc E HԌ] J\kAۍ,fh cVgde QF{a!rZ ?3@D]?{KVXi5Z(T1d"T 5DJZ/$[y&IJ9\1')P&IbD;T˺xbd4ˠ^B8>qDvֽ^orrrddСC;w `org3) Ν{'xxzPbqjj*I-qs]@e8*n.`C)?]#{wJŹ8K>P~Ď/[^0O7 ?873ױ|aB4H nKaG(Egyy?}&ʸgm?ͪH]<ÊHQHfA%huB2I}Z(:s9R\Q˽. w>07^.@ 4uDBlah: ÐsnZ]&s4Mmێxmmt岩 m۶ !Z*.\0444==mJryhh=00K/}ss]7Tx0ƸZxZ*88k"D~4:6J b?11__Rr7B/&I}hs?3Ģ?#? 5@豹/.&إ&6i ?}leOnkT߲|DPduI'i^X>Xhj_ŭ}?Ұj>Bk~1,EqB c"u>pDŽFf lQZ.TNŎ^VIDh4?lFMmB*DZ kAp#p]~Dwdm/"e5Zly2$ of `X+Ak y[Ib#b~J DHwEltFCJt8FQdbHZ2[3m/^///K/^dMLLZ-B 7pAs,rb844C=vO:e roh>|q$I0Vf.U;ޫ/"ˋV FB{yb12=0STHYn+|1* 㶷ykKٞ<XǍu4I%o.eHڌu:XH?*ԕRFBro3(A ] { +XAC +i!yFS,US[B|J@3i@P<>h6q(j Lk%M_{;{ؘmۦd6B}qq_dAp&'' .8l!^ ja=ß9 v\'ՅO?|l %]{?wmYڪ?GяP(j'bKmo ֣׸⭧|VJPbu ;daq.6s=s0s+8$=%TrN/.mst4Pql[)ET evlElqФs ]RݨZJ.x.RFpD5ڔHEJfٌ:0,ϐ@\LZ:`Š}'Ƃ|I uȁ^LBFj6$IEn7I"QJO~fV!*ʶm;!d׮]+ fG7 j:88}cǎ?~V w][=ͦcccKKKmERIԜ?˦] 'OǑrsq U Sӏ=yЯږM50PWR y( -VV/?~y||;Ut;X 28ѣGr[D>'UEmP86evuKRll+>]?gd/yP;2`̕9q^"#ASt H*&tf`u:Vլ7ʄH] ٌ˅ ׷ b7OE#=t;8j*J@/SmnXm4=,$H)0)-H^1W !5Ξcb1B:}?9!6~ eD)eYryIf l!+98?$1±!3EfTwZ4kdf%+ltVF` XՄЖrE1ML!@wO!pD@\JJlkua!΁k&Y YedJ=!q3861URd;v$֦`m&2 ={ضOzee[n `ff鍊n'?iZAx邕+@&_@ဆoJGDPsJH{aOnwꍆvms*8_t(Q8N$(&R p9lZSC{U*(": %M=B8S4Ҟgݞc{%yJ3/5aAOB2 vFLDXЬ#"3;H!*+8 .f=3p`P 8χa/|7aqL;ɓJV588899ywJ%lN!),l|gy'[*$Ncpf-a s_F_O#7oý2@䔮ӧ Q,WL"gAXY;O)9ώZjC)kRnٖ4m*A]Âs*剖 R8:(RkXld RKsH&HlZ˔ -l7J(Hd)U-;D̆ TLj3Ϡ${US?x۷owg30ɀ7ae`;Zxlj'0|ӧOyә Z!Jx3!/OY04Wv1_zgfhBe\_L6B l8'~Kwh؊ݍ{+젝x_(e_29;ya¥"Oc=z;N,U0ܶW_ MSO<G $* 1R)78 gLFa鬴lf}1jrYc79&ȄFUS.lb0>9;wr& ;i(Y`+8`7րȧzGŒseC߶1eY9ΘZ q/}+_w]@Cc !LI|RQrZzhʓz٨ agΜ?;}.Jz>82<=3-!VF@)ohFAGQF|y ,}ۮM9ݱuxxj.?Vd` qUYPEq ep72m#BH׹M)1W̧/.!`Ir];bvi::Z=8a49,dž&B<#6{Fxfiu%z/m<>۵YFll^LX%`ZznYfakYVA6</W<سv;`90yʡ32fڙ学Z .~7 8 =vbvH\Zgڧg[-qԉ0Fy׮n1nYOR#FǧV[]EgY`@of'|#shhHrNn wY'EZzV9+ z#Ngll1666%v{ffVem[00 D9`fk"S,2)rXt:]g-0 ٸ;4m6###Az52%«>DQ`AN^pMb  J/"K!TWzw}=urO㧗W+>3[`HCeUN ƕH D4Ng璝%3ƫcdY9Y25xѼj/s%캉/XS(`D.A~wlwז8|^"V2ZksAS+I"=ynIiӐ"u1C#aw4Y6X70/ON}lً4"5Ԛ򎮬uC<%J5BAzcf+9PjQ_-׊gyH #;k_%L; ǎ4aٌ(DsOJW}S[~ߤu%1iŧy%B[~ |sP2 9\:v|盍A=6F 6߶, E)90&黯߾2:uS%έx.(}屑3K6Ȯg_//o(bKgim ..."$VeveX4sX,={LӑS`)Q#tiHg!rQUA`I@3ij06-=K|ѡz$G} Y%6,:BcNIB..2ŋ3} ʊPՃuꅝG{>e!Wsi.'塂U=[s5Bjz-2333;;K/Q7sXu̙(:NFdaahyv|߾}<@$Id浵5Cܽ{wV +( J%~RNÅۇyK= pRJjќw1H10˶xA\+O-qa?g7VNnN5:PmCǎ߾sJZ778 kɵ+(e.`˺h-qȥCӝN; (FQ N F86 &B>w:3TEi6#oV{rJ,&(:wac|`l)*E$T]B$A5)øR(;Q 'YER&ՊB$ΚcQ!?NOOw:n{Сn[*rPO>_ict:MMMU*R;x3cN tuuu``sΡzpExYw=Lt)IB!@~.ɹ{/.7amH<Ær9$N p~O&F&]l6CL_r-}B5ѬF¨")KL>٬7ڭ𖭣 ҉&n`cY|W C3Eׯ 5ixq/mΒ+8IK6GzR. 8dë>}722bɮ ;w8qӓ=秦LraaqnT*9|%M_|qff@8y[;wb˖-iJ;wuhCMKٳeztnyձ3im`$ @JБB([ qmȋ}꙳grÍ_y≷ݰkQLS >h6WOsmv)?Ģ$־}{V$9W[}XJ>q7:=k|Tno~x./|\>vtͶì-EgV.diPDax_}[W,yDi,Uro\ oSܵ[b(ʂ@wÞ[wmYn|ԩNgQ@ [B LA/mɕWo9>s6?/*'20>'%V*TlW[v[nۭ{?}ⅷ|jE\aZ^.W)<çLs%)OZa ɩ8R Rml%M۫QJs\3,-BHT2m۶n֭[9r-pO>}]wm%X]]rY[[p–-[v1;;;===11a2㑑r\'&& qhhT(2vh4 D J=L/XYC&ލI |;y` Z*?o_Wr~mgG/~-'>xw{'j#[vJ ޲P,&IتN _%aZZ$B;~oO~O.$9rn>p>٭"&s3h~ȱOxbĸeH^oou'{W2EH)FǞ1%wLğt&-'92E<-'j&I~X-w{KjU0qJ|!v5VGFvTċOyVAv`9oZ^(R2_!,,n`7tc6"@ecktgYm=QV.)-2;q|'VZ>}Ԗ~J?gSQ")=O<{dTuJFMwl”G]\%s1O^Pp 6,.9 M1eMƵ5ؘyO^^^Mz``sssF(c|9C[XX0=^gPC/^L`\T*F `wh4Lu99WPw\Q> :g$ƬB1v>ϼX)v5+;wjzrܱg~Q|y?;wq+}獻W"?Ћˍfz.y @koǓ%)dD&țӤPV\g鑢x"os?_Dxl1<@|GH_xwݶaK% 4x )S^8302PڔNm?7>PJoa[Q-rWÞjv:< .㝘 k.a2'Z+]n=GGJqmFtQSJ9i3R$\ B+5whзeg e3rkMCpY_FrgcZZE)V0 n0 ;ϙV__Q+ hkX;w4=,ˈ.E-JQJ, ze#588x뭷nJ\@%]?|[)vl+}3F;VN|=}0/<|_hܷ K/nߏVXXY7q+Bˍ[-{G?ݼ'_<;ӌ~LP(lヮ?$Zi?m)cCSi*q}m,Yt*6#Sj]81o"3__#ߖ’e*9s'KgO~5T|BeH&I9?}vp[J?4Z e_ m5S /"M#oכZqn/Znc ':md(ŌjC4B_!5owH LT* gUZq/(rA.CKg$´ ҄jոW CjZzw960EEdo@f~R˥zgff ȴ(dd^EY모ƚgK[o G(h{?+:{ƻްN@"j7q{oz]i!{hC[GggVVW{9L?{~`׶`75TK.kJA{l:K^ceCBu^z̗iL\7x%w|;}V\ԵA W;`Z9^˾aҙsWV5߷k`Jb,I<45P9=b9,"Q*d TBv;)@@= rZ'I!/ \:5{&&8In D-דZu;]i8,F*PĵJ-bAXQuQ1㠍4^Oh4Ll6SNVuA`=ٳg[q얜9sfxx%od&:!"{777g:??o (&3/oCR+#9g@3ϬX $JDz_l~ƿBd E E"N[]?69?󣻶TCM>?w }s ѧQJ6_:$MCjDSy`A[6I|@-"wg0!sp1mqt ,ل:T*rؘ}z6??O x&ry{~7~ȑ#M&mk3Nwvm;{ry@ZGэ{v飿?~-N@B}_~ 0F_PVCbz׻xmۊVTR:99OVՉ 5&,--޽{۶m'O\[[YXX8~"fw݉/RJkzJJ$s驾U`'dAMĚc4`'!W & XCeƄX@%Z[+]=x[_{G\CgN0|+Üg1tO_O>{e;\96Q1 AOMG`PGHP3B$<M9Huqa&/ i~e:53 vsŮgw ĽK6xbČ8XEcZZ)oyPi`,f傭, `r.Me ۥAdY09$Ap?T,r V'Hn@2L 05-ô,. &}X&9B:@ZE yUTLTR0];b( [Ѣbd@0ϟW!v3+#ر#8Q#G4۷;wN%{ϟ/VKQٶ,6sI.놉S Fƨj[Xif`5Ҥ^fC95I?C~٫22kg:du<c%;N> n[&ZQb_k*!YrR(T8EsVNtOs+r _%ߪAq'y'f1wffc)w|D;(*A°{Z/YJ&\8x̲HgҟQ2DBx54. d砺 s[)xc*T'^t(o1/3Rx]\^tl%$ƜtW @vll=Ɇ*[F_W)ZVVVJ +xLmu]WBaqqQ4SJcMNNwuqvB ryffs4: iUOUe0$=L1;˴CL6 O 8rc]n˓tU:@<(R/:;OhnU3!y+A<|)Th\@̲N|/Nj02 eK55sHD'v13=mljll|jaRRIj2C.ܴ;#Ph~MʱfdҥgN-?r\Q0Be Hq6T H$idz[X*a!FΉHmöJf{(B IzB3[#AĖ`K8D>6(+V"e`B9(GDͅonOnI2@',$/!`0}_IL唿ʲVNR-Wju߾}E… Je׮]i...e4ѣGWVVn&?}߶ZˊSTGMT`0( rY'ņ( RL]y07\z[F5r{k W>$goAe: Ltht)j# =-<ȣm_8paEJADe?:i3 ,!#1~aq㢆j J4  mN{i:Zv @ՙm<}Xڈ灩3SlRqAsNf+UJΥf!ksݜ4#Q ԁГ7 , s?F5A0nU`LH[:>q#eyDZStf_^\neVZ=/0m[R qD$֐<gZlS$2Q{Ǯ}I3@774mۦi+rTFca&QE gYv^o߾n$M7׾_s?99< ,ڵk ^%sQ؊MرCz nBhmmZueW9 g_9(76su{jM\eWzBD#ϒ4XH~azK}S?kfFs0Ɵ $yr~R"Bl< `a F!c53@)B0C$#^ PhV5]d`_y茺2aёT}*fvj$e_-9a3;~a% M1ILY&EB'ӫZDK /G[F^{5 N>uffA҃B,Q4+f$|h;OTw'A8vM[R.p>bb(S1FဳڴL* spIc {TCU@ u}+eYm+ >w֭[nox~ZSQ\Us4MZ~dϫ2daa^x#[ZZJV2P2AGw@ L ͷbU&]mn&R 8'iKQ<[qF#.Xi >֍]RbO<.>TGcEx[{@a48L38d DOo׋5JrFcjzHe~# :"4,ʈyΑIι9?|X={=>>.B[Qn\j… v[YQ( mۦi*D>S޽Y)qCj!)7kion۹ (ʳ׭cZv9< b{aka[0 /S3:O'ItHol 7SS00CR[X\ @7:*$σ8iV863fG1l; Ċ{/E{⃜Bp-W?z&.iFkj Jaw; so}+y?Jao-twr'/D\wks} ; p2Zc"D[l03#X3p\Ԋ.QQF"O8I.̺cP 6S\}3'>Y0xEkF?i$(zJ" grSik~3ǽ*EZ08E+)@dtd& '0B_{Ǟz2r4K41D9u:^v\cʭө2#$Sfb}/vT/M`TfY3ϴm-J`mmMӴQ!mBHTj/-b) YB%tc|]ޏr/9q"|Et%}pqe𹋽+=BxƷ?=K eP VYf˖ko;L#ff@$PG]YY6R!,墋iJ Vtu 3t`c?u%9yA1ION7{}6{ybضS jf *N̘hջݳ3AhXYvݳfzV]X "8qSA3!· {b9#-s3ŵZ\IUձ.7צKgfv4;g^ZlsfjۮfZj%Dž^+iEPMj7<(`g.{U/13u-E2R@#a)kgp]wmm-TL!MヌzolۄSN>|nضm[Vi*G uOiDžn3Mt:Ul"uٳGLc5HV}BNsbkO,CTe?_1e?\z1L$Q> v;wl݂0S  #ųзgz!7f= $(%q05HfTݰ iͨ4!F^F%Hc#)ZXϸfZV3غjX$\Ll_}ۮrTP(noP nQiaFJЅ%bpf[Ƨ6~L^%2:nR`l^j~-∗e cƶm9v:sPرcBӧO+VYK*T*̲oݺUiǔ2"ۆx^u#C䨠ᯯrLYǫ*M!ZrPF\y;Svݫt`jU,lږS0&2Zp0Caif TϬ-61L!-tQ+$3KKKvу81,E8SF&8FjGN❏?J1M`ljH7gr:5!X"cc7\u-os x]x&1Cz^a0]8?|W=y%]{[o-pvՊN٥h1(N4=!ƥdBxIh0[ǫn<}aE7/p6\jcp4M-R+++vqFΝ;`oT*;tFEl޲4ϕ߿ +;!~'{_zPQQJ5fCGicgzS~ӿ~;=2u?m}󜗬fNT(\ǒ<'\N:{8juddD!Jl6wYh4ل꼕J=ںu(??|e|||hɇbM8hqu=p(\c!aWr/30}fGY;Vf.nRKLlʾQqh%Gn7#KB:w.GZ@ }%-q4tyJi|f&< NThKdP)S94[j{15-n=j[u$*+mQPu"4kA/C $)qPf"!nJkfM1yQȋYm4rA2 [W]&^ QP%뺆n,/};ꫯ;tuci0&(]Jr^^^S(n={hv=([tFGG8n4*as~W(Aݻ;*aJ@l6</J_ܹscJ캮j9Q!:i#0`r Srۮ@؀oF9.c  A\ٹx Xu;`h\k2}̊,pb $\X, ô]y^\õ#@Y*0kwrlo(Mt˔{`X.[v5V/^hi1# F)JA"9( ycj:7, rq~G9rv\i-T1B1EuF4 5X9V!D0鴻YA ]/tHF Ӓ"2340&JV %p9>x+L2)^gRQPrlV۷O-ʓ'OjsN5UC[n _"A~\MhO%{a{>66_ܹz9풤lbbB]tDGctGsw% ^*RN/ZD -oF,Bѱ;D"A#_ Ŀ_;#C ;J4L0)y13\.a໥nF $ w=䎞Z^uhn3PZrK0r2<,瞧MJOx3<$RB}eYkb7V&ŅF0\j$I*R4fа0W>{h!J苝Y7(5!f" Mp rutgeS-9"ttnY) Qy72xb>a\^S͜ ;FIȱ]9)C}'jDb :.g@fPqM߶tk<֮AʛP"۲r^*%`s<~|CwmeUFZ\,L7 Pl9ҽ0I5J}ߏI3o|n*Ŭ| ^P+կDꧼ%/QT^V,:)-<`EJYn !;wt]4M5{+xbez}׮]RRbuY(T5$Aa'uZ'H?+${iɲOܱsvvzn;ݷuE9Aϧ{~p"TG9BYYxKpE(M2 ,f"b[ Ch`N߸IN)•j42mˤ+Gun)Zx<@0@-zԱS *5L4\IDӠTPI2 d>~vvƼ79,pRNkurcL(a0QH?O^0W).EY3 t ; /KIƔÄQ' $"~r_t*eGֳ)8B_! ,qB"7 X,8p@KߝNgv޶͇#cl0J;v\s5ϟ?~ 7ܠܯ\mZYFtgΜj z"%{ RSYTl ۲ec=v !<+=RSBgt~?2 Z$TzN+{ٔv?Ow?7^c04f:z o*c4WiBP. g7;`P?"Mي+Ցg..}a/rxXr`Ī7]%6cڮ[HL۩G0T`4/.]X%P| +'N :+O,hh kI"G!8k j+zǍ|Q0";P @{tP\#;wы:f(UugסҔK_hHg<@`;m Qs+q6P5izի>я?hBٳ}i^*mD.n[ر;PNAWb 7[ꆠ]8ӎ,Qf[O"4(Y-/u6J8FT=xFFbezV-'O\0 >RhRZ.Jى4Rd[F&7:2ӢAd R_] 3:~WK6Nv#YnCi2`?ĈRǃqra tv烿egzRO{E5 DvisNN{M7 8tݱ+&aOE(xvtŪ4<"lLHZLqnKm}u j Ip 7YبF!ͻ=|o׾%&D0޼랿MbU)'rް`@H2-uͦ0ih@S-wq}l>WW:r0EPR,U qd8?>Xp۽Rэ7}dqwM=۳cÿܷ-A7 "1=Vbzoٷ}n$˧ ޵LP{ mBpF`^L85L4Ds1T$J%g.1MV*XKsaV\):kH1s[Dz4I> $N\`XEkR< NV5{jUA E#루7 @~Pvlxc5GGj\Ea ءQ],bRzj~O']+(Y~Η:9t?e|ީ,8l,S[?2*gđʱ(!M3 B4~%6]| *!eO$YC]ua`vHሀ MHĔ4^o^G quƒA#Qo=qLݏ;{ZgӬQNj|?s#o{++#HdEi/<>[Q*\CR 1IʟKep- 2HaZ¥ Q:hfjݾ}TM7;J9HʥbΨFXR%i'sr*KH 2Hl- MkVZ*b,p KK3ȠyQ'ΠKSZe~ɠZa_ͻ]C_Y ㍅&8&Fo |>y{{~sdԈ:5t%t}k繎q{4Itt,4 X6"֝.^4S4(; Ӊ$B)ࢀX, z"E?r|qhi $K%\ld2<+.ҐEj+8']XmOr꺙 a Z)]ﱒ}@ɿVN0Bs_?խSS4Nld 9])Zޕ43M`'28Hˈi!nv [sd0= d7ޖ)&G谁8\PhI%26 s컆>ǎ͵`A/0:i&2~Ӱ0maǢ$Z?7}?n3٪ --!:r֊a 7 Jș_8K9B$2H)B kz~0ЙmԌaNPbyj10qÌ\;R7& ]kQβTttیNrǎ3f< 2]-M`y݄#F q k_NҞ{I`F`ePV*@MrR!$Y"&w*ա$iVF)7`4kwV!KI2 A&vzSUWGGF0IfƮr> 68s-h\~6nHr B#'~L'ƍr)Kl3rt׺c{GC"w7ܳEU{}>gJҝ*X<=$j)z8 9ѨJS&fEܸ.Bigg[\;dৱ(Kf,M H HJyJ?dUjKdaR*:֛S$je{kn?} i3vZB?3&{s=u]qRBp!PA:Ȱ>E6؏]̃1%4Gie};a9w>c=֙^N$^ rLMа ]vu5.-6qrQ޳w}}u;Y*D>]ۃ0Lql^mk^{GO/VۮLC0v[ku 2,Sov׿mqN;_9 {TJo5s(&ug` =/Ddkfq)Tt{~߶'qg1!Q1״tC^$TojD(K.(0<,c֖=nD]l_jv:TQi~%Y^g  pnwsܥIiEB*ח,}o$47Vo|G' ~ ;@7߯7UbgJu^3l5)ĵR & bED"K/)&4bHufr '¾8}(^ZH.֞JuTd.xր_UJŏ}_{:kq`S?ʲZuK %i薉;3{Q&f7zՋy/(32Qq oZ^`P}H4T 8^)c1#1xVR N\|n4yVP4s V1E$' r"^vXLs E`{qci`0D)HwSYgyvB,1 8fTJe{4Lmi U3%5,"m3Km/XjX}e}j|m8`*|@a;)ɦHdZ9 )ʒw]{0rh孻i+ p Mjj<ҒX(Lpl3a(I 'Sc&mRE׈aI|@xݕX?\{9uP|j_Ϻ0y5LVz}hZppTv'{pMKX F@-X>ZGwW8Lt_k.8HDwM6H(>74+EI3ɰ8ZX8$q '#b9ZqI7.4AXznV1u4IGI6_Zdjcy=/C_`fE"Q :ȯ޳=^+}#l1F/#hұѲnѯ~J^ if`S',NUloM IB2ajغ.GyKF1iAtRZ/TXW[꣓`k:0RW*iCRp-Yy"Gv%G|fb?\w{q:LeK#P ii&2Gf맅u³k0uz^bP T@xN9@`5gH{9?)Ԋ\$hz2)tFԫ n9yEW믺j<{\Ii20VAɲCItC "@}?":KN8Ĺ |5(A '.'A6X~9qh㣑$ˮrMWu]]nвpdՂ[|wzjٶ-M  I6]CQi*"K Dk ǡynk(åz2=]b9TC)+8 SWWn ^:F:tP2:u:E4}<(`c^j雷|i駟\sZ+HұLQ ftvV\;8F=r'aյOϵǴ aKScilƘ`˴L2Q8 #?$KAA56lUAzQ7u#GN=mnV=/zLTz8ԔS4ɂ0$(HbԶi'zŢyO$,qy;]}`m@Ò4#GDn҂SQmuF9u#G=ZiDQFD7w{ ʂq/sRjL"\ y.$G [Q͟;kCR(@Yʁhav3 AFbFtS7 ܂ F%uC:ՉQdChn JIٽ=q~Ζ*i0trP-U* ,0f3݄BH#yQ&j)M.hs3=H F\gg*IMoי&jH.Tqȿ`qa* sgtJ.Ug]~p8.H58{YTg.F{?g9 ɇi&mzݾ$1Tɱx K X&A[EA6e`4Ҍܢ,r;ӳJA3ʨ sH"B( Ur,p,SP 4NL݌^\[s D&Ġbdzq 0ꥃV,3Dt38rrtWoZH- n>h1ZLv\eGLݥf1$W9 ]Q@1,I!0?Z~gfwty3M$ Kb+“E.5jSӕrE8M\sl;bk(/QS\il͠:gdMhhKSUclyuyLP4\R,9r)YmzAxbBa&ߦ}mISϜdR-!9Jۥ tհd)尼:Zٱc&"K\]3R.aL${V+#3z.hh֚,U (-"t2do\ƈ$ai'tlӵ O2bɡ B~?4D=)64,9?sAدȡ3//)c(H@s]ױ(3 s-B Jҩ ª9Igaj2\ka:ŗb}r jA SJt]HYu_8x䙫<`H96I.5II),|mTs7jva{pVi:jnt^cϝ?s`c^{AFlG-gdR gݦYJAb.iJsYXY"ijb^XXf:kdIC!3/||) vnkFqĢ4VGfsX!2\ nىRLV*4VˌRqSGY5.t]ڰ1bhgsm4reNlJ5(<e}e}#GJOrWd7e1أp@ kIu͹30ʜ<qű\,HњjeFbr-[..;[1Oy[6a麑 yXG ,ؘO{ͼэI4} xKQɶom4N?uqDZ]w[KK^a\qu C^ez<3K+%xë^ջnd:"S?h].'2E pY1:qU*hcr^(~ˁ?^p?߼熃f^wOۦFu zE1}Hpm_ZEA}Եf0tC5͘(LQHxT(MтU)bPp,f&3mf؄PF^( 1%<ЏKlɄD Ds˕O bG)菁LqJqI =4G?Sie3nXNIsA # VxxrpC2y[]?ey&aU4LfR)P.4,G7o|Q!@DHRw(i`SIUJs/Lk6Ʀkuz]\P8W3qz@iLB,H4m+9p:`&5LPƌAx,4p願ւOR4!=gA(e$Hs1_*8t!R-AȪZ-vI8CT/1R Pa* xyiXWH:l" "exeR([:`[tajHPQmGϼڿG￴$婜 pqB?O<}}ym-0ơ!V~K㵑SO<]sFbt P$xF<YhTs 3 uK”++ri>|UBvDˆ.h\U CګNC@B5AsK)z21P%SZPJN ΞQ,)EY$/8L\ojJ#a/eӲذ ,IEi8EG4@)0xڥrRږs Z[Y o2hI"Br)TEI4FQF)82)>9$05Mx iݷj #W#cF.}[ߔdt9PSl{d}V(LXۆn@&J)o萤I0>зo<(42K9lM;r7p̹g.JGr`ݛ& W~^괚=; z}`m$qVp*n}N D^{@9ibaݮcwZMǰb(rf2ZCA)!=)i-MM"݈%r Qػw>~`ߌ&G*^r-(d|zFe@dxV!;Z`0]z/[o?@~S19 )ć\ $$Y:Hϡ( H3` Y`mǪ l4=ݵwJۧ:AZ9:~[^??}$~m+M>.LD/;|+͎c:by]9niivmQ\-2)a@ -yuiB}QVf#-.+]iK"Oډ#99hMFGF&'z-Q2"}9P sN;IM܍Y$sfX4* !ܟ G94Idn A1qtƃ1rP! ZVa3k/]HaУzً77KOQob } \K_CLȏH J{YXD̊%H9r9r`+;HD`eц.ѩ`PɥY47`@942~ܗ4˳޹Ҿ?#>|om跿ѱ \оRm4 Y*<gf^Z-\]FݠHgxz7႓<75nHםJqFgKKTC'UØh''${e'wMԙ0 :;}ji-kZ}.A}҅ŵ Oq]2GFGnv2N;-NjDA*sl$064?:mEAH' ԡHQP3f,/̟9M)x"H%J1j r( 71^Kϧ`juO5R,]PHZ am&O9us[(Eija)<96rP˥@KSÍh呓vEZכʐgud.FeL49FbLm\{eAĬH*R)o@ 5uU!F[&>$µ![7j{ /3٧/7FhlhT,( %#esuB[i{K׼'~S 'eא-ch5QG":OW^xrq^sI\3ridH۷mjχ?12j*<3ERm F!]m Xq(?Oڷwfr"I/sV: P:Ɩ29Cj&CL!a\ZϯT[$codd|)ґ#Q uBp/؏( QJF7 ]Q6F"7SKuy (1 {|=uJuM{/8=QΤ$w왣X޿O2uny]Rdm?6G}o$ML*k˜E7li uO_Gԝi95T*~/<n/w<Aڮ—z^,n].r9G(I]/im1Hro^bu0讀nJ5i< ۹^Xx$%W7 %K<0gX98em4y. Q3JuzkE;H2d' *~uT`Ljak#[7 E3eY6uתVDűG !Ec-4(%CY}G @gl8j hTdvrxK[nçGr'q %TO:ʉEIZ rjznXkuvgmy_w3_ e:HsFst9¶ Tfjno4,kS1 [43}v#jDqe-îgP#sTn8C21- rƨ3Zw)s-f.a6JΎəjJ̧%M-\aTU]Dϝ?a`%`ISh-X s[%sP=ԉ.}y..yr140-,xr?eכؤhڮi3bHKxEBcŢS"?hgܹiA BgƎsqDzݦNtcҳ>|iګYtF€Fqflִl[>;4 w㾖a @rbP,bGM--nc9`iAN) ,?cxS˓/r%wbX~pA#H[a׾uG r|WwR%( n:9I3<n/X^-ruxs lN0 A X,wQ0nHl<.iVZBSÅW!*) Bz4w}=Zlx'!ڽmK'N#-Al bnCR/ŋZi7dKKrٵgܾ}:{ge,{_?gWѺSk͑T'Y{ӵFmi´40c6Cئ4#}zfWRv aYD,5(n$\aE\OFidtV.oߖ a;kv3h|q?=?75"49 3l[68Xv/ 39Du;8Z5B"L8I5C]r nQ/UdnSq(ueF.4v綖Jnۮ(gp,Gy!u¨݅eN9Vw%r<jœFŽC?9OsytJZ=a8Yr ZseLXm+^z詾l:wHНtc==. c-o~绯~K{9GVmּ0= n03- &1ӳ+ KzY֫51GaT2 ji3t0 {w?xU/B֎5%\@Zgˑ"spoe+vWx}m7:}qI`>2RZo9yc' ОjUOdgwrv/?soqb?I\lT̯8 d"D n;qIASݔΩ&P-s=RxN8a`)}@Ͻy}?1TZI0AP놞_^Q?faADs[~:Sڱcg& C{] G{wlm{Bw>/wG^ǯ7>tO/~wM7aB Edd~nnf)_ŢK09 *I me)Bx0L"RTjQʛ_1: خm$P,Luj4A'Z5P2&ҢhgPpj3gv8超F,EY1ӂ)!`RًUa]8$|OØ,Dk}`9fgS+'^X`6G- x^7yVd)$j+fΞ^NҤRq*.g*n،[N39:m}Q.5N ECPӰطx|[_|ǵ4K;;55\vl -UCx)01/'}M-} r԰"#c[wl_//L͹r<< cYUk`5nܫ0$YG78C7i` 1;7};^qBK8;i?|Iځ}^z-S#/u<>Hw~覿=re|[OmEA]4q.V{Ţ ZHRe064! 4 M& />(G'![`0WV/^\xs[y֋"/NaA8Mi ZT\5?7:+ŒץiH u͂ yTOB)M]ɝkh"]amp7_嫽ގ ͖LQw`F2H <5DDbEtME, fgYlbu-Y('W e(Wq=A, RGY*TVA2itELNL›ͯ^Z]غ2:p8uJ ܑRbO7HƅB1{3O;h)h0H4W7?ook{/ynqK?g5߃g'⛮8(s";g^6!BVBۭfNQ /x(-feo'72o]4[IH3͋8BwxP#%, 4u]|?=mأݽm;wHkuYΓ=ekÇD/ܩS'PUGQ0!232,zaO6;eǂO0IҀ_.aam[FyOΙ'J<]'࿽C;xAcmc c _m={uit%݅c=q;?˗;5;:3ՐZ߹-3F%K" * ˲/H^_QpIGoeiQdRg~1]$'rkv&MMiH^F-rpP' u~Ќr? [=>n1bq!R1Gq9G8R42@vigU0s-cɚ 8]3sCBh)3 F:XȤmۃfgc#ԄhDZrEIfyZ,Mm7]P;1KϦF_% aKvTı A{}ӖAFj?ڵs;Ǧ1u{?s.c}0u}jbegnUC(<镢^wf L6F ݐ2S 4LWA['x?#/?[}}#gvjԫ{wl3Bmt\Ï}u֫/]~>}datiE~w/nI/;@v癟ݿf̶,kˆZ/O)M#_(5<^P9 'A;ZQ3!zQK:ɘ#ӤA4y^uWWV"00HfF) 9kqn2#6G%^O3, R}4f%../ J|$ 8JQA:=''1Ϸz=ۖG.45m6671RL83 ƁO\=H.4g]tRI2)5zq&.#NJƔw}Kaȳa~ tK1Q E)81[nS9i-rQsaKf=v#OWZZ/HAdlE֓z ˲f菮P : Gx0SMbwEK]w>xྙ]3C8JOq‡6H"+)/~u^|ۭw|?/7\@ ϶艧OZ|ç/8HZّ/{k[o &כA| w~ߛxbnzrJ)1%Ug_[k~\[!2+IZ3eH pdPrN{ ԕ3q<t:D[ͦ@:T~:5R(AP-ꍙ&) Đ$q晆yu\K:*H3dɴ䠸ސ-// <8*XS`n`0˰T cGrx!D8v^GJ{&[kaZ^=sqڱm{Qky%{[& /A)3\l ZDP^"AzHBI Do0,Da _~Y2z!ɳ4 l (J)i.?Ի?g?~ ?bqxTVcN1O5ȷ}3mYD3$o.1q^}}k^v} %oї,\Y빎KuL0o1wZ\1ty@-†`:uNM0FNNO!%qA)N(rlZn&@ k)̪m,نtgqDƽאYb1@i3ʕt1X {mHhv2:թ*}0!,i ؿf\|ZpT 5\PM1rݢe`< a"mw X+/z6#m PZQIX1𯁅#IQ50@S+1{25d;#w\]]Kc:CR)n.WK/| g[:x?:XX^^޵kׯL} 0u.-^J Y`146ebfCCKBeYIWti h6$>m>ؓWz%>cW:p _SwfGN9o5s65t}B)~` Ux3Kp_~柱C[Ug=sَ70tmDuz^Y\\D$j2`xM63Ń\ 2"0G?XKV:?wfu߇~v;e  l )QŶd+Xcv%7MyyN)749q˲l2U)Q, @sv=`HIE|)ʿJEe#]e (M`g/ B.h!4n 2QH*/e %B4QaNiz"sƊbo{KcI* tasQ!Z5H,S]C(^#S_|܏R#DZ+&`f MZ@QU6aP:@ B-tmcԏK%H*V;ł=, T c 0SK ^|U5%` Fq>eٶ%BdAF^= wdo2KՕ*tEIf*c4sU8!P@ 㼐 "7ǚ"pA0TjI G ](a~?yw)$}ݳ-]Jm;g (+eRƈAI0(Ѝ$n?|ޯ='}#to" PH:ێx00Gr.{mfOyYBD85 Đ9_dYؔ5zjq7R 5Cp:i@"j+L >e?t1ubR/ʪjK@$,d l >:c/*',CHaY%+M㴂()9E hyyYHP6_Pª*0aH,Rf($`swx;>gڶn]/TO}~w_|3g])n5bQQosvA hCx}uckuMUQܶED .ũ(Ks-JB5J 0T2 %bU.q;qhk2jBBIMjaBU+ !vcQJZfqQU^S۵+EUҪM2J5f*-E a}U-NkI_فCdL X cR8(FkekڰJrTe/Q2i00{U>OZfϱp@Niuz8`BM^~8s 2IE pJO,ؐ* T SNV6ɣ4ӌ760geRM(6?GA`5Psi} Vӿ ͦ1.BBQ?ܫhʯԪHȇA7~goG\y|]&'e#._S tD&&PAF,$Bݖ7x,6)U3m{|i pCʄɄkL[vǰ31%*:``oUN`%P:(/}W?/_jq-9X =;YBU {5AG*3VQum33]TUhNWT.$Jyɲ\PU0R4 tiuK魵iDA B3PK^$UP N6 45 Q̲RR F2^eiALrż>z'J .?!3#qVԾ㨹Lt]Is7׺4eTNG,>3^{j~0kNLeFNE2O\x)W&$S7&YLoH1Vm"pk4@ȭc$׮ 5^I*Ժ;| }OHrQ hԂPuiQ:~8*$c[t4͵NhLkh3\%4 jIMQ+ Wul@tQ17νz/>xmQg,FAၓ$ţzfXCߪ$ؿ_pJ%ʆ\34/e卷U #) (CeyRp&sWf4x4 yCT Vd4)>svA6~@\U(JM\h}t+X (MePk-= " YR5mv * Z-сe` |C߀wPanjT5XE6Ǜ+ƀN9 6-R5-Kzm@g5HmomEQ38"yC(ȝzX8ŃZ-(Hpd!|ac}/{N+K`/55>攮r5U%+[O>#<+ BrIO'rxFhͅjP֬dMyҩ3qR23%k^ҵ N|C/ ie[!=Kh7c lV àƿ~4˺w&KɥNeUU\rZRiTTMKUiQ2QȊ"(?jMj[OƀN(6%sL}Tb%u&U缫z' ,I (N N*06 ce5aY+:G >cC Y:X +` x)l 8LDPIW]Kaj,hDU,%8jm#ԵtCw(+*k H9tktCPLE|\g *Y -jS(_4Љ㯎miAi(rnbcRdzg;sq2N93%(?,CrFKtjWZaad:R/ ;{-e*9.@CSEY1mA)bә2M7(iG6iqiieQ\6T+J]W6˂9>U{ ;sS*5-xIM$ 8Iz>ӴLs~d+lfB\'m%ղFMTۯuGyZuɦWs( wwwgMeA]KixGf@y1c#AOϔUPIHTXPa\A +Yv0-wwOatIwT~a yDxK ˿/wxdr*ȓaTn81v מ~尤' k0ر,+W\<է8UM|y<-cjweGO U1)p5;wUhv 5g m] cE 0IbqNK˅3h[MS_ZbXtnjtmHT+Umma"CGRĤc,/4%dTjS :.JBJJ$.Hwܶ{EL[ϊYz+KL`ۀ8DfZ^$0s^466685K@(veev=#z} &>u}]mQ~RW@f{4?(91Fany$)W~DiDž\4vtmڰΊcq|*B7 +ں/~u::>3P,&$v&G݋af':޻zo]۟ڷAz~'2h%ů=2$~fޖBR@RQn`S[GebUbg{W*KrT ^Y{IC ~,m/5l%6XAp?B/?~r<3?geålPѵpxZ`I @i! +D6Mmwh]yQ(DYq07#JY4pJ?NK )|S 3.ڃ5 2Fp:ބ^mUz`S˹nj_{6z;G?+ۣW>36f'cAun4㛏 M%E%)*d)p8ɟx4Eig*aYt0\м$ξ{>iOvݷFBo}$Y,OӢȊ2g (#_~^QZSwWi,0$}$ He$UwᔢDy6P]&T*JV VfeVEUi`^kP^aS_rbNZTu| uR 4LY%C ``{{!RvRD"-KRtUʁF@ߕJ R0ɑʱq4-K8Hfk)S9fG:znDäekͲ).Lq-Mͭr{ہ\סW݃;H!p8؊Gh`.X%X C`i%ЍDO<8 Wm㴖VfOL?xl=w@ ( Kײί ]|7?|ϯ}'pk:( 8`>sZIl/`ImE=^xNպйvK; ؆J2+ 擮0 )j(kw X4YQǪZ21&+78| zz.^xȅ]Bzǰ$B*Ƽ%yBǥݷ + `"h9iߨ~ oܛj^ Ҽu-!XƀiY\k D^7n aXj;k?s.-_6GvzL-=2*u :fQDb\A?qZӹֹPTǙvc?8^ \-wZTBNzl3Մn#· 6fc#l~@̹/Z 7n jm܍w ^`0_aLy/Gnrn7*njZ[>GKAzckyÐGwc))2ÄuPCGG3BhfwvV9p?a QA5ϛ^vz@DHh&JF~Oܶ:bׅg%'naqwuLqs_7u,u]"Muʷ:;'HZLåY-M2ī{ջ?ݯ~mm~!qE F/2ȸSDqc'oyE ><(_youz4ms{!4/9'?꩎xz㭤Z"]&8\l8$舘J,4 +ΣasŴ^gtCkz~z\7nvk~sr]fݲ6G-5oz7>50d^?86LaIR^!n{'AW\cQo9~D0ғ 7dX4,ЎmnnLؐXnmx0@dyN0pLm%(Bmzh5]Skemǩ:k 6Mf-P&v[(O<'7\7kG΁~)|݊:P f{#7.ܸ#cM+4%F~p,~kEs%XW $K_g?,di_㿾-`!ӂg _7-P)K3m÷z dX/Gdi^E_W>B# !ruܠE˸,0mDP%o/bA"9N̷OmWj#pn;ؕm/g,7oWlsD,$ȉP5WV5ٮp^E p*-VFG8z\j=Gv(Y&c]oY>TG_ B@w8 J*0h#f-c4lݥi!]?O|3uc]$Vd~=ωI"U\W o6# Eyi6|touzn%u}Ug\ish ?a<F ]"976@֨7]ƫnv0l+ !?~۟ B#C+P1R> J1TԂ.?v6j ?DZϗC{ "11kf;𭭗} ݱv7 GkC:5d%uPp$*bI&2W|n&o3>˪O<~4U=17w{.ô|h{]M]zV hWu'BZ?BD<07<M}PU^ڑGOp:X?Be^0a>d2t?D1NL.DPznsw/ڀ|xG~hW._ IwWh/̹/.ޕgNУxۻN p Dm!Pݨc%?l"~m7f# O󘶽??onל2-={A LwWG' 9 u_@ r4NW{f/V_)ާΒQ^VV?Nqnp _9`KzE9Dٙ^ 4 2F:"mS~;N!0ڳmGqI-XΩl^g>9 pV&M&q \M&+W8ؐ@9O4coN۔NOX]UeBh'Źߟ+{OcӣhCn_49.ύ&Ey|T5[$0L@<2'%rm`[2!ƲcJNVٲj(-7;Zg/kQazЃ9Y1PۅJ4vDI^Zl 2A^V^7zhC^WӞSh=g]yzwKH8!9*N0@ !Bݯz&%"a?/OmwkzYc1-ۊdox(Lӯ#gaШ_\/4^!Ff+kjEv&G/u+` <퇚qD@OEK2K3"UN-Jv+,_ DF>u{חy77 -&Fmj%O,]jW| sN_?,lqW`:.ߍ hvaIw_{}wu=y3\oY2@j PthՎO߭)j^ (29qo?֩5(. =J#L+TBեMcjD 4$jt84>`X[OW,@K…TTΒ;Zk|D[H%Id-NonIU®vOη1|#SUJݶ9Bȿ+Dd'^<ݻ+ `EY4N>?? :F.{o;#HM£#2DfDklqST+ \HԿbg(/Rcl4Z@\)$v$-5dsMvFu5oZHЎI|)@~Ln؉ʊbxx1ohǧ~fiyc0@(vq@M(RUR]V[]oCQ,+5_çN.#I]^MU.1i~G;y}Җ0,Ja7 mtK9z jw+:vȕl'2&~_wn[K+Or|kV$JlyE1T^v?qǶ~_[?ʬ"!O^\s8|j7wLLOBNO~?/<~w{ !N,VZ-s֮E@PI-1_aDZxO/[1}U+5>%[k* ] l]<:^X< f˧G?ͭFd aByQKW>>zFHj= @ɲjAIUFIR1h23#eQ,JRF[9c C\ </Ġʹ8`-FD jeiUsv3rF!"ڱ;nH}U^"R0R?h ww:mc ~./_zR_W6?gБ!Ei#b'hxq}ܔ5峿2b*2cSDkC>Yk2AFb4n}/\|;7ˢ~X5F+W vUݎkQO|s,W% d[t BdEʊr…_}׽ji㐑R̹bULrVTcY hd+*15űWEc_m9!.F-v73F.12 +Hg<%{/NGHXA$,q[O#d`k0'ovqG_Ea: }H]musyWO{N}+ȄRw':)L*IeFqTVcY-L8vϵW/Cϻq8Dvmz BBru]sm9; Ҧdu7N㧊 UW{u)qOmch‰Gs{C6 ߒfrA# WBG`RscS!PʕN}j16M ]ґX?\,vǮgIsW hK /a[V$M&l5 Zkq'"-yo𾒼I@<0x0(@ՂSN8WA gqµ rE0q$^>) #֪Ve@- =ne:OEK>Eˁ;Ҷڮ#%xbE"ƃ9|Ю+csP:.ga[×:贆:?(%vF;,9L/ 6}bE'l7V`t xn@8Ӏ!jMLk/_gE:ʇ_0q7{gor¶lЬ+0.]/_vdm9n*qQ?\_ͥˁ41(50X$)l RmvOnCUsX+6]胔Rɒ,QeqY! AS3Ld(giFݰ|N~k7X/IyEyw[aݵK&pXyCm1YXrM{ƒנ4Xmԯd@>m!7I%Ax :alY}J{ ,:>B/^Z; y.1y]KŧW!jEm |0*xªe|߷4[#y! AUJnE''_YL<%Ӻ:ʐA:G9=!ẩs}{쨠[$"SEaUEvT, 9?hm@"uF~lQ88n)«`rG"HQepF`rťZ ThfyU1I*r!Rh~=fDWx~Y΍|f Pq6>J81*Rwqp`čАTms{n&':7r|d]* WJz&r+jG[ȧ f_vLW+ؚ{an@m(w͛.&rD@ONtC;" ^"NA#vJ*qI]dIEB5n[ G +3U3yu)a;JdMS ĭE0-K&)֩"QʵCD! WXhܺ)|as/c-I VdH*k<F˭jSZV]G*m9f{k:ToUzַ~[o9x6CxNa]5>` myζ;-ZN-hV>ht[85]ݷAخ?I0n:5 @#SK{ >b=o8D1]|N3pI\׫+ $+s 2n9,?G35<4=9s_1,ko7.<^X^yb'c]3S PǬc~0US=Jc Als,4U @C2 ~QT F=R@L%eITUYĺg+H5$gjn}_Zc_$C."Av0aPvA YƤ;ߛuMe9d!tNr!m aca",ͩ^wT6,H?4tw_wΟn6{A%<ȶ_v΋.mm.5?zpvv@صhaǰctWo9rC4(++hMNMTVDGX+|)ʒ*$ni0XZeH ;Fďķj]W8Gʪ"%N,iQV9SU}(=t:J)S(X~ }p(ž3vk;iqiONSIm쪶1i ϫTThX<-ބNyWHZTg1xMݝ}Ms`ʚk4S46;$nϞ[މEz1N#}|/^"f{ݝ1i;u;au"CU9C#2d`2`Qv@3ڽٰ +;=;g B:OK98W5}NVITy4bOnYS/7Wڛg6 0F B0b%$Ԧ(j*Be 88". J:j|.QR|Q/0Ohh!C3 'BJxq-/ Jݭ2):hmMQ}iI9zw,EiDBT-]n-$ ?fLlH*8-pG'\% I1MALG5ɲG!.1aJ5}`xގN\;D+E؝#|Kp~utA7SrPqES}5*nT0r.?|Z~_~oU:TW:X4 %ղ&)Z-,s%My{{{aM3ʡXiV`\Cz'FK˱q|c'8Pa|B? Iʬ*` 10v~U53ѝUPrH"dYLO if55=RoX5ky,rcF&CYBOnQ bGx!]Vf;GsEe+5Q ֮@&Yyv4?5Vnu#?W>ȏNʳs:.8NuO"bnJnQkn'f&4E^d֦)yNESvw77tMvlmooSW ETԼHG A]G8j5CT Y*@e74v@8UT2BwYJY2Z dM*QI3f8hjxQ8>$^1(@~+zL IdĴ-Ô$U۝'͜=u;zMs"Yk1e1ItZnm#s/|[hi[ PX {(mw6 yـ-] n]gC4e#Z0 3:x%]˵mwӊ=Gфsr-vHEX-{FDzaɄ8UCnOM]zs,Kk;*c]wF挑ZI3`=GIEWc{ zA4s[*d/v6/pqϰNRBtUE9%U7N.2]gw.ߜu-w&)W yuHiTYto7h* Z74IxUe9Ӥ,WF"DԶ2_^UaL*kX؁Z7!;M{RC;|9)8`yX8+aI3Y2BFs>\⩨J$dIlq!P5] Sj]\:y|F4MYU BUM"Po|iQ:ֆK+w6얅s^o ˠkeAD=(BESn0P 53đMn6zA;¼vc^ew9Qm}4wX46Od7W7.RC 4>/8Z9t{,$TR~,&oW9cLC$?<EGi2Vwqm :ulznA,u{^gП MgCkYA A \.C[f4Fxbh_#6q4 |?/(RPJB<dzܑQWeKKϝti=;9ylj"ɩsWR8.r\tֈf3y_t1㲬4Uy~UUGIyuʷ>F[  9<+%'CJ۝ꘗD 8#۴wKK'[gm2\ՈY) +{D9$}T=GAg}1]LV'i4+![3u`U*J{8N[Swݳx qQWl!8oDޗ_Dw(Ȍa5po$feZv 8$e"\q.,v\֌Q2 **pS ѕ"Ή2.n"E5:'R&J1BUha*IIR  &''670iDE],YvyIk0?fqXeS:v{/E* ߴ  μƗ.~){E&]j\Qiro)4AݩUlEY rtmQ;BQa,fR rV TC.^-F-yJ )\ՌɘUcs3}#+[|; юMdiUj}}_l;9gje΃pt?t0:<_^' QĀB&$`` {]?d)\7VB0ƩD Dq#AqX B( t C4텁93ƳgKGj걩0,2sUՒ$ggg2`̷>ny:'hG 6B!HA>r:/9'52Ν0\C;|ڇ%|gPYaMV9 ; e(sW N9rI8L@c62C%ୃE5&0iαTITpL~? t:;ݲby/-k+; Tn;1wj 9_CmPH [#EAUyE[*(J%&Bb7E"Hd5yey9aKQ8Lې@I>ǸވɯC7I8kO>*1cۭN'NNO/^I(MBB8qeM"ӛaCj\)!Y.Sv9(p%#sC!*/87>hg'WDM bY{i뺁D57;yf^`7%pyy q@4Ejl7=Naa"_rcEQR]VW9$vJ`,alȐ#c"mԂe: 3:q߭7kh sLM0.la;1 i55{mYg/we@lY0Kh ͜Dܾ֔0ib@I6u`Gu8M*ZNkFM1.bļXkPtr)Z)̺򂓖3Nn ùoz31]%5PWp8 $o{5*$1KViF$ُ˵$Iɲ@A#GTImXKHܘ]\;/,A9Vp>Si/n)=Uh A$³ t1$Itwvkq}*帩h-oy):97&:rFoࣿa_U:fRJAJm0 *:~/~ɒ^ pyrYV~<)r,;GiY 4/ʢ%|㒬s|URUlO%*a,ILp#8̖ Ḭ?\[+{HvG4f< #˖q Q{]vE؍ro !!JVDo#tʽKS&D6, ;whଙQ5NAx| _kwi.<ҋ/h ]Kӊ1LS_ AyEi"kOH:ELs"8 ::vØ&__V;!la yňt-a8 H; 0@q"׏ )N,̿>f@x~7߰<0H>R Su\O֛zw\"m==;oP Y߯w~wwz>BtM&_?+;Ti)EBOBU 1y+m7"BTW Iv:(AThaeQ%S`**TL0]Gq>KG qlIQj5REE,;IFYIT[]ܛFߤ75^n9Q,BQb"ls40SYqX$6,9a ;%!5Jpb.覢Г"A-# 7MLǐvw;ݹ #pWLk[o$_ 6֏WsCb# .$DQpSsOLS_yݾ`-%u;mEa?W7ܹ;^_I|Ƒew%) 4D'Tє9\H)g'r$PUG`O;*(dDQ6eiF//_LL`tO:ꍮtJ#;h/zpcmՆI;+ L+ KZ3`_eyQ4Wʠ#km Mx =?Ύ_^"k|4[~54#$7am r YQ~5]pV2g%$q䉡tyo+L_di(^oigcoy Xb;J|e*Hn#*/2Vkum*cA4R Ȫә$D} BQɒƳ݋s2_sUai+LHK Z*cI~4m?t2PeŐ[$_\Z챑*jYd$TTe垓?F0o.p3~sgXtkR+4ZDk55q &5dYsܵURXZ=q˫j@nÔpmmw&Q<pMI/FvkVganju',2!yǁ)>@\s튧kr$A#6עbpA`n/⑟KWRY?gou%K¤7};/=L7_UnDQ\J`qn_Z*6cc?[naWacinXCDD-MV$0ooד)E^5Yq`$%%D3!83(DO׌,:s_W>{{K?wq ':99Ź'^o;XymU $?PdUȅ$$}v;V_tuXŴ n+8KfYVɉnbBĔfil, U*,і2g/]Ēj'BQ$MQ{B <|ߝ31Kۗ:h➘4 u 삋p2[9ur0(V7,ۜ; &yBd 8yVF iڭ/@Oz1H ;tP.Z~1@j{pDYA!܂fzj?l?64! 6gO xwVVE6tE-MN'&@l)JP3t+KK$eD7v钮+Bo])0&zKfAMkz2*RL%-jLHגٙ$(+v~sW޾Һ[*F?ؾŠNvގ@5=6&=X QM8j$=7Dx =鄐 WG`!J!>E0; $ZhSms}O?RH!~?}Bi^tHWMa0+Wqu_ sw~k 0u+$P"'˲*+UYrh yUYUOk閫)zRUr^0i+ˋ73'/nxh6bwXpl\x$\K]ZVW֭˗v./y*T1RV"ˬ(3 i֨depY!^HYR ]0jk,S,e-G~%sKݝZK+%MLLFQŹrjƤ 6:َ=ye I#8Djif(V'e^=m?1_욒҉nᢸpa oL@NйG~Bo|݊ ~ޏB>63A(֑1>o&%/g/nD/ӋV"Ͳ(GiۏB2$QiƊG!?PTN<Ҝ ݱz R&#J m,Usf?J^^euvL (,kjp**i奕W߫"zjAJȵ[ơ MO pG%g%^9OMM Y]trx8"PX$x5\ y!o{QyQC\]8.l" mmlx$Z2'fٷ}jghÅ_Ss/i{^a'0)B;n$scЎ}QU+jq9z䩏޲F,Sd04MI7BHaS;S>XOQuE^9b~(R^o1>10NLRҴkI^)I̶dL-mw$ɳ3G IGeD$F*ȦnAecg۝pVV8+~8 Cj"P!KZR8!+#PPus/-U)hrЪ"I'z͝31k{0[~V (D=בsEFɸ#_ǿ 4wo- ٣xаc)pw n@Nwp @Nm/m=F^7{>㟉Oߦ~bMZkNG|vY%TX!6 +yմGn'u[7Veaw:(q YQUq^Eyp ٵa IdI+W7P͞I0VTKyY*dDep"}f&nFєk%I)/+߰:0"`ժ*HoYkimK/dSH*U@Q*(+$seaS*L."(r:RB,*y&KS&3Ƴ=?l"Ii@_u?M}jJ6BLϣq݇lz3-tP]-9UJ6\AVx<NH!U9מoS>O"~ӭWXO?|]w=N dϡ^?Xr+b SWZ#HVmXz,ݭ ]U%LݖCUs1M7ʪ(D%$傕Ջed r$2ѹxfL`{A迆Wc 'tm`xo`{oPrUte=JqeB[PVλv6/?5 _,~鈿dWxq$H%/]K_ME((d4-re<ϲ"cUUID B$$jګbI<@Q2# b/T L+5 u-J?MxѥNLDա(Vz|$FQyQe.rYMFMJKeL,),d@e Ĵ`se T~ZP]ML]G+rM /dP,-h\]N&kwLIsau99n{H^Yg߁_73TzG^oq>,n$z8Fe ϺJN@Se늪V50C$EmfXFՐP,Iu + 6\RBhq<n5!AFa\qIEeYGac٭(.+PE˜H#Lf Ї#DUU۶{=udUATp4hbH"o;+DY0ACV},ɰsHN*(q'{ۯyBSO8'\$n1a6FV*6A*>_icLL%pM6LeCQ`•%a,}o_342tX c 4VzX|KQXÏ%3*YUk8Dʬ3m]R%q34ɲ–E84|uCOI&o`-Q^![%T Ju.R@QռHO^-!~0YH|(noL yůkٷ,!p2z;/ɮCv[TFptE{nC"6|jpaY1mK[jݞ;ڑq8&m;wr|U.`Ovs/M?˹B3xWb.l=@p _Lh;"}x^@A*lk{[x1fQUP>˙\*&l6FM;d7Q3BdVt% Ȏ:(ZQ0-9ڰdu,M0e| 0훻>Tk\G `*k<5EieeΤiMQ b:I:s+9Yuks=o}0 m﯃=lb| 0j`Rjם`+`1]tң{3խ6difߵrn#Kہύ6TEaG#dxqP@Vq9NF'V]za@j RW1l}."."*<}JJ8p %.E!=G@iT;fr}3Ú %M}XC=$4 e %J(J}G&Iw;F4`*!a Lu0M AI7 CY̽HDe!51aQb.,;mEOvpL(L~8#,`7mY!/uZ^ ݿ8y=u{ـ+|\vW353bt9FAYX1 <?'>7H Ƴ(aԯx% 5Q&4#ą*IjOdy7@Všq ztvAXU +OţC7 #&7%u*X P9dMm6ZRPei04TY0CBFeUʔ M FkFXPdኼv-#GTLk{ IְKJ!b+oQ|1?#| lqLGBC[&=.jp4 ?ȱWks}xQmHN(V(z/2XN=J%P/%ܴ?K0f{9dzsN1b0R*W4C#GvUt=HCC4Moll?^UdV:2!\Q\ kBf\G b(CiV~Q afDk{byYʋ, Ss* (ǁZdaa 鳮++Kq&/E*2*e @w9ٚc >QDm0" IO̷WO{7(:_-yh*RoD8gVPd/VۄHiO" %ϦOPh_C 90,{ ?eMs)*e8XG\)LCsyu{gmo3|uϐL& ̲άLQID^m>P?Mʯƛ՟eYeؓYsJV`]y/GW\.S3ql8iC%^ɷ۔NU$q#Ipx2 K!U y0l~ djBuF|C70:#?XcX|Kg}.|d `'?W>TXM9.<"bXw-T?6_;Z<9׏ZXlWY2[x& qQQ^U*Ps»./˹V}?%?NSO\?-`Vd턡'ʕ9TEAUC 4qE)Pq*M35*xB%fQ|O=đГn향Ld!QyʺTc- ^͉bn8HމRJ:4;*go Ddi s-EdQI)b8^w9Vːn֍OqUԔ ␬Y:ʡeQcWY869pjhDzVπ6 o^?|tܓ+Uekꅽ?>1X<|}9C-3KKx  ؂x/ߵi9ֶ |8'yN,1=@B"dPd%eD3a Xm8Gc M- !ξz/%-U#ҊRv4>ƹ-wPaVx/|_=Ͻ=?m۷(^i,[??W"ax8\M{ѪYqO&hk:c|Vxͻ!!ܟtiY1Č#Y߭3d"-O+lQӗdII?k=㰍~o>yK\hf @pV \XjZIyeٙcyӷ-oY<9OTp@cq#!po(YZFn펙"bxU]Y M淩*$D*Lf%**VB&5Y誌k=ސ,֜3)BpJ/,(N`p+HBG9i 9uh001"NoiCڞEџͮ^3tX21 J`ި25Ln(# P8O: ٌ$\;HEn)rѢbu|7>F%U!yAr'xrs'ٵbؔP_߱LW'H14DZyUF$DqgD ]}w=N>TBSUVkz]? 0⼢ʴMiyY8i_yT}U&y䯵Fa\cuoF/"9"v74A[%jgu¸8b7ߍ1E'obϴ Q %gێ?ʉHLE-Dnz?;{Wk:@fOf()UIZUTL,X[}^Y&י)-΅nS*R-KK/^D#8b,TWpЫQ@E\PE B"ID/\Sv=\x7MpM j*8+#g?YU JQF4AWмj](1V I_ܨcSk>aPN7ÿB.3L>b;T^C8FLL yO=U|ԺzLMvֶ. 7d%3̟hk_|:omз:w>K팭ebFAU $βǿS7إ *`WD c4ӌO5{ $ҥe{ߝ3~3{vz՗r),1]ƺPAX4j4cd7HF9ҜC;JW%+,|ܤT$ @af((w O1nLۺ%^d-PFRpHX݆"\@PBWd$\IdObu2JHP)T"5j߼_ٯ(BTLL[B3b7}gßӊ 01 $8a?v44*&VW\0}α#yDޝX2Z7[=\ 4y`߇^wʡ\^_MzJٮEBd]3- i6|&a;v8"&=Mk VZLFV:S{iK8Znq-5,,thidD2:̗lNԃu30](18ǔ?ASEp fH .8"B%C@q&-쳧~v{k5FYMMGc,QSL%aBŚdHaFhtrÊÌ8OS$̺4/JTF?.}OۿTR3D(#ʰ%> tL߈B˸d)Ha (ʍy\D)V޽5N'r1fRK|ִFڷ'olNœfhu^><ژ$ϼw /N @dei"e8ެ(3'*ҡb1k8er i{%t%"{tLwէ{? A-e{RUYͶZ฾=c16sBDVp8$? -f Q `Ap $:Jq5`ON1nI  P@v2S !oeNϺmZc0ޕ+de2TB=5Y]\=1x#&14^aWq{Q$( `ڌŨ[69\L2qkvK1(>9,iGH#dzh4$(j3^6].t@$ZA]0fN JJ6daIJ_28;iUt,dz=sn;lNδ]I@CIЙ{CXXJA<0} H:b J(Ur=y_GBP(Q*听"TqM>"Mق ! 4fR?y{q?ߜ7gnճd3LӇO.ޠ[p'oS^ynws<# 2(OsBQ|guO~`=M6^vg\ϛkD}ط6730E4d hK?E)BnPXm;!CJ-K4N*B0 I=ҕOLYO&/v1|汘 @hzvRI @tfL Nc7Py$ =>~; z8\0cGjʹn|tH`UzHYH4 z&`'T{$DW=߮_d1J:`%T2"ۆ?b|R%gt;Ge~ oqVg򥊙ƢN\w֊c}S٫nO|钁so]}`$nO?鷽3:x^p@_i^iBlP\`NVyvi+FvO9}V:$l%4+(C =Ÿ+!}s%!(@ ؀f/sH-ci2yT%"p2WџZ3F(V~K[Cг(,ND%l˶M3W(sy˂4Q4,YOoH1gպiLl(JǂJ鶜VؐL^UX`nAYÑg$){7fȄD5% =G/iPI=:m[?$sJȄݑ(PVLJ8{F^gYmRy|LP"Ze15Btۆ>IMA3` $:)1uh;XUcV҉Imޥߣ Eǒ 0E^L6 rCs [ӓpD5Sm$x1k# *m2Mz0#|rBO1&?8YN)k8OMhOvɾ6 d7ا?sB+~dVV/aBI p麾^/l,MOPV.PH=qu-Cӛ_q{C5?>ֳKSe I<wBnO&mqG=1St],AT5fiV8u.D;݀> 5[ \S4i8Yi9(Iavwwq랇Mܿ =vQ-ke( "a8iuZy't2<^zem#Go3o V>"aޱ߾] P8?;w}&Ey)ſ_ؚ‚<ݻ혩 $3cmM^o}'gw hRRWuw7X ҉X { e+0Ghji!h01Iß3|/[{>MrbbN̬ 8,h2t6u\exeÅ.8yBy,!iZ!oXxMJpP0@~o Sa} p(x,pB^pL e|brQS]cCh¥HO^(``T4oYsAN"QԜ<fsuҽntT> ('UL')62r`pEoTXTUu?Q1+稳VpHI(Oj}gj~ 7xwl-sBrFu9$4 )5Q]3۞b状miD3Y,,.[pSIǃv1QJ1w=jjq(_+ 㻵fsv H?ߜ?FpP(DsDEI3;Bম_\| K2|č9or j;wkߕ1`gZ?%ak~gj}eiϳb|h?BeV)OpHbBCst(h3O!.4 `|]vJ$tV23M 3ьix&4\j&.躭b`}}ξn؀f`2}v)3UVrbvZo1؉6RxQUm4ܭ U=ğ%~3ImE£J\@! ېHcFlzn7N٬ (de)%8ɒb7۞/$:ɗ H%&1-!TF\|yǷO~9w7LlXwدTP PO1\W-]|71:S@oXP>lXٌO%=@og'>};sA7 o.qvjI z,_qكa$miA6g>s``.hV)zu'g-jٶwx;<" "&P>G #*,[l)#Z6Ҩ4(/wWD33BDG8RM?߸]|ٳuǣtFV3]=0Jn53}}]:fX,-th6ܴ[u(rQ+HZeUWAe nh0@Yn;˞~MoۂI`=މPKaP&K\s.y;ׇ;-2mEaVB$xZȒP9yc>ןH>l6K.yG~?jTi TDL4muF 7(wqSO8~)09k>9l/Trř~IfE ™˪ 76T4;`q./ 7wJ$Vlz5 i59u" ;??; ;O-}Rק Ve?o3θ~UF@#Wqn`s^ֿ|#Nj+٢mQ}gm! ~X@RpU8O6b3w2nLI\6]DjX54R>kz4w{o`fZ4\6VGH|y@tg C%*2 YmE YJ-)5J2 {o]vdZ.ADRNUbC<-Sbf45(2$**WAj Cׇ5S.ej7_E`4ݷu P0gB>(E;=DH z/K>|[큛RjUgZ}}wr\A7eҞdh(pĤ{y/ut aѯ ΋@Q[dqWb6i 0r beL!n\de8Ҽ0A}*^K(\M4K]]T'֙ᑌFR`NAP, B z`)2UB4KiA)kyN+1Sɖ!Zİm#1`C'# ȓVvz:߽ꣿT!$) Cф, $>tΝ`  P `K6?} ޲7=8,]lʖ;SzKv'.酽}g !SmcE8aR]w%y>H $|JF]rOmEf7œbX;maZAcidl76 *KtLQ.Tx)]6u'dO8Q VV3DXb~ }KG:ATcf{0p# CRJhUwkQl5S7$xdTiMSg<5ɷ"T@u_$:l%K vo9~dU떞zrf0I/68Vo9?S/_}[n}>CBA׵ތIų|+F/tǞsq͛NaqaȿvK3pLn,ͿT:}:u6y<.{DjMH}Xc1,d V\b%l^/?5#]?p<nN! 1qzU"jH@oɒvA+DB*dہ3lhؔ*08 tʫI<:Q~Ps("4Q'fH:n<ɘX XrWLc—2?d>x`L{,XóMR4\p饗viK T*]gʤ })gpZ_~M7t]wAY"@J8&X+1e~M?] QuN;}މgOV7# 7sg-(}|zMvS.}EW%jjH<G3;ѩO QXLK{7|qo4n0P#"w_tJׂ`'" {F7`a+ kI&.[*  %acB HmZ۾TL-EK-`qYiǠ O|k'Pڒ;䘣%7t&}( [O[qb4ٿtҟ7o~{y޳/:}0hqX*bb;x7>yHlk,|Uw.3?>IiN,eNYcw?ce\kESSB*sO>čL5:r[n((}-eJZ'Ħ؝m8tj=cbaZUh.V׷xW紫Qw "ck KI? xB2 H >,6tXDQc51(#^*xsPq Ȝt<.[n"`ȿ $֟|ҽ33gJ/k_KNB: 3MWH}3#?8 ~>#:O~211q;sL4ċ.eTΠ8sMǶmjkNXR2F(d^93O޽gW>,X˻JL7J"? H1 ]/tʛz[r&aB a/fHJmnpN4\b8mse8PViP,فUAmK7޵~Ųضj(4Aw0c,~S .HkDG+Hxi ,zJ%Z0^q% ܠrB&'Zn@E a07}SJTju!V{g\}\o6cJQt^^|ů}GOisw~zƿk?m{?̇E9҉^*8/FX?7\ʈڻbz~rc?K[7г`Qؚ5KYo:KtK]*YQEleV%oJK*BSH3㌱JY3N\kT[-Ƅ|XQb+RF-Q#3 MM g o6Bͦ i]P(PpHA "AI]3(0ƶ)#UD#+QC1XA|+͕ 9FYx-)-]/ 1C:da}*ԁ??闯Λ~yG94/rڟUO&HJX=k$սl6{5ŋ/xzz(?ױ:xљԗIJ6/jBRx`|<2޵{U+ݴcIǝlIm@udu:[&a8!R €b}L@^|vZAVCb(Cly4R> ju15 HACV+=pV3I(A lIj$+w\M X ZC8fhq(M8$ܙVҗ1sL_)oh5d:"L%rA88[xGLww\7|{ GάRj֩/=lmwl8d A iW]uժU.䒉:_Tec5q}މVQA~dM;pEzp'~֎F/XܻdmZ zO Y( ׈{ʽ _2yskz-3;|Z<  THM*))'Q~.|XrGb _ˠ:cLYk5V Ӊc5!ǚVKE*de@ioj$"hs%V  {nJu0-hÞ8Hm^>`S,"$<4辉7岛~/>?gn۩悐BK]w=%_Aoܿ 38K/ݽ{/ʁ1eOYO·,#.)"KǶa,7Ssr4jܲsSE%MӰdbvCm7x^Qa}}hڴuLfYFbH]J#7R< }wu~{]B+{\](:g#_hxݒJ}1F>l"pk9=Lzn'~h TSY3Ϩ(aRȲx>,@lW!M_^Xui=E*z>ݶm?:O~ M㜏-:/J6.MY52YݰL;(ԧ>wo}C=&ǜ=(?{v0ggmږj>bm_T<>0m`+zvVۧj㢠eD33Lo5AI#h a D"tai39$UPHgN"K2SfbrRa2ixQkALjWr_!"H?"R_G?+o=Vrr/Ks;׎Nͷ H૆^~K?Nuhޝq>}F MOjD6e%$i<AkPV3,rO5wPzpWƼb34`' d+xa<xdp8F8 @|o&A-Ք?19g3U׊e췋==`T)L9}Ȥj:O#/XBRrHHiV&[}P&c".A{QJ̱՘"8:* 7+qd[n; 8^ Mt%uλǿ]^UMƚR N,+p> [j[[͹g0F4 |g{:P WgM+htg==^ɵ ETj0EE!*ye4g nz!xO8!opȻJ123"<;=@$6[)Fe $rZz`vpzCcXrʕw,MaQ̹P1Z @ Bx&  *y0RmO@ (|)cj 6 Br?v߿$Y1vϾr3Ta Ci]^jcFH[邹K;;#e]>я~k}Ns=Yܳzqgu]?ڿ'7#|u7,u ^y~}]r)˲Sw XhkusBs'&6x5b|6p=wtZpiMQ΋ s&E$,Ђ)Y$sp fնgPL>)t;Xֈ|.[6>7ĿgG˙|> mbv'`,-`?'6зe~կַHKI:~G3o~/K:k2߶_y׬z33WՕZ:P( ?شn:s4| {^l蚩nBa׷|䌗DTJYGEFqy\}?=mEzgbe\eb`˩C(5xl!$+V\Oxb 5A5@vcScN@ /?kf__oWthbծ]TvpYcy0 R"L[b82Y4'M2Yվ}{-]H #G$/ "DZj FƜeRZ|YtۤB3S^ck _L&|-oy?(26 ԃpem!u,ur$:PJiguꓟd:s?]~?q+|6FK7b.eP#9=MOLWǩuKGu|j0,U߾`{qJ=L|;əx;޹aG7?bhxꉑ_zp5$R\H. 3{惠]6DQ!KI"̐"YDuWꕷKD꺐vF6(d,&t8>餓~xё@xv3o~p6SZ b,'EH9"5:m9" _jUvرoY)tfJrj[$KJa2kRq1oQ;Zk)۰z1ppO6C+F'oO[)|lA z֕,٭=ls2OASӰa9{0˗XK䓻>k}q+hj yOO75\7}|t32Ao*_TDmݵ>7U5 lq%8=|58f\Z)@~PJt TGe}PQ0RE1uSSGB'>7;{׿oܳgOc%t f5,2 [2mNwڵ7p=|ygFKCWc26X1F^ 8EHwON~fP{&sƓ7SDQf^h:(d탓G9X)A ޴ O 3mH^ $L~T{<4dkߵe|]?7y<+2F[X%}CcQgYo^3 sw,燐ќis}˓{o߱O0 i0qHbX $'v&kRnlCbуֽ>XrċhXD훛E05>_= lz@I@N LDamiNT;nkso|wae{giUC*P{)i'~qMlX L1-uBqFă:>7:>7iݚ?7OPwۣ?šO|G /9~]hjBz&=NxshDX Ռ !5)Ǧj6]%[Vbb',OE1i [ѓ˙T/^$ۭƒ|϶QNRSE³t E0 k2"8EU8T}z-wЌsW>Q =3~t`뎬V-_Q.kgrvn55;)'64m=aڌ(MDL >,9+֞jڷynzWצf>S"f()DmF9w[gdZUko{nηYxTe2~X֮fW]֭=WQf\(0Ob{ׁJtmͣSetdP 06lc!? XEr]ɹnu}5?bDif|ꩦ3:5*|uo~'@JqgV5{hVA( J:f [C$DnqX20/hA6EgpX׮񓖯xECMMA5Fu#[(9k߿sO2VܑbZH3Xu`_}C_q|qZDahXU-$FFʊС]Gq+`B^C#ec=S6;17_|o5B $ 6/|?:u]{2%!؝_ 7$eе\O'vl~O}*M6i<[9tKئ"76Lҭ1Z1E +KY-a" 1_i _H`])QЅډW@5@Sw" GfX>núշl*qtKbCc-f5(: ~lsv`^%G"CٺeeoyM7Xm?gPRSpECD}+ HH 8oPAzh!Xgv;&/2MLZbJGTr&ޓٞd,`Hb|̦}.g`eƂ| #3 dp#L˲M-7SVN)M;Tu.p$Χ[&Wܸqҁ 𚭖yBҿd]sYdOW/jg2Q(cEG1+V J tN,Ьjo~~לf:髖&[<*ea\I|+ z_<W}CM_oXf1qh i+^oi/a3[Xt;Qwcrw猑cd'|ׂpV fhbrD2@.dg(ޥZrB$ i:6xHZ⺮y`nQ <[`$MMxՙ/URz+xO?N +Rd/iڍvC_PG~i4`BzYojoJQ*[ "ϕ\E~3{ԇ߽o4Ψ8B(.T{CD.<,"awhH __?zGE3f$YحւT +Gqp ;I,õb[}5ѥ\=77TAVҽs:#q PZ Zix?<ыyXr!O(Ii`  ,T wKcH'Q>*8߾Jg`M, ΠiEQӴ|DGGP#%0qY2ҷHoKyHo?`"N :M ^%(t(h!ʪ -z:-tkqB/4Sa{J @k˲0LܑqO1FcbF~ ZBqDOaj2ҢI'%!$cu!Khg/w~i!I(qW*۶-Bx7777666337ˠ"~'KzI/]s )E75J7D5/2+Mnϛm&V ‚HDR)RV2R!CKz;H^F@|3zQ(Ƃ[:32Lt!D#(cJ5$(tK匒od,tdaMDaON@:A~/1N]6M_GJg[f_ӧPJ]:39ifL&>F)h4ݻ7/;8/ty$-嬶+w)뇳cYuj.c3rV(RL<54LMNVذ4[S $ kI4(z{{;~[o7 #|;/k y:aaz'9\xH޷{6o \'5E!l,65<g}<`uj)ɽOv1 trACJ0M@\ #yK)!:љn!J7 {`CB| y:Ґ tF꺞~s: >E'$ A݆jTӴ>T4mŪՓ|#$' rrI?Rhvn4b QR)dPQNJU;N`c:1% C 1.SO=j1Ɗ`[m;QJmnZT*W]wݞ={8Z|tl^eA'Z LrͿ =1t,=N!WPjOz5Qj( Țt~1yw)'!vv3 ٌ#.0P 3eĵ$8??3~IpyGQ0MҕIM71N8Yi~ۗxX[p4lNCEɟ|G;'ͿO:0i(tyho=YK*Dq0*oSMڄdhjL*I\}/PfQp Ipg# F߅4#c \hx*RJ裄,֚Bҡܻ<٦@_ѳrAK^U=+ C ),q 8 H;PɀXP0sŚUu0Zn@S6W'=GӍ|vR=}RIɃ)8mx /G@BD31=Ce24a@D?W9p08}}}W\q!$]mvQza$5xYNU3Bx{WH8{3I!AT7LƬͻզa@ ÚYIཁP M Taܬ 0Fh M jpA 3chLqZ)Bm|L@&E< @ǒ'qzvwpniF Ϯ|@ɟ|z׈ʨᄤ67S*s$(LFۼy2x B# ∿Ҥ3,a}0<_җZl6'n)c3tw0?|pa߷/]0l"O[V$] S(KxţQYV.lMSm4\LJD5.r^5 tQ$3( -B(i(XXc7;S_)^&\tbEgާiYlIC+xQ߲+W;mHݘ>5EUdsM \\_ aX;zF8<6)荃)nQv|X.Mdڭv:sssGLNyXm_xI, {|鈺+$ h6<<|Yg{K'⥵cI Suݣ5gle!nZ&ՌJKWl,,l)g vaI T^iO` MusYqR]ӘΨnƶы|t'iFӴ >|통Oa8_;mi:K?%e,A 8 V&ff<@4ʅ.] X__SBDgZ%!bnf_rKL(%GRX\? ;Q~gM3t NZlY02H_Sfu]7 T*\rihtta1E<4]"?VX2Z lM`N)Tg++ iծMB!J+F.ԾwZSXyͦzG}\k| 9ڜCGAlrl-ԋ7f'XNgsVғN:}_% ;lN%ŕ4o^l֭[ű{v'!if90u=ˆEOT)~߳q-, =՚璝|Jwzso❡$ljfϏy.X Q,w -_gXƔr$|c$ p\p1COpcT,bfZ$oVղgzԦfxD T3M9FU<N¨fu=}+ UT9/|"mӺL67FbFN,EBۙuȉr۴ik'oX܄i-2(/_^*ZB2z8O@9t;U@fJŲ,uqDb!hNm!eg~9. nhfRrw]3=1lm8GշTڰFCQ ;cg4aYvLr^qX2g@B{<}?ٶfL^# FuMw}kXK%vPv{m4[nMU'-L2NϝRo/;m W眳L[U>%1վ iz=SOh0 `l{`0 =0t"=]_NZ<;[ltyLqARᜧO>O{̺B/7U8Di!8]i4;^u^rrOwx_3Tcc72 L.E] <7gko?ՈN|)8QH6e4vtxb4J$)/PVnIe+PEA1Q Iu2BԪuv!<b)T?BMceG29C5_m\%g9337uhhXL\Qc8l<;UΣ֋dO{ں}ʒ!-/blӢ],Js}˗uB|tlij]|`|[;Lߵ}_Pв妡'%x/ڮ'F峀&DMQc$겶vi:9~6P r8&2dNg'Po,B,FCz`Xc]1+חקpuBB_4ְq+f%j "{|#X#v37iSE,z" "0{ mǑlNĵp)~L웵L.'º'ֲT){Myo> ;{ώv{ r88 FAֈc&.sĞpX DPaxnd2R2M3=:K 0P00i*8Yܔ8J: J'Bto_yúlYs V~57'Ͱ*V f[Q/~ɉ@= b{*.)8,glůδqm =VӇ^[J"%(a4"(eĬnDhKb&R'GG;OY9zH$3GR",5V:9b!'qrGw1"`z$'hM橊,mAAnYK'W~}~N;uyBK kd~9e :ToKj3p\~ym'n:I( 1z27;?0y\*uj6 'zf (vO WUFP9SV^d0Ls9ӊi~2֮][. s`ų|q~$slOrrBJ=}~+?9P&w!E0%nͩ5SAc,>|p+S|?T]ھun{)bЀ4cBQ18SSSׯ_1~h|||hcGϼBVdFFF\m4ӳi;<D0{Bv@ wڵ" 2T*1Q,3٬) p A#4UHӱcZb=[,dGs<\P |F\"8>b?gB5u:WkTS2̠{ %.7&5 Ud|% @j-CL+C7hB\; 6_5lT.ıS)W޽4\>=33x_,g^gÎ1ݍ1u=:رVUZvm T*)#lҥCCCfh&yK_ZSǓN޼x A|KQrK]gU6c̴E)pVKxbNUL qBS,XV^@__2s.h7]޾ᐡ1 4dmvDJO_eZ)UsuLiH \KZ*.ύDR' .bq,},EQzA^jdBP+[֜eđ3x;n}ީWF8KBbP!ٹ{!,Ezpk*pvu2 gggktR>~?vi(R^޽P(4K.dϞ=y)e, m۾ۗ/_bŊ5k /Wմ@(GZbeM_oz\޳71_:x^N<Pv͚uTL/!+erYCDe0R9 u?sL}&flN5V]v >+[ C%N< ؉TaSٰ̎?{"bM%08!XhfsZP[R/_3Ti&6ObzbAn+;e^1 nU=)ꐪf=~wӮסƤh2ZeImZc8}b`:f\ Ё]]]iUvZ۶:+˶mX7b|\.B0\Vij*Q͔]8D* I09tpBBF[gv5t|vYVks /"Ms.8bU/wr,RbziYTӭJ#d17~pCOWZ4y{NC) SqS~R1ҍd// eo N%NP"Dٚo0ko~ڮ<]޴֐$}o4ngn53I heBUyL'5Ϳz?p+9یB y~3 D iV@ˣs;FJbfT*˾l6nrVcЮu]+-J`VN㫴AnL:ʠt%k{A/:$t nLT32UiV8kY!aٙ\c57 "8 ?îJT7&iuU<]2lze6x5PoX/tWGwQ[_7_i !:]Y zsY_? H@XӡCQ ƅb\,J5 N:s@Ʀ '3ogpͮ6'NVTmNJt)lTݘ2L!؆ y'tڎr&!-!qSO/#*N+Ax-xt*A@S}}}i(-Ŧי.b12'@p.) T?Sǐ&3 l$Ôvs~ :l# *?3#IH=h\?@0hqn@nSm?j>|2cuQ2}ҙ'ꢸO/]֎ނu$ݛH۝%ŹBݨ!,Ga1*a]g\wٖ3H0tP?\I%RcgHq鋤} B#q7a4TqqPP!D)OsQWj納ˋ6 ݦp[(eke_= c&ul D V[hۘzë7![2ML%-BAWX3l58,POU\̣K^#=f'=X({g}#]˖-_=?֎'j/cKÆ-zl0\J]~X9l ^Oʗ4"bTF0ܶ=LusmӾBR`j!yK/x{nOTOts?Vyh34A0jqN\>wvn@iёHi\t0yJi՚ϷZ-uC=499WRzAڵkWZ%رcs\VEj333ZMuR|޶ώWLf3}_ܷg Ǚf) !|!b:y21pݨ.hݏsED9eo3d2XRE #Q[glwܝdk h= mhGԿu$=Z(={M9HAx r/^)UQ݂"S;J 6ƛX}.>oe`Wݛ{rrݲo/]vʐ_Zz"R hNxחo|;?w-On߾mܗy}zʨVb4"fGb4a>d): n8]tvffl޽oŊ]vHe5D(a$V?H .:O6h!?xJfӽ lMFF϶S9Ƭ}j㓦9 7ˏ?ϮO|uk> 嵵*Px:]L{"pC]8tpo]:o'ggg عsXJ/~jjnjdRD*H6mrilTZ+U{B $eD"\aqQ)LKP*]'Ri\_pxzp_ޮlfdp#bW.޸f3Y>zt.Y:*laG2;wuȴ-cՉ^}8Ƌ1&ggaK L81.ڞT!7taA(RΆ[wtqiMVA"r>m-|WիUt] 1d7zGO~o_ AĴ\Fk.c0DRoZLka vķ$)hJRi"n`rPeOo[G}?]/C lP/L.WLBiUo ~,멩@ j2uӷH[v'mMȹteB)K+B@ APRpƤ+zzLs@s1d(gfLK.mښ *bR\=}3=C,@}S$2yn4sޑJweݙNM&Cʋy-&s~e:m fiO~Bk+p˜[{ 0 ٍ`,Cwp>4IoxSwNVFWQ,mSC}~z]|k?~m@gL#Rڂ7^`|7SrG!8NVm{hhȶ633ֈh`/R4==i&h4b=;2;_Atzͼp:eP "‘0ňdT CYtU[&] +*[baJ0pۡ5ssӇ,emϩ[zWdrd)IBtQ70RАt¨Ƨf{ʃ=}}+f!H_܌4-IDAT$C |T瘨8+^o8F8)Ɛ ]4h 덯?v6}ͪ hQ=Fd ܳeSC3-RBp1j2?ˋ_WՍ?5 Hh'v QQ5t?͔U*j6jT*8pR˲,Y).ML75kքacۛs -tvܤ-!͕(dKf wMB -INL|5[Z6wnzCW$-+ esz3䮩P 8 RSuQ%MeL0Ƽ^5]3 C:7W26P>5w >hp(՚kx$gk"/rt6ӊ_! -a47>WYCnD]4FHϓHaɌsW]0jןDNUUƍ N#]G>2?RG2S#a:/?*rhƶt-9 ˜ڼ=[G;S?-8Keffƶt.JJlڶ](h0BvjYSO !;f49eT!+%=bJC`Śq`J"6m˘ATH[%8k,,QN(Pb!;dLq0;vz B@P!M$RGgX}pq=.` ţgpHKǜH;;Huni^m\}9{ؒ#թKĴŮ;F{.5i( pJ9&:mLl|^7~ݞp3O1?÷_;VkC?4אҔ\/+ %uݹ߹njf{/J9+\T@!NN R9G)Bzļ_|ݱt?|ގFcuCWUE]׳lL|>?33o߾jӣiZtK.9v(2//ԅFX> U4lTzusO}ϓ0HmqGAxLMVs%F()^O=7Q(i$̴_{cus>ovn#\R&%Y2"vH);AN6q@!r` l3dɴWҲH$3zwݷEap> oڛ73+`װ Y eqh]Gf{/G]K{]nk.y5=kM6B}֩519~{S|t}tKБTdsJÍS*w3{AhYXPJxNdg&.3 !vXڍo;~fRaztؽ_w~_Z7I4J؆E~qY)2 8΃B=0¹A-=`[|tTFA}U6avZ\\kZAt:,|Wq.]v=G? L\XX(ֳ,otKx$p~bNϜO?ʕ1~;zf+f|@TキINgUb0`%41(˝]6GG74~ b?7Jllǯ!q)6oto)JKJ'0W٦Còahh_cDNn& rS(@'=A !q|gFw7{A-!)!yW/Υ7N6vIК3ArqTl6g]Ο4C&yLK{Ԡ܋O/ti=CV4Rm8'Y0+gHbjj ycc%fsb=Advng3#?[h40ƣHp4L&*2k qչ~1Rŋ0]Cˍ}fׯt;%pFFϡL_G>Wΰ6y0՝# g Od^T*R21U˳:Ǐ+e)Iӄ W=Iiʛ߹6[ˋw.g펑 ew75O,VYrp<1p?#&fБ#jDx%:bBGpJ6be-> 82mÀKfpᕒ)) IY"豥zC%U&E#PM+ĬZXHXyI) 2 bHl?_&DRM٩/ZNk\47w62~fiD<=ToVWC Hs8;/9k$i t蜪*C(;Gv֏bJ)C=㏷8Uux`Ϟ=БVm_a⋫fseeR3D6j}{G}&O0)O<440 Ӱ={wY]qQ_184EV6>KF:~R8@,ǂ tn+mqIL?Ԟ~_Ү1aʔY)<xXر2&,1\W60+bJDG}"$'뉵,bղͤv&Ӊ-zsg3'̟y,Wb(}Gˍԯ9L zURN*vYD{G5[ aYVTRxT*^=bJ["%{ʕ/~vl[DRٻwo1[o&aQtuTD>1;?xd864B< mBLTbHIC)8s"6YKi&Q'i6k3L<*XJAs+5cuJ3MQYLȆsPfBh:Hqͱvz+7Y٤4 j~pvR U1a8 ìJcI3U;1Ј<V2S{҈+34<[ R&×z2U;@[] ppsVޘ_hd$ﯸ,H045Rr0JYMS$ȃ)`՛2`]lO|.h4zT*#*}_ł eJr̙j&B* '{wáSSҼvzպef V/\DY"9,Ԓ܅a(29زLFU0%h8JSelQv}2+_Y1AM滫c\{j$y84|;(%P0jFTG:e<$g%ԋtRu8D5M4ө_}T-׿կ~s^.U2XBL&>tիWz^o*]2Lۘ+}k#DP Pia ,h LciD;SN&Ұ2{WGo\M(XhltYC )[nk.7L`;WC"UD3™h.^ %b^~p.xw}42ՔPFa R̖I& BDZ2_ ΧOnc䡯}|7nůϧoNPbY=G7of}ͅՋ{)(8vhqYmn$4ˁhP5 1ټA-je- smVAhMl...?~ܲGm%Zk~+_o] _F#)ҒFСC;wpSpRlJ޳gޖ`XwI`AP^$|pH4 DsC|rjƃfu{qL7\i˜}֥rͺxz>T3w/;} jӈ%xU1k[kn SСCʕN3\ݻw:WcΝ;|"$o[W;Lj ˂ A$C,̖픜Rm:ӑy.z$BiӋ+{"aiWpcuk\`KynϮF-IԍzKr)A2cYp˜dSKrjtmmݻdS>*>}G^I'"E7وs+Y"cbُ-۫?|y?gON1 _߸9d3J={Ҽ{JKkR4~=,/j>I'wP~\4WA|UQJw %Fs/Y_W@1ܷp}߿?l;8jCP7`>RMe]|ƹsՙUWZ 8p@ǨQ`zFg<ӫփI.^n=wӌ~smGHئ%tԭi'W|#\@6vf?86\le wy; ~e\]]X[^Oz<51A9\9KaHEЍW] JVaj7)?}=!WL3m>zj8NvV{@gq\ >|`gg>\S(z/sg8{]O-JOwO~7^{sI@5},m# d1j~ cNEnYWv/ *84}]Q_{Z""^4q'Cd!&$ F 1§m!k5>"m5y|SK$GFX<'7זTH̊A;@ᖧ<=RKj Ce{(ׯ_?wczv"Ʒ:W*$DzZ溮JEQorJP7`ASjXC!&>SR, KBܴ;Ke$7nvLNpeeQ>ԇj:' N-^6,MY$ JVnM.HiHlhD&)2&F|lHq2k6 -Ih 岵יK%4vs߾)<lp CUr}B(O"T#}~qpdo_4}dYd rBF.c  KSPqmX]E-}=z4$=٦z岪ܿ׾5u7MZCjԪ.qw .z4M#iY灇?TڻgqR,TZlLÌ [/^sK+?Aiڱ k.2cW|[\[ۍ.~'AY?@٤ggx iLΛznYv[ryy71P%Lª֪9%\p6y}A=y>6╫7ՀVG9J+NUZ.u,k~~^TXUKRUOgY=B% FC1T\DR<=T", 58P'!u ^fi"C˶(b&+ A FF픲 魯TMٸ{xfr` *Vl|bQ4Ee1X^[QO/Gn^RS8A.c˱k nuvFa>J( }+6/"w\5Pͱ_dgm`jݻmqOD}jYLT*U*k׮ h4؉TZiz";LԴTiU}nH_0e:/ԥIO@v 5_.;x:NA8Ҁgo,Ɠ)|xX)Woz6NWP5M%1< 9$5CCn9é@p0׮6@(1V7m >d3#lݓۚa9Kn04jj- #-f9q.5 :6@P1@1(j'lAP@O`\%gt\B:ҨhDWcUr~:ea^/z/UXԳ%IM]?KfvBP K[)AI oq_ )̱JQNxF 'U),ɡ37l< [oX`SRrQprn5#!aNeqF27`&ݢ$!C w/a|o?J)%m׉sk(ZwjQOh̭v8=m姊t]M _0=n p8h CFBundleIdentifier nlohmann_json CFBundleName JSON for Modern C++ DocSetPlatformFamily json isDashDocset dashIndexFilePath index.html DashDocSetFallbackURL https://nlohmann.github.io/json/ isJavaScriptEnabled json-3.12.0/docs/docset/Makefile000066400000000000000000000071231477615276400164450ustar00rootroot00000000000000SHELL=/usr/bin/env bash SED ?= $(shell which gsed 2>/dev/null || which sed) MKDOCS_PAGES=$(shell cd ../mkdocs/docs/ && find * -type f -name '*.md' | sort) .PHONY: all all: JSON_for_Modern_C++.tgz docSet.dsidx: docSet.sql # generate index sqlite3 docSet.dsidx > "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)" # fix spacing echo -e "\n\ndiv.md-sidebar div.md-sidebar--secondary, div.md-main__inner { top: 0; margin-top: 0 }" >> "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)" # remove "JSON for Modern C++" from page titles (fallback) find JSON_for_Modern_C++.docset/Contents/Resources/Documents -type f -exec $(SED) -i 's| - JSON for Modern C++||' {} + # replace page titles with name from index, if available for page in $(MKDOCS_PAGES); do \ case "$$page" in \ */index.md) path=$${page/\/index.md/} ;; \ *) path=$${page/.md/} ;; \ esac; \ title=$$(sqlite3 docSet.dsidx "SELECT name FROM searchIndex WHERE path='$$path/index.html'" | tr '\n' ',' | $(SED) -e 's/,/, /g' -e 's/, $$/\n/'); \ if [ "x$$title" != "x" ]; then \ $(SED) -i "s%.*%$$title%" "JSON_for_Modern_C++.docset/Contents/Resources/Documents/$$path/index.html"; \ fi \ done # clean up rm JSON_for_Modern_C++.docset/Contents/Resources/Documents/sitemap.* # copy index cp docSet.dsidx JSON_for_Modern_C++.docset/Contents/Resources/ JSON_for_Modern_C++.tgz: JSON_for_Modern_C++.docset tar --exclude='.DS_Store' -cvzf JSON_for_Modern_C++.tgz JSON_for_Modern_C++.docset # install docset for Zeal documentation browser (https://zealdocs.org/) .PHONY: install_docset_zeal install_docset_zeal: JSON_for_Modern_C++.docset docset_root=$${XDG_DATA_HOME:-$$HOME/.local/share}/Zeal/Zeal/docsets; \ rm -rf $$docset_root/JSON_for_Modern_C++.docset; \ mkdir -p $$docset_root; \ cp -r JSON_for_Modern_C++.docset $$docset_root/ # list mkdocs pages missing from the docset index .PHONY: list_missing_pages list_missing_pages: docSet.dsidx @for page in $(MKDOCS_PAGES); do \ case "$$page" in \ */index.md) path=$${page/\/index.md/} ;; \ *) path=$${page/.md/} ;; \ esac; \ if [ "x$$page" != "xindex.md" -a "x$$(sqlite3 docSet.dsidx "SELECT COUNT(*) FROM searchIndex WHERE path='$$path/index.html'")" = "x0" ]; then \ echo $$page; \ fi \ done # list paths in the docset index without a corresponding mkdocs page .PHONY: list_removed_paths list_removed_paths: docSet.dsidx @for path in $$(sqlite3 docSet.dsidx "SELECT path FROM searchIndex"); do \ page=$${path/\/index.html/.md}; \ page_index=$${path/index.html/index.md}; \ page_found=0; \ for p in $(MKDOCS_PAGES); do \ if [ "x$$p" = "x$$page" -o "x$$p" = "x$$page_index" ]; then \ page_found=1; \ fi \ done; \ if [ "x$$page_found" = "x0" ]; then \ echo $$path; \ fi \ done .PHONY: clean clean: rm -f docSet.dsidx rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz json-3.12.0/docs/docset/README.md000066400000000000000000000012731477615276400162640ustar00rootroot00000000000000# docset The folder contains the required files to create a [docset](https://kapeli.com/docsets) which can be used in documentation browsers like [Dash](https://kapeli.com/dash), [Velocity](https://velocity.silverlakesoftware.com), or [Zeal](https://zealdocs.org). The docset can be created with ```sh make nlohmann_json.docset ``` The generated folder `nlohmann_json.docset` can then be opened in the documentation browser. A recent version is also part of the [Dash user contributions](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B). ## Licenses The [JSON logo](https://commons.wikimedia.org/wiki/File:JSON_vector_logo.svg) is public domain. json-3.12.0/docs/docset/docSet.sql000066400000000000000000000732171477615276400167560ustar00rootroot00000000000000DROP TABLE IF EXISTS searchIndex; CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT); CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path); -- API INSERT INTO searchIndex(name, type, path) VALUES ('adl_serializer', 'Class', 'api/adl_serializer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('adl_serializer::from_json', 'Function', 'api/adl_serializer/from_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('adl_serializer::to_json', 'Function', 'api/adl_serializer/to_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype', 'Class', 'api/byte_container_with_subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::byte_container_with_subtype', 'Constructor', 'api/byte_container_with_subtype/byte_container_with_subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::clear_subtype', 'Method', 'api/byte_container_with_subtype/clear_subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::has_subtype', 'Method', 'api/byte_container_with_subtype/has_subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::set_subtype', 'Method', 'api/byte_container_with_subtype/set_subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::subtype', 'Method', 'api/byte_container_with_subtype/subtype/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json', 'Class', 'api/basic_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::accept', 'Function', 'api/basic_json/accept/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array', 'Function', 'api/basic_json/array/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array_t', 'Type', 'api/basic_json/array_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::at', 'Method', 'api/basic_json/at/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::back', 'Method', 'api/basic_json/back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::basic_json', 'Constructor', 'api/basic_json/basic_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::begin', 'Method', 'api/basic_json/begin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::binary', 'Function', 'api/basic_json/binary/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::binary_t', 'Type', 'api/basic_json/binary_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::boolean_t', 'Type', 'api/basic_json/boolean_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::cbegin', 'Method', 'api/basic_json/cbegin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::cbor_tag_handler_t', 'Enum', 'api/basic_json/cbor_tag_handler_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::cend', 'Method', 'api/basic_json/cend/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::clear', 'Method', 'api/basic_json/clear/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::contains', 'Method', 'api/basic_json/contains/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::count', 'Method', 'api/basic_json/count/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::crbegin', 'Method', 'api/basic_json/crbegin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::crend', 'Method', 'api/basic_json/crend/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::default_object_comparator_t', 'Type', 'api/basic_json/default_object_comparator_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::diff', 'Function', 'api/basic_json/diff/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::dump', 'Method', 'api/basic_json/dump/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::emplace', 'Method', 'api/basic_json/emplace/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::emplace_back', 'Method', 'api/basic_json/emplace_back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::empty', 'Method', 'api/basic_json/empty/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::end', 'Method', 'api/basic_json/end/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::end_pos', 'Method', 'api/basic_json/end_pos/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::erase', 'Method', 'api/basic_json/erase/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::error_handler_t', 'Enum', 'api/basic_json/error_handler_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::exception', 'Class', 'api/basic_json/exception/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::find', 'Method', 'api/basic_json/find/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::flatten', 'Method', 'api/basic_json/flatten/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bjdata', 'Function', 'api/basic_json/from_bjdata/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bson', 'Function', 'api/basic_json/from_bson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_cbor', 'Function', 'api/basic_json/from_cbor/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_msgpack', 'Function', 'api/basic_json/from_msgpack/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_ubjson', 'Function', 'api/basic_json/from_ubjson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::front', 'Method', 'api/basic_json/front/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get', 'Method', 'api/basic_json/get/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get_allocator', 'Function', 'api/basic_json/get_allocator/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get_binary', 'Method', 'api/basic_json/get_binary/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get_ptr', 'Method', 'api/basic_json/get_ptr/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get_ref', 'Method', 'api/basic_json/get_ref/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get_to', 'Method', 'api/basic_json/get_to/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::input_format_t', 'Enum', 'api/basic_json/input_format_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::insert', 'Method', 'api/basic_json/insert/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::invalid_iterator', 'Class', 'api/basic_json/invalid_iterator/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_array', 'Method', 'api/basic_json/is_array/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_binary', 'Method', 'api/basic_json/is_binary/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_boolean', 'Method', 'api/basic_json/is_boolean/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_discarded', 'Method', 'api/basic_json/is_discarded/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_null', 'Method', 'api/basic_json/is_null/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_number', 'Method', 'api/basic_json/is_number/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_number_float', 'Method', 'api/basic_json/is_number_float/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_number_integer', 'Method', 'api/basic_json/is_number_integer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_number_unsigned', 'Method', 'api/basic_json/is_number_unsigned/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_object', 'Method', 'api/basic_json/is_object/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_primitive', 'Method', 'api/basic_json/is_primitive/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_string', 'Method', 'api/basic_json/is_string/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::is_structured', 'Method', 'api/basic_json/is_structured/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::items', 'Method', 'api/basic_json/items/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::json_base_class_t', 'Type', 'api/basic_json/json_base_class_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::json_serializer', 'Class', 'api/basic_json/json_serializer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::max_size', 'Method', 'api/basic_json/max_size/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::merge_patch', 'Method', 'api/basic_json/merge_patch/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::meta', 'Function', 'api/basic_json/meta/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::number_float_t', 'Type', 'api/basic_json/number_float_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::number_integer_t', 'Type', 'api/basic_json/number_integer_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::number_unsigned_t', 'Type', 'api/basic_json/number_unsigned_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::object', 'Function', 'api/basic_json/object/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::object_comparator_t', 'Type', 'api/basic_json/object_comparator_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::object_t', 'Type', 'api/basic_json/object_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator ValueType', 'Operator', 'api/basic_json/operator_ValueType/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator value_t', 'Operator', 'api/basic_json/operator_value_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator[]', 'Operator', 'api/basic_json/operator[]/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator=', 'Operator', 'api/basic_json/operator=/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator+=', 'Operator', 'api/basic_json/operator+=/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator==', 'Operator', 'api/basic_json/operator_eq/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator!=', 'Operator', 'api/basic_json/operator_ne/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator<', 'Operator', 'api/basic_json/operator_lt/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator<=', 'Operator', 'api/basic_json/operator_le/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator>', 'Operator', 'api/basic_json/operator_gt/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator>=', 'Operator', 'api/basic_json/operator_ge/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::operator<=>', 'Operator', 'api/basic_json/operator_spaceship/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::out_of_range', 'Class', 'api/basic_json/out_of_range/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::other_error', 'Class', 'api/basic_json/other_error/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::parse', 'Function', 'api/basic_json/parse/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::parse_error', 'Class', 'api/basic_json/parse_error/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::parse_event_t', 'Enum', 'api/basic_json/parse_event_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::parser_callback_t', 'Type', 'api/basic_json/parser_callback_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::patch', 'Method', 'api/basic_json/patch/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::patch_inplace', 'Method', 'api/basic_json/patch_inplace/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::push_back', 'Method', 'api/basic_json/push_back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::rbegin', 'Method', 'api/basic_json/rbegin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::rend', 'Method', 'api/basic_json/rend/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::sax_parse', 'Function', 'api/basic_json/sax_parse/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::size', 'Method', 'api/basic_json/size/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::start_pos', 'Method', 'api/basic_json/start_pos/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::string_t', 'Type', 'api/basic_json/string_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::swap', 'Method', 'api/basic_json/swap/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::type', 'Method', 'api/basic_json/type/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::type_error', 'Class', 'api/basic_json/type_error/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::type_name', 'Method', 'api/basic_json/type_name/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::unflatten', 'Method', 'api/basic_json/unflatten/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::update', 'Method', 'api/basic_json/update/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bjdata', 'Function', 'api/basic_json/to_bjdata/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bson', 'Function', 'api/basic_json/to_bson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_cbor', 'Function', 'api/basic_json/to_cbor/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_msgpack', 'Function', 'api/basic_json/to_msgpack/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_string', 'Method', 'api/basic_json/to_string/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_ubjson', 'Function', 'api/basic_json/to_ubjson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::value', 'Method', 'api/basic_json/value/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::value_t', 'Enum', 'api/basic_json/value_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::~basic_json', 'Method', 'api/basic_json/~basic_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json', 'Class', 'api/json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer', 'Class', 'api/json_pointer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::back', 'Method', 'api/json_pointer/back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::empty', 'Method', 'api/json_pointer/empty/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::json_pointer', 'Constructor', 'api/json_pointer/json_pointer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator==', 'Operator', 'api/json_pointer/operator_eq/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator!=', 'Operator', 'api/json_pointer/operator_ne/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/', 'Operator', 'api/json_pointer/operator_slash/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/=', 'Operator', 'api/json_pointer/operator_slasheq/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator string_t', 'Operator', 'api/json_pointer/operator_string_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::parent_pointer', 'Method', 'api/json_pointer/parent_pointer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::pop_back', 'Method', 'api/json_pointer/pop_back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::push_back', 'Method', 'api/json_pointer/push_back/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::string_t', 'Type', 'api/json_pointer/string_t/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::to_string', 'Method', 'api/json_pointer/to_string/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax', 'Class', 'api/json_sax/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::binary', 'Method', 'api/json_sax/binary/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::boolean', 'Method', 'api/json_sax/boolean/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::end_array', 'Method', 'api/json_sax/end_array/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::end_object', 'Method', 'api/json_sax/end_object/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::key', 'Method', 'api/json_sax/key/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::null', 'Method', 'api/json_sax/null/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::number_float', 'Method', 'api/json_sax/number_float/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::number_integer', 'Method', 'api/json_sax/number_integer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::number_unsigned', 'Method', 'api/json_sax/number_unsigned/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::parse_error', 'Method', 'api/json_sax/parse_error/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::start_array', 'Method', 'api/json_sax/start_array/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::start_object', 'Method', 'api/json_sax/start_object/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('json_sax::string', 'Method', 'api/json_sax/string/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('operator""_json', 'Literal', 'api/operator_literal_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('operator""_json_pointer', 'Literal', 'api/operator_literal_json_pointer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('operator<<', 'Operator', 'api/operator_ltlt/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('operator>>', 'Operator', 'api/operator_gtgt/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('ordered_json', 'Class', 'api/ordered_json/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('ordered_map', 'Class', 'api/ordered_map/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('std::hash', 'Class', 'api/basic_json/std_hash/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('std::swap', 'Function', 'api/basic_json/std_swap/index.html'); -- Features INSERT INTO searchIndex(name, type, path) VALUES ('Arbitrary Type Conversions', 'Guide', 'features/arbitrary_types/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats', 'Guide', 'features/binary_formats/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BJData', 'Guide', 'features/binary_formats/bjdata/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BSON', 'Guide', 'features/binary_formats/bson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: CBOR', 'Guide', 'features/binary_formats/cbor/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: MessagePack', 'Guide', 'features/binary_formats/messagepack/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: UBJSON', 'Guide', 'features/binary_formats/ubjson/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Binary Values', 'Guide', 'features/binary_values/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Comments', 'Guide', 'features/comments/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Element Access', 'Guide', 'features/element_access/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Element Access: Access with default value: value', 'Guide', 'features/element_access/default_value/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Element Access: Checked access: at', 'Guide', 'features/element_access/checked_access/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Element Access: Unchecked access: operator[]', 'Guide', 'features/element_access/unchecked_access/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Exceptions', 'Guide', 'home/exceptions/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Integration: Migration Guide', 'Guide', 'integration/migration_guide/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Integration: CMake', 'Guide', 'integration/cmake/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Integration: Header only', 'Guide', 'integration/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Integration: Package Managers', 'Guide', 'integration/package_managers/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Integration: Pkg-config', 'Guide', 'integration/pkg-config/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Iterators', 'Guide', 'features/iterators/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON Merge Patch', 'Guide', 'features/merge_patch/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON Patch and Diff', 'Guide', 'features/json_patch/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON Pointer', 'Guide', 'features/json_pointer/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('nlohmann Namespace', 'Guide', 'features/namespace/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Types', 'Guide', 'features/types/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Types: Number Handling', 'Guide', 'features/types/number_handling/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Object Order', 'Guide', 'features/object_order/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Parsing', 'Guide', 'features/parsing/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: JSON Lines', 'Guide', 'features/parsing/json_lines/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parser Callbacks', 'Guide', 'features/parsing/parser_callbacks/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parsing and Exceptions', 'Guide', 'features/parsing/parse_exceptions/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: SAX Interface', 'Guide', 'features/parsing/sax_interface/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Runtime Assertions', 'Guide', 'features/assertions/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Specializing enum conversion', 'Guide', 'features/enum_conversion/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Supported Macros', 'Guide', 'features/macros/index.html'); -- Macros INSERT INTO searchIndex(name, type, path) VALUES ('JSON_ASSERT', 'Macro', 'api/macros/json_assert/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_CATCH_USER', 'Macro', 'api/macros/json_throw_user/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTICS', 'Macro', 'api/macros/json_diagnostics/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTIC_POSITIONS', 'Macro', 'api/macros/json_diagnostic_positions/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DISABLE_ENUM_SERIALIZATION', 'Macro', 'api/macros/json_disable_enum_serialization/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_11', 'Macro', 'api/macros/json_has_cpp_11/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_14', 'Macro', 'api/macros/json_has_cpp_11/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_17', 'Macro', 'api/macros/json_has_cpp_11/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_20', 'Macro', 'api/macros/json_has_cpp_11/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_EXPERIMENTAL_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_RANGES', 'Macro', 'api/macros/json_has_ranges/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_STATIC_RTTI', 'Macro', 'api/macros/json_has_static_rtti/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_THREE_WAY_COMPARISON', 'Macro', 'api/macros/json_has_three_way_comparison/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NOEXCEPTION', 'Macro', 'api/macros/json_noexception/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NO_IO', 'Macro', 'api/macros/json_no_io/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_LIBRARY_VERSION_CHECK', 'Macro', 'api/macros/json_skip_library_version_check/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_UNSUPPORTED_COMPILER_CHECK', 'Macro', 'api/macros/json_skip_unsupported_compiler_check/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_THROW_USER', 'Macro', 'api/macros/json_throw_user/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_TRY_USER', 'Macro', 'api/macros/json_throw_user/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_GLOBAL_UDLS', 'Macro', 'api/macros/json_use_global_udls/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_IMPLICIT_CONVERSIONS', 'Macro', 'api/macros/json_use_implicit_conversions/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON', 'Macro', 'api/macros/json_use_legacy_discarded_value_comparison/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('Macros', 'Macro', 'api/macros/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE', 'Macro', 'api/macros/nlohmann_json_namespace/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_BEGIN', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_END', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_NO_VERSION', 'Macro', 'api/macros/nlohmann_json_namespace_no_version/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_SERIALIZE_ENUM', 'Macro', 'api/macros/nlohmann_json_serialize_enum/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MAJOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MINOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html'); INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_PATCH', 'Macro', 'api/macros/nlohmann_json_version_major/index.html'); json-3.12.0/docs/docset/docset.json000066400000000000000000000003361477615276400171600ustar00rootroot00000000000000{ "name": "JSON for Modern C++", "version": "3.12.0", "archive": "JSON_for_Modern_C++.tgz", "author": { "name": "Niels Lohmann", "link": "https://twitter.com/nlohmann" }, "aliases": ["nlohmann/json"] } json-3.12.0/docs/docset/icon.png000066400000000000000000000012741477615276400164440ustar00rootroot00000000000000PNG  IHDR7gAMA a cHRMz&u0`:pQ<bKGD̿tIMEW1IDAT(9hQMG$!MD#i +`B2]*+-۰ !b!hj{d/.0EfpIGɽ3G h `A䴻.v Dzm*B Etw&ǁC{Rg$PE@dL}%\aQ{FȱO'7D$Yab ]r59(þ^gUKH1賎<r Z؝6GjGE2P"E4A)u IꨪbNJDNE첋ugО Z4b$l[=mdg:X4X_)`SEy׿jqiT%"7]M 65QDJ#.0|p vݶםZ%tEXtdate:create2021-08-23T14:25:14+00:004j%tEXtdate:modify2021-08-23T14:25:14+00:00E^IENDB`json-3.12.0/docs/docset/icon@2x.png000066400000000000000000000025221477615276400170130ustar00rootroot00000000000000PNG  IHDR sgAMA a cHRMz&u0`:pQ<bKGD̿tIME kZIDATHu[UU{֙3so%S6fVލ@| D| G{ Ȱ@ BMFGD b&EEMlfig}9{^[߷!S(jF-Vst.CHSs.:?o)Sypƴw&5_kFhRl?\ax,' wˍzvF!_c*1I8DDOj+c(5ubiG^LLP!\~V*a Y'h~ߓ8 ZA%\\ED VS>Fa13WƋGmKI@h"XLe*%√Y)D +ui0Mu}j\LJטĹofxBե2T[FdE=olsN٫~UW' b1Ǣ!תamxLvR4?`fPL&li1N1۾`l.zJqa)$%Xⶑ܋zqK& OێpIHޥ<ǯ^/pqh'۫rXEB%G` qP>Q?UE]PTCTBYJ[KXG_PdWbUbSj\g[k\fW`Nulmbnaoashrdymzmvi|s~q}r{uz{z‰~wčƑĔȖǙś˜ĢͣϡХӨɫӬԯʳղصźۻ׻¼¾ľ! NETSCAPE2.0!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/o觯/o HL:'H Z̠7z GH(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^׾ `KMb:d'KZͬf7z hGKҚMjWֺlgK) !F՝+@Hr;8 .솋ZMt[`]vWmE@!k"S$t %#_."J !3$~(PT?Cc PT`" ?b<@ą3Mؿ#b [` f1=8;ȼ 4 JF e03ƌ;6s~L'ЏW<`̈́z@ΙV1fZ Jp̫i`^}cEۧ5`E`qPZ$p4:՞n,^ܗٮ }]^Zw17-W(e@ yl0?"x0K(dVk#[܆ɶf# 6>`w0Q7;#5 oHmhБ{ux=Ξ[4` A{OF:cH٤ %Ajťo y¦t;6{py%|A\ q| | 1r]h} vr `GGhv ox}f~|u$Xl~` (lI`{,5TVxo畃Q;xCrmAhl*61{Gadn!i}}Dj'Їsxa @hsxu{%qz1s\BhxyH* jp(g(qh!kt~ljjx](,A7p\8؊AEydev7ߨ\'_F,;yp(XgkA|sG }gq_ 9,1ōp%pfA hPߥ ~*739+i+vZȌ_X~Y HB];f T=h]xڨ'_ԷQق,᷅їH9`As(QA9)w9PIaY>cy]u(`=Yo pe^kȒ+l;61{1؃Ijd ]W`HȈ^Ĩ>i]7iP!`VTprZc@qRiqQdǕi@y ,BQu铝e`` mip7vxɎ A~)$י њvl!ՌF :z]8Z _ ^>\ȟ @g J ap` E*_\JvU`` A=i'1U@qߕ糤e^Jx 7&yP OIy 5#Qg ) pY YT z$W Q6IP@ap -q TP*6Za#)j* T@ګȩIJa%( mx^z|]~j> zq  f \^z Y)C7e?5 Z+᤿]yYx ˪\A:=МU> 4 ГY` Ш/aOg^z^z]2^yj]fz +` nn]p[A S+m[n[E+'z;q P:˳%&8U1\c` з' J ^ +;VeQcIQuSHh+ڐj+$G!(Iyu[p}ǼF!o"rvλx=߅3<?p ѹJ?]W_xgt`-1С&"5:=JhH+֛aE1 G 1– aeE:+'  \J5K Kh QnGJ[HGhe ]=\U>̗jewh+w"|^ 0r& s_\$H~YfS&F)J_ߕuo Ia{,[|]]|_\a >c\` Ja<MelLr{ _!Wj a%tG͙ u$Gw˜e 1$ A( ^ uo al]\ =,v&KYjfE 1̥мo< oQ%$j]|[zswz'uzj \1<a삙fHƷ3 ^0*k l} { ]Hg tlwup [Ka,MVcH5; 1נy  .p>A4H=Jƴ'VO`+w֛kZ] !ָa>-tu]mMwMX}يI,l }o|])y R-i}}F a=}]|^֧FHgq|j l]d{%$MavWl]uZ3z AhrfLN!}]Jj+ӝ՝`׽=m}'Q~XMai+*`<|-;ʯ}Ԝ)~^=ǐXwᯖb fYɅ\q`ݭ3r$a`Hi+c}Mƒh~~2\c_]j-q 8}k7rjX'| \quIr-\PacQؖL_m,rY#, fT~=n#Nk 淀 >K9xq`Ji'QFQHA7qlcn~ οtMtv='sʞkVNb&E!GAؙEn]. q^j 1 k^%EލhNw7֎t#} tn+_PFA; zMqU<ސwa;|cY`JNa8y^1| ~u)9+7"Z_lXtYi-_ l:a&{a@%i\|&nM񋉹_Ju1%lU_Ri_NߥwV07_%!H G@ PB >Q!Jh"A*0Bte⁏%%>J)S-:SN1{SСZ$TRM>UTU^ŚUV]Zi3Ꮭ~ }@UЖ@N6m X B 0FY [[+VŝMY49 5`TzsPpE;,ٯXuQ G\r͝?]>ֶBK)A3UqAX5~[7(M6`<rJo;cYX)0  0~8r0/&`I30!,Ͱ|C(:J:~3)<#a"β%2J)J+R)vixB+R)$mˮc [꫷[Q'@[Ck\(m-ĒnL=BF9:Q,c< eζʴ˖ ITP$ӳ0?ru%RHQXI5Xa%XcEֹ-.[<4ׄ,AZVIa$ji7YZ \kES5jmV[mE;1Ԧkcj0P+YEZ% gFPe lm6l X]%uJ_K 9Y_9fgȏYj6 \`[V"MH;Wz=88i|5&K:K n$ĭcN~h  €ei-ڤ z%-{%0 CABr (٠KSx1H ʂC+ 1h< Wd4xg\,fwsatx'?p:z_Be)KUd4- Ud;NM%Os".$%1'ǙE(1 %}Tk\<)3_+ҕ,* R,8Vlf7r-`Ⱦ0gfʴ?r`٤re H[e3Bwnpz ur6]FDfFm䙼5"wAkiL-T*[)eExmSӶqk<yE>r!~ %(K0څpiˑ+nT1Η%R[&kOҭT)&(BMw0dįȾM˙hxBH[ZKdNи+6aK;wԙw{iN  W͒&,&ͩq7F +nܝ\$' 5t<M4Avd_?D";C7~ e<ҵk% !pZOwȝ{|x~!(' ߖ;{B[ʖL(C?Euܣ爥rC@¿"!?F?ߊ(mPX" 4ds(3; ̓;>0 4 c LS˧Oé<Kk \:Aຊ/phQ[Cc1X8`C;(Kh;ۊ+ @3d6tCcAphGcXŇ5\=Xz ;ZEŁl]ńTȅ`܊NYDAȈ88K*Ƨp:FX(:RG"dž+Dě F@{tdC0.rj t x$4ȅ@HʫʝpHS(4>q D?dHIXYۚ>k4+Ə3HK,ˇpĺt & }G0ʧȅH=Jʩī$M6`Ȳx’EY@@̶X˦hKPXF):SˣxA'T7 @BSKLy40ݔLPJLΈɯhͰLЬDŭ lZLc dGM,UMiBʙG`laFC28Ǯ:N ]&MN; <0N<<SuQ6dk%k$;(6\+cH$ďRX܉M|DNxK(T#"EĄ (} L0=5DW04U5e6uSp9S6Ռ:S7P>]@(S@࿜80+O R䛉- 8;[ҖH='F4SfT SmLN ˅M SSPG* UCeb5V,3Y] ЈP̜SԂ=LLK!ɔw{УU"UՒ =τxĈp8-:Y}~؀GfMZGq͊4 $_u \ c؋]ĈG Q-K) { ;ܶuxֳևϘ؈pJ`X Tܼsz kBͳؒս0: W]AL\ #4bXV)XZگTj7PMZ%Je 39VQ ћu[Zi} W;9ٟTLuZxE1UXHW(Z]+WpW*#K2ٖ˂#t h= ۊ ԏMcLե\|%M$煘R S4L Tj lΕؖ5ͪ[*ۅVv ĕO WxpݸŔY٤͞Wߩ+O^@^е%>-F=*2`=O5͊M0d ͒EaI C؂ \LuKq,@\;MV$&8ѨU .GLzE,^m\ca ;^A,8EԘ6>5HF)H%FӛT׼U)]錮5ۿ\ϊ>ӉEZR2N3N̯Շޙ<^f*'5 J\^P枝L5G%Bs_錬BM$dH<& ShcY-n%:\M㫘_ SV`feV藹(O"]<?~޶_O̎X6̞vh``3r?bygטNޜR߶׍xzZ3e}F~d&pH 'Sp螸@ȟ>@PƐΉ.R-njf͉g fj8\V6:^eA`Bl0*ړh_xS HVLNBnE !YYoFh4D> Bp5qG,dl +iҾ|fY6#ow6 qApmQ0m+A/B`c F* p>>ݞ9^cJ6g9{Maᛴ>>n *j&a6e ' 0c*r0WU 40hfYVމbsiYr Ҹ&Os: ;=UI$nft+ &b>ڌR$?c`rOgZG6\~aey x[Er]6$wi0MMj5ke` lpX1(B ʂmҤlN8u*Iz /^ } B4_Glvu?}_ W[pW,wZtOiH҆9w9C @i̶so 7x&n3טB6f^F~ g,ָԟ{[~aKl`cx̷[xf{"'_ ][5/{>MҸ ow( e7氛h/B`z[%|HxdtFt:9,hp` 2l!Ĉ9h7rpi ObT˘2Af妏B5u3ѤJ2m)ԨRRj*֬Zrb%"e,ڈfL"pB_d(i<;^b)˻bL(XlS=^\qt$Ӿbe 31x} POD7‡/n8ʡIW͝߄t.u 2ao = E<\cȟ,TANg`IDLx7m%(D=dK-wo*v!z!!8"rCt-LaR|= \=8RyB4#C{{7}td8Qӏ8lDJLUB(Hc-8V)%D02an%Hy'y'}IURl6$%MҟeوSpO";n2?p6D)ym)TtX@٥v1ibsE `X]Ҩ5QxE}v#J@-cR QYfC3P}D 'GB@ԔÑ6BI79$)TeŦ0*GœoD)9dgp;=<&2y$-*WѬ)`Xk>&CJ'RC*YX0#oiJI4NPJNYh0ˢ3d%GiF74IA@X#9(lnѵuR(F3QQ"fSnуfR {^*BLNEJ o2Ϊ*%Z0ʥl#݋X |SRp3DNqٍšn9tf=+ZӪ1$NT-ષTy@+v d,dרdFD6~Mg{X( ILKUP -lY⊉MInKR +Xr( HRֽ }> oRS"@@ ,0)&U>;_>Q14AXV! qݛ oW F=-3 sXp 0Ѐ_qt ÃS,0~(Ip!D+~QH0JP 8@P8  P FxЀ W~3-܂CFB8thAу# ,T2 phJ8Y5 F{z8Ft#]Fն5s]׾5-a>6e3~6-iS־6ms6-q>7ӭu~7-yӻ7}7.?838#.S83s8C.򑓼&?9S򕳼.9c.Ӽ69s>9Ѓ.F?:ғ3N:ԣ.SV:ֳs^:.f?;Ӯn;.ӽv;~;/?<3<#/S<3sȂ/d!IY~h{CX,3{]{ɇ]]81Q,C (@" @^6YWP1L aQ0„)0^M05%=ݬ^a,QN=Oy]%L~ѕB m%QU@CO6D`A4H/r9:[Oz<ESOL1dP*DVG,@4<$UB@cH8DJ"C@c@&e=LzE0A{6*`%,C[l"@*O_vH>ҢQB\&X$DeA$a.G,h.cX%衦Bo@AďUS#rllbE>.ltBm@Q+ILLDD hbBYr*|O%8e(BC"}^hA D(AdB>iňnhWhCVPW2D!@ڣZ @,keL4NX |SPހBA}*\.L^05BD2CCqKZ E1$FÌ7:cVCfd6n r(t2e){XjBďpH :fCXڢ2LBS~ Al$hT@AB @pl-is.Ī\LD @Io'Qĥ ao\*pcMjB"gq` ˡ-gF@dm&CkblB;P6D&FS. C$2 `C(wVuF,j2gODCL-pjCk=:ګ]jÓ6D EB~I$  JplT*CVĪE0-CԛFF TYd2iBmtTzH6D ,QMxl,aD*D$ez)65SƄp4.3D1CT>VdZ2.rܪyQnZmO h*^H@)ߎރd1*CE.CcAMR#P@0@yYlST2rEhD-m>R2-n+|t^DNo^on2nF,*o2j*UI/rntg-U萷DTni4AhU^ĭN\QZkD1$ Jn-C1 'DLGk"A$pC@-T)V!DTE1qd E.Cq>GĩAl>"!J1<ЕM|oAC1r&mTmv$D`ĎY`41(/n-]2ID'K -S'1pmĄR- Ei>沴tȭ\*N'PJ2ODr46ďqp NC@8ĐI3[DÐ2*K̆E/&/2AXnB@=(\M[P¨9)~sl,A+I D R\4eDE­v.i Bw39rcIX OXfqL&#cCRrx>E\]sHI&NvOnB 8Q-Dܕ)$%GE]BdU9Df$D:0Qn֒2?s8P 8K)#e&>b'jC=xG+U &bDBlnַLXd m7W -Dz>gPgVlX9cW$;jkDK!'Cw5{WP H5S AJvgi<7QF,:~0D6iz;[DF 7H$"X:_pR܈KNEk6 SgABxKtD xeKIDZ#DP2A*O0> n~6mC=ZDSOrΩωC{Rd" @pˊ:$l#8+uS G9yO|#5xityC@FR,IPlĭ;HOv!/cf}R,i9-jfi]p#b1/DgE 1DSW RYvJD3 jLRCSe#-B@RD$)TIZh2d>I6@u`A&,@ÆR DJp#Dn8al8GBHiJȗ/|)B.,)z H*J( D+.&u<(BKk V/M..#SHEzաud"`␤T!MBr$/ t r$n<ˮ0s,D5WNRut9x/ɏ:ɤXދ 0*fS ([5B2. ԆnSqp,J!~0T7qYy矁Z1Q bHQP;hWv4JIzJ II1d>ATk݆&(ԷV>j;Ft ʗ!([Qj v߃r%~$f?Rm$r\XǛ! %òn Q ֻ85:.FOBcBobtb`k3Mx´Vi6m L n˲s bc$OF*te+c-"n DfbpmDefNt΋D(cD,8lHD'NfRp/hbf*;0pgH(b dBt8D$Bp !bºp-4$/!mt *.ޭ -kp"^2*椥8N"P l  ୷&.8Ix @L۰wFX ͤ[P,K|/⯃.`;B-^'ӞBt@p Lɨzڭsy"fx`<0#bRoo,J!+GQxNĈOVr,Lk,$l$;҅  7J ºli*8"h"ðҝPK ( EF@--?Bjm,oA - kل-)RG o!1!32!i :fd D #N#\-V/݂1!.>bF, l*.#,x(x-HKQ*cRj+ Br0+=6O#3Qk - 좲9_5=* *;h$b,0#pVl"@J%[ZK!+cl "*e-g?"qH3-$sC9C=:j0(n(/J&Br"u-΍ӉQ E|Bjp+ ^ q Ɔ((4-b(HOۏ>+F5q2LOEjOy*úF >B&qs,,e ̈́f%/HUL+;&4@kVrDĖ8i)#+BI^)(Q?4TEuTIn )"&KԫMMt>︢y~SGF%p*&I 6\ b(䊆*ی1;q$,R8ht.oB9QrHSQ$bBHSK6qUx z0ዳ4~N7N fmXO$2qJ7G$/L-*&uU,Rm-g-"d3tm-<ӂ^Ta6fevf}fdN8F$H)b4pZt,z'N:Kbe줆3PPči| V.nv!P$DL-Wi 4 hZe4jMoj6x4 $:"5Ů#L0ˆP 'D<+ nRI&B݉5!^d5ea4!esb}fwxx c@`a|̫ @tS4p CL ",R*X'7 b:붋I9gYJk" "*0FBc"-,`Wjf B®R.- Uf~zLePʞb{u_IEw(D'Bn}iGBdq?f-Fo(9FL`?,r֩vB(Uj,!n{4">l*\=wox8'e[6!hH1GW! ha6N"1$vUO $GMEȗ o&4 6aOtbJ_$<-S"òMא9%نf8K b~0`wp,U!DԒ W>H .1bPe$n4Q}O80B:eqҠR$&K*zb`DNV9YN3Ķ 1Ӳ+lZ!0}v+'7 %]1m,j=-'{{PΐPM윞8%Ii1jj;;E:5GB33W:,Im*8n!ʴwJiǺLA/IXrM"gW[?mpg2^!4OdcX!(u-n$G^vz:T@wlI !Ƕ@L譚XoCZ eRr B P Pk!m y.陎_"h.+1򠘟'm5lm35̹0$Hw5Q3#;K<"fa!#()V"kwu"Hѫr{`MZCN-|LC~:{ EdM>Υ t:,dNP@"x@%xJnWA"m@=o F^[" ]a>P 0lza7+B S.QĂ" "+^>B@W4צ^Xʣ{F̕ӗyRxc\g.qwD6JSa [-ęȠygT"Ä<~;~"7ѳm};DNbW|Ϊ*ehiVs.¬/13+ksxq#j's=tZޭ[+T%0wp"qzN:iw$c1#Z ܛT 8pNDݩJ-GLgF 1])dJe$1Ib#-#ECUʣf`<)1b ]+6!eG@%P)z2yA^N +!i*HU˔OTDł zO%^q@BZ[= "ԽIhrB0م#Ew)T!ѱQ0! +@L PF.&q`B 2ʕD2̙4kڼ3Ν<{ 4СD=4ҥLu(LJ0PD@aW!D @1Lj.Їhܢ6,* Z ( b ԨꁔH% 48mH00+IU!2AM,Ԑ2Z y*`fL)He 4Pݒ@yB .p@ -kPCJ \0s+]ep2q1>&oqR!%P{[m4]B5tS 1BdJx%@їXUՀ ]Q~Q9T} FP цSj 6&4XS5ɈJ> eRNIeV^eZne99(Q!!u¤|zB Q 9"B Ȓl I|hԤ(bVUd { A}ե$"Bx#~e JFD$OsVF+-B4E?,mD KrB䯩d{oa-wd mUD7\d6ZD^ 9-V m[D"TGnwt|͒)?ȘB>4 V@w I- ! )^(e<%& /&SUP\~$*qLlE&.9,hX"#e$ B4F !kJ=*BA@rd!"M0 A>*&~R$pĐhJ`+!S)$ bBP" dFd}%d*0 08eP@ޅ? Tyܨ8Wgc͑AfL(.%508}JD Y2d jtYbA 8കD [7S; _OHK|Y/ьjtGA-\hJU,\$d {HJDĊ|A/4Q4S$ 9k9J%yzOJ1`JƹZQYEX@ #]5 U*Zc1JEIEkYAE7ajꐜQcL2cԆd̤E"K2[hI@PDnz[R.cUulF|3o w- MT[2T-x'`&3O #n;.+H'B(f7$F/KYDUGfI G50?( pnWb,pKju.0 HcM8KP_,AxvC `?J(>@mt iJ+@D]D &%U۔oJY8t<+ xvjxAس+|'`8Jn1Ii̚k 0P\! fAb8}d/ϾDWd"%%Bl`$+G``>SPB@^i4` X@ztdx%k[|`کo_~YzܑMoK3w76Ē+or:5`y^%5j¾/Ϗ~-Y&3oȑfX (cn:7V~ Y} Q} HhQAyZuVeE+Ȃ-/~_qx18{O̺$ B wld<&,+Q r p\ۺ@vǑ h|f-@tq 'L,ɭ|}@ 2 ۺkпK~l zʮw {`'ˬ t'O[%V|Pöph^|iLG0 f\wW`vXb5Xd-#.$Wӂ53K.,;V|8SI%V "38LL$nEY|w_~_-J`0CRaE KչGqWk3s͈夌)+RD`[vecyfm uS>1*?^ٓR1 6ڃe,)Ĉ?>,K0GvJ=xk{l6n1ƃQlmCXt, /oĤFqF*ڼ/մ m+r3|s$f$%Z!^i;R"Βp[%g͋O SxW~yw)ϥ4P >/p/sl˿X7(7u:*|$^:.o:64s!FP ?h-Kp&IdK 7m=|{L&ȭ$vz\1BP3a eDtKq#FWj:yu;ؖ%}uzW)`]pBQc$cxF܂ua"b:R)uA#Ն 0cؙˋ]wt( Yx  EQd%-yʹ n$NI.@ OH3 08-ݕd 9N!n{XĴ=x5i Ya I`S$f1E0,n@799˶$/u ^|~ǐqJ=ь'J::c%"iLxSg=c%$N.rdC0FQ|$:?fQD(DN`,쓥ڟt-򌽨4d$t]k猀 lEeYb,b]]uݙii3Q[G.X~yg^B% %uO(՟ z'گvTƷ'~fr8´C/qi!t %Rҝѽ/""޺>#uȧutR?i?k"VZ$ڻñ:ʺ+>5#؄?,A<PX;a6Q)swU; !ܢCJ+hk+,"Z?B-ӿ:(1*-X Îhbۥc!(ax/ݲ:)y)=:b3BFlDGd;` E< 5 ,65C]R: c(SςB;{(ߛ&j{D^E_507(:x3ܢ>Z[CZdZ:-0q.lEkB;,r=>x9pDDEEw|Gx1Ӄ@[tB{Er 681156Gp$($<@= z 38O*"ƓЃ]GH+< D+ˠ>S:*t9NkHXg#R$3 Ts`E I|J[0ԧ3*CȜ@k#'prX2R[eZTb$ۓzJL¤XJɀ:z⸰AjbsҒx2#èP1C 9D<)%=ֹ:ΘPv,LڬM 81DbKacyD㈬J%" %üYEIib=MO()ar)"ʪۻ юp:)Ğ@..3R6C]2P Ѐ1E ɀN5W8̺x5X[$Oܞh)x"D1=/,9P -R#=ҶzrUCGbQ+=J} 78L(:㢺2"ER8S9%a-->2(O mh 1!9S(6t*"0Tk 9TN$00S-13lg 3Uǡ)qC=÷0ыr k=u2 E&! TOmVg}p A05<<M6ӂkՂz705D/PE=DZ'VW(PHMOK1QXnCko)?=ZP(K ,8)Q';DmY}0|)=os,}$Uឡ$ٹE /o񦎽A9X))F`YZڰUC:!LCU"SIܣ} xWAѫ 2C0fZm\ǝ i5ɛ B<)tP$l@KW{UU- ܔ:H a~ȕK̐0S^Ss멷ã;a.bhւQ4ӻ`,qIBJ_=3+9YA6U _LC9LY=58MT:(bK85d;Ő"IMLN2R&һj9iqZpdc>$A(gڋQD> Nޜ/h\,:a-kȃHhSC)!&bdgźf jf&ULܖw͠Vf3UQ6Dr$-6(;aJzhGp攺~R aUK=*N-Yۭ'+=@gh [}C* NjEϙp9ѕx{R ܩg۠ՖЬ,x 襮k?xBVʆ"gQ6Ko :+\" 6it9K%t ~}.m>AegO2yܿk8S  >.i]o&Je@ӶA;hO[eӮn߭5##n}ضe+aa3Xgc1`nkxk#<: 7 ?CUxXZB4;ȃ<3FT#~7PbByoqMaNupLOZ!vNQF% $C, 7Dc<pN Z 9#{HRV q3?s]S9p4sIV*Uj4F 9Qb53|",5P[G ihqVAW2GsL/cs%; !jɶp%< Y*J/r^400-]tc?v Q2F5i3GHaQ=rȱy8 L8㊀;йbGv{j EhHUڢhXf_aB.=G,/A?d0PX`k~93`w_yj:x&R&`ss]<6rՆv np d pƮ Q mzO"anI후0p8,V89r?<@A0n19ށ( H h眞@O|G[W3v٢D3DŀZ19Ox脏EGO"hcC|?~a P0zAuX_o[u2#5eʄH$ڂx$K$( JL@ W崀:hJ&] B*@X! Z@b)4""4(! MBdq`A#@Đ͚6o8Rg pn *t @_US,FTkKܪ*v,ٲfϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1Ǝj W= &녭 I*zʮ5r"K'TMf_\VR`2$&jfsJH`BB 3ɞ9hp2޿/~<ϣO~=Ï8-Q5 ARE/D]KNĕt`H.%hԁ& 'CYffSQ5-ZFY{NX}ІA(ɗ;أ?CYG"d\9BSvJU QD"!vhYH$!mYREt,5fm,h2Q dVȑ[HIm@ (RZbrک:dzp(ORZujZfV#tEON!fty tL5D(Y q&5gG 5* dJR ]jHgJ !iۮFY3*XT;CI0AQH:CX'` ee`b@jce D[0GYl(mLL -C]G#KuK,7%(~I1'VK(a&0j'p\ZL7Cc}Qև(ΊcbH.Ǣ917 1s޹矃 I]1>cJ 2ěѰilnKnOI&JBs%6nBY,n[YN S<:Wt߾-*%4HJL#:d'B hBZ|9ɩ:8ř (3|4S.!02! khzN2PRg5X{ N< xtUq+xbZw3M!Y=Ri(Wp១:Z:EXSfɰ!~HVYJQĦzrhzZʨaUJV-F)NPF}"\GHPd͜oYRXtıdd(Q!-hZb)y؞ddfH U~6P`RV(`@eUrFi@,}raChpϡPV0†fi:BbH P&J \!6r:і0]CNXP'LTUŠ OPNW:Y!:P4 B(AyF2k:+\öR̿ faE2YfM혠L@d:HMDYbnAfYX H9B=k"lMП'Re$CE'&H(`'YAD Q &{:oFgU&}+F:%l vd(L"eS2(~$FYȂ``_WXGE:jRRr>٬܉ӖLAD2lK$ZRJFn1s%V62&YD.kRG E&Q'4%<0Z*EҧpP& IX# l@|qM|@Ϊ! H=HKȁJq!!/dZn~!oYQEh$7 (-XV_v\ |*&M^ǝ@ I]ڂ^"-2C)kiH ͉ jK j\oC,|+E|*DnN@\N.s;3 IFKa9&o/hc-|&t6Š }JJ:&hЪ] pUTc(5 cMp@;H4H%PY-VIկ9 MXĀ|B _DEH=] (q"JA@YBRV !tW{W1Y9VE5$SRj׏&Lu@_0Z8P`!FP$(ˈd.fbJdSve)p+_:8EKV`f3W@ 8rx |tjל2O0՘sU|V]jhN$A%pd1/Gօ/ ք&(վ haMpY-LjWx7d.uiE4yĴ&xiS (n_ qJ_kR5 GJRbyEh%aJ'z750 tM'l#m` g]DE@QD&VDÜq oT帹:ZPy/BjgzjvB,/EP_ޭu_t_S'l-䁀 yiiGa-i[-UB{;[(Fs߳t+7lL:PH/y@H4KW:ųj5_iцb\YQ s|{®@h\WiTƠ'kLGWEH蚲#`A E `[E-tBpHte5GwrƭkYqkWha NT~ $ 6[.,E2|āt)ɗ'=c@un6Q`,S~xOJT$N%PyާcZD`Zo_]ӄQ,|U&AĀ$=琮D~oIV$F([Ce_dn89ً .U^RjӭdSM8mB7PڹL PW9k,6\ج0b$ؠcb"b ;T{;7"YޛnlF|eݮ4[ezAym sw7b~s迸>\;=>k}0p%艆aZYY2ط& S1Uw-kxcY[R+"kpOr3 X@ TC)0PAIW(`;° N ́$~f KMH4;S+|8UlkN[!>C+ak* ]hITD'>Jui}B ă$U1!u 4hqp&"`!yC PQi]ĪXK#2Ёba e:T⫟A4Чh є4YMk^SdQ6J,ɮpf@'>tq&pp&c3}']vo4K=[}3/a71IY~a YQ^F}<AAg}2 ب+Y!11gX:o)S(2jƍl&W% GZU^YG<*$T3 쀌,P!DafW$ 6d)[Y^ÓN!l1L^+ <$~+,156ȇI0;̺GC#[$aJJt>ѕtK1bZYf&>ZBM.4 zj[NR$4yhAU%HKL& lu`?)=T^!GmY+:Է%$X1Cnhφ #4bU iɹ 8\d#IV+(|+h%q )OvxN?PRP9d 7l0E*^-$*y<\Y8H~_"JAs4`4Ap A3>թV#X+iBt2eh\{KfqLb&]q̖]zb6.4W}!u˂kBҡ;RL5gsh ؗ 9_~I6]ee Cp?PCB;3oҮ.5t1yeyGrjfw{zŽ +ҹfB!º/i!sANX4m]+T]  q/krB?7m=U~Ҟς=58WiWvb7qy `y^ڦ;5rMKh6s|5 8k3:)4?E i(R+qXbhGkY\ ie,SjJ9_|{9-a>L~KG`TR}>+)יɗ_&/cGv C0OM)@M-Ӳ~:P G:?/*$f@^r,go`Ĥlw,% B/P olCgK*-6;$c'M.殎H/\,+ [n &yVKŊKj+vƽD dkmQnߤsޏkj0NL8?CQermaNx/0fV(S00P ,hqLJjPV2xMټbpQ_J-O`X6+0ӂQNm -Ɛڦp;pQo j %H*, [+kvѷoK$O%"y\`SHJъW61AFm2$&_k썀 ӘpR!Dg>2-vSR**2\ʅ y1^|H;eNq+h$c`,·x'%*S03=>PH2(+pIN "/0-r3S4O51yOHA* Sdψ o6]jp;r; H25S93 P ѨN‘&-SrTL ?Dr,=7s:0=>nGH 2"4o}@#5L  8 !Q3>'B+z2hj /F6F, ekkb?N64:3L5Mn,B{G4FP\`ei 6גM%P\6lf;-(-hrė~j/Υ@BMTM3K^& @JȖ+6 f6˼+C1/Q7tM+R/u f T&e[Vkk5*< J)@s*'J#ObK4_5N(3Auӌ %Иbf` I#kqelV &t PJW52hϱa`wbMg48"XtpQpu_v*\YN@@@4q֟QŊЕf;Is-\-G V7I&cIw4)cl DPec|W|IFY)v D@)"&ulh!bh0! O(=c imaH'T$m+CddOn&j|؁]!`G8&}Ϗi/NdQ&=m\Q.$K6#yL^k k؆oXQp#A\fѼrLFI0DovVVy,uu'pqXC)H|][YF=v#vr3n57\ch k6fY9:Lp@"dn*|3"S_Qi A2]0d5:A@YGcYw-@&S/_@X0 Q1VbiGXK٘{7ze#Eow% S̆4WΓLf J #Yיb'~]tW1kdb*FUYYq23=ۙڡibѧlm*SlsLuJʦs/N&*ꈾl,K-NA`6f7uSfF?MM}`Cga(}ِ= .F$@6`D@V\`l` Qru*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ[\2E(1ZѢBP BeXbV*t͚!ղ`M;V,VcVݳwbM UtFD"D$r (TP͂E2˘:ZЧϠCMӨS^ͺװc˞M%۸ =hR 9׮  tC]ץ\f-n,XǚQXhZ5YeqQ!b%-bCH!D #7 Z`V< fx $,*!P`<8E[^1"Y eEpH0e(p JhJ䎕n6E`P-ME:d &1u,dHLB <.fj8Ĭ q%3t&`Jd90܌Ap<1YF걇Bd ls}Q}j1[&:ęSM- B2l4_BԦ7Ԧ&iJ[rɽs94MImʤ* -|RBPA$t'@&j7 ɂ㊐]J1!s cFXdA-f eWk~)aS,Yf3TtRSGϰBȇY-<ʉÝꄘ'F.2i YA)1l*>X5d4q9^OBшNLp]]0SlGX|Q頺ĠH^ q%#iWdYm [¥Y(ȸvviS3\!vo_')%jyV\A=!p.O"^"v%bؐw#]H^Q+Y0 HUc`$x)-G$|`Ld7@ΐ[A,lʐ ~S 9@`A030=>Џ"`PܮLM3= 9/cu9`zxsܗFv y}fPAs xPy^&trA<X M3} v*,X|2+5%UT&0C*b[swoU d0ԡ&v"p(&̵lq777SJQ1cRY17J qZ7SREcWEL L 4j QC}x q^3UD0hǰ^0Dh3?x3hwxMDž0sEC X u3Kv3Kt JfJJZD0,w siCЕX8du, @A@ Y q FhlX8'1tuCU8;ю!9ՄFH(0; J1sACx;Cx &0 э2@ Gx13ؑ+ txBv `6AT`,4qDV31)Vc!AI`"`fF(T8hШ&1tA0CYzو KDxs8[L>vr8hJY8?oA1T8KtZؔ9&6_AЅ䦊vX8aUExXGtUt ~ E91xX86q 3 WI89r8-0$73YECc99q78厫Y Ws3S7cnEhMXtD o[ az[UJ3dY}BfB'iI^ 7HQ-[B:;!G0"D"ShȄqmy MP AA,UAPT`7p#TpmpWP E/+vV 3ȴ! `WӸ)D?S8'Yj}> 7\Q`=sE^qX a1 `pZ̉LqZkyuJD9Su.r(w>ɳǘ7sDM F5Ǣ1cirjʧJmJXXxAl{3@3 /~sզքdp.Y zK{`mj>˹ΙJ$ D`X qv{൝U_iF8'xh˖pӌ$|d`BYwio $.p+# Wya%NrT"F5 1 ,yG0"aq!vw K\  1? ohtvoU_v3rZy P| z Kz ǰdWRCx0zH&3f1dT_S0_`Eƈ|zE_P`LpDU%1mWяz2h GV֜8PʻQ,7 a2Z8 rwp]3ٖ~JDm1qGy`׆eA&:4\ۏW%|A2,r(˟52+!J!I6""[p֠uLвFK?Bi&Wqqrk˔JX[Rk^Jqt PkW GHCʯ7ӋU|x?Mv1K;KfSaS{Z Ȃys zːX/t&Z|Gȵ 1WZ! ^VY/uJڝ&۹03{dY_k 7`$ {ŇLTJ[x3| 7 S q ѰJ0Cs0^P$`Wȋj@A#9R' ;a"p!.o)0P!D)fG'BJQWs(Dl0S {ya GJ. @d; `FKƁx0΍P QDn1Cwo0cSh;N9˼d1ΆL?g_1ͻ hW.9JDˠ, RD q6AEDԸLEJK?y2̘y3 A͗-LǀLVĤJB]p])ŧQۼM LSe  -r@Y`9X,\IPN X%l#I2M r RP@*`aA-ԡ^w|y+mo]!3ŗcA Gȣ\Ky[~4dM-X`hvxזKZ aJ˴Dp SE1ZǬcZneP 3$A} '?1ӋxqncjSc} AH\mƷQD*n|܏ iҏxGו`JĪx} ,,])ӽBPs yIL#T@!quA3$``Oc'9lTGCBMՅ5K\tR 4dsg zXaWnƪsLd݋~vUk_tcܛea~yXEc;Bѯ V aTMPKNtқ=ퟹnQơ#ؕm̗]HԠ_Tb@~MJǰL0_P~ĵjd YW|31J! Ql΋L Kvlsx/\ʋ}q<;`czH'J| 9Iє΃YETzAyRAYK˾Х *O,Ni $Tq Dxl@>Ġ`(@Me䘐` 0x+cT220@d UG 2x- <4AAAGUV]~VXe͞EVZmݾW\u{K^foT*X0È?nF0 & #T: ?6\AiX\2єl}wygT :OPPƃ d,ȀW*2ίBw'X~,H"|JPs a(HCUnW pZLO@©-!2Ul6q)%"2r^,#EI@Ag6TSq.9 Ѩrw:tK^җf0`kB\@iQb7} `%x iTc$K23$> |@َ>"[^)?Ie% [G?0TgG\3 <%9FH@"ic(豎,#NCΰxNГ^Y!*!n%p3#>!*2t\X&m1D# q8cO&zl ƯmOt܊(VFT%zaR"Hd$~~0ЈaL NIEfR,8&T!l*dFTn&qM9NvֳmhE[ZWhYǀ ɹsk EЀX.ihu/sd;tO+yCVùuO:s 䥴2$Pp| gFsռf669B2̀y uJKke .@jTCg xfkG\t:9}Hr)%%Y1kz 'ì !&Iu+8_D*X݉&$8hy+uSy!=+0f 'YPXY)J1,#/XO"#Us\ c!RiA!{d9:-$}ejVdU\rIڽ=ɲYz/#yHz%+'GyUr`o3rv<Kn|Bf4PDW&q\|mšZqV8Qϻ"+5@p /#t ֵ^_ ׮>Fpsgdם,Vh*){=EvZplbP;(`)eۼ2BĿKLM%b1&dZfCȹ HA EN?.!{4kR(⠺#>[52IDJ2+; <'Or숟8h)W0QA`'K)Bcs)gB#6Q aꛒX3J6!2H#bHC46*;B[B=P>kGs=1+t* %BB@q2 2+ˮR:y'鲄`IX$˲4˳DK(k ׂ-g?+P:#հp*ŴD ?wL[TȤX*G¨H"@%G [8"9ȯ۴VcbR2v+LD{ˈP#)\Hh)>D$  ,hd-QE-DK LYv$BŠỦP>v4XSiАJ UM0BQ+Dҋ،X3#kAh-[0̠ˍ}%eҥsRqSb≨+H)*3J,7@8/9XJδ͈`욮ǩZP`K XI {ׯ̊|$xL(N [@"/OZPЎ6Ն q/^E:)9adϬIqiTHZXby#QՋdC1Zb MA),Cل{Բae,_fa6fcአ5]g9v,pH\UvMj4.fai`5Hle|ޯXD갦guAf(8kMv뷆Ɠ[x]dY&,` VfvdžȖɦʶ&6FVfv׆ؖ٦ڶ&6FVfv&6FVfv'7GWgw '7GWgw !'"7#G$g!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++333<<<K CCCLLLSSS\\\ccclllttt{{{N$T,S*Z3^8a;c=*f/j5n:qfBlIkGqOuT{\H{a>6A9E>G@KDOHPIUN[TZTc]jdkermvqys~y{venhr{v|SZNjua}Ĭ©DZƍ…ʕΝ̙ʵκ̸оѢѿ•ęǝȟɢ̦ͩЭӲ׹ؼնôʾƹھիڶ޾k H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nk2h&@ppdسkν;DS`_<>qQϿb"Y@ @&tEz *fZ5S(u"(4hcF!^0@()^CBpL6-y$Xfr%@)dii lfGHdgix9"m'h Zr(ETBLa)F*餺祗, cd.g-&IꪬZ&-!_*N+ c| &`fBhlwic.F0X+]H.z2VĉHok5Žl@@DFA @|Ħ+cH3o(2UYU 2 \@c8ŢDm4R(2%b)_J7&EzXʢA' H]1Ka* E:d (.('ߐ )N|(S.)RIĥ|tYS IGy$h&O*+"q,I rH0BKKq%d(MYCIKJlgWV)&EzOT,V06d lg\аVH5" d-,eNH(`]CpKS[ R @o Z"1/f ބ,EMaSPPH-x9G({"syV=-H;d?ďA.K%km-` DA妧L̂'* ݢ*zbX|)DlY=/I` %En*HU( bd,eJ&TAp/H@`Z6!Eub!eePq24_]r` }ZQL6˰KRP J<̠"lSΈpw=D,7Ջ5\"a"BJ@!SiCh  vIhL s߇EI@ PR= MO%,\!dLj-뒛 QRiåswE\1@0~O خzhg8  l Yu"6i` 1B<F8R*r;V2X sA/)BKܗN,X&&wGF%(0lvC.%"% @'ϽlEcIC ,X⇖(CQ )J4+:1p1|xO"~W4YxXrhfv {,tk"H|ll2fa TFsvXa`'RVׂ.tDҥ%c~| xm?U@-Ǧ c'gA:Yp}B~{L iAd&\SgW ~`  a*Z"$g&`lBQ $(7 |gpB2q  PPTx&1nt.؉&G(cIf:W[Їߑw0.Pz~g< '$Ru"qk dh@q}k C2 ?'b uU%zeQs"ik? (rj w"Y3X+wF}؏pkjU!;p rŘ#F巏!BS(nqy J+q$k,1 ~ ~qH$FIF At{(i_V[d B$'@m c= X"5 XxQ6GxbYL!  7H 1H2)5ua 7%abyv RQ BoTv,&}`VYhfVko"XyؓGqA  40$NJ r:YQ4utCH0(b !8~b 1, ac0 `(eFTY%th1LyJ8hH7$V "CFeI~Cz$$¸ĕ*th> .))22x-07. "p_'|0C0Q A ZEaA+))JH+ɨ,W둤q5osRZ!xvֹ mpӞѥ3Y) q@ '#* N2e8@keIzʣInxጀzJ$YzFpqin\q2nDBeA롒;eJ4fv`E,* E"A)ȉ" %l\" j ~s@z4#(.zL1/cx  0)ZAz! Z 6nY0.ѧk2w )ZGG BȮꁧQ/}bK*Bj ! 3碦lRU :Lam"%I_Q"DV qMfJ9.0KVX"hՆ"\45*4ҳZ8%(X2s@Ѥ ('KVJ<4Spd qmrУ'Rm ZK$)+{Qj)+ ʺ껗&ȍ^aZ2 0xsk ꡾}`ל") ]8N,<-_-<$ @O1ƑqvFیL=iY &+%<% AcvzŹ=$}\ |8eۙ Agw9=XZb}%\ Uql^kQL(uP>/ qaL{ gȞ 8zz <-$ Bi%[kXDhB#RxU[<:Ώ"^PEN狞K )-;N}t{hvݐ0Uc 0쑍OjS &wvve*i|I&\Q,jr<x 2"(gK(?)S,[6'?# {Ǿ :MmBg )ԕCۛ^ǴٖZR1F,⋵ 󚚝r*xǸs/U΋YrIq?LϘz$!~~+h&;r=C"WC 񶦧dl+ eLKcWZuMsbDL,\{YLK fs! YR浰:W)2XDydм31}8&{U@%qZ .PB X0AC QF=~RH%MDRJ-]SL5męSN=}BŊB@T6QS@q\@U!"~јUE ] Pr,VA!dp$"h|dFX8o Pc\! 6+}<"fJE+Gc=s\DoB 2{xcEG\r͝?]tխ_^A}ZWo]H2xpԣ%09FKB˪R kKl6Lq`IJ.>-- Ԋӭ-űЏ0*2o# zǶ(ñʮI'2J)J+2K8$j|J&mň@AAPȀ!/B57@z@+T'qK|P0#PȤꢌD]?$h@(1T*<S+/IT)&;r*P=BZj; U-E6YeeYg6ZՏ@(6UA8zˊ1BXHU p49`ږ500ABh~;U|kZȔ/} 12XH#tXE;R*Gu,kCKҐf,0Ѥg:h& ͧ3R:X8 Uu;bhQAja!J)1[)r572*?s,9y,xk%w9$ 5L^ 걞[ZT;I<ؗu#wѲhOG=uWg~jO(}?@i d: f[Ɗt(mhd(o^fN@#jG`8#\+e *`W6 wp/ht?ã7G H.Hb=7Viu`5AvЃ3U&E(8U̪# '+"4|ʭ<2dJFw=8w1aW=eI!2 KAF.]r2y BFmFK,D(H+kM/" e:;hꃇDd"HF6K]"Z+XcHX'#-e,o%3!1Q҈' HX"9逈j*E9hr7hiA^Dč5W_9Lc !2⡥qUr7@R)sd:չNvӝl^[DɨQO) G6jDY%"tqdD'VydHI?H-ԈE9 F@Qn@I5d{լ]Hv&IKBv_Z%'u<;T6թOjx0"| %3:P(P;jPЊL#0!R#dH?Sʐ|ce<2Tb2"S _ Xʍ I&tj 1"V5G)rX,))#z%DQ6)٨ֶmnu Sia!KE#O4"Q|JQY!c\%&kؖB-\Wҍ$1Ĥ*ЋVr6W$u)HIf z w!+:*CjzJYL!n5aw,nY?bJD)/DXEd [p"Tj^K#cpITonD#bグu!n{ 3/19`pKbr-VL0vJr{VE2&5rPu,7+t=hf9$r\sDF ϸ(rO=h$˨vz;$xbL7$# ;i0J9ILYwOitF|Bz؄"ױ;fYq6$wTaް]XW! MhrFq-bfCF4B6"ޟHnݐjcٓ%PE{$wUʸkqduBhwD4ː\a ak ׊d-D NZ!fQ7gEK5s1% őJ,e=mHӽt7O!FX%91-B g { \@ไй{!V=71Tx0 c3&̰C?H&aBbS<ϫ/K:D2 =yӫ8K?̯0\]SL޳`ӈkBtبR ,EQSѻ ?c,X c3a;B3Z901\q,6Dž@41X7XEBJ\ƒc Is?^ȋ{T,dD26[@,2  YT\*S [KPÌh@Ɨ$DۍHH&4DGőȪ`2l+9(@<`ȶt˷K;,LylFy=kC8K6˄ƂJJC0˄h٤i Hӿ+| 8L(8+I PZpLZK4 (EGӼDT$ÎX̄(ID6ˌڷA̒KJB˯Sl;DtKFZ, ԤhMLAd#-l9!B " +\ :Cmd U@p?Zı謊g a?l-Pxʅ5 /AZm`ȋ`PPBQ)='mc2$ Gljʾp},"@KZص5e6U=*MB 23 TAxDf0FӾI\3={/ЍXH̀IW3Z#e%Y2+ӎD ΅΃x?s΅L˵4̶L7^??5O,eH56x Q.CDu܍ 5R) >Tj0M̟8śOmp3Nh4D`VтP0rX03jĄHG^Wr5$$Wk /e؊*UBZ8h̾_S}łhԌԆW=%S dVtΒ[}ML [Pb \AlMڀ&`W@PZPSO%~MJڂ P~団YU۵eF4(w$ImZ{Y$ .{~zYNB`z LD|Cτ(YbWrZ`d٥M݈[݀ԠP ӽܘvCmU|MǫϪqd]}ۄWV}a\Z%-R͑0JB^D,%ei5 S-T6Wtݥ}ATxyAzڍE߉L *c4ʍH݄pVY5_ev`)Q|H~۾FI^1Qq%?O%[ ^H&D[tXem?`(ލ@8]5XHp}nU^2`קeL,] fMьU4?|263֒O0M[]˨]-:) U0:qш+}V/eca,aĄ-)+^JK`+28E)HTZ4^eJs, ~dMلNPD0#P9m\~h/-< 5*^]IR94  PVS'ַ #v%c{?P.}[;#(MdH=S_&6 9-ikS/2E6dڃ#hp#hZX̗ #MURj2'֑fb( 2# A~2ފX @䥩28/Wz aX.e@@`fPaPQzXA<)(h2жΕPe.mkeLPxQٓ92V ,P~]K(P0X>"Ȃ#0?<"`n5ifrT:9AT3C-W+0+Rvh*Y-j=nf{Vgp$]{g}+SʰFg%0!ɀAƖPe);`[|=Q"V{9 c(h¼ r oђڼ&bPI+mo= pdV xA_F s&)g,rnJ;APs Yk셨ɈP*#/bYkwX7ߍǷU2{nQ,GTZZs9? ÙctuG :DY_ B^ 6oCV<1b GPP~& lLvrJ۬JtάJ O/uU'tQ|> iI'qspxhxX+ȗ7o <޺Q(%h׈*27rA_4+ EiY8+lXN|r8~YHh1.K>9[~Uy(nG,桋>:饛~:^GI~~:>;n&;V; ?̸:"K<;>\xn q'?;"6p#20pK dT 3-b|[Cgm&[*5F+pX xԳyFڴ.;E?0vFIt6)u(nI)Uk=Yy} !ع0+~X@2b!}:<T@^7C yWd>Ҷ']?7,.|]%$dK;I9pz-NѪ{u(Dk}3Y٩I|-fГ/h~8i^zvT~9qa5RfV1E=5ہ^9Dq5J\lYEaޅWWZFIC W8Q@D xPA,@EZ D !FD^n5 yJߵ=Vshh^AEBD̈́߈40C)@9C0\[bTaJV9BڗCġ:Q "! Y(f]bAW-p⤸ D0Zݸ$@1^#x_ZCl@!i ^A3 h1"2VFE<!tc1c2C=BZ9D0$! F<@ңA*I#E^Dx`mc?#uFf2PE@F֣[9u1`Q^Q&F(@њ8".^eTA E Eae`IU6[6hb1]6DC8:~eQ64"@*,Baԥ@[=FO &dC!R%Y!NFxՂv *Y^Mhrdf&1&[D`ECTz}Cp&gd&nڜ-mmfM"tP]!(ACc%yIYFtKW'#dbY$QnbQ5D3a-% ]-lBI]$yS6_C4Y}C2D^]^$QtT~2rAcڝ{)G4Epm9'eu"@ᡅ2a-@ jȝR!^^N)iR#Dei :# ZEG)6DBZt~j-Nfgzd*_!EbbDd̥Ĩ*!᪂*]&( +Q )bIu6~}Vh]E>!Ck.gD(i1 WF"JDyB^(F# gC)y\.,C*C~Ѱ lȞ_kBGAŦk}OjD(g )bCk[īC>k82gCXZ\*rmbC‘f:R,fbl-hfQA=v-zJӲEߦD;nb8,l+P>+Dmі!!mD@ N-oK`,N\9װ>-B[mmF-)[d*!nm~.WB#mv.. .(*.[~o2bEF!Rm/ConoݞЦ>eN_@m@P0t+۶J o"/~2/ ?/D꾲-c~ZZ"n.D0ʊp"2F@ bw/"o%+/!i-/Ɇ1q-43D1`|+f0+f., - -BD2Dڨ!2`ħ WKoff1qF rG(sϊH//bKq\B%0/D,p@f\`Ҳ@ sb13oY(2/٪_B$;k3B]r5grzr-ۤ-8s5*K1QB%ED;O,&)r3\[!QS  :3Hp1(rH+HKKJdDspNsem?f:N3&bAJΓr?3"C*>k2714#'a`CkW.FI@!UUSE74X?4Dt$/^pG0r! ]7)H:II?6[bK5dőY})rtJ(ŦJ!E5,SׂV73.,nG!0"1Zτi%ң>E< 'cga65r{TC%=i\tVuC"ΥZG^7*4Zy}tw8תueUhA7bT,g-g+?۴C 7I@B;7CwkΊ/wCts $OtZą~UI.wX{l&K4u;xQY*3D&vf!AlpτobgR)\k)bjy-d$yY$]G<e]H_6Dd8t׹ǑnEC@p@h[QSS@w@&+ށ@p6u<5prAn]zHp7[;ġ'ziz)Apo{5*s.tz+0-6a5\}g±Azp-: SyDh8/'g)+A(i5yLX 2^Щ9H0 ;a4f]Tgu;T yﲯթjk5J9\Œ[qr\2hFY@{7s:C#zw{26m\[@浯i}sX8#s{u7\Se?`ν#gsI,`֗5F}-" l5fǂ # w‚a'*Qs=l&OCAڀٙ<8ю,+~|-ྯQ>D4;Y|S׭`ǟo>?` r1Ĥ{C'(S*@`A RaCg@ h qHpB !Yc>*a# JP9fZ^ F %n ˍtN< \x`ZP].`0VM 6FRdA t+ "X˰ۅd(rISIΙd.TC̢-*wº3!I0c&=r;I /jnZ3{QVukׯaǖ=vm۷qֽwo߿>xqǑ'WXd)6e׾ StuJ GYET rgIe‹nM (ʀ**:6Q.pd& )dB0:BT;PIN;3ąNm`}و_!fsvؤ=5?*6?8s^0#}OjclT."o"XP!o>"JjAc .9/ &p!/0?PDЮH#pVphc`  5`z& \c &y` eB^@5p |+?oR |.j!TbObjC\`mqpQ!@p`!ˮ -!jI`"co1LbM3QLuPVf4j!ɝK& fk! +TävI 2 C&06. "K / BR@ib NR*&%_flK@j iv$k! R' !L!%d%RR J!6x}u1J`rQ,f Ԓ ,u,MBF"ܒB[ `2!q¼/O0 J0Ւ!1}+0ӷ&i` E@a (5/:Q&`En5&5=L!ʲB ӕ"a^r!8 s98 l&` _Vk^i/39ӓ!>l,&R4aϬJ?w#,+|k?k,.'  A1]Q B@@ B@,!jr!Rm:N?b39&8;;O"e SԓR!s&P^q&T ?@  TVjhNM|ѷM!|l!rr¤kH}+BZ!u2JI}+Zq&feb[u/5BZBXGXѮ5/Kcڬ`c7@&k!T&j47k>1#"b)5Dq/(m*;R&O*%LA&_S"T$#d_O" HV K&=A>oTecq v~lfi56D1o[6!̮6˶ѷn55/  >!Xn"Ym"ne\SQ&"v]mW!vʖ!VppU`oL/ ch]L)"t#l@aP] Q?S8*Zו O-fBfw9)'`! dG5% y\IRwLO#yedq@<@NeW`}he"ķl&6OVT i?«Vj{Ux1%&zTH'l72kO/} -Q!\[eʄBb`cUUxF!2L8+|!Zt~U1*xNmKw\S!.خ&Ї…y"dm8xr#aٸ 8؍iLSu"RVugB~]9!!R+%zk! j~!syyiB(%y_w@% ~P%k@! vgcw)a2dY9 mj&``BC6~*Юv"7Z&!L͉/BM6T59bꇓqjיZJ hq\ zqI87%ٟ@J!y!*z/ڷ~-f HMZ|ArO: i[7%"|SaS¤:96agb#!xV*y!PwwIgό0 #DNv!0Y"{O_ ?$`|+¦y ԕi=ٕ^9 Xj&:buo8&Y83JoQ#Bʠ.3l!%])ZSBp#T&FK;kA?;ڣL L᷁;{L=sQ 6N?b]oPW#3"?B#!LaQW5FY{!9a!@8w""Ln ![Z54=BѧqZ? āg²#deak_{Qoinj[{^4W?"co :Q{+qP@ f*LdL[ˍ{spcOeº/w w?-|#Լ`W!t#וV"0y՛&b c}[DEѭ ݾY#xSЭwg|/[8Lm[8hc=g}|| jA/Umz1{a}ʫ|Q2 d9HJaav `5s_C]bSb9]!0zxI&ڽ)]&=e8'5@k\ӿ*%ПlRL=a —9|3u +ծ<;%V>՛ݮy!T|˹gj^!n>=ڕmB"b礎OSɕ>^-y>ɭmjP (sg!ZVzl$0m]B@kw){PB:[&55LgUTL9&Nf:*7!g7XVSݱģY"Df[-5"wk3PDy@5#T$T!~ڹ'{M)`^`~ ^77hSZD<jBtPD+Epc-S Tb“,Ppe Et@f5uHtyH$duX#y`(6` ǎY(󠀫lۺ} 7ܹtڽ7$UŒ_l2K\D&L\BB}GW̃ +dcsT ё4 mYu=`;97[# 9 ;=ܻ{>˛?@G$ ,X`嚏??~S*R q"tEIEK94ISEF,}tPHd"WVYuRZAQɔCEAtTEԕBQ:]AR$]&I=OHы,ePzZne^WHb1`cZ_:=חdY&Zbn.p I@l*v,& BbqtĦ ֒%Z]bJq'E:iZik9Ṑ`F$_ފkk:)L^ \1~g 4k (D8`3rCE1fCI^AkIEtNE{DP](u$"T>kЂ=iЍ2A M萑JRԤHG)R lJ, r.DCbt`3IV@BD%@& ܗ = sbA驂^TsbuGb<, ӕBT`lj`c+Th7vεXҵ,ݴBq5@ur/x?n,TNl~<;/0P\1:[ A:F%T֔42 Eq-iL ԑ1Pv>- QNxux-qGEyϟ,% ,'ُ8oE55`m%4^0`!_J@@zQX3U=x/9XN8_޶}: n8a!RA. B(P! L!(A 0+l,jq\w`+@r0BP4 j D#yYA`%u vI=q!UE'ӊH!CK'8`$ B0(R{ qtD";G'R$ PD, 1 ,Q& 4!J&N5Ugִ&Rn&w#EY 8/X$q;{³[-Ͼ|ᤐЄ*t @$bE, @p@;K:Hoّ?^$vc%E&/ǻ OSdGtNrʔuaS} ̃DBUv.C(:Ud )"B>`\\KԨd ]\%y^O4%7%T; y 5ǾS4<4bς'g;.Q!'c/Rnmo[Y(FШqpL#O:"ԭ0KP/UW!UXIJ.DW-i#I""m/~ +2Vm/gҼUFEx/7(mᒉĴ%̄#ͫB7#D/j3EG6N_DBD@X%ÊeZz팻Y{0ǟ%2M|[3n ƁB 0~"b[|piJf%AH"v^C"_2ӷ,bH]BHrgY!Pd;`R& ;~@Se6ȶ6]|'E-i :ʤvt*d_d{;?ЋBE BopDL;ef4/D~}-`XզsfƁntbu"_!36HurGע|gZt[HDӣ D_;(  ~QƵzт`Y\ F`r1gv>R{f:gWI#z+ȂWWgGI}0-+< ~,W rchKJ!w^H6=w`4H798{ȅbYac'~]hgikxpE\zQWpYYU`p^R.ϧ{ ]"xs.dSt&W1qǁwth(uJB[(sA؅5v1`s qqrlH-xwB&苿(SpeP\Rrv`& (yF](wI>qSUIŎC(^qHw>Bh_I%~FR~{(Ȑ\Nِ8`U 0J WPWSprgh )ޘ{ܸH|<8H#gxU,qw'&'~:U sus3YDIɑcIeigi8VYЀQP p@ WW{byo똉-72:_G=DD)Չ^U1żMk^~\ ű<Ϧ\ u+L=? U, M۹_-$G &-{J%!\^@x;BHAW )=$-JȚ̕Nܱ$\}UA}m%Aȡl;l;y{WA1=^ p|{S @D~p] ]+1nכZ|V ؽۿ Wz8o/] EǍܰ HS&3|M, 0tE`" _/qWa< װPDPʟ6 Nni)0 ڿ G \<'  UI @UfwqDe!` 0~u/3~ ab  SPK.zS^W]d>ahe^{Pپb.j^lU$u."`e\ַ oV^c=TvfyneLCByw~0APgYBn굎Pbථ^" K=1L9[dr~P`^%s춉(+FňG... tjH1DT'a %\  /hA`} 'qo0"o {@{2 0/_w1ev(CO@`W׽;~FB? +3vXGpNP?n "BGSްp D']QjniJ[( }DCowIM_OQC?YJôմiE_op0y_?apb"P b>pyǟe^]{-@DpMBiE _ PBw[(WWCk$ D $8@Z &,Rp@" lk†FEL*BIˁX fX&$2!3hǝ 'SQNZUYnWaŎk`+!M%h[qΥ[]yW 1l X6fxp@7S c'cd͜ %̎AA򉚠Ap v$+"'vO4DOg׾|A&/"X{u j_\@N t\yK?OO׎y5`6ת=SrA#pB +  @jBK4DSTqE-mCBs3$2h,o4 B"@keڢkIJ=pDRJt"HkpJ*˗t `Ɉrj?b[ښ@23)D^ҲEH#tRJ+ O5 RN;SPC dȱHOҬH<I\1;IAr"8%"@rJFTJDGhYzDOZfT3ۄ:R,=vBgqx i *؎]…ڝQ+b3ZcCyd*5.z44` f)l2>< Ǿ|}#t`&27'0+` #-q;?iլV+.ۻ%[^믥{"mJ(]Ғ{(# 7%o.wJ `ix: Z!X..k[`Q|~x d>$ ,~ywyHO>UƋ`̇` zx j 4e=y!>W° 舉h~._A㕂gmYYR@$׿ko#D$X sU!!#HS~7" p!]An60 T$Y 9Q0Ih*.B% `H`*BO[@8$@t]$cxF4O0Rcǘ b+À@B> $"PB@,$WE%B8G7!SLAd'5y/ $dH(h,r T#'Qn;TJG%/wX WB%&RJ% S8¦* !CbDBE&0 Ic,N`gQdgEyO|S^1Q0=@'x:"x B21$Lb͖q<@jHJ-'X'Qt"#UI9KM%ĖeA8G+) a"!5FSȴ 4Q_OfU"UUcDQo3AƠ+$tgA#:А pQQ#0` [bąe*HHTRJ-DZEKwbsDdGYRi M $] "wj'"2-l5[~Vd%nq{\&WˍJ?=jz\YǺx^+ZH1Y.@;)^Ėi)^$%{ڜbWB Y ݖyߐ y0s=aX#&qƜ^$t.gBuwopBF3]ã o{AaKmx) ;2hUK&$R*3Y~oz\(2;f$Xss|gf,ڪ1g]I9$Yx@!?[2}$6 ʪjQ~s|+/6mB:* aW۶ Rv!m\3y+nS)j]7|/J," E H/Ylȹ"p*.ܞ|6zo=Zl9! ;NYsJvHNUYӚ6g|xG~+h-c@NIOD1B[wL$4C2~O/ Q#vིQNZ/Պ [)^ vdv`;w|zl]>}_0DcpX,F0AccT<΀4~8Pޫm%8:AӻS#K:>,õ k b>@ L X8 "x" ,1@ Td0|;ExEB*B+-?hZpr[>༡S72:D0ĕs1#h"[>”˻DB,A)kY8xAhÅk˲=SLs@D @E; AĮ 9d"S{"CN?L $TB^E_E`7Ԁ04Lj?HH8Z7HkƟ[#lJȿ{.[+C/e ("@G{'ZtzGyBr;{GX0,\;CTlaHKtluĭvLHzQ@p`IIɻ^ÄPk F (rlKGECԃ:ӈw4ء|Tb)׸ʂ\DDcTBD@JjJE>I,L G4!(OϜ S9 SHˎaPP7M5Ds s\A¬Oώϗ Nd>QQ3Ix򑕤 .4ȀH:6 -8ئ0:ZD:./݉)Ѭ+ғSҲDB3@I96ҋJS0ųTEҝRh*MS-S̾TJTK].T41>>ǼVU]UVmUV\` MXU̠$ *&\"BAE" "DfiVgjցVfXhe֟b=dEhh P֦ WHf= D"x#@MSVj"j=WsgWt&Ԋ]'X_"֨VdU֝ֈQKXXT  P@,Xk+YCQ}YY}<=P?@ٟeYYm%ڊ3ZZZ9#s[pIDU. `ɮ-[=[m'u NZlMۭۛI[[QY[8٬ M+õ<č\ɝ\M0ƯX@*΅Xp5])\]]m]H=] X*%ͧ] ^^-^=^M^]^m^}^^^^^^^^^ __-_=_] PX_PVJa_ SM߬___eM!Q ŧ ^`n `^v`}J` ` เ`* u`>aNa`8YN a.#afa&?0)_aa,0*I"nb'f`^  !`}bHOab-c1&(N+ "c00fc9-c V,㐐/8cB.d]4&>6Z(„AdKEd/Xd=V!~Y(e nEٗ%-L~eXV]M.1hdX[}ٌ %Jeb.泝e1:\Ee<~@^a6fmEf"``Npf"`@/vengzXT*os tulg.hJPPgJg hhh>XX+Ȃ,E`h}rhJ誐蒡niS#`f f|"I1i@iQifj MbS)ۛ^PꡮjިB'*^a殶V oexȩj~^Q;kk)jk(igh p^ h[#H0(N D(Hk.N)9M#Přh0"l8"pkh6"X {ZPV P* S ^8^PxlȉiN^nT^ko zgAon,҂ۓ$mrfPhlSpޱ=މ+ p~q XH j🪂8DoO /xafp?&?qۈpD0QXq K7“P+v* w V7JquMo;HFr&\ מ(N0r rmq iҗhO E08VQ+'E@F'EPp!~XE$Z@#^qZ?`T.8Ϛ2L'iS0\;ysovsinHh SbSO;_PM*,7~v+0uxu` 4MuQ ?px6Qb/yeom [yArft$:wjPȂ#i|vE xmO_!tW8z}emy{ 2l6ûxDZ' 7MXXueVow$i3 @[P/d gO3eζǒ;*ۚy˿z\&D0wx"E/?"\#J; n G"H%g | > 獎}HDeg Ր;DD?wZh4CU JL `0@ (Y,V#7 2NxN%P V 2pD?*4g .H1"O*@!8* b,ËUb (:x)ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺv(Pѕ"`!N+ n핋DE1MUu^DVϋ;y扠 ,EV\ 45HWS=rs艦 ,zX w \RU9"dpR)Ox* |N'Ҡv!w tR$\I"A PA&QD^NŔARUAA0!EM tԚH]E(R]EvTzأ?CYG"K2䒦eY\QWVB% W[AdI]T\L \$V9v[nDޕ}yӢ]x,iA R`kq"8pexzUшKtHA@FĉAnv`A;$A֡w"!vRƒsRDw7뤺ۮ[%D\)0̒@(W_"G%[JS(7M[15 Zs!{TtA[mZPE+D AHVlsR221KST΂AD AIxSyKڑU7Eƒ=cw1Y @'vNTBS^cH Py+!6Ẑ,忈 LAYtTED#vx!v)DςBԲH/n(po^D3KtVV2>)Dv(]uib}1џ9H"a P*zuݤjQbB L%ʃXb^ s"! Kh0*\rPbPԑK 3b$ a ༽=P`th @L6hQpG4X23,E)+ E]$|XQUoN=ʁ` Gl "cD cM"b b;:=2&2ݤ,\%+[W2%4b!/{י (PðycLc=@/r!cŒAhL>1Ku')(Q?8>w5E p1)n@Trkգ;o?+/90D,HhbIaE1LלuA`}R,B]MD XՈMߖY v-UpMTAX xUE"1PU]eaADZ `ڠe9BaJiR4"p!YQ}qVM!Zu@8`U^mWX4 *)_BHL UIh˹ >%YUAb J|֙ I=&ApVS"xU%Bx D$Bf_CA bʢFe^^%X@4`p""(bdAMRPKR Vܕ@bEyRZa>A⡮Yx% E=I_%h9bnfIV.$%teV pB@o*o]^g"N&[&$l=2$U<,gw:#^'RPd_gyy^)ajaaVBɔBJfL(gVӰace-Qxt6Z)6)З<$? ĶHfWND,~pp'U`fK:~DEv g X!ޚi - #( B@r*Tɔ1^\~eRM5UV|b@Vh!UjjEI"A2% 4u@$Y(*'?)Z[ۍ֞v淌jrjbcԎ0E,\A\LJ^*.A\=BW@XBjiMh$2@Z2J] V`¨z ]Vi*U &>XDU4l2*RX[ZgpvkL`X[]zkk+e f ^ <@V$,@$&Nר@hJ*dBәdLZdՂ?lVeWlVD^qRUX&&ȢOnlu'E U`Xkjr-ݑ >k8(@ "dAPdNl}rXh݄B(::[ B%%V&ZWYwh%K|+ jW2ZvQ'B*eXOjln (Ta4@A(fa4@$ldLS*R~RY hsij`娚Z-~.6^**VUDpbh=rnvz3zREܪVIR&OZfۈ6"TXRp['TAA(@$l0lcI@PLq>OXYK"sɎ.%5n[:HX\7 1 0BmWDzE W@=Z.0.K$WJM0qZ *&@c ڲ-cEFfa`D0G9gŰo2`ՀfpմKXSn\/0+S U8Nc+RjW+ׂxr-&2s-`Ce0ٜd? X\j[}R:]*x@ZZq<s4ڥ(YJWL6.3T)r-DrlQYtg{gFA4@ř"d<@<;pCS(ͬ NU`(ҡMt&3*UWHYAtA]X(}1[ f%F,qntY f I0,ޥ4U:-t7'cIj4hx NAP݆;3Mfwf@ۑ5>V'D5?*Wr@ˀ(O"~q<,X-~U$Q_6WoUTNWz487s<g[Nюh`܍_8>xS `!U'ѴAoı,Gg4ړ)?% (`/,8O A<0ŠSVjHA@Dm0ly_DT9\ "e؈,8Nc+G #H)/;-,֖S{+W,<3H.  EwZu@@8Q y(qj/9ZfĀ9Fy ̳G|8Y_S> y_8[ X Ddv 5wkKKj|Y<`}}^b>5ΣKQC5@H|{,@% :Dx4LP (,(b/؟Vяk[1?O՟2=$c| #dnV<ҽ S~[>^&= k>7L(wh`bDpsJz#+4}׀WB' y-R5_c'Kڟ  Gs> vK-ZR*~cS6n _~LvK;曋oX@smVu C?&hD V#%tbć VD T̲) 8bl`"((hfs1X%'}J LMhD) .@P L; :MRLYp%Pֵ{o^{p`Ta drdɓ)W|sf͛9wthёM1m#M?M;U?^0 8^k$߰X kԈ͊U@ Z,lWs^I2Vlr Y LnzJ)\T8+)$+*B(0X[p#Qڏ[>Qɢ85F{0OBT`10D P8ΐ*1\đ"<$\&|J$a`# ?p\I)5Ҽx^kA`%*!jjlݖn63  r,S]݇D6݌ف Ȍ-uZ >ᄱ ~x/tR⊏l`7,;Fe]*)H* @]~e!KjlYdw9 2²`_,[U#&묵ޚ!Z+Y첃C`Ehx^z2? J|Iq%\`;=*y0o˲O=Ek&\Q_vp :Yuߝ$kUw9۝r襟^E (Ϟ`O"#iTT0`["Z|ck++P `@@+T$=rHǷAPtӈx(@q!I4:%PsXH!# G!\Bd E*,(z9@EO ^4y>"0G. .b`F-cD+A2ErE`!@!FugFFEGl|#H:ȷֳ1nzOIϴ`! `w4!4ǘ:@O`C)tr BP4(kܠFLY/_/REDe@IGNu>9DQ3^I3v4/ 5(kdQ/sr"VCh L` n2w2N?U3@3F50"JIUb'ړ +%jZgRE3.Wo2^2uS%ԃ3350(YsI5U%浮U_g IW%&G5@: `a\{&d;LCb`%]7]-#^mEZ5Vv__u`!Fef; @g X7vVg7 U4wv+*'Lh 3b7`iOB&_SX T+#euLO2okam?%kM.bs5r]3V\vs Js7t@! MaԔQ&V0uUBbqaw#:MG'2FwjR37-"#` _%9]ٳ]8Rd -]ۏDMO6eYч P!͂$^u+Օ&υܸ}#8k Ay/W!,,5Kr/ҡ7O@Rq,ǓvJ+ ޛ%'8'ap-b:gi{&Jz/(S1^mdzY8 rL,jY^ I3}v!;u}%TS-s^# 0rl vp >nT[&5=!7闞DfMAsR{5~/"~ Z2>݂gVxsXkA>lbb_`r1 ((sd@aG+arj;3Q%k @K 0+z[N5""j.6)c/%rh+ba `)P.B @~"J d$Z3jȱǏ  K|e<2@`eKUVfJS.9.bGWtJ=RԫX?.@ ׬ PJv#RNz2ڷpʝKݻx7+E4ٷÈ+^̸ǐ#KL˘35u 1u Bd Te"Sf2G. vd͏7GgPEu1Ri 7$J긷ȱLK-Jӫ_Ͼ˟O_)G&" BD@H~dQjFb@FYDF~4(+Q%o'p+%QU8UGDbGKv"qטw))fr7zE)TViXf\vY"bk2H  U\9VJdDJdHFM]%#(\R^sHEDF$F2$x-yץ@ 橨ꪬ꫰*묏 DDP  h@ P dH WyL.J4T \R90ڑٸKvtpH\=,0dAD(D8 HUdaL!J~`$c+NF(Nq)\.Q*N@VWK,Y'@W|,h,1@i̞FZd$n[ >2vD@QE y3s^Gb3t]pb8 .WXN}0 gH) 0,SX kaD-X*kcL$!V7r waPpHFb@`)ճRxDd˄sԎ"P<á>a,U!+yݜ lYC*UZ>ÈR3 I 8tj\[P$GK* xLMD(!@TO *@JMlA/9\gj!ߕ[("8I9ZZh#2ŢKU 0ژ*Vq'/$ pv*xpXR`ql2k~Eɇ(66kXm&^jB'mޛRr{~T%SDSbt{p!{)w?"!@T< H@bA'#.1 NHډ@!W܌t%9]Gkݕa.@L!ɼB]kӈ \"ʂ4h 3ymF\Vxs$E_T4^ \9QȢƍda1"|YL@Vift^0HuI@Zŵ5p0k6t*5]ba:igR;/2V*Fh fMl[(仄K|DvA L@ qPV'p`K8{ D[),^kFx{pAY>k Y@'%WɽY#t@3' _% r+E5&]L$w\Ԁׁ,MN#mN/\@^|%; fAW]+'p0'x* 5ۓ@7T#?=V|w_i>_{}{]nF-}H=#5h x_ ݫs`n\}uwG~HXL0kbzpz0k% o`|$v*V ^b(Wb0x%FBR4 s0DX&H-oa mЄNb^7R8T[&XJWHpQb~$wa}$q8kwQ9Gx|W27}ц*րU8XEV:+N .<sPq`X @ 8+1$@}z 4u(Ps~1&r@VI<Wb%FbXW XbSyׇ=C $@k9s*@}ї$vї~ ё$r!i%mo9GHw3Yt9w *QrxXљIbKb/K8kyuixyu{ *&9(ry9ay8}_1+oP4bGbR7sb8k(0b0vY z7{1G*}Yc$tALoɟ:kùY%v%VuZQ0{$2*f Jb"Jw9W&ZNPZ٣+1%֡y uKpЇxV y*eIbYFIwgGuN$|ڧ,u0k|w\u xQtwפ'}{J]!]G\f1`7WWG! y*QW$$w!%$`'s4Po*gss{s2)}0Py%Гwڧ$`.0k[Ybz`uʩຣʙ~YJMZ-@抟uJwJz~wmگA Y33y*0k-b/Ӽ}_]׊Y=qꪾꩮn] pWu[QĎNbْ~ul sћ؞5}U̅p玒B '<*ЛMR^X!0Pޡ~֟1NyLNr!c~Z}nN_zd- _1 06Hj:?nkΌpV |>a1wWg:Qޝn*ni]b]bkY츮b.yW!`r_nv!ua)O/Ob{/`m@ĊT{ sl:D lYݕKݼ^ݬb [%p/@.|bWMob̮mN?enoqOt÷|%6vlGF$&B~q! &gтj@YHB88%KBg,P`ĂMDyPMD&G4c(,4ac&K={T0F͓A %QU S$r–_93jYԜJPÛ FDJ&y ͭuv]5eؒbK&aX"p]La,KPԈc%o}b:"YZj֭][lڵmƝ[n޽}\pōahyBF^,xDB hǡ%.aC 9O}r"ᅳ $9f A܊9&-dФ$J@BH5C1Ѥcs!%;6Rcj?t#b h3L1$L3D3M5dM7 BBL#lM0#;bs$X"bBDPXb 6`xȃdA0AhBЅt#BBȴ[-?jpBO\:XT(%;=bS:)ܫMpF1QVPvX[ kQ3RBp56oIUW^u۸u\ CH4S*=UV_ s5xwD^%8ܓ%6NWfe_9fgfkSyg޲uvPdQ8hYm`'ˆKzLQ:56U [,*iuQEh I@#.#O ȶڡlMÊͅ).nKonUߋ_SUH[7v^/ء̓&\*fWgu_=vg"ݷQ:.I 鴨QLu Rî $i҈* ?j${jt;O*7{;FdG1J i$cwBfdvaE8BЄ',uəc"<BrrXJ4XJ)1 8:$[jC-ڞ]T4(* jEdHx+(* b0iӬ>Rc_́s\n0C y$B8m&QE >VҒd&5INvRo iQ` Ya b4 (9DJ=qj4"" L(?BI4NPVЂWjQtjQ>4&28ܱ)KdY'*ӬLhD1'Iyu & ,JaEBRqI'N̓$όfJpCuyiHE:RԤ'2'tX "7D]ÉB o37 t)$-5BE*p 8N5^0k9a:*NL ^62 ޴.lm+Qjoj^T կVTztIUR֢Ua^s׿V6z%T+ա ? *qVYZekfb;1cR7 lx0Tַnp;\%jD1nȈkyO<0)\V׺nv]rUJ;vMdΖ׽o|;_׾ {i&wG!FEp`7$&E LaLtWt=hBЇFthF7яt%=iJWҗt5iNwӟuA1Q" CjVկ^q0k ak^׿ήimk:FvlfPس&{M2" G"YlSXk`) hڙYfx][c  n< Bԩ0Y  ,0rO ɂ0q!ye>s <ژL[` 9Nk<%U # PaMУ>k\eB0s2c/վv\H LG@< Oգ⇕SM X@ä\<-/yw^nϤ>_xc |JzZ7S8k"N ~o]_r7zTJ_+}C÷>P?kۦWM8>m'`Ou{3ϵ̂<ؘ?+*E cL[@PxYS"D(ū<훍+:ݓ P\3*?CMA!Ԥ$3s"&߫ Ի 4" ,63 S\<") 㸛ӓ 35($ِYsAMC<A!#;@A8D ) SC 4@@<:kF\BX7ۊ< Xx@t=B ;$[EZ^\CD!<<4E G 3IE>5h$ a-D k|=b< X;PBאF(6ژ\œh G_x;F l]cL d S1FP\#=K˵k(wd M#CXlvŇǐɑX0ITԮz,)~$  e5 n?Zĺ@d s # :$+ʨʩT+S6x#t,(#pJ# 78 PʸJK9`"@IKP@.$)BD8HZc@JJ@YBS K̿Z0@{l@S},\#"XC$̻\BMp|۷"̑2̔pHGZYՠ˜0 ؀w$8u+͙ͭ2;C P0E <פω#ɴ$͉P#3?hKD6ܮc {=x 3 5NP[F0LO4 u̻nj:L %E*0St#N .=伍<`AQ@ʂ$?PQ$Q>]NTt,ѼsK ӉщQSP#@D#T M X ԙQRpE m5\ 5;tLX8~RZ(\;QpW}UE5FpE*TZDYD7E>hUXUYM X@DbiE*̾VJ+X60֨@8YSD S(8"PiTcMס<#0TxNLhS:/UPu ;SBsTU?IEPhÈT8tX;YjuY@8 XU)U ,XPOրP>O@``QN% ,m[֠YKY5@ōN\O$Gxܤvԗ%)V +PZO= ;[ۚ]hL=R LDx?DS`ʡۻݖ5%58\BD:-E@ZpR҅ͅkC<eۓ@J|UM3?9$Jϲ{Z<ύ5`4P?hT,EPXňRPӡ^Hh:ISI[)ܭ;њR8/B-F^4 ]O5%heEMb>W_M>E~`"qE\8= \ݰFc[4IYy0EҔ(UI3ߓpӨ 5%SZ(5= <%EϜaGvT<2d8I=,4\b@5؉S!<`8 cUQƍ[NcY0\0Ik+(ʫ E16UF5TPمKHPܡ$ZG`>=|NcZ{c6Y>;S(VkQ6]Ha =0`aYT4&:ƈ^Vfj cF>Q[^@"SJDiS8^?>q[F ;=p\s@0Ex?5 m_ňS= `ϳhOF=@jY8g!&%kPmeLZPd_)B&[e6 `Fifεru̶.S@N*`]>I m?hFA.0kܚ_i$ޚF>28e>Д8\hc8v:XmՈ[. n ]fL?>,xDtvPVi36ip*v۹!EGp&mT+5/7X bc^~Rdj>CT.Y*0j boXז9nɉN^ qِd*^"geSSX5uVfK-;/> 0\jK^-4.&*/kc`fsRLh#mEoq]'N ,蔈qZn^8 6l\! t@mLsP|F@ʼlXj$يDXd Ŷe4 Ub_C`o3Vf.en @;79gpEjXȂM`] o1)RY7͉[ttHۄNm4C?` >F.fk)ehUXpxRuεG}tѼ3qŅoes~RNgN89bFv3gfw>e x9vlg>;/z6)@z8gskRAw;z֏v8e8Sv, ǵHG΅ ,4>&nZ@ʾSg \EHuZ@ع+؋V"(n?Z,h *.\  @F  E uA {D\bрDK|pqU"":-,^5@\E,&aʕ# JТ)P‡/ʮ*ƗW9?mx3J&H4xT Җx32mӯo>￿)LS d1P "RIBSPI5^_W5`!RBDYCaD@im]F@,(JF JK1WApU j BXrEe X{DBG\x frxR I霍 Zl+aҀ[VlYy'xF'}Ğ{BWTPyB%(Fu2dj)z) ,TNM &"pE .Pw9@JJК q [^"]0q(JpWPyТr_!Pg "WjW_$b.[k'fsJl)-"=U2L(wz8*G1Cd Ybj) 9]uDþuZ93=3О²J.(66`ĭ Jc-ɖ+X-P{?B{Q[,=VEM|]˯ I.V]pA.BZPWT/C`Yn=zch2Isgtf:x:r\@Ė>{A j+[+<;< PO \- $V&' t0ݬwF}異Dw3Ob@#|$]RAzD _- (.^"9mLA8Đd\ jLx8$u$p!*.$XǺF3xdELxPidU("h[Q"BH9f<#/ D_Tsn}kc.[d-Vd 'IޅZ] yƜ2~XW@α%y`cDH %"т"6M':DžT)NIoU&hRʀLR;jRԦb$l-*VխrUyD`' ZQ#La*ιٙ2 WhDKbr$Mo 4sGOEJpH, "d kLL".'ќD|uNDN}+Y{=.}Dr{W\DZ,aC1a@rTZ@ t3AC#/1CH 8 X< cYw"e^ཕ(Bx-s4#2ʼnDH+ 6Io*/qFl.~1ibp?ʂbѷzJđ4  į$U~j0y~$gaDZ"l+_ j$ ^|$_cftE\1b>OёaISҖV)P>>̹cg! B[gebȻ<5#(0+عĨb#ADx:KM8Ja*ϪH|ĕoɞLIg" }H_Ŏxk }`tB@ j,\ n'?[r | l!*l"e- 6gV) k/i9o5g pp%Q0p!־_hv1,TYߺֻ~f"V:qx+T ~_Z*di]C"ָyE^9ەFAAĖ+$4?[FȴE+RQa̻Mw9HeVas?.,P,8  $ +&7֭I1ZI=A8Ҍ Q^<*a1?lDNwT/> q3 }HܵiC%ҽ^DސEfn v-(D(ZeAP(KЌzpf@͓L@E~uY1hWHmafEIhY\A@~ĞK,BKf{X᜹z!  sN5A5@<_AMr~+h\]⑖@ [DƉ- 1 iA R Iч‹EiޅmX5^#6f6bUA4 *AqL,@HN\MH8Bb-VDLSE@u^]AVD<@u\-"$ D@J[j ?~4#J`>"G?n#LƤL$M~W)"&@>` FME Q4\jXĝ@F(HR8LJ^!/fAI Ğ-a.Zh)Uւ%AaI$J WEaJLWdMFdN&eV&ŒAFRJH-@ZMp(A G]?5%AP ?aEPˈ܅H2jD(I@DFXfa$gm$A!H"`Bڜ%"Fa FuKDTe'{{gI$ )9,XzDUY؄[elEئ$@B<\\GoTGo`q֠mr^F@̵]^D$N (Rww^,d9ZDe-ldtdFIp§.)6ibh6#~fZ4&MP CabFַ!hȩb@ؠDŽ *r[Ad+]ćA]$6HhȔ@!] NEIhE֎`EBJFiI:) MnLU="AE"aNN޸IdUDeFd*!2("_)uD aĐx^ҽB'+[HPCWbJa{e5),^9ѬI)s.Ĭ(^MilJU1Pk|%h_X\ٵ2[{Hh:(FxȅZ=:A (%h`QlN쬅jdRr~-؆[D+K")D-C*( 8@ubIӎFR"(.֯ޯ1o4>o-bDh(+mVoCE΂G~e+HcAI @0Lӝ4n-\{z. h)8}D4Lް@  0Ed'CN EuAfE),GdUQlJJ[z&,@gtE_(kY0AGw[ "/}QX{#?r,pD2L&$$P]sDg(B{ rXi=rD,@9@'_{ىA% /H<#r==@,A }32GP WDQY3;h,@%z (4O5OOڳ83n܊J4s=8 s]1sJ \AmJb;ß[<]QsE``)K4L4EtBs7MV I4PPpu}nWMNT .#5UWU_uL :cu q1uPdbY5Z5I3jB0H[5^^L ^G)@@uAB~еH_7c?6dӇk55e_e4IĊ\v. J0,HMx@"Vzym"9fs Ir)?:G:TVL[o4lguGd \ XWz(GrdF+pFfv˫O%"ӻn*ⴤ7?;q,p8LA+D/-qb?xNxc"LN oWDِ_@ F;LLJx@b[<7I$#D؜<|OA^!A&f$`r7ͬ$4<˷˿FJ$MB̈́@uձNCY|L(bUC` GO='D v9xg4KELIt@ n3W=;̧D@뷾u埄{hEL(0ƀtDGo3B /?Wu,T{,@DZyDg|}'>/>7?/R@fÛA02@8`A&D@CF,!E(8!DA9dI'QTeK/aƔ9fM7qԹgO?:hQG&UftV1b)(PŞD2IG<@QA4Pn*3zEFȠ)KDE舭Tph5,pmG-cMVemٖ"%jHD:€_2׆THR *oSՄ^֏a ]vT_SX .`uHRM6XZT"-74!q):rex票^ 2σ&ViqY#"NB(ס! G#Im(-s)n[gMԈ"EZ Yވ4X 4!|." ($S؛#p| S ]Oq‹>}ݹa]iەeN]/gޤs4G^{UgDO_oO5/_xEFW@. tܬ ܁0AUABf %,a 'B-t aCΐ5 qC=D!E4D%.MtE)NUE-n]F1e4јF5mtc@8X:}cHR?~gD!H6!Qde HIN%SH[Џ D@L #Hg"W"8Hv )SУ-}* eBP U* ZC $&i7K`nS{L&crv dFYgK[&9GD@"l3P|)Hd &sRxh@~F;Z,!TH6Q ʼO \&AOZ^;AZ9ї(DH'bKMiSAThELD<W@l+MjJ=d]uf * [CZXm* EXk+͉:BFE `(*k&m])қTY+ m8D, v~$M/Eݦ_8#P砦6A21 Uh.(d+جC2۵ d֙l-@62H"ߐ93"\3xAr>$=Y*UB%ijBDB/<$`BEJ/d*W$ V@bs sE~)>!"%T@kA>4%p+pkARfb U* I Ijp dMC` i P".%$(Xk Fj%L) n  [(Ή` 1# @QB ZɳQ <+"#~J `I8 䮣lND Rtw0i1P" q A"'9 I  !2)ucknJ | -`&C"Q PHBM|#R'dg%b({&o2(AF% Ʈq& zq̲ G|m._bpSd/`a&[*|p"R!ҫT:Ʋ,ϲ#Ԓ1+0  ~ 3kڨdI b% [',@&*&PB  %S@h7 ’D&\])t%r0Li@Q f`3$R8 z*a'%l1?" ^@ذʟ\rSern.' ઑn &'3#R S??3$.4$3j1 TKF,P!r \5Y=eD,M6[縨BlHIJV`%x`B^:R"bh*.e(0HVwL=yt' L"bw:'% 5u 5+""1m¾.KQNtOROBPS$.T0LMP9@hj+ r#zN,3LyRe$"GTB^iJL'q&`AjLW:"2a>h\-Iƕ+N'f+".0kڀFbwGt AZӆ69Z]`# 'lVv @^Xa#Vk9V4Wn•WwT"~u]atr')"4UJ@@qhBAFZQ'.f")J[c-w*,\)b_p[ SRf"N1 =ST"b bb}"`Cbw,p$_BmǶAozR85%-ĶU+ϖ}oBlsV>"#DAp^kAe#""S bk &$lKF"$h ]:W6SF\]bX%d36%)5W,72`q# k^@]A&~vJ#bpOb '#6J߶Or`s"6P>&3tn7"̶ 'w+wqS~0L@Wlja_XR%)ie#sWGsIB gEzt@Ό!N@@%&\g�wk"@ "|#`Ixh%S@,`X'b] z^ߗztm {nkz ʴtiaI0'['n} b{sTlϊsYLmp@!Lx ̀bPoQăݪd줂]#*U:H!&Kv%~w%]tax(K " mn$nu)H5,#{"  dx} .!\9Z.S{TշVvB/Ke(Y—9UPᢷpN)9 ȢBAK !v' =Vio6!oV>&c||'n#N%rxggGLS)):OY(^M_l4WC ۈ=K (P n$ R k_ž?3J0u'jnzY"Y x0bwj$,fnL%Xnl>gG5bҷ-LE0l6ObV"C> s­J9HGZ(,b@}Kb8}B^l"Mz&FqҔ.T B^(|z P'y++blP YBbzy׀ :EB9 lw)ӎsݎqdDy[;P"]*!FD:T"t $!F%@Q#$v7)4@{kBL^""Ż%&53*k[LA~7~#8G4K())M^Z{(: EtBO5V5Oh0ܡ+;r@"s|v%8;·sbGZkzٔ{$&SʛZ6!?blMCv1  c\%:6eZ:&B&"ܳp8D"js9/&>vא%?v DW 8&,ҍA"גːfi+v??`کڭs,i]ټ$%Bjv//<[&SR '0H9L|*]O⸖tJ4-KX#Y4 ֤MHJc  Ġ}(]H]-᧵ VO~"RW6jKA⛦}Pkj3f 0) F:X| )B "]Fٗ*="RgBXGW<&ϝ feໞ$|Z*~+N%A\֞*FIR&z*~="_{R#,`? *~ #L?/]Tg7#Hq ]$KH =]&4$ع9Ǜ>o%{SueZHh@?m8_ItO2kLsG~tk9dvKRMv̸Aj9ڢNzO1 hxB*MSΙ) T]o5@ 7Pn/A MR%}~O.P{}A r?N x6 w1@h DA3& zޗ")dyJep,l _B ((p)H˟dXHY,<#bb춧Pl\4[Q?2}^ -,A-¿:$EXcHD^,O tExD=Z TPv!BUDO&Ikma:21*/ ` {(B4{l3$enn ܤ#h OQ6"(Ow0d-JE` ѭ@` t# -r98,AЄ*t m/(+ C@<MPvtH:iO0sl0.I-Ǝ:}.%:GtP)tO Ԡ uD-Q+F"d)hsB6sAiJY3@h:ĔȬst]׼uhe BUrm5HzvĪ\@torITJȦ)|6m}ʵHɹumk_ غ}\%S Q-bm-X8j$o_ CX$pC$@%DkFV! ۮl w- Xݶd&BX(uH/Q$Y[ .d@(k}ZkE䖰歰/ kx @:+`uĉ=QJ<߇cv4c,Yo9Ns̢]# ~S֎Q"9 (KyTk+FN" xuE0!+vHR.C|+P+6%D+zь>'e[y^~Heu`<5+e+K9'Lq^'U=6}cKѼ ` ީA8K ՟9Ď\n\Θ}w'%7nlf0ͺ%Su{<:x b sI.k \޺4ODœw2Ox fy%~k!0Yg iG^gNen_oا̪@g;365 .L\;[kzw aq#\.g5RmveA;r*EBn}lojN;=+Lb;P4:N!l\D*0dT}Ƌ0u3vZ1riC}o_0Vщ hpw$DH /Xage򀵳\\.I(,&@[?H jثo ~)vP.ŵb) {ce&N+G`qtEqYр$A}fw<Vj=T$rdy6 /S9rG5h7u!~6>-ԣ-ifCHgyA _ƶN6w.%E:qূg'"69(HWww:q^;'tagK#dBqQx0u7pWx R aʠKc{ '=.I6 bY4.&ZC8j~=K~%M|UhE=M"!"+ W SJU37Mp}a W6 I3PGU:sD):zI0DNU 4dzgFS*3|zqjs£+]i?zDv2QKQp9O:zPtAix'(yQ$#gQ#Vc+;2")ѫ ԑ)#W*"Y&&ZXWDjo X*_:vA+J2DdWQ 1i˪P8K[JY'z"`]f՜) 'WАq 1 *,{/[ 13;K!7#>)X@[G'䈴af];~$W{i"U .[= uuU JsK ; АsU7-1|i9A1! #%I+щj |Q+!i)q&с=8~ZUO!+Ѻ{Kd1ڢw+# ppJ*_RA"1(+c> x l"R@9 }qiˤ` +1@9DDZ76J[~Z3u,1Pd2PdvfqB+q  uKUh3f4c6RQ0ux'Gl$d|rE֜EqY UpUCiy`K<Jf.D`w02}a;FXvxI,$AdFfpN aE!)K 4_&IE9t;ʹ~~*Y,+ȩYޅT'p @Z,@DJ!) UT1Dgq<hWD=(~a'mD[-ڜ:+ՌBbԪK }W:Mze P MQGv a W/ )vx-s\ \=M6p9I p>m@H9טEIKz ~z`ɵ900M+. G֍Mo-{qZx{~|Qqn]M!) `-ٓ- XXh7-̬<=ן ڡW0wwAaځЪ-u{гؔ!)|,q(Qwxi/]m-Sx `p}4u|R<,Y fAqɍiЍ߾ښ֥z'a'2/L wQmzK3jCtʝE\D4]әᚕuӋ?\ /)93na;퍵ߘS{Q0;b{uݞe"n6=Τ3ѷv1Nenók.]yđѦWp!Ug$^k=o) ƾQ@rG¹SAk~>ug.Nsj^4wn|qM^ :"̴P|Ga1Q(XMXɨH..D3AqQf?%wy]HDhߕD޲*&~;^>eh PÈU#NQhR Z4B$s/!/cN9+J],(hQkJk)t4 R~rtHNOsD#OEo䂆C20C8nSFq3?4Câ4L׆8^$7T_7V.s3s]*~oqO%.y{ p͇JD?\W/??Y\o퍯L0//9bC/OoǏɯ/Oo׏ٯ/Oo-RE0vo.K0x`Z .dC%NXņeg,a!dH)UdK1eΤYM9u: ON$ZQI.eSQNZU8L5JS]"Hi(24ۉU P ,( v@#4 aĉcȑ%YWd̙5ogСE&T@)Ejd)J?Y jAnt6Es/sJ+Euٵo P -+W-x̳y}*ӕn @,@tK?#pB +B 3lC)9 I( )bğ p"?c8nd'SG 8 H$TrI& h|hwG%W-RKR)E.tM`IH8N,U^^bZ+_`kJX,ɅٟO"ED`r]-xA f9(E>5B-J DvE 'sHH 1l(0$ 5xD 'BbD(fezD`31! ¬'$d,N*"J@&,sLQ{c'E,o"C7tQ))\zGƅ{!F7^D@ٔ=Y?l+-yd)MyJ o)(2)<9D>Dhd"Py̤qBf3Lq'3B0N('\"##*y“јaVzf;m1ӝg=16=DF$h5{ Y" V1Y$>1&FIUΞU (FfT |.-TJ@2з__#XzX#/R#8:x_~)pg9W}.de'r#4@@# YK.~ %fKb*NI7\5#Aw ]/ŇVHYs9!BH/+x2bh!^1BUYmtݜ(}iLTNZzG}jNիVj4/  ɘfkD}f" Y(a?dU_bOBmjX&sZxf lM ։nx;S.f7&vnݐ~kQˠҋX|É)dxSm1x-nA3U!vB[~\-fY4pn{߅&E*\;@F Dk>(h}zC|"~#!uiHUZYh%!Wzv0%] F:I2I-v(6 ٺEBږ,|- <8y./;/S K:8HS Zs(룉͉3@ "5G[s@8H`SVҷȰ@Az2hK+: ,  D [-\_2-A)B*);#iKh2@C132*|C8gj@2@@(@;@P9yRzQXCFlDG#[㍅@8.2p(,1`GdGr,G)EP;4@ыAZ4@M, =ЬsljA{J4GLH,+8`kq i j|B((.\n[Ȅ(^d_[H\I鲛W59Ȅd\Ç%k0 ƃXǖlJ|JDRS?S@ TATB-TC=TDMTE]TFmTG}THTITJTKTLTMTNTOTP UQUR-US=UTMUU]UVmUW}UXUYUZU[U\U]U^U_U` VaVb-Vc=VdMVe]VfmVg}VhViVjVkVlVmVnVoVp WqWr-Ws=WtMWu]WvmWw}WxWyWzW{W|W}W~WW XX-X=XMX]XmX}XXXXXXXXX YY-Y=YMY]YmY}YYYYYYYYY ZZ-Z=ZMZ]ZmZ}ZZZZZZZZZ #0[YӴmۚ][۞[[[[ K[mFcRUu8OK=\dmϿYsC ShM\mϥ]P15aZ@]P] ]]Õ]дw *Pfs+$ݗ()XG Ὀ]8%;z^O## oɍ;EU5+#)j E n[J_[E_7ܸ: R`֍ q``P@ +8`a` Ra`(*ڢ fp ]b:d-@8@)`(Ɗ@U3ݙ()32"#M"8 꺂$> HP cĵc(&:&c<= ;]MzP)-b.Rd侨0Ί#`82;c@.O H @PdFvd65>bK ,. _`Ί,hEFn dMN02^X84^6~3#S^J@f>/ gBC&cDb4n[2zSM3*a^ .+| >ix Pʍ8"Mh$6&8h肶i}NɦU}hp=@8MXii +h4;bna@3bR0iFhPhQjhtnV6^vgs['إ~.Ή&ta NšnΩk6"ǎhg޺x΍ʺN<\&(k+~8j_jpr~l 쾦(lq6EVd~a PnD;i*ᮋ֒NZEu^TiVfa$Nnd͍71$(?02fꧠo$.6VoZ(&n[b 5|npa_PNN j"h˯ q5D $,qH˖ _ ()(q^c_of+r8)>m@`ap`\`rrqnN,"zZ/owk9@hK!!R 8%P u0uTK]@ƟP:LKtuإ2Q VO H0+9gHGj45Gz 6NN7D vtw !uGvOiuqw)]. FBoIk 8w^ynSXoxhx__@ n_&2^\yo[aEyXT_"܊:Z%|k2A ggy/myA4o qO ygTgOy FkoIhQBsAxDb!a]ڙœ{Uy< QW q#SD3"jϟ ;*~| By|ca_n$6_;0}ץޏ_eBX_@r_|oEkp`F0G D@2|i1]IB3 B\##o`Z > 86(q"E /*2Uq"SFL )сyQDX Z ((JFJPDYJ$rj̄ FX0J&*x\+“O@]tu0†#Nx1ƎC,y2ʖ/cάy3Ξ?&|%PL0qJ>Ž=hcL,ljx` ĥޢ˛$=0X8n,TpK wj,Rsl(M&cf&@S9ԁ$(zGb[CDP@\qY8IPWtPguV7☣;أ?CYri}ZOBQ*d^C荵!)Х\T1Uqc S!BUf8cNġP b])_!&WF#-`QVgD#0D~ir%a*[)S#К⚫ګBU+H*db7V PK-FN[^-QIa D>jl*}+*,,ro*:'uyyX`4FH(ghD )`cAp SfE{mނ )R\QJYpRbb^j-*.lHFS$/۴OCSS]WWT+(,E-rQ]oeo~,%ja9` r6xn ]S`F.g ml/n 9'IB'=02! kh EMQx.Z*E6: aL0ÔOPy Rո$~ACAQI#y@g b->ܧMь2aH"ȷˆN)bwlP1{ۈ`+bQ'S&2%)KiJQ"U!>",5%:sN$ ƒOy/NVPcMV7F"0_ESjeM˥tHH FdRyHufJ%$52&a)y ̜%̓rT 13̻|)3Oiыb4(G3#D \,L*/B"cD~Nfo X;@ŏߩgxX@"JR^(#'kkTLTʔUI$RHQe2Y [ַy*A M!' <)e!6=zJ<5OzL\ABς6-iMٵ]V~pb2Y !dEĈ/cO lC b]H2"{#ȣ* ^g$b\kAxMjx32ڊ87нwC"Dvsz.-A;_很ցȐ`"3DŊ!6&ϝo r\Bw$ӝMi[82{c3K7(Deח䈐Yqny%? g"~ɸ)*7QJI6)KOybd$)gƈe=[4 ~uRdJO(O1`3Fn _2鲀h`Y!Wy͸S'cfVJER#3^5[WÚ13΋$d;/"'H9t&K2\( L"؍ ~n#SyaOPI,oUt"P@-=r)=2BNpF;X1NS)Fж,-G= ˜2M(}q#%}TANG R~.7#0^!`H/<\&4[|bnc?'RTPȉ!kyH ED8p_ 0__WjYXK_g6I_"<@(`E l,L(Ac^B`h  `@m(hAJ* ҟALPa DnrazFF- Db) Uz Ϙ\d[r^E(!vfv"E("(ba!!.!%bb&jb&"gٍvVN&bwb(*b,,X'VF4@.b`)Pٍt"-"c-c c2:3Bc4ΐ-Rl/#uM2N7J% m#9c:#PcLF## =5d@ @F#$J8#c6Ed=DErdGzGIʼn<{(KJJrK(dLMdN!,$OJMO&$ %Nb_QR"eS:SBeTJTReUZUbeVjVreWzWeXXeYYeZZe[[e\\e]]e^^e__f` `faa"fb*b2fc:cBfdJdRfeZebffjfrfgzgfhhfiifjjfkkfllfmmfnnfoogp pgqq"gr*r2gs:sBgtJtRguZubgvjvrgwzwgxxgyygzzg{{g||g}}g~~gh h"h*2h:BhJRhZbhjrhz臂h舒h艢h芲hhhhhi i"i*2i:BiJRiZbijriz闂i阒i院i隲iiiiij j"j*2j:BjJRjZbjjrjz꧂jꨒjꩢjꪲjjjjjk k"k*2k O:kJk D0NrX c , ,@"k Ŋk+=۽VwLCxI"b BkmA&lJ`pH-Mlj,!EHnln2ڵlʆauͺlf,"4q=ΪNem̖Kmfl*mޚ.@PBm&Lj-‚eւ-}mؚi9ٲmKvm-~lA.iD bD42b)P@bnjņn~r .} ֬v)x,n6j x o"o*2o:BoJRoZbojrozooooooo|!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++333;;;CCCLLLSSS\\\ccckkkttt{{{26!9$<'>)B.E1I5M:Q>*f.i2l:rH{R@VD[JXF`OdSjZn^o`sdwi{mq׃vً~؆y13:<68?AGIWXNP_adftvz{opWOjrypa~ڎۑܕޙߝ⥛㨟ࠖƎʔ͚͜Ȑѣ䬣尧洬鼴꿸ý۸޾֬Ŀg H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻs􀀂?“+_μEU9q'9?=&ËO&+J4P@w g&O V@,r&1a h(XyJ8(#(2I<)D¦'lb V8IT G)5@XN1di&b$&lcQl)B"ݝ|c栄=fdŔ\6*餔V Tjcqh^| }BJLIqz%Y*무_b @^殀r8%R!^f$*rc89@wm":B w~p[֫;bbRX]` S8YL!F,=^IgTz씀"K0Һ+a ĸ]$cj򝪌#LfV L7F֜ipbJ(\(|LM+cU!O9,uJX!&^W[lkrf'TtX.ܔW*Q<x18e9[ xRF1UI˸t`HX9f=x:[,c47R8UkmK$hw 1VvOf:lOdW/>:˃vn:(⓱$UTE:QcHc?*,yr:3bPKش:OgL Ժ6y4ڲEՐBS:0FkJ6jTA,]x)l-_f!6 KsF N%9JM/JCPhܙƦ"*%J46:ṡ>"I 11/oΒ<6j㙂7(F r-z2#^*Secb`&T.ᲐLQꤲ)MPЌnئ b1z!^И#[eT;J2QJdJ)PNiҌ<_)#LwJ*5RNm(ˤ6)=HmM3eK!;ؕORFEXYF&;"(&١t.TRR<6 7˨PwNIddJMt@J׀T@uH9 RP@*QVTԊ!YdZ?2Q'HA Op%S_ HdZC4 @0mbi?֯u`٧llg+٪bǛ5Qp5!:7XqmDv * B P@$P @X1hUl @ra2GVͯ~rV616$JB̮&ER]]-P !)ۀ滑O` 7stŝҾ@oK@ܨ0nTdՎ(JHDҘ a/B}%Ռ;Ze%yo9\59}lM1ѢX $H'8 D+, yr26/S;}I;c"Y*a*h g2ɛ#*"w"EEtK<=(Mu%E "V*]x%͎X^GO2fgOD0TH XSVpN?% "qBv7M(j|A0n>cC<V > qC!ɇqW+r^-=o!(' @mD۞E#8/B2)F^DC  pΑw(^r5*ok n`=Jkp6kODo1pH28@ cfe"huwP C~BB<-0E@j"'bm4^ #!w~5e3i/D1;Q.zFZ`NHe8HP`9'@!ч18 %$9 )P!Z#*a.&VLԕ [y1mo !)hmkf!ej>9%x8 l4Ǚ+pu5mry)2a!u99 ix~hy&}P2ĜDЈ1B/I!ўœ6a )5%J '9IN,}X9B Љw77ɟJ !>:: JOQĄ11W3hG !!zY!C1E Y;a\yuyr&t$T2-`h~;W:Z!=9 _Blr AM*#`.Z1R30 m2!?w+J!J\ũQz1jbZj jOqYٚ# P}xj" ܑ1zZ!څ1 ܱܺE]J(: M3g lJ$:% /*# -ZqYUyɮ!ef&Evh!+@"4eڳmB&jZ)zDu;+b(;% 6{¥1  )1J7r$@+1bGAA0dk#![!T³65鳚q;!gxG cZ9bhxڹ{E8 e[˲q 8K۩ѹrIں:({鶟CSm*a[ B[R- T2۾Ql R3˴"I[m ܂ٜƫ 1SHK%bk!1R@jڿ) Fcږtذ)*BA [(;z;ľL OED|дab/6{[; OH(?L?8#P&1b x4R8ɋ)`> ѹxyɐrtKq&: ʫ( ;E)Dʻ~&t&v\x6xQ ^D1F9Vq;F#"y 아8!."d1o, D|?_rq b 1+,|h͘,) ƶθ,:[̽91~H-(JͿuA,_r!iq͂xJ<(&!"> q̩<  6SȅlK&#UiKpʌ]^9%imjzѹop\~xCZ(mқ+Gn]&].rw޸ 2+Bhd^[`6 ; XvS]-6i^4Hpb]cMM! LW{Ga -x] =ެi~ծ[bN!Nr qPVG uA+.|7o ]e^!^pÚlHn!G~".^(Y>F.5ih(+siq' >ݱUވ8m3qn59˄1ʫeߪ& s} 2_~_Oj AKP k q(({AJ"*#ʻr_&ق=FB )1K@U PB JC>=2lQH7!Ƀ)*%JPH3,x2'% `䃜Tt40TM=SX)e6- UZmݾW\uśW^}X`… ib:PҐjxPn2^8D HfDD'-9hqC% Ucꅯ. pb&YOPLR # I^ Sc˙E 04A9= ?9 j-'C0AdA0B 'B /(90@x2m"J1#(\ː,B '>%4Oá(ȫ#`KŜBƜ\G#"8:E@i%ɵ\ S#f $#S1r$\/"6gAK) /4SM7SO?5TQz `'$f"bNv$hЏbuɆ%33Z4%q(*q(2ҵ"K d?30 遶 !]:.]ꌤj]u0@H-S8[?`(sUd=Jo-iϙͨԺ@ O+gc#G8c7c?9d]as,V ]YM0ignfRP+*4#Ҋm ( MHar \\ȉ `&+/'DՆs"٥ߛ*E~-h\v vFIɑM8+il ǡ,ݔ(%`G'tOG=uWgKH+nsq #b ݊Azg!1S7To Jܢ!'5ZZ@f'=~{$:{ۄ0ۍZ HXe.YKa/'RUH"?d}hQ>r6|b,f߶X7BЄ'Da U($!⸒,!)S? Ep@ 6mV,2$ x% Dx?xk$fA*$s6F*C#%*f!„L낾Bȵq!4s}9ZJU)}Dj) y$-\Hf()H'IĈ+e,e9KZҖ*E"e?^%A6.,49,# \ (4N\Jf)'I#R Il̹""TSC#I%΂#+EȂq7#E(\2#G,6D\*wZp BF-R[Ԧ7iNuZKS/Z$16Knbcъ@-"HԜt=Z@NZ]BȋL%Hr F"@Nf/:BC*+C̨u$uц5"$F!Vc΂|"RՈDSU2 NE;ZҖִV-Fk+5czdQ3 2Ltu [ P+>: 1%mE6N#u J!E+ىšy.A[;*Z]wKQT@ӑj&T{K uC@Q6p% ZpInE89um#!}aW"'.H{2[! Ad}CYqS ҆sMFS-GnH)A:$*\sLgZĩB;erYr%IEx<z$ǙkB8W&؎ pg>yikb܊=Z'kށ8%REr֘ ]ED@Ne~--R/F!K ϏTBnB&2C<[z4CyuF>< .@O(UFc%o(VP,Z9!rw!5nQ5mb;!ֈYDҹɮE__% F ( xB}Hk )52B.m @eY&ɩZX+FERta/)hvR虻"JȤyw_{Z.Ef ςەZη4#1+$u!]BޔPم ! "YruQswB,]Qq_!酴k6hC^/Y$]`Jpi[!PmqG~{[!=֒IGWiBZw] q(G[/t7t} }8Ben-d"f1*?8c{S*8 (LӪH s6JS@@P pr s% 4@h6S3"|JDڤ𾑐 Kl ҃; kA( Rµ…Ȼ(=bˉ{#,4[6@*RR"l;sųf70| %„<92KL\D#:dkD Y>7j;1*øp<s CD'E94N K@-/C Q>Cc8+8?TTÔlLpEX3td4PSjS#P21rȀ ۋ]D gi7cF6XGˈČȷk|6|ǼGF[ne>B"k+cBZ'pH8pD A+`„BPIQIɬA*U)p%H{gȲ4˳D@HȸIʖ\ۊ3Y$) Y8Æ[GMOT w0H ?(j{7y3\K=wjK$@D 4ČB:l 8JeJټ͡xFwLJ4DN5޳ ,̈́ҭȄČCT#l;Ÿ@zd# |B@{ݠ($q h$T9㑡hdL,\LԵ 4H̵(6L-Ώ\[8LUId{D/ P?`MP, c6LxVɸ,+dm!$-̢TOhM4 $UQZ 'u T ]{OM0ɈYЈ[Hm֘EU\Yb¶m՛zM/o8hS+Ǹh6PV[2E@ XtZY 0M Z =S$˝X3e\L"O0_]EsȸUͤ[:4-uYȥ8P=#7mBU^ =Y@YMWʋM .[:`%5Ve 3eԅխ*_SZ'`~P_A% Ù+Gt\@ݴe{CH X<\J=L`z5%c t>^ƒuIaBϒAI2ŠY[ S\*}d C# GHQZDUD @Xf,%`r¤X$L]YG 3AG؄^ Y`-CzbGMQ 7-TcX.7d\m(Sc! A `eZtVuf$fɿi#C\FQgn^Z( سM$]5|^i]6g戨F==&qd!=TCbՈiVf"egbưMD@OFxy˂&۶rfFꤾ`λBDW&g`4fH7ҭ<ڴ4j>Bшgd=v)ciL3 g^N "fШX%jp1KTЧgjSO$*4jl ,߲-r;l)Nϑn.0ZoE7%g)jKX(SlЀ'.We ֹi⸛7mU&.kPmfV" ( %gxRo%Zz C+%tb|A}Ya^>ZvSSVAYdR'@_:+4~BZV_1x?tXӲ}]Rn*/.V UCPSX+ or.rvQ.{5+qbH XhIUvϮf(:+518G\4A͑HJC7ScvfU 2+wH5 #u+hOH83'R0)pm b9ԐQ=wtgvJ QVY*RߡC6:`׮R2 rc+`8_ 2A$$ Nn[Xޞ t%pJ#C!x| "(cM$uD&Yв?@],f;hmv\wc2J xmY+yk,+(`p"`^()0(LM$@w[g v+DzbpgW @X' sw 7(+P<>t[mOl$$U%2`iӠ:w'РB-j(ҤJ2m)ԨRRj*֬ZrBmp ?O<[@ΝVĺ̝ l"|+ESՁܙ/HSc %] Q J4[R(7)x0ٙV4sq%[Y>EPrM '8;Ǔ/o<׳ou~:vS+m hPb-a5yOاYaAkYDQ]t}F_@Yn0DRO{D@F;=VTΔY7&׋avqǂ#]=?9ѤbLa9&ey&i&zp)PmI 6~g`POX>vM |u @BMX:sDYG ePEY~5KX[ 4% gn bORj>91*I4H,%-b͒I%pPtZݱ9.{.骻.bY_y[R pK! [QE ɞU+pG !Q:"5Hf#PPB!C41P C}R&!wѧ'JCetyiN[>[,@m ,OJL@ V(r W ` :El@r +ŇjD@p`@D1O d HQ' @֛@֛:@[KDmB l |#kfS,Xb9Vn$#&&a?a,!$8JB3(^<&4@P'p): u&Lf % pC+N, @@"`?'>}*Цd]-9dpH%1@R(`NyX(HC*ґ&=)JSҕI $ z6)Nsӝ>)Pʞ'#&*ԥ2N}*T*թRqBQGrY`#5*X*ֱf=+Zz&%# *6v+^׽(U`B8j~=,b2},S6aAX' d3r,hKtzT:DI ղ}-lc+[D2X]*B򶷾-p+\J3\r2}.t+]vS3G*;r.x %1'@iC%}/|%ߥ/\WCW EVݎG~0#, tNJ :0C,M^CC*(Rc,Ӹ6$ ";q!IRrF>2vN Vg$V2[~dCUGf>3ӬbiufU$Nk3=Q,0L!3E3nY%gג'L&yMsӞS-r#JOծ~5Ay>j$YOpX׾  "J e3ξF֔$WD4ms!r_2Vl~06ӭus7V'7͎!UHr >8uOQ}SO[fGQ2񑓼&? lR:)^O.Ӽ{vt"-e2Q̓.Mܑo*E:ԣ."Obs^z^^isMV;Ӯ'ItӽvD|^ !;/x!V۫3_r܄$~<3y}!pGѓY>}AO$=sħ@u/˟HR!eo,ֿ>,7>\>??}8?W咴??6? Z &T؝> F KW:u^ f IqJC ji &Hp Ơ ֠   !R(>!Ҡ4DE^{m8@ٓrMU!!v8 a^Aa!WD za Ɩґ>bݼN( 2 >"$>V $@%E'~kU_a>bbL"+f ,MA+".^L^./f^/#1N 2&2. &@Dc*A,HR8%(u(9̝S2c2 @@]1<UY+ t,C @%O E=VI<>$DTB>D# x/GABD:DH JJT|@FL$JdC4RNI4XBGSdA$Q!IbUtM6SQDpTF&LGd"RD@P eS%[,=\%\ߪY\FC$5%WM!E[e\T[E*d Hd\[^&fӔq , & VAcB@WnPZf.&K(%ScfnMlD\īj~eEo: 4s6ś]Vd.*"a~ p@@((P*aEC6*RQėjeq zOCfUk*+Oh8,00HeJĠbŝK^jA&}3rII04dڈfhh -ۺ ٦:%* Cm#ޭ$նK~I  pb DnT.\v6@LS.ް.n.֮...//&./6>/FN/V^.a^/aꑽI`no͕!{@k`! @0 C0eN@4pB70$`)D@;0'Op+ 0 0*\+A RA APp -0)"#6NP@GBpAC@`)$1'g*o1wSUXB x )@[P1D19qINd(D$_$q E'D[yd71U܁#Q@PHr#SrPl1(/*E p($dE"@@$rrBr2;.CrT 2'tq O20EA|r(7"P`@[BAVB#PHsSsBXscs.r#S s0w1::2D:3>.0($qG??'D@g@%4C?4t3T\9kq;%s1&E_tFGAh>t#PrgBAz4tBt4AT|4pqH0sq1Oo1P P0`54TkuL@BA'N |5 lABA |Pl7[5WU0V'Vgp\4U$u ,S ;sq<_`oPDoTGv\gp($1#Dp+CN@hg\e'DfgfGPsqTO%$bcPlPvn`Eud')O@B$B?g' 6D6vC@jsrtOw{@mkqP4q3PO|z+n@cs@rɩOs+"$KDgw7Lp7v7Ox'DgGDsU\ ذDw~+Da?rPpwqEy8O@B 5((*vQ0 iפׄ'uԾgN(D'/֡+WlJ$Zjsw?|yѧW}[ J$oNr.709 JSP--Ͻ 9A QI,QLO(["kS`pT.7PB| #|!!v1"2+R-/ SJ@ DRs̈́f5=b 'J$@n=z &L2P, MQ";sI)K1TM9$@HMH!,!-$$;j =:%b#D| ؂X"ZkVmoSjZԠFE`>@IÔNJNȒ:2 Dx܃NXn7::Q*3Ql4I.QNYoxrM cʞyB@jt埁Z衉.hQ65xɈ@=Z뭹Z+@l͕2y2a%VBA,b[ް[n'+N\o; *R*{B˕o1A]I/VIHLoa]iq]y߁^/O^o硏^驯^_/O_o__@l,TG$́1%\t@A%4aK0.  Bΐ5HϠ`6Bq #CGdkaɈHT@' F 0P3P)`aBq@q 4dV!5&MA@8dWj$)H"e'?i(!08)QA YR|*t£ڰKR D-mP41)0HQ@Z6WjP9h eDye&4g:fʅH(j"i)bgiO|3 OuN3N> %YT0OE JCPDԛ'y0ē?%50H@DH4(KC yla i H \( ,[HRP@ b& o.dC |/&< T=RaԫB I@dnw`ϐ֠@{O_ րs:! /pGi#C"">>    B X*L m*$q  OR & l)L 5 I4QL $N3S!+!7?`,$MR .)Z` Ҡ6P(*L5T:!`Bd! 5$X6NkLD ,!ᄅ` 3 "F5F t!BVtHԃʄ'\@//sn"t\b4n$BnN",Eq!0!5y (:`")$4$bKAH4N (xEs4$® bC=P!!2P.qJD LCs"<<ؓ6"QSAUt'NIgM裩 UMb^4ބ!3(%l'$ >' 4z`-eN:>kQfBuZ~\FTH# l b6 HISSÒUhkrTUؕ!N %m'$xX?)X5=#B:6؋!2A !E/uZZ-bY)1" 3p]Jpd] B]!`+G`R4>r!H;$ny! I!j\=9'¹b+9: Bav9™e$Ι!~Ӊ! 1Q( D9bm""L %: ,ڢ!ٗ;Bg!j{u6O#TOz7!_6!;jn3ʧ75ji"0{$zrz!ܔ I:}t'\"X' ycZ! Jn*v ⧂j ĊDZ@&* B"1$J z\'ڱb,5s& j) ;[!@ V $`/V#{[!j' 8gw'w"g7)YJR9]\+!`K4BaH P{&ߘK(k]\'z]"tM2F0@ "by  %@ ` vW3t<"|xF:x7T˿Re5bH 8?H@B]LĄdcO|Ćy0OF{g>j|!!5?T | +I :"@yF!˽b 2!.bϼxyӱ.J#ʦLf!DT %e%KN| ԛ4|*>,Y!0˚٬W!*r˷[! !Abo(|!F+6+" \U z^m.(1MHR8X6JHèXgƝ&}*-Kv)<= 4: |!* `b](=BoEdWw!>؋+f!BץS=#=!`@ ڃ;9wڪ.|M. *]b)ޘSٻV}qmw+gAtSf!h_^ja ! B\ ᒪ󍌾۞ٱ"v@DD>jo5'@ D_ )Bp74*$Z]]μ)蒖b2CJ Ȩ?)X]20$n\}7C寐!e"H8!Rb?0ɬ <0… :|1ĉ+Z< cF;z2ȑ$K<2ʅ4hPJ.jLsMBRTQ%vR(b'-vİs;/ L¨\?&eVf 0+TmZ=uքi"+ 7)x  >8Ō;Neg|@UOЊeQ5Г@l0@"/ezLuB%,RċKT̛;#k ;.lE*|5{$a鬦6F%X& jY[vNh1B4AeP];v;R!Y&~~b"Hb Ed }`X&FnIAeV<h=DKuK:$Eo$RzVZCMe^~I܆I1YgwEdygT, )NI~DS L `Z;6 fu(]v5YIp5ȍe! kΪP.-*dZCIBK*+` @TFG^4lFI.%$~!/=Kʁnꖨ KO$aM'rB'SN UYo{NR(RAN ùA!C!lS dH.. s2̗ነ CC|XF&C,CCf4EpmAH4@Q4.9PF炍vj /@oVd'6z;B{{ͱ̊҅R4BVJ8 ~#n&Ukz袿j3844#MmClCK4CODSW],@D qף,Fd7?vT/sTj!|?N|+%p{s 1y&l 5m'#H lny R7bq,4VD(qL\uY'S@ \T ?!HC L7*8 q`R&M4]BCT1dm%*rI$ a (@ A0 P6+MjX4YABz8>i`Cw(!aWLH1W^$c(ܐ5>%iD hG CQ#cB~$DHaseN6AҺo B 4hlİ%q'"WM !O| Ndg!2Ӄ,#Ḧ́@}'JSw^IH%O2-nLYX-,Xi#>>lX JĈlJ47 HP`'PjYDq"U/CJ&)/|ݝ| %wd77jy;0 $ӈ:#rwS)A  Dl#Z¤ t Q=Rb"95qm] j-zߢ$]Jx" CD+$.BܑRxR{D_[ `Feպ +[ dYJe% ^q<29kX`kxD#ÚD$mvN%h3yҢSh'<R,,iRL("qAjG~dy4O5NIS5#NQy$yzkH@P7{DJHr4 w 0i7@y!T`mROVGjψ7c3UA aO`3wh^qֈu.!%vBXuFV+b%'ޚR lMK܊hMvGi6!'`zp$1 M Q_\ L=jla-4di=KqF0_vcYgv/*cQG}}Qy~v^kaC;W@XdI|gyuI8 HvWs AJ g}?8V@G7bPepW]sDv{50|!/̱^^|wfV/X/G'& x@ .@*R v A5P`N+qHbT/=cx(58v9uv6a3Bn< '#&I Apq+40"Xh(- tԘxh' o"{DcGqoN'pCKUD'e \{lWLi,'jHpY_Z P4Z^ Vڤ#ԤVA at-aG،dȋ1NG$ 8iSXT.a#2 Lϒcxp~ &x"#Ad),e7X])\b.)ɘ!] nl *kəynk` 1 i#1a 4+Q qqib^yv&9ߧr vMFB'RyH@9XIZ9_Y%H PZ{xI F2}/ēmRH[3L1;fH0tY|A~i.14jJ R𖠧f9w1ǂQIt(7? `EjGJRpa Ĥ{R0HCڠ 1 A5k9 #T$avwU ikV k9Lh詞aua Pʃ*Xuå kw3اdI)H+!cZdfbRoyT1B,Z 2mK励vj1GפY:W2٤ te||M =ዜ;)bu$k֝wzuGE7 z7!T.aVjwc i*3p: 2oQ::u 1z*ƚcrJ8g9:19 q^ n;K1N@R ŴM˴5R;z J Wڈ*} [Z Jaq^DIJe+;zZ|-]czu 2eio: ;' `I/aȲ y:չ3Z[ VH{Ro땸Pz{1F n~~(Zŭ.;sXj{3 1Șp Qѫ R`CNaGIKQ|Tyxt\@HJ<<:K-;B}:V:\R{)f<(Zm)a=)&KȽ" ѱy/!ZL]ۻ۽6p`=Vdh6` ۺ\YHGz>Z| V`ݻGZ y ,Jbm/FK*LEǪ]AxZI!M1Qd A-$h ;M:NJ;bGm<nĸlK a@nI?75\\;{n׎ndE!nDjm rC; .ɒn~%Rv˘8J ѱ HQNf y-֘!߀쵾-OLI볐794ގ-GB*U{WK^N>m  [AH,S]"}q6X] q^9Pˣ1èﮜȥ.s)oٙ쀿mn; fMFR-eENJ/T΀dSuhAwovl {̹YcePοa2o/sXhhIofSs論MF*WFDGx ф`ױ_S z$X,+.4tP` ?9$"\lHcUytpG/ZHpJ1#lI1 8#j:c X⠋ZpCUԼ僋R YVeR.[qΥ[]y_&\aĉ/fcǪyJէM2dС H.dAUe"qm2X$ WV.m/~Pو_22%g4;v Ue|o3Тt] :] VȫHO& 2#pB +B 3pC;CC"Ux66>b$0"bצ3H$E/" OT ".`(,o,H%<ț˺3Lhr&kȹxMM؋hIZH[($hKCt jb 2t=KKrrDV[uUXcuVZkV\su)08l) F+'0>JȵT!2""lr's! zB%BWՁ r$2 H2хPtQ"s/ yuDRe+ʈ*DžXT`"#" u7.UecL "PfeygEY@b6hCP³AnE" (A\Ld8-h=2%$$Z[xˎ ʭݏzO<.U({ j]JWloK%@JAtJ!kq=zvaVbνk}w={~x AY}B''pXuli"/U:  .2?{du_ C8v#^ ]H,r!@t3!p$C$"^JD+Ef `'P>#IA _N|K!{.r N25"G -8-adr9d6Ȕؽ0f\0|/`KD$sivBm#"LeEde+rH7#,@-kYB?Ԓ.}˃| D  hЀ &iPFo+/cgp/bQc2Nl`?O_|S!6"ba` ! P = &VF.!O'ԕ hk*L u(AFCLa Y! ]L[RziLg*sT:5ijT:U\9SiW'Eyz+P` 6! 2&fN'hƒ-iG>A|*S'EȊ {u 7[1TB II6T!< |E iDU:rA.^%,9 ( Jp!HZDDA]H1Zbȹ@k `o{<6sQ8@x0w# ؖ 98Ds"DWM en˝Ryv^S7E8|q.uAQ\$|YG>er7ܘhwjalxxݻ=͐mz>/y5r0LCz'VtY_=DnQ,-? W 2{n!x5VYinh3n(@tikjsì~1v 24 fs X0ȏ@'1" ?H  ټ-ѷ@P0S>| >![€Pj֋׳%!%"# *$P,B#>,-|44@6LVb9/p+ 6ߊ3:0ŲrSR _Y+/ʂ8Lƃ28TQG@ `ʮpK4(ӻFh 04! . x\*³Y˾4/LФKKK̖ Y`삃pK[KˠMȄ2211΃,yGGk NL ,[2x@,NtpLN1(O‹bLK`M 9̋FH0IL M`EɅ@X6^Y'MYb; bIJÙc) L$iӱ41S9dƯ +$ 6e[P"|sc&[x͋YlP" uS"-MЛ2hO8‼ 7.F0q$sZI=V%4؂6M;S=FYDP82p/UڀǩNGU4L(T=/ TDXuҘ8֔2C}-kOQx%@ 3Ҷ%XzJѪl,RSL(p:pW8x JOkyá%RX6?(H;6ģJP(xuMsySl`V<*DG*EmG` Z:ZHTUTqJځJԃGkTܬ@+ Ub-YmZ5e/\mNl ^XUUcEVDSց` ۽?)Zu%=<۠ӂجY YXWW<>K}6i)X;XkK؁ J?X˘H3‿$QD]8JźS|2ţ:_h@E.ˌ tDԩ}_eT__E%[_M=%8e_U\Z\8x$\]Vx\v/u X _L ҕ dQYux +aޘݏޚc[cc aB`\N-\et\Q(aȒc]A` 5Ax 4U ;PqCcdHfXh2ݜ;=t ŊϭP]ݲa⦼|3!Gb2Ӛ0yJe1`)TʂBީμ骀FS%\Z"DH 3-8-p n- *h0hx&ՠzD芾茾/PRӆ~hhX\Vn1(e`M^UV`ITx/ 2vRηi\ J`}/1x ;h(h֙MQ+'(4PPU- C`] hq*v "(Pr&$mlFm.Um.fSmi60v,D$pm{cf\~Ax:%t7.V %ɖP$KƦn0.Op_inNG1 p܄:h*8p\︜.&9.0.Lfkfp EV{Zր(Gx/ 7qZ$p9'hnC"0{>+m'@h%PpH7Do +hb0Wcrf4&A$$f 3]P'G1W5w^)%"9 qC&8wq,4xBO6%pF7Ht8pO3P*Q.& 0,p/ 'Հ [j] qzepU܁`CvjvevmD_ qd[j]4[[ttw Z2wR*q'z{K*5`X/e1u]Sj VerO8veJq0D/m?yO2oWyq͂XY(V"pwxyro R7wx[wtw᳅p/ukykxZ/ y{2{*q,GU./8u%owכ8̼yWz|gzس;z[zz^ //w//??3ϑ{/~q __Dww?'op7e_}}}}PXt%p "Lp!ÆB(q"Ŋ/b̨q#ǎ > R&OLr%˖._Œ)baNQ[ي  ABSJ4gAA.TBTT ZU:aI4޾e \  ҅`޷wb!Ou /t[WnA!ׅP2e˘mX" HM0RXaKhT։5OR4TTU]VAmPs&PpDRDRkX DzAbP|&|Az<Y]5T\UHXcYg9ogh T^q(@i]bPT'ng+"B/8ˌѩq]IdQA=`z4Y &IzuEWYJQY⚫H|yM霡z R_ԊJ%Ԋ, M"`(#JA`Ai!<ćロ"dAFFApPW "X\A29pmGiem*3޸C.'@cyDˍ>ZдJa B:W(A nѺ7 ;p 릴k|Rmicx< -c$AիѭAd7 ]p_oP >66߿9*lr!0 SkDDIFLuѝxg wࠣx'R>bxZy O0B`#r褄ЇH|L($BbEx."/h+bÃb4}5Dx` §I  a4onv@!y"B nH X$f KHqDH<ߩS!8zd]f1Ox qxU#}s@9mJDc(]j׻bD1@l׿n$[i\E4 P)Ǥ ġ"!mR! 49^+$#gb1x62l##YeaH ”HA  OEk^ ߉WCyX^'6zcNkc1(<̔ㄴ@,0\,X> &)†HϢ A|lALK(6_ Y/ϤON@LP^jH K1`$H`nDB5 ۋDB(#$K0A)`އIe`AB# $ pABF~Hr,x`Pj\`J!+InAVʢ(A @#əA!lLv,O@"ؒضݙ-2>*t9NZDl ,۶$IfEP mvN.!(A #΂  pE&~mBNڦ J&ߊĮ"V6k-[vLAD"vOt..OD`..ZʹXgHA%[r(K.E&(񦛀.G4NnA}@o&A³̝AA3/vFKLh/Z^aKDpND ˘:  JlRZK΂N!;&\Bȥ,Feg$DO0ynfK 0[,pL8D@0SiEG|<nkJʌ@|#$aK0,OelA cpL0 ZSL qjFqELrC$1C iGiU1.mg.q Ah2pK0" xFM0K((n C$@ 8n$@1oA <*D"HIBOP$+S1E|pV!n5bL))3@47)2LL+Ko >3?@')!4)@A,[C3٭,G$·Yp QDz*ED2Y(?LtGo[sD%*&GAC$H4*xA ?FteDIG# YFiB$ LmvA#ȓ)"(.uf "DbIuDW'1rQ2A$A,M3A5e(sA^BBCf[_@a{báIDt#I#A=(nwbpjPkD%X#<DŽQsk(eA*k6~v;Cl\kP>c~ZėW{~?v>D~Bq@GHntCBp6+׽ZI?v~اg{#ı ?=\=vp~@;, 4xaB 6tbD)VxcF9vdH#I4yeJ+Yt&3i>9gN;q: O:U-zGň'IZvU BQ<-tn\sֵ{o^{p` 6R@T"n(uɖ恕NjU!VZZAk؃girs 6!de׶}wnݻyxpÉ7~jVƎ[ Yer^UtvNF5͐WD 9ڶٷw~|׷~ :0KH8C -„H黭" У 6T\]4N "P_ǔfT`$ y)X=&MT2 ʃ'\ ԠO睘⊻6FX94DL ]t%k?(dIt*ɡ^xa@E!x䣫\wߕ'F v#J鿅 HO4^t@B eiE tt,/#!%pרu5-P%7[6V@4[M? Z`.NSނ肾StHPZɁ_a:ޔ=kʪNwa[B$o&+WA ^0IҽtU` _da!C,ȋBe$ T}o8,P!A!` 1i&vt YLFS (Lo7@ MgW F#i(WjXɪmi!$h† N!`A, `_(AZ i_ Wȕvū^ª%LAAX ]A,ٿ rڛEJpGZ6!_0g {7ume/ۆ@ B1 Qk*tyd" B(tqL?IJIJ,s a(S`Qz1ڝ+LH-h+4& VZ5,]!ƈ@š@` tv 5A0tq (hY"aDt um "&q`kQ\Bd[T)%DȤ!*&@SB΄2t6Tjs?0-#@ѷG ,32 \Q(K!FWoSmd:kuG Re @$ =.vyH>HICcg}0Wjk)uNm^n ú]݂̎ 鍒%J w0b;m c򹩫3B4HWV[QA8 ҽ6)ӉbD}C-A 1ld NW spȆ r7W AZ.X[!҂@[6HIlu,R&o sesE&94(d3y>[;l/P} Ξ ~QA@Xw?EBl. }ĕ, #`dٶ>֡@k/]J ^8i^]^ ory# 8BNBdh9sU9;Щ(Cƈ<)DbNĠ.].Zf]Х> ]$;GF! l.]"q ` np \oB{p h,&`H }pե (H&P|ME܆&f( ):b - T+NOmZⓄ';OѤ*N+o#"SD6p D o  @qJeθL "]Z !LHZo  `  o0nh*a . œ:@C/? NMԱ!tȆ*q!  B -O өQ!20HI#D,!` B֠g$."" ? O VBeb# "^! S n Zop 7r ,l!6B`t x @F`+`,AbQ ތ*R.{!d-3Mf B{ v˒.sR0 %1B'i2 2%3q b۠0Ɛh !(A!&3r.k6o7s0҉H$ jV Ra/[ɔN 88o$? <f & "&!`&o'3's'[< ([&3 26^r.5shf`bq&hS7TAA#@"T ?b:celh]8r.2T Ȏ>{ R4E e]l$""be@0Ӆh%b1"U>opNEV vVdkkgAk! 3205fffkfի~VnnTi& $H]fN 7pBeoo!ogp%UT'8o@!Z!2V^G]K^vsdAq, T>Eu]W$PamG`6`'nww{w]d @E_ rt^5, _qŎ7yY]"vnB{6l{{Ɨ{N lIvmV#7A,~-!~ Nfow":n&w ؀J# K` 7,!VÔ @ j+LL(b4,F}N9WeWK!`7e~1X"Iw lv0!\؈X/F NW w≅.w>/"$!RXeUl{cxEsWV(n"xuZٶ 8tt؏Y%GHbbML=P!Y9B8jqEdURXoe BALm$J_8 .YgkĄ="qK7.!vzD#":]h"HA>Q8Cw};eo>o  ઔ"BW_@QY9] 6abٖMx$5BR`!;Hq@!yvz/xO`"8"е|ЅRh !#>:$oy_1_@gobYgwwPe$Zܠ ؀RByڧ$_du$tZ:Y=:HZab#i&٩Z 0ClEܠ꺮Y pCB\`7 u !*zHsEo0]9BJz7Ѱ3[7U Bd[Tı%A"Z7 @,9k۶o["#!#.p۸7Ns?Q,NU$@tDJ[%&7?t"[כ۽[盾۾[ۿ\ \#\'+/3\7;?C\GshD@YFzGJ\gWi{`o<@1Jȏɓ6&JPɣ\ʧ!&(k⺩˻LD& w&N(*|eJZ]=uH bў2*+/P!? .C].Dg'_].?af}Di}Y ^`-X.R}ة]EX G>!YBL٫=}ME -I}HE'2G!2݅DYR 2G@,Wp0-@ )B ;" c-E9^>&# -;>c]S=%'.*(T "ߣ bڬZ>8ouɯ+߼Q-8w% C:I $^>~ ȯCMK0$ "_8i}6_# -ߤ4e+K%x _+j>#Lh~ bu$! b~#~a|q+0[o⢊!|I']_ŵ="wi H*TCJHŋ3jȱǏ CIɓ <pTI͛8sɳϟ@ Jѣ3DTU $Y D+O thd>YM'TU@ٻx˷/P-*}hÈ+^̸ǐ#K>%BU!aЀ©+N`]]"'<u? w\VM-X"KNسsT]@A?=~h{h8<'4pE"T'hҩlZ$CEz'{G|է(0Y"lć4Ҩ8ƩbVX!!Uua7rAوiX"$JE.UVlDCSfihD (kdw-ɣPCib T'Ta&Tah褔Vjiz8'Ii_GXqt\H⼊/WexUXݑ5-:$  >1z&@+BB++$%@JtCXZ? 9 cDk[ PNXp]G][0rF'u +.)E4SHM#dF N a6a%iPQJ$WCa᪗v $@MV6 (9BKfE,SNyͅ %%ALiIdt`E"χ a!HbK NAҁq$U2 ^ EGэrV`#6)`W2^diKgQ҇ `hp,u H"5B6&_"uGDM_a 0 鍟W*h N  4)kz&H(B0$ !Hx+8~p'TٹFO`w8 rVpΙ7f=ȅfLMĻ 'qkK8X0.4F`!D:o?ibXFk@>FmR{ӂR2'+mBtM2UϗSxհom"$:E";ҖKFH w3&gx:#49A(]ybaΧH>y Bp ABWJ\^7tG{ ؀Y, p{bwf{R`@|N V(v AiQW-b>~w)ܔ'x|Gx>dxAW7 w}%N4Ys5cF%@dF'wtE8dXf?sigoxvfY$HR) sA$mwW0X}wa85xq. w/DPXOW4E=-7zPpRuh3[eƂHZg*s 4 Gqݡ6 20$yW)8 dpLF(ps"#M7Ia!?g:]hrHf׈WY)8Kqz}H1$j'Xj7ah9"0Nhv_eor0` nV{&*g48~A}߈+1&֘ IA4X 1AkTtg`WŊMpX6~ '9 7~ SI)Xhju4Oc<6v 6,` Pz)y+ق+aA8}xk+>٨jXF9õ7T!(AT:(} y +a)(d,wIl¹>"c5ono͙vv 9147ߗZQ3٘"HiqXx9o u0T$ť ~Rysp=EkԕP8ڡMqP]灢qvy^u0yiYybV@ P6j p$9I(qMX)ɟ 9E7zWJƚlA ;$kRl2ej_)ew!J9vzx VP mUͩo^vhs Ѣ7贤] yJãdEDRDCPz uDy KT1q: } @v`lzڬw?A$2!-^p'2|ؒ p5k\ 4? ƞUvJMh*jԎ ɥ7_ 69= 9JAgYSf#fH^bUu"p O| =LS`{BzJCjJ 8=#1ᥪ2TƕZUڏt>\YAYHX zM[>|hjˋ)jb0VY= t/;T5I9} N!:jI˘NKɅqOH3Kl z T6YqXk;MR@>r*nۻ >0ѻ ' |sbU5|HZ=UH;$0J+tt˝ Ƀ ۸z񫥤'8 A?u!hþ Xf])I O0 L4ke Wݣ^fHGMCtH $#_p^^?|$AR&!m :yk ]+j4QZI;sO?H3U t3˺, !!Ii3?2yA \]` 2(62rRg)׺ @q 2?L#AmF"IL0R}kPl;*Kz|V^<[: Hl$gi93r/|0@2LF }%1ˆ+A7ٳl[PAb*!|'}CDzsM#D,@`PD JEa ,z1E}J{Ԅ8pg=}8P0/04 n 3`t =9cF"D`# X 7#0S0?4&FA\ϔ$Aѳ@j}˝jźDPA4ҝYҙ,-N),R374wk0=MeOH0AVV iP] k07 OV{!m a 52o>-Su \J} `EX4 @D vg򵀘N]{Yc;Mڈk:<=!?줴=JHFv|Z/K>.m+,[" $eyNUeY`@==]qݝ7a ݽQ|Ly!Suza.4Ga:!@: O_ 9OP& 1z`F;Q(8<=T,_n+T*|)-^N!Ajm쳥nA+9D).?P`@ilN! @ 9AVm1\qV{ 3400@=pp} zě_o fC3 P>RNp 9QPRIIO@Ě{LŸ;^͹q@SA}H&KOG/mC~$LE~b3 lz!LA 6 DPB .@"/Q#F=~FuұGH-VͩYĄD@n KEETRM>5'> p@'6R )E R" A<@ BCv6#ؤx x$xxAC)dpMPAOЊADW @D~ iiP ,ĊG#N<7O'p8(hݽ^x)a2\9OԔ-!|Ϡڣ/ H=.R :2С96D!606#!;6"鸉0EWdE 0 Re? b PAdN khD[Pt([sHK2;JKsH1{,2&sDN"03+FiGN( Kȶ>A)mn"bP&ΡdH3):^(M"'(2o5W]wU<@8 `YgeُX $VO!R]A> uXmOZ]58uÌtXPYŒBCI zeaX!b'BrQCP`kH24e|vυT"A Wb RpIk*RHSD!U’! u. QnHL^HuY L5u+!! }W%|^jĠ{34cW6dE4a7}C:ʿ?|CR)pC2h,+Hk( dWh$?Y;A8G!EL<{<"4!Fs&S)j=Q!H*LO[sM,m"[JؼF !7Bfاf Bu2)p$|HxRXrSH$uы_x@=$8H" dt) :KBbwG f qWcE0Wx2b@#R4IL&AX xaDe*UBGE+?>M",p@)mPKjA6AV2! D(:0qB .9`Y|PaTPYHiK<əԈH5&d7l@<9yR1!U  Io Dp~-!A7'AdHvFY,(1pŤp rY Y DWRT x\?ё!۳QSLISTW0m%``<s$1BIX2#U 4d-]VUEZ4 B9<@ HXbF+()IB 命u17x=|NJl'Bzi^n*`!=vPp5-%]Zk%Hh%SvV׼  $(76BԞ ` ,X|RpIt~4{^=UzȪVZ}WUUW؈ <Ҽy:oUbH֎ߥX MCD&!mq_U3!uOn6xkvLx)apXll9>ȼd`#V?Ǔw3HJC~ГCB .4I1_ԗ!B%-*$\aCB QX!`\ :ԑPȠ }hL"!X4J?Ǭ%Vj0LJ4_\az AٕH[Wm{v"EBUCl4vځIb\hQyU *9oQ( B̐?`$yP`:100aV7k(+/De-E>uy8 ĔNl B6 @Lq$:${Px> ] NP,8Y]3l 2+ fA>g~)įlχxUG}wP*(oS(x zt!>0Q9 JwxA?nʥ"S`剢*D) ApRwns Y@ION"-k !c>}?D㾳<'=Hd |l $p[:k-?򿹣A A=Gk.05PX\tS{Ј80JB : 5dC$p '(` ) BX>tAо9?0'X >HD8CPG\%C .j% Ft+nb߃H#  cc`sDžF_I" aTAr,- vFe f.)ބ>$x:ļ,-.1ccl+c/F4V5fcx%c%by8c8c9n?@A&B6CFDVEfFvGHIJKLMNOPQ&R6SFTVUfVvWXYZ[\]^_`a&b6cFdVef浒VD]X~Einlm]%_o>an&r6g Gp BL=z{.‹T,J}g|&hT}VH4Ws*HWҢxV@.RBch敃i(%% h8#l,u QXȕVxu6֕>VI* IiiӉgɐjjFjVfkpVN- 8֦jj~Õ 6N9]yfvp FOkT ZjGp]쏠I=G4^VfmUh 85 m큠mm]yFV={t@ܞih^V% sb9` 04hLE؂%fsD` (/o-8,Yg~h wG̜ȝYE=Pڹ&*Y>RߖtRP*AM-*qq\aqrMr/ו.r$.Q8ZY 0$`e5GN !g6>"^M*?GEYH5osx\923\Id%Ws9ǯT{F=#>qQgFR l9>tKtN_s[tLuU[_c [zZEMk>О50UrA,0Q35/0MLeYp\1vbW0 uY3)@+DOWK*uHQ0pYxv XV 58XS 5jr̓hhn6SHEeBP4nR-pwDZ {vwwy9بHF pv)C7njV鄨r (Yt' oog +b6{AECbp8w|k0H*S^\@%ǴI[A{QP|@=.(k7sz=u|/:O#x,,o_G:`{mҕh!^frWB" * 4AĜAuW_Ji!z!!~wRxaz5BJJ`x!8#5@JgwP# Da'~}!KY$D EL2$PRD!r#J:%a9&dؔb'XSY 8Gf0X&u)S IA{QBn.uP" a|y睝z)*ԙ%r9*)!}!Q+$$ѐaIҀ(Pؐ_8D2)Q uѤRxQ4{.nXjRʔ;/>k 4J B\ JdC"ABB=6B!ABh,B-@ %"JRu/J21<3ڻѼ3v?!qBi(PB (ECDA`lQdB UQ4OT&P?tu}72oށ Ν*LӏjAL0An)QݓLqJT)>8뭻:{w~;}@%L8 K;jKFFF^BGi=:OE0ՀQ{*hb9~GNTV/(@1Ee !_R8EcU袏4@`!V89ӧ v &S͆PGONd ' ' EI u3<|h), Mi2O|Jn,8hT#'>.DtB Y 4e'QTi*+"FH+7%%V.TUs֠:f+JSԥҵ5|*SL* ĐXI0)S<=Q=$slQ F A0#g=`*! H~Z^Al#C P[XezE,:ٖ-*] s})FQNu Nj{REcӢ2%gңDJkڔp"O0GFyĆvIN;f`MWz-L[{DMfmR۔L#CCWxOիF?a\ qݜ@Rf 񏷛4$5%3Y+~ې*6hSb>E꽔0"`&rPbb #N\aS{"]Vכ:ፌXQE^h34zVdCAlǘqH%UV'c-kD%x!>"|uވCh5 qSPĢE ,LOHg%nl@Y8П?|Oe9 h VeQE?bE@Y,$ED]kD#J> es6J& 8WED < /~ s*UX H8z3jL`5:[Bt#]VK|d|"d׍('ؘ"_=.%ħKUl#'*@p2*1Zk=#Z.5#hOg^s 3t+M:4J<>s# Vy|Sn] =qab=ϳ;TN ҏ/Snwvc> Ɨ#t@3=#7"z{75FMPQDߡ}B^CWxi^6|QBٌFYQl``` J<ĠX ֠  BF[8 @]`eČ-@^IĘ}DuE@B@@5! v@IDRmD]^UDFI@x .t=#>0$N݄@TրQ%`=%΂*J]`C|ű2IwF<dĜEDתqp@[U@ajĜ #UER!VS"%^#6f6n#dyl&+ҢMdMF Y,>8y aJF4;6,LBiėݡfG5=:F@VIdKLcF`"7fFn$GvvEBPy@HʄfF>!,vEeݢ5^Ft"LKnRcLrD!F`)f㵢@c=ERFz$VfVn%WnE?FTRfLHI,᳅D|%uE\U3^}#S\!GOȣDBnD$#EBJR%4&VcWn&gvg~G%*$YVE4ĝc^ QDcp!*f]bfF@_RXmĉf~1nu\NFD4%E,[zDUN "h^'vfvR(=朙k&N%e^JIl=fQMDdJXolf:dF{iħ%cN8fF.5Y# L哃n'V^yI/dUD|@{D-(qp!gMچG_~ćzD0jG4(gGԚY'x^&&'S$@a(FN<$NX G`>\ @p5,4n$ ' ĜED0%K4)\"7DmB"@=^%jCyrRČ bx] $J@>FkJaC֗M F^<ʮ,˶dǾ,YZ*SfFHSYZR!Ki,d2E¢jJD}B,Ejp߉L@p,ZzlJDG+u>,۶۾-Vz @&]2꼂GmU .[by-6\լ,ح*.=Jvė5D,[tHr,쉭IgJ t^@ ^-ܾnKT(,얒 IA ">%G[I >L"=ĥ"jJnJ|ߎQbEG@zG<.Vhi/:"7W* E -o6a%s,[1eorG`:(!;1E͂O0,GbBvNħ lrCDqh~"^ +eꥄ3.33k&Cnc AQE~x5S-yT T@APExAB_\Dڤ[% U;ΐMD :@UtQ([ 3EaqNwFIo l\tJDKD-tC̘%F"{IȣDnvKa qp}t]DF@ 2 DAuɶALmW6@6UOWCWOX#XBGD@6pςpCV5߶v]BF,O_Wm*ϰFպbuIW~J gx \KW1^6QNױ}D yƧ $ZCB#ćExĉDqD$A\NwIĭPDĊDRx%{y#/G5~Յɥl\ɷ(c&79gGe;+1g&3!S5>_BP uF3 D, CŸD{ŠC@ DxCxHow5AAD,JG9Ir%9`xDa"zsD9f9iwl tzbm f/vČE)}w(1EI}NlPK1iG $D{X;@;BDWu$ :#A=+O,AػK&lS4jD=qvLF昶{zyFDF1Dgf0Q9Gھy뼼,2EwjDǶDq:E3 `@D@C$ 4? P78OD;x 5IACwG0`@ |ςHbA Ml'F@b,2(0Y$ D :ԸcG!JhŌQ\E(acJ4pJc48rVI'9:t馏OF:jUWfպkW_U(Gk EG+kt4`-+P5PVS+z,PUkrT7Mk@}[6Fp0h+Tu$` D?`-z\qGK鸻,jw"'F>zuױg׾{w/-T(ݸdԑMQDڨݛ= nj(#H/".8%R|zςEpD( J@O*K'R)Jhh˥:h蓵pj)D ̍k57z,)8K40 4T:*"NҴ܈H7ь(BMS*u#+ ԡQB൥h_ Va-6ǘ)."D\z#H*"}t~(H!AE"q-!6"6"uP]u7{p)Z`ogg`5ڋO%\Ѡ~/*rnoԨhgyX,6cYnaRHϾrK9)6L#dNhE @n-Bt7"ѸZr-4,[EC@փ6ͷ5u)W9B/4K楚C52Ufɘ!\)z*?q H@߈*%ۋ>N]$Zw}" x4 @} % 6Z%%s}/<`tHF,*cd}yo,ˀ0PµD\L?rt->@Y ڞ⧵#r+K0]1SV *@QB4CqL"Up)JBY}hCX(Ņ•ʂ? xh+%t|haa":Y4)@Ăe4)4<# Lb#.N'c4V;B ) )НB;ʎd)K5K^K#n "NjбJ,D)RK"C"I'[Hs\" 8Ǐ̬)h41i,GDpg!\2A 2 bTj",LU !8 h:ž)4"<$@ȕa*Hb4PHM!Dfd[$|s)1ivNQ/N,vM;/խvGܗQ D,/RJĬUfQ4\@ {#H(`9d\Aj[DDl{H 1lmಏVt4]@fK.18}(=":Yh cB] ܾ hU>L$FgFXh"} TҘ2,fTQQţEꏨ¢M<>tZt![ӳPHc5jc]Ė,FL%cl͡8ԬKH4 ˸޹5b!w}W땥c3eD7qT+O(tXC_ +*_Jk ) b7bpbp@ bV װ ~+0E8HJH *nN$x4b 0`" "Lgb @ ږ;" jx61g!G+//q1,G' }1qzQ,8Qonb'"Q*c%2pH] ^ "&"fw ¢@ Hѧ2 Ҙ 8?b5p0.a *ZbȍB ,M:rH r%YRXZ1&i&mW ]1!"! 4C " }!G"8+i26e+:7fsros7y,f \Z!3"$B *!0B(">*, B8Mx4J$W %d#E")]+h)z>n>_B??R\*:V3"$b!~0S* ! 4TCqL"(= Q{$@]BA50? ;@ \E@!Zl02 ; A#S:*Ea@TqX4J)"gt] m×$gBLC !EC#CİF`Km%F`I" Ba!I@n`=%A{H& 5d*tJ9ը.;WICTMuI",P4Ǒ#P2I:˴MZ) ` J`K3=)U]V!DA: J6P">VoU 9/BP|L9F_2+ЋbZTݕˆJIH^}B#u!0 dGH:Sa`79#Tz*X|]T GZF\Eɨ#?b85e! #Jeeevf#pĂGGw$SWh3D2agAgg;BFE0;sE0E3]e`>Zf6T:jjm6X5Y25:VmLOo'Z#`͔BHi4Dn%t\ȲcgtJZa ?B Q"$?dc V,6aT.nUr TuuB 0vQMhwwy:Pn"Z`\2#B6">5?$WBRV1 HHF#zNxCyO@;x]$L`{b JrI.!w@*&#ҷw X`6Ajl!8BB]t` A2? o @8x:"589: ee )H ` ~}%|)fXXJدO#Xvo8x ΤT<:l[<#xx8OM4,]: 8KmY$D-Œg yvj.:Q}0**9*> ٻ`;9UW Töhx%@ HhFY*TAy*9&+XCN>y&a5yX Y z799ՙ&xy鹞9y:z :z!:%z)-1:5z9=A:EzIMQ:UzY]a:ezimq:uzy:X w {zus@:{3Bq^zɺW _!E:+*,z麮z#Fx *; ;εJW )*!j^f/;g1[I;"ڮa;ex/ nhkoMJWAJtX#btR;_<j@[:`;s7fwɻlVl}C/MRZ eتscU/C^6,Cd#8?s% m+ aRdWr vEE.U]i}dA$ B )"˽`B]eF &C) c4r)moq r"& OdYEZ9R6{enEj.YBCrxD&E{C.1BqXDuWrt'bMvfvj'Df@L@>JQ CWZ_x.wd34BMWd ?%o@+1D89FȖ@lzꪯz뮿[SmZ-BAn dVw_ ^Іng:}m2}QPS.Se&G{=Fq>$*~~kiq(&{7{ȇ},  6~hABz(8!8ȉH jg.执HN}q[(zNfb5ȋ8Ň{׋Hh87|PIXt at(8x2XhhVx~8wvrk}huƍH|HPEmHYH%hIiɑ !)#I%i')+ɒ-/ 1)3I5i79;ɓ=? A)CIEiGpMbPHOiiGuPIU gGv i[ɕוa)pciYSq)25zNsyYNqzIIa4xYY 胉є@Zp~q}mW'8|)~P1+R)Rz) "Hq~ϙ18Љ9pr1pR``irɞӝIA1Yɟ9Q~O):n(  -q}J#AzdLg!zg))*X**Z3ɢ;*+ >:Iff!J*Y(Z8[_1ƥcZXdʦcYk0mJrmHmNNuꧪ^J9oFʨꨏ *Jjʩ꩟ *Jjʪꪯ *Jjʫ꫿ *JjNJɪʬ *Jj׊٪ʭ *Jj犮骮ʮ *Jjʯ +Kk ˰  +Kk˱ !+#K%k')+˲-/ 1+3K5k79;˳=? A+CKEkGIK˴MO Q+SKUkWY[˵]_ a+cKekgik˶mo q+sKukwy{˷} +Kk˸븏 +Kk˹빟 +KkD&cDK @ kP5|ǻkN 6{0jN'+ u\[Xo5ɽ yˆ7 Q pxz;E'+ lq l9 ̹@n La*$! ci¥ ]), H0E.l`Ô+1ysÎ+gXđ5h$MXQT0:)\ ( Iƍj24m|q ,t\J<(zLJ3 P ࿊,mN0əɛɝɟ ʡ,ʣLʥlʧʩʫʭʯ ˱,˳L˵l˷˹˻˽~!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###,,,333<<*f.i2l6B:F>G@JCOHPITMWPZS_Xd]f`jdnhmgqlvqys{u~y}؆y139;FGVWlmcduv_a?AVNgsb}ڎۑݘݕߝᤚÇ˗䬣泫黴ѣ•ŚǝȟʢΩ̦ЭӲնָػھ۷ڵc H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M{*,ͻ N|ȑg)μУKQرPνËOHƫ_Ͼ p|ϿZWyg& 2ŀrVhfPB耆 ($B(&0(c3x Q B!OD؃6BH3rrF@r 0iXڥE)Nseh \ "PeQpK"`2R@"sW65( Lzv)* !2@BsHjBjފij챢ʹȾhjB6kjN,UbIlzk:-ݸ*(ڨKvxpژ޿'̠! Kn HFor\)v ܓ6++[8c,̴bLo' Ep&DX4 @ҥM3vC3['FwjDO(`mYOcس nMd *hmb}^w5w:J~y hNmF$Ru?Gסdus樧.b[W p6J۪We:3"G%md>.c9^"TG:IDSm&w{g=s$ eIsڇ5Q )؀י,+ A- < "!B|D7 PBCh Y @l! Qp޲ @{cq,P YUJD@z5a7*P"K\H$q#x P,!HI!H8QB!" ѐ@!6&< HP#2%ir߀1|+$y4.@,%W2LN rJ1 gDFH)=aX TaRPeEf{ yς F!l,5/4!JC 5E6>[!Vrd*vіz[,*Ivi ~ Ds B L H )${H8 *Q-zs'(v:uHEaI]VRUMY66q!b#6y0!aL )(`R @0؁DNh/ ؉4@@ XNX'4  @Ց"ZiJp2"DjM2AhTDւU 4^ĝm&QlC*qԔyH+l0Ÿ&A2$\lAD"oA :8u#Zj,[H"yJBm-,0W]_i>/0< (JD:V" |L2<'})BOMAp$`Lor(KC8wzt;-sX ybDA.aRkEDiF䱙sqY #O|!7ksŠ'qNmޞ:()-Aa@$撪& (j5(fͶhZvrE&:!p֐4oQqfW-y<N8~GT`K$\|kVcwlt&Yд !)m0:$+(W_Jǧ8~ѳ>*ki# ZYoyd`kzȑy ЉB! ƃ6of5${\RpC1t I ׉~*Vdܹ-YTҞ^)B(f{w1$֛ F8C[@maQ7*ZD!WD閔a>%ܖ*a3i yr:eFJu 1O(prjbYJzL"x#nI)'{)WVJ%^ ʎbyfiq 1F bLZ !2y.n)Qbm4,z 1ȁiʩ qPRj#ڔ~: 9+@?4$Lz_*vԪxN)?F*V㺭!I  k˺+=I)!󚭙 :J~ Ai*#1y!rhS,氤y0.Ɠ4u 3H\Oja38cfs+iҭ A81IJ)e^ wy+4*vEtz: /j4[?i7r !ӺZ_#^˳)`= -J?B[g+˰ }*RJ y25wX+!2!\R[ʛ(mm70c o{׺xYL; q!_rzkQxfO{?ۺ$: !kLA[ m2%(d !Cvz08 vCŢ94r&幼,\غP [7\H˱ 0[ˋX籡'ZK,"S|lp U"d wa6 pO (&8 ͋*:[c R}V[Ji|–,l$F{oųn,܈Fyf 5 tvl#.V{xFWQb« !ʝ˒K)tTQ)%7ؑ{lŁ_!!zV8!~&1Axi<؆ >lVkB"G[xf嗡anjhFFrz ?Y~ 0l.Vww mF*'[ĝ Մ ;M+﨣 }`׺[HT^ꔱʛ{]y֝ $΃-n֨G"1̨[fFMn#8ҤqBxhN-o*-RtTF 17 m~&\N[oNg*g͔f/ͬn*INN%h o#C#B"@#dB`bs &b|+)@1DG$DOD1EWdE_$ gkXj$:7@!p!y1'q8/'\bO9JSMC$1 S;`=vt;vI9wx !4_ sM-}/R]Dnx&d7Zpufo9gwg;5d6s'V|Xja䝩䎖 ΍ΕIrbJϺثt(lܐL(fS\Y&c9٢V7*x& Kxre*>oʰԨp֪hh=gWgu_=v]E[hz4Pr"Vx-[*e.WJڣP-[h:򸿢s78_hv H''Sj%]x0>M%M2^\4弮|&HEyZMrG&nE 5xmvaE8BЄz5=AJ75$>ɧ=̌K5&¾R[^H:Y7)R L"Y2X"C(b E|87E?xS`ཽ)dz2SR\"GI>";HHwBJVҒd&5IPh_Jl3>^NA=Շt!r5I155wskaJ4 ie"Z9DxRRܖ1`Mf܎loɐ5Ib/"\PE`4i$SB]P$OHpzX׽o|/Nw XZ3}!9nGV 쩀bPnؑ1\vڋ%m*跱voH:DHz"](.!-=Rۂx=0O&5 R 8$3<"Mb>RfKǸ'_.w_saiy`E5 GBD)\P &1kx*XPla,"VLU)ev"ɵ+Rd TN;NE!dG-ZĄIV#+-`9RHDx]źQav=mj @  x@x f-DJM`:xN!vDi#>ua]AՌ ǣ<^ͫntL1lG\+< .@Oy}[Kd3Lt.m%{-ގeˢu\m?:] \`9irv"&weGwERKudC|Wk= y{R8!I6"lXӄɾ @92wcQH]'0K.5I9|E?zҗfXs,ȗаAдUR{t; T4T5dCw +8`b ȱ%=>>dY)<$S 4<?Bs 3BC&©>$j VD[j!+HE` AD46a$b2 s: ##$Hž i۫BAPFŎArQk 2+8Dl(>c?F7{=4? @ ǀDGXs =;b {Hcɐɑ (HzÕp…Ghth 4sƇ-rDJ 뻹Įmb?8AJDžhȞ|輙PH)),TF8TA"{X@DF˿ D[ bI *[KnDC8ÐxI =hJ8)2 ,t@ĂA`d>t>q̖k ĠWHX8H۷Ǽp˦ $X\8b6tx< QJH91LtτhHxXɜHȋ~bCXɷL\OH́8G**`:MGMK$J˼̿M@oËɶLd $‹L4DAlښORD*<?H$ϲI9BO\A N-ց*-RY=0pՠ e 19@}*Xv"t!QX EA!’lk's3ТG.m4ԪWn5زgv% جETΜ0H``@ 6$I4xScDZDE]@eS5旜 )7DDgs*H_%-ܟ8h J'bvmRf @r=|!HQ<LZ 8(Z<_wufH PR߆6p @V1(E_u haR|OLP`H"ar {-j-z-;X@f@&;/{//b pg +0 ;0K<1ű @ 1P1{1!<2%<e}'21<35|3gW83A =4E>!2Q>|??^@|ߍ?(k̺ ~D| #(A,' r 녱8" B.Ur/!sINHF<"8-."()R8!Q$ϊ^"H%dӨ5QyBD'6ұvF0V# )A]@B2|Фp@U:$3Mr2d\L ={<%*S{%#Xl5񭲖%.}EʅdȐaZ.S 1)a2SW)Dx5 M;\D7)*H /yq3\P7U 3l'>> D:)n(E MȣBaơ Jd%)Rcޓ"!HKtNJ0/iJa\DX̏˛5(%,bԣj3S D?C7խ k UEMK URDLekzTrs4X[|HԵA=q~Se5ը6Um*Uv*+y5YIVWiآ>6tdZN՜˫ E-b0/,E\>Wtk:n{g (wë)W)yKpVZWUݮxWw1 ʃV)!6+L!aS2q`O kCfkODboD%^Q KuY|{"n I\xH'RQ"uOs&CH'<)~<(m);gw-ʬfC˴H)`jJQ| p<9\ |>* ֠A#FU14Sh,6C :PdߜDMY$2i*aPTDsHH16Q-U4暵rZ߲}S7}W) D)t )hX"p4SUISVcr@ =7DlƦiфZ)D͇GݭH^k6DҽvKdB3KrشWH˿lQh:"A[`鈔FA$ 2s[:ixyhMD 8 V}X%;}$^4P&%l>4bw SH[+/ҩGL,q<.gן!Au0+%Rz"HLDItaO S8t#xiεXxUxp)pg9G&0AHMFLeӼ]]eݪ~^ۉ9=Q_E^D^=A})Ȁ~ % FءV i6 @B9ܐmߏeł}D ^D a6ADWUD}YDjBD~yFM&! T\"Yi >%faND[D|a6C6a z (A]#V"[T Q&F!" D@6 6C+>Y@EUD*O}F!@b6 ^DF hl)bA+"7b2ҡE"=.6+Z"<.P8KԁAE7iD^Ț6DPi C%9C"IDd Ae@1#.YgP>B D&d!F>6"7>BJClD$MzF}ZQMjSNuܹP>Yd~YB)'"LUZ%@ H$R6S:^D5D[JIvcZ^Ir[r @`0ZTRUbH% %!BWJS:%T֤b.l`>^[i[8D cD%aj ԣ՛VW^DXZDI ¡Ijz#IEjg0=<}&f, ck67^iRi2&r&f]sjeJeNvZqAz^-&WWrqRDjZ$E@[5bipC%d,x'&pk'kv>Vy*'h|{*hLgRT'M(ceH$|'xRhZFՀ7& 'Jfl2{&gTA!DT(g\k2U(ha_Nj8O@KP 6)2J'8 *b6fV:):yg`#1d& VDP Xij) hD(q\7YE(61t~fOc=@h&'i~FfSe%(6DV5Ƃ*|f¥"ljj@[4kMOd\BDRĴFiD̪a+6µhj7UUCXDQ^$ZN@t++拵ZcE jJ&ROg?kDB7H@~(z>D(@h6#EʦF{EA~V^Dȶ_;Fk6!E- iBfՆAi,E) E-ݎFTFjFZج.ARm>n8f6hE&kA%P[>H-+DF@h6*o @!DrƷ诪!ܵSNa[.ozQ'.^>/6  .䦯JjZD&k(+9OD~g v&2/ Ǧ-Dh1RF{WE/ EDpTD00 NpfRjB.m/MH2>hocT ]+0ښjp ^( .'pD^RȚ^0zVA1jHB}.Igk.DNѧoB'Dc1O*U |bE\c5"¨EOH r rkps'\A.E†)m<1IT$-B+ܠ6݀)pR 0 O,3V p C)6ـSD% Z14'lhp6Or6.4g'3c123(:ICl Xs,xs&$X4XN$ Ss?40HDC*B 4A4iHF@ F Pt%ρ`DL3ME4-%B7CDDKKMߴ GJ4KuD@3WA;:WUFޥEd5 TU5XDD:?Y5ZuXBd*-Zǵ\2%]۵GD]ߵ \5``6aa6b'b/6c7c?6dGdO6eWe_6fgfo6gwg6hh6ii6jj6kk6lǶl6m׶m6nn6ohowoq+@F$A,qGt{$KuuO7wwwAAw7zߋ$%+]z#D{|Ϸp?I7B7}{ (DAL>tAGnC`M|;S=C>x×B:D۽}üO!>7D(4ۏA4@#SA|0DAt~wo< 8@q?D .H~d~Ə-nD,/v?@@A&TaC ,p!PԸcGA9dI'QTeK/aƔ9fM7qԹgO?:hQG&U3ćX.FaR/Fi@" "`GA-Um[oƕ;n]wջo_#] QE@$" rUWbi6Xx#=tiӧQVukׯaǖ͐6z,x 0A O?pK'i־q?|yѧW}{ )>~\$ P ,\-d0' jlP#hB A QI,QLQK,Zt3qQy R]t<"3r'R)(* g-;BD+,3LS5\Kd7 ӣ@3O9? TA UMt'@CEtF K1TM9OA UQI-SQMUUYmWaUYi[qU]y_ Va-cMVemgVikVmo Wq-sMWumwWy{W}X .NXn!X)1X9AYI.QNYYnaYiqYy矁Z衉.裑NZ饙n駡Zꩩ꫱Z뭹[.N[n[[\ /O\o!\)1\9A]I/QO]Yo愁g=g"@pg`zS"H.]7 SyWW %z%ot =OF ObC_XJDw+  ?(U4?ms E$bЏV AHP!2PsKw^8BڊQ^ IĀ 89,a eBY$%#0]ĂI 1}rD/Qq` T q$2DTbHd*Q! !0\#gǽhG"ZH ъ %BƓ"Rf"GH2p܋!h!4ch[qx^i#C!O`Ub+JQeApMފf(ƍ C,Nn '4$\T6 1~e<:nb [D2{$OӞ' Q*Yf@1,P !Ћ5 դ.щsN!t#1 2JnfA @D)4kh#Qj03:ELuvЈT4lB @@t#I7ǀ-5%-]KA dU\j'Bjצ44z>Ț=D5 Z 3&Z`uP\ xBJ$ Te ptBP` D(NH8V5pM!h&_r* zf5ObC ڂJoX,ٜyꛅ6$<lFx#Bc*"جn ܙ!8FpX8/."W!$BDbɗd,ZZl "\iLV'/2W!on"J!g@<f%7 D,}HX෾A1C܅HNE‰w*@H[\sVI L V590%n:ظ7)ij::i "iX,l9y2",NQ#\Bp# sEJľ sARY!-.)#|ěܱCY*FXZ E@RMjV-$b@pP"+ mDX Ef/Peȱ Gq;*W)<" :*O YmkSuiCi0cjO'&.HrЙ!8E": ܊1e)Š@]!DeB!=:ܓ[D)eKI*bf42VdY#5ǴfcE!#r_DgHi&fC zJ5\W }Vk|IDq@s4yV{I\7u4NԬ@@^|CΞEt} ?ݏʐwY?<$Cz26n!'Hb. ~CM!OF@\8J]DF(Br4.d\@Bx -4 ux*‹5//`$hnԒbj"(>B3 M`66@ $J2+"K,"bBy@(J*%Q*xP#."*H*O!>V!6,*K N 6qOB0?B"+8Ap \ڥ 4J>Q@r@ (@pnN5&A /P$QqgX8!!r!.B- aaP ! Ob!Ő/bO!  ȕX;Y!Z&X::BKy,(%o P턢G:3$MȤ C @a"i&ʶ;5]t" +:\OQFcm!r,(L t%% *43J3ϱ4;Q S br`5Y2j !BpAxB7wrA  7_Τ, $@b% B'B'ٮ#$&O!~2 B@tR 8/!$;",>O"o!R"422PRȰ.{.1/Q! -!ΎR21!:1*uP:V R@#qTGt);"HA4M5vހ4`sj"7a2|S!KtK2 ^b >cA/!t/)%4fUsCauQ{LWJEp1I@BQlTхe (x yi"^`R 0"0 !zW4MW!\#z%бUy5 ؑ`` !w~~]g@cb#yJ6w! b VW8"Ip!4Q`#zhh}765"wb cA &9v"2!ZH`6a ZBt @U!N2b7.׎0729s=O=մ!nBNGs Gx=L/'W W-pWu3v/VWAv w6~*n!?5^L\@#V9Z&*P!@ @{T rv|Mb*!Y)bז[B* 5wb`hC.CK cBj HS?LN#l ʄ4gwN8R †o8r8!ҷ{ϤP::`  ,}ӊ#[Z|l`"B(T!,=B.4POxz bP!x?"RԩV P!OB/L +Z7C]Ւ+ kW;YLWWq]ຮ@# ;{&J!ox`kX}stZ$ɎU1P9!2YhǺRG~XGɓgPwv9Ƙ!s9b嵳V!&r@_@z9wKK;WKW˥|Y͏bշ ϥ˅]O:B\!nSഷcͧqK ^kz7l 9$*kSy!bxC|;wCL%X3 $¯Wu%cg!:=P{W76%("!FcI+QOLX И"]b)&LQ`|Ymn `~{1>漼$9dV hY;)"ᡯ>$X  b ƫ@7Rq>tyw.` ,= cA艞!\y z7% ]3Y` yh ձ2{啔"^Gq` t`|x DQV2#*7`8dZ&n։!bp%iHT%W!h 5 6]t#WB=!PUMH|"b_%]}/"9YJgWz/.4."#S"֟\2bib ho!X+8piРC Z1)\4F KD7LT2f=r0Xf"&HMuiD1ņZ,ES+-45̵N};юEcdE'u9W Ό&a$“#"a){W3!>:լ[~ ;6lVEap@Y i?(DdD zH' tH(x%`d .A'ߛ㏎E[H} Jyq":%R%E=1Rqx} !((!@ZGF~W@s'](|(w@,Z L4FǢ^~ fb9f > 9f8bPaPf PE ቐs9P!D&8ȹ[ReAv T uz^ HISTq)+yꐪcM$E=!hp%Bt]vW^u%lH[MDU$͡U۬C-t u=W Hd oK/["EopB8Plc FlG я e)߁|z9G;'DQE2(w1ftt7cw Z}W嗠N{ `+I Z8#I]]z"`n #^k5yZF†tJ>rLPr5Cdy$>y[D;TCO)EkF'A#E{RZ祻9̂**A'zǒ{ڔ p (G,AznBL_m.9{.@Kt< Aar+St:OԱw[ݢ|Bi셀OB*R¥ fp  Q̢sWn"S1ɳԵ4e)*#!{Vjp 5 `-Bc /H#d5vs-BadU|( b4G͕ߖely1т㳖1gHsjw/!Rt2Emk-\B?E SӘKͺJʠ2M}.-"jR:Sc"[|f;ɮմ5 32ߌ}{KМhK{! CАL-ŏH9y!E58$/%R/$;7\>,hA FS']?\9ۊf5BXՈ!hbD歡9as[#lAp<>7y k! vch0Q ]mQuXwq(z[8pqOA\<֔6;ȃ;('5vǕ_w=0Ѓ;H7p:H)]/w'^2kwxWxqxl]vic [ ` 60wv(F/U !nbb =D~@r%jX\2HD!vGbD3Nh{2ET4 "5goEc}l5S1IpWF@Pr~zr#1H rG3X)t{xp@"rև(HȊk h+,qZ2 TGhu#d: ;)xL&耸ieg\7H iCeC#O,FCw:k9qeHh7P3v/ yY4ud V% i$q'D':GWbe5"##P +1A|#!gqnu9nmFTkHeиx;pb2 QЋұ6ieHUb7$jFGQsɚ &bRK]3x+xW(#91j62<[ќf'2iNyY/ɐ]d+QJy=<ٲՒQh3hNf'ٚρRA `RA[ z7/e%& nD(oT1G \0HE!<$6SE2VP#D1p CDHa/:(db(ы;zkIx$eeȈIfQ~#Q8kxmzB&o@#O*s;yw*#ahtu>b)dh# 㙟ɹ%iw)tgwt1xlkř4].pʚ#%Y@m A[@` B 4|m{  yC#2f`V/&PSUxiz5(іE4cqYAanjgq~Dfka(q\F#a X`"{1!r)_y61,.;&ip(j0Kjj؏ǒ646{1 P=-`-K̵vvquRKHqXK!(/rY+!$ yv]( (ALuZ1a۳s*˸jlQPI=iOpAA0mXʥc"!7Ifȋqh VY αB2 b12:qQ5SnؼGj1BUfJqQ(G#IWc"ڈ8۸guP(4 / 0x(P 0XS M L4S&,<O;! 0{w52 0 VZ+\Z. !Ù4Ä*8쿼01 @ oPh\+ &B7` ?慿yl: a  /y'p^rAD XqC7 {w RO _I0UnY6|!Sۗ15y_BIR:X̞Qάͩc:p(̃}ӣ=9rɪ}O*ЫӍMñ,(<< <)=zIѥlܓFHh 1a <)T}l<r,,ƽ}]t$MӤޜY  =4Z ?} [zL! +'cDLI5k1G[챌7&/L}8c1 4Nsr] +F5ʰ⌾i[B~I4>٪aY^:s4bjːdx"Ar?db,vO92xe~}`bI|-(a+d۔ mуP ]4'ž\GLp.v B+QtKD+l}-\{3w婾@v{ Y BBO@62TEB!3_=㛽X 䰑FRMJXNjcįn-C#AmK18A>%D[n5 M D}=zNc/ jqҒz@(`$o&)`"-p#A@_ QC_@EO:/(%x*,*PULY=] Pز]5]u//m RچE}ȁH9/!ؒ*좹OU8& wD#%1t⫑FdB~eP2񻍽Ȍ;~F"DlVU[Fkٟ&8?&:3k,uSlvp6030#O b $XA٬aؐUtNXq1C;Ld71 @d :Dʖ _9CM1F9' ּsIkJ`Pt)lx"DpAkB,FG8Y9hpþ+Af+Le`ܹc5ogСE&]z,'- @C&eHK `  p8- 7NT(8@;HsY>qǡ$œ9WA pW>s0IKH>;)?@b6;;n ;;Ɂ(H#P=;<; у(8 ; tI(rJA+q8J,QВJ0sL24L4TsM6tM8-P`!b@x1bᤐH\LqC($EIHh>+ Ӕ3K!PS+C$ Dep: vA!OzT:Q zqUB@:fmo8L#y> A*qtqRx@"/ZHqg;p pA{hЇ.xD$&QKdb (&fb[!3%y}r@ 8a(԰AR^pLX4ƊUx 2)(VQ_1:~IvyP<8x p" +,`WǷmpa l☄RP+"ƒ\<<'-tb5yMlfSf7M8K5WjQh^8ŕI!g)8u3yI '=1JE N,jtfL<9Pĥ(@tB!fhMT(:SC%jQzT&UT&J97B(I7/xV!%J߄2JGz}KӖCQqE:_EY+MF-Ma ꢺ畚K׾W4pRM{ZԦVemk] 6R ߤ3;Jlӧ9D{R&# }=X88=D\91$ &/K|0 E\^=7ÃALC ,Ep&ESHE_&33_9QK4Lh$Mb:hP$DEP:DAZsD)[Fo|PIFz%B)xBy,4Xh'@{ʃ&Ce`fpKdҘFNFH&c]K~dcd¡P.N檥(F4쥒J%cXcmơ [@f` .8N>זbZ!M~~Ğ2jRHlCe_#l)Nmod#Kq jV(y&&inol-;-jj.& Ssʎˮ\2VXk" Eu`O[`'3GA8ɕX XЧbskk Q@cf^)3P`?qJhwH):zXP>/a"e%~X7,EA5Za?\C6B.uI$L3udsH$=zWlT@ {2'z|&^Vw >N>JR(ZWMbcE}HIٟ¾UhuLAfp ?G@L3G?_ǣ h^^QR|aV6(@vf-hУ(`3 0@JP!'HYp'X$b̨aň48P@z@O$RFNP`APU|1˃EӦL̗_d,cKwj|dFVЪeی ʩ'BƎC,y2ʖ/cάy3Ξ?-z4ҦONz5֮_Î-{vc9nJv-~.}O&YN1k٦Bo♧{eو%&i)J"-RaN͉YMY)PV2Z+g6e2թlx$P <"aaNBR[m2e૵߂['h[ަ[⛯ .e\#xjCS\2Lsܱ#?+ܲ/üɻ\pŜ;ܳμm?#K3ݴA;E7uWc[s=J-0LYݵgkOdLXl]wےMywD!Q,+YS䓻ESXN7bGy̬׹=1;%@^;r6vc0#;p&$;w܈s26e[#EEm4E`:Fl1RҠB_F XqRO4Z/2@w!s q %N0qE-n5| IXX0wBFXG,d*\(J8B:,a+*#Cbą%:>G5`vzB-f$zSd,DSmLA /xz "0j/fK#5@KѠ#18sޘQ@ BFd2B!xf Bg0!_xf4WCgSLL Ӝg7%Š?QrR$'R52"m(@dx--i r_C0O4(R2KmL9Di=_R1&sKĜDBL :yZ,UQ.R;Bed8!^A !8Vyf89NʔSVUUՙrS0,&P NH#zO\g(U"D@ :QY1TTԟlԊRȸҧc_<0ti," l1F > a]+Ta':f40 x [ !82e^@JBzf%[ݭ*۞H#%BҖV'vŽ>1߉uX=ɑp?Db;ȕkVDW!aB  (B@ Fed &+8ycSn`##4g @*J#fd^a$?z 0a ՅH)>O"?N"aČ`CPfzba^]D<[ p[cwL Vxj^6ZÒg* uF3h \慄 )8I (Bn ]`yW p0y I@ȇ0ȞOgSI-a~/"7cߓN)1+);EiPSepS,5D4Sw s॑;Xu#5,gJ@JAx"* :bx'mQ9~L 3茀s 8Gօc5ڐ\hAfs TTPEMIF+NiD"FlY,i٘DԒ=)IXF<d%DF ںFǝUeD㈞S(D ]TFuؖdD2ID _,@5] pPb} ,lшFpo D$p'ē2 ."4 _B`&JeA!**[,,-*-.j&D b`]2[B8BW%L3QF8 j:&ĂD8MH V `5&=<~YFc66>S7]5E(F!pIٿe^FGR -K.}oQfc4e,@q}f#[[,ZI]ޥG 4*J`2cB|3WB3#% &[L2qBW2u@ *DhwAj>Bm2eDdƣBTw|i$͖ie pfCRf֨B\c|$ ^~u]T`&LRZMLfsbZ]eIĆjO&X~Hc.nuF*miGƂ ۇB@^ބ!uu)[=S&2A,d2k"nfi>\&:NI)D@[`œ6*|!y%^e1HIByj,U0M!Fp!feyZ*.,F"*Bʙ-TT(H灼FT%>lgf=tdeSm%hS_F<hLABG4YF JAsX:j-b"؊-Ω!Fb(D:)FSaX%/ Ϫ>D1's,:baJr[i)ɢ:E*Fm,ިfĂl` *!ā)cB/aƂP(GiKvrƨǺLڝUYbyFcK[VcT,t,$es+-0޺=gioB4T` )Fݽ`+DK4/!+C`TD,R_%fDraB̑r.,nRmer!TL(-2+JZ :Qag2YU&\6Ct%ĺB@70`F\+ u5`gKWRi,T$}*Ƃ?)c%BdI(D)/,jDJEg}BT`K"I6`S 'f"=Fp!q=j5`r4`BtBtB(aFE/E H8ss:FBuWJOR7F5sCAt.uRI!h03FB@@&!1[ӷ3uF7k,|dxlnΝ75gmKBvv,, VIgSHBĩc a0 & RN7Yy2sbB o6pƨ4@ x+g{6a̯DS.xxKWTJmCx!gԔw, wxBr_gsHFw%w/`r9"_hV{B~foҰ2~+amD|3Y/@xF&FhD_6flz W{?1#dBJm{RI/S/Mx=ӣ1`/vxB|c0M}`g'KSeGtͧGf.Kfx۾|dPyKӌn3+@og=q9'rgDKhhT7.BX?o?~S9Z%@6G_FR87D,cyp`+* baD8h"A CHCF#'>p$++YtfL3iִygN;y% M,@PXR`bYV zjEe `QZ* 0ѐ+(%ىR$t@MJ 6r_PZzE)U"5|0[QB$I6}ujիYYO'!4n' z(GTm,JDAlU?Y|>._ EA,si[/ $%!o A.,R"0i#:#B:s EM<1BLPZ)/H"I"(DXCiLj`;鉖~M.BKZC84L̑#LGr$Xr+;[5YHOh P<D]Faz<遗;)뒜28;IO;풹3Pnd&>4"Q7S ՅT=U\,Yu71(ХFXG""B` p, )B!)]:qQ~OgTځך%NwEr%%Ry"B'I|c"򽞌r$OZ_ a ; V=AL(!u PA(װ#NdWS¿;BW$I&8X; BB&oiaD`Au<+ÂXqd HB`!aBE"H|`/kٕfVb ? XG8YI p3%[ F'@r6 YT6b5g#Is2dg x28I:G䌒 Ė2ZP XG_| GR]@zD)48 x8əC.T% N$ `T+orl*J]3ݒXb;)Oz6!PBv"M E"%XxE܁4Qd!&L(1dx"!X$#'L%#bJ@ʩ\PB 7X,Zv`AK@Ū1&3BiK'~־y9!J,IJ͠Dm X>wj 8 Laj(FpdeZvāXYU%Li]KֺV-fi6#n 7H"".ZdjB]H"Ⱦ`NHn"]iD^%f&)`H.:HĘ[?yV,+M hO$+`7<}JDI 1k$h.JB:ib-FFpԭAqdxw:6LUmrMH8J-\w!9D D1@ΐ.d$]<r/A gJэ%ZiсC"QP&@3UǁP e>s,:6I5jMcg:+ s*R']VM0Fc$j ק `]FP3TC9&Z@%cdߦP6sDAy r6uf,b qD =] ^r @2@Жz.pI^°7M"Gf8H3-IƢG `I!#Q Č@J)Dv׌h0-g 7-KRNY]|4툆^EbI1 ˵'3 y7LX)bՒyD :6*3,rMI>Zka GDi,^j/n>;c )Nqyqrk{g|/jhoIjdtN2 '#!N'̌5Y񔑂1 L.=ъKWv~C"+\PK)&J% L$  M c ȉ;pSf  JPD  @  n EMuT6jpP0 U G eI=0 p @'H D`< <|2B qp  d!Π @<&qx|xm*[1DI ""Hi"hK/n]"PcA$~DSq BFMBՂ0%t$X@JN$/#T+ B\_vfm @  s4Na!'"U>$Ҫ% )L#g"["d$R%0&",db2"*Zrl1'1[R : ތ%hdIk)&I**48A r+a 0#' XbWP-*MVE&,&RlU2b"{l`1#ш'"1&LN/P'8az5E>0ȈƔ23KL?'T-c!8oI Us1 ,3 X@:HcO)r7CDC eJ$%ʌ9URcL0%qA D+:AS2&%2OBl8 ) G`&'". j`J%Zе R4&̔zX'$NA}q%I `r Q'U_.PEÒhU`)0`t`6^GuU"c(o' c? 5 #=,ics23a/C 5't ~4S 0g.5WXCvJ 3MUb i uM `>m Ҥ*jjv45b'"\1OIhVh'cq0 T3 @m-,M,esk/ R8o/3 g @4 k'r+r/s34\+_,v6u+$'%V7GB –:LW TR'dE.B%6'ud`j`|UX瘎Dz y`׀!y%@85'XA 'x!@yicBَ;ٓ?CYs8yNOYW[ٕ_yQnaRosYw)Myl٘YslƄYy.?˙YٛJ;})ٜYOdX9ٝY癞qŞٟA Z~_'+ڢV h/Q$?CZ9|8rvţS[ڥ_9LAdksZwZiRNx:QnڨSwMDکZxSz4ڪZ9] ' A7ךڭZ皮ڮZگ[ ۰[۱#['+۲/3[7;۳?C[GK۴OS[W[۵_c[gk۶os[w{۷[۸[۹[ۺ[ۻ[Ǜۼ[כ۽[盾ưۿ[ @\i 6[|!E)P['3@7}~GąK` Kc|O< d{ܝi ŕCO}ɓܛܨXLÕ\ʧ<\ eKʻ]ʃ-Y1G9́ ՀԱ顑Ӝ|d9Ѻi]}]N1w[л]+81F6]iNAV}IBY]Pݷ` !/we_z}`$Q؁]A xי]_\A]\A$OYA@9 ! +g,՝Q QFߓ R[] I]]]F"}F`=_"Y}=su]  ܝ_= I P B2 I . > >Z7($ uWĩ^w <"(>Qrڅ&  Us4 a> r'}^9X۾]^K_`$? ?if g&QQ ܙ`; aY`K=2x4O <>P\`#| N\ W|!8KetfFJ_+I?"{HoL>L@Q%XA "7G |! (@X*\ȰÇ#JHŋ3jȱǏ C9q 'D4J0h9L5c$@ J(BI=]ʴӧPJ,XieePTc-  0 p¨-܁LdBPc h!$X$$ch* Bd"J`bs&0"*p:XvO l7ފLq迯xrakνaQ|K!T@O,P b!=Xh!JGN++…Qn9[璇.:E<騧>+p밻nQ BH[ { , $6+0B-"C@ Dt}%2+7eAR|Z6 K P4 P_  ^(h!x*,p+ε,DJ҇p!H @hXQx '*ےd">`mkH8qҢN h&&d=AD) J"0 W t xFp8q!vc/E-rF 9AňŽsE%氆7vxPAE{D+"6С`E=qD*2R҉ fzXCb ZH2,h,` DdTaC@3(RcqāŜ $At2d} Cf?!3HB%ϝ@ O&"Tr@lH"5S5H"0cȊ1M!wgDb@{ #$kNbpHPaAOD zrTD z҂'*WƝRt[աL'tOރ!X87!KG*d5{zÆ2EO\CDaA7;)J1CZ.x,Bp2͝+9O'$…rLӷ~IRWRs*}O\2Plsuv<#CC@#!w]5=j!? Q1 `mҦk&ya]w+paw A3ɢ~DXMqHoAa )Ppl0V=Q AE5iOz(ZȅTe{d(+T| P(TVK|Y80: r '~TW0pFTUT nЅ(ae a~)i=C-Q8Tgs)PHU1剠HUpeD~EgOt00uw!u q\ 70hiyajS8l Ёc+xWvv]h__aQ 1xdy>ֲ*yF]q\6 ؋ّr! rK = rc< ᒂe8#yPpѓ-Q q-X -1}Hs6W\Ff=!h }1 ;7Sy{ a~UWJI(a (?agVXi=+鑂y: P@1sh[Q t Xp@Y`kP\Qcx  Hw eRv!5.x xv`"1&8(H m2HmHjjlDٝ9h(}u艞k ѕw2zc Ap| 1Iq )0 |U (;0Z:px1qG" 0j)T })Y'1!ڢWD:0 i s!6MiRJpI96!gvx-yiqija^wc*lُ5ljJbz*xYʋu;J'2,Jh $\q! A(( ʱ  \. ;YvIל*wqE [ 1T5|$=R¥j1{AOvʼ`AqL l4 PzܱQ<=:}-Ȋ,PK (ѡ&f |PIgS!3Iw"ӛo'!˼ Y[4ZP)NkY|k u#?a<q}ҳ1πWǖhL<.[1);)2x3RO.դ/@i q,e/0]# , &{@}ڱ=LlgQBDFh6ݸ- ۳Mۨ=-qեrhPֆ[ƄQY%i֫r퀎}L^sZ b<Ll©u kiwq7ި4rŐc%= 8(WmY<FMҵZ۹=!ӷJ.A>!܅ #W0r~TV=aKxYSLų7j2^lka,  N؂'1mQ qyQn nC&羾&ޖ1o[~+rz 1'Q h 1aS{#~~mh{̇P OG1 QwNO[:/hM:A%` PN ႓NN9S(y7,1>vxېR? 2Uo=Bf-a*A\*Z/|-VR$N #Qf*P_~be/$'*'V:b}ߗpY01qnp=Bu řaa͈^ $Q q2]ؼhj:r ] eCyL{[78:ڏ;)tipPkrن(MZ^opTRK@ B),TH  Ʃ8aEAc†AqDN4dLb W)&ؐC \xPEETRM>UTU""'DA)8ڲEKZ-R ZT tRz@W(/(sFįX*0o *@/2(/˝,N==PԀ)o d_()&/ 7gg$ K<}Jx%)>mގ]'Rw>{ 9 @,(p(?,@ hiڠ2TFV WHTJ(<." hcVD30Ctކ@rC[Pr4R1VET ¸eߧBC8) 7D"шBb0$`\^|"AHW+bQN#0 Z0( V0թP=HRoCq"攤(%1]zX ,΍y PhxU1 ](X(@Kю=ΐ)ccG+ՂWDi:ҥ=rOW:u,l*z1b(ͧXuA@a뛧D5f.KՂ)at=NhP\|a?0%K RP|[ S3G3 5Bt!]66T>{K.=}Uu@h!%ĀPؔv<[u;Jyv@pF/6t^‹mdrxڮ9bOif2 j 3ƻ>I6; <3# 8;$!Dijz{( *0 S10Gc!\;s88;ɂ`%VXH?x4N="9 5`҂YX0$<{@'j1՛! no>(@@SWVufgh8>B-I` &Liۡxc Xcd=QXmF&wxg8+f?@2hk6_j V`%43K6?Xv闆hephyh+hh1udЄN1@i f֙nᛮݞ~6zYHv6볎U&enksk.Mr\ Rĵ Xj݀n_fvPU0Cffd딨g ?hnjJ%k=eX@$XזmffǶ!XʦgEpd mj\2hݮFdP䐼l n۵XH8NXk~X~conn6`V]XXnO%=&7. Hou>I> ORX$oNf k kX-pOq !'5CCᄊX ^!h݀1f&[po `X0q%߁ "w7:r@Le?ƀE=V~`q+_1&n>G>׀1g͈JK' ,=G&p ŶXBbM]˾XY/M*N77tPu%X8_]UV?54ZZwgXN{0\/VY%h1 `'FXjp'6vww KQ5k,GuЄ1h$',Wwh,rIzW>j}O11xeYFX'go(xutNWx*yLKU Й8[ՠ V)p'kyWlog -GTVkh,: I\U p{_{Ȩg 7ӫO"C{X#00 WV>TB{I{ŷWL I'ɗ7jx7yfNH"ӷ_5AMyֿ*t޷w'[= }X`#roTs U~#~G#2N(":Op#P}36e „ 2l!Ĉ'ƒ2@C7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'D-`j# 2m\$ത^xQ װbǒ-k,ڴjײm-ܸk^,*Wg TTZ{0ŭ]zv1Ȓ'Sl2̚7s6Jw&^"ÿ7,bXںw7‡OY`I4 !Y@Zp'R}BK_P(k?HAF(-.@?@"dHw aĄ!UCT*kC WM !A )-yP/D;XH9iq#okpEnICUtCLI 2DWI"Ģ>V,aZfh.@d"jCu Xw@5)Jw*R֍_zYù Zy6*M!HXWX[t/55U!V JSh:t _L*\u5\L6d?gbլsB'>B0E7c! ~p[a/b`}'H"Ĕa+!FVPܛjr"3g[EHXYbH~t؋\!t29Y) Y&ԉAsBHf~^zȁzd=~^aF x ڃ̰}\ ߢo!e~,X|U.r"Op!Cn*K+9 2S$ Ik_&-P+gNȖꐏZǒsM5G,l(s!y= g!}vͷ47ypBI iq /!CL)?8%X"1lGX">\ k$y2׽4I d ? o! # -n;CG>u8"mn8C {3 @}K繑%Cf>BJV8._?bvHwj*r9!虮[ZN#Jo]|k ַ&ƂBʍvn7^]!JgBL/7E|7DjWmӾ}q]Nt/r^Z q;, mw:BxBW1TuB_ Iw?sCQ\1D &R9E!yۛQ]E%YDA_11I %xD E)1Ĺ}1DDzSɸD1x]Bh.^!fQ4@IR A yǩPvC@)-}9_QChVGҝIZ-Y 1]LƼDܕ j!((Ip!IYD@\BtB1Dt߂UabgbGDjFdGJR#v@AUib aD-"<ƣdD#'NTbl2 3}ߣU#%6Ry>5FDw@m32DO!=%R& [ItEd5DP,:W<@FBbs"zF.Q cHGL2bG6G]HH\Dubd@<][zLVM76x!dFdB&Mc,8:"D%XDV*h&i&S@@`̖xfC`%% q!Yŵ +A`$6%Ce%g,GdθQa&b$C̚J@p _mA@{'|i MTykDAd`@,D e.Qe%8A(rNss6F[͑Q:TLvu`7vexS@MgGcEO~D$$DEB9(BŹݓmh]$rnbUɡe+},Ah`(\_3HN"ZP=cV(&VϏj51dhi+jl*)D` ;BB*DjBDp~Va>㑟 :'t~ @Ι8`AUNݘr#wi$)2_C BXWFM.*JۣDzDX*֤ӵj@b/Fݻ¢D ab>ޙa:*4z~U ^}`A߲j$6Vj$ɖf)"KάFU Jk,HN*LE+z$xmD @tS ۉq(g f]Zh’_5,GL h߹aol"2b&Z(@A *#i*HdDl-j : -2rD |5Fi$o*Ժj^dzDnl:Gz-ϖN%BxajvvޅlVJPDOX|foy mzXFD4nG\k~ER$vXf.nn~i[fP$: umDenuYA|>B@BLB`C.07o(ﮂ .6:-ɪF-hnYB+B$}R-/H؂^nChiSHFRO-%(CRi¦#]AJ:0GGn5l.v`[&@4.FYF pq/ꚨnl}t[7ajR!*Du] \jIZHl+BDPN%_2&E3o0fqUnBtqGȦۂNA^. +{unGj12f.E/.˟Uϲ'DV2Jm.$# A)g&o37wNl14S*1rG@W6] ADS$rԿni!;l8+DO?HD_ݐ¯p?˱@o z-JJ1b=7HtM0릮Aߟ:*w2~DsB{@=K'/W-\@pB8G+FD##ZC2+K'p4IZu)4.'~^%:ݫ3*`t4 ,:v:]_Q籚ĖiAv80!k5gtB+ݾ'>ĝ瞩h}:DQ)[ǶlB5555)#'`b,R~ j vCؙmR[mbuCQ%ddoDu80c{hDGygR5DW֑p6H=AP6szhq  1#;= 5Qs#De%"̚jhDP]i`JK*LF[͕eEW1wĖr%GN7PW~}IniFQqG8hCswpzW1(D/SD@qfs)"+ O~u7p a GsF9Jl̑_0/x@PRZ'sH Lx澭 GP#{6oc8SY3bõ -VBLYfD, p[LVK^m t2. wO`DAdcmE ,qLѕBaiǂI @Bp27 vaKw>EJWQGZA;K2{{{,@>'$3(۪a/ 1y80Gy\sD{}VFD<􍽷\޷{(!_?#4JhD9>g0韾޳~q#6zb]>ٞ @I,(0B,$bE,"AbPBDh `ʐ p2X` |˜;5:`uA-_f)P :jUWfպkW_;lYgѦUm[oƕ;n]w*(0UJS NXpG(l!708]f rBnj%M 2Y+F l(/4q7`y X9 Xf(߄AXKe) $,\64q P ,LPl!.N`` ?8bH4RCĈ $1-H h <bE  `-DQ h(ԋ X BC I)-D')R9;S=?e@h| @~ @PITYAĐ8ŐjRI }OA UQI-SQMUUYmWaUYi[qU]y_ Va-cMVemgVikVmo Wq-s/O8XR`]*_ueS@)L'! t!AZ͡e<`  fx"r`QWHt`&1"'LAVSp+h8C䐇4 =B=d +r1WH"lCψBPް8ԁ{a) Pe4јFe F|CA ` -kbU~ ؿ ؑ`$ G=e%+ƒB}$X GSU</aylzj/L5e.` 1 fLTD `5x e,Ij+&SDA4YLsBDg(M;Ό"6mCD1P<'lF068|0P.|mhXPA,9QpЇA8L+( 9䢔|gE,Qi,-K"J ~ 'GH"2mA)@v`MPNUM[Q O`_Z.wJqU$+FBLXNUb MSt-NI" ],LЪuc!I%&XL -U`SH4XfE-M2 8GO!]g?7ѮQx)x_8eZ [rV 7L7Ic<45yĞ}-mXb/78DsHE/l+eI ^_EH}U _ qQ0"Uo~_ƢCVA<^Ϙ5F8I8iz ;hV;=#guJe{{cygrG{bXvYrW@ - 51g=9U%X.dދgp8ѷ1EC{ٽ`n٥[KTΏV Y鉐AkYϚw+2tp`{szEA#QPA4Qzka6<²!̦ȳM+('l8P 옩Z*R;,Bh$Yj7&Hnz;Cf("dLŠvaL`V` es!/K@?YAۊ"<ƻbq ߹%ȁNtdDf4,se' QE]gD}2k]CwHѱRZdzNO:E앷_N?D?>_A kz~^]yl`* Aɷ>,lAڢ& l|/_w+/4շgV9"ڗZD<3\~ z+x ? V ! bF pv#-~_ \)BBʛ:"&*08, N!V!s-XL+g0LaWsZ^ łާ#ғ4) 5U,v  oh6k_b!*/q 6p!2jr3s;WK;b@b`t` ֠=  f`b!=-B>>S?> =(@A = 4& p> Ԁ t?;utGyTVF0GHH两+ II4J TJ4KtKՂ\K2)KĔK4MtMٴMM4NtNNN4OtOOO5PuP P P5QuQQQ!5R%uR)R-R15S5uS9S=SA5TEuTITMTQ5UUuUY5hX`5Ve7UguV[5WuuWD B)b BIxXX߂@  |($,(YZ+C 6XYw"ZbZwZ\5]-@bC,\_B\+"   \_\0!`(^U_ˢvavaSA]!6b @ :^b`8X-Dvd %cUv/_dXdeVdM,2fydkAb6hK @X+ci(R!d{VdC#\6O@f#ijbgfQAh+  6 S<"@  S o@ UlX&(P!fdö7O.Af`r)q#WrsIVs P$ hob un]B u@JI"w!Dxvewct-  !(tB!bjfe:"{A{kWtw()!A#@'M2c  c!p!@"yC#)z}zYB}G6f*Od",g3xe]!V Ycxb&@Bx& } "e X "~c @%x&( @i(#@f`c!kI({rI"d xd8-2qkX@A'x/B##@BcA"b]AB93X w<!n5(#p-"K [vOėdɷ#D9H9Ld&@A @ ֓"C%"4bb4"y 0d >$$5o!uU#ٗ >cb&jAf"gQ$G}-"IvK-.Y" |xXaY&Û@ f!x!0 ZD ņAb"9N``!X qߙ%RZ"Wd੡: +xd:ςdV"V$YǑbBcY cMB70y^ ,Y >z l"{=8bکzا⬯B@Z+#8,Vyd[y+,,dZ* $r'#XvY"qYvQB#X#"#ym]{ :n{!LZ " Yx~%{ (*Rj1,6;,@fY+[ˢIV|`_zC""b~o t!Z Tw8%X 8;`Yǂ x⪑A,4d Q/ y)b&Y#(9H "#n:F"`G"O6(|ڱ!^q!=++5s]o$ecA.ى" V%:bY6u>E"x \!)}gl㏶*F" %>+,`;%=.N'w^#j!pb J"bz ^K)nvsk*:լ[~CPafV[vl,Oe=v5O(dܻ{>[Ĉ)Z`x$c[8E{4P  &\yNHa^axAKO9KQVZ *b*ƷS*E Ac6Y)4%4XDt];"YxdN:RNIeV^) 'bH }HQXBsD@LYX hJh m Gqy< iynF%:.hY~JFwJDgX|[AJkފ+\d q|c+eqH!;J:QBLLkQ m~ nRƍU*K>t-T+dq5JXԀp eAx(|ƎE+A-YJլjP'BfGI * -RI P,CռsH_'d!{-a뷠kp!M%+@9=TV/yCV2!]FJĪvmk_ ۞@!"@؊ɂ"'Z9bU#$Hi%2[0]8$ATjwwI;|N ij^',FXGѝew(^lt.}'ڒ[ND6KQ/ kxÆe^6O!% (hWjW`*pJGj j YD sr0(,)~-P Vt 1wH,1W `~g A -h 4x-z! w 1~3(5(~ %H׃M!HT ,qcF1W!a!a8idž|17Qx. 旂-RohkX8Mkj8f@~+Q ah(P1jy1W.! 8+(%hJ08fSЉ8AΈrHnj,ъ7.A(؆lGfpu9(wp~h`؏ ׍~h؉ iE8q~fn/#IĘi0)/+*,9{!(@屐(А,!i 092ɏ.)Cْj +0)qMwc;oq035y䑓; %]Y1myEs<p9r`l ` i S rP Z Q so/Ar9HQ,  qt. vku@=/ j/8ٚ tr0 <=x ! iӹ ѓ s@ᗀ) )ל#ћÙC9~Y@n :0(qU :.p3Bjؠ5iD~+ ,5~0Y]jd^-0*#!-@x6W &w~&o q)F t aJd*ViA0<ʕiu>.x:zj8 Q *3h 40>q!7Ha I10AA6Wrʛt:ډ:jpVayN~ʧؘ ~nªa \:^ʝoX>ѨѪӪ60yoj;mW:ZT:po l\@!\Zѩ(j ʜy:>: { +;! W铱`Zʬ谱=q ǭ )D䊴ӯw״@1\lo":̪=q;.p6ˬ.ʥ貝Fszʥl;ȶ5)pSh 7 3[[-@3a(  1+[#ոۦEAiMJ  X9pSpp*r J=a 8P+<=p:Uۡ94ڪv[z۽8t S;%l0WbU rjj0  t˖ {(+Eay Ugۈ w lU/1fi .*( 1=QPx¯ űQS<Uiۙ"p+A [); ˓a8 |>ѹ^ܾ! ],e}u Q8ɞaa  _͖ԭi>1(3A3M}+oz᩻/ 'DHĥ=̍@߮UIX̂^=^Ry-FQ A/0NƱt\>. 6@n.;2Z|N=X#8<I(0#P^ aHYc^P?%V,WD-<i *o^SioAy{11, *?b9 Ǒj(UߗL2OioBɓ;-#N2$0 m'r1I-/?'Ѩw?e$;5!KT*"o7x;EiњMT?GWҸ;2KN AbI ;hˊ(Q RfTJaU&qցdET#US,]U6"C!Ui%UN\H~L(IӊvZ:NY]UZme\Xŝ\tUw]vu]xw^z}k1"s7&t7EVD!IH/ vVJ_ISJ[fD]dŘۍRcbǃ^(>Vh6k3ZiVKuY-2yɦwjjzkZ5&c)\bZUg^h_^h["a=M{$qZb8"kcirV 5qRtT*dhiҀ砑̖z!;p\5Ǟk~x7x䓯 svԶ N"NH\FhIW}!԰On*;pctm$[OqEbSJ~E^r!"\*aF@4akv 9mAPj!wCP;a}éT D5ALB :`a S\Ô:AT/54`4A hЃ4|q5Jd )RъtqW3:&tc! Y!6sp!)2F:!y#;\{c:^4s(\Bz2#d%"B6 DU@RQ%oy@$n 6.4#B:Ӥf5yMlfSVbMX7&фMtSdg;NxS|J{'?M14iI!= zP&T ehCP<- C$*ڦ{R*9AT#%iIMzRT+E %\b!. dJ&痢)(K}SUC%jQZҜ<-QTFUSjUZ^UUUc%kY*Ugܐ@ϋ#D=Y!s4,gZӛA^/q<"Ţ%\!3f; ΍hGu~5BZ]Нfv}`Nټ0zG͙K@@EW.[,u2:_ϋ.D؏FvB]k~vo" H@@Q^-evܢj>ȮyaCâyѷCx יymWY)Qok'g!eX4 r:w@7^@խny z/~s]9vl@ gv-z¢G}G11]'LW~cg|O۲' 7v΀>}^tg8DeCp􆴂'EEm2| w͝G e`?uhΜ zB X'}g߮ @#\Ԉ9;~0, s ,Z96?2?F0Ȩ@:XX 0S;h?:{@Cӳ,`>[1:[ED)¬ $DS9DlD/(CZE[L(<=<m;?#B4D@H.X:X46=[F(33iBM$UE#RLF4\edF B[|GxGmEŧ3`(FCt@@FP\=sG:6h3 T3"KVHiql9pHWc$ȃH @GI-kAvä3K DZH a$Dc,/$ &##[5J<)6XUC èč,7G@M2MN-O:RU =RRT}VhV؀VWUl=Ym5[e\{r2{sT\44TPV9e$uViW{ϠVp՘HluV 8:#O TK MPOuCLsV@O|XX׆Wր-}c􍏄u;3 R=P=YHSϰ/YYMgY YH"Z3+XZZZ썲;wsגsEXϐTDx= M0۽M[C] E٬UQ6=s;=31 Ӷ=Ϡ4q3\HcGXە=\m\(8VV: !deTEŜY8_ôQ@Xoc8߬H<)^ʅ`F!/b/V/dG`I8a0VBx3p0bC3%\0~Sb^$>dD/x^'F/ dbӊMdK(xhGW e Z`LneW-JfAld Ce:}e^eۊeۘ؂6+f1S 636I֊Beh R4Ddifn-jn/g bn>gt,@ 8vNx,@tgzg{g|g}g~gghh.h>hNh^hnh~hhhhhhhhhii.i>iNi^ini~iiiiiiiiijj.j>jNj^jnj~jjjjjjjjjkk.k>kNk^knk~kkkkkkkkkll.l>lNl^lnl~lȎlɞlʮl˾lllllmm.m>mNm^mnm~m؎mٞmڮm۾mmmmmnn.n>nNn^nnn~nnnnnnnnnoo.o>oNo^ono~ooooooooopp/p?pOp_poppp p p p p ppppD`/E]a6qX)YnqWPKGqV-);&B-F3M:I6Q>*f.i6nG{VD\KWEeUiYn^`Ote{mwhro`>6A9F>JCJCPITMWPZS_Xd]jdnhhbqkvpys{u~y}׃uي}ׅx139;FHWXOQcdkmgiwx_a?AVNgo}ڍۑޘݕߜ㨞ᣙ˗Ç䬣洬尧黴꿸ѣ•ŚƝȟɢΩ̦ЭӲն׺ھ¼۶i H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKw&x˷߿ LpN*0dǐ#KL˘RFCMӨS^KX˞M۸s=םNȓ+_4NسkNД (@@Rt ]˟O`CMI=G+Ǚ% 6:EVX(35`v (∡m EL(0(4h#T]⎜5K:ZDiH&C !KSXf\vP J(RlpBfHb@J b|矀Zu{$#c"!d%F馜>  t?'gWvz)tj ꭸ* tVX ipB+ppS6kn!EqѫȆVWte!P @1l{~*evn{Kкo%g)NJ@ hayu 2. tl2~sVb,3p ȷ,T?ȩ"ivt$綰KrrVS/R`X)Xp-2|KC)܌7!/@%ϺA\!>g!|gW㨧+# D_(oF"?9川5wmo<`fRdY]vW+)ʣ #~na= $=;i;bE"d LPIڽ|G :Q+ n(L}'*pdGzHvtt3\u,µ? 6- NĻSAhGAC0IEvnGMC6p<ζ BQ֓5Nm)9azB5<񑐜 TƋ@H5i$+TEW㎰Y(m,S#>ы&2F)DllGA|H(HY9jZ2άPN1ɑ9Zop*uZ !NEƜ(C ]5 N|qGatH6ۣϑܰB4)ɻ\rGk~N\E(%Al韎(ED͎B|H!QY~-N/Lh7 5zR̂)T2Lɍ~BgC^1EjWх-p ]P)<< DVv8!*I+ Ne=kZZ*u2lѩZ_)*2FH qgOT r VD C<@<`@&rO3b+ F&mH=MrU"Co7($\RZ$Bp; }rˈ6AMi>SHV tKٮ^!Dgu`2i ^< O럊Ķ Z8U}8*Oct5:dVgQKWБ/Ap ÉHʎ`IDqZ^ᭌ F\2i1Q t)xKݣ D˯ypLg|zPR!;h4nLae!Ep( ܢ2vd-QgBuN5+ϓlB%#h mBޥB `M+B-H 6O BV+ D BCrv!)ق䇐6IjaQQ:)ET N4:1P 4%XE #5!Et,"$+UM( ^CH~mO0[o#͐E0 ;8'  wSV)%fptaC3K"VP9 !+0rabN%~?@7*3<G}m}- G!|!po)_axWNBG'sq7uq \,41FB0g WHA%= Hs}OC Rŷ&QKgMa2OOMJH(/ĝgVr*# Qt"l F)Tv j7}p6~ C{$1/#qr63]hF^ nʄ|J'&BW#&8 '9*htЁG Jx ua2Q]PnQ~~1J}xbrfg% ~T}l|W0w.R1KV!hhj(ajbb(* qora 'a(V!vчu2 ᇼ o%fpx=bp|pu82q!Y4oQsAX]} /rX!G\81vZЈVA\Qffv*1iB*vbAda clN})1otf"q'&i!Ԍr\iѩSY IYYB-#)*HPIo1_abR%d _$l9{"难ҝ#fw_7 i*X/#%A9&ᡢ2,a\xoԇO$ J B D9)* }h;f!ya'(9`:<"&Y_!r]2q!cc!3<"tSN&]7TzLr-*& +A頥L1X)hp#zPB,CpU)*QOB B FF%5xqщ`}!Z(@ zϘV٘o=DʟѨAIP4fz*Rgb:"e?Dg I*\*4ѫQ q>"v^l֯" fCZgR ^R7> qjl kkL :jO !=|YX:k__ş/sz>tчmRQ$?~qA:V 0 X>?1͍쁱aP q)Or(Q԰J ^ޏi;#|!@B hPD^W0>$1aU T R$×IJ́,sbS(ODvRM>UTU^ŚUV]~VXe͞EVZk:8{h(F"-Ϻ scy7 4fBB <5MWhnUV+W ~h@0ſj[e[x*eAy^TҜFIgD)J\sSBAT2@ߟ;QHBcF^zݿ_|G] Dzͩ^ZL"x⨡/:i6\P=n#>bps;  9Ex.^*0:h"jڎP|‰JPj$&2)  DD2&C3M5dM7߄3N9焓$:hHɜj`9P"^ǹ(;Ds#B$>1S`(dT'MzR1gC ͘iS 2d@ G Ë ђI:6'/e) URꆚV&^)OiT)0:E7]ue]w߅ִ,rUl#c_bkd_5)qAgp/TE.vы_c,ItKH0!/ǚSŞq)JyS3 .eSE!TT@FeQBIAd~MgIG P&mO !29!'bQ8!O5!3q9ikCT/+D_*-]H`FL2Zֵֶ|L{r.jMpI%cxNfuJ эز!oeCd*>d?!҄ Lw A$WI:¯RBL 2nC΋c21TG:K šNޚM ^^"-A{6qE<⟎!x a]7hQeI  C<ʆ`) R(@9S%}DcȔQ 5vFFOIAnUsRށ%7ڇ8*pX79sCF8)T61]@0dWҗtݥ+V/=m!ūkZcSW;.%W9ľQP%\M]JI2/#ʱ S4%ig옝BlW$<#AL頒nR H@릔NÚwo~Ʃ lKg#Eɼ<-fX\A3-;J لOP8j5.HrsQ2lܜ#'u)qmv!L !eP:w!@6~w_{حRZgetsA8%C޾ S0`Z^i8(QKY( ʸ`wRs'Tck;DK%w7E6E(`r % z [6jZ*[DT= ,C2+># W0.؂*ăs轂AC|jw[PaxC[.+ϣ9։ %#J*,O{X # $$00$B9\GHD?r )|-:f>Pz${@C9ˉ㫊2CEZ?N L$)$UC >{ RcD09r4h# =tm<,UA' m4ā‰vtw6CG;l;dʪ@9 {,/ܸj GoEr‰XF; C6뛉k‰`)ܒEHōdž`G $"يGiH:;aCE2\etxʡ$ʢ,/8Z$PHɥx@ Rpt* ^+AhEP!i ɒ.TK8ǿ x|AǪB8(N ;n= :Ll+̕?ZHDM N4Eˁ؊,2:ğF8d@]B4SD #`8@ԔG_{X\ mB* Ąρ D#kuH Ȟ[- 0@5pFbN g)d&ucõt -ΟQXIOr4$Z,E+t QHּ뼶qY"3RZQ(l[RlS8n«ЦA]/pKKmxӖb4}}́0>'5SE}̉PͿ@|H`$<19PJDSHsl:xQ[Uɾ e"O@tE$Et#̌M9-SQZU- Rb#ɜ )ELm"L#M T~Wݤ%lT~^mAE-3՟0zJ(y]Òq ,ϗ̼ݚUT?UpU(҇%ӀW/MBUG阩ڨgJkApف+W%P%̪EڣWRIUڨP}͉Ia,v]X.MP mI@#=:5cTPVm͏=ӀEY%|mʉ+ué5EII$\JΥOv(.,)ͤ=+A yHYV 8Fx\^hVgK 7OTCf`ROɯ*ܩx\+n8p{*S)±0RUb: ,<`>懘;X3=W C42S> AFA4A)Ktk(SقC`C؂^|Cf? _l/<,5)p<kc/[N8!x`ʹ 3æ `)D)`\I%iҖ9H S l\^:.X.S֝LppV Rߗ۾vonߥȑ@4͗E'䣑@^y-+X C<9(/,E-j .")T88lM誂Ax8!eUXZX"BTr5P 1wA]eB+ ꗰ&27sH%2]\#W]*؂)hppN *x8G3D-) 7~))`). ږl>/ .4)qeKrP.PuPՐA^9*Lˊ{K)G,WC:/.';g tهj(Xa3q'w5Vp {Nug^v~8O u^r9I˛^a!bNU =+)F#.tM< `vS.wyXb2x !sae5h ޞ犏Pwӛ`;w ߌhrPz sl)8/nJ4a{QBu%ogk21[|mW'Y]Lr{M0xh\E c_K_O3="f_sᵭwow?Vx'B sX߿嗘oOF*U>h0 yFxP "{P,hF2l!Ć R(`W*V @aDR8$dHl W)!tiЀl @̆v4%hJC!Yh\Rj*֬Zr+ذbǒ-k,ڴjײm-ܸr|EeT=`0A.,IX顼$f548o)(Z@hSQ9X^u9@ [JCX+_VyS~9k9{9衋n֜7<:ꩫ:뭻:>;l; ?<<Ő퉩>髿>D^ߨ??V(< 2"`< 3 raDC*&,||&4)i/WH/&8)߽"Qkj!3u|g~ɑH)6<}r<(BЅ"׬ȑ )0(F9ʖ!\IΘё&e:?.})LcH{OUHeӝMlfKPhѧF=*RJC !#G ԩRVe )^!d'*X*ֱ)jC6n}+\R F F׽򵯡+Ixאmd~=,bXQ$1l@R] ̅$,hC+ў!CKJҲ}mHJW‘؄-ns"RkKBnMiEո}.tۃlV.v]"BQJ񒷼-}7K")|R Y!DATY,~0hۣ,yl3 OaK &>1i\,0.~1Ih_t461e3>1'_&F>2͇`(7N~2Y2V2}gM8^2S7f>3)i~3P 3^-B ,AІ>4E3ю~4#-ISҖ43MsӞ4C-QԦ>5SUծ~5c-YӺֶ5s]׾5-a>6e3~6-iS־6ms6-q>7ӭuf^E"[މp7Lo\?xb )Q8S\}y z0\8ȹg+b&#x {\[+2wys>T`3}NW;81 =^:ޚt@]Vj0d}['%0^pIUHٓ~a]WTcqQD;1ѵ}kwHߟp?L>D}~g0~/U@yɁ= ֿy0\mQE"0:*ү xQqQXBvHD&BH_LП J\,\E DBu^Ut աEm`H6> -Bh_Y`ܽDE" 8]BHe- L&] r C MB:]nXA^._CDa: Xd@HH6t"E >Fb&b*` D''E,X=yCB p _& bұa,b"YbX,6 UbD4Xa>56:-r.42@3J3B,Ң n;`D<<$f@*@Z C XBCBA.D, Xc/29:$B#DcF_YCXA&d/2dDcG6G>DdD#OERDE dCFr^$:D<$ TC>dSf^TVf M:C$#RX(DdI%U*ZBXcY>WN]W_&`\_>D`֡Z6[ `\a:Rr#A-($p-B:*[CdibeDf&mfg~\Ab.n$CdHLXl `v#CJf"fL]r$YCɦg _dfH'o "%" Ffթc[*18D"CgՁC܁օJJD~~6D[VbBs֧ `CܥGptYj6 K66z݇Y'^bgC,h5(C' *JiQ&*L09Z<%(.){B6BCe22DQrU`2BD[.K2cʨR⋶!iXl 8 ߫"jPB)-C6M]D@IYLbBD,l붪c:D}v6fB*($ըA\6BLkkbQFC#)"zviJƫ~ujCk+l9gFlkf+>U#6Dv,V[a/+-kJkS`,^,Ž0D%Dd͎!҂qY,,Ɇ Em$"*U,D_m!zmHx'Wv!ZnY+- Cdm4&,XĪ "-,7+-C^-."kNߊЯ.-C.ƒbV:XmDlHnunJ.f֪Y`biBb*nB.~ڐLT \Xn˚Ulc ؀//@  3 n4ob2iVg̖oN/\܊[씢сU`/ 4%-lmPl# lnYW0n3> '.#b҂ W0ѐj,[N.UtVU~'?ZCnDp[0,-p"q# Ph6,C|1x.D?.qH5.7"iH4[1?zkqS@.RoF$0D>&ozrCoIjDhX,E=/D''b\,D 2- B"' r c3ZP(a2RCȀ t "CT C'>9NpChCp7Wr68BH(GN>Sb?bs:8CsJs 4="a\>36;w=+F;[ЪcʾqddB&"16?@oƂ%@ B` 0-B]e uPcbKKdLp4*f*B>:P],Z5VV';5N'vhMCu&HuҁgKtRFu岿uqH!B'eW.B Ā^L;GBb,c{k#l0km捶W酄cC6_ g[-D\bK^vXiì**@otP\:]a3՚U6q+qfng f6-hkEbgvC$^vusbt{'c|€ wPP.4f 05U7^/.-AO' iJxwiOr7W񦄅goPP ({xhAYτ\3c wwo/*6sb{483f˳?*'wX0%+y 9#E&l.;D[_#@6CԹhx d9-_z^&ddAC& @z?hw0a*:;Y\B$9-XBX@fVdB j溮oŧ:EW)sz{D^3/59?5d;O>;% [+, ^&ۻO;<<'/<7?uMV,>7ED%ꏔxqǑ'Wys9fQ*^cu\/콑,\mCW}{Ǘ?~}ߔPR"`!8oHڮ 1P 9A 1$-Sl;RbNA]k yDxy6ģ-Ǹ(Y"hy߁WX輔 y h0p儥^*:{)ZxYlo%%і~ZHzشP&4T> DUS( > ς%lL&栐M*BfBG$"8t4`X9''"IF.pX.MT(@:YSāe4c{((D/DbPGb}HA'O%A.R(H#!I.=#%IIFn)e^G "&T074y-qK].擖 izJ7R'AD[t3"7(VF}Q@08LUdsU̐vMqI/){DQN8@jhf3=gs2ꌡNwD g9-}. $?%ølv$aI@3М$1S'T**x)Fu sIQnA42[2)ꖋNTLMcSqՍTE5QGpA`HH 8`1+Ā7oN!ō"e5C^0)U2ФG긙16ӫ1c=_Wb ZTP56'+I:G;k`1Yq^!%Hd3TVDka{Um٘F[u mt]65oƅ1BRnە61epADn4\UAFp;Uf]B(Һ- h=dRC+BEgʟ Ux@",Up<`Pނn2@*8UzRpa mV5SdKK_!Yx8ĉ Rxa m}t!QJeJ ֔"d|Ar#(e\ re^LB"$E`MVH ר3Pd:B",Bx`Ģf /B(Gvb`k֚F @Ҵ ^O#`f-LA`XC$bO%#~gȧ D/ X, A o+h!V 0Kgn!υkHBst/ R H^Юo&m4:o j|Ƨ{(" mB`\0J<.TBb(.:BAvNQ n !kVbHBI 9B5ibU'N`o 1Ea (CK14>k~vʫBN#Q49rj/b'IBIn֋'f&l34j(z2p}*&s9ID$zu! `ah'Js# ~R1T/ j<[n T!n$r 8&6g7!D"u%zi'$Pv b e4oug>!MIrZr%~F@bte7btK99%j#UCWC{qaHPchA7t1d !i;QVjIa 'z6( QʍLL #5,m1LYvcw# *H:!g73 N%ZP_akw; v#:u%yU"eawO/CyKsE>H zaS++`Q@ F}ω3Fhia v$>'un0xz#T~uMqTbWo%]Z<% VUv~@Zp4["o"g16sI茗&#a48.u ( %T`$53imwiB^:0BF^&hlpz7"2+XY"%OOD]}#+c%nYbrBMKD\wo$؋muFP0.2&nGc5N˓;2y)g mfibWj5l7bjn8!}fT&ȓ[ՌoSv4Mq;leqR8.z#8{E*&XٜUs7C"-縀 r 9D)QlҶLKYZ="yIx&$p{rL]]eXp%(&$=[JMpK,Eoa7EU&ڑSE#jz!cFC:ܒ ` FO) QT!_8rД5B'҈aȤszzoʨ9&1'3~ (!MAy#(b|%f_ys; ":0s EѮ $8'&J--nڠWo6FqRhH=q5FJ&azǖyW{rVbW]SiaWU{&nx<6\|oր{)³|fay55s55z(VQ ;@:#D<)i$Pb?'4A^%?tZY0# |6a.@U"zu;#o^q-<)L ߒ 㲶 뼶͗]'HOH]zam%PdxBA6C"kh'V vܽ#c{K{&Fn|9X_M=bW\/}w<~U ?xu;B>]gWG|͍b- Ұ̅Ώ쾖bҸ _N:x7/#׻3{L֛& ю u[83]Y;?]&5q \ia? Bi6S[xZ%^a ZѺ=~(a ;    = B\)S-̛5'Uv7k:`g%ȖL⪍ YF|#!{& ׂ qS=b\Q*m}%r&$:*m9aĻ?>&p & ^y @k ll یRlσ0,$ܳmwR ,۷ާyUbݙ@[Bk- 1%sOݪgn#^]Bb ~%yŰ_ +'=MJҬ.<9y%HM_˶h&d. ==@\h<0BZ $p! DU⡋ Pd E*!).2aRrl@%Jȼ8b (Ja P,p1D:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} i.S :( X}la .U:t &\p#'tI(:Ɉ"(XC |- ß_vҥS]ˬbF.mY!Ʌ} Ө0VvTw^D?$J53bd`H`` .`>Tp1!x[t P t!^|H\Y=DɇUA ~mr$wRxfP( U4 JiBHG9tZJɥ#ASM7. tѥdCHefD]E=E@UAGT@B}~홐EHi^ini~ jH\H$^0B )Q@"xQ"'D$p$)e I9P)%BU(m @d7Ħ@*e I&EE @)(9dt ģBjRT z]T(lS9м.%j"Lr&r*2\B!, H!J(p!&P#[nXt%PАCF)D^A UܸyFvYE^4&JƑ]mpˢv 5 @ =PgTڤSK5( G(Uf.-zꪯz뮿x$UJ9-XE(g+@FMA`/GUP(\tT6 e .vQ=qt0[_B8&C+ ]Dt>By)]I*Cp,l _n. 0., @+[E;KD0HN(=~^Vv*/"b k_D؏b Qs"Ž1k$Q!Sx|)!88,p wTu?1 ? Pr,)O=@ !vL P@sA '"z;J:Z2OŃyV"b=qA/q*z #iƿ0Op(L=@vĂ !7]DF&-Ct"+gMBaCʆʈJtE/Qj T3Cp < )yx-%KyWqNC"q&9@s'-ި9GNEO tSH 0=:'*"yJiP ]3xI5"$$TJI"⛄&$YBɌ*vmc Y (ASٳT MHƮ'sj1iSdTy"T*'uFDUb.u!J/;(SH,) A JP"EY2mbI "w@0Ԣ䩪y7SM:krw ෼bS!pZ+CF|UUEPIwl -{5O׼' n75p !u:lԫQhHVJG.TZ=p,¯HQ @IoUWxAQHa-*yG *H4` @ zo.ʤ?%ښ &r~Rg蓗Lmz:dxqB*vڦ0.Ku:>[ܦA}U"232P]SAal&n4M lk{u P L )*GDW\hY83 yeL2w815BP}Y7dȎi㟾qMpy6xJ m!5Svz{,o_sF97t 4FgS|_ GRj6Mxa,)hbS5?RT\ةíTVGI갛k N"f[?-q ~?xăP!H<'ES$^H䈐B'uBxW^&kuгU&p;]֟b糶BO彩 @μb0 v/d|/Z#å܄[-rs|J2>g[Ǐ&HυNN~oB @X07| 0m' 6aWkEF]S%8P_p.aRW +!rReqE W7 2U4Χ@Sps'CHEhGx>H(p+=c_PPx1CaA*gow4LhgikȆ\m(sHuhwy(HpԇȈ舏rz#}2G3ȉ24(HB{Hhx)dJ-5(H,Fȋ苿1? ʘɸp(dTBE/*(эߨḍ爎阉Wj褎0 ,@, 1x} yҏW4IWc9hy@*(!X}6+/ )ّ % WVw0VkEN gf(1X r Mؓ H9`Jи2I:C9FUiZ|DuId  ( BHNqߘ2`J<@.2z p)9o9rٕɆTk j0i~ (fjy psY( 5ȗr Y7ٙf8p:Dc) (丛ɖrDh'cIrPQxL5:3``75 kmI <p@޸% *0Oaɠ$BRn _W0xJ I2aE؟*$Sp 9 3Rʡ9;Z@qMqC-:2;0v *7ʣSJUzz0<XJZJ` y0v 7! z0y kڦT wzw} x`*dj]* bWc uPvw}J :z  yy)A*ls8)y5y}p zD uzYJJuez1jjjj2JJy xzX?ZY:.Y6pj2!j[./Ц:5v qp QۑK +` Zy #[ !Y@ u@I_eN: 1+ʞyʉ8갣 Qx(tpLK N`mo)0/rKt  PpY G;KU*۸^+~z}yU000)ȹ*๠+ v;VV+d7I KМyZpٵѰ94`pp+K B(q䘾` ջ'J ;"A Iѫ{x  .0!+z|zI *zU ךKHKJۺ $+skL ! .l8\MO L@,pƌP ʡ,aL] s {\ZV ;9Gl˸ a,ĴØ\ʉ( L6 {0w{X ul۹tM@m2|ؚ[qޘӔ ʌ[לe| ՛@ި`*Ah !뼅l{Ë* Xu S͸ÌL)LB,mum!؋ ڍ ӧک{̏ {=۔M K޸* QauٜM M8`۸HJ2DK |ߘ}޽ yMފ,l 1OmDk\&R:L |-+ߪm.; |3 #^qZLJ R!ݛ `}8K ;m Ĵ,>A QLj˞V6F*@JL=w}ɶ21}HyƄ}f zPYp~ML¦\yצ\Jͮ ~o^舞ND>FB~x PW#ޣ:N[>Sa\X¿燽 = Aa., ~ߘ9̶NSʻz箜e T'Z̘N: SqxhؾH--![ 뢎}䵎Ժ>^&{U1_!QaMsS$n7ߠ<:4CPt8I jn 8|L.ȈHTc3NֳIJ!;Dɮk~cIL3;=fH[z#0UJ1%O@tPB 5PDUtQFŲbzԠHc#LXzei&OYuQrӠ;KN.(ӎ6]Q-B j@ ]mJ6̱OZ=H+"`ӎTȾ<Z%=6rUU,X]r D  Jw_~_x` K aΫ\`i:: 8b2ӹNۈ9 e%bʕ7^rHrv^U^h(Ɓj%uD,2 z_0^ !DHS_=%r7L6n{oowJ{p!;ZDibGLyr%;uU@#K0tk8t n";bD6r!X,\,zfen2ٍfH$L(",:"}(xZ7ayE2G*_RY<2:{X݊1*﷢A|D"$k*@FP`-AY-&4_XV`dЄkK r0L.H ΎX &B񙱔sPD((j}ZLv[9"YR&, & dF])U7/^PscxG92 Dd֩;QğX h 2TQR h겓V$alYe˚+eiK]R4\BӃT/Al+-E;*D*` 1HS4yZYNTI2E9ТyQd 1+ʝX:eT l\D|eAD<| J 0p3*SfVlg=  AFLA2!jЀW@,Aھ-o} \em\F7Mj["-v.Apw'eIpf!l މnlqРXmR̋^w_Kۺu tۃ9#m1r&x",dզLDe{e9%`BZx"?c YC&rxWYtEfrd(GYSrr'MVre0Yc&^QBP%gf8Yglgw!ܷP\?'ZxAЧ8ъt-@ӚYiMW;u]jXZւ4;mOZԳWAjzӬu}ld'[o]\ozF7 [Ħvmp[t[jqښ6[ n[werBp.S6xpG7L 7۽s\#'yM.0@` _um~s\JKr 3TKgzӝ%@^NtVzֽuRg }u]/[v׽SBs{ڥ}wn2A'^z; h:R8\6yЇ^"w,WKyM^}]z\[aa}Z\e@'~OiC[Iz'~(o3 O-qY_x]P~Bo%Hr~K?3W.QM@@?+ < cb#T< t Ch)/`.p* Rl)4 /BC @x%A)? E- .´%|"Xø EC?>FxM{‰>HDDEGhMx>5H6`@GdāpDEDEE$EZ0DDJJ4U\F|DX\5C?Eb$F7td C(bܷPP@8´f ä`F.ä mFbƳXbFxmWX/؂.8LC eg/ce~P.8h`eEGZz|}Uؤ<Je V8Fi601868dZHiD 胗m ~JJ6vʢ~ʤiٜ Sp5x>B._8i viXjhvʤ~ R{xIdXx\kfp`W^fH:/;-bxe岠V$ݶ54մ.L__lp& _$D&eS Zbmpq-lP_g>~ nn0ྥ05=dXp.n6sTʹVE/ԬsQ5rd.?G =o]%JΥ$|K8m,5fp>.OVh dԜ5]t(|vZWvw hNNo_3=5oxOlw }{7\~u3ʖwH]Xu hdgJ5 x ho}Z|}|}5h G0їx~(}LjJ_H]xy`=ځS=l;Awܵ.>W,h%) 2ABȥ!.bDIqx]( 9p$*_d04@@ 4D@W/P|qǗU(.X&LBnu+׮^ +v,ٲfϢ `([i>hVDrFFCNlȨj \ l.@7zj6kX4M/6֠A@DEpD̛; Yߚ9"$). m׮-R\$"@_}sx4Nɡϯ?8PENAN*!}/te_IA!"@UPRqQUe(T%SUM]u(aU4uQFUQC A%q#UY5Q@5L9tJ DJK/XD@X`Uw♧{ Z  @6+\V m*P <@EfʊaJEQ!@v5 =P)z\}Zf@b6)mbfim@tl]ٯٰ}rfRfBTDdi$i"G&mHuR ,iF;m BoU3JUtd'#\'9`Cx` 0y/Bd_eHFRD9ЉuҨ(֦FL} uQ-FEQL^tUjKc *L2vC]/MwD[Ҫr_ԠA;{E(S^cR g/@I -P%+5Gp*G8-Bt к@ = |aDͼ#k,-@/IoEig@i%?>DIKO}}B$ɾ{Yh50L% x =ЀO! "R>\QPCjի:}ޔ7WbVH@m6|ɲ75 [M Ջ.7c,7FhTjj&@LAleH*:ymf1f##'yXZv3&h۟vӲ-m:eUZ*Wx;*R"4ƌ6䈔IX4H4FѼ%DR-^$="G[kHTnB0yZxqtZ%ZS}iq4D!Pj:պ6 ^0Lm"SXBV䬗lAVPr\J\++Zb@81Mu L.2Ynı@2he LیTr5@ ^dK':O;kA&rIdz3rې-Pt.%^4MCS+ME.^5WjH*REt 04-h_.UyՖ^Yh+Rq_/z0%ȩPl`H9G䋴3\Gqp[a P.)7J ύc;+i îq %̬n;"d\3"@&z5+O'_9e&"JUoE[%iD2niZj3HR75n1KURmL*ޝm}Ӌ7lȥgU2iDg6]."!Q]ĄRl`IP"2"DZE~EVY(&!D5MNO.FbT@*V+VIWT-Pbv/XHT)2r`%eXЫEAjqG4)i#^xfx@hgyӚEaZE`Q2fc*BDd E+]&@fjfr&gj@&Eש]&!Ԕ*W&HEhUֵGdD@BDLE @g*gg'DWcԘIN%)rbgfT)ҝc%ZnR"O/WAF[1{>Sy`]@4 hXph@JB\RFhP%!DhiVΐ.F-MMM,!JWD~fp%{GY<%#4gD]ZYb~ *#jt0(zSfF DB!!:'*D-læiZ[|D`(DLN@^ÉKHBA\I2|fɈcEX*GLy,J ҂>DPfd@,lHV,Xl^U İr@PBiBNbtSEWҔx"lQܜ,휬uB])-(VDX[Nhن" ͮkfW@٪e,]\!z* )TuDHA/+B[! #.n漆e iHDj\,82!E*iLBH$( o/ *qP$Bc]fB%/ FP$p\҂B /NlqE0"--mueṺ_MRorDd|Otn|0"+Gf@\VT PI t`q'Y&,CS([ Yq-XENQ#- $aޣ-n%2YB8VB-lElkD`G;Y<zp7F\@%^}^fF%G%G(XF q/p"* %&(k&kF+ VfԢ:D3+kBGZR[QKF]qWWEGsH!M; EJ/4!Bl"\6eYEF FF)2td鬱?E#cSkH#О Gp\n'GݳL2BMrHHY++)T!iD@ZPKKIW!tUS0hr;mqRkDjLkD|T5P )XT@7(JǞfױdqYfD֨ EE7EcUk@ `TTCGD@S6%EX{GaR)kqh`e32*2-SF&5U/'TLCP\BuD@)+Dqr!9_;o{_@.@M^mfIIQ!ͅ@XQtgu)ަߒEĨlEyx)]n5-X$+5s{6{ DN Z۴ csģQGyVP|B!TDZEvDk%~+pio%ySR5iPAtrE2oDLnشJ|fsEq9rkwj7DPuwG+sĘYlאI ۖ|aVkWNN :NN3Q DlV,Le8E T3cC9.`0i꼸 X ܽ0 7S@Hß$(PjZ(4@LA~>?@M(@HAtAo/(@8"w)(z #AȋbB|;GHHKD|+5q&S|O_D$A xL̇%|e]# |֛@ʳüCz[`|V㳎kFDf1XWMW.ģ IkT>X O%ی4Dz5q:zD8"ӂVY(kQ,X_;4?ZVE;~}}!;c6CfV#@:4+3_[Ŕ£4853m½"^J@) <"@PɑDHL ]\ ΋d 5ziRK6ujTSVK֬TDXjX5 {-U)(u{ r}za{ˑJM$qbŋ7V@+$W^Z~aI `(ja*x#d9rZfh vEIEG|+LZ%Ũ?x^M3pQP]P蛡E,O"*8O3s|B#NR7 5 lç>KGB|(:; 6jj! pu-Z!:3C "%#P  Z0*.2"osH(݌z%>h3Z#/hԮW$*-" !ЬhBEDNp 6=RHD,+sLm3%\WI"^Eh!@+<Za @Zhݖ" s2I-*W=k_2ܩ`l؋$=ʜR(=_{H_  ԨRl Rv`0LnU ӡP EhP%hN8&jޝ$%XсdeO괥Zbf/V -'.#]DIQ-QB1F*T $rK $T΅za9&Exυ"UJI !dG4҂{x)GQr$7[:9dĕB$YNsT:M\"R"kdhH g%!$NhI!^O@) TPB2Ė੠`C|'"I2äJ33r!ٺ$12dMrfHDGC8PZTIU S'CUSfj.j56^*[*Vqⅹ)`_hP|u")UZP\P€4]MU0Lhi{*R&I(p$9]li[[n PmULxJ& f@@i ÍTgB28`ni!Jf$`v{h6-M`T/NA@] H N\@z)\a _ !k*p*X"P"Sc!RRA E߲EyqaP:e<\d#IV%?9)l(\e+_YYdry9\f3i?5WYo\g;۲l|8Ё ]hC?vB>mhG?ґs{8Qz9iOeiRնr"8C}9BZz"jj^؍Y@RBG2Ϲs(DA< 哨y>%\wD?*TWJU^"Cm.~- 0D)bi 'XAYD!o./!o.G$D( ,P.0As96ss7,(Nq/A8I7o^t0!2T3DK>*B3OfB3-%oIB3!܊B`-]44!ˎBq" DS}!H2"jސ %D"`9yGiH?J"Kb9--bF!&G;O@+Q(T.!tY*"GeK>%)pI`qBUQՑ$7( |!8R!PKM4k X)4^!ZB4,Z"q"'"nh"t. @Y*bH!7i8oh2`II;EWb 1!pU.WIDCW b *!L!MXMqN>35YbY-B[[G%nD`V`Q[R<RS o>8`B:bViØ(P !bFdBq6!S"Pt*~۳;H aո=66(ߝ{^ԃ!G2 !z"_}jEGy DI"Iij!V!>g!IG~1&6?`TcBq(UN>ʆ%NvzV]H' a'n@U(f3-"Sz+)h=:N/‹I9Mw"C߈Z_5 j_!)32)tDoo!kv 8 $P :$ET,H FC@ɓ!@XrASXфL}6ʺ0'+dѣ (Uz"ҧPZ*T57nq>7/BU&Ѕ6e٘e΅;}u F`tR LÈ+^̸ǐ#KL˘3k̹ϠCF*Ev9FHU@rc `rFHF[$RC#|{vmX=ݏS'8ꕗ l9-*2)xIaYLqc-L1,p'ATF&BpG E,K^d U"bW}P7EЁ,%`BF5$Owz6PF)TViXf\vea9t key"IAp@j( ؇P IG!bnoќ:tfDmTF@jEu!B9K.8L%ptMB A!mBS>ҡ"tS:T&J,T±7Ѫ*U*d`]4zP`OP_+k覫`a"tԑgRo*)D @E.mgsEGA pKLG)#jl!wS1=De,KgX-B%UMVD]4I&K)A 4Z=CE^O5v`-dmg{QSc-t{䅞iP5GQ t@Z&!iYL!JLAo@jz, 2?UVU%HkA(54FԆFkH{d}S\Qi1w/䗏PlZu %pH&{S&(BȺ#?B: "{q$s 5#BPRm!bFX ":5 Ee2e*JIWCYHXbY3 %W4,f8J\Xx*8!XI&hL6Vz+P8Є?yMx4p= J!BrRȤ/hR \4 &59? %G wIep 0+*7…Ә )N>jb!ja-Wf5!IAJ%7ie^B,AJ"x):im$XYMTd@j2$8d'Mc} HGJҒdssw-0LgSN_D s& QeHKMMOBƏ(C%JժZXͪV.xիTbSB ХCHY䔩HSOu2VTdTi^˽Mb&EMcLKѴ|^[O fdbJq䩍M_ 籣4 *Tc# @ p9X5mpglZFRPR=!IXKXw L+H%!'4]c@_bl^kj"')njpYkD*wIH&4 +5/m;l+a5g0B"{Ywg@e@c\wܫl("٪HH.1[X2/ #x.3hk2hN棂lB[)Dxγ>Ϝys6 1uF;ѐA#5wv+{vҠGMRbK*`"հgMŢ:lm]0 Zۍ' f;Ўvhn 6zI JMPkbԐh#.Mzۻ}7tNYzݽ}#%+.'NX#HZ<'] ,Nh~# /"yBn>8ϹK Cl>_D,vѼ|6߹җU\B(b;{`_ϫp\pEPg[zNYD. *>߫c B+RŃ(^D10'#Ux߷pcüaQ*GLa V'3S Ab =?;~!`^؂CC .x? 1BRHaqEr/!]Aq/}o {& =wI]`$Xudhx^`S=ebHUA!:]`鱁5PwW&Pz]ЗJU'tpw^~>p1w 8(]ЅڑN%AVc(v@ d\q^r${i%:mG?t3ijF9@!im!fW({&cqAf(HHR=ȄXeQxWN8&=jbA"Pmj&q=ae |GdT&xh((f+Ux/XW9S&v(HgYeR`Qja. ٗB1 7}H Ў!`V)7ejf2FዺH!q!?.&=x ),X(ᐑl'QB) &&ɏNPy[QHzXxGy{8 0 \yq ~ 琉]H ppy SGҖoI'_Hi"IȒr(q=7zZ| tF9 1ٓF [ ЈxH8 Ѕm8UIRqyƹ]@Bg1 |I 'mU`Ip3ribs8? [Y89%bV4thFc=`S`ZyKT0_X„7%L3_q9=dR ?HaIRēaq( 8yhen 1 T8FzHJ6p^UP QgwV9 AuQ .`w:YCa"[('}0Xn@hG"SkWĘ8xJ i P"{ FA(7`TИ 29b&.$=Bn!1~z^q$z6SIvGi*BZ \@/j"T&5=1z:r&g>[j]zc kk?є`0;t[B Kp{ZU*Y%ҷw1QXi9zXym =:||㊍Htaq''ʶjx1(Q!Q\:D;dCkۼ$W) P0Qak[U}KX(Q\ `Zh onT0?:& [{zGhk{ĺZ&ky"<rK `ݑ?x Lʳ ,Fؾ(&m4Kc 9ŭ['&! F"E1?+x(9qKr0]͇btLF1MmÍ-)ͭ} Q}8&U}L˪C'SݪBxۺ}Q=#]YS`ȝ\F"]lAp,j-%sCd%d"/&qSK Gmm R.S *K qʥ^>_SPgK,/]Bˍ`qvʌ l57ޒ[ <ݗd=V'&}S>w ;H ɤ(Ԥ@OyIi~A0LGAhw~b]X^sd"!bΙaݭ9N(^Nwz7ף筜;#i^sG˵۬.֮-ʾ(=Q!liA$r'Pʥt/tUNNR>pr-~n?=qb6⇑CB=wA AOQ\"av%rs]50ǁci Ln~qE-m1+g޿O /[>ttdOJ#H TH;[Pɤ^>uT POr͖!=b޸ntx,~t1aGa_XX-ߖ_ k񳿞E  .]l1DF=~d%KvыɒRRrd @HC19$K*)tJLWTS,L*͔2K^ʫ֊i  I=[lt-DG$DOD1EWdE_1FgL1.0BB @`X؂ 亨WB”k)D$3;p3)1^2,K)J,@|iBo.42b$ _bΤ'iSO?5TQG%TSOE5UU1c)jc Ncv3. <9q2KR|RLzE@ӤH!{2L3$=YJ' Y <SZNx/EbףISR*=dUfa8b'b_Y .Hah@p낊5EbMN,S{;%tZRuYz,\- {Cv7%xK*УsYJ^Kѐ'NiEk_$n;oo1dX@ . eWB9 )-*͊}J搖=EY:p9}Tnm$&`L>2;lM;% YB>try{?|'|_xK*`$^! ]y o9|J.GBqfDKt6Ƿ(H}zGdȆtȓ'䁗HKȃ9DY QЃ9Lƒ $I| UIBIɜɷȍȏLJLTH<<ə= Q;;؃nAW<=JIH 'ɔ@Jdʲ ˱ˇ˿L'4JL,`DX,PH~tAF^ŏL'LZh RtAL| FX| LFjLAtFK`ʬD jZ9LAȃhMF|͏hKNL͔PNtN4DOQ'|XOlOȄN̂EO D͏ PUH@TBIJ}SETFMVEAWT"X0U P'Ȃs7m8 ZS[S =TS0T UFV 5ЏV#@΍PV:e֍؃huAO5QNHVqUyz-<̐W UBā9@L=L+W}NeXFHIONdeSMEA͌}ǗVNVā+ЁDUL--cU;uB,ZH:hXPNԕX5Y@YZȄTOZٚeDզ}ڨ]H{U۵e8Sُx[[ː ΎL9p8PtXXʘ۬E6M ƥ۔[[Nl<}Vu}u%mW'X'$͎\ڎXD VxuеMO܈U݈MAUS'4UtBZMAeڝm蝌U^^؍HZ:uAjmՃuŠe5B$Vuº^^Z+MMD؁FV^ZXXtĎVUH@x`pP]RߐPȜx`` a0aHWv N X}DH#NXHP$Nm_ߩ0]>Հ^luBv!-㎀UN,Џ8R)FP|-fagM0au&BrU@ UЃ:Ȃ2툍]]WMXe-̯mܜ,Gb:bHP,pŒ55+pBu,UHTU9^uɩEeI^haeecNN5lTZtϤcZ|Ǎu܎pIt| M+EAv4%g:h}HM1peu5fmLq.dg~ FNtd&igXN=u”g7uƮ oZinn HP"-EAnlh8 iw wնqcG1m`knXMPpR " M\dV3`ig7p*_rrL:1HQxވ!A =ʠj5b^A ,g- f-:RYXqt6wE Ntu[.}](_9pj[ Xb/% mpaq l? =y[07K7٥DEKoie_Qnops(~Co'LqZ}GLE$gxý nL(+MUOx _NA5VHLdK/[wl爓tT聐fytygĸMUWo (FXFyG z\Gu>ʰ{ $J8nN_dFj+.r '{Ox2YG|g@Иu SbՏDƀ|sVæKX{rWІ}>Zsh} u}w7?@( N@0UsFdUD̸Ӳ|PXw%|[Now[mO &|DZ,h „ 2l!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gENt̩bWW|jc ӨK:*5$&*(kL~54Қ23B8_U(lГ0Oj5{Ua"`] j'Sl2̚7s3ТG.m: %&8:d=qvI4h\#޿/~ BdmXq9'uy'y9d&/g 螅R*(P(j):jT0.R2@\#+R{ lȒʲ ,4:-G-"˪ŹA Q(//n^[ ;0K<[^p!)'n&4/x/z2-21$22"#D2&2*<4E}4҉nl3:ij%-tYk5]{6{4RDªb5m6qt] ˰}7I0i+8;8u!r.x|oY,9饛~E@"^){ ;#zyȲ"}칖ʮK?=%m*k>V3B_ѡ,7"od/v'nfx@(W@^T)Ӿwj]G.t}RU 48YpU zV}y1N0`J (7P?!/o\T>ЉYh$ U+$,F5b Xc1$I-Da4±yؙY,4C2ҐaAQ{RarXK[$;#uIAI(t% RW2%b!Yr-*-! ϴ/_ì 4 Jh$ Ҽf4KR gB(oTɊS* .P B.CTB -b*<B>R):^B?ad[x"Cl\H'B~N,(G0:TqsWAO|!T"0ܳ H( v$EHNwvt< ` >) (#ن$d0i9DSHUiyUXҤfFln&T (x ~Հn_! [ #2@^uR,`mׅ,HTU҅X֯HHf6՚b"ѪJFHKY.xUBW"$M 6XE!T.൩ qꪶ!Pq,}! PP"kZ.| ׽~$ĕ &@LLI`5k*-r0-1, Ӓ×A\Zӕ3^`QT2 $-oC1ц@vBsԃ0Hv d(d[&Cd d-z,##Y-]~yR ,)\*dYhoSEݱd ۝^Ao42JND(0Aj耇-o(\):;T]噻->ʨZ4@B0[$%L\L@(@0 ,Λ@@8@ܘӿ1:پ,@$\Y@ @,Bv9D@RY^ z5$ڲ@-˩J~ Q4 %ыB ^ 4@ @_ha&_eV% )0)8%Q%%#<CB$&,\%A0*bA-h"'zCPB$* +8tbH0+B"..*D+RA2D!! D""ZHPD)TB!4B5Dc!c%BDR##(@cCUlMaM0a(@d d5La ,@AY!Xa`AlQPJBAbd?DҝW :C($^LANJIATYiV M f] C^f\m@tDxM2d"p%\!.1JP -@K4A,BA$$Ď D.B !?&Dc>&dBI$fx%DВ +(X@0R6DWalf}_B&d A"mfDf0Ml"m^cA+- F*T+mAq&APB0@B+A+u@|&-&7JSDD%8A]S9^S9*D#0}^@AD%Bd"}iA` DzD`oѦ ]}1@Mʚ©`lE+Nz^ʬY"C4BHNl mZ"Jz2DX@21!ߛ0 DIPpsR D羒_wpL@ij*AlBiF@ h+$, 9s0@s0%Ђ)AH1Ӓ@<uZccp@4tA4-MqsA+AAT3\@d+m ,|A(x>"7<5ZWmhSQO4)M#ca_" e)w@"DhtL!@PF,HB<7BCA^<hS49i d #C8. & 8D&tdY ŸX#<'GfN!`5QPy۩"F)dM4it'U0iE Mu"FN7 !VbOJq#>_-E5jt> )+OzI (œɁ>~@y.QkMf!qk9Ie)$R@H^*(2(M<% 0~& ȕp%=sRnSH|O·,mB'#b_ ""#0AN :R `%ŊP2(7 ҏq ɲlqQP3zgvBtb@.B!Ll,#r ± q)Hgqkt߱ Jj iO9h2S+(,e3vH#O#5O^bD [F\Ra "b y!j  ;x( JNd@A)Ub=hNBn63ΒDj!4 "qu+..sk>yb3"0u36 Bo.("3v!S3Q/)e7,-ia "3wKm!9/B)"()?gjH <"$č71/~s Ea\!@F7K2 \0Y#|JiALL"q)S!F:`Oi!Se BF>$ r'H%5S!i M p5N G?B C3SѬ&ʯ4O)ޤV8S5im' tTFi 2C*!uCK!n"&[%X(A4 @DpJ49b@ C.nR^ 3 b@<:]ID ª 6C"FD]óR$hLHE:= NEe \`"[}* &3rS (R` BGr![q,", "UCK > g igeR)n)>7piggFoc1o-0(f-!)pZ6qK&UĎ# <R@ Ġs@<׮Fa!r?@>`~bڀ Fsˠ DsQW OW!$ D@J@ ΠwF b jW_wwxx"C8m|t9iV!@ T"(J}-w:@@}| РH 7/{Bk7)(hMRsj b5?u/tµ!iq+k"64W!d+1BFmV!NSB/вBXU lb^t!!)A  YΊ N<& )֌xgHQmX v,V(4.I AR#kGh qV&l9tZqQфW '7|9Ԃr,X=9x(܈[T3x$l ёIҖ DBÆY֘9IH /?HB'STtb mB tbUW eBGySX V) ⦎iAG3x ~E PNk)DEgb˔9H{2.^,CA뒣8$a7;NcIR"*se:I΃T= <:Y ΑFwIѢҜ'Kx-!ή2o':ّ⦓bRt^44ЪBۑ9ڕݱ'" Z HAzأu@;?Lt~zCA` p=;9چYX,,8Y6[ù3HٍVAMN!22TؚYZV0L9Y ,cxmԤVUitEv 8CEZX,f{ >CÚ/B hеqX˺; 4;q{(䎮o!NSvj떛ʼnBI%k:9Qyã%SFE iq;9+`E0k "Z%CˌMTC Hk \['|+%9 N<8<̵՜K9TG|)x-I' R1|4$ip{ 9wU;gPqHeی!l%.y"z b`wqf"ά Q @Q;۽M AXtn &Zؕ}gJ`u=ڥ= h "=xjn"X !!X ! :A|[ՄZlyQ/s O<19)|/'Z%]F[`sOyj Ba&(\} I \C }艾λ: bиo%ܵj˗kkZD{ };!e8a8!H֝)'lPh!q=&ZtícB/ɢ~)-17 $?:~M1#8I@a0M@HC=ImHX:xf@`Baۺ} 7ܹtڽ7޽| 8 >8Ō;~ 92CDOnaX VIKQQZ6s8t/73oqс HI$@4U @HJDGucf4%݀T P^H@&F(p&PEZ.h> iNJi^i&r1rH~H # +,^,2s"kk lKll.l> mNKm^mnm~ nKn枋nn oKoދoo pLpp /p? qOLq_qoq r"Lr&r*r. s2Ls6ߌs:s> tBMtFtJ/tN? uROMuV_uZou^ vbMvfvjvn wrMwvߍwzw~ xNxx/x?yONy_yoyz袏Nz馟zꪯz뮿{N{ߎ{{|O||/|?}OO}_}o}~O~柏~~Oߏ p,` &GlX-&AAl$, ƒ,l B. jpP BՄD,;CH$?<ſ$1/ 0x,j.SKLr-qdHDY8zvYCp!kH=:ڥ JbPF@Bnhd#mHG&B <c%R|I(G=|r{$8 Op`*Y򖹼+K2v,e9L*HJgk+ 2SWflLE.!Ia+ltHLD/m檛 \* E PIt P"tE?9Aa~3 EBMڡL@(Gv.LZe:2 Rh,B4B4Cl0*NP4BR**-ZRT3չ!~5G{B0:a!J$]_PV$ ``[BB-it+ʅ8d&P.l%y|5PBEжVP,-]kgv!ag(rE #۔ 2Vh aDvJ ăHJh yQU?Ct݁$1MI@|2 D0B; bbT 0;t^dZz3/x7a ܋&hnSc*^tLLȨraDa<Ȅ," =!#)WY W*{2$`Bʌf0Jfa|x @sGD;{E,慐>W(4`MHb,u#bi@9zظ+8bh -4pIvרԵ``XPHaT@0+Ylf.(JQir Jf&9B*bՎ2qxBl ׶ޗ"Ta֍5#E+ .ҝo;0S vNX=2 )r)!yc1ѹyn f@$1G`[,F,Ԡ:N$[+87C>l{{HrNu\%ȾQ)32@t>JdEj ͣCyEK0{D ,b&{1KDZoo\L*uQZ""|:KSy(K0έχ^{IB$2ؽ R903 !(\zU*I ΐ$ "Ew)Se,~( ťb>vĎEC7T;Cv'J0*{zs̤ݵnwHG (M^Guf4J.mG/wAy}W}&xw ႆ} h0HG?HDǂS ԀI`sHn |'hrWoa8ru+hvQv{anx|&u @ PdF :LDyxM8/"wCghai_DY!%qh~UzU]̄~MT qrL5tVHZȆztogʨ(JH8RunF7Jw{aw2r&'~GAb8]@IA4oXO'a{qHD;Ljw%PMHWNjOh[v1Гst1v .WA qb)"F 6r _XyH}J4{L; nJpX^3 Aw {u(Hxv9na8^|(-"tL(Laǖb~FI8x "76Qi1rѕ5yLؙI*@IuW`z1^œʉm$&JIljTHq&uPsXpP` `(Ymqƍ.Qyq[wkvX Q hHx]I=;chHsd( 8V^se&]f,9JW0q&^9Jyo"Iu/u*>%oŠQjyC ÕrEg9 yBgeZy0;WٹI va7G GI#؆qg697Jg92ѥ gp' =W"1"qT3~a kʦ  n*YXLIYsXh1pFR񣻇S)Jhy K*_!aA_qʮʮ Q0:3֘Z6J0P)ZJ.*J̧*0A8T{+n>J1`#K%K=:ZXJ IzA`Sz 1cM AsQA_5- 3JyJ mzV˰ta%9{*1sgpy'JPGr! &Y5T=\Gb) pG{+C"11嵹ΚtKϹP+j k[810*BN.x.j7W[{x C+wފ-s*Q+JI}+s!ZG|/y{܋ [x[%r)lv:ݒa?+ۏNj=˸" 3_ۅ~Xg( *heLEy$l;q}2CVLAL~aL\10Y[[(W6ۻJ2gj֨q{}H1 Q= x*x|\{+`!5Ȋ|np,džHH :lGV fzQՂhfi;TR~Q2^,j(M 'qAyWwIZ7XiN M!,gq)ӽNџ u 68h ?7B 1G$oG)~ `Ui~,1]@  % `U g'AR<5\P*^6E҃XPp{ܐnƫi?6c{'$}*]MD.W//0kXAx&.hY]o1$JoPƷ;^؋OՏ_%1T= _?Td]/OT%Yx pDq(EA.d(0Hņ8!IUa`  jhDt YM9uOA%ZQI.eSQNZUYnWaŎ%[(C"E'ǃ }Zh, e_&\aĉ/fcȑ%O\Y'܄5ogСE&]iԩUf-t@ֱeϦ]mܹuܘ'^qɕ/gsH$uٵs}wbw~yկ*ϧϼ{Y{~K}p^qOTpA{.S *qDK0qE[t&8(l "!@<04H$½)tI([?B.DeHCXGGiK1(.lH OsO>=iVŧ@̩P= OFN#?dO$ҞS(C1TTSmIbU?LA*HV.V4shW4{mYcN";$jZjAU*l !&nOU!0%p"GC"uc'|WUU` =n::GXj͊͌o2Zɦ]wzju) smz9]Yދ:w!m杋'AB[v'Hj ٸl'VnX nҩ0)l4Ǧl4϶duL坯m(AXWVV!ewpV3ל L"/6}tҕ"­W%&Xȇ['y 6NA 1kljnSV\opIbgsABRď݅Z5ؤ=z@٣yxѢ\JkeC(XDhAkh-pq-.$/Ĉ/@pAFgMs)0@ pbSU>\Dԉ$ğ<@p+K.Iʋ,fV*)s#RQUkE7"Hs(_ @:z2U]/ ĘHI  AB@B|)]= L)TfV,OZԃ I􃁘V jFO24DjML# Dh P0 y[%W$-˚((`wR @"0q6NП&uVeo{YЊ~90WjD!o+eUp{.A(oR<SR&}M. q<4Z]dKzVp2 ^X;|*_^$m= @ր& #υ<0F̣" =J?8J]47hDnMԼŴ%x9` y5"ʹ0DcD'ZыVB:b -P!>(VrT!6l MUȤTKiX2椔[ES޼\RΝ0B{=gcԣyBcCD{É 7au1& p|}mlg[$!BOa!xl2[).Qx[wc-A/A[ Rj 6l x Jߋ12ж=q;i+D=MvkJsM&wfx"y8F4|gyӝt7&oT[&5̿LVx"\9v+'=X)-Z59lk!2u'^!=Zpi C)1M7kVݾ~4֓ƛˋ*f;m{>2e.y[#Y\H ڷ΋-?Ru=!x=Tl?Zh}~AɁϐ/ r_C7_ 5F,j1= c)Ӕ?s=l>#@@\< >м?55ZRA3&6 \(<  ` @&lB'|BA* hڑ?pAВdjA# $(B!B ҮX%B=C>n{ދ4'HldABâCR ,å8C4 5Z~ XZ`7ÐȻj>R>EYEB¥L[ pBW1k3X"y9ŐD4DwŁx=L,kQƆ> 9jFZG~GG*%paE韛\ÜYR DFX)!x>XbZi@- [6ka:X8ɓu\IlI!bGpǤGpJ0G@IOɔS Fd 9AVг EB?Jҗ$芾VJJDA`@#̞0ʁ KlD,+pIKD x20D'YalikMt@ɔfˆloRqˁ$P|M،MTL(̣8LlLll \J3lLL k#ܙLkN2ͅi@N M#A MM<>Hʕ1G \m%lNFMd9OP I4X[ɀJ#|y̢ @\#pņ7"GT섺.l Q>N ]R&mRx@EZ  $1S2-S3%T* :vs \@82(8 #(@SOKJ?-T@@H"(%H;+<ҁЅB-T8]"8?NXStRQURH*u,12XShS&,U[U\5P^U Vh€tSUg}Vh Z-k{ ֡0V@}%VqWri- /hv+W fif9=,rW~W8 l mע`Z5X]XE &(؆C`WXX]X)"5XmY}YYYYYYYYY ZZ-Z=ZMZ]ZmZ}ZZZZZZZZZ [[=-ȚEA[õ-[ KXVW+*dB=[-\xE-ɐ ьǕU\ͽV`Śˍi\9(m]׵)q{Bm6.Q]/1])*̭LI40! ` ~%9p@Dvہ 1Z4euߋWYiPȥ]`1X[ef}TZ|PRmG󴉏鑐鑒>aI8[ aQx[i05!aVʸ(jY^b&ذ $!PQ]a0 +{b{0122:ʗ|bAIա5A,,Q/41N2DQdT~p:EI=HɨA\M^Z e\]cJIN"4[ixcedV %&fN–eoUZ^%b"'qr g8gZiPfafppgxy`Mso>hRexRS4Sp53J$J*Xx^TMp58285x&PiJJh36ㅀO$Z` nG2$dÉ63iO$阾i&$iꘆT63&mIhj6 3pJjv>|[KP& jEh@rB'.'D⑂ԅ50h5mx>f]X0B7 P 8F3[.NINja6cv'x.>kM&Fn嶲Ӣn{[paȴ&*پ nenf٦m([2n^ʨfX>9T) >q mBoJA м}^Sq/Qr!6 ^Py"nU6^n)wo$G%g큘01o&r&f9KognBLEl_48Lj@r f8+JףDi P;l+FqRO</֭CTsUR-)0ޔ"2GpkHdO7G2Ĥuh-C-Wfu- aoS maoLbOvc2d7[YY#;g=u`)w)Aw[@,aPju6qpġxl8/HRox; Iu80EO ozG -#6c/wHrPxoq'QeyGg/ywHh^{w~y@}j]\wnwyoL}G0b~C)Əwx9o82Zy貅pz.c>"14c5SP$g eSFZ03m4Yo?00תgtU{vav!C{'?w}җm 4ѿӧԗg}`afOCb,IsvO)o`T9AWp`z~{܏}}'bt3 Dk L`KB(q"Ŋ/b̨q#ǎ? )r$ɒ&OLr%˖._Œ)s&͚6o)E!]x.>*J!NixS1 KPu)Y4@C c g¢u`s Zᅬ(!jáEL+T*TԢai).܆y-#kh݁.7+Ăve]Sk֭xĩ*؂z0Ep_+Et s&q "_Ǐ c[MOT" 2ؠBRXB>R"",I@WP$54vEvQ-%frN9BT]ЏObVn ,zEd+ T U GՒX)dFRdA+zِYOEpJAYB o ,NsIOVsZ5YL: @BڅI~ )~T4 +ڪZ+&ġdw i%EGulTkA*ԗ '_T$BOJ%BSSۂIUUnC:%gAB/A:5/NиO ;PdJVHSQT%%E~>\D;xE@nڟB|:PP!!pIZl}3e hC8 ](CL>BE+?2"T,uя4")IK ^Bi,dE$f&up t N5@jTs4(򨒡5}l A )GM9r7HK},L`\ $F"0z/Y=B+vV4(zZSH}䖼C6!rO$֕{(pGqO`?_ūdlow_+07sS<4w|YGOk _]AA _ dQQ_Fa|h_D Op` ҠAJ_VXKYU!C]!9$`MLI0amЍODN6VD>NR`1,PQԅ`T_`I)`!!"b"(,B$FbJ) Y¡y_\썎Ďv+Hb$D@+$"v<(P.B"F׉dD&2#9q}5+.B,_aA` CO":c;+ B@/ D$A xxQA@|9@.A#-8B\@,$-lA\A*ȗCB΄v٣JHH$I$FAGFLHIJJz4Be$ANv5DA $B%AdNZATTFFHI$vdϴ AީZ-eBx;\e]t=D[XveHd1SK1dNhz臂K7DItnAB0@D2BK4&tAĴLtPOg@D(40P3ux&A?G#L7uU;5B8C\t6/U{e5T+BB4BtZue2B(@8J\u".B8B_]6B@7vc%#xA,5;ve[ecvfkfsvg{gvhhviivjjvkkvllvmmvnnvoowpD@!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 $$$+++444<<6B:F>G@JBOHPITMWPZS_Xc\f`jdmgnhqkvqys{u~y}•ŚƝȟʢ̦ΪЭӲնָؼھC H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞(H 3 NȓУسkν̖~0 |yD_Ͼ% Ͽ(w`~JW!6F(ᄅ0@* v (bPf -8,0x4BW%1$6 (o?B-܎-[F2"rR 8p%Um5E@(䔓&iOt& q?LeIsĭ1].;VD2mac(SzvBD\'2^+O9J5)~GJP,|S8޾i LKrGQdz`EekBTl`.;Ѿ ?I0HΆ" J 5 ]a,]I R H/Gf b"z8eH*f P,b}0pPt;PAeKZu0FGmLBEٳLtCDlʈźPLQ܈(QC+?':lއP0Lua "\,I(;6aOG̐<Њg1Zژ0T )rΉ"eDb]f }(8]JDJ.{*dYF=SX kˊ>IKi\*t_9#YH0A4KƤl5Zs"'Za,†KZ׬9y@[K$o,*Bt f$!pt#n[H@]rZBǯ,~@ݜ,&[i狚Ak_9† #f2֡ 4[GZ#1B̀ s,oB%`_<"Lsk DܐJ66~Ib@@@X҅m\Δ Rv"ʤIPšKI x }=1o8#]Nu-'u@ 0 X` L ``hW 9gz`!9lCb$LN8WrL؀D'00Fӄ }.afN4fv*Oy,@ >mhbx,Ŗ xÑ6$5.q`w)yF;9: PwCPOT՞9G@U{E0zs@1[bȱyhK$-gJ$!W 2O7†4s+4s$A,  <\Q}H} y^R: Cdw;Y}ymYCreXNs/z3}y;F, QAsGW~ x5G'f a~ΥgWqG4>!c{ Avh" '81}*f|wq'b:}ѱj$e2d "qx^G(%S%:gnɷ'ggn,KX&K>xD(c%Hf}UpDOXU! "Wx `|zH 14F ‡RVy8s8$(1av 8$ue*^G!cw2!6zPo(x!z 3!Gz'%lЅ Bta(xreV(՘ MX$({׆7Q%{ŏ=ՈWjra9cA<9 b-up7)uQgqJ!=8rk^/=ՋQ K(:1loMQbϑ블MEDuL>A'a w" 8XIؓaxxх:e46Wlh :!-A&ᔀqrx)Y~a1nxwzdȔ "$iX%*rn)֢QX#]YGJ^&@T7Xq(?9$8me Ng=ukh)29ACȉ"B3( (VI(tA8Dr#I1`vAiz|2I%'Ut'Q"jIُ:ЅYatsSI^ԍk8w Ѡ a!"gI@yN~"*s:@]+Y&9b)K"zV#j+ kh!W& %rB$č!汤 !^zaҡ Qi~%E}(C  F?y= Khwp7*vA9%tjj_1 y"fPIV$TS:$`6ؚ39!qQS*qZq(ֺwPÃdUvhB9 ڭᩯ:jО348:t&u&Yc+'ʦq.1'kSF̈_jR"/ A }Q2N!)ˣCre kRaj#eî$J[Z?{YA{SQ`:[V a'j\x"C+U' ~a/Eu;U)qY"'afe[U#FT\ ׯ\(§;G;Ip"W+x[`-X&EQbS }m ;$8a`j1yd\91r*ħ!Rnּ6JȤCKUOS F# ";*{"xƹ̚!j2.1% /|'1f<g+7ۋ l|"v8xYQ O|(Օ|xTJ[hٷfl[(] Xdz+1x‚ |$drP1V#;Ðz;;|- 蛽I$Ɣ7gėBz<OU\AYeZ/ZrF+XJsdZ 15(OWsX,|~;^B#9@VBL#k+sF$@l I#J\& z|< u bTj_ m$pa<܏ Q#04k +xD\k+ a1/T! EUP!v F6Ch\6G-:D"o[D#& e]|!'4ʤU;ѕɡƧZ [>i9s]$+|g+o) r1`>)26M1Y˩8LLŸ| 4Ÿ(M'x cʋ:4q hTlpM ^a@ {h&Ea\[&k0^A$/m[#/3`&U۪ 7.V4™]baK\#}76@)oJy>ҔgdQy)V/k4˷er&?;<-t AOCu̦ jD2R-;U_,aY˝[.ՉagY wSKZ7٩4ҚȝD3V0ň}A4R,qKjdT ]׏ϼN.ׁm/4_IV8pM@@"`P‚]B=1HHB0>< 0 1%" YR"KQȌȢ8Cܩ';Ɣh%O@ԍ&JJВ(*TUXe͞EVZmݾW\uśW^}-KqE>DW jz0{EUPm T8.i>@%25Q3N;o~htAIIG\}yb ede08 }/xzѲuo0@$@D0Aͥb2s)4>8,); 0Kj@('7*~C2#3ʡ(4(%iDt6,/Cxˀ(ǝ( 112K0'$krR&єpTQ&5]jq(K+ڔhOzB멅֫)4RI'RK/4SMC>BK,H6Ȳ@kA& ]Jm(3 PZ5dըHW:z`~<+0z"6S%R/\ձ:t W*Vh\iر݉W)u(d6p;ܗt{F^*cĽ"Q* $8*C +.DfM S#WYd]bd>sE~d8 A=ozKQxjWdXqR Ѵ˸-Sf9AL*(ÎH%ؚPȎvD Zc>AK+y7+|{2BN\r.#-7ȋb3 z)MrAj 8>v]pݸ],M?!ˢ|t nAk9b!FnϫKp2Ap^łt2f7<ho 6UCDE*K-|@֮S,Fɨd-T_=W`ouoY0m,\Im7χIj}  |rc'/)p/INE~'k'ǿp2# {y`#óh}SFP1rPX# ;'? L:+L++{]3{1/BҚ=68$,#{ ?69xć0ÿ* n9{íٺ(@;i@w? XYTdA?@+([+F$9JųłxEC?pB1 (|TmQX Xd 3&62s S:5t\4&a/?7JPF9,&JsX8O sj%ŖtɗI nd;qK?SL5#>CCxK+)U\(bz+J`GsCLF[JKB3< B?G/+f| 1* ^(^AY8ы)$2 {.KC˘\pK`LXd'Ĉ> D+3 c͎ ¤R$,X ~4㬹C!,IB K^xi, l̕i$䊤< HLT8F# NOZƓKn[9BC qNK̉B2 ),ޛ LOǷON8JPc b/Kt eЈ0FHDGXhgP8Ђ(]&O#B0^DsLXE3o./aFq[E4I<5CN ΈHvLэPЁAЁhӳI, ,RM#!2E븲xQTrq͝ԏHLl6=I-\MД̈pP &0\{I医ÈAUܒ;/_E<\ S#ACTa3Jӌ)t}-Pc N+߬E=%jG=04GoJA(z s[؊e)'_t ɕXzJ}R~tď]X$YH~ë!Y\Q9 ý B94U G; O6ܿISXH§Kl0?KZS'#OLւϒZ`#=*ظ۹ZۚQsYIM6ةYӡ+ D%bEl$ dٹ ,kQpYD`Yxr +KޱPS}2]+Ot@WrɥU\N}|3h  %\B9ѻe A9ևԸE-Ak N^@@tb '"?`3]FH݂unTҢ {(dJK_5FaK?v5Z ȏXC[! 51 U-Y`n:݈u’ W vl . ubx g %5Aʼn"N;]PG_;}CާI>:6b46CFIݫ= ^J$ތ30Z#E ?~c%d` bb]V 9 vAS-փ[ЄZUwɸBR;7+<ޅ QصYNaW J6aFYf;%G+Dpg魮6e<)3 Zce}D&p` T =`B K8/([qeUH)օ8m d8,pa& ay+C=eY& 6Sq&6o9{fJ*f2Յm 4~? U`=ϗ^^""JniAi! :BUae<*# [1el_8c |}.4{$>Hlp.kاw=Ff&4]C^"K@rde`Y&0 Ɏ8e@ڌ}*ϔHK(6=&6fh~H41'*K:?k86:GL_2j(M=K\\VWR1 o뺄e,8$N6l@+.5^c% .U3_[ζV<l(nJ s@V !80a^ # ?%PBo)Wў-"r҄~KT)I4f7CNii6=PCP`2~"ƉpP)A?ɐe l߷*s};3mj9JIQ&l8VjҝT 0mˆC,>B#ĈF3cf왋g\BhDɲÂOﭗ# I sp3pN,iqHe@!,)fϻ@3w  %L0%n( &!&cƉf|u7W TPT2ɚ׆FJ/Z ^(&PFqw `l"e0PbctPs awqX"ptH_g/g<7I&"P`6.nYWmaHcu譗Nj/6n|a5y%vignIuo`)"3Ab7Ⱥ:xx,kZeOiX~/z'\/"̲raƬGe {"@ P^@+Y+mgTbP@,HA C0谠  xhK 7rPŁ(rBWlP2PQ́9@>$ψl`ԥKG*J+CO"0*@& BD06;pCxFf~(@x䙰mٵ%*^(zgGde'y}%bHBYA)"-"18#5# yw@sBbALVY^V%p[Bz5ym%utYf)W-cv @ه {X'DXeo@ZQcp(^BL %H]tRvth tx#*:+z+gz4(d h9meepI6@}%"V @n!E~b܃Ǖ6hm>GntCe  b{9[9%_u5zK&d<Ӏkȗ^ ɑ%15|393=L!mV /fI[!e;tof=6@,u1P ;P[4DuGU@Rgf=PCe9 P4jŀ(E2%FD'l ~-;Pu[@ ٢-ѫ:qrN0 etf8 qU; ?<G]<` f@_f^=зGX@Y(Lt*,Aj>-`5 L{נ"}(d69w9)jp:o.^'P`P[NB|I<5‹rqH0s1@^01N|"()f :@ 8,Ё6K`S"" ! '8.a&%8xEDŽ Eg=D @,q2i,HK4Vp`H  Ȓ!#CVf?p'U4D`Q>&8$ IO1" wh"m%@4"` P1t33̏gH&% z@T'@*Ё}I6s{P@F(@.x/] h6S ppt2bAAH`/ڑ#,HF8"BFfB"6X&hP`0J]AJR!П. ADSІ D*VX (U)]f3"&2e[6>&ت9]B+T&@HMU+|4? I"։`X$9L=(ns򶷾?W{+Fj jg؀'h@-jr.x+񒷼D2bV󲷽}/|+ҷuⷿ/,>p֚?3~0#, S6MNk s0C,WY/S.~1c D21s>.//F>2%3'b2,)SVqO2+s^2,f O3Ӭ5n~էd7ӹv3\>Ėz3-ADŽ / E3ю~{+JHSҖ43p$4C-Q5NJUծv5YӺֶ5׾5md\>6e?y.-iSqHimsl>7ӭI-~7-ywF,} -3Azj3w% bS DsOpځ&?9[m3.9cN)I69sv@:9Ѓ.Z%C?:ғtK:ԣ.u%-0S5#u$[.vv;K -Q;!vӽv%$w \%y{ l ( aw?<c(%h +!ls>hZ{CfL|]r;/[{@Klw _/kxdľ:Q =$4 -~ܭ/94~A@bY>! &H6|?(pq%[BD>@5%L AQj Қ 4 ] N`Uy F ҠV@`]]la F# _ F!EA@KPaY!k4@0de,B2|%46B]<DArD!4D ȁ:bBK!6֡K8A4p`K\B&%ȁN#$J"%ZG`bB x!<0AGaDA8Aa!. G) J2.c5a܁K8#Acj|X"le BA4^LG6v\E GX@;B r8]9cܥK87$!zDA] MA2A&F,d@6B%H#l%D?ʁ<$c>cB_m865^bGB0#O$5BY@!j\1_h_G4|b(H"NBK6;.Jc>eMPeY_;fTB He%h4[[rDBH8jUf%mWT`4fe^-A@Khfqfjd;*AG\B_dBe>>a(`bV&"cV"GئGf;BfVVl*D\_>Ndh'jiډI i&&tV*A5$G`!!&Tby'=czB[eejfy&tVSLAvjF@l^ffG 2Mrq`g,5Bb~@}f&lV6BNV@G3 wf!z(B4zċdj`@# BFETgt ($#]ܩF(?2_.i"0dB<(D A @6BX]mhㅀ FBmqBSB-T<.H'#4^n2-(ۙ_NjhZji^,F@ TjBpmv0A R/ nGnvn@2",B L'Žof6S:-ǚFJqLqo1+0'lkr;z00"G%.3r+kG,-o5_x6jr_F*˱Ѷ2GFp-2A3911b??q1j3@t?vn11"*+s1s Ć]KP36wG`bK4mj]n o.2CW4KHhBܰ&sL]2i8Z@r `,41rJ@G4r:?#*dhGwWcW2,6qiCj uZfc/]֪O/SBn3OiD4nDc*0e5kve(;-GHDt]SWWelGdvkoymB-&JP˴+uh%NG=+jejpmb71'L+Dv_vܥeO7uccW{u]vZƒ!F|u_u>ĝªrhvMzs.B7iVW%/px 8#-!!;u"F<}s{r|5w_UInGfA8Vm쮝P|kzv{B@Rr!u Hn 9n: 掟3k'ČWY^3% FoywsbiA @/ďy{.Df&8:Ķyv jKzB l;v~8>:Fr`@ .+fVs+<"ƨ۱nuy;3r+D{%ư :lg䲾#3,_wC~,:sFhoDg5ΦwxGzj:;{VFLݺB BŇ;绾F{l5Yq>:8s>´rnzw;G|;9k`~yq31Tb@_)7|5 WǼHKuK緾`~_kB9o@~BH#ߢB8w 4>wW0FAi̸/?Æ;?]vkk!z@X B%TP`AF8bE1fԸcGA9dI$V0rCsVƔ9fM7qԹgO?:hQG&UiSOFYBժ1.RjT_툲Jv\bm[oƕ;n]wջo_E٠G\&qcǏ!GxqǑ'WysϡG>zuױg׾{w?|yѧW}{Ǘ?~}׿ P ,LPl!P ) 1P 9A QI,QLQYlaQiqS#!m/ o]̛zosW^OK_ҀG#Z!֥WeU]"+s";HI?^䥷ǽ{E@QK Pf%L"["%5`$'P&I~A)& T# /ze3 X@9=K!SI{2gCK%DEN8h!_BE)Nj>=k!]P5׫H%@E#@)E="OAUDQ ĊLL4!]}3!#B.$zŒ$ 'QLcH )"d]Dq$ԓ +r"qK]2KI8 .bb% iM{$*2Jh 1,?r7Kd[X%s Q&'O)1!RL\3n5ISL2Nf9]\g6P,5IQdݣdPH4!B.JOHS#v\h3$\RIST.5K+IKPvZ/Ĭ&S3Ԟa–Hʅ#m&SњVɩ2!W@r}1cJUwZ]VՉT#ER91 m9dٕT1Y“}Ӥi%ƑgnpEb►յ.t[ HE/ƨrjlj(9ioM nRk"l@#>Mj.HH"$ Ks/##ނ"$%YL*p1,$ E&bH"( nM#Dq6Gb`Pc8 |8 !%t.'xQG}$ ۞ PQ/'#2˸#Nb2" B"(c:"&,Q K٢}"P) a!u(q!)r"R|Q!1:0rQ"Q$1"t`[Q$c&Tr#쑿 ]L br'ܒϣ'b/!) R!L)7K$\Q:db+5+ٲ1-, .C./ c"l#ro E՚RƬ: %MB13136e)"623Cb"2 DMK104G0#ʺp$o%gp6:BH N&>0$1*&T1(}P3+^S 9 Q6W51>3?3'DdAt@;0f2$Z )7|䫥4A)A9#h+1+Yr?=Cc ,@7*s%&m3 rH⇨q#ꤱB=9S$,t$J(XTE?HiBp&3DJT~K4.,@ ?CC° $q/3lI4$#FRs$ؠ @Fe LPgkL#,}@# J7t1J=SdeR- aeH)TGVUU2r`O %:PXB/54=>Ut3^UUT!br5I rUt0p"`Zk 0/tʦQSCT]EM@-!2!2m)ZIKcF[#`pv7[ 9;bZ# /CN}HQ St" LP&Pnbu6FNsF1p575;]iD-D-IuDϵ&5#VQհu6!8.r2'xӆ$h1,BbCaڊ5!.#(Ɠc5.i%Ύm%40rΓQ+U#P+c>gf6?_r-?eqg1"hSrR`m)Qy$x7z2*5"^sT,@K 㾕H@3nO_.) L#/8jnr!D@ t }THłK4'"vLvwh݆l$mG:D Wx|5|Ckw!m) %+vA\mu^vNT3u$z,Xv!YE`2ߒ^، 87wp'" n~ݪW3z6!W$k)wrj"|8#x.  8! Kk.7!2Xx"1VmRz xDYJEuy_t^Iu_tyTف+b&.be2Lz"VܶJL uwu[N~I؎bzp䱺߳ʜOQ6Ow#{c𴥬["^he6se&lu Ɨq˖`w{W` `>˿|7ܸZL;Sc&"X`#L|G霳ɭ`X"Ol(}YuBNGYIQ [#~h|`|ӽ=A `@z$I5_ t K̉W#@ũ9GOop5#lz7tpؗ6vЭuY ϙ'NI"ɻQ^] ^OJӵtuy`PC"EaҍbuFS<@)›G3ٰ[4t)Yt5uYpbMRsh"fc|kBSŤl"S6M@ VcOwY)ؿ:;G'|^","ruLg(,%?,uM+hRGS-$79u9ٙZ[e]R{6>W?'v`U> @Fj+Lex^$_>,'(yG.>>0kcOߧq_YvH5Rj3HWTe^!B<0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4koFk? qOLq_1HzFND؅DL:PoJZEz0  a;PE {QIPeb@,8T@j2.TBGC4G%.K_tB2/I 5C$fwzw~ xat F` vAB 1_DDQ@]{T:a'ԮUWD %Cz(pUT+dqiU2^TGt;i 04Cj׍.!Ct/L~O~wdI(p6$@@(VV@D.S1)#SB$puTd"[Ch4Y=+Wu 4pJ`$vVC*/L^s.H"w; qD,mVu" ;B ! (@rй@."g `5X`Hn7tE]fM`stCIA<q3Á%KyGnʈ'? P2;AɘhH h LЀPdDjdWH , mMDc"sfb du㟬? r p KЎB;HTj #ɶհ%e3r? Ѐ 6܏l)?XNK'rV2MzF{E7iTtӤYE"!ﴹ.!$! rNt:H 2h$>9IS lFLju\W օ?@]%`(ɨ$] Rɫl JLr:Ya*4r2.Q ˈNAM!'S).D 5dlv"ٰvok1$Ph,lp9H *$uWF6C@!(CTzsԎyӄ.FCc,F> AY @bftBٙ8lDރP|5U50x$.OBeZ@] h`XX$BbdbK RZǂ-/C3]Nbv_F!?b!sq%J#Җ.h.%'}SkPzv 0Nb sJb[eyX;1(H,BVӇ(偮7:PU:@Fe x)@z`eIfėdT9#JDhy|:Q+(` 6~"FW wV@p j`"a .p>v'*(+ b Lɞ )Iiɟ *Jj ʠ  *Jjʡ !*#J%j')+ʢ-/ 1*3J5j79;ʣ=? A*CJEjGIKʤMO Q*SJUjWʤ[\X*cJeJ>%iThf*sJu0 o*x|j*J*o %Z **Qoz Z`s v\6ѩ:ʪ zo'f `CoZ3o4u1ʥڪꬠo:'6:jګ}s `j:Co:؊QP1ݚ7.pj2a㚮jʰ ;>  bïzC+ 1'ojڲʫ}z!;{4qA{zc)I{10o|ŴN_u[|3D[3a+JQoz,_JT`q `wvu{a'OS0 |k[TISPbz s Qи @ a k۷{|[T`$rL  jPP; K+nO +K]{ۧ{ { ۋ qwo:[ rQ@;aoՋ _`% j i oyzP!#\ˆ:(NˆI  0 #9 ;? |3\P@ijtp P=k r0z 1 w  6msL k q4a"ڈJ>0r>ME.՚}J|:nU~ L| qm~oڸ. a2]텞q#o !1 箦^j*lNo`o* Aoj  ]qNK#^塐✮~ݮh%̽pj% A/: 󞦅3 ^؈m- ݨ 0 @oԟ odA /@o ! W/!!P{ hBA !l8pB 0C +(#E!QRC #X4AaA甌MS\@?(ˆ1xT`PTEIvrdɓ!(bN FK7.ε6)°16޾_T:i(J婑G^ j ršh!CMܥ]mܹuo'^qɕ/gsѥO^܍"(S;!ԭ=Q' Av؁Y]h:_R;3/=Bjjɪ2@-Zm$"-/b:#︼6O0 s"gP*lPI(rJ*J,rK.K0übȉLShŻ̓lAXZ ,6CKiv d`@FPV^"Ј\ A҈0hHPpj1^Z.(m[Aoz1U8PWq (C%%&RX֔(BВ-E;!e%yCIHA8QscxQ$mE!^JlF `I'5wh 8pF1%QrX)(4H# OG>bTJ^҉bN%%9Y';N,w$ ]ƈ9"6ė(aNS&5of'd6xf7MpSM-\2K S BI>`pRN+?O1 hC&(IVf 9A:hZj`C^ ?w]T TA '*GZ;RW%g$ I+0oLYF[e S75b&C0( #C*djWUU;oRV.gP'dq<k8;A<#E)-Ҵ|$pA.!J"mK$P , X%k^ E"4W:`; [P6fds[PA_(-l wE6HUzPXj4KA[v|E*=jA (5^Wo}}ML|NIulPHc?e`GVܮY]X(,TC!`H;ai]DJPapm#%mC^ICt1aa15fM6agFEBD־Kfrd(ۑ>ɔAFN,i#կwy]ye $|YB>rR7JFV2,u1yP-#h&v8)=#E̒ n3I(Zԣ&uM=&Nsp !T"jF-L |ڦtOA &1nIs_(؀^N]Q+9жq[2diwSb $UOo\'oҧIsN%a0ubxm0e0 dPf,cPt,XKeMWCH乆59~2s'$W.}hăSno w%&ЄÐ\'kg{ۧԢqo" l  90y@ @Sl&AIXmx& @EoH OsOA W<~38 +ȯߠ'ܨ_1]lx'C?C@t9A:|A0@\DFlDG|DHLA B|.x8BDNDODP SDQ I5 E  L<LS`KU( K/1ӘSlc Vj8,AB5(e="8C6mӜPͤσ04NԜЃPL$5ЛxŤiV +X4F xeߵ @[hL,`xL|0^Gޠ4N㆘Njj牾ѝڠHNl`j lNf܀Q&*c CA@P$exg`WP.f0E }ϡk ,=JFk䵦lES,pDP 9閔hϾm*9C(Y]n%e 6EȆɾaClcSЦImf >}OBm⠌PM 5VAnƎ$kۨ^%.&nTl>nmD,O]lepvTgnIxOMle N ho^I MZvݘt HpA koM8j0flY]Xr($݆0gX6%b(Z0` xCZ|5A Pcr<c(Yw6!HA__3L5wrri~HZ3tMtNt.<_.tb%~%.Jnpݘ80#PvR:=~iGO"#Ot5FDEXH/TuJwa -v?ua'g`@S8_]oI_]p)CooBGoehMevIlg*w 0H@(,sڔ hC~srw_yF g 9E&rĜҜ(XvlqwvxFKVt&ڽ4yw]zmPse_B_syМXon1g G_ zؤ8$Nyw ]{W6]oH[[Mjxg{bOr|ఄ X>ƿŗn׍)6w0هω+ng6cC6\w~K|lW\rA@ d`S`/|%p`(dAp@`H x@P4:C"Ce|h DNjDpRV.̞S"s(ѢF"Mt)ӦNB*u*ժVbͪukb:WԣFO=4&I1R*m0׾~,x0†#Nx1uQL!wtV$P?>\ ʓ 4nfK1{|x3 4mƾ.|8Ə#pu]{.BOR)ifO|<ϣO~=F4jE#_'oኔW" H!ZGBIB2pRqء\!xP \wQ/FClB8Q)hTN9K2٤OB%:eh[pFn'ѕĀF]t'9x wH?Y} Qi#B8vw{~ )`4n&e&Cxڪewa *]Ca2BJuߥɦkiH"AD}Z碛Sd?Dڅ ;$ u>Ԁ #? '`V `3)0AB*0w'Xu,@\`~(D(AޅXLE @` @WI 3ID$S]%@U_@(@8)Q^ XX8ԅ V@ D@2%% &ID4QN9E  @W}B&@0 H!@\PSuA yUUkIL( \yAx2H%8@LR/ a-DRE`yI `'җA VP1\N",FQe!&#,]DPN0^DhNZ @m&m&WR?@$Xac$!@R5M=DDd%X@|& V8@A<@H gNt!x@(eH$F{ljGw+e,J`ދ lu菃ʙp֖%HiocW-Vfi-V\4amܢ= `ӕ%q $թኩEަ_RFd젪@lT&K?a0TP^=vSRURN ,DLmGO eNI]v"@UmIKfL﷨k@Dl]= ^HDopJbKFJR.vqEʆS?}p i :/^CWglEYp+/fJ\бoo0f= ,`_ .%#;3l&PUk1},Cd 7O^6t. #ĆBu}_0AhҺNlQŲ03)RxA^Nf@^(kᄴQbF t=@ҏiwTpk 9&: .  r! ]s]JZCAX 0@05@n<6!$E3ӾVEwBl#'#5D,LD=l莄Nhr)$FG4D]L0^lENiCAD1ti53D_U6/Dm6K\:>xxl@z6o0^@w}3az7{˯ sa .vE Cn$;蝀7b4FkON*MQ2)k/BHF|(Kn?A6BP17I&西jD1r#L[lsp_t3DL=VsS]f\_K^p6xb5%$#;ӑeh,rmO BDAHhj@(zs6#Dz9|VOwDG_N#Op`@l LOlS-wCf=K&yEI{o{U\B#8(\0AOH|`BG47B&{#xK܊;BO{_{ĶwOyc%{^<D@<ĸ;{K;cD@$ O8A46A@{| Ec8/D°=.pL4n|ovH>n>UlBAަ%?l}37F @ȳ2Dp,1/D3o>GHV[^5TV\3DPCmp!Xs CHBbPr.H ECL# <# 'dyg'.%fXbD5*I*>X'S2ƒ!JsǪ712 JE#15w{p` %dFǃ ذ40S&K QC =,(. 55:RFEk,X2h-fD VplF3ؒpdU = M=-޺zQ3"qoH{r}kDN8X͆k1L (| :pJ;h+ EM<Gj# bQ"M@"$F>rb@l%'rESJ'ĩ0:=*sFRSJCsOEuz(H}s$7!JҸ0N1,ˢ@z̒Zm%6~0An`1=ՃdFj.Cd[hSoR+r5;c(R#9n]8lMd }S3rdSר䚻`HE5 .We/+;,i֬@Y6R8] e8' Sc0[袍>z%<(%bzFUjBET5I(\)ldIS"'.DA|b3 M(mپƙܢKWVE! DťٜCC\Ɓ s"=K-Z\UCaG-G :Rm]uW"X0;dEf:E|KޞXF"DXz570Ss((S%85vZ\G} D~XH"֝5$=zi{a:x2 5IRF9s!l g<A<")'DD]@ГD@@Td2;0"NT'%..P·0oPb\HީTK 6 Ȫ0hTY,“Q!D<87(#lRG;JMZV*JBqhd[XJS ypDcI f,0VL FA"4KMxF.]n#O`O6̉"jP*xT/j>A dF&)5ajf+h&l8y6%BML%T |F9ѿ!@WPXw i%8PE JJ%RJr 7&Ĥ(J[zO52M3*HpZ'M؀@"A>YRN&S$Mwf,&e,*(@FEBp (ޢ9rF.|0ojm |`T-AorOg`4L? ; (oYbHb HSZ87Y a<)#bRU":Rkd!Y"Ft:Hՠm znGH 1U$aFGH*EѝhP1[B-{ndrFZ"|$Cּ6 9ybƉ>H-Rf)2mZ$AseHZ@m(DQES3/Zj;-(X#A+}h:!ϐWިƳEuT"|-L:|_YoJB)dɆb9 ׽X`~_|Y~ E`(b~ v9[2aFMkk(O5((F~2`:` n~ ndD p$ƃ"*d 6;0< ''@PH"Įnb. *N"n pNh쎢ϑL"^n ¦nJ)/eBsBDBS `4b$ZCSJ6"j@ YB W%$꺈!p /Nvp GBCqBoP`t 6@tLDDpf& rB1*D۬)ܼMî-龊BھD(5 *(,p0Z& r"pDsC lnH ;V;JBXbIpqE bq[.,B$&f01nQ֮ n02 d!i#Dbsa!DM J|n$`#DN2%W%=(|rsT%]2 !` u 2(%bD%.="s 7%Bnґ, l ekY @~.7FND o?dBP0>J ~ %s⚀q P 2%_x&%ZR:z/A0p3/@re2ӠJ(5''NR3R8sx*#^dH0`K)b" R0 :s&Pb'#O#-/$N K"ZNm^X'/ZFҨ'/ESjr@Uee1!wpA*&qCBDkDMKbi-2@E @J t/I)DHXv0/dqBFs$ۃ>Xp2EBJ[szHO0RS$)KCcen"0(ޭs46b$(DUP =/T+bFnjP50^ |    `2DQD$ KGOQCfڮ۲NSImR0"oJ4oV-4)DB/aOHYI)^qNYBP\P652G c9.00Igs/Xogp9;9P.@Դ(.UƠLh9 ֋@UTB "#ϬZ9;=rUUv>%"V)iVVz@r@yD.hY.Y)SlnSkZbCruLjFg( 2 b L t|oV 7աnt3O`U(^`-IQp1'vg(.ҭ5$%k4t5pZf=nX"u/CV'|d6qK&.f'Oñ/ls|&l&q}%rQ7QwФ 7i'.a"CVil ~w"jT#BvYYYl> 0:؃?<tj@UW&D6_Bx}Щ…_X_TUaeX\U2b H@n!?׉ ld l@&ז~`~0>`>ED|qD5Cd(`w`[Hbd֍5&S|&Iw4't0O 'mt8'~-wAvoB&|Mz-Ayot&x30GqSbr! S<# ;e}_5.0;kivh)i'bSK!T ρ#XS}CR"$Ͷ>%'V"J"d@S▛j!7l!46kGbp [9qG~@`YuL@,!.m`﹎QPC$ 'PLy⎧1i;8IK݀gt&Z5(Je-ŸגY&ķG":zm5nv xZ/Hf~ZD[.lUQn “bWC&o Dvr3U厏 )"ͳ-"[ HU˙ ; PgebRPrM$lx 0$Rob8ṇ+xE"& zP &P^'@1jFE$"u 8cr1/'P@є0xN1_"{6"C!bW6jKc7{5vt ʋwa# VMsB+d e't— qfP0[/|8&qBg%s-Fl#$UoAo"$FoVCA>{RB?ܚO6r  b$ LFVnIsBX"(Rp!ju|ť0g \?zX̀l@A$H'ژޢ%7@׺իvaM,-JBFA@B/}SýZZT$b=үҕ%N-t4SVJC/ΔcbJͫ[̀۹5hj {"J#ܿR[\_|}'bD\/ <’B!' B-˿s䭰ێ%F+tr$PYA@<..u`uX`2I)]ڛ3&V} d>%bqûY)\o:'|\ (kv ًW6Yk>'~^> bL&'gsGb ;G; s^[8XRVNY9$>Eb#O>k "9`]@tT?=aTV9O #4@ dlu- ~!Q#< &SuIͿD)k? @8P.@p` 34 151*daG ;BHJBP…M0TFQG:dzIѣH*]ʴӧPJeJʉP0Ch)!6VX%WD/com1ZhO;nWNx jMAotbR1x(]h#ǿJ"֪& tC&#.Va6|C1M]N)zP0*64L9L;EeK&8_)G~h* O @_YPؠ *! `6 {b(@ &`& 'xJt*:PP,M Pa6_,:abQY})xexWPEI*AFhH(NPR8TXVBxZ\؅^`b8dXfYxjl؆npr8t(iXxz|؇~cxXx؈8XxXp8X؉؊(wXxM18XxƘʸ،8Xxؘ!؍X8x蘎긎yX8~X'2/yY?YD?6 *y&c ?V`7CDѐ*x:l!ɒ29":KC  &$8FyHhpOJVA9l1AZ\ٕsx0(e~@r^ٖnp6x+|{wp xHq9 vzNBwcIQ1*QulA]D^a{y#T2ل=TZV+*-zlt%]U+0SmpBJFa%o5-L Sw|ڧ~ʒYZ[ʥwJZ[#=fQ_k:]G_*uPѨZ :-,` >t `DхtՁ<J m,N q:D/Ь^/p/9vQ1\lz`IB?;%+:cS}N0N)kqz0>:[<? Kq ݣCD)E>+˱I '`Q9{H*ѱQ,PZpl1R=,DAPN/ѧnS?;Anp 劧MOr!Fw~/a@!V>wQ%]EL{oa\aɶswk,Q0/a  z!/Z) M1klys,Zk+m۹[kNqDpLRlwћ+á0#nL:*2QX?P hݥu7@YqI]=qkt/Ga!xΚl AxuG#kR};;AWh!n^ƇNvqD&Ik}>C5ᷘZ+9 XqRN/IKQVgs_wQ~짿_vfX.~??q _k&(/C!#%02/)+-_<:<5?D_:0d:T?پA^FFXOP4 Kl`M:(?e0 V,uT08¹K`?Ik/ 6 nyfkqJat}>M7UTUC !BDL8x#DN>,hᏃGZ]L0$&H88\66 @$݁ " •bKj,ȱ䂃l ƄD(FZj֭][lڵmƝ[n޶`s ق:2$Ȃ= $E` 2wo_H7ؠe נ$1#4 0'8~0@$@D0A* #B0 t0h$,1 S.ˮ H :2:.bL벍L҃$H#D2I%dI'2>2p,ƅ*(R$$ $:#0ZM8<f$ so@RSF)E4QEeQG4RI#%ĺBOҼҠ6^ȱ,KⲹI6Xa%XcE69#Ȁ Rh$Vh#Qㄉ!_5YMnPHNS6^y祷^{7_} /15,s&*^9Q]$7t%O Ml9dG&dOFyގ`H2cU;\$h.W%=z4e:jjb/:X+k&KTYk6> @MjOj{{{-8ݔk2Z(|o(xd L`@ `>t٬s:F:aqJ67UЂ`5`Z!!8n!B aJNPT;RBةDR%A0D"D&6щObJ#60˜!$'pXq䈰#++JUnbG>яQâ =$ J@AD !dXK5ALX'c@lH /IєDe*UJFm~84G0? ިLB 6|B"3u/p5n z#I'@x I)YMnvӛglإtGLb۴Qm2 6`bA,fR$1<@3hvMd1Gl)hD%:QĆA PjY@w6 ԅ\xs( ͆ -]JD*";0TըFhRT6ՔI:y!j;EK8 !^G>!iBS c=A Vծwk^37-VTH<#iLiVn/]٨nw !8+MSwzmhE;ZN &UPn f\MVb:0fᴇ)IxqEnr`Wy a(`3/8#m.Wz͖z֌zr bP s$A[9*$en|;_ַ@f }qtmOvxO0"m&;^\p5a7e[eHIˆk\nCl9cĵiUNrcz;k(T$o X>#lT' ]9Znl['Dc6)w/']rD;,`?pU;f{]dr" @@e.z1M:G}y#9Sg=sx7 4A.c^$m4IZEχ~¼ 8{ErI}Y:-_$-ܘA PXNG̻}PS>? 5Xc1+P9>30[=][: cPxˢ 1 $ [.@Dɺ tR3x4= ̽1Bh604,K4H• )A,B#$+4 K`8@0Ѓ80`  h->?@A$B4CDDTEdFtGHIJKLMNOPQ$R4SDTTUdVtWXYZ[\]^_``d/0Fc Ƭ}ڨڅ%$pFT ;O֑ƒ=Y(HYXٌE\X֐]&mP[Vֹ]ev5IgXG BF]0G( _ʓ@]dmF]eEWri\ׅݣl*U% SF(@%x[W :XF^ q])_T ƓZ  ߆]`e ஥F7%Q LnVXm)D %Ջ cUFm% FMOUf4iד ^XVCeL^ZXbpbui`j` U)*]ߋxU > N[f7`l|Ɏcj0\̀&;Yɥ#Fub˽F&dH^1^ʼndEX@^> MdOexeU.~b0OdHY 5ʔ>@b6f(iUdTfJ8хcubP];Q]KLVQbs^lle+Yv&b & _.gRi>h$lϒ MT P0$&iQ \clT-O(vv~`WyV\{F^n}. ^SfV砸Nf O`\W\pfz^Ud u~ugbb0Diiii(OEꞦ:Xk5) Lh__Ufe&0plSqꏶŀ̦_꒰mFHVkW mѶL|PP|˕k>Lݶ=F% >h:@M81lTK\n8'UhjFs%&0m.k^ ^t> .i鸞oV5V]oiڋ ϋi &h]7& g^iPpopx4vgߒ񡸄)q(l 保HxqjpkF ؎f$8 )FoԎ1ri[5)q8i$f8' oh : Fǂnvsct=Ps80\F^rx&_NJfgHZJtLO. Kl1gk΄ sƈCs9]ωdlf0Y6i>hnnHHFF M:HpEKENIH>no=bp=mxVPPUewqo >i8wYb_:8v^W6\p  S-rwm軍 ljO+NoP|. QS]Fw/ 6j_5w_oѿҟyqvi,P{xhhȇJ/xt(l<~uhmFn@hϟr|Kv6 }< ;yoTb-Pyp'ce// $X!„d(p' 'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:ws&B%(ҤJQFs2p(qd (IƎٱP.A""I DÅ #Τ놸1IZT)FqE'i!$JN|㜴k)v&KX)J"'ar*V\f7‡/n|x $PB) a`A<9;ǣA<׳oCᆭ^? 8`NpuDG(d<(T," %x"xK]~Y,O( 3^᪻n.;O>[QUPXf䩴ѵC=4.zg*잖+S!0+{1 VCPQ^مYz ,yj"`={23LB+HPt2=5U[;fXdH7J*z&8ޞgNBu5N-4`\bT2p߉+8;xMY[T ʪx^fTPn7sjɥn DQcDD39p; ?ÒWD;QkdjycDD٬C:QQxOt7`0CﵻYmv$dDؖ28UO($Q=L3gSMZ$( EhW%OtuHǸ|T=<3O:'- w \uH։r2!>}BY<El zuܷ@n܊l \" gyC̀Q=y*+ (+24fl5[Q}+:B\ FOTQ %O!VEߙM_ ޤEd ELF|dq ᕗl* a׃ O(uu^u !!Kaz Il. &O HX Py^F|T6iY9!YZ+ɥͽr9͡EО)yt6*e }XTӨ]F4\Q݉ztq!X mJGܝX E"D +:߅,aT,#T3>3m 4B#X2\OXa(T"DT U(B/`Dך=F`b0ZR! O!D F|XP5RaE=Qؗ%  h"FRVRFA_N]"EhW}#"o0R(< EP"D}AJ"BH9ON% =m%WS9]ݓF%V^^Lx=HBtPG@c(_$%LMf$F@UBEV@Rb&yQC^D\ aQB!Y8Y7Y@u#&%Bd$b j"LjLRndi)dBTRN %˔!H'qYğ%Z'uOk@ HWgZz%X4iv]D ^mDZGpe(ѽ#HS^G=9@5&wN\De ܎`\~$fEgA]tGivlmbI&NNg-GfB((E4 VQHV$ D$p6 h֤lQ$i  | eB&YL)*V]<4gM<z FhWa*}"gEf)*ͦ@d: :g]ݴҝIZ(hE`(`]GhM*DmfmN&6I%)zDoL ZfmbFo/1YLGNկU6LkV*.@Znj0GtAa=V+o*lDء)1} G[!&Dh~, >dFR]}G-q$GEtBHrÆypUKX [.BP08#$oB4ND;IE%ѭFV^DK2B9Ylv(0TFHEg .kMHYy"m|&2r o-J&k &*bZiF,brCV-HdE;ߪl&(wD$_KHJf$DI4KW%B`&=?H|#Nf`=g4k<@nV%U!@!R@+FMҳFqgBoG؜ka6sBG r xsWzEZ2R4蜀 WXG,uScZ:%`ZEı\+꘱F'mDD]p^_B`(+9a[ mM1;tf"Fm5fI (){%YF 4@*-Kc[[NjP4/[t& 0w6qh(hl.WQ* o%BV/ED#D6(vgwvCbd4JaaNݢ^H(UA5BOWgJK؀tym8mPg~ 41uqeqF<4zD7FD귈fwLVe! )K6Ht\ZəfQGțL#IvwF\Q'wF؀sW󼲵ET7E4$D楘F5ys}Z7Ru!{|_oD-f9"%3<ʛtH˅Α޹f4i |A>1s!3xq,mgEFkH2+a2Fw;OK/S/cUWD*nIOt{+ @cF9kDDkr -`A3WZz9P {4o첓zv&á'dЌ̙U! :]iaљi :io_N;8rEH`G>AȊn GW 4'mL"1 HY= "罦>H8v ^z5 TڤWj5j_X#]`Ѐ@P tA.\ 0\0]B*"9MEɻ%Z;q0c"B$g' "Q !%t:f>AK@ec YTʄ CzBot?o&`@|R`9f; }yGMx,%1ɝ1Pp  0 f 0 hN2ݶU$&D!BÕ M=o!z')_JEhvO<"… v4oqRp; 3kd1zp"b.#LIB HF;IQRVl (`DЅ (S蠞"J}F \Koq ;qϓ'tb@doD4()ĊIWvESJSAWg<-6%pBo!G@QА%Q림BdeR h,SіU QUa(2z ET*]!3 T}4ict5qa҅bL.h L AGX`F`qۘNT=KVm3V,HTM\kB[˫D\NrwP,0nYյ@˦Dx!k2OTiraL6o)_BQ,u%*W$U J4xi1jۘR!f0o]2x"5u ('B!P"䍴T;ŘU@ c*BRؐjG'PR3A+j&Z><*&SYix:oHO&;\y m7)XE:7ͽͫ'D Y\dvIZ}F1G^0D\!2cv L4$.Jro}[7Sໄ%a 0 ̋Xf G ͭbʭy}]HH i6z|.ȊlL\ u(J:e 2<!͆IW!4/~>3eާ- b6;^ȴWK 8Y?Yw2cH*mUg}Cѝ򕷼 @+f d ⭛} W"$āW!?U\BH݉aY_d`ܞn RRQ}IyГc kp"K Ȋ1Qp*L\n&>8 ~ST H4 qqV 8!eH@HUEӎ&!mȬ#S%XBe+(Ζ*Ol"`q i&z/dEQrKtx!Qc%Q&`E1 DRj,aV",\z22 g.!p8Ɖo(q\2+r+oźABLz15R|RT`K #1ِvr&D/g0yHO1D#b[O`E@ >$& iP1c "Bc&y(L.߇ Co2PEP 5ȑ+[#$@2T `ȓ<S< @maG ` nND: Y(QbhS:!4B%Ԡ29 .K!#cC ,CA .OsɌT)2B!(s!>8 >LDI "2Gm(Ijq'&2&:q'd!~, hDF1/P/b +qB]Ԓ37DCPCACDLQ!5R'% 6T;fR!l SQ'LPP"N t)k\s 5";RH 49&c1Jcu  < Ljq #f&K %CRY@ZP5iC1[@UU1y[^ufV QqT;QGtTbL!8`̀UQC22, (CMWo C( O :_MJ=%`6/Q_UCq 523 30fS$\5 MFQjPu*m6CD#ivkPֲuIՄp=\5NdFNB s7~@fgb`ol"TCU=TmR:`q%aoyd}5!eCeWvX ,r$)coh8 HroCACQC~efpBOWwϺ즖iwPJ%LoG^wxxC*&֑R;V3B `)wBNв7{s@f _ iBl DuU @~N}`} m}9o vL $8xѨr{ wB L#ƂwhKcCtp}_vZx,v }+v #X6 !jQ8ux4̾7!x*@zPJ)vy9c&;zV9yko9yEjɹ9W&z9y:9yYOy !:%'1:5z9:CO::EzIML*:٤]a:eZѫ8w zݙ}ڒ*8 l`:U󲐥Z' IZZ@!K>Pju;8T,eɮKc[ڭ;!lM `f8yE) Pm %Bx!u=z/`[q+@fZk9( ym%q;u{mCS;+ONxgr_v9֪y{s[n,+]4_bYOq!7kǴѺٻ;;7i+LvUz@{ yNs \7[+͈F;nLXF1<5ܤ6%W9U `k ey7]ſJOBHb >)!ZƇ.C o((^ oƵ|˹|k_:44Ȝ + `6 @9N@./ ̻܈I uz˜12' `Kh)ke+ʐ*cEnIM^GizO[t`0YͧP1rU52(D1Q 05v"yV5r L0OO}۹[rA X]iʪٶ¢G۲VYhdCIHQ ̥MC =#;N@ VmQC]$^; A]I#Ca %Sn {Jj10 'lN#)V Bz0 }>`Hl$yg[̽գ=%ܑ$2r苞[%r@ %iU%ce%`hc-2;нӷ OELvYKBD%~%P'El 폰okn^OŒ;eitj]S>_^"@KCL"%wQ5dD.tb%1^}V%lI6LVTJӐzk?X`dOH7 P  PPK("X2 2@AdrɕMd 3̙-_ EH"eСD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6Z@&,AeCN 2h[rpA(+Q8qB'@q"sf ~t( VLړ6/͟뮾;ݼ{ <ċ?yR%ۀDb m\NHa^ana~SէD+yu,abmY&ZhP^ zYA1zV~ǣit 6fL((d@e^~ fbIfffha"*Ģ}didBnCEldg Py$~IGJ9@RR[1 {CWQOijj kҘIqyRqgV@(vqbRD ?A-g(#*iet-M, C oKoޫ*!V`,Nv"^zUdgA湚eU) 9HjB=1[y/mE-( {%xfIԎ s2Ls6ߌsuE (» қE9fh1Vэs<(uFеQ(1+Q,~sn wrMwKu7ަ`Bf\1p|f3a1wF}@LP$49]jUNb4ZEDnek},^E}{|aCgDuD'm0Alx  4-o\+UdFjuK5 ۃ;#<,avJĖ6bf־8|GCFYP : ,lYgzIuV5G1ITC&,ggض÷| -FLBq6ȉ܄8Ưٖn~froKZLLW>÷l:;^\Rgc+J zWZ8n,ё6gUOYGq-O:%<QE1|PȬ׌"k8,D!P[={<PDpY-a+|]\-2O[3 ^t41@mò YulXҵʌyv=u.tTAL%=~ naU+1yXHai˖45 )";\ :К|t<|ytp Ρ/7AEa;p%~,Oko ׿ҰxI}+2h' q'q-}$M c,]q2UKr15N!1+_2Oz,@Y~GO׻k7׉0JSEE#Ix{0a s͍E\11y<,H]iIl·Ty=Jw/ϛܵ"ƫ21Ӵ vylG5w 9|<98am84С'5 gUݶϜ 53QPZLHM+El1+ =ey?jv1U F8969GUn |?01@AǍ{WBN=SyA"#ݝ p]|P٘ UO""N_/ -KD1i& `pnQ^ QyGWn~cY~ 2ZϗzA'3g>f>-*V5~W*"d59J3 AXbZrǞst+BF#"ޠ'З 9ٮ3gU69Xtn`͉ظʙ4l*AZ(MZ1|8$FfGƖxYC1@9Z,R-BN̡cANE?`_y6JYs~s ),)?5 0wO1!y;lKT[03-9w_G W%bKJoeFQ-rE~lPOI[/k=/-2!v~Z_I9͢ 99l:௞@ O?5+M5*t~Zw{ rx-2!3hEӹx'؄"HdXDBDND!JXG 0QH)UdK1eΤYM9uOA%ZQI.eSQZhceX&8p̌%[֬YK6+@" 8[.! e(7ɑ\![xl*e)B D,T40,#7C4`0QDPC,QKW@h^7p!J wxqe#T4]/ƒKwŏ'_yկg}{fudإkQWr:Ğ&K1%*b' bl&=Ȅ* m%r+Fңq" DHKHjK趕rSMTb`-3P:!`9cIH" "\DhrJ*J,rK.˚: HKȫJHb+`LDӉX$DŽi\D‘2lLh6Av09sTÖMdDF,%7|C7C s G##Ub''LdUvYfuYhvZ$%3BS%5b!E(0h܉ǝh But3As$G#I5)vihMyW)ި 40v"g3UNhC3N uX3 G#wV|}w}6/AФLIƍdaiIGSp,ywFr4`*rydXHۀV/{{KIdћEg2"ӉC QC$ba D=6ld@+Fx9&e,v 3ޥPR_@d6֩j ^*%@Cވ* 'qGd%-yILfR96M `JpH#<,0Jי`%+JPG&TCvƊınl#BȐm%f<,@w[*ޭF*zy2dqlH9#x6E˕pg?Ot<H Et c/WҚ$I&H4RP p%!@59RmI2Q3NdRBȋ6W8$\F`b*&3oDG<6d;WhCɳo$ZɎʉSc%kYzVբT"Ϙ(S,, eHL!ˣj*6 H晣ٳ!zp$ #ABxB:+*6uul$BPY{ĖK4##GԑR JضkWȉзjlk"ִFWӥnu[!ܚf_|Kʐ5&ģ n b ؂u TKz;Wor#Ue Ղ/f!۳֩ -C[V#Mpp{Ķs-v|0DdT?*z*g)H(hEn9;-%ɲ@;q}c .(]"d^׹ ng3%MUR&ޯ0' GrA4{R5}o3֚I=Jc!'$Xڭ2Mjd@r6 >y̡G.#D qM}jTZիFɜA+C2JiXAzMeYty4CK[)U%^8fYVȌW'Đ3B_` m3 ~ =B (zwa3! SlC<`t[%m][cX&&lb3\9$=q\,q 0G;1E#9l2>p1L[AH4@ e\W$ι۽RGH ]S<%#`Ifb JtJܠVH?2nt|䓧|-y]#Uy(ꣳ?>Pfcw  x됥64~Ab6r^ DĽ1,>E1,z|~K|-0;wI]ٍH?(/X;H38w3# :R(C3@­9yЃXJP>0ӪK;;p7AAA-܃QJ K??"*l@ 3@ p=6ԛ=`8HR!Ӣ.hèMy@QB 87(h! 6+!@8-$( `<|DHDIDx[ĉ@M)LMDK77DM| "@E] Ehŗ@E @@C@CLK@F,6@E2FAdE#@Ė`AY0#57,P|OƚBa̱[6OL4=@ӷOEBE:,=pKǖ(OGJG H9=X8P0XHXH<.@[y; BЁhhw BXEtxƠl<D(HȔ.`JjtE"äLltU,JHJJJJJJ KK,Kx&Pߜ( eђ=YX O]'H̀%@ N+  .mڊň%YE hZ1MP0ZUZ؎XYX O5X][FO hW-K. YH]F`Ҧ̀oe;.' MZ=Ϟ\5\[[hR P`\$R%Z}Z%\"\ڦ=\N.\ťݶ]%OP% 5]%P͌mKӅ @]X5]9ą%Ҙ ^^H^]~^ӭ%5];%]P ^m%RW^]n`6-\``@鍀ڽ^ӵ &_ 6] R-e 0ҭ޼__a"a`_v`'~ᔐb% L8pM*YPeM%FXc%/Z0a8ޜԛxc:cb b/0&@ Yp8eQ@_;c^BNCc Ud@_%$Nd I3Nc8ncc>c@Z(fbOMXcdN}0`Љ-&h0OhiM&h&(щbm/[g(g8g 悀jfmMuc𤃂`g\F 9N x炠gt瑨l`v/f PnbniNP#E l^ @-)Fjk&5.ДN؆b,h8扜dp.F^$邐޴ёSV .ꡆtj`k|i>lۜPdlߨkTk`H. ɞ γkDm퉀kHmMۆlf&Z^n&Mxn, %mnUUUFXEF&X}P [ƉG@ofoZninOk\ϞT8hmf`jƈoo&F+nnO<޴]c nɎ}u놠qqOmZ/~$u ;r%rpkti%qT6qVq4Od\ٔ`ts욨)( .2QAs% # $Lj%qFr0tPr oq/M0'<7]2Mg@t5OuUGL hus,꙰su%9>?F]aLDwEF&HOoJO`?ߦNgUwq_L>q(37b [ƀwywy恆 `/~7t?7{})ugcWtNo/GhG~w m`fpgwq?y WXhYMZgwW ڗ Ha&yosω_손kgxxzvxHxO Oy{yj>xoF(e1kP]Bm7 Lj-Օrd%x"V|]x/}g˽/H}8{pl`q$X>mp_7 }p}߄PθuxlTߔ/G kzmo?}_dp1`o;&tPa`a#`pÃ$q#ǎJtX1DOnd"I.JJUJP AH1 Nd(!I-;Y#O>5e(t/4XŒ(ϢMv-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎC&(Bϓ+^B(v8F!pzu _VV+cQn\梞AHRUl!\uVVN(Z5ܛJE`E#UQuVFm6p1ؠBRXbrء54D6i+BG(Eie+EA+.Gj(Q?\*Ƹ$XAycxБ@Vtw_"P$9>$Y!♧{٧ZJ3z1"gJVd+2zad(JYFvjiJnS!%.f(b5Ci("2۬BR[c-IrvvYdAi jtҨ nR׷RQR*juM+CX пM CwZ۱#\'++n'lb@InvAv,,QQtdIS52BNnL+zPy5s3mVQ¦ҧ5m4C:=+C_uY!w㝷{ݷy "LIP^yDG lй1xH"$AASXCNXa~z꫷/6#1FaXYvL3zB?߃Ogˮ;o束z_㟿uC/  h"0 \`Qe%d +h b0 ;HAK{2B0*\! [0|jXÌm6e1BX. 1J\"'B1:H1Z"/]m31j\#F=UTh;1z G $! iC"ch @lH$%+iKb2(OEB%)KiSrC~J22%-ki[E h J+&1icU &2gB3,28kb3&79TMfv3'9iN|\';f'=iGBT.B3g_Pe'C,!(dC+ZJ(0JtVQ`b 0t(,@@2j`V pT 0cG@x@B ULԹ`"UxHiPRU5YJ iQ@ʎ@t ( zWn)J0Y$x-Il0Y"dlG;X+9c K0HU]lD*u#@cu =(@PC,ؤ1%@/7҅`.]i 4`]e ]/WiŽBi@vo$HFrr< hl'/Dj#qo\*8lP=Zؐ҅vկ= ]|pVyX8[d$Z9r#}q{Ҙ52d1GN U'ɨW^Hlx/g7ʯMl}6-G` m:SJ6h 45}(6يE0w'mj&֊z&SYH|Kcl]@`#8'1͠!jqv]Xήݫ_ʢ"f="G:> 1胈Y@]E c=Xg aņK;I\-h KzHp X6<0ӛ^-C-n#|u덞$Uu6`ʣ ­H]3q/G耟l0[ULnnm[Q ׹sܖd|&{{҃pY(pVD_K=v9ɐG-G_{1;!<9Tk$j̫Xt,-`b+ ^GmEWD|6G`n7}as9nJ gҝ (w=Ha029"sDsHe-?@捘iaKsMF޷mġ@pih@F]mDɑByDBM%@%FנБZLә r=xVCќU\`֠yўFA ^՞i `EZGyuDQa  !]d!ZP2^G8!Q>DG]_bG_gV>DUF VWМ$VDębEXF|aui]Gbu rD " I4b.\[h 0:_C"+j߽bETX&v0fJ`Uad6>F((jD!B4IUcSE3~XF @GPbDvACqWEAdD#AX>bѢa&"9Em":b#GCpljAtObGt#]PF5#B a߫!JdPD?jRe*-bv ĥF%ZV}VG]"9nѹQŅ"JH`UfxRK4bF\ղu[zFXNr8Y9VY\%޵acfud/i_GfETSa'*lEnVDr&9AI'BYdECVQyF&K4^q$™aF/fv$#ŲZ>'BztƦ'vje$҄^lSGLlA]釞֕dƅ%Ti 7"J,[]Pv*a]|J)ugGK"h:eBY!G #rMZj"CC4hEإ^^RŵCh( MLCM`PZB% \%-0h(@YA岮m*jAD(^Fdy/FA&QV ]Y%(0!-G>Gt X*F_a nZL^'Bf-G\e6*v}b r,o /b6+nY+a3Ey0ygrg_ͺjt[6$!@+!w 6`IgxX+*RÅu],f+α="JTfw~nwoly0#\"{`hQGZ4Gdoz@{UU,#YxBMz' %9BF_2z<ϰ1k$nQ yEBb 5EqDeҲF`gپ@T-$@egÅ)-Z^jzN 1hQ׽AȒɶ o~ӢuO:_W{kK:RŠw\G`9׈k%Ah  W5Lxk5;7h3cwAzKʝ[ Vfc)}q6'^+?9IhX*! |1yh |;It9oX}u_vVO&Ŵ ƻ=Ѿ|Y|}ܵsn@J:{<sEX'HQXE+^GtbE/~aXƔlьiTF7qtXG;yXG: YHC_D"HG>$g"I^&9+*ғ(IYJSVD*YJW*eYK[%iK_0KbT24c6є4YM<Ӛ6Mor8YNs2T:Nw2eyO@ ZP UBP>D)ZQ^F9Q~!HIZR)UJYR1LiZS9NySAPZTIURT>QTZU^YVU~aXZViUZVq\ZWy^W` [XUbX>d)[Y^f9Y~hI[ZӞUjYZ׾li[[ny[p[\Ur\>ѕt[]^v]~x[^Uz^|[_~_ \` V`?)\a _9a!I\b)VYb1i\c9yc?X I~we)Q !gJYrd1<M8\ K 3f7)ZyL 7V1efÂ=,Љγ%f Kёn37xhtcқuCD Ydj8A`6B:F>G@JBOHPITMWP[T_Xc\f`jdoimgrlvqys|w~y}OS[Xaemsy|ÆƎʔ˘ϞȐѢÖŚǝȟʢ̦ΪѮҲնָؼڿիӧװڴܺز޽M H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ NȓFǃ 4N1 7:)OwNҠ`Nz`$@YD| F(ju !| w"mC (g!`(4h%q@<ІGD(p<&#uB(TVi啾%a<Gz_0P"\1X)tigbZɣ 0iP(:p磐F*餔^uǎ85駠:$hj@ꪬJR'ba*jr(FI)7|kI<놢&(BNtI5{v뭍(-p øjʦ!k%qb.$˯śDH+ 7í,,$hJ "W.$lɏ-b7`2ƷgA7o l8-Dmu+8pGP(V,"⬩ 4 8 - @z#pUB kZ$Z^ 8CNWIQ?H.G.9PZ LA70>nc'QF*92A(䬷&uHP'kA<;"2>.NPKHXp_྅dPID=x*Mښ{d:HA\*@ r@Ő" R<=]0N7H"U`  "j#LćtZPhm&@$ ! I@t`HD @` ^'VJ\ D v$iN~ Q'L[O0N Sx|\Sfh7Ĝ$ hoag*vJ"јU!T8 1K}uC'yZ)#jui ^I |i(1T%QpoX+Fr²͙H)/AP :.)y8*BQ ( Jz3Je(Ce?7 8N8fj)+ .7X2'2$Zfaij&2tq,Zz7a\09fJQo'u/TjRvhS PJ$ \ :˹ڻdū!ѫљ2Q{#,[ *|b OK5j#y(Y+_BAE: ?6O8I˯\jـ6uIL DתR^2EI2n#) \r(ʺ캢j1l)"z9]Ӛ);Q zVdTk p |I<DvD*s+[*cq̂Tcrk ai%g TYC <k כWU ;|/ʓ&<_*hA˶5&'|1Hͼj%<˚dc{jrc, 5̴9܁#(̼!9GkTY;R\hȃ/_ˮX;o{$N̩ k(ʑwLB{SX̉R;K}Ԇxq{D/wEIY&ܜwWzϩU,O !qǚHvD JɈbH=ع$91ХJ9<9(_˒WL-K |[of o+ҔͿ)2=Jؼ Jn6 .0__?%7!۸{aLAi6XAgc ݢ|P'ϧapKP!٪Ã4QRMUNJh赸] >UD$Q^&, !TN諌>>.&<bH|}~kE XoAKX$ ҬO[ 2[l Q ozEYK.x.i21(]P`g(-T};b7z"A-W+hF;e&c.q}eX)̖"s+4f9 њ a+???99%q+0qm"Oj릐uMʔ{xj%B jK~WaJ@@PB 45D "YF=~RH%MDRJ-]SL5męSN=}TP2dӅ7AUaAWw :% lGdT@Ni(vGiK6G_ 8N(-и ƯD"-XhҥMFZj֭][lڵX!S7ꉉϳ(3 ه#~E/Y)E5H"v~ ZcDDf%$ vԖ"¿)؈>(R,9l.ѵk |jf7w)?&IΧ(-H`8@j˳8N+cKb)AL L A?ZٸЧYzپP)첮Le D2Z/b ]Ta߯| 8E*VъWĢi`evTGH޽DJSH$)!G$ J_Q_Z)$HHG|1)H˜Ɣ)Oq$CPčTr",HV1YDe*UJV GNDXy`B 5zJXI*/-1/Y£HAKu}D{_C+ynX 4(ՇD*"GWӞg>7f D $ ɐ&y fKH4I  (ΔhT+5J-'кP|<2ōIbLLy< s#o+A,kJP3! Oҁ,w OVժWjV҉#灔d D 8 QUHu%W 2DW)UZ's# [Jr_Q=.cR6 j)jB긑")mU™SSpU)jle;[ֶlTO{kRRi7PcB$\$Ҹ 9e6/a@J11,YF{S42.5D=sus}mZDHw#S%v9'GBY~hnm 84Z)iC'#1Ks[BU).}9 ."^W[.!xԥ>uW} HRw(TEd} M[5ݼ;rJ!K3չ)* f_ȄL|YkY7# OTXI$)9WG}Uo`=}L HB:q$F/Hl/'mZm[uN4 =qؔv{̑$>)'68s7GYDJ!v283 %׳"/Hp9"D5{>#dS?Z뜮)*«iv[@ B2+"c 2 * 7T:у $,""'(=Ä," <*==+CT(NpA`/Ep{(XYEHCҿ1\] x8S?SDŀCR [rCPBHH1'<4Eo3;"xA/HGTXg*"+RA@RCp?O!3l,$<`dƨŇȈH y;W< ۬Eԍ `|$p) H15$S;@AŰ32ea&L1԰E3#iyLʫʬ,Ȅ8a? `8+[0QtkF@ "t3sB`C3 SƱ9fܲ# ̭PV5̗ȁO̕`6z_3"XLෳ{Kl_ A0 Mj ٜ'\bLIYL!M0,NABHl34$TՠD43Lxӄ9Z =ȉyNSZTpI2 pZeh rLN7L.NȉCE;`霿,?@S:CO!5Ёzf!ʆpͼLɄ%h$mc@d.!EXh"] >(QAKR9t8{ (V ј>8dS؀BX 0>N?(b R ̶brFX$X24'b4QX@ Pb%հԁ:jֈX \=;@f$@BeEH"ȁplpMNЃ6h; W X6- =0IJU'(xoDq"Hc-8(tmyAxm"p[l|hm-I meO='W{ HxyM '@e8PK֩ڪNx(wM8Y6Z[~*TE۴U۵e۶u۷۸۹ۺۻۼ۽۾ۿ%5EUeuDžȕɥʵ%5EUeuׅؕ٥ڵ%5EUeu%5EUeu&6FVfv &6FVfv !&"6#F$V%f&v'()*+,-./01&263F4V5f6v789:;<=>?@A&B6CFDVEfFvGHIJKLMNOPQ&R6SFTVUfVvWXYZ[\]^_`a&b6cFdVeffvghijklmnopq&r6sFtVufvvwxyz{|}~&6FVfv臆艦芶&6FVfv闆阖陦隶&6FVfv꧆ꨖꩦꪶ&6FVfv뷆k%9k9뺾 FlםlflF.hj` l5Ol ` 0mHnm|*.P9pmޖ-9 /fl'9l (͖ni.i@flJ(ono>pFlglo6^ `l p,'p'.q/H g;Xrnzf0,@F.rr.OnG$'@l7gl8lKn&8g5gsm8tNB/. BB I9 􂰄O.6O -A.Pu9r?t@qhL/Y LtNP<RefBvPPt/0bkdWvfwvpoWutis98wxHJ?BO}v`u깂'1hwXtBsfP+9ͦqx]'q^gl4߉.΀,X9W ЂOE +7 rNx&zKy'pz|Of00{fވ@@XoPsl .{^y ƀ&0(N^zɷo /h|.h{Wf9l޷ B }l?s 0||po 0g~2@~ϱ 6~p} L$H(Å 2R!Ĉ'Rh"ƌ7r#Ȑ"G,i$ʔ*Wl%̘2gҬi&Μ:w'J =XK 2` 'L^yht* \F0HKWySvINPMX O<졗y@,FS7s3ТG.m4ԪWnbw)^8 dj @T&&x5aO?$baje$3 0i5]ame Z!6{r1y喐=\S7B=ƀ+xHo1$C} 7wx1AA{o1Dk=#A 9$Ey$I*0dEN.Kfؕ] C`rw i Z.AYPJbuљSx '~-DD[*eAz P{1@$B\C!F4i*iAgAs.CF &$HAVچL{,*,:,J;S} `Q ] ![)C+C?yTA kl>Pvu['5"V';QmL e.^ Ѫ&C[iEW >/4)k.dqEt˹6i EjJ }N3A =4E}4IiBRtBN4 h$B?B9.A+ ! 5% {%BmP7Sn"H4Bbq&C}wn7V1tvDi_6A9_PD0żU4뭻:>;^J$"p(?dB>ۚRfMP IY}%7+!+SS,C,L >D;o \{>5E~Ѓ0K[BJ&kԎgU{ _AD7݆y рg<ۑ&aiNR"]`Felj 4F%؎5$w 򶷾-p S 'dh*DTܤI*%a'DܙB&q"ISGI@,HrE5-,eWa@"*ڰrI>0Mi)c1PX Ȍ@b.)])|&R!RK]ޱLGHn}j K1ER0DXDv,ZX!Hm32 _8"NH}-s^2l$_-i(CK73!cU @=Y 'OB>Щ&gOD^ DSK!~UOМH-'@ MVac}vC5慨Yl3s,׽I|-2,섘&  BľC @>4~c/ZB @IiAC-/숼> oL C!q_} - 6kZyQ݃Ξv!n /H|wjޛ{)Ӎ3g⁎)=`cӼErs @ ̓+'!Fڇ) 'y`K8u82$ T]TNow.^ c:N4u*v?@pufl]H179Kq#/j<9'Hw極fIr0+:YGbsg妤UZ<HXyR-K$Li7 _~b,ψo?Г-/̛?&ANh4*2ĺzDql\_6ҙD!^`Dy(= \h2IDT- AH~aٚW`@\m Dϭ$8DD >!FF @ D !MbQD(B9ՌeD! YJH"$A!TI B7ZRa&_ UDhAyB| B"b ܦAa}FW")nF'4dfI -C-._KCEB cN| |UTE4 dAuBcc#9"(Jt #7@9?$AfԠ A4@qFhc4v7#69#'J' BEdEB0#hAA$9GEDFF6#<#=F~3n4Vc\#1%RD_p+Zb^Rb/ ./Z/cA0NeJIY%ZZf"g",[bDpe/h%^Wυe]YDa&b&b.fG @\bT !c>8-V%>DeenyaD&&lƦl%$EtnLdhnR",BD,_ps>s֦ tVe0lZDtwz >Dw~gv'z@EtLMo[Ο AE8q^D~JFz.(6bR|̧d'n E8@VF(胶(<m߅}ք}ҥhy[uf\eSf c>)FDnP'Z(BR&vĒhF蔮)f$Q\ĎDgięE.*6rD$薦_o)hn-5F(jlv$APjf(nvΟġ+%$" k)iKLhp*\%iJjk*Щ ʄU*^+$4k'k:fA88@ ®FFtBx&<@DP"$@*inENDmB-@Ӓԫk/&/Fu @\h"X-*na.ED-Djr\BrNtb*DoAm~ļ:oFtBZrΪιgE V|VDUZlFT/^0FA|mX%\諗6v*/ ?SRo2N.Nh_C8ύ0EJD")pΥZeFeDЯ)Dp/IXere+W@[%"N\XC[e_bnUeHhp@0!! {-"L$/)-ZC-D1f-C̱U\)^1Hi'pUqo_@/b.~C/)/SDrOD11?-^G,[ 6o37' '@:nE1E@sα2(ۋ() .,0/B;@gc8,-_\82x2Dr/bnDF.D\sD3* C?L;L'aM-z,@EpIID cjq7?5TGu,$,U_5V/+pFolVu8{\3ծ)$s3S~2F]'^4/:B_tv&AJD;/NpEس tB^!^uVuCcρq)@D¶l#!mK!@JqFp¶R4T7s?wi\tu_w~8+v_x/3ADDI;)4~l>W[\3,G/ޫ^ti2-j*ܦ6 szSD3i5-E5DX8~I)tt#ugb77Gϙ7H,rg3te(Ax-kUU"@/wfU7y&D@.B뜌-R6JD7E7EvS4`f&/E x5Oe4gj\ăGxA4\#!0C{3E0+Dw)/%OD6H5GxڸeH@ *de:'f(0pB,@qqCGLa8DANęj2EDxt8E&{g$9A%K&C4;Jt\M SĖ{gE$4ODkHy?@(VDnt/ ":C@:Ε& LnKpzng|$:pĭG>@t8P $H0``A':8bE+"q'>䢂>2 @HS31SMfdL>}:恙 0gw0B֑9-dddGcD^dѭM#bT:rO#"lޠ0,QLdre˗1gּsgϛ<gӧQgL Ć@uE+cֽwo߿>xqǑ' 2P9"}Nw,lb;3\Nbb'9(じ3kiˑ9RF*m36Bf2k)4*.4ࢿɰ,܈*8FJ A 6Nƙl19zl0'S#LR5:#M'([äf0nÍ/ S1,3Ԭ=x:rJ Sn L380pCxtGJ6$Ct#)r/F#1b X' A 4-<p&",&8ɢ4*,h0`Tm#H)#bA2v#giS,5=h=,"r#!#2q-S ,sՍT.ekWy{ײ5An:; * '(rhP 2HD>ё`ňÍzӋFu2;iՍdlԒ ĒFAYA׊gȀ"+cFzg}FѦ9J6> pW߳m&M7vաV77owM'pXL21E$h@A{Րu#)ut"?F:XЦ9j9uÙ6F?k%VVVy$"uzU7 xĶ&/@";"rm:q8ڿm'‰_L  8$Azw΁nІF3`e:Э6C1A w]ؤ?-t a! 8 DAqzX k $ l*aоρc4aW@)rjuf#F5jF'V4$M"EkD(r <$mDk921b$| bz|UR[\%)R*`(NB 'Y0FT"p%N"T6]"l0aHe KH'YDs $nDp;-},)H@ t 4P&$DJdZ|9(1Qn!o P'0@H("p\#8[ EhU)(b/ŏ1HGaẊE5>s e t"%H]dS5+VXֳJu@PW%=Hr'QV%zVfMY%ȎؑD"Z@(J٪Lj5("6uNDNj*WeE8Y'%["j[Lp$t&xiFYX d]ngDp@;[DJp8"٠ r$EV&;=’H'8QTN"<0U0DFZfS"//gFEzD'"% "H+!Mu ZNuH+J5iMIJ0.pBen2Piw8ZR {bxKL^f#mrc[V60Hw\4v2r0(9LfMЅ6tgք$&Mz!7Ab2PdhtSGYJ!%^LS]S%44i.1W?fGH'kCO["ck "qĘH2,(P5O%䉔yخiSkVbhVsE<@"r8n<6'7гfF4#YI}qoЋ@ hHm B('{&  @lWMM$#S ]U#Ʌ:6mrޭwƳmmG">7Jވ+mJ^?S:ǻɦ7g]DW0V`_uwV\U@)>z28#ApL R@qOLdO8E-<q f&.w9"@!}am~>_$#i)H-CE|Ş$ΦLYۭ~0ݥ p &xYfBg:m"XZkL!-o"(903Ȗ7J /ꦠ*˖.BJN"X:.R-jk0@L"-B&@F|"Nzm$f0J.( ȊbA (B I6#`B2jV 0-BMiFEyVp ; "J @~9f k&`Fxv"# # 2V'@2sl",lzF+B(MJ34-{F"Ԯlj9 1 @zLp -b i0" 1PH):D2##H|Z*ɸ EƐ q 'B"`* J >b.p9+mp$M$t P | BB*'R.8 ڪ:'zV뿀 #l"Rp#\2tG0⍦XDr/ⳈE#&R"*,-kC|i*%E@ b2Q,b7"Cllun"LN/C+Z-lv&R6R"d*dC *r2#(3C0#.es6i3L t@ m@p@]* -(\ z-J"Q;rwF(^8"lF51l,>CLA-cJ-/C,)aQ(A \,+V(+/X3N->'F-->. 5@UpHҐ-&D_P#%CJ El+3 ?ms9g2D#\t`T6`FqF1"7#!48u(RX3xI_T&iJbDD&-&Ir2m$rM;P'ZL$2#ZpS"IH /[˴.ò ?P8P'Q}|o0K0~.HFy@DN+ccVKYGdT'3f3MAn"h46t"x3 03Bv"FbiY@G@ pJ%8'V{Cƒ0t[OMAC"r"0hR)"v"(N'+"9"H 9q6)$#Z?ve+'iE kUeO~Ȅ$dd 2HfJZ$?b -#gk56z"~"2N(U3Tx`swz6sjAǼ@`$QJ}r2"Z"R+_4]FPeM^V7̲ 3uGKv,\!t3#T*t7MR@^24q&8 E*cr]Fl`8eqTQo5#le#j(x?gqFo4^*# F3+Xe'5!@1f@I sL܋#~30NnEOeH2'&F3Z ""bpM v0$31:V7Mws8?u#ҊEt #tv-459,SQU0Tq8bux|JU;b_p ʜx0#gs5f0Ff5^٫xXynMt|wnCiT*zV4mbSCjS$j94^_-(VL"4|>u️& $4}@7ӭ&".W3Vj1qb;% uq9@lѲ5"tQ"Gr73k @+b{ 7"xm5痃+=ez ;r`rS[1!/ :zCr*:r*ZRf"`mV ?Tov#Ԙ$f:S P?"AjZ~zƬ g@.#6heQ?8T9S&cVJW"-)_3KH4IqOwU+{#h)09BZ3 t]z 0x!'⩑ 򪼦w/3DJ~۵;YhMp`}^iR@7:)X&C ]L"%8Y_1osق0pp,1:vYcZ/)"ċϿd2z"F2s#YWe[[$>"%Bf "*{.`r-bv*k!0I!["|m/e}x3 #`zf}cZ`p^^30"ùꞃ]utNW{:aWK bƵïV ̮[% {k}" $^42hedl**EY~#`^'w-9(lJY.0ϲۘP%M!;J3ֶ* * x#Wl?>B]cNsk"@mp6#>u0 ,#Q-b[^r@@>BF0ziQ. ?#>-#XD 1ƃ -z2ȑ$K<2ʕ,+ظ19`lP#q|1G;\AȚ6hcIS7N*BE Tu8ڵlۮ[!%Ҋ[O(@D`hTŌ;~ 9ɔ+[9͜Y&9`45D $ )zbOEر΃#H2oDBrqDB E`kSrHnЀw!10KN2"B%w96Hi\Cw@  H!G dDIhVH L@7# Q 90PydgJZ{ͨ\ ɵ]ٵ^ @Z}9_fHwHZN> eRNIeV^~ZHphGƚk"=8UwIb-)M&I]")Ss) MI7lG@W#-B"-X!H Kwn@%wPQ"`*Qs 6o-e"!`wHdbCIPP[62Z:>ģZ>U._Uk !lKoދoR$@"ڂ)IAտ05"z`t҉6I$)QEІ=)BMV d3Dy 5kGjI4@@ PppZolE:4`@87 H<W  v&AMp $жtiR'Wgv?Dp7\kQ'g^ueTHAz馟^aa#yQ%ޑ MtO|o%$dI=@ѧͲɑ\"$0RmcIl2N"C*8Iిm(AMX>z/?Z AAUP$ MXp,l _ 4 og7(0 Dp8"|@ A JxBqDp|G<D 9a B"F/ u@ r,$I>C*rl#;1CKz  +Ɣ2x$Trl:!'Wr-o\r/,1d*sl3 KԬ5ljs7,9ωtsl; xs=|s? Ѐ t-AЄ*t mC шJtE/ьjtG? Ґt$-IOҔt,mK_ Әt4MoӜt d|1^B{1Bg'8&0W}~q| 4-!O2[Q 32AS<@yK6)ǀ {SzЁ1t/]LR~"\\"|q D7~vw-}a7]2_Vxue "s7z'aD*#w 1w DW{gg z ?ixYqᑈ,d?o!X}S.0[.+3$%A"b4lX3ry0zA9nF٨]~hȋD(s~6qx~8^>{CW(ѱKW hw, h A]#Q0 1M۱|'Rzqah=-k7:c2{DzE;M]N iw*8#č0>) ܡŎpЧ0&ߧLC!q8 X ]Z{Dw0~Јz '@,vH藦Q!hIgp m{40RiTi (}镔)a)ci eH"SYI} ).ynmY8Pb]PQPm QWO0ylAQw @YZ )a]>,^ܥVbpqɑ@uz`?h V:F}x$*13à1"C2Qa7(f1z3h7-*-/ZNa'h([2'Ey3Qw-+1eg>˥#??J` J#ahY 8O DY q98 -i36 qid᜿Jw13Wq b@*wj NVh5I.S 󠦠 yx8 r% v3]"*&X{,]Z%/ȊY 6AḊ L7%A&E|S02^!ѬޚaZ `=ʯ2j ­'4~T/&a}RPF(*,{7M"(0dd}4A[,+75'j zW>~XWwHj #Czq1:ZK$J9ʳZ {MA `:*G*{n D !V[X;  ,|lfu )˹ka/j11;m7i}7 j;Bk2F8:jۯciN{b+ ;S"۵kKck 2|o%,ɏ8{F9D{pn&ۻbR}ѿ;CQюiKlQk11 mql! "L)* frKgXQ8|ek;.\+{ JL2 <ŵWy%1: q 0+i:k7|Ak=Rt+w Ĥ DE~9Ч%~Z«˚1LD-|A,L+ <_ʨ6t*1Q.ad Q: g**AW {lkqsuР|j ¾av 9k|S!W$%KdmҺ\1rT=Vq9cL4کڡ*`z2Ʀ@M Q,}N@l+ܼJ}4 `%؎m ]ո؍=Խea(ٙmimso=M m , ןwI0ݗԃ=ԆYz:=aݥ5$|-Bl.9 MӖlZ&> Q}ci8Ё ȇ O,m% .C]t ne- ؘ1[n p}<j$c0am:{[I+P~> +Hǒ:=h>ᛃ.,,UWnҦ?oi^ m:QlA&Q p0dG xnƿV^gb\}+uEjtf5pi  'Qqn ?Na|>)z|lnz >A zbއ|¾]q[ mq. kxQjSpm1B@MM_ofӺ"t 馠 a t~MޭR3$A7k*c_#D[9ho,~C7&Y|3>@.8~ry?{jo)AYY~D vdq[Qeۮpla k11mQGX{,"/T\kL $H `0IAS "$)8&"E6 q`cc% xĕE&|z:YrDHu4)qbŋSv,sbhR&jkB&lBa4zj3qA !Ƹonqtmፂp6"JY`77t2R 9Is<3D8 4)6i &t@$o~gcq)@ _^ &S/$XP~~Ϥ4⃠(PPA+ `"n(< /+X: CqDK4DSTqEtX_cqFkFsqG{G `޺k$21 @:Nʄ00̰ELIKȸTs54+&8MK3;94(6DC3 9„ȧL2%1M3' P2%,MҒ˹@eKT-KԍR%MVV ]'ګ $,:X:3Z*hvm6>pÚ`\(p&Q5Q br_~_S:H 6`VxavDX Y L_ I&4)⍢.%wrTMDV'e=X:O6֮cY @e0wp>^䥗/{ :mK%@i ]MP:":%z;0EdVk #PyM!33!"T6J'rFk4>&!@rX[u "|DZ3O#V}us8^8el}w{w~}N}YUlU g)=L Y:Z ߤPy) p>}O~yBqt3F; pD@x_ (%~^@0Ephj͆%x+!eZD@=,_iEǤmEx {L2Dtq2W]ߣBO[c;<@K8 G6,E.Qscy6f Kp2H $' Vxȍ8@YD=Uݍ,2 #r}&A&3*PPD;UDd) IAK8݊=NƏR)bIH_r.TGYLɜ2JlǔR!X7tv ,7Rp 5X[3G~q7E1 &yP遜dpы6DCHf0֋hK]RIh ` G2"C%HHJtI5&@F U6 Pmi4z Nhp4&QdtT2u NmYiG:A9Z=` ˒&uM}jH4~ IUS.iAe TP8)OaN88E,^'Wt7*mF6N{va6G9eʐ" G64e6*+#0h ;>͘\G[ЋVmbI\< fFL uM}jT)RjXӨ5SM"Pk` hV @'EyLԲ mxZV#A+&wQjG6wRf@ݾƤ[H[$vǒNPi$ N4i"DBq-q3;q=q{ֶ+}}2+\aqtmA)#YB0YcvlozѴ`NG]S/723qI`)'uQ^sܰMS cCƅrĶiW'^:BףNf'| $>?<x n|-/H2T>#VF b {uϣ;N|m{^}2ϢDx䎐O5<JwA{}g_~mG#3%>ۖ+}#~_7;m.~ȣ  +:#?`=F>@ @ @  >vʫJ4H)S@ AAAAbNrA;p KNh9[=A'|B(B)B ɣӐ@$M>x??&B6lC7|C8wI@$< "p"p@H²BB !A14 B6[B)x#6pP?$$$&$pxw-?DAQOLs.RC/9\FflFg| qn "k,oڈh脱~ CP qTx M1)ESHx@l$!C[\<8k,9"ु Ɓp NȂSy Gh[uLܠY!XchGhIIExQО]R E`@rsbG3qbYxLA؈TB[! x{>;qI5GfA!,=Gd K=P8Eh[/`A4HI 1bR3/iO;. 2\D>6>C Ⱜ ^.k@8` EFf 6a]㏠^NO6 @cS>eT.acgCߜ&0c Ѓ C=_͉0KC ' ]+ud(׉X1FB^EKk:Pߏ7-c֍T^gvn]9ۉ*tfyXsd]p)a5gS q;fid^BhNo3uy ҥbiOڈ`XNCugNi>̭1h]B8 m3Mk[\h@g@bP\ y k6ܳed F+bmޠj39>n\ ?o^i>k~BI"(gwz=PŔdܒ݂X6Թe 䁍- 2lũE$pko-^NfX6ѕLk^mN@O~GD6 BHH SMH.&Îu>д(AP^$E-emⶕ _88oN>#U֞ooθfɯ^bȣ =ޞ ::mXJNUVpi#| Җ61;Kjdo枴72o4oq;dos3h3"IIpl̘pLHNJ'qny(;UdAI)<&҃JJ|-۶n+w.ݺvͫw/߾~,x0†#Nx1ƎCF[RԃAIP%>=#Qbp.::b m*Y,g4vC5>ͰA"ڔbp8\msl:ƜufquÏ/>ϯ?peig y =Q%i{1]Dj=Z8&E+F9$opmU%uzERD=VERqZx8WA[r٥_cYg&u[fuVDWD uGjEA&Zњcvx Gdx/EC)զwEPeE豷VXR$FNUQwШ5Yٓڜ]ҥ'xhګ[Z݀ݠ Cjpѡvuڃ 5Z'zlhh) qucR@$DpVġ jP2լƶ[C7 sܱ#0#C F PK]"H5X9AvNHH8"RIBsVDi|#H'QdJ yZ U_lTe$iO&7R#Bk|ޜnwA*}J\"'B1dԎ n"(9v=DXŐ!(F1@nhJҬo";HoA |K(m]ҏw*TYl9x ~< o#>_<C><+oc><;σ>=Koӣ>_=[>=ko>={?>o#?_>C?ҟ>oc?>??o?_?i !aq??. `@]"`F0`>5pA#( CTf`z 4F`ߙ@'x _ ` '`@f R vxu _`B ~FLaVa4B™l!ua[|||BhA`FaFaa\A`d!@pv|".a!D"Z4>(_#l)6 *&%I"6 ,E%i@&+^-'|%b"/-6`.22#bl3I1 5%xA #|X#h0|#Z`6rc3:r%6 V;<vc=b5ڣ` $@@Ɣ#;A_ lB6 CN>IA#d!!P$BzGv_` RH`B!ȁdB%l%ȤLNL$~MZ_!LnD!pEMb t )|hlDJKNO#X$Z4PfLENdW^W$C@X4%G\%Kd^֤M&ܥ_V'$QrA!@[%Q%R*\B]_R6SFTV%CeVBL%\ZfR%PEdQ$`ҥ`r^dn}BFop%\p&c(J-HI~\XV.D^r"=jn)%kn*Dkǂ5"El'p8C@H*[R+5ٞuZ{n@t4CD5E[\gx+C8_&6G;}7Eﷵy4;;ρwsBB6`Nv!8s:K`{lC{{{/|xc=|M<ot󾖌jW`J93>rq )C1Ǻ)03/~/k?]+8يKrb鋸cM2x@=l)VR(Dq0 Mx+ty F.?A,81B 5(\AΗC5ziRK6ujTSVzkV[vlXcɖ5{mZk{`ih[oh''U',]z\c&Ł j߁xU2aKc*ұB aU@C*xT@Ά`bC27A*aꁐxdM8v0s2_:~P@~m~ <\pAJa(. ‌ @)D{)=D 3H 3,TC mD/!ZE_lȋ$YR \/:XN8b j;W'ؚmuՁ|^g=v>餕y5in?e,=-TրU5ju}u҉Ȱ:6y%m !B=()&b2;{4(pGniONbr|^'*xfX^]}grဝ}(x朗u=AO͖R"M/]:&H#S懢p^xЯN;eȘݟ3TZh~ {Ҁ"grh"lj[C.5$ IPW8!IvS]vWB!$$jG@xY?QP Xb@NP { l.ؐACW蹾I)9ܡ)zh?xAuB=/HQHMBH-6^1%e|ŃqZMLI7Ƹ^N8Jek&IYJSV PRUE ?8D.Ho Ye1\a! zЅ^".ȡ< TV]8v)tcH,gY[$kdn;2Y)t[XZViT?N0`@VIJݩy=bҞE` [Xwlzdt˥IJf9Y~]b]@*]EZ> lζ}ny[#mJpUr\>ѕnKZt]~x7[] ]^|{+N \w"w`,@@)\a _fE0E:@8!I\bWf Qb1񌕢⥰9ycJ\d#Ik2d%?Q򔩜4&#Ue/7Iȁ NnЀ@m0"07!QHp ]hCqp!@IY]x)N ¦ ӛ&(h )&cGjYӡ~jjW hip4'}IWڪA;  Ji=NXU'egg VAQ`W箭$IU>DͮKpEM$4޳S6QJ֪ڔ,@PnD)w΍¡;wNɻM]Np~wpU jJg7sz|v8PJ]X5n]|viqO~ͳ)NAd@o^N耱پi;i,%PL ! H`$XXݷ)vy䈿9I곳:U_ى& GTN =u@? ۴*tv!, Jsv4%RQYq7]++?OrT 5%N"8AA-5T*HD*EPgU)BWW= V V Hq9 BDs'#SBᐓ(0@S: V%v @)p))CE2w:! R{SRS-t*( (@`` [KVOV baY b0U) 6wV*.0t"t5XQHل"@D @ytqMƋs~\Vy)* St6-i=]DZO1~)2ݬm^'ջ.+}"뜦u)B(!^(N)V^ B-"ǜP7>%o M~žW`s_ȩ2f sC)ݶ* /7xϤ}"*]"}/MC!tǟ+=Ց5wB>)1%XY ?XQ?Uзki Hp`&DR 䰢ŋ3jȱǏ CIɓ(S\ɲF  'E irgM8 ɠ"B\Vp&K6 !ȨM !QlL:Q,Q8U#<*@È+^̸ǐ#KL?c޸hHHjѫB%qM8cf(Z5F ^-R]сM )u1 oسkνreZp \p NQQ t\WYcy_VF`ED | IבjAQh6Q6 ݈$h(,]1C@E0P-QJwWF<А x FFEE4Ivp1MP !P1Q \bLleY{6C9YsP$A_bq1=h 8ѡ&}GyZ1ɑ{{ ꛬ꫰*묖d<B*ԣ@zP|)pT9hD5w<%_1 +RMy y yX(0"X*$kN^Bm"҈OǔS1 ؾI6-a% qpiCU pF$7ʑlGA4l8Ҝ!!gL& IABĴh:ҿ69]Q'Wz8. iԫBHQY[Yb=|[ N߀>kZalQUǔ~" bKGxұ#xHGzn mq`>t^ +~!`:nij@bɾQ ::VZ觯>e>E$@0p9@87P\Ar)}s W,Af:# 82AY 9X {CLEs"ӱn}@ HDZE QO  <=e%JHJ9$ =^pJ ѧʥCPG!_8ɥp9y7hJQ)JOڮ: C5k8J95&:u5i sQ_#vIJ] Wj NFiBѤz) ìxi:;2d@ko.ЩCd~嚱ɱ iK'WK٫|JdZ*0'hjF0{,/0Zzt}OJQ<nM 2o {(lt)/89o +,0{۬3Gqà! Zpf90J닌?&* ;{QE\ AP)?c??}c4@~d@$i @g`@dTo<:P w[u" `Bj ԙ;Kp`@jCg3m $`փ@5m>Ũ GG:Gq՗|go 1ɭBHkiLfLdSDL+0GJˈNp\/դkMͲ SUcuYQExFό M*'%/|"AL".<\̻iuis-s WTW$WM"|M\Es\3Y .93 a}(Ǖ[ҰӨ[,}:!Bӳ]ٵ]tߕB=+@-]5>zU>vFFN]V}EJr`b3Z pp&cl ~Uֵm]vMXz@ג$w׀}| I~؊KZtLD6Ռ]ٖݮHmp؎ؗ=ڤt{yW]ڮ,z ٛ .y9j %tyDH"H Mي mэxM977@_-} :@ 4pw 7uX¹yIϋh VU@̼UU4M@ h'GQ0 3Y0΃(K2l>(1=h>蝠SBtBH 5K>a%[Ahw"u![x1;=Azr mIC]F%bp pm Q7^( MTb#7Pm 1&tDH 3iA 0V 0C5ճ1Wx2t-^p 2NQېT_Vz`ܨAZWU:+]H +ϴ<γ[x_F |ā6I|~qC~)sM(f0#u5OZm`$ERZs8{:i7Pɞlmtu7 nkTxX!9$- $#ӲtFTr!,OM 掣q$GAHJ/nUԺ!-vϜQ(01қuBaJ@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5.jH'PH2M.$G=D.Uw 45k:fգY pB$g0T%مDf} ۴ u` U" &Id׋NP,Z;lu$+M޽}\pōG\r͝?޲$<#0v;2ʻҢr(X`p`rzXvBgеE[(Xh0T0CvC. p  Ǵ$$R˿F<+bHP"KS dE(L1*SS;l&lF;mS! @@M-;86zW"ef 4H92l`t{fXt?me҄ºw& ۳O,F=wwwxmrv 8 X8hqo!W+ o6!ŵjZ/R@^B=:]H鬶igcB&M(xD`@6Ёtp@i U8+u(NX@6P/$N 2>1_^V/ѬO1Tַ7%N YB53q j}[q:FZҖe.uK$ 8'!@;$1DPI}ebABIM"APxV}J9Odz-6pg<)O#ѓjD(aJ!]ʓPx:hD%:QVԢ%pAUJBq4$4%D7C\S+0&'m8,Bu|2*p:Ԁ%m5 D@B} $@[DjQEUvի_kۀ.M)PISV`^J B=de'SqAJ%: r9t`{APU <_4f*A6|CufXE;ZҖִnEk[0ndu`D쨕h6DuiB͙j%-cKT7cAL١: ZDw6"hc5+ŝ򇺠Emzջ^׽ ["S%ײ+)P[q' 1&R[o*k t'8!suB܇@h208Dmk . {uc?>PY0e@ڰd&! ;[G;ɉ~ ZV,{`tm!BX ,\@;4r[0g:uv=S3mgyBbrS}(B~;;7r%=iJW t'pd'q]3`&ˤsj hpb5|(D Y&[s+KS/=mjWז4$rB=@iCЀa F78"ZW$x>HYG.<5pݬ֨#^wgATv143Aj^ x5"Sm6[4!P!<Ep*k.Q,Cv,5䶇 `wg)bD˒Sw_{uG"6>I P}V:Nd'ě#Du9kמ3SN \1t Lan 3>+{E?zҗS&E2@(l'YN()D|N{F" 9$q!x).BF(o#& >A{RGտ~ pIl 0xj$(#Bhj$W777P2+5/$i( "xc;H+0+;<20.,d0kB*1c` 5&B&F`aXD`EV:;.@ddCNvK,XP`Q~d-b/v RLdUXenST6UfaW^Mb6 &H^U d f>fMcm`aNoᐰrf0gK`O0gO)2.98gHga9.JHhfzO(9g.2 %cXA- ~wy&肾g `Br.b9~t.t^vFP8h/0g{FFh.Phvhn꡶OȀᣖ 9`9B` `G+e61HKa gq$6>1` K^kAd0.HVj lii/fpj jj ꁰꁰ+Pjր.8.`+H@ lXlf80`aV`A`1a8.@F/n?Fl@l XnlN–`m mSm&0lC`@gnlvGpj XNVeSj6A p>^k p@fBqn@'o.H6C `   '2cl^`O,D^.o >@&ނNn6ja+ǀ'2w7nh@oA׈1`F?NsSXs nsE(0`Jt6mSs-GT',`dINnStS uSs k;'` .H\@ pu^u`u+oY?ruIO` X/0pҎf mivkGsUg`a W` X3&pG`pb`vھ`V/[X@F.b'6`S'axt pw`pm9.`,7`7u yg(A`X` Ж[ւ &D>/W/yONqs 8!qpol u/`"?ď`W.`.xS^6ӟ`hf lk ||awG~[o7'˿> 7d|kN'9ew}S6~Sl.VfOgS^.A)S=^!Ĉ -1$xE" =DTh$ʔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRR:ĪJ(dx!njU<GDlbD&4Qq$,/9)w*|4+&=T4X =)% Jcb]h)ؚl%ˏuߕq |!V3o9ҧSn:ڷs;0W_Xii;; ;TQPhuC ]wU+:D( ePd'F.C">yN7ļ)GP $6%( 72| #( SI-fO' y`V " V.7ZFX@1P 8I?4 LAEA?/!+ASaIM1Q(шa5n AC]`ns8 Tӈ! $g'䎘`EhA0Jhđs]򲗾%0YE(%$H1 ""s!b@A11eJSDPY& {xQ@, &AzPkF'vINg^ HC8΄38SZp4Nf7,pAfc#:jvv4%mk03fJ' e,x"6y܁>St0m]F7ME;;Tm}1)6A-adKxUSoôsQkov: r$!yJ!t+9̟,7c 9Ѓ.d:ғΪON/;x9:ֳ>B].tY|}n;.4g[L#|~;/x0dS<#XcxK<^ʗ Fճ? lyx_=gxW=>o̿>9_>5j퓿?_z,?G?/7I6Y7h@܀M,B<@8AMt_Ʉ   D'<"8A>@,K4lń$$$$A6@ !:G^>!*!LI, K`B܁Mhغ `D, @@RAB!DadM[4@ "<X$v`L,Bݴ=L "))u!&JD_B'I@,b CHߴ)K %Bb!>D!J@B1# $2."a cB<"CТ1aDA0/޽# @#(<#=֣I1jcD ^5"@bD@2c 9-@B "A"KPA@="Fd30!ADB&@X:>DXB"AzcBb J8E?`<ڣuBA($;$R.>>B`ѡ DD[Lխ%)EaJdDΤ)TdD"D@FFAD-r%X&D;9AL2KUdJE@'dRΝxb%D@H ['TXaffP,e6C ޱd"]*J,I8"c8$TRUeDef'V!fDl05_&)'iJ8cxItx&@-ހaj.}3"ԧ~'zDa\ "@&B@J~~'|FM Tp@fBWء5&$@1J'QhNB2^[b` fbx(T'j_$@)($ j&Dc'^X(l(J& 5vCĚ"6@|J@~JiM`J>v!/Pi}iQHAB& "%<ǟ[BIHnjO}x!jDJČ>Ji0!@Bb"DT`JtZYTBhBPc JbDthceC%'J"n#%@>obq8(JEL%fPgE,*AQXAJ2> 6Me)ID8߬FԨ) lJDFkDbY(+$\bȚlrBq\Ś+$p*J )l|X:EbYʲQ(R`(c6 c"D_bI$fJ`W@*ʺ@ĚCTjFDbJDX&bI\FfI,lA溕"ĺFΦL@$@D&& ̀`.תb6,C-NMnDdj%YkLIj6 ﯆kDmBj.D iGį $LFr~BE1osܯNoSt->/o6/J`o5.MpfJp,&lKX~J8gI8*dJ̯DᚰD,ԮQSRw'DZEIzrpM@oT0dl.R qOq@0FDvgJ8oNnBLMpBJf1 0JkB/R0D1A.bDޱI$1+GI' An?TD'D4#!'"7rB<2LtB0$A K01&G&e߮&#/3&/+!)2/YN`.u2D8o1#J1DL[$-c;g5GRDȭIKz.3=@t@@ FDTV%8D lk'fAg@>wa?sFtFJ@|aD`4KJ.JT@K)ALCt,jJ@Df=EIh4S\ı)tBFkb,t])dm}Fui/,@ASK[9/9~NgbYV+]J(J%JRj.Dk).!5BiDpsv@,Ӳ`gci;DR 3}r6AcD6A6m&洵,%+IP@NA 7LDD sC& ux,RrP̠dvo7w@DgcPA &w^ݦ1y3y!^=5fs\G<τ%^gsJ1Ȟ-MxsBl1Jp516[Jn}DGͱfvŤZxL~WZbu'RCZ7l3E*n3- 4DsCpKq( <dUs79pG7Dw.sNO/3L5NA8NI'{zݛ7MޝGdvJĚJ4I187R[A AvQ9IL-IIH_uC8aJxDvk0W3oGOU؇[EqcI\ExyJ:BwW޲?GDc9dBD\?DTހÄGO7]Kl$#ğDa:0z>vL 83>fC(*/m[+3X:K:DHs3ʯ<˳<]lgK9@ 'b?mJwۼ|:K ÿzS:J\,}K@)s(D$CCmX~{dqvpC;25pξI,ÄcvYCV>Ik^;D=NM,P`'vf@DEBAEG&UiSOF:jUWfzU'AHtԧHy:<Ѩ7&z6ot@$GT򨎎N*&hG ,B$ )VϟA=tiӧAvII2(2XT tT\ AHaAU~ lGמU\i߿cH<)AC+BY$2CAo hn@@AX(0J()v Jpz/Ho"H8CqQyG:͡ZN ,nޢh&#`/"J8(=:!'"B"b"BS9BÁ:? TA Tʺ'#(τLM?E@ȅ ].Ѥ訹0i)!{a!J֓=$DKJ/%Ԫ$8NvӐVl!ebb"HW_o W܉hS8 p " 'Ek"2Rۊ:O"R/N+5NSɃM"> YI P0Phym.ȉN([> QS!V! ʋbBmʹ䥀6N "&;bS&(ms}[v۲ԣ\V(]֭HcxT2dQl,r-ͨL՜M2 g4;3y`>i3} o{zL ?(xh]ePOi@<w˭r:Ufg~{9!2M~n:1 t78M sH;B艮t qf"("D0!SۛnӐcP@t E4u9%% z:ٍRٵ0xƛҸ&R{OyƷGj y՞rY>V`8 C + ~g>7D&Y{ex!UGn9G7PnHӈ[z+f$E\L'frx&rk<3 `̃[@)Jjp% SnPtB k3 Az=4: uoYT ZK^ۍ$L(}G@ ]~BQ 1Shh:ĵf+?+q\⵽Č݌3%SZ7zC>I '܀OTU8YS9|@YO<$a=Ez痩 o jri?D/CB؊m6끀 )A! p~uNL`/ E顠#x!&興" D/%o$,/"SoR n⣧@L薭"06bZg"N"n p}‹`̢iNj" BnqB/!kN@&se"P$ $(%E" &7j$CL.1r< *#-)'p,t'C) aS0o"1! !Li*Vr2 (Q݌b--'"ҲP&/=Ch!-x_q$ :R_s b""2U,RB"-m*/O,/]t d'9)A#R)@k)aG6h!m*<!k(C,%8%,>$ +'b7+B=+<vXp!\lDƭ ,0!(E Js@n M ]G[H T' |xpPFeFmGuT)|-KJ M4NN! N N|KPo fL `p94I{v()QROIC\tTI01 *TR!4T @.!BQzD.d @>M# @6Gr5!hkBsI E ׄ-Ȥ5K\5]Ǻ 5^u^5&H޸m]5Q13TA #{3- !$2)ʵ_A6dE&u:p!v쵈mcudi6pP$6%`'"3>sbW;X=S3!*!64;"0s2@]A>fkތ2 bee!>mZz2lqtvHx1J"Tx"h)UdBEh-`)6CO2!6ORbNkr17s;jl3(bցhp}D4tM*u[t9s-D\vu[׺tWp;VêwT!ڠn{!"wu)luaw7!@wOYV]nl,twUQ||sR]i}b4ޭ¸t]f){bj"MAӕ8r-ys%礅S1>w+GR$c Uݥm18)$gs WQ `Һ` :'cf  ]e!<=!Z!I#|d %@1ߐ;SZ2?C9"+S+'LrvŹܾ',[ s8Q%rPnnE!f"EB^q >):!=:! LtvN4M Aq!=:р!+"͍W}?Zٞ]+,ڑ[4_$oE",>3S h@[;N7?L ] ”8;!<Ӄ,:6, PBb(M 45 ΝfDaaN3 )9ቔF 5A`# [vjN򡃛tڽ+?%8WOP^׵!^w ɜ=g;Up9uw$((h0"(UƥhcäPwPP 00/{f˛?>ۻ?ۿ?`9 -B7@Q'xPi Wd3=@]z@wxP"q5Pw,dBz,tp-RE:0D[4!]Q` )T E&2Q,P P GaIPWD_B%"4 P WN 4I GXB@Su|']$Yg4!B40c{I8ФC!ƹ)B 8(5"('C.taC 4C*`AAsl> mNKm^mniǐIx 1dBU8 $v-@ 0^ g"0EHЋQD()Я]$ c q IC1D!G<9Gb4Ip9TBQP2QR$N?7yMY*ZF@bMva}n QM0w,KP'zSig )tŦ+$ `@v yONy_yoy|i"4E|԰)lQ B1 M jWBSGN/0Dԝr]P"GY1P 4Z8 0$NOPO3T>6Bohղuú ]ܹ=[;&igڅN n'+""p$, Op1t  !qDĺnB:"LdX0 Hpڥ}烉'%DI nX lWL&r<"7k֠ȸ9dɉP GA$Coi E5NT#hm!.D'1(;LU'aʹgQNRt!  ` s,1L2W]|y&O P7SĮ  d] $CZid@5KؙA |f "f>DzN@G&p;,y&R(#A@yPR&I̳=&B'yCT:N¤T|`㳛Vf2 Ԡ uD-QL%i] QKNM .E>)9s#;Y29k>OezW-DyfҺHꤡhFP.DT$yCǤl` ,XBSVo8i-OM8mk_ vCh_sJeR$@k3@` $Hhѩ?GA.g5 ` R݁܍)ZWtbMPHĢ;b[؋FidgNLz x0: &)h:BReE[jx? |HGh U[T $Yp\z,B !,\+Z[dJd>(fqJxM z\b Iz5=J NIV 6U G%HEVGXD'tå3gVHKzҔ/-=8A+ksi@շ)oK\"jLd1Bv48,zZjU2A?qzVDi l $A!KHvM!LQ~_Nd,Ki-=E^ch}^T~m2A||xAÁeNc=c3zho 35/n4VkĻm!YU..Hmm\(l@^3hT6?Y)≣,٭:1@<|@a!w)/ G1M;! )cL>b?EN;FӘfpN&#HT7xGh(yutgNB7̆qcvAWATQvUN)%7@r- F:eإk$;}`'t;sx"!e0 R8w!4N6HPp }MtB`x=uFBQ1eUR a1pyvyupe?-#lv0.*S(~sw ȉ艟:18p7M(7::st"Ufy2Aa@12y7R/(0FQUBdg /gyyb砗p9%'ʹ(AI%j'GYRM%vroCI)y~%W#qPeEy߅G{t21(R:!tQ%9xac:y+1 9챒!p.`Au!46:iY> r(ꨏ j:Ҍ%E1xq[ywW閛yhz@{GQ92kF Qc p ^ah1(Skuz3 Yڥlg,Y9zy1}#%jH$:5 {-I[Z*[* Q@ pmJ7,j :PGѱG$k X% Δxb@֊[[ @uK:0/qQ|A3tQ*'dVSi|YT^rze RYrdZ5-0[;}|/PS0t᷀+KPSжRr 09C/XNfyh u):$pjw 3{ u1D u5kϻ.K9p[[,nh髾P+%*o~:2.8}xwS˿ !, Ѿ-LY .ZՂ4ѯ3z9c7+ ÞxX@1<-$v )"8;9gE<[9PPk-- /lQw3l[R@۾>cXtC*-N|qpT\N0w|B,rk9}LB9MDž|L""0džȑ/, NpƑsɘ/ɕLIɨ![ʭʯ ˱\ȻDZExm.ʲ ,L b+|_)lb̂,LlW[;)Ŀ|lZb!Y,\P9B "Tq mv!4ёgM%m'}a@!ͼь1-3MӤҝҦP5? A=7a99;BKMZ8lDCH7@Kz78 N |b F\-C7IMIl H=Nm؇؉}BNץB9$ّ݀zPs$lLpPf47L\ϋZٷ՜C!ȍ:[mo^w( q: Km /4QJ ~SPPwn.xMAj@(~]v!ފ6+Na44.6>G}N뵞ХkQhW1D8P 0Leq9tt㠱q*@n0D Þ~S}X(=$(Qg0Q3:UKW"uA^"3Xc (@! 4 4ֻ! w>E.[vaʞ㲆="ga,ta1 g5N^Gc̪J"j w劲ge Zyu"qJ0L5P;ʠ?OuoF|-5GK71)lM,wƮjP_vu1z*|8o_PG{/bջ8Mk 7`bc(Avč/otlFNP/,Ih7Te(~LA/7OO  A a$ xD'&CcE|4@bN$M-xG HT<'&I$ hr`0fxa )!RYnWaŎ%[Yiծe[qΥ[]y_JI g:HSL?&M2d0#*s ۉƜ wУ-<@R%Bո`wv&^qɕ/gsѥO^u0,X"M 7ȡ-LLMXqyD ik;Ht{zpB +B 3pC;CC!S $ D5I$zpEŒ*oHj!B&,O#ୢ% "ID0sL24L4TsM6T ; Bb#ĢJQ<ڏ!h:r@+m pNjj6sHvP\ӨQ-тSN:OŇ J!QssVZkV\suW^{UN`U<=S0h$8HFC%ZdJb&i+%JȯX,?KhP +a-7?[lMR:S,h|p 7pr᳛~'EdLƎI.>]#EoerbwTRU%z9q~x7x7 ' pcS)< '?J": nӞ\A$UN߇+EkK햵? Cf<FP`-x@ 2$"$1TXm42>||IG`tLd;R+=xҋb[E$$c xE,fQ[b6(^z.f%:D$bYsbC`u&#6%DƊ-1 H&!fc-yILfRdsH(%2zԘh *$9|ёv"* u*S%2JV5cPyJhKACNFSӤf5ÿ́<ѕtC 7"v{=j;# sK|NY>K,1b `S ehCP)?FI:ivVfsphX}#|K &XVW!YA#B!̈́hQzT&U"Z;QQLNуhs $ۨNXjD&Ȁ}@ϊp * P M&Mc t%la {XE=i8m7PzZ&* 9wVaiFX{t1MC1" % {יJ@[eb}[W`O:$>!Z[w[ʑdE+YΕq#Z5+D|!A:M"+hX)n>r Oro_M~RAfB>Zc2%~'2$,IC:DlT BɫK x+I>u- f9ď0S|cX;\dIQN8Q$$y oA M'ɦ˃(% T dMSnss|\ŧX]t>{BȠ9ik+G*eRdqӒ~ث!j js]jX:+6rE ?k@MH'n=r&k0B %P?]°Z4B̎~[{,}*/Zfw]CY@\ zUB6FH8x%m62> 8Hs?N;(M ΰ[Hź]r\+e4xͩ@ʬ+Y6 N^0@p"~NAZR6OG΄vǝΆ}Q{iK=UO:A@$x9N;! >E֊Ofv '|lT x:IbMꝘgGf[]'~ yr `C%I'װИ-[V3)ÐDkZ?X!=C`CAA/* Jc+x@ȿS",4gCH0>AC:*A90;QLC5\C6$;5{-q:dKC:$;t&8>CxCs8XD˚#dfC‚;BjE\3p#P9S3:CC"XD;4GS?S@ TATB-TC=TDMTE]TFmTG}THTITJTKTLTMTNTOTP UQUR-US=UTMUU]UVmUW}UXUYUZU[U\U]U^U_U` VaVb-Vc=VdMVe]VfmVg}VhViVjVkVlVmVnVoVp WqWr-Ws=WtMWu]WvmWw}WxWyWzW{W|W}W~WW XX-X=XMX]XmX}XXXXXXXXX YY-Y=YMY]YmY}YYYYYYYYY ZZ-ZEHX YK-cZGmۙKZ :r[?5۸aJ ܗ넧\=vC\u7Zƍ\W\m5C۷\`N`^`n`~`/` ` ` ` ` ```aa.a>aNa^af!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++333;;;CCCKKKSSS[[[dddkkksss|||28#>*<'B.I6Q>*f.i2l;rK~Dy\KVDeTjZn^`Ovgqo`>6B:E>G@KCOHPISLWP[T_Xc\jdoiicsmvqys{v~y|׆y13:@WOaiw|ۑޘݕߜڎᣙƌʔ̙ΞȐѢ䬣洫尧鼵꿸–Śǝȟʢ̦ΪЮҲն׹ػھ¼իܺٴ߿Q H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓo-u%УKN33@8˟ߺ *K,@@g& U !UHwfs v (e2S, @x(cA8<00hFL6P&vIHVie\v`^ǕdalIc)ix橧駕h)蠄j裐F*nX 0馜v駗U ꩨr%AjBUBJ%]qB& IBtH*H1;BK+-B*Ha GEM>T(6a!|9 }!)#ܹ܀'O@I;Ɖ /\FP  A 3I)'p 䀄^H@ɒ\hCJ1]yRtP4iSvH r*B X2DtZ$VU l9vFhMY [3z,CJӖ "025r>V!Jm ą|k lR$1fFL$(!u[jժ%Hڅ\ `!}}Ä#h_i؂(H/Lnį ttR01dۇ`?f$J@ܜ"N3B-,D\ bʑr!RBܐH)E#gRA -nHD,{^[&& 4dB@9)^0`# 4|Plk&c6*2p1tA4󼨠e\bV:.NJc2u"%9B q*]hNMLL&14*?H)\BɦHm$.nd*@pl0,!(xg< 5` BhCgъ^r{$gO6F>wF]Tm$Sҫ)2p2E"1B8+#3#0B*ɪJ0AԸ >j@)5QaHQf9 5h Y#3k l@uG)Y!wy] Ɣ-9&'nKvSsT$ȵKI"B+Ad}WjhF 'O1^vo ~x^p 1Qts_HoBr?EdpGb|tG f@( vnp hg-nq vqQ n !!8hs03@o0  tp6&t 2Hv4d q 8x!8Qpt0 ?rpC vhh3i g8`8(g8 ot ^`{ W7Wj4!Wk'kRŠ-Q ''~yV4x5͇$W' '}3折rHsC|Q F2vy'@{8yfq@CL@zOAQW-# AL@2 p` 7 L _ye@CrPrg}FC2zh N8UGt PVOn o1 VhCi'p(n%@'v:nK5W@Cp N2W4s'#'a'#Q9Wry-~R ks+ (ZU@xB"疨|sҗxX 'y}dR"ki$,Q1la5(he#!rq Ԕ  $W :TDg- WtWq@Iݩ@Y On/#)`:TDg H橐1 XؐQ 9i793>i3!ipp`t*XVGCHCvY ֟W$v[:̺_wk-PЕ044~[0A!`#H 3bml@wm9#{ebvu|%,V\Jۗ Gb|ep|y;* +|k\%A>'$j.ɏ a/9r@CE&ah'-p[@dXi ɿό R@dKy$+Z Q@r[_,ha[[Šx*LP1 Tvq7 qT q1X \@;sHRAHs{!]4 %<š%!Fw R63"^AQu*]yim7,!G' mqi&T L=# , q֖ U@i+? @J' KīEː0 [ ?E jMٞM qQ G$ <mY Qmh)P`婄wKE@=émaz)nl5tg07Vɂ{#a@=#ed2m=ǍҶ2v#ۇջv:-d= (ʻ{~"nT~ x}[j5ͬ-4 }=D/qO7G 41д=I7+(nn<.xtM _aL@p naLT`j 6{]Ý@y̬Ww,lS@ZicUb{$Z!u3btU:)Q ]Yl|n%#M>tfF1G 7Q]m/k9#g%#ylߊ]sR2Q|tзS}2r<n@X+.- M% [qW'5nXvn@4TkW邀@$N .(Zn ~hJ~`_47Z 4@~'T0~ Ca]Þ!ٚ|MFfUr߭2Npr323|>#>$;q3D\COjj$X ]% zB\*8^rIC<.aN ݎ nhmgO5@=~q WOCI<ZxPD2=DHq"!hTHT0a %R$QI$S.9S EQ%JQH6`z3)'E@#VNQPQ͞EVڵL}¨[&5D]|grnpFa]'յI_|=rGu/|R7;L`51F;)ӨFz89(v_6Q 3)j6F%uU`rAoXoǟ_~0@$@C .Ȩ: B"@*( k$fLNHʵ>JjKI QHJ諅pqEP*ѣ숥 ƉvĨjH| -+g)EP)eCZ #?@=,j 0Ϻ0! ;,1 ;ފl2 ʴ6rRP>Pa W_UҭQ-P0:.ۮ^4҃ ;}zo8KDikF)kD_0*;z=Oh؟I8Z#J@4\FU@~ل{FƱ p*~ RF.eyT ƖH}hALgXHwAK:2A̋z?z>ů@k$jֈR喐(Dr™L p)c"L^8"!)`C1?X}5r? `9@? ? `A)`ڻ˴1۹s;y@"445GHD#W" k 4 l F (xup0#)y*GHe{ P78D*٣CT/P扃dC@$#BCA|>싉,Ǚɚ$1Q I K@k'P09HFq:7YJ8ʼn8FT(r-aG8J R4&jd96Ijqd?Jc M\H%E`)a˳ZJP2Ɖ9\ uS>`L)rB"\6/LGxd<Ԉ C 5@HCCIp£!D #6qy |G=;S|`M(Ih< |@0x*x\MMQ ɗxJ!Ɓ(LVdq3G)?ii|2Lx˳Tt ĈbF`ТD \T˩(PJTρH0O xJJ( 1 =SNȁ`zL.̇8&HPM 9pH0AP7܀IpD\/D8>T."xsC4l$·XD&`H8L MʐN)OcbRh8LMUl =@K(nJEAŅP2BPЉIFZ5 [UQ2Љ(KHLL|J,& |?fʖʇKˇht` Ql L  9Ёp&`I0 LXMHt]]A8X)]#uPx&/R4h'ф5pȁ' &5hLThEX5065B'XX@ڰ5@ح=;X6=S`6Yh5`x@p"<8D(6ȁhx숪Zl89ˁ3ƅ8ֳ֦(]t@)W [9[2XU(8̉hQg]_cMQh-)Hօ#j& xRJޅe^;=^V95_.C|,VΏՈ_8S0;R%њ 0*UVr_բA ^hOTFW](٥P($*HvӚaX ^Ѣp[T,VaBpo-[@>=`S8cM 9=N]65a% F'uU)ޅ@@=abUAN睈dH8& D2S WVs3rdMbՎf=D5fvf>iI%H\jmT3IkĐddUnA~m_ -BcxA$_T %h|.SA ޲Ud׉Dma(̎P^MK*߷ g- WnME~Y`f؋Ninvf "c?se,a` x6 Kv PFcE&޴Դu-y&NĈ.~6䑠jjj1 燘^#K~Ld*u^âjꤨU6Fעv+^ lPQ%NICkndR`^bV=)&>%w5ֈk?d%َbT`-Xx.nu@beu}VvWt&o\.fqj*WPm Eˎo¦iFD )XHC>OM@ X~.8QX(hh#Ĕnũ ir 5& GߢꧣgǷR e (r1%grImk\?@mmkTqn@*qE{n >em& *hpW-IA)-f aчZn0p֎DL]q~&JKtpk^,ps]j2OcEQ$u!U?дtPnuC˖& m^FQ0f2H2H(gnlh#L7sGtWo&m 7 oB_U^OV߳2e+N kK .A . L (wш†qmywVvgR^s&1 'usAba'o婈Ι+4%Hi]WT'HzuF+3 ~쳰y b`,)p ^*[EP{`aK8U\n#EiD5|x|w*nH>ztU)X)t9ۏ_Wtup'1? zj?G  zo1W$pGWu7jezJ|ΠW^y_`bT,h@2l =0+$Q ō|,@C@$)("i"H90G?/TRRH"̧5 "xd֢8*ڴjײm-ܸrҭk.޼z/.l0bĥ|)1ӈ%PR]+3d tӠK%I.KJRmPu0c, S݄?)4%t3 !_Rh?,U?x$( ӯo>? 8 ^SDGՀDqV09EJTufp ]~p&MAT<%R%)k6@Uz>UU<\|h1DQ 5OJY&=EMUPeUAD5G͉u%5"i&m&q9'u9SIL}4g!Tۄ )YT1XEU"e%O f$T&tA3:j"`dIQuySt3-f" PBZ~*L:nG@>>5LQGDAdO !{'z-;. MvWԬ i)BPӤٶpmQn\IB \09MB\F)y3 0GyU(Qt?Q?adS)7hڔH~F3{4I+4M;4}5DDz+gUSBuEUFO¼b%)8Mb2C_ iEԾUCGS7eJ@3ݕ9?];?).ѿ35뭻:>;|"L8)P)]{ gn $JDžEu啩 ]et;JGلFXtO/tiZ[T/[7DoMd|LO)Y-*ŁaU8Yl)HG-PlP2@!&,I-B [I7-dbZ8m+|! B&$`,ƊlN..[, "DP+">E5֖S$h'Cph6!ceF=e"UcgNZ$eEKV)fEhq. -A,!rT%w8ɍ( {bOѵ|_3DKNj6=e JݱpCzEvTlH:Q< U~ H9R2yziEρ44By N}AVG17Dl^%ꗁt\$T~2LT )UB*t\$։knbM){RM"m*L,~v7ڒܕo(PQAU"U[dV [+6} .L[´T hl R4z}JT(!z EbST!'=9a[s-1&czV&VӐ1Xn!|F]j /2hj.շtPWj IX\}{Rو ' q,o֙μTZ' ~qHI$ꮤ5|b*h j +) *wvHYYLœ0 @YABV `_e'CmZ?[{bC)-U3DOeOenS")UW;d6|MJ&sywa5J>CD`p;O 3ėˍM) ř֕coD~d )Bq`<`_s}#+l 9vsq7݇iOb.%? V'AW y-0hES ̾ U@0 `Zm-]u+bi@/D_6t#qIٗƳp ^]Mg !̝']O}ٴwސGi_8' "@.(B/onl.O-ZRU/"/Dz7$sfx}/矉"/ S8\b;|]3P]ĉQB<vFD@\ 4@ҕMJ) J 1\E : A𵅱I 6]seyK<ĩ%*e4 H< %&] H8l,[)[D0Ġ]J(ПQZP_C @yi !^-@)t5L[=.@RU Ξ`^xFϙBUbAY. 0NH H(21+  Ec) !$L2VMNMDN^ LL\ %ONj\4S EEJInc&줠4e!X$FB%cQWapB!AD@q%!8%ZMeA@TchX~^D"J/BP4[Ezq<4aAl`Q!rFJ4Vh LM"[^1@R]Jz#@cpꐆM|A duZ']ung@vzpaX(pg"'pg'iL'*|w>[yruJ[h_g½  >Y e]Y >h(&ZHF!4h5Q\y9(DLtO&vmM((GhBx/)uxJ8D89h¸E&c@*98 B@Pln(E:E'wzAl@xh(DungviwʅP*)I.J0QOCLc]4iJNXpT& d:Dy4f_l" *&[]6DiY1n΋<^_DUXATnDkWED&X|f@+t)*|Ak %@{'lAAh  ,g[,EU IlJQf~"HH,6\ܕj2@d@+:ƁA,TlKqSlLI AQcFICPӊM)ԈjAC<c]~BjzRΫ:7--1:į: ‸) U\>qĔ*` ^)63D˅.Xȼ^z5Pl LonD&fj@Hzܲgҗ[C>]\E4뀤 ;N /*fdL>DQ6x0*d*&F)A)Ag>F G_C 1C]f:Y$Z$#ZTيtP@ik@$1sZRPopH*h/tq@h D"gb@})ZBH/[nCؼ@=PE@C(Cxk#>Jpm ϲNVF\C *^]0ưA8Z(El8H_]t -& \H$:(I΄|f>+-2\P4xqa Dt7v5$4܉P9H0ꢂT;-BP%D.h&&bqO'V,@˅0BI4\p"ؘ%ss@سB[XW@x*ot OZ<᠍fB)8ec )XNq͢ 0R@ W vl[@R#Bo&B0᱁om'pSp 6W4t\] mE %49ME<H_ d:Ip \»K @*0;P$ mvj@,{X^O>E[ @!t12 dDʅ KnB)0*+a-J>1SCDC $E #IFƦ;Hb_@=(7A\ 9Ld L!]B.%GN2DVvy+vG׏oA B}h׳`D"|*r}A!AA)C|3D 17c1FD4UAJ |At ft9K&E[WN^-FmAPu(iR`$DSA<;De9w7Dդ k@R s7AB h#AJd(iب} \=C@,*s#@9c(ܠbv4QA6@ B5`A&$@C8HjIdcGAi'QT*)Q&9fM7qԹgO?:hQG&UJ48#9T#,U 'dQˉk/V " B.ށQ ߃S 8ae޼rAR .(C?@rA?=rCK;\r0 !"IH၃ >"& bT . 1R;TvZ7 žEVf" 2 ﻇ3(C` "S`С( QI,QLQYl&!ĺ !BDXh?ۈ>ª { -. !V!1Ě.l s2+ (x`*3聇4(5'ϠB'>QΧ;!bD|Ї ETю}!J̠FEE(<1B(N{(0Q AP"_MSK\;B3 G/j).L_72:܁hтu+%\wW2=P' b!cmUkj ;$p*ce<;Di* k{gT.~U?!6:ïM]iqgچ"b(Ǫ*Hdc#;fD䧬t327_~Q_ h0Q9\u{0^?mHPQ#5uQyM07 ,H&!AHԦ00M֐ݐ} DF,pUsT׳1 zAli,(*иއ+ Q)<~M4`r14AbE-n]X0NdwU)U}HJjUdAܕׯY/$nYy#LL=BaJj"y5GKZ)Ik *\A}p:aA>L0 Y bC]@r P\CC6{*aD IE<!Nq45Y!"䰌ʛ\}F)G"H99%z#S̘eeBCAЃrs)M D};k_C ?Hs'*dOာEHprR(#II=@t$,H)5T:dn;]BbNJTZXL/"Ne~,1}90@ IO["\&EMht 9m2iSkJW5aC D F@N)=r. zs,O0:iO" -HQ%<`kH+*T(GuҮ 4 C6C9ִJ)sKpn" !^IX$hU84p<nŶU*AuREnPsͩqkn7a O0ANGF!1bA@  -n% %W vw" , TcAn ,)0pܓNȏ$ (CwT&nHlJmu\Q]$ /4e؞dL]!Aefǧ0u| B_w@ q \Vۢ;FH&y O |-jQԥ&(jEh"!FdBU$ \2=ŝH bk:.$p3P,̌&'I mY x!@V;!C;R gwAK#aIRi>+/1p#nmېde o:D` bkK+#PŃ"[@ݥ5}4#4ρt&{pYjaS,2^&+D.# equUzM>1H]|Ww-bg&.$0DJ[n"u92  / bl@- 2ڎʶ' n'L Y _ 4J" .!V ")!0 c N v " /J 1o =o(6l t/Rm6ڌ'8[L,BC=0h}` hH 0Op~~#@)Rb< &f1!|(/qќ(6) vO<I/QL"K&RC ά ` pL`,bTnybj&ЮOi %#blNr O  0 C/!_NcP!Әj`}P%0oR!KF&RcDy,0i+ '#ޱ8V YQc(ڱ -S2)S1_ٲ-- Fƴ1 aq('B.ygw6`łMqabPA,Qbh+=$M#Q ]~*,'2%z10{2B$!Z#>%Bs`{#>2_B!HL6'B%!0BnZ _ oM'~(j S,r& pJ`"Вь(Tf+?‡|$T"9q_v.?4@C a",!c$/#2P0)Fs 3LS`2EKu:^!+3'=s%k"p!pP:FeFFk696I$so B /d5pZ1j .NN~b: q3!T/60u 2g@2 vQMx 3}¥#7ab>?$!R%I@)R-RwBQ!8AyAiM$`w"FIx'@BB tTmLFQ " $*#Et9` #4l4' `A89pN@W.F@@ -+zDž|ȉwXL ɝɡ'zϼck+ʱ<˵|[QBɼW[%S]a^JUcq=u}'0-=Upׁ=؅}G" p`Ӊ}ٙ]@ 6٩ڭڱ=۵}۹۽=}ɽ=}ٽ=}=}>~ >~!>%~)-1>5~9=A>E~IMQ>U~Y]a>e~imq>u~y}>~艾>~陾>~ꩾ>~빾^C#ƞ>՞u#M qM8b}N1 NU"'!`giq 8{[a{Ha<8^y #_#߷Uu ?C< 8}_?A-_+8~:) j "7B0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3gN@&zO@u=:ԉ&d } 5ԩTZ5֭\z 6رd˚m霈i= W&&Ľ7޽| 8 >R(NAT<1P)' %M:&~: V7n}nDڀp;<}!&;n nT]@%;?'GsXHvฑ9C #aQY]@rˁXfX yB}WYyĽш| MWu ~loQCV]) b.c2Hc6fSLDP; S]5,2e P2b= tIC,ɤ *QBod o0P`5S*h(]2Cr r5= $S2 f,+SqHJ p,o^f&IòitkT$(0HS k6o9pCqO/,vق# ]GBM됕C,]ƀrCQ2bL /7q(/(TP3ܥ~ vbMvf=&M.|yB˨0>tO,P(,4n£5AEM5K >4]3($rE}y+ H*L +S68 -gOOj^S'Tdo]xO }OO}_XC>qw=5P7d?o:q=!Q߆"wRCBB8;@p\B8w]Nxr BzY" BǤV{*8`o4 op"SaBzX P73UIL:bΔCVB/4%ˏ^5pPH PŽNPd܄b7`"'4) {B4<& Gް01,ƒ'*)+ j )[H3{b;ryO [/c*ړ*$q1 ٧}"cYϊִulrFkb { uZwݫON0?W'peBs].; r BƔ3rqQ17ؕ 1epXW]XgL^ֹt!ːO %ɉ72īo(wd.όhY 0p!`]P!4T&lF̹pvF9'5&nZx7!$I-k'GF,5hBk`x!b@r(HWSZ5YCDmnvvfB=>49LaCe.CmBV)qhϥӟK7eD.8PH |0R GH$]#Ux>.o{tҡ)&+(80oA yBl&]pkq+ cO}o_OCd}Ohp>{A1NH۩p(=)h}U2CL1]ـ9CJޑS$ iϐ).\Poyj"R3 \z'Hh22}&i Xc.'4,0hhw O1)vg\}8 NW1LQ+'k=!r=rW~:1G53u2:g2Ȅ30:w/n  Azgzz6x_a(c&`aeNLaBu5Tq NCբ~ W$ḣwi7 Yaw<}}9HxGyA~ a~/D7L  jg)=!W8nWzvzHXTX8"ha.I(sU|H凱hiFwvqH`o?j&G}:: BTH anlv1*ڈ^ QR$=J\X>ȋ ɐ ~0K@Аx )J}kWYW$Ň reuttpouf}rR:0Z(8qHKƂ=a9+ޥ*}L]%A wCs&  \M1Ȉ bᓜvn(z? QR!IuiT{ vIx *8!1UP4U**'LCu`&{Pay48 bgzc >:^-^tQ~d򋗩7]6QҘauW(J4NY~iIo |)_K0 k A$i?'*?FpcK$G nf6ՖIv697q 0 ' %b5*xwMH aJKQiPB10wxf(X f*n4RiY1nP8LIF8HRpAqوs)[ʥfɗ.].fL)>%I2%86P1P2q %1i(N.p#47P]st'A]A73,{[A bL)2* A|UXh`ʗ.U]a\o{+wB/81 ph,X `(z:i+qP/*0,T^, GMos4JR]woA\9,11#lo \': 4s8L | ȁ`{ ` c3|ɱlC|up,$ ɛɝb::6J6B.*q  A(ʻ˽L;S<6⫗0qj(l׼J̄|dCeTƌ,,`jϫy bs ͗q!˰W1@ -ȃz B̆|MgЯq*#+U ~dzy qz,8`AmS`JK|I IS d~^PyR`} AA^v~ Hۉ Q;[ٮ{ Q~@ z9nmI>,Y t5: \M>LΗ UPe.~[șp+"{Y.?/@ڹGI=Q=0 3NV`| anތ !V?`N|y@L qe@@:BVQzqA_n >oȪoڪ]Nߋx/Smx z^o^ P|/ɱXm?x/q/ԟʤ,!~P $X`&  0ʁB#6DňR(nG!E$YI)UdK1eΤYM9uOA%Z(RLTT)PMrTQ ChJ  @hcKuҠ$2ؘ$₏"28HoDVQUR"R#D0 @6 b~.*S*SZ }` DUZ— -p$-BS b .@)#'b pA2 k"@|0/q]b?2ď؞#(TpAt.QB +B 3Ԑ#%P3ApD=rRTqA :婤AVTK2I|,'l͠ (JHIm#+(h:"".  "@ȆLÍ*hL͎S@;7\ L>"S4 @QH4SHӄ s3#B¯X, Iʄ@*1%RD^{W`-h FXdUv٘I(C*% =zYl*? *wpsj]\vVsԂԠ[ՠ[JǢO0-R3?(`uuRj(BRz :ʍL8qֈ89-U fQ>b;)jrJ(rFԜ g$bڣ GHlZDkxRN&*m~{TDn#B%pu-{\)`jn*Vh͑2AeA<ˆ~ˈoY7*1QK&Hz(jvZa8:!S94xJMs4;䢥7)BuBnZ=RzW>pH ."B, )`]y0^f $ _-xA bS%g2 ! P̡*QTR VЅQT.,@ *(G#:umOH'i1\$Z PW1#K -"9DfF3aRHTY G\1!D(}okEHdN Kd2 \A1JQ9 GN!HQ" *#\&"+ryh0MʫBPE8"TzD$! Qt`U=VNyi5]ByRpB$R"%8S5G3USWXN 6im!TBQC:\Ȓy*đ)zl QDFF􍊾Lk!gA[#hA,zT͠ EG͏(4!]5yٺmdcq-g=9%l6^%\.1u X"WpׂDWakcW$Pir.f(mx RH =/J(`b!ִխp5OЀbw%Dd[? YG\\P#Ut FS!ޝx C@EDQ@=PS jK)C?3RP02?9: <4=?*j{K>0CK(>P,#QDh*2܃K$Eп()(yÒpDLX9 D$э+){ٝt[$/UBlE)h( gzșB0@* `$" n\䩆DB9G~G~dc#X3p3iEDl $L10Bc4*##G(-4*DŽv i !=I>! /!UIIE0$.@KX-Hs$cnߓ4:x`Ɂʰ˱|T8˴\ˆhKx5H;$@ēP K; K$`1/Ă$D= <Ҁ/ E 0ʟT` #\az "TL+ K6t~i @ rʕȓ8ʥC H[#3=5s>X=tQ3;DIF7jˏ ,%&',Iȫz&= ԟT)Nx)"(>ȀT)HJ$MM)$!HD "P-PH>`8=kY]#v`1ߋZY pQD`р]aے;-E;}(?ňY &srؗ8`-P dj BЭ`Pɣ9z5'2E]T`a .ו,њЄ^ (;0nm2] -YT4&Ο!U")})!8#` $)߂8_J.SV v54{- ecT(LI""#>+HpMC]%fa.b>4Sen HX`bU"(<_J#8W -,/03rJD K֌)Q&ۼ`(K,( v?z.*$ R $ h)!H%n+ؕ0bs1^>ؗed)Bj?hV+hdݞc{.Йl~k-kVA 1~-V=>> mׁXU2vFۛjSIQ `TC}z!K'ɘ(2U֦2UV59`!"\i6d]mef]ۉRg؃$=Mpہ&=@RJ€0,VdJgT`dJb`E;8n8"S$8nB?". ;$ὁ)RfjkXЯyl`+Fb^ho*)pDh)-B~ky܈$W- N BK ޹t5pԅ6c ;|9M Nsu`#)mT6 CV)R.9l$FQx).'_XÆОКm"d><3pd-4qt0lsZPamYqokҾsn!Mz)lDd(C;"3?œL0R#9~an\}16r`]7ϐqfc2jBp9dw%͵"'k'Q#<$de\ r3)*Hyr^Ps}"sw'􎈰{\"`d`JlBY>_F ٘=H> OxSdqH"2NϺ?{{hupYJlMz+U&/ҶPe/zl`vйS3'#!oE 07:ihFy~-7uY]G({xz y_Q%C~x$8(~p*]pEВH>ByjBT\FׁN#xxck8^<yW}r|e@|yHd2@%p H Dx`A >`(ՃL̨q#ǎ? )r$ɒ&OJra\g $ZyaOƜ1ICD:$Ɗ HcJҌF$"B $BH"!R$x@`~J8`)JL^MuV^%kZnuW$2g$C/dŰKL U =Toӈe,&h HdG% L41/B < y»?rb :|h^dۇU*qCwכXrDR Dp@H1HSLAUT@H Xt_GX`qT@a[9PcWU%C7R6a 5u4IFTg`\ ^GQ Y%;ztPP5`ѐ& :)21a0 MIĉNqAjZ ٹs6clB&.@]i E0 @ O"GsDxYWLŐw$^@MLp@_%D`"1Ony\e}ƪ‡P{Iv =e l Hf^d'*! qvg+b#0!jP?A H`?T2]&n#OrV,2N#1] vDJBE Rx r< O:̅K!'KѭɔDHi"J"f1H` $:@굒{w,N0y,^UjdXCR>ZO||J$4f >oW2S6+3rP]r&8/D'|Aa" {CBD8ޤ )0l1\'AN{*Ag#F,(|($%/{S]BDZ((E&(P{@5gl &962d~?e&)ɬy\R֑tm%CY$ iB7䓢Ԝ֌A%GsFS\ xςv*($tQJK$y/fAj&Ś1©=n  V[=фDImpg\p"~ʝւ.!jd (4*# d H,  1@&ZQ\ SXu`#!W($ Oަ+HbS-H:**^qo1.: j @.ADZU xZ:?P@j@: kdy%CFVf$ @#:iqkd8LnFP:hد2$u$HD {iUFPGY#$,^4 f- Uʙ-A =P0~۾Sa H`dER_yH2dhJ[}Wk3]3$%4 *J3<჻!PфaY#IѨ E.Y FI lLAU"[Y Q@ T7: Hў:!$J!LKAl<&n1i5ZMbD )ZO#{G*"pIUybQf$.Q2]4ң uF9Y[B8OC[A&𳣽y41tZDBd-Bā=2!P k)9Y>ijN7 #0C]3} ȁ 4!Y]`NLcPk$A~5y&p{$@m|VzJoJ'Idفе"hJX?,UN*"N [T 9wN6@IRYMJmDtU΍J]SAؙI_]D8 W0CiDSvy[F *ɡaGJ i|JAl]\ۧIjdlө\4NٌC(Y4^]IL~aM@tr͓~C`?eD@AJ1 (($*&L`[O=ėT)VF  I |ad@ @~D A QH<0T)4@!"dU)8@Ȑ)ə!F ᬜWY{PDX@[I`F!UBA\:p A 0 ^F( & NB $ADXEdQ]-e G}[1" +` AK(X'5IL#"ב ga*q!=DQ^o!eA(%Ys!!TÜcyY'YS|D+8TKΞNhK:$B"*J`@ [@ZW 1D( $MIJeE *pV^‘I²YRFD %H&dPTU}D)`mR\PF ]EFj%PHl:8cyE5:N qWH=d)&`aq #%9vAҠTvH &u~\&dl*(heL$B)dPLDT0^nl( ą$ +]VEW hޓj@d%FȄIVT)δ1ge0%R@B%KDh ď*AVčĔgqK/ViE]@ޥL(B"%M#B A{ "$JDK|xPIT fBS&ӞPc?ڐ( B|KuB ]&WAbAh:Z-ʌ^no^"4j!)@$HgFgFpgrDU^Bx_vYY@Qi?BDJgFH!upBbe=+U]+2O-!&AC]@ŦFbŪtN> UńZD\$l)@tllQzj"K ĕb,1ڞ>" Jt4h^`D}Ѯ὎%WO4mm{xgS,GμU-zk(ٹ6"MGѶ*@΢="m6Y fg;I*<be.*ٯB܃񌑥D+ {™G\b.,DkW2.rQg.O&n꒘D4zJR~^o,Wm.LX&b."fLTFo /KqDȖ'XCe@`N-2=f2H-D*C.d+-b(P]Ŭc)< Zonx5xgDfFJߒnJ6+m{ zn@J 7">jqFqBXc&.m'LMz-n䝾 !ZW@\ *iK7I(90CZXl&W '! JHښJ/H$B$+Nlb.Ԣ|o! ؆+DCl1u.Fp jDoi /0:c&.+6GtDs2k>'HbBQ/}JZTsx7R_`1C1HQ /~fDT]Ht3B@JDĪ^e"D/c,ݲd<N-0qFV.* #U?R'ttB,R'S TK5U2f>+] yPoopBn4C2[D0^&.P\o2QdH _D/pRX6@ AH @L@= 3rq(Ҭ6K˶5j9>Cyw]$'@X*uGAx|UXd&<0Atm&,*47$/;CKOB{kE7@kw{C,;G\µD) &@IJ'w,;? R{D)(@z+<Q8C|?ӢOb XD>4C{|dLsH sHk|%(@`j^\A4. J&;} 0WA4*@t(W ƠоOT׸=-ܦJۻ==WJgS$*Hkˣ vJ7KS~+\4[~{~dJ3RAEG+jp~'p=I Ό|]B\ɬtts {r3GEȺ`˿[ B@/nHP4x tbD)VxcF \dH#IY#?K 2fL3iִygN;yhPC5ziRK"My>*P*U\]%*Ȓ-OueǕoֵ{o^{p` lqK-|pbċ?9H2~@&9SiիYvvlٳi׶}wnݻyxpÉ7~yr˙7wztөW~{v۹w|xɗ7}zٷw~|׷~ <\|% - 5ܐ=EM<U\]|emѦL12!GrB9RH4$l*r()HP : `*% RL\M5'j %>)).3RR?R4SҌRC;=Tb Lp0*>rG!U-J+uWn툁;2f}6&?"M~K `"!Vw\O b;yMt-]r%הjM$;wĠE}؎}(_%V6zȁ@eG0胔Q&]^]YhWJ*h ! \`/)0hpOg;vu⮽  l-1U (Eeq^MnnKm**$<; 0H#K锟. Ɉp+aS%jS^- ԃ$1fTB0zf٠]Rs+;"3F k+0 Dߞ{>/Q%zx`hVY6ݠ~y/~7g)V.!Dy.ۂA,y)A`4V}!Np'?5,*2"h}@VRh ,HS6=Te0f"XE+uAE=h;0 ׀eb,]fU,-9ܡC a1.^h.sb|U&"HSGL T0 ?H2Y@GTHlu$v #ԌOаC/"03,[fQܡ Y@ ̇ QsU2QPV&f&*LHҗsb"p8"%pJ"#" HDEE#F9MޚVG}X4$D5j@BZ!lBU`u$KK+U@Ne!eXr|(D6CS; 4e% g`.a 8E'-jQ/%T6%'J\BkKKQѕ3"eHF6 NK9a W#BLL*F: a[ 9>6B \ueD:-^ , kr_Ǜ] y}ȏL9@V֑n! 8%TpH!Wa @ !B;b?d )RFR"$o)ZA28%玠%@~"f(*2 PƖ EʐBSBd!AP𲙭 k/ȑy0>ǴuȂ#H!%WHMteC'I;͚`+{Ԗ)cQœj6[#lɩVjo 8yrC%YBҰh? *$8Vcy2M 5떲7#J甘y$ 9M_y;]ֵbWkֹ~_%6-lWXL|͞7a/D ::G- ,GC^S7e~/H%f$0 `jX<}GW !YDݻwCMrwj )+|ȬXEEu_]ud#>Hή Bjzr 0 _h@ÇbR2^ leh,`  N @`\v(宀aL H!Qƈ`3 * #4o^s% ƾ/ڰM <"n!ڇ)mZO^zNv ! ( Ph* <a!@jGB @'8%`( B: B ". RQ㬰.n)Vz$`R\lwf&rNQRH~R ^(OQ1\,iɥ%ɂ.L/#4 WJ Rm*(5 PANقrb Qf_n(%D !`Y(`0!]N]ȥ(43J¸P#fm bNq!GLZm4A̴62 sW,ϲ7ZK-E-_:,2 ~.!,R "r(R:*B* ^"Q'"@@35nhӨ e~.RNe+-Ϟ>$orRZZ,!!bxL6S3WN Sƍ&0:S5!ڑ;/FrS=V3̢Q-9N!S>!("  ,@62/|%@aT>QaL>G1l.Ӷ &&s cr.w(@ DHPz!z.,~jR$RM!""`4Rm. H BV*s'3MbFSx`BJ e/i\W&VP!%,&ت R ~BO 4sNP 80,p p>LNCS"TL:+(5*jD e` `ZUiX \FQ,6AWuFQ-LIH~Զ uY;H B)a!J91'` U[ xg >wruW%-R-NNeb@ uYo< I/T-9!R B["?9 Ub'6uH!* :Brj0u!SD@t[gDP&h_bUzZG4_RRW/"Jb 2Y+ZjZQB/[cڬT'@5\g 涳5-!P^G _ !2>y *RGl9(ov6,V0!=c!D6o#!@r%`or%deMf ufWfgf_4gEz5h=Kh;bGh Q+,i"I! 2W "'ur(IB`߾6] Blug-!$m"n`s xx372K#70$XjcSp;"NW BRd(v;@qX6@enHtehuuwTg"hI{mXvW%\x-i7jGv!)SeXz ƒ {߸w+V؂$2a|ɷ!6xv!-z׋X0$4V[.!@v!!KV5Fq<7":m| Rhh[i > {v!JB@=W#-PhAKbQ&v qwh"e߂ |Ik @|sĬuXK-"&Y؀r"PJ `t؁q 3bm$>aV%ipꊐifgcTD5&vX#Xd#ჽ"SwP w<=/ݮk*QO[DTI)BF_Q#԰Ժctfb&L˟E+"}D<v}O7Zi  I%"*#ib`]~$pɩ7 b&px$Tg !"a@^О Ot'%*_)BE6</6mark"! Mbўg bMzYaߦ$b-bS~]S *T 8A*yHb? 340ƏPLɓ /Q\E ȜIM Q !4Kd'I.fR+JÊ%LJ@R KPҭ d:cR Kܻx˷߿ 7A&@k6'<,˘3k̹g .x)'}ؘa) E) 夰 -XR-ÐhQ>Фj i8xf,<a&nK^}Ƞdԁ5չ }nAPhTISl dPe*=`YA5ᔑ';xP3 +x"I8PDbS#H TGtI%@u! G@*?jtrUX idihErFT jj@թ|矀@JVaVNU%a#EPjdCfdrҠ q4!r41w+VXh1]ue7v]F8ǓX9@XrTp}D @%(P4CPYNT %!~8.A]dcKJ^cH`!dh"1$^]akM `o>ta:$Ej!>XwɥT !YR4%*0h$2HRI Ծ&L= gK`wʶ`-ؚeuc @ <@JLp#lg4#aFC>sFRzR[mWWT~R[~Ea1`9arGl1Bx[(wPU,@'@,jV#iFST|FP (j)#!j I@m =LѴS!Tb(ER'p|`e0"4&# +0X$3;k^қ.1(2 $25L >~9b`MdOQ)It3.HL dRMͪVV$\T(  -)[ջ! Hj ]DWi#=#SL}HYsJhəST JIٹ!!I!,_WZ[9]|FhB OhOܥ~/ "y1c#ĚdŃBfL$ mZ&hLc8@ KuMB` px<= `r.{Y c|%4ue{/pL:Peȼ5xMBЈNtol>x'MJ[Ҙδ7FWu]$RԨNW3檨BVָεw^w՜Vg ƇNf;[0,_.Qa4J@K)6aھ6_2ab+֐^J!Mz PL!VCN 0R@pBEa]r!D p' &c&x@[$ &4^ޙo 3wRLt|h[2TK%$ aNҗzrz=Q@'QBe G`Br߇yxz?X;*GI,U.E )52/IܢnwInu nZ((Zn+HTh*Tp{&iֈ54w/[hiPaRIAgS(!n5*L $>QG٢$9A4yz*H5{8XGV_' fܷw'QOw%QJvA}Bw.57\#}S1gDG.xO4S{*)$x[7PmKh1PR8e(((At dTYTw^yrq]WUWwGa+vjS hx57}}t΄{IЀSaxgITA30~8XIg'YQO#^UI GQUzJ_2Jp/6b~ aelV_5l%D2I5,-AS@g5zxUR@mE 01XH<7cELHnUTeT@xyْ SʕI@ّkzʄ%%Q |DRA6;xV7b&5ST0)xw}s8Z?RC9}(ETu|l(((q]4?)u }ZYbb$ q!tz&G&Qܶrb{`wP%w9V T%^'Q q&Q }wYDQWWil'Y֧`85'SwӖD \ |yv)ٜ9ԉd~ Hq2X4H ayDdpp%fx"OaBَ RdXIהR2hJ%bXDΙ%1bWܳʡ ":_/R%Ujc'AEY1QYx $CNX$K4zJ4 fRCQן#}%fzhU%'J.UE6,zuIęDy%]ċGfRgOzQ !rwC &-?XizpQ*ZFG:WoRm9X{!Ic9T   DYRc7o~QyAJ5iTj٬RتOڮ~gy zxe!&?WWT䩚<'G&5r M -nă<  4[6ꖀY +G봁wzi YF٣-ѰG*mi`ʞ^s] JE]_Bx_y!PJxz9;6r76;IO1) &i K NıhI!~Z{GL (Zi슦U{ۻDo 2뵘`4wRY`ϙ *S i(a#ߒZ w.q纲oVýݫSxRjM~۷zIYhAwnf{}ŋ &`ŸZ Q8 Iۺ-}5Er)(4U& m VsDBLܦr1XX4Ezww).1G IN*&€^eYjKƔ:rԧ*›^Iql<P;Ċ0[{[?:! [^EJa%|a,c…bq;Sw,KǰJ[Iϛ[f:VEʼaȩLq MwiK\_w՜̏'[Y^ ğj/ʾ\9,ja_H˪|=Ό(!a}N׌]Ќ 09ʻAb<|h쬭ܲIѹٴ.'PI)xmvVk =DM IQ Jx_cUMN͠:T7=,)%}ƬT=|W-#m\6SĚ4~pd:=&|xܜJ7 0 E}؈mG}{w =ٔ]CK+y ٜ} eJI 8RP٦]ћ q,L pڴ-ˑI!a#I>qTT۴T{̛=MxV+R-x.`jxakڍ[+Jz~!իo k2[mDb 1i#uE'] ~݁E}[ @aޞ.ݨƉTu%WIQk==Lԛ@ַ6H;n"f:u{G>  o(M 9PII䕲<h ":&.x!(aF>m!-Q-xt言Y;a嬭ǫΐv.b~d[蔤,6QbB^h2MOcᩴ^r=pDśM~+(9VI#.ko ! wn6-= Eե<ߩ蓎&}Yy~ L%֪cic~xLdž;'.〡/L+nuLOSBi>ÍnGRҹRi :%̨~YEKnKt4dpU ry|a^O(.aT7.k3.ZS_hmӔ,-}]%;3LΫno&Z oq %O(F嶮1) a#5?t&.g6RM,^\xCw2 dM%R;(-zAOLa@ PD0a (TLb(@F&$RJ-]SL5mUTU^:DKa8$ R%8b)yn`H&V:-$aIpڍ 28R*6R.$}QD$BR`8B~yo敂'd7. ;.c[ضnVōCU q͝?]tխ_Ǟ]v':NRy"߰-&x ݆x?o_IfmSh(xK1"[)Ho -Rꨡ0JI r@k*R($^O?@7=k(6D2) HI'2J)J+IJ9X"LD(H! zRFT -Z2ǟ ̈́MĆ>*Ln#C-†&0 %x@%3 K.#ѦQB!ʄZ ΰկDeI0=H &r4KiTbf6[m[o7\RmP *rB4p$p`Ht#" mHȍp` "AU*eaH@bUHG jբ5P% Wb  S҉_H X-0F-pH;)yY7j5F L z{Xq&£k;l&{?C""?RF䕌xȭZݺ_SRH,ױBNi䕊͕2|JOTnXu0gML,T8_YH a=wwwʷxkTh=nXE[Lc qcXJE%+o%+FXm\+zwVGBJ xL"?6Ё`%8,*, KԎ?`J` "#J)h]P$!–h 1ԃX0dyK<v C.T. *.!É%Xa>L/X@PgDcոF6&K@@B(vD=/p XwG;'pa2AH%$JhG2ad-FO%S &UB,ǐ)RN!@D9.H/A &RHr"txd6әτf45*$Hh@ɘB H` 㹤S)+ռMp P橭K| hpJ HhgSJ%T#(e I<_(B,J&ȸԥ/iLe:ST["BriSyԨGEjRT6 [.TVժWjVUbЂN:VլgEkZWu~]k\:Wծw+R5l`;Xְ5[6ֱld%;ٚ$?a*e5YvֳmAįEmjUZֵֶB1ֶmnu{XdyMn;\׸ǵZ˷υnt;]v,Deox;^g?h+b[^׽o|BVo~_ZP<|%};`+aU#p%X dL wq#ބĄ@qNEb/qet=hBЇFthF7яt%=iJWҗt5iNwӟuE=jRԧFuUjVկue=kZ֒̈́*ֿ6Ql5IX qz* @<Ν5E79OQ~{;frS kyҕ̝M7!r^V[EhtwMʝBu"H[o%7E)Wڹ ({cL-O;Jd/%?yJ_^!S!)?zwV¼R?8J/) Mu}u*>)u?|'T=R_6ϗ,l͇~MlS Kۙ@)'L*@5 IT+3 N &LeFm2V;U %UD^ b%κI뾞dOp9S7F;MVFH6Gl8- ӽk@S;Xl8X8HH >v7hV&l1=fvl>Fʶl6G7Xn@7`m~7p@(ᶈfnضٮmmknSh:x7] Rh8`:@ =%ɩz6 ^ tViv `%{-j>F~N FQ<$f ԉpgję0䍨4Fi }c*errUr\Xrxf 5h%::P.N'UsDЁv(p.g')w+r-W5/N/s&Os(B>P<2sdSx&D߈m6#G9Wr;s=s'/:ɎlxuT&uu@7t`o) t:JLaΡ畠-6f WA[Lhєnc@Po8NѿPw )eh'֙Ȧ)6cjq}qp)J8]qO w*uh x'/NGȝ竰a w\F\oMbu~~`G'L,hP.q!RI Ał' $9b 3P>qa$1}Dg92(ҤJ2m)ԨRRj*֬Zr+ذL([*̲ml2MҖ AmPJ j*+C D KlVoت9Ђ{ M rhhkjыMDGOt*tm-KKA7ZLP% "C |P {P LCM0oA:Q)E}4I+tVWUHDiYLYMfViVMYYV|4nmQqc"DۃyfagRYRrEG- ){n՟fԠh7U%RP( ֤9 4+bA2,E;:*C5|&z+0*ͲA+t C9I$EsskMtGPO1<I |(x=Tl ,*JiY(%+yD Dҽ!3PC>O)nQ a-:QAxfÎ(!F]ʢ uP6h'\򵲄*SYH:%;(}sdC[-YPȡD2}j'^ұNg)͇E˝#,סԙQ]O_]} JQYT)eI㱛-QđX1ۈ f%ŏ@aY)E)U[ S^NE(MUUP1Dilܓ!\[zā$Eȗ1DnfLY `i_Q$4!2=S4!EڅG)bS!PaQeߨSE`"HP.Z)$DF}ZDO!//ޑ}!Sۜ5Ɇ ش&sL9%v QIZYV Ѝ[\T !%L\Tu!*E/RR$xq 0A6U.&2u_4̝T"]*@ $IHΊEEC>$JDZAibUl'V*"HN)$׬4bQJ$S$P0T"EG]"9@fVnJX&.E62``^R>EE5d'Wq^sZA`SDBqy?TLN|l(*$.y^ߑŅ,R^$DH W(( ZpEJ,BŖZEFgOg}: MU'V(6F*x(R( 6jy`(fa"SMa:!^>#6?.#j_[&Õ*R2H->U$\e=hRQ=jB l̫j+Hҁ-Dœy1韓ɛ~W O.Dr9E&Ÿ+CDA+9 FJE)&LV+dN)AB B+*%R,+*+"*H*ALub+ZXcSe~Ī^jYv cUf(c*JH#U㫖Q%&RdBj$_2mc~fD026+CFŒ(*U h=Z泎>Qe[wʩR$ +.$C$WN]!Keum돰 p,V4K@Bh ]) ݿ"f{ZGnv0 &U IA,Ȫhgx)nD겮®"AL.SGAJDQ$Is.~ĩEbGX+|meOmcuQ--E$fo*`[-C5*-ͬ~DΘ`#.(\oZN:fŃo!1WV+hf&JV6^ zQܰai$BB#z)`,jBDB$K-D O)l>+:Ex mq1?i Zy}n#DB#TlA@ohG-mRmO4aW3XE 07Or^ߘhɭ<+ ^ R -BuR ArRG)4PkDFS46G DotOw6C6MJgoc65E81wVN3I:Zvn'rs_RD_O>U6|3M&?U#O)[Yj*Zr*[T]e #4X@WX@RDXy&*$kY0-3@ v*08[?β[-Ed2nXuT\f!fV_c3 -?c0׸Ұ|?G,Edlj~ El~ PK[t4kw0uAܧ9$%7Es)J[K[D@v%"63S9PĤݨ\MG|lT_!0.o00@%[8C5/Y$,( C^ $[O%4@(Ly8*mY@՞R68aa?# `8d#X*CŅcx U!p,@,Rm#>g^#2`'WS.N IKC ߰o_r&lFDNtlp t!A N}!cUA nABbcLVB-t aCUZhC=D-!s)@@!.MtE)NGӉ *n]F1rNR1mtG9HP1@q}HARZRi1l"#!IIN xSh@&.K4)QU=*aKYΒ4yZ+ْ/ ^ɠ0iL(Act\HL |5)(7C6?,3 9)$CKhvNy'p8LF1C fJc?HCzI&]Y0fQ~ԃ.p /LcXKu sRo['-8~FԌ!  K,u%54՝*m1Ob╵_VjmthQm{ ʥzhP&&W5-_0 J!`'cX׎^1y'et82VqrGܽB2[Q/e{(CUE)䕗F%+`"|AyQGgw@P5Y]0ӯQK!*,Y H CkDed ]Mv0?8F{qHc_!2~n! p}M[\/Rg^F9-xDlv_@-$#2Ř(J+ cC-ӝ"'DX""` y| ^&* DPB9bShsCzeTB[Z׼ |YV6&qQ*"Ԣ&]8mU[è XD<hbS 2C,q1財hu*;> $l 8Ea@nc❗OGŴ-v# ||h P_`/ 18"g!Pa Fe f|i)R QWqE/Af]@wR};!jJcwL3QcƘ$0B!$=9`Nt1r/5 0Oj4H"VĀ3`bB 8 PBИ:4jC1!d .5xPaLjF2B&5`"n@ e[nDC"Vn1 .*,m}˨2@ C J!NRp#P #,Jf1 C=BZl!=:/2&!c<[j34eؑ)r5`"b CjPe/ .0: j;L#m1,#=TOf_ho#_cQFҸ~Ib.F1v2({ 2 JM0 +3τ&:1Y5dc",#O, W$)!)9* !) Ҩ.7ѾCd* =@d<'N.0158Cl]\!2$_#QA$S!>35!JAe,0;i#,~R(380CJ)/CJB!"s +d!< X,cT4C5OI N,=d=s26c!"@6 ~!33:j:Q!C1Pa34 j+NXaJ .6J` X: `22(C,7#1806a@D` ! J  J46 lk(&`mlf 1ѶA ,-3Qhs(k!Pt2 LϮ!N((/ss2&e aPKGzR^13es5&UyŢ0H&4l#uDS*R3C9;W+#`Tm" BKAɾҎ:[0k ъDJ'W0Ft1@"1 !+#NXH>C!HAh!l~$u X#,#WO\zəQaKm#ZWsA1ㆳ/n371X/BΎKS2)ҏ/Qy(9" xըM5bYC4"6] 6C?Qc83"0N]^}N.0Zb{/( | 3 w#9@!R5jQ 巂 ,:0|#tܹ~5QB(l!Fq@ʓQqD70i6Ϡ۸bů!:5;DQ*8#t!2=3qx.~s4u<#|ټyuRW3؝C*MĀ D'ûf̲e=ԉۭ"N>0/B|!|.[r%P3P\>^9Hn~1/"0:`{Cr6x3 Y#97"3ZO=w[{;"U#<ց:b h B/ ؋ 5{3)} P1DKi>TvXc+W2Rv'֞/lhߌ:~=Q Q)6'?40b*aB=&RPL Z4ńeÍ$K %&&QE0 ,*0$$sKJdm&8Cd0$F*u@nTvlK! 72!Æ#!JlXUBHiH$!'E8a&~9 9rYBzI0/E?a$DʹAXI"ۆZۼ!HmT <&0*5e jfU.HU*l,]e!͹4L&4v`H`` .`>aNHa^a%q2mD}AĊaIIq`(]P(RKYvYd\O; dTJJAdJx } O_EVXAZMוdDzXĉ P|YTbC(&WA#ZWARA@mA[y$De} At@X~vn GEͶi_KJ*H^JK&$L"J*gVw2՚v$%y$EU5*&TJM{0aQ)UcX9*%Zin oKoދo [3 FH)1b %Ew1;Pz* +[c7tnI;a=0H):]dֲ"( 䙴UlR 1:&D F{L2 ąBW_ Do}^snԧ@UP)Bćc$[\LܰH[AtIt 00%TJ(4rL[Tv Yj*kF)`.!%,P**H^J뚮d\{mBRu%-G)(qJӊkJVi6֙,LC+(R~~O>IT!~wx[A)տu @ IۜyKO^V1 *P,2! P|X\B'0"L Zb,! R(CЌЅ.a3D fC)\[ (g$|L7c 9 /,Ҫ7 UcJ;QRXFT* !=][Hޠ_ ^ - ~%/L8'? PZ҇3l(#@HꄿDѥ@ #<4)񒑐43&)e+|LDrYҡh0[{*hc cQV$pL\&CNqC@w¤ Lf3t%B@$]|D% @$UAE: Y$UA3(OҔ6UH*p+MoSe # '@S&\[6&-#3;ji{l Ш2T!eJ"0"zfPbVI?鬢Z'OnFlcl瀶 VJ*\9 ֒lsh甦Є*iXAaYQBsP *w#rԭum:!$[gxSY*aNd@T*jYyڦy$4 _EI f[8v5hXkZn%cM@` CI݉w#9*1.~0_[b DA>KeBҺ.i- *ğEJHCb@6In2uϛT M) ],@|spXȄLt#U\K۝%Y@)X/,q D| 1īh~n_iKf!aD8IFk1CP0n0<Fu{Pld|8@.|G6 };q@Xu,a>*,` {uᜐ?Uxg̀w$@50ixb%08~]L((Pe庣RX P  Hq]lZ3}{@jQqTJh}'`dZ$( pe|A~mG<%(^g ~/M+~W|I Ӹ|!bT u&99^A p ̯y_yvOqT Ͻ|6?B|bץU{B ȏhI\:'Ép:()Ii9/YJ`lԅn Iɒ-/ 1ْ)21AbNT;ɓ=? AY]4)mKHEKɔMO BB ,5aQQ[ɕ]_S Fb} `ikɖmbH%yniwy{ Jpis zxv*h !`%1T ) ɗə陟i@kP7>K -wtd!G7@H& `C Qt:-AiJ@u٩hTPI E ) plFyl)2fwx!I~F5qY%IPwRͦ!jd$S KʤMzPF-HUXT 6N#ZѠ%AUB|`8Y Н~R3U0gqPaQFU+ykUXJt%kE{u:)`lZeF`0gdAH !{K 0dxiʯ a gd˗c*pp{W;RKw ƲkI&AȹF@!kclsV1"[$]ԲU462}MLZwqF;*Ѿ_@X!0~ǧ Ae# @Ȇ;U\w`U (E[Ũ[Q@!k\k``5}.ͪ2[k1}Q Ա-{^[LM֋EPp<Kx~B< bW?Nc [a[\p & V P0p־nUtFq*A ρ}8nPV zDg(8QyDM\ͮ[vjl^$):ֶdw* 1F2" EmQ o% $~nFGDvJgU Fy.K]_^GBI A[< `^ APRy_h UnnjmouwH~&O1/ۄ>zm 2}]ą!A͘M8o}*oPֱ< 0:Y@z(oۆ{L\LUD;Fyeaf gUlox_V\pOgzBU@V .dP4AD*nG!E$YI)UdK1eΤYM5`RB* gG:.1 x& )xX' 0^gG(Du_Cll VR qqEc?A(PB ű0Rs$-d%_n?4$^x|qGr_}v':$#0 "Rj#0+ ˆ*Ҳ# )&H6h4&/ Gx,?>0< Ȋ"ĎBJ<HǔpHHLHc x 5 0R !뒦SOtS~(XYȃ` X &a C9KChIQpTyΊ$9\8K !Ms#1kYhvZjƊ1JA6h3?;@ҍ Ax2`0BR";R18Җ_䤋'n7 Lj ۳<3 19rD,vdK.HˈCwMf+e$1 0 u"Ąw!!"RtRȓ;Κ!Cc\E@p.F!3Ce(Θ9"k;e;cLvq#|rʱ'y+܎kУLZi$#p?荈sH }Ώh%;x@xbx}ka.0rn(]gAR0_0#)!rfGQB EwL*n $p7T|#N\R p@&0 < h:!T^"6!@q,6s\ c(" X@EVΤbQ\`8{C$bxD$>r k༉}3RD'!KERVw]DnF ޗJ@Pbł@!AVY(d$Hh-|k R~ Q-bhc$Y2Jp!K0!"s#6zaq*!tChF&Sdf3%v[IHd d 1"d<(2V$]s'<2Jvވ'H&XaY 5ǑۈS >"F=SCYC?IPm"4QC$%$A"8i(PB-H::TN'l  "vӟ(DH.w)cCs OlB1gMT[jWjhH/!yB5Cz 1cDG2dbLgC`Ͳ؎#~@as>#f$@!B$m0$}UBzY"j})* MPeC)PٔZ1+gb 9 1 sdjxs̬nVensndo__6r$FχY="tHڑ#ˋ'۪cDW19DN Og+V)!-C(՚^4ZLo[)XU qCTuJeS][;q}'6BT eO"byF1)'G: vĚnay؎xL*I|@݋n#rA{Ɖ)aD]A(8 swat-}iJ%$~e@[T-UeL>ZֳuɂL #k!_6+G 6d\1;y]H"rʏPP 7~y&IL'0#<$Dݐb(Pc1!7R0=i%B8B4仂[K=x?xHU r)11Y ;B?C@* d-RX=Å=@9w+`B(3A Si@~#B3@96.k)B 5)chk-h%0i4DFlFmc 3444tcCCaV-8;9H*$A` }=>Ği:E,H1$((SJ^t=PnĊN#Wn+EƂPTTXGHC0ƎEz5%@cDz@`7+FTx(Pjd\FFK8k2!*ٚ3Džظ3XC ǔ+@T 9dy51 LLx\ʤP)(@Ƃȵd`fCżߛ(\4SEP0R&IT \k >뫈x#XDFLb,47 r"[/8%0oD Kb 3 8@D5DU':2/ ;Ăː3tN\cЍ7MNO#NҐDQ" QNT7p1d;΄C$ݬN˂ hvC;dy,aq9xPhQ5]S6mB91Q2LHSCP8"oZ AS(' 8L94?$͐hpTKݺR4k E9%Z EA;+BiC"wSǒ#R#MEs A*MtC@OwCx+K%2mA]UqW,k>`*$eď*%+AC#)P +L>HDIx+'l МA;SLѱ{*P8G%]$yצRMNrU.Z-STcBV%B&m'kRHAXAP5TXQ9VZFC耴 en2Sųϕ][C,Z=+=]<X$PJ"8N5"]T##TX8X#@cPAXX`R\0+C% i[ &AYxѶ*Y*0\("9$8^$?@^$)hHpI?`^p%*`V[U@ZlIIS Eł1mC_弆 S%T2NM2`M*`-HGQ`;1Ԧ8+]$BZu f [% ܉mNOx} ]KN TW]PbQDR 1 Vۅhb3>ΰ?LǥLY܅ %& I\܆H/6ℝL08Q,b;UT㦘Ӳb]ݜD:<]4N,^Y?8$ImQ(d c눏AQe\^:% @2Vmu%S:cYlvJH\'ˍce]SܶcK`dq fTxY\VR׻ O>42sյwgApaxC\t@lNWF.)Ph(hK#[Vm^h۳@uF*idnInߛx4dPhxhʎxWS jrvRLjjg?=]XےG,T*HxpHV㜘pK$`Un$fRP@X?0*RPiզ χmIEDKHL^nΖN%}moo׳KHoonooo6^DRkyV&)/ %popp>pcYlppܘBAppq? phpⴥqqq)'vpq˜B^m/r#?r$O([&or'r(6q(r+O%r.r/HM󒠠n2Os5_s6$ 6W >u8s;s V,]JQkKI"J4{*nΟC.}:֯cϮ};޿/\lPE*68T~g.qo2Tf5S} %CW tC9n}KJt@Ȇavx"QEݕ\Px/3X7☣;أ1DC(P)y*9@&YSM ^2HIe1P (ЅIh9+Q UউCg9ו?Z"2PAYִS}T8P D_49ٞyRJ܅S Rn֙=m1t:Tm;aHdE0#LшcH4-j4A tDwPD[⛯^AZ tWO CU@0@Tu%9T PYTjge#߱p$aCTkn|`K"jЈHt3A1@@(rPy4wSS]Wc[sP{I}6g=C,z,X]Mq!PN5@+VDvJ]^5C2Ĉ@@tm $RA[4`4]^{Nt@OpoW%l6'M[4qO}8[ĸXg܉m Pq|W߾C ULDm ,RBn69LQ!!`!e5H 0'<nB@c6U%4h!C=T0N,t!rph31j\#ۨЇP!S#DUj{AL*(_8xQCa#ZX1$%+iK𜒉:Q FK#%GAZW²AѐB$)FGV%}&1ic"38ҤC89,gyHB*9Д%Nh'ڠPgcSޖ2B##(ʌKD_e#?ԟ &$iЃ"4 ](CL8sHOaRM ޯ>#ضs3Jw5"wȞ!03th9YЛ4:)Oq)]?TIT ZuQx HRR.*ldJ̐=-!dȐ'4j]+[ykoSTIG{:, KPa$'] ic V">5CEf9 0h,h}+iKkӢ6W;Q7( u}٫ELGET@ P7Pާ6IE:(Ixs> hdmidJ$Đm"(BPVCiqYJ7/O/0nPHUxϨZ%'e)N*b~'V/Tih*2 Fd,f0/)_ 1j1klCؔpy8Eu>N7c;VdB Y@(̛!ΡLD@BF w1glgx3k"iL gI[VxCC$J`eS]w5 BGRv-Ԛ(:R B, r 福*WejF\"i ETLk:V +54y7f )!j$4'hF?!` 5}"Ƕ ){ 3DX#mxX*8✠S9ͷn9R@[ q((51@' XŭjHW}TX|n+) v R܁GQ嵍@\C>򫼋fQOCMw(omZē!38"|+> @{S/5y< szBҗ'a<7k{߃_󵏝{:ORH_࿥|11{`/OE_M`)།K]Q |0$ ` NZ kWYF LY` 2 N@۾d) DuG ʓw`J!5 WM߽`M!i![䟆5x@qǤuXnM!VO[8@!LH0Tr@$J%b"QL+qLȡܡ8㡂E&*b+#:'f ,ڄ,  /c0 %bM@bŻ"Q\c4J4Rc#c`H.6J3E8$AV9c:s9v5f#*$t#3:c>>^)d ģXP̣ԣ#?2dC:C~E&5@EA AVMB~=BGdHQܦ BP cV`dPh$p$,HdMdCfBLAE5YWdNM"eR*0!L%PZ'nEdO4*E)\JVN׫MGXVYQnZjW&[r\X.]e^fGd&DNpV\eJ!! @8\ 8fJ gcKR$a Iysc(Xg @HAUUTlF,9A@8 UE)L\L,`D&g|V@\fpE)H{:% EEWgzQ@{ q2lQ\gZi`#_JYxhzx#}U%4{D)Df@G1 D}gN"(AY\B" Rf`&MQf0P`]& ۹E}D*Ť:%`ѩjڈTNJ) PZŗᠰqD Ki`TIޅş@Е@)Lhz6F ěk3UɆ ][&wE YLdIg\vafHѩc*rG)d#)B\N$Y`6 d)jzd@x,"j Dž bPhP܌kcb˜`+*P̠ +AEl ŷF^XOP>+vlc0+ÒmRXN IJS^KE@ݶHmrMPE  %`$@HPB@gr,B1 J-jmŶ D@U'ҠP\.I@*|).BbmN6b_H!&PE:NJ_4oXD^aM(.lMz_^B/HFlTJ B%\Bx&O%jnڊEĭQ_.EQզŷ DuE ĥ "DɜC,D ULlxJڢ#!VnP16@/@\“-M ,qT41Wd;__qA V0A6HoP0LjCXm$,A  uRꢂ1dE !q0Q0_EL$j#;DP$۫'²E|+ HB-&kk kCs4j(Vbs6c3e& p8OA.g`,] jJ's`i2QT2]͞P Lc**,ԆCњ0s\ V/ {_P$4n3KLqSNA TA**O+tLq&X^(Af:`A@\D_!.2Q i4RtDG; Dzs)(fPH6EEf^\kŪI cZU_K*0M;J$@fa-7OQV&09kT e*5]d#`ݟPXqQ@ԬP5CkAJBP5AKuO$mɰE QZ)pߵPY$}?vxJvMgPc6۲zcv_6,AE1k4)2ͩӦ]Ķ P LDnit& 1ޟ"rN7]'$\NEāⵣ/OZIZ(>7!ЊGsI:]h+\O{{3f4@}b~IC62]Lr|tS(8"5&_P^͆#Ņq )xDnW>b{sIk޷V8 :6% vԙ7kvx)ejh1W6V\߅rD n(RzM6Amw0`9P$4V D_ 8*ygYyQP 4":5WڲqeIzz&L&!l6?{#7d57:/YT <+Wk[O:: ٽ8*z5ŮMkB{8 7P2E0XM=*ԺSl6).;Dz뻈++S}Pb#ڀ^U_TDL0w]-tϹy|_)XoAJ,cs8/A&]W<.)Q lEQ2kxJ<E38oC}Jo>>k}MU+WZ[b_|E$,Ԓ`ȃw2J+JtPo" 4R,,b|@\q"dDw?11YgY4;xP`P* \! d!B\2`4#A*`1$Btʏ(i2ƛ!LhР(/4ziRK6ujT HzkV[vlXcɖ5{mZkٶuL4HR)2t %B@*X}1K$:gM54JHIC:z,#JFkH< I2k8쪔c<ܓ>@KH,B?b*) &jMN,+k*8%z28\CƖrLhGzDGLhH ץ|IR%4t鳄lT%)f)اv0f:4!%XE NBS p!ru|ݗ~6%/BHc *.=KC%%ݍ❈ sQ JXf-S uhX吤qHd>^ե-2LPidUH iE9g-BN _>^-) "QH{?bǪ׋?4!OGH r c؄hh$ U Vkk|ea"%~yI{Rv-}%2&! !ZvzߞKC h؏*o_*u q.ovҳ%tYjȶj[!X ٕZ+t _JH}n2$kg 0B(9 *m5!4 !PDy aALxP+#f@TD'>eɄw7b (F?T Tp.)ip2戥 KB糳$es pu:UPu ^g" F"dERJ8)C!FJCk6ES6$))YJWT%?80AK8 y0 #DȨ&X JtڕK&AkhDJi%Rv R?HbUN)3EHjǓ[h9WmUr\mK@@E$ ;Ԯϼylɍ,Պ$A^ۜ /Fj:5!E rj[ZjS^٤-j;ܖ5e*b)Vh)A,AH@0]er3\=/ ^5Z#$˰`5mP5uHόjۈZ*ĶlaS\b#` o+Z蒪g?ЁT(ݽuC^—AP! @_P),z15b (*| upH^pΚko1>DFP)#I& n R74W밝Cb mw\ (b֐RO ߽. TێtH$KВ PQ6jmoK#2C =ݎ2*iǥ$Dj*C^Om"$U~uf/Q%ಲ@.1|JiЉ^t]^$\AI˱uK,f^$YҼ5&2/Nl)F-AĜ X.8'BY);CZ;!@rI@ҝsU s kҪWY6M -Gw?Z p@ꬌ2T> jL~  = PHGy xkb+wp h9W#WnȄ R'Qs}CBrT O<%Fh0yTg,o#P@&(o C Ӑ!.aάy\ % xRj b`ڊ N,!$fld!2A LM ҄P!-)&HK\M(zB &,f`ؐ@M0, .IL& U TZez B/Pbg Bԏqzz}48G!|KZc<)O hmQ  6 hqVn [^x BfQebhhB ^6BgC B!iH6QL1PB `OE#ҍ֌%vp EhB.Abx 1 s"ҏ h"Б&o7&w'{'q H.K#)1L< 3#F.':P*D(46%q3\'",/S00"#1iR3S&k/,i")#҃Ro %;KB4&3k b ұ&rtJ6t 2/]"$%ܬ0"'9:85cY(&r"̲S/3k3t!<.Q 1=TL`2̈"U -iS,P 8q6b V-ͯ%J!Y,4@C;C?DCTKA&¥x E!BR t, RT[bZDHu4EkOH]7s \~t"1KB R4LCK%2DG!EsI) F9"@EOP0B .M" 1hRlPQ$C*,# ?@ + y/)^Ɣ)B0`P-.!@OXUXXXYUYYYZUZZZ[U[[[\U\Ǖ\\]U]ו]]^U^^^_U___`V`` `aVaaab#Vb'b+b/c3Vc7c;c?dCVdGdKdOeSVeWe[e_fcVfgfkfogsVgwg{ghVhhhiViiijVjjjkVkkklVlǖllmVmזmmnVnnnoVooopWpp pqWqqqr#Wr'r+r/s3Ws7s;s?tCWtGtKtOuSWuWu[u_vSɍv-$n9B&vx:kKFy׹7iGyy{ zKzzcyW|7Ŷw""}ߗw7?~WJ~~~ ׸7>؀JѐÁ#X7{&X*>/=2K؄e tOtG@X D1zO؆oO6<8`xE=H DNV̇e}YO^+C8.8$x8c,XȘx?՘,x+𸅫88y)9]~Xב3Yl/WpC9)R9*IygQ  ig h&@SF F9{ąvE)PݖF- RMyͪ%蹞kYzPŸYD0 B =9b +T.q#ڴ+)z<‡nAnw" #IL@UZyYzc+&"%.A/7U ›*B(7&E ؒ'tOaCNPG^%:0 @ Aڬeh2#ڟW4CKdeLCI '@WCUC;'CNU,{1;fiD4TdzWڹ:\Zܲ4jpBT3jN"J$8[y}E;$!x%G2ietါ%{R@OZa|%ӛp6fo@!Z @6Q `K`1(#!0`}`3 ">z/쥩W=y#` $ R $b.!.;Wzw=)|-g~`cBBS\i۲TT"i4ջ%%QjuYA%9BnWבBߙݽr 6xq<'b (F'Bt 3h"YWU\gi^CbK] Q^ (!]**AHI7$xus=$hqt~í۸% OLR %$z%4+mc8َ b T ?Qbu+Q M @C"A 0"N" >P?M_# "` Fi 8%>栬`a"d%N ޠhjL؀&A+Jg>_+0A`ᬍ3;_  _ N5MG*TX*Pj I 3jȱǏ CIɓ(S\ɲ˗0cʜI͛8C>g&Hz$P :dI9"8ZRV.gPEQ}2PmQ9˷߿ DŽaL>>l"qRjZ0>BG:3&nFٜzrbH _Ld ݨF:1e%* |jF~(ș3/a1&v{0F\ } ge5ѣE:c~+2e}ST!G)R=TLDX+ ) 8S=KmOQ .*d.|/cH߭hB~wz d6tz %~-,aOB'CDבpB)WK kF%;\1Kܪ¨s-r3O 7kXgK.GDHGYB}BPTd.ltWN~uvnO=n$!)רx|]#אG.'zYn3Bj3,.ՠ'#.u̡+4r̶m(w&T(\38gSҚ1`K5 .LĈ=XNۈF5э5Sz (_ ShP̦ %,eyziD^+yo.BL,p#  oY&,9ȓ*h(EI7nz.iddqf&:B'$d1a4ՙ,Qa$@#kܘo(a2m%D_F4!9 NITh*`Y tr.&tOs2 RE#)N I'N r&aQ.!cHjRp:PJXlDf1U?ԯ[Jp PY+~Z 8Y!1׾zSq`iZPh"'*Z5sR3†tIqI LL5F"b*7P@Ua1F39JhآlJP cazB j$ OIdKB,*R[eүMz;vW625eHvIBe%JoOؚd !(+#I^K gmAa3h&?5̮2C'A}v2#&hLQ"FSF\o]:*R@)6=c\Yƌ&h]Mpe0(nvjY!y!J֭ |N pF 6Z ߅WbMɶ( ׵ GDp/dnȟN?I[#29U)hB˘œ5*<˱!6&x q cn]Ü5hap7x0 S`#Lh}.$!at͒Pȁ OhOٙ0N7А1؞;^|[#Qy#3OQ.9^dЀK y" q+O|i>P-]R2 $Iws4ymϊ;#?/[; gb+i6P 5xbGl-3bFyazFޒG,uF$:I 9; OpDxYA[X=qWm&)6biܘ5L'<9g?SP$wH==elv $G:#=!5u^uc;r~?,.vBP)Buܒ5L}kz;HNV#m{ '_YVB1ih({@q&gG-a/'$05j3x58tq|q tKwkNl S}W%$c"}pww~uG~oRqGv='&]$Avhv8xvvxx J,Hr({r{ i.QtQ_iIq(n1*)ftc0X I E%Qpq$ Aƕʆc7~1}&ӉG)e y7HYDZ >ܕ&shx͸N~yM& o v1&qJizzaA=,.9yS^%6OE5+b*0* w"H Qr0ѢLzXnH&%QʕԍYP (* 1!.Zwz*JRjgҐ(&qB$!uiZ&r&ؖ9O&0c5AP zp0E ^٧4 єɫF23S lxNn0L 8pdAh@ۯaLڙ5jZw_4uʯ1N'06p"k&;(,ib;92Ǭ؂\?cZ`}U:h]Uzf:` zy`Yrw3/jxpy񘐒(w&ѳ ۪Yj%s=cq5N +KI~MH3ܡ(B<[+2{SCKjڸ[rJv[UBY$48 0 A5g&Q*BIqzh6Q ri$ul | ccʪSK\]75˳ #CW_*(,G5ܲ¡ԼPqћ`[D\M⁅{+q9pۮ%!<#Gk+[/Jж жƒ~CMitY1$,=ߡn: H)ۻ&`)f;<k =]0[˨80qz8hVz.quΨ)a<CM;ipKgst^0>7wx VX|k_䂟s$ȗsgҪeUp in皾ۜd>\k7N.bUPs\sUE^L 9Z=WͰ>W*ĔJNt,,Pl~`=A-:sU_ NLU`P `,G_n<"FHJg J0@| RQr UhS 5_Z! @I@3iHRpKxz|~?_?_?_?_?_~ 'Oy>ҏb _؟pB qG@TQ  EZXBO-^Ę'5~,ȑ8DJ-?BhL4YUǚ=gR JyS)cM:USTU^ŚUV]~VXe͞EVZmݾW\uF,ԩ8C[,Z8|fv`933[{qa 3`,!cs FVx|+iōG\r͝?]tխ_gY*8A0bP3wxyr˞K>0VeTpA)(@}#?k&B /0C 7C?1ˁ(8,1L L5(ۯ=2oG3ξKN 5^퇌ZIP$1K-K/3L1$̲.ks 4/,fT+O*|lE,NHDFrJDA*/BJIgB03SM7SO?5TQGQ$21ބ8q= W]w͵C<6X>CNPB˂1Ftbl~ *Q<\#R(#5\q%\sE7]u-)121 V0 ^eL%7뼑=[kD8cۂC j.js #hq#<(/Xc?9dG&LLX"ď)㒚.A/J ZA|?Bf4nca n = oU~#ZČ- }i3d,ؤT!'Ib[Đ1㎳#$ 40#61#1m!q?{ 4'-J0}#.mc8(ypҢe8 d'xG`> @/߂+ #2Ԝb@:Lh78P3AH)hZ"~P`ePA~P0d0i^^UDP/X"T`@xJOVlE4Gl"X8Fr ^@" C b aE$"Q]a\ 7Ȁ`w/D\.yoc8G:1,s > HFMASLA|@_.GHN3>UQSH>+tJ2#+4Ӂ1C"t$M#f$`D\)A`͌F0ÂX0c, #,♚YTDshom]aɕN:PԠ&JHYB%RHS,YI<W# CZQdSM %8 *Ai'ιӡB0%D?"*?|Q@L4 95wSx4'U..$bRFؼ$Hps)| gpPְElb5P.t!ml$Q& , @$lSKFS|L1T+ ڪBF*YQNŭ's+a*V!еDbl}Ӳ*709Iry̐UUpӃG7\^i*腢 !QpX׾o~>. H%?wPk *~EE* -e=h@J'uozQj8k?2` V$`Zvpd=p5JƄ 0 sX`Vp.  #*cL` YD#DGLq!02y ۞x9Inݠ xEţ |AviNwӟ/1y }veR b uZFE{B m2 PR )0(҈CfxG0,:VTdj1wF @,/ei$A7*ꬪdfO,Cft$c_QAk7NBLRVLG$*^ _AOzOzAT/S0#?V]X7cK$ Bex!mMc5@0y `]3IUT0'QH$^ưi  QZ6T[Q*𯔩or Ak:kӊB$hûhk"Ƹل7It1ģ Q@!K(k.0Ï7CI3[3$ !؁-1=Wȃ< *=i*>w[\]| >aB"ԋR{k 8?> 3) E-L0z` Þ?A j#3Q  :BƐRx8x)I ةCYlƺA^ɑ$ɒ4I_\et,a 0FT'24* -2F@ ,DFxKnp)PT$I@ǂvtGGz&"˱$C)7 E(< n<31*jJ4Rبx\;ɤʴF`!,Њə\# #$,ɧJPIJnt oԊLПpJ3tǭ yt-?D+C$8:@T(HܻJ Ԍ (*H  GLEXDT F%tIB{K@q\$IF-FsͦͅM6?,[$. P߄4@R<2΅!PcKldc  2@3@ӨرCOOTP̂:@6)*|eOϚ QHb TЈP+Ц8OThͩ(5͊sPTAYPJT<⤉}TNh͉QF NH6X=e ",&C9)RDHK/S]s WXr'U3`$ Ϛ(swq6H[Sh7Bayb, D;lHN$ .`3ԂGN?6#4T0MÍ f .c߭.n9*W8ؼ68fi*U(xfHf-i8(䣎?f[\oF\(-] _x? D\0ނhI]{\]`%{92~=|4*ڕhij sJR/>( ő& !$Bmi~bԋH;ƾ>VYB.Gl$峊%^ %t^KFjzg!{=KS BOD{VF$Xxk<28H׳^ 3Xqlh) L ?@ix$VoBpoΈRxoNE%``6%P7.h%$#=l)X-(h$ $0 ߿Zp %q*hXߊ0++`qMe-A-"+ ,q!dq&CЂ  ")JNC69+Lj; ",0S C"03y )o M/T7'eaWXGivZWc]oӌ8un/bdvaqΖqmkW6?ez7cpq)u9w87}_S縰/p$Y*)H)ow~WyL.ےW"M" U_ut!/wɄzn'qy[y71M_wQzywwp9d'|oz'7vbXTd?pwF*{vLSWGW|`h$m ƊVw_|`h'* cgwחW g_Է\Ç}Oڧݿ|W{Gx~ws~տ7G~Wg&r1@ko_RLL,h „.)TxTÈ3  XhTEK=YFUNI @ɘ2gi&Μ:w'РB-jF$Q)SHRj*֬Zr+ذbz`@ʘ*<,(1, @%45|Qj(tn],(ٴkN%̱Wn5زg+em66‡/n8]p)T )z 7JPzO&zkQ r+~a"i[vIlF tF,\ B2@p)IP)Z8A;Af$)*jtD,."ѡȍ1Dqo;L''ȄV0ǁ$ %2ɓ$1=L^ 703Χ*`. HDZmA^,<ݐ_"|0T !@ .A{5A;-ѽ}xP&΁.3u&m7OMGD~8q*/3pDrh Z AjBIOƒnDɃ `}]FdG%H/#j r(f>zu# G&n@&8Rfa>$ bN L@7.l }X) L@U)+$YCTb ӈ~ ZzڦD^mD B]B*)4HCDE)dMfRH;4<`# (Q$i)!LT#t"7 {sUA]Ux8)38d["XֵFVaC+KPkn#/j%sIR#L^UJ#:RrO2w4HH <!D'4 +p6$ #PAϻHDk&HCA  DRTqmp@!MC]r8$ hfWjNADҭ.'0S=!" MsE8 GJTXi7EȎF'` >V馅fdq+`\jnDB"I5&aTo :_r[ %NTXKpm/DRW ^v]&@)L H!PfB Ia|)VPN @a rh'E/!`t iFBQ7A$Ṕ t#@ &K3AK{Dok9 vDrafxót "FCPd[Յ>tl6UH) aUM6M kr 9E#:'5 G wG"n7!& :V“Su7)ɵhl3!1"[w뒘(Aߔ,(8B,H%$a3t'%N^ Bt @6`\DPI>Iӟ~Kc&X'5.O(e:bA EP7d wAp#H(^K6& AoBRh?x8rn g;UtkR`NjȲo[ts qčjZ&A{S?&zJH$09<1\q?oq;!!rmo^{޷r3ApP@"s-`u8܋)DDIK\!sy zeD\wB} KכA Y> }I NtY)s0@l PAљD  ڄ-6>!݄ =\FP8DBpaoxaOuN A4n0^HaLm rɡ!Aao@AC4N @ |* AÅBD(U !#'zXWDR! =ND$_Q "&QU!F μ `) vE ʹ!KN(YDB(5 Nc]݉7͜2#XaG>Nx͔dILaN (H."QRE*8㱤G:^H G+LN ,W)"́aXGLp%6H(D,NTDL*L&6[AA T,RMbbA@@=BO D1h6~u)e;6D'YBQDS!M`D#a<P,fF\;&Z#1 _fqs$!*(1KƄkl҄BZCXHb!ݥsV0uj/doaMDB]4Uv@BtbOe d]H@%AR@2%ZA%[BbL%*g='mBteC%,f|LMR@AB":Y}'k=`a:`ifD7&7d=e*DyiMQF>cCA$OLᔹʓB D\1ifkfJ$a@0J)PAmѡO4@JEah:XL&gi4]泠G *DzOeo@A#A܈gPmI$4Bw>@0㸀0#V x ]B)$ ↣B>D@db{SڌCWJx3*4x38'-f7OY 86A͊dg@zl ,3*!;@4rE.-ckQ`8AvP~B4q1QBdj)To4*ttOζm6G .*W)\wB,wh%&D#Pkop'T a7жm㶴MDQ7嬀 A%S{t_tO@<V Du#ndW4a? ]'Z6>v@K[%Y]cs^7 so`!푒@8sFD/xJЭ"DDcG9Uv<qz&ja6Pk@˕ĠRE6+BPnguNtoXoAyA/q7*ȱU~njtKQǁIBtjl7P7xvTƄS(GoB㼀Ā#ĥ&G5[kw@ Q#@ŘUDJ9q&$Abوb(BX\ċK5GD'D&@F34YB3ڠGO{ݖ:vDyiAdAl?_@|{iJT\$GF }+9kUb8B0=VBE+P"+.Iv+ģ>GD®x<)~n4ē午DQ:DczMX&A,=*SkjD. ؽ3&+&S4+D+0E@0p`T&,@Q-aDR&.JDA"\0Q IdbS&* yC 048gO?:hQG&UiS4"8‰W H!Ĝoʔ"S"IPRWy%CfJ+ ~DཡN61@(VsH(юb@!+ QqT5F *BcȒ-{Ch#ņ>Rg*ya}n ?j|)?g<2CYF1(P§-)'Ģ wty'{¤SPL)!*./381*n t!"5$-ғ̬f2 &"0Nē6jbn Z{Me"BTk+Fm{BlA)NUOAP 0$+G KK'8,Q(D6;a3ㆴX~9$`.uE=u&h^+Fw _ B ^ ~,2Hƞ=Ci)>azf'Mʇ9/2̿4o#5밑ŕeH /;BN%DB3  xE}C\HXB2"isDh#ZON8G3ĴLe(Hp(%5Z*?Ɉ xǔR:MqSvP! `G2=*qQYUNQP2Y ք>e~yLjn t OAz!Pp͍B1'Xg):L@~\'Mv!GDR"C.r"F')Pfr ((yKBY-6} bZ v&~,Ÿľ2K,!pwLYxu'*Nil&d&X܊j5oP82^C$7&qP.ICV-:! cBgÄ4jJ}B82 I{[JIOCED|^9)*.:6R 2>%*ImFZ1H)_ SNG6$Y#%Bn+8Djxn=!"P e.s)H64pf2šs b*ϧbj`f3@fBwg`h&,IkD$gs>OV(B ga>(ȁ *nBh[?BY 9dΤ |=!&L }6t(¹]MKBYk)bĕ7 5$0g҄@4Vvxϐ#Ơu8B0}_jߍPGH&PU4$)kh9n&HSQ-\'BYilAdLIbva'q h@ d:mqR;bVxǍ@Jʛ/@Rߋm _7Bk_&)º> X>5(Ok:[-QKLYSwpoWA3K,16AR̥*GscA .*݀s_PGb:6}.P\uFJqJ%³'LC?=x.!o*[H&@HP.(SKGB*O)6fmCp ̅"bdGWjϰn:,n> CtNaC± Bf".!NPh}`=pܲQgN7k>)&!pk!?k>ܧLA)Fr(d "BL` PA!Б>T@bHRN !qf*{H:$#8q N$,h> "/$,EBN.+OK*!Hn*! 0>q(./!.a">n" @qH@r ⡐nxZ"C3%$U±jX@@b>/N ` "  @>DS#9oPV/h0! `%#$4;".^:,MvS#!;!$N /r`  <;mD$?|$38M誮 +VA9J"2B"/!`,B"Ȉ'h. !2(0j! SR&$27go(Bg"&4֒~"'tIt4GA@ @@ H@ J. L- )TG(S#h"H)s#4P=b G` u >5^@4!!aQkMd`t TuT#PUQ݀QA5R @QjVX3 p/Qu` Tc#"A pbԀH+@u7SFXyR)Bp@ "lYs QyU^\jX *@f]]j `8X5b]u@53OA6?~Amֻ]As~ޏ% $>-XINJK5&M&q&ONC_OCQUm/BM>xˁV{<X8!Mp3!Q8!dCq@@5*`X"Q{d3@T:2N0Ɛ7Kq디Nub!vP@")(Z%feԞ IKL@?-  <0a  M8U  TCф;zJFBe2ʈ32ʈDƙ O8Ō;~ 9ɔ+[9sʦ r,a]DĔAAEka2ڸ7#@53rnɨua; mbrlQզx;+@]Kѳ4ՒwsX'ڰ@ADݰ`H``^G a8PBә@QD5t*^Qe/daBr$vALtD IQ HFotbO}P#6Tv31^ߑeV*LIe*F ZnBFNHD8TDqcn grIgvމb9d4GG{RԧaNdQ =4П FlekRAw5E'AC1IPe8B &[5PixEET}_=\BJj> mNKmjVJP!$E t$C9 p!G#zTJ#oȼ/E.F‘_jC djCԯEBÏp&!0 $T2D1A3G q,E ¨(\|^T ̢oGokN6,*P$s(*Fn!G _X@<"vv@r#BLEP$P pmꪯz뮿{Mjfd{a+$ɢѹ4M*H pP↡0A33*7bBslPZG#Ա ?DFf^oBu$Rۡit` *L! @Pi FGX!1xQ={8D䝂" 3 7 2$Um# W~3_B"*0$+‡ 9HQ}+H(Y k !"d8qt$*"$yPN'D[3Pi҂p3Q%#7) [a4Cr'"VB?R@br24ir44 < VW5n x˛NKR]"H`2AM5\ chʫOS4Ce #Ob/H#8.3,' &6|A\7: :$9|)v8bpHrr$ĸ\EL3^V`Chl䡑o/-Cax2s$]%>1 T&YH Q)SnQW\1\4FTWE$ )I @ ]p~&p52)d&`X%`Aa֣Ȇr ҔZ aQS& G |[I]Y&DOr`lj'wiIGWCoA6IrwabD<*8,Yɞ鞅醔waQy^i4 řq] %f@Tu$HGl1;a6 18C"[(bIVcTQ!B()CJEi8fQq 1p` I 3_ aKŇkş֧oPVjX$[:w&L '911b"fW+I2a4uXڢҖ@lX*@+q o0QaZF **c"WaWKzPK LHLSP#TEL٦OXZ\x(Z- ! )i⭅E({шh:2R8A}q9it-J pĬz \PaQVYz@fS;ruG|BZ ? Zȧ'ņ*}֮8A`KVqp:gņ`ŝo!=طY[˵vr L>%5`{b[*qt)e\C0O`& Sq 0Y]ӣ%-"Ew IK8vxEN)ȭƘ6v3]SfQȔn 7K;8"IW֊Ku! tt]CZp]ɫ XJἎozv US' s4UFmu!C ͔"~V7 O`% (tY]4Ҩ[q!)UG d:x gb`%Au;XYqj[Qlc%>M;Fʼ79Í,/yLoi-l dho5+"L!WgGAM͞7|!C'p8og!HM34`Q[*E : Б&0QC :k t1;'p-`aqn1}92e -MEbc/oa29ŀl-SN,ȬNW(|pANPZn"mppyͬOP0%8Kn 8P/ J//p{r^ثap<.pSi`o$Q97pp0 jPnN^/p3pD6wL0N: {l 6) t6'pcac^g)63@OP2~ : nl5.pXnua..3kQQ U/3maX]Pg9BoUݶN3@% rZ"Tws3O5:@8pNJZ6ymKMO 1Q\P/TmN%Q@޷Z9-N/<%-@LfoF 3ӌQy{}sZn ,~t 6O/Oo/Oo/OoǏɯ/Oo׏ٯϲy1oZ2/0Tߞ9$XA .dC%NXE5jΩ!E$YI)UdK1eΤYM9uٓA8Y IMXxTҢQ2ȩYnaJQZYiծe[qF-EEIdOPLD"x" &<e̖!3Pv9@/F0TmܹuosZ4p68@7+tZL#,Id'5?E\F^*'-5_?Epp@ 4@tH 쁸h "1l?,| CKR Ű7"r#io>;C d,H+ʎ7QA"4H$TrI&RA!|(`4 cc,ڲ-skD/#Gi\4Fl ( ѷlrPB 5PDUt .Q"K* eLS0ERP8>M,Nc;“<=ua?}kĉ`mQb5XdU8C pvك {j TT]LL+57V7-ׅX{k]x܍\slX55`Vxa% (.Q8X4v+TMJ\Z@0e{~oP)Blfsygʤ )!Bb ?,hA8 Bln)zJC*.h0(()v)P @kH[g\P 7x 1GXCH7O8G*noDȗF|!EjM QWmNTGh*`L YY_` % h^i9JVz+> "R8/b`j{&+a\?%Y)g@~(k]SR<(*J¶E%s]4(H$fLIJkB 8)HYCexV9lڅE,E(GM!ѭ bo6 ;.e3@e`9u,y }hD''at{*Fao7=0VE* '$AѥHhľܺ$> WCذHvIj&b뺥ǪDH$'}24[sivAN&7O!06 kv ^6E"X6<+O3RGX )7BbBTx'<$ ?KT8MNDc>?]E^̸P/h r0FF  4 *i$) ̩8Ɓx<!LO[ o$PxTGzG* 0ƓɄ$I0I(/;D-1\>DDpCH3hTDSS$6˕HЎ˱|3=P^K ̛: 1"L0/:xA@AGH@8Xa|8 +YN ͷLL82I؜͘BC,JD:BOQ34(Ly\lܤHJ5K_C2'3$6XE3T Zd0K?4{ޡ:HLԁJT ŧJOPЄ1 D̃ l G3TQ99L=d-hq# =  t͚ODpҤҔx8Pk-=́HTXL 0NTT+$+R-7΃N> S?]9`'S-i 3 L ں@58R:ycԂO8ӧh`61T H$ӽVM #E.MАXХ$x`qT9\P4=TIPjVk-bȰLr@m!HMG`PlQQ$= "-x@c%割zPؔ%cr ӤS0-ZUCTPS6-xST@ES4imGH؋CO5S+SK#c?1ۈ$(R \H`X`|@4̈Չ;JRɓ U T3Ra6d5MXT eSFTSNQ[i}$@e4+B+LC.]pbSemf@ބ'K\I8Z.+UZ02. @`O,ND6>7fIc~gΊ;<&AQHRDEhH0HI>\J.K*Lddh8T6](ȤXOxnBX.†S5[F]6Fd]u]Il]RT=5 .鍠fYت7p#}-.>g^uc!gu3 a&E=k7N_}6gl^ 󺴂]|2`( @ k9KhTLv +*h͵> l21sDt3EV &enSmTm$`.)5~znʊujx'.Nྞ| ̈Wd%& FnZrjr-sf2V[1vFŹ hI} 8~pp`<b{ *ʂCyrZaig:t: N NfPp`<&p -A$#$FoWf ?uTOu55Fg HP~p:񃨰\GH~lGh(5ĆhvihW`hZp MrKoW=HO[6%W-?RkCB)'n,sW t/u/\Ua\wc(?%nx0sX+PgxxxmrC&0/pHtX4 #G.IOt Uցo#UuoT5$Kp[@qhRf#mMX#%عe/fI#Z{GXl, Z9 8 Hh `|*Fh6B,W|G||c'OC5x `HՕ-4^ n}gkbÀ:Gp[!ůXH64+kq*u1;@.7]]j H0L Dh jD'C֩8!q )r$ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *tK"JӦN T @ TjAXR! +[G.m`dh*hl $"6"B.NPFh`̙[Y 98Lg QQD(cc+PMl4"uNxj ocܡ2x:s Wdyp2IcyB7sWٷv"O0G,lԈQ"NH4C/ y0ёC dCT!mG 7nx`i$R} +آ/3X7D q!P$SUS_M1I%=*y$AD0Hu5uLyM U&S `MfRMqҝ T)-Ax\ %aiJޢLk0*؟GprH 2iv#9aܫq݅TJI 佺ijkp\p9& +)E,P:t᧥G.-*9G'"b⛯ۯo`>%'ť\>H0qJ0 z9^D0bD&Sa'-:%?yHg= &Φ&è6bYѩ}'*qp)2w5Z %4Hf7AP <kp/6ץ{M)[, mBӖT-B׮Ą|-BjQ)ԉdoBD \#3p@Lh K҈4؀8XCB:Q$qHLM :էCCNG`b 7` l8)D}W5"]H!.5$xd  7pzJԲA]&T[M@!RGF1D1qP6l[*(TmY h rmH>ю$/r%BUB7ҝ.uk]h/$H^wdU4^b'; >$yKݯOƩ!, l#8 NTP)!+xUΈ=8$O*!MØ# TYÁK b9BB)H0p _J2rId;/(aW<5\,37YH0*.ݧ@mrGeJ/&IOĀfJE7ϒ*҄IIq,O:Ԣ4;eXfrF?W7mPrgպL]W䉝cPI`#;^t?$)y jXSWYavO€{c6_4> :w;QRAX wV j%;.$ 7i @n}q஍6;mxKn<*_9[r?[.9kn<:y:_<ߒ$:!L2Fษ>=ko{{?§GO@?_>|~2e"ipSjc?߾ T`?oG]{RIΚ~??K?`SX@]*2`:u%$0<b`j T` N[ ` ) ``a a"a*2a:BaJRaZbajrazaaaaaaaab b!!"b"*"2b#:#Bb$J$Rb%Z%bb&j&rb'X@!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###,,,444;;;DDDLLLTTT\\\dddkkkttt{{{28#=);&A-E1L9Q>*f/j3l;rFzYGfUj[fUo`rcyk~p>6B:E=JCLEPHTMZSZSb\jdkfrlysvq~y{v|؇z1368:@[TNkeub}ޙܔߜڍ⤛⥛Ċ…˖Ȑѣ䬣沪尧黴꿸•ŚƜȟʢΩ̦ѮӲ׹ھ¼֮ӧٳ۷޾g H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻӼr@EУK>zN@QwQ֮:@ӫ_ϾU\q@` )W]Z g 6FQ'\D ߆*ii=a ,['` 0@8!(*7nHZtH&L_!E Xf!M"U@tih&U8qt֙%if#!k*蠄җv& 99":^a襘f 觠~@f#e#!*무~j&*)8XR`_@&Fu8.((WH"`zg)++YºdX*0Y>@/E o*mdžEX5 @"Lae})СlɲvdZp 8QD ,/Y {euEL ,WHANau2g$Ih_+@Qdsfy$Xj!_"ڀ.z.q_Lz[Wnphֹ&lD:"(+嬷:mda%@N\ګnUw1'%Bg´Ng[){9%wIٱfQ^uGg{yceN Z>+tb\WW'ehYUD6${'HB` :-/^ ,!(L r{=yB@ bOg7Zn_qBD,!@H*Z%JRb;-aPxv!^#996zDY׬:%red:}!P#HBR!h )թx[Vi0d"qԻCzlaM1GJ"6#u x&̥F'VŪuZWtQ%,\A RYYhDa GYLYGfJ(tt;҉fTXN6qDʶ1jgAςrQRJ}p+5O tR7ю.MUn-hy:kLMX(djHNT "6bT٧~<7Ӧ:_F]$CR$<Ρª_(z{!Z')x8!DC)Á bbQVAԧD!W`R WQV)UeNAlBD Qy. =tB X pD饯 @99 ,8J OVk1+``"TxKL!#E5".{;,Qh,I Cgك/]HS' !@gyKPD:o 8Kahvg>NB) @DLvx=RAG'J*[Y0 "wWv26 OPغBx8G O{'[!Bq3`6XN!@Җeuhټ9 *uEAX@(Y? EʬiLZ륲Rʈ쳓Bgz#v)DDu õRYdec©qDYRK>O]rivw@UTH sDkdN* #lgi;>9\T*p&siUB@(28EW/1nBz,Wm}[U*h3*1j7QX` aJVK'zN :_wKvUdRHs&w;sxP4Q3h>feBOy局zg'oo8K(OV0W(Ȇ5XLJw8Zf ZF,# @*'.r+ ሑr N8} F`2\!RsZt=!1z!0x*~9")%|;.!$pѨTg$Ub7hַ(Ww.o!%z 7x X-=c5r! aA~a8Cw%($i.YLֵo*a&H%a9qqvy<(@>?/#CY: 1!G>`dA=!AY1Q91u2B)(V'ZYke!Ox!JyY5#h GX 8bwYLT~Y'0Y;Y@X9= !uHYX/p!蚊 !R}z !]vAؙiS!Qg|X"rX'Cy@b9 !מifRp9%ѕaFYDqIf vۨ(ix!hN7x,9Lגt"AvuBX!H)ȩm2:Q'6JP'vv֩yM/!i)*KvvW!R)j'yOl HbT1J!p&*H4 ћuҐV']J~jO lG Q[jt x*I&"vJO RHE Q6ID ]衏X}X{(Is czlXv I'9 sn B)Q j8ҦɊeĺ!zK',B xᷦbu҄Ks~b;5֚#ˆzg753f#(Yo ٠;rSYa%*Q|qaZR@E'=7 rYE˪ "x=2;9{ڬj');kwj'0jO.( x ,Qt(}hdZ ‘gg'ȩffu:4^vrt=M$ xep_5ʵX۹꙱e!$j!Wʸ:ڲZ—! y S n(JVi'Gtb(ckKdI+:Uv +A_䋂 *;|z!0ȻC*`"+e)(}: \!+$aj'i8 dZW%=wRZ:uҼ ;ZbU:z˳;Be~!۷ Qa^j' ;j'u^hWv`ooN,w[c*3%@[ Aܧ& !d i~':vSB`k'f; 6? Qz A\!뫫b|i']ςR +Ƕ,^:qk|Q- AYAdlYiAU,kUўXy`|glJœҼ϶Fɢ~G9Rin,E?B'(YМikށX'4lϒe ,ܰR!߁x1vY'|;b wlq:-Sћ-8[l$eDnyD&u_\ Ԇl -< L 1cb,[ wS!xQLbֈ rJj׵ўࡻ'OъLj.-j'aԱvrB퉁̹g%UDsʎײ}M!9A= =z?n`\ÉQW,xsK֋[Zժ9dZ'\͖`ޜa|6rALسtE_ټL *G!=Oi !+VZ]=񤁝- -=Ɲv;< ~b~H}hل֝uBdmjQF^m'Th4˾'`C[.#;$-1ph-c^4 H3fmʚM'ƚT:qE`enG !i={ӣ`p a}<1 9C̷qn^@82rR[{kp2*A?{1<[s+񤚮ͻ}ޑ^ZBv=. }tN'fݐ>lw1N*,Ӿ^'L2aL !s{vy!) N:!lNZFL-U;j8kӧKB!C?*b3^urAZ jU=ZPZ/nNC=[?WX?ξuB$[!!|Ọ4fшb:nOɉ*_KvIj>/R t͠1|?X]a-Wq/*Q PW1lj@ jPB hpCD-$p!#br DRJ-]SL5męSN=}TPEETRM>E)У(L-H`Kb~ڈEXP':Hltkum}͞L쀉) ? 5^ F~Y$)|K C[lڵmƝ[n޽}\xbhVDq h߷-Z'prUwqZ(w}"lA\%,iλFQiZN̺&j{)/2Zi@0\iADOD1EWdE_1Fz+B2 Sͬ4;^P4e-Vqȩx"DĪ: P"I!u":`"15j%*[,3sZe̩^s:`,k MRL,'RS\" fRK/4SM7SO?] 2Li2CKp)dhN*SH "L"+iJ,Z•Ȅ`K|mpcpE)9 X(R&A3%.{iBeHϩq6XP8`&`F7WmDIlZT$[٢wN[B!PB )u%m#ڷV%YMI?$d+#)UQCzO\ V^*Tui{RCJ4,1aF;mfmo~n U!VڿUIoC2 ިy-QjV@9B-<'R0RGn\ZubjV-m>x';%0w uo(.WibXIfOqJͮ讆 )OtovzV[~I8Yj!AEFD+T⾋`O$~AvЃaEؐBdn))AFZP"XxC&ZǍ'J7۱G@XWu{5YҼ l(G.D{Z GYpoc8G:ֱ7cJrh,p!ʤװSYFx,IL%dN72t]B$Fdu|*YAB0U^!˂.*f <2K;ӘDf2LPЅWdH#H~\-RE.bM 1:P&ǖh8 B%3g%J#qrtDSfC:(YX'/L"gALvԣiH;UKP#5 -bYhbFҒjdI"H:PBYn" "z.jęgC$:U4%SHL5ĦkW#m/D i\:WծAGKS@ꂓDR7!E:ŏ dm5Fd'FgiD1gCf1D}7chD VRb rXs]ihZ׸Enr"9%D:9 z乳! ?df _&&m'CH8R9w!K)% dR_tKh"QՈ "vq9]HBޙ;/ V<8¨+M~Zc/k< `Tl΢jCHl|iʕe?{^g)73;Ӆ4TK-{?} 0oWY8A/t ?,Ϗ~I@nDnA~g0/H@+4 ]崑kS/k43R'5 (ۃ Lj:2Ê˃'x4B" ӮhN<8`4ט,Bi!28y:@50=J/)#n;@X$[(HKK0!rZ#p z) 5R{ 9:*~ h44>㾄ؾȈD`6l(4Bp%[ E)pt^ /,G|:AH)xX2,BK &L0${AJB-*3!] |b=DX%0X knoGO˯h4O  BÂH+zG+xHI pNS$SG{G}*BHDWd x'PHG@('`X:h48'xA h ,SAD#<`P#- ǥdʦtJ*sFe|YԮ,P\ K [7p#"L|DŽȔ̥("`9ab˺@@+Ǫ,o:2N̈ :I0 Uc4)rI02-;Lt%ǜ}DZ+(ÜΞ@){NK7A/WLzI|,3 I6 3N[3`υ< B ̂YNN'SO(3=O"c$rlNH!%`p L,( D&mCM mS=dUe>:dŋ@x_{)_$ҷ Z 'I8Q'VX)8!T)byu*(`aYp 2>`s}<)X^r5Xհ ƩPX-,@JW1Q(Tfٙ D,*vLhzQ0U2 }K.jmB'hHPx(F+,0, тH( XUxxڨZ',ڗXBړ[s@@p]DhGDYs !ܝ-u[, [uxIUDX}'B ]B]HPH\ȂP=+ݚ%ޥȿ8ͷUЂ(p(ƍ(`'Bhu%5A]Zî=(΁hĈVo\'ߐfvffBX:5ցLAfd>.;HGcIbSShM~$L)VXN6b2cHT^ cSe'!?Y\[f8H>.fz46Xf4j BۓM)o#dJH qcr f*d`> uW;nfpgl?JH c H~yg^꠰阆磠~捃@=@S OxΔ(>&CH c&i VV Ѕh!dK Į뷱X錮6˞J {)bОU;FX@ ^eԞfS8Id0K0I. S8Iھ~ mXJCXnIٖJ0J`m`Q$ N9n@oGpoPlnn脨XHh:PS`0x)h;nIfWpHfpx/ cݞ~ 񄘃~x90g<6;qV섀?>6hz: wo6(qu[0Xb)r>r<s0zFs4G򄈁 Jc^o<"G@ :84c46ps>/?@GAdon78 Oso8sD5WtXCs;orHrKXAhhx<~xwyczq~vbG煀kyoֈyb0yy?ugu=xŮx/z{s|tw7^x-pzPn֤z;zx;Yh>egGsx^I86Xv Sz<^pㆀ{{HniN{/qgywdVNg*rnx/HE+x2(ߍChS~HG~JxjOxj^^gvHveu}g~~;6GsGw|wxG~O~SE   Cb `,1S/0xh$ʔ*Wl%̘2gҬi&Μ:w'РBL(ҤG4)2A(֬Zr+ذbǒ-k,Z60YVb[(q8lhFJdJ`%y㫼 ?D,Q ;|,a߈x t0I9& S^H+giVڡQ-n8ʗ3o^SU5LIr;Ǔ/oWR]_C Jc F8dB*dd4D+d@c<7uۍUIj$N}7~8JoUbt%pRpςBVmND]zی}}pMS,1R7YO8 qP'S|;<*Q!gBq8~J/S> ??֫kדΎi k/P; w2GQH 3X8II%XjwQ ? !(j?JH9$~ y!Lb8,=~vhRg!|"$iW߬(-r^ 0.!_KۤPCh 9ՠ8G@kwd(2p pHIE!|Bx9$cR!V$(Q<~(SUR+aq'{ L*:ʀK"q8/|o&e "LSsȤ!APM2Ed$Y7㋛[u aCH '>=`%,A?2ZiAJr5 vF5P ?J>@>4Ert 8CCNB|p!+K 4fsJ *]\ϡ5fêR E}*TzA,$**&bA^j=ω$#+$Lv`Q%ETbg+Ve AGdF{$Ķl >7u32~7{׼bY`28v0Q1h l ܡ+0pP)(t .IOĸ9> n P Ġ 5Z 4ؑKow :ғ.6zΆ15$ݰxsTfR]ŨL i\k H¦-yݙbf;t?% <[Αj%:xɊ<3u(N S0ow|x-}}&/Qͫ?ӯ~Ufo8/ @W ,_?2Е%IL_ &. .(T4 V^ f N(E(j _"`A\! Ơ ֠   !!&.!6>!FN!V^!fn!v~!!!! !֡!yS "!W| "#>"$FK`QRP"RXJ " B(b(J"))J"++R)StL,&,*/b/J"00n"3636 ErL44(.1/#Jt7#Wl/3:$(u;£<|Lt8~0/cV/#;$B&$mZ#@b@8cDAA*Fn$Gt80VJ?"9vJ$K6G'$B"`JtDL&G&SR&Vd@ƄPM*Eb@FO* v$UV%!dVn%WơI(@J$>bhIhVp(WVr%_je^BN O"E0B$f$@" &b* (fbDQB$Q$KTfb2,h@/f4Ihfbf/jk*&k:h&:ƂCi/ )(}C87B)AH)rD)ŝz)f)T'm%0<(&ąh'>Dj E#>ͥDb$&0"h}"Kj$&l2/:@@/rf12WBŒhk{w<E%A S<At6jtfVbO뻢gDůLDf*$0"C)/NIHkjJ)+00rC#l:>j1V@J0S%!&ZI0dʜD!8:w΂wFAT#*E8(4'fEI4O$-َٖ-<)0^CR">ȶݞDjITܦR6J+l.e%>.`מD$ED$AT.Rk~ClOrRxCmLbd,nm-0C0**JKo:D.&/NIh<:hED%\l^֨LD/A-mnICI 0CoKI/`bm^DMRI p@"|/N JLmr6k~>P/n0A0nJi0 נD΂[RLSMpJpnyp:1ݒQD? ":I0n k *p;K+D6 2!D{p*jD/c n 1'w2 16l)'E_Q:?Dn3h%o22{&LDֲCl/v1A|J''2q*(h<IqR@,2VƲO2Kt4J R\*6rC;7La, K"D###DffrJ5%/0&%&/?4X5!ב2A)D,uOOEPE넿&^5_uܪz,8"&lk/bJ(6ʄcICHƦ­&dD0h3@Xi_qR#(< "RTN;tRqMqogAcog(z`t>#Xves0uW7 ?DtOwuS)*Ċe5O?77Cd)qx7a;H'X6d>D?fb7fpcsjrM(4 η!1(u,$Bkv6DK#u#@,gR1'D80jcB{ӄ@8yT,d+H˵5C`?C8•c(LCpuIyPLz/8u;'CyǦ( yDw@g# 9$WĩxRp,)e\.(OY:+_+^uP$;J(_{_yxlo#;()2A$#p@AD#;75K<,, B(+ <dۄb*`B#:99<(w!̫6 czsM<'Xt2 w s<d_=s M[['GGK7)e=ڧ|}ꧾ>뷾>Ǿ>׾>>>??'/?7??GO?W_?g`ƈ ?1b˰K$\׿S;KC$@8`Qf%TaC!F8q%F4dи E6cI'QTeK/aƔ9fM7qԹgO?:hQG&UiSOB,TKR`bZ@tf#ЦU[f o!;n]wջo_zuױgNq PmX ыvYǗ?~}׿%P:ABb !P ) 10NId:%Z@J+-GVRE\.QptE%W6YPUL!,#LR%"'Rʱ ZJdUH`h2x &'J9 b@+/ sQ-M҈$HFܓ(3}k#ĘQ@, h$P((LUUYmWaO (!)Ƥ5""M@PiVZs(Kp ΔkVkIдD3BT R@9 4#F M%*U,bX jYf !.F"*fV(D@Fb Pi@E+\x7M}k]1]}hʸ*裑NZ饙pc;V(W[F`X @ؘf6j-h&(mEˈ鎴ҽ!wVM<:ڠo!\¦ul-, Z!} w! ' e{ Z&^2Gn!% 2@.3"{"F,e"G)ÈR^-h$vO_o"P(dH@: :?N!#6~+P_ cKdࡥ3 ERX,ghQBl6 E>Zв-KB%HdTD!E|!Րd)d%ih+)S#@Ou_CИF5 9Q1,pAgA {~>)\43tیԤ SUN-m(F*$B: t*L-J* M픡)T!8ѩT_X- YEWk΢_UHXsR+DFLWgA+H&pQuFWu"UN Zumq !RŠR86!dW6$ 滚pAȐ]2M iE#5-yћ^Vu{_,!ЂL iCkJL } *.M𲰯BKU4ePB~v5Qb#o Bڄ`s ٦MJ2i\ ^30D'X8r &&-IX񕱜e-o(-">dd 3'W'&A729r](^Mƀ[ \6hESd BS YųE/,BnV!$ 0Q̮ohd&r!cBF4$L06x&0 h@miO\nͲjjX ,Dx+i16s`Boy/60wv5l^a*Ȑ|ЫBbg :oo1Ljն1q-0 '(P+V@ecsVgUzk(1Yq! CBOc cPS1燄ձu-7TgBr,*-/!J'  Cz -y#4av-߲`'.s2"r0 -5+9z+R+a21} ˍ:$ /2(B30s&4./I!Ps3C02e363*r>+g&&7030P5r"8q@42lb89s:B49C36w3t1-66#7'z7 0:73m/0/ES"-s3j>0n:35;ϳ0 M<<<t`HRNuc99R". AcCݲB@I4!vE]E2;s&TAABCBk4iVA/P@eC!>-fBIߒI-Q?=HG) pt)x=|KCHD%BdD)V (#`0#B3VNC9gOO 3K.$dTBAoƔ)t;QMNNL2!KKvqDLLDMMS[S;5J`!VܦN3O2"Dt3!@2&DXX#-}HT4BV$'R;r"7ZKrĮtrx*! X#Wa]}ί HZd%HfHRt|59!"Fq@"a4aC! ;#V"n-rZ)BCAP LvM[RR#SGV",l͘af)íVn+0Fcj}o=k&D/#"4i!4t3%jV!.!PcrELJhbAVZtS(TvX6eǵ<˵l#bfanU8 jhȘkhk|s:ahl&:W%zHr"5v4*LV>:  m'ueõ%%2t6h-s6s>gFgN2Du`,% Bg `qGd@7&$/YB~zez0}s|Ae>V ~m[vuu}ur!7"h[" *j 뀬:AN \~#Bg %wbs%ncwbӃBJ5@%6"&x~ߣ | 5&  YV؇wg 9 W" LHٰV]J, g!۰ WӨS&^2@i=r9"! F&YA drY8'@[ٗ!b_# H&ҙ&B1h43S'p{?-T-ľP &aŀ bWV ޕ*L&!Ϙ Z?VKJw& * @DYΒ*$$opU'"!{"c|"̙VݢFˋW p] l-mꇳ|!Z0zH%#B2TBtgŅ|KeMy<So€ؙ7#8 '*_[?r!^:@HI7T] J_޴dP&Ptcg/>V"u뽯ʸ"vlȝ"Bb{{HЄxoKf+J gfy+-")>""@V @_#BSp/b4Hh…Hy;)\@B)&x" \1ʕ*;R%b\HNnd'P> ́T?4*4RN7M*jխ\z 6رd˚=6ڵl*\B@u7o'P׮޻񕛅{L JL"At3bD2`HD>HE8 [ʖ"t"B, D$E`KS`9e'ݦYbnJ)Y%dY@$̔tFYfJ~{J 3`}SB R"H Ae !p@4N*`ZA MP~3JUcL@c)TZHdFdJ.$YHB~v%`}re`u HHg1vPeg, JKOfB dJƹѝe(uƴvx(m]D!UͭAj.*w{*%AM҃:e*)Iy 5IllUa: n*mREkV)yP y_Ybmm(M3cUcȈQQB8lp /*DBMÄ !D%wXB2]Jx%` RH+Q z&̮ 1r@ r[E'15`ǽ.yl@@)-Bܶ cAQn2ٔBHX@aPcl$UZSJuO)0A>NL _z&;OJ )$7 &p :p)8!s+D"1r, 2NH (< bvXsG0ˠV%@Q->t `(;$ IOҔGzQ` ]q_fK: X:@b"Дlǃ9g6>,q!El&Wxҕ1nnD614s# @UqUs$JJC v\td I?U$S!aɩXoG-Y0FS %-CO 6{IXvE!K&&+nU\Ab pz*W BɔLQ[Qg&d%``Š%Jީ8k7ajtVr^q!dL֤]3शޛ5On (zKXIKea:1@h6) PuvmhBPjv(4Td lf\!/ P< HPW HTyĭEERٕ@щdͦM =Ey zu2gϑM:$N5uu3ڙP@>zZ H+ۓ"^&KX~[cg=V_ |sƛ7$a+2&c{S 'h.rr%I{)A$6Q5 Rl" =L(ު)-U&^8%Fj??-%6FiwA`n0\T@NXJ<yL@. ߂ !\:m7 L`}[ߺ׳u_DLĮud7<ABڱZs/᝔,<@$]NXЉZ91)x8i&w(,~gĪ}F "|>pInZlmCO$~x7Y\ɀ7BBqD$;xOëmSH7E؛B?<\ pZnu1A Rp yn*t'7jk%UOY*+nE `jaۤX7k^!YIf*qao0"OW!rf*󧃊6O?5Q(^svA${UVq6BcHGfHY P&cQqf1k&Tr7IsY,&^= oOw+ڴ>a 78OEp68&%WD8t70W80"~M( CB0O'npX dBhJhh6>hu0JQ\A!Ȃ%Kh&|Îg&yez1q^Ȅ7Bu&_(Vrӧ ~%"XRɐ _X3W@e鱌#IѸy%%fよ~э85mCdX@h_8lR|*!~64>Qr爓hWÏ׷ׁW54piHig$CpIu$ObpSQwXx5'|0y`7qa,(oty<>wrqdU[Y27dei)Xm)xR)$h٩OЗoYXpx2g9`uV։6>y[2Xq`^é^ķD9Hq\qa/Yo]Uf&fI΃)J%#ʖ),%RyA7f X){ ZzG?f6a BR*'zqLl9Mf0(ijrVs!9ءt IMupi>r9Jj[θ|0qpY@y 97gXjm6Hz7ck{"I踥Os 4VcX~3*Jj$OPv$2 1PYpH dO(lJw"g,"j3qœh&J`io]!@ƛwS {MQ~Mj`J%k'*=s @" tC8]4!4JW{˧h\q>_jVJGqr*grb&ya)+sKuk ~n GzN%cW7AKA|xIÏXbj4-hDo*]5ZX#M :aXS셝a4V{u+K{xjWp1+&SIR 0 _.!2&x8?j1WR5vni;x)1AV `yUqk  0ø!CdbpYEӴh柳_c:l]$$h('L}([jK1uzb]ٿ_1PZKgp>[0[Y[G G @f%EkI`yY9HøA6< VMr3h:óL:Bѹ:'A+ȂAAhb<h&ʳųL˵l˷ d2uS ;QqMfPxBX~JQ'j vCB*= (W h !{0pHm7.^CSQPƍ}3SqveX ;Cj @n>^gYp^3*9yP2$8뻘;{@:!K ?U`Td,4Q%ƪA>kjI9x!I4Z`9grdhQ˓{.:(| j"zjxbaY_A(M':2b*Ro޳Ia6qRIma+}2þQ@B8jpI @FFp7DfڣXp;P>"(6_)k*U0SNnaI8 0x^!(4ް:.K*>X2Rh>aK|gפRP4msT \ %ʈ イ-jUĬ!:9 *CO_*)FeMb&;E[oRk[Q } $Nmiӟw?MI ࢉ0麆JZ mBcWp:[ nrgH +Mn5?ߛu6ޫzɡ}O'(N1J 7wvG|&s4z̏3= ee'o.Z ,9W נt0@"XA@ BXY8@@E$9 T @ЀPI1(@@ )2TtUO c1  j1Q* 2ɔY6u @\]y_&\`!*flqbajhc&F %Q'|r&=ڰҩsx4eASU2o'^q#@Wq 3wyz| ?غ^ջkg{R~q\_eZ2HBL#l`K03pC;C1J zz.BTqE[tEcqƮ~"@/q ;`G {`$Lv 6bˡIz/ "H0sL2ǴJL6tM8sN:ۣJ%DbA&I#L{`ےuQBKD3rNL3t: R5QtTRK5TTSU {b[#TdR'SaKM]nA4=DWUvYfˉL\YjZlDY/N̺ Ll1V5'"EgIV1iD`vQ]JVT#xb+2xc)(2,(="8< cs+3+)qࡵwWJyD[ng@ѡxl6lJaR4m{n) [H^۷ %ֻnV{B*D0܊4=XbEx, Lpad'oZ$e)MEP\N A8: rUA:G$,:0q/TXy}y@ɲr}K!pk6KQdjs 4vdX3Oqؼf qo_͝#Ѣ1Dh;(9% bDwkrTC%j_ GgQTVK㫈\!#U]:$LFȩd mJVqS%Ii"B Uv/ֳ|( VelA^EL8/9%A@KG$ens3DD2 Ⴆ! WȈ/-=kԮhvk_8og+ ׹u&f%p l}V݃oC^!q%HzU 8ݨ'ע&3% כ2P ;&eD<&r γA aH2ϊze0 L"氘ahxSԗ=+zd ism o#/HMm'5)W[&@c'{ٵb8"IyVq-~xIdXR]Ajusd8nW~x'^?v !( ܜ( 2E^_d(!`}1!)"a+ |}-R{!5<A2a#TK|e3^ӧ~ϭW*}cG2vbh|n|OMsPȿ0 @ @R4P#Q#9K7g+{#㟞`&?2P3KP>蒔* B SE}DASGaȊH2 PP(12 #\2W JaPPb" ` (0V`EXcdՐ_ a%b5fMghi j%3XVp0kVb]n?Se/U mTUW"3H+}Q)] ݼBp XVA edE YXcm؇e V5V5o WcX``؊0L-h %| #|U WMҙ%@W:YW X`8Xւ`YPVjݐ5֦]VE ֫ pZWZ`ڧ% tYKY׶5ɑT;,2"Y.Y@e Z )M\p\@\cU\ ۳ɝ VU]- ![ۜ͋x[['Y Ͼ}%")E;! (5X3X\nZc]]c ^]ޯ\`Z`uޑw(><wS;, 5]LI,̑XLc=^ `__MVNcE[T߃EwK0DՎ-`\r銄ŋv a]QcVEXV5 RhYxtE'52.g!gkSFr">&8Xj>p[jلRw _/&`G~t ̿vzm -kb'0DEujuuWn}i7ӞTY?Huow.WwvXctm{7kuce}p|wHxvӂ?xX'oX'l!r1XRJ(jx.dC([wz>w* yoeHQ7mVRXVe-q _ [ 7R DBPp,g3Px PЂ''zgnOp'zy|·}?6ɧOJRp˃*uqs(Vu/)XPŋ_UHE`b^G쒨txqj?b 3Z5k WHpB(q"Ŋ/b̨q#ǎ? )r"'. F)Q^FbQ ̗f2@͗W(r2B23r*D2XSl,@@O(bљg8{JtQF)).@Iaؚ)x0†#Nx1ƎC~L%!X P@,1 BD´'/ Ƀڶ8PvȋT`kOhpS"ΝQs\AQG!yH쳼W{}3P=9_$|q)X])iw\x=StRp סbdYX(5CRS 7(4 !gg!bW_]J1&T$J<Bh#Qh\*A).bE&9A⫯C;n!\0*? QLV\d\R> :A$,_o3rp}hCI+4{akBdW  h+1ZB2XO$b;ʖp=Dn)$Si=9@4<z @f8.0KQ*2.Bb)8BIU:z-Du١\G% $%d. S}PdM3܁.yY^E A c|!QOir9%HKb2ܤ'))+)xÿnO cÄ`2LϦV}gV0s8 4WY'"X9C.x!^CiZ4, iYs0$CFI63T )B0NT(%:XR RGP #$"@v׬ yވC`"(nrAY"T pϔQ{gCiɇX\*ST;"SdCs6OMjiHT?BK5&|H,ŜT7X!A#s:B DJB2T"2>ŴEnDHZ,`9Dk7)kESQ+ *2 8pr$}Sw"MHCK> ZIGְ|CW|Ì)/|g#(&^ky.-H[tҞ#)|I yiAԴȈ$"a I؏ 7h QD'2DI'1w:iR9"W%Uz3ފLW!-3b;kAfd|bdH`p0&MOsFWP!ϊ,ABY{"jNBSlgH9B,IE y!-E&hm"rdψM!d L duY~k $E)ie<_WYYH׽so\" ~VLYQ)P$0H;s%r৽:+*T;$t<`s{!}D6N8 R\;$̒FbUwDk>g=h"8wgѱt\UZ nSCAr$uwD`Ŝnn*#ڜ{e<+?9\%g8 -]?#.:Q;\:O>N߉C Dt*/<&iB QC+W;'$T9+@ꈘ w?|K]1m~E[> 4h5EPݽLDADٛGܒ)ٕHa,,![AԼ1_ Vʵ ! Ht;]U}Ź,DY_0U` ĂyDhbq")bC@D=H{͟DL"/,^yVA!ڮ%PD=*ѯ4_Q#:"#@C%cܙķ"FXLh^rD%-^5^D|^NdRd("J4@$ї b*D`"z2)hsA,B: eD44ah^ . J9ǭA%q MDoRPpF"TxEA`egc\\ZZBD[2JI&BEfƏBFt`!f݉c\ bdGDgzRhΓFm,$@h@8):R*<@@8A- Fa<=.nNFQ@#`8B@Fdt2i:U@eHၑ]"t.)3=@HM'DJ)Zibt5S2* BHH*h"#A'Gn-rB!ADIDBXHF, hhAhԢv(f6fC QCdjn2EԪDVE<\E*FHMj'sY EbHRj%2(bA"ekȊlBɖl'Sɦ,Qh+}BUG@ƀk:*+"`p,؟ Ӑi|:NJ #R=lg-īAΫ*DDWH -,-fl{;uݲUq>>U'2X@I~"ơ@S$V*kNR AE0kD$,ItmCl~JI*bUD0>Zn  6SV @٪.,&: H":Wm?.RD_'~!:OnɴSB"h0B'h0Όҹc`'F ")<@YB!zVj+GE@E/D̬9d kV$DQ O cA 0jkBR ZpBT`;`+ڡb1[4Q>v[RD>p\.B#l:|^^@s*[f1.a"+fp&+r,K,2H@/Sctp'1'kq&bFU2E0:2A /5m:,nbg6N4\32=s>>'} nƧ(#:mDlCT4ϹQ%%JDsGsBQ%4?JtKK3ڪtCGլAB40)-D}fm6ӯB.D馄 ?8Gq9GdF"Gȴ6{1ƺ3Q㗒4L{WuXX%\MB(_1z uI3@"E\&SWD/tF],l1VsD@$audKdSve[4/&agf[Q%I^Dӵ@;tBtB`f!]4`?C%Yg]gnb^Z^ ^pwqqq)@XJN vNSC A+CF77J[tD_;uX>B,,XHHg95rw}}㷅~pT2Pu?(AGNbC-avvϷq`CSlwDlh~SDrlLJvu~xxz}^zVygOj6DhrS⃿8EiD8n5I'JdiSy[c9n8?yt +QN994u#7xϵ%l7H.Nk!u zz$\BZw2wςIEй 坋*nx{ yb6wFYNQD$놇Lzz#1]s]U-In1zH=csyB`:r),9OOD>^Dz={YU{?YH1TX"SJYD6;@M*s' *DC%vsB4D^[H7OpLȓ|ɏuХڈVBX-Ë(Qtrt/{;Ďk:qKÿ+Q$^o<ʻz|v֝ks}s@B'`5b i8"tB!<%5O1@-2~Gm?D?{47S'q{LXD;3I<,0x' "bD& q0v;dLr칊fgX0e79.3A@T|xɗ7=Qo`Nw?*@_?40:J-`@|o@E50\$V.$(]T()LB2t$б8V( E>b YIC: ʖP iE:1F'_,`|>@54P bP,pp0b@!AA)t–&PJ/V]}X1  HB((H0)~}" [:p!e[o~%35ߜ?o@ A#bp`*H<J "}?BC}GLDQ9ND3H X?PYqP [HE˧Gf}ۇrE") _F(X@Y B@>r8)XA M"x7-l&8`ӀڴD OB`p) )È`$>qc)EP !=~w%f'C,~>p? F XF3AؕF71djSA)P2hLѯ,zFpqulRB $'9@"FLa@:0>)PF @LT6Q&I< 7XvĜA@ԩv$BBPg2ZQ6f@LA EbMg FɨI6*PtT 8HΧn@e$wNN%sBd4~7+,ҝi)9Bupt~.J슁=CWռ-{Gx)ЀdAݹ>PhA X`D>"wz"uG vX{~>ns*"}U|dlȫ;}" >*" /c)f(ү٠~cCPGd⼪6֦O@!!)"Dʺ+#}jgAD@(P y ȏJP b B.:h\Kd"*ǔP1Щ&Co -$,/#b$HK?)* 3Q79mv)0>XAbp-!Z `|~D䫕x&(I i@1jj @B`S\A ^k"Ȱ*+ xX0"  X1]qb $$v0PKoL>`R ^SLE 1Ƌ ‘"+"/VjCb "*N:co_t| +fxLkdb& T%Ib#R((7"3G$ːϐe@BK_Xgao , hjH,G"`').(R..iB."*Bp) .oB  !@%q枰0b^'.2{N"0b.bH@.O5SS5t MplH"WE R Az75{ Lf@9/a@9oB D"`(n B`D <R&s<vfhIFVn(eB}4hiCP Hr⒖(i_ agp X kBkmu@:lMUlllnB@oX6(nXW$UV(p'7W; M ^U7 '$rGWU W NqUsWbBtIWvK]Mr<%:R@Ȅ;8!(۾,$a6dp O<:-!Ġ%" İ9Mee"dy"!T& %f)aBgAD& {(/Mn3Y"@A@#j! "%sui+[(䶫3pP) !ՙ`̰((V#Ln @st,{yO{G* ׆8z~b_;CTHJ&/VLRNaoP&'Y2 @ 9"`zÏ94 -W B9 ":! bcŽCb;Bm"樬F4Z"ZIe[MIAAWw+: %3y& C&|F9zp[b'crH皜B}F%hy+"6tz#z@b;6!ϙbO)3Z vZy":uդ}ۤk6  *:x {@A VWE1b6v+I@j ĞA byt{`~#I#:p3u /!@c/}#X 6,|Zq(R"z8# 9 )"zx9!61"_9˘͛tm<]  7 SF+ fsT>*"[B:d]-g\"e\"%-" "e$To~خ NX 9*!§:1@إ@]N@yѵؒdmV"X#0Q :tEE2*\zNr4+M tGx ( 鼌] %1QA vo{v@^ obo:;;*ˏ9c[⮘<"%jr6 /U&6[%2f 9="R„&*)W"j9] 7[yBpC㊏ȝ4 9yb.]"W`)viI"^?OZ} k{eyZF}y*=C&m[<$d$ #195#;TS"* %{o+y##"8ß'k#$gs{J9 $v}_ %j͉& 88$,5-!Bb&nm^Op@[n TdZFZz* H (Tx`N*␠ TH#08 F' adD6&ĨcEIRY0DF P&AaT΋촔Ξ ĺ4rh+Zd-n4IT$(KpND4Gn$,ѯ˘3k̹ϠCMӨS^ͺװc˞M۸[BeOZNxg_e"44d/E̅P7"`BRDB+D'lg?mtDmDMbQS]jF\$@yؘNe!III|aIJڂ TQF }c%c 9S+$BؕےL6PF)TViXf\6 !OV@ q\K$Ri7J$e0*$Ny dEuJTFpX YPQ 頠A fDyFGꩤCR!XJ ZFԉ$ 8N*FR2VB4YQBIng@[Qu+k覫 !@ٙʩ, P ĉii.DeHҰ zP uGR" *YƔ';hg4mPA'Q,[ P(,DDQGi1N.`DŇ$F7UU8#:䩀Vhlp-\_F \V \ZeFB F[5A*t5AQWU8MMߊuZQS )jo(ki~{4-NJS-`Юz՗x ?d_Hsw/o~"& 57WXZzjtS `dvYP7 KK'2D? dF73P FPְew pk!2(`s $ƚYAD j9 3U"y` H2J黂u8iN' B"N()U>FT{k]%29zm'@"D&<`6ҵm'""Uƪ"A Ĉ()E;`R'YTk^aZ`.Y+@&=Cn>Dl "h)鄘IjZ̦6Ѷ,8M]׉8(-54$fJuŊz,+ @ OdTSVD`T4T$DVO4F&ij'BޅH#B|Q7[ ]eY;Yx>HM: 2TAfzo䀶1k:=Kwf@:b$I wgL]$'N[P%swOND!FNB4N 7ZE`f6(~<ܹ t Bf3r.55 >AxuX'7<; X s%YXly'sxwq fDׇ!"Hu!Me7sAu7ÃU} !~25vzXޗg8TjEHoeTl9YAxO0rO` WPX61f$JηXX42W|jvs'OH>|qJ{L)A07V~$e TIH9$ɇ 1WTWh)mYvyxi_GVZ!] yZYZ^'U[z]7 E&`A+#K!DHZ` h" {V3,m[oTTiXce:hXHmojyYyxE#xRЅW 8H@Wh4UIInXhDXy@<#UzWCaTat3u18w84ofbg})w ʜϙ6z8?fKv/  R& YUa蒝C- %fY~i#P5_F7dvv{Ns:PS;zyLI)Hw'U1{h-CW!$:ZӤqkWp WpJRSY ۧg:!uDIQYf9qiγK8pVa٧#špZ8 5\I^gm}[*B/ZjJ!6@Nb NiX`BhQvJQ~4j0Vabb+Aip-Y3ɫR)NZ:v QC7 #(O(7lR;T;.FѱN?_5WEz#Q l!2q;gW>yX*ቹB$0bpXzD&Ն$58p%cG&k:u7),giimI/BA`CU; _b R@66E 'd|ZUBӺZq;Q_0cIB>2'WJ ""`4qڔJ!J;!AmCN5i9kyۚ|fbAAhˮItIAbVihX[b U ‚]*VA3`JM:[8 n+] -W!jQn ze~ij@mMךQZ֎rJj5Aڛ e7CTg*Q"\v6`}Tr/8Ȟ`ks:g[%囸wBzO "YN< XPhhɪ&HR@jϮ,{ UKR`ƻzzz~)FWPNLi9ǺJ .Q8 0RWWv'|`:6׊tyn6o`*f6= l_8{*ջتs '$e5((V* 2A 6LLrlt|:,sQK2L:AݍlgS X %-ҝꇈ5 nت:歳)i>Ra Ž!|Վ>%ў ]] 뮊  鋊^4.i;X5c! 1%aGnUq6ܝݨ%TrꈜV"?*kZXr4RZ Qp% ("!(W%"pkN Wy$./%I`g$ޅ>L qfNc +o*˓C*PB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}ʔSB)-Q)*3K T֩ūs0Űׯl*i -uHim4ʚDi۷dʆmLYx/x'x㏗tOH!b**{YF*҅eWB J||߅jTpnf=η5$TU(@6Ё`aźtEDiLn{&`Cu@$h2+vHYABR¸P qOqZ VƆ+\K %Bv_qA CJWbE.vы-YZ $%:CGIE!d2FdՉI"nL ҐY;"' 9EB}ђd&5INR,0'4q9m<9:di$c2Ue-~|e 5D&$RDH#Df2Lf6S6DIJ虒 jVkZd_RL,' WHftf>O~ӟt*PQs(il0JC9p$9%P]Ɛ) ܉QT)K0ԥ/iLe p Ҷe%p5d+ETӝfH%…tb @q u<Ê&Cd'482E-Qs?Isp&XZNPP={}2fp#V7 fx' _K t;mz^nպ[qҬ@{wM0jnD0hg1rT%*`>'@ h;cެuIB>%._JCUj/B^'L_^U x˜`sߵ}w_ٰ DNj^a׬&Y{W_^r.3?#4D+k  A <$U04cDA $D!$"4#D$T%d&t'()*+,-./01$243D4T5d6t789:;<=>?@A$BBDPADCdFtG|U(xHfzEP\đ(PE,BP0x9D X D`[D([p`[Ђb'NPCBH[$` PXLLeKT8Fa4K"b,GHbd'tb7Ew\ PppEpB8ǁtu vwtxylCBDG^$Ee,[~I[I0Heņb T$ș ElBEdBG(G m,F+8bLɇpʧID|MɯDH[4ɏelgCPFBU|J`e|ʪʨ\JUhFṪYF@KeI&IJ6L Pl-PʣUxļ|JdZ4IHp^͔(8Bg0^B\g~_cefpN+gui>gH؟g@M旴ᇔ灦S ]}$ W-benW`a&bNֽf0Zd.Mߣf8 `pDFH(gtn{FDf آYj^<އ8huy\,Tp@U@]Z`,XgY\UNRNBU^ VUɧŦfmn֩V`-[.]BUxlH]·hxťÎ~|k Jklu\Q oB[U`ubWpٿnʞ?avHNQ-p8l0oPm^KkY`j[pq+mnnNlpe^nNU!/rYϥ-@Yemj ҆TYXKEU~@>Jg*~>guK܈@Emy' =Ot9/p;VedVٶpͤ̂U]:7OS-P~u"g_X]@oi)'V`R 8qbu&.pNpD5mrc~h'hpϏ\'xivVvJTFxfvsBI}Cx4L%]P$J XhetɄQΡR-4TmFW *d aJ}&nTS'upa5wșsJ/.QT2]6TG5d BU"QAR&p ِ_ u߃ $DgΒ&B1w'y'|=`GY:hf\*hPeiԡ`VYHyXHY6\B?DR)B, @o( FJzЪ6*Az`i< ћFm) ;,{,*穕 D$TEaNX< R< ҭ6JaID34W&PTP)BD ZbA1 %ױ' ٪.GEA䃴4Lh=<Q20Q$/A}z-{39\JRA#2tB#=pN %=5Zd)O }2J#DuIV 3u}7yw{Bi^#v:5;r3J@?#]%:2={C:qT 4[ !D*GU D 3 r g%+$]C@x+<ʓ>!*NL.~+J=G@҂#1,}WHhdX$HN(~n IL^DUa.j]rՅ_\}K3aBdTJ@l[ 9JվfNNugm}Gůx^,Y<% ,2S,f$<a^'dK^砬p\ zYwO;VEB> 27"гp*e28k_ȇ?Fɳ0@tPiϱ5()0Q$aNG$`u8X_j9WC%Yǽ?|sGr_. & [|NiN9J֋|k iL+FG ?e.ˢDzk/o>>#?UDt|S 1㮕WN8]R\P*EY2=D!QuIIGND D\X]TD+BIdI.DC@)K-$I e^W=iڵbTN%UVU^eKՎ"yEM.dbWF]Мd"1b̍^B_ƭ3ᓵ}dCSA4Mz[ıDDB@\JVz\aTS:SIV~&hh&i ׸U1dP4n#W*d-[ʦWT}LE A8leH_֤^N`n.|DA$>ݣ,lg1.Dq}<> Bz'{{Aci\|kYd;'*efFrFDa@RGrDt 9{5]qal$fm:H[^ ieq|(֨ި փn\}E}%- yU (LޗfM]"VG~]cxV}5‡ i腝0 SJ-Laʔg}1))*LV-Θ Y䧅]-r2S v6⡒\!m$j&D`"'<DW4}qM@FdC؋\LNQKLϫA((-&.+6+,iׯDNm i@Up組gADbWU]DG [N& 2j[V$}'iN\MD[|XP$ViRXGJ:N,VF7FE1y)D%GJ6JQ ,MG(EpcD@.|ͺ,.ޓ@W<2l}Zfn-v;r+TY`P bk~婪l-AmcCFU63Q0y`MuaŪ K\҉8"Qvޒv~.h"udq)Jp}lBgl~Q Xfyꦚ^6޾.̪Wg+hp쨽]*%j؂ kĈ~^<[•hX"Uif&<^|*O.TZL~rTR!h+J`!٤S0nC(JL2NЪoi\LPd*'.wƎدQTثQ-ZLx˝W%""q?QzJ%-ڶjG(O ּ-BYAeo%BZA$ ]΂$U+\ɘE kidqBQHFNx$*HP],N2'" a*"jF1r")[; (M˲2^qPD#~ĬBSzq0 !|K6ƈRTM!C鞭/0򸼊(;@Dd`4^ϟ3pHɅN+"N$(2s I/&Z&0 (^aUЉ5Era$ūy`QMbZ'# G@stdrK{m3wXU5ƑJ D]#kB6+7E<@!dօPѭ1"NU8DAQ4%"\FYh.0^yDNI/>!AE B'085gWfպkW_;lَUVmқ @&\ؐm]wջ>uL$wNIQ.n.-*ʞO&g LrD}aǖ=vm۷qD{3jn߰/ 0Ǒ'W.ϡGၛ2(tR8N@ r((qՕnh0} /#Ҭ(n(S;HV T:l 8\HX(kaQ[mh1nQ!,2/)|Jr'Yj@I2+dQ"BJrB't@ M. )L- ^;D;",TI)ҳҺTS.TQI7t(DXEDρk%+QQUŒJ3 M^HX.h:):d"W(Lo"_Lj%ZEIJ-sM7+U]#Oz{i fE݃YDUW)MjxZ hY$bLM$[SQ:q|aY+w`_vez ڤ}sB|ڸEk(Ģ-x [Y V聃Uрw.(l[IH'8 p UD'`ĂD tb"n xWI(\)/ʗC\Œ1ABH/t04֥UL'=SU1Y>Q$ in+hN S5{㯶X>-cEO' Jx5_§X7:pColg#&rCTT)d{ nF!p)![ u0A`{ɇ R;=F-la%M#DW0# ϟD!^#^XMtrbDJ; ))aj\#0 ZAWq!+ uDH18Û4xA' iD$ɀab"!ɺqaʼn8K p`ǡL B,;h&TJCXb?ZljZGk i\ϷGI. "yN0 ]_@Mmn)%{bi"pO($adYʰ $S%cT0թ Q\hV.XeG4%f󱕕XBVĈkD i^O5mmk4g%M֥s'SjABGYc)),e!b6IڬVЊPhA X*ݝ k Yu- 32@y$h 8y%JO.n.%^m?]=懳A /H_*kq-) rU%'4gؠA\&KbQ` cE($ȉ+$Prkd- MópwK N`C> /nůA(F*s1|.xx ao[v!iIO/%:ҜuF[,7 |>[OUAVjd O]3`WZ0ѡ]MBGJu)miO2wOۺ,lݦ2A>JtNJɳ`j Og6%RUwd*2mm%76 \mIxJ'4W&U Ro:ZDW|Y9G@Fax Vܑz+ўvKýW%-{d5X.%\mo*AqJ.GOlְ ]Od]@3Ȼ3mAz[1g9A\]q05&mv}AŹ,~.gk_S׍jɠ!ދ["di}}o_6abQu{3%`-ɛџ?~J #ph\x!&.-10xJF A0E# lQEBȮ0uqy#iDM*?f` j|1QJ_:Au8qɱ}Bl/Rt!vtlH1q'b:!! !!!2"%r")"-"12#5r#9#=#A2$Er$I$M$Q2%Ur%Y%]%a2&er&i&m&q2'ur'y'}'2(r(((2)r)))&s\%**2+c>1 r,p ,.0fQB-6VAH! " DY %DK r/5s,~ s O1͑lTI"-ar-~0.s!Bq3i3/:3R@aJ"I#N'n жKYep`2ks:6$"{"~'~$"%,o9/O҇:1/R$ ! !s"';S(d9 VVF4A]:4]sč4'/@bdkA7@"q!* tFBBdV_~,G%iC?  *$E*lIEiI,>fvs|{D+'.&$4M[FudNN]S)K Hrp4/C4OM c3:C%8~4Lⴆ"Z24M4GS Ge20"N3R6S_NCg9; VT%#U1pdA(XKVx5X2#X4QVdRյ"tHH+%J`4(HdLU&OIZƴ[A^UL nag!mƧ)s"J!Ju p%~LR^וRUH_d1b@U"_n_c__EiFqbT/[$V!$LIW$EI >vLq(`q2qe׵RiDVHdR?Gϥ`_Q?u&y־ڦ"p%VIʴdoABddViinh&f bzP+'Ty\5Ŷ vFNvTvanggN_n+xNpE`4 jsjxvjex q#0n `<&Iw|"n *W-#I|<>sjFBt[VGJWTNrTfCt&Gg uZj{9Ovbq n'wxߊgpIxhWIÎwx|M8ti0g'f6IW|Okted}7}'}u]'&ޤӬз^$¤z@V"4CH|$,>԰8q&J!zؓ!+ vt5Iʅc5E%†6'sXP{e"v& h vxB Hg (~\ B{x: ! PRK aD/#ǎ'xyH |nYx= P Wx)[ TGy'zXCy`Gn,~ 1J_-ŕB'kc}X#/IaΙYx(09obٽR q"J!<$*314+ `@ ~Nz%! @?`U ``!ٴrY IY em@ %- ZqU0ʋv "%Ou й @   "#϶ 䙌3=bn&F`9WqΓ9~ B .$2Z-5"Vj]B ``9 `Dh; H$'$"0%T//7# hwax%O` ^zYFӻiN:W@03{[Pi{Y#{ b-9 f3k [;v==,a )m<'[/:߉DN{Q{kX[S 4ccBʸm'"6I iѡxo:@<jl xⶓ*Զ}ep54*x@I6 x1 $|Lp5o" obM8z%9Pe;Kc Gfg9Bga=#|^(P/ܯ QÑ="oWunGȚӿź@kMG~8cG p*"^``*"<h lY  EׯbJ3G?}- wA=&Զ=#{L lxMku}szk\fBN Ipck$]b 0!OH1  @@q@e2ȑ$K<2ʕ,[| 3fIB eqAF=D@'T%"Rdκ±( Q ō @ "h TW(:IB`b\㓖p 8 >8Ō;V Tɔ+ON%J!P \U(JDKs>܉c\ŀ#'K6)P.D$c< QiAF́XC؁v"Ǿ'&erP*pd %rYؗ@}Z ZH{aRteWx%^# QMF T~\%~Mt ![2G tVBH|^H)D&]A 2#i!Qw!B=eZne#aБ%@u$!Bkr4{a" *0$JH J^CbC [')9efO$_C/eD\o" F ʋ[M0 /́-Ҕ9sYMC~$ D@Nza֋'Be!Q g(үQT|v8ʥw!7d#L2EBsG?ZU " 0@?vf+e\R@8@uzi"G%BVp`IE;Y oGIDY8b'LfZ>(b"@@`IiYdJH)JZ5#i^`Œ"i@Y„mX"24aO3rT^ k'n)eeN(eH"S QD 2=Mdv%@Kѱ-qk5P %]OZ?42-Dj }YD֐R!\-"9)ڟҕ"D9$N2&`XFV60$ʪdCYU$aF/w$0p4% DY'rOb˾u[ht)` S gT͘%%fU2҉ϰAKfв.AŜ/'Dɔ $wdc'wIvzFD\ S0RѾkX% I3WHSdόw<թ>F$MA][1 {61( [d D ko @= p45&ֵDk|AlI]y헕޳-ntE6-ʙNSmbK|r(LЕ#S,"H a9T55zMXC<$+TU1*q گ$32?U .9Yi&Hs5*"!+ⷪ(Iݰ`|0ZCg$X9K~E0〤g`Rxc䊙/H؊eHmܫU9I݌Dx$!u"DFNQ3d_M+|9>¾(L|H~Y:0 GXw9?@ʿPE_0>:}GhbyWsvfHZlRz'uW,&|X7'{P"gt#a^jc5Z02u?K`&8gVik%^h`9gA~fY&zvw](:QCQ^"d 0}_fq(dXUWP 'PN$43}i>v2I4#=h$aC6~fwGev{7 4whvQOxHj8@Uf}a!N 7Y8Q~ACvZH%\8*HNv\d(pG-Q%6hRl]p:}xeOWׂJg, j(*w^$8 s6+'uvnFWsՋ!!kxDH|7Z(_ ɋY1oQ+xeNC;pxesB)11z0!).ٔUi  pZGX Q@'6M'mE0gy.fh7E՗|X<|xQ%*YV AF1i A; ~,,7ፈuIF>x\PImxٛ))f,YGs,vs#!)}ITyT9 !ɐł!ƅ))Pp,i9 ل9 A7ItAٙ=3?:i꩘W%&i(n y%jp$RỎ㜅@`%9in)sZB;|?aCioj>ʞ كIy9ZX}&)d1C'Z>:%'Jujwy R)z̢Z`gI8] aL@g]aЖS%!)+`ͫD ׻۽f N0P-jX`sFh]9 &d]ՍM #< GeUADLLY|П:ntʊ* ȗ]%5-hH]ԳM/2ik6z({wţ,'Q8݉Z+m>nmsv#˷1^cj WMc=-Z^+3mݶWa|6%1@[HEmÛz R q\F4|a-mݩvv? ԗ[>wݮ,d\fX_N-ٴ QfF H$%|W'.!5cgLẽ̱a+֓jˎ{gBq3̖]݆S&iz@[ثlG/L]{0Q}|< ,3-bJ Y*:V?m!QJ^,~#J.gB1FV7XO5B5HnXVU*(rw.j*Y&?\"jYwJ4T1 y/NɔNndcޝ`Y(lULM\IßJR= '4>;^(eE%3\B& q^!NfXydӬ,af(.nn h:*K2:$?2w] Z_s@1x,9|Rm)V I TpAtA#p-܂K.n*S[(0+Y3@L+L .$#nܚi@)LbZ9.Q!FbCPmD15Ȼ쨓iĔpN:E;i<9JCO=LS!T'iZpPL3tSN;tP Kӵ04 Y#$XX$G2!A;1P1S9Ξ8I$F,Q21.D$"Q‚Iѻ q2XT1l-(,c";Jd"b4͒@OxyJU8@4V `npFQZY4 Vye[v YNB`f) 'UDXG Y_PeYrB蜊>銞_鉞M.XJrGDGyfGBXU$-R>`쎠9Iծ PW$. taUԻʸuY"6 _([}w{Vb(f@lMX[ZE?MAy(naEH@ XcJ% Ӛ~0iOP@ `!w"E5 n`S'˂E)k!mS (Hf P+da Wl (hةU0B`|r!BȆ.$b10<,BHD"nN 3H"U$)i"KbW;C@4(@ YP>p9KZ(/[/h s?LA\A3 n@,xAԘp "{N[1[u*N"+њ$B($Иva:ˢcm* (/kA6lC7|C8T,*T+x+'H 4C0 QYh꓊`1`$ 7,8\EVlEWL9$:$/A,XPh*#DHĘrQ0EĈcxY@`U&;**2 {EnFoF`` *BS ",hf$\9Y(-BFɊFH,NQ+%ߎJ`tY2)x%\|k I}~ p'H, 6FvYha@,S~3[9k-`P A`mb-X@0F>UB|-56 }VPi2#諎r"I^WlhanMfƌ 1ih> ysФ@ЂjjXil:lM-F-W6+pPx6MBv'`dt^| NNȂ'k)@X:^&ȳdz§@jtŘ 1iVN ˶R8kf5=-fm[֎k$CĎER+m۝SmQf,a.D.v& Znnmgn(h Lmꨆlc e J0gVG+> K`Urb{i1듼d,}VS\vz [C߾ν he:JǠl_g+.h.É- zjF6Lj  ==gv9QhBɻףp!g qM΋Wq ;P2 .?~)So*v=L%^^H:y"ҍ\M 7wIwxs /^ n#>̤O܄lJ_''!ߥi5`@?bo<+p'h]sGLd\ Oe xr;Sg-_tZߐaJJ CHɨEnrk];|6L,V4_ *Lh/oHXjB A lx;s'%ZΑTPLb͍!yi+X455™(,.F!lxϥU T}Ksq'}d>ܸ nՋ,?4@ę zCpl)/=Qd  LE7͔PPPX`@"L &t@!/&D41 F&TpԀg)X`,<)CS2r'NEP&2q&>)u*ժVbͪu+׮^ +v,ٲfϢMۑDB+c:΃0/!J$(j⁋6L0IJ]uS2LJ RONz5֮_Î-{6=Nb@N̂q!'yS!ǓKUvLиź  X xW}dI.Jgc1-61ϯ?Cn]$a"`5du}!8z$b1ơUus Fh T9 U 3X7☣E0WEM'ruA)i1M@e vWS ]u5H0 A]TAA^@Xw♧{tDL^tA=^GN,Z  qmXZe)xmWo}-U3᧣꫷M M8zB0}4M~xS QP i)\ x-wQ?"C4&A=L`:磟g~=3zm%U+n  h\vHW1,v;u1ZV2<[Y$yBF!,ױyfb: T1}Ë V? p@嶒laW4 b1Zܢi5@5&nZ=ɳ6i1D*0A<7bĄA! t="^$FX$Ó1FC9퐋$%uԭ2pG"IB$Gv I%Ca$+[JI DĖ[jpCJAz~}YTXD˄,LS!*_oS5MpKWG`X!Wi{3i"~* aC=) We!DojjܺLiL'(j,h! 2c>[җnT/PQ4:í? )QjTșѣ.́3M J:^pdCjF㡇3\gu{G+]]5sWWmL(:a؞5]X 1!r$FVŪҫ_ի)" DQlELVk.U $ckk6-og[dP})h)tS-H̎йGg;AF ?-m{k7]/{)|XMHObـqUF]\;vDu\؇^X c80; ħ*!nB+ᓄ vC_y#sH`89#Vܑ0l]~bG:^'C9R299vDۑ^6if ʱMcPc,Q?:ЂWwup4E܃_^"RYl-c[dP,M͛/">m^2g4T#4[W:m&v'σt3A;UyEJf>VENePf>xijbS6o[||ܺse%_J{tfT_'7XTvm#< _5f!~pٝD5v1b"ABNf[wb^K29knŎ!Ae@Os{Y0-ȑSD7D`^",Yݝw$bͦyǁDTVφ|{GKUMEs"˒=7!¯È!+Cԛk"VwCH!C2HBk@#rDO?MHH_ nL$R͂_B -HT_Um%R' aНMUȉ] _iZҀ V"0A QɟqEBWȉ[AMͪ]T$9^$Sڰu V* !|_~a.\ C!XU[pO"=0QlJ<bCh!|D&^Pt!U\5It""ҢNr<$颍P 0hw]!p( W[,5y`р_aU^L`E F KrHt !c= Tۍ?҈1FE4 .^ H#(hgVt\ *@T", @!j<(PZb|qz!<@$S3pL,0b"8@F$j髢g~tB"$~EުUV®Vaa̭DV?VPj戜0U–V(jj4SZLZ:^!Lι>^[L{)XkMK+\Ah*8 VʞD fANU^ۗ"])k|ʜ ?K#D6@oQpJ$-(bw5+A`ESErYH`7RUD$VBKCW3ni*'̪-@rf]OȭIvZo0,@xŽR(k+"btV> 5B@,0s$nBؑbcW8YwG9C/7igXT@B =D]F}H%J-L5ݔN=PERM=TU]V]}XeZm\uݕ^}`b=d]f}hjlݖnpr=t]v}x块z|ݗ~ >^~%-5ޘ=EM>U^]~emuޙ}蠅袍>餕^馝~ꨥꪭ묵ޚ뮽>^~垛ޛ ?_%-5ߜ=EM?U_]emuߝ}?_襟ꭿߞJB"*ݗo `@!hZJ!+T(|X! ( (HR@ ~fR"( * T i販,BfXC A@,%KDPrh*IbȞ$A),DBE3j;HqxF7Z `B7QbO"A…|*$"!L"0` RpPHK"P 0I,(7QX4 (eT,LJP!Z. /I$pb>]C&BcrB `'ps!8N ZBN{~K}@A 'e*~UiJp0O$(:dn!HIZR)UJYR1LiZS9NySAPZTIURT>Ul!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++444<<6B:E=G@KDOHPITMWP\U_Xa[gajdnhmgrlwqys|v~y~138:IK[\hjqsOT]Xblfvw}…Èʔ˘ΞȐѣÖŚǝȟʢ̥Ωѯӳնֹؼھ֬ӧܹٴ޾] H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+7HiN,hG'8pËO_@|k2&Ͽ~@@{$=C<F(nUG fh~Ԁ?t($h ́,a="4h87-&ѣhH&m(AO:Xf喑P ]||$у\pVGz`@e1^q*蠄6ʇu&ăP=^Vj饘Vǀ&X瘦5AꪬC1vziP >5gN 8fmM*$κ$ºhiB2+afPzP,*;K'|0՚!1ni2Ȧwq~z@ q![ʢ,n"*ܪ=^ %zjH'tPl|2:g!X`-vL"I %0>n=x$&wCbqܑ\P>o ,DI 4]"Et=ħ褗N(': I"n#{(}h+g{Anc (DId @v36{4]xY9=z4,XO$3yDGouMߣp{h=x@}"6kˠ7ym " Kp-*@\a0hw̡w%JdÛ =\2tiHLOaaC| v2R_2KCz4AD,"cM(B0%d ' O A@,UOXC֢$qBN l%Sp1EÓ~\AiML!ÿI<}D;JΉ>BYMv RQ#}Up=DB&Y$4G`]\z̈ T_.,"L(ȉ^ROn=擎w?8! MhЄ$h%Gn-Dr f)A.g{VlO4@l mN8%34s*ĕ`2J#y$,"iR4G4AD{t@Ɣ@<lӮzU+00&&H[֢&ņO+v@ ']zD 7cQ,JFPbC&ƄJ` Oք@@J MʢaWLf•QF08Ĵ+C*QdAж 5\0J%0H,f{LQ|@0@ I+ؤ[tV!w:~K(r8 FR-!@K'RF!Z>10 з$hi{8?<`z+r\#HwXj (^$@ J"B53>/JXY=0bIoq v0 P4#h@>0yC>y6 Eň@enn@/3r`=XcC+"h{m]B[MVUgA|P,`LNk l98)I\ X %Y`|$A*'@tsbP9)PT*Ifu=8n8GO=dT!} tZ$s=8?= C@ ]r %2LA26iWuD(jX1d>y=&$|fJuRZ o|N!Dz94!;}4͐/SRq!(B=,bCׁ=\ B )$!z'E"e⭐k( i25 W!?7ۍ| қ3mg)v>!զY_7Π*Vm{.?ɷVE+D͞]CdAֳAQ_C﵈L=RO S$wEy2א+2AF1z'+_wMP>tO$x02F AbD+9gB >rV Ew|!|gP{rW6xH[5 &wZub"SGu+S)HUG A\vEW'X`}1u_ u"\a~tXyEW1? &xzzw>z1Z-~1r)A8S5R@(5Sw`Ss\|,2q !2 QxUxODI&4ȇ؋cqW^M0%#rsp}D}ꑇ] Rj|p#n8AR(3."dA `Rq?y>WV|0x WaN#"册-҄>0P @HhWtP بh s#@Ҩ!8` BQMI%:!hH\hv>( ~{. % 0m!bS,r 1"fX,M|6& s:I.!(a9j)#1{`<yC2oUC(! x P Z&RIM ,Dud85XkF2șQ_ҐPv} Q5wلHZ,_>x qPIY-`q9! Xf扇!I 'Qv 5 y*+ `u`V?xXY"~y t!"!Գ١GMY aHIgg Pq OrRҁ L JP~#khtD5>qLy5 1 FI()ٍɁ$e*`Z0:9v Q5g!^jB ћ! r!-UٚMjWa2jjD ħզ%ReWZ p 'V5} QZdrraItPdǗ#xs #BÙ:- rWeIc7H yiY,Zw2CY'j%0l Z! q1X `bɣ-IjZ;G#|)CuBxvn)U$B:[ ja X1f %%[1;gDXHb|=fEwhB>2E#^z\۵iI `%TLY AJK '!K %ִ>b~l uan;S'I:{ˀd'(Vc8X]굢;B|1tpU\!l(K|*wR Z ark[ TaK +/ FVš[ &J[ &zk$Ƥmy[ &b~x6K{{C# Og0}˷%;~h"bw[ b&|q @z ] ''9u"˂T_# q᳓HL 7 :qKpR RBi o?l_(<ѲQdJ!+ j̊{ҝu=B&k= A݋_bE`Ҹ.5tu,YfiZ#HCbdٺOr!=Ҧ|f[O.LQaBk &a k %K &:zigNxL[ !ba+f<}"عc쵓If Zo>; \YDBq l 1Q (s!IXLa\\߂q] BYA-U y{L$))À]usܜ &LyV<} kJx+VqJ")لͬCOӮ@{ӻ;] ,LcExyNOdl|Ԅ)%5XvM"Mx-]'츾urk 3>_5 -̑kY q]{\5쟅8Yu9 & o}{ 1O-ͽPBg5 퀓K֫= ީ<ҽa~Lo}LmRc2W=Hi0 %U}v1ۜ'Κ|qNP]Pb~u:;Y22]ׅ`Rڗ['O ې[Rˑ@G 9TU:( f^ + <rY=uו8ǂLD CniJO1n8N`R۸9'kLX$&枢`V߸~·+ & s څ߳dbjqyIsPncV dҭ- !I=D\`6*Lߣ5x>Ų``vf)хhT8x ڽ|dd%v9}`ͫlN`.ҬVZl>Vrӫع-= o>8 ѵ,#y^KuJZ i_{x㱢kO4{[j aʃJ~*aǾ>_խ$' ⩌J*B9 bFOG 3BBU|nպ] ι>Vԙ0b\~T-AB%}z~ yd[5w4N4l($5vv˯PEÏ#!cϰ_F L_ H~-表!>W:G %1@  jPD PrAE dlHI@NJ>@<@R"Ó7h0ٰM 2pAKAIЁI>UTU^ŚUV]~VXe͞EVZmݾWܧIF ㏠F=`4@?-diRPP#^HISԛD- ƙ3v&Ιy:zfu:Ǩy|r3O9PLWtխ_Ǟ]vݽ^x,0@`@ 4HR8+)2p#(|,F* @>^ 3ʧFA-(f::ΨZ2D"0'yi&ߌ:%mj *'hL >|F#HzhiǠBK:+/J)J+2K-K/L%h*)OdS J @x 2O͉(Lrt*sJ(5sbS%Z&ڢ1r2r BL`m&AqHJ"%)yH%mxqL%Ka%XcE6YeeY 49FYjEZۼ# C [9E6 /4o G=WpI_Ш~[:U%&Jt. V(1ҜBHBg?9dG&dOF؈{ תh( &iJ5uTIblɾxFގ~D y]qB9';"U [ΨC[%P 2&זVhҔo܅ )rFɸ <(D!!8/)*IZXƅiQb$xx&h+Bp駧z>{)Wۦ Zcqv(fiI` 35(UYIG̹bS/zIQrgfSl9]GH,yCa UBЅ/\ 2R$= [5X%E*) H6#BlI5"đ} vg 1^Ewl喔] gH@rяdb7$.Jp*|PBu$QF1CȓB.5{rHy2ƙ<΍'YbOFJ$^p ש$ymE(ոEnr\¯FA@m ĥSԺ&%5VSՂnLcs 5IT5|.OPV,tQmA oEmFDs{%E̶"en5awNQ 쟨rD A r]6yő!([޲+1И$/9UTW<ɴn  OD;0G0ܐvpռf6ٚ:~Urd mp\Q${Vb6HE"P"ȷv'$1T <ȴIVD (v&aŁ!+:h@\N*׿v=&Z%CD3" @I\Ϛ$?E@ગ]qĤ L+d AtCK[kܥ^D(@ۜ`&Q45?0Ang%xEhH5 /#9"M{#pܛ=';Aa$I К$`[㦫(1S9:3شΘ x' @,7B)s ׀R N# +&I  #`F<@A$ :+t+Px@sX $$;6?$h89 @h6<` ,:.KQ)Y3 @[3 ˵``@7~)sDtTǓC껆m+5D\Q*HRYjQh8A:DD8Jp?kY{9iԸƩB E0nj uy iϢGKuTɕdɖ5|R:HIF )ɬbaDtH>H![&pǾ<ZҘ 14˳D˴&ȿǪaxJ2;Ȋ(Ŏ`A( >xhHMB:̊0 ]\H̋^3+&<TdtM+ċPħī͕ML4|e끓2J̫<$ Ħ\(3K -$iDl͖K.ה?p$:@NhG1T΁pй联,B8$>CIt;, 5YȴMR[븫1(M(@ RN XP)8h >0R(V3b"R5$ P? @ Q{PC̄$Ɗ Ṕ1m%H1uF(Hi2xPG JHG=6!5SET `KI>)>в9H@H)S|x7'U=t$`-UBH8T?ʫ 8xhl >ͼf`mO`r PW`$)GW W`\un ?xΥڨکZ CO@תڭڮo LD꽯5۳E۴Uۓ䈼[۹ۺۻŜ;4ۿ݊ECYeuǥ{̩i7ă\5rz%M~( ɄXuׅDHIc3v%5_48(u])iI܉R"5Eߔ59^\(Bť_HcE5F); 8HX]T `T'M6F=9TkK.^K≢\! v>!&"#f&vbu$V{+,Y)Ӷ%-0eD1V5fc1m9:Dƚ>?12CCFDO_|UHI>.$ZJNkYO&R6e?`SfVveNXWZeAԐ[^Ie_&b6bAP8eff vij֎|Jkmnq&-ufvYm]wyz{|}~&6FVfv臆艦芶&6FVfv闆阖陦隶&6FVfv꧆ꨖꩦꪶ&6FVfv뷆븖빦뺶&6&bO^PlĖɾ "˾3h lО TЀ3#m62C~bmF)4 P  l @>/I6n܆nk:ݎ쓘ήn8ȶm@El6S(>(olUno/o&Om h lfl 4l4!Pp_1pw ώ g l0m#h l `p DEPpl #m$!_ppΆrJVrl q"wq&? )l2m=Hr%gΦ(m8<=AW!7l2 CD_ 3op%Pt?S@@.sPstN(NuBwu)ΞpC 1p_ bnuHukb'c/YWjZƀ>klw\_`Y2@vK2hiw4h ylz7I@/ D8p?I11@d/0 N021Ep8OxOXwnuW?C xGdG823Py%ω7yvz xx0y<@y7_<(0 'wSy/zxw@NΞ{02p xp/n(xp 7qps hp/|x"p1 L7qωoǿ}o qEoWpLJwpWl2x} N/ /q"qpHvwnP uh/ \,h̅ l ˆ'&T"F/6m-Q[T"|_@qQs'#f(:ơTT5rlzfbO( GWWwz`.{͕=ofN? 8 x * 5\O:AۃaVo 4Dz ѐ qICPm ݆QvPzWi|ɁUQ("I"FE$dA7A!6bA1Ǟ 1YPN]hP ey&i&m&qʩ"QyWi0+'їq2u"FsA ~X'*Tx1 hنݑ3)Ҩz3D'A"'e  *Q,jBcBIDFC)YU`)}ba) ӖxBzQ5N{j%lFL D`lDx`( ]As/ <0|0 +zuAy^֐Wѐ!zTcD_44DFщ ЊLN&l^^PhA=BqD'8V|:YL$+dA(Gٚ Ґ Q] a}༵PVvAK`N'#0 >8~8+.Q&{}^l˲J'. k4,o3Zw'MjJ_A +\$qc'nSxVIuCȏ|Ac{ZQw\8???#8pNLg`q$b" fBQub_^FeĀI`D \_%2N|""%!S^z>&gSHD Npb_x eh G9pe 9bb搙x}@p"3bB1.7$]8G:^3%vKad7YGF$ve !#R2! Eb(򲗾%0)aibLdGt$t(IY&ȹ}9K:dD!=Ur7)rƒT Unf?w&$nuļ(F3эruHB#͢,%I08aD(4vL)(~{ S207T< 20 ,VS}EhX0a1+5"uD%: n}+\*׹UNK`AgT!<+jk^ lT'*USwG Xr SPlCD >г$EaAK[YFm+ns򶷾e h\+Z0m.ֵF@"C<𦚳mc B׵V/h`:b(ent^,v܆wD:.+J!-AJ 03 R%ӉV܈"7,BnP?2H4w겪xe[y D C(ℨ,eK bI 1mLֆ l$P T]|\֧Wrr#ކL2c95n~ND^U,"Z 6WȥXr&Đd,`4"f9Z\%>Zݴ-߬b.&wIj(s]׾ eR:`_/@]q+.dVVKҢP.DgJ9jBS&bA ٫t<;ig)Zf3D']6I_o' i5#.S\׈vL.Z^`mF.S; \nib9957ې!#D#mdѺi>/y6na􆸜x.M$ aAC l8;.kT ɀ b/% C{yiSnH/4w:A,3< naDJ0ѓ> H?…W Q M"P<t B|?h򆺼׿Mw=E |ܕ2^>?W7DP{Tџ~A4aR:&pӿ?n?d MQeE`@tEz4_Et9Dᩓ\`_ p "O4 (FN(V^(fn(v~(((((ƨ(֨(樎(())&.)6>)FN)V^) %@tA)(\($A)(8AiiC@i*&>@i0@gPj$(*v$*%`*4A`nj@B @|*檮H#j*FPI 곦V^`ll@ȪKj % @EPB*F+++\h+BI4 %8`$.뚠).@Ebj^,Ɗr뿺(0l$@º&Y@֬bnkDziȎ/,0l8FlY+6Zk4 / -ў $$+~Ӗ& B#EYm*$A -FP-BQ$(AA@8AʞRJERE%HAHٖbh!@ZdDHJ \̮@AJnn(`!.Fm]Hj,^ߦ .֞ n/r/^Aiܪn+4C0bl/4nĦDp/BЊE`j(XВm63(NxC@E`0Z@ApCXs+\Hj): ޅ0[l ]@6Pj:DA(-^m.lC΁cj®Xk>0q pJ@&\popz0A q]n AP-l E13rl|6q^&C2&LkZo$j1-{o6oqp.pC`0C̅˂2mA7D""#3]o _k7'C(3 `*f5۲=suN TrD/C/rD#1CoT3m\8*@l*$$AkXL3]T E6q]A2,Alr't8{2&%,rF;(j8@2Fp="_NTOr뾮AfBsADAE4XFB(qV\;H]t.u]+;++Ҟ*z3P#Mp];*At 9BJ@9'5ZLo:NrMS5i8 EP@&3X10nFX:BCE\|6DnL2+r/w,s/_ 1]3+̳]Ma+6^.&wJvPSj4:A0gg_7Y<~w8@@W2{umbs.8L\l2@<rt\-{v&3qbwA(0N+ly_{E|c78#d75AEd +\\,@4YT\8EcEX2b7w8adErk7Zxǹ#,XAo166CvX8vCl$q8g k9fvC$M9At8y98_So6cϹzks37넠o+\X7^+JRAXzcyws9qC:;ċ:;mqDA9'4FL:2_Ds+]\ @;ģE8;ϰ^D:]l9f_K_zË8w:El1_";6;F |pOgk#.!\D}CT~.˼N@n k|2߳3K\xC3o>ӓ8AD;>SꉫW\E9=lC9DԺX:C$8E7z|EZ> }\N@@h0UA]-F1\x< q!T lpC<47BgO?:hQG&UiSOF:jUWfպkW_;lYgѦKB۶[qAs!@oj/^!9?H4P˗1g8A\ܓ WJxPŎ=KH% lb̃sDlij1|9ϡG>zuױg׾{w?j(䋷Axw4r0^B=-pKpr/h$M6@"83j3ȏ0̰`Ұ)6㢅)W q$ JBi%X('ND2%" -/ S1,3LSM(Ђl`@;9'𜋂hs R*P 8N71G\&"}'J! p!G7Wt"Ee%dt(HtNb`_ Va-cMVeӒKP"N`Y$FOQZ҃X/: Rt' RD)q݉AtSm#)Hxz:z( f)1X9bs>ݚ B4ZoC\A {xh8 wK& ԀCչTMȂI&{DR/R}{N[nLŊn Βo e>sD(Bf6O jE%uyK- VP! s S=2UW])QVtLgȀ) e8[/O^y hr{*$ l~,17oj l!z+jXXe< K dP0s4? 4zACB@Thj=+@(xg|I p$ E4D%.ʂU$)Es AwN(AXF1e4Ѩ$  N|C?sso"ޗ'OyV#{{>1D2M} 'MʞpR(7Rvn0r3b K!7"9<d55 `I>|b?6!$Q @ʊ:8a@0o<+4&q  P& "A3;0@QS&, 4B'R?3$S>HH}H|l$Blḵ-eJ"u!.@~!L^,bFCq?' S&T&DK"LT&33KMb4M'{˒-ESH"2$d*I/▶Cq'6Fk ڱ'Ԗ˒@ve |fC^sb9,//=s2nvn nV3;iwQ oBM@&l[(6l]jlAVgF|t/td',$'$pBo]v1B(!\`w)6PGae4jh( 4;'/s5"8<דD1 W'b -;`0w(25J7)wq?xa }|W(h$1 zUzmz; K6~pⁿ7&1xb˲Pc9O7-"_q}] ,Lv~~Ui5񎄵 ~鶃5 UYV-| XsXxe!绤 E1/ !no*1 OV`y,8`B*񏊭1X(јM͏< N'VύXXXu!BX(67?#Btċ lyq+d^-yQ(Q G'292'jn'Ebe]wU p8d9Ns (:?yK@t8I(mlWօG!sχe8 }0VU0(Y xyV9 踚7!Ldi1Lu!Hv1$oLئ{®mLk"9' Zz6:OVe(8u:[2z8,F`V" PQ3fp<*lu>Ʉ֫B~NJaSBE'(~' !d%E)Rg$ht9'vz"\9(k>"V' f!8!|@Odꞓ><)z`BRWg-'._:W' @k! /` i'@>#Z!Ι],^T>!%edF%Z1dUNdY9݁Bk%~!x!DE7 S~)("4WE•8x…?:|x‰B"V@tT8ဓ,RJ9'XŒMLKH t&$' :Հj\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| (?IP uF=၅ 5'9I#mWR4$Aia BC5h)vTiFu{tOV|GY$U;hSAB+ĪDY$ʪ`H`` .`>aQ"E|8`I8q^E6~T!Wn-(SAA|tydG-eP~DSY,"}JpZKʼnS) EK4GHt CDCÑk\jqC tATCntCD&Bw*TL"DUJiNJi^ini|dž8Jb̑DU@yЫG IOdK@daTB t8(9Co#B xN.K%@xazJvfvjvn5$Awv?Jj|Dw-7poKG@C#K;tTTtG11`8Eە!'B#K\BBRlC+=SX2,yNJ@P{G-%@p&K^V>ͱd󠶋9@u\kG8F tXLJF |pkJpD >ԡs>:A <(J!KsCڂ !#B/B|F|(2'!HID|$PD BEDG!/Ž0 ΣX(DlʖČSY9 Dy;r5u$@,;\UÖ̀ ٚ ]QW),)OTr zJreP!$ ~bkd"C k uɁ\Hh[˼ɲR^!i@Lo)ȣw1H,y'¿S_tk-L_ --G &q-.tPHDO{y%q$Dz$1m5x2\7^ sX>fQۃGkdxG9d$zXM4@Bvi34RP8fdFmFge $}Ch`6N@5}?ȄMp3N `Stg*Kw $wjqq'q4&Nma31H[k_QG4k T/s"dU@rKe$z灄sdV:Et$Eh^TbQpH/Ԕ:1*7!M{8[%@F7q$^KdC;`6tv |`|! ̸~R `pEK$7~wp s0*xQe Ӏ((He?l1#%x7=FEE^BTlhQɷzzp4/S'crGSR e8v&vTU9HU_ @AHuAzt-fq| /QkUi|q*RSKd74 I8Gccj13%E[do9f~xɏ6Iq?m!@tՆQ_7yd\q58&q&b#d!xFr,0 v  =98@@b7v}q>)j Q)ҊX7KAI-{SXnԗ9dԗfR_fCPalET֝qzcuI\QQHI^q2fofVEr Q?x fgYIo曓) .  1j?PBL7ģ|g"❬Qw73Yjqq5GzIʞ yȟA)\mXeIb+"rǑyia00{ q3(=r)F(h;pWu=)z 9 (6Oɢl*?KN37ݨ<ʪ|9CdJjIqmfQu1=&+g٫Il@]:`ګ'a(|m9A|gQC#2bGps!P>Nw_U;PZꋓ6z1w6Yɯ 2aKvÔAs@kbb:jD.)#{X Q@I5+{(/҃zi.,.K3I ͆8;Id*_:k#q ^q\R:f%VYR%ER??_qw%ʚ9GACl#©gkJ!?sÔH7?*8AR u7GT'Fkas) f4˳NRvFʪrɗqF*Oe3'YeG^\B=c0c:."63n3+  \Ѷ r*>\1e i:h4TtstSp @LB+4J`K5;uBkdQ-HQEiy nF'+{Fޢ-j-?M)ksb;RyblLkW/6S:1~ 6 Q,S,۫V0Ŷ4@4 QT T,ԧ`2k*QdOR91I/ʂ)Ʈr33< +uN 7x @L:Bu Ms4,j Ǻkz|Hbռ}£(Kz/\q pD7Rx F yqD 9xj'Gus1Sm!WԋXG-(LƌcТ_q4`a2I4h2$ב( L\ 'ϾHς@hFdKt1`ڴRLAfJdR׭ZA?w|>W ps0BA@B:q-C,yt!W9YԾ||ļٳ =H]3-b̮@^%cC$'Yw57؉pNϋ}M'q57!oY17bQ -5>S4u`M\ ?|xpufl kyRѥb1eu82@R|y:R P`6gޖـfGk.,Q/.ae3d%?w=:|Q6.  >ޓ;pU@ش cLiN~״EQ,%#&L$ q1+4.a!ͮZ~8~0=PA@7>7ӌ7[O;gYa+ЬrUc@Imm^̿fUiocGc}d!vu#2Fm̿yNH 2d(s'bg>$T'ޥyPY4r71P |x>WJ' .dB*=>bƜ=?͎LWߤ̫s~}a}m ]$\ZqOQZ-N݊du^!@ |뤃V+ RV'}_|X % >k׶GN5njU8P'q_ݾp1 @o/a-,ˁpMA-*X`~ D·T?GtG~ $A ]؀B(bZDdQE*dHQHI2>jl+Dqj: L){<`t䏌Nv"JAIOּ91Ԍ`f\0vl`괸`bf2ɝr@J[y/fcȑ%O\q(3YEsPi|!rgo,v$މh@!\CJ$7߁ ,b%@!l&hMVOu~uŏ'_yկgߞ $hCGQG𡎐cj"`R ,å# HDm ` #FÁH± Ҋ TZIzrK,"J6(F(0jh"&'2p %N$*#Fbk,Uq8ʼnɌɣ& Q=B 503h^(uiST3F9r4 ".M/4k"|Em7!jUV!+`1뺃"a#n|p 7ܱQ &hFcX<>AuT(gޭM+VUbMk<{u "Ւw؉wbr:jz$S1ȉKȸ,#L ݚf blS{ A()ުިgH/p_vt3Y4C)kH8EinvHN-#z[$WCH޲7_+da ]B$q~dH Hr!] 5%$a6DHp;d.#(Wn+R~4 N2a Z)@H6X&6MQ%^|P&"Ez:D ~X`z"^MGtT)?П2AU&h.0)^'yd :)l^1e-+@T"Wb " Ԍ@t0tާdPSA 9vOMpS\$dLxFS`C mNxS'c! !CD0 @h/ d| I2f`)c?'lx)V !ˁv5L p]I9 )IT\DhJe AS 8e&4(l*A A:BADT}@SSĥ.!K_&&Dc>A-VlVUfp Q Q朾YІVe2s0*e>f䨗dLۦb*61o]4y5 4Q@ &7QAv2ʣvbʤiEx'łDd% |*@!sB2a)fDSQ&6zg%vRduy,;Nf aX#RC0NG6y&vk!P $<(+W^Åˈ&*d514 9Iz=6=^41dG$H$< mb 6jZ; ׊f S \2<#D#7sa >:t <|gPZԣ^a4惼ˮQt $<Bn;Lkv,uhmvLdN<392& *lJK:D SW#ECׅxs#&X$7GHZ߆ʳ\%5nk73SjvFֆ8o%ҩ5BZ`m~̆;}\#'9p Ae N6KNmH&jm8 Y=(vH1dﱏMaXsm"GN\][$<ꁋpk#uX%CFs `W\.@$@ .ՃuDȽŵђ6@ 0_WL\F+><@}eƀB1}}^ Ŧ/|'?u?A, pN> (Q!տxnQ'@10Z߯&P~h1)bHv'h?)H@$C Eh?@h,@8̐<԰+A,A7A c聇ѻ" Ϡ˘b< .#,k: D'窥,n$7DLDM(/DʨBQ:4ǓFU? @&AD8C&E+.BCG< s'tIT|FhFiL>OB.ilDEU8lEWCCȂZEE EK8c:tsz#r͛0-^|eF,Hhì6hƄHJʬL˼aC "3J#; M&MLMtHL>SA\MڬMZʢٴMMT<>L!ѧS?S@ TATB-TC=TDMTE]TFmTG}THTITJTKTLTMTNTOTP UQUR-UMS4UW}UXO0HUU^U_uCnT&Q:ՃVR-icUiVjݷ aE N>kUl%1g͍rVu]WL>xkIVp>xj5pWxMקyu}WEscWX-W>hUİt3X(3$(xhBX 6;uE-X#m uU ,5 *(% PY2)ZWkՕE (Ymm].Zx}IѴ*E{3I \ [Kۢ5E'Xx]+Xs% H} =Ʉ3X}ܔ=\K\,M]о-}F<<5-٘39^\5=7Ki]P>5^L b) n>#l'MJ$>1 Q] J-&h ɏؑK_`_݂'x_$,3 aNބ>_'; 6^8 v@ _a :  b"> &AU>Ƞ. J&maa"b"P"> )BC-t">:3Њ >5+xbD2d#&$>9< b}b &?q'RqA > H"Y2 >4v5^+ws%9(KMb5fS -^Q%V'*.fcCp,&0x`#de6ĉS93d 'U%6qXf !bAKB?|g}g gnh>\,%+J[g+8gv.[(ŒHqh. d ~>fi*y4fˑ҆"aڪbuIo *'{ :ډpg0j`(| ?gsH4~HjGrh=M1x֘f/ i"j1ټ Eti^PlǶfvdjlY,*bNHn EȕܴǃN" f$zμ~&Vws Ek.bln=@@W$"6W>4(Yv$4uno{nv/*olkȪ)#JJmxo& Sfn6Ȱf󮤵)^4FSqM9hb;pnf o)oWeHxoMjbZ>r$I7Q\#_F(M2ي%n~n#m ɷ_=%_-&wp"sDf*N?:2'34W>-혡I'2hoW$?uT'Sq`糕PG,@ fd=ˣPXVUwWm0c+{tK'ڃ=7G`V`MŤ՘wqpuu@2&1ˢ?(tFWЋgcwjr pVc ##uW*hMudyXa !8!uxxcO2pf?ԒGJ^q>Mv0yɠiu_ Үwn>zؐ{ oF@3shQ1Ρmo-T" XOyƈxO{'R6NRqmh{ޗAF|v7ʮ{`(t7 QY@/[?z~4/w`zÎ.w6?ɿ kCl'td{@}΍FOߟ1nYvgTg~(~8~b1ȯ[ 8 ||?՛|Y[_}~w~} }p%p "Lp!Æ@8!Ŋ/b̨q#ǎ? *"DJ"OLr%˖._Œ6oPGM`dRsiM<}R'S7\ rdr6*z#HnB a)E P K({eA@pc+BX9W7QSr*g;M芙i NAu"۳@DC@' #5e )K%PӁ-r05mK@CodS%- #N9F\$X, 4(r\dcM|?U @oB2 [NL w3fKؐ$ fIpq28<4oI7]ě ڴy 07ݤ1I m6Tieꦆ6%%5kiӛG7\L&|niMd.IZ .nTDdVM(NՍrDTH[zHWd+=0 $@ᤎR ԂUc-kBJoIJu \;R4t)X3Xˮ7,dE-{.dOVMH\+[ץ)PkK'<d u[jf" w(˅9U ]f b 5bZd_]/{Y849-FT. Rf8!@˛"UUs6A+8 jD 4w "[e5Oa sX!AY]+D,/0*W՞v.dM+dmg8f#匙 X_vcI|;8fAٟT^1Η/WSP۪8aX!yyFQy)RB{9܇&0i9EqKNC -w~\SR}\E*:$g{;) ;jbzN@}S_F1A{YEO {4 5Rq4+IXaߵ^BQ(RT!NDvaG$I84A<IC%•APB@5a.!F8!ƓAbeaE8iab9Zb!Fe!*a! (`%>@Z! lBԁ0@%&D[ $Vị!pa]#a V2@zb[)a`aU #CaT_!Y:zc@8* (>}MᄾuDYBYlLDqH8Au`8A~Cل!$ĞhiARӆd`*6dـcG 2R *d`E NHC;TC tc$HdN"%$E7BPY D>KEE餼|T đρH8 A\6 ā Lq$ܤU[\%\Ir L^zRj,Td8RS \KU*&J$=I1Ă)ţJW+ J!B 0!)ROC9qqAG0 YA.:́R.6q1Aϟ>.6X'OJ pTpF+VhтS!Q@Α N"L kZkٶun\sֵ{o^{p` 6|qbŋ7p!|p[Ha8V$ΣFָ"T]6JbǃtD }txByq& j [ ̬qJrG6~b8fp: t9n} <\|%C4b#n#.:`58-\*Ñ4"::Íh(@p'*!\M,pD(JċrΜ,蹄kK?8+ܓ>@B =QC/ Í. + *ӭQ]n8lB-!;;b+G!iFDӋH#?<35 b"5!4* K.H $ '` \xrSVq D块z|ݗ~ \QNYtwORKsUM0]"u# U,Fms) 6zHHRނ"/#&!cfU4gt ~!p RhUTZN XQmS"[>m9EKh\H$؛Zݯň+WՄB3֑ )~3k;x 0s ޵bѕWKRn-)q+M{ y=pUk襟{|Z$.ⶮQb}X]\kG]h|8RkDGHI:K4$N⵵!Mx$Si-rO? Wţ $hWEfG'E|eIXB1 i8q$h!h@b@o$k}X5!k@u'3ŋxFhen8ۊ%o?[ĎST.½!KēT"HG>F9AHus>O.Ý7tdǤx""B% O.=eCx$$Q.K(K'HSޣ-j OȖM,8YNsSzԈ2.!fx߹R*+Zͨ$"o+Kyxd?3;I Ӓ=.0!k~̷|d撞pwah&Pfl):iZS9թِ $n q-\>bQo߫ITT e+HP)Q 3Ҽ4\R0-fUN [XiO-AdzI)AȺy+Cl =8z H*)LL! [Pt[]^_D-8Տj1O4)M TAP[Z\P" qP$/f~`"K|͂quc rЧEWp'oROџ-N0vI\b)F̥FڑnqdWWX',rՓ"F9klE"DD Oۑw$hN!XG-04Kr&]&½F2\˪Ё bHSpByɗ=H"Ǯo<0 ]B+- ? pG~U"OmfҲ$i(|w߶{uGz^ 'dHCyy㪉#NUtC4©p^dBoix y+f4/B֞f:;R1ug+ TYYdm$;08Y-]!6DR&K W$\ #F(Wa(0Cw*Y޼ny3߰8j~pMf̓oU ߨFC̍7DR;N>=N>I|(yxj;? C`M aN)&>)v*P6 xvCn !   G&{ PK(P; P\C!| ͂`'p©.^.Dl r$M.$a殒@z@X JboV`W0OSQA0`bڈ,V%ʐ~nF`obr`% XE/ԖeT3  @yn#`jm4Z6 !NLqyHcqCD],ZbGЯ4$ lnipQvraV#?$C2b-5.PFP- 6Hq44N$Q`| ,z \@'B%I#HQ x/W [%a҂.OF@6hk4l 7`cnm 6LoJ r4XR$R..rB!R)u9B&q "/B+]ƌ'0 'R%4r$Hr4?֒4H-DF`+Q"˰4ON3,oD69Q>jRb1.9S9\ӣ)E3B 3Ѽm6iKE" 'e7.)-~)s >MKP ˂b* YsN Frq67B \v3H -͐7as97C;Cqr|% 93!n" p^TqGxHkGIFMkC0=;4-Xt4B(! z:Lӂǐ |` V{PQH ` + EQT@R"UVsT-8uz 7(UW"UYmS+1 2 2x9P&0ٚ<~z.<H ]1 Xͷ! A7By3@ מ`;`{Zv|@$:yZ/:ڣטO!Z.Pa=9٘y 1ڀbך[/`9/:| ®=:Zv:=4BZ'{t|#,;y1[/a;a1@yxw.V|O K|` <wV u 8a@;A >Y |K jwxڬh|wx'[$;y@0x$.z {$ޚ  Z zx՚ Ơe:yץ!4x/py;By%yx <=. Bt5G ‡פ]AQ!D " Nȁ/< @A%+ bWv0]{~!^W?gA\A_f7x;A$hxmݿ3!{xE/_y7ڿi;-:Zi>y^ ffa_A@dfEB 0r \BXћ@ 73bm \ H2&4dDQ@ = xǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ M9ʉ$¬PAjIҨ1غ֔Zdʪ]˶ψ QPOAI#b8J"x8XX^ @b 4h0y`F <Ō!]ͺװc˞M۸SB*U =w+ͻ>5kz0^zcCҧ?L $} b "YQyzI{i0@rGE4{^| &E QB Qv(,0xb@@mMo2@\X kme]L6 !I U wAYfA3)Y^!aew\&IgrD GLRМ ay 9i衈&袌6@Irţl4YdG钏" 1"ueAQ5!bkT'|)v,iz$Vkf-h*m|h\nҖ.lnlBT"HKvM-{_" lĦj8맳^0fw@= utC % )E2kzsT]pHAC4Wx(G8ˑydHz II@þRkG% ԧĦ"fNtmݹ=P#"E@((Pe*#&B⬮종7)!ie)^n!)҅ #  F!]  |@ \u^:!+)…"ie#!E !<o:.@ޗ觯.-!1DTsII n9g:cK x# t'H Zl?ȯco+#IЀ9=`@:.f]HJ`+6 #=LwH"H(H8"np+4 T c,;E~QqS#CbE,Q']|M W?LHd"4E.Ґ$')HHNE葒"@IAƔm)$)WVL %搄:! R&G}eKPbEL2ffMh$($d/Uә%1f[YdL:Q!u()\6fM9|D}%vyB=c&$ 9bPL pICCvz Hkhql&a8Hd Ipӭ $H?F 0up ̤ǹN4$p xCU `pB_tHK g3Ey"F p@Jt9ZORֳj%9GJZ<0yUq@Z~P%@7.^]mjVG-i]Qߊ%%p KdK[Z"8 I2J@$s(Q)M eEl{ 1@lAlh+ZZ =GFq PP’*|Jv".isZ(05"pf@EJ )$ᤡ,JR.5Q*mEu 2#WDH҃ %5B|L$X,Y[)6HrZN.  #X sKB +ŖftKrFזd @4lQDqb;)z"^eV$t}Xs垤GU5Ex:gYBgO{mVLd,kyx4}I@t X$J7P]G $zp~}W :~vzF^]}^wB1 ~G2)IBA0xG~# MxxsU#g5?  KV}0EIsPSc4hW' P( 3X# M!7vzbX=W{TXVxA ~Ѕ^|?ODsjRO(W$T0`Vu0uK"b7uP#kAg'/Ei7xhmhv g vƄ[Q)[(P'tQ~\qu Ayz[b).yf*(aiO5r8r8\w`D8X:V#Rz'|XxA rTs NNKLJGgI(R08'W8v| X#V| TfyE!adW#Hw(]S7 шqMzՉukr(D 8h6"s# ;bEE[!e(")Fքt[θMx:y1I9@2\:B*蘖jlOVPr9r{ft(r[I+u\qg? !&3 ;x)&f:5Ax*IGa|Vw/91V8q  V:W#w&ьU0`dI*Xg1$= YgpC)hٖYy\V>MvYxl[ mɚmiS 6X#r9F]Ǚٝbvaiэ@ru)YXByI9 { 1 i٠'H0т ҡ5Ҕј8a!gVzXjHDiIyDuVBi顱X#D:&ar Z*7'8!1$L:"x\!тВ"эY߆(zEI\"J^:r 1Z{֛w#[Q7#H5bw\7f:*dN\J=(ɬvY DRt/ɣR&N:iAAITp#Jƫɨ)Be Z:rW#nZ+j9c9H+ы"z +7(g*6hx*ipZ(*{YǺBP 0٬bкDNeMؚ:g`)f(ʨ~a:iNhb/Qj т &;@%۴Vu:)!#qGknڪIi )Z7Y 8%[ot')NNH*OP M< c{KA飥a[ѝR*#zJ(Y;{"o0rK۝Jv'A Q}: z۷b;ϩ+hi#Jߦ`{"@ ;v@4 6?`p*U>[#PUu%K˧K*ѣ[Ѹë$ag-XJw!Ao Wk~ih[#}Z_%k ,ۺ>ڶ89ܾQvC"qbW\!jc1j %pp1lMj?PGWu` DT˭zG$L)L{"vKL&##+.*ZCR:-\x%a¢z*lK*+Qۜ 1jQ@R绿tq&orw>3{w1aγKg$lN _9GR(5M 5M~`V>@?{м<|r#<9fIi uDsٗ[?0><HKƉt]v]z\kz6]؆]Ŋhwѵm0  (h{Gv,:V |=KL-xwuq\X]5,xs}-Q@.TM ^zɗ\؅% O=[G"X#èwָ{ &`y:2\L]rͷ\)(ٮPi!5qu͔arˬ~o> ExOLB]80q=>C A 4ƽ-MfW Qd=ॹc\Emb{swٮ@'^n$xߴyb۶.<ar#^.9UP{6䜎Q|>O̗~]uo'mC{<ml[MA pxfnq撜1LG =6}\єշ]؜^BYY糞^7 s' `jOk+)vOnc~,sQm%ï[|)iiH[ɾ^\M? ~ ^J$z=*]n 3}ͪH>y4d}:1??uYQMt$At2~0tM)M OԱN?(;Ѵ""1/]>|`dNO+{>x?ʊDgX= s`ǎsN/{{ ؟b=ש,nF?m-Kp>y..vEnNU҃N.@`W 4 Pa :tP}Hb l-]ҏCN=}TPEES  ,NT5~J,P=GG`@=FÀM66Ȋު NzUkUI&AP09_:>`fB8de.T77ncXWcy6-ɵ `ddMNB I+,I u"iݽ><%)?@䇏~$~)8 |0* 6z@$7.h&R(9jRhh?0"&0A)z)$xD['*'h shDi6|TDh,(G #J#)q #bR*SyEKބ3N9|s(S0ijOHzNlHAɇhJ ' T$HrOѠzhS ҫ$1!'T,4DlQLm*UX];;aPaԃTA QGw=l ŊMۨ:(Q"D7]u&c%? ` p )aLٝ(q%p#%+p$p'%֕+ M |XȝZ8VqbY+QFN+[(UԶxJshҡz󡉿aliީ1ŨW1E;mFJ>ئu ȇnꭞ8.a%YW<FqW~rQԸ{X93ꐢ&0K 46%Ybԯq2>gR$D&jIp$5搩L'bN' \R*:D ;_Hq¨ >Dx%I`a,)`EXx5Ї?D;!n޺rp1N 9jf{B.gHn۬JsaS46DxR@S>19b萍qNaW"Ihⅈ{a5Ȃy lJ뀸INvr#PRK  )ׯX*.<@O('6< mIY!#3dCC 2sY`@'Q^B; 蚍B$ :"5 ;AY B!p' b;jjNzOO6ԡ5 $ I$YQk  P2'gC)c>DYj@^"R hwI.v\4eJD=%4w)o&uiw$ Z-w $#IdcS0H\ )*Ѓqk )+J):@ ;!Xƪ<>O8Fz z}c ?5 ?N4J1w9КĦ_Fz&I6E lH Ń D>  D2j5j2)+mDXWzPR(DVD Pד/%I*޹ mA ܸQ"79HOEa@!g15x4[X! qCL|3u)bw&(%% eMpQE;s>6Mjɠhr=.HM`@g4AAp H0M۔oȽ>/>f?]&)NN!Ys7F{ܓ dMԜK3NDKnJjv +)FP}MY/Bl³"CP@0^ eTH.j!^5kq75jb[-c?$fvAZg4 `me{>yHo?ou\p 0 b] B0 p@QfXJVi1AP-3yȄ#g9B?I#sm Dk.H;UzD.L7,CHcCND=SzC&QNإ#APY$){r7^(ПHʛCo* PQ]ő^珋(qFzw / wڠ'{Zf#Tv|_Pr{E@DJhhCz IpB|MsZ*)r3vF ;wBC.W)uZseػ{2;;4( 95:Кī؈BAj a:i??k{l eaQA5;kAEOSlN/}]e98QX98ǿ3Xϣk-*h+|>-j$ ?ޫK $N J6r@!s=Mj|7`ȜhPhՃ@.5 YHD+F TPܤfB\YUW s0D\ Xi0?``eaMIԸn$"0k&XOX:IMS ׆ԌLW8Y<)_g,zMΕ Э71@nTN.mSYV Ie/PG%%^\ \4O=?ӥbT1}1xq1͓:l C54B[̬ϭOA<M߶S mQZh%;A(M\le DB[ScטJ0)c*.4W-ٹbQŰ |I1%1#U_57y#taeiSoRaxW`@ٝ0X`,OۀmZ ˂KLZuR_c`mdFA>P>`B}U.J`VYReCS܍[Lvԏ#SX$+*boU-+Ceu 1VL#;HGኣꟾꬾꭂ06${鉓j5)1y^lVv>1xcpqY9B Q$H1%PLuCF߼h$ڵc!@PŧfVhPitb勁^)*"K9?i6Omevo(p&JX xo5w -sP # pM:@\ Tݼn懖X#m~k򝕭do@G-8 p3qX]Nq5pn5wzl嘩1}bW-x,ªj9I:EZŨ#-9l9c9JJr9:$s.RWOsK9ںs1Wb-:s.r`2t._ pf/?HP)u9nm<d 7ɼԫv^iX`qv^W9v_^w_G,$j0{nu$(5m^ ]H4ӾQh)2p03M-n}bh6ђu+.-Jdyh?G,4SÅzI\Wz>0 AC&ڈ@vP">sꦟ|E5J nt1{WO{{GZsQ쩸"-GCv8AAT]~Ѹ#VaA 9$Ey$I*AP1"QJ9F62d!YjeD0.$#QPr&h9Pui&q9'uy+f'Bz(yy4zy(E-j)za)D(*(X u*. @BTGEH_CZ+ ;,źm<,\k2Tǭ mcPm(r;.{yb;aW;. LMJ/^,F8+/|0[Q&\| 0C|1a_1[3@)`Q 2-g9G1]c|393RL eAPyC;4QK=5UC3,IzAkkuDR,5I1Gc2$@d=7u}7b}ߝ}8+83"/EBυ8{9衋nWsu~jң>;~ť{L/?PC<+< '`@ΐ `@3?>>*Rib쯟:~>??(< 2| #( R 3 r C(&!(!F<"%2N|"()RV"-r^"(1f<#Ө5n|#(9ұv#=~# )A<$"E2|$$#)IR$&3Mr$(C)Q<%*SU|%,c)YҲ%.s]򲗾%0)a<&2e2|&4)iRּ&6mr&8)q<':өu|'<)yҳ'>}'@*Ё=(BЅ2}(D#*щR(F3эr(HC*>z&5)GJzR<.#. Sa#1jҝ򔍨N1@?4C(CN pzl$8jÀjO*XsT#ciY7x t:JֹRFSnj+CIzRR#X2#*zAFHeqzM!Bh IgqS)%Lhg:FLa^Ccaa, d@;Y(j6rg.,0!>p/dD2%+ d!X/$ c4gKgӹTA!-o]h"ZRm4F2h.â5@kpӇUA -iPz#]imֹVh˔~)ʐiB2emx⬙]k_v fLUm Zmcd7Dd0^ x oI{ 53rpLu6ƥ)a#in ,Z]ȼ31@δ&Qw{ 5A2;SDC3EA[F^r8UyYnc w;^wߜq9c<8ؕi ciu_c@yy+튵{Uoi@{Qg^;%t/KZ9;ވgjyKF K+JhN>>+YUϭ"|s` 9/`|qѮH D(y`^wC `ӟF#r?.ko)N@apAALLAV[5{fΔ[ L YJjDTɘ'ءIwuʔTDH<ҽ!F!`@f( ˭@TĞTbAD^@LYGXIZF|a6@0A<ߍj[DʔFDnAt D]\N.b%! D%DTFaD"Nݠ+L}[Z9"D'a"a Թ]A0"B+NAL1Lq@D$R"6Flc.)BDz͔ #TTX'p'L!F,c=V`FȢLH""1ALAD:b4B5bD#AL#c<#N!b^c6*BEaM`'B#/A#E*#>f7@#IBΔLMc6!%D rMޝGi)/XR?rFέ$UKdLn]eVV]NND^q`0TSe@L$[*[BD\2d 2ZbU*D]\WW X~(!`hea&%N-%`e.]^eOfU+@!f(!o!ajdA|dZ F&A0"evDk[ffcXuB%Dd`dppT`j%Ny@ 'z'z Yll!YPw$b'STBiVL]^gA\y@tDg^@FD(urD[^j^xne#J+>^@^3v`fj&Y'r݅scVz(N(H̛ Dy)%YLuFi]L`jļ Yb_ ѣA8@~>o꤀Ĕ9 )^R_jF̩tԭ!~&H@u֠)\i$q:$.dLF~aܕ_)FTF*Al)Huɑ\b]^*IԦe%*j`dg>MŪf6jNk"*z$_`뵅Z("p\r(I))\ +Le@+D 񪷂O>1֧kF,,+rAL!(!`R+HjTZh5'J^FleF,lFxjBlGxɘ,lr, ifmժ.)uhReNپ*mg.,H -)h=*jVjޑq&cTb[PGA GaA-F`.jUuz!eFޮ(zFpBadQFLV)*N}" ZGvFHo:T-[\J-rNjNnF) poM/B6A jD$"p G(B%0{qA'c.opepU} !"d!B0 ^v:0S0&rA @!d/@kFgkNEsBXĎAXKX$ocOEAĺ{ (@FCăD\{{+<;+CFJ5/E4Ad;,@Ayi7C UqG{ED`~K 7B`=|R=gE˄D߰{P@|U <8Z@;Oû9hZR˄Wzƃz/{<@p5  t`aE$f4A$1AȐ,0aŏ+3T8IH-H gO?:hQG&UiSOF:jUWfպkW_;lٟ2*HrR(S3Mu4 ``A(͘g~bxA[*%r4` z8FT)χz`bh%e6cѥM?ěQ/_=aϦ]ۃ%/wҏuh7D*!+|Lq@S=D̘pλӈ;4;:0P 9A QI,QLQš(ŊȨtr5WHsQ$`‹2(( @8N :J$ zQ4b q`x`GZDg|˃)GvQΠ4HHbH8 :+ +K9R  ڃ+)H2 JJ5LOR$UAXm/j" W,cMVemgVڲpB['4O UbXl9H 7AxRsʨہ5O0`>˲o ( L=Z^j܊Q(te'w m(_.-SK), μҎ}(2"TV܇^8fu-")a%"vگ[.N[m|M2UT,z5zjuf_H欁ݪmX'GC3x{pW֐r}jȊb}#{4Q L-5&݉ȃ}Hs=[*iv7ӵ>k ׎^驯^d˨!3#{e=Q"[{po\".G) ^_g'>/q?A_Gg04 Ogt )Af-?{H%vALIM=aAl"*(lA>$ g2OGZ% ^m+b$VHب4kYvЮ{N DuL)Ef)K$ \Mi7(|l5*dHK/[V- ?qBّo jCtLbNOz3 ,~`Ϋ؀d*(P=y8"n[2'`I75b E8nۑ{TGn4T1[:uJGAUwϝun Uѷzxoh@#Ӳ;B `U=Cs~rB,;Dl-,^=UpmU/2TwJ' O'5x=>(CjXCWdP5>[`~~Ho'گB  zfJ **k%rn DozB^G(,$jPVBm@B'&+`C6RN2h*0}5(M"WeA:$'j!0#$l`nI*p :oţN 5"  oa$b0pX&tk*t0(p'(0[r $؞p6XV  9Z"Wb-80LK4jpc՞vP Cp%pܯxFQ#j ¼pbq1+ m%'34}l42-0S39(SB:74QT55yS6m6m(23s3[2 70;F S@$}3zHTvd5O T!J4Ss 4N>-?@?]!C{B%9?D3@R2]Ea4FetFit+x8dFyG}G4H_q4t4ItII @>p-I4KtKK~#XK4MtMٴMI NtNNN4OtOOO5PuP P P5QuQQQ!5R%uR)R-R15S5uS9S=SA5TEuTITMTQ5UUuUYU]Ua5VeuViVmVq5WuuWyW}W5XuXXX5YuYYY5ZuZZZp [[5\ #N\5]u]%*T tzu^Ou_]_<ei_[(‰jBNa!6bժfҕD,ga ^$cA6dϊc̊bacVd]ea6(!5P6c {X&6f6h*56Erv(T6xi ~vhjc1LVlKkkKЎbilcvmٶm*bVf(m띎dn v~ q( V!ж' .(p'F W8wGwa$bjyeromItD**5\uavu;R,*@`bw6buA,ct I29"JQnu -x,A_t|jV#h8B}5wub4Wf" |`yC#$ns 7${v(P75XGa@"i"/um+:AxB!b'Bd~b.!(.$[V"h*X(P6xWco6`H,$`{2+ x@jX)^.icH+{B "c(QpE?4!=a55hjTi`o*Y= k*L77wB x/Tc! @$b;@$bAPr68ψ?(6υqTi-$ʤӶ8D+ +vyEMԤNtQpZ`V'eP UM nIUxQGg(rRݘwB(1b"g,sb}Rb%64Re]de((J i\QB"EzA&Tw*LzbT+>Ȗ֐s4v+D#,'Fwә:IuLȚcȩs"{Sƴ,t6l =rgS( C*:Ä. *#QpwZ+$>2:̰z:%{Rn,ڥA²Qz~a*8Hثo:,;${{ R'{i;QC$aޕ*6{M]Je4ZQbEl$ cۭkOC/x."c +`!M[`[BR븺# NW# X1y+{*Yo8L *BݞOÆʿM ?}BDITZ>/4Dͳs]X>U?FQesQZ~eX HpU?m/XSM? 3bLo_\_ wqՆY a_?ߡK]>`?• <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[~ ;ٴk۾;ݼ{ <ċ?<̛;=ԫ[=ܻ{>˛?>ۻ?ۿ?`H`` .`>aNHa^ana~b"Hb&b*b.c2Hc6ވc:c>dBIdFdJ.dN> eRNIeV^eZne^~ fbIfffjfn grIgvމgzg~ hJhh.h> iNJi^ini~ jJjjj kJkފkk lKll.l> mNKm^mnm~ nKn枋nn oKoދoo pLpp /p? qOLq_qoq r"Lr&r*r. s2Ls6ߌs:s> tBMtFtJ/tN? uROMuV_uZou^ vbMvfvjvn wrMwvߍwzw~ xNxx/x?yONy_yoyz袏Nz馟zꪯz뮿{N{ߎ{{|O||/|?}OO}_}o}~O~I8@MBA @0GS ~0?P l8A ~ DTAh,"R(H7O~ !0 ,H$  @`‡,ډ@(EQ GTo'LPă0@4 ]Q <<H1 ib~PHi]D0!_ % J/<`B1%M)!o!s@"[K+Rt$@u̥1JeBRcJI_GT즒 đolEoHbEp!j$։ St9J,h2)ȂdS! 8 $ -=bE1Ft6"@?,䗞IeDR Rzt.#[o\&M"!nAOu%JG 2e{dUGRq&$0X̫C6 +)>ԡ h:ָbBPɖNqrk8υz Rt($ᔊlGjvg? Њv-iOԪvmk_ vmovo w-q/!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++333;;;DDDLLLTTT[[[dddkkksss{{{29$6!=)A-M;F3P=UC[ITBeTjZn^`Otezlxi>6B:E>KDKDPISL[TXRd]jdkermytvq}x}׃u؉|LN!U*[3^5P$b;hBnJkFqNzX`aiizqڍݕܕߜࠖ⦜䭤洬尧鼴꿸֕ǝȟɡ̦ΩѮӲټָڿüīɮ̦ƱͳϷѻôɼôW H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ L}ҜWLPkC'\4X37$.\˙:5 r:pBsd$Rr!9R;5ˑFa$kT0D,|["᠄5njMJ[llu"4H*HHrĿ>Z_ԷITF2P D %0 rdC 8B5\,2gG`b0L$u1G &lvY(ņO1FKx )i"T8jbW, b2Y7N~ȜM'=C9]BT(6<<=S>bR!D(PEz0zNLRL3TLk?gIgytUJGO9ڣJ%E3Q }!lt)7%]O)r[+GZX "\eܹ"l&e#eUaKL3хUdl=p~*oʉj$m6@ RR@LHSTB8}H7S]uniJꦧR$-O$!)8v+Y!\V8)cYy,k=bL`}akh@1!@nUASV aw"ޕ[kBss,nK`5xVi#`F%uWS*,EoS^ 1ygؠ)I+&Mu?̃ZƽH+渡)-#)TvwŇAނhXLQt æy2RKdQ,\qflyE`HKR3(.[ X.A,;R(%$XTRtOYg$Sup=[! qWP-jz"U(}R$̺' NKWbdM)T#,@kN%*$POtPĦbD»{ޤaMt]/`aaMx=öCfHbӝP,Ud96R,!6HWm h[ݠO#ջ&4aMfxg^m(2 'PU2qe)Q./HKۤGJ ɛlbsr]2:FGD T3DҥCٕI gn {R lytåj?/|'A_PcR w&)jP f빵DT)x=ܴ_p}HF&m t?|\6Y}j*$("y^%X_QWD+#Q/r_oґGꟑ54&6fTk |  o}a~ Q }@6Q }P'?7Xy o'@yh@ xttA}bbp}J&|@"ne0gL 1 @ PqLJbwtaူ1zqK1pVkg9%G(-([u mH }qwg"`Zv2(Em'<Q*R#! ~r:CXt$8{SR =%8zKAvv*ybK+R% [.^`~ (S ᅞ1~!^Oq!Hi`QN=PXXX l$}0c[È/cYsq'3'rb}q @9w{]5h`Mtqss(}-Yw!N *p# HJhHp*N( ?|풊'a!" (=9(y{px4[f#58؄b2 2#W1}lh9v'&} 5Qq pi (t vs ,+3T!Rxx6(D QV)H1}Q:H'LRhJG$XĹ5FR02J)#)q@)!Fڨ_2`Um&ׄZZgápI CsW^{0Rp@ɓڙ4#QGyQ pi!4)'&mGIF4lhy}p'Uj **s;u-Q<$^Z)P5ɣ  T !٣?J'@bM|+*b2JhqىIkY ]|J9!%Q` Z6Sp0sө,z͙#`HXQa*)&\f#JuXa4ZK*3w+b5KG)6 TҠwRHaaaF&zp'Z.$(~XvNui' ֊(y{&!jQ M:$]& +9nR!$ ľX{ƅ̴5HXIbC}2j:ll-uO;j+Lѯ&tnbA"SIH+;e3Ѓ}̽R+%vsz awk>2ֻ̫-$I0יp80.,L|Q|}c$q,#q> ZmYI@԰ג֝ۂ}c}ĸ+Mժ920֟q,2m(cswغf)U0&LA@͓ܲbkF3- 5 ތ|c(ި q  se2M`,&|r։K+tFm;1_ +ĺ@x!)A1EM (3nY,]HSts]!<iy}0'<ൊt'JA#5U.JT:UYY( ?Rt޻ oXbMxuR*{ ZmN&ظ*`CYZ(V<Q<9+S9~2v"q/gz}ޱ\vo0m5^m> Ǻ>?!cv9.pgYH\KrZĭ0- j^>d 19B\`u"(t+BB5t F}p^*O3ZIy-%kN$*4" N' sߣMJ3HM&&J ×i.uU_ນo,QmްjbR-N0E9;n"7=na9DX} νQjzOQ؄Y4%HmG 7JPe@ XP:צmj0"&$PɌTX)ҷƥb/8c78bI:^ar.#u!JWZ(F+ܣ@㊞ŨNJla:w *PK ՝(gh݊xTt~m'I ^.$УUh<4s.k1*ЎW89AWw2\W {$^f ذ*B(/9jb,$2^u)=vgvg׹eۚ#M1Za>N{4mʼRNhdE)֌&3 bN? 煢zg:ZVA&A*xo,QD {Hэ{Ei3F$EP;܇$cҜ8`!LSH:(/'3WU0 ,|Q,'5%b8D"шqCXg1BSfpiI, $#ȗ2N!IF#cD=&P-r^^G((HUktL7?č>{V%D "l@jcl l&·Ū0qN# yJTVD$nBP^oLf6ә )Rtq%$*I$ ͈!y6fk?&s&U8F%]nv]ꉶlm*6!$@Ւ_$Gj V$Q}C*OEdBFJ7.R B[$=Nºd=awR(%Oxziwun-Va|qmw]^SRo-Lf94U0EFLX"SS]*WWr^bL"gƷiuۦ@8!%̔:3} ](&ѻ RĜC71j^Si@j29.IuHxuZ&x_%k ̅ضT'+cG[+b?ݕԊ΢ؚd%*p?hwըKYzI̎;Yv= sG-,B3"y؄ ºy_ZQݐc[SXD1C8aa  8+B#F}L.6#!0 + rnA}'xKiVDKv|% >řiz>oո# LjqHw$k2>dnj"!?"ykaD POl($(W2 K ^~W!4fSd wQ+]RŰ_W"o95 H77y5୅?PI"![@*jY9(Њ]k@`14la; AH@TKC~):3ˈHaZ?dh٫ T$6\]$T Ut_,c;ƅ%'q"E0#=DKqć࿁.K!@DPAT#E[+r<T<-? I!GhƁ92;~C ܫ`d{4!HH@<*@?$1(D[Y=wW2$LDŽۊ{:iJC lsśɜT:rùư@_3g-T@;UQ=`Ɂ J+m܉ó0#=$A%yJ; ʌك%FQ%Erj b+ߙ#1c$8ǁ㋴hʅHUׄ.3$I,*:dɐɂ9BĹ.#l>xJ$DPF{2URȔ4BBB0˄PXGhSJFuG+r${ Աܯ>}jHPM# uGيFiSlXՋ)xKDl=lvUN<=/F*8xÌAT>M4HےR8TJRU_cKȸ8P!]-OHyW<0 ]B(!;'|9 IժhM $c|${<ՅPxgM؂ouCY뫽VFBRKK8T~1# MؐsV}1NNYk6|; nE~ױ%۲m Iă0|5#A ȬkҹY8w:Ǫ]3^CCQ9RK"PϹ(W8Rָ܇&EXJݍ)U]ܘA0]^U{](jň{R8'Z&= mQܜ>4^ۤ=J2W]3R ;\7m] DɌlU$8SMk WE۹]|4XԣCzʘнHfMť5*B8\n4ڄ?Sݑ t PMTDtV ɌK"u*-|yJ5)[@[klL- FM`E٣C@o9QX, {Ua\`K_h7ɕȌUؽ ߍ8MOR%$=& Ld ŸFTI`!eA># ޕ8%'DZ&u۹ G=0a F ҭuuB. j+̈́ s]gmcۻV(qKݶU51 ^̋yuff6k݁壧@ʏp Ҥܟx;N'AV劶;߂hKTU8Qу 'HM٣uU>`%h(p%[`D)HX`! ԝCZiڇL)w[ݧPd(U= F݊p8_`_P]1`9آݑ[sҮۊn"\qd\W<󿏞SVWV VF71/ĻR(Pmh),0&܈F`l/I;cPfdiߵ p݉|^&C p3/ᚤcD{l * V}\fྈ\iJg^??fZx !W/)r+;-%(h[kptURHO[0-SmۍN*MEȄYnzo7Wpc6\Q(/E>+×5"8cWsc~YAr*Yw%-n1P`Գ`_А/w3 tX/Nf5y!=hn fمfQy4R.njp}q8 N뢝vʭf/G鲕Ct [^tennhZ1D\-8HR#p<}?lطL&gOBm,Т$qj0xyH^:f^ٰv7d18yUuWCZ|?J dVw*aisk..yAh\Lr@&%,!yψK0~6YPېME6k4MVVT~1 Ѡ' TkOٱS< &ǽόcoh{iu׏nBpH>gƭZЁyEJLa}:iӎ%@jX0禍v@l> `1dVY q?,H .H`!Ĉ x FNAFIr͸%Sx.|04G)! 4eTmnS!:!1 Q-!I|̥V4I!Qs9jAAcH6mǵIK$1GQ\|- 4WYr5AQVS+4fK⑔}<ww+ADž{ADzTTp~Gp _<:#ʈ$Ű'.*H)je+I&򲗾%0)k[gcND9ĿR&j^pM0"NGЬ\ \dl"IHHA Qh;G˜quM"'"ɂ1.-=bFaؓVȚE +9ʎ_"ʅHr'ABd$631vh.#5ttxjSH3Na 0ԥ2,'MR]jfz Ze,ZĄ[ɻ$Pg5"St9Ig#(D*¿h.D }`\HH6 tҨq,(JQ[ObR#rh)=6 ya#Rp.!BJS(sXȨ&e2LHcTdpw#u*vrI#nDڦl.w)K#,=Vz SIK"seG{9RWU#A$F(B% Ez*D I=#@pz 7"4Bl v$jZ6f|%BƜ8W!=-IYx<]E½HWQޑ<1큝 @5n {fzM,ɻLEȅe΅ɲG=ٝz0xG\?6]Bg҇ t? IV̢.-Bi*J䚛ml}j8 x@gTD.X 'i4D [zNb߀b7 iAdkI)-a~ˬ2kDZ52ZX Z߬3L58 0Y!h HB \?@2M uЙm#[B $AJe[PAZB@𩜏є}MI[,TyF ɄʬE DDXIz=M,4]  DaTU^!JB T]i(a(^AZdT\$)OTLrIL;P-T!pKF 5UWq@y`-A%_\J FM\a% 2aW"YbAء&De0#1cpD@Aq LA`PRMDfl x MJBA D7Ē^WY yaDX*(":'[%ijbE f`4cM1 8Z"B PGB$`*ՠux?"6J$Kb$iq@@fD]ߝ^L$R6:R@c!U#ڄ,#Dm$IPcgH߮,fLD@OB dN-Abe UDRg[p"D%iYMRE)\t MH:*T) Wh1ES66/G˹$gvg^%H`LTE8u5[ IBRbJ[Z-fT4)%Das#].NVUU*D-flBo6sMD0k.I@aD#SԣD$Fg㰒y~ `EjFha `>Mn8Q-cS'qoX(hgN(VSBV 4:fbbfc4?|e\]@jȆڬѧkꁈ%@T *LhgAuNm!Mg%[f] o"}A-HȥUa(ggۖIHBEL 6igPb`&q,@ e5vI}F pDZ(VVF 6$Am 8-@L$% `b.@V$ f @pr%{О)LGXDUZgȜkh*E-]f&,*(iRAv[̌*%~te+h5` ij$$$ArM$Af5>1@BkS$!fD)$$!#H(L%(%l,-! @0DъAt,hHH8 ALծ%A<4Hm6%PARl@L+D$AREdDRN@AANAlI<@mPAH<38(4,*rLA> BRAF&N(/,V`nmrLNk:Ún%HΪ/i/07Ќ=I?$L0b0?` v0 0 wpABK Чx00Y)OpG|1\,7?1Gqhv(JQb1OI率`o10wڄ1gbh-11,D 1!!r0R>&"?2$ F%_2&gr DM)&(/(D(*2+ʽ r+2-vղ.2/2MTfO213(VG1/337dǬ]3W5D5o37w nyz9r(3;; #8'4c =c2D&g=?mD !4BG/OD]B?4DGt }4*Dgt,kH4ICH&U4Kc,I4DiK״Mߴՠe1NtLQ5R7J5'5T+pUpV G5VguM#LLi5XlQ@tBqXZ{+%\#*^ M\^;s.R^`מrUAB`/6c2UqcOMAQfov&OD$]5g6w]4=:jv_l;L֤`O϶nv3apͽj7r'7{dO+7tS*BF7vg{vDTbjxO ׹@򉷸3NMP|ߨG@K  $<{8;څ7ƻͯM9?swDf:w3ImdxG8EeFuNDjy#ӹnŌC7zU'D9[8ّP7:?yҸFWzEezk:{wz7elBиg3ĵwϺ.zwx˪ ߧ8ٱ_KM/xXRcN7Na7$<~7{P;w)_[8bNǻ;IwL;NB0:|;#<7{O*?gr }! ړ#q}n~} >>iT ~71~ٳ>GA3MP[h|  g?wq}"} xc(B = ?@8`A&TaC!F8bE1fԸcGA9@E"PTdJ+K䒦K11qd8?%hQG&UiSOF:jUWfպkW_C9fXdcyL"oK3Owջo_a |PD=VWF<.[~zv0Է#Δ;m7z_{fϾ[@ MD8܏<}6vSw mKb1sA ?r&O+ Hb Р` ǯXJ!P}ْ 5*P%mA H0 !&P*/$IPb,i낤X jpm"o:-x sB0 a  B9 C Ӵ!Pټ/0 p`Jb 9  A-b0!1%O.) m 9'1UqE `2)6 --BY1qA` ``'j!pt1/x1|1q dq fq)q!Ҧ/01+Q @q iڔ pG 1!r!@ J!!  ,R"`~ !# b  %`XR ^"N'C 4#@ `@)q`>2X2 b)2',b T2*β@/"q/@B bT2$ؒ!1EJ" 2} 31& $&'" '3` :" Bh#@%Q!3Nn6//1" S*+ P .!8(W`3D37>,%b=Q5/S3!֓3s >sA8>b @ S `? <sDIԝJA#R2)rz$6q?935rF:#Cmr!VA^3;F$-bNF!@ .٬ $tZ!dS3BGHs Fqt!8t=!4HVmM"3E"`H3 I! M"M9G Is 61B 7atJKTM5 S @2W)dVPM.I V8U%H .ARaT!`V9B`$P @NS3K@u?I+ [QSb&%A]o-P"mV F!چU!Zٸ Zu \XZTOU"#@!HdM6MdY6eEB+*@]WA]kռ4 '8ck g `1B96!h !}kBBu|خ7B Hػ Z+V^q ;! ^~h!Nw "3R!ˁ+ >C"f^E $QH 4"Ct?{sS3A jx2u[ E! AӘb]W'8! 1Y3}!ub1?4HrYz[.HH**ĉ+ZF}.NTqHFrrE'$i22t3hP$']d x68DG5$p2G!x'^ K!!z쓕ʐ7/9@E!亱G!%O5pE3䟋N3?'^>:լ[ٴkO-hC |ċ? iN%EiniъAq`]mO'xZ_tYT뭶zyYgA,֫:EIIJgjDZ*O9dV" H,p@ l&*U+$ p@zhJ;Yh"c*O+q$p,$`E$0\B H@ ,"0T!4xj YEp*(>^Qo7!Ivq/\%*8Q@ `F @`?@ch(IcEBJdeHCP(HX0~$)FK"c8 N>crY: p !v9X ȜA*`%+Sb*`B^Ɂ L @Te4Ȁ  l@ (;K@$l/"WQKhi=,XG A qpѡ^, f pq1q(rsq#_L f!Lpfr'Ѐ9Ʊyo}Z{Ǚj:>iVdzR\ [{`&q vdJ}(|E>Ȫ\Jow}H5jRq  d Gj*j,ʂ 9Ov[3`\p,.*Aa4mSIÄ9S*R0c9Ru*q8=65a*n <6mz6ȅ_h bɧpي1<13A[z?޲yxwxAqe@e.wJPSCPqFTPIxTJI81Uv D9{;6K+{XDYS+z FH(V@ BziVCzAf =Ebb!a9:Qp)*ˡҁP`aK;, bX*qA ˣ"kRSS ˽lpFNHn!km!3>!pDHT 4{Ιlc^L^ZS#UAl-ܴrܼ^]g;~]PI?}`%[ !"ZSφv!Bi0W~ |`?D|ZNEV}XO/^nih!Q|[Z]2q'Nz~qL!>A'gS./te{L@CGtG;\a>o"fk==x/w~uorkc\rZX@zуy'rި{?!dB&}F3cHߊ!Nz1e$XA .dCP"8HP E\"$Ab(%JBXSE PRH@2'B=ISI( ޼H%HetJԫrOɐJ<³&1H۷/]VU&[!jEqMry ,5Ģg*k(1iTfpC V,;h!Bǭ~x!qɑGfXˮ^UDQǻ $p0%(`={D#$!0j1J@ BRb*O!BC!$#$ $" i(ڢ.>BJ(ZZ, bТ¢r,: XH*X.TNɨTsB|Ԅ?Jh@CxːTlF.uUخk2_Q 3-ZkS8SU<:ƒv>Eeʥ'c5S ?ZɃ*`ո3|o-(^3WvW~.Xņ%XŎt bga+[UL4 O \ĝA2O#&xyH($ CѕB{) T03جc &R^ IEV!1 T C\JĐEi8Av5(!B ds q R#!?KD($D HYX@Hf(Dd UDiA0c98,{̒x$lVb:5DN5N)R|TuFAb9" rÆQnzK2 4S 3!~WIxg K¼8o  ( Ee(r>q&4 Mh/1ch`MP6 Ib֩ \@APQ*DA-!J:K!T/IH `zs$һ Y!EP-B32.j@5%V* BL!ؓNj!NeB"p XИ^ѓNF#ɖ9,J@S&!aRc2~T"9"ѧ-a$XD)0q6ͤE@k৹iCU<,j*Aځ d/9Uq #H+6|66"mH@R,I8De&'j Td*cM` T As_M ׁ7Zak0A\Q\h==2Ц&,paPeS+ڐYd}J5,@.6/9!8_["T)jZ݅HRHI67 D!8ifMX7gTykB⪐@".H?qH3t%בY)U)QHI x4]jENG’@f9Mlrm GrՆoi} [ .| ) w^H+܁8c jLIwE?~x"gG{Ti7 Ӎ HFyB p$0Bi8 L>' !1('p* f.T!SHr^ 0m=i,t (\)$;]u$10(ͬ }^=*?1%@4rUt!rt4Y4 IE[ Q1L-LW)P!FȡB3{uQJUll̹ HȢ8Ȯ"NSdoKhM]+'?pm?=j⹝&E>xW>C<_ _U!R!~>@*;q ("C# > () Z1:@2~л跼R)cu+2*BXK3L:#?3<JK #;*A*lCCR <跁4KH`p$٢-KfDV"*N3L5Aƭ3JüZd-T]4$dD,?4DYC5kd!٬lѤڋ o4RHP r4@LG{w$(.عP@[t~TLkBxBH*9{ x:lƒt|5 P \??JXKCR8̵PЍd$#hI#4:pΈHk# <2X5#*I!$ :UG;]<=">e a T0AEBMҿSA:ɡ7 QPRJE@[ z=ӵTL$@T؃> Tʰ 8c'0pBG\{K0΁PHP@M S O(,O WsτVŘֆV '0Ĩ&iu=WN+t-pOd=VvL _%}T;͑]!(*]lͯ𿬔=hQRQS:Eͼ&[]"#$-(-ʠ>] -,%4҆0> =8YG=[BX)(@‹->*`RE62#(ۈ[*p_kdE1UxE==_ہZ ۅP={Rz 0eHL޼A&>yLnDqD@oJqa[Q^a IKG]3aXU*̲I܅`y_id_F3#:b-sC[_N?` D"c JoCc(9Œޅp$Nd3>&b0K>%d"KdNdIN.exS }DWTNXe6aX℀ e+ PrdvGdvPԝAKfVPi<df$hf:ҨQ*>i.>}ffMfNUxSw{E}(#xUrX腘jv~.hVgd&ʹ r4p fU?LFd~cSnAYehexIX:NN e+*g$V?@!Z>jI;уd(H_Ճ$XZ*8kQkWۃ$p#\eZ "8k l`V lh%\ŕ֩nV6maÖ nn5 0my٦pmfm8fvSd.nVa=,^AjNG˞.ҎnRn1d^*oN^Ln(!.P&Hm[6mG׆W6Fp?[Pp   NsqmqbI>qWqFmqqqq@n_Ǘ"r!r"/r#?r$OpTr``(r*r+r,r-:H/s3?s4Os5_s6oer7n(ss;sro7sّp??tDOtE_tFoRs 󣵈'wtLtMtNtO0N5/tTOuU_uVox$k^ugvhvivu k-RΤvovpwq5Q%sl&wwwxwywvsosB;Gyww3>40xoxx'r^K@X^sƒQRxxyoi[*n^)w3gyyyyyyyyyzz/z?zOz_zozzzzzzzzzz{{/{?{O{_{o{{{{{{{{{{||/|?|O|_|o||ȏ|ɟ|ʯ|˿|||||}}/}?}O}_}o}}؏}ٟ}گ}ۿ}}}}}~~/~?~O~_~o~~~~~3~~~~em%/1Qx@yT~(Pկ0` AZp!ÆP(Ê %Fcq#ǎ9#ɒ&OLr%˖._Œ)s&͚6o̩s'Ϟ> *t(ѢF"Mt)ӦNBzO% u)*تUT>8y)dڨ!G,GJvͫw/߾~,x0†#NxS=UI*+@Lފ=[e+->.Hx5֮_Î-{6ڶoέ{OzJ ~[Np1=DyX" 2ؠ٥7pIV$GBL!b%bG[1~0E1փ;أ?CGG&E1UHX$ fG\GE{U.J6&I3PcS74Ed{,Yw♧{9p'cM>YhE DgUq)(&SlH]'ڪVI|yUArTiH`:2VAp+۬R[b_ wպQ(GDҥeUu:ڲ5I ׸~\rK[$Z)Z of^zT1ݿ \' T;P3]'OvsRwow#\G#RtP/7YAԀV oV L!) NkBM !L ! @HKPYbc@!kwv܋3޸㏣ 70ͽ S({!qlQHLhg/)>I>;J+h0q %GJ)iA>CSmHXs$ @ @=@ Gpo, +MX%I$;*v=o0@(nuLDJH,o&_>YF8H :#{xfV/J\"( {xAAaJPIQx|;I`sb.8XD  J2$ bM"tC[ BPB?Q+I#G`g$bK0`ϨĈUcUkb1 h[2N]f(Q1 3əRH@'JGHoC# 'XIx K殕k[,b&卭Ms =R-AjAif%`r50S!aLtiE ECG *Pԡ(G\yJUDp7l@r QdMDp)Kb6rD+"r(ё-Z{j{33'5X#53DݨDV#m}ѻ5dW$%& @)X:Vf)7bRqB;Bp ǘՙi,!MU)x$YjGޒ!Y@n`fƀlrʲX4aX"DGKW5ݮv*G+PRg:Ї=(2 2#PSxa1%ӝ I+|&[q8@EҪӖ,9(5U|n]Kn*^A |21 ۴/R.3QE{3ds*eH˙R7$(낎TW.הb!!CUMd z< dSC4 ~TH<^Ji\8}P5CWߨUɸm"H TT' tUB`!oHFI-q]IX *  V޸I(RA8!G4 ⭠y_YK4@\:1ADC," ViE9JH>aI@aᗉtAG"]"Ot$B.b a0 lE![eqѷ͜IlCԨKH}U M]XApCh̝" DIbI 2D)( C^pp C9D*VDHav]uBG[%$Ot"0cEZb#)G^HiaGLc#(v_?Z`} !LiDZ5b4<-BcH"IZ|nbJFޡ%!%JCQHjWՖmUVCU#|0X2]  ACr"8 `CY2' 0)' N  DC_tf%"4XYZ[nD"% @ %Ic 8A%_%` &a&b*E 'edCqDG#ItKLL%_Al"C8dIG,MtcxBT`CP"'IvXѡB@G4q$__dE HWtWU%| | ^ D[Et"#޵DaEؔթGQZuF~HnZK~H:{FtQC\`揊@ p&*ꬢ-'@C묾 đjʪJWn*,W."+Ƭl:m.=z` I얔XBk\|j1٢6@ڢębi*(ծ+:kEkGR,I$ͅ.n:DU)Blm c.!tDD,[!C.tŀ^eU^!] Ā4A VhCn:A[*(t [͢.neZE-5eGrbvX|ע\{XGWդN.JYQZ=--KNJz |>.*Dֹ/l*DJ rR%H tONx熮."'AC|xB%ArnُF`L|p2D'2Dt#ভp tb hBAh@ AH U* &^oc/[A,oo 6硅dtD6ĺ۪ٗ;J0KD#J&#DASD/D$Sn?E kE K$j*Ulbr*{0J *.ƾU.D%j,~p[y&LT\ mCL$I,--+.Ue2Dզx/.*%*D0+0U1:GO/Df'Z#k2 "HChO qlkJ\By4dAT#(q1Ő<ޭ8D:)) ²(+T/20]aF2,0CC(2/Bl±V@COHӭ3G(4]t9SuEt B(.&B*ӕB5RӕRZ;_-|$4I<֗."4 v$4p 4:5J,VUJtE[ĕft @xtCXo4ݒFtA\nKId-.]Ev.'$2A12L;jIXBHoC[5BqZDŽ5"TG@u^oKWpӕ:ro*|Byw2]-7C671{N>V@/D̳=HEv _oiA-3(3x7ܒ%X@KIܮBPe'@^2=6OD6>%> xG2GA('UXծV[oc7]Uk @Ehnr_Y3*$uL$‹&7G\wGoB  h[=yCt@^z+7;7|d/䒄abhxGpKT8hD,O9DzQH8(FhMvCѥC${K_hG<rJs !FzM[A*GԺ[:P4G|C%mfKך*u{LβiVDtUİ["G9Oy/N֛*hD @u*ĸH8[Bit/=cJս2GD&׷N6uħC yҧ})kDz!wY7]@G[|PoD#;])zӹ[{D%;3Fʬ\z뼳Z{;MrˡN+$1T2&e5CTc2R,b«o<j#OJ|N~fWSp؃D]:jKRWK~fwIмC49׹'@FX{cò7 샬8=Sdbva'/Pľ{bBqJ,~}W=R O8A"$h[{ķÊIxx.uBwDwP|4x` K \g@5DQI`ŅWe\qUDžkVzkV[vlXcɖ5{mZkٶu.$#O]& `X%zļDX$F_w<Az\7c柿$}V\T@|WHz z\7qg۹w9F#t!˚3#f)pC5*PQ#Gm?YR^܋\Z(A8ʾ{J 5ܐ=EQ6 ?j*%Tjsˁ,$ ^H(9$lȚǺnJʺ8s8"cJC@zqd 3#@;SAFb"4"C[3P *ʭ5T2Cd &H#jOTá L꾦j?Auݕ^}`+͌ɀ,EFb뒚u!;:"&xK%R/6-p,r2W4S/DrM/jZ+6&~$ߺxϐK&+kFK bE dTIErTX6 DV mW jAUɡBpPm+A3ڠJTjR^UtB:u>^ ϐ+5dY2Y3Zc:pDHκ I1 茩L ݫՋ]̚$ݰ0 qxEbDrtdkJޘjBn6N=nzaf*WftTJD/=P0k4S@+\&h`iHēG欸H0H'PdAQAJYyVϢWA ^1.DHz1HG 8srƒ'$^&#`s]]&(qVó*/8YJ?D*KA"C.YmXWv΁ pz, K#\N$;@FrE`z A?[F@qa@ҿl!(X ) l;[>5%2H"&$P O'UJ,P&ڻ $E@&! 0$R?2! iC%ҵg[Lg> pX]1$vX]il9UZV^g:I;xp]]8Ӆ $к4?b Jˤ 9bh,H q-u eV+@ق($  #n:q]h7F ;3܂ NzKQ%d ;Ձ CL+ 5=DeZV",N`'3ND$2 V UUukp-jVI`?XXlLJQrtAK!:W>l_j>.=:CBuABP˳UDL `)G 5>b}Kv*-^f[[x1kn5EHCLr4̗5F$f1H #tUD='BTbT &3֗^HJ߬w J"$Dj XfL"QYjW-3@\ZZXF8< "Hax"+S3 kkuNˣb!w[mRH]/!v2V%XFlď<ƺQ@q ((- CL͏ E"KWn,sBLT~r/+*Vb \tn>%1@ڡK DŽ2XAJZiMI5Cr ':êW+(^vC<Pbb.?N]7-r 2]IHB8? s ) A{ DWI)D`r&gK|" @>*|XtYu8rҀIxkBf˴X@yD&Pw! S:_FH؈CR5AͰD=&*PWRDoN *,B .!Jk&n AK_ @BBZ,* ʸ-֥giD]0q !] "0 PmJ V &PP ǐ  ,F6ỦJ0haVLbf+Hj ]&HpB 'r Qx*(Ȣdu,a@gF Ȯ]'FlGHE$li{,$uwV 7bb 8Ѵ5.!@H`" IQqEjMu~pr1Hun-J# \QEFb"+2"3R#7#;.!8+ q+ .nR5 Jj &k"ȴb B_+X2V0+.@!g'@*k" +" $Q `'f!ˡ ,*!]'W*#{e 0Ѡ>|0s012#sJ  ``%QH/M 3@M 3ׂ 3 R$  ,R++`7`38 ^sd ;)ގ3: b83;)L 939B/J!  =S2TAAAB'T-ޓB/C3TC7C;t;TCC*,TDKDOESTE7DWDIEcTFgFkFEoTCaTG{GHTH#GA[.HIItFJSJJKTKTB#KTLǔL˔L{1s*MMNzTNǰ ANTOOT;Oͮo0P PQuUQ[-Q#UR'RQ+ @ ~M1TCUTGD/Tq1TWU[U5T_JJRVoWsUW,VwM/WXXWumpNBSYuZY[5Uu l\"Ä5+\^ϯ^'l@_עؘ-& J>ab#Sp؊bsSKb7c;c8ЭBa(0B?VeWe[J`P fffdyewg{g]])hO)gVii=@E.! PfjkULklVlJlm6u7 ZW!Z  svo@*6mllK %`Z @ul/s3Ws?6o7nR$JIILeo,7+:7,&0hpsowsWwug 8 uQ BDʢw!+m2owz{by]8%8z,86&"/\~W~}C>@zp.KJ ~)f+W(uv~؁i&)Xɺqu!8+*%* 9JA ,jB+/x+2 osg_+ES B @ ɳJƌFF(-xX+J5R8b!‰u q"K)ނbPGcA6X瘎5 B`67!dd__u[Ur$jl e/ Y~]lבGKYW! 8 ,!2E /:y+P?O}MYwՖ%x\ 4Y -l ԵYNP6Z. Mق "Ytv@* `NZܢ˹ٟ .kW 99uG9+ڢ/:Eڈ, t 8Y#1ZW'y3b'W!sȰ}GzKژ  QYsylĨC١1ʧٯ+hU/TZPy @n/ 6ڎy !颍1Y[ _/̢qZCp 6ha3;AmfpDڮ{Zl=Wv jcBɵK0qj#ʹ+%){"onmټ(;D'3`pP \2n :pGf̺[O;.7AD*u U =9d-T #|C*v8/<<-.JU5Ľt;Zoc)O\`l؏@=up,he\ȗ4㢴@rJ.mb|  uD܂˷WX0o L^<4:ۂ\\:PJ-P °s9z.auFC),N~R>.V{Ӧ5%^Cm,pt.x f~ hK-->ǞI$^F,-ľ5/~1H@Z<p ѕ`@#.tܾ8d<Rբ`@=3Ca $> S FHݭ?uuD&  ȳS[+jqa[:_AK`/X& *p?Z4ă aP#q*`h=B7%e,8̀y6$os<(Aـ~ye츊Y&/'" LY@ -ެ;NlqY'Nx" @A.#P ?Y l m~4DTGEꨢZh2I*4GK!@ҍ3b?g9$"vRHt{Ԧiq[6 {ݼ2# 7qH1'x_2{ՑRO'O=21H!I+MAR 9  !<uDX[Šv&$FwGL Auk]l*{̮DDͭ:ՓG]Z+f#g B fQn'$R4G]Ets4]oi7G=w!⨼)B H]1z#vf+q2ɞ"1%x=(! &%JF6pg%@CF3슰eGܕA]\(^v^=r$`yRy잌lHHې$HY"'O"ڋ0#βG"KAl53Qߚ΄p9k9Z (~G1Kut%[Q2UZGFQ!$:I:O(&Q$D&H< .C PXW*K)(( [[ʛ62Bk(G7KKΞ6s"vGi$Cȕv~"e]'#8ɰ.[dEj27&dDƧ[lx|g~i5 BHE:jL enEs,8sim$ghCQсWlwz]̓  (Х_86l`# $ Bm[#{Ҟu ߲r$h1 g-b0Nn6I92H%wdm^-ْwွ-30fhe[gx3ؘA)D&t404YZCtJB Q96 ׂ 3:꘏#j#YMG#صJj"1I`X7E! GV [I `%&FA9Y|zԋ9f Xx?rZFJJy&qwn8AyC5PDlA$_& o=H*EHԯ'L4j+5) OZlF[@upy L&g9Cp Q Ya:N:TRqT}M&sEW#`#j#9R&Qѵp^I#z.n $e[h_ -fJ9˵?R٬wp5 קsq]ZIf\:E  ivdJR>YW+018?lAj֘aN&dV Z'fтфj-[q仢Kށ~!T<2=dp-W7a& ]av( V \ 7S][:]VSk B41_9B~:ҪZḌ03!8Bë`9 (~8RuL#g=]RlB DlĬ:l;x _Yj"]e_#H|EۮAu $,N+{kx\ @1(j 4aQ` Z 0sr[PDڲSnN"s)9«{:ZH20l k1j  BkZ)|Bb l&l\J[ל 0'\kU#c{֌+싇bxl`pf k 8Us ?œ&^cKG#? # ĩ O% I& w#92 Q]:yѷḜ] 'm7 9]T԰u! 3 @¿׾p+q q :`> bJX RI/KHz~׀ PDΨ * p؋-z2z9C Pj,[JC5ـ}O@3eq yfAZ&(He2;M9d@!˝``VúCv7A榧Dq c }fZZ9vO杳L0Q R25 P9c Qۀmgfn} Q8HZ(l8oQ6|:ve!s }  mp'?"48M .A 0sm K#Wl)  ?#6kDP'L n46$SD ?U(~1#^'oq G_]{`Miaor/Ɲ8FFT0r-u|t GЁr~(ڝc|Dlc+ܣӻWMAcF('PO-רl1d!۱ny,YN[]PȀ h{3Qȫt<#e,n^gXÜ 1:\, rmL<^ޮ(^:~ -kVKzmqW8N$'Q:x]9\t$B YZԫJjdjg#Q xQ 3}0@~9^& pm~F}0Spnɝ׻&# 2IZ8·2첎Q8+>nLe1p8;߻ QyZm\+nOݳ8ǡ 2f1A@[Rqo"80pb 'rRzpYGe58zqJRFRv`F-}#/]!B#p?L)0`8n+h?Ae, 6X0?(pX !,:Tc-e^7¸@]( (.Fm>|RL>cSpg?d $䒗`dң">ti:2+*EE%HoYM8-ג!v>.#'96X]mB"('oB/(R1 ۡO.Q=؆N%(U(sh TG>yE[ NWZX/Zц U-h9 v!¿ 9W>,+>v捓U XaT 4? B!`ck f  2Md ,@lȎH#H4]yR! R^E%[[? Ǧ#<}l y=>WL\RAl6-~`WZjyZt-$ +̉Aun!nWq я )\ u0$̍U64~ҳZ*8` {Х.ji%݌_6kNs(m!c6TNxA,lHrr^C2lȐ/19wGW$If@i#eVwg|(\y&"0<'+y;W\@;8@w& (z4!(PCsAM< E("|į}{*Ϡ%`5\ZnV։ <@~V T2 H-RP(h) .҃ $hC^5`; -vπ) G3@\̂U)ȺΨ<݋^#qCCEЀ%SϨ@:=xBM&<43|4ʣ<0ĄPʠ 8*$1{%Lʥd|JJ@IJT;CiRIK8KkɊhJ@M/rG[Z$?4?0ۉ XC0A-HM_\DSf\-0ӄ,L XЄڴMM? $ Y+S , DΈ"AP&)I)8A;")X0~[ r*\RHx I;zύ8I̼?GR5pJKIpO\.ݩ71t=x55J9*#K$+`RX80&UsUѮi2m A,KЅ <$!eQE$R%ml#)175Y[Lc2t ,8\ Ȁ LK4K?%-TSST1Z< N-M3 .eCi>l@L 2>h\䚆(Zĵ$ZՄKDt$M_]cH ISH*ec 7فv5P ],ڎ4 F8f{|)fQTBT VƆ! cgR>XیN=xXg5 DK\XX\V#&Aue?:uKı@*&3%bR6Lec0,Nϫ0|cୈFUrWhh8y@,sRA*.K6z8he9hc/=$ȯRxSJ8 sdΏA(X,Z[/9Pp.l Ђ&΍B 'nM @c%@,ٰ`v~ Չ R(!XjP&A2b&IHHdh4`XPTY.bo+ :vX *7 {xqK2ܞ`k[;+*iʣb*䝖 {$)؃,aR[(R 7q >(؃<?..* Ԃ)@/0`vBh-Aд _!OjqdΘ_R MZ8$pkIRQ$s. %ꯂ#=5P6DE׋&;Q hZ f@kYgo7*8s0tݍM^M_tP1_#v'Nq(Mgr9:.7}=I.SYP`=PeH"spe$'nnpE%+XI?p`@0{0wgJO=_~CCO ?ox[9$5oLfqNUv%PvFz纓G~(LGg8vY=Ӹ5 ՙsMOo']# }hWz Q"d\/GAz'|$` FRJ pˇ̯U-+F'ٌw wL|cs;w?l u>O N.vt;_+ اe/x7v~M/z?U7 =`W S/FMc.-._*h „ *lpDÈ'Rh>6r1"G,i$ʔ* "R8YbD%^r4G<7 Hbq͚{V2D2`:YԃCx$Q_m>؇QFePTFY0@ڂTMs(ؚH܂4aJZ{7*03ТG.m4Ԫ/JղgӮm6ܺwuϽV?H|$#`dJT,@0U@7@ f0@p`w\tUwEQD&J_j!z!)(")"-o//x#9#*jQ= 9$EI*هG:$QJb)J.Yj%]ziQ1%ey&i&m&q9gD9@'y'}' :(~b*(:(J:)ޘGQX)z):*G**:+7NqUave+ ;,T4G,J;-Z{i#0Dn;.{.RtK];/{///q/|0 +,<HS8~8+8;8K>9[~9k9{9衋>:饛~:ꩫ:뭻:>;~;;; ?<<+<;>髿>>?????(fM+^󊒵fĤnu \* EdfŊi딺ڢbkTr!dQVQ ET$vDBKS +j1;ĺY:),Ot@O" (I !rJDE&Zc^ȨBJND 8@0y< 0SP %5)ImYyKI؝vphȆ;pibVD+^ _&$ nd;͸\"wXnf%kbҗ!RPЀb//eJ1b) `rGMH"/L.S˅5=9ˉJDhEA"^mIIHB2/u pK[aEf>zQ5=;tDT#Օ v#:F9" B[NRd BՑ";"RyځBJ|+E F)̰ VSSeH{֑eXLJ4^&V!Tx`ܽᝦ2nri{DbH5٣8%Rs*$/+?%ȸ7Rn" q8pt!.H!}!,`S!IxM!W9킬eN>w.Cp徖ȺtқѴ5"t"x ' !w J9"IPt#.b5HD=j@ is? 0/C2>E|A;s eK/^)=?;"PT8B8Q@smjQAKBDID51њCFYECFZHO`yQDLAq151XMp @Z B%iT [5^l0HHEh\DX!atBRX%%%!*v!D<G(R4IҞ%!.VŒKՠH\zDL_]MW)` nİ! `D-b)x \LR1nTy'"G F A`I)DQHD5B5'..l~c9.Q8H:~c!!Hu"D GdbBTiD#]!ChFDbX*mUD _ Gh%DXxVi2$xď,nF ^E)4Zᴣ%D8@i:*Z8I<"U WDh"DHrD%DmD/.xR'FDWE,bQ][N@D|/ҲOl&BR%եC*D"V  $)%B 8&1@kJ)(Bi|U*Z'$H[~aI,gsJDrraq%\~\]p12D_YA\+")&ib&MhWGVGB2A ?!Smݝ$pNfAc2^OHlmޒmybM-HD*ڇ A"T'tĨfa'h(2Zv I%?NčeA+F@G(nܑ{.dwFNF){vĕZ, vDJyf$☄l2 JUP7BZ'Hğ.Z, J%ě~ƢHᏦvfF1D$lIBBȧneyDz&-z*D @Q*ElFGrDID҉q"X6۝efIJMֹ#Yj*5Et+H jD( @ t!x+x *|B @@ @&*k[ H"Bp+BJ,."ث @!4 (qƤ(Ezk"DJ,-.D"+ @ kDhlr츾,.D" eDV\uB)Yi~)0E0dBt&n2B*(JGemnB<[k~Zb5T I$d_)Q)JXܧ 1DB.Z%P@ | xa BtB*Nڶ&Q)+DZAU.#-ߜ @ B 31r/ʮ!0cC'S c/*@{~#.BZ~DK:*Eޱq1j1cA{! 0Cpa3[i.'J|Z0$r|AmCYEB%1!΍.E_nbNDAA\nr0jHp-3k I\M/9joushr qq'8B|"kg *n3U3B{@´oA'/6N@rAH֍|uFHA<@ OkuDs1]ڟ bN0%aD8@{KLQUov.5GWO%v}ެ/ p7Y?uhS,"'; 'Th1E p'I/w (A 8s $78BTBoeDb/ZXBhoZ]"'>vJD&8e3'a A"8Ǜ[v+o)t6/ڪq"9yǒ%)s%pd'^7SA P :GZIgyDݲљi(G0I83YdO#D'ΡryUK3BZw!A ooh58: AxD%1h-mJ( xtBDˬGyA4I"P,B!HDWD[;&cɰ;Axccoٮs'#!y`)jj$5I\3ܠG('Ded |rD%^WPD{Ӡ{:+Qn2b<`ތ8nD8^BR[Ǜ&ö{I%PI-IL7*\Ԕ"Dp r!ϼBTp7bۣBX`2/Ck[r]NlY`Wz搛t5 (Kl.1lM . fa%+EVV&՚ZVh-[,LA7l6:IJX4Q+PVZm,84ԿMV ,@Y!RN> r\ zYW'"ey5$M],"@AT b?v%hLKZ&a1${EdIOҕ.YcuSJ$o4b0v*#KҙM $m]gD$6f*PӾb ɏK5}3.uX"!FK;\H|ObrInLDۆPy x^ \r+-[P{U{`\p4Ra)E =6!&3|9V҄{^ŵGnϜ5o˪˒p:laV@]kqdƃ롰|REllI booblטdkу[i5QX趦$f_ K9l-mO-6L=KEn.#1BFpR \n}2s%xq蒬"KH'Pz%H}ףJ hQ\i@\{"]}쇿gwO4C|T@ )EUy $'џ~b5Ѿ&M 4IWSXf"$6'H~H/*$& ZkK9fBhB&b$ȟN'HX Oh0,PJF n,ڭ$N$m P`XD@,/04ϤB>D@ g@$gO\d*`B+dx&{zo+Jp PK PH `" d* @ 0`!1%Qoo%| S0/0[)C1OXLJP/B4Ei2| N̠ |" K,BCs 4JBP BK@1I) "0Bb@dpvgl3AJT$7J"s"rr"xH= >`C )u9bR,S)0!b0+^.n"&l/lN?SP-!n> b0!b,E XTE`* P@uwHjC"b%xUOd`o N1KBEFtzp"GP- R`{t I UYM$f O \E x-23$[Tu_q77O‚8IP_n;m,v "U/M[ $r'1)= ˁ*˱&]YٹL@$'%JQ$|]˧}}ˉ|IW\}#NeV҄eQӀ4G}ͯ$tI-,P:}b%G^=**Yټ韾ͣ-g~+M +0链2\ >mb>뽢^ |8$0Խ$'>X>&>淝 ϣ9q>u 6ͷ ټOIb "G&:OKb],3$̓]Cy?| <b6 "0U 0bBB+V! $zƑ;\A#"Ij4Q#/4k qH.j1rIn8a" 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽p@)Z;80F/ : 0A'h e_e*#~8jQGA6Xb <ċ?<̛;]$$ԫ[.$ (P#z^R A Pz}$ pb__]vR_*dABcAvՂeSXT*9Gt҆uf9T-D&Q'YA=[XmwWT祷^{ i|w_~I@ ~ fbIfffjYf o D4`_Do”x})o& f9NZcQH*іQІ@)UJ6iQfe`$b2'H{.g PX`Im^mnmb婐$s  Z_&U*P$ poX:TAB&BG>d)ԩpӨ(SRyQ I %,*we d.nD&o~E uROMuV_uΫ_K TJ>?`t^/O%ĊEC$bAXXUkcYDBsm+aQH ՔAK) m `q`=*evltIouO||)40{s Ĭ{,tJ MgUd qN^ZUЁcQ'zOq$KƁDda!Nuټ$4byГk{ R Rk _p40nYҵI 0ȹ 'IA xRhrCꐇ@L<A_-d`I(ظBnB;@}cH.q(z4'BRAtQ#AF8f`_qqI? d;QALt"$EUM$r/ `eoڙ.(X r/xe؇7`  T2vŌaC^LE~.MZ yNa\g CD aYT1&1{(chd3̈́Hbf aMmjzh0? Ґt$-E@ 0ӊ )[*}&eB0T'f>uD-Pчt*t %Oh Y=AU~[4B t"gJӡ4"2MdS@PVi v-a[̄X@Tz ڽi7OV,ԪG|R\UՄh`X3-u[-Hl&Z,T&[]v&:jww W"+P@"M %\׳ni=O+U͒iDVU'neBXq!P[iB*Q/{K7w!-vx,n A:\#bh )1`NlKV6ڭlbYr ,DpTDʄ[߈X\4ȍw.n 8Y8BNh8I9*u K)D+|IVdVN<輙m|Oee#hpFAalgY!gVHEfyִok Z ث=8: ,JΎr̜yqVIkZ"謀&3@LcLP`t3k0|Fa hYzf: )EV';RPik.%< & $['1Y}T6]{A\ `ޮh>׻ 2]Ͱ/ecn;^ǒ]-MU<*x^xȔ/қu3ܹ^W'1B8t\ ӗ.K5ƿ"+6i% _VAj),ӢY}pJ%>: Q +R|J@QPZl-FTz,tQmqk T xi }I '{@> /3WMқT}.:g4T˛ QWbttu,+sTB$nm )_ܮ*9 Q );¥0 p Ps"NncvߒpQѨX_ X^/>OD~^:Q^LF^5J ; q y?~$HI :QsNyxou_Dž'ax=o~^ > HP* )H0BHHCT*&,@`$ *I$TIY&L yAC=VCPMnc8i$LU9WaŎ%[Yiծe[qΥ[]y_ 0)U{F!y)GB na # k/!<`(ĂB¨LkH. 9.䱮jN. @'GH" r&E!KGK0sL24L4Ts̈́$H@p,&@˪3T$!C*81Ll ##r -I *H /R};)Ӳ!*47S=M`vXb5XdUvY.&I.hYOB*WK ւEP@EW I_ ipc*E׊"%ۍmH;pԂڝ+չ`ʞXM4׆߈cCydK6dm٘(3Ns=1sKs"r \ ߊN4$k %+#QZ.oIЂ$vڍBWORn{odgJbHcIJzcU ׺O"<ۊk+Ui)ɐFzm̾z`H7pv$j}wxrKZ΄d8u{z꫷z~{TC,^+:2KC#f8"Z7(h#ɥǓdG-]I":΁UX e}o%&3so8=qO+da ]B/ h'U$Rj_'y W w/567r vلTN2gRЁT8|= AWDD,&[ G@R$$h:yFxrV)LHbQNOA#*Đ p@|=&ZlnXR$/vg<#bF^6aR[dR9FUXef9Z&f7Mp=B"A։>J"d~ *gǂH$LCHq9"-bl"2t*dUYVjyu]"+RUn:ZJV*(&Mj)WyvʊH5T}ia {X&V$iعӀrMF@JDŽ\$n#)-ʈl(hQwP{v.OYC NH&Wens۬8%CH1H4qۡf4{DΎF5 -K^V9mV^r!RLtN=I*pɭWVV!eY(خ fp`/dAhhkExW19{nR$oC)T+a*=4'DBm|c.mhŅU'I-*3UBd~JG9r|e,困BcaD4"#ݯ҇w-NX qgr,u_ -y oO:jU1Bک,GZғtebW(eXCMMfyC-qZbŨ]mMWvl.] $A=#/\9l*̨[KG[ӦvGVzmDOC `! x60DI|qTƖ+#tc`6.ku 2QXdGdkG\xs{Zwi ٘!\C.oHm5{Z_g\u5]'I9GHoLŝtG]qYq|nMl(*/G}+vB輐DߑߢL>[4,jh'iY=$ExG$I/X0-jBNeboV0LƦǜ!i7$穖lD}^P*_si5ɟ"VZޖmUfR{a=:9+[@l@'*0 T8;+` qé )"+*ӶSճ,h;"0>" *H ̸!(;,Q-@T?B+B,$R@p yA*)(LQʶ2" >S jCX+s5pB[x+1\7\ < i7$ DCŠ?BR,ESt ot=00 (70:K?D TF` LKHs\KEg-u |hv$ Gc!FFğP)K -LQ>%pq JHDCIXh}< YT+K<6KK?(5h)Ip҃IB*@'4G̷(̷#)B0+* -MC(ILN΢LPMk:PHЂEp8/J !U(/\ %%hs:DX8$`ߐMl*HPjűHM);RhL!5%G8Z>IPhA`xĤѫH=S4MځP%Q:1:Q H 9$NIJ]UY°QļaI/~JT܈TSQURRP!IQ՘@ݩDȚ@;=>c+TEK ml8܈$b]cR WqHqՊJVAA%p#xM -?w#zΫπޚ EE~% ll(ȾV*: *`U%N헃M%W Ye)OQ21$XHqYYWGYY"(F*L$gE)TAC؃Eݛ)(5Y0RQEښڪڑ[[Ţ$hPX$֛#`P۞$hhR`#HڿUH5 *x8h$Mu%0]%5M>;#RPѕ\ׅ -ݳ]]ֵ[^^^^^^^^ __-_=_M_]_m_}_________``.`>`N`^`n`~``S F` ^ ``r(6 aa~aa)O ^S0. bNb%a>a&^'_1a8*^+^b.^c80 nq6Hcc4c;`3HNi>8N`i[6Vihij&j0>i쩄pj2jVjŠeb' ^F >`fFP8> EpP(p3U8fO0X`SXO(Nn뷎kPP'8&XVkl@TkFllvkވ4mF@vPP nVCh X&@m>k^ 8n>k冈m>oވDkPnFʎ lވiNp'@_6J &Xa0_xh)g]bpmCqO~V?fU8mdS UpqXp~@m58 60VG昰cXr&d'W?f()ld4/tCgS &3߈D_F-p rO8=^U@cV6@VF8U(Sw`s^vd^Nu(v-aO7A d_eeWr`aaMp(b?fh_uvuCowwo!f7``@n*sFEVOUnowpxP]_eUpdu_Oxagcvxw`?j8`w@y@w7aa8gvO? w?s\/^8gXOV&8@_m cn`pUpy?N( &HIfz8`ny(fav'h#a|(>'Fz?IsX^z&mD8O@MgO3t)qx.`}xFV3/Wi/aOvt.0N@EW4G^o1mw~ܯaWJp0'|0|SH(!b@TDDFS$dWm\)ժVbͪu+׮^ +v,ٲfϢMv-۶n+w.ݺvͫw/߶b$wa`w"^$DITQ͏1*]dᘃE(:b!::yd.ZQBa/9xz!2![hV _G"r[."5[?:GKUL$E5+ٙlTjݪsT'^@@ %e2AƆA+'Z ZU&AZĮJEb'G]UO{FALGb"#\'+J@iP0ϥI<y!iEfZ|Q'c_b}vJ{b*q)PB{micW`KMG)^ @r,#-ki[2%:!yė '/hEhs,)x# $ryZolc0h0gD 1)ǯ/_[(\,Do\ aЃ"@RkR[%E+jыb4 cD"t ec{NP1B:yVXV)Ʌ"\Xp >,Aj.a;vL2#Bd %tYI \ʒ]+[ַ52@A$=y{3)_BF3~P9}ow!"(-S+S'Ƚv5{!UV`§PlU#%ț,Y%Jt!+qk"7ʭ"投%Hn'&`ta;&S*R Ǫ; vҰxEu׶oadi"'c8Mb<V_N5)L/>9oD78"1K<@ɤukܹت|).)Yx /o̖S b0֘Q%X'Ky-2/bRqAӴmג΁@ ]z>-tPlDx [݋8g@rk,4Ċ^4GG."UZ.tjW`,z{{W7~2g41! '!ۅL .J 48 LH'UVy^ t0WTnvtlM8C` 2TZy5qb=kĴn4m{;@"~ҕ[&_-3SؙZYQd n[Z`9^z;'@Rs-wAJnA6%7u"^ke~=S;J_:Ȁ@= X !LcEM\ZgbF@SViYݰAhqQ"/߹^sUy{Á@nX0)B};Vn?M=KozM_=0=@Gr/bǣ=U-=<_H X';yCdHbb;x/"&o]FNq34a fȕ #5<>&w6F/9dd /A$DuXFߊ )2`Ğ5X8@$TSh`^Vy A ߰W$_Q8A@gmyE"ĀP$O A> @pyA>`Sl"8A К9a!hd 꼠/ѠXj!b$a>%X XNAr[L#B"J% N""Hb{ %$#B&a**"$$XH@rАG.P0c1cDA d"X$:@rmXcq4 ,v9c:f@;#ZAaZN셅$3פbEd<•$F $A*Bv2,2dXA!PT`&X r$,վ$IF$[$bp]JK^H(:$@Kn% @EXc&O*e$kRB1P"@Q^NdTVEGVd\NEE`#W%A hZʥRt%#h\>^AI= F5EX fd"Pfe*Jffe*+R=@f"XVbZ`_zE) QjmfnE)(fg^\dD#%眦mV#b~XbޢnRguZu^h-PA_VjPe ggX$g&vg|\:(Hإ@4'둥fBeW|JR(AF zVe1^MVŅxy$(AYA-gAfXx%VhT%@w^D{^z>qg1X|'&Wt藂i'b>$ƞUM)>)1FmW)HDgMgXhjbN) *`F(UB^EU @)(^zE栩}(Xi.j*\$4(_rbş^P(+)vZ΃F lvE))BkJ+AvjVI]*+Y sŝ^xNknH)L*\^ލEѸbrd@]iX{+Bbq]~aJ`]L,3r%^,!l**Xk,(X5jƖ!@l[HĪLkީbj%ʮ0,2l(뭪Xpfϊ&l@@VآmF^B)lA҅*U$M FN/V-XȦ>kXfF] 4@j6 L@b٦R$L"j)њ],@)V.VA0@4@jEʪE)DA$n(Al8@, mV,.@  R~F-2-W( fl*/FZA@~EjY(,\)뎅&&H\qbrߒJ-^-V(z4 E^Bbp0 hEH7@f%8@@4@^0k*Aj_P*v/FX/WcE[Rp^.@H1BOAê^oVHB13qV1 hݮ0+qFB! qF$A#%$ȒXа1-*mr"k(@,rr-8@nEt@s|B|A0s \`psp3KA..EVjre ET1PkEd-\EA8E(%rUB:W {Dkn-U0"6Oc)hgEU'?l$Ĭ'"U*+Z`|svEZP%DyǞNC($jUlv{+J +wg3#Vooö1㺁\\plXl1lu썶RZ0A|2SG89;縭({.܆pֳ~;AZpne^ZO,tg%'Fl`PtҁlCLK82Nk@ؗ'ʘ$n!@0~Q"v_G=E#H.DhnҚIF d )b*ThS!6"sێsDCh @Fݰ7@4@T#y!K ,&2tOtHG;O *DXN2pN ـYP U(TJ$,{ MYbGpi #?6h/fȬUdrT?p!"4kBI$0I4J0^2l鬈;R̈́ɗS"~ ʓu#fDU`.Y@T:|"$`$yի^M9UN>dB&-IA FAٔB FS!H׽U>HjH쉐=`NXBXem!&,nyƆ! 8@IM-u P+(,F:$z"=ew):ny!Yk"}B\\ )4H$x^ƀq*clmJ!}xʏA\CF8!vsB>YTةRx ,rߵBQӻ-M7[%NeObH oiWz>; [Th2WvBK#^ w%$@yA6S Y}; 雵n["Ã#KL#Ի9 MꉤX"fvS푐W f;n9n PQ'4?_ 8G|Λԫ-W~ X~wO{IܧakTj"zJN̥ j$N*"mz@"b2 ./)-",^/"VM!rOn!"ުVno)J X* 67@Qo!b W_ n P @ ܢK/ڦ@ >k*8 PNECb,&*.p:#[ "'"LL!R ~hM!X b ~ihlp[b9`q 0{'”vPqW +bv% >MTF,|vR"-d{#fef#3r/'fJ2f FqZR_b-%b[d+"' "\'M ('r((m) %1o(S$j'n::b,װkR`2 0_S*.7#&֢T$b?EeGG8C+93)Hmht#`(@UYqJRJ+ `C;` Kr*#o" "LWM;Ցn02L 00!6q^O3챾*(sn`r"*}b"R=4W)DyT f3D5mFSYGG "@d7DJ >dV`m5dp9s#vZ*an%a(cVh6H1ryʴSr .sS! gQgynpB2]V!t]0"3!*Th] `WbA945NY.M;6.Շ0:4Nsl焲Mb&1b'͖hӘB12eSkWLZ_6),umh6It5_)" 6w{wB; ` +T 0$"9P'Ͳ U]vq`.0)m_ 5^%to0Gq&~"x."0?7ha)VR#8u!\0d5z 7z$} - RN P|U)X2]aHpV%'wos#4 M@@ 4 d@ }tbA3~gnW"_5Sh4["l|"ĸo#BNx'"p3DžSTE3Cës6e#cZjR'rUc"b`xTBw6WYY` zH@̺L` bq*/3m]("\87=U8&Jt-W~) 4"'<9ϘB#R"x*"9y!aa b9*T%8&f$t!s8'[؈}PVWלveӖw|"7[5 ˒$A+KK@5":""1lOPl/"0g)ц?8l r (uX^w)^_%VG"-oxo Cs!&kBX3y zKF*:CW7w x* _L%#@a&ځY)@(h@;+IB LQ@@ d* ♢+i ǫ9wQ4r љbWz7L" *ؚE4I|e"Z! g »Eb']Bc*sn(Uh/ Vfq&xq#zaVy)a 'ղbi-#Y*b sv%h~-N6 E,ibo4cڛ"ol`cm~pµmѦaOsg3+:*Y Y#;iKg:K ^*wγ+`Q: ‚E.w -y|K i}{%iCB {N^1>%: ~7!j%e-by|SWAyZr)0_t'Ϋܒ< Z%,٭UPuG.w#$on4SxS#dR3m7sBO^6QV&s=ߘ\ &JW#jr$1~t R~Y0\&Qᢧs^,5KѤB /PPuѻV m{}!H5GlLq#ΥHjejqsOB<|Pz2ul60.">73&Oʕ"Ž#5T@!w^7ɮE>$z01 e~3Bs߭Zl\Leछ$ &>Zf4-^O$W%,Om oǩ@;]b\6м^V C8bsDJA!&)ZY}:h H*\ȰÇ#Jė3jȱǏ CIɓ(S\ɲ˗05 ͚ (@0O$|p3)SYå> 8p``>0,h%J`*@REN4!ZLfBm6X8fT0eLU)T$'|2[S)J>ЀכLg /)XL\jXঀr3x H|iXJ. {䛥Xr9sIbO~`7T/y5շOϿ(*T|{ i%oVV a6]vOvS[!R(q|'B{DSw evyXVim[D&D04%fFr(CaZ}Tcb hfyQD@[R6٦tix|}tecxY B8xUVIa#~xSl-{hS-Q6Ц6͉61 1i6 1"wP[Hrh# uiSv*5ȔYhv;Q){+nzK+[% a Gp-ʐ;6t6a:"C7Avq4 O&kM "@U`DT۾NdCS1P@C$rIF̳Xg\w`-zI<퐡(t 1P&KDAS$w uۤͷCΦB=gC{{$ }!*~\DL͐:4@I |Ps %4Dyzl d@/t+\Ucgw/@ 4DlqKTH,>%@:9B꣇$0}IS %od$K<0@> "$g ^R%4~-\62P'HK`0O)pA*]M*őˢ.z` '2) \gn)BHC6x̣>~~"G@I[FcF:򑐌$'IɎH IihRL*W٭K2kiJ#H8XOv9Yb&X^ 0a+1]bŚ`#pIjZ&=fTf7G2G4[8v,7i&MQj12N @JЂsݏ=ÙFTDPoMTtF7юzh{Zz@! (LҚԥ0cKojӜ& .%␉$F} I=bҤ:NwA JU9~WcYEvM`úT2Ժ%Pd B iaTۚv n#?uoWܚWOrF !tu;/nɫn!ŵqW]r׻-Ny_" kh2ڰ}-Fʑ*#Wm8!V rơO*=H TG/6uT\S1qfݠx8Nk*txur@8*^y\gvyHȔ w|V# 78ۙ# x*gy Sx?Wh.Z!8rLSt}͐LSu iT.UurDה585I0;DgVkޘ& F jGVopO6mbMr'Sv~{>(MzִۭCd]Zߔ&[ s$f-q!ȆH ֆ7鳐|"𮁼 " Sk֗7yʟ_HW~yJ>3.W7ёcQi6Ozqd!C7j@$俫;X=?9"l5SOdx"[]|{DvS}|#_x5|9_H9E]dw#c=^O| f_7>jԫ$?eW>ϾKi 4TAOU< S@?UGf쯁1-p!Te'nUuޢǀ k PF+fXyT)PjnG} }.0(߷U48,U xPF=CPH P<E`PD>F17pBŇ8U6`U&88؂Is8GiIx0&Hу?CX ᆫ'd(r( Q7U{ȈguxIMQ8  sSPPhxUx<[Zȅpw0?PzvUi khyHU80XHsU@ v \e]1nn Q[ \Ue Ezxo?Vcn@l>:W8 aT[Ŏ \u8g츌9U IU9W9u>PSgq]HYyS ۶"Q`w2IUH+{xXau 1TPT; ȏ)ISIW+ْ@99U Y \u6_YQ HUB0uUx5J9U?@Е Wnf\xtq&8_%C qxU9YAYq7I'VU aA 'Asȅo9U4YiYBIWDU +!^ Qy +q}dW9|ٛYYɗT$Ɨy׍ ldYtIg8Umt$Q 7 j1lyIU9e[_ZMf( YJ [UiQv85*֕aYi1W!YMJ:9JUʡ9Yo5vz9i7%(7U\# fkK&q;(J'k 鸐ۧ\; U k{ [[kkvpk~;} eGWݤ\ӻ|Iaǡж5pt1zT w%R֭HT Vn{ kzDw'{{͙vQסΈk U Ѽ(Q[z F`^ֽ>@l;N/..>(IgퟨNeā*95>^y;YvqaUȺ'Cr4,ښޝ+]>{`/n1Fhn-PEg")[a:ޫ6`pN) E C -N=laKWƶ& <±.~uY [>.H~ꩾ?~~浭si90*fޜaƓ>=q)h垮@(aNV\bҗ:r paoO(&!%o"_ q[P\#Έ۫VNetv/*wJl6^hvfݯnVFfhwmosvOsxo_c_漢O\eQg ?aLO ir`/w `p YoQ* e,~qw:?W:UJ$^Sl{wɬ|/q__l_un.lOBJ@ ,B5 Q⪆5L\F5BAT8Mր1dÑU?jG"9}TPEETRM>UTU^ŚUV] )U7 S1:KKV8 ƏTg`M"^ +҅lݻPKmߛ>xUچk m7ƅ9!쓲xjŋbf( g!^2"!!9RNivݽ^x͟G^ o@J}GgѪe`qJ1J.8hR!,d a;l7N*R=a4L#5T5"Ѥ!з Kz  OMt_ ڡު]+o?'$>~矨TB* تu`%8,+5AG,Gu;% &gж$ /!`dM #aur<8D*F$b+hҶmNm E.vыE71c$A4FeuhcX&&̉]IB *m[9HBҐDd":"\1@ےdzUr@ۨHNvғe(E9J6`Ԋv JB̒B@JZҖe.u Φr/Lf6әτ(} L(Y 8BZ]RA FZ *cSxKMonA36, P w=^YRz"I@BM$aȱOJq5?@LISQB (7ۆ[H):|"D+@!҇Z {(ce>]E'læIڼD '8 ~0L"'No ͡+ȷg v/ v?S/NFL {"T W}~*0@pT\Xɻª"T8K23C< sU<e (=3K2=f ;/-?Ѓ˾ BE҃ ;I2A ;k)Xx+|>.aۊ-{AC!vCq1KH9нy$  $PSbʸ$c67.OŃd{@`ÃACdRkƂˋ2t=sI*4 d;E'BCHDl Xd-9CcúRDS#04ó(VBRcZL$ Bp<@b1D„A@XxA8胁d8XDjDH*gs[&+ 3 J ŐxG $RpHs<#, D՛(jK ; tւK!;*`Ԣ>3C& IЮ 28;R@UK C1ܯK D0pI#͓0(@TD%0\K>hG0% PTNPp*_Ƀʃ-[,&(ͤIQå(7Uc t@˻#'<%<\σFCB@tSSI3+M</dƃG22"@D F:g#B/`|԰$?hB!QP9 UFCNO\$UR8(F{O(ORG = w S= H;ʪpʶyubJʈXh,L.UĂӁσ bƒQUQ;I7ρSXER΂p? t6 B7S]EKH(SU\]`֩@KYZ8^ӁU9u:ӟTӢ`mSDWHʶfuVS<\}MBY'SIlM+ zЌ1 F7AEUR+`EʃXSIauٗÛXzm,Tn]jΣC.lM)rTe p0wKHECOxCHe iT`҂rZ-L ڜK{1+ʂCξв?؃Ld-AˀphV!e4LÁܩS~uĢ 컟e6C]DQB$]#8؛[]%=Y#ׁ簨#Z \֒umOpH{-uٻcى@]lU[P-'V1KD-3P (؃ߠQ^7K;*?PìuP*y%ͅ T˯ECX X5ۢ Sh?Hl٢ 8B+I#!ܤ BuV)ނȹPTO8U5ڊcJO-4|`y2_ChF506]4$5ɂr NIZ 9/6^=+Q.;`חd HܱC#x },Bӌd _ Y^]ބb⅘S,҃%H1)`:h7U0A(UQP E(IO6ACƔ$8[OAʈ^Oc)iCuUPƄrDe0YQcggdqef=h[8Zif閆 e H#߁ȹ@-$㣈s~Pe=Gd4#L2Z^ȹk>]Ղ<k"UWLN~1w` dh;|&> 4ÜUSЕvR*}Pb49 0VXjUk2E+,XD>蹛LNI< 4A壺ރhEI(jNwe+^V&kEgnhV0#C2>ahlW~&k76c$(>* np  T݄ nP.c6M B4$MK&NIճ)-n܁Q쁖ܢE;UZkT ]n=hGY:7'/d]מٶ opyDʥo(mωH\0~&40Oq0WY"7YXNNtk'/L,ş4VKpw=ЃQFE7 ]hmOEcrs1.>!>46Lˆ!79g&30?=[Kh@U$>g[tB`JĻb7iMu,0Fs~ GWo*8NеEW ]j\턙 $9rl!oDu5WGXLjZGx?5n^/F`pff=VS%3jvq ZJL'O;PF>wG`g pF̨xdVHwO{Whc3y/Ywxgs/Gh`޿ `waG૮q^\n#@ׄlWp /߱EZ4 Gb,}*̕x>ͧ 2xO肭mrǁ *hA0BT:K]41G,h b-FH"/!pQ:w'РBQCsqCrbW# sE\PK$9^-ܸrҭk.޼z/.lԈ HH28$ #z{fÅy&q%А/@ Tȋ d\(f$!FJBk;jD.0fܓ St$̠/*;x4" ^)G,pDϥK}^0(p3XeIMw * : J8!Z{Ul#j%gFEtJ-]T&r]E}vqqxG~ݤaO-d\I \DnR}Fw Tu)EhbD!%$ԕdݕe'q!#ߵAQPhDmj8%dAdEdB-H e:(J:)Zj!H8҈-d92Ǚ]Q ;*\ړES~C&В%5HQQuiJ ԣUELdbtBEjpBƜ:i"Va.k j e/ <0|J;.j$mj*ͺb]\<1A9ݾ| ?:5Kұ2);z϶fN%bK.B+D:`D)GuN6m6qmIz%*AF@NZBMj7yDT]4֞5, @C-5ЭP`(FI(*+I},0B(E4@H oP4#BѸk={=zq9I)H(YbRQBB<'#PI^&$sLJv6 "\4+]@*uPsTS .|! cÖE {:(L@)a{Bx%2N|"0p[·x$a;!`%Hh)_ȨşO \# u|7ȼB*$KB~ ${͉FU/J!xf1%Wϒ<%*SU0"EH0@QX,/b9L b|Kf0!I~YD0uH|.O!$EPtTH) Jb!#ddg˟ Q(p&\%΁p[;Ѕ2+$޾9eO~r#HKP<"KS@($DC$i,Ǜ#5u "䝥HbMx*Lr >bIQVꌎ*ZӪֵM~BjF&آAZ*V 5 1p;1$Yx Y̕wnrt jr`ҮDHq Kku5\=;%o6g1eűT)yՅt#ᕰ6LdI< &"%MQ3I\Iq8*1M|/%0Z L%4#-I3@B.3suff*TjɅptZ)TALQM C76 <(ē23Y8,EeȠ= PQ!ukA۝x$\ r-}JHb}ʮ[#َhvi Rđ>. j(̪,hQ4zuҶ+?ƬX8:=kmhFm^vOT'aU,\ Clx>:ғ3AD$c#2R ;.$pX<Ӈ#_ӭQn-?3P}YZ\#n6aFާ'5_o:#/S`!UP]ӽ:Ӑ%^"K \FM`DBd[y`e>lOs|#󙼻a2'x<>8έaA@`8-^(vA*t۽ȞCHF _ПHHBMh햇|JBr ֠  (PH]]z)w\ш_E8F<H Z)(O,{%P!v_U)y<O\B"I#!$F$N"%^_Za],b%v'~"((]ԫ9 )"++",ICB9\,."//V#SD"2&2.#36pC53^#6f6n#7"eBt#99#:L(A;ҢV;:֣=#>>#??#@@$AA$B&B.$C6C>$DFDN$EVE^$FfFn$GvG~$HH$II$JJ$KK$LƤL$M֤M$NN$OO$PP%QQ%R&R.%S6S>%TFTN%UVU^%VfVn%WvW~%XX%YY%ZZ%[[%\ƥ\%]֥]%^^%__%``&aa&b&b.&c6c>&dFdN&eVe^&fffn&gvg~&hh&ii&jj&kk&lƦl&m֦m&nn&oo&pp'qq'r&r.'s6s>'tFtN'uVu^'vfvn'wvw~'xx'yy'zz'{{'|Ƨ|'}֧}'~~''((&.(6>(FN(V^(fn(v~(((((ƨ(֨(樎(())&.)6>)FN)V^)fn)v~)))))Ʃ)֩)橞))**&.*6>*FN*V^*fn*v~****czLT=*Ƨ N*'%EB*|<+gܑcNkvBäTp"ntQPq+V^|as*>K̼tN +" \rڍ!c,VpJͬZ,֦c`ǎl ڍʪc!,kՀ,Κ&sHchrɕffKA!6fv LQ:-B-Z߅(Mnf6 r*ئbzT^ھcމ9!­f$%^1吕.`-ǰ.ޥTN_ANRn.v~.膮.閮.ꦮ.붮.Ʈ.֮...//&/a!! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 ###+++444;;;CCCLLLSSS\\\ccckkkttt|||*f.i3l6B:F>G@KCOHPITMWP[U_Xc\f`jdmgnhsmwqyt|v~y}OS]Xaekptz|ÇŌȐʔ̙Ξѣ•Śǝȟɡ̦ΩѮӲնָټپӧժװرڴܹ޾G H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mmz}HS]if ׉Ci#edU  L%/3ŬPY8"){ B +'-,/'Xo<]4"ƍF{Κ[A;@Cҳv+FM3Ey"eFn 2Y"XMŎεgQ5"pD EP@8H} \J$E0ΜVFgI9yO;\YvP*Ow"mn5]$ܶ1DLmΈAiqD 8T7 vYNɂeDqL3}ujL\Oe@)x\|8_T%m"Kdߨ-HЃ뉨i g2 4r 6֞FpNdMeO70y|- I~4Cw}2vq*%*o2 a3QcTDA\"5 ᔁ1"'bdH67 x@;'I1p}b|Wm`Hȁ^!\2y y@fS!WX,.8b$Kg< &T`k@'#zGY2_}tl B} ;m8h`؉hٷ&p']Y!sh}A21A~ ^&)mqFmQj2hQp{CX/Wv " OFK9 B؎z-s樃"!mh WtJ9`{4RyG(w(mH{,E"*(C2"Ӓ+ "(u(aш1"`%\451Y#ٔNIb'iV}bŒtA.H1j4:gmЋ:SZJ "p9ч80XSp0 9kq$@7'= "9 mW r/ m0dG#d6Fmj,HE,994)aYi A59BX,a\b:gR-5VWw&pi"-Y깞\!v4gV9юvt:AA{‘y6 Ù2r8tYSx q G:@g'sɞ Xѝ%i4'XY6a5 FA O1v}iy-1ˑ4W"Ҝ"ZzP *x& :d HJ]!2ZF*#4X Q> D ' јrsը9ӧ1b,)-4~R[:Z _jx:%Щ:"Ţ6A: w1uzB:d}"yB1'qP*-W_):\qAp=É!j9*IfArwˁ !~(yYћ يtڬ{n*JQEg1Wp&@y&1$vՓx@:c8jinNҦ$K<!aQ`+(.Ш݊ljGc4eUUG7ʇrwک 4%&3_XRs}ٳv{T*K:?߹([4hdUGgCfzdx`u} 4OjY+Oxf eQ!-AЊ$-) G }cteqx3ªL,9pҦ1t*2zIתk_;Y0QkzShGg[Sx F;Xsۻ 5RM; KXS[ [ 7WĹ:z ܾ lI%:Kë~ ׂ:quՍ*{Dãg12l"aˁqך%, KR r!za{1>6; -*) <GZ/6 4yb[k:ń˯,!gX0 F5Ѝ[a4b¹)E4 " ;s6[ȴܳMl+%~X ,68ɣᠺ\ &1}£0}iʪc:cr;õ\ΕJHA\}BU,Y7ALD2P]< vf ,qU**n[@u[k}!kԼ+vY-:Sl< +LQ.."f¹!i[Y(5mưb][J;y&xDM4M{Ǻ 1,S@l4= ~̸ltm]7j^940 V\/f D,Ea Ai\fۚL${ Bu 5!=L@Nkհ,:'Ml*= ǀ22 P p0 "\ҋjQš,?|A' ͞`AS1Ʃ# 7r7QR'7M+퇅DuGev/(0 lW"ؑ% =0(*Ƚf^q7fܶ&*B|Y{ Ah|> ʣo:#K-V2a7C L ѱyݱ*j=md}rx|d#a*֍낉 ~Δ"5H֣}B(GyOyػ'5>dlrC7U_Q櫲.wы:QJ~6͢"udž|$ğ;~uB~fo < E'IkBOkf^ip "6RNy\s\L-EX }|qOP"3{(O߀{Z'q@9jBI4I݉+ pYi'KR`H,c۰鮋SU,q=~ˮD/J~ jV怟n1$ a/D 1/cc (!A |Ջiʾ**!ce0J]Љ  ] N8ۣI8/F:b,1`@ PB HIÅ8 栘AD2~|džI"z$p#Nj)&`IK4(B8 ةpO DTRM>UTU^ŚUV]~VXe͞EVZmn 2tv"তfMR-?⒣ #>VntIL8pMi՟3&IwrQS25& 3"^+%3/Tw߅7^y祷^{'f+@?&H ܫHcX$a%i4PkA4Sj')T#[j_4: :we`':ir6zdGY#`7h&hF:ianɩP,ٸlB! <8:͢/D+%<((IZgqΫ[}'Iy!j;oV(\,Uxh^|9]6d p{#\on-[tmTQt~y*ŗ=H@k 0O!e!S4"E8?9"x(;Ёp;wR@s@7j;0AԺ2 'd ;3@`>!$z>≱P)`% %{cș  C$K‚˃qh02AxX 6 :3ᣳBijh=pzpZL :sf6X". +TT4LB 䣏C/p5%5^\Wj? .؂1ȥpID.0JB˱,˥ʪ\I ȁlU$Ik 9 Jh'T˨ 0 譄.X̠'(Sq\12L@b.;6E([*1l<{ĉ'F1;,A` X0 0˘CňB9É ή2ȫ-):s Eĥ#dN1Έ(=rrMMNXΌlT/3Ͳ4=OutAF ψ(A7pϘ3؃X0Y]x\ `# 0PئJXXx,.@[;.LEh3e65{tBƼ@ݍYu^[6tm (NLeO53͊ M0pڂHo |:he}^_p9}_Tm3\[u۩`3^ G43A`[-άA^E'Xama@ap.W`]0^ ! &ax"}EE$p #X؈ʁ !~6HhLH 6bh=2%fD LЁP 5($͗$M53k[p22 QUVD53 SMNIPѬxe< 2- ) ,=xC Hp2aeZPc>_=3id[6'EWVv-g t '%> gNQx 6Ts m '*Zr#6//L(D}舞hMe1ga1{|66Ù 7'H LRA E`hpdi"<'x6h⚎3T@H ൴6H9D@$cȃ~p &xG@ <0 .c6E6`0aj|)T6' :l]lǁ e5elElX.V૨[>nۂ@Q uUl Q(=5mզ6[ ڮ@amQ@\hnsʀENm1([Da8U P]o&>H6.Ff"C<\,ު*Mp{hp qf SA4Άңol6ό4qF8#?rH Pm3 `)y4V x^ '[4vS6LT7h>֊DlfpԺ5elo@o&3rDJ$ utFK>??NO0E]ݢI_(pmSr`Z Wes '@ $W9_Hu\v(pr_l7fY,bu_7txsHTuvr%\QW?u?pRriUluc''?kWx>)}Nydǡ֝@{yÉ ĥ[vp|JFo'NuЮGp*ΕS}|y/PzgWB;wWE6 whޔZ'!8g󶶮z{szDQy;gvDuQmts dH {/y_P{g':0؂2!f|g GqpWgQJˁ6 |fw-o_orE/ښ/6_ O^eԀ_7`\pr@/QDIw»O }mۈ exVAg/sQGyp „13aA/0tP.  9ʢɔ*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m4&&RjTO-0K I! ==8A)(lT B+($đnB(g!5J) .E$@/MI'<?.AVGP,-PeZqJ]P]Lo7]GZv8Y5֕ iq-Z }ԉ8\B3#B8X # TJ[QL:9 zDsXחI^Qܭ$B]tuyPy'}' :(I*zUʷ7FZŘq` j E&M_bѨPjO&%cб+D"tQHy bաfpNJj %`*D$$((IN*Kj K%QVrA[yL`'$b!@XЎܩaF%J<1[|1kqO(S=Qs(tK&'2R.D҃2lNPЇ)n`3/;yBHSpPB #P\ Q%uL;KCvCdgz1;'\9aB]@Drwΰy&^8K>9[~|02`kczRw^P)E 5BtL=2gJyxS# mA5BO Tw4B.1{i03];nQ&PLA.tRcBu,X$P>QZB)D{l}| #( R>L8G JI<蜤 !Dd &VEVN +H  #M@i/09JF.! 1Dh`eIE|/_5TWު ptY`r ȏ.b !b 1$;DHA#y^#c!B0*!mGI3 ](wʕ.})Lcs9t*šNC!6#0!@xP_r?T:,D5*UTU I-OIy5) B25 MH#= q%A%X=Az0 4O%*R (Tls!'*TϹ& (U=J€#o=@BabKX^wձ6;[+6CLԮ6}L+RXBp.CG0凤V<ЃahH*slgD8 '=)PbpgύĬ!W%rwMIƔY0z߇80: g#$8}-$YJD01Q`wcHp$i%3N~rQ9$! )ǒ,)l0!8iI|a3_HV_bO f- @HGD6e( pN0:IB (AVPB ׂ/R.@?p_ \I﫯?8҈sa%o?Xb ,p eI!{@]@xA}SJhd|_!WJ_MOIL1_N`!@0K4tQ!` xvA]hu ]V<' @@ @Li`Q`K |  {#4F4N#M@hCa!5v723~8#9 v]Dٔ9;.޽<#=cu we#7#@c!Ad$B&B.dHCcCVE^$FfFn$}A,Ghc>#GI$JJ&d)>#0L$M֤Mޤ&A@E|L>$PP%QetexEQ>%TFTN%U: &C^UrNTW~%XX%QHE Y[%\T"C"4\%__Bd G&b&b.&c# [d66e^&fffZ,)%W)?n&ii&jnYbe9ejƦl&mf0't#E ].J0Fvn'wvid&qB"'zyrw{'|BNg@(Vr@ħ(((!dFh(V^S0T\Bhb(hMU&I((nU@~^ i Xh&.{Z#ZEd%)V^)s>VEu$'LL%!i$DȩR"„"AAD$AjL)DNB:**ʤ>'T D$'$ \K$ $kF A>kJ+E,.ZDiJ(tT(0A+hDīu@^D+aAKNfJT J,@n+Rŷ&^’d, lfG>ieZPLAK kDB\JHA -$mP$ bE@T@`bM"h($7Bmx>DH@4.fV/.U䆯#&/8hIf.D~.IJ>'oREBdw(Tt@,U(O&@RH(h)%@`) wmcE piR/ 3}*Z@@JJK€AT$(p0^GWnO<\g aR8<TCh- qO@08W08@/(32ZU8@SŽ^'@`ツ1q(2r"#; [E!# ײ-b1V( C'D"جR)K|E$EPNC@D4W@\s6Dq+^VEpT9wr"o(V%UDuYEDNRU/#U$h2E3CC84DDBOE???[+S>-4I#TrU D! pDK1)ƀM۴1_D '\,IL 5O'sPQ?I(L5خ@<duVK0Rgr;+;p[E@JojҲ*@3U<2YE1TE5ȳU0\OE=uTSuUf6U[(^sZsD[4eW%@6fEitJqNH^'KvRs0N84tP ;o@62v~&Ȑ@8[ṶmJdwL(7G0E7GF[yv¶r{sE6LH}j?F( THJwPpU0@$N,@\J(ܞ[;7@oՒnG4=ӭUX5c2&8?ymAC0x>xO _C]xx[#9z/9zg4r1c9nyZ0 7^J0FkN88G478Iu2ԪČ ?w׎yJyWx9G[2*yO:?C@62sn.GJgxf _DfK6s?zwo@LyȀk/J/v Č+h^@@-DzWo;m^z| /m6E{O(v"K0̖uU9C;G{UUyJ;du'E<៹cV@\ӹطk&ߏPSVI$?RU(tk DG+V=_ıB5GnX5zxN0U8K?U8w'@/@5 AN"QK i8jD Gć̸cÏ CNT 8/䙨@͚9>Y;tAmX&e(N*b8 sN0NV%L it:˷ ڜ;*ͭONiumaÇ'VqcǏ!G}Gc2gy矁Z衉.裑N"l卥Ob`:"[j(\!FkF&J[2QtH'0)fTIm*o𘠲F{qkrV9<s\9A]ыI%OdZہ`Z2j(zqgZwbƁf%f>%/~b"1_+#N%L9&lTo(xo_*HH70Zl5n fB(4Xd"ЮX"1< } ډ&X2S#MD !&T&h/p FXB,+!3]F1Dj 7B"s5\ u#`*ҰD1%IfP0AA2l##<@0`8@% ` DpKE-Ґ$Җ;t G$H@LYƒ1pU2dkYL0 L"8Jc6 +d'?QR)$(EIJSęДfeʲe?P5Ao. e!E1Qn(vRQHo5IQR-uKR0MqS=dZJE5QT.G5b"6UUUnU5WVe5iugu[WΕu]W}_X5aX.uc!YNe1YngAZю5iQZծuka[Ζmq[o\5q\.us]Ff w^~.<@`z`\LЩΗe80+IZ0BFOu!a"% ]"dw-^ET[PM 4 tqVb8!V xl,b/!<* 㔺&R+c8)R;(j2rP(d3mHr@'xͫ2Ybe"ay-~B ^}b 5EL$aJ:sjtK1K=objE("S] Kmo:m= ӇִR.4IWw&a9-U&z1'گklS"6<" 5=r%^ 8$ L"DSAZCkCϚ ֐?D <+E!N! _ H7rg& 辊",`DPLq'd`! paSÞxc*a_šƢh# F ˴pOIQOMۄ떹d: F-P%*@jƆ%`tc *c.! l^i,`Ba"y"NJro lb@Lj Mz #cW m&bN#jϋ/ ͶH4&  lN* b\n%p b J'C&"""Z[p%"P)&i*P% 1280l> 9O% uPP Ho-.TmBNc VbΤgB&O%`b/A  s r&)C % (  0bo%B;3i!J,"`"e7e &#frZ!>-@qZq-xAvkq|bLm G=BzF #A*$ $/F zl"%ׂ3'mb '{FH,)&%2P&40ʭ&VB& blg)NZ` !` !,8 p"DŽH,`uc - G8 h!B!N"^j`tL(,Y"){ 4t@&q`%"(") @d&+  Mqp1xOmvR('kb "(Y'; #* BpϚd%'r #خR-b= L21P. !S$xI6,/kl0##,B>@>HLoB1͈np ` 3N:×&8%ɂq2Btn`NJB |m23_^9?G99 9Ys@:3 GIUJCS%TDz @*biƒ>ߓ Д!kX,t6t"*!$`"&  ] ,!PJ0Ԫ45 &?t"R" B U@: 5)g&İ!G#TgBUW!ȭ` b`l!zte's'3IM5tSMhݘs1F+HZVd%+LK!"MMS"ε "q03!O] u"!2!\9LEDz[Fz%"YHWVU-C誵5LE#ZIOh1df!V%/b0R4V@*?K!(!" 6!$_t% p>,P!/"(` P =!bQR]b^bcCab`r@X"ygsJeu9c(X0&V{r`r'7)O Bd5f]#13\sff#k!-bjj _UbQl/G-bl m$!|!!>Pw"4@Ҽ1vk(|ɫq%ʷΗc)bX &7dM40!RU-|-cttWf1쐅.cpiBcl0\+xx MN7m07,"Dc{=P%RvĤ &…w= 373&,-}'GL~%C_9&)DB:x4@wڠ9PXhP3zSz8g"<\ wx|Wiwi;-1R65px%@nG{5nU aw*!G:;*EbX2bt4o&)wY1Ê38Z-\y5X%`vyc\3&L Gs渎]|! M6!{C4 y%! pZ ֑öL5;cE"ˆH?Y2`Ɲu0 rWgmX/yԖ9#w0AX5fy" r   24s4:)@@#zv Ù0ft}1aZUM) z!h%Owy{&b7 my Lͣ᧊y' @5N3|3@ F=3:c ]OhbT!dE38@J5:4b Lg>D$ Q0rZ%/fb^pf&pϜ.(~DwA*ٓ bC~"DT7]T œ߈ă0w-b"Ga+7t#+(6$29#9 : "PC"yn:S.CUo:Ƌa$_c[2ߏG{{"<)\ޟY[^@eS%9>bU*%&`n "9fob ĠB:|Q+ &Pvʕ%& (Sl@D IѣLTS>CQ(X 6رd˚=hD҂\!\ ~!7 Bg%3Ryׯ4X|˜'rxZ`siT~!v>kE4=Ӥ4@WD3~3QʝAbU$ImUթ`RDd͇I(؃# vw`x(pxAEqPi8<s NHa^an!'Caq5yA- FV[n)Eaj By($CSuFO{X @vn-Con p+ u EQ>ykb\6(kl@R! I!r2rw*`?P(NR>oZyRDW^2Br0q:&0IlT#CԶAnl(ۨF&mP ?,N \CJsđ=Dr|ඞI%R,u YKXDA lV*9 EnRĞʆl$d7l^`,Z(:]$QB ʤ(6䏆ZI---G\[Tm,+ Oi% \Į0 "pa0/d'd vЃ(8!wI1 # h U&_yaC8%", ć!1DK|4S"ɢԅxJuT)dmmxW9q\m[tЃ868?ƑerlHIp,C0ԝ^3**1A$oH["0CEpDV5@cb+J*ifA6CeVHk딜$@=>6l\2lE$)0-ZJwVIc& [>/xⰦ R(C?*8^HB#‰\=H'< aVQ0'{JTqmֲ(YyzC!:lH WVd C;{Jx<.,#kNȆ8&A B!6+2_1V̫HgWح$2Bҳ/70~P>"Y 9,Eq9kyTI4 +4H:畄#v4Hɒo43KT Y yLTSF\"QHB 3dpDWB ZЂL! }l$B 2 n\b W@ӛkk{ D8- i&/]I"0 `]W Z aڎH$]%` CrpfL(  գxq0`HЃ"GBx?K  0@".tIIa&ICmН!9R926s\UmX|6!#,HYR>,}Mp[F͖E-EHE7"y~Jx(uzTbA;ALԹ ҡVgE\ʄ $[eqYi\Wb{U/ >X`oz>ϏS Qs(⧣`;Y' YRiL{*yc(8UyiIQ7q p*ț^m 72ifW,q83h_xEfa)b̹۰gik˶m;H [{FyA>#LQ!g<۵ʦGJϸ/AӧL $%0<<[`с*z^\ôó8I M!C'-#!6jGVS)Jn +KۋpBGG\sy{OOV-Keh82ف;7lVѸUU iJk陋Y`T$zOQkt-ircfKG{# S:jLl:˫5yh#FDX9!;{ŕ{/DxG/V,FJ웲 yb 9zD?aZɳHJ)M*Ғ4 giUIrr6,sLulw u"w xUyi귰{,&Ke L +?a Y,ɢiѹd P{:KVLs鿫y]`Vqh< ,A ,ܰy=,jDv\[W*"MbN>\9paزaAf(Ţ+UeXN+`W[G j !-#MF Ig6O@ p_j|&̟Ρ4M<Ǿ0Z|,fṉ,xfqJjTݦ7mϘ!~ F(y$%-sMumV%@x7mȆl"kҢa3q= .U8g9= A- aM!9yo*6E8KcMѽMd=T--x7NV4R{mǍ!"5KFr@$LH=ъmؘӒa+fDfhA<,{ɔڳdC[`_LNoRl# 9 = eqDI,4pZm]LT \3n[K-Z7 B oqnpg! #c%J qFL /ު#8RDJO$:UZO@+KN <&UWdA*Y{ԒSĝw=,[$ݩ|$n͘@ҩ8R (qU*u l'`.ٺWw٭MRRZGZeAeSխ=E_[κ :;R` ) Ȯmiѝ 0}D B!mUN rFiRW y; QO$X%'/R Eehc<4$7B?떙 %!?%aVĝn9cԜOuoz6@8<\y:~^!6|-|b8\ ʪ@-W&y*9SU/.)0qS[ݭ%Xo*լJ!,>hm){wo׏tq#F9`t!46OsMf_\U<wh(Zm0"X` 0p8X₈ X##"@G p,#1G%p$qeeB̘cxXҌ8@L q$GPGV$*1o,>j0 xjESˌ0v"z<>*B*#8BpHJ2CK @STqE[tEcqFkF#hC$6 < HˆV㨵 YZ‰("K0ZprK:19J(I34>ڍ(A0-! ʓ+:'H00#4(͈ȷ PE0?- Ub6@Dm-9?Gધ[Gd4KYhvZjZlՖG#:6p+)3 2!)-2! -BH8+JHpьnBԄMM/6+(x7+ DUu??z~-M $2 #gz쒴G#;-VQ돥PmHYZ˷HJ RhZѶQm3u[Z:l6lV{mfKglKhebz8^`rx@aNK| $pxNV&4n?#J `pX`rρs/]KV̂*I" "w"9.N}z@r!g>*)z@:tďuGlJ cMݎPO$` x@&P4"{ԥ-&Y>REk i,Y$zlB8r3$_2R3P%i.kGf!%sa-3T b*nXaIؐn-GĐj6uF8Qsc8-ڱ!|kWE$%vgdE$ȠC:g0 s f;An`ZFLL b+ N'w}4br$RBEY{UKZ8`Bitc>ŵG:: [F;:Pf5yMlfS۔# tSAn1Nڐ!)5rL|n̘L`όGHbrpE\₇Ό`gݥV]DLȟLN$LY"X,I1;iO}S0yP$Y$5EH΂ K;&I:@n"]C(աzjJS#gmNQU$ &`a. HPQUHanJ=yBYȧ*`1d*fJژ8IAY!zJ g{[VmZa@ <g=z8pzcv,5잰Yy5 02@rLQk@ʰIp `:ْJ^p=a"VqM|j(fq]bxF$qm|X8q}c A&rysf8Ǚqs!{s9YЃ^fB'Zыf4?BFGZ~1O;iLgZӛV9iPW : rTR3ԫfu] "OZ֜`.g}k\Z\}=#&vkc'-DlhѦFjg[6m+M&w}bo[,ݚnxw1ES[7oa\x ~pl:Ӛ<\x-nx^\x=ba M~r\ bI`r\39š\;y՗\C'zэN^KgzӝrWSӭ~ug][z׽u]c'{~v]kg{v]s{~w]{{w^'| x'^g|xG^|-yg^|=yЇ^'0'Ქg}]-<4CrK^}Eڷ|qz'_lPWy|W>e? &pg?K>-L/~'Z/lqkGhK@[ha@ 4H@=:myL" t@  t-Kfk S@ܻ|TA@hA!BxAlAfAABkABzC%bA0'@ @* "4B„ _21D2\kaCIzq?0ĸCC<þHCCBDl@EG@h|36 A$DSdJl>Vl 0 yE\ %ZHEYEVWE;[[lC^{/+SƳFYBZG`FmAsjk?Cz>ǴD , !H2@(C)-D.*? ҁQxAj8HSxs 6uY9T?* "JP|S5b ZQTx)&U T($?U3\U^BL*Bc$eMf=Mtl4MUU@ ֆ*׊ֿmU,k Զ`W df-u-!VAW*i*Avub]Ã''OY9)(OxK/%Kـ$TR5q`PȔYYɈL/T?1ٲBx$+v{؍Ўؐ¬5٭]ن@W)ڣ} }V ْA5%R٠eu[P) \\iN`!0*@=݂H \]ٽ@BҼ]lsfڔ'CQQ@B)1t5@5ҝ@E]e]u]]s۽ ÙEM މL u̷]E ^TI„ܒUqB` [a\hZ%n=U!MD߂ ޔ5@,~ɆH \a[(=B%'g^$}P%yH$B"+[B;]Z-aaQha|aN"r~/%^bhbKuaᆘMcq"'1$5PmAv`"l-1b 5p+@(4U@,OP\Q&c "Ҕ8e cddbɥVNZތ^dMdST~] lf0U߽9I5P!_"Qff ؁l$CyFT哌Ƞ-Yepg dN  W~舦@N_ڕGs.;y \٠[`)aPPPb@P dphoꋞak >@i@iq[߾@ꕎ-6$ )Pk]NgxA\RFn6hFj?@vmÞĮ F&Vn8F9E6罡.fm_oplk9(\Wӊ`kF=.Vn6< qqq g爸bMoiL*oow] 'g1p@p' G-/q֮p)w@Vl/s./ !nfc sDa!p εH8Mw̓(wR /rr./NsΆq϶qMG`q Yce_cgx,`p'7VU s[u,u-r䋩HVhX>o抅sGC`e_8hP au&R_vX=U_sw@uYq\Ƌ9_?sHsN7Ayt,)őe*6rpunoU%ƒ"yV\+~qbwa/i?FzPO kO'o&!S08/*؝ć0o L`@( 5\CP`o8gGOPXʻY{1}@$xˏHf{(ǁWُxh"0~.4C0)^'w@ ~'zFè;&*q\s cCFImj{p~ ~A¨GA) 4!È/=`"ǎ= R$#$Nf6McsG'pL3ǐ'KL<-2 (~$pG1-2ѪSfϢMv-۶n'_I˗GV#s 1L>lwc @{~MLB'@GZ("D y`v`=dLq, ų@6{4V<))|MD ]aEg%`FCFCvIF5 (I:XILx"x8ҋa;(RTtR% A"DA=AON ` Vfy qȑX(ĀV#qeQ# yP'}I;(Ҍ(ҍ [uXY5I"F2rکjuUSHR6Eu%gD8Gګ bf<)_T,DHra^$@A,}6%{XKe,R5T J> \G+m 27] cT AL ]"CTC'6H>"1S)}ms4`VGaWD:M1_B#l25 IJA.+EtC7+I[G5*uB(HKT NxGkWc=TYZ9q4Q ^%x4ED4,yش~]&J9VMؐ'1eyI 6+ۮ'&e}זyEDH=zr* 6xѨGؤ<3`G08w k6 ~AF``)$~$@Q! ]C #AzCl) &଑c>;|0"*u[bD(Dp/obQ5%"GF2H0y(t"Hp$C8 ?2| [‡0"(H!mHꐇ>!ycyd:].~Q=1¤O"HDc:%ČhI RܲX" K\[#R811N-;gB?}jؾ81^$8 V偔# VXή/'7:j|pIض'˟hL-o[܉qqyjGث6k<=b%1"f͓4iQ[FZj4 Cdӊx 6}FbQR- M͢rĎ ('8VRX]K9RE6!#,K RӝRhN;ӵ7XMG:XuLjØj| p*ejQtfjbѩ;)7;w *vyjTς գ@$A-F98=vDX5@trIHGn8*zwNOh"t@=䡃-Q,I.v\|kI|كlT@"<#GP8:@H1?NH"9posM0NH#8LȁWH‹e#Z| 1ɱEbZ"!G'b T&L~ʉ2Vx<*9rlqaӖ gD9wHyd^ePv0.[Ђβ"ٝ*f^[t,T>υ 6ͶǤ&ݥ1Ch2&GN<7S@Q֣Tvrq$<mylQu7iA "]H#&0iڌmQ7mgqiM ?]d2b*x\W.-iijy-uDE7F*]OcXw# ocB DLMT `LZ(IOU]+iuaH$Z^|DtRe-ݱ4<}' >A`zV%W Q_=HLa @Ɗ]Ry_Ł  Z L GhD(\޹EyDDGP:(<O\E4y4Ge[[x[xN\Xt[zq\F$H0EʗYĻ 拶LA4@#a4JNHX5D"H M\ @ Uc9c:#Z\\5#"=@0#@ @cD$B*dZbXD5c6nc7~c8~D;#:#;cOcZc=ڣ5c]E"CI(yP$,E"FIŤHC>dB.d4Eh$Gz$Hv$V%UTR]RZ.@DG(mdG[NcaE FWT%휛]$B¨bE3D A(G L&uʼn礦AxaUedv)%bEHAf!=|]&fQYY vrgwzw wrygzF#jAgDq)\sDu,&G|f&Ĕ&%QT( mtzD'^(A8&|GLys (]E9v: zh^Fh r(h|Z׊E|iE ~ ZSy W\&DHd5(=]hg[JDœem$juz(P%NVvD8V¤j2j:~Vj=-bjfhQE`FD4&haVqN$bF!\pĤW{iHfAfZڬ& hGd$O ֑]jĴ[!y%rD"hjzgc34kzN!*J}ZEjqjZ`v̪Gh(Ol9hxZxl&i%fMf6^Ȣ #]EH o%EAkll)Œ,A"ǡ@"*׈)qIx%$kGJ~nHAKڄWł&>EP[&ej-Oߜ"+Iȫ:#** ZHts" Ԟ>tcRnZbnj+DZ'JbvPiD1_&nԙ(qh+l-OPObGhҚ'f,nGniGS-dl(o4>oLRoD\w|-,T%`aA'`U,,ZnME&N؅na0p50@&)L'G_"{YUr-H pp?D1og)aBz 1j5#بAo~RYHJN.Q&Df%F703oRzbY4CoQlb X#Cr$K$S߉)/\ea(îW]$ :oATqs^>@م|kSʉgkpƓEȗ#&9 4Vm%k6ss7{7J*n-qE u(wgqlq%0OaGUr(Y/-SE0ɠ,>m;3G-Un Ě4\^)r2J@38HtIIc"c*jiJ:(ZJEH+sĝ@-N4-OoFoNA:AMs|)42ϝSh0Z8y٭M<\ɢYuZZKJ*Mb,t0_)CEDOWͪ:eA5OsJ^&8Q w) sB1EC4UuY|57Dlz̝Ѳummvn;O!gzDo^T^+M{kNu̚zD*ssbVF'Stg/4_FS`pqAxO?OaPF,v x%5ZϴnZjmcrgvMS(AM.ZfIJ 4XF."7=TMJN76G\t>3Z2lstU``#y+_Z$3Ƹn\H8RxEpeRDG.L'Q,2cmDto6@[:9cHҹ[F'8+3z;_N\VGQjr^kZ[ؕH- ěQGCu;gwvޚSP6'Zp53{;+b v!b:g7ss[8AW-5:{U.<9Z<O6uĕYx*D>[733|;ß|{ttB,҉$U;ozsWY ]G뭄ΎVzAHC][YVGO.BӹB3)mw\(%vAaC<=8}/}KGv4EG=؜Ylg)ҷv)2xۼW䯭 G\ykD|G-ٵUOmO ~YqS|w[c\E'/[O;[|Ah6=z.[ &xړ{㗦;z)fcͫ~D<ΆOH4s*Hp~r;Ss[s+)~9bao{|h8OHɼK{9Vb%DQ 480 ,f†($#0D=89e'/c./6g< D:Ԡ6ujTSVzkULGlXcɖ5{mZkٶun\sֵ{/xih߅DG/uPƈ_% GʪxZ^W$/|2gĽGΘpU8eqtF#U:\22GSE̝B+;\'*D3 @IUQDdp}z6}|׷~ N\z)9`(2R$H7 p Cͬ 贗諌8H(DnȪ/jq(&8ѡGVH:|)C68 i)@;PޒO}6*LM JH98M$;hi]}_v㈀i8F qQ6h1)XA gzj@p-k]R, 9`@4iTɺ  B6 * `5V$=xBqpJZGfNK#z*!tp@DJ9-fg `7YB @8 {V&| wAWޥc{,iYK[ ${ŏn!}y tTGb7| "@(<`Q*YBZ9Zq p,=;:%D' QE43lr;_@#.* =  P>DR|iG uDY;J$Z VVN2z'HE;ZVu)/ ESMajWUd,ILs8# *V w]q/9$CL*&yӃ5LGR*JEc7,=]9/_2֮@aU6 (xj}; r\>O8$ٝ,OPY,OŮ*^ߪ-4 3,!aTX &Q&TOQxA:7(%oST{`ަ(y3rDzJ8DR ؗ . GW_UycyP ۂ$:r_` :X@0"`*b4 PD< jSp D;Sfq0+=3{*l70a\tX`## F` :0EqH1@1Eּ? T~ "Fᬃl֐1]lce">YlgOT~]mk_;:"lnx|]nsvɭn(-FuoExFP=pI:p?Co_> Wq!w(Lor1g\s`YFsA\ CIԩ^uh{ ?չ~aL[[/s 쵿qGkr=!k9w; m+c>]x?u g9|A^SkW}D%}.Jc_{^$IE{\g_|Uy4їц9%!g?}_U΃~nlgLQP&P0= P'+"p.?CPGKOSPW[_cPgkosPw{P P  P  P  P ǐ  P א PPQ %!qb&&$-7;1Q0q)D0 @UQ VQ;.`"Pُ?t''IKq)1_kP"Em?D qrq1 n"e)?Qr}%.e-8.)$` ` !b""""b"r-!2;ޥlPq8"CJҫ8" Mr,@zRb`$AH( @B''}(!'# *נ *'! *% '}((!`+Gaj,@,R*R,, ' 2*!r)!)"trP* &.+QX b>G/0&qS,ar*!30Q35! ^6)+ 0 "7IQVHM5r5 b 23+j6o )O57u302i6c'Ds *Jeq?, 04>+rR) ?is?8K6,45 tA_3B ; @'g?$3ȓ*TlD=%ё#г.& B>>Y*D3r C2A( tD! AISI%H'C#@SImAHIAtA H1ԌViG4\t**KdFFFCFD> CM45e@ B RdC' QIC7-u tP c@  bR1TC58PPSeuL "QIqQGQ'5R?bOS.X MeNٳX.s>vh(GG*4  r " 8Q-#T_LV3u* •Ǖ @u2:ʂ][U\/4J\ ]IQ]?BT[AN$֜ыFY>U>*xOO'[ Q[`'1RDg 62#޵fuCYeIfua U'0g3BH[ ^6f'aig^42bU㴍&cB%c#%gBN񃳎5[b[V`2K HQ !ʕ!#+m6a BH VhIQCG! 5Âp"qqijIo nk "2a=֖v>DV>| 5nbnO$!L b!>(!.wg6zAqxqK @j67|Tz;K WxmN-RwleilW>pwO~w*})>W,w 6?#i} z;7jy xUqɗz"q-u|(%#!~Hׂ~?"Y%l'7>WOX*4G MxKf] wV+ >n?)>_ A=wzT!5b#lmQiIكć1eј)Cx XL7B{øKy@ ُq @ ,xV~69kmeq7Y9)x^{ٗ{9@Aityǘ_"`vٖ}(z!Gy <:,~)G!jZ1^{"Osex#r ^Bx )&ƹa#_'λy)`GB۬[Ƹ#4: `Ŝ{c{`T&býx?B_R,a1#Jq+"ؗ 4}E7ؘ,8?=$@|EH I 2\gHܭi00"IV)< 3t"%ǭ k! 쐨;k\9d N۠z(hk?A@Ạ [yUow?-Iq 2]ӟhtU)iA9iZ,*1]3]O):1?B}G Q փp8ʶ}(G+3xAyxMy'[Si$2lfڣicٝb6J!%1OVR۲!ƒѕv*wY'QG{Suz@'HeM{,9U)SM(>5^o%ؓ;0AֈݻY@b%΍C*䩘} %{fhFEI_Υ)f>6FBZb@G1F]'=)iY5$b0Ե_WɂS )~@~ C^3::~|@٭é "kwG"a&ǝ'`G臩+@/= O}4J!&]p@tn*K\L$;&݄]`\ Xm6U2` 6U-U F HA~$@XȰ!I4p"Ijb" dq(Q&)ɲ˗0cʜI͛8sɳϟ@ J G*](O"IaJ$Daڈm %ʬca@Ylئʂqt`|P$muӶKm%DpJ_ @\p[Id6m/iRDn%Yg A8]Y`jɗ> [R L"჉<0 (r"<[TuRlhWO7<<@ B)Jّ2%l4J[bY0KJYY9hIT){*+ fiPY1i>MS:̚fv:d[HMR)ĥ:P]U>92M% t+H8璶f=X)uKN{zC_C JF%o8%c[nF/Ni3'8i6J؋@Z0gNs;cIp@dMɃfn&{>V]_ xf*Pa?}K5 Ɣ%3P8Y[l]iI b?35{,af-Z"uv;W͉ЀH%%wyHZt]:u=6ꩾ+m&-xIKܼzPKd x%7fb&Pyt͑OF* ts>Qz kMEd|!nma5{foE{FX9FEek_Vc'`z12qJ d{.O$J#·ouv{/Qhx&(NFcXo(169R&Y'EwmHj׷'F7rи؎Ty=H~X[imYэUq.Fzt2~hT6Vq>e8{'^_0vYN;L*_OfR|(bw&w];}'rdS%3rv/|B9DYF@n#[ȵMO#OQ2يDz8(fjXx[W@)p,1?ыq`|Qz=uy2yqlwm#l9M'7fWWGy. mFy0[#@2I%ѕ@6i]H3SQɣuV=uAfaAc$s@8Ƙ1k/a?%rb|U; 1və虞깞FO@VHCtEC$IPySjpe6כojhP$-Rn֕_@_ d4k%G1_"ܹ=ɒH+ٞ'>@:WAVmFIC [N!$PѣȕXjH11vNh?h{.>0vc|etq_ 1~I̧.|ۈ}Ymcl OqQnY1R\z;ObaLy `IF#xtz8-6-7cZ) }a;Nƣ :ܨ)2y]> uZp1 3[HxV!8vsz3k|X51ZgqJ"h݉Gp#"z.@'@ JE[K9uQsf9i+>u(ˡ8gY|DaiG>'Vīj)+W pBQ31Zvˀii+Hz,7\-} Jy m(~ۘڸ8KR[ >BK ˕Q*`|j w\u&TjηUx`5QB'?QEvW<^+oR#,(\71fl XeC3@ϧfb+SuuQY^h9LMݿJӛ]زm7.K凇.Pm\_K@}*#%W1DehԱ+!i}øm]2c]M0QjÌ; \I(= K< 4^44=|݅o%J j;\~ =+ >ϙF(N8 3!>Qbim,T|C.VWm4vvzNs 聾ў#NAE'Q*βy /بV]I΢>7= hu'Nk v14A'm@%AC.+ͳ~R9肾{H~g ĝ#x0vh`1O n,L\N#InnD@ιa/9@O ?yNY/\"=`U v "?sc#(*N53s  ,_68󙣆:@B?/ZDJL:1vR?T_D/QoZ\ڠb/fh6dnpZr_vxay~O~_gȳщT@_GE%_9b_#Buȱ_O@NEo/f_/&mo0P=@?_1J@ DPB >QD-^ĘQF=~RH%MDRJ-]SL5męSN=}TPEETRM>UTU^ŚUV]~VXe͞EVZmݾW\uśW^}X`… FXbƍ?Ydʕ-_ƜYfΝ=ZhҥMFZj֭][lڵmƝ[n޽}\pōG\r͝?]tխ_Ǟ]vݽ^x͟G^zݿ_|ש~0ΘX@&dA0³A@ -AB 7C?.$qAOD1EWdqH$1gFod ITG2H!o#с6FydIO5EJ+IJ'F@$Rzz4-,!K7߄3 ƅʼPt р 1C9%PCFB'"'JcF?4SM7mX(R Xh/I8eUW_͌XN T (OI5Xa%/_/t@GHl`I6f-Zk,LDE0J MtpQ3[ue]a@3!r-ԁ61Q{]F8=0_8bc'8c799dGcOF9eG3ye_9ZfoX8hL.C((@'Xx ڌh غ둊>:饭~`ZG8քA^nfa芜;ƹq' v<0=(6Q0i t)/t.H Effܠf!)u4sE'!LrG>^ٽM@ RG_soTz 1~'E7 "H\RG""`dq&NeI-2hI?`G z0F 3!#p 2!DE"Bd$@Ox2:HB* d*d @L0=0#B6֋ L@\z08 BE9kGЁB(7&U_nZUOW2"h(X 66XsEGS ]D*im=a"Hq_V3EOtH~.fA " y,TJb0$Z誤,CZ.@jX;܍14dH  \$UT+WQ2`Eu"Q!m /!/$wG1ȒU% : =^kMQ&6kӪNsGI]M$/B)]W*&B\ʖ}/@ A!G IX s&BbCQ!qZ -'H|a.wYay Q-#,'%D; ,7)ȋX!G[f@t@ldRAd!TBvS2p`QeNw:[5qC`@ϥNWB Lhk2!r6 b焴Z$NML(~B(`0̦lI ݴ=mX93N55*/Ah]g#]ANv-Wa{!QppŐEHdHqc! s9!8w$d5uNH3\ xB4@Bb>Y67MTқZC`]Y{ :nE2!OH^|mBSC#D?zߢBd2!L@gvl=$2 K#|B>Fݻr$´@^~+ۮ|u?#iݸC {!z7,bt]ݚ/S.iS#2AwD* z$ϩbgsz,V-v~ʳ!]s>k 9j /k='˹ >΃C$2ď`QX$7"ۨ Y%\L1+ hCÅ )|m1!k3C0k>k:14LHMÿr0 9,2B!YCZŐ8) A-BED["X0DP+J<Mtg<JE"4PFK3hCA 1WB=4‚ح$qlEh ]+IdD(IA[Ɓ$H8k:kl[dnZhEC:B G`rH8<'LwǶ뻅ȃD3fGz\drJȂɞ|< ZlՋ"TʥA-9 C1G<ō J0ʃXO !JI듈Gx+u||.T,eœdK˻|'hA2_Y QˊC 9,ǒJXˆE_$+E |8ɶ,~BDMO"Pd҈QAL|ʯcLB Xsˁ&cA^4 }B 6s2켍+EdEM=TLq\G 4)<̌_2N˂&,λNd OMPKXU9`PPP[$DZl =^͉W:EoKL/31BJ7tχGTО R!!"%BE2؟<ÔJr$ф(ɤOFZ5\K-|=pM~Ⱥdҗ0$:X=92; A%T @b.փ0ƈ`,=-ͼs, NlK(%$3̈Fdӷء>875T=퀅U$U [}`b7jMԁФpⷍHE BMM5X8kgm l)TM QQ8*?RScM-S,X|ER}5  KxЂUF`J(BF-X$XT3wcDGPJ7mPrV\mˋo'=4@LmU[]OwɕlL׏=X8Z$MڒS!8ҧE. e0SB B0 ZڨN՚W7rYMzQ0;MrDlEM]̃([=7ׁ@4\Zv=j,r\ע BSXER= aER`ؚڱ Ҳ R]ER ,`ڍ %[0!E݁?/KL};P"k ;Sֽ5Ym-¿5^8E;8E#sCLɍ8W,L3~ܗ=_$ߓ]$Xݱuݷ^nR 1]߅ GXB'K@;`L=MW1IG=Uϫ n0J*"܃/ʹYte:T5s5\%RTŒԱ} O Lb$ 8T֍  3VR*[u 4.0vFs#2x.5k3HʹYET4EaeLW:U'@aܑ2(UQ%M ';&BVb>X%$Z)ƈ1SXYFRZ>2]v 9 a>56 =@fn2]$U`{0LtZ#b+Y5rMMḱF5T7. R+J.G}M̑ƢmV6&z1JyY۱&iRl {Eeݾx聰We8=h$hh= 0fdΊ/SȊcb#Ƀ \$~ &ȁ e1pxDjH)d3ҾEYHJ꥾{*fIiDž/H'"DЁ6ȃ' #dvu|^-GK(")׊KSX>]K@VlKH݃P!-B-0F(-2P誕 -1NlȖllDmfl 10 &ŶEFlL1/ 6nfl8imVnmP= o~m&nQ(o-B4növnmnK 1 @Qdġ |"ma($LV ]*YKSW@gOZ=hCkT*ãkF X&R' i>,@0!ŀbrPc JS.,_:@RJ,r!Q8sps89bbO xZ1[e@x FZG>Dg?9O 9rr!pPi.V sCG|eB7Q޵t@JBt]W9u/9@6 qBDܴQ;+P*4 B"xQ(a$21<3L^6E3΁X=Q<4E}4dSKke7bG 4 $䉪Y+&DG ]5Ad "#EA)L%%mr'P/2)7Az'wA#T %7Dd2 @&/A8{uAt 50Y]@>Q.5vBK"<DQh=ዏ S )9AҪ 6d~R?J Z3M!ĺVS%t6OL!I-t#P3 ȁ+ XGX p tXI*yЂ;K2\ .(o 簟q^ 801|8ʨ598DHH ^`(LJ&G呁MxD.A8LH6<"lsN:2! 'CLVdTBE&Ē(X,l?ýhA&du aeA\_%s#*hnD)׃0_ 9A(q|9yE3|'<r3B;"Ġ[Lx ZtfH*g чѢ+hrؿ~7 JqNk+R y "_ֺj,Wo(Jf &?͘!*rg q AvEl7*&479Bpyǯ-b]l9~Swґ_'ozNGՄ C~G۸s?(FI@*?mĿ@g!ӝ L,Dߙ#¶̇|>!RH%$Le!_bJuש J,B]LI-`ʄ `Ay B(T``((D!@Id lFdq!@IheaAlAdALTx!Ƅ]ռ!~ٟZ9)]D^E0h$b"R\H !^-".A`UƌkDbd!|&:`D$ T"F BhDb Õ} lD)ޘ'(f[\=хvL`Djyzc1_EEq#:aacA#nX<y<Σe5=MD!h3VD3=c_ 9Õ~BC" IA)1I,A B j$pA2D&TC"B(vq@!l!^"ՍBAj@B!@'DK#cGcG&BdI6 %(D%eBGABFDScŁce8]eĄ`:#v>F| 0 Bp" eyD fL(B(GReŝ':>@9%(^)PvnG'f F`u^^Eq.f D~Dg&ŸbĝnD,,D#@psaE'Ab" i!hF|"MD"Bd G*r ubA)v!SZbD]<{V\qK$k|D@#zeNMx *~bi4Ax놄kNh ᇶJ*Lk袽kDprDƣWFDa6ᠲGؚF+Dīl*D#nQ#4@$ؖٞ@b!--~arM4trNXB P'GL.XDݚ-ڪ-Lcm d-劮-Vh t>.~-.%@rm&ْ | lmDPg@m Ξ/wm|P//z|H 0'/070!;_0go0UtwnOw 0 0 a 0 װ 0 01F!#117?1GO1W_1go1w11111DZ1ױ111  2!!2"'"/2#7#?2$G$O2%W%_2&g&oAX/'2))'z,+2,DzQ0,2..w1-_200sQ1'2/3330LQW3O35W5+&$\738a4w83:&((; ;-3=j4I@ڳ? 4?4AD|\V 48tC4k(BR4Fgt_J_msQd4PS2N$BK #TG_40E?D9P%M3M#PzMԴQRO)sQ@ "{asAuNRSuMU#d9[grHJ&!(X'X'SuL8@Ш54aW2NK5|_-[^u_6G4Q$M 6̳dov#v^Z=6^4gD pKS@Om ZEIKEmiוi߶甹D(6q?Q\\7l1EKW\uwtE7X7vp'"d87t7#Q$\Q87A РU5LPvQt78 83T7}O!QTI\wQd3bUL0\'xY/I1`籠S8 ӌFWِ{Hʪ,8;3ڏx#ʑHWsqEG緕[\DJxd{1Zy!yyŵoy׹ {Ź992ՍQz|c[Q|vz?*ctqQʚ;7@\ 8Hmzuױg\<¾",Ą'^'1< .f(^#Q#>&$+>s 2$h:/$L"6(L췕۫'+) 㩲Bt뻒4zp1'EhÁ-ˁ`88shC>T4=[h0Gx YdXꃒUka >E`Ɯ% `q(ib͢$Z_ŝ:WqGO)1\9N˂# cc\.B?\J"6`py! 4e0PG,R!ZfIP,x>p_jpP@DWHc08K~{$oGqo)|3K7D:!A NH>х$[D>bKDFEy" B,yhSHHA&3I@H+id#\I _ᐗx!E &. AxA :N+TL(G=}Y ZI(F/QC` 3I8Ae,Ɉ͔'!YAGA2zy $ț aeJy(-DD^'}vz2Z2[SΔ5)ui4G4BFFb&I)Cd P6U"C#Ab<5OcdKt>uM"De*;ոdK\)oH k`X.BPjă$ Y#dN5IR86^$*TWI:1$dWאX$,K4Ի&H6wZDIr‰BDrC>JԱյu]nI9 I9yZH65%Uy.d!Y#r]ݨ9bWHA"oRI&%`s2U$\"inTK<$w]%-A@Dنb%6Y]M=}Ic4HeR&f!fIIZiDaN;[U-B|VDg Ń3*$qI>w̜7$;(jdmvg9;Sd\̀a[V"Xf"I8 CdjB| /IF24V7) ?nBȜ."/4so$&r/<A0EPIƯZ|j2n"B~<.Z J~L!nF." HB4 " 0'%C$$ Rb%QQDp 0 'J"".N5l-$` "i$AY:]'C- \OrbK1"ϡ"/P Lp MQ1Ѱ -"6P$Vg/RtZ^og_ץ^g(0% Pf akoT1qYF,+ԯuЇ\,Qb  vp? 7mnPJkpk!|$ $n b B"%Q2%Ur%jjD!߰ZF-!ͳ"Ȝr?q%P+P!Epٴ FaY&_R$O"$)UBq jNbKYr-ٲ-r\rf!&,\.(#BF-)BkR$ rr %/+ NBghǾ1$,O-Q35Us5it˴J& sql  >g(%1!Q1!'%"X@!JPO#7c#b!yrY<3=ճrƯ|dSE& /ruK"E*|d18EB$s9w3*"s %3 "[9<F@M"X׳DMDQJϵ Dҏ( (s v-s >J@ێ a"PR%B"P">!BS'jHOAA"u C>t!NfSEbLJT`wgk1|Dµ$Q J"l]m(5uy&A?33lGR@H"k[m6ns0U!6~g!Jfu>gt,B@&PWO"Wh# K;trasj9"hvBc'2|$ ' .-Bp$6l;Yf\Tڊvwywۑn>5KvV{>@/`\'*OEPFuʆhW{ψe?egmđ%0qaOmn;v*u"`l'2ml#u|txB'\<"w8ˎWZz`7 TI\55nzjtpH$/.z  @}G"QɓJ  ~B G R8Z"n$ZLU,2v"vCK"q ֊ QnGA:b9Ek3: hp#ji=BuXd+*F5# )V(w/t "p/ )9#hVdm/$RyY낙* FRF}R#c(gA.r`"40Y;o炍uz77}i.hp=B:/B,fyC>}؁I"'^'FQ9N^Sm HB瑝M}@%'Dc/`q非)<*~9G陾IV~[^'՞(I= !݅>>'N$~Y^~U<>XQHB"Ġ ` ,!-G` H TL >_$D_vW_",_?4 I녽 T$~w$a_U";?C{GEfW =H|@-~=$1~Å:0:(0$%G"B=er ~8ʕ$%`2T#aB$ÒCY*:|zaѩTZ5֭\z 6رd˚=6ڵlۺ} 7+&t&7޽|}D!(NL` 9aCdi!ǵ^D1⏇j"Ĩd =)Uꧭa ib4NI[eg^07ܻ{>˛?.ۻS>a@z <檈WDp%}g" *_DHF"Ph![],wBE=dO+Tr)mZX]FTm'lsS**Ռmxێ]bT.dN> eRN^zuGeZG~R@9@Z VeUouvJ@^{%H+*!v(4l4B-6ud(TU)o d V4b\EfT"4rbKs6ߌsμ⺞> -Βǀ˪i,9pqUt90z5R[eG[$THݘP _'d(T#7mFt=eA=twB=$LU͑Qd8BuCPQ~Pg8֪z뮿qN{AM#]6,-@(^;+Jϯ@hvF;Yx1P#'> 8k/b}䌢RFɛJhz%WQ[Ẽ\1IB22f,j^ gӃ  YLeִu:(W$5+F6Vj( P*ʕ*1{ 2@!!h OS" lB*#`Q*EjY*U2A"RYVU|9aԉ.:v-q%֭.=Jz_QNiLM=O &4>L;1 ,Q ̲4#WQm膲s T}Z"l^ A*BfW.z/ k-r +G':gUQDЎ'evHۭ,\|R_ș`D&r l@!e:Դ \,9^0E |і" fJvBDl$pbeyt(: "&6JuW,%OyKrY`li%&d*R5V̶8 '!TNH<O =*As:L[Ԑ-SybG P"aЋ!0-B!b늴|M+WIWK[{U>g {Ăr+|tEf> yߧXpZ[.@Bay঩s' Z7=Tw> (@KXc HEa}sjuP_@Z` H@/q8G'CV8` /m p ֵP(ThXI uG؇qSx pnA@d;U;tx[`X: =ϥZ D ` FL@vx @q}bQsSu~zuxDw,Y'=o "8> o$Ux(f6*O?-v SEֈXg O;{UAE 0hXY %hH0 PWА$,ۆՏx:Аh@, RU&  I Ѧɑ o;k}r^Y(hvmaEI9WMW9q@axQ!IrzjOU@ ay"pz|1ᕲ+Xct,G,PS w4%)u&i p4m ɗS3v+4Ux|gmmvlvBpQ|Z1J٢==$a+qͤGJ]>> 19V菬V3|NW)gYu~LꞮ,ގM|aqQѾ ֨KuN oʼn _f g> Ln?gzV:N;Sgnwק=ޝ]3uQ:]f~ҕOuP^wZBz_^:fKW=jPon0UOayJpd?)ΫFSQWSw F :cNɯf[S;olW\!rkmfk4Ju448U.LC 2XD*:,ƍ906 RF& `dGrp2AٓeÒ%)@P`T"-@SU%>R*Aœu(Viծe[qΥ[]y_&\aĉ/S"̍0*e\>\TAs ń[+x6(хmԆ^m؅q@SCEz YBetVkvJlK{Öή B|QA3f{ϧ_}"$k鳂T#GqP2 6*h&`ptxc(@@qEڢn! E0oqzJ,rK.K0sL2t!*pqw|0B ·2h%B#BĈDL $q($JQ nTɴeI"J'R&#'{4KO!OjJ3{W`vXb5XdD5u;rvZjNkۂ`4DM" bͫ`Eh i; v_i =hRzIg"0_x#Up0\JuնD"Mm7m7xMve[vecyfkkYM.y~gRHV:/(LgJw$0*ڭ٭#!8/ChߊB9uzhVʃ$?Vf|p 7p \}(W>v rۂ<](i~n6F&K _6[CڼR@1t o1/0f V(xI+HRn[q꫷z~{b@R~!_:g6dCt?$*2~.Qg#[VM S l7=O ]\OYR=ߺwBP+da ]؟ɎVqRCEsA8 j9ÈҲço@ "84AF/\*bºN"%Dl +#_/cxGfIRuTpIpzbVk-0$M{ Q+7 T88M2iZC.&v}l>.`h BNONJA{+yX@33p٘yP븐><Ȩ([s.;HQh`LH93mA?@@ l?4@T 8s2óx GK ??4\A8*A8A . ,Q)dBp‡8-dȃ1[C.S(|{8<9ÖhAcpˁjɃ ' xR1r CjPXk,L 3(Ё>{@^;`&"$Ts0Z`Px&xκŒ 80@T#q@\JKtHÉp \568?:+BG±h+c fLĚAPlt"sHG qktvl Ǟ( G}l ~ mq='>*r<Ê[RzGGlH*3HpS, DǢPGhHxHȓOI9?s,pCf;5l;8XJ~ x6+C) K T BP 7hmxą((8`7`FXf%ȃ+ -|,d pj18Bp+ ɃTiOj !^{L:0dz|KqK]BH+$ Ϭ T)E:㓋[r@Vˊ˸8ŒӌMtǸ2J\ L%ʃϞOȲC ,7Lƚ(@܈ HlL 'k "EEOLGPN746 #O:)J[ I@\u 0+ މіQP0 Q0+=`,mMr$DuQr!,5- ҅+%R*clSNg 6(L]ςȢPID* rYO(8}K;ջd" L9 5 !J F ~'ȁumNR4i~ < meHu`_ ! ꦌ*\g~eb. wkقR6{z{N tg Fsfni~i`r fȺ&jCƼ[z.)=K\X &Mȫi.Pjjn1w\Vk1j6j䰢ynj yjyӭjȼ>f5miɞlʮlݚp9`Ի֎U ih+kepOA o@Z?VZvoh6;%j>M0=^ V+޼GSSqq r!$ОHзo.O -Œ*/oߖ拳&kl '!(/'p}O th)wq!?tDOtEߏ8p\P]HyJ'[#)'svAuTGqkGZqPqOq(PFsbxs莥(:E+fsMJHUuFޒvSco0[_tovpw$ȁq.M_N/OlrZWC r7wt7Yszvpggfv6t{_ua@}r?wBzwoyPʥ&Q1qdrwbߦ&8/xطXA \4.u`34󥵋[J'zzMztew_zux1p{{pǃ88(/V35.4@qYn v&P|ʟ&{2\]\b%儧||lj1OӿQ|{~goXJ&7v#$Ӯ/G|. $L*q4꨽5%7G#69` "t@B(1⃅DX`x$2XĒ&& `#GDBTHILD&xH AaE6ES s`P 8@U7էCi֜x)l 2"q8LCL.T ߔAی1Mi46 ī 0y4 OHƝ[m;l4쨹/ @ _HقĜ ˎ?F2~` &maWBhFpʼnr̩A4(]vafyݍ'=ށwe3X7☣;أ?CY$e@ (J%шX!H~ue`OrBq@De%!ٓL:9(uM(e .y|ȧGMd\OvYJa&b\yCjZ%o)ҜYПyK*i3A٫["˞Tj!G!HRj )mƅɀ: } DNۦCZ -Bj箙g]A*Ѷ"- طNGi{ƯBn+;@ *n2t1۲/3\7# g+9 TAt{}{OD\y,atp Ֆ" ءu ]5nX_Dl~{\_ZɵDvDg[C*Cix@裓^駣ښ< 9A<x}u* ;k8y.֞)Dn&cqX//`6Jߣ? \kO~Dϛɀaz^ǽ}i{Df~u +h b0D]rPt `(@ 8`C!I W"H  2],dj "@`@rXExpFlA&iҗF]팸Eb}C^}CS} VWK%/t=1u+9F)-.s'}}!;;_dƗ$VH%#Ry| Mm>>:P#RsP3~?dy_I/oC?.ƄJ24=-@]QzgkLmK?p9s1.v֗!'_ mPE]\-DIMĶ b Q AaEJ5u^*!`` yHCL%ٖ`9AD½ N!9Q0A@0x1ҥEaz|ImE#@  aaD]ya֡-}aaz=ǕxrӸ!DLCBb$TC$Dǥ *Z x8"Jb)buOE!;MM!z"~"b b."rS-$A&` A"B#b5Zq)⍂%,,[D\:c5Ҕ'<Σ%<#<#H `CM2##IDb?jU\DNDRX$DrL PA6(BZ.~K'RmLbIeF%3Lf fFf^KSqC DD&AC"CX(fTLIfF&3DVBZdbkVj^j&KlTnDD|yHSJDgFĵg!̤tftfSXf$ȦI`@Fbt'E~na'EjD5>DBe((Heg,.%|ni=L΁IjF*RdZXZcG_H4j)c}IO%$f'aXªjDxDX!AjB#%AlAA &jv>2( f$6+F A|`*"D#xA죬llbnBs* [jj+jમ 6빖D*B뺶D8l+D*"R|j}C2@Q"(:uLIlF`|RJR$>mNx"DN$%8J'tm^Z؊ӒCBզ&Ą'TMR$LD(NZ-JD!RIPmb֖v-J6b.`pm2*Dz!l.`JN$ЭݮnFD$š٦fJGMOyN!t\R1A)SiRiNN$_R$:N"DmDrxآ.mn]RdB/N$0.E>-G-DxA$/DoآnvmNA׊+;mCN$"^L~ A%9 $BH!4@<n @ @h)uRuNO$ _  (~Fp_1m0D \1onך@D Dj@خ@D CpמD<αCqؾ1Dlrv2oI(0S:!!?(AqR~L˾ :qZǐDezLfr19oFzI,3E6`2DްF.f'G^D2\2?m:@D"2r:# pns^FZ ^xsȒ5+BsغCL$׮,8b[$J\D{(TrhxL&8(0CtKCoD#~&&AD2E@ZBx$WDRC8@Qd-mRd%?gdwowgLr5GRw?A\/0t ;>tnLcYHPi·69uFwI8EƸ43856<0%<'xxFr_&a8D0;W C&L,O$#0x)DDo yS8xg$ӣ F|'>/CL:CKDlP`(4\8 <8YDzFoo DIW>>gdB׷{7E>: #N;퇭4zᄌS;{>NR⏾ך~VvOd_}շ2DQpaBtbD9$D1">0v8Q#B "†YQHbtPȒ`Ƀ'!Lr`p\xT%-H TtӢSVDxq˄0 MHV\LH҄ zE6bȃ#ֵ{o^{p` 6|qbŋ7vrdɓ)W|U:j>ZlH;xriצȰg^y>Я؃d Ë́SLJA,>7DԪW>zucT~yPa_ƜPA_08 <\|%BP脎.L(﩯0„23 !(kz!*Ρj#)!"DUS\h`HǶˇz< /2*\6|8圓:YvM97؝\h kv'D?':j~9<-B b! :,>!0:gUQSH,!0_D0"Y@ 0_&6 L!h (DF@!>{.<=|ρ~Y|?BX9Q Bdz!j u5-=IQu!V})>"P cP%#8-/Vq\-c L"v+c<@xe}"R2QBWp܂KՃԋ ][R~l_S/1Md:Rr+RX0ŇH#+K v5=,)X9|A< Zfs ,N,V>ѕtα#׽$d @!PAاvA$ >  H%+`0/_0e҈9tAZ_ `/]X ֘?sa(N }O>D< "(ݯNѫ^">ozW0MKKh20pmGTip\]3iVFd`ǣpf Ηsg?Ёf{)ZshF?ґ)>!tӡI]j;@=%jUpu2kZ׹yl]lcF3a7і]mvmm]nsVnw]o{o ^p Wp?)^q_9q!I^r)WYr1i^sq!6sڠsiC]r?NC.uAYͺwJ T=}qnt'˱k]| /! P(]0ӝa @6Zw`}xĿ`Ey鮃2ۃAO@z Z@_Hm=7 ,!p} "B鎃'=_ 0Dt{%8x|t};@A=~ݽr"֏ *>a j@@ p 0f#N/ApNS bOSP?"b礆=@J AnZnV0 A p O!'Rqr%n'14ur!#3'2]&e&2?b..3Sv0{SQ"@8͠! kp0&@^#z0& 2"np|~%" |P7/<=#< 0-3Js7,BNNȔv1@,-O0=BA xoD!b;B.C>/3+)/ r` @Gs@4It??r H"7T88! % ܴ$9 :MT pMr"вYpD.&#AI3WF"GF=!PoF< OoItPP!KC04"&o 3<*SGQ#& :>DSR):o4A{&k\h5l<%pSc/VGaTH`P A: ,`ϱ ?4`"5Y{5EQIU/W"Ob\eSC!3<!bS'p"R#*X)5cG6uce"@TxXW'r"VX ]gdUT-PSf"RavP6*e?bGk Tȸ6I;">W4 _T_N@8 Mna1@ 4#2jB]Ur: "Vr^U :_Y!5R{b~!YS6F:͘ r0-)V;V"/#.6QE(7vW';%V@ diau 99nX3c>dGCV(`ZMX7!#9m8"m#e{="xN#b  rL:j",`# LQx@%a!B@X-ײd/!"h;/"68O bSQy:%Z~~)АGWEQ8B})}%"{NX?rhU%x:M~EGozu+Sݕ["fS osn Vs!LڠQZX!:~+XvA!Fښq'@ w `aY9No " /)#h`"Q6h9":΀QU Zc#v%I "[5o:k%uzUZ# biɵrCWB¶Vi"%Z!Gw b`^w"K[c`({ !'↋{_#b` "Q`/"ێG K#n b똠r]| HWdۻdO_ƑYq"PHN|n( ":! °ou|#귵!6u}PS.#Z3@Odts."Հ7}ҵTwz˩\".Y) 0Y;y^KGᨭ ѵ m!Z]q[ڙ=<kٟ%0"޽]/t};TpT"LP"@ [/#W bz#@;{}mU!fTk~~DaeZM6߻ h'" dTY58"hy!fq2#+&unv8*|P`=]pTjG`:r-Y灡P < VWĮPG|V/|?<Ƴz'H<6Y1ۀh& 6F('!RqrV@P7%BQ8e9ONOR-II7v)bf9ĝ`GRs<'Pt cu>^ь5ޘ#A)QAj$=i[p-7PiXp8dBe Cp:B U&٦hUVwV4BJxXy6V\R~mP(무j뭸뮼kJ(BEI*6PF>ȞVyBaR|1jmn B-|YҵMPbbAfd~Pk pɘUo DAeHHfpu(+Á>`|/Ib-E=/(.Ì@*PG-TWmX{%X%@]A@X@]-TmD31C&Dxw{+U=Un A*X,kU)w1 @A({\ @o X-Рc|-X ͣ``O^ UE/l~d.oEM:V > ξ}+4Y HBmkOd aPf06YoÉ"!LLDp$"B"+"WL >$ @ aC!VV8 $3H @E*>^E\W6 L5kH`QUBbxa@h2 #R&"PiZw=-i#9WU I@AAD~ #)HFs@Rǂ d;I^̟GJ {3.w^ h PP %~$@ܠ κ wT1Lx1Hr@]Y$#-( + 8RZ+L<ᝈ*@0$\9»&=CZ>8Hq O4]fC~FY(A0f\|:〓8DIF n6)Az~LCI~tg D6`BD@ C&lVRaԙBSC>zb-_V;rN"0:0"I Q h ho j3nHR+e5"! qMyy~dV$*ƅwazP{%q"mmo;ƭP C̸JXиޕqPtO>Hbԍ<xoZBWnӪ3Mה< 3 ͦN EmNKxy,&ָεwk(\g{|| qk,iUVn)|"N? w [+A|{rZ}87H8z@cK%pqnb&SwW& Y:Pn/Dx./H&5겍쨍xgW"`wc%8+~i`3"+fbIbOS(!1V9 F h |dHB!*,ْ v6.)lTH : !EEOnyX*q(`.%ɔTYVyN1 J./N4|'aoflZr|ٗ~XZIlPp/h)Y㸔v5 eqID\9~@*Uɚ g5rt☪ &4! 3PIRR'" ٙ-ЙI~8P pAɝ9Yy虞깞ٞ9Yyٟ:Zz ڠ:Zzڡ ":$Z&z(*,ڢ.02:4Z6z8:<ڣ>@B:DZFzHJLڤNPR:TZVzXZ\ڥ^`b:dZfzhjlڦnpr:tZvzxz|ڧ~:Zzڨ:Zzک:Zzڪ:Zzګ:ZzȚʺڬ:Z yں?a -p(٭蚮*5m]ֹ:+1T گ "Wv2W; -x9cnc [{9cƯ";AY!1l'S$۲.kj/{8ۯWnGB;$%́f%D۴N ):swO{XK!FVd[ P;Bdl۶*3z V*v{ P:IcB*3ɷf+}1ȸ;*3iKLSDٹ[{IVKkr*mPp{fG0 l'|IS9ʻaz@B*;&B-F2M:I6R?*f.i2l6B:F>KDOHG@PITMVP[U_Xc\f`jdnhmgsmwqyt{v~y}׃uي}؆yUj}ڎۑݕݘߝࠕᤛ㨞Ç˗Ȑ䬤洬黴꿸ѣÖŚǝȟɡ̦ΩѮӲնֹټھ»ԩ۷޽A H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Ma@sͻӌBm?Qy@H@ %zp$'@zL.ӫ_R # HI a!0K,a<@.EQ|#QR  #HTViXc D[>9`{  c#$Ɍ&)Jɓ$J$4:埀*蠄* v$I{ r(-,4"dGStN9Jjꩨ#60* DEq>y(Q}dդf6F=~ (K#^R hg=ڑ+Cw3GšU,:.$3^G#u9 &H Z#+2e*C!|2e#T -r;1UL$=) `jbH^HL_9xD !S/ԐGCy4OM F hhx̣gGR5Dv Xo0Ii :>ѱ$XߨI$> :=YF,a` (%A$I 9;[DFr"~`Eē_-|FJ4IhҒ !bpCPbB29)6YDi('E5GC>ED"PD>1q @%G-D}^Ad%&]"JBҿm"tT 2=5]%X&qJ$(hV_0iz|5x"t"C.Q!nCB5 U%XBA{ĭ F)>&Ӯzy'x*BA')`锘'ʤ ᗣdy0#j%_1MbOW>U 8rMp)A?-RYA!kTV+A1LIf'ZE2gͭnw>)A%W*+>m&X0Dj(hńWDVes{\ޚ-V;Vt4W 8jBۡ$dD)&F:,e'YO1y^|BxS \ ]Z ̓tvTexdaH79 b(Gͤȍ Tbx@e{)"j>) 0I @p!BLet!J&K#,/=N<)xγusܐg%5 ;U/ @#0Ж.| vcl޳W*I4~NR-W"4W;)(btD)&EPŢd25m @9&s͐\iMHZ_wVn6Hi]cfȏqDI1xD U`pG.Hh5{qV\Go-!"RվD*0D-柰G)Ha 6Tj^IPy]$!rV!V%$-rX<'/ROmX{$g @GϻޥehJ2أ"wgЎ!8v* ){/ N KCJLWz,%@4ZM['ń='<)=IHߡC_ljy%/]BCϔUBx{W4Bͣ{~V ?FAuE0vyJB|{7e#z&Vo0v=kG&U"a`# pvh&7 r|€X4+>z4|vAy&2VG 7h.cV(*G#x4'߷@ts!?wRA8[$~=7=H G@4xb|/c7%Ah#w9Dчp`2x2' tJ'O5p!S(X#f%^XeXY;A s#u7rm4&j$ TIӉ!e4|5?am3U P#(H# @ @kO"gQ<x`PX0up(9qx`ɐِ Y41`)y6ZewjtOR^9X o7KKBEx]{PSIaS{E!v#! c1 :sH^KklH Fxm_a{Xy%t pZV٘97əiIb`99ɘ陋y5IIi&iq>] q<q Q@Auܙ+C\!1{H{1!uY~Q[E#w|IJ&"Y JP:X gpc?yX I(fQW18 0v`ٛѡ) "z&j+i%J5Ѣɣ0 Y>z( $Se3|i8+d9" `0("%W(Cjbrx Q/hP c3r$ {2!*d`]0'ZK8Ѫ4Aj6Ჹ )1ѫy$A';Hr_8+&984[J ٟ 'sr] ѓ+dHm`azxr3+{1Ore `S qQg6##0u`b6Z8Ѹ);5)˘k[qKd&1{D ҶQ(:# U : j8P9OFмjbהS'̈)խv{OQai&ΉdʃAI,;+{71Yp˪Kk  |%n zy:h~;vrq+[y9 \K#4̈bcԋ$O$S  8TcX$QH w;jPA {sC! 1 ƟQ@blJsqY!9 a \P ` 0]dPȐ,ɔPZ` 1NjǑ 7Aʊiʠʋ2 d^@@c\@ ɞ ʠ ʰ\|˃\ȇ ڼ ɳ ׌Λ;}\ ALa5+uC9";.Ş%P++`bE|m=e5)+ },V#.BVY.0 ӂ B|sJ <Ζ4dx1}.IjML)0`dй) !'YC bmdm 4 W Yԋ1ՑY7a׊נ׋׳pվI !X$־sݱN RM8؂=:ZՋ A΋iaIڅCPٚ=N%6Zm.YlQăZ᧿$GJUS/[M[ bx3fϠ`neģ+v\THmhX=1=`j]! _KEd$D`(J 9>KAD ymuPEٕ C0*,Nd@#%Y8 LE*=ؾ 15~JBDn 7[n^NZpaڑ!>`<mB $9`b3t1΍L5 m@+a!K"<9HUmA2{裲hHܔMMA'sK^ZDy A"4dT Q狙qa J=(`).Վ2ێ$P^B*.negnF  `jMI ybQ})Nh&Oq>;p [:O X?LEܵ}TnC,=ov%N+DZVbaֹ"adPɁb:ٵe(^q]))QnK:[}y{}?oOhN`sn mϽ;lsߡhja}߾KMBM<흗1Go6p4a(|B!`0Ҫ&?,F+AH8~I a@ P40P P"&TⰡ и|)'=b¾CW!VB.J,=\)@y?n>¤$9{ǓƒHKB(IH/С#!.:G #r R) sV:61sH$ġMF;p!$;І%:7,3ΆtNRq´MMӿB#֌J*$C"0*/R!T/J47OהsTPJ5 5T+iՠmРԓϥm6ni $m$_E&@h$s`a7_}ߺ0(`O{?aKr(/9~XP^Ƅr(KmYUz\ȟȋpu5BK6(K4U7!-Is8k?ZY̛m͡!!oGi\ ( )T={{()>Y!HkF4>)}5Jr=5_xgO(h*CYI\ִI;s> @d A}.gJҿO#d`w֜oZr "B8PM!8d[tfG6as$-;VX!LJidP+ b+N#Z4  N*IĐ3]$h7u`@8I;"µ] !t; (buᎠ8LBi$: E<&Yh Z$cXJP:t D)L#҆x(' !Gj=q5kHNЇ 8iQN C,0<MSVժW cBSӡČYȉ>z`Uh5#KAeCa6l%iawp% \M ed7?ȕ7}c} O8D8LtJςB F^9-vvUXBh*NH6@iIQQ<-t7eEm-h~+h4(*-&xC5 s*(]x@^LrcbJ_70xr 6;XqWY | ,:f$ix/iHT[Lu  F6"_-ʘFpa$I9Bw$,n)g] 1]*\ =:=dzۄL!eo}9H$8`CGKb`:YnP8\V$@Y4(ޫ0DSZDȦF}iX j2&iH[ѧB=ɤv &T,~)FJj$5m" Y6jې/HlBH@w8q g,K !Pf8μU pA3Ze ν5ɜPgDnyE>r;{[etPGC ғosnLļ@A/\ ,5bjޡZ.((PQPU_{5d$T.P~- =BZyք$4 /KXA?,I#,CE1/hYVn/!{G6I52xԶg(q\^sCgQ<"#"g-}n\;Ԥ hϮ>h9 ! d+iկg䜎|(rGa]^а0a!qX)-p<`+ kKh09P@ c 4쎷%cƪ7X@?=$h;۽==QZ᳎A辠 ?(s9x[{q#45 #Q{鳢{ȯ./0 QID:(= (7 k҈MmrEa=|1 {C dL|2@(2@@Ud4\TD[P7Ē2ȓx1[ė(BeR0"=8ˆDF~1G@)+/9)K ߉0)P z4 C)G҈{ }L:y ndɖ$V[hGė@{*x҃`-T0A=@Xm7q\lk?AċEQJh0F|*T==p2\,0u, IxpB(k\CALؾL@4t9ȥ DC@0ĥ+)L?9 2\1 X4D7ܗT^,,YԎi||IAChKʤK4«ŗK\ ؃g0A2C;\ naNr#ƕ7_dk=d &`KLs̱B)РP1K ] Z/lѥQQ>[H`R N:҈C5 M{- uC 5!헽͆8ѨPQI μ 3RJ%PĶ(>5T˓ dL(b>O,!\ XKĉr+kG\7-HT]C C oZc ,?+Jh;ՃO(p]P6`+׳"%uo1 A,HR8 j kVm- Y:8BpմCժV1@D`X*RDk@WupWBQ D(9hCG Pˤ)+H"\ӑ**;} 㼈`PΈ@hU8+X툏J TVIEZ5 ZbOńӎTڕ<2 P5FӸAh;I<(  ZOcQKh%:% 5H2V P(juuۄ\"M CO+\Ѵ\XD ŗH+$ /I,u Jً ,u]aM0;S T}ZX\9Ւݦe խm}^@^u_^FrRՎ`ۘD]VND(UPvZ$"5K\WKل̍0 \ 6-S\`Kεی)~C1#x` 0dݗXZ^(!.(= wmLYMa09F%<ڄ@(MTޒP{Y ƕ[Q%=ߗ-눱ߘI(S::bZ("@Tg=ֆHYd``/ aY!Ө 0Q^RF Kh(٥ьHȨx`Oape>XF#HxɗNdfR0hm]PCK;6t#l-O&9~MF PF=xn,P8̦d]S*^=gb4 Vk.0I ޕOh{@ƽEh`$H?(JP4 Xn/AXHŰ@Y^ KЂm4Ո.`/B)Fj`ql!+꠸} RH>ҘG@p&Yf+Τvm8aYX~fŘx[1hIM]ͣ 5&Z6Ƭqsv8˽F̮ߎ@̎*dh=H*)ޕ+l)SY^"Xwa_>V=)SuzRK9 &A[#LE3=L*qTF9kOM>BQY ɚRN9FإB+-/ <0|0 kT`]TڏjR0I[Wp^ 0ԱȂ)- ڔ6HR,ueS2K>$K5Q)MiR:1WoLrQ k5]{5a=6VE^ӗ6p0@ ,6X;Ժֻ7H fǎQڴQOaQ-pD'EYRR Q mjdyJ36HXݐE^6 ?<pδ^p|InG;P3h1;ur\ܗ MJqZP~OH/$Ŭ.C,a0a"<2թ,ZU;ͦ6"ncsl"!ƑinY%Cd /\݋*2C"\AdcM,9ӹv Ŧ%dn[d"]Ȑ^ZD&aE"WLJмp愘y[&A lJaL tb[H^G RlЂdA&;;>67i$~I+8 ,H[zeȟl)Όgheum+IČd FvHf6M\zK͐ AuD&֎$583Ue SUlйǯV] off7KC6HsMeJЙٳS$oQ$BeX"ġ񱓽f?;˸}aϴbj{j|/=VaKK$+sԂ؜6}6V:+:@yB~>"P_MJ ŷ??0m0܎W΀BudCNY3ᾙIgV>/z?|[HvBHᩄUA/1H.D1-}fY'47]US#4F4OVH$ՖX,WD& P8I6 IH-"~ܠ Ad#DSJ]x)XdWG2M( beN0ړ#~mH"N8NH$IddD|cAlWPR7N:8$BLVDMBFAPdf?2NE0U?^bBP $ ^'PAFpdH^ux4GBN$]֥]%m/aELW$N^_cW*`1|bCP8{\$0b=RE$G"|BU @1V۬?v#%ppgc|ctWPAo rz˭!Vm$mLUP&8'$]f%pff,@LkAt:'~~OAf_HBvc$gr ݞ &[A*B"!P7ru6PZw XgA$w'ƨԧ`[N|0gG,Q IdD(d`%'XVIg8(D()HE'HPYN@~ʼnF'`錾)ƩI~rΤ']B%[f$\fpecđ@NiBHQ^EM{)Re>$Z(*ƪI§FU@#]%4SbQPjJ|,H_9AabEffCL Q+ "K@U`#.y+M 8ʪ+ , $,@D&lWqRAzPƄ  S<@F,@m&Yc*C,y!b,ha#Z\P8" @l-A$@4@cHB8t"'LA%0@ƚlVH"ln|| V$(@,SL$@h>>PAZ Hm]PL< LAHA2 &"-b$HAd|,h&$.i/v~/////Ư/֯///00'/07?0GO0W_0go0w00 0 0 0 ǰ 0 װ 00011'/17?1GO1W_1go1w11111DZ1ױ111  2!!2"'"/2#7#?2$G$O2%W%'&k&&s%(2 )7AO2**2,Dz,2 AOr+2́'/,3c-@O s++* C4S1g-AOps+{sd|2LKxA@<s0A#D#33C'G/-@]f93Co2/;>XhBC2@8 P&DA3|RaE(ԸF?=ZTSDŽ1H3c`1cH#Kn|C'F HbS+F:jUWfպkW_;lYgѦUm[ojat ڕ!88%|BIedv(>-qSs82qʢ_!3jt2F8]qWׯVع簿j76M{svZ>>|n@OeQT U+y(!,^׋jjm46,K-*PR(K.?0P 9A QI,QnXiEZ/J(Bx8o*H#ԀL2)8 "j8j;~4r84Q·- נBkn,7Zs40͢JXILlL4q3t?4Iʋ >{ )<9ZFMҴ)NAa09LT":)DSi[qU]y_6V6FDz#Q? GC8Ƴȁ&Jx>2Q"wjAtȅnݔm\u*N4Eߊ5KWP-=ў SP%u$dk5} `F&dmAZ X_LYy矁Zc8*chZ>MG %h 1[$ys BU!%Yd"VA;v3HF3ҁO4큞"ho jq ϮOע(]Pp*,8.zOU~8z{J` >\ҰB;Y0Ӕj~tE&yh BmsŅ0$bBEN)D CK44.=VS!B}w,Wxgd@KS$‘!E!cCNDȀ< ; h@ߘ9Ĉ,# Hꏑt#!IIN2g=J,I2MQkZ.HZX;ȵ [ATƧAd0!dHPL2Ƹ>4I;lJ1iȁ8a"vK0BLZ"Ė,XID^Ɨ.;Cydn4"AYg"x1'(0Q/z%U`ͳm4iЂƲT'AK E.OtGAR%%ั+Ր3P8J0p V4T+͹' Bу0P;rO8h =*,`#02+ ,%C b"5,^ݥL:kjEyS{V U\%K=TO:mY֪^U!݈bjq X g+T"L5iQZ<+a27$@*NCjRnx@ 7f9;ȴB &&"AU#iPF d5D&0ITJcB5+/5܁l5 n{]P x*L{sdI/A{i]qT9@m:h`2.-Kރ*&.xS`ODY TTs Z4T푑d%/ɣpiض#.r#FK!M bUP D@X,8w/+IdW*/R+|VțE9DYЁ$ѪbKsjD&F; Ԟvm[j`V 5xQy w/:@M6le/D:J=LˈPfW0vŵa3[%uHg,x%>!q]a{#ޔ II[8{<|4Gҭhv7(Bi?\L5~!r8z(Ri'pޣ5f:T65BJ~kno\ȕ>{>Pg,'"2"o!&olˏ]n-nI.kO` 08=AWVbF-Tp⩓(d` l)Fv<|iܪbô뺯o~/BFIBo:Fo%O-N̻Тb4"*+0$>ؠ pLEѨ0+Ɛ* PoȍB!1%qD#,Q-aV, E!@!th#P*-}"a1/pql1AJ$ʣ( N#6\QnA!%Q,AbqO#,2!!oBR *(0/+b5m3K44O,SBj骂+A(,*?ҍ:}|.!dp09W67%,ܑ;4hSb:==᳴l%s-LAUqb$"sL!r hAU X" 6 pg>@b@Vb DQJfEQT3(XD )Ed BF[FkF9<DE HT,THY^TpttAl+v ?eP*&naG,j CLFUtMk7+4NC#tMg0+T Jy$tMONPGqR<Q5ꬔ O#`!tHS=SAUh&'bTۢ` :4^Cf"R@/C\F29e3q$;buxU`?4X/Y#Z=3bt4 +5M^6b ~8;xfZ+bub[$5I_-YQhQ$5-I85T!6b%vbE $,HB>\a)0F1"S*hD" 55JՓB|)ZeJb^cux8bV,v4fm!5|+)Bv*ڨ\p_bfG]= $)V+v4v)v4img3 ,eyo Ilbwp p"gt["IM^V Ayd#LS"ì)Z!gg#)j-o Ci#Nt+bH\buѶu_l΂vWaiuu\bb*wjBTj Fb?VVl suWg"t_vywb6vYw+uiR#Z 7~w~w%%;q-"b.#V>qbrM5e ./`v\`r17!J)N#7wwg/8'`d,BWXY_3Ղ\R#`vf@RxUY@]%'AF 5VX v+p@tX*X2d n sÆ7x7!- `n \ zm`~ $ ~ 09 829Ef& x`l؀4BvJ :yiE:/@*&ؠ2 ~y $.7䗃YY9^i9!p9uyx$oو 7=+!  :"pڠJk3Ϗh~ MF)*Z9b1zٖ?uDӠO=273mq-p0z,cy?0:zzpP9":zzl@ddm:麮:.z;{ ;{- )-1;5{9=A;E{IMQ;U{Y]a;e{imq;u{y};{;{;{;{;Ż?! -H[-C@;{-ۿC  $<|+ (a%J+ 4|bۿA5\Q<B `@“]? ` LF|9- !@$G\t\ŕ|{GCzI7#a" < VN  *| ;{| ݑ"a]~IKѯC0\W({\ 8><H @ȵ*@#E`L"[I9\ }4`5 'GG |ٯC|B@kE׹#>@G՜*AE#*^}#ǽ;5B `=wF؉ =~-kE ~#B@b p*T@`#Hݻ#:?>;" }W( @ `㻂@ ` o~ ~h*>A -ꧾ#Q i( B< @W~*HB}6bSa# \~C( ӏ|+w~#$!i| {5FA_LE*<#!?6=\]ȉ`#^eǯO?.f^ç'ǧ+ `5 (6MI?hR'M{ >"5@ :@:y枋n槓I4:T(QQ((4ѤLp:zAcA! _cwd$T9ST P7}D6ߌsS,ʅjr$0UIGk2IH'\=#_p6tG D-:|Tc!M}T#G@!L"=rJ$AXTFJXHH'tEe4@ry)%@ {p^;;Q (pKzIH5KP1E"ͶHHXķN_}gpWkM[=$O8','ͱ 5e b~;JM# AA<0^ U")Z*RgxP#x RB\d@1Bq@ӉV(y$*B2C%H`t.#N"$SIR&ql:2K#U $DMI7X PJPa$dpI":rH'\"#ɸX :bAAJ x3_$`qf2@&P?Ax0#L$bHe0;bIIo"怸g8eّ?|H-!xˇT#J\g!@ ,g!?Ѓ t EwJ<G?J$$:Hב3>X;85Ÿd$߬GD\z{1'@* JDbT0!`IEC"ER)S:*pUA~A9ǎ^eP#;NKP)!E)0svĤI&ie^];281_Ajİ:9b NLlGʲ5`gaEu)&k#͇u@#mGOV:=W sJJ78!J:KY ݃pw!E]ZR|I4$1-IHT1sb?!/.Rbz|rF$1@"5XɐFע?!erٰEf J;"0# >ĕ%aGŸ"R u# 4 C'ʷ?r{lJ.LIuKKKZ>ER+utKW!!EV*#1}Mׁ"y/Jbcxִ~I%}EbŎ?7>ɂ~<$`bLg_z)}=PjA\N"fbK(h R0IjY׹.&P$0rQ0qfF$1OAk5.FwjdH   dppC .q;dƧl[jƝO4Cs7)p$>I;dy 賔 Y.wSL+kjlWn=55W&,MJͽa۫l G7W=m ;F~U\Ï8ڎN~X'N떫1) I_vy:8">@O?'Qs=/_fV {F:sx- 5oOk$.Hϲ"~”A!]#k@pHu vSx2mF w&x#w!!Jb51?M!m h8f7z _Ql/2Z:!A炅2H6e:D<8??sç"7KXN;AG7S|Q(Mgl!p.!}f1-A~c~ R<xH׷;[*L?QB# p4%(\~.x6xh\a\IHb4h&ަ(NGLUbhS{4\WCz<{1`Rׇh2XXq1)1?fNČ#|]y8}chg8@*}H `0g^vwXIS]X}6O 7zVC|/1V.Q HJx%!qAaqĊ%39-xWM_:M=ً.!RI iD8!э8N.9%],@5Ɇ(3h vUqFP{QCi31F37q4_%ahr}(i_ 9ّ#Ui!$1ā1mL8a0dA g)9t\Q{jy%o E -f2F6GnG0se#TQ~ j%w* SNm%>ݸz9̟P _1'LA {$\+SV r\u-R/q]{ SQKYVJ0(+7pzKY QQ+1yaDdGAZ-Q H(P]=pm]ѰJqQ?R/]I G CN9$뼘nQT~H2鎱sWGAN܉ܮ8x6ޮ$5FY`~ouFf(NJ ) Kڈ(^q_w3Zw E%OI>%:2A 0ml);+4N2^? ~:65+KFq=f1Z 5YV:{q`u7Ȝ  A@b`Bz|Q`X#O|@d=6(@G$"=f8pILLR% 8E$IDNh'OSrA$qO%/TT$ю&"P pcO7'QIYfDaĉ/f`4L\×,^ٳ//q\HKS>yJڱl Lto'VG>5%ܠ'&\ DTis4rCzF@@͝_|аΠ+9hz[LN! JCK4 A$Ч&"EkƾXB (G "4=Xb7jTbq_k;B #:r( )# 2;hR&*l{;‰-92*#:i8 )"4(LM((OTr)DelF=ڊ6 SquW^{բ;:̃HȬ0H6.1b5 N#6(;RP%L>A!4_Uɿ:d,x`;MN9k@= cX!z9y{—_߶V$}8bUb~H\, Ԍxs-\܃x)qF4qhQ+n5guO$`#"I9믑)H *LSʃT(!(jx0(#cH°> 3<Č/(HDK18" ( $oj$$ eBH8p 0D 8 l* `SH!MY` V%6#8 I/}AP xE$ĊG @cT$h&[H AA`DdA{cH ((ALFR@D&R1Vxk^;%&!Ѓ H#c GsFMIJF F!%vӝac,gA L79J*Rx,*A> 2rA@LuR 'IESg=U2{S1$!OӟH zP&'AJ9Ě!H$Rԝ,G9W>TDVO,Yj0@& .&/!`Sl 6s7g`"*D +uH@A *90?x" rBdYtp@ͳdit$+P;F}dV Bӻ&VelCKO=LASBH&0eؒR!liUBM1b(T%im˘N WRRbHC@hVʈ;T5w/y*RфFqȳPWQAbI$wȂl)ڝ#8BVP$i_m5Q"]7S`VH[asep4|4݅;lZ@8T]J$nTs $BFH/ [LˤW zHr`X[5n>$c42:؎ XܷE"laVi:׾\B[{C4cm/Vg6q%2Bev҄LS$ GPh>O$L+1%;%=oZ @K 5|1#it@'wl`i{mRyAxbycB]}.տr\H7)mCdi@^b\|45#ocP ij>~Mt\!T<T@t@L|@ @ J(pS8Qy)ӽ[CcHAAR?n322c +%>"캾0P4p;?>A5I42$ȿ+[C?C@ DADB,D3)pX3TAII*`x) l\;R 9:B7eŎŽpdBQ< BusEX ðS;RR y@@ ? CFlFmFnFoTOؙbI?HtT_D[:])qRėGp2ը7.U/;>.ӯr3mɋT .ȈȅBY)N8N S攓NKPCGVmVnVo] FZLTI=x?)9_qOX*qˉXrz>Q}RRriU0Q{?dUbu]=5U+SP[f5 j]Ҥ7V]YmYO܃)1 "PIwbe.M7mҰ ۝jJOXܼǃ%T V&XQ+{ } A=4ϗ[[ )X2=t) RqlbLT)Pmo(Ơ<ęQL+WМrVX郈-]]'P@05[ط؅PV5߈+] jҕU\]^m^H]%P),vL 2ZR: }؁HM'T .c99^(Xz]hBҮU h݆$T:㻗ӶЌӺt}Zہ +` ``uaq@$`X$?X=@Qc0OMtY+Ueܻ&ԅTeJJX _M`:};m[S߀j`5^c6nc7>ա܃Uc5whКȒW^ >]5Z5X&s_0=2XU?*] [#eĶbdO:_Uc'9/+;7e_e`V^}$S6@)ݡD%hYX&5Z] T :٘X}UCeӃ`1I qvÃۍdXkN\4B&FKS8Y ZHMb^ -R-LEѓQ5AVB)#b{ fh(9Pf$Y$ha@a^y8sBt;jd`$N <%tOpΥXV@(ZMܨg]`.Q.g|FeF[ӎз% =ݙfH͘Zs_kkFy`Vf^e(@k\[dTB6J9(9"%Ph^VsT|7X3h<ݥh%Ό=T^{V$خ\xiZEkNn^nAD=]& J(W@ޕ]4 ȈJΉG> {13P)(ɵ2+LY>('MdiӭbRdp<&pO+v&;ٛSC&x ťen/q?qM?EDhM<1qy?.p0k<^VPd+; ;@};Z*&:8b ^Xo* *ۃN؞m y[=V&AkBRXi%OX,GqB/tC?\U w]BxJ|oi*?H$XQ̺8`s 0@9-],>FYorN0TQqqO$%hj#_P]e5_Y=;B OgcYQ%Cb>B>X%_CtywzwBD_ܼ-5vR 'XǍ[7 =Ӭx^^go(r( :sѣ.o'lu(wyOGI~DjF1RkdO IXQ *t(ѢF"Mt)S$(`@TbFa LQr `c=H$!]U``@)Pm L@4   3v'P*i]J6A Das  L-)4ΟC.}:֯cϮ};޿/バǣO~=Ï/>ϯ?X" 2ؠWAAXbrءKIX#+آ/3>X"'Ҙ;أ?C h#D"K2٤OBeFJYWb[r٥"QcYgosYaڙ{ZZ"4(BRZ)Zrک‡)ZKڪ:⚫ ic[l(l۬BR[brۭ߂[碛ۮ[⛯ۯ\# 3ܰCS\csܱ#\'+ܲ/3\7㜳;ܳ?C]G#K3ݴ}‡Rk2RSQ[spvM,k}gHoǽ|1'mݷј-H-x oݸ<#E~/b$"y2Mnln'qAAG#"59{;b.<첗3"-j7y p#$1aCOPC2}zgS÷~fo/6 ?2 #/6l{H#? "5@|pʷ I tPl80l#DB"&[y~3j0͇tC4a FHl-C'6 pKOR&l`$aO /UM p<a>AwȢ"!Ah"92l2c+ QxuQa[mU1AhTb7NA#9#d #@- фY06 rG= mِFmFkފ7&7'?a\4iʂI4+_a$<[z)D?HבIv@\iqB!Afqɵur)oEp%5潔61m r[\/"~C^(=lL?[W8&FT,c!!'ӏ_r&u%'}\n"w,?t!]M_DD^I  (\^!%|ܕ^^*P~ MHф5{O'ACT^iBWB4ܴ&e%,جY9,< VC<- MC 4~L!>i!M <Ah-3GHh:jMAAP+Va\y¶ne+Lq'&"iCjs:*P*(̢ۯ⫰.w؈'.lk1jCr>ěNxi`q }}L*mD,] پބ”ax$XcCc>3 §,J(Vj4˪DظB̪gi"m"=:MXm~6҆MӮ'4gI'I\1Dk:J6ѾkF}i(Cy%NlK„en,AH`.ɪڞ""(nf &A ⬓,n,I "-fÊ *6.'Drް">oN|)-D#ں=^6肂njH/~x.&n$I-Rl@KH4jl%i@SS.un]*>a-*bY(.C,B̜lD6.(:, 'C- kbm/v/~/u1LTD>hx./oC"oYZl4bS.slh :O/. 1qqNlILY2z0[.1 #`Ԧج0C V-C0 q(vpP|r^Lp- Ar\C0Jtr(r 7Q˜/#0B1rB30-D%i[ LHdQ(6APvq\O43?(@t.ڄ2(|Bp?D63D=C0jF Xr3D m>DBg/ /DFC-BjsJܲߞ I'<׳fN3=S MK,HtJȯ/’nRD{6F@4piD0BxsDErCJBo5I fHFKPk Tp%CPB,@__MuT$G^HI]vL| h5nZ+@eOLhVU`Cj?gDIHBq]7@v\awOn KI`wX5ZR1lf4DIJgV)'{KC|} ={Ih0l'n.%n<:w3vKI|R7JLK#lPೲ!]Wr>1jkPC|s/ۧB{Kt~QO23D7>sqBHSOuF~`D'SŃbC8A(Dӛ`} TB 0P )V\C,.@0A: P$fTSVzkV[v c2B), `HFed"O&-Ԥ7훅Zub7*~˃O#EO As5c.ҀHQdLKFv˂}CMg7n-OD: 8Y=DMM4w~|s}Nv!}-xۂgq8ae[{Z♐Wp&˛, 4Iȓ4hd"Ҋ FSHAtB 3 1bl!`L!/Y@+8Lñ@BlCҺHH;!-E|1Y N$"qȚO<2<̑J= Z ) %DNbjM 0ʢO(T\s tʀ>"(@0"=: Ii*` m:%r"S!J~ZT4}`ثf-cu$ ڜuK-끇ca kY,Mt-:([r rֵb6,ݴҠh|Ӣnf޲iYr!md~6p'j/br8_,rqf yJVy]Ӣ.mj+[$qڞ,߲٢5VcN i#}V2!&M!z,<"Vcw= HB%x P2u BvhNt}h%H>Cr @7(u " 0W*$U b`hs%(\q=Lws 9 \-t$q3G)^XoPXE "%_b%r2ѐ@ %j]SwP$>wZ 3i!9`Z8,Hĸ|d[W2&XD`s|"YDP/۰ .OKt2xoh b,h SDwِ-XRVB`l&t/DuQd0BȲ10'""%k C BX YHC.k\'ԯ"l^rt!q%m $t\G>5 $H O!ܟ,"R!{$VHYo,KP ,r !AYu 35 yf&CB у@0L%;02z:_}*3!vZ&[ UB:&A%(yX"JIx.#(H.Tq!vү'_:0B U4*»Ld. m9XDAEp2~:>L‡t jJZ$%mNDꮡ)3[V /YV6UGAѹvYv}OW%WxBvy#(JRQZwW᪙Q[ VP^MZ) n% [ސW (ATwALV jMdDAieon݁$$|sOxm=ٙ zd\;o\7!5eH9]@4s;㎶ @MY[tJ2Vd^z iXWX@7YD1UdrEl:/J/LK#p-<v :tx/ל:ا.v+7p4 X\OÀ~s+KA؁ n&AD_'"A14 g!~t'| x}%yʛ*Clj얯mI($0PP  :bnݮ PB|0 B vm!P(b@ =>%J*P`#y ^"o-" i +"-"p"#MQq+IBQ}EQ1+vK ">"ϐԬ0* @+&0I~& /*jD| 0Q bq%,&""ٍ! %И(-BUKrm@RR6(ATr%M&c&k&o'# l1*nKގ|P gy -*ӌqLe ~"J1 +":r"u q!*&p Q#- 1'/2gR//0&jP+' 2$I0,R '-"#= -2#p(Cb!!}% G*')O"1"$P P!n+"88lS99FG*- n !3!F; b2eB!Ram<;(;1R)Z3 Q1*ܭ#0G,:q3#sQ 4SAAzB!B+B/tX(a@ >Ts H"j: n3$ "Q*L s t*d4*hz"17BD&J.QB?+Q*OO"0#0QuHr+ 4EER!+Q%)AA""GTVgVkVoWWPF&,(=5^e*DNr" %#pTH !TR-bMSTUS+FU .K}NQB'Qs^^_U_ф I'D Ru!T\t "qEuw_)# Va23S.37t3k\+MUUcWu.oYAafkfogsB_7r t"D /= [U,TBh$Md3 q1dtd\iSv]YvD8-ZunVnnKq `s@>oHg1*h#i-o5hVI;mhb &RV*]gv rk`0\seqlWtv_vEӰ<wsWwww{WڶH-b#Dot5q+bqi DUzj" vPu!` Am+bzE5j"k|5=ttVE }u@?*[wX ؀K4zocb4w7`XhD\bQ N-ޓ"n-mv8-}aw*{w{؇L1 < M &TaSW_-=Msos +L+T86K6U IB;]c@B z؎ir {S-l+D 7!)س.v+4 I*b[6 BgQ׌ scu9]ou8W[ٕ_9k@uv:!ٜ8i-&0-j2؞+.")b'I{҅b-kxmg"aYǙ:wo} z!#Ɋ̈́x*\ž‹/"}6u-"7UK.3ٲ4ڣ9(AMX:Y$y AsR)ɗo[ #+s"'Wy!񙫢ϘMJc:&_p!%UUsZkE/xrOz"^k9r%[2X0 W*m0X =y:"ZGy;OY+Vv r:_OrtՆ} H!{Ip }&nWH@ε;Wp8&>{CW[*7hZZ!$i¨IXuڪ6)ZdzK+L;yei{?[z B(&\Ā#|!7߻#07\wG19XA׍ UY!T`H{*L'UUƵ|QvXڴQԂ94@+Q+6E% U::X8Ҽ A!*A\*F )M\7"Yכ eMh&Rsͫ;ox5#Puٴjq>`g;FOV=Adzg]ej)AOxɽ] ݓ LjvzI*>] = %"`Ή`*~ 3< 3\'QU?S+QBdhJ AuD6dI%ЂtaP*HVR>5`#Zx`IXJQ <@v[0 Q čFta R QKH@S(1`5XHamn @H,`_SHu PK hyKlRqyT55n-D 0iwQzqOFpF 'ҝ{9 z!jtAi~Bd005zQ6B(S9%IeuJ#8ABuh$FW(+.A TC*aջ ʼ+RQMe 7p']DJ ،wD-gQ42f^Z,7%31 dGMF5ejHhzF$+UGd+Fd(95ehpM矵jJEJ$8DABս#mM/D8(,'wHCx qM|%M.褗,%W@_n&ख$eys#|,$RtB|{U",K1i"muD>L]mBڏ{XO 1lo>qM'{GO J2!H 42̠-A l:1< R ) |BcP@Clƒ 9*q>HBlb!` v d(I^ΰ 5 ^r ) x̣X_HR=Ў$냍@rGNFdvl, QM ?XrV"^ִ#Rt֜i"(JHI M!L2J6&C,UF&2)$(HNXʐVbP")pRA"(Ј>UpRԜ@iy ZQE S ""H3'őT)?/bH`B1$"LCDH B  .I [1Ԧ @q!I_S T5弈bI2P-Jf"xG cV"?mڔs*Qk6J$|u[$YtTU[; |VԪŠ1ė_Bx $ Z^^%s+RۄE}{,[9vMzУIS[FtosVCmEӽ4W5eA@Jh$i?_gڼ/bq`G!AQr\!g$f"!/mh\︵'$b5ty(F'񌽷{`n2:!7x p)\+blh "hF!b4 IC dỹBa|DJ AܯB@X ȂE"Op{@(> +>Ͼ{< QV4RH;$CBۂƊ( Sb$quups€uSQy & Ȁ(/(- ؁zCRP%0!'x7h Q{ m`_"؀ HkW1Wdi8Sx7dXfxh5%ZWWq1BC} )ri8 Xh`52\!Ѓ9(917s@ȉ$(#!A$"9< 0t=1t[!t\AX`H$RPcB&j8XxȘ;†iv?wbNW7{6x(;H$p~灊.at %-r3Cm:X"S@`h {ZX Cd@= ِ=aцiao a]F A##b|xӍ!DbGX5n`A9YIuW@@ H"a$ҦV`{׶Ed$1m@5(8\ٕ^`kXh~phA  K2#ZiFq-sf"Z顔hV < D0{UHH9|Ym]yd8 a\ y[z)9Œ"q vbM іBYIr t):ɛ 5Л6nј'!2,X`h27 Y`O1a]&ĩUÚ驒9Y4ESHqGk?)8v %#)*刏2I!4|V3))ڹT ;@7 \;j\w4Z6z8ڕ)(=1QQRwDwZ@sƞF]1Ȝ&+.ud U-A8g*r);9zxza  gPQ7äYs&~ HiZJi9 Vj !q.jB,F7|\1&t4|ګ v;*zCe>*1]ȟMzZ5q((j֔FcexQ^(|0#گ@ԣEpM(iŬ=>1XND`8gW 1!6h%:sצ"+aZ/7$=ȥw]!,!@B;7!!1Ё:$9nb\JV{XVY5Fr\Ks>P@+ #̓gzcTAMTs#G:<22חYe @I3C{)=2L?, 1eL`b=b-F" ud6#B c#p"0B(w=c__*hd!k؅֒ f]d]#a ]#@ d7DҿXMq>ڮڰ ڪ1byThyZ>*or1*wEнz0ԍ$Hݩ yKۣ%1]mbE|ѝ:"!XG\=]:v sܽ6 s3MM!eA\ZKЮMvcQ<ͤ]~CA &C}@f! IHLZ >=4>n$I:.#CLnUANnV))\^P(:T[!NfNApr}Vdbl%s~>^~舞芾>^~阞难>^~ꨞꪾ>^~븞뺾>^~Ȟʾ>^~؞ھ ~ۮ\ :g>Ͼ%z0i)NN?Z@SbL1 L T)@1RS(J{ 03/d% >YFa /2O3/ڒ`9Le?f i V ,CO(5.O@Oc.{P%}@PAHERA >QD-^@FJlyCI @3Qȍ|jK ,!1TPEETRM>UTU^ŚUV]~V؏ HD2U),LXVMɼ ,PWR!dDg%~@SH r&7'euZhҥMFZj֭]6cTЪeqĸv}wcߣ7bwo CBsPLrDCLE7G^zݿ_|f(0"~k5 .o,4Ψ(@{(>& 'B&& |$dE_1FgFS$X!x*p:Rη#Сx@$ijXY3$L3D3M5d͡(@ 1ȩh7z@7J˩ tРdP;: "SO?5TQG%u"Jb *+;oIOχT \u%т$@A2D617ZXk6[m[>d)Czu?ӭH'e׭|؁`Wci!,W$ ^faEJ=Уծ҅(WՊmXP*ڍl  XM#g:hW )h uVDnLe`)| PXR1fm߆;n`'"OΘiaHV> (ϢMOh  P%ň$0x *I`X`   ؼs)d h ?Xts>.WI I~TҲ7Rmj&|G?}$bhJha4BD` WD l"p9 \ )ȂEH„(%R!~\B?yzE(pc*rE((K4$&(a 2L ٙ8G:юw' *P}tۃ!HȒ=VԈL ɒj1D.;! JXFJCB( +*Fb%Bk$H& aNɆOYM`cJJj V) $tMd6_5NvӝD4gi,$֐GBRTgAPL2xIB8=rH\DXrOx3Vb ,zƒL e!IgA z!` ft0Bt"D2^R)4bEK%bfOVժWHT BHD2"B3Ɓ`O#H3)VWC,ʲLvR!֓2$'\@`zׯfA\Q?" Fl3Jb]ahq(i,C RjVu[ַ/YϻQ!Z!+d$uS؜^V p+M Up|2m% !D*y DA j%T- Eր (8Se,HvX VH,J I|oJ:,8`F+M`ӟzҗqcx诟vѥ Pܭ쑟:\'#9c>lH7"wtAD($5YMk ~DˉFsU8""7a|dցHv;4D@x)&isף?%8I08'#@h 5{bd:; `=wq; Di`1s7sy#J *R1$2Lp$ {@i@{A[@7ac (/3p! ©8'C !&HX"4!Dċ2[#,K B/H E-,&L2_`F@C7Tƻ#@xY$Pm*@z: ԱM4*`I5j$ HI%0犈ҬjVS ,VOHKmU' ͌ՍY+zʃJJH Va dĜMYK5L>iHg 6֕eٖ%{x r5WCY%h/s wTg!W=\uլG~eT-eWW 5v$*E4=+~XOH+}ښ$ |֋xV1YP۽[͉8YlKY\0۠m,GǕWXZTט [~ڐON|ҭ}{dJ3۬ӓzۍmքǘm.2?:$ʑx(f1)=u㇀DQf70@Gv9n 4͢Nߍ JZl8' LXX) $yO^~B0H8`&p U+`kR)Ѓ)0v?&BkF/|5Uvnor3pc]gve6JFͮZ#UnZXreZr(0Rqw"IHp` 24O:4s<#S$@X2 *Foq+,6VsBjLm r]e^% /Ą6x v2Tpxvl2?w#`Y*x'yx$)(iflt? ~l>٪,n&UI]dx>lo5R-G@-2ؚ_`Y2=!H5h3pwFm>IFhs` a wGIzm' T;ta*PI0 g0Hs+Y~U-#2<֜yW쓅$~u+/vǠ%h/NX pG*vOXKhsݯpo(hs?FЁhswH~Ȅ '鯊~p6 쯈_~W @A.E'0iNׁ?k@t „(I!) x! t`K>*$pɔLl@S<0Qe2IdR&*Q`Ŕ!Ldb4"MIu?MT0֏OHr"M649aZ d)iL=Z6N.l0Ċ3n'#%Py2ʏ7s1,<}NxF4j'*aA4섡1fն?z7ppPfZqOy1n:ڷÖ4H=Q0O%ip${0EP?R٩ %W e}~ %ARI%@wC2uZL}4D4S*=J4E NXua!`b\G^TJ$ؐH$L*JUaCׂn&wa9&4!*Ye&DMVgqLJa)n2'9}2&ݝ,Tgء%f*w>z)zii!Q!GKLG8}$ tRPL]^O*-1*P^$#[Za E+D>0b`*K@N+JKA/T<vkC{,FbCTt,IȄ MdCHh0 zA*% r,p1B(c1hDЛ]=>/U?&7迿 mmԹ9fyY`! SB 6d"E!Ѐ.!\yDN˜OP0H\X6Y SB (89TX*RW0(>*Gj,?A` dh!D(G(@@@J HGT0q (I@4|PI%1sIr}qhɏxOv&?R< *c)Yj>K%8wl. H104q*Q\cxL=;Mx_)@8L]E!^tQ7% 32\d"NT !ӹi:/ Od<4(7D!zODT$#A(&5!JEkÈ8 HgBʆ6(BT.*R0l"SѡBhEԨ HKzRȔ6NjPU)S_4%HRӪUhUߪ 6敓VzVVTlu*Ty:U +mZQ5akB*"llY KZzpRPblˏ>sRHQR02++(ZQ"(΢Lh/88ԋޖ5""cBD5 #t){aBв:?T76 2_|"|fE D PSL9(@,Hq_W%LhRy UaԀX%F 5L7V'P|7(h&7jY1~[;@M>q_ɸ 6uV|''#$B&9l`+q0%E\8/xÑiP,Ea1VH)yKwMSwLL&D2 7}M& U3~~vc 8&ĹU;CM:E(tX4&NӁwϝgݨq'gMnN_2NwKB@ov?:'0қf~;A!u&BL] '$g^~Ň0 8qDQ䃈}hB:c(㗹WY;AwEEh\)Va!1ftBݙMG,텠,A$@ MAD 8'`(@$A8@ ې &$,q' ^gP ~%LDAbQ!b0@>@( 0@ r% @4 IIFD!!MFU6՜ D #tF Y_\bB (4 ffF??dBp=P:I: JIIBAFG-"8~DR"IM G$H,CB$j8KAP7;%]֥]ec\1%_eJЁRe`2AD>B!#F(`:XbF gAk`cjeBDfrb.)^Dʠ$(bD9XB|f0_Bhop&UV$d,ONtbeeDj.%\h&B&-'pQ\rpjt&1$j)f"D&<&(0B@J\_'}֧}YD]'ey^R&p# aa4(h#$aJsIEAl(v>B`jaF(fH iBv{z ~Qh((dk_c((D0B(DRJ)zhhՌ*f'(4uƋℑb%dْ$7&uY\RƩ)~ [Ud^TffhB(lRX \"1((dEi%b,&f,*D4*fRb*FAĤ^)oꔪ*:b`)ĹgȧVlJ*DjjNF+FvE@+Ɔ๮k,q6Gp(G ̀4fDe&`$|&c* BY [D",I(i'#PAA\,edlh$Ē6ƽFkbAP+NF _IkNƚ"DɆiJFc+&wVVlfƶd'bAN*Ӳ+ْٖ"ٮ$m*ΫިB*Bpk%l&bE\N6-n.-BD#E.q.JzF-ꦤ/dlc\dobqzooӾͯh*>F+^+D#-U_1/ T 0|f ܶ֯Bh&x(7'B0.o?Vj20ڟfocp pX/Ɖ6/W@?+@'s=󬒄2+,6/q 26+#7'0xE@?Dr&F؎t94M״mHB Mc0OCN2&H- p1KtJFQp\S#FAFkkKR@U2f3ch(u2nqr*;*oGbҊAOZ3SD4rLc^4c7c%DAOH^>6f'ip6t|b'Ĕ*B -B|>\ `g>#Dfb['461)f6juA~1[ns)[I~'bszbFz/2'DѤtJ`7KFh6fdlwf{״4ɄN7}#N%IܷuX)Ӱ7(XW$rGGHV $xJl̮ A8 /8I\5uJ+-߅+Au:qXcO ܀]._eznzi."{8\[;D;sFR{;ID|ayX{|KBoxc6߉+O<۹a4+ݲSM}&g$x}]7rO O#=q@ghC{03V:G:ǵR>z”L3VbF3G=j>E @ؽmxBѣG?Q<(>θ4J 4Va?=? PAPƿ rKx_@|BӂEAgaI=F,⌦?hO6dI'!q"7?̸`ǘ'DK?Ya&b#9͓*%i&O eA"F;m(USFA Tj2h`{՜MqmɯaIl$Y{qq#,Wb`ȟA=tiӧQVukׯaǖ=vm۷qֽwo߿[35wOrD ?d;vРq7yf~9&o2_䓆=܍pGL&)yѻj?R& bh=:Pcp!+!&뇑dӄ6\!iƓR\1A0tA4Q#tx,!LHLS5l7S9;SO8sʅx=*Yn@ژ`7b@#XWW@p)PO^uky ?XGa@ P*~U?u@Pn[]x?$؜!R3Yh^PR-)B ! ir  n6T'`NXbCS'&u!)H@%.&@ T!I.pb!^h $Z@d'AF#c-vy"8NtT*Aہ7C Cr1ul%19@@NKY>(PŲƱ{LBēP 2Uq/Z>%.2O݆dZ\I܌HT2QbRH- 69pShE$EI ːB4 fBP8^[#O.}L$%x$Pfrh'OKҪ1qhF_ #kGH!$0Ÿوv'0EF\'z$ mi׼Jm ^HP⭩d('Jֱ#0(&}J_ofTC&p; 9()f!.c )g6p1⢠ ">M! ye0 hqZ HXEp\@]v95'pS !L,Cp ]`휞 =uD~ /+;'ޢ $?%|Km$W>yG=+2?_D`{SX vŽ!/H ~;coi5N PIR~MxWj{_#%Й~_ 1I/ 0ZJc'?$PTn՚'."bgvK5O. 8$,P ,/uLT"6P:$$O}($H0YGY"'F$NzI}h'Z5d(5 Pv |/vy@$,y! 0v"(oR0u^ ]U'jt&Po!ޯ$NvPP4+qI܉O bcy%R$ HP!5VQz!NR$Z{$^ZlPupp!fj" %p50VC!,v0Q #!q "$^Mvv!2vH.oG=$(! #sQU#zUoubt$.b o! b !`!!("/'AAG  e G!͍u @ Z $qu W' \y@&U''w2@B (.A) d'Sg,SgObU. Q cg+%A" 0 @> K"Qv< q!!eG%O" 3M.M@Hur A60ks$ZvV 4$nSvr$k! b $`rd&6]c5$i&yuJou*!.Kc}u!;" yhp4rs:20!@Ll*s!'6A36BQB 3EP@[ Gs yPg\7LM@c.F!˨yިgy!H0/ NtH> HB MH={$ D,S5b$rnuMUg="NWo!$$$$4u!UNqB.S S=SA/QD.@IK'PI ZC rFkPnZ/4xX'LYH-e3 4H!2!`LYg $v^ Y$dt%Su-RihrP^͕b]S]Y']+Uu"$$@A<$/u̴A)KWH"4T⬀JA"X Qb[ogK$!@vuZzZATuYhf[n1g3P*twPD.iZe fIbW@ !n=/jMI0Uu,H4AA!vjYMKP+alS'4u$"6,Hvuu.Aob3CA9IB$Z'Ls y$2eUVHeF `TmUtGj gmcc B4syu!vOζpZOv& MT#r`@bxa/"R*H0]$wnW'`XGo*L)pR7J bgWqAbc#$&%֙W4wZ[!"IB낥4cwL͘!V䶄/yys4مۖc؄>׆S{TUoIwp405()A9E7xM !XD"\XdegYsWeX{<$x5v$8$昸F y M!ys!!۴Mzby/naМA`vuLLX4:4H"t7N99k\91% Z9n9wZY病gkug#dbΧcG9vh,yS%bL 2uJʝ#'ِ陝YdxMB[bK/q9YB"!WV72?bH6:Xr٣wy}fṤ6t[-yBb16OBmu&"Җ<:͸Q#UGmU!YuT؞/)?C :4z48Iv9Qv!l!h^y  zYZZ>z:HZ66c!L./D{d{W;u`{M*sLQ/;=սAyBuZf'tZ7VuЈ;쑞t#R/؝0   z{ V j_"b|C#` taH\ VO` u/(A ` @ \4(! ^g5 5$! \/^Oɇ`6;4@ȗ`<\ŭ{<q `ʉh\eM:6IB{/6*r{(O] {qɻ2$oĘm:I[͖YGt(aoS"j"$׭¿%M!,UK9 ګ=74^4(=ܽ}{Z)ᘩͬeG>0$Шh+=e$]3N ϔ%~b u@nydPu  eK >ⱍ{D\^/B{` S $#~Yߓ^ Fqh#+<ߜ$ro㡚7@矗 X_^b.] 36"3:O"hcT {!*N#;X2qzC$u@&~⼵rq빾Ic> .=5u8 h@ iD?At DU'P@/u"ݫkOn шˎ'$L6?װ\^.RABn͏{YGTQ,͂_}Ja  … 40HAÉ >A %0Qa%?1@ɐ$K \=3o. P BHz0Iƍ ;t gIFB9(I V% 'C$ :T!N0jZ r@@Qa5 >Lxõ,"6zdf9f#c\Uf"SPLfCd86K \0 hh1؅< Ja6ÕWB}LP&'{!sI8}&ƕ> dۿoX AddFJFZ]0%aBLVZTEd)b(IFD Zil>Ha 3 "Њv@6Z8BA %F Hޣe %*JXP0l{]&C$H@>7 ֱ.w )$Kl%'"@8P۪3"CHA` "Ax,PO6dXOTӭE1̆H4=shD'զ qYFx%Y~!%2 @` iL-YCl쳐d]Ͳd9Ψ B(x( @:[ZthӬ՜"%'CٳX(-`^b!0# SԨVXzֲ&E@iPz״h/s ldN! TH_w';1=o yb ;!7w|GЂe{0}5)T Qox0e5EF0thg+Uya}[9xS|7"N(FA[ȅ`ah )`(d8v7VuSNFÅu71ua8"Khaso3y !nFWӀ?vqCh65*(yM sF5 1Urh xM!X(&G,!cAXsKSD듃}Մ fxg,Bx Æ v kgLި񷇙8I)h(?(/HzSǀqCp QM8$+f{yYYgQP>DYďPLhAn%w$;R54IAY/i.X|'ɔ'Q֎ZZ!ȅe91i iVScHȓ a4'z8$YG _a?ɍ=AFHBiVaA)Gy'E8#FY(uii" SzYQЛ;P '`b&Y%靉w~KVxmp9V"q 0B=a?22793{9.Ė~n(|,: VJM3hơEqL JB+ʢ-/ 1*+j9wa?'i}QP4w~iR3qC:W_F -BGFA},Y x*Q] 1r{HYITצM1} *JqCYL45AH 7To?= ? fjsqfKzHZ'ҐJ;A ETTPt nt0ccǔajڙZdĦ] :CJO"FU٪ʭE aVeȞDI Jb$dJʤ q?81&dւYʥJA5d${:{z ӛUfӚzfך -/ 1+3[0;ZHw*rn4s\qL a9jcQ򣯪¨,RZJZpEA ?fzLJejʈ SjV8VŲ4 +ⁱW`{9cﺑDۤ 9UioPjwSWo\[R3H,丒n+hf; A'Fa?wZ.ڱ|J +xL$K:V7Pq )qDd9Q_lUqLv9k[?XzaJxh%{gj@ñ[k8}rx+;wꃦ%9`Dz Ƚ?+烹{{@[c 1Vt1h:R* lBUJ;ik={ ElBT g|sLulw31e?wM PLS]>[5QI\2HmÉ3=@Gk,k`XG9ŭ]F:XlZl+|p8wMAeKyɬ1;JĆ縕 >sB IDȬ$(N˺<[c<aդXd9OFOFFQPw[;_"\,a3A=a&o{{LmѵIFrsM)OT0<yL!|VbRT+DLӁ I! [ .ඔq,o>Sڮ A(/m۷ a-cM֑en;F(D67\f\nQݯnz!פÌoJ>F,Jԛh:|gйӦZՄ3,=]-_ښ"۵=eۿms$Byn̮D, *4{=qAYI?صpVأ=ٚ (i׽,U1Cs DF{8V]< ,`,Q n!n@ҫ O Sc22< {,|,/s%]7ރ= F7VHE}7ΘLcL Ѓq",QF y+,1 ^.޼kh0QwZP.p ]Ix2}"aZPQlӛ, \߽19܂)HtMM075- =|_^r}ڄ .,Q ~k~m瀋 q.oq۾@SSoS6KG\+x )$] o*M џ5{Liƫԕ1'T~~=!?BȆM>샫~,1 ^ώ ۽-Pu3o.!980 ; S</6>gs^>@/m;.`LN7To`Z\=bJd91{P|^>黜6.KfXF5exM xH~S.-Uٗg)a6@O!ͮ22A Gt~1 ^qps 1,Po=f0 s_k FaU/| A $СC%E-Ҙآ (7YXI)UdK13.P=6 E'(@Ţ 0t1 Q #%2&QO/ LQϦT0N}\rj݋SZ}H灌~}(Xgkm &su(fk8`F@L1 [ܓQ42u7(F"o` >qD1iC7" s'B^}v'NO}"#(oώyӷl!ɢ#H>ʨ>h="oc?T DB,L鿉0%!daK4DS,itRJz)1&).** 0)@Z1X%&h/ !tj&jj"l"l"r(JH{*.b&.2'=.b.ns͡.̶,JS'ϕns"l3@@"'JҢ0k6BuMERK ՉTN+C$6Lepu"[q_% v\ ayZ aU2*6c%J3+ C&Lږn#vseajA!7yU wxjWZa_q61+S:-j', ȋJd!uʳNOƈM-4JyL!tT:S!,ՋGZ&e:+@li (Қ&k"sOuYjQ;O8}6"Y5!ZPwsA 'B<^ǍpdY]ʹ\(ttGhq&8^ ||Q?XϗvGueXw{O|ymG81Ƅ66該k2${LuB?(hHMkJ @}S|:[%TL!z(R8Ef`( c"2q45fdJs&{ 2r1O?| 9 D蝿 pAGZ=iDZV嫊wâD\qTSYpEr x3j"rG'qՊc#M\dQG=ѐdG>#Dz(ڻ'!JxdM旐R֤:{+參2Z_fi=dImF@2EQ>:=@ ZMviQ V+yؑTzP1LbP&23 !ԉ0EyyN0hu 4~V [}\pW # 9A$P^⨱$u3THږC3Ha'K:tE$M&\{O("lpĨ/EUB+$YobJ'Ljp#>^Fa lC#M f|^ wnfAF.̂ o8"F'{#!Hzd*AqF>!5xՙ2zA r`ċaLv25! 6OP>eعAk90w }hx*<ARj6}$ gaÄ`pJZrԝ e)*!r -Y0y]?ѹgMJ}IP>x,I$!LK! ۲D l0B;=5 &"G"s&Pǂ |"$1B a ȿcdb@)Azk8pDqK,{G EG gA/,Cmq0"B<1t y6ϻişF0~rI'; g?^t#Cb 'sq^'a)rjGe6HRmmM4R\K?>!5^b=`]j0!3g~WiE!xD `Vb![)S)EZKԩ(FJ݄fXn%q{DzlF$!|غDfq( e2"thDnCck|<@p@3B ؿc9PP`p@|D?S@[;\HAAh'  DA/%|93||9*0A?A C1DS&K"6p<C)._" ˾;,@ 50bR`=f*@4+I& >KK?-!e#5C<P(,;is>:?-o۾1l;Ea`xز%@SADgTh4Mp@bdc4deԕmFPFぇ(B#kƤ:%cLƹIUr4Lj@,)&'4{F|lÁXrlH@7cGpǡ[$pT, !("uE` e6M5xVILxD2m?%Y>ZPXm#iEְٱٌPGZ Y{ AX` Q[\0ۋՄh#@Yp£Um[X\\YؘhX -P\.qɵԕ]7M ́$bq% O=s]#@1ԜhHIu<2}Om֍V B*Eh 3 xy72<}^ޥ⹇H*_1Є]h=].`>`] ϓ H68&HD>cca'NbCBOdO/CFdEnFe⓸9 W~;;Vh0eį&֤kpv6xI y}fe@xgFL>\;`9}4i_ljjixh*݌(.j> mhh6hjsjioN^EN"F1$ЄV;^jBl`lPeؖUm.m jjz UȺS6mC^ ncl m,mkWɃ:9S>ihÎ*fzVTNX6vnna>nnDh0؞o@Pm*p؄LSo~P;h߈j 6i됞k> # 瞞hnb(lN p GePe`<km/r#?rV nI4J#'* +hiAɄψk g1Ϝp>NŮ?k<U@sErOoq Mc?  p8cUtspn17)tL$O%_$, fSO-ߍSקFXtC~0U ɉI]xpPT^G] _lGЁa9ξ[#r_blhp_ h#pY'uxttC8$" /g\-sb܎/ƊOQ\Z5dvZ(y.̗ߤGH%TdKc_ ygFЏut/JE^vkFyPxn/yx/wCa! ?5^Ff{UW x.m8PE@[_PXI{|!J@>hF0),l7hFphP: P0O@lxȏi;Wi Mh&}ǐ}HPܟJ aߍ6`Fz}'Wgؿ~ۿ~<:ßrg$7 7$@KK bƈ?b@4"Lp!ÆmHDO H(B?rTx#IOD(._LG5 yh1HMƌRbˠF(L7>?i)FL]bҸ*טmq3Ώ@N}jU*յ!E@Nzɡ ,x0†#Nx1ƎC|e /LYdɟ2k-:@ΦON6Oڴk©1HZgA}* `/Twq$X}rf\-gP感GٓDfГ ~rXb { (-BA|4IQe^b$|RXbJeVg%h $آ.Q&(HЌFmC].@(iP#5ăCG>dC~)FyR#I-4o AT&feD:F^D3qI$axFÆS |x E6tg')gBsU'B|hB1铓I/ZfxjJz0,@K}HJF+j9 b`P& $ BRkmBkI y)_=HD@2(P.H qѷ&FnDJ M#AJGFP J5лd-l XS])aQK3\aJQSؼ$zHzKc8(9rje @ <0KZs5bH=`lXIsq` =E LB 7-1j6ܠM݁͂E޷ 1Jm16ܰCl؞38䒿ĺî'T:ϭ:Cqn}Jdwuؐu~#_磟'Z 2FuFBH3Ѡ@`t\ o'60 +h bPWYȧ#KS IFdaS ƅ<͡"@0A! @1B"]CHf4#*ƊDD/^P`#h31 (ncj>!G7QKI?G:A"SUAh BBr|$"#iKb2$'nj~:R2DD*[W2l'uE N%Br]2 e)c"3\&3ӈ@3?x fb3&7o3'9is3\';w3'=i{3'?4(A jЃ"4 ](CЇB4(E+jыb4(G;я4")IKjғ4*])K[җ42)Mkjӛ4:)O{jO +Y(jPӣrC#ʨBNE*Uj՘J'ꚮl"7xdL|5j]+Bt5"{a+]aց`1kFU׿Y P2X6]œW,eU%Hf+IE-*@,ђB=jJ!MD5ijZd5!K",7HDFWfADZ`9Bus%] Mw }u'U1ev݅@KؓnUCyHdžؗ$@!4\EoD`|$mY`3r@"Z"7h#BVt ްC7@h YbB-~qDbƉAR+Dz,L.L##Pa > &;9dD"B ͝\.ePp X 5|92' Vr: 7;}3IId3y 谸G ƎI"HF12;o֐ x( XeNjB>k MBҍ5(j͂[/>,sC8]c#TJl!^m"Ԛ8 qh4mo$jx#0 $5a97 u6ojl`T(7$5꿳B(* є(La'0I#8uņL6lƂĂhcz0U!t.#Ẑ68yJP2FaBȜ 2YOQ8AΌ$v84(~;dN=? })Bd"(ULN \;J0>i4GS>ya-LReoHrm|C:(0&*YB6KIKdRᛞWYzc'RD^8)K`xi&H` %wS& F.JP+m皪ɢndDtf/ =Ky*#l`#FOFiBdDlLkF]`؊™"VZSVFpceTCln'm~/d UVm4R ,|,XIdGܗb5@-9*BtjFWƦ2~S{,&*'H(<',A$'@DA%H$@<%$ @|0`,*CL@  A2EƄ<@!3#Crš:'smoD8A10 - A#0&BhO]F/ޫivLX BDWRlC8/(LS0w477fe$$%l3!J43m7;A!ij8~)<s9?72DtI4'j(W¢z*+╆rD\R.P+'c| p}.sBHlbU @hH(bb6p&DwZA00@  3C@YD'\B|u CDhRT/DG'ƦU̦[AH2"cC#Vs(" t.I[Rk6lW^[3veeUkeL:>*JD0";Xn3CW5 @55CLo moAcwu93Qc.Y|e:3[ g'u[~"r6%bxDZ+"쳬BU  AbVgG+s>7@SԆ#u<6s3WX~S3DSFr'Agt>Bp;eJ$@„ 6,H@!)BȀ"A)HGR qGJ }tG/A)#>hPC5ziRK6EԨ^BʂS[vlXcɖ5{mZomK뙶ip NPOnPp`&&B HEdI"|4ឝp\Z@dp)8ҡ8rҥH!%DR8Jh4")4&E!:^5B]pd]f}Z;k 7ݖgԥ=\^)"R(DEQ,Vp(II7c3TM܏\TWd۱b5Q2"gҧaHU]:P)}uiQ}rnM>U^喽le 7p,4dya}oRߝp̉8D)ZԡEnI##d3ThԈi *kշSaHV#~Fjʄ@HӈNuS ?_rO# ܆ަ)>n^VU"r2;~3*[v]D]E~ȰܥCwO#ꭿߞ& <#┢"!3J?=] ڜyJ!(O`]6zQKneysL{!IXB)B|)DHQD7SsqH+?: /z N^/ak9"^  sJ]µdyTF7q#XXqD]bF^H ACKV[BX'#`A8Ɇ01P& (E4Jbɥ#P#Mn5G[.yKa(!EF A %K H oU?iR%W dD\F?uŋhbJ$HeFxGb>O^RAtQvx#@!ުv3Y$N M6@r~ďTԩQD ZyRĠ O(PAP tfC8>/q߉ Y?A<!d`7C:i&XWV䈄5C̣!3Pd` [Xզ">Vav%S U Ri(WkHOafUHTRq Pl #v#Th&5ny[ClQr6$ ]Q+fDeXE\2mC FMⶀ|8?BEUo(;Z!%*?Rܝ~_N-M(Ħ4e8鮋/\ cFz9CHԒwWSI֜ZHrBm si\cx,}QUPEI#\o^[Ot$Aۉ7 X3B٦xj>WHf@1f73*rDŽ il-M BU9d'^MQHGKR-;ļPZW(g6AM4թVY P])N;Q |l,%cա>\[@ VylW>xzZD1qR$Q4}Ejow8HgxW:>'LT¯ .v mCR:!&i+⇂UYLxb7h)^q_q')dQc\{vF> , !_+m _mv=YYHnCpa43t?QB+eī8f_v5q i@.;;qorG$@bQ74DtPH#B'Ne-?%Mtr2/UtБ®}9={mgŇWoܟH< MzIMW #mS?q"^i';IǙ',<\8HK~B M|]NV@4k$PN#TtoB % 8(Rɞ{ |4Pjgf+A|p > tS=?DC<@Zc3';}?"`E3 Fr$'Fw8 BXO3#$;04l#m Fwt4tG:a4CiG0Hft(- JϩNTDהM4/`@c 4`"@$HP7c\k  `Tu@ @@QSKA ` P@U (`Pb  %@WTYY5rYUZZKZU[[U,[U\Ǖ\\U]ו]]^U^uߕ^_U_^_`U` `a `aaVb'b+bGb/Vc7c;e2cCVdGddKeSVeW6zW{q,w{P{7q4t1#yWl)\JE:E}|Yw+b~w)b4A(>/WV[E~W=iUBW"8#R>R#6s'XF2E ,tE>"mw}{~‡cTf'kX` Ytb8/Nƨ>$*]tqt؎"`K5\{xY"F ,uؒ/%N⑵Y,>><򰎈1Yj%b9Ւ@c` @t+ $a` צ |+-(8(vٗ@7M{YAmò %كfW 3^ |'9]c+sq5D n ٟa@ !#$%,728>٣=y)iB0Z$4"8:4<`XdzvG#ZMf}BłdYqT%| SL$$ sA(ڭߺ(OJ)ZACωt}<ؐeq3#s1/Ǖ+',%xͯ41Ӯ´YTQ r1uJz U{0Bz$p𥓽1.Ex WO|'c 0 v۵=JBٽo;F;`  O2= s4T`nOFj }#[" #ǺNLUtZ.u^>/[5 h6 "T꾃BŃD:ȏ< b OJ`>!T='p\y+}JS@>BfgM֤"L@¥3P<GiEH}l!ǙiґЫ7s#"1?#<}(`& dR B)RX20|b8eZPB@ۧ~6JC!M%= BX=Wy)K]Aύb4=y(|( SUNɽ~)jԭ[_N]!ЛᎥޔb#" bu8}^)QYᇞIo#|7 mK~]0T PHÓKW}YX> ;%5,-t(Ap)(` H фBQ:=}abؙ 'Dc>q蒺a"SUT~ \*Rj)\s;+X_ݔ>-(_/gJEK<NYY!*0f?e%Op0!~ H *\p@ #Rz`ID PH  .IɓP%( ȌsAˏCdS'˃R(RsL pP(Tjʵׯ`ÊKٳhӪ]VORFxX(X:ᬀ(28̘ K^ɘ3k Jã @ = *CB$+Ӓ4y`FARr@ĕU-5mIbo @"Mc_@kG?ubLϿ{ @șxX=tكVs8{1Bf@^Y+DQu &RPa# ܝexMVhht$#7QDSO$1(Xfe{S1ClESXlpƉi'B h PyRM(o9'{HDQGJ^fL,bM#i4(ē E٣Y?)dZe$n/SjD *҉ 5KF+"J@V[a쩭V=$*䦻Y'I i %R_6XJWH<$B%h:ޫh6R P;J#;%kl*Vj,0' 15{a9l{( @%!)ʱ"}HHhPY@$Ia@$tDX_CcKoB`*ݽ TEN:lUC=յG. @OvsP+% !1}P%$@B"oTT{RGDѸ)궃n%47?hT&}34<3<(|DSP>gAs^n6 'aj0Б4ݘ,8 @OH" Q&]m~#@^, ("\t JP ,!`(CJa!EC%!9eOj˄A@\" (z-"J H:6Rx `<`R_`b @@XH+bd H@uŀ` Hd}$( `r z'C=8 # R7dX&LY I(%!%\W?! PC1c7g3";1H%!F!(DpDuDDyy69vϢȜ:GwT֒# IIҒ%'8 * HRp*/ ]Ujڀ1D 5i2$ + HydxUSŕ#Q /+'ȾAO߂B#$(L*djݱ " )l^)ҥLVbC57čRp@/(L] D4[ 68w :Ma6f  0(Ӌ$pOvxu> S?tgƎRkDFDŽ~b+`43'u+_Y=!Ex A&}ËB$ϷZx{Ywt[p֠D5t.݌.d\l*,̀ 9풛nno(uzpz`9h,sw"-bvF'ju `7S5 "h+6 FVC[DW(%!Ce!Qx&1)q-te&z08Qc(ԸxAI5zC@{A,긎R& !D8ih[&F,i5Ra e&RC9Q(Bgj! 3Ys:$B䋫itfhohiIȝTVuE8"yd9.z::XyH2AJW~e"4Q b2J&YQZj&lZnApht*D Iݹz*u/T~ڇ9Jyca9z`\Jd(!eiuOjkIZJZ6 1`QRj|J{J n2Śɪ:Z!īZZ7yp5`eVUeڤʣP0֕7CKYqD\=!9QSPȪB(""7x<ʚz`7Z{ZB왠@Jm8vE{|s)<_7DE#Qf$"Z? 鯶#V >6|Za.ګLWQ|3\۵^`kG!4GKk3ת *"1O`z) Q;Wkl{؍ Rd+QZjO;ů6"eɵ ƨPa[{(Hp&;.8NxN8ʲ|x+&!mȚAsjgDڸ~XNvNb~Jǰ+m%껾۾lBYyLj !mX#fK,)d۲w[o ~))᝵*lSQً &\rAF Wй(aJ{0J!1g5:<>ܕdX}9M9,=]z&k#$η(κ; -Gr[.z=ƹ/M\eY(~@əɬS`lPR='_& kLb 䬝ʹuT?-[[~%[-ZEH z Hk;IoE> ]vTa'AS" - Tٞ٠@l4cGh,$ɠl֮*Ds]|\ܢ}xť~!BۼܾMS+ۺv%qi ri4LP١=]-\ym8זј9!d 0.a]/N}R z8_~=ڋ$V˖Xc.i༸aRޖḀIu~l2 ."k >3R~8BQCΟd^ҥ>CG^!5S"hK?˚^_;lA.%ʫTn\EݢT&/jg {/}g ݾ1n@."i?O+~o'>- |0_//# 4 qBk8GoI։MM-X~Qfb.};q0]c^}f[4 vluJƜYfΝ=《D>Fd"TRC)>"I!PJ"Y{*Ru)bG*2()uH|zgt{H 9 zHC("؈<&B Yb@Ц =k&b̦4LR0䆨j#aB/dFrT";GJ1G dŏ&iFMh:$aZIPDR"q4R0,M7߄3N9R*Zb^m6?@ 0 >B DPx+R@$Ϊ #P"ȼ4ԫ=EӐ>mNt5Ѓ@JbD@ȣPiJuNm&xrom 3MIF'6Lb7$aB#ucb]7_63d`2f&Gצy1{b_"fa5cr˃'cP@n`gfIUT|H=y!>jOҐp=hЏP=hQ"V`$)5[5 2xQHjPc@Hl(kvO>[=Or!Վ穕لD%f?!ч*]3C_੍<uƽ7*E$j=cwIvIZ!G&>&Gv< "w8haKAi^1mJ|?~,gpУ*sE B摢67 cFBj#V,^jH@2hj@@wX"S ^DGvhXrCaā_9 Mѱ`Ppf0D>" sb1&-cdǫ\Sǯ1&*!(2$gdAM+D "tIF [bA$ȁp<$ UJV~ CV!b,%R@iPG4|0  mx!rH(8i hsT mP"<ٷ^bUf1 OLbIpdP|*O \> .Ia+%:3*M.$ $ F?"1#JE*ĤmHK:QR $4)Nm2SP4&7 JYҁLB{1F~ZԠiF RJQ򨧠jU':VK=%!C&Rt+GB+H#{w<4 hA4-i-NeJve CY@a%" f!];_*!:9i؅I_7VBѬӹ$4AH~0\&q Iqa"!5.L`0$ф>p&< O("lp*^X%Ep Y"HzY>M0( D,DF:&Q ^݌+'qXЈ$ n@&2W,nvDr''$t.tX#;=g|r.=R1$W (IfBH"/{hHf(h·~L:.d26(r;d| W=BK @R7E %| ÿ>[ڙB Xx? $+_!?:v8:̃%?3@)35H3::u<DA8 K{ t?@',$<@=UBp+$șF+$O2*h $8܊qCH.#G  ;$>89">@̷`DDD#6_{N|M@E ?DGlIJKB?؝?qIFGH WEE-L\BD蒁 E>oFVjF!APxC%XAR:+B< z6BBs 6D0c@jW ^bpxyB)B`_Gx;(D4P`q:5#:$¥ó:mk$ɑpt`>@:ŐPIQF8DHDɁIIP Ԍ\ƙ۪L`\9ZFoCJPPJ`J!ʯdda4@\IJd:|˅N 6J Kx1 MP%eҳzK*N ,R,;Q,M+$M1-2@RP4}:t܈R/ ΏR/{Ζ؃4M(8A)5S,zWi"=H=}>IhB=Tixt&174ȏ@T/5M|T6RTmkÙ)dQRd-Na_#C|+Ofef-2l=4mUnU0p $tuB k7W 6j9E d5Wgu]VhV>xV]=u8nEXo p q XJP:ƅ%F7`)~-6s՗Yh3\8(XFNJ$Pp%U!%P0x{M%Գ@%@%Mڥmڧ=OX8`ZH*(N5})Zx((Z/ Zk(\8\H選ƅI8eFPVP&8P2#L]]yI@]MhݰY\\pX 8PIMZ`Mʨ띐Tu2 _bܹU/K2{yP*Au]`^P_xW2׆ 5+PRDP yef  +G67X\] =95+d[՘] !=Za)̢X>h3h-ba=1>&3_ZU4f Q$7vacÐc0V9J.+S*r=ٛ b)cb)*@b(OhD%@6e5Q6[2SfP@UW >pZv6xΐeTc A&B6dNdl>BP^f˹Jbj=dg.hnVg&-q6j5>u^y5@ e w lObvdAF}Ud`fvE#p8Zg(nkKDMN6fif獆r菞5ǻU>Q8iѐ95g}FD~2d*;dMfCOVh49NI2l&&s3>>bonx)B.>%@d< ̌fg0>(Sk&ieeih^ 9kfCjf]5%%F.̖Vej c9  g m62(2HQXfHPĖmmym6+0I~hiޚe &fhϖnnf5 ڲ7}o(Nԩb_`9qc MW?m=+F& JY+o".xPaJzԕ_Jnp|iS޹ƈE`qxEdž*h9V7sSfET,dhQPcr*7?/^pq6=|lmcoA /(*Ws/ 9s9pJd}\ dIh7'? {Q7^^8PE@3tNtP_F`Ls ҎC D&[g \g Jl7hG>X&Fu>PuV'LW Xkm=@vf 7q֞6 EgI/{imɧ,}{*v娰g Q0e=wy|JrPww(ʀw9lݏyg! kFf- Dv7fOQyw À`K1t~nj g_ zXw_ "7q8\FaS{Eh6 y7AG Pv֞_0|@|'}Q.dB&5 ?XscZyc7ɄcTK 6X E^Gu2}PxEx} %M` EhNf`旈䏊Gǀҷsч6׶gf8,h$5=nܰ#O'Rh?Y#H?X$iQ ;xdNH*YQ6) 4mB-8$IME2=) DjҦ1jkLayI5 P8JUJN>xھ.l0Ċ3n r8l2̚7s3ТGnR+NHuܖ.9CwhOPi'hwʓ GJ|9ҧSE v%{s;Ǔ/_ T&#U?l Á|OkjTMG#)WR y J8!Zx!jw;@HG"h4|Xj^|PE0$Uq+"=^fcT> 9$Ey$I*w6  0O0en QaU>%G:&ʉyeq&Rmy'y'}'vl8f hi2(J:)Zz)H` Nd:aZ)***.Hnq+ ;,{,*,:,J;-Z{-j-z-;.{.骻..;/{/// <0|0 +0 ;0K<1[|1k1{1!<2%|2)'|r`21S 5c36Ka_=_ϼGȏ~募B>1I)wɆ _e"DJKC`5A2Bo"j Rp$-M YP$)Mw䇡Z|P *F$ yDByadH*z$>I W(q@$aQ0.LbrHD< 7Ao =R* (G27,j(*;&E2ґ9$I J,$R8 $F$(K"Ѡr $R9H(Kid,?º@cBJPҐPI%IVY`#l.I փ>r:RVpDT2$L t2Ey'RYzDj=iG4y>'قOX$$$j 9@. D :T!THq*i:!C#֥6U7k%+IڑdSj]ZĮQxЄyk[T@1lH IEJWk۔?,h$x"EJi3PhGnJ L$ij- h갵. kOЁ!mHZC(ȭkuI[W0uƷnc +ĵ-t˂FΔb*) -L# ł!pI \`T:@A ;#0ia#E¢1AH\t,@ibPFƠP`tpHvV8RnL7%i\4B2) \^HxI\$1ELMDv2@r>8 qA<= _$3TOA mb ͂.$QAgyjqؠ3PHa\Ot$敤) KӤ5bk8$sQ@̦l9au;Md޳p]Dюb=kj{Dq`SqXrg~&^l8ټB6͚Vլ60F|D۴A[5x8P@2vdY A&Y',GPtlEBk]I E?Zp 'ቤ#lи_P0NGS#%yIN)0Si^+jݎC<"`BIŎ(B$UxDgAGAw=NDDas [ o9X e(T@D3ȓ;CUWL~[ l 2- UЩ0@81] m~ '@1H|D:I >Du=FdEtEBQqUX99_n(I_EEQD\IdAP EQm^艞lc8 " EAGt IDME=A E@T[^dބdXDP!w\!BA<܀Dj_!S vEaE5  A Xm `EDA bipb"bW̡GA'Z|!"%B(n E8b-A`^<}B+^*iD'pVJV,*ETcq9NFhadpV$:GUGccA|HcDAcl XѦ#!PY|ܡa$ "A8cUMbtQD]U\A8$Dcn$BJGVGd**c -dcdA,)Gn^ #^QV^IMm |AdDHG 8|#J8XL9:euW%th d"I.WZ,u[Ti<'2[Tf3"FccNdU$@^|h$KT4DA&AT&(% h&kfE%S% ED"  l^fG0%ILa'R&(l<y <Ay wc#*eE `˥w`Drr^ xe89jc%BE hB$ j}c-fH0BxWA$aoE/H8->ْo6q֒oQ0^vAhI0T@h[AYFt/`-!vpeg_ v-|k/#"n*rB0]`pp pƮoH4B0*q 0SDW9pb QiZ"`9RbgHEtހޱEp\°ck /f~R6r:qɆ%s+# [{fdw2'w+nr(,Z+Qh,X"`892/rafE.D-(3 43?3'sH!(jḜXHaB(2%#s9,*{H5wAs(Kqn"1\ep+?7nr_9r/O4X<% ЯAX4FKFū>$'DG/3IRL .m&>~&&NtH|%2I`)EPP@*rD;35?Ϧ?Qr񌵝,߰04ma|#1ERtYgHZ@H5TGPU{JlVp=c$#EoZD[#3(,:5ڎsUfy!`;5QSW`TΗNAɤR%p5x5a4.5oDk\4!3y>c7 Ƴ]p^+# rhZaQAMlڛnz҈rÀq3Qc3 fTu+Gj+km7w#E}WiDTDD{|TVlm&T!M 2ΣwE$w@a|Ķ`޲0 (lVH0@x=,HB_P,XFJk <|kD29ῷſ0^o;G͏}i@.?zm*eFWG|=cV7E˳F峞^=uR> /ID@|Wc0FW9JRPAd?% 41@PED_cEP9&: 6E'#>@8`L@%T8 &!Bl$à")(""9a ?HT$ If .p Fvf&rX&My`O|9!K4B"8U`Օn m3I&5KeZP5ˢPѓdٰhɮ 8!عdžSхϑxRN1gּs@ PIhӧ$tk=z:RZ't?^=LP/CD(4j$HXG 3%؂cb)@o D "J$ṽ?(=# JLF> W P  *LųlqDQňl*؃ %;S7x<R@ZCb? 5=L5AK BmZk@N? TA -C=.ʁ4$iQMT CFTM9T(%Ҵ2an&`!M6I6]C98tH 'r4 JJ:4EFJM uQYo3T!mv%FM?& gEW]y8vhz!D P 8EWS*GjNMaxR8]g׍(N3NI6؁x`b(\IY>MIШHI7g@cUΜuYuiXjn駡ZꩩOk$ j eRJB3e4m 5*IȻ71Ι#X¤|!~ㄆulN!HE0p z-rCAmDB@N$@]lF 5C '-FDRJΒ-qK 8[f!lm41LQNSQqkLHkBeL4T9љNui@fΐoN('h24X7OB)Ej*ei?1Qn I#zR n/7tuKaj p$'>;CAQDEhLT.MuSU,+\h0hḧ́7MVJmu[WΕ2J `NIDCI2>;Zʒuuc!YN}+:63HH?ESZuka[w8J̺Ei[V9Ϻq\.uHpfP4J$4 o"Y¦E;&#Q>u{_gI\A{ iH^)Ri:_/ v! 7U%MW#©jX[4Qb-˒MFZмRd[kE6򑑜dȾ ,!gh~+48NZM`i|= f1e61b<4VN}M3HAxY݌eØQ-h2{fAЅ6cd Ai:M{ln4hQԥ67\4Q,IR|uila ,3Q6Μ 9i_*eun.nUux1W&͠I6T vV۲d|Sg$mB?qn$v% Mqo%B ަI>fP;!.ZBqsWg3WɮCW(\ythTjvёJsUձuDL]C{:\mVeIqCsϝu5^ĬrArs?@@q*Q<#b =!tb2hBs  8Ac>C@y<D-!FD[Mi(A "C4By+GA'[C*khQMDtfJ8qgIɤII#JBK[FG YCqG4/FsL{hsjJYIMw޴6TMtLNYN[&lMEJC4Qu`HPqQ NIp>JOwgSSSCOWP%Ŧ>Ő5VUOc+jPg1 1XqCUqgWWUXXX=T%R *“Ce5[#MA,p>0IV9vU6\U)P-WyS^` ΰu@ @q :in4\iR;i]U_6!5Q>` 6)V]#0*u_-]Mc=]S _kc)T%fCe!^yŀ26hVhM)N v7$ `&g6k ,4j`ДB3ǜ568jV`hSInVjjblA\ 0mvhVkmqi[i4V%VrL hgAVRM1<]ʭnդP/6)FLp6/LBw}wol%LW:0 3TAu[c 2zYx$yO!7|#BuɄuV/`$.ugs547tf6БZ -gM?Fw35T$2}bWgsʧTCbhm|UP3|%IS{WB{̂}k| C>NGb) ]7[ihjc4ÉDJ)#B   N)6"-|MُQ"T]^194`Pi έpd$XMG6!LQ\Lp  "4.yD;ϔ% ښyY%H#6dSdΜʓ#2ًMz;vy{9!xkjMCdsMOzl-%yNq1f!$!pG>Hå>Z3(A:Z^"a8$"z$f0L|T8j!n: :H"cSTW!!uBEӫX :";"Y 84Cb- ;Zc줦]:-z⫛"$[!4C­!b:O ;"R;$ڤz*U q ̈́ou UHQ5m}d .A㺉6s;X$oV)[O$ȼ!vТ K"~Ȃ{ŨbY8PwP'mSc5Qm0܆[%@TD8L۱4RWUGbā1zO<"2q} 6KyY&lQܖa84<$M&a|\]ۏ 57#W\߀{C\L\MIHgf,z⤏Qh#£ܫ8!\5 %})=73>׼0̗ۢ\$27=$tTM<|Ù*4)-K`?/~#}Zb]9.i^/Ѯ7= `:SNղڃuܩ4>=#Mfs/~5߸ 8-_ 4>?%Z+_9?GRVNAr(%zڤc@{<80@0bDJT8!%Q".H'R^|)pd0#d͝<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6ءR@c 4JIIFz>I2@#$MZو25>@8cl(Fg`HJfچ\Fe^jh 3%8m3パB:Y˙nnygʢYAmٵ}0{+DfPIj)ۿ?`H`RAFY4ЀT(PA)חB0S @Id"(ч!aJ 4i s/A)D EIAňx7ڎFcB<,eS$TAIR0eP,މgzg~ hJ#8P[Bg䊞uoj((_.bN z=J "'@AR6dM ,]~_" L٪@Â(=:)njӪm=5Ph~ nKn枋.~z`zh"- Hf:պfI颒O(VC50aiIlFx>bMp gȦq]k$r{kN̪D%oKtFtJ/tN TdC*$= 1 rUQk0Y\H@KkmNa1BHBs'k!Mw5ݝQ.qDo۱6G$FԄ (@ ;B @Z]L{ 1_b`bAĠO}'?R &?oD =( ~H@/"LNMJ&" ^3)qLl(J"#Ӫ8,jq+PB(3?Wiψ4qll{)q QHquA@ "TBD >ɗ HJr%-rʤ6yPjh!AAD(o(j#E XrɘS (ҥ-4)@=l3 hXѨIkJsEċʌ,9ωt(U\ּu|k( 5`Y@X*vmcsò5a)M! f9Њv})&$+JZ X4ilKvUdPWф $< < uBK{XVe F^ɞ&jAyjw}sޠ&=~i/Wi  uCM(|X ge8|XK ^p%x t'AKqw&-1$+*r`.L|r31J6K @|ɘ[fnA3',Xyts5!YχճT4@ zF}86ċ ;KzҔ/$\a,9Ӡf#@"B>|+ X:Rkz)n(u2 4{.b3:)%HV$Yk{^kYߗ|;PiO?8{ݥR]jtEѺ:AmɾoVٍ.O-XO{xS!΂&T>d# /y`X;`w`|=d} +uSHn<*=,aˆ* V4oӟH5a?)׿}d{$38oTJgB>%NOH\^}/|? Y'UW4 , k>%_y|+WZ_B`oC$]%v~Ė_ ?O,jRwJ#GT}D :,7փ? *: VPΏ~~N~`u Ȁ}%5|?Bvx_Ѐ!(#'Pwh,'(p(n@P^G79e+(J FEXjwAP OQ7zA@M{\L_p cH6 P@ OB{e{sfwye`І -rm0Ոa{{n}52s9B=e 5Quba.(nh52!F LP>(} Y:PxX8\Xٶ48Ypxhy14'Gt'4xXqP(X8~Ki(wg!; & IH%Xw.{aec|Ґ'Iq3TWyXxr'hvFc(,I5WK7@*HA'('XPBXD߶`EV4J^LiQ)k&JT*aEb22@na9WFS q9V?Q8CԖuvlYj)IYENQ2"I}iH &I)U%{ $X,F)?pPEi隯Tb'ҙr A I ilj[GU6)ITћ@sP <2(B驞i,*#jxɞ޹Z9 0P) K Q:D h=)ʡJ9b᏿)jt8cq詢3JQHD! $ ќ5 A83<*M=(~OY}b'tʋرZJey8c4b?:Ԓpf*s uz6/ ; a1t sJ1 7*&*9';cSЋC*jgE/>JSꪯeR Jjʫ꫿ *JjNJɪʬ *Jj׊٪ʭ *Jj犮骮ʮ *Jjj !! ICCRGBG1012applmntrRGB XYZ acspAPPLAPPL-appl8GmOz/ desc0cprt,Pwtpt|rXYZgXYZbXYZrTRC chad,bTRC gTRC mluc enUSDisplay P3mluc enUS4Copyright Apple Inc., 2022XYZ ,XYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n,8 $$$+++444;;;CCCLLLSSS[[[ccclllsss|||26!9$;&>*B-F2I6M:Q>SAVDYG]LeTjZn^`Osdwi{mqo`>6B:F>KCOHG@PISLVP[T_Xc\f`jdnimgsmvqys{v~y}׃vׅxي}؇zڎۑܕޘߝࠕᤛ㨞䭤尧洬黳꿸ÖŚǝȟɡ̦ΪѮӲն׹ټپ»7 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxUg޿ LÈ+^|0L˘3k̹B=ӨS^ͺװ].=:ظsͻ'h!“+_μ=Nـkνo @:6B(@P 3N7= '}}uށ& tL @ 0@K!C(P}2adԀh7"N@#4uN8 iH&dB\@IBP~UVi0# d)ҋaOmZ@h,lUBK$B s$DY& %!d3!Į#*!pI,0SD@`b%2Hq ǣqu4n릾*1WmXZ?Zd:`#j"q*d,RXSPhY.i,F4u")3.{Z+᷐TgKT @Iݥd'fAPѢ0@s̡*Q$v~Q[{Tԡ.wgC#ZtDD]I3DTD0n֡~d~lCUq;S LEnXD4!ĖКj$96Q($?iHB -_Qfbi9WPB@ rHAmU'] ShMZ_GAS!L"S8JL58Kc}H'H"q @^K ;c"Ikͬf7vՊuY* LL6TPtQ{GׇKj n+^cQښ.6NrI ! PׂD z+j|,Oɓ3Z/j銯ͯ~Z gDY*$EZTrے Aq@Kv Aә#J> )P%u#:5N`\q !fK̋SD´!/Pz,$U,L*ưN!" Zx# ZU F^PX &ELB3M >ou͠2Pqy#&D,nBz}RzE"ZаPu;Dwah{2""K ''K$J4_ζD mEjPisG!jDčxNHЛDITTn'KkxSȼ@vjLQWHsV DcVɾTZC! 嚜8JgNXK]L)B]G+f\]FGd6 c[HSO8{`O .yC(ӎ"Un d#*Ct^1$UJ~^X$%,a L8 4nL[ͫp:vxt8;J!m;(}"|6M|‚ϼsSĞ0Om8v36DrN}mgvd>׷"Ӛabvu&@'„" ϿUVW+jpQ1wKZ1y|)tr\P}W&:zv%.jR'Vv{w%zQz4)Ru $bZE!}0yVƆ'R882wig&zso{AwU'$R q}Tg8~'Ї8a?uS3)t3HBX%_Fyh178k@?ӭ`jк *.VsqNBQ%횲*Jt%)*ڬ$ŰX*d9 )3-{ jpZ5 qJfJe?(-tƺ+[f 'X4ltQPqPB'Bbq3g{.%yZ'ur)ZZ%@*i+bz[sqQOpW=z+0|K"xqYʌl{9KJd=A u Ѣ{Q> k+J{Kјk_E:I{:+%BK  Vc r-C"=ڵVb&[NI%81V++"+U ѹwrOg%T (b P+AM؂| V; ״CmzBG=.3~ɳ 4}l̼Zhli -aMl wׄ:غnr!QbAn:>ʌcb/K } ִQ}Ye1-M[؝n Ӷ.,W{tR׋Z6<Lصx 1ׯ]gӍ #z\ cڭ])"]:̌BAFB< q̌# q֢qڦI 1vڢt,0G>ݷ ]b#~ 6 Ӎ&!4pݥL(]SJ-- 6(wpS]qA Ό * 㺨MԅZ|LXe)A%vUR)a~pdIk +⢳3-(?>_-D|*CP,C-W8~Cs9Rm,80 #[.uǜ~ʜQ-Ѝ.<՛ jq Ú(Jd*(.IxTF}?ڄm+Du 64Tn ڃF䱼 m+DY^Q˨nJ[/N Umgȥ}G䑅 ޟZJ'-$9m蘌D1`r b/m`G zf(YV?콳E,Jp񘈺+He|)`48cɺ}$|i2 Hp򏡢!bCXŶ.{?tr' A"ty}&6'ԟ|Fg%ca i/#v"1|_qi;s$>vu%:L!@ 0I!>4pa88M2dPH%MDRJ-]SL5męSN=}TPEETRM>M@8L=8cN%X r3ׁAqHv .PyHZMU+@C6'UTQsVJx\aO.D$orr dP][lڵmƝ[n޽}39%“M hF;r'7(`E.@` AdljxVQY,v̽fI? #*HI@L 8Pm!L!2B08?1DG$DOD1EWŹ dΫ lFr𼕾 ˘ B '8d@j`3\ ~T4NP꾕$Lr4js.ɿ`O?4PA%PCEԩI~$&61KⓤEjNUFJ" 0j94ӑ#8x%+C$U%FBe/9DSD6[m[oDI3b 'bʉf UEM PQI))"E]li`li zV$d2$V ҔL*Vhc^R0p_9fgfo6q&Q(=2ֹIg` d3^ &j_TiܩBIEiBuiP@Յ䒬 bp yn$IPw qF{ip#Zo;7#| B$BߤMI?:dIMh(1T}$v" ߙX { 90#IµЄ'Da UB 0#$"68  $ NpLAr)]AƓCl"(2⪨gMIbA`H Υ*)+_ e9%Fvӛg8Y.bEa3VH&\&m \y89Q\)wrRi:L+=I>2LK %Ę[IR9 s6$}HrKΠ8e:SԦ7Ƙ(#\"V ǗSI~t21'Tw$=E}SCI̅#*5 Jo璗~G-Jւ%"=mRR-%% Kկl` Ĥ-TBӹU&W D'$\WN&uN (r5ġ] >d7I,TrQ;j /LÉzd~D`;\׸ h`_c(Lڂp^9L0[Y떬/)'xR)=OM܇vVyI(3̙5# +,Wݩ& ͈cG*$n=n`78f5ee>s~Ċm9NO{m~$E8浱NzDc-GIEX'i1B!7OrS^£&ΤIjABkdj)HƗ$IIAz\BĽ$\[ %HtarfD5 ?e/(%H.9Kҗt5MH?͑uRwJR0o%.žl3b("^] BT8|WaUxj2@e6#Nʼ!ZlQ$Mg;qlU:AQ2 cEϋ@wp){OpwN;OyJؐs011[v%q@ D+1q )<(l?ڵ|yJښ,3_%,{M,BkV ~7Dzo~?}W!oK΍"$ZWrkX\c" sIx{n^=I m8|N6A}DE 6.T8qM?67ӻGXH ; C6`=E{(q Ћ;=s c+K 2c&T?1xGc‡@ڻd9@ܭ ?m낔8CKAI97@4#@2C@8.57tL 8HHxCEIėaB#  AX, <:N${!{ R̦X0M(:7:?*$`2r88;a{G XBD j;k HX>/0 L8X@P 5pqC@q<h3ġ(J~ĖAXY[,  Ҝ۷$9ą C1;Ix(MX$0`,Xa{#d4T'@+HbWtS pC 品(J;AFFtTGH Q;R%;UHXRs1P3CpQK$(1ȁqU R#Ի& ')ug+HT8P>-SkEӑmN̘I |HM0 X6xyK%` @,l 0ɻX<P9eг>p=X>7H ;M#GITf DXx5ʑVM8HyUe Yh5ڣ8`Eh˜PݽXm%UɉAed:2ťy:W5 J@<7 DmH%U=H [? 1H@V[V݄5;m\; 5X2 磻٩ٟ L-݅@51P[5\ĭJ-Wڥ]5 ?814ݓ zC0(@]U52m 5XRA\ĂI s T 8Q:E͒S ];OXk[Mֻ` ?\]#X ֻUǥ]T EL͝\#*V`LRuܒ"囁?0 6d _pߣX^I3hl ژH)l *rU\SVQp`jȼ x0Yb03`p5l|ܔcsJH /ٗͺ+ ;?VhG }Kֻp݅(EdܒWU% PZeSޥ!P5qqI' "fUJ{ߤB8rVrۃP䤩qmڐl>(n7*cHQ@r斤`١0dPdջH^ތ`0պֻл c }gQFT ѯ UNT&u9 &xg.V _B"n<5p0uz7>fm&{TjP {9ۂP.^iu}:hl`;NkXFen` z(6G(IdN VN4 a~ֻ^?^.΃.ʶ kyQKv $ ueZ xOibEK%%T! >8ޚ rk%Xf!mtK~ΔoZ@>@5x/d+~v; >^>ބa FM #@J0oVo^>ބV`lO.$\.@>7q8%`}#ۘ}5i&H\h 8P!i dgpn 6 v$"Xj%Xq X& he;6X!h%p3q%xXHp!qX&Is"`/BW8P&0sn\#qÁW-ֶQku\/a?pk fhQ׻RkTGW-_A0ٖTvm6`%dtW0t7W'(?Cho_*m ;D |?} DxĎ\]=  J loֻ[ʾnf% xW ܓڕxQ% ]wkj/\{RW}}@eeuxxヲ[=%΢& yyO֕HdcgǑQ`GW;æD ?? 7.0{ A8OG?zZOz[u߄ݙ ZVZo{{#{W`?AƄ7} ڪgwׇ}'|?ُ6qR wy40 T7YZxsMۏ%O܏_> V '7HO6 A }}x/z>O|`$'#@2l!2>T3CA+&r Bt(f" %"Thʘ2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*֬Zru@bb%8i$4D/7DLӰ $ !/C ⠟):tL/omI'2=4M녶' * : J8!ZxlnLtCL"aS-w&Ix 3=WC1㌏t !W_!4& $bM4&i\@E~T 1 z%a9&ey&ifL:LFo6D@PLDoLtBz"ƍADH$O=.D%e~#4Dp@"C[:+z++JM 1PM Jw”

@ڹz-`*i9D.Ɇ,vZQ@-\ٞ-ڢ%cRB&^JY^QQtl)zFI C#ѹ>D(蝞%NmWm$V3bU~~.~ϟD ^,@bޚ'Dm@`(D<̡CDb⩫LIBVP.F.o(ނB_"/)=!^HjNRPl1n+6.c=q$KC`|>00Toi\Ff?qA4%^%VD"_Ƙ/|i2n.4eA /BԆkC@g,n)!$"tl ^ƀDGgiBpD$PR`A"sCۂpC:D~NZ1W;gBp\0axX1 ;D$Aȴ%"NII}6,u D T~?i6QCl*qQuZAb$ o" "2-P ?IE(21(. H5vRnEJ&;&o宩vByFگ~b[; ,c߂!GZs[.>Att 6D[)gsClsDpqBX$#D~rBe:/;ñq+X|a4M.!A1v,(<Cl蚊f17{,eʊpDT5s73>s}YH%urˤFc_,,'ĒBUHsE}7lVTۮ(⾷HHYcıiu7B/)wJ)1>d:(6]p;BvHG7Y̨B+bu:0EnÅww78BP\[m,V}kc5jA !tuuk?xw\ܶyJjhl#;IBb h>后3|MTE=uq:Q˹ިBF:8%SB PnΏ{C/9u契^7Ƽ]D"\hJ8׹Z1(8K'=Pv#>7܂I~S}@-@| Ƞ]Q]_(<'9dTA@2ۓ;~B*A 3}KPbp?<}~ !B 0 } %gُ'//WD.>Uc@C c !f> cKT-@xK T0A Uao*0b8@'QTeK/aƔ9fM7qԹgO P0tG&UiSOF:jUWfպkט*H"!|K|u@8FQpۃF +@EzXťߺ nEqhF W> n|WIͫ:vm۷qS}xܿ>xqǑ'W@Ŧ|@녤%+[HNj*0I4lܼ$Pv2O*Kh>:%B![2@& EA- ς QLQYlCT@-%hÓ$|龃8k)!9:`G30G1:**s2%"^\GDr⬬D2J^iK2W q`LTE[ŽdTI)K1TS۰`XR i(@ `|h=o#VL7{ #@*dUaLB|$$] x 7MWueJd؍Wy{MNXrHB$!X)>`X9]I.Q䃮LaBTqYyVj>lY衉ye.Z饙n-;ԧuItꭹ믉{o.kn{hn⡆/p o/n!x9ϻ :I/ YoH)iaRyWG1㑇D9ԓ^Vm$A^h_| O?9SިSBE4NhN Nq,Rk7v$.-mrM sy@W:s7"KyE'CŚh~H'bz@X]~r`:!@%/D]havGOw |rwt $ [Q]_+z30RuL^ъwȒ<@>>?t[ I*d#CA>BԮ8:lփb#EH h~Q[ ?()I>ӏXP(8]|~şt.Q@i{nHEdIO!/C2zO!Oo,on!#H]r`$O!$@ph4/Rp #in!%fo*p! @n|κ}";"p /OpJ0 0 p ٰ 0p0p1q  1%* !,8  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\5#"K0tWɲ-r,lQn/@߀_ '7xLsסf=q/9ݚx/,pSnz!>9袷)Iκ(KB;sߞs o\у c *SS=hRB@W59&-|E7c<"Kے;N1nH9^ <xT`g).cH} &@(L W^#؂:`%Cf$hcH^LC2Hb oI)b]g =hb|XB=ۈ,(ƹ!!%(7Xd)]KV(ܤEHYʿ!)7}D<E\ H߹ux}LG*V$d*z@ˋ4~2}H0v27I3KڥS'{qՑ :*ڐdU*D(׿!a#m`UWdBXV= Zy0t&\$u!ֈ*fJCe\F n :&y2]!+rݘd35̱Zbܭ\ :u|a K r&N p[Wd.h؊ M7b+a} f!U Ql d%whP49]/|n^}H1dɉSlE\*_Y%rg\^u{Pkb9Y@kVܑ,)1b~R aYBf04Ԭ4DvÅԫ{OChՀ[?,t҉`!-K~lz555MT+1 mW5j$q33DV+Ѯ.v?N&rrnBQ7VH l-Ǧ @C= m|! &5[dMw[m|8u8E2ܑ]0g{O8!/DsUuD4i'q@Y8ݗmp߮Odcx>ynzBs| S yW`|3lDB[=&o`cH}▌?);hw=nGV{Hr31 `dX<5^ͣ[%Ok9gxzz@<۫>x{G s|}<f\3ZLև],}}FWj}!if~ w fg:8W\qGƁck\gDt$']|kwg)!E46l8QVbD#ِd'%H9U)8{,(.W1  !|DUaWmT|GM{'BD;ՆH$ [ =8a@eԨ8Ry3I7YUэ CibWu ე3A~#%k eM+;a 5јfGGDrp;<0CcЖ QvH怒sQS5CW@"1u3{$HÙwasZ67h99BٚO8Qm7 ``SYex@ӜPzYgvqF;8):/yJi2> S !AsӀšqCyO)hNNqchG9;u ~Q5q NJ hiJGY +crSi2jd\m7bT5ѣs6$-(JovO(`LyzsS3$gҦ:e!}ĥMĚ]4uZD᧩Y1I-:HGZ;ZJ7Z A*PA!샞!# qOvpԛZQtɊQ"h8rv# qNjPĤz*fFJ7z3;-Ij >q:7Jך܊<"Ǝcr$Qq㨥鸤AhlT0;9&~L(f*`kk-ᲔC@ѱ##%{M7;`K9d 8)I9j3u5W8;k}eaX*aAz*8ࢊ#4sWIϖ3q\K7ЯtD,;u o+!X3&1as9RלXiA;7B 9K7WKRYiuW 󸉃qDAK9뺗jKVaHD[[ ʒFɛFjɵIDwK3IDʹ:O;iw4S”srytO6 zK(:.0a+JLaW נjqf?“ ܛk7\l 6ZK,7JƨJu{{q:{:l?|A<HCJ|4Tz #mtD^ܓKYڙ8 tNVmi[WK֯֘e|; X|8 &V) g#xؔc}Tc7#&ʆM.x,bM]ۺ iCmlLnܦS͵Gr6PxP4b,7c`^l?+!#[|\;?M|'D*w m:+=9 tKm2;+Q#BL=R ;mJ0TM9 :;=;L8M0`"9>G=8*,sK= ٓsC+m79彰#QrC[KG cۉA:7m@J1ȺU4MqSܽcSIM.0`:hײ•j WCkϨߞl#%j)^GYi O.tC[NN3n逌oOM rqw<81P:C^!schiF>| V|2۴+.M9\D$LFoA:%?7 [o:ym+]- ̄Utrg$u|փ1_^N9/8;WP Зo _\oߕ:9B0Pyz|? ԐCV.$ʼgA;[t&aA@ D Q`$^Dƍ=ÑcI ث0PMr" k?EPNYI 1( ^ZU]?4ZXfEVZmݾW\uśW^}|5RZe=)$2@薿 :=ksF:79n&*AWXUϝN!紝6JUq4UOsyfp ~cLUctk O gxK&_|ǟ_~W :܋H"J=N &kh@Ԍ'\ˎ'rɩGr*QZm Vj͡V£!3 A\8PЩjz *B, yB¨"/˪<hĖ2L6L3D3M5dM7ǵNArK˩kKO~lB:0K'a"3’jrJ>9 &&!EaԤI"OlFƐJ )V:u*t"SL/Q:Y}Zk6[m68!\+,t&T.[#Vu%Ȣ(ѿZ:-ըPRl!GU YWPX*b'ZQaꐧ[W(%ҙયaJ8%Y<}:h&hVP gJZ([ wuy^g f$M5Efh\yQj~yO;:=Ibb(q^_YҨ7/W{F/&},fu_=ǵ=>9"2ٚ)r_iPpȖh6m2Kڸ`w I^I귥K(WEoO=PJD>.[;ta^S$; VЂ`]؎-y(U%~mj B1P⼽P!{p9+'O=|ZR‡$jBSҨDQIr"A %t[bCt%D_0" ( юwcxjrdcK&ķPc+J DMW0^Ȉ&SI&E`2><^UA%rJ$EWAJ~A!"W9%a/K20l љτf4>~ďmq˲?te|mQOv)DGGDxAF(%ڄ 8BDQ) 'FSNxэHoxjbda2- t{?|޻`+d>}W_pb $җJ,0~ }w.[-_$%/K7rxdF 5@6 5[j;ۯ *l@H<A?@܈ 輄#?0@P@73= C?8AS}C ;$AsBiic 3n6BT5d z 03S $™CT?ﳨ8CI04D<}C27ג T;CӄPQ$R4Skٕڍ_7ڙ͊H5HuI~Ҿ iT HC#;1ݖԋ?e8F]4-ݰ} u5+H\Dф``zYxׅLk\Eν[HdxBҊ "ݝ GEͨ`޼-U*&Յ4ⒸcʀȆ au]PbNE]θ]Z; mlCFd9b1f],C?_T 9VyF4=ؾfh(B l7&➏fq6Qn. {DܤnqZvkζ%n ~VSѣQ?&5ƙv6C6Xhަ95Z(u; mx>Ehip.!;< mceo6po\ òocұS(]K ޒOw $cqPpl.rn + .>q>aX-fqw7o-M&>pĊ '눑,2&'\pϞ p԰0oR(ggM'6SGu [&{ >Hʊ&rHlÐ!&u|GG+MU YwJgIfe \ RWNpkҥ0vGwRziijdc>Nj;?WsaSͧk_(v'0@/7P牽R{ss&N]v4FXqxثXz8zDlnϊ?^kOO|@(7j z }~s6NUzz{W߷n]V.,h A<2lp ˆ98h7r8"Ȑ h`NJ%e/,ga4.r΃>5'Ҥ/q(QR-fժ9sWfzs*ذ>vպլUjײm-ܸrҭk.޼zW$Q'5T01f+䕨p%c.)% *VHA:N8!:6![S W:-W]E":d=%>;Ǔ/o<׳lv1$A`pskS]f~I~ݷ`WOKb#2%Y]pV=%@!j9tj-uYw^hDB2 9$Ey$I*$M2THSGW/3FB$ۍa\TT"`_7Ԡ[ٸefQKRe[[AvLo4D\Q+!!(3ԎANz**jE8T*5o ^gM; \}'@*Ё=(BЅ2}(D#*щR(F3эr(HC*ґ&=)J򸔲.&¦Ҵ6ե5d>ee=czC8)4PM\am)`A.@ gA#l H0]$ӵzuةE?@<X̡ ~K6 T nIy `X< Z#4ASb B+[C `,c}K=S׆'L,! qR`d16e! FrH>H|9A)'=@75nS0:$:uꌐN-5P,H ɐERdld)Ȝ$Q+#MMd.fWL0H3d A\mؤnH2e$Qǫ k*tpsi"P*$x1Ad19)HmmG[HX.ȩ1exlBpt<@lBos>AbjY$+7k%Bh0Ax엳@F>֐yyxDz[Q!1Nl~7O==n n [==nCZ6AƺB [mc L#w3M!˱CL$ vҁ]stBx,3q[wc|pA%fq#_tG 7o'Rߋ 0s .RAHt )qgC2R'O qE~GL]OZ$'R_I&;zݍ CEb\!ED B qmp]"ρ\B ^A@^mYDHٹ[1DNmD-4`Au]ESu!U x`E}1VD Q!ԩ_A_O ǍC^٠huAP=!\gWz,ձE-]D #BFn!i}5KM!Wpa"!zB!xaD`" Ǚ-Oi"DK !Dʑ*DNA?4a@`AC ATYǝGxbCR23G 7F,":9D6/T|_";:D6#x2E-]Dp@$$jbB 1'FD|đݐRy]E0YD* 5,$x :t@!MuķdrܤG0H A>TF:5F4w,Fc!@2V2eH<P%ZNE[U^d]b9 "[|YN"?d"%TQCF,M&~G=} RPdDwbU5ʤHqMaXa]IXXRtN\荙R|hՠjddMbPLB#"{8%A4CLCál\dEe]m҄Ew"f^^D G?"u21HϘCy bHLܧx^A`oAU>+9FK'IM5I{^tylIDxSDXWCHL"FA`?8nͿjL!֠G (PJhZD)!D$Aq:R懌Z HHicNEUCNZYih8&RÙ10EIkZ"C()(He݌*g",9XEܪ5̍R%^$C5$XT"*5H*OP*M.T°IK0Rw"w|chEX<2D8Ii(I$?(imÈgHp)&C>M8UMve_!]D,V= h&Y B#+vCeZ+RMlPVRDŁi6􂄺t Ld-@I=>" _00DMeR^ #Y.*&A0q[),AlC6Z2&j .,r(\t6DgK+E/8-q鲋VD9iUDD=16V&@f[ł m!WDZ DP3,1^n B-KC i4C@GNAdvStx清%r9{-Ur!^DaF]DDz6֦JbO01N4+G(P!JtD*5JATPwVK'wP4M)!lPYm!.q  G e-It2W.B`&RK_R,TdftM~,:2ŰLWޣ& u]f1vTe3ud$F }J+S 툆K<\_ ԁ6+_ݩXx(a u3[WUeF9_sGtzH\PEu@ŽAP3ʲBnʪC4 =cuqsG DB&T$* ۲iRDqnkZ7:r-:cE\qVD`Eb1D$dXT@l>h՛9QFu9{1UE7m't0vO3X7T40`LtXDp…;hAp5^.@lSBF5EoDUgU7|`FWdHǹ3Kh̦Gwh(^ #w$ֳ yoT!Z $IgGtBD,@lDSzrydkE71dwFe:Əi աdj#j*bFzuױg׾{w?|yѧW=` {t7\!+,^!͹ (<+(J?dbIH( *2Sf *ګ ,$EB#D6:s(RʣAn@:L(ƌ>c)曫Ƃȍvȅ 2(,:mʬXBB&̮H˄< "(!D e&̡O6J!=+"!A+sO\x2„JJ2Qt*hûK29DU|)7Qq]y_ Va-c%΄$1RK 4r"]FUHN.\kh0U+T$kԺ{G7#hB:@: 72"4(۱"hdπ"P)BIgل*EwΐYZHi@8q[XeQ % i _0~HȦ7BsviчvJ\١B@: EC↳;kUd$NO\o!>U!G 6z`R zόVDLkf]X=ԨC%+UH.*^׽O- [E ;,s;lZ`; B& ᔶ(n{_V/;F{474yVpC=C kBIC։,!tR?0!YÈЪ*"ĉLw̗K!VV0{jlʺV4b!LLJ:Fx  UI hF@0/BةŬ [F:l-?WHC@PEO "8%FkX 5Jd~åGBՐ!)Cȷ(K4d[<ָB-x-s!8iN<3)D}?ŰTYC9 L~hYC|F4m&,ƒfgD%7z2x!```|F,RSd*bK@ס(FmV!cE !K!ٴRF1)BTʠE ضR2;XQuD=:zdnd<큗SQ̂$ $B{^o7NGN^/c݉E7=d!koL qYWa @ c,H ڝ&(F 6 ;[ c:V<5_1ctj }z_ZuaJ2M#Z\œN)x 1T7sU{HyE.@MӅӊWrI̶v fTf:g|$򵱝mmo /S+w:myo;9FPxXC;FeT55#=s0#RSTo DIa޹_f,4>.:"#ԭEBH/w.ު v 20fb!h (&.*0s"7d.{Q>eBL@2B,!"ټyЮNfD (,Z!Jnb|odk͞+9X {in #iT0Nl¬8D^BP)4!1%q!'\zmz!m~4* 0#]kBb1ɼ L#~BHhblh0H f 1 9$!$ϓ!&\ qL%(饮 92~rOZ% ( b.pď"$/8h͔! |ôGE#%\N:>($M$Q2%C[ C"nq$j$ b3C th?%F,1 ЬGm;Q:S#0 iB nԺ|)7=4]u]nZDns+HJ, 3a{, kfUfG)(?(S*0z2582YFv^bBV{P /EtօG-q%P /"^@ѬBMj$p1Y `b!Py~oECHvJV ->:9hc3 eKDYQ#%h.!uXNl۵nnX.jS -94VGZ/,[I5Ega O?3Y^/YTt0SZP~L%"5pK[(&rV`"ng9e42Bbp,}&dx4(.:$m}wnj0 % I,d7FNb^Mw^x 1g'@6o7w#R M#/D3~v0cюmv +,ZfAC٧"`^M0 )sW10[070 3YJ-QTYK?t˷uV!4Ȑ8!QTݸI!_Q^M0h~+n0@G_hO "Ȭ l*fҎL`0]h7#(H5Bh1Y4 !:%Yy!`b3%tO_Xw "o/e..)1!bU[%:Gȅb[ g'= &ޕxZ 'A␬M?%We'302˚d?c Cc茩]L\PRvܶ2le"MnM-YU4~k#mfp5hzmt+::$3,npN'z9ӕׅR & 7AP W 7Z;bY QKbY࡙AQP]T)G=z蛋B#Jloqs =\ ź4f`+bs3E z_HRF##(tn=Q!.(U=H#'hVE~i%ZP#|ftY6[QC!Bczq:$n=Q<'QbZyQ&/ FlIhrkU eeVX{0@)8"i"af*#Te1 A*5 #!i: ;Fd/!;)Y7QWCWzM&NG o%2YR@XYYbe(1/a$ <3jH|k"RR4_|E^JB "sܩ5*đHPV[,nf+:|7Qr;qU؍oLTmY֖ $Ơ%izʤ(%[z|#2E4=ra! k9}Z#&u0JQ<(Nq%7[dCPႜHVK;%c FeWa$i2FM6x*pա&nH~JEpK.\#W]!iEdv7v}U8$fFaUR\wI`QF3|}(j8m~޴ 6J% d"SR\e$b4"(a p:C&/*j {$|̈́T\` 2t^ͽy;f<"΁*ο.%kj$i\ff"!0mcSN) 'md#^x^ X=2b,I(xnEfb  ,… _BF0Bk1rȦ0Co-C|`涌,HK5-iΡD>J11o 1W4ԩTu鳪֭\z 6رd˚=6ڵlۺ} 7ܹtuws^#TcT9l!χ{LM ~The<<ճ7,}z0S nn W5{z:,XHlմBcp81m-CSs-|T?n" fT<o\wPr4Yge^d Mҕ9EG`ݹ ]QT2 UVd4pB&ZU|]8jABdAAKqP]bPVne^~ fbIfffcQWbZARbHRe#ai1ҍ]B4y*L# WHi#eXBU6cHS\pTVuTAPiGk]uS)䎢pT qgq )NRrnH2d: B(YWړޔL0-Pǡ\5uPD2-_Q:9VKJ IpQUVnZQȩKC$l*r. s2Ls}RUՃ%R/ sﮏaӼ=ҔA( k](kZ\w #0V &DW@;FjN,<5Q7NC/M \=5NŲS5.EiiF$ 08f~BS"0:Ag=q:y[$gre A1)[ 11Ơ4Z,QPmxxܮU0jsKLA ZhTaHTsOߏOΡ+8< xxD"  Bb0>$C؃T Әt4MoӜR=C u~;PB6ݱ g;S ըJuTU'O1#WT~zI)ִulm[ ׄ>/KWԈ`ySVɐ;i )/H68Ɉ mh k%Ck&R/ɀRh0Ix)5d=)8Cـ@ɓD Mio ɐ WS}]yV^)jcgkzm~{Sgs~Fy~ }z )Iiɘ阏 )Iiə陟 )IiWc2R}gY)$PV/w@u@`Wm]U ! `ɝ|-Wro. w i-)U69wր. R#cU U0nGx6~6С:N\dK$_+>1á!ڢ+ Sja D A^! @*M7.S N*+jgՔfTqX:=h_ZbDn! Ngɰ`QaSH!*rQէ, JzT;Ћ 6~4=RbfC 1S qZ! ;l[#1p䆣EiRZy<7.1\5PtQ0TAyEѫ6X/1qTL%0%(U S~ Q[.ќ7!: 13U |DQɹe9)!!q4ARѯAy‘daĨ::g1V몭:GkĪy` ++c#jbӁZᎀ%$a Z9@HGȄ:! AAmѢEqD[YK^+`RS\-!'#;glֳ)S(E貹 D  p PE7J ۨ 1R$72<EKJ!QSۉoṱyԺK[Z$бA)V8ĻH * >P$IiVмB 1 T1:0;_tAm)JB`k򛼦K9[ iL Ekpkۣk5;ѻ1;afm8kygա42A|, &q,=P1lj%(Vs5ɟ8ꌻu913SqqB&hoc 'ٰ#l2n8c{ɡ#1[¼U(| ʹ|F2n2c%zV#4%U\IS;49lX3ڼ @7A["dA6&+\D q>uK.moQ`'mَJ[PQ1$a2ORcFs#ɳ ?lS]UJ&V~XqKsXNZNWzA >ñJ >Rys<꿈H"鯃f^8wJ0%tӼi4q^ KS- PG(5g >ꀎҒgzZd#)<`G3_j%&/ K -&;NN^\va>9z]1mZZs()^$jT.7)S𺡣7>ID>m/@ oR=y@|6IfqcUjW6KY\:&U~G*qDM=]AfnExpR¨DD1Q|;rc r_IAl@8Z-nѽo&1",/+\RǓ#1N {AcÆ$XE`A=.&^iX)w Lʉ\>4qs3uqǐ#KL&–<LT)C>9fbz  Y:+DT=Ď1LcXsJǩ&Yl· NDEU$MBS`zLPM$Pe3K 9xb/oXB\<bئdʖ1Ctv63?1^%^qɕ/gsѥO^uٵoNw 1xB N\h\+¾4ɛKp>^'؍~Iʪ@(0{=0j4BH&jL$tŽ, *! 9h'o+DŽ\Ϊz++zS%@KH0`' bS::`Ƀ|s4`lJ͚Ox눃KKlMtLPB;2#OEH#tRJ+RL3tSN;T#6xH4G{H(?BJl*rObňV&5W|CDoԨFH)?ȝSv[nQuam2!d;FK$qw vP(E#H]B^ >.ǜ#BPy!Έs Q3H8n IFywaB;7ԳC-Um{[V=h),@1E¦r#Z}hŝz m*rV59BD!BՍ#х uf]`עeSkNgf גiF;{lr0ZAM[\δ5%CZAaז#&qM|b?Gdκo .Jޭ[:玢.pGс^Dk/AZ$dA#1W./b4@~N\S:I+Ç0iu9ᷕ1f ݰC'Zыftu˽c]e x`-4ƭ㕑3N;r@6eOƈvg/[ԥB z2dTc5g~H$[fv#$B@3d6͖OZ@(-Bb kuwhC:h|[܁frHB$ˉSZo"#~ĕZ,IkrD8ǡll` pq M veMҎ !p.PM[\a//Jn6,zz׽uwᑶjuxȀk0;%|5A:s>ƭw."}f?t)sGnJfrѽCRaN͕󦴯J< - fs}sn Խ }}{_;k]2ƭ!kUKJn\;A:c%G/[م/]?r ~I)b%+Vb #(§[!;[:k:qպ={@>@ ~s.ҩ-.{T؂-23z@3w#ʎS h[@"?XH!"\"#+܎ɛswN V*0Š5TC?10ٚ-@1:  CD۽ ̎z N"@|DHDI 3ۏ;=3 Gui $gP\S?=hlXKB x YE[`A8F<¿/'/jܓOuQjȶs+;t@1Auʒ0^^H՛TǪث0p2=D4D<HLL!8BG@X1h#t-1 $T&<}B¡Mil DͷMMܨHk}j`F>%ndXM\ UCh{j|VGLbX3Gh}YM(?͆G`} ؂&]LC7D,u $`GdpX-P U[תʳc4&sԷ*F1sh26Mc<|+Uc?c@^ZA}ZG dG~ddJdKƤ:0|3 L-xK.eS"S^eVnp-YsUcY,[FfhfY8ifkflfmmfpgqgrL]-gu^gvngw~gxgygzg{g|g}g~gghh.h>hNh^hnh~hhhhhhhhhii.i>iNi^ini~iiiiiiiiiH!(j>jFڠnj~j~d׍j䨾jj,jkD;ReNk^k"=6涮kkGkV.Uhk!k>lNltnLdSlʮlˮDOn`lfj`왨DńllFOYBh$BP)wBX(Tm/nDbxnf⃌FO^lmf >X( Vnn oӢWi͢}. p#]X3@ooTlm p ppap.dtbN։rp.qԗC09 SK[ 6aw𞄈ko q = d Ϸo?q&o`(;OúԑrШq5ӯvjR=rpoRr's;#Qj!nMB[)BPܻ޻[Axt{-@^3uܣt~U~9BG/_}e#7Zuи_߿0W\GIy]dyjzI/I혃`!!Ar니2T o@E2  {1BEm!6Ix5̋#B6 6zz]l.Ta`"jMih_Y@ F!de<2"2$! iCnIrDG-yv͊[Ѣ8I eH2F8Ѝ'`9"uy,RGi[2%/8z[$hGf$ ]iЋH)BKkP>bi%ɳjic/is3\g\SJw5dR腛 <.Fs,&]ĩrTӠA(;+jыb4(N!i)AvO(zl?mJI3$`DՒJPi> &~9|d)Gjԣ"5J;2ρX")jxLsJ-3P$3)#aֳ5UNJV1$|zYUz5+[׿6lȷJJu!VR`U%|$*NŗR.k]HQtYH6z: \XdA̞/g08^H df[5FFRBa?ۅWZՔ5E7$Ͱ9q޲!)$\a `rC bj!x 9b{)=;k&  R`kީ>ݑq<@M cϊ'fEs,7Mufk&twQA"mƩ1CM&m}_?~>/Y;p\D$_) "z `9$`&{Z_l (Bq&( !C6\BpA R JAae^1Z!F=YJa_>V^\e!a!~\]!aa]YD͡y% aaDZDɑy "Bb$J9D*N"lvb((~܇TXË*b+" , )g-b..!/c0 0#vZ1*22c3:3Bc4J4Rc5Z5bc6j6rc7z7c88c99c::c;;c<>c??d@ @dAA"dB*B2dC:CBdDJDRdEz, iBYGdH$|Aq,dJJ"#Cpɍ;);A aTNTk9 BދZp2lWp:RlŦZZrl<#A=‹ZCFB2 ꞔ%v7FW@!B0dCA -l-j"m^, A )RmV#VjbK= z6j" L٢-/FvKm܆b#l !m\TAnaml(=@fnZgr9 [2F#n^jB`ޟ2~[nDX_DEoa >ƒ2*Bz2eboBW")bXioBoTx/^0<@]&ʞoRq//^$,p@,.kTR+Fz(KBɃZRp{0!殽`- a*rnݙp ϚK= 0 ) *bq.CfqKSq[cqksq{qqqqqqqqr r!!#r"+"3r#;2-a^$KA$@#k&ihmRrr)*",GɂO)20.R!.r.+f\e]奤Ne`]]f2~d0M47輁ZJ.^H4e5E2˥J92e3r7pr(p:ef=ӏ2ȚL]̲#a48i鳠s;krriv_ZfAl4At%4CPEI+c04}kƅDkn)Gǩ[D=dA w/;T4IwD$);._Rda:L{ &o:! E13¼%}ĩP*FG^$箭h ]@GDMΦhiAPlT >m@*vG7B4-}yivT{aʥ0Hhb)!PS4N+'Y<~׾PJCZ>&M3AW=BU>[Hf/E) zD Y~!|<n_[kc?AЪk.Z'D aB tz@cCs$&"ĨJ-INcѡąQB[h^8XhyC+kfCM#.SS7F,NӷEܚ!턈̓P>kiEb CȫY3#"hB:BKM U;t%MHǁNUR:zTJb2 ?u\15@a?uSO>pr=t]]sThQVVGQvy#HBp1-h7:%Z!#颉miGuR*uMQ깵9a""L%2+aܩ!MV>g%`bްxb>RMsuZX~aB &Bݰ>^sM(ށ ٢H[mXjZk6-rZi-b<.Wz*r27_8h'B|:dwV=nFQz?_z nQB2<%ALΜ2LS]+#:yF4|BJof5fLNfSm)BOAPC>ddj+ghSo/"Re'A%ME\(?!A)L8q -' [Қoy ٫q1Jz0 0\(;(#`z 3w52s '8Q N4bPa5_63.Ab Vda55%h6q%"\ z!z43823{3=4:H4H5B53:}ssGz"3s;y;3z  *s1ATA42zk1k%Ty&\J:BfC(1l DKDO.ADUf @EK3.FkFo4F @zGHTH &'Fqg0TJJJb-#;J_HKǔLLyy"MNTN[2y OOO?24yh&J QUQA!QF;9'S3US7z>1>9TKTOUSUUWU[U_VcUVgVkVoWsUWwW{WXUXXXYUYYYZUZZZ[U[[[\U\Ǖ\\]U]ו]]^U^^^_U_ _ɴ__v_a)B56a:,alL+vb3VcAW>,zI_JK.qc[]ocMckITeIsJ&LJ\hUMcv7+:ٔL.3hZ`5rj ~2f;bzak}VjDll62Tt#muT!#nunʖ/akF0v.0CFp amlrei!1fYe)ʃ$s""tv,$D7/ְ#H1R:u#Rm:7>7r{;Qc,cYb"I77'ByfgCz*˺ v#{j{"3x w7#/Wb+WKz"(vUlJ 6Jw.—1.w{#C}"q[l };T!Pⷛ`<7쐻v<'ؔdSZ-bek%"|0Y{ " ,' …=*rY3.PV8fI x2l#Q"Wh*0.iGH!؇ K8 jwlĘ 8!n JvRqWim"~Q)͉Ih8Jz? u5yr. Ԕ_Dْo Ym" It"2_vH~ =J82พ ʙK+ 7fY_-vx@x#Y7h0XIJO\Y.0y<wxʞKiYlz'mw4'Ζa \`  1iW%8Hr#vPoH ad8{ >Nb[lVmj ,8`b o80t"AU5b[S-PA @tI` xtM n: ҏ7 ળ.ʭ@v`: 9w ZtBuzhA!Xzpq@9{`,ZO15.<:@{{>;ˍ|78d!AN!j Yx#gSXj1{tnOE=r"ofPNIL2T_S"2F$ #j jL0.m"~,xt꡽ۑ-ʾ.c+K"ۘ5#;@ *$tSܽ75|"8\ %۳R!b -}KK!*ܔڷ7!b€ndav obЏ)BˏS@@_%duvJ!{6%# 6" E8QF4ݜZz9p#$$ ;CQaͧЧ}*&3B b$%k]0-k;Bc$i-Yɿ-*ftc}- Tqͧy!6%zCX8ZGD\bL.|(tS;[&-}7ۙ,JݣR,C[)%ʹ)}" %!7rva4E|km& I[⧬a*>. *^+ӹF[j꽱E߂~Fvvנ!&4Y Ԉ$>1-")h*\oS"y޹*0)H`y[z!B(#xtI[!Y_.)bI)}!TrJRŷ !^%?*d"|D)YeW|0d$ ᑶA qfÔ=w͔u z-*L(lH,T E!hPS! *kd ˗0_JBS0kސ*HN%iD$eT0Rz]LӢӉ$È$+juV?IZTKB4PA? Z lOAv\4|LY|fՊGϞ3n~qi"cڌkVN4$܅”њE<[^Nȓ+_μУKNسkν7GXjeH,aFqaSV(IMR$mbL;TN3HS.!rlLn8H49\*0!+dB߸g>OH tԥK: s! ; Fp %zAdnǹdvaL-+^M-V n$ꇞAj%>Dy*E~q7˲a~̧8d~|v7yz ؀ [3) tQp1ckAz miTy$h/mvT_y%.~$Wzp'JE."RAۗkGU8'AvfKufcq[vSwYT_-g 1qLj0 mgLLY#ddž#N) 9ywla(vyxCCxP! (0wQg4\I%e'_0W=DS`:j T= V854W7bUFThki$wsHp]`bc xPx?Cށ~ᢗڹٝ— ϹoPfAp94h[t?hUUaI igo*t8k`4gq{~vP&Mq(OlSH$ J_ z^dʓ=xyH&ڇ5 k` 3T:<ڣ*eII4WL|c{)s1=uJ2Y/s;bSZr7tDe7#3=AfT}=IUS=A9WiSƦαlf0Aa5ʢh>Zz At۱vW4 c$L 13#7,HguN/;.11=mC`h]:ǁU :Au z&ź.*c*џQQN*n:Z)Z=܁aJ\ʪ\4L'_Z<˴\@Ƈa˺4I\[{\ ao'̛b p['|؜ڼ<\|<\|=]} =]} "=$]&}(*,.02=4]@ .:fx lB=D]B$ FNP-,AQ}XZmLհ`b f=DPvιLJZHj]v qԟ q=u=9-1(׆]|x}֓Ka}zv=֔]XT"aB>ԣ/F~qݑ!ammٶ}Ԍ!I"xh FS:%XWaU}$uB^$"()s:4m #*jV7}l [="i 4Aޙ(Za=ndž'sͿ.rBV*7is| n$=a#n ^8,|R upw8|n*5AR[8 ́gMnOb>,>DGhV W.|&-*r^v>wZ]gw~OJ戞菼q4tjXJ "A9U!j.g^3?x NX4tP!}rY((90.=`AG~oSpAfmvl @]Po5kWj +q+N[9쀭^>nzȞ 8Logv\;!9طbnsNÑ#vP'sR@ڗq Jì_(h&PAb&+  ',1-/#?kCT_:^v2ta8z=m'\yסd_}~gLd{'Z`tw:F fbR +Qň|V?#sn1CG0n"v:'6Xk4Tݮ! y ,l!JKo_Y.hr.1D}_=vvS3?j>#4tnp u "nLq1 ^9[X=_~1oMܲPD8QZᛅMDRJ-]SL5męSN=}TPEETRM>UT4-|P`i`Ub NI0EP$ Mưx^Q0dyEFY&3.Ha6o,XOK$#C3j/M8w`݄UmƝ[n޽}\pōG\yz #=앖Wdimف[Z{G႗B& \=!x"!&h?^没+B%s&Bdz$@8M"P".Ld!z0Sl>"M!!"\hdE{BCC~2H!$H#D2I%dI'O2'J)-"HJ)/N4"+KX&ń lJ04 ă#(C(2cK%*B$BEDÅNG΃Z͋S|Y:Vݓ=hΣXZMEhR\Q^heCj:kk@gQ!~ࢲtlXl |icPR:^HVnv{]&0\!"!WjvF ӄƈ(c-GuG?}g}R=-\c)~+} qG:􄷶($` |1Ϙ1FsPq/[`@x}'Da UBЅIMl ?wuL⻔$ MB. D2d/?\}(0_c8F2ь+!,yC0 _bD q:kwAqhR|xw X3VҒd&5[1HK'2,r$1DxQ٣Q692GEq^yFHp=譑b+hKV2f49MjVӚHAHp*$zs#(RWL3)GX\ʁHt/ s K?5e"fBP6ԡf̦ YA !?$0}Izwq! $$9H?Fɑnd! /;*jP:TubPҡ*^Ta9$U(|%[RQBĂ[]Đ SRpΊbUi.Ӑծwk^Wįx8 YC!A tYKw6*ՠR+(!,N{N+kjUZֵֶ4ހ0BqN+ĠcprVBp+ظbu%fs BCsO[Z,M:wp%s}(Xo|;_@5̑ TDb ]dnsx'bp<%նB+ Kko`|nmr IǴ;Èsǻ5xe>s@ QTWbt ]l]f19r,<$B߲ ]o|^HT-]ov>v=bxnda@Z&C~6Y]@GI=d:*1#@#WEnx~ {k-s5yWeOכ}Wq؞pK#G~|?q:V=3~o` B?~H%FaD"~?XWz,*s!Tdt/r yClz+)Tdt0^8G<  !$"4#D$T%d&t'()*+,-./01$243D4T5d6t789:;<=>?@A$B4CtY(E|SCHI,BDrLMA<PQ AO3RDTT4ŃUXkEd[\+ ӈW`a5kH[#dTe/:fhF°OkllFmoK r4s\Audv\@wyǫz|G1X}ȀUDȄTH=𶅄ȈHhȚȋȌ ȏɞP14ɓDIH4#&=KɗɌ4|[ɛɈȰɜɟH3[ʢ4Jvt ʣdʦƊ܈tʩJb-<ʭ|ŪʯůZ9$˲EtIT˵E|H˸D{8˻ IJ+˾C8'lK#TL5ܘdYDŽL0$,HʴL&-L$M L.DMLItdHY^d(IߴZH$̾Z"T弽V|K;O$n΁:<O9lr DTdt%5EUeu LEdDGN5} KDe] SEEV;ՉZJuZtL %"E ^ʼnN#e&5F@&R uFx)R"(.Qn0q2Qu44uQxT6={t8~9S -H8;Su>T ʺ B=P4DUБMEu\I &HGTIԐKɡPOMS ϤTeJhXΫ$1J\N\Q]UD_Va5VcUV˰ZgM,'h4L@jlmќoq5sUW,uuW\Myye؜ڔۤ}eZF׀=J؂J4؄؍RuX%}؉5N،,O؏ِّ%ْ5ٓEٔUٕeٖuٜٟٗ٘ٙٚٛٝٞڠڡ%ڢ5ڣEڤUڥeڦuڧڨکڪګڬڭڮگ۰۱%۲5۳E۴U۵e۶u۷۸۹ۺۻۼ۽۾ۿ%5EUeuDžȕɥʵ%5EUeuׅؕ٥ڵ%5EUeu%5EUeu`% ;json-3.12.0/docs/mkdocs/000077500000000000000000000000001477615276400150015ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/Makefile000066400000000000000000000023451477615276400164450ustar00rootroot00000000000000# serve the site locally serve: style_check venv/bin/mkdocs serve serve_dirty: style_check venv/bin/mkdocs serve --dirtyreload # This target is used in the CI (ci_test_build_documentation). # This target is used by the docset Makefile. build: style_check venv/bin/mkdocs build style_check: @cd docs ; ../venv/bin/python3 ../scripts/check_structure.py # check the links in the documentation files in docs/mkdocs link_check: ENABLED_HTMLPROOFER=true venv/bin/mkdocs build # check the links in all other Markdown files link_check_markdowns: npx markdown-link-check --progress --alive 200,429 ../../README.md ../../FILES.md ../../.github/*.md # publish site to GitHub pages (not working in GitHub Actions; need special action) publish: venv/bin/mkdocs gh-deploy --clean --force # install a Python virtual environment # This target is used by the docset Makefile. install_venv: requirements.txt python3 -mvenv venv venv/bin/pip install --upgrade pip venv/bin/pip install -r requirements.txt # uninstall the virtual environment uninstall_venv: rm -fr venv update_requirements: rm -fr venv_small python3 -mvenv venv_small venv_small/bin/pip3 install pur venv_small/bin/pur -r requirements.txt rm -fr venv_small venv make install_venv json-3.12.0/docs/mkdocs/docs/000077500000000000000000000000001477615276400157315ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/000077500000000000000000000000001477615276400165025ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/adl_serializer/000077500000000000000000000000001477615276400214735ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/adl_serializer/from_json.md000066400000000000000000000041571477615276400240200ustar00rootroot00000000000000# nlohmann::adl_serializer::from_json ```cpp // (1) template static auto from_json(BasicJsonType && j, TargetType& val) noexcept( noexcept(::nlohmann::from_json(std::forward(j), val))) -> decltype(::nlohmann::from_json(std::forward(j), val), void()) // (2) template static auto from_json(BasicJsonType && j) noexcept( noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) ``` This function is usually called by the [`get()`](../basic_json/get.md) function of the [basic_json](../basic_json/index.md) class (either explicitly or via the conversion operators). 1. This function is chosen for default-constructible value types. 2. This function is chosen for value types which are not default-constructible. ## Parameters `j` (in) : JSON value to read from `val` (out) : value to write to ## Return value Copy of the JSON value, converted to `ValueType` ## Examples ??? example "Example: (1) Default-constructible type" The example below shows how a `from_json` function can be implemented for a user-defined type. This function is called by the `adl_serializer` when `template get()` is called. ```cpp --8<-- "examples/from_json__default_constructible.cpp" ``` Output: ```json --8<-- "examples/from_json__default_constructible.output" ``` ??? example "Example: (2) Non-default-constructible type" The example below shows how a `from_json` is implemented as part of a specialization of the `adl_serializer` to realize the conversion of a non-default-constructible type. ```cpp --8<-- "examples/from_json__non_default_constructible.cpp" ``` Output: ```json --8<-- "examples/from_json__non_default_constructible.output" ``` ## See also - [to_json](to_json.md) ## Version history - Added in version 2.1.0. json-3.12.0/docs/mkdocs/docs/api/adl_serializer/index.md000066400000000000000000000016141477615276400231260ustar00rootroot00000000000000# nlohmann::adl_serializer ```cpp template struct adl_serializer; ``` Serializer that uses ADL ([Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)) to choose `to_json`/`from_json` functions from the types' namespaces. It is implemented similar to ```cpp template struct adl_serializer { template static void to_json(BasicJsonType& j, const T& value) { // calls the "to_json" method in T's namespace } template static void from_json(const BasicJsonType& j, T& value) { // same thing, but with the "from_json" method } }; ``` ## Member functions - [**from_json**](from_json.md) - convert a JSON value to any value type - [**to_json**](to_json.md) - convert any value type to a JSON value ## Version history - Added in version 2.1.0. json-3.12.0/docs/mkdocs/docs/api/adl_serializer/to_json.md000066400000000000000000000017431477615276400234750ustar00rootroot00000000000000# nlohmann::adl_serializer::to_json ```cpp template static auto to_json(BasicJsonType& j, TargetType && val) noexcept( noexcept(::nlohmann::to_json(j, std::forward(val)))) -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) ``` This function is usually called by the constructors of the [basic_json](../basic_json/index.md) class. ## Parameters `j` (out) : JSON value to write to `val` (in) : value to read from ## Examples ??? example The example below shows how a `to_json` function can be implemented for a user-defined type. This function is called by the `adl_serializer` when the constructor `basic_json(ns::person)` is called. ```cpp --8<-- "examples/to_json.cpp" ``` Output: ```json --8<-- "examples/to_json.output" ``` ## See also - [from_json](from_json.md) ## Version history - Added in version 2.1.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/000077500000000000000000000000001477615276400206145ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/basic_json/accept.md000066400000000000000000000063771477615276400224120ustar00rootroot00000000000000# nlohmann::basic_json::accept ```cpp // (1) template static bool accept(InputType&& i, const bool ignore_comments = false); // (2) template static bool accept(IteratorType first, IteratorType last, const bool ignore_comments = false); ``` Checks whether the input is valid JSON. 1. Reads from a compatible input. 2. Reads from a pair of character iterators The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32. Unlike the [`parse()`](parse.md) function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information. ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `#!c FILE` pointer (throws if null) - a C-style array of characters - a pointer to a null-terminated string of single byte characters (throws if null) - a `std::string` - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type, for instance. - a pair of `std::string::iterator` or `std::vector::iterator` - a pair of pointers such as `ptr` and `ptr + len` ## Parameters `i` (in) : Input to parse from. `ignore_comments` (in) : whether comments should be ignored and treated like whitespace (`#!cpp true`) or yield a parse error (`#!cpp false`); (optional, `#!cpp false` by default) `first` (in) : iterator to the start of the character range `last` (in) : iterator to the end of the character range ## Return value Whether the input is valid JSON. ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an empty input like a null `#!c FILE*` or `#!c char*` pointer. ## Complexity Linear in the length of the input. The parser is a predictive LL(1) parser. ## Notes A UTF-8 byte order mark is silently ignored. ## Examples ??? example The example below demonstrates the `accept()` function reading from a string. ```cpp --8<-- "examples/accept__string.cpp" ``` Output: ```json --8<-- "examples/accept__string.output" ``` ## See also - [parse](parse.md) - deserialize from a compatible input - [operator>>](../operator_gtgt.md) - deserialize from stream ## Version history - Added in version 3.0.0. - Ignoring comments via `ignore_comments` added in version 3.9.0. - Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.12.0. !!! warning "Deprecation" Overload (2) replaces calls to `accept` with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp accept({ptr, ptr+len}, ...);` with `#!cpp accept(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/array.md000066400000000000000000000031161477615276400222550ustar00rootroot00000000000000# nlohmann::basic_json::array ```cpp static basic_json array(initializer_list_t init = {}); ``` Creates a JSON array value from a given initializer list. That is, given a list of values `a, b, c`, creates the JSON value `#!json [a, b, c]`. If the initializer list is empty, the empty array `#!json []` is created. ## Parameters `init` (in) : initializer list with JSON values to create an array from (optional) ## Return value JSON array value ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of `init`. ## Notes This function is only needed to express two edge cases that cannot be realized with the initializer list constructor ([`basic_json(initializer_list_t, bool, value_t)`](basic_json.md)). These cases are: 1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys 2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object ## Examples ??? example The following code shows an example for the `array` function. ```cpp --8<-- "examples/array.cpp" ``` Output: ```json --8<-- "examples/array.output" ``` ## See also - [`basic_json(initializer_list_t)`](basic_json.md) - create a JSON value from an initializer list - [`object`](object.md) - create a JSON object value from an initializer list ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/array_t.md000066400000000000000000000033201477615276400225750ustar00rootroot00000000000000# nlohmann::basic_json::array_t ```cpp using array_t = ArrayType>; ``` The type used to store JSON arrays. [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows: > An array is an ordered sequence of zero or more values. To store objects in C++, a type is defined by the template parameters explained below. ## Template parameters `ArrayType` : container type to store arrays (e.g., `std::vector` or `std::list`) `AllocatorType` : the allocator to use for objects (e.g., `std::allocator`) ## Notes #### Default type With the default values for `ArrayType` (`std::vector`) and `AllocatorType` (`std::allocator`), the default value for `array_t` is: ```cpp std::vector< basic_json, // value_type std::allocator // allocator_type > ``` #### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the [`max_size`](max_size.md) function of a JSON array. #### Storage Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of type `#!cpp array_t*` must be dereferenced. ## Examples ??? example The following code shows that `array_t` is by default, a typedef to `#!cpp std::vector`. ```cpp --8<-- "examples/array_t.cpp" ``` Output: ```json --8<-- "examples/array_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/at.md000066400000000000000000000166431477615276400215540ustar00rootroot00000000000000# nlohmann::basic_json::at ```cpp // (1) reference at(size_type idx); const_reference at(size_type idx) const; // (2) reference at(const typename object_t::key_type& key); const_reference at(const typename object_t::key_type& key) const; // (3) template reference at(KeyType&& key); template const_reference at(KeyType&& key) const; // (4) reference at(const json_pointer& ptr); const_reference at(const json_pointer& ptr) const; ``` 1. Returns a reference to the array element at specified location `idx`, with bounds checking. 2. Returns a reference to the object element with specified key `key`, with bounds checking. 3. See 2. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. 4. Returns a reference to the element at specified JSON pointer `ptr`, with bounds checking. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Parameters `idx` (in) : index of the element to access `key` (in) : object key of the elements to access `ptr` (in) : JSON pointer to the desired element ## Return value 1. reference to the element at index `idx` 2. reference to the element at key `key` 3. reference to the element at key `key` 4. reference to the element pointed to by `ptr` ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.304`](../../home/exceptions.md#jsonexceptiontype_error304) if the JSON value is not an array; in this case, calling `at` with an index makes no sense. See the example below. - Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if the index `idx` is out of range of the array; that is, `idx >= size()`. See the example below. 2. The function can throw the following exceptions: - Throws [`type_error.304`](../../home/exceptions.md#jsonexceptiontype_error304) if the JSON value is not an object; in this case, calling `at` with a key makes no sense. See the example below. - Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if the key `key` is not stored in the object; that is, `find(key) == end()`. See the example below. 3. See 2. 4. The function can throw the following exceptions: - Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index in the passed JSON pointer `ptr` begins with '0'. See the example below. - Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index in the passed JSON pointer `ptr` is not a number. See the example below. - Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index in the passed JSON pointer `ptr` is out of range. See the example below. - Throws [`out_of_range.402`](../../home/exceptions.md#jsonexceptionout_of_range402) if the array index '-' is used in the passed JSON pointer `ptr`. As `at` provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See the example below. - Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if the JSON pointer describes a key of an object which cannot be found. See the example below. - Throws [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) if the JSON pointer `ptr` can not be resolved. See the example below. ## Complexity 1. Constant. 2. Logarithmic in the size of the container. 3. Logarithmic in the size of the container. 4. Logarithmic in the size of the container. ## Examples ??? example "Example: (1) access specified array element with bounds checking" The example below shows how array elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__size_type.cpp" ``` Output: ```json --8<-- "examples/at__size_type.output" ``` ??? example "Example: (1) access specified array element with bounds checking" The example below shows how array elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__size_type_const.cpp" ``` Output: ```json --8<-- "examples/at__size_type_const.output" ``` ??? example "Example: (2) access specified object element with bounds checking" The example below shows how object elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/at__object_t_key_type.output" ``` ??? example "Example: (2) access specified object element with bounds checking" The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__object_t_key_type_const.cpp" ``` Output: ```json --8<-- "examples/at__object_t_key_type_const.output" ``` ??? example "Example: (3) access specified object element using string_view with bounds checking" The example below shows how object elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/at__keytype.c++17.output" ``` ??? example "Example: (3) access specified object element using string_view with bounds checking" The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__keytype_const.c++17.cpp" ``` Output: ```json --8<-- "examples/at__keytype_const.c++17.output" ``` ??? example "Example: (4) access specified element via JSON Pointer" The example below shows how object elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__json_pointer.cpp" ``` Output: ```json --8<-- "examples/at__json_pointer.output" ``` ??? example "Example: (4) access specified element via JSON Pointer" The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown. ```cpp --8<-- "examples/at__json_pointer_const.cpp" ``` Output: ```json --8<-- "examples/at__json_pointer_const.output" ``` ## See also - documentation on [checked access](../../features/element_access/checked_access.md) - [`operator[]`](operator%5B%5D.md) for unchecked access by reference - [`value`](value.md) for access with default value ## Version history 1. Added in version 1.0.0. 2. Added in version 1.0.0. 3. Added in version 3.11.0. 4. Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/back.md000066400000000000000000000024641477615276400220440ustar00rootroot00000000000000# nlohmann::basic_json::back ```cpp reference back(); const_reference back() const; ``` Returns a reference to the last element in the container. For a JSON container `c`, the expression `c.back()` is equivalent to ```cpp auto tmp = c.end(); --tmp; return *tmp; ``` ## Return value In the case of a structured type (array or object), a reference to the last element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned. ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions If the JSON value is `#!json null`, exception [`invalid_iterator.214`](../../home/exceptions.md#jsonexceptioninvalid_iterator214) is thrown. ## Complexity Constant. ## Notes !!! info "Precondition" The array or object must not be empty. Calling `back` on an empty array or object yields undefined behavior. ## Examples ??? example The following code shows an example for `back()`. ```cpp --8<-- "examples/back.cpp" ``` Output: ```json --8<-- "examples/back.output" ``` ## See also - [front](front.md) to access the first element ## Version history - Added in version 1.0.0. - Adjusted code to return reference to binary values in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/basic_json.md000066400000000000000000000362341477615276400232600ustar00rootroot00000000000000# nlohmann::basic_json::basic_json ```cpp // (1) basic_json(const value_t v); // (2) basic_json(std::nullptr_t = nullptr) noexcept; // (3) template basic_json(CompatibleType&& val) noexcept(noexcept( JSONSerializer::to_json(std::declval(), std::forward(val)))); // (4) template basic_json(const BasicJsonType& val); // (5) basic_json(initializer_list_t init, bool type_deduction = true, value_t manual_type = value_t::array); // (6) basic_json(size_type cnt, const basic_json& val); // (7) basic_json(iterator first, iterator last); basic_json(const_iterator first, const_iterator last); // (8) basic_json(const basic_json& other); // (9) basic_json(basic_json&& other) noexcept; ``` 1. Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type: | Value type | initial value | |------------|----------------| | null | `#!json null` | | boolean | `#!json false` | | string | `#!json ""` | | number | `#!json 0` | | object | `#!json {}` | | array | `#!json []` | | binary | empty array | The postcondition of this constructor can be restored by calling [`clear()`](clear.md). 2. Create a `#!json null` JSON value. It either takes a null pointer as parameter (explicitly creating `#!json null`) or no parameter (implicitly creating `#!json null`). The passed null pointer itself is not read -- it is only used to choose the right constructor. 3. This is a "catch all" constructor for all compatible JSON types; that is, types for which a `to_json()` method exists. The constructor forwards the parameter `val` to that method (to `json_serializer::to_json` method with `U = uncvref_t`, to be exact). Template type `CompatibleType` includes, but is not limited to, the following types: - **arrays**: [`array_t`](array_t.md) and all kinds of compatible containers such as `std::vector`, `std::deque`, `std::list`, `std::forward_list`, `std::array`, `std::valarray`, `std::set`, `std::unordered_set`, `std::multiset`, and `std::unordered_multiset` with a `value_type` from which a `basic_json` value can be constructed. - **objects**: [`object_t`](object_t.md) and all kinds of compatible associative containers such as `std::map`, `std::unordered_map`, `std::multimap`, and `std::unordered_multimap` with a `key_type` compatible to `string_t` and a `value_type` from which a `basic_json` value can be constructed. - **strings**: `string_t`, string literals, and all compatible string containers can be used. - **numbers**: [`number_integer_t`](number_integer_t.md), [`number_unsigned_t`](number_unsigned_t.md), [`number_float_t`](number_float_t.md), and all convertible number types such as `int`, `size_t`, `int64_t`, `float` or `double` can be used. - **boolean**: `boolean_t` / `bool` can be used. - **binary**: `binary_t` / `std::vector` may be used; unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with `const char*` will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type. See the examples below. 4. This is a constructor for existing `basic_json` types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones. The constructor tries to convert the internal `m_value` of the parameter. 5. Creates a JSON value of type array or object from the passed initializer list `init`. In case `type_deduction` is `#!cpp true` (default), the type of the JSON value to be created is deducted from the initializer list `init` according to the following rules: 1. If the list is empty, an empty JSON object value `{}` is created. 2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values. 3. In all other cases, an array is created. The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows: 1. The empty initializer list is written as `#!cpp {}` which is exactly an empty JSON object. 2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object. 3. In all other cases, the initializer list could not be interpreted as a JSON object type, so interpreting it as a JSON array type is safe. With the rules described above, the following JSON values cannot be expressed by an initializer list: - the empty array (`#!json []`): use `array(initializer_list_t)` with an empty initializer list in this case - arrays whose elements satisfy rule 2: use `array(initializer_list_t)` with the same initializer list in this case Function [`array()`](array.md) and [`object()`](object.md) force array and object creation from initializer lists, respectively. 6. Constructs a JSON array value by creating `cnt` copies of a passed value. In case `cnt` is `0`, an empty array is created. 7. Constructs the JSON value with the contents of the range `[first, last)`. The semantics depend on the different types a JSON value can have: - In case of a `#!json null` type, [invalid_iterator.206](../../home/exceptions.md#jsonexceptioninvalid_iterator206) is thrown. - In case of other primitive types (number, boolean, or string), `first` must be `begin()` and `last` must be `end()`. In this case, the value is copied. Otherwise, [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) is thrown. - In case of structured types (array, object), the constructor behaves as similar versions for `std::vector` or `std::map`; that is, a JSON array or object is constructed from the values in the range. 8. Creates a copy of a given JSON value. 9. Move constructor. Constructs a JSON value with the contents of the given value `other` using move semantics. It "steals" the resources from `other` and leaves it as JSON `#!json null` value. ## Template parameters `CompatibleType` : a type such that: - `CompatibleType` is not derived from `std::istream`, - `CompatibleType` is not `basic_json` (to avoid hijacking copy/move constructors), - `CompatibleType` is not a different `basic_json` type (i.e. with different template arguments) - `CompatibleType` is not a `basic_json` nested type (e.g., `json_pointer`, `iterator`, etc.) - `json_serializer` (with `U = uncvref_t`) has a `to_json(basic_json_t&, CompatibleType&&)` method `BasicJsonType`: : a type such that: - `BasicJsonType` is a `basic_json` type. - `BasicJsonType` has different template arguments than `basic_json_t`. `U`: : `uncvref_t` ## Parameters `v` (in) : the type of the value to create `val` (in) : the value to be forwarded to the respective constructor `init` (in) : initializer list with JSON values `type_deduction` (in) : internal parameter; when set to `#!cpp true`, the type of the JSON value is deducted from the initializer list `init`; when set to `#!cpp false`, the type provided via `manual_type` is forced. This mode is used by the functions `array(initializer_list_t)` and `object(initializer_list_t)`. `manual_type` (in) : internal parameter; when `type_deduction` is set to `#!cpp false`, the created JSON value will use the provided type (only `value_t::array` and `value_t::object` are valid); when `type_deduction` is set to `#!cpp true`, this parameter has no effect `cnt` (in) : the number of JSON copies of `val` to create `first` (in) : the beginning of the range to copy from (included) `last` (in) : the end of the range to copy from (excluded) `other` (in) : the JSON value to copy/move ## Exception safety 1. Strong guarantee: if an exception is thrown, there are no changes to any JSON value. 2. No-throw guarantee: this constructor never throws exceptions. 3. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no `to_json()` function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value. 4. Depends on the called constructor. For types directly supported by the library (i.e., all types for which no `to_json()` function was provided), a strong guarantee holds: if an exception is thrown, there are no changes to any JSON value. 5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value. 6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value. 7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value. 8. Strong guarantee: if an exception is thrown, there are no changes to any JSON value. 9. No-throw guarantee: this constructor never throws exceptions. ## Exceptions 1. (none) 2. The function does not throw exceptions. 3. (none) 4. (none) 5. The function can throw the following exceptions: - Throws [`type_error.301`](../../home/exceptions.md#jsonexceptiontype_error301) if `type_deduction` is `#!cpp false`, `manual_type` is `value_t::object`, but `init` contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If `type_deduction` would have been `#!cpp true`, an array would have been created. See `object(initializer_list_t)` for an example. 6. (none) 7. The function can throw the following exceptions: - Throws [`invalid_iterator.201`](../../home/exceptions.md#jsonexceptioninvalid_iterator201) if iterators `first` and `last` are not compatible (i.e., do not belong to the same JSON value). In this case, the range `[first, last)` is undefined. - Throws [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) if iterators `first` and `last` belong to a primitive type (number, boolean, or string), but `first` does not point to the first element anymore. In this case, the range `[first, last)` is undefined. See the example code below. - Throws [`invalid_iterator.206`](../../home/exceptions.md#jsonexceptioninvalid_iterator206) if iterators `first` and `last` belong to a `#!json null` value. In this case, the range `[first, last)` is undefined. 8. (none) 9. The function does not throw exceptions. ## Complexity 1. Constant. 2. Constant. 3. Usually linear in the size of the passed `val`, also depending on the implementation of the called `to_json()` method. 4. Usually linear in the size of the passed `val`, also depending on the implementation of the called `to_json()` method. 5. Linear in the size of the initializer list `init`. 6. Linear in `cnt`. 7. Linear in distance between `first` and `last`. 8. Linear in the size of `other`. 9. Constant. ## Notes - Overload 5: !!! note "Empty initializer list" When used without parentheses around an empty initializer list, `basic_json()` is called instead of this function, yielding the JSON `#!json null` value. - Overload 7: !!! info "Preconditions" - Iterators `first` and `last` must be initialized. **This precondition is enforced with a [runtime assertion](../../features/assertions.md). - Range `[first, last)` is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions above. A violation of this precondition yields undefined behavior. !!! danger "Runtime assertion" A precondition is enforced with a [runtime assertion](../../features/assertions.md). - Overload 8: !!! info "Postcondition" `#!cpp *this == other` - Overload 9: !!! info "Postconditions" - `#!cpp `*this` has the same value as `other` before the call. - `other` is a JSON `#!json null` value ## Examples ??? example "Example: (1) create an empty value with a given type" The following code shows the constructor for different `value_t` values. ```cpp --8<-- "examples/basic_json__value_t.cpp" ``` Output: ```json --8<-- "examples/basic_json__value_t.output" ``` ??? example "Example: (2) create a `#!json null` object" The following code shows the constructor with and without a null pointer parameter. ```cpp --8<-- "examples/basic_json__nullptr_t.cpp" ``` Output: ```json --8<-- "examples/basic_json__nullptr_t.output" ``` ??? example "Example: (3) create a JSON value from compatible types" The following code shows the constructor with several compatible types. ```cpp --8<-- "examples/basic_json__CompatibleType.cpp" ``` Output: ```json --8<-- "examples/basic_json__CompatibleType.output" ``` Note the output is platform-dependent. ??? example "Example: (5) create a container (array or object) from an initializer list" The example below shows how JSON values are created from initializer lists. ```cpp --8<-- "examples/basic_json__list_init_t.cpp" ``` Output: ```json --8<-- "examples/basic_json__list_init_t.output" ``` ??? example "Example: (6) construct an array with count copies of a given value" The following code shows examples for creating arrays with several copies of a given value. ```cpp --8<-- "examples/basic_json__size_type_basic_json.cpp" ``` Output: ```json --8<-- "examples/basic_json__size_type_basic_json.output" ``` ??? example "Example: (7) construct a JSON container given an iterator range" The example below shows several ways to create JSON values by specifying a subrange with iterators. ```cpp --8<-- "examples/basic_json__InputIt_InputIt.cpp" ``` Output: ```json --8<-- "examples/basic_json__InputIt_InputIt.output" ``` ??? example "Example: (8) copy constructor" The following code shows an example for the copy constructor. ```cpp --8<-- "examples/basic_json__basic_json.cpp" ``` Output: ```json --8<-- "examples/basic_json__basic_json.output" ``` ??? example "Example: (9) move constructor" The code below shows the move constructor explicitly called via `std::move`. ```cpp --8<-- "examples/basic_json__moveconstructor.cpp" ``` Output: ```json --8<-- "examples/basic_json__moveconstructor.output" ``` ## Version history 1. Since version 1.0.0. 2. Since version 1.0.0. 3. Since version 2.1.0. 4. Since version 3.2.0. 5. Since version 1.0.0. 6. Since version 1.0.0. 7. Since version 1.0.0. 8. Since version 1.0.0. 9. Since version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/begin.md000066400000000000000000000012271477615276400222240ustar00rootroot00000000000000# nlohmann::basic_json::begin ```cpp iterator begin() noexcept; const_iterator begin() const noexcept; ``` Returns an iterator to the first element. ![Illustration from cppreference.com](../../images/range-begin-end.svg) ## Return value iterator to the first element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `begin()`. ```cpp --8<-- "examples/begin.cpp" ``` Output: ```json --8<-- "examples/begin.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/binary.md000066400000000000000000000035561477615276400224330ustar00rootroot00000000000000# nlohmann::basic_json::binary ```cpp // (1) static basic_json binary(const typename binary_t::container_type& init); static basic_json binary(typename binary_t::container_type&& init); // (2) static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype); static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype); ``` 1. Creates a JSON binary array value from a given binary container. 2. Creates a JSON binary array value from a given binary container with subtype. Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats. ## Parameters `init` (in) : container containing bytes to use as a binary type `subtype` (in) : subtype to use in CBOR, MessagePack, and BSON ## Return value JSON binary array value ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of `init`; constant for `typename binary_t::container_type&& init` versions. ## Notes Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a `std::vector`. Because JSON binary arrays are a non-standard extension, it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident. ## Examples ??? example The following code shows how to create a binary value. ```cpp --8<-- "examples/binary.cpp" ``` Output: ```json --8<-- "examples/binary.output" ``` ## Version history - Added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/binary_t.md000066400000000000000000000067601477615276400227560ustar00rootroot00000000000000# nlohmann::basic_json::binary_t ```cpp using binary_t = byte_container_with_subtype; ``` This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values. Additionally, as an implementation detail, the subtype of the binary data is carried around as a `std::uint64_t`, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). The subtype is added to `BinaryType` via the helper type [byte_container_with_subtype](../byte_container_with_subtype/index.md). [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type as: > Major type 2: a byte string. The string's length in bytes is represented following the rules for positive integers > (major type 0). [MessagePack's documentation on the bin type family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) describes this type as: > Bin format family stores a byte array in 2, 3, or 5 bytes of extra bytes in addition to the size of the byte array. [BSON's specifications](http://bsonspec.org/spec.html) describe several binary types; however, this type is intended to represent the generic binary type which has the description: > Generic binary subtype - This is the most commonly used binary subtype and should be the 'default' for drivers and > tools. None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes. The default representation of this binary format is a `#!cpp std::vector`, which is a very common way to represent a byte array in modern C++. ## Template parameters `BinaryType` : container type to store arrays ## Notes #### Default type The default values for `BinaryType` is `#!cpp std::vector`. #### Storage Binary Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of the type `#!cpp binary_t*` must be dereferenced. #### Notes on subtypes - CBOR - Binary values are represented as byte strings. Subtypes are written as tags. - MessagePack - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as a signed 8-bit integer. - If no subtype is given, the bin family (bin8, bin16, bin32) is used. - BSON - If a subtype is given, it is used and added as an unsigned 8-bit integer. - If no subtype is given, the generic binary subtype 0x00 is used. ## Examples ??? example The following code shows that `binary_t` is by default, a typedef to `#!cpp nlohmann::byte_container_with_subtype>`. ```cpp --8<-- "examples/binary_t.cpp" ``` Output: ```json --8<-- "examples/binary_t.output" ``` ## See also - [byte_container_with_subtype](../byte_container_with_subtype/index.md) ## Version history - Added in version 3.8.0. Changed the type of subtype to `std::uint64_t` in version 3.10.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/boolean_t.md000066400000000000000000000016421477615276400231030ustar00rootroot00000000000000# nlohmann::basic_json::boolean_t ```cpp using boolean_t = BooleanType; ``` The type used to store JSON booleans. [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a type which differentiates the two literals `#!json true` and `#!json false`. To store objects in C++, a type is defined by the template parameter `BooleanType` which chooses the type to use. ## Notes #### Default type With the default values for `BooleanType` (`#!cpp bool`), the default value for `boolean_t` is `#!cpp bool`. #### Storage Boolean values are stored directly inside a `basic_json` type. ## Examples ??? example The following code shows that `boolean_t` is by default, a typedef to `#!cpp bool`. ```cpp --8<-- "examples/boolean_t.cpp" ``` Output: ```json --8<-- "examples/boolean_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/cbegin.md000066400000000000000000000012011477615276400223570ustar00rootroot00000000000000# nlohmann::basic_json::cbegin ```cpp const_iterator cbegin() const noexcept; ``` Returns an iterator to the first element. ![Illustration from cppreference.com](../../images/range-begin-end.svg) ## Return value iterator to the first element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `cbegin()`. ```cpp --8<-- "examples/cbegin.cpp" ``` Output: ```json --8<-- "examples/cbegin.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/cbor_tag_handler_t.md000066400000000000000000000015121477615276400247350ustar00rootroot00000000000000# nlohmann::basic_json::cbor_tag_handler_t ```cpp enum class cbor_tag_handler_t { error, ignore, store }; ``` This enumeration is used in the [`from_cbor`](from_cbor.md) function to choose how to treat tags: error : throw a `parse_error` exception in case of a tag ignore : ignore tags store : store tagged values as binary container with subtype (for bytes 0xd8..0xdb) ## Examples ??? example The example below shows how the different values of the `cbor_tag_handler_t` influence the behavior of [`from_cbor`](from_cbor.md) when reading a tagged byte string. ```cpp --8<-- "examples/cbor_tag_handler_t.cpp" ``` Output: ```json --8<-- "examples/cbor_tag_handler_t.output" ``` ## Version history - Added in version 3.9.0. Added value `store` in 3.10.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/cend.md000066400000000000000000000012041477615276400220440ustar00rootroot00000000000000# nlohmann::basic_json::cend ```cpp const_iterator cend() const noexcept; ``` Returns an iterator to one past the last element. ![Illustration from cppreference.com](../../images/range-begin-end.svg) ## Return value iterator one past the last element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `cend()`. ```cpp --8<-- "examples/cend.cpp" ``` Output: ```json --8<-- "examples/cend.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/clear.md000066400000000000000000000023511477615276400222250ustar00rootroot00000000000000# nlohmann::basic_json::clear ```cpp void clear() noexcept; ``` Clears the content of a JSON value and resets it to the default value as if [`basic_json(value_t)`](basic_json.md) would have been called with the current value type from [`type()`](type.md): | Value type | initial value | |------------|----------------------| | null | `null` | | boolean | `false` | | string | `""` | | number | `0` | | binary | An empty byte vector | | object | `{}` | | array | `[]` | Has the same effect as calling ```.cpp *this = basic_json(type()); ``` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear in the size of the JSON value. ## Notes All iterators, pointers, and references related to this container are invalidated. ## Examples ??? example The example below shows the effect of `clear()` to different JSON types. ```cpp --8<-- "examples/clear.cpp" ``` Output: ```json --8<-- "examples/clear.output" ``` ## Version history - Added in version 1.0.0. - Added support for binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/contains.md000066400000000000000000000063101477615276400227540ustar00rootroot00000000000000# nlohmann::basic_json::contains ```cpp // (1) bool contains(const typename object_t::key_type& key) const; // (2) template bool contains(KeyType&& key) const; // (3) bool contains(const json_pointer& ptr) const; ``` 1. Check whether an element exists in a JSON object with a key equivalent to `key`. If the element is not found or the JSON value is not an object, `#!cpp false` is returned. 2. See 1. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. 3. Check whether the given JSON pointer `ptr` can be resolved in the current JSON value. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Parameters `key` (in) : key value to check its existence. `ptr` (in) : JSON pointer to check its existence. ## Return value 1. `#!cpp true` if an element with specified `key` exists. If no such element with such a key is found or the JSON value is not an object, `#!cpp false` is returned. 2. See 1. 3. `#!cpp true` if the JSON pointer can be resolved to a stored value, `#!cpp false` otherwise. ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. The function does not throw exceptions. 2. The function does not throw exceptions. 3. The function can throw the following exceptions: - Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index begins with `0`. - Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index was not a number. ## Complexity Logarithmic in the size of the JSON object. ## Notes - This method always returns `#!cpp false` when executed on a JSON type that is not an object. - This method can be executed on any JSON value type. !!! info "Postconditions" If `#!cpp j.contains(x)` returns `#!c true` for a key or JSON pointer `x`, then it is safe to call `j[x]`. ## Examples ??? example "Example: (1) check with key" The example shows how `contains()` is used. ```cpp --8<-- "examples/contains__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/contains__object_t_key_type.output" ``` ??? example "Example: (2) check with key using string_view" The example shows how `contains()` is used. ```cpp --8<-- "examples/contains__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/contains__keytype.c++17.output" ``` ??? example "Example: (3) check with JSON pointer" The example shows how `contains()` is used. ```cpp --8<-- "examples/contains__json_pointer.cpp" ``` Output: ```json --8<-- "examples/contains__json_pointer.output" ``` ## Version history 1. Added in version 3.11.0. 2. Added in version 3.6.0. Extended template `KeyType` to support comparable types in version 3.11.0. 3. Added in version 3.7.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/count.md000066400000000000000000000037111477615276400222700ustar00rootroot00000000000000# nlohmann::basic_json::count ```cpp // (1) size_type count(const typename object_t::key_type& key) const; // (2) template size_type count(KeyType&& key) const; ``` 1. Returns the number of elements with key `key`. If `ObjectType` is the default `std::map` type, the return value will always be `0` (`key` was not found) or `1` (`key` was found). 2. See 1. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Parameters `key` (in) : key value of the element to count. ## Return value Number of elements with key `key`. If the JSON value is not an object, the return value will be `0`. ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Complexity Logarithmic in the size of the JSON object. ## Notes This method always returns `0` when executed on a JSON type that is not an object. ## Examples ??? example "Example: (1) count number of elements" The example shows how `count()` is used. ```cpp --8<-- "examples/count__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/count__object_t_key_type.output" ``` ??? example "Example: (2) count number of elements using string_view" The example shows how `count()` is used. ```cpp --8<-- "examples/count__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/count__keytype.c++17.output" ``` ## Version history 1. Added in version 3.11.0. 2. Added in version 1.0.0. Changed parameter `key` type to `KeyType&&` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/crbegin.md000066400000000000000000000012671477615276400225550ustar00rootroot00000000000000# nlohmann::basic_json::crbegin ```cpp const_reverse_iterator crbegin() const noexcept; ``` Returns an iterator to the reverse-beginning; that is, the last element. ![Illustration from cppreference.com](../../images/range-rbegin-rend.svg) ## Return value reverse iterator to the first element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `crbegin()`. ```cpp --8<-- "examples/crbegin.cpp" ``` Output: ```json --8<-- "examples/crbegin.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/crend.md000066400000000000000000000014421477615276400222320ustar00rootroot00000000000000# nlohmann::basic_json::crend ```cpp const_reverse_iterator crend() const noexcept; ``` Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior. ![Illustration from cppreference.com](../../images/range-rbegin-rend.svg) ## Return value reverse iterator to the element following the last element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `eend()`. ```cpp --8<-- "examples/crend.cpp" ``` Output: ```json --8<-- "examples/crend.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/default_object_comparator_t.md000066400000000000000000000015371477615276400266700ustar00rootroot00000000000000# nlohmann::basic_json::default_object_comparator_t ```cpp using default_object_comparator_t = std::less; // until C++14 using default_object_comparator_t = std::less<>; // since C++14 ``` The default comparator used by [`object_t`](object_t.md). Since C++14 a transparent comparator is used which prevents unnecessary string construction when looking up a key in an object. The actual comparator used depends on [`object_t`](object_t.md) and can be obtained via [`object_comparator_t`](object_comparator_t.md). ## Examples ??? example The example below demonstrates the default comparator. ```cpp --8<-- "examples/default_object_comparator_t.cpp" ``` Output: ```json --8<-- "examples/default_object_comparator_t.output" ``` ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/diff.md000066400000000000000000000023611477615276400220500ustar00rootroot00000000000000# nlohmann::basic_json::diff ```cpp static basic_json diff(const basic_json& source, const basic_json& target); ``` Creates a [JSON Patch](http://jsonpatch.com) so that value `source` can be changed into the value `target` by calling [`patch`](patch.md) function. For two JSON values `source` and `target`, the following code yields always `#!cpp true`: ```cpp source.patch(diff(source, target)) == target; ``` ## Parameters `source` (in) : JSON value to compare from `target` (in) : JSON value to compare against ## Return value a JSON patch to convert the `source` to `target` ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the lengths of `source` and `target`. ## Notes Currently, only `remove`, `add`, and `replace` operations are generated. ## Examples ??? example The following code shows how a JSON patch is created as a diff for two JSON values. ```cpp --8<-- "examples/diff.cpp" ``` Output: ```json --8<-- "examples/diff.output" ``` ## See also - [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/dump.md000066400000000000000000000050631477615276400221070ustar00rootroot00000000000000# nlohmann::basic_json::dump ```cpp string_t dump(const int indent = -1, const char indent_char = ' ', const bool ensure_ascii = false, const error_handler_t error_handler = error_handler_t::strict) const; ``` Serialization function for JSON values. The function tries to mimic Python's [`json.dumps()` function](https://docs.python.org/2/library/json.html#json.dump), and currently supports its `indent` and `ensure_ascii` parameters. ## Parameters `indent` (in) : If `indent` is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of `0` will only insert newlines. `-1` (the default) selects the most compact representation. `indent_char` (in) : The character to use for indentation if `indent` is greater than `0`. The default is ` ` (space). `ensure_ascii` (in) : If `ensure_ascii` is true, all non-ASCII characters in the output are escaped with `\uXXXX` sequences, and the result consists of ASCII characters only. `error_handler` (in) : how to react on decoding errors; there are three possible values (see [`error_handler_t`](error_handler_t.md): `strict` (throws and exception in case a decoding error occurs; default), `replace` (replace invalid UTF-8 sequences with U+FFFD), and `ignore` (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged)). ## Return value string containing the serialization of the JSON value ## Exception safety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. ## Exceptions Throws [`type_error.316`](../../home/exceptions.md#jsonexceptiontype_error316) if a string stored inside the JSON value is not UTF-8 encoded and `error_handler` is set to `strict` ## Complexity Linear. ## Notes Binary values are serialized as an object containing two keys: - "bytes": an array of bytes as integers - "subtype": the subtype as integer or `#!json null` if the binary has no subtype ## Examples ??? example The following example shows the effect of different `indent`, `indent_char`, and `ensure_ascii` parameters to the result of the serialization. ```cpp --8<-- "examples/dump.cpp" ``` Output: ```json --8<-- "examples/dump.output" ``` ## Version history - Added in version 1.0.0. - Indentation character `indent_char`, option `ensure_ascii` and exceptions added in version 3.0.0. - Error handlers added in version 3.4.0. - Serialization of binary values added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/emplace.md000066400000000000000000000033321477615276400225450ustar00rootroot00000000000000# nlohmann::basic_json::emplace ```cpp template std::pair emplace(Args&& ... args); ``` Inserts a new element into a JSON object constructed in-place with the given `args` if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from `args`. ## Template parameters `Args` : compatible types to create a `basic_json` object ## Iterator invalidation For [`ordered_json`](../ordered_json.md), adding a value to an object can yield a reallocation, in which case all iterators (including the `end()` iterator) and all references to the elements are invalidated. ## Parameters `args` (in) : arguments to forward to a constructor of `basic_json` ## Return value a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a `#!cpp bool` denoting whether the insertion took place. ## Exceptions Throws [`type_error.311`](../../home/exceptions.md#jsonexceptiontype_error311) when called on a type other than JSON object or `#!json null`; example: `"cannot use emplace() with number"` ## Complexity Logarithmic in the size of the container, O(log(`size()`)). ## Examples ??? example The example shows how `emplace()` can be used to add elements to a JSON object. Note how the `#!json null` value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key. ```cpp --8<-- "examples/emplace.cpp" ``` Output: ```json --8<-- "examples/emplace.output" ``` ## Version history - Since version 2.0.8. json-3.12.0/docs/mkdocs/docs/api/basic_json/emplace_back.md000066400000000000000000000031561477615276400235310ustar00rootroot00000000000000# nlohmann::basic_json::emplace_back ```cpp template reference emplace_back(Args&& ... args); ``` Creates a JSON value from the passed parameters `args` to the end of the JSON value. If the function is called on a JSON `#!json null` value, an empty array is created before appending the value created from `args`. ## Template parameters `Args` : compatible types to create a `basic_json` object ## Iterator invalidation By adding an element to the end of the array, a reallocation can happen, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. Otherwise, only the [`end()`](end.md) iterator is invalidated. ## Parameters `args` (in) : arguments to forward to a constructor of `basic_json` ## Return value reference to the inserted element ## Exceptions Throws [`type_error.311`](../../home/exceptions.md#jsonexceptiontype_error311) when called on a type other than JSON array or `#!json null`; example: `"cannot use emplace_back() with number"` ## Complexity Amortized constant. ## Examples ??? example The example shows how `emplace_back()` can be used to add elements to a JSON array. Note how the `null` value was silently converted to a JSON array. ```cpp --8<-- "examples/emplace_back.cpp" ``` Output: ```json --8<-- "examples/emplace_back.output" ``` ## See also - [operator+=](operator+=.md) add a value to an array/object - [push_back](push_back.md) add a value to an array/object ## Version history - Since version 2.0.8. - Returns reference since 3.7.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/empty.md000066400000000000000000000033251477615276400222770ustar00rootroot00000000000000# nlohmann::basic_json::empty ```cpp bool empty() const noexcept; ``` Checks if a JSON value has no elements (i.e. whether its [`size()`](size.md) is `0`). ## Return value The return value depends on the different types and is defined as follows: | Value type | return value | |------------|----------------------------------------| | null | `#!cpp true` | | boolean | `#!cpp false` | | string | `#!cpp false` | | number | `#!cpp false` | | binary | `#!cpp false` | | object | result of function `object_t::empty()` | | array | result of function `array_t::empty()` | ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant, as long as [`array_t`](array_t.md) and [`object_t`](object_t.md) satisfy the [Container](https://en.cppreference.com/w/cpp/named_req/Container) concept; that is, their `empty()` functions have constant complexity. ## Possible implementation ```cpp bool empty() const noexcept { return size() == 0; } ``` ## Notes This function does not return whether a string stored as JSON value is empty -- it returns whether the JSON container itself is empty which is `#!cpp false` in the case of a string. ## Examples ??? example The following code uses `empty()` to check if a JSON object contains any elements. ```cpp --8<-- "examples/empty.cpp" ``` Output: ```json --8<-- "examples/empty.output" ``` ## Version history - Added in version 1.0.0. - Extended to return `#!cpp false` for binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/end.md000066400000000000000000000012301477615276400217000ustar00rootroot00000000000000# nlohmann::basic_json::end ```cpp iterator end() noexcept; const_iterator end() const noexcept; ``` Returns an iterator to one past the last element. ![Illustration from cppreference.com](../../images/range-begin-end.svg) ## Return value iterator one past the last element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `end()`. ```cpp --8<-- "examples/end.cpp" ``` Output: ```json --8<-- "examples/end.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/end_pos.md000066400000000000000000000036221477615276400225700ustar00rootroot00000000000000# nlohmann::basic_json::end_pos ```cpp #if JSON_DIAGNOSTIC_POSITIONS constexpr std::size_t end_pos() const noexcept; #endif ``` Returns the position immediately following the last character of the JSON string from which the value was parsed from. | JSON type | return value | |-----------|-----------------------------------| | object | position after the closing `}` | | array | position after the closing `]` | | string | position after the closing `"` | | number | position after the last character | | boolean | position after `e` | | null | position after `l` | ## Return value the position of the character _following_ the last character of the given value in the parsed JSON string, if the value was created by the [`parse`](parse.md) function, or `std::string::npos` if the value was constructed otherwise ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Notes !!! note "Note" The function is only available if macro [`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) has been defined to `#!cpp 1` before including the library header. !!! warning "Invalidation" The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated when the JSON value is changed. ## Examples ??? example "Example" ```cpp --8<-- "examples/diagnostic_positions.cpp" ``` Output: ``` --8<-- "examples/diagnostic_positions.output" ``` The output shows the start/end positions of all the objects and fields in the JSON string. ## See also - [start_pos](start_pos.md) to access the start position - [JSON_DIAGNOSTIC_POSITIONS](../macros/json_diagnostic_positions.md) for an overview of the diagnostic positions ## Version history - Added in version 3.12.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/erase.md000066400000000000000000000164511477615276400222440ustar00rootroot00000000000000# nlohmann::basic_json::erase ```cpp // (1) iterator erase(iterator pos); const_iterator erase(const_iterator pos); // (2) iterator erase(iterator first, iterator last); const_iterator erase(const_iterator first, const_iterator last); // (3) size_type erase(const typename object_t::key_type& key); // (4) template size_type erase(KeyType&& key); // (5) void erase(const size_type idx); ``` 1. Removes an element from a JSON value specified by iterator `pos`. The iterator `pos` must be valid and dereferenceable. Thus, the `end()` iterator (which is valid, but is not dereferenceable) cannot be used as a value for `pos`. If called on a primitive type other than `#!json null`, the resulting JSON value will be `#!json null`. 2. Remove an element range specified by `[first; last)` from a JSON value. The iterator `first` does not need to be dereferenceable if `first == last`: erasing an empty range is a no-op. If called on a primitive type other than `#!json null`, the resulting JSON value will be `#!json null`. 3. Removes an element from a JSON object by key. 4. See 3. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. 5. Removes an element from a JSON array by index. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Parameters `pos` (in) : iterator to the element to remove `first` (in) : iterator to the beginning of the range to remove `last` (in) : iterator past the end of the range to remove `key` (in) : object key of the elements to remove `idx` (in) : array index of the element to remove ## Return value 1. Iterator following the last removed element. If the iterator `pos` refers to the last element, the `end()` iterator is returned. 2. Iterator following the last removed element. If the iterator `last` refers to the last element, the `end()` iterator is returned. 3. Number of elements removed. If `ObjectType` is the default `std::map` type, the return value will always be `0` (`key` was not found) or `1` (`key` was found). 4. See 3. 5. (none) ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.307`](../../home/exceptions.md#jsonexceptiontype_error307) if called on a `null` value; example: `"cannot use erase() with null"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` - Throws [`invalid_iterator.205`](../../home/exceptions.md#jsonexceptioninvalid_iterator205) if called on a primitive type with invalid iterator (i.e., any iterator which is not `begin()`); example: `"iterator out of range"` 2. The function can throw the following exceptions: - Throws [`type_error.307`](../../home/exceptions.md#jsonexceptiontype_error307) if called on a `null` value; example: `"cannot use erase() with null"` - Throws [`invalid_iterator.203`](../../home/exceptions.md#jsonexceptioninvalid_iterator203) if called on iterators which does not belong to the current JSON value; example: `"iterators do not fit current value"` - Throws [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) if called on a primitive type with invalid iterators (i.e., if `first != begin()` and `last != end()`); example: `"iterators out of range"` 3. The function can throw the following exceptions: - Throws [`type_error.307`](../../home/exceptions.md#jsonexceptiontype_error307) when called on a type other than JSON object; example: `"cannot use erase() with null"` 4. See 3. 5. The function can throw the following exceptions: - Throws [`type_error.307`](../../home/exceptions.md#jsonexceptiontype_error307) when called on a type other than JSON object; example: `"cannot use erase() with null"` - Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) when `idx >= size()`; example: `"array index 17 is out of range"` ## Complexity 1. The complexity depends on the type: - objects: amortized constant - arrays: linear in distance between `pos` and the end of the container - strings and binary: linear in the length of the member - other types: constant 2. The complexity depends on the type: - objects: `log(size()) + std::distance(first, last)` - arrays: linear in the distance between `first` and `last`, plus linear in the distance between `last` and end of the container - strings and binary: linear in the length of the member - other types: constant 3. `log(size()) + count(key)` 4. `log(size()) + count(key)` 5. Linear in distance between `idx` and the end of the container. ## Notes 1. Invalidates iterators and references at or after the point of the `erase`, including the `end()` iterator. 2. (none) 3. References and iterators to the erased elements are invalidated. Other references and iterators are not affected. 4. See 3. 5. (none) ## Examples ??? example "Example: (1) remove element given an iterator" The example shows the effect of `erase()` for different JSON types using an iterator. ```cpp --8<-- "examples/erase__IteratorType.cpp" ``` Output: ```json --8<-- "examples/erase__IteratorType.output" ``` ??? example "Example: (2) remove elements given an iterator range" The example shows the effect of `erase()` for different JSON types using an iterator range. ```cpp --8<-- "examples/erase__IteratorType_IteratorType.cpp" ``` Output: ```json --8<-- "examples/erase__IteratorType_IteratorType.output" ``` ??? example "Example: (3) remove element from a JSON object given a key" The example shows the effect of `erase()` for different JSON types using an object key. ```cpp --8<-- "examples/erase__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/erase__object_t_key_type.output" ``` ??? example "Example: (4) remove element from a JSON object given a key using string_view" The example shows the effect of `erase()` for different JSON types using an object key. ```cpp --8<-- "examples/erase__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/erase__keytype.c++17.output" ``` ??? example "Example: (5) remove element from a JSON array given an index" The example shows the effect of `erase()` using an array index. ```cpp --8<-- "examples/erase__size_type.cpp" ``` Output: ```json --8<-- "examples/erase__size_type.output" ``` ## Version history 1. Added in version 1.0.0. Added support for binary types in version 3.8.0. 2. Added in version 1.0.0. Added support for binary types in version 3.8.0. 3. Added in version 1.0.0. 4. Added in version 3.11.0. 5. Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/error_handler_t.md000066400000000000000000000016661477615276400243200ustar00rootroot00000000000000# nlohmann::basic_json::error_handler_t ```cpp enum class error_handler_t { strict, replace, ignore }; ``` This enumeration is used in the [`dump`](dump.md) function to choose how to treat decoding errors while serializing a `basic_json` value. Three values are differentiated: strict : throw a `type_error` exception in case of invalid UTF-8 replace : replace invalid UTF-8 sequences with U+FFFD (� REPLACEMENT CHARACTER) ignore : ignore invalid UTF-8 sequences; all bytes are copied to the output unchanged ## Examples ??? example The example below shows how the different values of the `error_handler_t` influence the behavior of [`dump`](dump.md) when reading serializing an invalid UTF-8 sequence. ```cpp --8<-- "examples/error_handler_t.cpp" ``` Output: ```json --8<-- "examples/error_handler_t.output" ``` ## Version history - Added in version 3.4.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/exception.md000066400000000000000000000046131477615276400231400ustar00rootroot00000000000000# nlohmann::basic_json::exception ```cpp class exception : public std::exception; ``` This class is an extension of [`std::exception`](https://en.cppreference.com/w/cpp/error/exception) objects with a member `id` for exception ids. It is used as the base class for all exceptions thrown by the `basic_json` class. This class can hence be used as "wildcard" to catch exceptions, see example below. ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_exception fill:#CCCCFF ``` Subclasses: - [`parse_error`](parse_error.md) for exceptions indicating a parse error - [`invalid_iterator`](invalid_iterator.md) for exceptions indicating errors with iterators - [`type_error`](type_error.md) for exceptions indicating executing a member function with a wrong type - [`out_of_range`](out_of_range.md) for exceptions indicating access out of the defined range - [`other_error`](other_error.md) for exceptions indicating other library errors ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception ## Notes To have nothrow-copy-constructible exceptions, we internally use `std::runtime_error` which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor. ## Examples ??? example The following code shows how arbitrary library exceptions can be caught. ```cpp --8<-- "examples/exception.cpp" ``` Output: ```json --8<-- "examples/exception.output" ``` ## See also [List of exceptions](../../home/exceptions.md) ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/find.md000066400000000000000000000042541477615276400220630ustar00rootroot00000000000000# nlohmann::basic_json::find ```cpp // (1) iterator find(const typename object_t::key_type& key); const_iterator find(const typename object_t::key_type& key) const; // (2) template iterator find(KeyType&& key); template const_iterator find(KeyType&& key) const; ``` 1. Finds an element in a JSON object with a key equivalent to `key`. If the element is not found or the JSON value is not an object, `end()` is returned. 2. See 1. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Parameters `key` (in) : key value of the element to search for. ## Return value Iterator to an element with a key equivalent to `key`. If no such element is found or the JSON value is not an object, a past-the-end iterator (see `end()`) is returned. ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Complexity Logarithmic in the size of the JSON object. ## Notes This method always returns `end()` when executed on a JSON type that is not an object. ## Examples ??? example "Example: (1) find object element by key" The example shows how `find()` is used. ```cpp --8<-- "examples/find__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/find__object_t_key_type.output" ``` ??? example "Example: (2) find object element by key using string_view" The example shows how `find()` is used. ```cpp --8<-- "examples/find__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/find__keytype.c++17.output" ``` ## See also - [contains](contains.md) checks whether a key exists ## Version history 1. Added in version 3.11.0. 2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/flatten.md000066400000000000000000000022171477615276400225750ustar00rootroot00000000000000# nlohmann::basic_json::flatten ```cpp basic_json flatten() const; ``` The function creates a JSON object whose keys are JSON pointers (see [RFC 6901](https://tools.ietf.org/html/rfc6901)) and whose values are all primitive (see [`is_primitive()`](is_primitive.md) for more information). The original JSON value can be restored using the [`unflatten()`](unflatten.md) function. ## Return value an object that maps JSON pointers to primitive values ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Complexity Linear in the size of the JSON value. ## Notes Empty objects and arrays are flattened to `#!json null` and will not be reconstructed correctly by the [`unflatten()`](unflatten.md) function. ## Examples ??? example The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers. ```cpp --8<-- "examples/flatten.cpp" ``` Output: ```json --8<-- "examples/flatten.output" ``` ## See also - [unflatten](unflatten.md) the reverse function ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/from_bjdata.md000066400000000000000000000052131477615276400234070ustar00rootroot00000000000000# nlohmann::basic_json::from_bjdata ```cpp // (1) template static basic_json from_bjdata(InputType&& i, const bool strict = true, const bool allow_exceptions = true); // (2) template static basic_json from_bjdata(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true); ``` Deserializes a given input to a JSON value using the BJData (Binary JData) serialization format. 1. Reads from a compatible input. 2. Reads from an iterator range. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bjdata.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type ## Parameters `i` (in) : an input in BJData format convertible to an input adapter `first` (in) : iterator to the start of the input `last` (in) : iterator to the end of the input `strict` (in) : whether to expect the input to be consumed until EOF (`#!cpp true` by default) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) ## Return value deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or the end of the file was not reached when `strict` was set to true - Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if a parse error occurs - Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string could not be parsed successfully ## Complexity Linear in the size of the input. ## Examples ??? example The example shows the deserialization of a byte vector in BJData format to a JSON value. ```cpp --8<-- "examples/from_bjdata.cpp" ``` Output: ```json --8<-- "examples/from_bjdata.output" ``` ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/from_bson.md000066400000000000000000000066401477615276400231300ustar00rootroot00000000000000# nlohmann::basic_json::from_bson ```cpp // (1) template static basic_json from_bson(InputType&& i, const bool strict = true, const bool allow_exceptions = true); // (2) template static basic_json from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true); ``` Deserializes a given input to a JSON value using the BSON (Binary JSON) serialization format. 1. Reads from a compatible input. 2. Reads from an iterator range. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bson.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type ## Parameters `i` (in) : an input in BSON format convertible to an input adapter `first` (in) : iterator to the start of the input `last` (in) : iterator to the end of the input `strict` (in) : whether to expect the input to be consumed until EOF (`#!cpp true` by default) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) ## Return value deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions Throws [`parse_error.114`](../../home/exceptions.md#jsonexceptionparse_error114) if an unsupported BSON record type is encountered. ## Complexity Linear in the size of the input. ## Examples ??? example The example shows the deserialization of a byte vector in BSON format to a JSON value. ```cpp --8<-- "examples/from_bson.cpp" ``` Output: ```json --8<-- "examples/from_bson.output" ``` ## See also - [BSON specification](http://bsonspec.org/spec.html) - [to_bson](to_bson.md) for the analogous serialization - [from_cbor](from_cbor.md) for the related CBOR format - [from_msgpack](from_msgpack.md) for the related MessagePack format - [from_ubjson](from_ubjson.md) for the related UBJSON format ## Version history - Added in version 3.4.0. !!! warning "Deprecation" - Overload (2) replaces calls to `from_bson` with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_bson(ptr, len, ...);` with `#!cpp from_bson(ptr, ptr+len, ...);`. - Overload (2) replaces calls to `from_bson` with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_bson({ptr, ptr+len}, ...);` with `#!cpp from_bson(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/from_cbor.md000066400000000000000000000101331477615276400231040ustar00rootroot00000000000000# nlohmann::basic_json::from_cbor ```cpp // (1) template static basic_json from_cbor(InputType&& i, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error); // (2) template static basic_json from_cbor(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error); ``` Deserializes a given input to a JSON value using the CBOR (Concise Binary Object Representation) serialization format. 1. Reads from a compatible input. 2. Reads from an iterator range. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/cbor.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type ## Parameters `i` (in) : an input in CBOR format convertible to an input adapter `first` (in) : iterator to the start of the input `last` (in) : iterator to the end of the input `strict` (in) : whether to expect the input to be consumed until EOF (`#!cpp true` by default) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) `tag_handler` (in) : how to treat CBOR tags (optional, `error` by default); see [`cbor_tag_handler_t`](cbor_tag_handler_t.md) for more information ## Return value deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or the end of the file was not reached when `strict` was set to true - Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from CBOR were used in the given input or if the input is not valid CBOR - Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key, but not found ## Complexity Linear in the size of the input. ## Examples ??? example The example shows the deserialization of a byte vector in CBOR format to a JSON value. ```cpp --8<-- "examples/from_cbor.cpp" ``` Output: ```json --8<-- "examples/from_cbor.output" ``` ## Version history - Added in version 2.0.9. - Parameter `start_index` since version 2.1.1. - Changed to consume input adapters, removed `start_index` parameter, and added `strict` parameter in version 3.0.0. - Added `allow_exceptions` parameter in version 3.2.0. - Added `tag_handler` parameter in version 3.9.0. !!! warning "Deprecation" - Overload (2) replaces calls to `from_cbor` with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_cbor(ptr, len, ...);` with `#!cpp from_cbor(ptr, ptr+len, ...);`. - Overload (2) replaces calls to `from_cbor` with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_cbor({ptr, ptr+len}, ...);` with `#!cpp from_cbor(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/from_msgpack.md000066400000000000000000000073751477615276400236220ustar00rootroot00000000000000# nlohmann::basic_json::from_msgpack ```cpp // (1) template static basic_json from_msgpack(InputType&& i, const bool strict = true, const bool allow_exceptions = true); // (2) template static basic_json from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true); ``` Deserializes a given input to a JSON value using the MessagePack serialization format. 1. Reads from a compatible input. 2. Reads from an iterator range. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/messagepack.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type ## Parameters `i` (in) : an input in MessagePack format convertible to an input adapter `first` (in) : iterator to the start of the input `last` (in) : iterator to the end of the input `strict` (in) : whether to expect the input to be consumed until EOF (`#!cpp true` by default) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) ## Return value deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or the end of the file was not reached when `strict` was set to true - Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from MessagePack were used in the given input or if the input is not valid MessagePack - Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key, but not found ## Complexity Linear in the size of the input. ## Examples ??? example The example shows the deserialization of a byte vector in MessagePack format to a JSON value. ```cpp --8<-- "examples/from_msgpack.cpp" ``` Output: ```json --8<-- "examples/from_msgpack.output" ``` ## Version history - Added in version 2.0.9. - Parameter `start_index` since version 2.1.1. - Changed to consume input adapters, removed `start_index` parameter, and added `strict` parameter in version 3.0.0. - Added `allow_exceptions` parameter in version 3.2.0. !!! warning "Deprecation" - Overload (2) replaces calls to `from_msgpack` with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_msgpack(ptr, len, ...);` with `#!cpp from_msgpack(ptr, ptr+len, ...);`. - Overload (2) replaces calls to `from_cbor` with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_msgpack({ptr, ptr+len}, ...);` with `#!cpp from_msgpack(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/from_ubjson.md000066400000000000000000000067611477615276400234730ustar00rootroot00000000000000# nlohmann::basic_json::from_ubjson ```cpp // (1) template static basic_json from_ubjson(InputType&& i, const bool strict = true, const bool allow_exceptions = true); // (2) template static basic_json from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true); ``` Deserializes a given input to a JSON value using the UBJSON (Universal Binary JSON) serialization format. 1. Reads from a compatible input. 2. Reads from an iterator range. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/ubjson.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type ## Parameters `i` (in) : an input in UBJSON format convertible to an input adapter `first` (in) : iterator to the start of the input `last` (in) : iterator to the end of the input `strict` (in) : whether to expect the input to be consumed until EOF (`#!cpp true` by default) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) ## Return value deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or the end of the file was not reached when `strict` was set to true - Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if a parse error occurs - Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string could not be parsed successfully ## Complexity Linear in the size of the input. ## Examples ??? example The example shows the deserialization of a byte vector in UBJSON format to a JSON value. ```cpp --8<-- "examples/from_ubjson.cpp" ``` Output: ```json --8<-- "examples/from_ubjson.output" ``` ## Version history - Added in version 3.1.0. - Added `allow_exceptions` parameter in version 3.2.0. !!! warning "Deprecation" - Overload (2) replaces calls to `from_ubjson` with a pointer and a length as first two parameters, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_ubjson(ptr, len, ...);` with `#!cpp from_ubjson(ptr, ptr+len, ...);`. - Overload (2) replaces calls to `from_ubjson` with a pair of iterators as their first parameter, which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp from_ubjson({ptr, ptr+len}, ...);` with `#!cpp from_ubjson(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/front.md000066400000000000000000000024461477615276400222740ustar00rootroot00000000000000# nlohmann::basic_json::front ```cpp reference front(); const_reference front() const; ``` Returns a reference to the first element in the container. For a JSON container `#!cpp c`, the expression `#!cpp c.front()` is equivalent to `#!cpp *c.begin()`. ## Return value In the case of a structured type (array or object), a reference to the first element is returned. In the case of number, string, boolean, or binary values, a reference to the value is returned. ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions If the JSON value is `#!json null`, exception [`invalid_iterator.214`](../../home/exceptions.md#jsonexceptioninvalid_iterator214) is thrown. ## Complexity Constant. ## Notes !!! info "Precondition" The array or object must not be empty. Calling `front` on an empty array or object yields undefined behavior. ## Examples ??? example The following code shows an example for `front()`. ```cpp --8<-- "examples/front.cpp" ``` Output: ```json --8<-- "examples/front.output" ``` ## See also - [back](back.md) to access the last element ## Version history - Added in version 1.0.0. - Adjusted code to return reference to binary values in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get.md000066400000000000000000000104231477615276400217150ustar00rootroot00000000000000# nlohmann::basic_json::get ```cpp // (1) template ValueType get() const noexcept( noexcept(JSONSerializer::from_json( std::declval(), std::declval()))); // (2) template BasicJsonType get() const; // (3) template PointerType get_ptr(); template constexpr const PointerType get_ptr() const noexcept; ``` 1. Explicit type conversion between the JSON value and a compatible value which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). The value is converted by calling the `json_serializer` `from_json()` method. The function is equivalent to executing ```cpp ValueType ret; JSONSerializer::from_json(*this, ret); return ret; ``` This overload is chosen if: - `ValueType` is not `basic_json`, - `json_serializer` has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)`, and - `json_serializer` does not have a `from_json()` method of the form `ValueType from_json(const basic_json&)` If the type is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible), the value is converted by calling the `json_serializer` `from_json()` method. The function is then equivalent to executing ```cpp return JSONSerializer::from_json(*this); ``` This overload is chosen if: - `ValueType` is not `basic_json` and - `json_serializer` has a `from_json()` method of the form `ValueType from_json(const basic_json&)` If `json_serializer` has both overloads of `from_json()`, the latter one is chosen. 2. Overload for `basic_json` specializations. The function is equivalent to executing ```cpp return *this; ``` 3. Explicit pointer access to the internally stored JSON value. No copies are made. ## Template parameters `ValueType` : the value type to return `BasicJsonType` : a specialization of `basic_json` `PointerType` : pointer type; must be a pointer to [`array_t`](array_t.md), [`object_t`](object_t.md), [`string_t`](string_t.md), [`boolean_t`](boolean_t.md), [`number_integer_t`](number_integer_t.md), or [`number_unsigned_t`](number_unsigned_t.md), [`number_float_t`](number_float_t.md), or [`binary_t`](binary_t.md). Other types will not compile. ## Return value 1. copy of the JSON value, converted to `ValueType` 2. a copy of `#!cpp *this`, converted into `BasicJsonType` 3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; `#!cpp nullptr` otherwise ## Exceptions Depends on what `json_serializer` `from_json()` method throws ## Notes !!! danger "Undefined behavior" Writing data to the pointee (overload 3) of the result yields an undefined state. ## Examples ??? example The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard `std::vector`, (3) A JSON object can be converted to C++ associative containers such as `std::unordered_map`. ```cpp --8<-- "examples/get__ValueType_const.cpp" ``` Output: ```json --8<-- "examples/get__ValueType_const.output" ``` ??? example The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a `#cpp nullptr` is returned if the value and the requested pointer type does not match. ```cpp --8<-- "examples/get__PointerType.cpp" ``` Output: ```json --8<-- "examples/get__PointerType.output" ``` ## Version history 1. Since version 2.1.0. 2. Since version 2.1.0. Extended to work with other specializations of `basic_json` in version 3.2.0. 3. Since version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get_allocator.md000066400000000000000000000007661477615276400237660ustar00rootroot00000000000000# nlohmann::basic_json::get_allocator ```cpp static allocator_type get_allocator(); ``` Returns the allocator associated with the container. ## Return value associated allocator ## Examples ??? example The example shows how `get_allocator()` is used to created `json` values. ```cpp --8<-- "examples/get_allocator.cpp" ``` Output: ```json --8<-- "examples/get_allocator.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get_binary.md000066400000000000000000000013511477615276400232610ustar00rootroot00000000000000# nlohmann::basic_json::get_binary ```cpp binary_t& get_binary(); const binary_t& get_binary() const; ``` Returns a reference to the stored binary value. ## Return value Reference to binary value. ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions Throws [`type_error.302`](../../home/exceptions.md#jsonexceptiontype_error302) if the value is not binary ## Complexity Constant. ## Examples ??? example The following code shows how to query a binary value. ```cpp --8<-- "examples/get_binary.cpp" ``` Output: ```json --8<-- "examples/get_binary.output" ``` ## Version history - Added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get_ptr.md000066400000000000000000000046431477615276400226110ustar00rootroot00000000000000# nlohmann::basic_json::get_ptr ```cpp template PointerType get_ptr() noexcept; template constexpr const PointerType get_ptr() const noexcept; ``` Implicit pointer access to the internally stored JSON value. No copies are made. ## Template parameters `PointerType` : pointer type; must be a pointer to [`array_t`](array_t.md), [`object_t`](object_t.md), [`string_t`](string_t.md), [`boolean_t`](boolean_t.md), [`number_integer_t`](number_integer_t.md), or [`number_unsigned_t`](number_unsigned_t.md), [`number_float_t`](number_float_t.md), or [`binary_t`](binary_t.md). Other types will not compile. ## Return value pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; `#!cpp nullptr` otherwise ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Notes !!! danger "Undefined behavior" The pointer becomes invalid if the underlying JSON object changes. Consider the following example code where the pointer `ptr` changes after the array is resized. As a result, reading or writing to `ptr` after the array change would be undefined behavior. The address of the first array element changes, because the underlying `std::vector` is resized after adding a fifth element. ```cpp #include #include using json = nlohmann::json; int main() { json j = {1, 2, 3, 4}; auto* ptr = j[0].get_ptr(); std::cout << "value at " << ptr << " is " << *ptr << std::endl; j.push_back(5); ptr = j[0].get_ptr(); std::cout << "value at " << ptr << " is " << *ptr << std::endl; } ``` Output: ``` value at 0x6000012fc1c8 is 1 value at 0x6000029fc088 is 1 ``` ## Examples ??? example The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a `#!cpp nullptr` is returned if the value and the requested pointer type does not match. ```cpp --8<-- "examples/get_ptr.cpp" ``` Output: ```json --8<-- "examples/get_ptr.output" ``` ## See also - [get_ref()](get_ref.md) get a reference value ## Version history - Added in version 1.0.0. - Extended to binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get_ref.md000066400000000000000000000033121477615276400225500ustar00rootroot00000000000000# nlohmann::basic_json::get_ref ```cpp template ReferenceType get_ref(); template const ReferenceType get_ref() const; ``` Implicit reference access to the internally stored JSON value. No copies are made. ## Template parameters `ReferenceType` : reference type; must be a reference to [`array_t`](array_t.md), [`object_t`](object_t.md), [`string_t`](string_t.md), [`boolean_t`](boolean_t.md), [`number_integer_t`](number_integer_t.md), or [`number_unsigned_t`](number_unsigned_t.md), [`number_float_t`](number_float_t.md), or [`binary_t`](binary_t.md). Enforced by a static assertion. ## Return value reference to the internally stored JSON value if the requested reference type fits to the JSON value; throws [`type_error.303`](../../home/exceptions.md#jsonexceptiontype_error303) otherwise ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions Throws [`type_error.303`](../../home/exceptions.md#jsonexceptiontype_error303) if the requested reference type does not match the stored JSON value type; example: `"incompatible ReferenceType for get_ref, actual type is binary"`. ## Complexity Constant. ## Notes !!! danger "Undefined behavior" The reference becomes invalid if the underlying JSON object changes. ## Examples ??? example The example shows several calls to `get_ref()`. ```cpp --8<-- "examples/get_ref.cpp" ``` Output: ```json --8<-- "examples/get_ref.output" ``` ## See also - [get_ptr()](get_ptr.md) get a pointer value ## Version history - Added in version 1.1.0. - Extended to binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/get_to.md000066400000000000000000000027561477615276400224310ustar00rootroot00000000000000# nlohmann::basic_json::get_to ```cpp template ValueType& get_to(ValueType& v) const noexcept( noexcept(JSONSerializer::from_json( std::declval(), v))); ``` Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the `json_serializer` `from_json()` method. The function is equivalent to executing ```cpp ValueType v; JSONSerializer::from_json(*this, v); ``` This overload is chosen if: - `ValueType` is not `basic_json`, - `json_serializer` has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)` ## Template parameters `ValueType` : the value type to return ## Return value the input parameter, allowing chaining calls ## Exceptions Depends on what `json_serializer` `from_json()` method throws ## Examples ??? example The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard `#!cpp std::vector`, (3) A JSON object can be converted to C++ associative containers such as `#cpp std::unordered_map`. ```cpp --8<-- "examples/get_to.cpp" ``` Output: ```json --8<-- "examples/get_to.output" ``` ## Version history - Since version 3.3.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/index.md000066400000000000000000000431251477615276400222520ustar00rootroot00000000000000# nlohmann::basic_json Defined in header `` ```cpp template< template class ObjectType = std::map, template class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template class AllocatorType = std::allocator, template class JSONSerializer = adl_serializer, class BinaryType = std::vector, class CustomBaseClass = void > class basic_json; ``` ## Template parameters | Template parameter | Description | Derived type | |----------------------|---------------------------------------------------------------------------|---------------------------------------------| | `ObjectType` | type for JSON objects | [`object_t`](object_t.md) | | `ArrayType` | type for JSON arrays | [`array_t`](array_t.md) | | `StringType` | type for JSON strings and object keys | [`string_t`](string_t.md) | | `BooleanType` | type for JSON booleans | [`boolean_t`](boolean_t.md) | | `NumberIntegerType` | type for JSON integer numbers | [`number_integer_t`](number_integer_t.md) | | `NumberUnsignedType` | type for JSON unsigned integer numbers | [`number_unsigned_t`](number_unsigned_t.md) | | `NumberFloatType` | type for JSON floating-point numbers | [`number_float_t`](number_float_t.md) | | `AllocatorType` | type of the allocator to use | | | `JSONSerializer` | the serializer to resolve internal calls to `to_json()` and `from_json()` | [`json_serializer`](json_serializer.md) | | `BinaryType` | type for binary arrays | [`binary_t`](binary_t.md) | | `CustomBaseClass` | extension point for user code | [`json_base_class_t`](json_base_class_t.md) | ## Specializations - [**json**](../json.md) - default specialization - [**ordered_json**](../ordered_json.md) - a specialization that maintains the insertion order of object keys ## Iterator invalidation All operations that add values to an **array** ([`push_back`](push_back.md) , [`operator+=`](operator+=.md), [`emplace_back`](emplace_back.md), [`insert`](insert.md), and [`operator[]`](operator%5B%5D.md) for a non-existing index) can yield a reallocation, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. For [`ordered_json`](../ordered_json.md), also all operations that add a value to an **object** ([`push_back`](push_back.md), [`operator+=`](operator+=.md), [`emplace`](emplace.md), [`insert`](insert.md), [`update`](update.md), and [`operator[]`](operator%5B%5D.md) for a non-existing key) can yield a reallocation, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. ## Requirements The class satisfies the following concept requirements: ### Basic - [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): JSON values can be default-constructed. The result will be a JSON null value. - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): A JSON value can be constructed from an rvalue argument. - [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): A JSON value can be copy-constructed from an lvalue expression. - [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): A JSON value can be assigned from an rvalue argument. - [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): A JSON value can be copy-assigned from an lvalue expression. - [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): JSON values can be destructed. ### Layout - [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): JSON values have [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes. ### Library-wide - [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): JSON values can be compared with `==`, see [`operator==`](operator_eq.md). - [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): JSON values can be compared with `<`, see [`operator<`](operator_le.md). - [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function `swap`. - [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): JSON values can be compared against `std::nullptr_t` objects which are used to model the `null` value. ### Container - [Container](https://en.cppreference.com/w/cpp/named_req/Container): JSON values can be used like STL containers and provide iterator access. - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer): JSON values can be used like STL containers and provide reverse iterator access. ## Member types - [**adl_serializer**](../adl_serializer/index.md) - the default serializer - [**value_t**](value_t.md) - the JSON type enumeration - [**json_pointer**](../json_pointer/index.md) - JSON Pointer implementation - [**json_serializer**](json_serializer.md) - type of the serializer to for conversions from/to JSON - [**error_handler_t**](error_handler_t.md) - type to choose behavior on decoding errors - [**cbor_tag_handler_t**](cbor_tag_handler_t.md) - type to choose how to handle CBOR tags - **initializer_list_t** - type for initializer lists of `basic_json` values - [**input_format_t**](input_format_t.md) - type to choose the format to parse - [**json_sax_t**](../json_sax/index.md) - type for SAX events ### Exceptions - [**exception**](exception.md) - general exception of the `basic_json` class - [**parse_error**](parse_error.md) - exception indicating a parse error - [**invalid_iterator**](invalid_iterator.md) - exception indicating errors with iterators - [**type_error**](type_error.md) - exception indicating executing a member function with a wrong type - [**out_of_range**](out_of_range.md) - exception indicating access out of the defined range - [**other_error**](other_error.md) - exception indicating other library errors ### Container types | Type | Definition | |--------------------------|-----------------------------------------------------------------------------------------------------------| | `value_type` | `#!cpp basic_json` | | `reference` | `#!cpp value_type&` | | `const_reference` | `#!cpp const value_type&` | | `difference_type` | `#!cpp std::ptrdiff_t` | | `size_type` | `#!cpp std::size_t` | | `allocator_type` | `#!cpp AllocatorType` | | `pointer` | `#!cpp std::allocator_traits::pointer` | | `const_pointer` | `#!cpp std::allocator_traits::const_pointer` | | `iterator` | [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator) | | `const_iterator` | constant [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator) | | `reverse_iterator` | reverse iterator, derived from `iterator` | | `const_reverse_iterator` | reverse iterator, derived from `const_iterator` | | `iteration_proxy` | helper type for [`items`](items.md) function | ### JSON value data types - [**array_t**](array_t.md) - type for arrays - [**binary_t**](binary_t.md) - type for binary arrays - [**boolean_t**](boolean_t.md) - type for booleans - [**default_object_comparator_t**](default_object_comparator_t.md) - default comparator for objects - [**number_float_t**](number_float_t.md) - type for numbers (floating-point) - [**number_integer_t**](number_integer_t.md) - type for numbers (integer) - [**number_unsigned_t**](number_unsigned_t.md) - type for numbers (unsigned) - [**object_comparator_t**](object_comparator_t.md) - comparator for objects - [**object_t**](object_t.md) - type for objects - [**string_t**](string_t.md) - type for strings ### Parser callback - [**parse_event_t**](parse_event_t.md) - parser event types - [**parser_callback_t**](parser_callback_t.md) - per-element parser callback type ## Member functions - [(constructor)](basic_json.md) - [(destructor)](~basic_json.md) - [**operator=**](operator=.md) - copy assignment - [**array**](array.md) (_static_) - explicitly create an array - [**binary**](binary.md) (_static_) - explicitly create a binary array - [**object**](object.md) (_static_) - explicitly create an object ### Object inspection Functions to inspect the type of a JSON value. - [**type**](type.md) - return the type of the JSON value - [**operator value_t**](operator_value_t.md) - return the type of the JSON value - [**type_name**](type_name.md) - return the type as string - [**is_primitive**](is_primitive.md) - return whether the type is primitive - [**is_structured**](is_structured.md) - return whether the type is structured - [**is_null**](is_null.md) - return whether the value is null - [**is_boolean**](is_boolean.md) - return whether the value is a boolean - [**is_number**](is_number.md) - return whether the value is a number - [**is_number_integer**](is_number_integer.md) - return whether the value is an integer number - [**is_number_unsigned**](is_number_unsigned.md) - return whether the value is an unsigned integer number - [**is_number_float**](is_number_float.md) - return whether the value is a floating-point number - [**is_object**](is_object.md) - return whether the value is an object - [**is_array**](is_array.md) - return whether the value is an array - [**is_string**](is_string.md) - return whether the value is a string - [**is_binary**](is_binary.md) - return whether the value is a binary array - [**is_discarded**](is_discarded.md) - return whether the value is discarded Optional functions to access the [diagnostic positions](../macros/json_diagnostic_positions.md). - [**start_pos**](start_pos.md) - return the start position of the value - [**end_pos**](end_pos.md) - return the one past the end position of the value ### Value access Direct access to the stored value of a JSON value. - [**get**](get.md) - get a value - [**get_to**](get_to.md) - get a value and write it to a destination - [**get_ptr**](get_ptr.md) - get a pointer value - [**get_ref**](get_ref.md) - get a reference value - [**operator ValueType**](operator_ValueType.md) - get a value - [**get_binary**](get_binary.md) - get a binary value ### Element access Access to the JSON value - [**at**](at.md) - access specified element with bounds checking - [**operator[]**](operator[].md) - access specified element - [**value**](value.md) - access specified object element with default value - [**front**](front.md) - access the first element - [**back**](back.md) - access the last element ### Lookup - [**find**](find.md) - find an element in a JSON object - [**count**](count.md) - returns the number of occurrences of a key in a JSON object - [**contains**](contains.md) - check the existence of an element in a JSON object ### Iterators - [**begin**](begin.md) - returns an iterator to the first element - [**cbegin**](cbegin.md) - returns a const iterator to the first element - [**end**](end.md) - returns an iterator to one past the last element - [**cend**](cend.md) - returns a const iterator to one past the last element - [**rbegin**](rbegin.md) - returns an iterator to the reverse-beginning - [**rend**](rend.md) - returns an iterator to the reverse-end - [**crbegin**](crbegin.md) - returns a const iterator to the reverse-beginning - [**crend**](crend.md) - returns a const iterator to the reverse-end - [**items**](items.md) - wrapper to access iterator member functions in range-based for ### Capacity - [**empty**](empty.md) - checks whether the container is empty - [**size**](size.md) - returns the number of elements - [**max_size**](max_size.md) - returns the maximum possible number of elements ### Modifiers - [**clear**](clear.md) - clears the contents - [**push_back**](push_back.md) - add a value to an array/object - [**operator+=**](operator+=.md) - add a value to an array/object - [**emplace_back**](emplace_back.md) - add a value to an array - [**emplace**](emplace.md) - add a value to an object if a key does not exist - [**erase**](erase.md) - remove elements - [**insert**](insert.md) - inserts elements - [**update**](update.md) - updates a JSON object from another object, overwriting existing keys - [**swap**](swap.md) - exchanges the values ### Lexicographical comparison operators - [**operator==**](operator_eq.md) - comparison: equal - [**operator!=**](operator_ne.md) - comparison: not equal - [**operator<**](operator_lt.md) - comparison: less than - [**operator>**](operator_gt.md) - comparison: greater than - [**operator<=**](operator_le.md) - comparison: less than or equal - [**operator>=**](operator_ge.md) - comparison: greater than or equal - [**operator<=>**](operator_spaceship.md) - comparison: 3-way ### Serialization / Dumping - [**dump**](dump.md) - serialization ### Deserialization / Parsing - [**parse**](parse.md) (_static_) - deserialize from a compatible input - [**accept**](accept.md) (_static_) - check if the input is valid JSON - [**sax_parse**](sax_parse.md) (_static_) - generate SAX events ### JSON Pointer functions - [**flatten**](flatten.md) - return flattened JSON value - [**unflatten**](unflatten.md) - unflatten a previously flattened JSON value ### JSON Patch functions - [**patch**](patch.md) - applies a JSON patch - [**patch_inplace**](patch_inplace.md) - applies a JSON patch in place - [**diff**](diff.md) (_static_) - creates a diff as a JSON patch ### JSON Merge Patch functions - [**merge_patch**](merge_patch.md) - applies a JSON Merge Patch ## Static functions - [**meta**](meta.md) - returns version information on the library - [**get_allocator**](get_allocator.md) - returns the allocator associated with the container ### Binary formats - [**from_bjdata**](from_bjdata.md) (_static_) - create a JSON value from an input in BJData format - [**from_bson**](from_bson.md) (_static_) - create a JSON value from an input in BSON format - [**from_cbor**](from_cbor.md) (_static_) - create a JSON value from an input in CBOR format - [**from_msgpack**](from_msgpack.md) (_static_) - create a JSON value from an input in MessagePack format - [**from_ubjson**](from_ubjson.md) (_static_) - create a JSON value from an input in UBJSON format - [**to_bjdata**](to_bjdata.md) (_static_) - create a BJData serialization of a given JSON value - [**to_bson**](to_bson.md) (_static_) - create a BSON serialization of a given JSON value - [**to_cbor**](to_cbor.md) (_static_) - create a CBOR serialization of a given JSON value - [**to_msgpack**](to_msgpack.md) (_static_) - create a MessagePack serialization of a given JSON value - [**to_ubjson**](to_ubjson.md) (_static_) - create a UBJSON serialization of a given JSON value ## Non-member functions - [**operator<<(std::ostream&)**](../operator_ltlt.md) - serialize to stream - [**operator>>(std::istream&)**](../operator_gtgt.md) - deserialize from stream - [**to_string**](to_string.md) - user-defined `to_string` function for JSON values ## Literals - [**operator""_json**](../operator_literal_json.md) - user-defined string literal for JSON values ## Helper classes - [**std::hash<basic_json>**](std_hash.md) - return a hash value for a JSON object - [**std::swap<basic_json>**](std_swap.md) - exchanges the values of two JSON objects ## Examples ??? example The example shows how the library is used. ```cpp --8<-- "examples/README.cpp" ``` Output: ```json --8<-- "examples/README.output" ``` ## See also - [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format](https://tools.ietf.org/html/rfc8259) ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/input_format_t.md000066400000000000000000000015171477615276400241740ustar00rootroot00000000000000# nlohmann::basic_json::input_format_t ```cpp enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata }; ``` This enumeration is used in the [`sax_parse`](sax_parse.md) function to choose the input format to parse: json : JSON (JavaScript Object Notation) cbor : CBOR (Concise Binary Object Representation) msgpack : MessagePack ubjson : UBJSON (Universal Binary JSON) bson : BSON (Binary JSON) bjdata : BJData (Binary JData) ## Examples ??? example The example below shows how an `input_format_t` enum value is passed to `sax_parse` to set the input format to CBOR. ```cpp --8<-- "examples/sax_parse__binary.cpp" ``` Output: ```json --8<-- "examples/sax_parse__binary.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/insert.md000066400000000000000000000161441477615276400224500ustar00rootroot00000000000000# nlohmann::basic_json::insert ```cpp // (1) iterator insert(const_iterator pos, const basic_json& val); iterator insert(const_iterator pos, basic_json&& val); // (2) iterator insert(const_iterator pos, size_type cnt, const basic_json& val); // (3) iterator insert(const_iterator pos, const_iterator first, const_iterator last); // (4) iterator insert(const_iterator pos, initializer_list_t ilist); // (5) void insert(const_iterator first, const_iterator last); ``` 1. Inserts element `val` into an array before iterator `pos`. 2. Inserts `cnt` copies of `val` into an array before iterator `pos`. 3. Inserts elements from range `[first, last)` into an array before iterator `pos`. 4. Inserts elements from initializer list `ilist` into an array before iterator `pos`. 5. Inserts elements from range `[first, last)` into an object. ## Iterator invalidation For all cases where an element is added to an **array**, a reallocation can happen, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. Otherwise, only the [`end()`](end.md) iterator is invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value. For [`ordered_json`](../ordered_json.md), also adding an element to an **object** can yield a reallocation which again invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to the same index which is now a different value. ## Parameters `pos` (in) : iterator before which the content will be inserted; may be the `end()` iterator `val` (in) : value to insert `cnt` (in) : number of copies of `val` to insert `first` (in) : the start of the range of elements to insert `last` (in) : the end of the range of elements to insert `ilist` (in) : initializer list to insert the values from ## Return value 1. iterator pointing to the inserted `val`. 2. iterator pointing to the first element inserted, or `pos` if `#!cpp cnt==0` 3. iterator pointing to the first element inserted, or `pos` if `#!cpp first==last` 4. iterator pointing to the first element inserted, or `pos` if `ilist` is empty 5. (none) ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.309`](../../home/exceptions.md#jsonexceptiontype_error309) if called on JSON values other than arrays; example: `"cannot use insert() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` 2. The function can throw the following exceptions: - Throws [`type_error.309`](../../home/exceptions.md#jsonexceptiontype_error309) if called on JSON values other than arrays; example: `"cannot use insert() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` 3. The function can throw the following exceptions: - Throws [`type_error.309`](../../home/exceptions.md#jsonexceptiontype_error309) if called on JSON values other than arrays; example: `"cannot use insert() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` - Throws [`invalid_iterator.210`](../../home/exceptions.md#jsonexceptioninvalid_iterator210) if `first` and `last` do not belong to the same JSON value; example: `"iterators do not fit"` - Throws [`invalid_iterator.211`](../../home/exceptions.md#jsonexceptioninvalid_iterator211) if `first` or `last` are iterators into container for which insert is called; example: `"passed iterators may not belong to container"` 4. The function can throw the following exceptions: - Throws [`type_error.309`](../../home/exceptions.md#jsonexceptiontype_error309) if called on JSON values other than arrays; example: `"cannot use insert() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` 5. The function can throw the following exceptions: - Throws [`type_error.309`](../../home/exceptions.md#jsonexceptiontype_error309) if called on JSON values other than objects; example: `"cannot use insert() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` - Throws [`invalid_iterator.210`](../../home/exceptions.md#jsonexceptioninvalid_iterator210) if `first` and `last` do not belong to the same JSON value; example: `"iterators do not fit"` ## Complexity 1. Constant plus linear in the distance between `pos` and end of the container. 2. Linear in `cnt` plus linear in the distance between `pos` and end of the container. 3. Linear in `#!cpp std::distance(first, last)` plus linear in the distance between `pos` and end of the container. 4. Linear in `ilist.size()` plus linear in the distance between `pos` and end of the container. 5. Logarithmic: `O(N*log(size() + N))`, where `N` is the number of elements to insert. ## Examples ??? example "Example (1): insert element into array" The example shows how `insert()` is used. ```cpp --8<-- "examples/insert.cpp" ``` Output: ```json --8<-- "examples/insert.output" ``` ??? example "Example (2): insert copies of element into array" The example shows how `insert()` is used. ```cpp --8<-- "examples/insert__count.cpp" ``` Output: ```json --8<-- "examples/insert__count.output" ``` ??? example "Example (3): insert a range of elements into an array" The example shows how `insert()` is used. ```cpp --8<-- "examples/insert__range.cpp" ``` Output: ```json --8<-- "examples/insert__range.output" ``` ??? example "Example (4): insert elements from an initializer list into an array" The example shows how `insert()` is used. ```cpp --8<-- "examples/insert__ilist.cpp" ``` Output: ```json --8<-- "examples/insert__ilist.output" ``` ??? example "Example (5): insert a range of elements into an object" The example shows how `insert()` is used. ```cpp --8<-- "examples/insert__range_object.cpp" ``` Output: ```json --8<-- "examples/insert__range_object.output" ``` ## Version history 1. Added in version 1.0.0. 2. Added in version 1.0.0. 3. Added in version 1.0.0. 4. Added in version 1.0.0. 5. Added in version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/invalid_iterator.md000066400000000000000000000037671477615276400245120ustar00rootroot00000000000000# nlohmann::basic_json::invalid_iterator ```cpp class invalid_iterator : public exception; ``` This exception is thrown if iterators passed to a library function do not match the expected semantics. Exceptions have ids 2xx (see [list of iterator errors](../../home/exceptions.md#iterator-errors)). ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_invalid_iterator fill:#CCCCFF ``` ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception ## Examples ??? example The following code shows how a `invalid_iterator` exception can be caught. ```cpp --8<-- "examples/invalid_iterator.cpp" ``` Output: ```json --8<-- "examples/invalid_iterator.output" ``` ## See also - [List of iterator errors](../../home/exceptions.md#iterator-errors) - [`parse_error`](parse_error.md) for exceptions indicating a parse error - [`type_error`](type_error.md) for exceptions indicating executing a member function with a wrong type - [`out_of_range`](out_of_range.md) for exceptions indicating access out of the defined range - [`other_error`](other_error.md) for exceptions indicating other library errors ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_array.md000066400000000000000000000012211477615276400227430ustar00rootroot00000000000000# nlohmann::basic_json::is_array ```cpp constexpr bool is_array() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is an array. ## Return value `#!cpp true` if type is an array, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_array()` for all JSON types. ```cpp --8<-- "examples/is_array.cpp" ``` Output: ```json --8<-- "examples/is_array.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_binary.md000066400000000000000000000012321477615276400231130ustar00rootroot00000000000000# nlohmann::basic_json::is_binary ```cpp constexpr bool is_binary() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is a binary array. ## Return value `#!cpp true` if type is binary, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_binary()` for all JSON types. ```cpp --8<-- "examples/is_binary.cpp" ``` Output: ```json --8<-- "examples/is_binary.output" ``` ## Version history - Added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_boolean.md000066400000000000000000000012611477615276400232500ustar00rootroot00000000000000# nlohmann::basic_json::is_boolean ```cpp constexpr bool is_boolean() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is `#!json true` or `#!json false`. ## Return value `#!cpp true` if type is boolean, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_boolean()` for all JSON types. ```cpp --8<-- "examples/is_boolean.cpp" ``` Output: ```json --8<-- "examples/is_boolean.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_discarded.md000066400000000000000000000037241477615276400235610ustar00rootroot00000000000000# nlohmann::basic_json::is_discarded ```cpp constexpr bool is_discarded() const noexcept; ``` This function returns `#!cpp true` for a JSON value if either: - the value was discarded during parsing with a callback function (see [`parser_callback_t`](parser_callback_t.md)), or - the value is the result of parsing invalid JSON with parameter `allow_exceptions` set to `#!cpp false`; see [`parse`](parse.md) for more information. ## Return value `#!cpp true` if type is discarded, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Notes !!! note "Comparisons" Discarded values are never compared equal with [`operator==`](operator_eq.md). That is, checking whether a JSON value `j` is discarded will only work via: ```cpp j.is_discarded() ``` because ```cpp j == json::value_t::discarded ``` will always be `#!cpp false`. !!! note "Removal during parsing with callback functions" When a value is discarded by a callback function (see [`parser_callback_t`](parser_callback_t.md)) during parsing, then it is removed when it is part of a structured value. For instance, if the second value of an array is discarded, instead of `#!json [null, discarded, false]`, the array `#!json [null, false]` is returned. Only if the top-level value is discarded, the return value of the `parse` call is discarded. This function will always be `#!cpp false` for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases. ## Examples ??? example The following code exemplifies `is_discarded()` for all JSON types. ```cpp --8<-- "examples/is_discarded.cpp" ``` Output: ```json --8<-- "examples/is_discarded.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_null.md000066400000000000000000000012261477615276400226040ustar00rootroot00000000000000# nlohmann::basic_json::is_null ```cpp constexpr bool is_null() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is `#!json null`. ## Return value `#!cpp true` if type is `#!json null`, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_null()` for all JSON types. ```cpp --8<-- "examples/is_null.cpp" ``` Output: ```json --8<-- "examples/is_null.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_number.md000066400000000000000000000024441477615276400231250ustar00rootroot00000000000000# nlohmann::basic_json::is_number ```cpp constexpr bool is_number() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values. ## Return value `#!cpp true` if type is number (regardless whether integer, unsigned integer, or floating-type), `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Possible implementation ```cpp constexpr bool is_number() const noexcept { return is_number_integer() || is_number_float(); } ``` ## Examples ??? example The following code exemplifies `is_number()` for all JSON types. ```cpp --8<-- "examples/is_number.cpp" ``` Output: ```json --8<-- "examples/is_number.output" ``` ## See also - [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number - [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number - [is_number_float()](is_number_float.md) check if the value is a floating-point number ## Version history - Added in version 1.0.0. - Extended to also return `#!cpp true` for unsigned integers in 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_number_float.md000066400000000000000000000020321477615276400243030ustar00rootroot00000000000000# nlohmann::basic_json::is_number_float ```cpp constexpr bool is_number_float() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values. ## Return value `#!cpp true` if type is a floating-point number, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_number_float()` for all JSON types. ```cpp --8<-- "examples/is_number_float.cpp" ``` Output: ```json --8<-- "examples/is_number_float.output" ``` ## See also - [is_number()](is_number.md) check if the value is a number - [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number - [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_number_integer.md000066400000000000000000000021461477615276400246410ustar00rootroot00000000000000# nlohmann::basic_json::is_number_integer ```cpp constexpr bool is_number_integer() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values. ## Return value `#!cpp true` if type is an integer or unsigned integer number, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_number_integer()` for all JSON types. ```cpp --8<-- "examples/is_number_integer.cpp" ``` Output: ```json --8<-- "examples/is_number_integer.output" ``` ## See also - [is_number()](is_number.md) check if the value is a number - [is_number_unsigned()](is_number_unsigned.md) check if the value is an unsigned integer number - [is_number_float()](is_number_float.md) check if the value is a floating-point number ## Version history - Added in version 1.0.0. - Extended to also return `#!cpp true` for unsigned integers in 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_number_unsigned.md000066400000000000000000000020541477615276400250160ustar00rootroot00000000000000# nlohmann::basic_json::is_number_unsigned ```cpp constexpr bool is_number_unsigned() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values. ## Return value `#!cpp true` if type is an unsigned integer number, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_number_unsigned()` for all JSON types. ```cpp --8<-- "examples/is_number_unsigned.cpp" ``` Output: ```json --8<-- "examples/is_number_unsigned.output" ``` ## See also - [is_number()](is_number.md) check if the value is a number - [is_number_integer()](is_number_integer.md) check if the value is an integer or unsigned integer number - [is_number_float()](is_number_float.md) check if the value is a floating-point number ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_object.md000066400000000000000000000012301477615276400230730ustar00rootroot00000000000000# nlohmann::basic_json::is_object ```cpp constexpr bool is_object() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is an object. ## Return value `#!cpp true` if type is an object, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_object()` for all JSON types. ```cpp --8<-- "examples/is_object.cpp" ``` Output: ```json --8<-- "examples/is_object.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_primitive.md000066400000000000000000000035331477615276400236450ustar00rootroot00000000000000# nlohmann::basic_json::is_primitive ```cpp constexpr bool is_primitive() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON type is primitive (string, number, boolean, `#!json null`, binary). ## Return value `#!cpp true` if type is primitive (string, number, boolean, `#!json null`, or binary), `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Possible implementation ```cpp constexpr bool is_primitive() const noexcept { return is_null() || is_string() || is_boolean() || is_number() || is_binary(); } ``` ## Notes The term *primitive* stems from [RFC 8259](https://tools.ietf.org/html/rfc8259): > JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and > arrays). This library extends primitive types to binary types, because binary types are roughly comparable to strings. Hence, `is_primitive()` returns `#!cpp true` for binary values. ## Examples ??? example The following code exemplifies `is_primitive()` for all JSON types. ```cpp --8<-- "examples/is_primitive.cpp" ``` Output: ```json --8<-- "examples/is_primitive.output" ``` ## See also - [is_structured()](is_structured.md) returns whether the JSON value is structured - [is_null()](is_null.md) returns whether the JSON value is `null` - [is_string()](is_string.md) returns whether the JSON value is a string - [is_boolean()](is_boolean.md) returns whether the JSON value is a boolean - [is_number()](is_number.md) returns whether the JSON value is a number - [is_binary()](is_binary.md) returns whether the JSON value is a binary array ## Version history - Added in version 1.0.0. - Extended to return `#!cpp true` for binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_string.md000066400000000000000000000012261477615276400231400ustar00rootroot00000000000000# nlohmann::basic_json::is_string ```cpp constexpr bool is_string() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON value is a string. ## Return value `#!cpp true` if type is a string, `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `is_string()` for all JSON types. ```cpp --8<-- "examples/is_string.cpp" ``` Output: ```json --8<-- "examples/is_string.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/is_structured.md000066400000000000000000000025611477615276400240410ustar00rootroot00000000000000# nlohmann::basic_json::is_structured ```cpp constexpr bool is_structured() const noexcept; ``` This function returns `#!cpp true` if and only if the JSON type is structured (array or object). ## Return value `#!cpp true` if type is structured (array or object), `#!cpp false` otherwise. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Possible implementation ```cpp constexpr bool is_structured() const noexcept { return is_array() || is_object(); } ``` ## Notes The term *structured* stems from [RFC 8259](https://tools.ietf.org/html/rfc8259): > JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and > arrays). Note that though strings are containers in C++, they are treated as primitive values in JSON. ## Examples ??? example The following code exemplifies `is_structured()` for all JSON types. ```cpp --8<-- "examples/is_structured.cpp" ``` Output: ```json --8<-- "examples/is_structured.output" ``` ## See also - [is_primitive()](is_primitive.md) returns whether JSON value is primitive - [is_array()](is_array.md) returns whether the value is an array - [is_object()](is_object.md) returns whether the value is an object ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/items.md000066400000000000000000000052171477615276400222640ustar00rootroot00000000000000# nlohmann::basic_json::items ```cpp iteration_proxy items() noexcept; iteration_proxy items() const noexcept; ``` This function allows accessing `iterator::key()` and `iterator::value()` during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator. For loop without `items()` function: ```cpp for (auto it = j_object.begin(); it != j_object.end(); ++it) { std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; } ``` Range-based for loop without `items()` function: ```cpp for (auto it : j_object) { // "it" is of type json::reference and has no key() member std::cout << "value: " << it << '\n'; } ``` Range-based for loop with `items()` function: ```cpp for (auto& el : j_object.items()) { std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; } ``` The `items()` function also allows using [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding) (C++17): ```cpp for (auto& [key, val] : j_object.items()) { std::cout << "key: " << key << ", value:" << val << '\n'; } ``` ## Return value iteration proxy object wrapping the current value with an interface to use in range-based for loops ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Constant. ## Notes When iterating over an array, `key()` will return the index of the element as string (see example). For primitive types (e.g., numbers), `key()` returns an empty string. !!! danger "Lifetime issues" Using `items()` on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See [#2040](https://github.com/nlohmann/json/issues/2040) for more information. ## Examples ??? example The following code shows an example for `items()`. ```cpp --8<-- "examples/items.cpp" ``` Output: ```json --8<-- "examples/items.output" ``` ## Version history - Added `iterator_wrapper` in version 3.0.0. - Added `items` and deprecated `iterator_wrapper` in version 3.1.0. - Added structured binding support in version 3.5.0. !!! warning "Deprecation" This function replaces the static function `iterator_wrapper` which was introduced in version 1.0.0, but has been deprecated in version 3.1.0. Function `iterator_wrapper` will be removed in version 4.0.0. Please replace all occurrences of `#!cpp iterator_wrapper(j)` with `#!cpp j.items()`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/json_base_class_t.md000066400000000000000000000022151477615276400246110ustar00rootroot00000000000000# nlohmann::basic_json::json_base_class_t ```cpp using json_base_class_t = detail::json_base_class; ``` The base class used to inject custom functionality into each instance of `basic_json`. Examples of such functionality might be metadata, additional member functions (e.g., visitors), or other application-specific code. ## Template parameters `CustomBaseClass` : the base class to be added to `basic_json` ## Notes #### Default type The default value for `CustomBaseClass` is `void`. In this case an [empty base class](https://en.cppreference.com/w/cpp/language/ebo) is used and no additional functionality is injected. #### Limitations The type `CustomBaseClass` has to be a default-constructible class. `basic_json` only supports copy/move construction/assignment if `CustomBaseClass` does so as well. ## Examples ??? example The following code shows how to inject custom data and methods for each node. ```cpp --8<-- "examples/json_base_class_t.cpp" ``` Output: ```json --8<-- "examples/json_base_class_t.output" ``` ## Version history - Added in version 3.12.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/json_serializer.md000066400000000000000000000015531477615276400243440ustar00rootroot00000000000000# nlohmann::basic_json::json_serializer ```cpp template using json_serializer = JSONSerializer; ``` ## Template parameters `T` : type to convert; will be used in the `to_json`/`from_json` functions `SFINAE` : type to add compile type checks via SFINAE; usually `#!cpp void` ## Notes #### Default type The default values for `json_serializer` is [`adl_serializer`](../adl_serializer/index.md). ## Examples ??? example The example below shows how a conversion of a non-default-constructible type is implemented via a specialization of the `adl_serializer`. ```cpp --8<-- "examples/from_json__non_default_constructible.cpp" ``` Output: ```json --8<-- "examples/from_json__non_default_constructible.output" ``` ## Version history - Since version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/max_size.md000066400000000000000000000034161477615276400227610ustar00rootroot00000000000000# nlohmann::basic_json::max_size ```cpp size_type max_size() const noexcept; ``` Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. `std::distance(begin(), end())` for the JSON value. ## Return value The return value depends on the different types and is defined as follows: | Value type | return value | |------------|-------------------------------------------| | null | `0` (same as [`size()`](size.md)) | | boolean | `1` (same as [`size()`](size.md)) | | string | `1` (same as [`size()`](size.md)) | | number | `1` (same as [`size()`](size.md)) | | binary | `1` (same as [`size()`](size.md)) | | object | result of function `object_t::max_size()` | | array | result of function `array_t::max_size()` | ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant, as long as [`array_t`](array_t.md) and [`object_t`](object_t.md) satisfy the [Container](https://en.cppreference.com/w/cpp/named_req/Container) concept; that is, their `max_size()` functions have constant complexity. ## Notes This function does not return the maximal length of a string stored as JSON value -- it returns the maximal number of string elements the JSON value can store which is `1`. ## Examples ??? example The following code calls `max_size()` on the different value types. ```cpp --8<-- "examples/max_size.cpp" ``` Output: ```json --8<-- "examples/max_size.output" ``` Note the output is platform-dependent. ## Version history - Added in version 1.0.0. - Extended to return `1` for binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/merge_patch.md000066400000000000000000000030011477615276400234060ustar00rootroot00000000000000# nlohmann::basic_json::merge_patch ```cpp void merge_patch(const basic_json& apply_patch); ``` The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value. The function implements the following algorithm from Section 2 of [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396): ```python define MergePatch(Target, Patch): if Patch is an Object: if Target is not an Object: Target = {} // Ignore the contents and set it to an empty Object for each Name/Value pair in Patch: if Value is null: if Name exists in Target: remove the Name/Value pair from Target else: Target[Name] = MergePatch(Target[Name], Value) return Target else: return Patch ``` Thereby, `Target` is the current object; that is, the patch is applied to the current value. ## Parameters `apply_patch` (in) : the patch to apply ## Complexity Linear in the lengths of `apply_patch`. ## Examples ??? example The following code shows how a JSON Merge Patch is applied to a JSON document. ```cpp --8<-- "examples/merge_patch.cpp" ``` Output: ```json --8<-- "examples/merge_patch.output" ``` ## See also - [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396) - [patch](patch.md) apply a JSON patch ## Version history - Added in version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/meta.md000066400000000000000000000062611477615276400220710ustar00rootroot00000000000000# nlohmann::basic_json::meta ```cpp static basic_json meta(); ``` This function returns a JSON object with information about the library, including the version number and information on the platform and compiler. ## Return value JSON object holding version information | key | description | |-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `compiler` | Information on the used compiler. It is an object with the following keys: `c++` (the used C++ standard), `family` (the compiler family; possible values are `clang`, `icc`, `gcc`, `ilecpp`, `msvc`, `pgcpp`, `sunpro`, and `unknown`), and `version` (the compiler version). | | `copyright` | The copyright line for the library as string. | | `name` | The name of the library as string. | | `platform` | The used platform as string. Possible values are `win32`, `linux`, `apple`, `unix`, and `unknown`. | | `url` | The URL of the project as string. | | `version` | The version of the library. It is an object with the following keys: `major`, `minor`, and `patch` as defined by [Semantic Versioning](http://semver.org), and `string` (the version string). | ## Exception safety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. ## Complexity Constant. ## Examples ??? example The following code shows an example output of the `meta()` function. ```cpp --8<-- "examples/meta.cpp" ``` Output: ```json --8<-- "examples/meta.output" ``` Note the output is platform-dependent. ## See also - [**NLOHMANN_JSON_VERSION_MAJOR**/**NLOHMANN_JSON_VERSION_MINOR**/**NLOHMANN_JSON_VERSION_PATCH**](../macros/nlohmann_json_version_major.md) \- library version information ## Version history - Added in version 2.1.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/number_float_t.md000066400000000000000000000055671477615276400241530ustar00rootroot00000000000000# nlohmann::basic_json::number_float_t ```cpp using number_float_t = NumberFloatType; ``` The type used to store JSON numbers (floating-point). [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: > The representation of numbers is similar to that used in most programming languages. A number is represented in base > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, [`number_integer_t`](number_integer_t.md), [`number_unsigned_t`](number_unsigned_t.md) and `number_float_t` are used. To store floating-point numbers in C++, a type is defined by the template parameter `NumberFloatType` which chooses the type to use. ## Notes #### Default type With the default values for `NumberFloatType` (`double`), the default value for `number_float_t` is `#!cpp double`. #### Default behavior - The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal `01.2` will be serialized to `1.2`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) states: > This specification allows implementations to set limits on the range and precision of numbers accepted. Since software > that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good > interoperability can be achieved by implementations that expect no more precision or range than these provide, in the > sense that implementations will approximate JSON numbers within the expected precision. This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` will be stored as NaN internally and be serialized to `null`. #### Storage Floating-point number values are stored directly inside a `basic_json` type. ## Examples ??? example The following code shows that `number_float_t` is by default, a typedef to `#!cpp double`. ```cpp --8<-- "examples/number_float_t.cpp" ``` Output: ```json --8<-- "examples/number_float_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/number_integer_t.md000066400000000000000000000062021477615276400244660ustar00rootroot00000000000000# nlohmann::basic_json::number_integer_t ```cpp using number_integer_t = NumberIntegerType; ``` The type used to store JSON numbers (integers). [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: > The representation of numbers is similar to that used in most programming languages. A number is represented in base > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, `number_integer_t`, [`number_unsigned_t`](number_unsigned_t.md) and [`number_float_t`](number_float_t.md) are used. To store integer numbers in C++, a type is defined by the template parameter `NumberIntegerType` which chooses the type to use. ## Notes #### Default type With the default values for `NumberIntegerType` (`std::int64_t`), the default value for `number_integer_t` is `#!cpp std::int64_t`. #### Default behavior - The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the range and precision of numbers. When the default type is used, the maximal integer number that can be stored is `9223372036854775807` (INT64_MAX) and the minimal integer number that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as [`number_unsigned_t`](number_unsigned_t.md) or [`number_float_t`](number_float_t.md). [RFC 8259](https://tools.ietf.org/html/rfc8259) further states: > Note that when such software is used, numbers that are integers and are in the range $[-2^{53}+1, 2^{53}-1]$ are > interoperable in the sense that implementations will agree exactly on their numeric values. As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a `basic_json` type. ## Examples ??? example The following code shows that `number_integer_t` is by default, a typedef to `#!cpp std::int64_t`. ```cpp --8<-- "examples/number_integer_t.cpp" ``` Output: ```json --8<-- "examples/number_integer_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/number_unsigned_t.md000066400000000000000000000062661477615276400246570ustar00rootroot00000000000000# nlohmann::basic_json::number_unsigned_t ```cpp using number_unsigned_t = NumberUnsignedType; ``` The type used to store JSON numbers (unsigned). [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: > The representation of numbers is similar to that used in most programming languages. A number is represented in base > 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may > be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, [`number_integer_t`](number_integer_t.md), `number_unsigned_t` and [`number_float_t`](number_float_t.md) are used. To store unsigned integer numbers in C++, a type is defined by the template parameter `NumberUnsignedType` which chooses the type to use. ## Notes #### Default type With the default values for `NumberUnsignedType` (`std::uint64_t`), the default value for `number_unsigned_t` is `#!cpp std::uint64_t`. #### Default behavior - The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the range and precision of numbers. When the default type is used, the maximal integer number that can be stored is `18446744073709551615` (UINT64_MAX) and the minimal integer number that can be stored is `0`. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as [`number_integer_t`](number_integer_t.md) or [`number_float_t`](number_float_t.md). [RFC 8259](https://tools.ietf.org/html/rfc8259) further states: > Note that when such software is used, numbers that are integers and are in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are > interoperable in the sense that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the `number_integer_t` type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a `basic_json` type. ## Examples ??? example The following code shows that `number_unsigned_t` is by default, a typedef to `#!cpp std::uint64_t`. ```cpp --8<-- "examples/number_unsigned_t.cpp" ``` Output: ```json --8<-- "examples/number_unsigned_t.output" ``` ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/object.md000066400000000000000000000034121477615276400224040ustar00rootroot00000000000000# nlohmann::basic_json::object ```cpp static basic_json object(initializer_list_t init = {}); ``` Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object `#!json {}` is created. ## Parameters `init` (in) : initializer list with JSON values to create an object from (optional) ## Return value JSON object value ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions Throws [`type_error.301`](../../home/exceptions.md#jsonexceptiontype_error301) if `init` is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to `basic_json(initializer_list_t, bool, value_t)`, an array would have been created from the passed initializer list `init`. See the example below. ## Complexity Linear in the size of `init`. ## Notes This function is only added for symmetry reasons. In contrast to the related function `array(initializer_list_t)`, there are no cases that can only be expressed by this function. That is, any initializer list `init` can also be passed to the initializer list constructor `basic_json(initializer_list_t, bool, value_t)`. ## Examples ??? example The following code shows an example for the `object` function. ```cpp --8<-- "examples/object.cpp" ``` Output: ```json --8<-- "examples/object.output" ``` ## See also - [`basic_json(initializer_list_t)`](basic_json.md) - create a JSON value from an initializer list - [`array`](array.md) - create a JSON array value from an initializer list ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/object_comparator_t.md000066400000000000000000000014601477615276400251570ustar00rootroot00000000000000# nlohmann::basic_json::object_comparator_t ```cpp using object_comparator_t = typename object_t::key_compare; // or using object_comparator_t = default_object_comparator_t; ``` The comparator used by [`object_t`](object_t.md). Defined as `#!cpp typename object_t::key_compare` if available, and [`default_object_comparator_t`](default_object_comparator_t.md) otherwise. ## Examples ??? example The example below demonstrates the used object comparator. ```cpp --8<-- "examples/object_comparator_t.cpp" ``` Output: ```json --8<-- "examples/object_comparator_t.output" ``` ## Version history - Added in version 3.0.0. - Changed to be conditionally defined as `#!cpp typename object_t::key_compare` or `default_object_comparator_t` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/object_t.md000066400000000000000000000102021477615276400227220ustar00rootroot00000000000000# nlohmann::basic_json::object_t ```cpp using object_t = ObjectType>>; ``` The type used to store JSON objects. [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows: > An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a > string, number, boolean, null, object, or array. To store objects in C++, a type is defined by the template parameters described below. ## Template parameters `ObjectType` : the container to store objects (e.g., `std::map` or `std::unordered_map`) `StringType` : the type of the keys or names (e.g., `std::string`). The comparison function `std::less` is used to order elements inside the container. `AllocatorType` : the allocator to use for objects (e.g., `std::allocator`) ## Notes #### Default type With the default values for `ObjectType` (`std::map`), `StringType` (`std::string`), and `AllocatorType` (`std::allocator`), the default value for `object_t` is: ```cpp // until C++14 std::map< std::string, // key_type basic_json, // value_type std::less, // key_compare std::allocator> // allocator_type > // since C++14 std::map< std::string, // key_type basic_json, // value_type std::less<>, // key_compare std::allocator> // allocator_type > ``` See [`default_object_comparator_t`](default_object_comparator_t.md) for more information. #### Behavior The choice of `object_t` influences the behavior of the JSON class. With the default type, objects have the following behavior: - When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings. - When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, `#!json {"key": 2, "key": 1}` could be equal to either `#!json {"key": 1}` or `#!json {"key": 2}`. - Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see [`dump`](dump.md)) in this order. For instance, `#!json {"b": 1, "a": 2}` and `#!json {"a": 2, "b": 1}` will be stored and serialized as `#!json {"a": 2, "b": 1}`. - When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, `#!json {"b": 1, "a": 2}` and `#!json {"a": 2, "b": 1}` will be treated as equal. #### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the [`max_size`](max_size.md) function of a JSON object. #### Storage Objects are stored as pointers in a `basic_json` type. That is, for any access to object values, a pointer of type `object_t*` must be dereferenced. #### Object key order The order name/value pairs are added to the object are *not* preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to [RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON objects. ## Examples ??? example The following code shows that `object_t` is by default, a typedef to `#!cpp std::map`. ```cpp --8<-- "examples/object_t.cpp" ``` Output: ```json --8<-- "examples/object_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator+=.md000066400000000000000000000071041477615276400231430ustar00rootroot00000000000000# nlohmann::basic_json::operator+= ```cpp // (1) reference operator+=(basic_json&& val); reference operator+=(const basic_json& val); // (2) reference operator+=(const typename object_t::value_type& val); // (3) reference operator+=(initializer_list_t init); ``` 1. Appends the given element `val` to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending `val`. 2. Inserts the given element `val` to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting `val`. 3. This function allows using `operator+=` with an initializer list. In case 1. the current value is an object, 2. the initializer list `init` contains only two elements, and 3. the first element of `init` is a string, `init` is converted into an object element and added using `operator+=(const typename object_t::value_type&)`. Otherwise, `init` is converted to a JSON value and added using `operator+=(basic_json&&)`. ## Iterator invalidation For all cases where an element is added to an **array**, a reallocation can happen, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. Otherwise, only the [`end()`](end.md) iterator is invalidated. For [`ordered_json`](../ordered_json.md), also adding an element to an **object** can yield a reallocation which again invalidates all iterators and all references. ## Parameters `val` (in) : the value to add to the JSON array/object `init` (in) : an initializer list ## Return value `#!cpp *this` ## Exceptions All functions can throw the following exception: - Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than JSON array or null; example: `"cannot use operator+=() with number"` ## Complexity 1. Amortized constant. 2. Logarithmic in the size of the container, O(log(`size()`)). 3. Linear in the size of the initializer list `init`. ## Notes (3) This function is required to resolve an ambiguous overload error, because pairs like `{"key", "value"}` can be both interpreted as `object_t::value_type` or `std::initializer_list`, see [#235](https://github.com/nlohmann/json/issues/235) for more information. ## Examples ??? example "Example: (1) add element to array" The example shows how `push_back()` and `+=` can be used to add elements to a JSON array. Note how the `null` value was silently converted to a JSON array. ```cpp --8<-- "examples/push_back.cpp" ``` Output: ```json --8<-- "examples/push_back.output" ``` ??? example "Example: (2) add element to object" The example shows how `push_back()` and `+=` can be used to add elements to a JSON object. Note how the `null` value was silently converted to a JSON object. ```cpp --8<-- "examples/push_back__object_t__value.cpp" ``` Output: ```json --8<-- "examples/push_back__object_t__value.output" ``` ??? example "Example: (3) add to object from initializer list" The example shows how initializer lists are treated as objects when possible. ```cpp --8<-- "examples/push_back__initializer_list.cpp" ``` Output: ```json --8<-- "examples/push_back__initializer_list.output" ``` ## See also - [emplace_back](emplace_back.md) add a value to an array - [push_back](push_back.md) add a value to an array/object ## Version history 1. Since version 1.0.0. 2. Since version 1.0.0. 3. Since version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator=.md000066400000000000000000000020401477615276400230620ustar00rootroot00000000000000# nlohmann::basic_json::operator= ```cpp basic_json& operator=(basic_json other) noexcept ( std::is_nothrow_move_constructible::value && std::is_nothrow_move_assignable::value && std::is_nothrow_move_constructible::value && std::is_nothrow_move_assignable::value ); ``` Copy assignment operator. Copies a JSON value via the "copy and swap" strategy: It is expressed in terms of the copy constructor, destructor, and the `swap()` member function. ## Parameters `other` (in) : value to copy from ## Complexity Linear. ## Examples ??? example The code below shows and example for the copy assignment. It creates a copy of value `a` which is then swapped with `b`. Finally, the copy of `a` (which is the null value after the swap) is destroyed. ```cpp --8<-- "examples/basic_json__copyassignment.cpp" ``` Output: ```json --8<-- "examples/basic_json__copyassignment.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator[].md000066400000000000000000000207031477615276400232630ustar00rootroot00000000000000# nlohmann::basic_json::operator[] ```cpp // (1) reference operator[](size_type idx); const_reference operator[](size_type idx) const; // (2) reference operator[](typename object_t::key_type key); const_reference operator[](const typename object_t::key_type& key) const; // (3) template reference operator[](KeyType&& key); template const_reference operator[](KeyType&& key) const; // (4) reference operator[](const json_pointer& ptr); const_reference operator[](const json_pointer& ptr) const; ``` 1. Returns a reference to the array element at specified location `idx`. 2. Returns a reference to the object element with specified key `key`. The non-const qualified overload takes the key by value. 3. See 2. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. 4. Returns a reference to the element with specified JSON pointer `ptr`. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). ## Iterator invalidation For the non-const versions 1. and 4., when passing an **array** index that does not exist, it is created and filled with a `#!json null` value before a reference to it is returned. For this, a reallocation can happen, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. For [`ordered_json`](../ordered_json.md), also passing an **object key** to the non-const versions 2., 3., and 4., a reallocation can happen which again invalidates all iterators and all references. ## Parameters `idx` (in) : index of the element to access `key` (in) : object key of the element to access `ptr` (in) : JSON pointer to the desired element ## Return value 1. (const) reference to the element at index `idx` 2. (const) reference to the element at key `key` 3. (const) reference to the element at key `key` 4. (const) reference to the element pointed to by `ptr` ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an array or null; in that case, using the `[]` operator with an index makes no sense. 2. The function can throw the following exceptions: - Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an object or null; in that case, using the `[]` operator with a key makes no sense. 3. See 2. 4. The function can throw the following exceptions: - Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index in the passed JSON pointer `ptr` begins with '0'. - Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index in the passed JSON pointer `ptr` is not a number. - Throws [`out_of_range.402`](../../home/exceptions.md#jsonexceptionout_of_range402) if the array index '-' is used in the passed JSON pointer `ptr` for the const version. - Throws [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) if the JSON pointer `ptr` can not be resolved. ## Complexity 1. Constant if `idx` is in the range of the array. Otherwise, linear in `idx - size()`. 2. Logarithmic in the size of the container. 3. Logarithmic in the size of the container. 4. Logarithmic in the size of the container. ## Notes !!! danger "Undefined behavior and runtime assertions" 1. If the element with key `idx` does not exist, the behavior is undefined. 2. If the element with key `key` does not exist, the behavior is undefined and is **guarded by a [runtime assertion](../../features/assertions.md)**! 1. The non-const version may add values: If `idx` is beyond the range of the array (i.e., `idx >= size()`), then the array is silently filled up with `#!json null` values to make `idx` a valid reference to the last stored element. In case the value was `#!json null` before, it is converted to an array. 2. If `key` is not found in the object, then it is silently added to the object and filled with a `#!json null` value to make `key` a valid reference. In case the value was `#!json null` before, it is converted to an object. 3. See 2. 4. `null` values are created in arrays and objects if necessary. In particular: - If the JSON pointer points to an object key that does not exist, it is created and filled with a `#!json null` value before a reference to it is returned. - If the JSON pointer points to an array index that does not exist, it is created and filled with a `#!json null` value before a reference to it is returned. All indices between the current maximum and the given index are also filled with `#!json null`. - The special value `-` is treated as a synonym for the index past the end. ## Examples ??? example "Example: (1) access specified array element" The example below shows how array elements can be read and written using `[]` operator. Note the addition of `#!json null` values. ```cpp --8<-- "examples/operator_array__size_type.cpp" ``` Output: ```json --8<-- "examples/operator_array__size_type.output" ``` ??? example "Example: (1) access specified array element (const)" The example below shows how array elements can be read using the `[]` operator. ```cpp --8<-- "examples/operator_array__size_type_const.cpp" ``` Output: ```json --8<-- "examples/operator_array__size_type_const.output" ``` ??? example "Example: (2) access specified object element" The example below shows how object elements can be read and written using the `[]` operator. ```cpp --8<-- "examples/operator_array__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/operator_array__object_t_key_type.output" ``` ??? example "Example: (2) access specified object element (const)" The example below shows how object elements can be read using the `[]` operator. ```cpp --8<-- "examples/operator_array__object_t_key_type_const.cpp" ``` Output: ```json --8<-- "examples/operator_array__object_t_key_type_const.output" ``` ??? example "Example: (3) access specified object element using string_view" The example below shows how object elements can be read using the `[]` operator. ```cpp --8<-- "examples/operator_array__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/operator_array__keytype.c++17.output" ``` ??? example "Example: (3) access specified object element using string_view (const)" The example below shows how object elements can be read using the `[]` operator. ```cpp --8<-- "examples/operator_array__keytype_const.c++17.cpp" ``` Output: ```json --8<-- "examples/operator_array__keytype_const.c++17.output" ``` ??? example "Example: (4) access specified element via JSON Pointer" The example below shows how values can be read and written using JSON Pointers. ```cpp --8<-- "examples/operator_array__json_pointer.cpp" ``` Output: ```json --8<-- "examples/operator_array__json_pointer.output" ``` ??? example "Example: (4) access specified element via JSON Pointer (const)" The example below shows how values can be read using JSON Pointers. ```cpp --8<-- "examples/operator_array__json_pointer_const.cpp" ``` Output: ```json --8<-- "examples/operator_array__json_pointer_const.output" ``` ## See also - documentation on [unchecked access](../../features/element_access/unchecked_access.md) - documentation on [runtime assertions](../../features/assertions.md) - see [`at`](at.md) for access by reference with range checking - see [`value`](value.md) for access with default value ## Version history 1. Added in version 1.0.0. 2. Added in version 1.0.0. Added overloads for `T* key` in version 1.1.0. Removed overloads for `T* key` (replaced by 3) in version 3.11.0. 3. Added in version 3.11.0. 4. Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_ValueType.md000066400000000000000000000045441477615276400247760ustar00rootroot00000000000000# nlohmann::basic_json::operator ValueType ```cpp template JSON_EXPLICIT operator ValueType() const; ``` Implicit type conversion between the JSON value and a compatible value. The call is realized by calling [`get()`](get.md). See [Notes](#notes) for the meaning of `JSON_EXPLICIT`. ## Template parameters `ValueType` : the value type to return ## Return value copy of the JSON value, converted to `ValueType` ## Exceptions Depends on what `json_serializer` `from_json()` method throws ## Complexity Linear in the size of the JSON value. ## Notes !!! note "Definition of `JSON_EXPLICIT`" By default `JSON_EXPLICIT` is defined to the empty string, so the signature is: ```cpp template operator ValueType() const; ``` If [`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) is set to `0`, `JSON_EXPLICIT` is defined to `#!cpp explicit`: ```cpp template explicit operator ValueType() const; ``` That is, implicit conversions can be switched off by defining [`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) to `0`. !!! info "Future behavior change" Implicit conversions will be switched off by default in the next major release of the library. That is, `JSON_EXPLICIT` will be set to `#!cpp explicit` by default. You can prepare existing code by already defining [`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) to `0` and replace any implicit conversions with calls to [`get`](../basic_json/get.md). ## Examples ??? example The example below shows several conversions from JSON values to other types. There are a few things to note: (1) Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard `std::vector`, (3) A JSON object can be converted to C++ associative containers such as `std::unordered_map`. ```cpp --8<-- "examples/operator__ValueType.cpp" ``` Output: ```json --8<-- "examples/operator__ValueType.output" ``` ## Version history - Since version 1.0.0. - Macros `JSON_EXPLICIT`/[`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) added in version 3.9.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_eq.md000066400000000000000000000107551477615276400234660ustar00rootroot00000000000000# nlohmann::basic_json::operator== ```cpp // until C++20 bool operator==(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator==(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator==(ScalarType lhs, const const_reference rhs) noexcept; // (2) // since C++20 class basic_json { bool operator==(const_reference rhs) const noexcept; // (1) template bool operator==(ScalarType rhs) const noexcept; // (2) }; ``` 1. Compares two JSON values for equality according to the following rules: - Two JSON values are equal if (1) neither value is discarded, or (2) they are of the same type and their stored values are the same according to their respective `operator==`. - Integer and floating-point numbers are automatically converted before comparison. 2. Compares a JSON value and a scalar or a scalar and a JSON value for equality by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether the values `lhs`/`*this` and `rhs` are equal ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing special values" - `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. - JSON `#!cpp null` values are all equal. - Discarded values never compare equal to themselves. !!! note "Comparing floating-point numbers" Floating-point numbers inside JSON values numbers are compared with `json::number_float_t::operator==` which is `double::operator==` by default. To compare floating-point while respecting an epsilon, an alternative [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) could be used, for instance ```cpp template::value, T>::type> inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept { return std::abs(a - b) <= epsilon; } ``` Or you can self-defined operator equal function like this: ```cpp bool my_equal(const_reference lhs, const_reference rhs) { const auto lhs_type lhs.type(); const auto rhs_type rhs.type(); if (lhs_type == rhs_type) { switch(lhs_type) // self_defined case case value_t::number_float: return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); // other cases remain the same with the original ... } ... } ``` !!! note "Comparing different `basic_json` specializations" Comparing different `basic_json` specializations can have surprising effects. For instance, the result of comparing the JSON objects ```json { "version": 1, "type": "integer" } ``` and ```json { "type": "integer", "version": 1 } ``` depends on whether [`nlohmann::json`](../json.md) or [`nlohmann::ordered_json`](../ordered_json.md) is used: ```cpp --8<-- "examples/operator__equal__specializations.cpp" ``` Output: ```json --8<-- "examples/operator__equal__specializations.output" ``` ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__equal.cpp" ``` Output: ```json --8<-- "examples/operator__equal.output" ``` ??? example The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`). ```cpp --8<-- "examples/operator__equal__nullptr_t.cpp" ``` Output: ```json --8<-- "examples/operator__equal__nullptr_t.output" ``` ## Version history 1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. 2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_ge.md000066400000000000000000000044551477615276400234540ustar00rootroot00000000000000# nlohmann::basic_json::operator>= ```cpp // until C++20 bool operator>=(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator>=(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator>=(ScalarType lhs, const const_reference rhs) noexcept; // (2) ``` 1. Compares whether one JSON value `lhs` is greater than or equal to another JSON value `rhs` according to the following rules: - The comparison always yields `#!cpp false` if (1) either operand is discarded, or (2) either operand is `NaN` and the other operand is either `NaN` or any other number. - Otherwise, returns the result of `#!cpp !(lhs < rhs)` (see [**operator<**](operator_lt.md)). 2. Compares whether a JSON value is greater than or equal to a scalar or a scalar is greater than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether `lhs` is less than or equal to `rhs` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. !!! note "Operator overload resolution" Since C++20 overload resolution will consider the _rewritten candidate_ generated from [`operator<=>`](operator_spaceship.md). ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__greaterequal.cpp" ``` Output: ```json --8<-- "examples/operator__greaterequal.output" ``` ## See also - [**operator<=>**](operator_spaceship.md) comparison: 3-way ## Version history 1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. 2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_gt.md000066400000000000000000000043631477615276400234710ustar00rootroot00000000000000# nlohmann::basic_json::operator> ```cpp // until C++20 bool operator>(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator>(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator>(ScalarType lhs, const const_reference rhs) noexcept; // (2) ``` 1. Compares whether one JSON value `lhs` is greater than another JSON value `rhs` according to the following rules: - The comparison always yields `#!cpp false` if (1) either operand is discarded, or (2) either operand is `NaN` and the other operand is either `NaN` or any other number. - Otherwise, returns the result of `#!cpp !(lhs <= rhs)` (see [**operator<=**](operator_le.md)). 2. Compares whether a JSON value is greater than a scalar or a scalar is greater than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether `lhs` is greater than `rhs` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. !!! note "Operator overload resolution" Since C++20 overload resolution will consider the _rewritten candidate_ generated from [`operator<=>`](operator_spaceship.md). ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__greater.cpp" ``` Output: ```json --8<-- "examples/operator__greater.output" ``` ## See also - [**operator<=>**](operator_spaceship.md) comparison: 3-way ## Version history 1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. 2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_le.md000066400000000000000000000044411477615276400234540ustar00rootroot00000000000000# nlohmann::basic_json::operator<= ```cpp // until C++20 bool operator<=(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator<=(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator<=(ScalarType lhs, const const_reference rhs) noexcept; // (2) ``` 1. Compares whether one JSON value `lhs` is less than or equal to another JSON value `rhs` according to the following rules: - The comparison always yields `#!cpp false` if (1) either operand is discarded, or (2) either operand is `NaN` and the other operand is either `NaN` or any other number. - Otherwise, returns the result of `#!cpp !(rhs < lhs)` (see [**operator<**](operator_lt.md)). 2. Compares whether a JSON value is less than or equal to a scalar or a scalar is less than or equal to a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether `lhs` is less than or equal to `rhs` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. !!! note "Operator overload resolution" Since C++20 overload resolution will consider the _rewritten candidate_ generated from [`operator<=>`](operator_spaceship.md). ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__lessequal.cpp" ``` Output: ```json --8<-- "examples/operator__lessequal.output" ``` ## See also - [**operator<=>**](operator_spaceship.md) comparison: 3-way ## Version history 1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. 2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_lt.md000066400000000000000000000050501477615276400234700ustar00rootroot00000000000000# nlohmann::basic_json::operator< ```cpp // until C++20 bool operator<(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator<(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator<(ScalarType lhs, const const_reference rhs) noexcept; // (2) ``` 1. Compares whether one JSON value `lhs` is less than another JSON value `rhs` according to the following rules: - If either operand is discarded, the comparison yields `#!cpp false`. - If both operands have the same type, the values are compared using their respective `operator<`. - Integer and floating-point numbers are automatically converted before comparison. - In case `lhs` and `rhs` have different types, the values are ignored and the order of the types is considered, which is: 1. null 2. boolean 3. number (all types) 4. object 5. array 6. string 7. binary For instance, any boolean value is considered less than any string. 2. Compares whether a JSON value is less than a scalar or a scalar is less than a JSON value by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether `lhs` is less than `rhs` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. !!! note "Operator overload resolution" Since C++20 overload resolution will consider the _rewritten candidate_ generated from [`operator<=>`](operator_spaceship.md). ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__less.cpp" ``` Output: ```json --8<-- "examples/operator__less.output" ``` ## See also - [**operator<=>**](operator_spaceship.md) comparison: 3-way ## Version history 1. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. 2. Added in version 1.0.0. Conditionally removed since C++20 in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_ne.md000066400000000000000000000047611477615276400234630ustar00rootroot00000000000000# nlohmann::basic_json::operator!= ```cpp // until C++20 bool operator!=(const_reference lhs, const_reference rhs) noexcept; // (1) template bool operator!=(const_reference lhs, const ScalarType rhs) noexcept; // (2) template bool operator!=(ScalarType lhs, const const_reference rhs) noexcept; // (2) // since C++20 class basic_json { bool operator!=(const_reference rhs) const noexcept; // (1) template bool operator!=(ScalarType rhs) const noexcept; // (2) }; ``` 1. Compares two JSON values for inequality according to the following rules: - The comparison always yields `#!cpp false` if (1) either operand is discarded, or (2) either operand is `NaN` and the other operand is either `NaN` or any other number. - Otherwise, returns the result of `#!cpp !(lhs == rhs)` (until C++20) or `#!cpp !(*this == rhs)` (since C++20). 2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON value and comparing both JSON values according to 1. ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether the values `lhs`/`*this` and `rhs` are not equal ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" `NaN` values are unordered within the domain of numbers. The following comparisons all yield `#!cpp false`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. ## Examples ??? example The example demonstrates comparing several JSON types. ```cpp --8<-- "examples/operator__notequal.cpp" ``` Output: ```json --8<-- "examples/operator__notequal.output" ``` ??? example The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`). ```cpp --8<-- "examples/operator__notequal__nullptr_t.cpp" ``` Output: ```json --8<-- "examples/operator__notequal__nullptr_t.output" ``` ## Version history 1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. 2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_spaceship.md000066400000000000000000000057451477615276400250430ustar00rootroot00000000000000# nlohmann::basic_json::operator<=> ```cpp // since C++20 class basic_json { std::partial_ordering operator<=>(const_reference rhs) const noexcept; // (1) template std::partial_ordering operator<=>(const ScalarType rhs) const noexcept; // (2) }; ``` 1. 3-way compares two JSON values producing a result of type `std::partial_ordering` according to the following rules: - Two JSON values compare with a result of `std::partial_ordering::unordered` if either value is discarded. - If both JSON values are of the same type, the result is produced by 3-way comparing their stored values using their respective `operator<=>`. - Integer and floating-point numbers are converted to their common type and then 3-way compared using their respective `operator<=>`. For instance, comparing an integer and a floating-point value will 3-way compare the first value converted to floating-point with the second value. - Otherwise, yields a result by comparing the type (see [`value_t`](value_t.md)). 2. 3-way compares a JSON value and a scalar or a scalar and a JSON value by converting the scalar to a JSON value and 3-way comparing both JSON values (see 1). ## Template parameters `ScalarType` : a scalar type according to `std::is_scalar::value` ## Parameters `rhs` (in) : second value to consider ## Return value the `std::partial_ordering` of the 3-way comparison of `*this` and `rhs` ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Linear. ## Notes !!! note "Comparing `NaN`" - `NaN` values are unordered within the domain of numbers. The following comparisons all yield `std::partial_ordering::unordered`: 1. Comparing a `NaN` with itself. 2. Comparing a `NaN` with another `NaN`. 3. Comparing a `NaN` and any other number. ## Examples ??? example "Example: (1) comparing JSON values" The example demonstrates comparing several JSON values. ```cpp --8<-- "examples/operator_spaceship__const_reference.c++20.cpp" ``` Output: ```json --8<-- "examples/operator_spaceship__const_reference.c++20.output" ``` ??? example "Example: (2) comparing JSON values and scalars" The example demonstrates comparing several JSON values and scalars. ```cpp --8<-- "examples/operator_spaceship__scalartype.c++20.cpp" ``` Output: ```json --8<-- "examples/operator_spaceship__scalartype.c++20.output" ``` ## See also - [**operator==**](operator_eq.md) - comparison: equal - [**operator!=**](operator_ne.md) - comparison: not equal - [**operator<**](operator_lt.md) - comparison: less than - [**operator<=**](operator_le.md) - comparison: less than or equal - [**operator>**](operator_gt.md) - comparison: greater than - [**operator>=**](operator_ge.md) - comparison: greater than or equal ## Version history 1. Added in version 3.11.0. 2. Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/operator_value_t.md000066400000000000000000000026761477615276400245230ustar00rootroot00000000000000# nlohmann::basic_json::operator value_t ```cpp constexpr operator value_t() const noexcept; ``` Return the type of the JSON value as a value from the [`value_t`](value_t.md) enumeration. ## Return value the type of the JSON value | Value type | return value | |---------------------------|----------------------------| | `#!json null` | `value_t::null` | | boolean | `value_t::boolean` | | string | `value_t::string` | | number (integer) | `value_t::number_integer` | | number (unsigned integer) | `value_t::number_unsigned` | | number (floating-point) | `value_t::number_float` | | object | `value_t::object` | | array | `value_t::array` | | binary | `value_t::binary` | | discarded | `value_t::discarded` | ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `operator value_t()` for all JSON types. ```cpp --8<-- "examples/operator__value_t.cpp" ``` Output: ```json --8<-- "examples/operator__value_t.output" ``` ## Version history - Added in version 1.0.0. - Added unsigned integer type in version 2.0.0. - Added binary type in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/other_error.md000066400000000000000000000037411477615276400234750ustar00rootroot00000000000000# nlohmann::basic_json::other_error ```cpp class other_error : public exception; ``` This exception is thrown in case of errors that cannot be classified with the other exception types. Exceptions have ids 5xx (see [list of other errors](../../home/exceptions.md#further-exceptions)). ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_other_error fill:#CCCCFF ``` ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception ## Examples ??? example The following code shows how a `other_error` exception can be caught. ```cpp --8<-- "examples/other_error.cpp" ``` Output: ```json --8<-- "examples/other_error.output" ``` ## See also - [List of other errors](../../home/exceptions.md#further-exceptions) - [`parse_error`](parse_error.md) for exceptions indicating a parse error - [`invalid_iterator`](invalid_iterator.md) for exceptions indicating errors with iterators - [`type_error`](type_error.md) for exceptions indicating executing a member function with a wrong type - [`out_of_range`](out_of_range.md) for exceptions indicating access out of the defined range ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/out_of_range.md000066400000000000000000000040631477615276400236100ustar00rootroot00000000000000# nlohmann::basic_json::out_of_range ```cpp class out_of_range : public exception; ``` This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys. Exceptions have ids 4xx (see [list of out-of-range errors](../../home/exceptions.md#out-of-range)). ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_out_of_range fill:#CCCCFF ``` ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception ## Examples ??? example The following code shows how a `out_of_range` exception can be caught. ```cpp --8<-- "examples/out_of_range.cpp" ``` Output: ```json --8<-- "examples/out_of_range.output" ``` ## See also - [List of out-of-range errors](../../home/exceptions.md#out-of-range) - [`parse_error`](parse_error.md) for exceptions indicating a parse error - [`invalid_iterator`](invalid_iterator.md) for exceptions indicating errors with iterators - [`type_error`](type_error.md) for exceptions indicating executing a member function with a wrong type - [`other_error`](other_error.md) for exceptions indicating other library errors ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/parse.md000066400000000000000000000143031477615276400222510ustar00rootroot00000000000000# nlohmann::basic_json::parse ```cpp // (1) template static basic_json parse(InputType&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false); // (2) template static basic_json parse(IteratorType first, IteratorType last, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false); ``` 1. Deserialize from a compatible input. 2. Deserialize from a pair of character iterators The `value_type` of the iterator must be an integral type with size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32. ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer (throws if null) - a C-style array of characters - a pointer to a null-terminated string of single byte characters (throws if null) - a `std::string` - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : a compatible iterator type, for instance. - a pair of `std::string::iterator` or `std::vector::iterator` - a pair of pointers such as `ptr` and `ptr + len` ## Parameters `i` (in) : Input to parse from. `cb` (in) : a parser callback function of type [`parser_callback_t`](parser_callback_t.md) which is used to control the deserialization by filtering unwanted values (optional) `allow_exceptions` (in) : whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default) `ignore_comments` (in) : whether comments should be ignored and treated like whitespace (`#!cpp true`) or yield a parse error (`#!cpp false`); (optional, `#!cpp false` by default) `first` (in) : iterator to the start of a character range `last` (in) : iterator to the end of a character range ## Return value Deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be `value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md). ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an unexpected token, or empty input like a null `FILE*` or `char*` pointer. - Throws [`parse_error.102`](../../home/exceptions.md#jsonexceptionparse_error102) if `to_unicode` fails or surrogate error. - Throws [`parse_error.103`](../../home/exceptions.md#jsonexceptionparse_error103) if `to_unicode` fails. ## Complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function `cb` or reading from (1) the input `i` or (2) the iterator range [`first`, `last`] has a super-linear complexity. ## Notes A UTF-8 byte order mark is silently ignored. ## Examples ??? example "Parsing from a character array" The example below demonstrates the `parse()` function reading from an array. ```cpp --8<-- "examples/parse__array__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__array__parser_callback_t.output" ``` ??? example "Parsing from a string" The example below demonstrates the `parse()` function with and without callback function. ```cpp --8<-- "examples/parse__string__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__string__parser_callback_t.output" ``` ??? example "Parsing from an input stream" The example below demonstrates the `parse()` function with and without callback function. ```cpp --8<-- "examples/parse__istream__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__istream__parser_callback_t.output" ``` ??? example "Parsing from a contiguous container" The example below demonstrates the `parse()` function reading from a contiguous container. ```cpp --8<-- "examples/parse__contiguouscontainer__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__contiguouscontainer__parser_callback_t.output" ``` ??? example "Parsing from a non-null-terminated string" The example below demonstrates the `parse()` function reading from a string that is not null-terminated. ```cpp --8<-- "examples/parse__pointers.cpp" ``` Output: ```json --8<-- "examples/parse__pointers.output" ``` ??? example "Parsing from an iterator pair" The example below demonstrates the `parse()` function reading from an iterator pair. ```cpp --8<-- "examples/parse__iterator_pair.cpp" ``` Output: ```json --8<-- "examples/parse__iterator_pair.output" ``` ??? example "Effect of `allow_exceptions` parameter" The example below demonstrates the effect of the `allow_exceptions` parameter in the ´parse()` function. ```cpp --8<-- "examples/parse__allow_exceptions.cpp" ``` Output: ```json --8<-- "examples/parse__allow_exceptions.output" ``` ## See also - [accept](accept.md) - check if the input is valid JSON - [operator>>](../operator_gtgt.md) - deserialize from stream ## Version history - Added in version 1.0.0. - Overload for contiguous containers (1) added in version 2.0.3. - Ignoring comments via `ignore_comments` added in version 3.9.0. - Changed [runtime assertion](../../features/assertions.md) in case of `FILE*` null pointers to exception in version 3.12.0. !!! warning "Deprecation" Overload (2) replaces calls to `parse` with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp parse({ptr, ptr+len}, ...);` with `#!cpp parse(ptr, ptr+len, ...);`. You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated function. json-3.12.0/docs/mkdocs/docs/api/basic_json/parse_error.md000066400000000000000000000046371477615276400234730ustar00rootroot00000000000000# nlohmann::basic_json::parse_error ```cpp class parse_error : public exception; ``` The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch. Member `byte` holds the byte index of the last read character in the input file (see note below). Exceptions have ids 1xx (see [list of parse errors](../../home/exceptions.md#parse-errors)). ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_parse_error fill:#CCCCFF ``` ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception - **byte** - byte index of the parse error ## Notes For an input with $n$ bytes, 1 is the index of the first character and $n+1$ is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector for binary formats. ## Examples ??? example The following code shows how a `parse_error` exception can be caught. ```cpp --8<-- "examples/parse_error.cpp" ``` Output: ```json --8<-- "examples/parse_error.output" ``` ## See also - [List of parse errors](../../home/exceptions.md#parse-errors) - [`invalid_iterator`](invalid_iterator.md) for exceptions indicating errors with iterators - [`type_error`](type_error.md) for exceptions indicating executing a member function with a wrong type - [`out_of_range`](out_of_range.md) for exceptions indicating access out of the defined range - [`other_error`](other_error.md) for exceptions indicating other library errors ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/parse_event_t.md000066400000000000000000000014401477615276400237730ustar00rootroot00000000000000# nlohmann::basic_json::parse_event_t ```cpp enum class parse_event_t : std::uint8_t { object_start, object_end, array_start, array_end, key, value }; ``` The parser callback distinguishes the following events: - `object_start`: the parser read `{` and started to process a JSON object - `key`: the parser read a key of a value in an object - `object_end`: the parser read `}` and finished processing a JSON object - `array_start`: the parser read `[` and started to process a JSON array - `array_end`: the parser read `]` and finished processing a JSON array - `value`: the parser finished reading a JSON value ## Examples ![Example when certain parse events are triggered](../../images/callback_events.png) ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/parser_callback_t.md000066400000000000000000000071001477615276400245670ustar00rootroot00000000000000# nlohmann::basic_json::parser_callback_t ```cpp template using parser_callback_t = std::function; ``` With a parser callback function, the result of parsing a JSON text can be influenced. When passed to [`parse`](parse.md), it is called on certain events (passed as [`parse_event_t`](parse_event_t.md) via parameter `event`) with a set recursion depth `depth` and context JSON value `parsed`. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not. We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters `depth`, `event`, and `parsed`. | parameter `event` | description | parameter `depth` | parameter `parsed` | |-------------------------------|-----------------------------------------------------------|-------------------------------------------|----------------------------------| | `parse_event_t::object_start` | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded | | `parse_event_t::key` | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key | | `parse_event_t::object_end` | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object | | `parse_event_t::array_start` | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded | | `parse_event_t::array_end` | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array | | `parse_event_t::value` | the parser finished reading a JSON value | depth of the value | the parsed JSON value | ![Example when certain parse events are triggered](../../images/callback_events.png) Discarding a value (i.e., returning `#!cpp false`) has different effects depending on the context in which function was called: - Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read. - In case a value outside a structured type is skipped, it is replaced with `null`. This case happens if the top-level element is skipped. ## Parameters `depth` (in) : the depth of the recursion during parsing `event` (in) : an event of type [`parse_event_t`](parse_event_t.md) indicating the context in the callback function has been called `parsed` (in, out) : the current intermediate parse result; note that writing to this value has no effect for `parse_event_t::key` events ## Return value Whether the JSON value which called the function during parsing should be kept (`#!cpp true`) or not (`#!cpp false`). In the latter case, it is either skipped completely or replaced by an empty discarded object. ## Examples ??? example The example below demonstrates the `parse()` function with and without callback function. ```cpp --8<-- "examples/parse__string__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__string__parser_callback_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/patch.md000066400000000000000000000047521477615276400222450ustar00rootroot00000000000000# nlohmann::basic_json::patch ```cpp basic_json patch(const basic_json& json_patch) const; ``` [JSON Patch](http://jsonpatch.com) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. ## Parameters `json_patch` (in) : JSON patch document ## Return value patched document ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Exceptions - Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of an array of objects. - Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g., mandatory attributes are missing); example: `"operation add must have member path"`. - Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range. - Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: `"key baz not found"`. - Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent ("add", "remove", "move") - Throws [`out_of_range.501`](../../home/exceptions.md#jsonexceptionother_error501) if "test" operation was unsuccessful. ## Complexity Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected. ## Notes The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value. ## Examples ??? example The following code shows how a JSON patch is applied to a value. ```cpp --8<-- "examples/patch.cpp" ``` Output: ```json --8<-- "examples/patch.output" ``` ## See also - [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) - [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) - [patch_inplace](patch_inplace.md) applies a JSON Patch without creating a copy of the document - [merge_patch](merge_patch.md) applies a JSON Merge Patch ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/patch_inplace.md000066400000000000000000000050101477615276400237240ustar00rootroot00000000000000# nlohmann::basic_json::patch_inplace ```cpp void patch_inplace(const basic_json& json_patch) const; ``` [JSON Patch](http://jsonpatch.com) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void. ## Parameters `json_patch` (in) : JSON patch document ## Exception safety No guarantees, value may be corrupted by an unsuccessful patch operation. ## Exceptions - Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of an array of objects. - Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g., mandatory attributes are missing); example: `"operation add must have member path"`. - Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range. - Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: `"key baz not found"`. - Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent ("add", "remove", "move") - Throws [`out_of_range.501`](../../home/exceptions.md#jsonexceptionother_error501) if "test" operation was unsuccessful. ## Complexity Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected. ## Notes Unlike [`patch`](patch.md), `patch_inplace` applies the operation "in place" and no copy of the JSON value is created. That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the function throws an exception. ## Examples ??? example The following code shows how a JSON patch is applied to a value. ```cpp --8<-- "examples/patch_inplace.cpp" ``` Output: ```json --8<-- "examples/patch_inplace.output" ``` ## See also - [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) - [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) - [patch](patch.md) applies a JSON Merge Patch - [merge_patch](merge_patch.md) applies a JSON Merge Patch ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/push_back.md000066400000000000000000000070211477615276400230750ustar00rootroot00000000000000# nlohmann::basic_json::push_back ```cpp // (1) void push_back(basic_json&& val); void push_back(const basic_json& val); // (2) void push_back(const typename object_t::value_type& val); // (3) void push_back(initializer_list_t init); ``` 1. Appends the given element `val` to the end of the JSON array. If the function is called on a JSON null value, an empty array is created before appending `val`. 2. Inserts the given element `val` to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting `val`. 3. This function allows using `push_back` with an initializer list. In case 1. the current value is an object, 2. the initializer list `init` contains only two elements, and 3. the first element of `init` is a string, `init` is converted into an object element and added using `push_back(const typename object_t::value_type&)`. Otherwise, `init` is converted to a JSON value and added using `push_back(basic_json&&)`. ## Iterator invalidation For all cases where an element is added to an **array**, a reallocation can happen, in which case all iterators (including the [`end()`](end.md) iterator) and all references to the elements are invalidated. Otherwise, only the [`end()`](end.md) iterator is invalidated. For [`ordered_json`](../ordered_json.md), also adding an element to an **object** can yield a reallocation which again invalidates all iterators and all references. ## Parameters `val` (in) : the value to add to the JSON array/object `init` (in) : an initializer list ## Exceptions All functions can throw the following exception: - Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than JSON array or null; example: `"cannot use push_back() with number"` ## Complexity 1. Amortized constant. 2. Logarithmic in the size of the container, O(log(`size()`)). 3. Linear in the size of the initializer list `init`. ## Notes (3) This function is required to resolve an ambiguous overload error, because pairs like `{"key", "value"}` can be both interpreted as `object_t::value_type` or `std::initializer_list`, see [#235](https://github.com/nlohmann/json/issues/235) for more information. ## Examples ??? example "Example: (1) add element to array" The example shows how `push_back()` and `+=` can be used to add elements to a JSON array. Note how the `null` value was silently converted to a JSON array. ```cpp --8<-- "examples/push_back.cpp" ``` Output: ```json --8<-- "examples/push_back.output" ``` ??? example "Example: (2) add element to object" The example shows how `push_back()` and `+=` can be used to add elements to a JSON object. Note how the `null` value was silently converted to a JSON object. ```cpp --8<-- "examples/push_back__object_t__value.cpp" ``` Output: ```json --8<-- "examples/push_back__object_t__value.output" ``` ??? example "Example: (3) add to object from initializer list" The example shows how initializer lists are treated as objects when possible. ```cpp --8<-- "examples/push_back__initializer_list.cpp" ``` Output: ```json --8<-- "examples/push_back__initializer_list.output" ``` ## See also - [emplace_back](emplace_back.md) add a value to an array - [operator+=](operator+=.md) add a value to an array/object ## Version history 1. Since version 1.0.0. 2. Since version 1.0.0. 3. Since version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/rbegin.md000066400000000000000000000013261477615276400224060ustar00rootroot00000000000000# nlohmann::basic_json::rbegin ```cpp reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; ``` Returns an iterator to the reverse-beginning; that is, the last element. ![Illustration from cppreference.com](../../images/range-rbegin-rend.svg) ## Return value reverse iterator to the first element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `rbegin()`. ```cpp --8<-- "examples/rbegin.cpp" ``` Output: ```json --8<-- "examples/rbegin.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/rend.md000066400000000000000000000015001477615276400220620ustar00rootroot00000000000000# nlohmann::basic_json::rend ```cpp reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; ``` Returns an iterator to the reverse-end; that is, one before the first element. This element acts as a placeholder, attempting to access it results in undefined behavior. ![Illustration from cppreference.com](../../images/range-rbegin-rend.svg) ## Return value reverse iterator to the element following the last element ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code shows an example for `eend()`. ```cpp --8<-- "examples/rend.cpp" ``` Output: ```json --8<-- "examples/rend.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/sax_parse.md000066400000000000000000000062131477615276400231250ustar00rootroot00000000000000# nlohmann::basic_json::sax_parse ```cpp // (1) template static bool sax_parse(InputType&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false); // (2) template static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false); ``` Read from input and generate SAX events 1. Read from a compatible input. 2. Read from a pair of character iterators The value_type of the iterator must be an integral type with a size of 1, 2, or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16, and UTF-32. The SAX event lister must follow the interface of [`json_sax`](../json_sax/index.md). ## Template parameters `InputType` : A compatible input, for instance: - an `std::istream` object - a `FILE` pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object `obj` for which `begin(obj)` and `end(obj)` produces a valid pair of iterators. `IteratorType` : Description `SAX` : Description ## Parameters `i` (in) : Input to parse from. `sax` (in) : SAX event listener `format` (in) : the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, `input_format_t::json` by default), see [`input_format_t`](input_format_t.md) for more information `strict` (in) : whether the input has to be consumed completely (optional, `#!cpp true` by default) `ignore_comments` (in) : whether comments should be ignored and treated like whitespace (`#!cpp true`) or yield a parse error (`#!cpp false`); (optional, `#!cpp false` by default) `first` (in) : iterator to the start of a character range `last` (in) : iterator to the end of a character range ## Return value return value of the last processed SAX event ## Exception safety ## Complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer `sax` has a super-linear complexity. ## Notes A UTF-8 byte order mark is silently ignored. ## Examples ??? example The example below demonstrates the `sax_parse()` function reading from string and processing the events with a user-defined SAX event consumer. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. - Ignoring comments via `ignore_comments` added in version 3.9.0. !!! warning "Deprecation" Overload (2) replaces calls to `sax_parse` with a pair of iterators as their first parameter which has been deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like `#!cpp sax_parse({ptr, ptr+len});` with `#!cpp sax_parse(ptr, ptr+len);`. json-3.12.0/docs/mkdocs/docs/api/basic_json/size.md000066400000000000000000000030101477615276400221020ustar00rootroot00000000000000# nlohmann::basic_json::size ```cpp size_type size() const noexcept; ``` Returns the number of elements in a JSON value. ## Return value The return value depends on the different types and is defined as follows: | Value type | return value | |------------|-------------------------------------| | null | `0` | | boolean | `1` | | string | `1` | | number | `1` | | binary | `1` | | object | result of function object_t::size() | | array | result of function array_t::size() | ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant, as long as [`array_t`](array_t.md) and [`object_t`](object_t.md) satisfy the [Container](https://en.cppreference.com/w/cpp/named_req/Container) concept; that is, their `size()` functions have constant complexity. ## Notes This function does not return the length of a string stored as JSON value -- it returns the number of elements in the JSON value which is `1` in the case of a string. ## Examples ??? example The following code calls `size()` on the different value types. ```cpp --8<-- "examples/size.cpp" ``` Output: ```json --8<-- "examples/size.output" ``` ## Version history - Added in version 1.0.0. - Extended to return `1` for binary types in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/start_pos.md000066400000000000000000000037071477615276400231630ustar00rootroot00000000000000# nlohmann::basic_json::start_pos ```cpp #if JSON_DIAGNOSTIC_POSITIONS constexpr std::size_t start_pos() const noexcept; #endif ``` Returns the position of the first character in the JSON string from which the value was parsed from. | JSON type | return value | |-----------|------------------------------------------------| | object | position of the opening `{` | | array | position of the opening `[` | | string | position of the opening `"` | | number | position of the first character | | boolean | position of `t` for `true` and `f` for `false` | | null | position of `n` | ## Return value the position of the first character of the value in the parsed JSON string, if the value was created by the [`parse`](parse.md) function, or `std::string::npos` if the value was constructed otherwise ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Notes !!! note "Note" The function is only available if macro [`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) has been defined to `#!cpp 1` before including the library header. !!! warning "Invalidation" The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated when the JSON value is changed. ## Examples ??? example "Example" ```cpp --8<-- "examples/diagnostic_positions.cpp" ``` Output: ``` --8<-- "examples/diagnostic_positions.output" ``` The output shows the start/end positions of all the objects and fields in the JSON string. ## See also - [end_pos](end_pos.md) to access the end position - [JSON_DIAGNOSTIC_POSITIONS](../macros/json_diagnostic_positions.md) for an overview of the diagnostic positions ## Version history - Added in version 3.12.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/std_hash.md000066400000000000000000000014111477615276400227300ustar00rootroot00000000000000# std::hash ```cpp namespace std { struct hash; } ``` Return a hash value for a JSON object. The hash function tries to rely on `std::hash` where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for `#!json null`, `#!cpp 0`, `#!cpp 0U`, and `#!cpp false`, etc. ## Examples ??? example The example shows how to calculate hash values for different JSON values. ```cpp --8<-- "examples/std_hash.cpp" ``` Output: ```json --8<-- "examples/std_hash.output" ``` Note the output is platform-dependent. ## Version history - Added in version 1.0.0. - Extended for arbitrary basic_json types in version 3.10.5. json-3.12.0/docs/mkdocs/docs/api/basic_json/std_swap.md000066400000000000000000000014161477615276400227640ustar00rootroot00000000000000# std::swap ```cpp namespace std { void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2); } ``` Exchanges the values of two JSON objects. ## Parameters `j1` (in, out) : value to be replaced by `j2` `j2` (in, out) : value to be replaced by `j1` ## Possible implementation ```cpp void swap(nlohmann::basic_json& j1, nlohmann::basic_json& j2) { j1.swap(j2); } ``` ## Examples ??? example The following code shows how two values are swapped with `std::swap`. ```cpp --8<-- "examples/std_swap.cpp" ``` Output: ```json --8<-- "examples/std_swap.output" ``` ## See also - [swap](swap.md) ## Version history - Added in version 1.0.0. - Extended for arbitrary basic_json types in version 3.10.5. json-3.12.0/docs/mkdocs/docs/api/basic_json/string_t.md000066400000000000000000000042131477615276400227670ustar00rootroot00000000000000# nlohmann::basic_json::string_t ```cpp using string_t = StringType; ``` The type used to store JSON strings. [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows: > A string is a sequence of zero or more Unicode characters. To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization. ## Template parameters `StringType` : the container to store strings (e.g., `std::string`). Note this container is used for keys/names in objects, see [object_t](object_t.md). ## Notes #### Default type With the default values for `StringType` (`std::string`), the default value for `string_t` is `#!cpp std::string`. #### Encoding Strings are stored in UTF-8 encoding. Therefore, functions like `std::string::size()` or `std::string::length()` return the number of bytes in the string rather than the number of characters or glyphs. #### String comparison [RFC 8259](https://tools.ietf.org/html/rfc8259) states: > Software implementations are typically required to test names of object members for equality. Implementations that > transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, > code unit by code unit, are interoperable in the sense that implementations will agree in all cases on equality or > inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may > incorrectly find that `"a\\b"` and `"a\u005Cb"` are not equal. This implementation is interoperable as it does compare strings code unit by code unit. #### Storage String values are stored as pointers in a `basic_json` type. That is, for any access to string values, a pointer of type `string_t*` must be dereferenced. ## Examples ??? example The following code shows that `string_t` is by default, a typedef to `#!cpp std::string`. ```cpp --8<-- "examples/string_t.cpp" ``` Output: ```json --8<-- "examples/string_t.output" ``` ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/swap.md000066400000000000000000000114461477615276400221160ustar00rootroot00000000000000# nlohmann::basic_json::swap ```cpp // (1) void swap(reference other) noexcept; // (2) void swap(reference left, reference right) noexcept; // (3) void swap(array_t& other); // (4) void swap(object_t& other); // (5) void swap(string_t& other); // (6) void swap(binary_t& other); // (7) void swap(typename binary_t::container_type& other); ``` 1. Exchanges the contents of the JSON value with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. 2. Exchanges the contents of the JSON value from `left` with those of `right`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Implemented as a friend function callable via ADL. 3. Exchanges the contents of a JSON array with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. 4. Exchanges the contents of a JSON object with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. 5. Exchanges the contents of a JSON string with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. 6. Exchanges the contents of a binary value with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. 7. Exchanges the contents of a binary value with those of `other`. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike version (6), no binary subtype is involved. ## Parameters `other` (in, out) : value to exchange the contents with `left` (in, out) : value to exchange the contents with `right` (in, out) : value to exchange the contents with ## Exceptions 1. No-throw guarantee: this function never throws exceptions. 2. No-throw guarantee: this function never throws exceptions. 3. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than arrays; example: `"cannot use swap() with boolean"` 4. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than objects; example: `"cannot use swap() with boolean"` 5. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than strings; example: `"cannot use swap() with boolean"` 6. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than binaries; example: `"cannot use swap() with boolean"` 7. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than binaries; example: `"cannot use swap() with boolean"` ## Complexity Constant. ## Examples ??? example "Example: Swap JSON value (1, 2)" The example below shows how JSON values can be swapped with `swap()`. ```cpp --8<-- "examples/swap__reference.cpp" ``` Output: ```json --8<-- "examples/swap__reference.output" ``` ??? example "Example: Swap array (3)" The example below shows how arrays can be swapped with `swap()`. ```cpp --8<-- "examples/swap__array_t.cpp" ``` Output: ```json --8<-- "examples/swap__array_t.output" ``` ??? example "Example: Swap object (4)" The example below shows how objects can be swapped with `swap()`. ```cpp --8<-- "examples/swap__object_t.cpp" ``` Output: ```json --8<-- "examples/swap__object_t.output" ``` ??? example "Example: Swap string (5)" The example below shows how strings can be swapped with `swap()`. ```cpp --8<-- "examples/swap__string_t.cpp" ``` Output: ```json --8<-- "examples/swap__string_t.output" ``` ??? example "Example: Swap string (6)" The example below shows how binary values can be swapped with `swap()`. ```cpp --8<-- "examples/swap__binary_t.cpp" ``` Output: ```json --8<-- "examples/swap__binary_t.output" ``` ## See also - [std::swap](std_swap.md) ## Version history 1. Since version 1.0.0. 2. Since version 1.0.0. 3. Since version 1.0.0. 4. Since version 1.0.0. 5. Since version 1.0.0. 6. Since version 3.8.0. 7. Since version 3.8.0.json-3.12.0/docs/mkdocs/docs/api/basic_json/to_bjdata.md000066400000000000000000000046521477615276400230740ustar00rootroot00000000000000# nlohmann::basic_json::to_bjdata ```cpp // (1) static std::vector to_bjdata(const basic_json& j, const bool use_size = false, const bool use_type = false, const bjdata_version_t version = bjdata_version_t::draft2); // (2) static void to_bjdata(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false, const bjdata_version_t version = bjdata_version_t::draft2); static void to_bjdata(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false, const bjdata_version_t version = bjdata_version_t::draft2); ``` Serializes a given JSON value `j` to a byte vector using the BJData (Binary JData) serialization format. BJData aims to be more compact than JSON itself, yet more efficient to parse. 1. Returns a byte vector containing the BJData serialization. 2. Writes the BJData serialization to an output adapter. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bjdata.md). ## Parameters `j` (in) : JSON value to serialize `o` (in) : output adapter to write serialization to `use_size` (in) : whether to add size annotations to container types; optional, `#!cpp false` by default. `use_type` (in) : whether to add type annotations to container types (must be combined with `#!cpp use_size = true`); optional, `#!cpp false` by default. `version` (in) : which version of BJData to use (see note on "Binary values" on [BJData](../../features/binary_formats/bjdata.md)); optional, `#!cpp bjdata_version_t::draft2` by default. ## Return value 1. BJData serialization as byte vector 2. (none) ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of the JSON value `j`. ## Examples ??? example The example shows the serialization of a JSON value to a byte vector in BJData format. ```cpp --8<-- "examples/to_bjdata.cpp" ``` Output: ```json --8<-- "examples/to_bjdata.output" ``` ## Version history - Added in version 3.11.0. - BJData version parameter (for draft3 binary encoding) added in version 3.12.0.json-3.12.0/docs/mkdocs/docs/api/basic_json/to_bson.md000066400000000000000000000024301477615276400226000ustar00rootroot00000000000000# nlohmann::basic_json::to_bson ```cpp // (1) static std::vector to_bson(const basic_json& j); // (2) static void to_bson(const basic_json& j, detail::output_adapter o); static void to_bson(const basic_json& j, detail::output_adapter o); ``` BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document). 1. Returns a byte vector containing the BSON serialization. 2. Writes the BSON serialization to an output adapter. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bson.md). ## Parameters `j` (in) : JSON value to serialize `o` (in) : output adapter to write serialization to ## Return value 1. BSON serialization as a byte vector 2. (none) ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of the JSON value `j`. ## Examples ??? example The example shows the serialization of a JSON value to a byte vector in BSON format. ```cpp --8<-- "examples/to_bson.cpp" ``` Output: ```json --8<-- "examples/to_bson.output" ``` ## Version history - Added in version 3.4.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/to_cbor.md000066400000000000000000000027121477615276400225670ustar00rootroot00000000000000# nlohmann::basic_json::to_cbor ```cpp // (1) static std::vector to_cbor(const basic_json& j); // (2) static void to_cbor(const basic_json& j, detail::output_adapter o); static void to_cbor(const basic_json& j, detail::output_adapter o); ``` Serializes a given JSON value `j` to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse. 1. Returns a byte vector containing the CBOR serialization. 2. Writes the CBOR serialization to an output adapter. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/cbor.md). ## Parameters `j` (in) : JSON value to serialize `o` (in) : output adapter to write serialization to ## Return value 1. CBOR serialization as a byte vector 2. (none) ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of the JSON value `j`. ## Examples ??? example The example shows the serialization of a JSON value to a byte vector in CBOR format. ```cpp --8<-- "examples/to_cbor.cpp" ``` Output: ```json --8<-- "examples/to_cbor.output" ``` ## Version history - Added in version 2.0.9. - Compact representation of floating-point numbers added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/to_msgpack.md000066400000000000000000000026331477615276400232710ustar00rootroot00000000000000# nlohmann::basic_json::to_msgpack ```cpp // (1) static std::vector to_msgpack(const basic_json& j); // (2) static void to_msgpack(const basic_json& j, detail::output_adapter o); static void to_msgpack(const basic_json& j, detail::output_adapter o); ``` Serializes a given JSON value `j` to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to parse. 1. Returns a byte vector containing the MessagePack serialization. 2. Writes the MessagePack serialization to an output adapter. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/messagepack.md). ## Parameters `j` (in) : JSON value to serialize `o` (in) : output adapter to write serialization to ## Return value 1. MessagePack serialization as a byte vector 2. (none) ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of the JSON value `j`. ## Examples ??? example The example shows the serialization of a JSON value to a byte vector in MessagePack format. ```cpp --8<-- "examples/to_msgpack.cpp" ``` Output: ```json --8<-- "examples/to_msgpack.output" ``` ## Version history - Added in version 2.0.9. json-3.12.0/docs/mkdocs/docs/api/basic_json/to_string.md000066400000000000000000000022111477615276400231420ustar00rootroot00000000000000# to_string(basic_json) ```cpp template std::string to_string(const BasicJsonType& j); ``` This function implements a user-defined to_string for JSON objects. ## Template parameters `BasicJsonType` : a specialization of [`basic_json`](index.md) ## Return value string containing the serialization of the JSON value ## Exception safety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. ## Exceptions Throws [`type_error.316`](../../home/exceptions.md#jsonexceptiontype_error316) if a string stored inside the JSON value is not UTF-8 encoded ## Complexity Linear. ## Possible implementation ```cpp template std::string to_string(const BasicJsonType& j) { return j.dump(); } ``` ## Examples ??? example The following code shows how the library's `to_string()` function integrates with others, allowing argument-dependent lookup. ```cpp --8<-- "examples/to_string.cpp" ``` Output: ```json --8<-- "examples/to_string.output" ``` ## See also - [dump](dump.md) ## Version history Added in version 3.7.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/to_ubjson.md000066400000000000000000000036421477615276400231450ustar00rootroot00000000000000# nlohmann::basic_json::to_ubjson ```cpp // (1) static std::vector to_ubjson(const basic_json& j, const bool use_size = false, const bool use_type = false); // (2) static void to_ubjson(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false); static void to_ubjson(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false); ``` Serializes a given JSON value `j` to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse. 1. Returns a byte vector containing the UBJSON serialization. 2. Writes the UBJSON serialization to an output adapter. The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/ubjson.md). ## Parameters `j` (in) : JSON value to serialize `o` (in) : output adapter to write serialization to `use_size` (in) : whether to add size annotations to container types; optional, `#!cpp false` by default. `use_type` (in) : whether to add type annotations to container types (must be combined with `#!cpp use_size = true`); optional, `#!cpp false` by default. ## Return value 1. UBJSON serialization as a byte vector 2. (none) ## Exception safety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. ## Complexity Linear in the size of the JSON value `j`. ## Examples ??? example The example shows the serialization of a JSON value to a byte vector in UBJSON format. ```cpp --8<-- "examples/to_ubjson.cpp" ``` Output: ```json --8<-- "examples/to_ubjson.output" ``` ## Version history - Added in version 3.1.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/type.md000066400000000000000000000026041477615276400221210ustar00rootroot00000000000000# nlohmann::basic_json::type ```cpp constexpr value_t type() const noexcept; ``` Return the type of the JSON value as a value from the [`value_t`](value_t.md) enumeration. ## Return value the type of the JSON value | Value type | return value | |---------------------------|----------------------------| | `#!json null` | `value_t::null` | | boolean | `value_t::boolean` | | string | `value_t::string` | | number (integer) | `value_t::number_integer` | | number (unsigned integer) | `value_t::number_unsigned` | | number (floating-point) | `value_t::number_float` | | object | `value_t::object` | | array | `value_t::array` | | binary | `value_t::binary` | | discarded | `value_t::discarded` | ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `type()` for all JSON types. ```cpp --8<-- "examples/type.cpp" ``` Output: ```json --8<-- "examples/type.output" ``` ## Version history - Added in version 1.0.0. - Added unsigned integer type in version 2.0.0. - Added binary type in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/type_error.md000066400000000000000000000037531477615276400233400ustar00rootroot00000000000000# nlohmann::basic_json::type_error ```cpp class type_error : public exception; ``` This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics. Exceptions have ids 3xx (see [list of type errors](../../home/exceptions.md#type-errors)). ```mermaid classDiagram direction LR class std_exception ["std::exception"] { <> } class json_exception ["basic_json::exception"] { +const int id +const char* what() const } class json_parse_error ["basic_json::parse_error"] { +const std::size_t byte } class json_invalid_iterator ["basic_json::invalid_iterator"] class json_type_error ["basic_json::type_error"] class json_out_of_range ["basic_json::out_of_range"] class json_other_error ["basic_json::other_error"] std_exception <|-- json_exception json_exception <|-- json_parse_error json_exception <|-- json_invalid_iterator json_exception <|-- json_type_error json_exception <|-- json_out_of_range json_exception <|-- json_other_error style json_type_error fill:#CCCCFF ``` ## Member functions - **what** - returns explanatory string ## Member variables - **id** - the id of the exception ## Examples ??? example The following code shows how a `type_error` exception can be caught. ```cpp --8<-- "examples/type_error.cpp" ``` Output: ```json --8<-- "examples/type_error.output" ``` ## See also - [List of type errors](../../home/exceptions.md#type-errors) - [`parse_error`](parse_error.md) for exceptions indicating a parse error - [`invalid_iterator`](invalid_iterator.md) for exceptions indicating errors with iterators - [`out_of_range`](out_of_range.md) for exceptions indicating access out of the defined range - [`other_error`](other_error.md) for exceptions indicating other library errors ## Version history - Since version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/type_name.md000066400000000000000000000031041477615276400231150ustar00rootroot00000000000000# nlohmann::basic_json::type_name ```cpp const char* type_name() const noexcept; ``` Returns the type name as string to be used in error messages -- usually to indicate that a function was called on a wrong JSON type. ## Return value a string representation of the type ([`value_t`](value_t.md)): | Value type | return value | |----------------------------------------------------|---------------| | `#!json null` | `"null"` | | boolean | `"boolean"` | | string | `"string"` | | number (integer, unsigned integer, floating-point) | `"number"` | | object | `"object"` | | array | `"array"` | | binary | `"binary"` | | discarded | `"discarded"` | ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Constant. ## Examples ??? example The following code exemplifies `type_name()` for all JSON types. ```cpp --8<-- "examples/type_name.cpp" ``` Output: ```json --8<-- "examples/type_name.output" ``` ## Version history - Added in version 1.0.0. - Part of the public API version since 2.1.0. - Changed return value to `const char*` and added `noexcept` in version 3.0.0. - Added support for binary type in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/unflatten.md000066400000000000000000000031101477615276400231310ustar00rootroot00000000000000# nlohmann::basic_json::unflatten ```cpp basic_json unflatten() const; ``` The function restores the arbitrary nesting of a JSON value that has been flattened before using the [`flatten()`](flatten.md) function. The JSON value must meet certain constraints: 1. The value must be an object. 2. The keys must be JSON pointers (see [RFC 6901](https://tools.ietf.org/html/rfc6901)) 3. The mapped values must be primitive JSON types. ## Return value the original JSON from a flattened version ## Exception safety Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions The function can throw the following exceptions: - Throws [`type_error.314`](../../home/exceptions.md#jsonexceptiontype_error314) if value is not an object - Throws [`type_error.315`](../../home/exceptions.md#jsonexceptiontype_error315) if object values are not primitive ## Complexity Linear in the size of the JSON value. ## Notes Empty objects and arrays are flattened by [`flatten()`](flatten.md) to `#!json null` values and cannot unflattened to their original type. Apart from this example, for a JSON value `j`, the following is always true: `#!cpp j == j.flatten().unflatten()`. ## Examples ??? example The following code shows how a flattened JSON object is unflattened into the original nested JSON object. ```cpp --8<-- "examples/unflatten.cpp" ``` Output: ```json --8<-- "examples/unflatten.output" ``` ## See also - [flatten](flatten.md) the reverse function ## Version history - Added in version 2.0.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/update.md000066400000000000000000000100051477615276400224140ustar00rootroot00000000000000# nlohmann::basic_json::update ```cpp // (1) void update(const_reference j, bool merge_objects = false); // (2) void update(const_iterator first, const_iterator last, bool merge_objects = false); ``` 1. Inserts all values from JSON object `j`. 2. Inserts all values from range `[first, last)` When `merge_objects` is `#!c false` (default), existing keys are overwritten. When `merge_objects` is `#!c true`, recursively merges objects with common keys. The function is motivated by Python's [dict.update](https://docs.python.org/3.6/library/stdtypes.html#dict.update) function. ## Iterator invalidation For [`ordered_json`](../ordered_json.md), adding a value to an object can yield a reallocation, in which case all iterators (including the `end()` iterator) and all references to the elements are invalidated. ## Parameters `j` (in) : JSON object to read values from `merge_objects` (in) : when `#!c true`, existing keys are not overwritten, but contents of objects are merged recursively (default: `#!c false`) `first` (in) : the beginning of the range of elements to insert `last` (in) : the end of the range of elements to insert ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.312`](../../home/exceptions.md#jsonexceptiontype_error312) if called on JSON values other than objects; example: `"cannot use update() with string"` 2. The function can throw the following exceptions: - Throws [`type_error.312`](../../home/exceptions.md#jsonexceptiontype_error312) if called on JSON values other than objects; example: `"cannot use update() with string"` - Throws [`invalid_iterator.202`](../../home/exceptions.md#jsonexceptioninvalid_iterator202) if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` - Throws [`invalid_iterator.210`](../../home/exceptions.md#jsonexceptioninvalid_iterator210) if `first` and `last` do not belong to the same JSON value; example: `"iterators do not fit"` ## Complexity 1. O(N*log(size() + N)), where N is the number of elements to insert. 2. O(N*log(size() + N)), where N is the number of elements to insert. ## Examples ??? example The example shows how `update()` is used. ```cpp --8<-- "examples/update.cpp" ``` Output: ```json --8<-- "examples/update.output" ``` ??? example The example shows how `update()` is used. ```cpp --8<-- "examples/update__range.cpp" ``` Output: ```json --8<-- "examples/update__range.output" ``` ??? example One common use case for this function is the handling of user settings. Assume your application can be configured in some aspects: ```json { "color": "red", "active": true, "name": {"de": "Maus", "en": "mouse"} } ``` The user may override the default settings selectively: ```json { "color": "blue", "name": {"es": "ratón"}, } ``` Then `update` manages the merging of default settings and user settings: ```cpp auto user_settings = json::parse("config.json"); auto effective_settings = get_default_settings(); effective_settings.update(user_settings); ``` Now `effective_settings` contains the default settings, but those keys set by the user are overwritten: ```json { "color": "blue", "active": true, "name": {"es": "ratón"} } ``` Note existing keys were just overwritten. To merge objects, `merge_objects` setting should be set to `#!c true`: ```cpp auto user_settings = json::parse("config.json"); auto effective_settings = get_default_settings(); effective_settings.update(user_settings, true); ``` ```json { "color": "blue", "active": true, "name": {"de": "Maus", "en": "mouse", "es": "ratón"} } ``` ## Version history - Added in version 3.0.0. - Added `merge_objects` parameter in 3.10.5. json-3.12.0/docs/mkdocs/docs/api/basic_json/value.md000066400000000000000000000140451477615276400222560ustar00rootroot00000000000000# nlohmann::basic_json::value ```cpp // (1) template ValueType value(const typename object_t::key_type& key, ValueType&& default_value) const; // (2) template ValueType value(KeyType&& key, ValueType&& default_value) const; // (3) template ValueType value(const json_pointer& ptr, const ValueType& default_value) const; ``` 1. Returns either a copy of an object's element at the specified key `key` or a given default value if no element with key `key` exists. The function is basically equivalent to executing ```cpp try { return at(key); } catch(out_of_range) { return default_value; } ``` 2. See 1. This overload is only available if `KeyType` is comparable with `#!cpp typename object_t::key_type` and `#!cpp typename object_comparator_t::is_transparent` denotes a type. 3. Returns either a copy of an object's element at the specified JSON pointer `ptr` or a given default value if no value at `ptr` exists. The function is basically equivalent to executing ```cpp try { return at(ptr); } catch(out_of_range) { return default_value; } ``` !!! note "Differences to `at` and `operator[]`" - Unlike [`at`](at.md), this function does not throw if the given `key`/`ptr` was not found. - Unlike [`operator[]`](operator[].md), this function does not implicitly add an element to the position defined by `key`/`ptr` key. This function is furthermore also applicable to const objects. ## Template parameters `KeyType` : A type for an object key other than [`json_pointer`](../json_pointer/index.md) that is comparable with [`string_t`](string_t.md) using [`object_comparator_t`](object_comparator_t.md). This can also be a string view (C++17). `ValueType` : type compatible to JSON values, for instance `#!cpp int` for JSON integer numbers, `#!cpp bool` for JSON booleans, or `#!cpp std::vector` types for JSON arrays. Note the type of the expected value at `key`/`ptr` and the default value `default_value` must be compatible. ## Parameters `key` (in) : key of the element to access `default_value` (in) : the value to return if `key`/`ptr` found no value `ptr` (in) : a JSON pointer to the element to access ## Return value 1. copy of the element at key `key` or `default_value` if `key` is not found 2. copy of the element at key `key` or `default_value` if `key` is not found 3. copy of the element at JSON Pointer `ptr` or `default_value` if no value for `ptr` is found ## Exception safety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. ## Exceptions 1. The function can throw the following exceptions: - Throws [`type_error.302`](../../home/exceptions.md#jsonexceptiontype_error302) if `default_value` does not match the type of the value at `key` - Throws [`type_error.306`](../../home/exceptions.md#jsonexceptiontype_error306) if the JSON value is not an object; in that case, using `value()` with a key makes no sense. 2. See 1. 3. The function can throw the following exceptions: - Throws [`type_error.302`](../../home/exceptions.md#jsonexceptiontype_error302) if `default_value` does not match the type of the value at `ptr` - Throws [`type_error.306`](../../home/exceptions.md#jsonexceptiontype_error306) if the JSON value is not an object; in that case, using `value()` with a key makes no sense. ## Complexity 1. Logarithmic in the size of the container. 2. Logarithmic in the size of the container. 3. Logarithmic in the size of the container. ## Notes !!! warning "Return type" The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using [`operator[]`](operator[].md). However, when we call `value` and provide `#!c 0` as default value, then `#!c -1` is returned. The occurs, because `#!c 0` has type `#!c int` which overflows when handling the value `#!c 18446744073709551615`. To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value. ```cpp --8<-- "examples/value__return_type.cpp" ``` Output: ```json --8<-- "examples/value__return_type.output" ``` ## Examples ??? example "Example: (1) access specified object element with default value" The example below shows how object elements can be queried with a default value. ```cpp --8<-- "examples/value__object_t_key_type.cpp" ``` Output: ```json --8<-- "examples/value__object_t_key_type.output" ``` ??? example "Example: (2) access specified object element using string_view with default value" The example below shows how object elements can be queried with a default value. ```cpp --8<-- "examples/value__keytype.c++17.cpp" ``` Output: ```json --8<-- "examples/value__keytype.c++17.output" ``` ??? example "Example: (3) access specified object element via JSON Pointer with default value" The example below shows how object elements can be queried with a default value. ```cpp --8<-- "examples/value__json_ptr.cpp" ``` Output: ```json --8<-- "examples/value__json_ptr.output" ``` ## See also - see [`at`](at.md) for access by reference with range checking - see [`operator[]`](operator%5B%5D.md) for unchecked access by reference ## Version history 1. Added in version 1.0.0. Changed parameter `default_value` type from `const ValueType&` to `ValueType&&` in version 3.11.0. 2. Added in version 3.11.0. Made `ValueType` the first template parameter in version 3.11.2. 3. Added in version 2.0.2. json-3.12.0/docs/mkdocs/docs/api/basic_json/value_t.md000066400000000000000000000051101477615276400225720ustar00rootroot00000000000000# nlohmann::basic_json::value_t ```cpp enum class value_t : std::uint8_t { null, object, array, string, boolean, number_integer, number_unsigned, number_float, binary, discarded }; ``` This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions [`is_null`](is_null.md), [`is_object`](is_object.md), [`is_array`](is_array.md), [`is_string`](is_string.md), [`is_boolean`](is_boolean.md), [`is_number`](is_number.md) (with [`is_number_integer`](is_number_integer.md), [`is_number_unsigned`](is_number_unsigned.md), and [`is_number_float`](is_number_float.md)), [`is_discarded`](is_discarded.md), [`is_binary`](is_binary.md), [`is_primitive`](is_primitive.md), and [`is_structured`](is_structured.md) rely on it. ## Notes !!! note "Ordering" The order of types is as follows: 1. `null` 2. `boolean` 3. `number_integer`, `number_unsigned`, `number_float` 4. `object` 5. `array` 6. `string` 7. `binary` `discarded` is unordered. !!! note "Types of numbers" There are three enumerators for numbers (`number_integer`, `number_unsigned`, and `number_float`) to distinguish between different types of numbers: - [`number_unsigned_t`](number_unsigned_t.md) for unsigned integers - [`number_integer_t`](number_integer_t.md) for signed integers - [`number_float_t`](number_float_t.md) for floating-point numbers or to approximate integers which do not fit into the limits of their respective type !!! warning "Comparison operators" `operator<` and `operator<=>` (since C++20) are overloaded and compare according to the ordering described above. Until C++20 all other relational and equality operators yield results according to the integer value of each enumerator. Since C++20 some compilers consider the _rewritten candidates_ generated from `operator<=>` during overload resolution, while others do not. For predictable and portable behavior use: - `operator<` or `operator<=>` when wanting to compare according to the order described above - `operator==` or `operator!=` when wanting to compare according to each enumerators integer value ## Examples ??? example The following code how `type()` queries the `value_t` for all JSON types. ```cpp --8<-- "examples/type.cpp" ``` Output: ```json --8<-- "examples/type.output" ``` ## Version history - Added in version 1.0.0. - Added unsigned integer type in version 2.0.0. - Added binary type in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/basic_json/~basic_json.md000066400000000000000000000005111477615276400234430ustar00rootroot00000000000000# nlohmann::basic_json::~basic_json ```cpp ~basic_json() noexcept; ``` Destroys the JSON value and frees all allocated memory. ## Exception safety No-throw guarantee: this member function never throws exceptions. ## Complexity Linear. ## Version history - Added in version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/000077500000000000000000000000001477615276400243155ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/byte_container_with_subtype.md000066400000000000000000000020121477615276400324450ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype::byte_container_with_subtype ```cpp // (1) byte_container_with_subtype(); // (2) byte_container_with_subtype(const container_type& container); byte_container_with_subtype(container_type&& container); // (3) byte_container_with_subtype(const container_type& container, subtype_type subtype); byte_container_with_subtype(container_type&& container, subtype_type subtype); ``` 1. Create an empty binary container without a subtype. 2. Create a binary container without a subtype. 3. Create a binary container with a subtype. ## Parameters `container` (in) : binary container `subtype` (in) : subtype ## Examples ??? example The example below demonstrates how byte containers can be created. ```cpp --8<-- "examples/byte_container_with_subtype__byte_container_with_subtype.cpp" ``` Output: ```json --8<-- "examples/byte_container_with_subtype__byte_container_with_subtype.output" ``` ## Version history Since version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/clear_subtype.md000066400000000000000000000013641477615276400275040ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype::clear_subtype ```cpp void clear_subtype() noexcept; ``` Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance, MessagePack will prefer the bin family over the ext family. ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Examples ??? example The example below demonstrates how `clear_subtype` can remove subtypes. ```cpp --8<-- "examples/byte_container_with_subtype__clear_subtype.cpp" ``` Output: ```json --8<-- "examples/byte_container_with_subtype__clear_subtype.output" ``` ## Version history Since version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/has_subtype.md000066400000000000000000000012521477615276400271650ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype::has_subtype ```cpp constexpr bool has_subtype() const noexcept; ``` Returns whether the value has a subtype. ## Return value whether the value has a subtype ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Examples ??? example The example below demonstrates how `has_subtype` can check whether a subtype was set. ```cpp --8<-- "examples/byte_container_with_subtype__has_subtype.cpp" ``` Output: ```json --8<-- "examples/byte_container_with_subtype__has_subtype.output" ``` ## Version history Since version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/index.md000066400000000000000000000023371477615276400257530ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype ```cpp template class byte_container_with_subtype : public BinaryType; ``` This type extends the template parameter `BinaryType` provided to [`basic_json`](../basic_json/index.md) with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type. ## Template parameters `BinaryType` : container to store bytes (`#!cpp std::vector` by default) ## Member types - **container_type** - the type of the underlying container (`BinaryType`) - **subtype_type** - the type of the subtype (`#!cpp std::uint64_t`) ## Member functions - [(constructor)](byte_container_with_subtype.md) - **operator==** - comparison: equal - **operator!=** - comparison: not equal - [**set_subtype**](subtype.md) - sets the binary subtype - [**subtype**](subtype.md) - return the binary subtype - [**has_subtype**](has_subtype.md) - return whether the value has a subtype - [**clear_subtype**](clear_subtype.md) - clears the binary subtype ## Version history - Added in version 3.8.0. - Changed the type of subtypes to `#!cpp std::uint64_t` in 3.10.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/set_subtype.md000066400000000000000000000013771477615276400272150ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype::set_subtype ```cpp void set_subtype(subtype_type subtype) noexcept; ``` Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization. ## Parameters `subtype` (in) : subtype to set ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Examples ??? example The example below demonstrates how a subtype can be set with `set_subtype`. ```cpp --8<-- "examples/byte_container_with_subtype__set_subtype.cpp" ``` Output: ```json --8<-- "examples/byte_container_with_subtype__set_subtype.output" ``` ## Version history Since version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/byte_container_with_subtype/subtype.md000066400000000000000000000017521477615276400263370ustar00rootroot00000000000000# nlohmann::byte_container_with_subtype::subtype ```cpp constexpr subtype_type subtype() const noexcept; ``` Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return `subtype_type(-1)` as a sentinel value. ## Return value the numerical subtype of the binary value, or `subtype_type(-1)` if no subtype is set ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Examples ??? example The example below demonstrates how the subtype can be retrieved with `subtype`. Note how `subtype_type(-1)` is returned for container `c1`. ```cpp --8<-- "examples/byte_container_with_subtype__subtype.cpp" ``` Output: ```json --8<-- "examples/byte_container_with_subtype__subtype.output" ``` ## Version history - Added in version 3.8.0 - Fixed return value to properly return `subtype_type(-1)` as documented in version 3.10.0. json-3.12.0/docs/mkdocs/docs/api/json.md000066400000000000000000000007301477615276400177750ustar00rootroot00000000000000# nlohmann::json ```cpp using json = basic_json<>; ``` This type is the default specialization of the [basic_json](basic_json/index.md) class which uses the standard template types. ## Examples ??? example The example below demonstrates how to use the type `nlohmann::json`. ```cpp --8<-- "examples/README.cpp" ``` Output: ```json --8<-- "examples/README.output" ``` ## Version history Since version 1.0.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/000077500000000000000000000000001477615276400212135ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/json_pointer/back.md000066400000000000000000000012141477615276400224330ustar00rootroot00000000000000# nlohmann::json_pointer::back ```cpp const string_t& back() const; ``` Return the last reference token. ## Return value Last reference token. ## Exceptions Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if the JSON pointer has no parent. ## Complexity Constant. ## Examples ??? example The example shows the usage of `back`. ```cpp --8<-- "examples/json_pointer__back.cpp" ``` Output: ```json --8<-- "examples/json_pointer__back.output" ``` ## Version history - Added in version 3.6.0. - Changed return type to `string_t` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/empty.md000066400000000000000000000012001477615276400226640ustar00rootroot00000000000000# nlohmann::json_pointer::empty ```cpp bool empty() const noexcept; ``` Return whether the pointer points to the root document. ## Return value `#!cpp true` iff the JSON pointer points to the root document. ## Exception safety No-throw guarantee: this function never throws exceptions. ## Complexity Constant. ## Examples ??? example The example shows the result of `empty` for different JSON Pointers. ```cpp --8<-- "examples/json_pointer__empty.cpp" ``` Output: ```json --8<-- "examples/json_pointer__empty.output" ``` ## Version history Added in version 3.6.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/index.md000066400000000000000000000041001477615276400226370ustar00rootroot00000000000000# nlohmann::json_pointer ```cpp template class json_pointer; ``` A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions [`at`](../basic_json/at.md) and [`operator[]`](../basic_json/operator%5B%5D.md). Furthermore, JSON pointers are the base for JSON patches. ## Template parameters `RefStringType` : the string type used for the reference tokens making up the JSON pointer !!! warning "Deprecation" For backwards compatibility `RefStringType` may also be a specialization of [`basic_json`](../basic_json/index.md) in which case `string_t` will be deduced as [`basic_json::string_t`](../basic_json/string_t.md). This feature is deprecated and may be removed in a future major version. ## Member types - [**string_t**](string_t.md) - the string type used for the reference tokens ## Member functions - [(constructor)](json_pointer.md) - [**to_string**](to_string.md) - return a string representation of the JSON pointer - [**operator string_t**](operator_string_t.md) - return a string representation of the JSON pointer - [**operator==**](operator_eq.md) - compare: equal - [**operator!=**](operator_ne.md) - compare: not equal - [**operator/=**](operator_slasheq.md) - append to the end of the JSON pointer - [**operator/**](operator_slash.md) - create JSON Pointer by appending - [**parent_pointer**](parent_pointer.md) - returns the parent of this JSON pointer - [**pop_back**](pop_back.md) - remove the last reference token - [**back**](back.md) - return last reference token - [**push_back**](push_back.md) - append an unescaped token at the end of the pointer - [**empty**](empty.md) - return whether the pointer points to the root document ## Literals - [**operator""_json_pointer**](../operator_literal_json_pointer.md) - user-defined string literal for JSON pointers ## See also - [RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901) ## Version history - Added in version 2.0.0. - Changed template parameter from `basic_json` to string type in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/json_pointer.md000066400000000000000000000022451477615276400242510ustar00rootroot00000000000000# nlohmann::json_pointer::json_pointer ```cpp explicit json_pointer(const string_t& s = ""); ``` Create a JSON pointer according to the syntax described in [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3). ## Parameters `s` (in) : string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value ## Exceptions - Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is nonempty and does not begin with a slash (`/`); see example below. - Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below. ## Examples ??? example The example shows the construction several valid JSON pointers as well as the exceptional behavior. ```cpp --8<-- "examples/json_pointer.cpp" ``` Output: ```json --8<-- "examples/json_pointer.output" ``` ## Version history - Added in version 2.0.0. - Changed type of `s` to `string_t` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/operator_eq.md000066400000000000000000000064451477615276400240660ustar00rootroot00000000000000# nlohmann::json_pointer::operator== ```cpp // until C++20 template bool operator==( const json_pointer& lhs, const json_pointer& rhs) noexcept; // (1) template bool operator==( const json_pointer& lhs, const StringType& rhs); // (2) template bool operator==( const StringType& lhs, const json_pointer& rhs); // (2) // since C++20 class json_pointer { template bool operator==( const json_pointer& rhs) const noexcept; // (1) bool operator==(const string_t& rhs) const; // (2) }; ``` 1. Compares two JSON pointers for equality by comparing their reference tokens. 2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON pointer and comparing the JSON pointers according to 1. ## Template parameters `RefStringTypeLhs`, `RefStringTypeRhs` : the string type of the left-hand side or right-hand side JSON pointer, respectively `StringType` : the string type derived from the `json_pointer` operand ([`json_pointer::string_t`](string_t.md)) ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether the values `lhs`/`*this` and `rhs` are equal ## Exception safety 1. No-throw guarantee: this function never throws exceptions. 2. Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. (none) 2. The function can throw the following exceptions: - Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is nonempty and does not begin with a slash (`/`); see example below. - Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below. ## Complexity Constant if `lhs` and `rhs` differ in the number of reference tokens, otherwise linear in the number of reference tokens. ## Notes !!! warning "Deprecation" Overload 2 is deprecated and will be removed in a future major version release. ## Examples ??? example "Example: (1) Comparing JSON pointers" The example demonstrates comparing JSON pointers. ```cpp --8<-- "examples/json_pointer__operator__equal.cpp" ``` Output: ``` --8<-- "examples/json_pointer__operator__equal.output" ``` ??? example "Example: (2) Comparing JSON pointers and strings" The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception. ```cpp --8<-- "examples/json_pointer__operator__equal_stringtype.cpp" ``` Output: ``` --8<-- "examples/json_pointer__operator__equal_stringtype.output" ``` ## Version history 1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2. 2. Added for backward compatibility and deprecated in version 3.11.2. json-3.12.0/docs/mkdocs/docs/api/json_pointer/operator_ne.md000066400000000000000000000062301477615276400240530ustar00rootroot00000000000000# nlohmann::json_pointer::operator!= ```cpp // until C++20 template bool operator!=( const json_pointer& lhs, const json_pointer& rhs) noexcept; // (1) template bool operator!=( const json_pointer& lhs, const StringType& rhs); // (2) template bool operator!=( const StringType& lhs, const json_pointer& rhs); // (2) ``` 1. Compares two JSON pointers for inequality by comparing their reference tokens. 2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a JSON pointer and comparing the JSON pointers according to 1. ## Template parameters `RefStringTypeLhs`, `RefStringTypeRhs` : the string type of the left-hand side or right-hand side JSON pointer, respectively `StringType` : the string type derived from the `json_pointer` operand ([`json_pointer::string_t`](string_t.md)) ## Parameters `lhs` (in) : first value to consider `rhs` (in) : second value to consider ## Return value whether the values `lhs`/`*this` and `rhs` are not equal ## Exception safety 1. No-throw guarantee: this function never throws exceptions. 2. Strong exception safety: if an exception occurs, the original value stays intact. ## Exceptions 1. (none) 2. The function can throw the following exceptions: - Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is nonempty and does not begin with a slash (`/`); see example below. - Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below. ## Complexity Constant if `lhs` and `rhs` differ in the number of reference tokens, otherwise linear in the number of reference tokens. ## Notes !!! note "Operator overload resolution" Since C++20 overload resolution will consider the _rewritten candidate_ generated from [`operator==`](operator_eq.md). !!! warning "Deprecation" Overload 2 is deprecated and will be removed in a future major version release. ## Examples ??? example "Example: (1) Comparing JSON pointers" The example demonstrates comparing JSON pointers. ```cpp --8<-- "examples/json_pointer__operator__notequal.cpp" ``` Output: ``` --8<-- "examples/json_pointer__operator__notequal.output" ``` ??? example "Example: (2) Comparing JSON pointers and strings" The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception. ```cpp --8<-- "examples/json_pointer__operator__notequal_stringtype.cpp" ``` Output: ``` --8<-- "examples/json_pointer__operator__notequal_stringtype.output" ``` ## Version history 1. Added in version 2.1.0. 2. Added for backward compatibility and deprecated in version 3.11.2. json-3.12.0/docs/mkdocs/docs/api/json_pointer/operator_slash.md000066400000000000000000000027371477615276400245730ustar00rootroot00000000000000# nlohmann::json_pointer::operator/ ```cpp // (1) json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs); // (2) json_pointer operator/(const json_pointer& lhs, string_t token); // (3) json_pointer operator/(const json_pointer& lhs, std::size_t array_idx); ``` 1. create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer 2. create a new JSON pointer by appending the unescaped token at the end of the JSON pointer 3. create a new JSON pointer by appending the array-index-token at the end of the JSON pointer ## Parameters `lhs` (in) : JSON pointer `rhs` (in) : JSON pointer to append `token` (in) : reference token to append `array_idx` (in) : array index to append ## Return value 1. a new JSON pointer with `rhs` appended to `lhs` 2. a new JSON pointer with unescaped `token` appended to `lhs` 3. a new JSON pointer with `array_idx` appended to `lhs` ## Complexity 1. Linear in the length of `lhs` and `rhs`. 2. Linear in the length of `lhs`. 3. Linear in the length of `lhs`. ## Examples ??? example The example shows the usage of `operator/`. ```cpp --8<-- "examples/json_pointer__operator_add_binary.cpp" ``` Output: ```json --8<-- "examples/json_pointer__operator_add_binary.output" ``` ## Version history 1. Added in version 3.6.0. 2. Added in version 3.6.0. Changed type of `token` to `string_t` in version 3.11.0. 3. Added in version 3.6.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/operator_slasheq.md000066400000000000000000000023171477615276400251130ustar00rootroot00000000000000# nlohmann::json_pointer::operator/= ```cpp // (1) json_pointer& operator/=(const json_pointer& ptr); // (2) json_pointer& operator/=(string_t token); // (3) json_pointer& operator/=(std::size_t array_idx) ``` 1. append another JSON pointer at the end of this JSON pointer 2. append an unescaped reference token at the end of this JSON pointer 3. append an array index at the end of this JSON pointer ## Parameters `ptr` (in) : JSON pointer to append `token` (in) : reference token to append `array_idx` (in) : array index to append ## Return value 1. JSON pointer with `ptr` appended 2. JSON pointer with `token` appended without escaping `token` 3. JSON pointer with `array_idx` appended ## Complexity 1. Linear in the length of `ptr`. 2. Amortized constant. 3. Amortized constant. ## Examples ??? example The example shows the usage of `operator/=`. ```cpp --8<-- "examples/json_pointer__operator_add.cpp" ``` Output: ```json --8<-- "examples/json_pointer__operator_add.output" ``` ## Version history 1. Added in version 3.6.0. 2. Added in version 3.6.0. Changed type of `token` to `string_t` in version 3.11.0. 3. Added in version 3.6.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/operator_string_t.md000066400000000000000000000016631477615276400253070ustar00rootroot00000000000000# nlohmann::json_pointer::operator string_t ```cpp operator string_t() const ``` Return a string representation of the JSON pointer. ## Return value A string representation of the JSON pointer ## Possible implementation ```cpp operator string_t() const { return to_string(); } ``` ## Notes !!! warning "Deprecation" This function is deprecated in favor of [`to_string`](to_string.md) and will be removed in a future major version release. ## Examples ??? example The example shows how JSON Pointers can be implicitly converted to strings. ```cpp --8<-- "examples/json_pointer__operator_string_t.cpp" ``` Output: ```json --8<-- "examples/json_pointer__operator_string_t.output" ``` ## See also - [string_t](../basic_json/string_t.md)- type for strings ## Version history - Since version 2.0.0. - Changed type to `string_t` and deprecated in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/parent_pointer.md000066400000000000000000000012161477615276400245660ustar00rootroot00000000000000# nlohmann::json_pointer::parent_pointer ```cpp json_pointer parent_pointer() const; ``` Returns the parent of this JSON pointer. ## Return value Parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned. ## Complexity Linear in the length of the JSON pointer. ## Examples ??? example The example shows the result of `parent_pointer` for different JSON Pointers. ```cpp --8<-- "examples/json_pointer__parent_pointer.cpp" ``` Output: ```json --8<-- "examples/json_pointer__parent_pointer.output" ``` ## Version history Added in version 3.6.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/pop_back.md000066400000000000000000000010561477615276400233150ustar00rootroot00000000000000# nlohmann::json_pointer::pop_back ```cpp void pop_back(); ``` Remove the last reference token. ## Exceptions Throws [out_of_range.405](../../home/exceptions.md#jsonexceptionout_of_range405) if the JSON pointer has no parent. ## Complexity Constant. ## Examples ??? example The example shows the usage of `pop_back`. ```cpp --8<-- "examples/json_pointer__pop_back.cpp" ``` Output: ```json --8<-- "examples/json_pointer__pop_back.output" ``` ## Version history Added in version 3.6.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/push_back.md000066400000000000000000000012271477615276400234760ustar00rootroot00000000000000# nlohmann::json_pointer::push_back ```cpp void push_back(const string_t& token); void push_back(string_t&& token); ``` Append an unescaped token at the end of the reference pointer. ## Parameters `token` (in) : token to add ## Complexity Amortized constant. ## Examples ??? example The example shows the result of `push_back` for different JSON Pointers. ```cpp --8<-- "examples/json_pointer__push_back.cpp" ``` Output: ```json --8<-- "examples/json_pointer__push_back.output" ``` ## Version history - Added in version 3.6.0. - Changed type of `token` to `string_t` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/string_t.md000066400000000000000000000011001477615276400233560ustar00rootroot00000000000000# nlohmann::json_pointer::string_t ```cpp using string_t = RefStringType; ``` The string type used for the reference tokens making up the JSON pointer. See [`basic_json::string_t`](../basic_json/string_t.md) for more information. ## Examples ??? example The example shows the type `string_t` and its relation to `basic_json::string_t`. ```cpp --8<-- "examples/json_pointer__string_t.cpp" ``` Output: ```json --8<-- "examples/json_pointer__string_t.output" ``` ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_pointer/to_string.md000066400000000000000000000012131477615276400235420ustar00rootroot00000000000000# nlohmann::json_pointer::to_string ```cpp string_t to_string() const; ``` Return a string representation of the JSON pointer. ## Return value A string representation of the JSON pointer ## Notes For each JSON pointer `ptr`, it holds: ```cpp ptr == json_pointer(ptr.to_string()); ``` ## Examples ??? example The example shows the result of `to_string`. ```cpp --8<-- "examples/json_pointer__to_string.cpp" ``` Output: ```json --8<-- "examples/json_pointer__to_string.output" ``` ## Version history - Since version 2.0.0. - Changed return type to `string_t` in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/000077500000000000000000000000001477615276400203265ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/json_sax/binary.md000066400000000000000000000010551477615276400221350ustar00rootroot00000000000000# nlohmann::json_sax::binary ```cpp virtual bool binary(binary_t& val) = 0; ``` A binary value was read. ## Parameters `val` (in) : binary value ## Return value Whether parsing should proceed. ## Notes It is safe to move the passed binary value. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse__binary.cpp" ``` Output: ```json --8<-- "examples/sax_parse__binary.output" ``` ## Version history - Added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/boolean.md000066400000000000000000000007451477615276400222750ustar00rootroot00000000000000# nlohmann::json_sax::boolean ```cpp virtual bool boolean(bool val) = 0; ``` A boolean value was read. ## Parameters `val` (in) : boolean value ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/end_array.md000066400000000000000000000006701477615276400226170ustar00rootroot00000000000000# nlohmann::json_sax::end_array ```cpp virtual bool end_array() = 0; ``` The end of an array was read. ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/end_object.md000066400000000000000000000006731477615276400227520ustar00rootroot00000000000000# nlohmann::json_sax::end_object ```cpp virtual bool end_object() = 0; ``` The end of an object was read. ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/index.md000066400000000000000000000040401477615276400217550ustar00rootroot00000000000000# nlohmann::json_sax ```cpp template struct json_sax; ``` This class describes the SAX interface used by [sax_parse](../basic_json/sax_parse.md). Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input. ## Template parameters `BasicJsonType` : a specialization of [`basic_json`](../basic_json/index.md) ## Member types - [**number_integer_t**](../basic_json/number_integer_t.md) - `BasicJsonType`'s type for numbers (integer) - [**number_unsigned_t**](../basic_json/number_unsigned_t.md) - `BasicJsonType`'s type for numbers (unsigned) - [**number_float_t**](../basic_json/number_float_t.md) - `BasicJsonType`'s type for numbers (floating-point) - [**string_t**](../basic_json/string_t.md) - `BasicJsonType`'s type for strings - [**binary_t**](../basic_json/binary_t.md) - `BasicJsonType`'s type for binary arrays ## Member functions - [**binary**](binary.md) (_virtual_) - a binary value was read - [**boolean**](boolean.md) (_virtual_) - a boolean value was read - [**end_array**](end_array.md) (_virtual_) - the end of an array was read - [**end_object**](end_object.md) (_virtual_) - the end of an object was read - [**key**](key.md) (_virtual_) - an object key was read - [**null**](null.md) (_virtual_) - a null value was read - [**number_float**](number_float.md) (_virtual_) - a floating-point number was read - [**number_integer**](number_integer.md) (_virtual_) - an integer number was read - [**number_unsigned**](number_unsigned.md) (_virtual_) - an unsigned integer number was read - [**parse_error**](parse_error.md) (_virtual_) - a parse error occurred - [**start_array**](start_array.md) (_virtual_) - the beginning of an array was read - [**start_object**](start_object.md) (_virtual_) - the beginning of an object was read - [**string**](string.md) (_virtual_) - a string value was read ## Version history - Added in version 3.2.0. - Support for binary values (`binary_t`, `binary`) added in version 3.8.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/key.md000066400000000000000000000010301477615276400214320ustar00rootroot00000000000000# nlohmann::json_sax::key ```cpp virtual bool key(string_t& val) = 0; ``` An object key was read. ## Parameters `val` (in) : object key ## Return value Whether parsing should proceed. ## Notes It is safe to move the passed object key value. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/null.md000066400000000000000000000006471477615276400216310ustar00rootroot00000000000000# nlohmann::json_sax::null ```cpp virtual bool null() = 0; ``` A null value was read. ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/number_float.md000066400000000000000000000011251477615276400233240ustar00rootroot00000000000000# nlohmann::json_sax::number_float ```cpp virtual bool number_float(number_float_t val, const string_t& s) = 0; ``` A floating-point number was read. ## Parameters `val` (in) : floating-point value `s` (in) : string representation of the original input ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/number_integer.md000066400000000000000000000010011477615276400236450ustar00rootroot00000000000000# nlohmann::json_sax::number_integer ```cpp virtual bool number_integer(number_integer_t val) = 0; ``` An integer number was read. ## Parameters `val` (in) : integer value ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/number_unsigned.md000066400000000000000000000010261477615276400240330ustar00rootroot00000000000000# nlohmann::json_sax::number_unsigned ```cpp virtual bool number_unsigned(number_unsigned_t val) = 0; ``` An unsigned integer number was read. ## Parameters `val` (in) : unsigned integer value ## Return value Whether parsing should proceed. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/parse_error.md000066400000000000000000000014201477615276400231700ustar00rootroot00000000000000# nlohmann::json_sax::parse_error ```cpp virtual bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex) = 0; ``` A parse error occurred. ## Parameters `position` (in) : the position in the input where the error occurs `last_token` (in) : the last read token `ex` (in) : an exception object describing the error ## Return value Whether parsing should proceed (**must return `#!cpp false`**). ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/start_array.md000066400000000000000000000011521477615276400232020ustar00rootroot00000000000000# nlohmann::json_sax::start_array ```cpp virtual bool start_array(std::size_t elements) = 0; ``` The beginning of an array was read. ## Parameters `elements` (in) : number of object elements or `#!cpp -1` if unknown ## Return value Whether parsing should proceed. ## Notes Binary formats may report the number of elements. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/start_object.md000066400000000000000000000011551477615276400233350ustar00rootroot00000000000000# nlohmann::json_sax::start_object ```cpp virtual bool start_object(std::size_t elements) = 0; ``` The beginning of an object was read. ## Parameters `elements` (in) : number of object elements or `#!cpp -1` if unknown ## Return value Whether parsing should proceed. ## Notes Binary formats may report the number of elements. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/json_sax/string.md000066400000000000000000000010351477615276400221550ustar00rootroot00000000000000# nlohmann::json_sax::string ```cpp virtual bool string(string_t& val) = 0; ``` A string value was read. ## Parameters `val` (in) : string value ## Return value Whether parsing should proceed. ## Notes It is safe to move the passed string value. ## Examples ??? example The example below shows how the SAX interface is used. ```cpp --8<-- "examples/sax_parse.cpp" ``` Output: ```json --8<-- "examples/sax_parse.output" ``` ## Version history - Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/macros/000077500000000000000000000000001477615276400177665ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/api/macros/index.md000066400000000000000000000107641477615276400214270ustar00rootroot00000000000000# Macros Some aspects of the library can be configured by defining preprocessor macros **before** including the `json.hpp` header. See also the [macro overview page](../../features/macros.md). ## Runtime assertions - [**JSON_ASSERT(x)**](json_assert.md) - control behavior of runtime assertions ## Exceptions - [**JSON_CATCH_USER(exception)**
**JSON_THROW_USER(exception)**
**JSON_TRY_USER**](json_throw_user.md) - control exceptions - [**JSON_DIAGNOSTICS**](json_diagnostics.md) - control extended diagnostics - [**JSON_DIAGNOSTIC_POSITIONS**](json_diagnostic_positions.md) - access positions of elements - [**JSON_NOEXCEPTION**](json_noexception.md) - switch off exceptions ## Language support - [**JSON_HAS_CPP_11**
**JSON_HAS_CPP_14**
**JSON_HAS_CPP_17**
**JSON_HAS_CPP_20**](json_has_cpp_11.md) - set supported C++ standard - [**JSON_HAS_FILESYSTEM**
**JSON_HAS_EXPERIMENTAL_FILESYSTEM**](json_has_filesystem.md) - control `std::filesystem` support - [**JSON_HAS_RANGES**](json_has_ranges.md) - control `std::ranges` support - [**JSON_HAS_THREE_WAY_COMPARISON**](json_has_three_way_comparison.md) - control 3-way comparison support - [**JSON_NO_IO**](json_no_io.md) - switch off functions relying on certain C++ I/O headers - [**JSON_SKIP_UNSUPPORTED_COMPILER_CHECK**](json_skip_unsupported_compiler_check.md) - do not warn about unsupported compilers - [**JSON_USE_GLOBAL_UDLS**](json_use_global_udls.md) - place user-defined string literals (UDLs) into the global namespace ## Library version - [**JSON_SKIP_LIBRARY_VERSION_CHECK**](json_skip_library_version_check.md) - skip library version check - [**NLOHMANN_JSON_VERSION_MAJOR**
**NLOHMANN_JSON_VERSION_MINOR**
**NLOHMANN_JSON_VERSION_PATCH**](nlohmann_json_version_major.md) \- library version information ## Library namespace - [**NLOHMANN_JSON_NAMESPACE**](nlohmann_json_namespace.md) - full name of the `nlohmann` namespace - [**NLOHMANN_JSON_NAMESPACE_BEGIN**
**NLOHMANN_JSON_NAMESPACE_END**](nlohmann_json_namespace_begin.md) - open and close the library namespace - [**NLOHMANN_JSON_NAMESPACE_NO_VERSION**](nlohmann_json_namespace_no_version.md) - disable the version component of the inline namespace ## Type conversions - [**JSON_DISABLE_ENUM_SERIALIZATION**](json_disable_enum_serialization.md) - switch off default serialization/deserialization functions for enums - [**JSON_USE_IMPLICIT_CONVERSIONS**](json_use_implicit_conversions.md) - control implicit conversions ## Comparison behavior - [**JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON**](json_use_legacy_discarded_value_comparison.md) - control comparison of discarded values ## Serialization/deserialization macros ### Enums - [**NLOHMANN_JSON_SERIALIZE_ENUM**](nlohmann_json_serialize_enum.md) - serialize/deserialize an enum ### Classes and structs - [**NLOHMANN_DEFINE_TYPE_INTRUSIVE**](nlohmann_define_type_intrusive.md) - serialize/deserialize a non-derived class with private members - [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_type_intrusive.md) - serialize/deserialize a non-derived class with private members; uses default values - [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_type_intrusive.md) - serialize a non-derived class with private members - [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE**](nlohmann_define_type_non_intrusive.md) - serialize/deserialize a non-derived class - [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_type_non_intrusive.md) - serialize/deserialize a non-derived class; uses default values - [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_type_non_intrusive.md) - serialize a non-derived class - [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE**](nlohmann_define_derived_type.md) - serialize/deserialize a derived class with private members - [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_derived_type.md) - serialize/deserialize a derived class with private members; uses default values - [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_derived_type.md) - serialize a derived class with private members - [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE**](nlohmann_define_derived_type.md) - serialize/deserialize a derived class - [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](nlohmann_define_derived_type.md) - serialize/deserialize a derived class; uses default values - [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](nlohmann_define_derived_type.md) - serialize a derived class json-3.12.0/docs/mkdocs/docs/api/macros/json_assert.md000066400000000000000000000040611477615276400226430ustar00rootroot00000000000000# JSON_ASSERT ```cpp #define JSON_ASSERT(x) /* value */ ``` This macro controls which code is executed for [runtime assertions](../../features/assertions.md) of the library. ## Parameters `x` (in) : expression of a scalar type ## Default definition The default value is [`#!cpp assert(x)`](https://en.cppreference.com/w/cpp/error/assert). ```cpp #define JSON_ASSERT(x) assert(x) ``` Therefore, assertions can be switched off by defining `NDEBUG`. ## Notes - The library uses numerous assertions to guarantee invariants and to abort in case of otherwise undefined behavior (e.g., when calling [operator[]](../basic_json/operator%5B%5D.md) with a missing object key on a `const` object). See page [runtime assertions](../../features/assertions.md) for more information. - Defining the macro to code that does not call `std::abort` may leave the library in an undefined state. - The macro is undefined outside the library. ## Examples ??? example "Example 1: default behavior" The following code will trigger an assertion at runtime: ```cpp #include using json = nlohmann::json; int main() { const json j = {{"key", "value"}}; auto v = j["missing"]; } ``` Output: ``` Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144. ``` ??? example "Example 2: user-defined behavior" The assertion reporting can be changed by defining `JSON_ASSERT(x)` differently. ```cpp #include #include #define JSON_ASSERT(x) if(!(x)){fprintf(stderr, "assertion error in %s\n", __FUNCTION__); std::abort();} #include using json = nlohmann::json; int main() { const json j = {{"key", "value"}}; auto v = j["missing"]; } ``` Output: ``` assertion error in operator[] ``` ## See also - [Runtime Assertions](../../features/assertions.md) - overview documentation ## Version history - Added in version 3.9.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_diagnostic_positions.md000066400000000000000000000120201477615276400255670ustar00rootroot00000000000000# JSON_DIAGNOSTIC_POSITIONS ```cpp #define JSON_DIAGNOSTIC_POSITIONS /* value */ ``` This macro enables position diagnostics for generated JSON objects. When enabled, two new member functions [`start_pos()`](../basic_json/start_pos.md) and [`end_pos()`](../basic_json/end_pos.md) are added to [`basic_json`](../basic_json/index.md) values. If the value was created by calling the[`parse`](../basic_json/parse.md) function, then these functions allow querying the byte positions of the value in the input it was parsed from. In case the value was constructed by other means, `std::string::npos` is returned. [`start_pos()`](../basic_json/start_pos.md) returns the position of the first character of a given value in the original JSON string, while [`end_pos()`](../basic_json/end_pos.md) returns the position of the character _following_ the last character. For objects and arrays, the first and last characters correspond to the opening or closing braces/brackets, respectively. For primitive values, the first and last character represents the opening and closing quotes (strings) or the first and last character of the field's numerical or predefined value (`true`, `false`, `null`), respectively. | JSON type | return value [`start_pos()`](../basic_json/start_pos.md) | return value [`end_pos()`](../basic_json/end_pos.md) | |-----------|----------------------------------------------------------|------------------------------------------------------| | object | position of the opening `{` | position after the closing `}` | | array | position of the opening `[` | position after the closing `]` | | string | position of the opening `"` | position after the closing `"` | | number | position of the first character | position after the last character | | boolean | position of `t` for `true` and `f` for `false` | position after `e` | | null | position of `n` | position after `l` | Given the above, [`end_pos()`](../basic_json/end_pos.md)` - `[`start_pos()`](../basic_json/start_pos.md) for a JSON value provides the length of the parsed JSON string for that value, including the opening or closing braces, brackets, or quotes. Note that enabling this macro increases the size of every JSON value by two `std::size_t` fields and adds slight runtime overhead to parsing, copying JSON value objects, and the generation of error messages for exceptions. It also causes these values to be reported in those error messages. ## Default definition The default value is `0` (position diagnostics are switched off). ```cpp #define JSON_DIAGNOSTIC_POSITIONS 0 ``` When the macro is not defined, the library will define it to its default value. ## Notes !!! note "CMake option" Diagnostic positions can also be controlled with the CMake option [`JSON_Diagnostic_Positions`](../../integration/cmake.md#json_diagnostic_positions) (`OFF` by default) which defines `JSON_DIAGNOSTIC_POSITIONS` accordingly. !!! note "Availability" Diagnostic positions are only available if the value was created by the [`parse`](../basic_json/parse.md) function. The [`sax_parse`](../basic_json/sax_parse.md) function or all other means to create a JSON value **do not** set the diagnostic positions and [`start_pos()`](../basic_json/start_pos.md) and [`end_pos()`](../basic_json/end_pos.md) will only return `std::string::npos` for these values. !!! warning "Invalidation" The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated when the JSON value is changed. ## Examples ??? example "Example: retrieving positions" ```cpp --8<-- "examples/diagnostic_positions.cpp" ``` Output: ``` --8<-- "examples/diagnostic_positions.output" ``` The output shows the start/end positions of all the objects and fields in the JSON string. ??? example "Example 2: using only diagnostic positions in exceptions" ```cpp --8<-- "examples/diagnostic_positions_exception.cpp" ``` Output: ``` --8<-- "examples/diagnostic_positions_exception.output" ``` The output shows the exception with start/end positions only. ??? example "Example 3: using extended diagnostics with positions enabled in exceptions" ```cpp --8<-- "examples/diagnostics_extended_positions.cpp" ``` Output: ``` --8<-- "examples/diagnostics_extended_positions.output" ``` The output shows the exception with diagnostic path info and start/end positions. ## See also - [:simple-cmake: JSON_Diagnostic_Positions](../../integration/cmake.md#json_diagnostic_positions) - CMake option to control the macro - [JSON_DIAGNOSTICS](json_diagnostics.md) - macro to control extended diagnostics ## Version history - Added in version 3.12.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_diagnostics.md000066400000000000000000000054351477615276400236570ustar00rootroot00000000000000# JSON_DIAGNOSTICS ```cpp #define JSON_DIAGNOSTICS /* value */ ``` This macro enables [extended diagnostics for exception messages](../../home/exceptions.md#extended-diagnostic-messages). Possible values are `1` to enable or `0` to disable (default). When enabled, exception messages contain a [JSON Pointer](../json_pointer/json_pointer.md) to the JSON value that triggered the exception. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead. ## Default definition The default value is `0` (extended diagnostics are switched off). ```cpp #define JSON_DIAGNOSTICS 0 ``` When the macro is not defined, the library will define it to its default value. ## Notes !!! note "ABI compatibility" As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct symbol names. This allows different parts of a codebase to use different versions or configurations of this library without causing improper behavior. Where possible, it is still recommended that all code define this the same way for maximum interoperability. !!! hint "CMake option" Diagnostic messages can also be controlled with the CMake option [`JSON_Diagnostics`](../../integration/cmake.md#json_diagnostics) (`OFF` by default) which defines `JSON_DIAGNOSTICS` accordingly. ## Examples ??? example "Example 1: default behavior" ```cpp --8<-- "examples/diagnostics_standard.cpp" ``` Output: ``` --8<-- "examples/diagnostics_standard.output" ``` This exception can be hard to debug if storing the value `#!c "12"` and accessing it is further apart. ??? example "Example 2: extended diagnostic messages" ```cpp --8<-- "examples/diagnostics_extended.cpp" ``` Output: ``` --8<-- "examples/diagnostics_extended.output" ``` Now the exception message contains a JSON Pointer `/address/housenumber` that indicates which value has the wrong type. ??? example "Example 3: using only diagnostic positions in exceptions" ```cpp --8<-- "examples/diagnostic_positions_exception.cpp" ``` Output: ``` --8<-- "examples/diagnostic_positions_exception.output" ``` The output shows the exception with start/end positions only. ## See also - [:simple-cmake: JSON_Diagnostics](../../integration/cmake.md#json_diagnostics) - CMake option to control the macro - [JSON_DIAGNOSTIC_POSITIONS](json_diagnostic_positions.md) - macro to access positions of elements ## Version history - Added in version 3.10.0. - As of version 3.11.0, the definition is allowed to vary between translation units. json-3.12.0/docs/mkdocs/docs/api/macros/json_disable_enum_serialization.md000066400000000000000000000100351477615276400267240ustar00rootroot00000000000000# JSON_DISABLE_ENUM_SERIALIZATION ```cpp #define JSON_DISABLE_ENUM_SERIALIZATION /* value */ ``` When defined to `1`, default serialization and deserialization functions for enums are excluded and have to be provided by the user, for example, using [`NLOHMANN_JSON_SERIALIZE_ENUM`](nlohmann_json_serialize_enum.md) (see [arbitrary type conversions](../../features/arbitrary_types.md) for more details). Parsing or serializing an enum will result in a compiler error. This works for both unscoped and scoped enums. ## Default definition The default value is `0`. ```cpp #define JSON_DISABLE_ENUM_SERIALIZATION 0 ``` ## Notes !!! hint "CMake option" Enum serialization can also be controlled with the CMake option [`JSON_DisableEnumSerialization`](../../integration/cmake.md#json_disableenumserialization) (`OFF` by default) which defines `JSON_DISABLE_ENUM_SERIALIZATION` accordingly. ## Examples ??? example "Example 1: Disabled behavior" The code below forces the library **not** to create default serialization/deserialization functions `from_json` and `to_json`, meaning the code below **does not** compile. ```cpp #define JSON_DISABLE_ENUM_SERIALIZATION 1 #include using json = nlohmann::json; enum class Choice { first, second, }; int main() { // normally invokes to_json serialization function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not const json j = Choice::first; // normally invokes from_json parse function but with JSON_DISABLE_ENUM_SERIALIZATION defined, it does not Choice ch = j.template get(); } ``` ??? example "Example 2: Serialize enum macro" The code below forces the library **not** to create default serialization/deserialization functions `from_json` and `to_json`, but uses [`NLOHMANN_JSON_SERIALIZE_ENUM`](nlohmann_json_serialize_enum.md) to parse and serialize the enum. ```cpp #define JSON_DISABLE_ENUM_SERIALIZATION 1 #include using json = nlohmann::json; enum class Choice { first, second, }; NLOHMANN_JSON_SERIALIZE_ENUM(Choice, { { Choice::first, "first" }, { Choice::second, "second" }, }) int main() { // uses user-defined to_json function defined by macro const json j = Choice::first; // uses user-defined from_json function defined by macro Choice ch = j.template get(); } ``` ??? example "Example 3: User-defined serialization/deserialization functions" The code below forces the library **not** to create default serialization/deserialization functions `from_json` and `to_json`, but uses user-defined functions to parse and serialize the enum. ```cpp #define JSON_DISABLE_ENUM_SERIALIZATION 1 #include using json = nlohmann::json; enum class Choice { first, second, }; void from_json(const json& j, Choice& ch) { auto value = j.template get(); if (value == "first") { ch = Choice::first; } else if (value == "second") { ch = Choice::second; } } void to_json(json& j, const Choice& ch) { auto value = j.template get(); if (value == "first") { ch = Choice::first; } else if (value == "second") { ch = Choice::second; } } int main() { // uses user-defined to_json function const json j = Choice::first; // uses user-defined from_json function Choice ch = j.template get(); } ``` ## See also - [:simple-cmake: JSON_DisableEnumSerialization](../../integration/cmake.md#json_disableenumserialization) - CMake option to control the macro - [`NLOHMANN_JSON_SERIALIZE_ENUM`](nlohmann_json_serialize_enum.md) - serialize/deserialize an enum ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_has_cpp_11.md000066400000000000000000000021711477615276400232600ustar00rootroot00000000000000# JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20 ```cpp #define JSON_HAS_CPP_11 #define JSON_HAS_CPP_14 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_20 ``` The library targets C++11, but also supports some features introduced in later C++ versions (e.g., `std::string_view` support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly. ## Default definition The default value is detected based on preprocessor macros such as `#!cpp __cplusplus`, `#!cpp _HAS_CXX17`, or `#!cpp _MSVC_LANG`. ## Notes - `#!cpp JSON_HAS_CPP_11` is always defined. - All macros are undefined outside the library. ## Examples ??? example The code below forces the library to use the C++14 standard: ```cpp #define JSON_HAS_CPP_14 1 #include ... ``` ## Version history - Added in version 3.10.5. json-3.12.0/docs/mkdocs/docs/api/macros/json_has_filesystem.md000066400000000000000000000027521477615276400243660ustar00rootroot00000000000000# JSON_HAS_FILESYSTEM / JSON_HAS_EXPERIMENTAL_FILESYSTEM ```cpp #define JSON_HAS_FILESYSTEM /* value */ #define JSON_HAS_EXPERIMENTAL_FILESYSTEM /* value */ ``` When compiling with C++17, the library provides conversions from and to [`std::filesystem::path`](https://en.cppreference.com/w/cpp/filesystem/path). As compiler support for filesystem is limited, the library tries to detect whether [``/`std::filesystem`](https://en.cppreference.com/w/cpp/header/filesystem) (`JSON_HAS_FILESYSTEM`) or [``/`std::experimental::filesystem`](https://en.cppreference.com/w/cpp/header/experimental/filesystem) (`JSON_HAS_EXPERIMENTAL_FILESYSTEM`) should be used. To override the built-in check, define `JSON_HAS_FILESYSTEM` or `JSON_HAS_EXPERIMENTAL_FILESYSTEM` to `1`. ## Default definition The default value is detected based on the preprocessor macros `#!cpp __cpp_lib_filesystem`, `#!cpp __cpp_lib_experimental_filesystem`, `#!cpp __has_include()`, or `#!cpp __has_include()`. ## Notes - Note that older compilers or older versions of libstd++ also require the library `stdc++fs` to be linked to for filesystem support. - Both macros are undefined outside the library. ## Examples ??? example The code below forces the library to use the header ``. ```cpp #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 #include ... ``` ## Version history - Added in version 3.10.5. json-3.12.0/docs/mkdocs/docs/api/macros/json_has_ranges.md000066400000000000000000000012331477615276400234520ustar00rootroot00000000000000# JSON_HAS_RANGES ```cpp #define JSON_HAS_RANGES /* value */ ``` This macro indicates whether the standard library has any support for ranges. Implies support for concepts. Possible values are `1` when supported or `0` when unsupported. ## Default definition The default value is detected based on the preprocessor macro `#!cpp __cpp_lib_ranges`. When the macro is not defined, the library will define it to its default value. ## Examples ??? example The code below forces the library to enable support for ranges: ```cpp #define JSON_HAS_RANGES 1 #include ... ``` ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_has_static_rtti.md000066400000000000000000000013021477615276400245210ustar00rootroot00000000000000# JSON_HAS_STATIC_RTTI ```cpp #define JSON_HAS_STATIC_RTTI /* value */ ``` This macro indicates whether the standard library has any support for RTTI (run time type information). Possible values are `1` when supported or `0` when unsupported. ## Default definition The default value is detected based on the preprocessor macro `#!cpp _HAS_STATIC_RTTI`. When the macro is not defined, the library will define it to its default value. ## Examples ??? example The code below forces the library to enable support for libraries with RTTI dependence: ```cpp #define JSON_HAS_STATIC_RTTI 1 #include ... ``` ## Version history - Added in version 3.11.3. json-3.12.0/docs/mkdocs/docs/api/macros/json_has_three_way_comparison.md000066400000000000000000000013501477615276400264140ustar00rootroot00000000000000# JSON_HAS_THREE_WAY_COMPARISON ```cpp #define JSON_HAS_THREE_WAY_COMPARISON /* value */ ``` This macro indicates whether the compiler and standard library support 3-way comparison. Possible values are `1` when supported or `0` when unsupported. ## Default definition The default value is detected based on the preprocessor macros `#!cpp __cpp_impl_three_way_comparison` and `#!cpp __cpp_lib_three_way_comparison`. When the macro is not defined, the library will define it to its default value. ## Examples ??? example The code below forces the library to use 3-way comparison: ```cpp #define JSON_HAS_THREE_WAY_COMPARISON 1 #include ... ``` ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_no_io.md000066400000000000000000000013431477615276400224450ustar00rootroot00000000000000# JSON_NO_IO ```cpp #define JSON_NO_IO ``` When defined, headers ``, ``, ``, ``, and `` are not included and parse functions relying on these headers are excluded. This is relevant for environments where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)). ## Default definition By default, `#!cpp JSON_NO_IO` is not defined. ```cpp #undef JSON_NO_IO ``` ## Examples ??? example The code below forces the library not to use the headers ``, ``, ``, ``, and ``. ```cpp #define JSON_NO_IO 1 #include ... ``` ## Version history - Added in version 3.10.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_noexception.md000066400000000000000000000020751477615276400237000ustar00rootroot00000000000000# JSON_NOEXCEPTION ```cpp #define JSON_NOEXCEPTION ``` Exceptions can be switched off by defining the symbol `JSON_NOEXCEPTION`. When defining `JSON_NOEXCEPTION`, `#!cpp try` is replaced by `#!cpp if (true)`, `#!cpp catch` is replaced by `#!cpp if (false)`, and `#!cpp throw` is replaced by `#!cpp std::abort()`. The same effect is achieved by setting the compiler flag `-fno-exceptions`. ## Default definition By default, the macro is not defined. ```cpp #undef JSON_NOEXCEPTION ``` ## Notes The explanatory [`what()`](https://en.cppreference.com/w/cpp/error/exception/what) string of exceptions is not available for MSVC if exceptions are disabled, see [#2824](https://github.com/nlohmann/json/discussions/2824). ## Examples ??? example The code below switches off exceptions in the library. ```cpp #define JSON_NOEXCEPTION 1 #include ... ``` ## See also - [Switch off exceptions](../../home/exceptions.md#switch-off-exceptions) for more information how to switch off exceptions ## Version history Added in version 2.1.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_skip_library_version_check.md000066400000000000000000000013531477615276400267370ustar00rootroot00000000000000# JSON_SKIP_LIBRARY_VERSION_CHECK ```cpp #define JSON_SKIP_LIBRARY_VERSION_CHECK ``` When defined, the library will not create a compiler warning when a different version of the library was already included. ## Default definition By default, the macro is not defined. ```cpp #undef JSON_SKIP_LIBRARY_VERSION_CHECK ``` ## Notes !!! danger "ABI compatibility" Mixing different library versions in the same code can be a problem as the different versions may not be ABI compatible. ## Examples !!! example The following warning will be shown in case a different version of the library was already included: ``` Already included a different version of the library! ``` ## Version history Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_skip_unsupported_compiler_check.md000066400000000000000000000013141477615276400300050ustar00rootroot00000000000000# JSON_SKIP_UNSUPPORTED_COMPILER_CHECK ```cpp #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK ``` When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used. ## Default definition By default, the macro is not defined. ```cpp #undef JSON_SKIP_UNSUPPORTED_COMPILER_CHECK ``` ## Examples ??? example The code below switches off the check whether the compiler is supported. ```cpp #define JSON_SKIP_UNSUPPORTED_COMPILER_CHECK 1 #include ... ``` ## Version history Added in version 3.2.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_throw_user.md000066400000000000000000000050641477615276400235470ustar00rootroot00000000000000# JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER ```cpp // (1) #define JSON_CATCH_USER(exception) /* value */ // (2) #define JSON_THROW_USER(exception) /* value */ // (3) #define JSON_TRY_USER /* value */ ``` Controls how exceptions are handled by the library. 1. This macro overrides [`#!cpp catch`](https://en.cppreference.com/w/cpp/language/try_catch) calls inside the library. The argument is the type of the exception to catch. As of version 3.8.0, the library only catches `std::out_of_range` exceptions internally to rethrow them as [`json::out_of_range`](../../home/exceptions.md#out-of-range) exceptions. The macro is always followed by a scope. 2. This macro overrides `#!cpp throw` calls inside the library. The argument is the exception to be thrown. Note that `JSON_THROW_USER` should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior. 3. This macro overrides `#!cpp try` calls inside the library. It has no arguments and is always followed by a scope. ## Parameters `exception` (in) : an exception type ## Default definition By default, the macros map to their respective C++ keywords: ```cpp #define JSON_CATCH_USER(exception) catch(exception) #define JSON_THROW_USER(exception) throw exception #define JSON_TRY_USER try ``` When exceptions are switched off, the `#!cpp try` block is executed unconditionally, and throwing exceptions is replaced by calling [`std::abort`](https://en.cppreference.com/w/cpp/utility/program/abort) to make reaching the `#!cpp throw` branch abort the process. ```cpp #define JSON_THROW_USER(exception) std::abort() #define JSON_TRY_USER if (true) #define JSON_CATCH_USER(exception) if (false) ``` ## Examples ??? example The code below switches off exceptions and creates a log entry with a detailed error message in case of errors. ```cpp #include #define JSON_TRY_USER if(true) #define JSON_CATCH_USER(exception) if(false) #define JSON_THROW_USER(exception) \ {std::clog << "Error in " << __FILE__ << ":" << __LINE__ \ << " (function " << __FUNCTION__ << ") - " \ << (exception).what() << std::endl; \ std::abort();} #include ``` ## See also - [Switch off exceptions](../../home/exceptions.md#switch-off-exceptions) for more information how to switch off exceptions - [JSON_NOEXCEPTION](json_noexception.md) - switch off exceptions ## Version history - Added in version 3.1.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_use_global_udls.md000066400000000000000000000044751477615276400245160ustar00rootroot00000000000000# JSON_USE_GLOBAL_UDLS ```cpp #define JSON_USE_GLOBAL_UDLS /* value */ ``` When defined to `1`, the user-defined string literals (UDLs) are placed into the global namespace instead of `nlohmann::literals::json_literals`. ## Default definition The default value is `1`. ```cpp #define JSON_USE_GLOBAL_UDLS 1 ``` When the macro is not defined, the library will define it to its default value. ## Notes !!! info "Future behavior change" The user-defined string literals will be removed from the global namespace in the next major release of the library. To prepare existing code, define `JSON_USE_GLOBAL_UDLS` to `0` and bring the string literals into scope where needed. Refer to any of the [string literals](#see-also) for details. !!! hint "CMake option" The placement of user-defined string literals can also be controlled with the CMake option [`JSON_GlobalUDLs`](../../integration/cmake.md#json_globaludls) (`ON` by default) which defines `JSON_USE_GLOBAL_UDLS` accordingly. ## Examples ??? example "Example 1: Default behavior" The code below shows the default behavior using the `_json` UDL. ```cpp #include #include int main() { auto j = "42"_json; std::cout << j << std::endl; } ``` Output: ```json 42 ``` ??? example "Example 2: Namespaced UDLs" The code below shows how UDLs need to be brought into scope before using `_json` when `JSON_USE_GLOBAL_UDLS` is defined to `0`. ```cpp #define JSON_USE_GLOBAL_UDLS 0 #include #include int main() { // auto j = "42"_json; // This line would fail to compile, // because the UDLs are not in the global namespace // Bring the UDLs into scope using namespace nlohmann::json_literals; auto j = "42"_json; std::cout << j << std::endl; } ``` Output: ```json 42 ``` ## See also - [`operator""_json`](../operator_literal_json.md) - [`operator""_json_pointer`](../operator_literal_json_pointer.md) - [:simple-cmake: JSON_GlobalUDLs](../../integration/cmake.md#json_globaludls) - CMake option to control the macro ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_use_implicit_conversions.md000066400000000000000000000033051477615276400264600ustar00rootroot00000000000000# JSON_USE_IMPLICIT_CONVERSIONS ```cpp #define JSON_USE_IMPLICIT_CONVERSIONS /* value */ ``` When defined to `0`, implicit conversions are switched off. By default, implicit conversions are switched on. The value directly affects [`operator ValueType`](../basic_json/operator_ValueType.md). ## Default definition By default, implicit conversions are enabled. ```cpp #define JSON_USE_IMPLICIT_CONVERSIONS 1 ``` ## Notes !!! info "Future behavior change" Implicit conversions will be switched off by default in the next major release of the library. You can prepare existing code by already defining `JSON_USE_IMPLICIT_CONVERSIONS` to `0` and replace any implicit conversions with calls to [`get`](../basic_json/get.md). !!! hint "CMake option" Implicit conversions can also be controlled with the CMake option [`JSON_ImplicitConversions`](../../integration/cmake.md#json_implicitconversions) (`ON` by default) which defines `JSON_USE_IMPLICIT_CONVERSIONS` accordingly. ## Examples ??? example This is an example for an implicit conversion: ```cpp json j = "Hello, world!"; std::string s = j; ``` When `JSON_USE_IMPLICIT_CONVERSIONS` is defined to `0`, the code above does no longer compile. Instead, it must be written like this: ```cpp json j = "Hello, world!"; auto s = j.template get(); ``` ## See also - [**operator ValueType**](../basic_json/operator_ValueType.md) - get a value (implicit) - [**get**](../basic_json/get.md) - get a value (explicit) - [:simple-cmake: JSON_ImplicitConversions](../../integration/cmake.md#json_implicitconversions) - CMake option to control the macro ## Version history - Added in version 3.9.0. json-3.12.0/docs/mkdocs/docs/api/macros/json_use_legacy_discarded_value_comparison.md000066400000000000000000000051441477615276400311150ustar00rootroot00000000000000# JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON ```cpp #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */ ``` This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are `1` to enable or `0` to disable (default). When enabled, comparisons involving at least one discarded JSON value yield results as follows: | **Operator** | **Result** | |--------------|---------------| | `==` | `#!cpp false` | | `!=` | `#!cpp true` | | `<` | `#!cpp false` | | `<=` | `#!cpp true` | | `>=` | `#!cpp true` | | `>` | `#!cpp false` | Otherwise, comparisons involving at least one discarded JSON value always yield `#!cpp false`. ## Default definition The default value is `0`. ```cpp #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 ``` When the macro is not defined, the library will define it to its default value. ## Notes !!! warning "Inconsistent behavior in C++20 and beyond" When targeting C++20 or above, enabling the legacy comparison behavior is _strongly_ discouraged. - The 3-way comparison operator (`<=>`) will always give the correct result (`#!cpp std::partial_ordering::unordered`) regardless of the value of `JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`. - Overloads for the equality and relational operators emulate the legacy behavior. Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior. See [`operator<=>`](../basic_json/operator_spaceship.md) for more information on 3-way comparison. !!! warning "Deprecation" The legacy comparison behavior is deprecated and may be removed in a future major version release. New code should not depend on it and existing code should try to remove or rewrite expressions relying on it. !!! hint "CMake option" Legacy comparison can also be controlled with the CMake option [`JSON_LegacyDiscardedValueComparison`](../../integration/cmake.md#json_implicitconversions) (`OFF` by default) which defines `JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON` accordingly. ## Examples ??? example The code below switches on the legacy discarded value comparison behavior in the library. ```cpp #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1 #include ... ``` ### See also - [:simple-cmake: JSON_LegacyDiscardedValueComparison](../../integration/cmake.md#json_legacydiscardedvaluecomparison) - CMake option to control the macro ## Version history - Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_define_derived_type.md000066400000000000000000000205461477615276400262060ustar00rootroot00000000000000

NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE

```cpp // (1) #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(type, base_type, member...) // (2) #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(type, base_type, member...) // (3) #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) // (4) #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(type, base_type, member...) // (5) #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, base_type, member...) // (6) #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, base_type, member...) ``` These macros can be used to simplify the serialization/deserialization of derived types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. - Macros 1, 2, and 3 are to be defined **inside** the class/struct to create code for. Like [`NLOHMANN_DEFINE_TYPE_INTRUSIVE`](nlohmann_define_type_intrusive.md), they can access private members. - Macros 4, 5, and 6 are to be defined **outside** the class/struct to create code for, but **inside** its namespace. Like [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`](nlohmann_define_type_non_intrusive.md), they **cannot** access private members. The first parameter is the name of the derived class/struct, the second parameter is the name of the base class/struct and all remaining parameters name the members. The base type **must** be already serializable/deserializable. - Macros 1 and 4 will use [`at`](../basic_json/at.md) during deserialization and will throw [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a key is missing in the JSON object. - Macros 2 and 5 will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function default constructs an object and uses its values as the defaults when calling the `value` function. Summary: | Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro | |------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|---------------------------------------------------------------| |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE** | |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT** | |
:octicons-check-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE** | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE** | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT** | |
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| **NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE** | ## Parameters `type` (in) : name of the type (class, struct) to serialize/deserialize `base_type` (in) : name of the base type (class, struct) `type` is derived from `member` (in) : name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list ## Default definition Macros 1 and 2 add two friend functions to the class which take care of the serialization and deserialization: ```cpp template friend void to_json(BasicJsonType&, const type&); template friend void from_json(const BasicJsonType&, type&); ``` Macros 4 and 5 add two functions to the namespace which take care of the serialization and deserialization: ```cpp template void to_json(BasicJsonType&, const type&); template void from_json(const BasicJsonType&, type&); ``` Macros 3 and 6 add one function to the namespace which takes care of the serialization only: ```cpp template void to_json(BasicJsonType&, const type&); ``` In first two cases, they call the `to_json`/`from_json` functions of the base type before serializing/deserializing the members of the derived type: ```cpp class A { /* ... */ }; class B : public A { /* ... */ }; template void to_json(BasicJsonType& j, const B& b) { nlohmann::to_json(j, static_cast(b)); // ... } template void from_json(const BasicJsonType& j, B& b) { nlohmann::from_json(j, static_cast(b)); // ... } ``` In the third case, only `to_json` will be called: ```cpp class A { /* ... */ }; class B : public A { /* ... */ }; template void to_json(BasicJsonType& j, const B& b) { nlohmann::to_json(j, static_cast(b)); // ... } ``` ## Notes !!! info "Prerequisites" - Macros 1, 2, and 3 have the same prerequisites of [NLOHMANN_DEFINE_TYPE_INTRUSIVE](nlohmann_define_type_intrusive.md). - Macros 4, 5, and 6 have the same prerequisites of [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE](nlohmann_define_type_non_intrusive.md). - Serialization/deserialization of base types must be defined. !!! warning "Implementation limits" See Implementation limits for [NLOHMANN_DEFINE_TYPE_INTRUSIVE](nlohmann_define_type_intrusive.md) and [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE](nlohmann_define_type_non_intrusive.md), respectively. ## Examples ??? example "NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE" Consider the following complete example: ```cpp hl_lines="28" --8<-- "examples/nlohmann_define_derived_type_intrusive_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_derived_type_intrusive_macro.output" ``` Notes: - `A` and `B` are default-constructible. This is a requirement for using the macro. - `A` has private members and is not a derived class. Hence, macro `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is used. - As `B` is a derived class, `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is not applicable, but `NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE` must be used. - The macro `NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE` is used _inside_ the class use as `NLOHMANN_DEFINE_TYPE_INTRUSIVE`. ## See also - [NLOHMANN_DEFINE_TYPE_INTRUSIVE / NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_intrusive.md) for similar macros that can be defined _inside_ a non-derived type. - [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE / NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT / NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_non_intrusive.md) for similar macros that can be defined _outside_ a non-derived type. - [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview. ## Version history 1. Added in version 3.12.0. 2. Added in version 3.12.0. 3. Added in version 3.12.0. 4. Added in version 3.12.0. 5. Added in version 3.12.0. 6. Added in version 3.12.0. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_define_type_intrusive.md000066400000000000000000000176431477615276400266200ustar00rootroot00000000000000# NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE ```cpp #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(type, member...) // (1) #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(type, member...) // (2) #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3) ``` These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined **inside** the class/struct to create code for. Unlike [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`](nlohmann_define_type_non_intrusive.md), it can access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members. 1. Will use [`at`](../basic_json/at.md) during deserialization and will throw [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a key is missing in the JSON object. 2. Will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function default constructs an object and uses its values as the defaults when calling the `value` function. 3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required. Summary: | Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro | |------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|-------------------------------------------------------| |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| **NLOHMANN_DEFINE_TYPE_INTRUSIVE** | |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| **NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT** | |
:octicons-check-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| **NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE** | ## Parameters `type` (in) : name of the type (class, struct) to serialize/deserialize `member` (in) : name of the member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list ## Default definition The macros add two friend functions to the class which take care of the serialization and deserialization: ```cpp template friend void to_json(BasicJsonType&, const type&); template friend void from_json(const BasicJsonType&, type&); // except (3) ``` See examples below for the concrete generated code. ## Notes !!! info "Prerequisites" 1. The type `type` must be default constructible (except (3)). See [How can I use `get()` for non-default constructible/non-copyable types?][GetNonDefNonCopy] for how to overcome this limitation. 2. The macro must be used inside the type (class/struct). [GetNonDefNonCopy]: ../../features/arbitrary_types.md#how-can-i-use-get-for-non-default-constructiblenon-copyable-types !!! warning "Implementation limits" - The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the `to_json`/`from_json` functions manually. ## Examples ??? example "Example (1): NLOHMANN_DEFINE_TYPE_INTRUSIVE" Consider the following complete example: ```cpp hl_lines="22" --8<-- "examples/nlohmann_define_type_intrusive_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_intrusive_macro.output" ``` Notes: - `ns::person` is default-constructible. This is a requirement for using the macro. - `ns::person` has private member variables. This makes `NLOHMANN_DEFINE_TYPE_INTRUSIVE` applicable, but not `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`. - The macro `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is used _inside_ the class. - A missing key "age" in the deserialization yields an exception. To fall back to the default value, `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` can be used. The macro is equivalent to: ```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35 36" --8<-- "examples/nlohmann_define_type_intrusive_explicit.cpp" ``` ??? example "Example (2): NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT" Consider the following complete example: ```cpp hl_lines="22" --8<-- "examples/nlohmann_define_type_intrusive_with_default_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_intrusive_with_default_macro.output" ``` Notes: - `ns::person` is default-constructible. This is a requirement for using the macro. - `ns::person` has private member variables. This makes `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` applicable, but not `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`. - The macro `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` is used _inside_ the class. - A missing key "age" in the deserialization does not yield an exception. Instead, the default value `-1` is used. The macro is equivalent to: ```cpp hl_lines="22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37" --8<-- "examples/nlohmann_define_type_intrusive_with_default_explicit.cpp" ``` Note how a default-initialized `person` object is used in the `from_json` to fill missing values. ??? example "Example (3): NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE" Consider the following complete example: ```cpp hl_lines="22" --8<-- "examples/nlohmann_define_type_intrusive_only_serialize_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_intrusive_only_serialize_macro.output" ``` Notes: - `ns::person` is non-default-constructible. This allows this macro to be used instead of `NLOHMANN_DEFINE_TYPE_INTRUSIVE` and `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT`. - `ns::person` has private member variables. This makes `NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE` applicable, but not `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE`. - The macro `NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE` is used _inside_ the class. The macro is equivalent to: ```cpp hl_lines="22 22 23 24 25 26 27 28" --8<-- "examples/nlohmann_define_type_intrusive_only_serialize_explicit.cpp" ``` ## See also - [NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_non_intrusive.md) for a similar macro that can be defined _outside_ the type. - [NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_derived_type.md) for similar macros for derived types - [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview. ## Version history 1. Added in version 3.9.0. 2. Added in version 3.11.0. 3. Added in version 3.11.3. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_define_type_non_intrusive.md000066400000000000000000000200001477615276400274470ustar00rootroot00000000000000# NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE ```cpp #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(type, member...) // (1) #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(type, member...) // (2) #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(type, member...) // (3) ``` These macros can be used to simplify the serialization/deserialization of types if you want to use a JSON object as serialization and want to use the member variable names as object keys in that object. The macro is to be defined **outside** the class/struct to create code for, but **inside** its namespace. Unlike [`NLOHMANN_DEFINE_TYPE_INTRUSIVE`](nlohmann_define_type_intrusive.md), it **cannot** access private members. The first parameter is the name of the class/struct, and all remaining parameters name the members. 1. Will use [`at`](../basic_json/at.md) during deserialization and will throw [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a key is missing in the JSON object. 2. Will use [`value`](../basic_json/value.md) during deserialization and fall back to the default value for the respective type of the member variable if a key in the JSON object is missing. The generated `from_json()` function default constructs an object and uses its values as the defaults when calling the `value` function. 3. Only defines the serialization. Useful in cases when the type does not have a default constructor and only serialization is required. Summary: | Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro | |------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|-------------------------------------------------------| |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE** | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT** | |
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| **NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE** | ## Parameters `type` (in) : name of the type (class, struct) to serialize/deserialize `member` (in) : name of the (public) member variable to serialize/deserialize; up to 64 members can be given as a comma-separated list ## Default definition The macros add two functions to the namespace which take care of the serialization and deserialization: ```cpp template void to_json(BasicJsonType&, const type&); template void from_json(const BasicJsonType&, type&); // except (3) ``` See examples below for the concrete generated code. ## Notes !!! info "Prerequisites" 1. The type `type` must be default constructible (except (3). See [How can I use `get()` for non-default constructible/non-copyable types?][GetNonDefNonCopy] for how to overcome this limitation. 2. The macro must be used outside the type (class/struct). 3. The passed members must be public. [GetNonDefNonCopy]: ../../features/arbitrary_types.md#how-can-i-use-get-for-non-default-constructiblenon-copyable-types !!! warning "Implementation limits" - The current implementation is limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the `to_json`/`from_json` functions manually. ## Examples ??? example "Example (1): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE" Consider the following complete example: ```cpp hl_lines="16" --8<-- "examples/nlohmann_define_type_non_intrusive_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_non_intrusive_macro.output" ``` Notes: - `ns::person` is default-constructible. This is a requirement for using the macro. - `ns::person` has only public member variables. This makes `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` applicable. - The macro `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` is used _outside_ the class, but _inside_ its namespace `ns`. - A missing key "age" in the deserialization yields an exception. To fall back to the default value, `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT` can be used. The macro is equivalent to: ```cpp hl_lines="16 17 18 19 20 21 22 23 24 25 26 27 28 29 30" --8<-- "examples/nlohmann_define_type_non_intrusive_explicit.cpp" ``` ??? example "Example (2): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT" Consider the following complete example: ```cpp hl_lines="21" --8<-- "examples/nlohmann_define_type_non_intrusive_with_default_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_non_intrusive_with_default_macro.output" ``` Notes: - `ns::person` is default-constructible. This is a requirement for using the macro. - `ns::person` has only public member variables. This makes `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT` applicable. - The macro `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT` is used _outside_ the class, but _inside_ its namespace `ns`. - A missing key "age" in the deserialization does not yield an exception. Instead, the default value `-1` is used. The macro is equivalent to: ```cpp hl_lines="21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36" --8<-- "examples/nlohmann_define_type_non_intrusive_with_default_explicit.cpp" ``` Note how a default-initialized `person` object is used in the `from_json` to fill missing values. ??? example "Example (3): NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE" Consider the following complete example: ```cpp hl_lines="16" --8<-- "examples/nlohmann_define_type_non_intrusive_only_serialize_macro.cpp" ``` Output: ```json --8<-- "examples/nlohmann_define_type_non_intrusive_only_serialize_macro.output" ``` Notes: - `ns::person` is non-default-constructible. This allows this macro to be used instead of `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` and `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`. - `ns::person` has only public member variables. This makes `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE` applicable. - The macro `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE` is used _outside_ the class, but _inside_ its namespace `ns`. The macro is equivalent to: ```cpp hl_lines="16 17 18 19 20 21 22" --8<-- "examples/nlohmann_define_type_non_intrusive_only_serialize_explicit.cpp" ``` ## See also - [NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_type_intrusive.md) for a similar macro that can be defined _inside_ the type. - [NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE](nlohmann_define_derived_type.md) for similar macros for derived types - [Arbitrary Type Conversions](../../features/arbitrary_types.md) for an overview. ## Version history 1. Added in version 3.9.0. 2. Added in version 3.11.0. 3. Added in version 3.11.3. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_json_namespace.md000066400000000000000000000021331477615276400251660ustar00rootroot00000000000000# NLOHMANN_JSON_NAMESPACE ```cpp #define NLOHMANN_JSON_NAMESPACE /* value */ ``` This macro evaluates to the full name of the `nlohmann` namespace. ## Default definition The default value consists of the root namespace (`nlohmann`) and an inline ABI namespace. See [`nlohmann` Namespace](../../features/namespace.md#structure) for details. When the macro is not defined, the library will define it to its default value. Overriding this value has no effect on the library. ## Examples ??? example The example shows how to use `NLOHMANN_JSON_NAMESPACE` instead of just `nlohmann`, as well as how to output the value of `NLOHMANN_JSON_NAMESPACE`. ```cpp --8<-- "examples/nlohmann_json_namespace.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_namespace.output" ``` ## See also - [`NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END`](nlohmann_json_namespace_begin.md) - [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](nlohmann_json_namespace_no_version.md) ## Version history - Added in version 3.11.0. Changed inline namespace name in version 3.11.2. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_json_namespace_begin.md000066400000000000000000000033041477615276400263330ustar00rootroot00000000000000# NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END ```cpp #define NLOHMANN_JSON_NAMESPACE_BEGIN /* value */ // (1) #define NLOHMANN_JSON_NAMESPACE_END /* value */ // (2) ``` These macros can be used to open and close the `nlohmann` namespace. See [`nlohmann` Namespace](../../features/namespace.md#structure) for details. 1. Opens the namespace. 2. Closes the namespace. ## Default definition The default definitions open and close the `nlohmann` namespace. The precise definition of [`NLOHMANN_JSON_NAMESPACE_BEGIN`] varies as described [here](../../features/namespace.md#structure). 1. Default definition of `NLOHMANN_JSON_NAMESPACE_BEGIN`: ```cpp namespace nlohmann { inline namespace json_abi_v3_11_2 { ``` 2. Default definition of `NLOHMANN_JSON_NAMESPACE_END`: ```cpp } // namespace json_abi_v3_11_2 } // namespace nlohmann ``` When these macros are not defined, the library will define them to their default definitions. ## Examples ??? example The example shows how to use `NLOHMANN_JSON_NAMESPACE_BEGIN`/`NLOHMANN_JSON_NAMESPACE_END` from the [How do I convert third-party types?](../../features/arbitrary_types.md#how-do-i-convert-third-party-types) page. ```cpp --8<-- "examples/nlohmann_json_namespace_begin.c++17.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_namespace_begin.c++17.output" ``` ## See also - [`nlohmann` Namespace](../../features/namespace.md) - [NLOHMANN_JSON_NAMESPACE](nlohmann_json_namespace.md) - [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](nlohmann_json_namespace_no_version.md) ## Version history - Added in version 3.11.0. Changed inline namespace name in version 3.11.2. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_json_namespace_no_version.md000066400000000000000000000020621477615276400274300ustar00rootroot00000000000000# NLOHMANN_JSON_NAMESPACE_NO_VERSION ```cpp #define NLOHMANN_JSON_NAMESPACE_NO_VERSION /* value */ ``` If defined to `1`, the version component is omitted from the inline namespace. See [`nlohmann` Namespace](../../features/namespace.md#structure) for details. ## Default definition The default value is `0`. ```cpp #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 ``` When the macro is not defined, the library will define it to its default value. ## Examples ??? example The example shows how to use `NLOHMANN_JSON_NAMESPACE_NO_VERSION` to disable the version component of the inline namespace. ```cpp --8<-- "examples/nlohmann_json_namespace_no_version.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_namespace_no_version.output" ``` ## See also - [`nlohmann` Namespace](../../features/namespace.md) - [`NLOHMANN_JSON_NAMESPACE`](nlohmann_json_namespace.md) - [`NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END`](nlohmann_json_namespace_begin.md) ## Version history - Added in version 3.11.2. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_json_serialize_enum.md000066400000000000000000000052461477615276400262550ustar00rootroot00000000000000# NLOHMANN_JSON_SERIALIZE_ENUM ```cpp #define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...) ``` By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended. The `NLOHMANN_JSON_SERIALIZE_ENUM` allows to define a user-defined serialization for every enumerator. ## Parameters `type` (in) : name of the enum to serialize/deserialize `conversion` (in) : a pair of an enumerator and a JSON serialization; arbitrary pairs can be given as a comma-separated list ## Default definition The macro adds two functions to the namespace which take care of the serialization and deserialization: ```cpp template inline void to_json(BasicJsonType& j, const type& e); template inline void from_json(const BasicJsonType& j, type& e); ``` ## Notes !!! info "Prerequisites" The macro must be used inside the namespace of the enum. !!! important "Important notes" - When using [`template get()`](../basic_json/get.md), undefined JSON values will default to the first specified conversion. Select this default pair carefully. See example 1 below. - If an enum or JSON value is specified in multiple conversions, the first matching conversion from the top of the list will be returned when converting to or from JSON. See example 2 below. ## Examples ??? example "Example 1: Basic usage" The example shows how `NLOHMANN_JSON_SERIALIZE_ENUM` can be used to serialize/deserialize both classical enums and C++11 enum classes: ```cpp hl_lines="16 17 18 19 20 21 22 29 30 31 32 33" --8<-- "examples/nlohmann_json_serialize_enum.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_serialize_enum.output" ``` ??? example "Example 2: Multiple conversions for one enumerator" The example shows how to use multiple conversions for a single enumerator. In the example, `Color::red` will always be *serialized* to `"red"`, because the first occurring conversion. The second conversion, however, offers an alternative *deserialization* from `"rot"` to `Color::red`. ```cpp hl_lines="17" --8<-- "examples/nlohmann_json_serialize_enum_2.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_serialize_enum_2.output" ``` ## See also - [Specializing enum conversion](../../features/enum_conversion.md) - [`JSON_DISABLE_ENUM_SERIALIZATION`](json_disable_enum_serialization.md) ## Version history Added in version 3.4.0. json-3.12.0/docs/mkdocs/docs/api/macros/nlohmann_json_version_major.md000066400000000000000000000020601477615276400261060ustar00rootroot00000000000000# NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH ```cpp #define NLOHMANN_JSON_VERSION_MAJOR /* value */ #define NLOHMANN_JSON_VERSION_MINOR /* value */ #define NLOHMANN_JSON_VERSION_PATCH /* value */ ``` These macros are defined by the library and contain the version numbers according to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html). ## Default definition The macros are defined according to the current library version. ## Examples ??? example The example below shows how `NLOHMANN_JSON_VERSION_MAJOR`, `NLOHMANN_JSON_VERSION_MINOR`, and `NLOHMANN_JSON_VERSION_PATCH` are defined by the library. ```cpp --8<-- "examples/nlohmann_json_version.cpp" ``` Output: ```json --8<-- "examples/nlohmann_json_version.output" ``` ## See also - [meta](../basic_json/meta.md) - returns version information on the library - [JSON_SKIP_LIBRARY_VERSION_CHECK](json_skip_library_version_check.md) - skip library version check ## Version history - Added in version 3.1.0. json-3.12.0/docs/mkdocs/docs/api/operator_gtgt.md000066400000000000000000000031671477615276400217130ustar00rootroot00000000000000# nlohmann::operator>>(basic_json) ```cpp std::istream& operator>>(std::istream& i, basic_json& j); ``` Deserializes an input stream to a JSON value. ## Parameters `i` (in, out) : input stream to read a serialized JSON value from `j` (in, out) : JSON value to write the deserialized input to ## Return value the stream `i` ## Exceptions - Throws [`parse_error.101`](../home/exceptions.md#jsonexceptionparse_error101) in case of an unexpected token. - Throws [`parse_error.102`](../home/exceptions.md#jsonexceptionparse_error102) if `to_unicode` fails or surrogate error. - Throws [`parse_error.103`](../home/exceptions.md#jsonexceptionparse_error103) if `to_unicode` fails. ## Complexity Linear in the length of the input. The parser is a predictive LL(1) parser. ## Notes A UTF-8 byte order mark is silently ignored. !!! warning "Deprecation" This function replaces function `#!cpp std::istream& operator<<(basic_json& j, std::istream& i)` which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like `#!cpp j << i;` with `#!cpp i >> j;`. ## Examples ??? example The example below shows how a JSON value is constructed by reading a serialization from a stream. ```cpp --8<-- "examples/operator_deserialize.cpp" ``` Output: ```json --8<-- "examples/operator_deserialize.output" ``` ## See also - [accept](basic_json/accept.md) - check if the input is valid JSON - [parse](basic_json/parse.md) - deserialize from a compatible input ## Version history - Added in version 1.0.0. Deprecated in version 3.0.0. json-3.12.0/docs/mkdocs/docs/api/operator_literal_json.md000066400000000000000000000026471477615276400234350ustar00rootroot00000000000000# nlohmann::operator""_json ```cpp json operator ""_json(const char* s, std::size_t n); ``` This operator implements a user-defined string literal for JSON objects. It can be used by adding `#!cpp _json` to a string literal and returns a [`json`](json.md) object if no parse error occurred. It is recommended to bring the operator into scope using any of the following lines: ```cpp using nlohmann::literals::operator ""_json; using namespace nlohmann::literals; using namespace nlohmann::json_literals; using namespace nlohmann::literals::json_literals; using namespace nlohmann; ``` This is suggested to ease migration to the next major version release of the library. See [`JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md#notes) for details. ## Parameters `s` (in) : a string representation of a JSON object `n` (in) : length of string `s` ## Return value [`json`](json.md) value parsed from `s` ## Exceptions The function can throw anything that [`parse(s, s+n)`](basic_json/parse.md) would throw. ## Complexity Linear. ## Examples ??? example The following code shows how to create JSON values from string literals. ```cpp --8<-- "examples/operator_literal_json.cpp" ``` Output: ```json --8<-- "examples/operator_literal_json.output" ``` ## Version history - Added in version 1.0.0. - Moved to namespace `nlohmann::literals::json_literals` in 3.11.0. json-3.12.0/docs/mkdocs/docs/api/operator_literal_json_pointer.md000066400000000000000000000031651477615276400251710ustar00rootroot00000000000000# nlohmann::operator""_json_pointer ```cpp json_pointer operator ""_json_pointer(const char* s, std::size_t n); ``` This operator implements a user-defined string literal for JSON Pointers. It can be used by adding `#!cpp _json_pointer` to a string literal and returns a [`json_pointer`](json_pointer/index.md) object if no parse error occurred. It is recommended to bring the operator into scope using any of the following lines: ```cpp using nlohmann::literals::operator ""_json_pointer; using namespace nlohmann::literals; using namespace nlohmann::json_literals; using namespace nlohmann::literals::json_literals; using namespace nlohmann; ``` This is suggested to ease migration to the next major version release of the library. See [`JSON_USE_GLOBAL_UDLS`](macros/json_use_global_udls.md#notes) for details. ## Parameters `s` (in) : a string representation of a JSON Pointer `n` (in) : length of string `s` ## Return value [`json_pointer`](json_pointer/index.md) value parsed from `s` ## Exceptions The function can throw anything that [`json_pointer::json_pointer`](json_pointer/index.md) would throw. ## Complexity Linear. ## Examples ??? example The following code shows how to create JSON Pointers from string literals. ```cpp --8<-- "examples/operator_literal_json_pointer.cpp" ``` Output: ```json --8<-- "examples/operator_literal_json_pointer.output" ``` ## See also - [json_pointer](json_pointer/index.md) - type to represent JSON Pointers ## Version history - Added in version 2.0.0. - Moved to namespace `nlohmann::literals::json_literals` in 3.11.0. json-3.12.0/docs/mkdocs/docs/api/operator_ltlt.md000066400000000000000000000054641477615276400217270ustar00rootroot00000000000000# nlohmann::operator<<(basic_json), nlohmann::operator<<(json_pointer) ```cpp std::ostream& operator<<(std::ostream& o, const basic_json& j); // (1) std::ostream& operator<<(std::ostream& o, const json_pointer& ptr); // (2) ``` 1. Serialize the given JSON value `j` to the output stream `o`. The JSON value will be serialized using the [`dump`](basic_json/dump.md) member function. - The indentation of the output can be controlled with the member variable `width` of the output stream `o`. For instance, using the manipulator `std::setw(4)` on `o` sets the indentation level to `4` and the serialization result is the same as calling `dump(4)`. - The indentation character can be controlled with the member variable `fill` of the output stream `o`. For instance, the manipulator `std::setfill('\\t')` sets indentation to use a tab character rather than the default space character. 2. Write a string representation of the given JSON pointer `ptr` to the output stream `o`. The string representation is obtained using the [`to_string`](json_pointer/to_string.md) member function. ## Parameters `o` (in, out) : stream to write to `j` (in) : JSON value to serialize `ptr` (in) : JSON pointer to write ## Return value the stream `o` ## Exceptions 1. Throws [`type_error.316`](../home/exceptions.md#jsonexceptiontype_error316) if a string stored inside the JSON value is not UTF-8 encoded. Note that unlike the [`dump`](basic_json/dump.md) member functions, no `error_handler` can be set. 2. None. ## Complexity Linear. ## Notes !!! warning "Deprecation" Function `#!cpp std::ostream& operator<<(std::ostream& o, const basic_json& j)` replaces function `#!cpp std::ostream& operator>>(const basic_json& j, std::ostream& o)` which has been deprecated in version 3.0.0. It will be removed in version 4.0.0. Please replace calls like `#!cpp j >> o;` with `#!cpp o << j;`. ## Examples ??? example "Example: (1) serialize JSON value to stream" The example below shows the serialization with different parameters to `width` to adjust the indentation level. ```cpp --8<-- "examples/operator_ltlt__basic_json.cpp" ``` Output: ```json --8<-- "examples/operator_ltlt__basic_json.output" ``` ??? example "Example: (2) write JSON pointer to stream" The example below shows how to write a JSON pointer to a stream. ```cpp --8<-- "examples/operator_ltlt__json_pointer.cpp" ``` Output: ```json --8<-- "examples/operator_ltlt__json_pointer.output" ``` ## Version history 1. Added in version 1.0.0. Added support for indentation character and deprecated `#!cpp std::ostream& operator>>(const basic_json& j, std::ostream& o)` in version 3.0.0. 2. Added in version 3.11.0. json-3.12.0/docs/mkdocs/docs/api/ordered_json.md000066400000000000000000000017641477615276400215110ustar00rootroot00000000000000# nlohmann::ordered_json ```cpp using ordered_json = basic_json; ``` This type preserves the insertion order of object keys. ## Iterator invalidation The type is based on [`ordered_map`](ordered_map.md) which in turn uses a `std::vector` to store object elements. Therefore, adding object elements can yield a reallocation in which case all iterators (including the [`end()`](basic_json/end.md) iterator) and all references to the elements are invalidated. Also, any iterator or reference after the insertion point will point to the same index which is now a different value. ## Examples ??? example The example below demonstrates how `ordered_json` preserves the insertion order of object keys. ```cpp --8<-- "examples/ordered_json.cpp" ``` Output: ```json --8<-- "examples/ordered_json.output" ``` ## See also - [ordered_map](ordered_map.md) - [Object Order](../features/object_order.md) ## Version history Since version 3.9.0. json-3.12.0/docs/mkdocs/docs/api/ordered_map.md000066400000000000000000000034771477615276400213200ustar00rootroot00000000000000# nlohmann::ordered_map ```cpp template, class Allocator = std::allocator>> struct ordered_map : std::vector, Allocator>; ``` A minimal map-like container that preserves insertion order for use within [`nlohmann::ordered_json`](ordered_json.md) (`nlohmann::basic_json`). ## Template parameters `Key` : key type `T` : mapped type `IgnoredLess` : comparison function (ignored and only added to ensure compatibility with `#!cpp std::map`) `Allocator` : allocator type ## Iterator invalidation The type uses a `std::vector` to store object elements. Therefore, adding elements can yield a reallocation in which case all iterators (including the `end()` iterator) and all references to the elements are invalidated. ## Member types - **key_type** - key type (`Key`) - **mapped_type** - mapped type (`T`) - **Container** - base container type (`#!cpp std::vector, Allocator>`) - **iterator** - **const_iterator** - **size_type** - **value_type** - **key_compare** - key comparison function ```cpp std::equal_to // until C++14 std::equal_to<> // since C++14 ``` ## Member functions - (constructor) - (destructor) - **emplace** - **operator\[\]** - **at** - **erase** - **count** - **find** - **insert** ## Examples ??? example The example shows the different behavior of `std::map` and `nlohmann::ordered_map`. ```cpp --8<-- "examples/ordered_map.cpp" ``` Output: ```json --8<-- "examples/ordered_map.output" ``` ## See also - [ordered_json](ordered_json.md) ## Version history - Added in version 3.9.0 to implement [`nlohmann::ordered_json`](ordered_json.md). - Added **key_compare** member in version 3.11.0. json-3.12.0/docs/mkdocs/docs/community/000077500000000000000000000000001477615276400177555ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/community/code_of_conduct.md000066400000000000000000000000551477615276400234140ustar00rootroot00000000000000--8<-- "../../../.github/CODE_OF_CONDUCT.md" json-3.12.0/docs/mkdocs/docs/community/contribution_guidelines.md000066400000000000000000000000521477615276400252230ustar00rootroot00000000000000--8<-- "../../../.github/CONTRIBUTING.md" json-3.12.0/docs/mkdocs/docs/community/governance.md000066400000000000000000000164531477615276400224370ustar00rootroot00000000000000# Governance The governance model for the JSON for Modern C++ project is a **Benevolent Dictator for Life (BDFL)** structure. As the sole maintainer, [Niels Lohmann](https://github.com/nlohmann) is responsible for all key aspects of the project. The project governance may evolve as the project grows, but any changes will be documented here and communicated to contributors. ## Overview This project is led by a benevolent dictator, [Niels Lohmann](https://github.com/nlohmann), and managed by the community. That is, the community actively contributes to the day-to-day maintenance of the project, but the general strategic line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent dictator through active engagement and contribution. ## Roles and responsibilities ### Benevolent dictator (project lead) Typically, the benevolent dictator, or project lead, is self-appointed. However, because the community always has the ability to fork, this person is fully answerable to the community. The project lead’s role is a difficult one: they set the strategic objectives of the project and communicate these clearly to the community. They also have to understand the community as a whole and strive to satisfy as many conflicting needs as possible, while ensuring that the project survives in the long term. In many ways, the role of the benevolent dictator is less about dictatorship and more about diplomacy. The key is to ensure that, as the project expands, the right people are given influence over it and the community rallies behind the vision of the project lead. The lead’s job is then to ensure that the committers (see below) make the right decisions on behalf of the project. Generally speaking, as long as the committers are aligned with the project’s strategy, the project lead will allow them to proceed as they desire. ### Committers Committers are contributors who have made several valuable contributions to the project and are now relied upon to both write code directly to the repository and screen the contributions of others. In many cases they are programmers but it is also possible that they contribute in a different role. Typically, a committer will focus on a specific aspect of the project, and will bring a level of expertise and understanding that earns them the respect of the community and the project lead. The role of committer is not an official one, it is simply a position that influential members of the community will find themselves in as the project lead looks to them for guidance and support. Committers have no authority over the overall direction of the project. However, they do have the ear of the project lead. It is a committer’s job to ensure that the lead is aware of the community’s needs and collective objectives, and to help develop or elicit appropriate contributions to the project. Often, committers are given informal control over their specific areas of responsibility, and are assigned rights to directly modify certain areas of the source code. That is, although committers do not have explicit decision-making authority, they will often find that their actions are synonymous with the decisions made by the lead. ### Contributors Contributors are community members who either have no desire to become committers, or have not yet been given the opportunity by the benevolent dictator. They make valuable contributions, such as those outlined in the list below, but generally do not have the authority to make direct changes to the project code. Contributors engage with the project through communication tools, such as email lists, and via reports and patches attached to issues in the issue tracker, as detailed in our community tools document. Anyone can become a contributor. There is no expectation of commitment to the project, no specific skill requirements and no selection process. To become a contributor, a community member simply has to perform one or more actions that are beneficial to the project. Some contributors will already be engaging with the project as users, but will also find themselves doing one or more of the following: - supporting new users (current users often provide the most effective new user support) - reporting bugs - identifying requirements - supplying graphics and web design - programming - assisting with project infrastructure - writing documentation - fixing bugs - adding features As contributors gain experience and familiarity with the project, they may find that the project lead starts relying on them more and more. When this begins to happen, they gradually adopt the role of committer, as described above. ### Users Users are community members who have a need for the project. They are the most important members of the community: without them, the project would have no purpose. Anyone can be a user; there are no specific requirements. Users should be encouraged to participate in the life of the project and the community as much as possible. User contributions enable the project team to ensure that they are satisfying the needs of those users. Common user activities include (but are not limited to): - evangelising about the project - informing developers of project strengths and weaknesses from a new user’s perspective - providing moral support (a ‘thank you’ goes a long way) - providing financial support Users who continue to engage with the project and its community will often find themselves becoming more and more involved. Such users may then go on to become contributors, as described above. ## Support All participants in the community are encouraged to provide support for new users within the project management infrastructure. This support is provided as a way of growing the community. Those seeking support should recognise that all support activity within the project is voluntary and is therefore provided as and when time allows. A user requiring guaranteed response times or results should therefore seek to purchase a support contract from a vendor. (Of course, that vendor should be an active member of the community.) However, for those willing to engage with the project on its own terms, and willing to help support other users, the community support channels are ideal. ## Contribution Process Anyone can contribute to the project, regardless of their skills, as there are many ways to contribute. For instance, a contributor might be active on the project mailing list and issue tracker, or might supply patches. The various ways of contributing are described in more detail in our roles in open source document. The developer mailing list is the most appropriate place for a contributor to ask for help when making their first contribution. ## Decision-Making Process The benevolent dictatorship model does not need a formal conflict resolution process, since the project lead’s word is final. If the community chooses to question the wisdom of the actions of a committer, the project lead can review their decisions by checking the email archives, and either uphold or reverse them. --- !!! quote "Source" The text was taken from http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel. json-3.12.0/docs/mkdocs/docs/community/index.md000066400000000000000000000006551477615276400214140ustar00rootroot00000000000000# Community - [Code of Conduct](code_of_conduct.md) - the rules and norms of this project - [Contribution Guidelines](contribution_guidelines.md) - guidelines how to contribute to this project - [Governance](governance.md) - the governance model of this project - [Quality Assurance](quality_assurance.md) - how the quality of this project is assured - [Security Policy](security_policy.md) - the security policy of the project json-3.12.0/docs/mkdocs/docs/community/quality_assurance.md000066400000000000000000000324351477615276400240420ustar00rootroot00000000000000# Quality assurance Ensuring quality is paramount for this project, particularly because [numerous other projects](../home/customers.md) depend on it. Each commit to the library undergoes rigorous checks against the following requirements, and any violations will result in a failed build. ## C++ language compliance and compiler compatibility !!! success "Requirement: Compiler support" Any compiler with complete C++11 support can compile the library without warnings. - [x] The library is compiled with 50+ different C++ compilers with different operating systems and platforms, including the oldest versions known to compile the library. ??? abstract "Compilers used in continuous integration" | Compiler | Architecture | Operating System | CI | |----------------------------------------------|--------------|--------------------------|-----------| | AppleClang 14.0.0.14000029; Xcode 14.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 14.0.0.14000029; Xcode 14.2 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 14.0.3.14030022; Xcode 14.3.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 15.0.0.15000040; Xcode 15.0.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 15.0.0.15000100; Xcode 15.1 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 15.0.0.15000100; Xcode 15.2 | x86_64 | macOS 13.7.2 (Ventura) | GitHub | | AppleClang 15.0.0.15000309; Xcode 15.3 | arm64 | macOS 14.7.2 (Sonoma) | GitHub | | AppleClang 15.0.0.15000309; Xcode 15.4 | arm64 | macOS 14.7.2 (Sonoma) | GitHub | | AppleClang 16.0.0.16000026; Xcode 16 | arm64 | macOS 15.2 (Sequoia) | GitHub | | AppleClang 16.0.0.16000026; Xcode 16.1 | arm64 | macOS 15.2 (Sequoia) | GitHub | | AppleClang 16.0.0.16000026; Xcode 16.2 | arm64 | macOS 15.2 (Sequoia) | GitHub | | Clang 3.5.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 3.6.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 3.7.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 3.8.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 3.9.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 4.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 5.0.2 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 6.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 7.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 8.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 9.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 10.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 11.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 11.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 12.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 12.0.0 with MSVC-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 12.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 13.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 13.0.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 14.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 14.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 15.0.0 with GNU-like command-line | x86_64 | Windows 10 (Build 17763) | GitHub | | Clang 15.0.7 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 16.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 17.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 18.1.8 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 19.1.7 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 20.1.1 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | Clang 21.0.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 4.8.5 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 4.9.3 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 5.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 6.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 7.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 8.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 9.3.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 9.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 9.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 10.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 11.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 11.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 12.2.0 (MinGW-W64 i686-ucrt-posix-dwarf) | x86_64 | Windows 10 (Build 17763) | GitHub | | GNU 12.2.0 (MinGW-W64 x86_64-ucrt-posix-seh) | x86_64 | Windows 10 (Build 17763) | GitHub | | GNU 12.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 13.3.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 14.2.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 14.2.0 | arm64 | Linux 6.1.100 | Cirrus CI | | MSVC 19.0.24241.7 | x86 | Windows 8.1 | AppVeyor | | MSVC 19.16.27035.0 | x86 | Windows-10 (Build 14393) | AppVeyor | | MSVC 19.29.30157.0 | x86 | Windows 10 (Build 17763) | GitHub | | MSVC 19.29.30157.0 | x86_64 | Windows 10 (Build 17763) | GitHub | | MSVC 19.29.30157.0 | x86 | Windows-10 (Build 17763) | AppVeyor | | MSVC 19.42.34435.0 | x86 | Windows 10 (Build 20348) | GitHub | | MSVC 19.42.34435.0 | x86_64 | Windows 10 (Build 20348) | GitHub | - [x] The library is compiled with all C++ language revisions (C++11, C++14, C++17, C++20, C++23, and C++26) to detect and fix language deprecations early. - [x] The library is checked for compiler warnings: - On Clang, `-Weverything` is used with 7 exceptions. ??? abstract "Clang warnings" ```cmake --8<-- "../../../cmake/clang_flags.cmake" ``` - On GCC, 300+ warnings are enabled with 8 exceptions. ??? abstract "GCC warnings" ```cmake --8<-- "../../../cmake/gcc_flags.cmake" ``` ## C++ standard library compliance !!! success "Requirement: No prerequisites" The library has no prerequisites other than the Standard Template Library (STL). - [x] The library is compiled and tested with both [libc++](https://libcxx.llvm.org) and [libstdc++](https://gcc.gnu.org/onlinedocs/libstdc++/) to detect subtle differences or incompatibilities. - [x] The code checked with [Include What You Use (IWYU)](https://include-what-you-use.org) that all required standard headers are included. - [x] On Windows, the library is compiled with `` being included to detect and avoid common bugs. - [x] The library is compiled with exceptions disabled to support alternative means of error handling. ## Stable public API !!! success "Requirement: Stable public API" Any change to the library does not break the public API. - [x] All public API functions are tested with a variety of arguments. - [x] The library is compiled and tested with different template arguments for number, string, array, and object types. - [x] Unit tests cover all lines of the code base. - [x] Every exception of the library is thrown in the test suite, and the error messages and exception ids are checked. !!! success "Requirement: Complete documentation" The public API is extensively documented. - [x] Every public API function has a dedicated page in the [API reference documentation](https://json.nlohmann.me/api/basic_json/) with a self-contained code example. - [x] All examples in the documentation are tested, and changes in their output are treated as an error. ## Robust input processing !!! success "Requirement: Standards compliance" The library is compliant to JSON as defined in [RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259). - [x] The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points. - [x] The parser is tested against extensive correctness suites for JSON compliance. - [x] In addition, the library is continuously fuzz-tested at [OSS-Fuzz](https://google.github.io/oss-fuzz/) where the library is checked against billions of inputs. ## Static analysis !!! success "Requirement: State-of-the-art code analysis" The code is checked with state-of-the-art static code analysis tools. - [x] The code is checked with the latest [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/). ??? abstract "Clang-Tidy configuration (.clang-tidy)" ```ini --8<-- "../../../.clang-tidy" ``` - [x] The code is checked with the latest [Cppcheck](https://cppcheck.sourceforge.io) with all warnings enabled. - [x] The code is checked with the latest [Clang Static Analyzer](https://clang-analyzer.llvm.org) with 89 enabled rules. - [x] The code is checked with [Infer](https://fbinfer.com). - [x] The code is checked with [Codacy](https://app.codacy.com/gh/nlohmann/json/dashboard). ## Dynamic analysis !!! success "Requirement: Correctness" The library is checked for memory correctness and absence of undefined behavior. - [x] The test suite is executed with enabled [runtime assertions](https://json.nlohmann.me/features/assertions/) to check invariants and preconditions of functions to detect undefined behavior. - [x] The test suite is executed with [Valgrind](https://valgrind.org) (Memcheck) to detect memory leaks. - [x] The test suite is executed with [Sanitizers](https://github.com/google/sanitizers) (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations). ## Style check !!! success "Requirement: Common code style" A common code style is used throughout all code files of the library. - [x] The code is formatted with [Artistic Style](https://astyle.sourceforge.net) (astyle) against a style configuration that is also enforced in the CI. ??? abstract "Astyle configuration (tools/astyle/.astylerc)" ```ini --8<-- "../../../tools/astyle/.astylerc" ``` - [x] The code style is checked with [cpplint](https://github.com/cpplint/cpplint) with 61 enabled rules. ## Simple integration !!! success "Requirement: Single header" The library can be used by adding a single header to a C++ project. - [x] An amalgamation script is used to check if the source code is exposed as a self-contained single-header file. - [x] The test suite is checked against the amalgamated source file as well as the individual source file. !!! success "Requirement: CMake as primary development tool" All library functions are exposed and usable by CMake. - [x] All library options are exposed as [CMake options](https://json.nlohmann.me/integration/cmake/) and tested. - [x] The library is tested against relevant CMake versions: - CMake 3.5 (the earliest supported) - CMake 3.31.6 (the latest 3.x release) - CMake 4.0.0 (a very recent release) json-3.12.0/docs/mkdocs/docs/community/security_policy.md000066400000000000000000000000461477615276400235250ustar00rootroot00000000000000--8<-- "../../../.github/SECURITY.md" json-3.12.0/docs/mkdocs/docs/css/000077500000000000000000000000001477615276400165215ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/css/custom.css000066400000000000000000000002131477615276400205410ustar00rootroot00000000000000/* enable ligatures in code and preformatted blocks */ .md-typeset code, .md-typeset pre { font-variant-ligatures: common-ligatures; } json-3.12.0/docs/mkdocs/docs/examples/000077500000000000000000000000001477615276400175475ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/examples/README.cpp000066400000000000000000000013611477615276400212110ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create a JSON object json j = { {"pi", 3.141}, {"happy", true}, {"name", "Niels"}, {"nothing", nullptr}, { "answer", { {"everything", 42} } }, {"list", {1, 0, 2}}, { "object", { {"currency", "USD"}, {"value", 42.99} } } }; // add new values j["new"]["key"]["value"] = {"another", "list"}; // count elements auto s = j.size(); j["size"] = s; // pretty print with indent of 4 spaces std::cout << std::setw(4) << j << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/README.output000066400000000000000000000006241477615276400217700ustar00rootroot00000000000000{ "answer": { "everything": 42 }, "happy": true, "list": [ 1, 0, 2 ], "name": "Niels", "new": { "key": { "value": [ "another", "list" ] } }, "nothing": null, "object": { "currency": "USD", "value": 42.99 }, "pi": 3.141, "size": 8 } json-3.12.0/docs/mkdocs/docs/examples/accept__string.cpp000066400000000000000000000007221477615276400232400ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a valid JSON text auto valid_text = R"( { "numbers": [1, 2, 3] } )"; // an invalid JSON text auto invalid_text = R"( { "strings": ["extra", "comma", ] } )"; std::cout << std::boolalpha << json::accept(valid_text) << ' ' << json::accept(invalid_text) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/accept__string.output000066400000000000000000000000131477615276400240070ustar00rootroot00000000000000true false json-3.12.0/docs/mkdocs/docs/examples/array.cpp000066400000000000000000000010371477615276400213720ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON arrays json j_no_init_list = json::array(); json j_empty_init_list = json::array({}); json j_nonempty_init_list = json::array({1, 2, 3, 4}); json j_list_of_pairs = json::array({ {"one", 1}, {"two", 2} }); // serialize the JSON arrays std::cout << j_no_init_list << '\n'; std::cout << j_empty_init_list << '\n'; std::cout << j_nonempty_init_list << '\n'; std::cout << j_list_of_pairs << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/array.output000066400000000000000000000000461477615276400221470ustar00rootroot00000000000000[] [] [1,2,3,4] [["one",1],["two",2]] json-3.12.0/docs/mkdocs/docs/examples/array_t.cpp000066400000000000000000000003311477615276400217110ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same, json::array_t>::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/array_t.output000066400000000000000000000000051477615276400224650ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/at__json_pointer.cpp000066400000000000000000000047121477615276400236130ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; // read-only access // output element with JSON pointer "/number" std::cout << j.at("/number"_json_pointer) << '\n'; // output element with JSON pointer "/string" std::cout << j.at("/string"_json_pointer) << '\n'; // output element with JSON pointer "/array" std::cout << j.at("/array"_json_pointer) << '\n'; // output element with JSON pointer "/array/1" std::cout << j.at("/array/1"_json_pointer) << '\n'; // writing access // change the string j.at("/string"_json_pointer) = "bar"; // output the changed string std::cout << j["string"] << '\n'; // change an array element j.at("/array/1"_json_pointer) = 21; // output the changed array std::cout << j["array"] << '\n'; // out_of_range.106 try { // try to use an array index with leading '0' json::reference ref = j.at("/array/01"_json_pointer); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } // out_of_range.109 try { // try to use an array index that is not a number json::reference ref = j.at("/array/one"_json_pointer); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } // out_of_range.401 try { // try to use an invalid array index json::reference ref = j.at("/array/4"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.402 try { // try to use the array index '-' json::reference ref = j.at("/array/-"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.403 try { // try to use a JSON pointer to a nonexistent object key json::const_reference ref = j.at("/foo"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.404 try { // try to use a JSON pointer that cannot be resolved json::reference ref = j.at("/number/foo"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__json_pointer.output000066400000000000000000000007031477615276400243650ustar00rootroot000000000000001 "foo" [1,2] 2 "bar" [1,21] [json.exception.parse_error.106] parse error: array index '01' must not begin with '0' [json.exception.parse_error.109] parse error: array index 'one' is not a number [json.exception.out_of_range.401] array index 4 is out of range [json.exception.out_of_range.402] array index '-' (2) is out of range [json.exception.out_of_range.403] key 'foo' not found [json.exception.out_of_range.404] unresolved reference token 'foo' json-3.12.0/docs/mkdocs/docs/examples/at__json_pointer_const.cpp000066400000000000000000000036761477615276400250310ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value const json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; // read-only access // output element with JSON pointer "/number" std::cout << j.at("/number"_json_pointer) << '\n'; // output element with JSON pointer "/string" std::cout << j.at("/string"_json_pointer) << '\n'; // output element with JSON pointer "/array" std::cout << j.at("/array"_json_pointer) << '\n'; // output element with JSON pointer "/array/1" std::cout << j.at("/array/1"_json_pointer) << '\n'; // out_of_range.109 try { // try to use an array index that is not a number json::const_reference ref = j.at("/array/one"_json_pointer); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } // out_of_range.401 try { // try to use an invalid array index json::const_reference ref = j.at("/array/4"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.402 try { // try to use the array index '-' json::const_reference ref = j.at("/array/-"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.403 try { // try to use a JSON pointer to a nonexistent object key json::const_reference ref = j.at("/foo"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } // out_of_range.404 try { // try to use a JSON pointer that cannot be resolved json::const_reference ref = j.at("/number/foo"_json_pointer); } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__json_pointer_const.output000066400000000000000000000005371477615276400256000ustar00rootroot000000000000001 "foo" [1,2] 2 [json.exception.parse_error.109] parse error: array index 'one' is not a number [json.exception.out_of_range.401] array index 4 is out of range [json.exception.out_of_range.402] array index '-' (2) is out of range [json.exception.out_of_range.403] key 'foo' not found [json.exception.out_of_range.404] unresolved reference token 'foo' json-3.12.0/docs/mkdocs/docs/examples/at__keytype.c++17.cpp000066400000000000000000000021621477615276400233100ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create JSON object json object = { {"the good", "il buono"}, {"the bad", "il cattivo"}, {"the ugly", "il brutto"} }; // output element with key "the ugly" using string_view std::cout << object.at("the ugly"sv) << '\n'; // change element with key "the bad" using string_view object.at("the bad"sv) = "il cattivo"; // output changed array std::cout << object << '\n'; // exception type_error.304 try { // use at() with string_view on a non-object type json str = "I am a string"; str.at("the good"sv) = "Another string"; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to write at a nonexisting key using string_view object.at("the fast"sv) = "il rapido"; } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__keytype.c++17.output000066400000000000000000000003111477615276400240600ustar00rootroot00000000000000"il brutto" {"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"} [json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.403] key 'the fast' not found json-3.12.0/docs/mkdocs/docs/examples/at__keytype_const.c++17.cpp000066400000000000000000000017511477615276400245210ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create JSON object const json object = { {"the good", "il buono"}, {"the bad", "il cattivo"}, {"the ugly", "il brutto"} }; // output element with key "the ugly" using string_view std::cout << object.at("the ugly"sv) << '\n'; // exception type_error.304 try { // use at() with string_view on a non-object type const json str = "I am a string"; std::cout << str.at("the good"sv) << '\n'; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to read from a nonexisting key using string_view std::cout << object.at("the fast"sv) << '\n'; } catch (const json::out_of_range& e) { std::cout << "out of range" << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__keytype_const.c++17.output000066400000000000000000000001251477615276400252710ustar00rootroot00000000000000"il brutto" [json.exception.type_error.304] cannot use at() with string out of range json-3.12.0/docs/mkdocs/docs/examples/at__object_t_key_type.cpp000066400000000000000000000017411477615276400246030ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON object json object = { {"the good", "il buono"}, {"the bad", "il cattivo"}, {"the ugly", "il brutto"} }; // output element with key "the ugly" std::cout << object.at("the ugly") << '\n'; // change element with key "the bad" object.at("the bad") = "il cattivo"; // output changed array std::cout << object << '\n'; // exception type_error.304 try { // use at() on a non-object type json str = "I am a string"; str.at("the good") = "Another string"; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to write at a nonexisting key object.at("the fast") = "il rapido"; } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__object_t_key_type.output000066400000000000000000000003111477615276400253510ustar00rootroot00000000000000"il brutto" {"the bad":"il cattivo","the good":"il buono","the ugly":"il brutto"} [json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.403] key 'the fast' not found json-3.12.0/docs/mkdocs/docs/examples/at__object_t_key_type_const.cpp000066400000000000000000000015511477615276400260100ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON object const json object = { {"the good", "il buono"}, {"the bad", "il cattivo"}, {"the ugly", "il brutto"} }; // output element with key "the ugly" std::cout << object.at("the ugly") << '\n'; // exception type_error.304 try { // use at() on a non-object type const json str = "I am a string"; std::cout << str.at("the good") << '\n'; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to read from a nonexisting key std::cout << object.at("the fast") << '\n'; } catch (const json::out_of_range) { std::cout << "out of range" << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__object_t_key_type_const.output000066400000000000000000000001251477615276400265620ustar00rootroot00000000000000"il brutto" [json.exception.type_error.304] cannot use at() with string out of range json-3.12.0/docs/mkdocs/docs/examples/at__size_type.cpp000066400000000000000000000015761477615276400231220ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON array json array = {"first", "2nd", "third", "fourth"}; // output element at index 2 (third element) std::cout << array.at(2) << '\n'; // change element at index 1 (second element) to "second" array.at(1) = "second"; // output changed array std::cout << array << '\n'; // exception type_error.304 try { // use at() on a non-array type json str = "I am a string"; str.at(0) = "Another string"; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to write beyond the array limit array.at(5) = "sixth"; } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__size_type.output000066400000000000000000000002501477615276400236640ustar00rootroot00000000000000"third" ["first","second","third","fourth"] [json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.401] array index 5 is out of range json-3.12.0/docs/mkdocs/docs/examples/at__size_type_const.cpp000066400000000000000000000013761477615276400243260ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON array const json array = {"first", "2nd", "third", "fourth"}; // output element at index 2 (third element) std::cout << array.at(2) << '\n'; // exception type_error.304 try { // use at() on a non-array type const json str = "I am a string"; std::cout << str.at(0) << '\n'; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } // exception out_of_range.401 try { // try to read beyond the array limit std::cout << array.at(5) << '\n'; } catch (const json::out_of_range& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/at__size_type_const.output000066400000000000000000000002041477615276400250710ustar00rootroot00000000000000"third" [json.exception.type_error.304] cannot use at() with string [json.exception.out_of_range.401] array index 5 is out of range json-3.12.0/docs/mkdocs/docs/examples/back.cpp000066400000000000000000000020371477615276400211550ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_object_empty(json::value_t::object); json j_array = {1, 2, 4, 8, 16}; json j_array_empty(json::value_t::array); json j_string = "Hello, world"; // call back() std::cout << j_boolean.back() << '\n'; std::cout << j_number_integer.back() << '\n'; std::cout << j_number_float.back() << '\n'; std::cout << j_object.back() << '\n'; //std::cout << j_object_empty.back() << '\n'; // undefined behavior std::cout << j_array.back() << '\n'; //std::cout << j_array_empty.back() << '\n'; // undefined behavior std::cout << j_string.back() << '\n'; // back() called on a null value try { json j_null; j_null.back(); } catch (const json::invalid_iterator& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/back.output000066400000000000000000000001311477615276400217240ustar00rootroot00000000000000true 17 23.42 2 16 "Hello, world" [json.exception.invalid_iterator.214] cannot get value json-3.12.0/docs/mkdocs/docs/examples/basic_json__CompatibleType.cpp000066400000000000000000000144601477615276400255320ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include using json = nlohmann::json; int main() { // ============ // object types // ============ // create an object from an object_t value json::object_t object_value = { {"one", 1}, {"two", 2} }; json j_object_t(object_value); // create an object from std::map std::map c_map { {"one", 1}, {"two", 2}, {"three", 3} }; json j_map(c_map); // create an object from std::unordered_map std::unordered_map c_umap { {"one", 1.2}, {"two", 2.3}, {"three", 3.4} }; json j_umap(c_umap); // create an object from std::multimap std::multimap c_mmap { {"one", true}, {"two", true}, {"three", false}, {"three", true} }; json j_mmap(c_mmap); // only one entry for key "three" is used // create an object from std::unordered_multimap std::unordered_multimap c_ummap { {"one", true}, {"two", true}, {"three", false}, {"three", true} }; json j_ummap(c_ummap); // only one entry for key "three" is used // serialize the JSON objects std::cout << j_object_t << '\n'; std::cout << j_map << '\n'; std::cout << j_umap << '\n'; std::cout << j_mmap << '\n'; std::cout << j_ummap << "\n\n"; // =========== // array types // =========== // create an array from an array_t value json::array_t array_value = {"one", "two", 3, 4.5, false}; json j_array_t(array_value); // create an array from std::vector std::vector c_vector {1, 2, 3, 4}; json j_vec(c_vector); // create an array from std::valarray std::valarray c_valarray {10, 9, 8, 7}; json j_valarray(c_valarray); // create an array from std::deque std::deque c_deque {1.2, 2.3, 3.4, 5.6}; json j_deque(c_deque); // create an array from std::list std::list c_list {true, true, false, true}; json j_list(c_list); // create an array from std::forward_list std::forward_list c_flist {12345678909876, 23456789098765, 34567890987654, 45678909876543}; json j_flist(c_flist); // create an array from std::array std::array c_array {{1, 2, 3, 4}}; json j_array(c_array); // create an array from std::set std::set c_set {"one", "two", "three", "four", "one"}; json j_set(c_set); // only one entry for "one" is used // create an array from std::unordered_set std::unordered_set c_uset {"one", "two", "three", "four", "one"}; json j_uset(c_uset); // only one entry for "one" is used // create an array from std::multiset std::multiset c_mset {"one", "two", "one", "four"}; json j_mset(c_mset); // both entries for "one" are used // create an array from std::unordered_multiset std::unordered_multiset c_umset {"one", "two", "one", "four"}; json j_umset(c_umset); // both entries for "one" are used // serialize the JSON arrays std::cout << j_array_t << '\n'; std::cout << j_vec << '\n'; std::cout << j_valarray << '\n'; std::cout << j_deque << '\n'; std::cout << j_list << '\n'; std::cout << j_flist << '\n'; std::cout << j_array << '\n'; std::cout << j_set << '\n'; std::cout << j_uset << '\n'; std::cout << j_mset << '\n'; std::cout << j_umset << "\n\n"; // ============ // string types // ============ // create string from a string_t value json::string_t string_value = "The quick brown fox jumps over the lazy dog."; json j_string_t(string_value); // create a JSON string directly from a string literal json j_string_literal("The quick brown fox jumps over the lazy dog."); // create string from std::string std::string s_stdstring = "The quick brown fox jumps over the lazy dog."; json j_stdstring(s_stdstring); // serialize the JSON strings std::cout << j_string_t << '\n'; std::cout << j_string_literal << '\n'; std::cout << j_stdstring << "\n\n"; // ============ // number types // ============ // create a JSON number from number_integer_t json::number_integer_t value_integer_t = -42; json j_integer_t(value_integer_t); // create a JSON number from number_unsigned_t json::number_integer_t value_unsigned_t = 17; json j_unsigned_t(value_unsigned_t); // create a JSON number from an anonymous enum enum { enum_value = 17 }; json j_enum(enum_value); // create values of different integer types short n_short = 42; int n_int = -23; long n_long = 1024; int_least32_t n_int_least32_t = -17; uint8_t n_uint8_t = 8; // create (integer) JSON numbers json j_short(n_short); json j_int(n_int); json j_long(n_long); json j_int_least32_t(n_int_least32_t); json j_uint8_t(n_uint8_t); // create values of different floating-point types json::number_float_t v_ok = 3.141592653589793; json::number_float_t v_nan = NAN; json::number_float_t v_infinity = INFINITY; // create values of different floating-point types float n_float = 42.23; float n_float_nan = 1.0f / 0.0f; double n_double = 23.42; // create (floating point) JSON numbers json j_ok(v_ok); json j_nan(v_nan); json j_infinity(v_infinity); json j_float(n_float); json j_float_nan(n_float_nan); json j_double(n_double); // serialize the JSON numbers std::cout << j_integer_t << '\n'; std::cout << j_unsigned_t << '\n'; std::cout << j_enum << '\n'; std::cout << j_short << '\n'; std::cout << j_int << '\n'; std::cout << j_long << '\n'; std::cout << j_int_least32_t << '\n'; std::cout << j_uint8_t << '\n'; std::cout << j_ok << '\n'; std::cout << j_nan << '\n'; std::cout << j_infinity << '\n'; std::cout << j_float << '\n'; std::cout << j_float_nan << '\n'; std::cout << j_double << "\n\n"; // ============= // boolean types // ============= // create boolean values json j_truth = true; json j_falsity = false; // serialize the JSON booleans std::cout << j_truth << '\n'; std::cout << j_falsity << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__CompatibleType.output000066400000000000000000000012351477615276400263040ustar00rootroot00000000000000{"one":1,"two":2} {"one":1,"three":3,"two":2} {"one":1.2,"three":3.4,"two":2.3} {"one":true,"three":false,"two":true} {"one":true,"three":false,"two":true} ["one","two",3,4.5,false] [1,2,3,4] [10,9,8,7] [1.2,2.3,3.4,5.6] [true,true,false,true] [12345678909876,23456789098765,34567890987654,45678909876543] [1,2,3,4] ["four","one","three","two"] ["four","three","two","one"] ["four","one","one","two"] ["four","two","one","one"] "The quick brown fox jumps over the lazy dog." "The quick brown fox jumps over the lazy dog." "The quick brown fox jumps over the lazy dog." -42 17 17 42 -23 1024 -17 8 3.141592653589793 null null 42.22999954223633 null 23.42 true false json-3.12.0/docs/mkdocs/docs/examples/basic_json__InputIt_InputIt.cpp000066400000000000000000000015261477615276400256600ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_array = {"alpha", "bravo", "charly", "delta", "easy"}; json j_number = 42; json j_object = {{"one", "eins"}, {"two", "zwei"}}; // create copies using iterators json j_array_range(j_array.begin() + 1, j_array.end() - 2); json j_number_range(j_number.begin(), j_number.end()); json j_object_range(j_object.begin(), j_object.find("two")); // serialize the values std::cout << j_array_range << '\n'; std::cout << j_number_range << '\n'; std::cout << j_object_range << '\n'; // example for an exception try { json j_invalid(j_number.begin() + 1, j_number.end()); } catch (const json::invalid_iterator& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/basic_json__InputIt_InputIt.output000066400000000000000000000001421477615276400264270ustar00rootroot00000000000000["bravo","charly"] 42 {"one":"eins"} [json.exception.invalid_iterator.204] iterators out of range json-3.12.0/docs/mkdocs/docs/examples/basic_json__basic_json.cpp000066400000000000000000000005221477615276400247150ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json j1 = {"one", "two", 3, 4.5, false}; // create a copy json j2(j1); // serialize the JSON array std::cout << j1 << " = " << j2 << '\n'; std::cout << std::boolalpha << (j1 == j2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__basic_json.output000066400000000000000000000000731477615276400254740ustar00rootroot00000000000000["one","two",3,4.5,false] = ["one","two",3,4.5,false] true json-3.12.0/docs/mkdocs/docs/examples/basic_json__copyassignment.cpp000066400000000000000000000004331477615276400256470ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json a = 23; json b = 42; // copy-assign a to b b = a; // serialize the JSON arrays std::cout << a << '\n'; std::cout << b << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__copyassignment.output000066400000000000000000000000061477615276400264210ustar00rootroot0000000000000023 23 json-3.12.0/docs/mkdocs/docs/examples/basic_json__list_init_t.cpp000066400000000000000000000011211477615276400251200ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_empty_init_list = json({}); json j_object = { {"one", 1}, {"two", 2} }; json j_array = {1, 2, 3, 4}; json j_nested_object = { {"one", {1}}, {"two", {1, 2}} }; json j_nested_array = { {{1}, "one"}, {{1, 2}, "two"} }; // serialize the JSON value std::cout << j_empty_init_list << '\n'; std::cout << j_object << '\n'; std::cout << j_array << '\n'; std::cout << j_nested_object << '\n'; std::cout << j_nested_array << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__list_init_t.output000066400000000000000000000001231477615276400256770ustar00rootroot00000000000000{} {"one":1,"two":2} [1,2,3,4] {"one":[1],"two":[1,2]} [[[1],"one"],[[1,2],"two"]] json-3.12.0/docs/mkdocs/docs/examples/basic_json__moveconstructor.cpp000066400000000000000000000004371477615276400260640ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON value json a = 23; // move contents of a to b json b(std::move(a)); // serialize the JSON arrays std::cout << a << '\n'; std::cout << b << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__moveconstructor.output000066400000000000000000000000101477615276400266250ustar00rootroot00000000000000null 23 json-3.12.0/docs/mkdocs/docs/examples/basic_json__nullptr_t.cpp000066400000000000000000000004521477615276400246300ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // implicitly create a JSON null value json j1; // explicitly create a JSON null value json j2(nullptr); // serialize the JSON null value std::cout << j1 << '\n' << j2 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__nullptr_t.output000066400000000000000000000000121477615276400253760ustar00rootroot00000000000000null null json-3.12.0/docs/mkdocs/docs/examples/basic_json__size_type_basic_json.cpp000066400000000000000000000006441477615276400270150ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array by creating copies of a JSON value json value = "Hello"; json array_0 = json(0, value); json array_1 = json(1, value); json array_5 = json(5, value); // serialize the JSON arrays std::cout << array_0 << '\n'; std::cout << array_1 << '\n'; std::cout << array_5 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__size_type_basic_json.output000066400000000000000000000000671477615276400275720ustar00rootroot00000000000000[] ["Hello"] ["Hello","Hello","Hello","Hello","Hello"] json-3.12.0/docs/mkdocs/docs/examples/basic_json__value_t.cpp000066400000000000000000000013741477615276400242500ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create the different JSON values with default values json j_null(json::value_t::null); json j_boolean(json::value_t::boolean); json j_number_integer(json::value_t::number_integer); json j_number_float(json::value_t::number_float); json j_object(json::value_t::object); json j_array(json::value_t::array); json j_string(json::value_t::string); // serialize the JSON values std::cout << j_null << '\n'; std::cout << j_boolean << '\n'; std::cout << j_number_integer << '\n'; std::cout << j_number_float << '\n'; std::cout << j_object << '\n'; std::cout << j_array << '\n'; std::cout << j_string << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/basic_json__value_t.output000066400000000000000000000000321477615276400250140ustar00rootroot00000000000000null false 0 0.0 {} [] "" json-3.12.0/docs/mkdocs/docs/examples/begin.cpp000066400000000000000000000005121477615276400213350ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to the first element json::iterator it = array.begin(); // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/begin.output000066400000000000000000000000021477615276400221050ustar00rootroot000000000000001 json-3.12.0/docs/mkdocs/docs/examples/binary.cpp000066400000000000000000000006301477615276400215360ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a binary vector std::vector vec = {0xCA, 0xFE, 0xBA, 0xBE}; // create a binary JSON value with subtype 42 json j = json::binary(vec, 42); // output type and subtype std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/binary.output000066400000000000000000000000321477615276400223100ustar00rootroot00000000000000type: binary, subtype: 42 json-3.12.0/docs/mkdocs/docs/examples/binary_t.cpp000066400000000000000000000004111477615276400220560ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same>, json::binary_t>::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/binary_t.output000066400000000000000000000000051477615276400226330ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/boolean_t.cpp000066400000000000000000000003161477615276400222150ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/boolean_t.output000066400000000000000000000000051477615276400227660ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__byte_container_with_subtype.cpp000066400000000000000000000012101477615276400341120ustar00rootroot00000000000000#include #include // define a byte container based on std::vector using byte_container_with_subtype = nlohmann::byte_container_with_subtype>; using json = nlohmann::json; int main() { // (1) create empty container auto c1 = byte_container_with_subtype(); std::vector bytes = {{0xca, 0xfe, 0xba, 0xbe}}; // (2) create container auto c2 = byte_container_with_subtype(bytes); // (3) create container with subtype auto c3 = byte_container_with_subtype(bytes, 42); std::cout << json(c1) << "\n" << json(c2) << "\n" << json(c3) << std::endl; } byte_container_with_subtype__byte_container_with_subtype.output000066400000000000000000000001601477615276400346140ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/examples{"bytes":[],"subtype":null} {"bytes":[202,254,186,190],"subtype":null} {"bytes":[202,254,186,190],"subtype":42} json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__clear_subtype.cpp000066400000000000000000000011001477615276400311360ustar00rootroot00000000000000#include #include // define a byte container based on std::vector using byte_container_with_subtype = nlohmann::byte_container_with_subtype>; using json = nlohmann::json; int main() { std::vector bytes = {{0xca, 0xfe, 0xba, 0xbe}}; // create container with subtype auto c1 = byte_container_with_subtype(bytes, 42); std::cout << "before calling clear_subtype(): " << json(c1) << '\n'; c1.clear_subtype(); std::cout << "after calling clear_subtype(): " << json(c1) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__clear_subtype.output000066400000000000000000000002231477615276400317210ustar00rootroot00000000000000before calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":42} after calling clear_subtype(): {"bytes":[202,254,186,190],"subtype":null} json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__has_subtype.cpp000066400000000000000000000011321477615276400306300ustar00rootroot00000000000000#include #include // define a byte container based on std::vector using byte_container_with_subtype = nlohmann::byte_container_with_subtype>; int main() { std::vector bytes = {{0xca, 0xfe, 0xba, 0xbe}}; // create container auto c1 = byte_container_with_subtype(bytes); // create container with subtype auto c2 = byte_container_with_subtype(bytes, 42); std::cout << std::boolalpha << "c1.has_subtype() = " << c1.has_subtype() << "\nc2.has_subtype() = " << c2.has_subtype() << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__has_subtype.output000066400000000000000000000000611477615276400314060ustar00rootroot00000000000000c1.has_subtype() = false c2.has_subtype() = true json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__set_subtype.cpp000066400000000000000000000011221477615276400306470ustar00rootroot00000000000000#include #include // define a byte container based on std::vector using byte_container_with_subtype = nlohmann::byte_container_with_subtype>; using json = nlohmann::json; int main() { std::vector bytes = {{0xca, 0xfe, 0xba, 0xbe}}; // create container without subtype auto c = byte_container_with_subtype(bytes); std::cout << "before calling set_subtype(42): " << json(c) << '\n'; // set the subtype c.set_subtype(42); std::cout << "after calling set_subtype(42): " << json(c) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__set_subtype.output000066400000000000000000000002231477615276400314260ustar00rootroot00000000000000before calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":null} after calling set_subtype(42): {"bytes":[202,254,186,190],"subtype":42} json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__subtype.cpp000066400000000000000000000013101477615276400277730ustar00rootroot00000000000000#include #include // define a byte container based on std::vector using byte_container_with_subtype = nlohmann::byte_container_with_subtype>; int main() { std::vector bytes = {{0xca, 0xfe, 0xba, 0xbe}}; // create container auto c1 = byte_container_with_subtype(bytes); // create container with subtype auto c2 = byte_container_with_subtype(bytes, 42); std::cout << "c1.subtype() = " << c1.subtype() << "\nc2.subtype() = " << c2.subtype() << std::endl; // in case no subtype is set, return special value assert(c1.subtype() == static_cast(-1)); } json-3.12.0/docs/mkdocs/docs/examples/byte_container_with_subtype__subtype.output000066400000000000000000000000661477615276400305600ustar00rootroot00000000000000c1.subtype() = 18446744073709551615 c2.subtype() = 42 json-3.12.0/docs/mkdocs/docs/examples/cbegin.cpp000066400000000000000000000005271477615276400215060ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value const json array = {1, 2, 3, 4, 5}; // get an iterator to the first element json::const_iterator it = array.cbegin(); // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/cbegin.output000066400000000000000000000000021477615276400222500ustar00rootroot000000000000001 json-3.12.0/docs/mkdocs/docs/examples/cbor_tag_handler_t.cpp000066400000000000000000000015131477615276400240530ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // tagged byte string std::vector vec = {{0xd8, 0x42, 0x44, 0xcA, 0xfe, 0xba, 0xbe}}; // cbor_tag_handler_t::error throws try { auto b_throw_on_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::error); } catch (const json::parse_error& e) { std::cout << e.what() << std::endl; } // cbor_tag_handler_t::ignore ignores the tag auto b_ignore_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore); std::cout << b_ignore_tag << std::endl; // cbor_tag_handler_t::store stores the tag as binary subtype auto b_store_tag = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::store); std::cout << b_store_tag << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/cbor_tag_handler_t.output000066400000000000000000000003061477615276400246300ustar00rootroot00000000000000[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xD8 {"bytes":[202,254,186,190],"subtype":null} {"bytes":[202,254,186,190],"subtype":66} json-3.12.0/docs/mkdocs/docs/examples/cend.cpp000066400000000000000000000006351477615276400211700ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to one past the last element json::const_iterator it = array.cend(); // decrement the iterator to point to the last element --it; // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/cend.output000066400000000000000000000000021477615276400217320ustar00rootroot000000000000005 json-3.12.0/docs/mkdocs/docs/examples/clear.cpp000066400000000000000000000015001477615276400213350ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call clear() j_null.clear(); j_boolean.clear(); j_number_integer.clear(); j_number_float.clear(); j_object.clear(); j_array.clear(); j_string.clear(); // serialize the cleared values() std::cout << j_null << '\n'; std::cout << j_boolean << '\n'; std::cout << j_number_integer << '\n'; std::cout << j_number_float << '\n'; std::cout << j_object << '\n'; std::cout << j_array << '\n'; std::cout << j_string << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/clear.output000066400000000000000000000000321477615276400221120ustar00rootroot00000000000000null false 0 0.0 {} [] "" json-3.12.0/docs/mkdocs/docs/examples/contains__json_pointer.cpp000066400000000000000000000021511477615276400250200ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; std::cout << std::boolalpha << j.contains("/number"_json_pointer) << '\n' << j.contains("/string"_json_pointer) << '\n' << j.contains("/array"_json_pointer) << '\n' << j.contains("/array/1"_json_pointer) << '\n' << j.contains("/array/-"_json_pointer) << '\n' << j.contains("/array/4"_json_pointer) << '\n' << j.contains("/baz"_json_pointer) << std::endl; try { // try to use an array index with leading '0' j.contains("/array/01"_json_pointer); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } try { // try to use an array index that is not a number j.contains("/array/one"_json_pointer); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/contains__json_pointer.output000066400000000000000000000000461477615276400255770ustar00rootroot00000000000000true true true true false false false json-3.12.0/docs/mkdocs/docs/examples/contains__keytype.c++17.cpp000066400000000000000000000011731477615276400245230ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create some JSON values json j_object = R"( {"key": "value"} )"_json; json j_array = R"( [1, 2, 3] )"_json; // call contains std::cout << std::boolalpha << "j_object contains 'key': " << j_object.contains("key"sv) << '\n' << "j_object contains 'another': " << j_object.contains("another"sv) << '\n' << "j_array contains 'key': " << j_array.contains("key"sv) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/contains__keytype.c++17.output000066400000000000000000000001371477615276400253000ustar00rootroot00000000000000j_object contains 'key': true j_object contains 'another': false j_array contains 'key': false json-3.12.0/docs/mkdocs/docs/examples/contains__object_t_key_type.cpp000066400000000000000000000010631477615276400260120ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create some JSON values json j_object = R"( {"key": "value"} )"_json; json j_array = R"( [1, 2, 3] )"_json; // call contains std::cout << std::boolalpha << "j_object contains 'key': " << j_object.contains("key") << '\n' << "j_object contains 'another': " << j_object.contains("another") << '\n' << "j_array contains 'key': " << j_array.contains("key") << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/contains__object_t_key_type.output000066400000000000000000000001371477615276400265710ustar00rootroot00000000000000j_object contains 'key': true j_object contains 'another': false j_array contains 'key': false json-3.12.0/docs/mkdocs/docs/examples/count__keytype.c++17.cpp000066400000000000000000000010271477615276400240330ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call count() auto count_two = j_object.count("two"sv); auto count_three = j_object.count("three"sv); // print values std::cout << "number of elements with key \"two\": " << count_two << '\n'; std::cout << "number of elements with key \"three\": " << count_three << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/count__keytype.c++17.output000066400000000000000000000001141477615276400246050ustar00rootroot00000000000000number of elements with key "two": 1 number of elements with key "three": 0 json-3.12.0/docs/mkdocs/docs/examples/count__object_t_key_type.cpp000066400000000000000000000007211477615276400253240ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call count() auto count_two = j_object.count("two"); auto count_three = j_object.count("three"); // print values std::cout << "number of elements with key \"two\": " << count_two << '\n'; std::cout << "number of elements with key \"three\": " << count_three << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/count__object_t_key_type.output000066400000000000000000000001141477615276400260760ustar00rootroot00000000000000number of elements with key "two": 1 number of elements with key "three": 0 json-3.12.0/docs/mkdocs/docs/examples/crbegin.cpp000066400000000000000000000005361477615276400216700ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to the reverse-beginning json::const_reverse_iterator it = array.crbegin(); // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/crbegin.output000066400000000000000000000000021477615276400224320ustar00rootroot000000000000005 json-3.12.0/docs/mkdocs/docs/examples/crend.cpp000066400000000000000000000006351477615276400213520ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to the reverse-end json::const_reverse_iterator it = array.crend(); // increment the iterator to point to the first element --it; // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/crend.output000066400000000000000000000000021477615276400221140ustar00rootroot000000000000001 json-3.12.0/docs/mkdocs/docs/examples/default_object_comparator_t.cpp000066400000000000000000000005051477615276400257770ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << "one < two : " << json::default_object_comparator_t{}("one", "two") << "\n" << "three < four : " << json::default_object_comparator_t{}("three", "four") << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/default_object_comparator_t.output000066400000000000000000000000461477615276400265550ustar00rootroot00000000000000one < two : true three < four : false json-3.12.0/docs/mkdocs/docs/examples/diagnostic_positions.cpp000066400000000000000000000043641477615276400245150ustar00rootroot00000000000000#include #define JSON_DIAGNOSTIC_POSITIONS 1 #include using json = nlohmann::json; int main() { std::string json_string = R"( { "address": { "street": "Fake Street", "housenumber": 1 } } )"; json j = json::parse(json_string); std::cout << "Root diagnostic positions: \n"; std::cout << "\tstart_pos: " << j.start_pos() << '\n'; std::cout << "\tend_pos:" << j.end_pos() << "\n"; std::cout << "Original string: \n"; std::cout << "{\n \"address\": {\n \"street\": \"Fake Street\",\n \"housenumber\": 1\n }\n }" << "\n"; std::cout << "Parsed string: \n"; std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << "\n\n"; std::cout << "address diagnostic positions: \n"; std::cout << "\tstart_pos:" << j["address"].start_pos() << '\n'; std::cout << "\tend_pos:" << j["address"].end_pos() << "\n\n"; std::cout << "Original string: \n"; std::cout << "{ \"street\": \"Fake Street\",\n \"housenumber\": 1\n }" << "\n"; std::cout << "Parsed string: \n"; std::cout << json_string.substr(j["address"].start_pos(), j["address"].end_pos() - j["address"].start_pos()) << "\n\n"; std::cout << "street diagnostic positions: \n"; std::cout << "\tstart_pos:" << j["address"]["street"].start_pos() << '\n'; std::cout << "\tend_pos:" << j["address"]["street"].end_pos() << "\n\n"; std::cout << "Original string: \n"; std::cout << "\"Fake Street\"" << "\n"; std::cout << "Parsed string: \n"; std::cout << json_string.substr(j["address"]["street"].start_pos(), j["address"]["street"].end_pos() - j["address"]["street"].start_pos()) << "\n\n"; std::cout << "housenumber diagnostic positions: \n"; std::cout << "\tstart_pos:" << j["address"]["housenumber"].start_pos() << '\n'; std::cout << "\tend_pos:" << j["address"]["housenumber"].end_pos() << "\n\n"; std::cout << "Original string: \n"; std::cout << "1" << "\n"; std::cout << "Parsed string: \n"; std::cout << json_string.substr(j["address"]["housenumber"].start_pos(), j["address"]["housenumber"].end_pos() - j["address"]["housenumber"].start_pos()) << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/diagnostic_positions.output000066400000000000000000000014021477615276400252610ustar00rootroot00000000000000Root diagnostic positions: start_pos: 5 end_pos:109 Original string: { "address": { "street": "Fake Street", "housenumber": 1 } } Parsed string: { "address": { "street": "Fake Street", "housenumber": 1 } } address diagnostic positions: start_pos:26 end_pos:103 Original string: { "street": "Fake Street", "housenumber": 1 } Parsed string: { "street": "Fake Street", "housenumber": 1 } street diagnostic positions: start_pos:50 end_pos:63 Original string: "Fake Street" Parsed string: "Fake Street" housenumber diagnostic positions: start_pos:92 end_pos:93 Original string: 1 Parsed string: 1 json-3.12.0/docs/mkdocs/docs/examples/diagnostic_positions_exception.cpp000066400000000000000000000012771477615276400265730ustar00rootroot00000000000000#include #define JSON_DIAGNOSTIC_POSITIONS 1 #include using json = nlohmann::json; /* Demonstration of type error exception with diagnostic postions support enabled */ int main() { //Invalid json string - housenumber type must be int instead of string const std::string json_invalid_string = R"( { "address": { "street": "Fake Street", "housenumber": "1" } } )"; json j = json::parse(json_invalid_string); try { int housenumber = j["address"]["housenumber"]; std::cout << housenumber; } catch (const json::exception& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/diagnostic_positions_exception.output000066400000000000000000000001211477615276400273340ustar00rootroot00000000000000[json.exception.type_error.302] (bytes 92-95) type must be number, but is string json-3.12.0/docs/mkdocs/docs/examples/diagnostics_extended.cpp000066400000000000000000000006001477615276400244360ustar00rootroot00000000000000#include # define JSON_DIAGNOSTICS 1 #include using json = nlohmann::json; int main() { json j; j["address"]["street"] = "Fake Street"; j["address"]["housenumber"] = "12"; try { int housenumber = j["address"]["housenumber"]; } catch (const json::exception& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/diagnostics_extended.output000066400000000000000000000001321477615276400252140ustar00rootroot00000000000000[json.exception.type_error.302] (/address/housenumber) type must be number, but is string json-3.12.0/docs/mkdocs/docs/examples/diagnostics_extended_positions.cpp000066400000000000000000000013321477615276400265500ustar00rootroot00000000000000#include #define JSON_DIAGNOSTICS 1 #define JSON_DIAGNOSTIC_POSITIONS 1 #include using json = nlohmann::json; /* Demonstration of type error exception with diagnostic postions support enabled */ int main() { //Invalid json string - housenumber type must be int instead of string const std::string json_invalid_string = R"( { "address": { "street": "Fake Street", "housenumber": "1" } } )"; json j = json::parse(json_invalid_string); try { int housenumber = j["address"]["housenumber"]; std::cout << housenumber; } catch (const json::exception& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/diagnostics_extended_positions.output000066400000000000000000000001501477615276400273230ustar00rootroot00000000000000[json.exception.type_error.302] (/address/housenumber) (bytes 92-95) type must be number, but is string json-3.12.0/docs/mkdocs/docs/examples/diagnostics_standard.cpp000066400000000000000000000005431477615276400244440ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { json j; j["address"]["street"] = "Fake Street"; j["address"]["housenumber"] = "12"; try { int housenumber = j["address"]["housenumber"]; } catch (const json::exception& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/diagnostics_standard.output000066400000000000000000000001031477615276400252120ustar00rootroot00000000000000[json.exception.type_error.302] type must be number, but is string json-3.12.0/docs/mkdocs/docs/examples/diff.cpp000066400000000000000000000013451477615276400211660ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // the source document json source = R"( { "baz": "qux", "foo": "bar" } )"_json; // the target document json target = R"( { "baz": "boo", "hello": [ "world" ] } )"_json; // create the patch json patch = json::diff(source, target); // roundtrip json patched_source = source.patch(patch); // output patch and roundtrip result std::cout << std::setw(4) << patch << "\n\n" << std::setw(4) << patched_source << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/diff.output000066400000000000000000000004751477615276400217470ustar00rootroot00000000000000[ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "remove", "path": "/foo" }, { "op": "add", "path": "/hello", "value": [ "world" ] } ] { "baz": "boo", "hello": [ "world" ] } json-3.12.0/docs/mkdocs/docs/examples/dump.cpp000066400000000000000000000027061477615276400212250ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hellö 😀!"; // call dump() std::cout << "objects:" << '\n' << j_object.dump() << "\n\n" << j_object.dump(-1) << "\n\n" << j_object.dump(0) << "\n\n" << j_object.dump(4) << "\n\n" << j_object.dump(1, '\t') << "\n\n"; std::cout << "arrays:" << '\n' << j_array.dump() << "\n\n" << j_array.dump(-1) << "\n\n" << j_array.dump(0) << "\n\n" << j_array.dump(4) << "\n\n" << j_array.dump(1, '\t') << "\n\n"; std::cout << "strings:" << '\n' << j_string.dump() << '\n' << j_string.dump(-1, ' ', true) << '\n'; // create JSON value with invalid UTF-8 byte sequence json j_invalid = "ä\xA9ü"; try { std::cout << j_invalid.dump() << std::endl; } catch (const json::type_error& e) { std::cout << e.what() << std::endl; } std::cout << "string with replaced invalid characters: " << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace) << "\nstring with ignored invalid characters: " << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/dump.output000066400000000000000000000007231477615276400220000ustar00rootroot00000000000000objects: {"one":1,"two":2} {"one":1,"two":2} { "one": 1, "two": 2 } { "one": 1, "two": 2 } { "one": 1, "two": 2 } arrays: [1,2,4,8,16] [1,2,4,8,16] [ 1, 2, 4, 8, 16 ] [ 1, 2, 4, 8, 16 ] [ 1, 2, 4, 8, 16 ] strings: "Hellö 😀!" "Hell\u00f6 \ud83d\ude00!" [json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9 string with replaced invalid characters: "ä�ü" string with ignored invalid characters: "äü" json-3.12.0/docs/mkdocs/docs/examples/emplace.cpp000066400000000000000000000014071477615276400216630ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json object = {{"one", 1}, {"two", 2}}; json null; // print values std::cout << object << '\n'; std::cout << null << '\n'; // add values auto res1 = object.emplace("three", 3); null.emplace("A", "a"); null.emplace("B", "b"); // the following call will not add an object, because there is already // a value stored at key "B" auto res2 = null.emplace("B", "c"); // print values std::cout << object << '\n'; std::cout << *res1.first << " " << std::boolalpha << res1.second << '\n'; std::cout << null << '\n'; std::cout << *res2.first << " " << std::boolalpha << res2.second << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/emplace.output000066400000000000000000000001261477615276400224360ustar00rootroot00000000000000{"one":1,"two":2} null {"one":1,"three":3,"two":2} 3 true {"A":"a","B":"b"} "b" false json-3.12.0/docs/mkdocs/docs/examples/emplace_back.cpp000066400000000000000000000007041477615276400226420ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json array = {1, 2, 3, 4, 5}; json null; // print values std::cout << array << '\n'; std::cout << null << '\n'; // add values array.emplace_back(6); null.emplace_back("first"); null.emplace_back(3, "second"); // print values std::cout << array << '\n'; std::cout << null << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/emplace_back.output000066400000000000000000000001061477615276400234140ustar00rootroot00000000000000[1,2,3,4,5] null [1,2,3,4,5,6] ["first",["second","second","second"]] json-3.12.0/docs/mkdocs/docs/examples/empty.cpp000066400000000000000000000016131477615276400214120ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_object_empty(json::value_t::object); json j_array = {1, 2, 4, 8, 16}; json j_array_empty(json::value_t::array); json j_string = "Hello, world"; // call empty() std::cout << std::boolalpha; std::cout << j_null.empty() << '\n'; std::cout << j_boolean.empty() << '\n'; std::cout << j_number_integer.empty() << '\n'; std::cout << j_number_float.empty() << '\n'; std::cout << j_object.empty() << '\n'; std::cout << j_object_empty.empty() << '\n'; std::cout << j_array.empty() << '\n'; std::cout << j_array_empty.empty() << '\n'; std::cout << j_string.empty() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/empty.output000066400000000000000000000000631477615276400221660ustar00rootroot00000000000000true false false false false true false true false json-3.12.0/docs/mkdocs/docs/examples/end.cpp000066400000000000000000000006261477615276400210250ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to one past the last element json::iterator it = array.end(); // decrement the iterator to point to the last element --it; // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/end.output000066400000000000000000000000021477615276400215670ustar00rootroot000000000000005 json-3.12.0/docs/mkdocs/docs/examples/erase__IteratorType.cpp000066400000000000000000000015361477615276400242310ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call erase() j_boolean.erase(j_boolean.begin()); j_number_integer.erase(j_number_integer.begin()); j_number_float.erase(j_number_float.begin()); j_object.erase(j_object.find("two")); j_array.erase(j_array.begin() + 2); j_string.erase(j_string.begin()); // print values std::cout << j_boolean << '\n'; std::cout << j_number_integer << '\n'; std::cout << j_number_float << '\n'; std::cout << j_object << '\n'; std::cout << j_array << '\n'; std::cout << j_string << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/erase__IteratorType.output000066400000000000000000000000511477615276400247760ustar00rootroot00000000000000null null null {"one":1} [1,2,8,16] null json-3.12.0/docs/mkdocs/docs/examples/erase__IteratorType_IteratorType.cpp000066400000000000000000000017221477615276400267410ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call erase() j_boolean.erase(j_boolean.begin(), j_boolean.end()); j_number_integer.erase(j_number_integer.begin(), j_number_integer.end()); j_number_float.erase(j_number_float.begin(), j_number_float.end()); j_object.erase(j_object.find("two"), j_object.end()); j_array.erase(j_array.begin() + 1, j_array.begin() + 3); j_string.erase(j_string.begin(), j_string.end()); // print values std::cout << j_boolean << '\n'; std::cout << j_number_integer << '\n'; std::cout << j_number_float << '\n'; std::cout << j_object << '\n'; std::cout << j_array << '\n'; std::cout << j_string << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/erase__IteratorType_IteratorType.output000066400000000000000000000000471477615276400275160ustar00rootroot00000000000000null null null {"one":1} [1,8,16] null json-3.12.0/docs/mkdocs/docs/examples/erase__keytype.c++17.cpp000066400000000000000000000007221477615276400240030ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call erase() auto count_one = j_object.erase("one"sv); auto count_three = j_object.erase("three"sv); // print values std::cout << j_object << '\n'; std::cout << count_one << " " << count_three << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/erase__keytype.c++17.output000066400000000000000000000000161477615276400245550ustar00rootroot00000000000000{"two":2} 1 0 json-3.12.0/docs/mkdocs/docs/examples/erase__object_t_key_type.cpp000066400000000000000000000006141477615276400252740ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call erase() auto count_one = j_object.erase("one"); auto count_three = j_object.erase("three"); // print values std::cout << j_object << '\n'; std::cout << count_one << " " << count_three << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/erase__object_t_key_type.output000066400000000000000000000000161477615276400260460ustar00rootroot00000000000000{"two":2} 1 0 json-3.12.0/docs/mkdocs/docs/examples/erase__size_type.cpp000066400000000000000000000004031477615276400236010ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json j_array = {0, 1, 2, 3, 4, 5}; // call erase() j_array.erase(2); // print values std::cout << j_array << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/erase__size_type.output000066400000000000000000000000141477615276400243550ustar00rootroot00000000000000[0,1,3,4,5] json-3.12.0/docs/mkdocs/docs/examples/error_handler_t.cpp000066400000000000000000000012221477615276400234210ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON value with invalid UTF-8 byte sequence json j_invalid = "ä\xA9ü"; try { std::cout << j_invalid.dump() << std::endl; } catch (const json::type_error& e) { std::cout << e.what() << std::endl; } std::cout << "string with replaced invalid characters: " << j_invalid.dump(-1, ' ', false, json::error_handler_t::replace) << "\nstring with ignored invalid characters: " << j_invalid.dump(-1, ' ', false, json::error_handler_t::ignore) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/error_handler_t.output000066400000000000000000000002461477615276400242040ustar00rootroot00000000000000[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9 string with replaced invalid characters: "ä�ü" string with ignored invalid characters: "äü" json-3.12.0/docs/mkdocs/docs/examples/exception.cpp000066400000000000000000000006661477615276400222610ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { try { // calling at() for a non-existing key json j = {{"foo", "bar"}}; json k = j.at("non-existing"); } catch (const json::exception& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/exception.output000066400000000000000000000001321477615276400230230ustar00rootroot00000000000000message: [json.exception.out_of_range.403] key 'non-existing' not found exception id: 403 json-3.12.0/docs/mkdocs/docs/examples/find__keytype.c++17.cpp000066400000000000000000000011511477615276400236210ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call find auto it_two = j_object.find("two"sv); auto it_three = j_object.find("three"sv); // print values std::cout << std::boolalpha; std::cout << "\"two\" was found: " << (it_two != j_object.end()) << '\n'; std::cout << "value at key \"two\": " << *it_two << '\n'; std::cout << "\"three\" was found: " << (it_three != j_object.end()) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/find__keytype.c++17.output000066400000000000000000000001051477615276400243750ustar00rootroot00000000000000"two" was found: true value at key "two": 2 "three" was found: false json-3.12.0/docs/mkdocs/docs/examples/find__object_t_key_type.cpp000066400000000000000000000010431477615276400251120ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON object json j_object = {{"one", 1}, {"two", 2}}; // call find auto it_two = j_object.find("two"); auto it_three = j_object.find("three"); // print values std::cout << std::boolalpha; std::cout << "\"two\" was found: " << (it_two != j_object.end()) << '\n'; std::cout << "value at key \"two\": " << *it_two << '\n'; std::cout << "\"three\" was found: " << (it_three != j_object.end()) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/find__object_t_key_type.output000066400000000000000000000001051477615276400256660ustar00rootroot00000000000000"two" was found: true value at key "two": 2 "three" was found: false json-3.12.0/docs/mkdocs/docs/examples/flatten.cpp000066400000000000000000000011261477615276400217100ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create JSON value json j = { {"pi", 3.141}, {"happy", true}, {"name", "Niels"}, {"nothing", nullptr}, { "answer", { {"everything", 42} } }, {"list", {1, 0, 2}}, { "object", { {"currency", "USD"}, {"value", 42.99} } } }; // call flatten() std::cout << std::setw(4) << j.flatten() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/flatten.output000066400000000000000000000003441477615276400224670ustar00rootroot00000000000000{ "/answer/everything": 42, "/happy": true, "/list/0": 1, "/list/1": 0, "/list/2": 2, "/name": "Niels", "/nothing": null, "/object/currency": "USD", "/object/value": 42.99, "/pi": 3.141 } json-3.12.0/docs/mkdocs/docs/examples/from_bjdata.cpp000066400000000000000000000010761477615276400225270ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create byte vector std::vector v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D }; // deserialize it with BJData json j = json::from_bjdata(v); // print the deserialized JSON value std::cout << std::setw(2) << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_bjdata.output000066400000000000000000000000451477615276400233000ustar00rootroot00000000000000{ "compact": true, "schema": 0 } json-3.12.0/docs/mkdocs/docs/examples/from_bson.cpp000066400000000000000000000011731477615276400222410ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create byte vector std::vector v = {0x1b, 0x00, 0x00, 0x00, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x00, 0x01, 0x10, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // deserialize it with BSON json j = json::from_bson(v); // print the deserialized JSON value std::cout << std::setw(2) << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_bson.output000066400000000000000000000000451477615276400230140ustar00rootroot00000000000000{ "compact": true, "schema": 0 } json-3.12.0/docs/mkdocs/docs/examples/from_cbor.cpp000066400000000000000000000010421477615276400222200ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create byte vector std::vector v = {0xa2, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0xf5, 0x66, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x00 }; // deserialize it with CBOR json j = json::from_cbor(v); // print the deserialized JSON value std::cout << std::setw(2) << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_cbor.output000066400000000000000000000000451477615276400230000ustar00rootroot00000000000000{ "compact": true, "schema": 0 } json-3.12.0/docs/mkdocs/docs/examples/from_json__default_constructible.cpp000066400000000000000000000012301477615276400270460ustar00rootroot00000000000000#include #include using json = nlohmann::json; namespace ns { // a simple struct to model a person struct person { std::string name; std::string address; int age; }; } // namespace ns namespace ns { void from_json(const json& j, person& p) { j.at("name").get_to(p.name); j.at("address").get_to(p.address); j.at("age").get_to(p.age); } } // namespace ns int main() { json j; j["name"] = "Ned Flanders"; j["address"] = "744 Evergreen Terrace"; j["age"] = 60; auto p = j.template get(); std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_json__default_constructible.output000066400000000000000000000000611477615276400276250ustar00rootroot00000000000000Ned Flanders (60) lives in 744 Evergreen Terrace json-3.12.0/docs/mkdocs/docs/examples/from_json__non_default_constructible.cpp000066400000000000000000000022361477615276400277270ustar00rootroot00000000000000#include #include using json = nlohmann::json; namespace ns { // a simple struct to model a person (not default constructible) struct person { person(std::string n, std::string a, int aa) : name(std::move(n)), address(std::move(a)), age(aa) {} std::string name; std::string address; int age; }; } // namespace ns namespace nlohmann { template <> struct adl_serializer { static ns::person from_json(const json& j) { return {j.at("name"), j.at("address"), j.at("age")}; } // Here's the catch! You must provide a to_json method! Otherwise, you // will not be able to convert person to json, since you fully // specialized adl_serializer on that type static void to_json(json& j, ns::person p) { j["name"] = p.name; j["address"] = p.address; j["age"] = p.age; } }; } // namespace nlohmann int main() { json j; j["name"] = "Ned Flanders"; j["address"] = "744 Evergreen Terrace"; j["age"] = 60; auto p = j.template get(); std::cout << p.name << " (" << p.age << ") lives in " << p.address << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_json__non_default_constructible.output000066400000000000000000000000611477615276400304770ustar00rootroot00000000000000Ned Flanders (60) lives in 744 Evergreen Terrace json-3.12.0/docs/mkdocs/docs/examples/from_msgpack.cpp000066400000000000000000000010541477615276400227230ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create byte vector std::vector v = {0x82, 0xa7, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0xc3, 0xa6, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x00 }; // deserialize it with MessagePack json j = json::from_msgpack(v); // print the deserialized JSON value std::cout << std::setw(2) << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_msgpack.output000066400000000000000000000000451477615276400235000ustar00rootroot00000000000000{ "compact": true, "schema": 0 } json-3.12.0/docs/mkdocs/docs/examples/from_ubjson.cpp000066400000000000000000000010761477615276400226020ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create byte vector std::vector v = {0x7B, 0x69, 0x07, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0x54, 0x69, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x69, 0x00, 0x7D }; // deserialize it with UBJSON json j = json::from_ubjson(v); // print the deserialized JSON value std::cout << std::setw(2) << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/from_ubjson.output000066400000000000000000000000451477615276400233530ustar00rootroot00000000000000{ "compact": true, "schema": 0 } json-3.12.0/docs/mkdocs/docs/examples/front.cpp000066400000000000000000000016671477615276400214150ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_object_empty(json::value_t::object); json j_array = {1, 2, 4, 8, 16}; json j_array_empty(json::value_t::array); json j_string = "Hello, world"; // call front() //std::cout << j_null.front() << '\n'; // would throw std::cout << j_boolean.front() << '\n'; std::cout << j_number_integer.front() << '\n'; std::cout << j_number_float.front() << '\n'; std::cout << j_object.front() << '\n'; //std::cout << j_object_empty.front() << '\n'; // undefined behavior std::cout << j_array.front() << '\n'; //std::cout << j_array_empty.front() << '\n'; // undefined behavior std::cout << j_string.front() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/front.output000066400000000000000000000000411477615276400221540ustar00rootroot00000000000000true 17 23.42 1 1 "Hello, world" json-3.12.0/docs/mkdocs/docs/examples/get__PointerType.cpp000066400000000000000000000012321477615276400235310ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON number json value = 17; // explicitly getting pointers auto p1 = value.template get(); auto p2 = value.template get(); auto p3 = value.template get(); auto p4 = value.template get(); auto p5 = value.template get(); // print the pointees std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\n'; std::cout << std::boolalpha << (p5 == nullptr) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/get__PointerType.output000066400000000000000000000000211477615276400243020ustar00rootroot0000000000000017 17 17 17 true json-3.12.0/docs/mkdocs/docs/examples/get__ValueType_const.cpp000066400000000000000000000026111477615276400243750ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create a JSON value with different types json json_types = { {"boolean", true}, { "number", { {"integer", 42}, {"floating-point", 17.23} } }, {"string", "Hello, world!"}, {"array", {1, 2, 3, 4, 5}}, {"null", nullptr} }; // use explicit conversions auto v1 = json_types["boolean"].template get(); auto v2 = json_types["number"]["integer"].template get(); auto v3 = json_types["number"]["integer"].template get(); auto v4 = json_types["number"]["floating-point"].template get(); auto v5 = json_types["number"]["floating-point"].template get(); auto v6 = json_types["string"].template get(); auto v7 = json_types["array"].template get>(); auto v8 = json_types.template get>(); // print the conversion results std::cout << v1 << '\n'; std::cout << v2 << ' ' << v3 << '\n'; std::cout << v4 << ' ' << v5 << '\n'; std::cout << v6 << '\n'; for (auto i : v7) { std::cout << i << ' '; } std::cout << "\n\n"; for (auto i : v8) { std::cout << i.first << ": " << i.second << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/get__ValueType_const.output000066400000000000000000000002351477615276400251530ustar00rootroot000000000000001 42 42 17.23 17 Hello, world! 1 2 3 4 5 string: "Hello, world!" number: {"floating-point":17.23,"integer":42} null: null boolean: true array: [1,2,3,4,5] json-3.12.0/docs/mkdocs/docs/examples/get_allocator.cpp000066400000000000000000000006211477615276400230710ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { auto alloc = json::get_allocator(); using traits_t = std::allocator_traits; json* j = traits_t::allocate(alloc, 1); traits_t::construct(alloc, j, "Hello, world!"); std::cout << *j << std::endl; traits_t::destroy(alloc, j); traits_t::deallocate(alloc, j, 1); } json-3.12.0/docs/mkdocs/docs/examples/get_allocator.output000066400000000000000000000000201477615276400236400ustar00rootroot00000000000000"Hello, world!" json-3.12.0/docs/mkdocs/docs/examples/get_binary.cpp000066400000000000000000000006301477615276400223750ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a binary vector std::vector vec = {0xCA, 0xFE, 0xBA, 0xBE}; // create a binary JSON value with subtype 42 json j = json::binary(vec, 42); // output type and subtype std::cout << "type: " << j.type_name() << ", subtype: " << j.get_binary().subtype() << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/get_binary.output000066400000000000000000000000321477615276400231470ustar00rootroot00000000000000type: binary, subtype: 42 json-3.12.0/docs/mkdocs/docs/examples/get_ptr.cpp000066400000000000000000000012011477615276400217110ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON number json value = 17; // explicitly getting pointers auto p1 = value.get_ptr(); auto p2 = value.get_ptr(); auto p3 = value.get_ptr(); auto p4 = value.get_ptr(); auto p5 = value.get_ptr(); // print the pointees std::cout << *p1 << ' ' << *p2 << ' ' << *p3 << ' ' << *p4 << '\n'; std::cout << std::boolalpha << (p5 == nullptr) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/get_ptr.output000066400000000000000000000000211477615276400224660ustar00rootroot0000000000000017 17 17 17 true json-3.12.0/docs/mkdocs/docs/examples/get_ref.cpp000066400000000000000000000011031477615276400216610ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON number json value = 17; // explicitly getting references auto r1 = value.get_ref(); auto r2 = value.get_ref(); // print the values std::cout << r1 << ' ' << r2 << '\n'; // incompatible type throws exception try { auto r3 = value.get_ref(); } catch (const json::type_error& ex) { std::cout << ex.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/get_ref.output000066400000000000000000000001441477615276400224430ustar00rootroot0000000000000017 17 [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number json-3.12.0/docs/mkdocs/docs/examples/get_to.cpp000066400000000000000000000025221477615276400215350ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create a JSON value with different types json json_types = { {"boolean", true}, { "number", { {"integer", 42}, {"floating-point", 17.23} } }, {"string", "Hello, world!"}, {"array", {1, 2, 3, 4, 5}}, {"null", nullptr} }; bool v1; int v2; short v3; float v4; int v5; std::string v6; std::vector v7; std::unordered_map v8; // use explicit conversions json_types["boolean"].get_to(v1); json_types["number"]["integer"].get_to(v2); json_types["number"]["integer"].get_to(v3); json_types["number"]["floating-point"].get_to(v4); json_types["number"]["floating-point"].get_to(v5); json_types["string"].get_to(v6); json_types["array"].get_to(v7); json_types.get_to(v8); // print the conversion results std::cout << v1 << '\n'; std::cout << v2 << ' ' << v3 << '\n'; std::cout << v4 << ' ' << v5 << '\n'; std::cout << v6 << '\n'; for (auto i : v7) { std::cout << i << ' '; } std::cout << "\n\n"; for (auto i : v8) { std::cout << i.first << ": " << i.second << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/get_to.output000066400000000000000000000002351477615276400223120ustar00rootroot000000000000001 42 42 17.23 17 Hello, world! 1 2 3 4 5 string: "Hello, world!" number: {"floating-point":17.23,"integer":42} null: null boolean: true array: [1,2,3,4,5] json-3.12.0/docs/mkdocs/docs/examples/insert.cpp000066400000000000000000000005401477615276400215560ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json v = {1, 2, 3, 4}; // insert number 10 before number 3 auto new_pos = v.insert(v.begin() + 2, 10); // output new array and result of insert call std::cout << *new_pos << '\n'; std::cout << v << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/insert.output000066400000000000000000000000201477615276400223250ustar00rootroot0000000000000010 [1,2,10,3,4] json-3.12.0/docs/mkdocs/docs/examples/insert__count.cpp000066400000000000000000000005641477615276400231330ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json v = {1, 2, 3, 4}; // insert number 7 copies of number 7 before number 3 auto new_pos = v.insert(v.begin() + 2, 7, 7); // output new array and result of insert call std::cout << *new_pos << '\n'; std::cout << v << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/insert__count.output000066400000000000000000000000321477615276400236770ustar00rootroot000000000000007 [1,2,7,7,7,7,7,7,7,3,4] json-3.12.0/docs/mkdocs/docs/examples/insert__ilist.cpp000066400000000000000000000005571477615276400231310ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json v = {1, 2, 3, 4}; // insert range from v2 before the end of array v auto new_pos = v.insert(v.end(), {7, 8, 9}); // output new array and result of insert call std::cout << *new_pos << '\n'; std::cout << v << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/insert__ilist.output000066400000000000000000000000221477615276400236720ustar00rootroot000000000000007 [1,2,3,4,7,8,9] json-3.12.0/docs/mkdocs/docs/examples/insert__range.cpp000066400000000000000000000007311477615276400230730ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json v = {1, 2, 3, 4}; // create a JSON array to copy values from json v2 = {"one", "two", "three", "four"}; // insert range from v2 before the end of array v auto new_pos = v.insert(v.end(), v2.begin(), v2.end()); // output new array and result of insert call std::cout << *new_pos << '\n'; std::cout << v << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/insert__range.output000066400000000000000000000000531477615276400236460ustar00rootroot00000000000000"one" [1,2,3,4,"one","two","three","four"] json-3.12.0/docs/mkdocs/docs/examples/insert__range_object.cpp000066400000000000000000000007111477615276400244170ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create two JSON objects json j1 = {{"one", "eins"}, {"two", "zwei"}}; json j2 = {{"eleven", "elf"}, {"seventeen", "siebzehn"}}; // output objects std::cout << j1 << '\n'; std::cout << j2 << '\n'; // insert range from j2 to j1 j1.insert(j2.begin(), j2.end()); // output result of insert call std::cout << j1 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/insert__range_object.output000066400000000000000000000002061477615276400251740ustar00rootroot00000000000000{"one":"eins","two":"zwei"} {"eleven":"elf","seventeen":"siebzehn"} {"eleven":"elf","one":"eins","seventeen":"siebzehn","two":"zwei"} json-3.12.0/docs/mkdocs/docs/examples/invalid_iterator.cpp000066400000000000000000000007331477615276400236150ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { try { // calling iterator::key() on non-object iterator json j = "string"; json::iterator it = j.begin(); auto k = it.key(); } catch (const json::invalid_iterator& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/invalid_iterator.output000066400000000000000000000001531477615276400243670ustar00rootroot00000000000000message: [json.exception.invalid_iterator.207] cannot use key() for non-object iterators exception id: 207 json-3.12.0/docs/mkdocs/docs/examples/is_array.cpp000066400000000000000000000016671477615276400220760ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_array() std::cout << std::boolalpha; std::cout << j_null.is_array() << '\n'; std::cout << j_boolean.is_array() << '\n'; std::cout << j_number_integer.is_array() << '\n'; std::cout << j_number_unsigned_integer.is_array() << '\n'; std::cout << j_number_float.is_array() << '\n'; std::cout << j_object.is_array() << '\n'; std::cout << j_array.is_array() << '\n'; std::cout << j_string.is_array() << '\n'; std::cout << j_binary.is_array() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_array.output000066400000000000000000000000651477615276400226430ustar00rootroot00000000000000false false false false false false true false false json-3.12.0/docs/mkdocs/docs/examples/is_binary.cpp000066400000000000000000000017011477615276400222310ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_binary() std::cout << std::boolalpha; std::cout << j_null.is_binary() << '\n'; std::cout << j_boolean.is_binary() << '\n'; std::cout << j_number_integer.is_binary() << '\n'; std::cout << j_number_unsigned_integer.is_binary() << '\n'; std::cout << j_number_float.is_binary() << '\n'; std::cout << j_object.is_binary() << '\n'; std::cout << j_array.is_binary() << '\n'; std::cout << j_string.is_binary() << '\n'; std::cout << j_binary.is_binary() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_binary.output000066400000000000000000000000651477615276400230110ustar00rootroot00000000000000false false false false false false false false true json-3.12.0/docs/mkdocs/docs/examples/is_boolean.cpp000066400000000000000000000017131477615276400223670ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_boolean() std::cout << std::boolalpha; std::cout << j_null.is_boolean() << '\n'; std::cout << j_boolean.is_boolean() << '\n'; std::cout << j_number_integer.is_boolean() << '\n'; std::cout << j_number_unsigned_integer.is_boolean() << '\n'; std::cout << j_number_float.is_boolean() << '\n'; std::cout << j_object.is_boolean() << '\n'; std::cout << j_array.is_boolean() << '\n'; std::cout << j_string.is_boolean() << '\n'; std::cout << j_binary.is_boolean() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_boolean.output000066400000000000000000000000651477615276400231440ustar00rootroot00000000000000false true false false false false false false false json-3.12.0/docs/mkdocs/docs/examples/is_discarded.cpp000066400000000000000000000017371477615276400227000ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_discarded() std::cout << std::boolalpha; std::cout << j_null.is_discarded() << '\n'; std::cout << j_boolean.is_discarded() << '\n'; std::cout << j_number_integer.is_discarded() << '\n'; std::cout << j_number_unsigned_integer.is_discarded() << '\n'; std::cout << j_number_float.is_discarded() << '\n'; std::cout << j_object.is_discarded() << '\n'; std::cout << j_array.is_discarded() << '\n'; std::cout << j_string.is_discarded() << '\n'; std::cout << j_binary.is_discarded() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_discarded.output000066400000000000000000000000661477615276400234500ustar00rootroot00000000000000false false false false false false false false false json-3.12.0/docs/mkdocs/docs/examples/is_null.cpp000066400000000000000000000016551477615276400217270ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_null() std::cout << std::boolalpha; std::cout << j_null.is_null() << '\n'; std::cout << j_boolean.is_null() << '\n'; std::cout << j_number_integer.is_null() << '\n'; std::cout << j_number_unsigned_integer.is_null() << '\n'; std::cout << j_number_float.is_null() << '\n'; std::cout << j_object.is_null() << '\n'; std::cout << j_array.is_null() << '\n'; std::cout << j_string.is_null() << '\n'; std::cout << j_binary.is_null() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_null.output000066400000000000000000000000651477615276400224770ustar00rootroot00000000000000true false false false false false false false false json-3.12.0/docs/mkdocs/docs/examples/is_number.cpp000066400000000000000000000017011477615276400222350ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_number() std::cout << std::boolalpha; std::cout << j_null.is_number() << '\n'; std::cout << j_boolean.is_number() << '\n'; std::cout << j_number_integer.is_number() << '\n'; std::cout << j_number_unsigned_integer.is_number() << '\n'; std::cout << j_number_float.is_number() << '\n'; std::cout << j_object.is_number() << '\n'; std::cout << j_array.is_number() << '\n'; std::cout << j_string.is_number() << '\n'; std::cout << j_binary.is_number() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_number.output000066400000000000000000000000631477615276400230130ustar00rootroot00000000000000false false true true true false false false false json-3.12.0/docs/mkdocs/docs/examples/is_number_float.cpp000066400000000000000000000017751477615276400234350ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_number_float() std::cout << std::boolalpha; std::cout << j_null.is_number_float() << '\n'; std::cout << j_boolean.is_number_float() << '\n'; std::cout << j_number_integer.is_number_float() << '\n'; std::cout << j_number_unsigned_integer.is_number_float() << '\n'; std::cout << j_number_float.is_number_float() << '\n'; std::cout << j_object.is_number_float() << '\n'; std::cout << j_array.is_number_float() << '\n'; std::cout << j_string.is_number_float() << '\n'; std::cout << j_binary.is_number_float() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_number_float.output000066400000000000000000000000651477615276400242020ustar00rootroot00000000000000false false false false true false false false false json-3.12.0/docs/mkdocs/docs/examples/is_number_integer.cpp000066400000000000000000000020211477615276400237460ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_number_integer() std::cout << std::boolalpha; std::cout << j_null.is_number_integer() << '\n'; std::cout << j_boolean.is_number_integer() << '\n'; std::cout << j_number_integer.is_number_integer() << '\n'; std::cout << j_number_unsigned_integer.is_number_integer() << '\n'; std::cout << j_number_float.is_number_integer() << '\n'; std::cout << j_object.is_number_integer() << '\n'; std::cout << j_array.is_number_integer() << '\n'; std::cout << j_string.is_number_integer() << '\n'; std::cout << j_binary.is_number_integer() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_number_integer.output000066400000000000000000000000641477615276400245310ustar00rootroot00000000000000false false true true false false false false false json-3.12.0/docs/mkdocs/docs/examples/is_number_unsigned.cpp000066400000000000000000000020331477615276400241300ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_unsigned_integer = 12345678987654321u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_number_unsigned() std::cout << std::boolalpha; std::cout << j_null.is_number_unsigned() << '\n'; std::cout << j_boolean.is_number_unsigned() << '\n'; std::cout << j_number_integer.is_number_unsigned() << '\n'; std::cout << j_number_unsigned_integer.is_number_unsigned() << '\n'; std::cout << j_number_float.is_number_unsigned() << '\n'; std::cout << j_object.is_number_unsigned() << '\n'; std::cout << j_array.is_number_unsigned() << '\n'; std::cout << j_string.is_number_unsigned() << '\n'; std::cout << j_binary.is_number_unsigned() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_number_unsigned.output000066400000000000000000000000651477615276400247110ustar00rootroot00000000000000false false false true false false false false false json-3.12.0/docs/mkdocs/docs/examples/is_object.cpp000066400000000000000000000017011477615276400222130ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_number_unsigned_integer = 12345678987654321u; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_object() std::cout << std::boolalpha; std::cout << j_null.is_object() << '\n'; std::cout << j_boolean.is_object() << '\n'; std::cout << j_number_integer.is_object() << '\n'; std::cout << j_number_unsigned_integer.is_object() << '\n'; std::cout << j_number_float.is_object() << '\n'; std::cout << j_object.is_object() << '\n'; std::cout << j_array.is_object() << '\n'; std::cout << j_string.is_object() << '\n'; std::cout << j_binary.is_object() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_object.output000066400000000000000000000000651477615276400227730ustar00rootroot00000000000000false false false false false true false false false json-3.12.0/docs/mkdocs/docs/examples/is_primitive.cpp000066400000000000000000000017371477615276400227660ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_number_unsigned_integer = 12345678987654321u; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_primitive() std::cout << std::boolalpha; std::cout << j_null.is_primitive() << '\n'; std::cout << j_boolean.is_primitive() << '\n'; std::cout << j_number_integer.is_primitive() << '\n'; std::cout << j_number_unsigned_integer.is_primitive() << '\n'; std::cout << j_number_float.is_primitive() << '\n'; std::cout << j_object.is_primitive() << '\n'; std::cout << j_array.is_primitive() << '\n'; std::cout << j_string.is_primitive() << '\n'; std::cout << j_binary.is_primitive() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_primitive.output000066400000000000000000000000571477615276400235360ustar00rootroot00000000000000true true true true true false false true true json-3.12.0/docs/mkdocs/docs/examples/is_string.cpp000066400000000000000000000017011477615276400222530ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_number_unsigned_integer = 12345678987654321u; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_string() std::cout << std::boolalpha; std::cout << j_null.is_string() << '\n'; std::cout << j_boolean.is_string() << '\n'; std::cout << j_number_integer.is_string() << '\n'; std::cout << j_number_unsigned_integer.is_string() << '\n'; std::cout << j_number_float.is_string() << '\n'; std::cout << j_object.is_string() << '\n'; std::cout << j_array.is_string() << '\n'; std::cout << j_string.is_string() << '\n'; std::cout << j_binary.is_string() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_string.output000066400000000000000000000000651477615276400230330ustar00rootroot00000000000000false false false false false false false true false json-3.12.0/docs/mkdocs/docs/examples/is_structured.cpp000066400000000000000000000017511477615276400231560ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_number_unsigned_integer = 12345678987654321u; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; json j_binary = json::binary({1, 2, 3}); // call is_structured() std::cout << std::boolalpha; std::cout << j_null.is_structured() << '\n'; std::cout << j_boolean.is_structured() << '\n'; std::cout << j_number_integer.is_structured() << '\n'; std::cout << j_number_unsigned_integer.is_structured() << '\n'; std::cout << j_number_float.is_structured() << '\n'; std::cout << j_object.is_structured() << '\n'; std::cout << j_array.is_structured() << '\n'; std::cout << j_string.is_structured() << '\n'; std::cout << j_binary.is_structured() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/is_structured.output000066400000000000000000000000641477615276400237300ustar00rootroot00000000000000false false false false false true true false false json-3.12.0/docs/mkdocs/docs/examples/items.cpp000066400000000000000000000010021477615276400213650ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; // example for an object for (auto& x : j_object.items()) { std::cout << "key: " << x.key() << ", value: " << x.value() << '\n'; } // example for an array for (auto& x : j_array.items()) { std::cout << "key: " << x.key() << ", value: " << x.value() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/items.output000066400000000000000000000001741477615276400221540ustar00rootroot00000000000000key: one, value: 1 key: two, value: 2 key: 0, value: 1 key: 1, value: 2 key: 2, value: 4 key: 3, value: 8 key: 4, value: 16 json-3.12.0/docs/mkdocs/docs/examples/json_base_class_t.cpp000066400000000000000000000042751477615276400237360ustar00rootroot00000000000000#include #include class visitor_adaptor_with_metadata { public: template void visit(const Fnc& fnc) const; int metadata = 42; private: template void do_visit(const Ptr& ptr, const Fnc& fnc) const; }; using json = nlohmann::basic_json < std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, nlohmann::adl_serializer, std::vector, visitor_adaptor_with_metadata >; template void visitor_adaptor_with_metadata::visit(const Fnc& fnc) const { do_visit(json::json_pointer{}, fnc); } template void visitor_adaptor_with_metadata::do_visit(const Ptr& ptr, const Fnc& fnc) const { using value_t = nlohmann::detail::value_t; const json& j = *static_cast(this); switch (j.type()) { case value_t::object: fnc(ptr, j); for (const auto& entry : j.items()) { entry.value().do_visit(ptr / entry.key(), fnc); } break; case value_t::array: fnc(ptr, j); for (std::size_t i = 0; i < j.size(); ++i) { j.at(i).do_visit(ptr / std::to_string(i), fnc); } break; case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: fnc(ptr, j); break; case value_t::discarded: default: break; } } int main() { // create a json object json j; j["null"]; j["object"]["uint"] = 1U; j["object"].metadata = 21; // visit and output j.visit( [&](const json::json_pointer & p, const json & j) { std::cout << (p.empty() ? std::string{"/"} : p.to_string()) << " - metadata = " << j.metadata << " -> " << j.dump() << '\n'; }); } json-3.12.0/docs/mkdocs/docs/examples/json_base_class_t.output000066400000000000000000000002351477615276400245040ustar00rootroot00000000000000/ - metadata = 42 -> {"null":null,"object":{"uint":1}} /null - metadata = 42 -> null /object - metadata = 21 -> {"uint":1} /object/uint - metadata = 42 -> 1 json-3.12.0/docs/mkdocs/docs/examples/json_lines.cpp000066400000000000000000000010711477615276400224150ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // JSON Lines (see https://jsonlines.org) std::stringstream input; input << R"({"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]} {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]} {"name": "May", "wins": []} {"name": "Deloise", "wins": [["three of a kind", "5♣"]]} )"; std::string line; while (std::getline(input, line)) { std::cout << json::parse(line) << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/json_lines.output000066400000000000000000000003271477615276400231760ustar00rootroot00000000000000{"name":"Gilbert","wins":[["straight","7♣"],["one pair","10♥"]]} {"name":"Alexa","wins":[["two pair","4♠"],["two pair","9♠"]]} {"name":"May","wins":[]} {"name":"Deloise","wins":[["three of a kind","5♣"]]} json-3.12.0/docs/mkdocs/docs/examples/json_pointer.cpp000066400000000000000000000020401477615276400227600ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // correct JSON pointers json::json_pointer p1; json::json_pointer p2(""); json::json_pointer p3("/"); json::json_pointer p4("//"); json::json_pointer p5("/foo/bar"); json::json_pointer p6("/foo/bar/-"); json::json_pointer p7("/foo/~0"); json::json_pointer p8("/foo/~1"); // error: JSON pointer does not begin with a slash try { json::json_pointer p9("foo"); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } // error: JSON pointer uses escape symbol ~ not followed by 0 or 1 try { json::json_pointer p10("/foo/~"); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } // error: JSON pointer uses escape symbol ~ not followed by 0 or 1 try { json::json_pointer p11("/foo/~3"); } catch (const json::parse_error& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/json_pointer.output000066400000000000000000000004721477615276400235450ustar00rootroot00000000000000[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo' [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1' [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1' json-3.12.0/docs/mkdocs/docs/examples/json_pointer__back.cpp000066400000000000000000000006451477615276400241100ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON Pointers json::json_pointer ptr1("/foo"); json::json_pointer ptr2("/foo/0"); // call empty() std::cout << "last reference token of \"" << ptr1 << "\" is \"" << ptr1.back() << "\"\n" << "last reference token of \"" << ptr2 << "\" is \"" << ptr2.back() << "\"" << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__back.output000066400000000000000000000001201477615276400246520ustar00rootroot00000000000000last reference token of "/foo" is "foo" last reference token of "/foo/0" is "0" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__empty.cpp000066400000000000000000000011031477615276400243340ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON Pointers json::json_pointer ptr0; json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); json::json_pointer ptr3("/foo/0"); // call empty() std::cout << std::boolalpha << "\"" << ptr0 << "\": " << ptr0.empty() << '\n' << "\"" << ptr1 << "\": " << ptr1.empty() << '\n' << "\"" << ptr2 << "\": " << ptr2.empty() << '\n' << "\"" << ptr3 << "\": " << ptr3.empty() << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__empty.output000066400000000000000000000000601477615276400251130ustar00rootroot00000000000000"": true "": true "/foo": false "/foo/0": false json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__equal.cpp000066400000000000000000000012051477615276400263620ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON pointers json::json_pointer ptr0; json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); // compare JSON pointers std::cout << std::boolalpha << "\"" << ptr0 << "\" == \"" << ptr0 << "\": " << (ptr0 == ptr0) << '\n' << "\"" << ptr0 << "\" == \"" << ptr1 << "\": " << (ptr0 == ptr1) << '\n' << "\"" << ptr1 << "\" == \"" << ptr2 << "\": " << (ptr1 == ptr2) << '\n' << "\"" << ptr2 << "\" == \"" << ptr2 << "\": " << (ptr2 == ptr2) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__equal.output000066400000000000000000000001111477615276400271330ustar00rootroot00000000000000"" == "": true "" == "": true "" == "/foo": false "/foo" == "/foo": true json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__equal_stringtype.cpp000066400000000000000000000016251477615276400306600ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // different JSON pointers json::json_pointer ptr0; json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); // different strings std::string str0(""); std::string str1("/foo"); std::string str2("bar"); // compare JSON pointers and strings std::cout << std::boolalpha << "\"" << ptr0 << "\" == \"" << str0 << "\": " << (ptr0 == str0) << '\n' << "\"" << str0 << "\" == \"" << ptr1 << "\": " << (str0 == ptr1) << '\n' << "\"" << ptr2 << "\" == \"" << str1 << "\": " << (ptr2 == str1) << std::endl; try { std::cout << "\"" << str2 << "\" == \"" << ptr2 << "\": " << (str2 == ptr2) << std::endl; } catch (const json::parse_error& ex) { std::cout << ex.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__equal_stringtype.output000066400000000000000000000002701477615276400314310ustar00rootroot00000000000000"" == "": true "" == "": true "/foo" == "/foo": true "bar" == "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar' json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__notequal.cpp000066400000000000000000000012051477615276400271030ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON pointers json::json_pointer ptr0; json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); // compare JSON pointers std::cout << std::boolalpha << "\"" << ptr0 << "\" != \"" << ptr0 << "\": " << (ptr0 != ptr0) << '\n' << "\"" << ptr0 << "\" != \"" << ptr1 << "\": " << (ptr0 != ptr1) << '\n' << "\"" << ptr1 << "\" != \"" << ptr2 << "\": " << (ptr1 != ptr2) << '\n' << "\"" << ptr2 << "\" != \"" << ptr2 << "\": " << (ptr2 != ptr2) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__notequal.output000066400000000000000000000001131477615276400276560ustar00rootroot00000000000000"" != "": false "" != "": false "" != "/foo": true "/foo" != "/foo": false json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__notequal_stringtype.cpp000066400000000000000000000016001477615276400313720ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON pointers json::json_pointer ptr0; json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); // different strings std::string str0(""); std::string str1("/foo"); std::string str2("bar"); // compare JSON pointers and strings std::cout << std::boolalpha << "\"" << ptr0 << "\" != \"" << str0 << "\": " << (ptr0 != str0) << '\n' << "\"" << str0 << "\" != \"" << ptr1 << "\": " << (str0 != ptr1) << '\n' << "\"" << ptr2 << "\" != \"" << str1 << "\": " << (ptr2 != str1) << std::endl; try { std::cout << "\"" << str2 << "\" != \"" << ptr2 << "\": " << (str2 != ptr2) << std::endl; } catch (const json::parse_error& ex) { std::cout << ex.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator__notequal_stringtype.output000066400000000000000000000002731477615276400321550ustar00rootroot00000000000000"" != "": false "" != "": false "/foo" != "/foo": false "bar" != "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar' json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_add.cpp000066400000000000000000000007531477615276400256530ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON pointer json::json_pointer ptr("/foo"); std::cout << "\"" << ptr << "\"\n"; // append a JSON Pointer ptr /= json::json_pointer("/bar/baz"); std::cout << "\"" << ptr << "\"\n"; // append a string ptr /= "fob"; std::cout << "\"" << ptr << "\"\n"; // append an array index ptr /= 42; std::cout << "\"" << ptr << "\"" << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_add.output000066400000000000000000000000771477615276400264300ustar00rootroot00000000000000"/foo" "/foo/bar/baz" "/foo/bar/baz/fob" "/foo/bar/baz/fob/42" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_add_binary.cpp000066400000000000000000000006451477615276400272170ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON pointer json::json_pointer ptr("/foo"); // append a JSON Pointer std::cout << "\"" << ptr / json::json_pointer("/bar/baz") << "\"\n"; // append a string std::cout << "\"" << ptr / "fob" << "\"\n"; // append an array index std::cout << "\"" << ptr / 42 << "\"" << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_add_binary.output000066400000000000000000000000441477615276400277660ustar00rootroot00000000000000"/foo/bar/baz" "/foo/fob" "/foo/42" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_string_t.cpp000066400000000000000000000005231477615276400267470ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON Pointers json::json_pointer ptr1("/foo/0"); json::json_pointer ptr2("/a~1b"); // implicit conversion to string std::string s; s += ptr1; s += "\n"; s += ptr2; std::cout << s << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__operator_string_t.output000066400000000000000000000000151477615276400275210ustar00rootroot00000000000000/foo/0 /a~1b json-3.12.0/docs/mkdocs/docs/examples/json_pointer__parent_pointer.cpp000066400000000000000000000011001477615276400262240ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON Pointers json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); json::json_pointer ptr3("/foo/0"); // call parent_pointer() std::cout << std::boolalpha << "parent of \"" << ptr1 << "\" is \"" << ptr1.parent_pointer() << "\"\n" << "parent of \"" << ptr2 << "\" is \"" << ptr2.parent_pointer() << "\"\n" << "parent of \"" << ptr3 << "\" is \"" << ptr3.parent_pointer() << "\"" << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__parent_pointer.output000066400000000000000000000001071477615276400270100ustar00rootroot00000000000000parent of "" is "" parent of "/foo" is "" parent of "/foo/0" is "/foo" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__pop_back.cpp000066400000000000000000000006421477615276400247630ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create empty JSON Pointer json::json_pointer ptr("/foo/bar/baz"); std::cout << "\"" << ptr << "\"\n"; // call pop_back() ptr.pop_back(); std::cout << "\"" << ptr << "\"\n"; ptr.pop_back(); std::cout << "\"" << ptr << "\"\n"; ptr.pop_back(); std::cout << "\"" << ptr << "\"\n"; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__pop_back.output000066400000000000000000000000441477615276400255350ustar00rootroot00000000000000"/foo/bar/baz" "/foo/bar" "/foo" "" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__push_back.cpp000066400000000000000000000006431477615276400251450ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create empty JSON Pointer json::json_pointer ptr; std::cout << "\"" << ptr << "\"\n"; // call push_back() ptr.push_back("foo"); std::cout << "\"" << ptr << "\"\n"; ptr.push_back("0"); std::cout << "\"" << ptr << "\"\n"; ptr.push_back("bar"); std::cout << "\"" << ptr << "\"\n"; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__push_back.output000066400000000000000000000000401477615276400257120ustar00rootroot00000000000000"" "/foo" "/foo/0" "/foo/0/bar" json-3.12.0/docs/mkdocs/docs/examples/json_pointer__string_t.cpp000066400000000000000000000004571477615276400250420ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { json::json_pointer::string_t s = "This is a string."; std::cout << s << std::endl; std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__string_t.output000066400000000000000000000000271477615276400256110ustar00rootroot00000000000000This is a string. true json-3.12.0/docs/mkdocs/docs/examples/json_pointer__to_string.cpp000066400000000000000000000022721477615276400252160ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // different JSON Pointers json::json_pointer ptr1(""); json::json_pointer ptr2("/foo"); json::json_pointer ptr3("/foo/0"); json::json_pointer ptr4("/"); json::json_pointer ptr5("/a~1b"); json::json_pointer ptr6("/c%d"); json::json_pointer ptr7("/e^f"); json::json_pointer ptr8("/g|h"); json::json_pointer ptr9("/i\\j"); json::json_pointer ptr10("/k\"l"); json::json_pointer ptr11("/ "); json::json_pointer ptr12("/m~0n"); std::cout << "\"" << ptr1.to_string() << "\"\n" << "\"" << ptr2.to_string() << "\"\n" << "\"" << ptr3.to_string() << "\"\n" << "\"" << ptr4.to_string() << "\"\n" << "\"" << ptr5.to_string() << "\"\n" << "\"" << ptr6.to_string() << "\"\n" << "\"" << ptr7.to_string() << "\"\n" << "\"" << ptr8.to_string() << "\"\n" << "\"" << ptr9.to_string() << "\"\n" << "\"" << ptr10.to_string() << "\"\n" << "\"" << ptr11.to_string() << "\"\n" << "\"" << ptr12.to_string() << "\"" << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/json_pointer__to_string.output000066400000000000000000000001171477615276400257700ustar00rootroot00000000000000"" "/foo" "/foo/0" "/" "/a~1b" "/c%d" "/e^f" "/g|h" "/i\j" "/k"l" "/ " "/m~0n" json-3.12.0/docs/mkdocs/docs/examples/max_size.cpp000066400000000000000000000013031477615276400220670ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call max_size() std::cout << j_null.max_size() << '\n'; std::cout << j_boolean.max_size() << '\n'; std::cout << j_number_integer.max_size() << '\n'; std::cout << j_number_float.max_size() << '\n'; std::cout << j_object.max_size() << '\n'; std::cout << j_array.max_size() << '\n'; std::cout << j_string.max_size() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/max_size.output000066400000000000000000000000601477615276400226440ustar00rootroot000000000000000 1 1 1 115292150460684697 576460752303423487 1 json-3.12.0/docs/mkdocs/docs/examples/merge_patch.cpp000066400000000000000000000020071477615276400225300ustar00rootroot00000000000000#include #include #include // for std::setw using json = nlohmann::json; using namespace nlohmann::literals; int main() { // the original document json document = R"({ "title": "Goodbye!", "author": { "givenName": "John", "familyName": "Doe" }, "tags": [ "example", "sample" ], "content": "This will be unchanged" })"_json; // the patch json patch = R"({ "title": "Hello!", "phoneNumber": "+01-123-456-7890", "author": { "familyName": null }, "tags": [ "example" ] })"_json; // apply the patch document.merge_patch(patch); // output original and patched document std::cout << std::setw(4) << document << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/merge_patch.output000066400000000000000000000003041477615276400233040ustar00rootroot00000000000000{ "author": { "givenName": "John" }, "content": "This will be unchanged", "phoneNumber": "+01-123-456-7890", "tags": [ "example" ], "title": "Hello!" } json-3.12.0/docs/mkdocs/docs/examples/meta.cpp000066400000000000000000000002741477615276400212040ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // call meta() std::cout << std::setw(4) << json::meta() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/meta.output000066400000000000000000000005651477615276400217650ustar00rootroot00000000000000{ "compiler": { "c++": "201103", "family": "gcc", "version": "12.4.0" }, "copyright": "(C) 2013-2025 Niels Lohmann", "name": "JSON for Modern C++", "platform": "apple", "url": "https://github.com/nlohmann/json", "version": { "major": 3, "minor": 12, "patch": 0, "string": "3.12.0" } } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_derived_type_intrusive_macro.cpp000066400000000000000000000012121477615276400314270ustar00rootroot00000000000000#include #include #include using nlohmann::json; class A { private: double Aa = 0.0; double Ab = 0.0; public: A() = default; A(double a, double b) : Aa(a), Ab(b) {} NLOHMANN_DEFINE_TYPE_INTRUSIVE(A, Aa, Ab) }; class B : public A { private: int Ba = 0; int Bb = 0; public: B() = default; B(int a, int b, double aa, double ab) : A(aa, ab), Ba(a), Bb(b) {} NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(B, A, Ba, Bb) }; int main() { B example(23, 42, 3.142, 1.777); json example_json = example; std::cout << std::setw(4) << example_json << std::endl; }json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_derived_type_intrusive_macro.output000066400000000000000000000001011477615276400322010ustar00rootroot00000000000000{ "Aa": 3.142, "Ab": 1.777, "Ba": 23, "Bb": 42 } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_explicit.cpp000066400000000000000000000033501477615276400304520ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} template friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } template friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t) { nlohmann_json_t.name = nlohmann_json_j.at("name"); nlohmann_json_t.address = nlohmann_json_j.at("address"); nlohmann_json_t.age = nlohmann_json_j.at("age"); } }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; try { auto p3 = j3.template get(); } catch (const json::exception& e) { std::cout << "deserialization failed: " << e.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_explicit.output000066400000000000000000000002401477615276400312230ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} deserialization failed: [json.exception.out_of_range.403] key 'age' not found json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_macro.cpp000066400000000000000000000022631477615276400277340ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age) }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; try { auto p3 = j3.template get(); } catch (const json::exception& e) { std::cout << "deserialization failed: " << e.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_macro.output000066400000000000000000000002401477615276400305030ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} deserialization failed: [json.exception.out_of_range.403] key 'age' not found json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_only_serialize_explicit.cpp000066400000000000000000000016731477615276400335700ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: // No default constructor person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} template friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_only_serialize_explicit.output000066400000000000000000000001221477615276400343320ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_only_serialize_macro.cpp000066400000000000000000000013061477615276400330410ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: // No default constructor person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} NLOHMANN_DEFINE_TYPE_INTRUSIVE(person, name, address, age) }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_only_serialize_macro.output000066400000000000000000000001221477615276400336120ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_with_default_explicit.cpp000066400000000000000000000034431477615276400332140ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} template friend void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } template friend void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t) { person nlohmann_json_default_obj; nlohmann_json_t.name = nlohmann_json_j.value("name", nlohmann_json_default_obj.name); nlohmann_json_t.address = nlohmann_json_j.value("address", nlohmann_json_default_obj.address); nlohmann_json_t.age = nlohmann_json_j.value("age", nlohmann_json_default_obj.age); } }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; auto p3 = j3.template get(); std::cout << "roundtrip: " << json(p3) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_with_default_explicit.output000066400000000000000000000002421477615276400337640ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} roundtrip: {"address":"742 Evergreen Terrace","age":-1,"name":"Maggie Simpson"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_with_default_macro.cpp000066400000000000000000000021461477615276400324730ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { class person { private: std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; public: person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(person, name, address, age) }; } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; auto p3 = j3.template get(); std::cout << "roundtrip: " << json(p3) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_intrusive_with_default_macro.output000066400000000000000000000002421477615276400332440ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} roundtrip: {"address":"742 Evergreen Terrace","age":-1,"name":"Maggie Simpson"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_explicit.cpp000066400000000000000000000027041477615276400313260ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name; std::string address; int age; }; template void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } template void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t) { nlohmann_json_t.name = nlohmann_json_j.at("name"); nlohmann_json_t.address = nlohmann_json_j.at("address"); nlohmann_json_t.age = nlohmann_json_j.at("age"); } } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; try { auto p3 = j3.template get(); } catch (const json::exception& e) { std::cout << "deserialization failed: " << e.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_explicit.output000066400000000000000000000002401477615276400320750ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} deserialization failed: [json.exception.out_of_range.403] key 'age' not found json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_macro.cpp000066400000000000000000000017251477615276400306100ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name; std::string address; int age; }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age) } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; try { auto p3 = j3.template get(); } catch (const json::exception& e) { std::cout << "deserialization failed: " << e.what() << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_macro.output000066400000000000000000000002401477615276400313550ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} deserialization failed: [json.exception.out_of_range.403] key 'age' not found json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_only_serialize_explicit.cpp000066400000000000000000000012641477615276400344360ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name; std::string address; int age; }; template void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; } nlohmann_define_type_non_intrusive_only_serialize_explicit.output000066400000000000000000000001221477615276400351250ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/examplesserialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_only_serialize_macro.cpp000066400000000000000000000007611477615276400337170ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name; std::string address; int age; }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(person, name, address, age) } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_only_serialize_macro.output000066400000000000000000000001221477615276400344640ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_with_default_explicit.cpp000066400000000000000000000033051477615276400340630ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} }; template void to_json(BasicJsonType& nlohmann_json_j, const person& nlohmann_json_t) { nlohmann_json_j["name"] = nlohmann_json_t.name; nlohmann_json_j["address"] = nlohmann_json_t.address; nlohmann_json_j["age"] = nlohmann_json_t.age; } template void from_json(const BasicJsonType& nlohmann_json_j, person& nlohmann_json_t) { person nlohmann_json_default_obj; nlohmann_json_t.name = nlohmann_json_j.value("name", nlohmann_json_default_obj.name); nlohmann_json_t.address = nlohmann_json_j.value("address", nlohmann_json_default_obj.address); nlohmann_json_t.age = nlohmann_json_j.value("age", nlohmann_json_default_obj.age); } } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; auto p3 = j3.template get(); std::cout << "roundtrip: " << json(p3) << std::endl; } nlohmann_define_type_non_intrusive_with_default_explicit.output000066400000000000000000000002421477615276400345570ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/examplesserialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} roundtrip: {"address":"742 Evergreen Terrace","age":-1,"name":"Maggie Simpson"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_with_default_macro.cpp000066400000000000000000000021221477615276400333370ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; namespace ns { struct person { std::string name = "John Doe"; std::string address = "123 Fake St"; int age = -1; person() = default; person(std::string name_, std::string address_, int age_) : name(std::move(name_)), address(std::move(address_)), age(age_) {} }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(person, name, address, age) } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // serialization: person -> json json j = p; std::cout << "serialization: " << j << std::endl; // deserialization: json -> person json j2 = R"({"address": "742 Evergreen Terrace", "age": 40, "name": "Homer Simpson"})"_json; auto p2 = j2.template get(); // incomplete deserialization: json j3 = R"({"address": "742 Evergreen Terrace", "name": "Maggie Simpson"})"_json; auto p3 = j3.template get(); std::cout << "roundtrip: " << json(p3) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_define_type_non_intrusive_with_default_macro.output000066400000000000000000000002421477615276400341160ustar00rootroot00000000000000serialization: {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} roundtrip: {"address":"742 Evergreen Terrace","age":-1,"name":"Maggie Simpson"} json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace.cpp000066400000000000000000000005411477615276400251320ustar00rootroot00000000000000#include #include // possible use case: use NLOHMANN_JSON_NAMESPACE instead of nlohmann using json = NLOHMANN_JSON_NAMESPACE::json; // macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal #define Q(x) #x #define QUOTE(x) Q(x) int main() { std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace.output000066400000000000000000000000331477615276400257040ustar00rootroot00000000000000nlohmann::json_abi_v3_12_0 json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace_begin.c++17.cpp000066400000000000000000000012571477615276400270220ustar00rootroot00000000000000#include #include #include // partial specialization (see https://json.nlohmann.me/features/arbitrary_types/) NLOHMANN_JSON_NAMESPACE_BEGIN template struct adl_serializer> { static void to_json(json& j, const std::optional& opt) { if (opt == std::nullopt) { j = nullptr; } else { j = *opt; } } }; NLOHMANN_JSON_NAMESPACE_END int main() { std::optional o1 = 1; std::optional o2 = std::nullopt; NLOHMANN_JSON_NAMESPACE::json j; j.push_back(o1); j.push_back(o2); std::cout << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace_begin.c++17.output000066400000000000000000000000111477615276400275630ustar00rootroot00000000000000[1,null] json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace_no_version.cpp000066400000000000000000000004341477615276400273740ustar00rootroot00000000000000#include #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 1 #include // macro needed to output the NLOHMANN_JSON_NAMESPACE as string literal #define Q(x) #x #define QUOTE(x) Q(x) int main() { std::cout << QUOTE(NLOHMANN_JSON_NAMESPACE) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_namespace_no_version.output000066400000000000000000000000231477615276400301440ustar00rootroot00000000000000nlohmann::json_abi json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_serialize_enum.cpp000066400000000000000000000027161477615276400262170ustar00rootroot00000000000000#include #include using json = nlohmann::json; namespace ns { enum TaskState { TS_STOPPED, TS_RUNNING, TS_COMPLETED, TS_INVALID = -1 }; NLOHMANN_JSON_SERIALIZE_ENUM(TaskState, { { TS_INVALID, nullptr }, { TS_STOPPED, "stopped" }, { TS_RUNNING, "running" }, { TS_COMPLETED, "completed" } }) enum class Color { red, green, blue, unknown }; NLOHMANN_JSON_SERIALIZE_ENUM(Color, { { Color::unknown, "unknown" }, { Color::red, "red" }, { Color::green, "green" }, { Color::blue, "blue" } }) } // namespace ns int main() { // serialization json j_stopped = ns::TS_STOPPED; json j_red = ns::Color::red; std::cout << "ns::TS_STOPPED -> " << j_stopped << ", ns::Color::red -> " << j_red << std::endl; // deserialization json j_running = "running"; json j_blue = "blue"; auto running = j_running.template get(); auto blue = j_blue.template get(); std::cout << j_running << " -> " << running << ", " << j_blue << " -> " << static_cast(blue) << std::endl; // deserializing undefined JSON value to enum // (where the first map entry above is the default) json j_pi = 3.14; auto invalid = j_pi.template get(); auto unknown = j_pi.template get(); std::cout << j_pi << " -> " << invalid << ", " << j_pi << " -> " << static_cast(unknown) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_serialize_enum.output000066400000000000000000000001471477615276400267710ustar00rootroot00000000000000ns::TS_STOPPED -> "stopped", ns::Color::red -> "red" "running" -> 1, "blue" -> 2 3.14 -> -1, 3.14 -> 3 json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_serialize_enum_2.cpp000066400000000000000000000014521477615276400264340ustar00rootroot00000000000000#include #include using json = nlohmann::json; namespace ns { enum class Color { red, green, blue, unknown }; NLOHMANN_JSON_SERIALIZE_ENUM(Color, { { Color::unknown, "unknown" }, { Color::red, "red" }, { Color::green, "green" }, { Color::blue, "blue" }, { Color::red, "rot" } // a second conversion for Color::red }) } int main() { // serialization json j_red = ns::Color::red; std::cout << static_cast(ns::Color::red) << " -> " << j_red << std::endl; // deserialization json j_rot = "rot"; auto rot = j_rot.template get(); auto red = j_red.template get(); std::cout << j_rot << " -> " << static_cast(rot) << std::endl; std::cout << j_red << " -> " << static_cast(red) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_serialize_enum_2.output000066400000000000000000000000411477615276400272030ustar00rootroot000000000000000 -> "red" "rot" -> 0 "red" -> 0 json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_version.cpp000066400000000000000000000004621477615276400246650ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { std::cout << "JSON for Modern C++ version " << NLOHMANN_JSON_VERSION_MAJOR << "." << NLOHMANN_JSON_VERSION_MINOR << "." << NLOHMANN_JSON_VERSION_PATCH << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/nlohmann_json_version.output000066400000000000000000000000431477615276400254360ustar00rootroot00000000000000JSON for Modern C++ version 3.12.0 json-3.12.0/docs/mkdocs/docs/examples/number_float_t.cpp000066400000000000000000000003251477615276400232530ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/number_float_t.output000066400000000000000000000000051477615276400240240ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/number_integer_t.cpp000066400000000000000000000003351477615276400236040ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/number_integer_t.output000066400000000000000000000000051477615276400243540ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/number_unsigned_t.cpp000066400000000000000000000003371477615276400237650ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/number_unsigned_t.output000066400000000000000000000000051477615276400245330ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/object.cpp000066400000000000000000000013031477615276400215160ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON objects json j_no_init_list = json::object(); json j_empty_init_list = json::object({}); json j_list_of_pairs = json::object({ {"one", 1}, {"two", 2} }); // serialize the JSON objects std::cout << j_no_init_list << '\n'; std::cout << j_empty_init_list << '\n'; std::cout << j_list_of_pairs << '\n'; // example for an exception try { // can only create an object from a list of pairs json j_invalid_object = json::object({{ "one", 1, 2 }}); } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/object.output000066400000000000000000000001431477615276400222750ustar00rootroot00000000000000{} {} {"one":1,"two":2} [json.exception.type_error.301] cannot create object from initializer list json-3.12.0/docs/mkdocs/docs/examples/object_comparator_t.cpp000066400000000000000000000005711477615276400242760ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << "json::object_comparator_t(\"one\", \"two\") = " << json::object_comparator_t{}("one", "two") << "\n" << "json::object_comparator_t(\"three\", \"four\") = " << json::object_comparator_t{}("three", "four") << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/object_comparator_t.output000066400000000000000000000001421477615276400250460ustar00rootroot00000000000000json::object_comparator_t("one", "two") = true json::object_comparator_t("three", "four") = false json-3.12.0/docs/mkdocs/docs/examples/object_t.cpp000066400000000000000000000003471477615276400220500ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same, json::object_t>::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/object_t.output000066400000000000000000000000051477615276400226150ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/operator__ValueType.cpp000066400000000000000000000026271477615276400242520ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create a JSON value with different types json json_types = { {"boolean", true}, { "number", { {"integer", 42}, {"floating-point", 17.23} } }, {"string", "Hello, world!"}, {"array", {1, 2, 3, 4, 5}}, {"null", nullptr} }; // use implicit conversions bool v1 = json_types["boolean"]; int v2 = json_types["number"]["integer"]; short v3 = json_types["number"]["integer"]; float v4 = json_types["number"]["floating-point"]; int v5 = json_types["number"]["floating-point"]; std::string v6 = json_types["string"]; std::vector v7 = json_types["array"]; std::unordered_map v8 = json_types; // print the conversion results std::cout << v1 << '\n'; std::cout << v2 << ' ' << v3 << '\n'; std::cout << v4 << ' ' << v5 << '\n'; std::cout << v6 << '\n'; for (auto i : v7) { std::cout << i << ' '; } std::cout << "\n\n"; for (auto i : v8) { std::cout << i.first << ": " << i.second << '\n'; } // example for an exception try { bool v1 = json_types["string"]; } catch (const json::type_error& e) { std::cout << e.what() << '\n'; } } json-3.12.0/docs/mkdocs/docs/examples/operator__ValueType.output000066400000000000000000000003411477615276400250170ustar00rootroot000000000000001 42 42 17.23 17 Hello, world! 1 2 3 4 5 string: "Hello, world!" number: {"floating-point":17.23,"integer":42} null: null boolean: true array: [1,2,3,4,5] [json.exception.type_error.302] type must be boolean, but is string json-3.12.0/docs/mkdocs/docs/examples/operator__equal.cpp000066400000000000000000000014731477615276400234410ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.000000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " == " << array_2 << " " << (array_1 == array_2) << '\n'; std::cout << object_1 << " == " << object_2 << " " << (object_1 == object_2) << '\n'; std::cout << number_1 << " == " << number_2 << " " << (number_1 == number_2) << '\n'; std::cout << string_1 << " == " << string_2 << " " << (string_1 == string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__equal.output000066400000000000000000000001521477615276400242100ustar00rootroot00000000000000[1,2,3] == [1,2,4] false {"A":"a","B":"b"} == {"A":"a","B":"b"} true 17 == 17.0 true "foo" == "bar" false json-3.12.0/docs/mkdocs/docs/examples/operator__equal__nullptr_t.cpp000066400000000000000000000012721477615276400257000ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array = {1, 2, 3}; json object = {{"A", "a"}, {"B", "b"}}; json number = 17; json string = "foo"; json null; // output values and comparisons std::cout << std::boolalpha; std::cout << array << " == nullptr " << (array == nullptr) << '\n'; std::cout << object << " == nullptr " << (object == nullptr) << '\n'; std::cout << number << " == nullptr " << (number == nullptr) << '\n'; std::cout << string << " == nullptr " << (string == nullptr) << '\n'; std::cout << null << " == nullptr " << (null == nullptr) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__equal__nullptr_t.output000066400000000000000000000001741477615276400264560ustar00rootroot00000000000000[1,2,3] == nullptr false {"A":"a","B":"b"} == nullptr false 17 == nullptr false "foo" == nullptr false null == nullptr true json-3.12.0/docs/mkdocs/docs/examples/operator__equal__specializations.cpp000066400000000000000000000007321477615276400270560ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { nlohmann::json uj1 = {{"version", 1}, {"type", "integer"}}; nlohmann::json uj2 = {{"type", "integer"}, {"version", 1}}; nlohmann::ordered_json oj1 = {{"version", 1}, {"type", "integer"}}; nlohmann::ordered_json oj2 = {{"type", "integer"}, {"version", 1}}; std::cout << std::boolalpha << (uj1 == uj2) << '\n' << (oj1 == oj2) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/operator__equal__specializations.output000066400000000000000000000000131477615276400276240ustar00rootroot00000000000000true false json-3.12.0/docs/mkdocs/docs/examples/operator__greater.cpp000066400000000000000000000014611477615276400237600ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.0000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " > " << array_2 << " " << (array_1 > array_2) << '\n'; std::cout << object_1 << " > " << object_2 << " " << (object_1 > object_2) << '\n'; std::cout << number_1 << " > " << number_2 << " " << (number_1 > number_2) << '\n'; std::cout << string_1 << " > " << string_2 << " " << (string_1 > string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__greater.output000066400000000000000000000001631477615276400245340ustar00rootroot00000000000000[1,2,3] > [1,2,4] false {"A":"a","B":"b"} > {"A":"a","B":"b"} false 17 > 17.0000000000001 false "foo" > "bar" true json-3.12.0/docs/mkdocs/docs/examples/operator__greaterequal.cpp000066400000000000000000000014711477615276400250110ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.0000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " >= " << array_2 << " " << (array_1 >= array_2) << '\n'; std::cout << object_1 << " >= " << object_2 << " " << (object_1 >= object_2) << '\n'; std::cout << number_1 << " >= " << number_2 << " " << (number_1 >= number_2) << '\n'; std::cout << string_1 << " >= " << string_2 << " " << (string_1 >= string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__greaterequal.output000066400000000000000000000001661477615276400255670ustar00rootroot00000000000000[1,2,3] >= [1,2,4] false {"A":"a","B":"b"} >= {"A":"a","B":"b"} true 17 >= 17.0000000000001 false "foo" >= "bar" true json-3.12.0/docs/mkdocs/docs/examples/operator__less.cpp000066400000000000000000000014651477615276400233010ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.0000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " == " << array_2 << " " << (array_1 < array_2) << '\n'; std::cout << object_1 << " == " << object_2 << " " << (object_1 < object_2) << '\n'; std::cout << number_1 << " == " << number_2 << " " << (number_1 < number_2) << '\n'; std::cout << string_1 << " == " << string_2 << " " << (string_1 < string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__less.output000066400000000000000000000001661477615276400240540ustar00rootroot00000000000000[1,2,3] == [1,2,4] true {"A":"a","B":"b"} == {"A":"a","B":"b"} false 17 == 17.0000000000001 true "foo" == "bar" false json-3.12.0/docs/mkdocs/docs/examples/operator__lessequal.cpp000066400000000000000000000014711477615276400243260ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.0000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " <= " << array_2 << " " << (array_1 <= array_2) << '\n'; std::cout << object_1 << " <= " << object_2 << " " << (object_1 <= object_2) << '\n'; std::cout << number_1 << " <= " << number_2 << " " << (number_1 <= number_2) << '\n'; std::cout << string_1 << " <= " << string_2 << " " << (string_1 <= string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__lessequal.output000066400000000000000000000001651477615276400251030ustar00rootroot00000000000000[1,2,3] <= [1,2,4] true {"A":"a","B":"b"} <= {"A":"a","B":"b"} true 17 <= 17.0000000000001 true "foo" <= "bar" false json-3.12.0/docs/mkdocs/docs/examples/operator__notequal.cpp000066400000000000000000000014731477615276400241620ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number_1 = 17; json number_2 = 17.000000000000001L; json string_1 = "foo"; json string_2 = "bar"; // output values and comparisons std::cout << std::boolalpha; std::cout << array_1 << " != " << array_2 << " " << (array_1 != array_2) << '\n'; std::cout << object_1 << " != " << object_2 << " " << (object_1 != object_2) << '\n'; std::cout << number_1 << " != " << number_2 << " " << (number_1 != number_2) << '\n'; std::cout << string_1 << " != " << string_2 << " " << (string_1 != string_2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__notequal.output000066400000000000000000000001521477615276400247310ustar00rootroot00000000000000[1,2,3] != [1,2,4] true {"A":"a","B":"b"} != {"A":"a","B":"b"} false 17 != 17.0 false "foo" != "bar" true json-3.12.0/docs/mkdocs/docs/examples/operator__notequal__nullptr_t.cpp000066400000000000000000000012721477615276400264210ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create several JSON values json array = {1, 2, 3}; json object = {{"A", "a"}, {"B", "b"}}; json number = 17; json string = "foo"; json null; // output values and comparisons std::cout << std::boolalpha; std::cout << array << " != nullptr " << (array != nullptr) << '\n'; std::cout << object << " != nullptr " << (object != nullptr) << '\n'; std::cout << number << " != nullptr " << (number != nullptr) << '\n'; std::cout << string << " != nullptr " << (string != nullptr) << '\n'; std::cout << null << " != nullptr " << (null != nullptr) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__notequal__nullptr_t.output000066400000000000000000000001711477615276400271740ustar00rootroot00000000000000[1,2,3] != nullptr true {"A":"a","B":"b"} != nullptr true 17 != nullptr true "foo" != nullptr true null != nullptr false json-3.12.0/docs/mkdocs/docs/examples/operator__value_t.cpp000066400000000000000000000025211477615276400237640ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = -17; json j_number_unsigned = 42u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call operator value_t() json::value_t t_null = j_null; json::value_t t_boolean = j_boolean; json::value_t t_number_integer = j_number_integer; json::value_t t_number_unsigned = j_number_unsigned; json::value_t t_number_float = j_number_float; json::value_t t_object = j_object; json::value_t t_array = j_array; json::value_t t_string = j_string; // print types std::cout << std::boolalpha; std::cout << (t_null == json::value_t::null) << '\n'; std::cout << (t_boolean == json::value_t::boolean) << '\n'; std::cout << (t_number_integer == json::value_t::number_integer) << '\n'; std::cout << (t_number_unsigned == json::value_t::number_unsigned) << '\n'; std::cout << (t_number_float == json::value_t::number_float) << '\n'; std::cout << (t_object == json::value_t::object) << '\n'; std::cout << (t_array == json::value_t::array) << '\n'; std::cout << (t_string == json::value_t::string) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator__value_t.output000066400000000000000000000000501477615276400245350ustar00rootroot00000000000000true true true true true true true true json-3.12.0/docs/mkdocs/docs/examples/operator_array__json_pointer.cpp000066400000000000000000000025261477615276400262410ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; // read-only access // output element with JSON pointer "/number" std::cout << j["/number"_json_pointer] << '\n'; // output element with JSON pointer "/string" std::cout << j["/string"_json_pointer] << '\n'; // output element with JSON pointer "/array" std::cout << j["/array"_json_pointer] << '\n'; // output element with JSON pointer "/array/1" std::cout << j["/array/1"_json_pointer] << '\n'; // writing access // change the string j["/string"_json_pointer] = "bar"; // output the changed string std::cout << j["string"] << '\n'; // "change" a nonexisting object entry j["/boolean"_json_pointer] = true; // output the changed object std::cout << j << '\n'; // change an array element j["/array/1"_json_pointer] = 21; // "change" an array element with nonexisting index j["/array/4"_json_pointer] = 44; // output the changed array std::cout << j["array"] << '\n'; // "change" the array element past the end j["/array/-"_json_pointer] = 55; // output the changed array std::cout << j["array"] << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__json_pointer.output000066400000000000000000000001721477615276400270120ustar00rootroot000000000000001 "foo" [1,2] 2 "bar" {"array":[1,2],"boolean":true,"number":1,"string":"bar"} [1,21,null,null,44] [1,21,null,null,44,55] json-3.12.0/docs/mkdocs/docs/examples/operator_array__json_pointer_const.cpp000066400000000000000000000012541477615276400274440ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value const json j = { {"number", 1}, {"string", "foo"}, {"array", {1, 2}} }; // read-only access // output element with JSON pointer "/number" std::cout << j["/number"_json_pointer] << '\n'; // output element with JSON pointer "/string" std::cout << j["/string"_json_pointer] << '\n'; // output element with JSON pointer "/array" std::cout << j["/array"_json_pointer] << '\n'; // output element with JSON pointer "/array/1" std::cout << j["/array/1"_json_pointer] << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__json_pointer_const.output000066400000000000000000000000201477615276400302100ustar00rootroot000000000000001 "foo" [1,2] 2 json-3.12.0/docs/mkdocs/docs/examples/operator_array__keytype.c++17.cpp000066400000000000000000000013361477615276400257370ustar00rootroot00000000000000#include #include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object json object = { {"one", 1}, {"two", 2}, {"three", 2.9} }; // output element with key "two" std::cout << object["two"sv] << "\n\n"; // change element with key "three" object["three"sv] = 3; // output changed array std::cout << std::setw(4) << object << "\n\n"; // mention nonexisting key object["four"sv]; // write to nonexisting key object["five"sv]["really"sv]["nested"sv] = true; // output changed object std::cout << std::setw(4) << object << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__keytype.c++17.output000066400000000000000000000003021477615276400265050ustar00rootroot000000000000002 { "one": 1, "three": 3, "two": 2 } { "five": { "really": { "nested": true } }, "four": null, "one": 1, "three": 3, "two": 2 } json-3.12.0/docs/mkdocs/docs/examples/operator_array__keytype_const.c++17.cpp000066400000000000000000000005411477615276400271420ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object const json object = { {"one", 1}, {"two", 2}, {"three", 2.9} }; // output element with key "two" std::cout << object["two"sv] << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__keytype_const.c++17.output000066400000000000000000000000021477615276400277100ustar00rootroot000000000000002 json-3.12.0/docs/mkdocs/docs/examples/operator_array__object_t_key_type.cpp000066400000000000000000000012201477615276400272200ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create a JSON object json object = { {"one", 1}, {"two", 2}, {"three", 2.9} }; // output element with key "two" std::cout << object["two"] << "\n\n"; // change element with key "three" object["three"] = 3; // output changed array std::cout << std::setw(4) << object << "\n\n"; // mention nonexisting key object["four"]; // write to nonexisting key object["five"]["really"]["nested"] = true; // output changed object std::cout << std::setw(4) << object << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__object_t_key_type.output000066400000000000000000000003021477615276400277760ustar00rootroot000000000000002 { "one": 1, "three": 3, "two": 2 } { "five": { "really": { "nested": true } }, "four": null, "one": 1, "three": 3, "two": 2 } json-3.12.0/docs/mkdocs/docs/examples/operator_array__object_t_key_type_const.cpp000066400000000000000000000004351477615276400304350ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON object const json object = { {"one", 1}, {"two", 2}, {"three", 2.9} }; // output element with key "two" std::cout << object["two"] << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__object_t_key_type_const.output000066400000000000000000000000021477615276400312010ustar00rootroot000000000000002 json-3.12.0/docs/mkdocs/docs/examples/operator_array__size_type.cpp000066400000000000000000000007431477615276400255420ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON array json array = {1, 2, 3, 4, 5}; // output element at index 3 (fourth element) std::cout << array[3] << '\n'; // change last element to 6 array[array.size() - 1] = 6; // output changed array std::cout << array << '\n'; // write beyond array limit array[10] = 11; // output changed array std::cout << array << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__size_type.output000066400000000000000000000000661477615276400263160ustar00rootroot000000000000004 [1,2,3,4,6] [1,2,3,4,6,null,null,null,null,null,11] json-3.12.0/docs/mkdocs/docs/examples/operator_array__size_type_const.cpp000066400000000000000000000004141477615276400267430ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON array const json array = {"first", "2nd", "third", "fourth"}; // output element at index 2 (third element) std::cout << array.at(2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_array__size_type_const.output000066400000000000000000000000101477615276400275110ustar00rootroot00000000000000"third" json-3.12.0/docs/mkdocs/docs/examples/operator_deserialize.cpp000066400000000000000000000010141477615276400244620ustar00rootroot00000000000000#include #include #include #include using json = nlohmann::json; int main() { // create stream with serialized JSON std::stringstream ss; ss << R"({ "number": 23, "string": "Hello, world!", "array": [1, 2, 3, 4, 5], "boolean": false, "null": null })"; // create JSON value and read the serialization from the stream json j; ss >> j; // serialize JSON std::cout << std::setw(2) << j << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_deserialize.output000066400000000000000000000002101477615276400252350ustar00rootroot00000000000000{ "array": [ 1, 2, 3, 4, 5 ], "boolean": false, "null": null, "number": 23, "string": "Hello, world!" } json-3.12.0/docs/mkdocs/docs/examples/operator_literal_json.cpp000066400000000000000000000003761477615276400246610ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { json j = R"( {"hello": "world", "answer": 42} )"_json; std::cout << std::setw(2) << j << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_literal_json.output000066400000000000000000000000471477615276400254320ustar00rootroot00000000000000{ "answer": 42, "hello": "world" } json-3.12.0/docs/mkdocs/docs/examples/operator_literal_json_pointer.cpp000066400000000000000000000004511477615276400264130ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { json j = R"( {"hello": "world", "answer": 42} )"_json; auto val = j["/hello"_json_pointer]; std::cout << std::setw(2) << val << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/operator_literal_json_pointer.output000066400000000000000000000000101477615276400271600ustar00rootroot00000000000000"world" json-3.12.0/docs/mkdocs/docs/examples/operator_ltlt__basic_json.cpp000066400000000000000000000010451477615276400254760ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create JSON values json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; // serialize without indentation std::cout << j_object << "\n\n"; std::cout << j_array << "\n\n"; // serialize with indentation std::cout << std::setw(4) << j_object << "\n\n"; std::cout << std::setw(2) << j_array << "\n\n"; std::cout << std::setw(1) << std::setfill('\t') << j_object << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/operator_ltlt__basic_json.output000066400000000000000000000001711477615276400262530ustar00rootroot00000000000000{"one":1,"two":2} [1,2,4,8,16] { "one": 1, "two": 2 } [ 1, 2, 4, 8, 16 ] { "one": 1, "two": 2 } json-3.12.0/docs/mkdocs/docs/examples/operator_ltlt__json_pointer.cpp000066400000000000000000000003661477615276400261020ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON poiner json::json_pointer ptr("/foo/bar/baz"); // write string representation to stream std::cout << ptr << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/operator_ltlt__json_pointer.output000066400000000000000000000000151477615276400266470ustar00rootroot00000000000000/foo/bar/baz json-3.12.0/docs/mkdocs/docs/examples/operator_spaceship__const_reference.c++20.cpp000066400000000000000000000022141477615276400302400ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; const char* to_string(const std::partial_ordering& po) { if (std::is_lt(po)) { return "less"; } else if (std::is_gt(po)) { return "greater"; } else if (std::is_eq(po)) { return "equivalent"; } return "unordered"; } int main() { // create several JSON values json array_1 = {1, 2, 3}; json array_2 = {1, 2, 4}; json object_1 = {{"A", "a"}, {"B", "b"}}; json object_2 = {{"B", "b"}, {"A", "a"}}; json number = 17; json string = "foo"; json discarded = json(json::value_t::discarded); // output values and comparisons std::cout << array_1 << " <=> " << array_2 << " := " << to_string(array_1 <=> array_2) << '\n'; // *NOPAD* std::cout << object_1 << " <=> " << object_2 << " := " << to_string(object_1 <=> object_2) << '\n'; // *NOPAD* std::cout << string << " <=> " << number << " := " << to_string(string <=> number) << '\n'; // *NOPAD* std::cout << string << " <=> " << discarded << " := " << to_string(string <=> discarded) << '\n'; // *NOPAD* } json-3.12.0/docs/mkdocs/docs/examples/operator_spaceship__const_reference.c++20.output000066400000000000000000000002151477615276400310150ustar00rootroot00000000000000[1,2,3] <=> [1,2,4] := less {"A":"a","B":"b"} <=> {"A":"a","B":"b"} := equivalent "foo" <=> 17 := greater "foo" <=> := unordered json-3.12.0/docs/mkdocs/docs/examples/operator_spaceship__scalartype.c++20.cpp000066400000000000000000000021321477615276400272420ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; const char* to_string(const std::partial_ordering& po) { if (std::is_lt(po)) { return "less"; } else if (std::is_gt(po)) { return "greater"; } else if (std::is_eq(po)) { return "equivalent"; } return "unordered"; } int main() { using float_limits = std::numeric_limits; constexpr auto nan = float_limits::quiet_NaN(); // create several JSON values json boolean = false; json number = 17; json string = "17"; // output values and comparisons std::cout << std::boolalpha << std::fixed; std::cout << boolean << " <=> " << true << " := " << to_string(boolean <=> true) << '\n'; // *NOPAD* std::cout << number << " <=> " << 17.0 << " := " << to_string(number <=> 17.0) << '\n'; // *NOPAD* std::cout << number << " <=> " << nan << " := " << to_string(number <=> nan) << '\n'; // *NOPAD* std::cout << string << " <=> " << 17 << " := " << to_string(string <=> 17) << '\n'; // *NOPAD* } json-3.12.0/docs/mkdocs/docs/examples/operator_spaceship__scalartype.c++20.output000066400000000000000000000001451477615276400300220ustar00rootroot00000000000000false <=> true := less 17 <=> 17.000000 := equivalent 17 <=> nan := unordered "17" <=> 17 := greater json-3.12.0/docs/mkdocs/docs/examples/ordered_json.cpp000066400000000000000000000003401477615276400227250ustar00rootroot00000000000000#include #include using ordered_json = nlohmann::ordered_json; int main() { ordered_json j; j["one"] = 1; j["two"] = 2; j["three"] = 3; std::cout << j.dump(2) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/ordered_json.output000066400000000000000000000000511477615276400235020ustar00rootroot00000000000000{ "one": 1, "two": 2, "three": 3 } json-3.12.0/docs/mkdocs/docs/examples/ordered_map.cpp000066400000000000000000000021251477615276400225340ustar00rootroot00000000000000#include #include // simple output function template void output(const char* prefix, const Map& m) { std::cout << prefix << " = { "; for (auto& element : m) { std::cout << element.first << ":" << element.second << ' '; } std::cout << "}" << std::endl; } int main() { // create and fill two maps nlohmann::ordered_map m_ordered; m_ordered["one"] = "eins"; m_ordered["two"] = "zwei"; m_ordered["three"] = "drei"; std::map m_std; m_std["one"] = "eins"; m_std["two"] = "zwei"; m_std["three"] = "drei"; // output: m_ordered is ordered by insertion order, m_std is ordered by key output("m_ordered", m_ordered); output("m_std", m_std); // erase and re-add "one" key m_ordered.erase("one"); m_ordered["one"] = "eins"; m_std.erase("one"); m_std["one"] = "eins"; // output: m_ordered shows newly added key at the end; m_std is again ordered by key output("m_ordered", m_ordered); output("m_std", m_std); } json-3.12.0/docs/mkdocs/docs/examples/ordered_map.output000066400000000000000000000002541477615276400233130ustar00rootroot00000000000000m_ordered = { one:eins two:zwei three:drei } m_std = { one:eins three:drei two:zwei } m_ordered = { two:zwei three:drei one:eins } m_std = { one:eins three:drei two:zwei } json-3.12.0/docs/mkdocs/docs/examples/other_error.cpp000066400000000000000000000013011477615276400226000ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { try { // executing a failing JSON Patch operation json value = R"({ "best_biscuit": { "name": "Oreo" } })"_json; json patch = R"([{ "op": "test", "path": "/best_biscuit/name", "value": "Choco Leibniz" }])"_json; value.patch(patch); } catch (const json::other_error& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/other_error.output000066400000000000000000000002141477615276400233600ustar00rootroot00000000000000message: [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"} exception id: 501 json-3.12.0/docs/mkdocs/docs/examples/out_of_range.cpp000066400000000000000000000006421477615276400227240ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { try { // calling at() for an invalid index json j = {1, 2, 3, 4}; j.at(4) = 10; } catch (const json::out_of_range& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/out_of_range.output000066400000000000000000000001331477615276400234750ustar00rootroot00000000000000message: [json.exception.out_of_range.401] array index 4 is out of range exception id: 401 json-3.12.0/docs/mkdocs/docs/examples/parse__allow_exceptions.cpp000066400000000000000000000012341477615276400251630ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // an invalid JSON text std::string text = R"( { "key": "value without closing quotes } )"; // parse with exceptions try { json j = json::parse(text); } catch (const json::parse_error& e) { std::cout << e.what() << std::endl; } // parse without exceptions json j = json::parse(text, nullptr, false); if (j.is_discarded()) { std::cout << "the input is invalid JSON" << std::endl; } else { std::cout << "the input is valid JSON: " << j << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/parse__allow_exceptions.output000066400000000000000000000004011477615276400257340ustar00rootroot00000000000000[json.exception.parse_error.101] parse error at line 4, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \u000A or \n; last read: '"value without closing quotes' the input is invalid JSON json-3.12.0/docs/mkdocs/docs/examples/parse__array__parser_callback_t.cpp000066400000000000000000000012461477615276400265770ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a JSON text char text[] = R"( { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } } )"; // parse and serialize JSON json j_complete = json::parse(text); std::cout << std::setw(4) << j_complete << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/parse__array__parser_callback_t.output000066400000000000000000000005761477615276400273620ustar00rootroot00000000000000{ "Image": { "Animated": false, "Height": 600, "IDs": [ 116, 943, 234, 38793 ], "Thumbnail": { "Height": 125, "Url": "http://www.example.com/image/481989943", "Width": 100 }, "Title": "View from 15th Floor", "Width": 800 } } json-3.12.0/docs/mkdocs/docs/examples/parse__contiguouscontainer__parser_callback_t.cpp000066400000000000000000000005531477615276400315630ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a JSON text given as std::vector std::vector text = {'[', '1', ',', '2', ',', '3', ']', '\0'}; // parse and serialize JSON json j_complete = json::parse(text); std::cout << std::setw(4) << j_complete << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/parse__contiguouscontainer__parser_callback_t.output000066400000000000000000000000311477615276400323300ustar00rootroot00000000000000[ 1, 2, 3 ] json-3.12.0/docs/mkdocs/docs/examples/parse__istream__parser_callback_t.cpp000066400000000000000000000025121477615276400271220ustar00rootroot00000000000000#include #include #include #include using json = nlohmann::json; int main() { // a JSON text auto text = R"( { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } } )"; // fill a stream with JSON text std::stringstream ss; ss << text; // parse and serialize JSON json j_complete = json::parse(ss); std::cout << std::setw(4) << j_complete << "\n\n"; // define parser callback json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed) { // skip object elements with key "Thumbnail" if (event == json::parse_event_t::key and parsed == json("Thumbnail")) { return false; } else { return true; } }; // fill a stream with JSON text ss.clear(); ss << text; // parse (with callback) and serialize JSON json j_filtered = json::parse(ss, cb); std::cout << std::setw(4) << j_filtered << '\n'; }json-3.12.0/docs/mkdocs/docs/examples/parse__istream__parser_callback_t.output000066400000000000000000000011501477615276400276750ustar00rootroot00000000000000{ "Image": { "Animated": false, "Height": 600, "IDs": [ 116, 943, 234, 38793 ], "Thumbnail": { "Height": 125, "Url": "http://www.example.com/image/481989943", "Width": 100 }, "Title": "View from 15th Floor", "Width": 800 } } { "Image": { "Animated": false, "Height": 600, "IDs": [ 116, 943, 234, 38793 ], "Title": "View from 15th Floor", "Width": 800 } } json-3.12.0/docs/mkdocs/docs/examples/parse__iterator_pair.cpp000066400000000000000000000006471477615276400244570ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a JSON text given an input with other values std::vector input = {'[', '1', ',', '2', ',', '3', ']', 'o', 't', 'h', 'e', 'r'}; // parse and serialize JSON json j_complete = json::parse(input.begin(), input.begin() + 7); std::cout << std::setw(4) << j_complete << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/parse__iterator_pair.link000066400000000000000000000001311477615276400246160ustar00rootroot00000000000000
onlinejson-3.12.0/docs/mkdocs/docs/examples/parse__iterator_pair.output000066400000000000000000000000311477615276400252200ustar00rootroot00000000000000[ 1, 2, 3 ] json-3.12.0/docs/mkdocs/docs/examples/parse__pointers.cpp000066400000000000000000000005501477615276400234470ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a JSON text given as string that is not null-terminated const char* ptr = "[1,2,3]another value"; // parse and serialize JSON json j_complete = json::parse(ptr, ptr + 7); std::cout << std::setw(4) << j_complete << "\n\n"; } json-3.12.0/docs/mkdocs/docs/examples/parse__pointers.link000066400000000000000000000001311477615276400236150ustar00rootroot00000000000000onlinejson-3.12.0/docs/mkdocs/docs/examples/parse__pointers.output000066400000000000000000000000311477615276400242170ustar00rootroot00000000000000[ 1, 2, 3 ] json-3.12.0/docs/mkdocs/docs/examples/parse__string__parser_callback_t.cpp000066400000000000000000000022501477615276400267630ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // a JSON text auto text = R"( { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } } )"; // parse and serialize JSON json j_complete = json::parse(text); std::cout << std::setw(4) << j_complete << "\n\n"; // define parser callback json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed) { // skip object elements with key "Thumbnail" if (event == json::parse_event_t::key and parsed == json("Thumbnail")) { return false; } else { return true; } }; // parse (with callback) and serialize JSON json j_filtered = json::parse(text, cb); std::cout << std::setw(4) << j_filtered << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/parse__string__parser_callback_t.output000066400000000000000000000011501477615276400275370ustar00rootroot00000000000000{ "Image": { "Animated": false, "Height": 600, "IDs": [ 116, 943, 234, 38793 ], "Thumbnail": { "Height": 125, "Url": "http://www.example.com/image/481989943", "Width": 100 }, "Title": "View from 15th Floor", "Width": 800 } } { "Image": { "Animated": false, "Height": 600, "IDs": [ 116, 943, 234, 38793 ], "Title": "View from 15th Floor", "Width": 800 } } json-3.12.0/docs/mkdocs/docs/examples/parse_error.cpp000066400000000000000000000007171477615276400226030ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { try { // parsing input with a syntax error json::parse("[1,2,3,]"); } catch (const json::parse_error& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << '\n' << "byte position of error: " << e.byte << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/parse_error.output000066400000000000000000000003121477615276400233500ustar00rootroot00000000000000message: [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal exception id: 101 byte position of error: 8 json-3.12.0/docs/mkdocs/docs/examples/patch.cpp000066400000000000000000000013421477615276400213520ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // the original document json doc = R"( { "baz": "qux", "foo": "bar" } )"_json; // the patch json patch = R"( [ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo"} ] )"_json; // apply the patch json patched_doc = doc.patch(patch); // output original and patched document std::cout << std::setw(4) << doc << "\n\n" << std::setw(4) << patched_doc << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/patch.output000066400000000000000000000001431477615276400221260ustar00rootroot00000000000000{ "baz": "qux", "foo": "bar" } { "baz": "boo", "hello": [ "world" ] } json-3.12.0/docs/mkdocs/docs/examples/patch_inplace.cpp000066400000000000000000000014041477615276400230440ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // the original document json doc = R"( { "baz": "qux", "foo": "bar" } )"_json; // the patch json patch = R"( [ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo"} ] )"_json; // output original document std::cout << "Before\n" << std::setw(4) << doc << std::endl; // apply the patch doc.patch_inplace(patch); // output patched document std::cout << "\nAfter\n" << std::setw(4) << doc << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/patch_inplace.output000066400000000000000000000001601477615276400236200ustar00rootroot00000000000000Before { "baz": "qux", "foo": "bar" } After { "baz": "boo", "hello": [ "world" ] } json-3.12.0/docs/mkdocs/docs/examples/push_back.cpp000066400000000000000000000006701477615276400222150ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json array = {1, 2, 3, 4, 5}; json null; // print values std::cout << array << '\n'; std::cout << null << '\n'; // add values array.push_back(6); array += 7; null += "first"; null += "second"; // print values std::cout << array << '\n'; std::cout << null << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/push_back.output000066400000000000000000000000641477615276400227700ustar00rootroot00000000000000[1,2,3,4,5] null [1,2,3,4,5,6,7] ["first","second"] json-3.12.0/docs/mkdocs/docs/examples/push_back__initializer_list.cpp000066400000000000000000000011431477615276400260060ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json object = {{"one", 1}, {"two", 2}}; json null; // print values std::cout << object << '\n'; std::cout << null << '\n'; // add values: object.push_back({"three", 3}); // object is extended object += {"four", 4}; // object is extended null.push_back({"five", 5}); // null is converted to array // print values std::cout << object << '\n'; std::cout << null << '\n'; // would throw: //object.push_back({1, 2, 3}); } json-3.12.0/docs/mkdocs/docs/examples/push_back__initializer_list.output000066400000000000000000000001111477615276400265560ustar00rootroot00000000000000{"one":1,"two":2} null {"four":4,"one":1,"three":3,"two":2} [["five",5]] json-3.12.0/docs/mkdocs/docs/examples/push_back__object_t__value.cpp000066400000000000000000000011101477615276400255460ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json object = {{"one", 1}, {"two", 2}}; json null; // print values std::cout << object << '\n'; std::cout << null << '\n'; // add values object.push_back(json::object_t::value_type("three", 3)); object += json::object_t::value_type("four", 4); null += json::object_t::value_type("A", "a"); null += json::object_t::value_type("B", "b"); // print values std::cout << object << '\n'; std::cout << null << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/push_back__object_t__value.output000066400000000000000000000001161477615276400263310ustar00rootroot00000000000000{"one":1,"two":2} null {"four":4,"one":1,"three":3,"two":2} {"A":"a","B":"b"} json-3.12.0/docs/mkdocs/docs/examples/rbegin.cpp000066400000000000000000000005271477615276400215250ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to the reverse-beginning json::reverse_iterator it = array.rbegin(); // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/rbegin.output000066400000000000000000000000021477615276400222670ustar00rootroot000000000000005 json-3.12.0/docs/mkdocs/docs/examples/rend.cpp000066400000000000000000000006261477615276400212070ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create an array value json array = {1, 2, 3, 4, 5}; // get an iterator to the reverse-end json::reverse_iterator it = array.rend(); // increment the iterator to point to the first element --it; // serialize the element that the iterator points to std::cout << *it << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/rend.output000066400000000000000000000000021477615276400217510ustar00rootroot000000000000001 json-3.12.0/docs/mkdocs/docs/examples/sax_parse.cpp000066400000000000000000000063671477615276400222540ustar00rootroot00000000000000#include #include #include #include using json = nlohmann::json; // a simple event consumer that collects string representations of the passed // values; note inheriting from json::json_sax_t is not required, but can // help not to forget a required function class sax_event_consumer : public json::json_sax_t { public: std::vector events; bool null() override { events.push_back("null()"); return true; } bool boolean(bool val) override { events.push_back("boolean(val=" + std::string(val ? "true" : "false") + ")"); return true; } bool number_integer(number_integer_t val) override { events.push_back("number_integer(val=" + std::to_string(val) + ")"); return true; } bool number_unsigned(number_unsigned_t val) override { events.push_back("number_unsigned(val=" + std::to_string(val) + ")"); return true; } bool number_float(number_float_t val, const string_t& s) override { events.push_back("number_float(val=" + std::to_string(val) + ", s=" + s + ")"); return true; } bool string(string_t& val) override { events.push_back("string(val=" + val + ")"); return true; } bool start_object(std::size_t elements) override { events.push_back("start_object(elements=" + std::to_string(elements) + ")"); return true; } bool end_object() override { events.push_back("end_object()"); return true; } bool start_array(std::size_t elements) override { events.push_back("start_array(elements=" + std::to_string(elements) + ")"); return true; } bool end_array() override { events.push_back("end_array()"); return true; } bool key(string_t& val) override { events.push_back("key(val=" + val + ")"); return true; } bool binary(json::binary_t& val) override { events.push_back("binary(val=[...])"); return true; } bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override { events.push_back("parse_error(position=" + std::to_string(position) + ", last_token=" + last_token + ",\n ex=" + std::string(ex.what()) + ")"); return false; } }; int main() { // a JSON text auto text = R"( { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, -38793], "DeletionDate": null, "Distance": 12.723374634 } }] )"; // create a SAX event consumer object sax_event_consumer sec; // parse JSON bool result = json::sax_parse(text, &sec); // output the recorded events for (auto& event : sec.events) { std::cout << event << "\n"; } // output the result of sax_parse std::cout << "\nresult: " << std::boolalpha << result << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/sax_parse.output000066400000000000000000000020061477615276400230140ustar00rootroot00000000000000start_object(elements=18446744073709551615) key(val=Image) start_object(elements=18446744073709551615) key(val=Width) number_unsigned(val=800) key(val=Height) number_unsigned(val=600) key(val=Title) string(val=View from 15th Floor) key(val=Thumbnail) start_object(elements=18446744073709551615) key(val=Url) string(val=http://www.example.com/image/481989943) key(val=Height) number_unsigned(val=125) key(val=Width) number_unsigned(val=100) end_object() key(val=Animated) boolean(val=false) key(val=IDs) start_array(elements=18446744073709551615) number_unsigned(val=116) number_unsigned(val=943) number_unsigned(val=234) number_integer(val=-38793) end_array() key(val=DeletionDate) null() key(val=Distance) number_float(val=12.723375, s=12.723374634) end_object() end_object() parse_error(position=460, last_token=12.723374634 } }], ex=[json.exception.parse_error.101] parse error at line 17, column 6: syntax error while parsing value - unexpected ']'; expected end of input) result: false json-3.12.0/docs/mkdocs/docs/examples/sax_parse__binary.cpp000066400000000000000000000055651477615276400237560ustar00rootroot00000000000000#include #include #include #include using json = nlohmann::json; // a simple event consumer that collects string representations of the passed // values; note inheriting from json::json_sax_t is not required, but can // help not to forget a required function class sax_event_consumer : public json::json_sax_t { public: std::vector events; bool null() override { events.push_back("null()"); return true; } bool boolean(bool val) override { events.push_back("boolean(val=" + std::string(val ? "true" : "false") + ")"); return true; } bool number_integer(number_integer_t val) override { events.push_back("number_integer(val=" + std::to_string(val) + ")"); return true; } bool number_unsigned(number_unsigned_t val) override { events.push_back("number_unsigned(val=" + std::to_string(val) + ")"); return true; } bool number_float(number_float_t val, const string_t& s) override { events.push_back("number_float(val=" + std::to_string(val) + ", s=" + s + ")"); return true; } bool string(string_t& val) override { events.push_back("string(val=" + val + ")"); return true; } bool start_object(std::size_t elements) override { events.push_back("start_object(elements=" + std::to_string(elements) + ")"); return true; } bool end_object() override { events.push_back("end_object()"); return true; } bool start_array(std::size_t elements) override { events.push_back("start_array(elements=" + std::to_string(elements) + ")"); return true; } bool end_array() override { events.push_back("end_array()"); return true; } bool key(string_t& val) override { events.push_back("key(val=" + val + ")"); return true; } bool binary(json::binary_t& val) override { events.push_back("binary(val=[...])"); return true; } bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) override { events.push_back("parse_error(position=" + std::to_string(position) + ", last_token=" + last_token + ",\n ex=" + std::string(ex.what()) + ")"); return false; } }; int main() { // CBOR byte string std::vector vec = {{0x44, 0xcA, 0xfe, 0xba, 0xbe}}; // create a SAX event consumer object sax_event_consumer sec; // parse CBOR bool result = json::sax_parse(vec, &sec, json::input_format_t::cbor); // output the recorded events for (auto& event : sec.events) { std::cout << event << "\n"; } // output the result of sax_parse std::cout << "\nresult: " << std::boolalpha << result << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/sax_parse__binary.output000066400000000000000000000000401477615276400245130ustar00rootroot00000000000000binary(val=[...]) result: true json-3.12.0/docs/mkdocs/docs/examples/size.cpp000066400000000000000000000015401477615276400212250ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = 17; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_object_empty(json::value_t::object); json j_array = {1, 2, 4, 8, 16}; json j_array_empty(json::value_t::array); json j_string = "Hello, world"; // call size() std::cout << j_null.size() << '\n'; std::cout << j_boolean.size() << '\n'; std::cout << j_number_integer.size() << '\n'; std::cout << j_number_float.size() << '\n'; std::cout << j_object.size() << '\n'; std::cout << j_object_empty.size() << '\n'; std::cout << j_array.size() << '\n'; std::cout << j_array_empty.size() << '\n'; std::cout << j_string.size() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/size.output000066400000000000000000000000221477615276400217750ustar00rootroot000000000000000 1 1 1 2 0 5 0 1 json-3.12.0/docs/mkdocs/docs/examples/std_hash.cpp000066400000000000000000000014431477615276400220520ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { std::cout << "hash(null) = " << std::hash {}(json(nullptr)) << '\n' << "hash(false) = " << std::hash {}(json(false)) << '\n' << "hash(0) = " << std::hash {}(json(0)) << '\n' << "hash(0U) = " << std::hash {}(json(0U)) << '\n' << "hash(\"\") = " << std::hash {}(json("")) << '\n' << "hash({}) = " << std::hash {}(json::object()) << '\n' << "hash([]) = " << std::hash {}(json::array()) << '\n' << "hash({\"hello\": \"world\"}) = " << std::hash {}("{\"hello\": \"world\"}"_json) << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/std_hash.output000066400000000000000000000003261477615276400226270ustar00rootroot00000000000000hash(null) = 2654435769 hash(false) = 2654436030 hash(0) = 2654436095 hash(0U) = 2654436156 hash("") = 6142509191626859748 hash({}) = 2654435832 hash([]) = 2654435899 hash({"hello": "world"}) = 4469488738203676328 json-3.12.0/docs/mkdocs/docs/examples/std_swap.cpp000066400000000000000000000005761477615276400221070ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create JSON values json j1 = {{"one", 1}, {"two", 2}}; json j2 = {1, 2, 4, 8, 16}; std::cout << "j1 = " << j1 << " | j2 = " << j2 << '\n'; // swap values std::swap(j1, j2); std::cout << "j1 = " << j1 << " | j2 = " << j2 << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/std_swap.output000066400000000000000000000001261477615276400226540ustar00rootroot00000000000000j1 = {"one":1,"two":2} | j2 = [1,2,4,8,16] j1 = [1,2,4,8,16] | j2 = {"one":1,"two":2} json-3.12.0/docs/mkdocs/docs/examples/string_t.cpp000066400000000000000000000003241477615276400221030ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::boolalpha << std::is_same::value << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/string_t.output000066400000000000000000000000051477615276400226550ustar00rootroot00000000000000true json-3.12.0/docs/mkdocs/docs/examples/swap__array_t.cpp000066400000000000000000000006741477615276400231140ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON value json value = {{"array", {1, 2, 3, 4}}}; // create an array_t json::array_t array = {"Snap", "Crackle", "Pop"}; // swap the array stored in the JSON value value["array"].swap(array); // output the values std::cout << "value = " << value << '\n'; std::cout << "array = " << array << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/swap__array_t.output000066400000000000000000000000751477615276400236650ustar00rootroot00000000000000value = {"array":["Snap","Crackle","Pop"]} array = [1,2,3,4] json-3.12.0/docs/mkdocs/docs/examples/swap__binary_t.cpp000066400000000000000000000006601477615276400232550ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a binary value json value = json::binary({1, 2, 3}); // create a binary_t json::binary_t binary = {{4, 5, 6}}; // swap the object stored in the JSON value value.swap(binary); // output the values std::cout << "value = " << value << '\n'; std::cout << "binary = " << json(binary) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/swap__binary_t.output000066400000000000000000000001231477615276400240250ustar00rootroot00000000000000value = {"bytes":[4,5,6],"subtype":null} binary = {"bytes":[1,2,3],"subtype":null} json-3.12.0/docs/mkdocs/docs/examples/swap__object_t.cpp000066400000000000000000000007561477615276400232450ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON value json value = { {"translation", {{"one", "eins"}, {"two", "zwei"}}} }; // create an object_t json::object_t object = {{"cow", "Kuh"}, {"dog", "Hund"}}; // swap the object stored in the JSON value value["translation"].swap(object); // output the values std::cout << "value = " << value << '\n'; std::cout << "object = " << object << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/swap__object_t.output000066400000000000000000000001301477615276400240050ustar00rootroot00000000000000value = {"translation":{"cow":"Kuh","dog":"Hund"}} object = {"one":"eins","two":"zwei"} json-3.12.0/docs/mkdocs/docs/examples/swap__reference.cpp000066400000000000000000000005641477615276400234070ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create two JSON values json j1 = {1, 2, 3, 4, 5}; json j2 = {{"pi", 3.141592653589793}, {"e", 2.718281828459045}}; // swap the values j1.swap(j2); // output the values std::cout << "j1 = " << j1 << '\n'; std::cout << "j2 = " << j2 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/swap__reference.output000066400000000000000000000001051477615276400241540ustar00rootroot00000000000000j1 = {"e":2.718281828459045,"pi":3.141592653589793} j2 = [1,2,3,4,5] json-3.12.0/docs/mkdocs/docs/examples/swap__string_t.cpp000066400000000000000000000006661477615276400233050ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON value json value = { "the good", "the bad", "the ugly" }; // create string_t json::string_t string = "the fast"; // swap the object stored in the JSON value value[1].swap(string); // output the values std::cout << "value = " << value << '\n'; std::cout << "string = " << string << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/swap__string_t.output000066400000000000000000000000741477615276400240540ustar00rootroot00000000000000value = ["the good","the fast","the ugly"] string = the bad json-3.12.0/docs/mkdocs/docs/examples/to_bjdata.cpp000066400000000000000000000027111477615276400222030ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; // function to print BJData's diagnostic format void print_byte(uint8_t byte) { if (32 < byte and byte < 128) { std::cout << (char)byte; } else { std::cout << (int)byte; } } int main() { // create a JSON value json j = R"({"compact": true, "schema": false})"_json; // serialize it to BJData std::vector v = json::to_bjdata(j); // print the vector content for (auto& byte : v) { print_byte(byte); } std::cout << std::endl; // create an array of numbers json array = {1, 2, 3, 4, 5, 6, 7, 8}; // serialize it to BJData using default representation std::vector v_array = json::to_bjdata(array); // serialize it to BJData using size optimization std::vector v_array_size = json::to_bjdata(array, true); // serialize it to BJData using type optimization std::vector v_array_size_and_type = json::to_bjdata(array, true, true); // print the vector contents for (auto& byte : v_array) { print_byte(byte); } std::cout << std::endl; for (auto& byte : v_array_size) { print_byte(byte); } std::cout << std::endl; for (auto& byte : v_array_size_and_type) { print_byte(byte); } std::cout << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_bjdata.output000066400000000000000000000001151477615276400227550ustar00rootroot00000000000000{i7compactTi6schemaF} [i1i2i3i4i5i6i7i8] [#i8i1i2i3i4i5i6i7i8 [$i#i812345678 json-3.12.0/docs/mkdocs/docs/examples/to_bson.cpp000066400000000000000000000007731477615276400217250ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = R"({"compact": true, "schema": 0})"_json; // serialize it to BSON std::vector v = json::to_bson(j); // print the vector content for (auto& byte : v) { std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << " "; } std::cout << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_bson.output000066400000000000000000000002101477615276400224650ustar00rootroot000000000000000x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 json-3.12.0/docs/mkdocs/docs/examples/to_cbor.cpp000066400000000000000000000007731477615276400217110ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = R"({"compact": true, "schema": 0})"_json; // serialize it to CBOR std::vector v = json::to_cbor(j); // print the vector content for (auto& byte : v) { std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << " "; } std::cout << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_cbor.output000066400000000000000000000001331477615276400224550ustar00rootroot000000000000000xa2 0x67 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xf5 0x66 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 json-3.12.0/docs/mkdocs/docs/examples/to_json.cpp000066400000000000000000000010011477615276400217160ustar00rootroot00000000000000#include #include using json = nlohmann::json; namespace ns { // a simple struct to model a person struct person { std::string name; std::string address; int age; }; } // namespace ns namespace ns { void to_json(json& j, const person& p) { j = json{ {"name", p.name}, {"address", p.address}, {"age", p.age} }; } } // namespace ns int main() { ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; json j = p; std::cout << j << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_json.output000066400000000000000000000001031477615276400224760ustar00rootroot00000000000000{"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} json-3.12.0/docs/mkdocs/docs/examples/to_msgpack.cpp000066400000000000000000000010051477615276400223760ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON value json j = R"({"compact": true, "schema": 0})"_json; // serialize it to MessagePack std::vector v = json::to_msgpack(j); // print the vector content for (auto& byte : v) { std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << " "; } std::cout << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_msgpack.output000066400000000000000000000001331477615276400231550ustar00rootroot000000000000000x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 json-3.12.0/docs/mkdocs/docs/examples/to_string.cpp000066400000000000000000000007301477615276400222630ustar00rootroot00000000000000#include #include using json = nlohmann::json; using std::to_string; int main() { // create values json j = {{"one", 1}, {"two", 2}}; int i = 42; // use ADL to select best to_string function auto j_str = to_string(j); // calling nlohmann::to_string auto i_str = to_string(i); // calling std::to_string // serialize without indentation std::cout << j_str << "\n\n" << i_str << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_string.output000066400000000000000000000000261477615276400230370ustar00rootroot00000000000000{"one":1,"two":2} 42 json-3.12.0/docs/mkdocs/docs/examples/to_ubjson.cpp000066400000000000000000000027111477615276400222560ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; // function to print UBJSON's diagnostic format void print_byte(uint8_t byte) { if (32 < byte and byte < 128) { std::cout << (char)byte; } else { std::cout << (int)byte; } } int main() { // create a JSON value json j = R"({"compact": true, "schema": false})"_json; // serialize it to UBJSON std::vector v = json::to_ubjson(j); // print the vector content for (auto& byte : v) { print_byte(byte); } std::cout << std::endl; // create an array of numbers json array = {1, 2, 3, 4, 5, 6, 7, 8}; // serialize it to UBJSON using default representation std::vector v_array = json::to_ubjson(array); // serialize it to UBJSON using size optimization std::vector v_array_size = json::to_ubjson(array, true); // serialize it to UBJSON using type optimization std::vector v_array_size_and_type = json::to_ubjson(array, true, true); // print the vector contents for (auto& byte : v_array) { print_byte(byte); } std::cout << std::endl; for (auto& byte : v_array_size) { print_byte(byte); } std::cout << std::endl; for (auto& byte : v_array_size_and_type) { print_byte(byte); } std::cout << std::endl; } json-3.12.0/docs/mkdocs/docs/examples/to_ubjson.output000066400000000000000000000001151477615276400230300ustar00rootroot00000000000000{i7compactTi6schemaF} [i1i2i3i4i5i6i7i8] [#i8i1i2i3i4i5i6i7i8 [$i#i812345678 json-3.12.0/docs/mkdocs/docs/examples/type.cpp000066400000000000000000000020071477615276400212330ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = -17; json j_number_unsigned = 42u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call type() std::cout << std::boolalpha; std::cout << (j_null.type() == json::value_t::null) << '\n'; std::cout << (j_boolean.type() == json::value_t::boolean) << '\n'; std::cout << (j_number_integer.type() == json::value_t::number_integer) << '\n'; std::cout << (j_number_unsigned.type() == json::value_t::number_unsigned) << '\n'; std::cout << (j_number_float.type() == json::value_t::number_float) << '\n'; std::cout << (j_object.type() == json::value_t::object) << '\n'; std::cout << (j_array.type() == json::value_t::array) << '\n'; std::cout << (j_string.type() == json::value_t::string) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/type.output000066400000000000000000000000501477615276400220050ustar00rootroot00000000000000true true true true true true true true json-3.12.0/docs/mkdocs/docs/examples/type_error.cpp000066400000000000000000000006611477615276400224500ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { try { // calling push_back() on a string value json j = "string"; j.push_back("another string"); } catch (const json::type_error& e) { // output exception information std::cout << "message: " << e.what() << '\n' << "exception id: " << e.id << std::endl; } } json-3.12.0/docs/mkdocs/docs/examples/type_error.output000066400000000000000000000001361477615276400232230ustar00rootroot00000000000000message: [json.exception.type_error.308] cannot use push_back() with string exception id: 308 json-3.12.0/docs/mkdocs/docs/examples/type_name.cpp000066400000000000000000000017751477615276400222460ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create JSON values json j_null; json j_boolean = true; json j_number_integer = -17; json j_number_unsigned = 42u; json j_number_float = 23.42; json j_object = {{"one", 1}, {"two", 2}}; json j_array = {1, 2, 4, 8, 16}; json j_string = "Hello, world"; // call type_name() std::cout << j_null << " is a " << j_null.type_name() << '\n'; std::cout << j_boolean << " is a " << j_boolean.type_name() << '\n'; std::cout << j_number_integer << " is a " << j_number_integer.type_name() << '\n'; std::cout << j_number_unsigned << " is a " << j_number_unsigned.type_name() << '\n'; std::cout << j_number_float << " is a " << j_number_float.type_name() << '\n'; std::cout << j_object << " is an " << j_object.type_name() << '\n'; std::cout << j_array << " is an " << j_array.type_name() << '\n'; std::cout << j_string << " is a " << j_string.type_name() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/type_name.output000066400000000000000000000002451477615276400230130ustar00rootroot00000000000000null is a null true is a boolean -17 is a number 42 is a number 23.42 is a number {"one":1,"two":2} is an object [1,2,4,8,16] is an array "Hello, world" is a string json-3.12.0/docs/mkdocs/docs/examples/unflatten.cpp000066400000000000000000000010511477615276400222500ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { // create JSON value json j_flattened = { {"/answer/everything", 42}, {"/happy", true}, {"/list/0", 1}, {"/list/1", 0}, {"/list/2", 2}, {"/name", "Niels"}, {"/nothing", nullptr}, {"/object/currency", "USD"}, {"/object/value", 42.99}, {"/pi", 3.141} }; // call unflatten() std::cout << std::setw(4) << j_flattened.unflatten() << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/unflatten.output000066400000000000000000000003771477615276400230400ustar00rootroot00000000000000{ "answer": { "everything": 42 }, "happy": true, "list": [ 1, 0, 2 ], "name": "Niels", "nothing": null, "object": { "currency": "USD", "value": 42.99 }, "pi": 3.141 } json-3.12.0/docs/mkdocs/docs/examples/update.cpp000066400000000000000000000012631477615276400215370ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create two JSON objects json o1 = R"( {"color": "red", "price": 17.99, "names": {"de": "Flugzeug"}} )"_json; json o2 = R"( {"color": "blue", "speed": 100, "names": {"en": "plane"}} )"_json; json o3 = o1; // add all keys from o2 to o1 (updating "color", replacing "names") o1.update(o2); // add all keys from o2 to o1 (updating "color", merging "names") o3.update(o2, true); // output updated object o1 and o3 std::cout << std::setw(2) << o1 << '\n'; std::cout << std::setw(2) << o3 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/update.output000066400000000000000000000003161477615276400223130ustar00rootroot00000000000000{ "color": "blue", "names": { "en": "plane" }, "price": 17.99, "speed": 100 } { "color": "blue", "names": { "de": "Flugzeug", "en": "plane" }, "price": 17.99, "speed": 100 } json-3.12.0/docs/mkdocs/docs/examples/update__range.cpp000066400000000000000000000013271477615276400230530ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create two JSON objects json o1 = R"( {"color": "red", "price": 17.99, "names": {"de": "Flugzeug"}} )"_json; json o2 = R"( {"color": "blue", "speed": 100, "names": {"en": "plane"}} )"_json; json o3 = o1; // add all keys from o2 to o1 (updating "color", replacing "names") o1.update(o2.begin(), o2.end()); // add all keys from o2 to o1 (updating "color", merging "names") o3.update(o2.begin(), o2.end(), true); // output updated object o1 and o3 std::cout << std::setw(2) << o1 << '\n'; std::cout << std::setw(2) << o3 << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/update__range.output000066400000000000000000000003161477615276400236260ustar00rootroot00000000000000{ "color": "blue", "names": { "en": "plane" }, "price": 17.99, "speed": 100 } { "color": "blue", "names": { "de": "Flugzeug", "en": "plane" }, "price": 17.99, "speed": 100 } json-3.12.0/docs/mkdocs/docs/examples/value__json_ptr.cpp000066400000000000000000000016131477615276400234450ustar00rootroot00000000000000#include #include using json = nlohmann::json; using namespace nlohmann::literals; int main() { // create a JSON object with different entry types json j = { {"integer", 1}, {"floating", 42.23}, {"string", "hello world"}, {"boolean", true}, {"object", {{"key1", 1}, {"key2", 2}}}, {"array", {1, 2, 3}} }; // access existing values int v_integer = j.value("/integer"_json_pointer, 0); double v_floating = j.value("/floating"_json_pointer, 47.11); // access nonexisting values and rely on default value std::string v_string = j.value("/nonexisting"_json_pointer, "oops"); bool v_boolean = j.value("/nonexisting"_json_pointer, false); // output values std::cout << std::boolalpha << v_integer << " " << v_floating << " " << v_string << " " << v_boolean << "\n"; } json-3.12.0/docs/mkdocs/docs/examples/value__json_ptr.output000066400000000000000000000000231477615276400242150ustar00rootroot000000000000001 42.23 oops false json-3.12.0/docs/mkdocs/docs/examples/value__keytype.c++17.cpp000066400000000000000000000015711477615276400240230ustar00rootroot00000000000000#include #include #include using namespace std::string_view_literals; using json = nlohmann::json; int main() { // create a JSON object with different entry types json j = { {"integer", 1}, {"floating", 42.23}, {"string", "hello world"}, {"boolean", true}, {"object", {{"key1", 1}, {"key2", 2}}}, {"array", {1, 2, 3}} }; // access existing values int v_integer = j.value("integer"sv, 0); double v_floating = j.value("floating"sv, 47.11); // access nonexisting values and rely on default value std::string v_string = j.value("nonexisting"sv, "oops"); bool v_boolean = j.value("nonexisting"sv, false); // output values std::cout << std::boolalpha << v_integer << " " << v_floating << " " << v_string << " " << v_boolean << "\n"; } json-3.12.0/docs/mkdocs/docs/examples/value__keytype.c++17.output000066400000000000000000000000231477615276400245700ustar00rootroot000000000000001 42.23 oops false json-3.12.0/docs/mkdocs/docs/examples/value__object_t_key_type.cpp000066400000000000000000000014571477615276400253170ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { // create a JSON object with different entry types json j = { {"integer", 1}, {"floating", 42.23}, {"string", "hello world"}, {"boolean", true}, {"object", {{"key1", 1}, {"key2", 2}}}, {"array", {1, 2, 3}} }; // access existing values int v_integer = j.value("integer", 0); double v_floating = j.value("floating", 47.11); // access nonexisting values and rely on default value std::string v_string = j.value("nonexisting", "oops"); bool v_boolean = j.value("nonexisting", false); // output values std::cout << std::boolalpha << v_integer << " " << v_floating << " " << v_string << " " << v_boolean << "\n"; } json-3.12.0/docs/mkdocs/docs/examples/value__object_t_key_type.output000066400000000000000000000000231477615276400260610ustar00rootroot000000000000001 42.23 oops false json-3.12.0/docs/mkdocs/docs/examples/value__return_type.cpp000066400000000000000000000007631477615276400241740ustar00rootroot00000000000000#include #include using json = nlohmann::json; int main() { json j = json::parse(R"({"uint64": 18446744073709551615})"); std::cout << "operator[]: " << j["uint64"] << '\n' << "default value (int): " << j.value("uint64", 0) << '\n' << "default value (uint64_t): " << j.value("uint64", std::uint64_t(0)) << '\n' << "explict return value type: " << j.value("uint64", 0) << '\n'; } json-3.12.0/docs/mkdocs/docs/examples/value__return_type.output000066400000000000000000000002561477615276400247470ustar00rootroot00000000000000operator[]: 18446744073709551615 default value (int): -1 default value (uint64_t): 18446744073709551615 explict return value type: 18446744073709551615 json-3.12.0/docs/mkdocs/docs/features/000077500000000000000000000000001477615276400175475ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/features/arbitrary_types.md000066400000000000000000000407451477615276400233260ustar00rootroot00000000000000# Arbitrary Type Conversions Every type can be serialized in JSON, not just STL containers and scalar types. Usually, you would do something along those lines: ```cpp namespace ns { // a simple struct to model a person struct person { std::string name; std::string address; int age; }; } // namespace ns ns::person p = {"Ned Flanders", "744 Evergreen Terrace", 60}; // convert to JSON: copy each value into the JSON object json j; j["name"] = p.name; j["address"] = p.address; j["age"] = p.age; // ... // convert from JSON: copy each value from the JSON object ns::person p { j["name"].template get(), j["address"].template get(), j["age"].template get() }; ``` It works, but that's quite a lot of boilerplate... Fortunately, there's a better way: ```cpp // create a person ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60}; // conversion: person -> json json j = p; std::cout << j << std::endl; // {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"} // conversion: json -> person auto p2 = j.template get(); // that's it assert(p == p2); ``` ## Basic usage To make this work with one of your types, you only need to provide two functions: ```cpp using json = nlohmann::json; namespace ns { void to_json(json& j, const person& p) { j = json{ {"name", p.name}, {"address", p.address}, {"age", p.age} }; } void from_json(const json& j, person& p) { j.at("name").get_to(p.name); j.at("address").get_to(p.address); j.at("age").get_to(p.age); } } // namespace ns ``` That's all! When calling the `json` constructor with your type, your custom `to_json` method will be automatically called. Likewise, when calling `template get()` or `get_to(your_type&)`, the `from_json` method will be called. Some important things: * Those methods **MUST** be in your type's namespace (which can be the global namespace), or the library will not be able to locate them (in this example, they are in namespace `ns`, where `person` is defined). * Those methods **MUST** be available (e.g., proper headers must be included) everywhere you use these conversions. Look at [#1108](https://github.com/nlohmann/json/issues/1108) for errors that may occur otherwise. * When using `template get()`, `your_type` **MUST** be [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). (There is a way to bypass this requirement described later.) * In function `from_json`, use function [`at()`](../api/basic_json/at.md) to access the object values rather than `operator[]`. In case a key does not exist, `at` throws an exception that you can handle, whereas `operator[]` exhibits undefined behavior. * You do not need to add serializers or deserializers for STL types like `std::vector`: the library already implements these. ## Simplify your life with macros If you just want to serialize/deserialize some structs, the `to_json`/`from_json` functions can be a lot of boilerplate. There are six macros to make your life easier as long as you (1) want to use a JSON object as serialization and (2) want to use the member variable names as object keys in that object: - [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_non_intrusive.md) is to be defined inside the namespace of the class/struct to create code for. It will throw an exception in `from_json()` due to a missing value in the JSON object. - [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_non_intrusive.md) is to be defined inside the namespace of the class/struct to create code for. It will not throw an exception in `from_json()` due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type. - [`NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_non_intrusive.md) is to be defined inside the namespace of the class/struct to create code for. It does not define a `from_json()` function which is needed in case the type does not have a default constructor. - [`NLOHMANN_DEFINE_TYPE_INTRUSIVE(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_intrusive.md) is to be defined inside the class/struct to create code for. This macro can also access private members. It will throw an exception in `from_json()` due to a missing value in the JSON object. - [`NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_intrusive.md) is to be defined inside the class/struct to create code for. This macro can also access private members. It will not throw an exception in `from_json()` due to a missing value in the JSON object, but fills in values from an object which is default-constructed by the type. - [`NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(name, member1, member2, ...)`](../api/macros/nlohmann_define_type_intrusive.md) is to be defined inside the class/struct to create code for. This macro can also access private members. It does not define a `from_json()` function which is needed in case the type does not have a default constructor. Furthermore, there exist versions to use in the case of derived classes: | Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro | |------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------| |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| [**NLOHMANN_DEFINE_TYPE_INTRUSIVE**](../api/macros/nlohmann_define_type_intrusive.md) | |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT**](../api/macros/nlohmann_define_type_intrusive.md) | |
:octicons-check-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| [**NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE**](../api/macros/nlohmann_define_type_intrusive.md) | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE**](../api/macros/nlohmann_define_type_non_intrusive.md) | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](../api/macros/nlohmann_define_type_non_intrusive.md) | |
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| [**NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](../api/macros/nlohmann_define_type_non_intrusive.md) | For _derived_ classes and structs, use the following macros | Need access to private members | Need only de-serialization | Allow missing values when de-serializing | macro | |------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE**](../api/macros/nlohmann_define_derived_type.md) | |
:octicons-check-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT**](../api/macros/nlohmann_define_derived_type.md) | |
:octicons-check-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE**](../api/macros/nlohmann_define_derived_type.md) | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE**](../api/macros/nlohmann_define_derived_type.md) | |
:octicons-x-circle-fill-24:
|
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT**](../api/macros/nlohmann_define_derived_type.md) | |
:octicons-x-circle-fill-24:
|
:octicons-check-circle-fill-24:
|
:octicons-skip-fill-24:
| [**NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE**](../api/macros/nlohmann_define_derived_type.md) | !!! info "Implementation limits" - The current macro implementations are limited to at most 64 member variables. If you want to serialize/deserialize types with more than 64 member variables, you need to define the `to_json`/`from_json` functions manually. ??? example The `to_json`/`from_json` functions for the `person` struct above can be created with: ```cpp namespace ns { NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, address, age) } ``` Here is an example with private members, where `NLOHMANN_DEFINE_TYPE_INTRUSIVE` is needed: ```cpp namespace ns { class address { private: std::string street; int housenumber; int postcode; public: NLOHMANN_DEFINE_TYPE_INTRUSIVE(address, street, housenumber, postcode) }; } ``` ## How do I convert third-party types? This requires a bit more advanced technique. But first, let us see how this conversion mechanism works: The library uses **JSON Serializers** to convert types to JSON. The default serializer for `nlohmann::json` is `nlohmann::adl_serializer` (ADL means [Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)). It is implemented like this (simplified): ```cpp template struct adl_serializer { static void to_json(json& j, const T& value) { // calls the "to_json" method in T's namespace } static void from_json(const json& j, T& value) { // same thing, but with the "from_json" method } }; ``` This serializer works fine when you have control over the type's namespace. However, what about `boost::optional` or `std::filesystem::path` (C++17)? Hijacking the `boost` namespace is pretty bad, and it's illegal to add something other than template specializations to `std`... To solve this, you need to add a specialization of `adl_serializer` to the `nlohmann` namespace, here's an example: ```cpp // partial specialization (full specialization works too) NLOHMANN_JSON_NAMESPACE_BEGIN template struct adl_serializer> { static void to_json(json& j, const boost::optional& opt) { if (opt == boost::none) { j = nullptr; } else { j = *opt; // this will call adl_serializer::to_json which will // find the free function to_json in T's namespace! } } static void from_json(const json& j, boost::optional& opt) { if (j.is_null()) { opt = boost::none; } else { opt = j.template get(); // same as above, but with // adl_serializer::from_json } } }; NLOHMANN_JSON_NAMESPACE_END ``` !!! note "ABI compatibility" Use [`NLOHMANN_JSON_NAMESPACE_BEGIN`](../api/macros/nlohmann_json_namespace_begin.md) and `NLOHMANN_JSON_NAMESPACE_END` instead of `#!cpp namespace nlohmann { }` in code which may be linked with different versions of this library. ## How can I use `get()` for non-default constructible/non-copyable types? There is a way if your type is [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible). You will need to specialize the `adl_serializer` as well, but with a special `from_json` overload: ```cpp struct move_only_type { move_only_type() = delete; move_only_type(int ii): i(ii) {} move_only_type(const move_only_type&) = delete; move_only_type(move_only_type&&) = default; int i; }; namespace nlohmann { template <> struct adl_serializer { // note: the return type is no longer 'void', and the method only takes // one argument static move_only_type from_json(const json& j) { return {j.template get()}; } // Here's the catch! You must provide a to_json method! Otherwise, you // will not be able to convert move_only_type to json, since you fully // specialized adl_serializer on that type static void to_json(json& j, move_only_type t) { j = t.i; } }; } ``` ## Can I write my own serializer? (Advanced use) Yes. You might want to take a look at [`unit-udt.cpp`](https://github.com/nlohmann/json/blob/develop/tests/src/unit-udt.cpp) in the test suite, to see a few examples. If you write your own serializer, you will need to do a few things: - use a different `basic_json` alias than `nlohmann::json` (the last template parameter of `basic_json` is the `JSONSerializer`) - use your `basic_json` alias (or a template parameter) in all your `to_json`/`from_json` methods - use `nlohmann::to_json` and `nlohmann::from_json` when you need ADL Here is an example, without simplifications, that only accepts types with a size <= 32, and uses ADL. ```cpp // You should use void as a second template argument // if you don't need compile-time checks on T template::type> struct less_than_32_serializer { template static void to_json(BasicJsonType& j, T value) { // we want to use ADL, and call the correct to_json overload using nlohmann::to_json; // this method is called by adl_serializer, // this is where the magic happens to_json(j, value); } template static void from_json(const BasicJsonType& j, T& value) { // same thing here using nlohmann::from_json; from_json(j, value); } }; ``` Be **very** careful when reimplementing your serializer, you can stack overflow if you don't pay attention: ```cpp template struct bad_serializer { template static void to_json(BasicJsonType& j, const T& value) { // this calls BasicJsonType::json_serializer::to_json(j, value); // if BasicJsonType::json_serializer == bad_serializer ... oops! j = value; } template static void from_json(const BasicJsonType& j, T& value) { // this calls BasicJsonType::json_serializer::from_json(j, value); // if BasicJsonType::json_serializer == bad_serializer ... oops! value = j.template template get(); // oops! } }; ``` json-3.12.0/docs/mkdocs/docs/features/assertions.md000066400000000000000000000104071477615276400222650ustar00rootroot00000000000000# Runtime Assertions The code contains numerous debug assertions to ensure class invariants are valid or to detect undefined behavior. Whereas the former class invariants are nothing to be concerned with, the latter checks for undefined behavior are to detect bugs in client code. ## Switch off runtime assertions Runtime assertions can be switched off by defining the preprocessor macro `NDEBUG` (see the [documentation of assert](https://en.cppreference.com/w/cpp/error/assert)) which is the default for release builds. ## Change assertion behavior The behavior of runtime assertions can be changes by defining macro [`JSON_ASSERT(x)`](../api/macros/json_assert.md) before including the `json.hpp` header. ## Function with runtime assertions ### Unchecked object access to a const value Function [`operator[]`](../api/basic_json/operator%5B%5D.md) implements unchecked access for objects. Whereas a missing key is added in the case of non-const objects, accessing a const object with a missing key is undefined behavior (think of a dereferenced null pointer) and yields a runtime assertion. If you are not sure whether an element in an object exists, use checked access with the [`at` function](../api/basic_json/at.md) or call the [`contains` function](../api/basic_json/contains.md) before. See also the documentation on [element access](element_access/index.md). ??? example "Example 1: Missing object key" The following code will trigger an assertion at runtime: ```cpp #include using json = nlohmann::json; int main() { const json j = {{"key", "value"}}; auto v = j["missing"]; } ``` Output: ``` Assertion failed: (m_value.object->find(key) != m_value.object->end()), function operator[], file json.hpp, line 2144. ``` ### Constructing from an uninitialized iterator range Constructing a JSON value from an iterator range (see [constructor](../api/basic_json/basic_json.md)) with an uninitialized iterator is undefined behavior and yields a runtime assertion. ??? example "Example 2: Uninitialized iterator range" The following code will trigger an assertion at runtime: ```cpp #include using json = nlohmann::json; int main() { json::iterator it1, it2; json j(it1, it2); } ``` Output: ``` Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368. ``` ### Operations on uninitialized iterators Any operation on uninitialized iterators (i.e., iterators that are not associated with any JSON value) is undefined behavior and yields a runtime assertion. ??? example "Example 3: Uninitialized iterator" The following code will trigger an assertion at runtime: ```cpp #include using json = nlohmann::json; int main() { json::iterator it; ++it; } ``` Output: ``` Assertion failed: (m_object != nullptr), function operator++, file iter_impl.hpp, line 368. ``` ## Changes ### Reading from a null `FILE` or `char` pointer Reading from a null `#!cpp FILE` or `#!cpp char` pointer in C++ is undefined behavior. Until version 3.12.0, this library asserted that the pointer was not `nullptr` using a runtime assertion. If assertions were disabled, this would result in undefined behavior. Since version 3.12.0, this library checks for `nullptr` and throws a [`parse_error.101`](../home/exceptions.md#jsonexceptionparse_error101) to prevent the undefined behavior. ??? example "Example 4: Reading from null pointer" The following code will trigger an assertion at runtime: ```cpp #include #include using json = nlohmann::json; int main() { std::FILE* f = std::fopen("nonexistent_file.json", "r"); try { json j = json::parse(f); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } } ``` Output: ``` [json.exception.parse_error.101] parse error: attempting to parse an empty input; check that your input string or stream contains the expected JSON ``` ## See also - [JSON_ASSERT](../api/macros/json_assert.md) - control behavior of runtime assertions json-3.12.0/docs/mkdocs/docs/features/binary_formats/000077500000000000000000000000001477615276400225665ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/features/binary_formats/bjdata.md000066400000000000000000000257251477615276400243500ustar00rootroot00000000000000# BJData The [BJData format](https://neurojson.org) was derived from and improved upon [Universal Binary JSON(UBJSON)](https://ubjson.org) specification (Draft 12). Specifically, it introduces an optimized array container for efficient storage of N-dimensional packed arrays (**ND-arrays**); it also adds 5 new type markers - `[u] - uint16`, `[m] - uint32`, `[M] - uint64`, `[h] - float16` and `[B] - byte` - to unambiguously map common binary numeric types; furthermore, it uses little-endian (LE) to store all numerics instead of big-endian (BE) as in UBJSON to avoid unnecessary conversions on commonly available platforms. Compared to other binary JSON-like formats such as MessagePack and CBOR, both BJData and UBJSON demonstrate a rare combination of being both binary and **quasi-human-readable**. This is because all semantic elements in BJData and UBJSON, including the data-type markers and name/string types, are directly human-readable. Data stored in the BJData/UBJSON format is not only compact in size, fast to read/write, but also can be directly searched or read using simple processing. !!! abstract "References" - [BJData Specification](https://neurojson.org/bjdata/draft2) ## Serialization The library uses the following mapping from JSON values types to BJData types according to the BJData specification: | JSON value type | value/range | BJData type | marker | |-----------------|-------------------------------------------|----------------|--------| | null | `null` | null | `Z` | | boolean | `true` | true | `T` | | boolean | `false` | false | `F` | | number_integer | -9223372036854775808..-2147483649 | int64 | `L` | | number_integer | -2147483648..-32769 | int32 | `l` | | number_integer | -32768..-129 | int16 | `I` | | number_integer | -128..127 | int8 | `i` | | number_integer | 128..255 | uint8 | `U` | | number_integer | 256..32767 | int16 | `I` | | number_integer | 32768..65535 | uint16 | `u` | | number_integer | 65536..2147483647 | int32 | `l` | | number_integer | 2147483648..4294967295 | uint32 | `m` | | number_integer | 4294967296..9223372036854775807 | int64 | `L` | | number_integer | 9223372036854775808..18446744073709551615 | uint64 | `M` | | number_unsigned | 0..127 | int8 | `i` | | number_unsigned | 128..255 | uint8 | `U` | | number_unsigned | 256..32767 | int16 | `I` | | number_unsigned | 32768..65535 | uint16 | `u` | | number_unsigned | 65536..2147483647 | int32 | `l` | | number_unsigned | 2147483648..4294967295 | uint32 | `m` | | number_unsigned | 4294967296..9223372036854775807 | int64 | `L` | | number_unsigned | 9223372036854775808..18446744073709551615 | uint64 | `M` | | number_float | *any value* | float64 | `D` | | string | *with shortest length indicator* | string | `S` | | array | *see notes on optimized format/ND-array* | array | `[` | | object | *see notes on optimized format* | map | `{` | | binary | *see notes on binary values* | array | `[$B` | !!! success "Complete mapping" The mapping is **complete** in the sense that any JSON value type can be converted to a BJData value. Any BJData output created by `to_bjdata` can be successfully parsed by `from_bjdata`. !!! warning "Size constraints" The following values can **not** be converted to a BJData value: - strings with more than 18446744073709551615 bytes, i.e., $2^{64}-1$ bytes (theoretical) !!! info "Unused BJData markers" The following markers are not used in the conversion: - `Z`: no-op values are not created. - `C`: single-byte strings are serialized with `S` markers. !!! info "NaN/infinity handling" If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the `dump()` function which serializes NaN or Infinity to `#!json null`. !!! info "Endianness" A breaking difference between BJData and UBJSON is the endianness of numerical values. In BJData, all numerical data types (integers `UiuImlML` and floating-point values `hdD`) are stored in the little-endian (LE) byte order as opposed to big-endian as used by UBJSON. Adopting LE to store numeric records avoids unnecessary byte swapping on most modern computers where LE is used as the default byte order. !!! info "Optimized formats" Optimized formats for containers are supported via two parameters of [`to_bjdata`](../../api/basic_json/to_bjdata.md): - Parameter `use_size` adds size information to the beginning of a container and removes the closing marker. - Parameter `use_type` further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The `use_type` parameter must only be used together with `use_size = true`. Note that `use_size = true` alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed of the number of elements in the container. !!! info "ND-array optimized format" BJData extends UBJSON's optimized array **size** marker to support ND-arrays of uniform numerical data types (referred to as *packed arrays*). For example, the 2-D `uint8` integer array `[[1,2],[3,4],[5,6]]`, stored as nested optimized array in UBJSON `[ [$U#i2 1 2 [$U#i2 3 4 [$U#i2 5 6 ]`, can be further compressed in BJData to `[$U#[$i#i2 2 3 1 2 3 4 5 6` or `[$U#[i2 i3] 1 2 3 4 5 6`. To maintain type and size information, ND-arrays are converted to JSON objects following the **annotated array format** (defined in the [JData specification (Draft 3)][JDataAAFmt]), when parsed using [`from_bjdata`](../../api/basic_json/from_bjdata.md). For example, the above 2-D `uint8` array can be parsed and accessed as ```json { "_ArrayType_": "uint8", "_ArraySize_": [2,3], "_ArrayData_": [1,2,3,4,5,6] } ``` Likewise, when a JSON object in the above form is serialzed using [`to_bjdata`](../../api/basic_json/to_bjdata.md), it is automatically converted into a compact BJData ND-array. The only exception is, that when the 1-dimensional vector stored in `"_ArraySize_"` contains a single integer or two integers with one being 1, a regular 1-D optimized array is generated. The current version of this library does not yet support automatic detection of and conversion from a nested JSON array input to a BJData ND-array. [JDataAAFmt]: https://github.com/NeuroJSON/jdata/blob/master/JData_specification.md#annotated-storage-of-n-d-arrays) !!! info "Restrictions in optimized data types for arrays and objects" Due to diminished space saving, hampered readability, and increased security risks, in BJData, the allowed data types following the `$` marker in an optimized array and object container are restricted to **non-zero-fixed-length** data types. Therefore, the valid optimized type markers can only be one of `UiuImlMLhdDCB`. This also means other variable (`[{SH`) or zero-length types (`TFN`) can not be used in an optimized array or object in BJData. !!! info "Binary values" BJData provides a dedicated `B` marker (defined in the [BJData specification (Draft 3)][BJDataBinArr]) that is used in optimized arrays to designate binary data. This means that, unlike UBJSON, binary data can be both serialized and deserialized. To preserve compatibility with BJData Draft 2, the Draft 3 optimized binary array must be explicitly enabled using the `version` parameter of [`to_bjdata`](../../api/basic_json/to_bjdata.md). In Draft2 mode (default), if the JSON data contains the binary type, the value stored as a list of integers, as suggested by the BJData documentation. In particular, this means that the serialization and the deserialization of JSON containing binary values into BJData and back will result in a different JSON object. [BJDataBinArr]: https://github.com/NeuroJSON/bjdata/blob/master/Binary_JData_Specification.md#optimized-binary-array) ??? example ```cpp --8<-- "examples/to_bjdata.cpp" ``` Output: ```c --8<-- "examples/to_bjdata.output" ``` ## Deserialization The library maps BJData types to JSON value types as follows: | BJData type | JSON value type | marker | |-------------|------------------------------------------|----------| | no-op | *no value, next value is read* | `N` | | null | `null` | `Z` | | false | `false` | `F` | | true | `true` | `T` | | float16 | number_float | `h` | | float32 | number_float | `d` | | float64 | number_float | `D` | | uint8 | number_unsigned | `U` | | int8 | number_integer | `i` | | uint16 | number_unsigned | `u` | | int16 | number_integer | `I` | | uint32 | number_unsigned | `m` | | int32 | number_integer | `l` | | uint64 | number_unsigned | `M` | | int64 | number_integer | `L` | | byte | number_unsigned | `B` | | string | string | `S` | | char | string | `C` | | array | array (optimized values are supported) | `[` | | ND-array | object (in JData annotated array format) | `[$.#[.` | | object | object (optimized values are supported) | `{` | | binary | binary (strongly-typed byte array) | `[$B` | !!! success "Complete mapping" The mapping is **complete** in the sense that any BJData value can be converted to a JSON value. ??? example ```cpp --8<-- "examples/from_bjdata.cpp" ``` Output: ```json --8<-- "examples/from_bjdata.output" ``` json-3.12.0/docs/mkdocs/docs/features/binary_formats/bson.md000066400000000000000000000102251477615276400240510ustar00rootroot00000000000000# BSON BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type. !!! abstract "References" - [BSON Website](http://bsonspec.org) - the main source on BSON - [BSON Specification](http://bsonspec.org/spec.html) - the specification ## Serialization The library uses the following mapping from JSON values types to BSON types: | JSON value type | value/range | BSON type | marker | |-----------------|-------------------------------------------|-----------|--------| | null | `null` | null | 0x0A | | boolean | `true`, `false` | boolean | 0x08 | | number_integer | -9223372036854775808..-2147483649 | int64 | 0x12 | | number_integer | -2147483648..2147483647 | int32 | 0x10 | | number_integer | 2147483648..9223372036854775807 | int64 | 0x12 | | number_unsigned | 0..2147483647 | int32 | 0x10 | | number_unsigned | 2147483648..9223372036854775807 | int64 | 0x12 | | number_unsigned | 9223372036854775808..18446744073709551615 | uint64 | 0x11 | | number_float | *any value* | double | 0x01 | | string | *any value* | string | 0x02 | | array | *any value* | document | 0x04 | | object | *any value* | document | 0x03 | | binary | *any value* | binary | 0x05 | !!! warning "Incomplete mapping" The mapping is **incomplete**, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, keys may not contain U+0000, since they are serialized a zero-terminated c-strings. ??? example ```cpp --8<-- "examples/to_bson.cpp" ``` Output: ```c --8<-- "examples/to_bson.output" ``` ## Deserialization The library maps BSON record types to JSON value types as follows: | BSON type | BSON marker byte | JSON value type | |-----------------------|------------------|-----------------| | double | 0x01 | number_float | | string | 0x02 | string | | document | 0x03 | object | | array | 0x04 | array | | binary | 0x05 | binary | | undefined | 0x06 | *unsupported* | | ObjectId | 0x07 | *unsupported* | | boolean | 0x08 | boolean | | UTC Date-Time | 0x09 | *unsupported* | | null | 0x0A | null | | Regular Expr. | 0x0B | *unsupported* | | DB Pointer | 0x0C | *unsupported* | | JavaScript Code | 0x0D | *unsupported* | | Symbol | 0x0E | *unsupported* | | JavaScript Code | 0x0F | *unsupported* | | int32 | 0x10 | number_integer | | uint64(Timestamp) | 0x11 | number_unsigned | | 128-bit decimal float | 0x13 | *unsupported* | | Max Key | 0x7F | *unsupported* | | Min Key | 0xFF | *unsupported* | !!! warning "Incomplete mapping" The mapping is **incomplete**. The unsupported mappings are indicated in the table above. !!! note "Handling of BSON type 0x11" BSON type 0x11 is used to represent uint64 numbers. This library treats these values purely as uint64 numbers and does not parse them into date-related formats. ??? example ```cpp --8<-- "examples/from_bson.cpp" ``` Output: ```json --8<-- "examples/from_bson.output" ``` json-3.12.0/docs/mkdocs/docs/features/binary_formats/cbor.md000066400000000000000000000241251477615276400240410ustar00rootroot00000000000000# CBOR The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. !!! abstract "References" - [CBOR Website](http://cbor.io) - the main source on CBOR - [CBOR Playground](http://cbor.me) - an interactive webpage to translate between JSON and CBOR - [RFC 7049](https://tools.ietf.org/html/rfc7049) - the CBOR specification ## Serialization The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification ([RFC 7049](https://www.rfc-editor.org/rfc/rfc7049.html)): | JSON value type | value/range | CBOR type | first byte | |-----------------|--------------------------------------------|-----------------------------------|------------| | null | `null` | Null | 0xF6 | | boolean | `true` | True | 0xF5 | | boolean | `false` | False | 0xF4 | | number_integer | -9223372036854775808..-2147483649 | Negative integer (8 bytes follow) | 0x3B | | number_integer | -2147483648..-32769 | Negative integer (4 bytes follow) | 0x3A | | number_integer | -32768..-129 | Negative integer (2 bytes follow) | 0x39 | | number_integer | -128..-25 | Negative integer (1 byte follow) | 0x38 | | number_integer | -24..-1 | Negative integer | 0x20..0x37 | | number_integer | 0..23 | Integer | 0x00..0x17 | | number_integer | 24..255 | Unsigned integer (1 byte follow) | 0x18 | | number_integer | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 | | number_integer | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A | | number_integer | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B | | number_unsigned | 0..23 | Integer | 0x00..0x17 | | number_unsigned | 24..255 | Unsigned integer (1 byte follow) | 0x18 | | number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 | | number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A | | number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B | | number_float | *any value representable by a float* | Single-Precision Float | 0xFA | | number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB | | string | *length*: 0..23 | UTF-8 string | 0x60..0x77 | | string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 | | string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 | | string | *length*: 65536..4294967295 | UTF-8 string (4 bytes follow) | 0x7A | | string | *length*: 4294967296..18446744073709551615 | UTF-8 string (8 bytes follow) | 0x7B | | array | *size*: 0..23 | array | 0x80..0x97 | | array | *size*: 23..255 | array (1 byte follow) | 0x98 | | array | *size*: 256..65535 | array (2 bytes follow) | 0x99 | | array | *size*: 65536..4294967295 | array (4 bytes follow) | 0x9A | | array | *size*: 4294967296..18446744073709551615 | array (8 bytes follow) | 0x9B | | object | *size*: 0..23 | map | 0xA0..0xB7 | | object | *size*: 23..255 | map (1 byte follow) | 0xB8 | | object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 | | object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA | | object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB | | binary | *size*: 0..23 | byte string | 0x40..0x57 | | binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 | | binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 | | binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A | | binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B | Binary values with subtype are mapped to tagged values (0xD8..0xDB) depending on the subtype, followed by a byte string, see "binary" cells in the table above. !!! success "Complete mapping" The mapping is **complete** in the sense that any JSON value type can be converted to a CBOR value. !!! info "NaN/infinity handling" If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the normal JSON serialization which serializes NaN or Infinity to `null`. !!! info "Unused CBOR types" The following CBOR types are not used in the conversion: - UTF-8 strings terminated by "break" (0x7F) - arrays terminated by "break" (0x9F) - maps terminated by "break" (0xBF) - byte strings terminated by "break" (0x5F) - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) - bigfloat (0xC5) - expected conversions (0xD5..0xD7) - simple values (0xE0..0xF3, 0xF8) - undefined (0xF7) - half-precision floats (0xF9) - break (0xFF) !!! info "Tagged items" Binary subtypes will be serialized as tagged items. See [binary values](../binary_values.md#cbor) for an example. ??? example ```cpp --8<-- "examples/to_cbor.cpp" ``` Output: ```c --8<-- "examples/to_cbor.output" ``` ## Deserialization The library maps CBOR types to JSON value types as follows: | CBOR type | JSON value type | first byte | |------------------------|-----------------|------------| | Integer | number_unsigned | 0x00..0x17 | | Unsigned integer | number_unsigned | 0x18 | | Unsigned integer | number_unsigned | 0x19 | | Unsigned integer | number_unsigned | 0x1A | | Unsigned integer | number_unsigned | 0x1B | | Negative integer | number_integer | 0x20..0x37 | | Negative integer | number_integer | 0x38 | | Negative integer | number_integer | 0x39 | | Negative integer | number_integer | 0x3A | | Negative integer | number_integer | 0x3B | | Byte string | binary | 0x40..0x57 | | Byte string | binary | 0x58 | | Byte string | binary | 0x59 | | Byte string | binary | 0x5A | | Byte string | binary | 0x5B | | UTF-8 string | string | 0x60..0x77 | | UTF-8 string | string | 0x78 | | UTF-8 string | string | 0x79 | | UTF-8 string | string | 0x7A | | UTF-8 string | string | 0x7B | | UTF-8 string | string | 0x7F | | array | array | 0x80..0x97 | | array | array | 0x98 | | array | array | 0x99 | | array | array | 0x9A | | array | array | 0x9B | | array | array | 0x9F | | map | object | 0xA0..0xB7 | | map | object | 0xB8 | | map | object | 0xB9 | | map | object | 0xBA | | map | object | 0xBB | | map | object | 0xBF | | False | `false` | 0xF4 | | True | `true` | 0xF5 | | Null | `null` | 0xF6 | | Half-Precision Float | number_float | 0xF9 | | Single-Precision Float | number_float | 0xFA | | Double-Precision Float | number_float | 0xFB | !!! warning "Incomplete mapping" The mapping is **incomplete** in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors: - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) - bigfloat (0xC5) - expected conversions (0xD5..0xD7) - simple values (0xE0..0xF3, 0xF8) - undefined (0xF7) !!! warning "Object keys" CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected. !!! warning "Tagged items" Tagged items will throw a parse error by default. They can be ignored by passing `cbor_tag_handler_t::ignore` to function `from_cbor`. They can be stored by passing `cbor_tag_handler_t::store` to function `from_cbor`. ??? example ```cpp --8<-- "examples/from_cbor.cpp" ``` Output: ```json --8<-- "examples/from_cbor.output" ``` json-3.12.0/docs/mkdocs/docs/features/binary_formats/index.md000066400000000000000000000052561477615276400242270ustar00rootroot00000000000000# Binary Formats Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance, over a network. Hence, the library supports - [BJData](bjdata.md) (Binary JData), - [BSON](bson.md) (Binary JSON), - [CBOR](cbor.md) (Concise Binary Object Representation), - [MessagePack](messagepack.md), and - [UBJSON](ubjson.md) (Universal Binary JSON) to efficiently encode JSON values to byte vectors and to decode such vectors. ## Comparison ### Completeness | Format | Serialization | Deserialization | |-------------|-----------------------------------------------|----------------------------------------------| | BJData | complete | complete | | BSON | incomplete: top-level value must be an object | incomplete, but all JSON types are supported | | CBOR | complete | incomplete, but all JSON types are supported | | MessagePack | complete | complete | | UBJSON | complete | complete | ### Binary values | Format | Binary values | Binary subtypes | |-------------|---------------|-----------------| | BJData | not supported | not supported | | BSON | supported | supported | | CBOR | supported | supported | | MessagePack | supported | supported | | UBJSON | not supported | not supported | See [binary values](../binary_values.md) for more information. ### Sizes | Format | canada.json | twitter.json | citm_catalog.json | jeopardy.json | |--------------------|-------------|--------------|-------------------|---------------| | BJData | 53.2 % | 91.1 % | 78.1 % | 96.6 % | | BJData (size) | 58.6 % | 92.1 % | 86.7 % | 97.4 % | | BJData (size+tyoe) | 58.6 % | 92.1 % | 86.5 % | 97.4 % | | BSON | 85.8 % | 95.2 % | 95.8 % | 106.7 % | | CBOR | 50.5 % | 86.3 % | 68.4 % | 88.0 % | | MessagePack | 50.5 % | 86.0 % | 68.5 % | 87.9 % | | UBJSON | 53.2 % | 91.3 % | 78.2 % | 96.6 % | | UBJSON (size) | 58.6 % | 92.3 % | 86.8 % | 97.4 % | | UBJSON (size+type) | 55.9 % | 92.3 % | 85.0 % | 95.0 % | Sizes compared to minified JSON value. json-3.12.0/docs/mkdocs/docs/features/binary_formats/messagepack.md000066400000000000000000000160321477615276400253750ustar00rootroot00000000000000# MessagePack MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves. !!! abstract "References" - [MessagePack website](https://msgpack.org) - [MessagePack specification](https://github.com/msgpack/msgpack/blob/master/spec.md) ## Serialization The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification: | JSON value type | value/range | MessagePack type | first byte | |-----------------|------------------------------------------|------------------|------------| | null | `null` | nil | 0xC0 | | boolean | `true` | true | 0xC3 | | boolean | `false` | false | 0xC2 | | number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 | | number_integer | -2147483648..-32769 | int32 | 0xD2 | | number_integer | -32768..-129 | int16 | 0xD1 | | number_integer | -128..-33 | int8 | 0xD0 | | number_integer | -32..-1 | negative fixint | 0xE0..0xFF | | number_integer | 0..127 | positive fixint | 0x00..0x7F | | number_integer | 128..255 | uint 8 | 0xCC | | number_integer | 256..65535 | uint 16 | 0xCD | | number_integer | 65536..4294967295 | uint 32 | 0xCE | | number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF | | number_unsigned | 0..127 | positive fixint | 0x00..0x7F | | number_unsigned | 128..255 | uint 8 | 0xCC | | number_unsigned | 256..65535 | uint 16 | 0xCD | | number_unsigned | 65536..4294967295 | uint 32 | 0xCE | | number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF | | number_float | *any value representable by a float* | float 32 | 0xCA | | number_float | *any value NOT representable by a float* | float 64 | 0xCB | | string | *length*: 0..31 | fixstr | 0xA0..0xBF | | string | *length*: 32..255 | str 8 | 0xD9 | | string | *length*: 256..65535 | str 16 | 0xDA | | string | *length*: 65536..4294967295 | str 32 | 0xDB | | array | *size*: 0..15 | fixarray | 0x90..0x9F | | array | *size*: 16..65535 | array 16 | 0xDC | | array | *size*: 65536..4294967295 | array 32 | 0xDD | | object | *size*: 0..15 | fix map | 0x80..0x8F | | object | *size*: 16..65535 | map 16 | 0xDE | | object | *size*: 65536..4294967295 | map 32 | 0xDF | | binary | *size*: 0..255 | bin 8 | 0xC4 | | binary | *size*: 256..65535 | bin 16 | 0xC5 | | binary | *size*: 65536..4294967295 | bin 32 | 0xC6 | !!! success "Complete mapping" The mapping is **complete** in the sense that any JSON value type can be converted to a MessagePack value. Any MessagePack output created by `to_msgpack` can be successfully parsed by `from_msgpack`. !!! warning "Size constraints" The following values can **not** be converted to a MessagePack value: - strings with more than 4294967295 bytes - byte strings with more than 4294967295 bytes - arrays with more than 4294967295 elements - objects with more than 4294967295 elements !!! info "NaN/infinity handling" If NaN or Infinity are stored inside a JSON number, they are serialized properly in contrast to the [dump](../../api/basic_json/dump.md) function which serializes NaN or Infinity to `null`. ??? example ```cpp --8<-- "examples/to_msgpack.cpp" ``` Output: ```c --8<-- "examples/to_msgpack.output" ``` ## Deserialization The library maps MessagePack types to JSON value types as follows: | MessagePack type | JSON value type | first byte | |------------------|-----------------|------------| | positive fixint | number_unsigned | 0x00..0x7F | | fixmap | object | 0x80..0x8F | | fixarray | array | 0x90..0x9F | | fixstr | string | 0xA0..0xBF | | nil | `null` | 0xC0 | | false | `false` | 0xC2 | | true | `true` | 0xC3 | | float 32 | number_float | 0xCA | | float 64 | number_float | 0xCB | | uint 8 | number_unsigned | 0xCC | | uint 16 | number_unsigned | 0xCD | | uint 32 | number_unsigned | 0xCE | | uint 64 | number_unsigned | 0xCF | | int 8 | number_integer | 0xD0 | | int 16 | number_integer | 0xD1 | | int 32 | number_integer | 0xD2 | | int 64 | number_integer | 0xD3 | | str 8 | string | 0xD9 | | str 16 | string | 0xDA | | str 32 | string | 0xDB | | array 16 | array | 0xDC | | array 32 | array | 0xDD | | map 16 | object | 0xDE | | map 32 | object | 0xDF | | bin 8 | binary | 0xC4 | | bin 16 | binary | 0xC5 | | bin 32 | binary | 0xC6 | | ext 8 | binary | 0xC7 | | ext 16 | binary | 0xC8 | | ext 32 | binary | 0xC9 | | fixext 1 | binary | 0xD4 | | fixext 2 | binary | 0xD5 | | fixext 4 | binary | 0xD6 | | fixext 8 | binary | 0xD7 | | fixext 16 | binary | 0xD8 | | negative fixint | number_integer | 0xE0-0xFF | !!! info Any MessagePack output created by `to_msgpack` can be successfully parsed by `from_msgpack`. ??? example ```cpp --8<-- "examples/from_msgpack.cpp" ``` Output: ```json --8<-- "examples/from_msgpack.output" ``` json-3.12.0/docs/mkdocs/docs/features/binary_formats/ubjson.md000066400000000000000000000131611477615276400244120ustar00rootroot00000000000000# UBJSON Universal Binary JSON (UBJSON) is a binary form directly imitating JSON, but requiring fewer bytes of data. It aims to achieve the generality of JSON, combined with being much easier to process than JSON. !!! abstract "References" - [UBJSON Website](http://ubjson.org) ## Serialization The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification: | JSON value type | value/range | UBJSON type | marker | |-----------------|-----------------------------------|----------------|--------| | null | `null` | null | `Z` | | boolean | `true` | true | `T` | | boolean | `false` | false | `F` | | number_integer | -9223372036854775808..-2147483649 | int64 | `L` | | number_integer | -2147483648..-32769 | int32 | `l` | | number_integer | -32768..-129 | int16 | `I` | | number_integer | -128..127 | int8 | `i` | | number_integer | 128..255 | uint8 | `U` | | number_integer | 256..32767 | int16 | `I` | | number_integer | 32768..2147483647 | int32 | `l` | | number_integer | 2147483648..9223372036854775807 | int64 | `L` | | number_unsigned | 0..127 | int8 | `i` | | number_unsigned | 128..255 | uint8 | `U` | | number_unsigned | 256..32767 | int16 | `I` | | number_unsigned | 32768..2147483647 | int32 | `l` | | number_unsigned | 2147483648..9223372036854775807 | int64 | `L` | | number_unsigned | 2147483649..18446744073709551615 | high-precision | `H` | | number_float | *any value* | float64 | `D` | | string | *with shortest length indicator* | string | `S` | | array | *see notes on optimized format* | array | `[` | | object | *see notes on optimized format* | map | `{` | !!! success "Complete mapping" The mapping is **complete** in the sense that any JSON value type can be converted to a UBJSON value. Any UBJSON output created by `to_ubjson` can be successfully parsed by `from_ubjson`. !!! warning "Size constraints" The following values can **not** be converted to a UBJSON value: - strings with more than 9223372036854775807 bytes (theoretical) !!! info "Unused UBJSON markers" The following markers are not used in the conversion: - `Z`: no-op values are not created. - `C`: single-byte strings are serialized with `S` markers. !!! info "NaN/infinity handling" If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the `dump()` function which serializes NaN or Infinity to `null`. !!! info "Optimized formats" The optimized formats for containers are supported: Parameter `use_size` adds size information to the beginning of a container and removes the closing marker. Parameter `use_type` further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The `use_type` parameter must only be used together with `use_size = true`. Note that `use_size = true` alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container. !!! info "Binary values" If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object. ??? example ```cpp --8<-- "examples/to_ubjson.cpp" ``` Output: ```c --8<-- "examples/to_ubjson.output" ``` ## Deserialization The library maps UBJSON types to JSON value types as follows: | UBJSON type | JSON value type | marker | |-------------|-----------------------------------------|--------| | no-op | *no value, next value is read* | `N` | | null | `null` | `Z` | | false | `false` | `F` | | true | `true` | `T` | | float32 | number_float | `d` | | float64 | number_float | `D` | | uint8 | number_unsigned | `U` | | int8 | number_integer | `i` | | int16 | number_integer | `I` | | int32 | number_integer | `l` | | int64 | number_integer | `L` | | string | string | `S` | | char | string | `C` | | array | array (optimized values are supported) | `[` | | object | object (optimized values are supported) | `{` | !!! success "Complete mapping" The mapping is **complete** in the sense that any UBJSON value can be converted to a JSON value. ??? example ```cpp --8<-- "examples/from_ubjson.cpp" ``` Output: ```json --8<-- "examples/from_ubjson.output" ``` json-3.12.0/docs/mkdocs/docs/features/binary_values.md000066400000000000000000000267761477615276400227560ustar00rootroot00000000000000# Binary Values The library implements several [binary formats](binary_formats/index.md) that encode JSON in an efficient way. Most of these formats support binary values; that is, values that have semantics define outside the library and only define a sequence of bytes to be stored. JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store values received by a binary format. Binary values are never created by the JSON parser and are only part of a serialized JSON text if they have been created manually or via a binary format. ## API for binary values ```mermaid classDiagram class binary_t ["json::binary_t"] { +void set_subtype(std::uint64_t subtype) +void clear_subtype() +std::uint64_t subtype() const +bool has_subtype() const } class vector ["std::vector"] vector <|-- binary_t ``` By default, binary values are stored as `std::vector`. This type can be changed by providing a template parameter to the `basic_json` type. To store binary subtypes, the storage type is extended and exposed as `json::binary_t`: ```cpp auto binary = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}); auto binary_with_subtype = json::binary_t({0xCA, 0xFE, 0xBA, 0xBE}, 42); ``` There are several convenience functions to check and set the subtype: ```cpp binary.has_subtype(); // returns false binary_with_subtype.has_subtype(); // returns true binary_with_subtype.clear_subtype(); binary_with_subtype.has_subtype(); // returns true binary_with_subtype.set_subtype(42); binary.set_subtype(23); binary.subtype(); // returns 23 ``` As `json::binary_t` is subclassing `std::vector`, all member functions are available: ```cpp binary.size(); // returns 4 binary[1]; // returns 0xFE ``` JSON values can be constructed from `json::binary_t`: ```cpp json j = binary; ``` Binary values are primitive values just like numbers or strings: ```cpp j.is_binary(); // returns true j.is_primitive(); // returns true ``` Given a binary JSON value, the `binary_t` can be accessed by reference as via `get_binary()`: ```cpp j.get_binary().has_subtype(); // returns true j.get_binary().size(); // returns 4 ``` For convenience, binary JSON values can be constructed via `json::binary`: ```cpp auto j2 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 23); auto j3 = json::binary({0xCA, 0xFE, 0xBA, 0xBE}); j2 == j; // returns true j3.get_binary().has_subtype(); // returns false j3.get_binary().subtype(); // returns std::uint64_t(-1) as j3 has no subtype ``` ## Serialization Binary values are serialized differently according to the formats. ### JSON JSON does not have a binary type, and this library does not introduce a new type as this would break conformance. Instead, binary values are serialized as an object with two keys: `bytes` holds an array of integers, and `subtype` is an integer or `null`. ??? example Code: ```cpp // create a binary value of subtype 42 json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // serialize to standard output std::cout << j.dump(2) << std::endl; ``` Output: ```json { "binary": { "bytes": [202, 254, 186, 190], "subtype": 42 } } ``` !!! warning "No roundtrip for binary values" The JSON parser will not parse the objects generated by binary values back to binary values. This is by design to remain standards compliant. Serializing binary values to JSON is only implemented for debugging purposes. ### BJData [BJData](binary_formats/bjdata.md) neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation. ??? example Code: ```cpp // create a binary value of subtype 42 (will be ignored in BJData) json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // convert to BJData auto v = json::to_bjdata(j); ``` `v` is a `std::vector` with the following 20 elements: ```c 0x7B // '{' 0x69 0x06 // i 6 (length of the key) 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0x5B // '[' 0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE // content (each byte prefixed with 'U') 0x5D // ']' 0x7D // '}' ``` The following code uses the type and size optimization for UBJSON: ```cpp // convert to UBJSON using the size and type optimization auto v = json::to_bjdata(j, true, true); ``` The resulting vector has 22 elements; the optimization is not effective for examples with few values: ```c 0x7B // '{' 0x23 0x69 0x01 // '#' 'i' type of the array elements: unsigned integers 0x69 0x06 // i 6 (length of the key) 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0x5B // '[' array 0x24 0x55 // '$' 'U' type of the array elements: unsigned integers 0x23 0x69 0x04 // '#' i 4 number of array elements 0xCA 0xFE 0xBA 0xBE // content ``` Note that subtype (42) is **not** serialized and that UBJSON has **no binary type**, and deserializing `v` would yield the following value: ```json { "binary": [202, 254, 186, 190] } ``` ### BSON [BSON](binary_formats/bson.md) supports binary values and subtypes. If a subtype is given, it is used and added as unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used. ??? example Code: ```cpp // create a binary value of subtype 42 json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // convert to BSON auto v = json::to_bson(j); ``` `v` is a `std::vector` with the following 22 elements: ```c 0x16 0x00 0x00 0x00 // number of bytes in the document 0x05 // binary value 0x62 0x69 0x6E 0x61 0x72 0x79 0x00 // key "binary" + null byte 0x04 0x00 0x00 0x00 // number of bytes 0x2a // subtype 0xCA 0xFE 0xBA 0xBE // content 0x00 // end of the document ``` Note that the serialization preserves the subtype, and deserializing `v` would yield the following value: ```json { "binary": { "bytes": [202, 254, 186, 190], "subtype": 42 } } ``` ### CBOR [CBOR](binary_formats/cbor.md) supports binary values, but no subtypes. Subtypes will be serialized as tags. Any binary value will be serialized as byte strings. The library will choose the smallest representation using the length of the byte array. ??? example Code: ```cpp // create a binary value of subtype 42 json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // convert to CBOR auto v = json::to_cbor(j); ``` `v` is a `std::vector` with the following 15 elements: ```c 0xA1 // map(1) 0x66 // text(6) 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0xD8 0x2A // tag(42) 0x44 // bytes(4) 0xCA 0xFE 0xBA 0xBE // content ``` Note that the subtype is serialized as tag. However, parsing tagged values yield a parse error unless `json::cbor_tag_handler_t::ignore` or `json::cbor_tag_handler_t::store` is passed to `json::from_cbor`. ```json { "binary": { "bytes": [202, 254, 186, 190], "subtype": null } } ``` ### MessagePack [MessagePack](binary_formats/messagepack.md) supports binary values and subtypes. If a subtype is given, the ext family is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and ext32. The subtype is then added as signed 8-bit integer. If no subtype is given, the bin family (bin8, bin16, bin32) is used. ??? example Code: ```cpp // create a binary value of subtype 42 json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // convert to MessagePack auto v = json::to_msgpack(j); ``` `v` is a `std::vector` with the following 14 elements: ```c 0x81 // fixmap1 0xA6 // fixstr6 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0xD6 // fixext4 0x2A // subtype 0xCA 0xFE 0xBA 0xBE // content ``` Note that the serialization preserves the subtype, and deserializing `v` would yield the following value: ```json { "binary": { "bytes": [202, 254, 186, 190], "subtype": 42 } } ``` ### UBJSON [UBJSON](binary_formats/ubjson.md) neither supports binary values nor subtypes and proposes to serialize binary values as an array of uint8 values. The library implements this translation. ??? example Code: ```cpp // create a binary value of subtype 42 (will be ignored in UBJSON) json j; j["binary"] = json::binary({0xCA, 0xFE, 0xBA, 0xBE}, 42); // convert to UBJSON auto v = json::to_ubjson(j); ``` `v` is a `std::vector` with the following 20 elements: ```c 0x7B // '{' 0x69 0x06 // i 6 (length of the key) 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0x5B // '[' 0x55 0xCA 0x55 0xFE 0x55 0xBA 0x55 0xBE // content (each byte prefixed with 'U') 0x5D // ']' 0x7D // '}' ``` The following code uses the type and size optimization for UBJSON: ```cpp // convert to UBJSON using the size and type optimization auto v = json::to_ubjson(j, true, true); ``` The resulting vector has 23 elements; the optimization is not effective for examples with few values: ```c 0x7B // '{' 0x24 // '$' type of the object elements 0x5B // '[' array 0x23 0x69 0x01 // '#' i 1 number of object elements 0x69 0x06 // i 6 (length of the key) 0x62 0x69 0x6E 0x61 0x72 0x79 // "binary" 0x24 0x55 // '$' 'U' type of the array elements: unsigned integers 0x23 0x69 0x04 // '#' i 4 number of array elements 0xCA 0xFE 0xBA 0xBE // content ``` Note that subtype (42) is **not** serialized and that UBJSON has **no binary type**, and deserializing `v` would yield the following value: ```json { "binary": [202, 254, 186, 190] } ``` json-3.12.0/docs/mkdocs/docs/features/comments.md000066400000000000000000000055761477615276400217330ustar00rootroot00000000000000# Comments This library does not support comments *by default*. It does so for three reasons: 1. Comments are not part of the [JSON specification](https://tools.ietf.org/html/rfc8259). You may argue that `//` or `/* */` are allowed in JavaScript, but JSON is not JavaScript. 2. This was not an oversight: Douglas Crockford [wrote on this](https://plus.google.com/118095276221607585885/posts/RK8qyGVaGSr) in May 2012: > I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't. > Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser. 3. It is dangerous for interoperability if some libraries add comment support while others do not. Please check [The Harmful Consequences of the Robustness Principle](https://tools.ietf.org/html/draft-iab-protocol-maintenance-01) on this. However, you can pass set parameter `ignore_comments` to `#!c true` in the parse function to ignore `//` or `/* */` comments. Comments will then be treated as whitespace. !!! example Consider the following JSON with comments. ```json { // update in 2006: removed Pluto "planets": ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Uranus", "Neptune" /*, "Pluto" */] } ``` When calling `parse` without additional argument, a parse error exception is thrown. If `ignore_comments` is set to `#! true`, the comments are ignored during parsing: ```cpp #include #include "json.hpp" using json = nlohmann::json; int main() { std::string s = R"( { // update in 2006: removed Pluto "planets": ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Uranus", "Neptune" /*, "Pluto" */] } )"; try { json j = json::parse(s); } catch (json::exception &e) { std::cout << e.what() << std::endl; } json j = json::parse(s, /* callback */ nullptr, /* allow exceptions */ true, /* ignore_comments */ true); std::cout << j.dump(2) << '\n'; } ``` Output: ``` [json.exception.parse_error.101] parse error at line 3, column 9: syntax error while parsing object key - invalid literal; last read: ' { /'; expected string literal ``` ```json { "planets": [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Uranus", "Neptune" ] } ``` json-3.12.0/docs/mkdocs/docs/features/element_access/000077500000000000000000000000001477615276400225215ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/features/element_access/checked_access.md000066400000000000000000000075361477615276400257650ustar00rootroot00000000000000# Checked access: at ## Overview The [`at`](../../api/basic_json/at.md) member function performs checked access; that is, it returns a reference to the desired value if it exists and throws a [`basic_json::out_of_range` exception](../../home/exceptions.md#out-of-range) otherwise. ??? example "Read access" Consider the following JSON value: ```json { "name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"] } ``` Assume the value is parsed to a `json` variable `j`. | expression | value | |-------------------------------|------------------------------------------------------------------------------| | `#!cpp j` | `#!json {"name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"]}` | | `#!cpp j.at("name")` | `#!json "Mary Smith"` | | `#!cpp j.at("age")` | `#!json 42` | | `#!cpp j.at("hobbies")` | `#!json ["hiking", "reading"]` | | `#!cpp j.at("hobbies").at(0)` | `#!json "hiking"` | | `#!cpp j.at("hobbies").at(1)` | `#!json "reading"` | The return value is a reference, so it can be modified by the original value. ??? example "Write access" ```cpp j.at("name") = "John Smith"; ``` This code produces the following JSON value: ```json { "name": "John Smith", "age": 42, "hobbies": ["hiking", "reading"] } ``` When accessing an invalid index (i.e., an index greater than or equal to the array size) or the passed object key is non-existing, an exception is thrown. ??? example "Accessing via invalid index or missing key" ```cpp j.at("hobbies").at(3) = "cooking"; ``` This code produces the following exception: ``` [json.exception.out_of_range.401] array index 3 is out of range ``` When you [extended diagnostic messages](../../home/exceptions.md#extended-diagnostic-messages) are enabled by defining [`JSON_DIAGNOSTICS`](../../api/macros/json_diagnostics.md), the exception further gives information where the key or index is missing or out of range. ``` [json.exception.out_of_range.401] (/hobbies) array index 3 is out of range ``` ## Notes !!! failure "Exceptions" - [`at`](../../api/basic_json/at.md) can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a [`basic_json::type_error`](../../home/exceptions.md#jsonexceptiontype_error304) is thrown. - [`basic_json::out_of_range` exception](../../home/exceptions.md#out-of-range) exceptions are thrown if the provided key is not found in an object or the provided index is invalid. ## Summary | scenario | non-const value | const value | |-----------------------------------|------------------------------------------------|------------------------------------------------| | access to existing object key | reference to existing value is returned | const reference to existing value is returned | | access to valid array index | reference to existing value is returned | const reference to existing value is returned | | access to non-existing object key | `basic_json::out_of_range` exception is thrown | `basic_json::out_of_range` exception is thrown | | access to invalid array index | `basic_json::out_of_range` exception is thrown | `basic_json::out_of_range` exception is thrown | json-3.12.0/docs/mkdocs/docs/features/element_access/default_value.md000066400000000000000000000052221477615276400256640ustar00rootroot00000000000000# Access with default value: value ## Overview In many situations, such as configuration files, missing values are not exceptional, but may be treated as if a default value was present. For this case, use [`value(key, default_value)`](../../api/basic_json/value.md) which takes the key you want to access and a default value in case there is no value stored with that key. ## Example ??? example Consider the following JSON value: ```json { "logOutput": "result.log", "append": true } ``` Assume the value is parsed to a `json` variable `j`. | expression | value | |---------------------------------------------|------------------------------------------------------| | `#!cpp j` | `#!json {"logOutput": "result.log", "append": true}` | | `#!cpp j.value("logOutput", "logfile.log")` | `#!json "result.log"` | | `#!cpp j.value("append", true)` | `#!json true` | | `#!cpp j.value("append", false)` | `#!json true` | | `#!cpp j.value("logLevel", "verbose")` | `#!json "verbose"` | ## Notes !!! failure "Exceptions" - `value` can only be used with objects. For other types, a [`basic_json::type_error`](../../home/exceptions.md#jsonexceptiontype_error306) is thrown. !!! warning "Return type" The value function is a template, and the return type of the function is determined by the type of the provided default value unless otherwise specified. This can have unexpected effects. In the example below, we store a 64-bit unsigned integer. We get exactly that value when using [`operator[]`](../../api/basic_json/operator[].md). However, when we call `value` and provide `#!c 0` as default value, then `#!c -1` is returned. The occurs, because `#!c 0` has type `#!c int` which overflows when handling the value `#!c 18446744073709551615`. To address this issue, either provide a correctly typed default value or use the template parameter to specify the desired return type. Note that this issue occurs even when a value is stored at the provided key, and the default value is not used as the return value. ```cpp --8<-- "examples/value__return_type.cpp" ``` Output: ```json --8<-- "examples/value__return_type.output" ``` ## See also - [`value`](../../api/basic_json/value.md) for access with default value - documentation on [checked access](checked_access.md) json-3.12.0/docs/mkdocs/docs/features/element_access/index.md000066400000000000000000000004231477615276400241510ustar00rootroot00000000000000# Element Access There are many ways elements in a JSON value can be accessed: - unchecked access via [`operator[]`](unchecked_access.md) - checked access via [`at`](checked_access.md) - access with default value via [`value`](default_value.md) - iterators - JSON pointers json-3.12.0/docs/mkdocs/docs/features/element_access/unchecked_access.md000066400000000000000000000130161477615276400263160ustar00rootroot00000000000000# Unchecked access: operator[] ## Overview Elements in a JSON object and a JSON array can be accessed via [`operator[]`](../../api/basic_json/operator%5B%5D.md) similar to a `#!cpp std::map` and a `#!cpp std::vector`, respectively. ??? example "Read access" Consider the following JSON value: ```json { "name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"] } ``` Assume the value is parsed to a `json` variable `j`. | expression | value | |-------------------------|------------------------------------------------------------------------------| | `#!cpp j` | `#!json {"name": "Mary Smith", "age": 42, "hobbies": ["hiking", "reading"]}` | | `#!cpp j["name"]` | `#!json "Mary Smith"` | | `#!cpp j["age"]` | `#!json 42` | | `#!cpp j["hobbies"]` | `#!json ["hiking", "reading"]` | | `#!cpp j["hobbies"][0]` | `#!json "hiking"` | | `#!cpp j["hobbies"][1]` | `#!json "reading"` | The return value is a reference, so it can modify the original value. In case the passed object key is non-existing, a `#!json null` value is inserted which can immediately be overwritten. ??? example "Write access" ```cpp j["name"] = "John Smith"; j["maidenName"] = "Jones"; ``` This code produces the following JSON value: ```json { "name": "John Smith", "maidenName": "Jones", "age": 42, "hobbies": ["hiking", "reading"] } ``` When accessing an invalid index (i.e., an index greater than or equal to the array size), the JSON array is resized such that the passed index is the new maximal index. Intermediate values are filled with `#!json null`. ??? example "Filling up arrays with `#!json null` values" ```cpp j["hobbies"][0] = "running"; j["hobbies"][3] = "cooking"; ``` This code produces the following JSON value: ```json { "name": "John Smith", "maidenName": "Jones", "age": 42, "hobbies": ["running", "reading", null, "cooking"] } ``` ## Notes !!! info "Design rationale" The library behaves differently to `#!cpp std::vector` and `#!cpp std::map`: - `#!cpp std::vector::operator[]` never inserts a new element. - `#!cpp std::map::operator[]` is not available for const values. The type `#!cpp json` wraps all JSON value types. It would be impossible to remove [`operator[]`](../../api/basic_json/operator%5B%5D.md) for const objects. At the same time, inserting elements for non-const objects is really convenient as it avoids awkward `insert` calls. To this end, we decided to have an inserting non-const behavior for both arrays and objects. !!! info The access is unchecked. In case the passed object key does not exist or the passed array index is invalid, no exception is thrown. !!! danger - It is **undefined behavior** to access a const object with a non-existing key. - It is **undefined behavior** to access a const array with an invalid index. - In debug mode, an **assertion** will fire in both cases. You can disable assertions by defining the preprocessor symbol `#!cpp NDEBUG` or redefine the macro [`JSON_ASSERT(x)`](../macros.md#json_assertx). See the documentation on [runtime assertions](../assertions.md) for more information. !!! failure "Exceptions" `operator[]` can only be used with objects (with a string argument) or with arrays (with a numeric argument). For other types, a [`basic_json::type_error`](../../home/exceptions.md#jsonexceptiontype_error305) is thrown. ## Summary | scenario | non-const value | const value | |-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------| | access to existing object key | reference to existing value is returned | const reference to existing value is returned | | access to valid array index | reference to existing value is returned | const reference to existing value is returned | | access to non-existing object key | reference to newly inserted `#!json null` value is returned | **undefined behavior**; [runtime assertion](../assertions.md) in debug mode | | access to invalid array index | reference to newly inserted `#!json null` value is returned; any index between previous maximal index and passed index are filled with `#!json null` | **undefined behavior**; [runtime assertion](../assertions.md) in debug mode | json-3.12.0/docs/mkdocs/docs/features/enum_conversion.md000066400000000000000000000044441477615276400233100ustar00rootroot00000000000000# Specializing enum conversion By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended. It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below: ```cpp // example enum type declaration enum TaskState { TS_STOPPED, TS_RUNNING, TS_COMPLETED, TS_INVALID=-1, }; // map TaskState values to JSON as strings NLOHMANN_JSON_SERIALIZE_ENUM( TaskState, { {TS_INVALID, nullptr}, {TS_STOPPED, "stopped"}, {TS_RUNNING, "running"}, {TS_COMPLETED, "completed"}, }) ``` The [`NLOHMANN_JSON_SERIALIZE_ENUM()` macro](../api/macros/nlohmann_json_serialize_enum.md) declares a set of `to_json()` / `from_json()` functions for type `TaskState` while avoiding repetition and boilerplate serialization code. ## Usage ```cpp // enum to JSON as string json j = TS_STOPPED; assert(j == "stopped"); // json string to enum json j3 = "running"; assert(j3.template get() == TS_RUNNING); // undefined json value to enum (where the first map entry above is the default) json jPi = 3.14; assert(jPi.template get() == TS_INVALID ); ``` ## Notes Just as in [Arbitrary Type Conversions](arbitrary_types.md) above, - [`NLOHMANN_JSON_SERIALIZE_ENUM()`](../api/macros/nlohmann_json_serialize_enum.md) MUST be declared in your enum type's namespace (which can be the global namespace), or the library will not be able to locate it, and it will default to integer serialization. - It MUST be available (e.g., proper headers must be included) everywhere you use the conversions. Other Important points: - When using `template get()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully. - If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON. - To disable the default serialization of enumerators as integers and force a compiler error instead, see [`JSON_DISABLE_ENUM_SERIALIZATION`](../api/macros/json_disable_enum_serialization.md). json-3.12.0/docs/mkdocs/docs/features/iterators.md000066400000000000000000000100241477615276400221020ustar00rootroot00000000000000# Iterators ## Overview A `basic_json` value is a container and allows access via iterators. Depending on the value type, `basic_json` stores zero or more values. As for other containers, `begin()` returns an iterator to the first value and `end()` returns an iterator to the value following the last value. The latter iterator is a placeholder and cannot be dereferenced. In case of null values, empty arrays, or empty objects, `begin()` will return `end()`. ![Illustration from cppreference.com](../images/range-begin-end.svg) ### Iteration order for objects When iterating over objects, values are ordered with respect to the `object_comparator_t` type which defaults to `std::less`. See the [types documentation](types/index.md#key-order) for more information. ??? example ```cpp // create JSON object {"one": 1, "two": 2, "three": 3} json j; j["one"] = 1; j["two"] = 2; j["three"] = 3; for (auto it = j.begin(); it != j.end(); ++it) { std::cout << *it << std::endl; } ``` Output: ```json 1 3 2 ``` The reason for the order is the lexicographic ordering of the object keys "one", "three", "two". ### Access object key during iteration The JSON iterators have two member functions, `key()` and `value()` to access the object key and stored value, respectively. When calling `key()` on a non-object iterator, an [invalid_iterator.207](../home/exceptions.md#jsonexceptioninvalid_iterator207) exception is thrown. ??? example ```cpp // create JSON object {"one": 1, "two": 2, "three": 3} json j; j["one"] = 1; j["two"] = 2; j["three"] = 3; for (auto it = j.begin(); it != j.end(); ++it) { std::cout << it.key() << " : " << it.value() << std::endl; } ``` Output: ```json one : 1 three : 3 two : 2 ``` ### Range-based for loops C++11 allows using range-based for loops to iterate over a container. ```cpp for (auto it : j_object) { // "it" is of type json::reference and has no key() member std::cout << "value: " << it << '\n'; } ``` For this reason, the `items()` function allows accessing `iterator::key()` and `iterator::value()` during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator. ```cpp for (auto& el : j_object.items()) { std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; } ``` The items() function also allows using structured bindings (C++17): ```cpp for (auto& [key, val] : j_object.items()) { std::cout << "key: " << key << ", value:" << val << '\n'; } ``` !!! note When iterating over an array, `key()` will return the index of the element as string. For primitive types (e.g., numbers), `key()` returns an empty string. !!! warning Using `items()` on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See [#2040](https://github.com/nlohmann/json/issues/2040) for more information. ### Reverse iteration order `rbegin()` and `rend()` return iterators in the reverse sequence. ![Illustration from cppreference.com](../images/range-rbegin-rend.svg) ??? example ```cpp json j = {1, 2, 3, 4}; for (auto it = j.rbegin(); it != j.rend(); ++it) { std::cout << *it << std::endl; } ``` Output: ```json 4 3 2 1 ``` ### Iterating strings and binary values Note that "value" means a JSON value in this setting, not values stored in the underlying containers. That is, `*begin()` returns the complete string or binary array and is also safe the underlying string or binary array is empty. ??? example ```cpp json j = "Hello, world"; for (auto it = j.begin(); it != j.end(); ++it) { std::cout << *it << std::endl; } ``` Output: ```json "Hello, world" ``` ## Iterator invalidation | Operations | invalidated iterators | |------------|-----------------------| | `clear` | all | json-3.12.0/docs/mkdocs/docs/features/json_patch.md000066400000000000000000000020111477615276400222130ustar00rootroot00000000000000# JSON Patch and Diff ## Patches JSON Patch ([RFC 6902](https://tools.ietf.org/html/rfc6902)) defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With the `patch` function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. ??? example The following code shows how a JSON patch is applied to a value. ```cpp --8<-- "examples/patch.cpp" ``` Output: ```json --8<-- "examples/patch.output" ``` ## Diff The library can also calculate a JSON patch (i.e., a **diff**) given two JSON values. !!! success "Invariant" For two JSON values *source* and *target*, the following code yields always true: ```cüü source.patch(diff(source, target)) == target; ``` ??? example The following code shows how a JSON patch is created as a diff for two JSON values. ```cpp --8<-- "examples/diff.cpp" ``` Output: ```json --8<-- "examples/diff.output" ``` json-3.12.0/docs/mkdocs/docs/features/json_pointer.md000066400000000000000000000103031477615276400225770ustar00rootroot00000000000000# JSON Pointer ## Introduction The library supports **JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) as an alternative means to address structured values. A JSON Pointer is a string that identifies a specific value within a JSON document. Consider the following JSON document ```json { "array": ["A", "B", "C"], "nested": { "one": 1, "two": 2, "three": [true, false] } } ``` Then every value inside the JSON document can be identified as follows: | JSON Pointer | JSON value | |-------------------|----------------------------------------------------------------------------------| | `` | `#!json {"array":["A","B","C"],"nested":{"one":1,"two":2,"three":[true,false]}}` | | `/array` | `#!json ["A","B","C"]` | | `/array/0` | `#!json A` | | `/array/1` | `#!json B` | | `/array/2` | `#!json C` | | `/nested` | `#!json {"one":1,"two":2,"three":[true,false]}` | | `/nested/one` | `#!json 1` | | `/nested/two` | `#!json 2` | | `/nested/three` | `#!json [true,false]` | | `/nested/three/0` | `#!json true` | | `/nested/three/1` | `#!json false` | Note `/` does not identify the root (i.e., the whole document), but an object entry with empty key `""`. See [RFC 6901](https://tools.ietf.org/html/rfc6901) for more information. ## JSON Pointer creation JSON Pointers can be created from a string: ```cpp json::json_pointer p = "/nested/one"; ``` Furthermore, a user-defined string literal can be used to achieve the same result: ```cpp auto p = "/nested/one"_json_pointer; ``` The escaping rules of [RFC 6901](https://tools.ietf.org/html/rfc6901) are implemented. See the [constructor documentation](../api/json_pointer/json_pointer.md) for more information. ## Value access JSON Pointers can be used in the [`at`](../api/basic_json/at.md), [`operator[]`](../api/basic_json/operator%5B%5D.md), and [`value`](../api/basic_json/value.md) functions just like object keys or array indices. ```cpp // the JSON value from above auto j = json::parse(R"({ "array": ["A", "B", "C"], "nested": { "one": 1, "two": 2, "three": [true, false] } })"); // access values auto val = j[""_json_pointer]; // {"array":["A","B","C"],...} auto val1 = j["/nested/one"_json_pointer]; // 1 auto val2 = j.at(json::json_pointer("/nested/three/1")); // false auto val3 = j.value(json::json_pointer("/nested/four"), 0); // 0 ``` ## Flatten / unflatten The library implements a function [`flatten`](../api/basic_json/flatten.md) to convert any JSON document into a JSON object where each key is a JSON Pointer and each value is a primitive JSON value (i.e., a string, boolean, number, or null). ```cpp // the JSON value from above auto j = json::parse(R"({ "array": ["A", "B", "C"], "nested": { "one": 1, "two": 2, "three": [true, false] } })"); // create flattened value auto j_flat = j.flatten(); ``` The resulting value `j_flat` is: ```json { "/array/0": "A", "/array/1": "B", "/array/2": "C", "/nested/one": 1, "/nested/two": 2, "/nested/three/0": true, "/nested/three/1": false } ``` The reverse function, [`unflatten`](../api/basic_json/unflatten.md) recreates the original value. ```cpp auto j_original = j_flat.unflatten(); ``` ## See also - Class [`json_pointer`](../api/json_pointer/index.md) - Function [`flatten`](../api/basic_json/flatten.md) - Function [`unflatten`](../api/basic_json/unflatten.md) - [JSON Patch](json_patch.md) json-3.12.0/docs/mkdocs/docs/features/macros.md000066400000000000000000000153631477615276400213650ustar00rootroot00000000000000# Supported Macros Some aspects of the library can be configured by defining preprocessor macros before including the `json.hpp` header. See also the [API documentation for macros](../api/macros/index.md) for examples and more information. ## `JSON_ASSERT(x)` This macro controls which code is executed for [runtime assertions](assertions.md) of the library. See [full documentation of `JSON_ASSERT(x)`](../api/macros/json_assert.md). ## `JSON_CATCH_USER(exception)` This macro overrides [`#!cpp catch`](https://en.cppreference.com/w/cpp/language/try_catch) calls inside the library. See [full documentation of `JSON_CATCH_USER(exception)`](../api/macros/json_throw_user.md). ## `JSON_DIAGNOSTICS` This macro enables extended diagnostics for exception messages. Possible values are `1` to enable or `0` to disable (default). When enabled, exception messages contain a [JSON Pointer](json_pointer.md) to the JSON value that triggered the exception, see [Extended diagnostic messages](../home/exceptions.md#extended-diagnostic-messages) for an example. Note that enabling this macro increases the size of every JSON value by one pointer and adds some runtime overhead. The diagnostics messages can also be controlled with the CMake option [`JSON_Diagnostics`](../integration/cmake.md#json_diagnostics) (`OFF` by default) which sets `JSON_DIAGNOSTICS` accordingly. See [full documentation of `JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md). ## `JSON_DIAGNOSTIC_POSITIONS` When enabled, two new member functions [`start_pos()`](../api/basic_json/start_pos.md) and [`end_pos()`](../api/basic_json/end_pos.md) are added to [`basic_json`](../api/basic_json/index.md) values. If the value was created by calling the[`parse`](../api/basic_json/parse.md) function, then these functions allow querying the byte positions of the value in the input it was parsed from. The byte positions are also used in exceptions to help locate errors. The diagnostics positions can also be controlled with the CMake option [`JSON_Diagnostic_Positions`](../integration/cmake.md#json_diagnostic_positions) (`OFF` by default) which sets `JSON_DIAGNOSTIC_POSITIONS` accordingly. See [full documentation of `JSON_DIAGNOSTIC_POSITIONS`](../api/macros/json_diagnostic_positions.md) ## `JSON_HAS_CPP_11`, `JSON_HAS_CPP_14`, `JSON_HAS_CPP_17`, `JSON_HAS_CPP_20` The library targets C++11, but also supports some features introduced in later C++ versions (e.g., `std::string_view` support for C++17). For these new features, the library implements some preprocessor checks to determine the C++ standard. By defining any of these symbols, the internal check is overridden and the provided C++ version is unconditionally assumed. This can be helpful for compilers that only implement parts of the standard and would be detected incorrectly. See [full documentation of `JSON_HAS_CPP_11`, `JSON_HAS_CPP_14`, `JSON_HAS_CPP_17`, and `JSON_HAS_CPP_20`](../api/macros/json_has_cpp_11.md). ## `JSON_HAS_FILESYSTEM`, `JSON_HAS_EXPERIMENTAL_FILESYSTEM` When compiling with C++17, the library provides conversions from and to `std::filesystem::path`. As compiler support for filesystem is limited, the library tries to detect whether ``/`std::filesystem` (`JSON_HAS_FILESYSTEM`) or ``/`std::experimental::filesystem` (`JSON_HAS_EXPERIMENTAL_FILESYSTEM`) should be used. To override the built-in check, define `JSON_HAS_FILESYSTEM` or `JSON_HAS_EXPERIMENTAL_FILESYSTEM` to `1`. See [full documentation of `JSON_HAS_FILESYSTEM` and `JSON_HAS_EXPERIMENTAL_FILESYSTEM`](../api/macros/json_has_filesystem.md). ## `JSON_NOEXCEPTION` Exceptions can be switched off by defining the symbol `JSON_NOEXCEPTION`. See [full documentation of `JSON_NOEXCEPTION`](../api/macros/json_noexception.md). ## `JSON_DISABLE_ENUM_SERIALIZATION` When defined, default parse and serialize functions for enums are excluded and have to be provided by the user, for example, using [`NLOHMANN_JSON_SERIALIZE_ENUM`](../api/macros/nlohmann_json_serialize_enum.md). See [full documentation of `JSON_DISABLE_ENUM_SERIALIZATION`](../api/macros/json_disable_enum_serialization.md). ## `JSON_NO_IO` When defined, headers ``, ``, ``, ``, and `` are not included and parse functions relying on these headers are excluded. This is relevant for environment where these I/O functions are disallowed for security reasons (e.g., Intel Software Guard Extensions (SGX)). See [full documentation of `JSON_NO_IO`](../api/macros/json_no_io.md). ## `JSON_SKIP_LIBRARY_VERSION_CHECK` When defined, the library will not create a compiler warning when a different version of the library was already included. See [full documentation of `JSON_SKIP_LIBRARY_VERSION_CHECK`](../api/macros/json_skip_library_version_check.md). ## `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK` When defined, the library will not create a compile error when a known unsupported compiler is detected. This allows using the library with compilers that do not fully support C++11 and may only work if unsupported features are not used. See [full documentation of `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK`](../api/macros/json_skip_unsupported_compiler_check.md). ## `JSON_THROW_USER(exception)` This macro overrides `#!cpp throw` calls inside the library. The argument is the exception to be thrown. See [full documentation of `JSON_THROW_USER(exception)`](../api/macros/json_throw_user.md). ## `JSON_TRY_USER` This macro overrides `#!cpp try` calls inside the library. See [full documentation of `JSON_TRY_USER`](../api/macros/json_throw_user.md). ## `JSON_USE_IMPLICIT_CONVERSIONS` When defined to `0`, implicit conversions are switched off. By default, implicit conversions are switched on. See [full documentation of `JSON_USE_IMPLICIT_CONVERSIONS`](../api/macros/json_use_implicit_conversions.md). ## `NLOHMANN_DEFINE_TYPE_*(...)`, `NLOHMANN_DEFINE_DERIVED_TYPE_*(...)` The library defines 12 macros to simplify the serialization/deserialization of types. See the page on [arbitrary type conversion](arbitrary_types.md#simplify-your-life-with-macros) for a detailed discussion. ## `NLOHMANN_JSON_SERIALIZE_ENUM(type, ...)` This macro simplifies the serialization/deserialization of enum types. See [Specializing enum conversion](enum_conversion.md) for more information. See [full documentation of `NLOHMANN_JSON_SERIALIZE_ENUM`](../api/macros/nlohmann_json_serialize_enum.md). ## `NLOHMANN_JSON_VERSION_MAJOR`, `NLOHMANN_JSON_VERSION_MINOR`, `NLOHMANN_JSON_VERSION_PATCH` These macros are defined by the library and contain the version numbers according to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html). See [full documentation of `NLOHMANN_JSON_VERSION_MAJOR`, `NLOHMANN_JSON_VERSION_MINOR`, and `NLOHMANN_JSON_VERSION_PATCH`](../api/macros/nlohmann_json_version_major.md). json-3.12.0/docs/mkdocs/docs/features/merge_patch.md000066400000000000000000000013701477615276400223500ustar00rootroot00000000000000# JSON Merge Patch The library supports JSON Merge Patch ([RFC 7386](https://tools.ietf.org/html/rfc7386)) as a patch format. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value. Instead of using [JSON Pointer](json_pointer.md) to specify values to be manipulated, it describes the changes using a syntax that closely mimics the document being modified. ??? example The following code shows how a JSON Merge Patch is applied to a JSON document. ```cpp --8<-- "examples/merge_patch.cpp" ``` Output: ```json --8<-- "examples/merge_patch.output" ``` json-3.12.0/docs/mkdocs/docs/features/namespace.md000066400000000000000000000103501477615276400220240ustar00rootroot00000000000000# `nlohmann` Namespace The 3.11.0 release introduced an [inline namespace](https://en.cppreference.com/w/cpp/language/namespace#Inline_namespaces) to allow different parts of a codebase to safely use different versions of the JSON library as long as they never exchange instances of library types. ## Structure The complete default namespace name is derived as follows: - The root namespace is always `nlohmann`. - The inline namespace starts with `json_abi` and is followed by serveral optional ABI tags according to the value of these ABI-affecting macros, in order: - [`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md) defined non-zero appends `_diag`. - [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](../api/macros/json_use_legacy_discarded_value_comparison.md) defined non-zero appends `_ldvcmp`. - The inline namespace ends with the suffix `_v` followed by the 3 components of the version number separated by underscores. To omit the version component, see [Disabling the version component](#disabling-the-version-component) below. For example, the namespace name for version 3.11.2 with `JSON_DIAGNOSTICS` defined to `1` is: ```cpp nlohmann::json_abi_diag_v3_11_2 ``` ## Purpose Several incompatibilities have been observed. Amongst the most common ones is linking code compiled with different definitions of [`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md). This is illustrated in the diagram below. ```mermaid graph json["nlohmann_json (v3.10.5)
JSON_DIAGNOSTICS=0"] json_diag["nlohmann_json (v3.10.5)
JSON_DIAGNOSTICS=1"] library["some library"] app["application"] library --> json app --> json_diag app --> library ``` In releases prior to 3.11.0, mixing any version of the JSON library with different `JSON_DIAGNOSTICS` settings would result in a crashing application. If `some_library` never passes instances of JSON library types to the application, this scenario became safe in version 3.11.0 and above due to the inline namespace yielding distinct symbol names. ## Limitations Neither the compiler nor the linker will issue as much as a warning when translation units – intended to be linked together and that include different versions and/or configurations of the JSON library – exchange and use library types. There is an exception when forward declarations are used (i.e., when including `json_fwd.hpp`) in which case the linker may complain about undefined references. ## Disabling the version component Different versions are not necessarily ABI-incompatible, but the project does not actively track changes in the ABI and recommends that all parts of a codebase exchanging library types be built with the same version. Users can, **at their own risk**, disable the version component of the linline namespace, allowing different versions – but not configurations – to be used in cases where the linker would otherwise output undefined reference errors. To do so, define [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](../api/macros/nlohmann_json_namespace_no_version.md) to `1`. This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next section to emulate the effect of the `NLOHMANN_JSON_NAMESPACE_NO_VERSION` macro. !!! danger "Use at your own risk" Disabling the namespace version component and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned! ## Disabling the inline namespace completely When interoperability with code using a pre-3.11.0 version of the library is required, users can, **at their own risk** restore the old namespace layout by redefining [`NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END`](../api/macros/nlohmann_json_namespace_begin.md) as follows: ```cpp #define NLOHMANN_JSON_NAMESPACE_BEGIN namespace nlohmann { #define NLOHMANN_JSON_NAMESPACE_END } ``` !!! danger "Use at your own risk" Overriding the namespace and mixing ABI-incompatible versions will result in crashes or incorrect behavior. You have been warned! ## Version history - Introduced inline namespace (`json_v3_11_0[_abi-tag]*`) in version 3.11.0. - Changed structure of inline namespace in version 3.11.2. json-3.12.0/docs/mkdocs/docs/features/object_order.md000066400000000000000000000051661477615276400225420ustar00rootroot00000000000000# Object Order The [JSON standard](https://tools.ietf.org/html/rfc8259.html) defines objects as "an unordered collection of zero or more name/value pairs". As such, an implementation does not need to preserve any specific order of object keys. ## Default behavior: sort keys The default type `nlohmann::json` uses a `std::map` to store JSON objects, and thus stores object keys **sorted alphabetically**. ??? example ```cpp #include #include "json.hpp" using json = nlohmann::json; int main() { json j; j["one"] = 1; j["two"] = 2; j["three"] = 3; std::cout << j.dump(2) << '\n'; } ``` Output: ```json { "one": 1, "three": 3, "two": 2 } ``` ## Alternative behavior: preserve insertion order If you do want to preserve the **insertion order**, you can try the type [`nlohmann::ordered_json`](https://github.com/nlohmann/json/issues/2179). ??? example ```cpp --8<-- "examples/ordered_json.cpp" ``` Output: ```json --8<-- "examples/ordered_json.output" ``` Alternatively, you can use a more sophisticated ordered map like [`tsl::ordered_map`](https://github.com/Tessil/ordered-map) ([integration](https://github.com/nlohmann/json/issues/546#issuecomment-304447518)) or [`nlohmann::fifo_map`](https://github.com/nlohmann/fifo_map) ([integration](https://github.com/nlohmann/json/issues/485#issuecomment-333652309)). ### Notes on parsing Note that you also need to call the right [`parse`](../api/basic_json/parse.md) function when reading from a file. Assume file `input.json` contains the JSON object above: ```json { "one": 1, "two": 2, "three": 3 } ``` !!! success "Right way" The following code correctly calls the `parse` function from `nlohmann::ordered_json`: ```cpp std::ifstream i("input.json"); auto j = nlohmann::ordered_json::parse(i); std::cout << j.dump(2) << std::endl; ``` The output will be: ```json { "one": 1, "two": 2, "three": 3 } ``` ??? failure "Wrong way" The following code incorrectly calls the `parse` function from `nlohmann::json` which does not preserve the insertion order, but sorts object keys. Assigning the result to `nlohmann::ordered_json` compiles, but does not restore the order from the input file. ```cpp std::ifstream i("input.json"); nlohmann::ordered_json j = nlohmann::json::parse(i); std::cout << j.dump(2) << std::endl; ``` The output will be: ```json { "one": 1, "three": 3 "two": 2, } ``` json-3.12.0/docs/mkdocs/docs/features/parsing/000077500000000000000000000000001477615276400212125ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/features/parsing/index.md000066400000000000000000000002371477615276400226450ustar00rootroot00000000000000# Parsing !!! note This page is under construction. ## Input ## SAX vs. DOM parsing ## Exceptions See [parsing and exceptions](parse_exceptions.md). json-3.12.0/docs/mkdocs/docs/features/parsing/json_lines.md000066400000000000000000000030011477615276400236710ustar00rootroot00000000000000# JSON Lines The [JSON Lines](https://jsonlines.org) format is a text format of newline-delimited JSON. In particular: 1. The input must be UTF-8 encoded. 2. Every line must be a valid JSON value. 3. The line separator must be `\n`. As `\r` is silently ignored, `\r\n` is also supported. 4. The final character may be `\n`, but is not required to be one. !!! example "JSON Text example" ```json {"name": "Gilbert", "wins": [["straight", "7♣"], ["one pair", "10♥"]]} {"name": "Alexa", "wins": [["two pair", "4♠"], ["two pair", "9♠"]]} {"name": "May", "wins": []} {"name": "Deloise", "wins": [["three of a kind", "5♣"]]} ``` JSON Lines input with more than one value is treated as invalid JSON by the [`parse`](../../api/basic_json/parse.md) or [`accept`](../../api/basic_json/accept.md) functions. To process it line by line, functions like [`std::getline`](https://en.cppreference.com/w/cpp/string/basic_string/getline) can be used: !!! example "Example: Parse JSON Text input line by line" The example below demonstrates how JSON Lines can be processed. ```cpp --8<-- "examples/json_lines.cpp" ``` Output: ```json --8<-- "examples/json_lines.output" ``` !!! warning "Note" Using [`operator>>`](../../api/operator_gtgt.md) like ```cpp json j; while (input >> j) { std::cout << j << std::endl; } ``` with a JSON Lines input does not work, because the parser will try to parse one value after the last one. json-3.12.0/docs/mkdocs/docs/features/parsing/parse_exceptions.md000066400000000000000000000066161477615276400251200ustar00rootroot00000000000000# Parsing and Exceptions When the input is not valid JSON, an exception of type [`parse_error`](../../home/exceptions.md#parse-errors) is thrown. This exception contains the position in the input where the error occurred, together with a diagnostic message and the last read input token. The exceptions page contains a [list of examples for parse error exceptions](../../home/exceptions.md#parse-errors). In case you process untrusted input, always enclose your code with a `#!cpp try`/`#!cpp catch` block, like ```cpp json j; try { j = json::parse(my_input); } catch (json::parse_error& ex) { std::cerr << "parse error at byte " << ex.byte << std::endl; } ``` In case exceptions are undesired or not supported by the environment, there are different ways to proceed: ## Switch off exceptions The `parse()` function accepts a `#!cpp bool` parameter `allow_exceptions` which controls whether an exception is thrown when a parse error occurs (`#!cpp true`, default) or whether a discarded value should be returned (`#!cpp false`). ```cpp json j = json::parse(my_input, nullptr, false); if (j.is_discarded()) { std::cerr << "parse error" << std::endl; } ``` Note there is no diagnostic information available in this scenario. ## Use accept() function Alternatively, function `accept()` can be used which does not return a `json` value, but a `#!cpp bool` indicating whether the input is valid JSON. ```cpp if (!json::accept(my_input)) { std::cerr << "parse error" << std::endl; } ``` Again, there is no diagnostic information available. ## User-defined SAX interface Finally, you can implement the [SAX interface](sax_interface.md) and decide what should happen in case of a parse error. This function has the following interface: ```cpp bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex); ``` The return value indicates whether the parsing should continue, so the function should usually return `#!cpp false`. ??? example ```cpp #include #include "json.hpp" using json = nlohmann::json; class sax_no_exception : public nlohmann::detail::json_sax_dom_parser { public: sax_no_exception(json& j) : nlohmann::detail::json_sax_dom_parser(j, false) {} bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) { std::cerr << "parse error at input byte " << position << "\n" << ex.what() << "\n" << "last read: \"" << last_token << "\"" << std::endl; return false; } }; int main() { std::string myinput = "[1,2,3,]"; json result; sax_no_exception sax(result); bool parse_result = json::sax_parse(myinput, &sax); if (!parse_result) { std::cerr << "parsing unsuccessful!" << std::endl; } std::cout << "parsed value: " << result << std::endl; } ``` Output: ``` parse error at input byte 8 [json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal last read: "3,]" parsing unsuccessful! parsed value: [1,2,3] ``` json-3.12.0/docs/mkdocs/docs/features/parsing/parser_callbacks.md000066400000000000000000000073021477615276400250310ustar00rootroot00000000000000# Parser Callbacks ## Overview With a parser callback function, the result of parsing a JSON text can be influenced. When passed to `parse`, it is called on certain events (passed as `parse_event_t` via parameter `event`) with a set recursion depth `depth` and context JSON value `parsed`. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not. The type of the callback function is: ```cpp template using parser_callback_t = std::function; ``` ## Callback event types We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters `depth`, `event`, and `parsed`. | parameter `event` | description | parameter `depth` | parameter `parsed` | |-------------------------------|-----------------------------------------------------------|-------------------------------------------|----------------------------------| | `parse_event_t::object_start` | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded | | `parse_event_t::key` | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key | | `parse_event_t::object_end` | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object | | `parse_event_t::array_start` | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded | | `parse_event_t::array_end` | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array | | `parse_event_t::value` | the parser finished reading a JSON value | depth of the value | the parsed JSON value | ??? example When parsing the following JSON text, ```json { "name": "Berlin", "location": [ 52.519444, 13.406667 ] } ``` these calls are made to the callback function: | event | depth | parsed | | -------------- | ----- | ------ | | `object_start` | 0 | *discarded* | | `key` | 1 | `#!json "name"` | | `value` | 1 | `#!json "Berlin"` | | `key` | 1 | `#!json "location"` | | `array_start` | 1 | *discarded* | | `value` | 2 | `#!json 52.519444` | | `value` | 2 | `#!json 13.406667` | | `array_end` | 1 | `#!json [52.519444,13.406667]` | | `object_end` | 0 | `#!json {"location":[52.519444,13.406667],"name":"Berlin"}` | ## Return value Discarding a value (i.e., returning `#!c false`) has different effects depending on the context in which the function was called: - Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read. - In case a value outside a structured type is skipped, it is replaced with `#!json null`. This case happens if the top-level element is skipped. ??? example The example below demonstrates the `parse()` function with and without callback function. ```cpp --8<-- "examples/parse__string__parser_callback_t.cpp" ``` Output: ```json --8<-- "examples/parse__string__parser_callback_t.output" ``` json-3.12.0/docs/mkdocs/docs/features/parsing/sax_interface.md000066400000000000000000000062121477615276400243500ustar00rootroot00000000000000# SAX Interface The library uses a SAX-like interface with the following functions: ```mermaid classDiagram class sax_t ["json::sax_t"] { <> +bool null()* +bool boolean(bool val)* +bool number_integer(number_integer_t val)* +bool number_unsigned(number_unsigned_t val)* +bool number_float(number_float_t val, const string_t& s)* +bool string(string_t& val)* +bool binary(binary_t& val)* +bool start_object(std::size_t elements)* +bool end_object()* +bool start_array(std::size_t elements)* +bool end_array()* +bool key(string_t& val)* +bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex)* } ``` ```cpp // called when null is parsed bool null(); // called when a boolean is parsed; value is passed bool boolean(bool val); // called when a signed or unsigned integer number is parsed; value is passed bool number_integer(number_integer_t val); bool number_unsigned(number_unsigned_t val); // called when a floating-point number is parsed; value and original string is passed bool number_float(number_float_t val, const string_t& s); // called when a string is parsed; value is passed and can be safely moved away bool string(string_t& val); // called when a binary value is parsed; value is passed and can be safely moved away bool binary(binary_t& val); // called when an object or array begins or ends, resp. The number of elements is passed (or -1 if not known) bool start_object(std::size_t elements); bool end_object(); bool start_array(std::size_t elements); bool end_array(); // called when an object key is parsed; value is passed and can be safely moved away bool key(string_t& val); // called when a parse error occurs; byte position, the last token, and an exception is passed bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex); ``` The return value of each function determines whether parsing should proceed. To implement your own SAX handler, proceed as follows: 1. Implement the SAX interface in a class. You can use class `nlohmann::json_sax` as base class, but you can also use any class where the functions described above are implemented and public. 2. Create an object of your SAX interface class, e.g. `my_sax`. 3. Call `#!cpp bool json::sax_parse(input, &my_sax);` where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface. Note the `sax_parse` function only returns a `#!cpp bool` indicating the result of the last executed SAX event. It does not return `json` value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your `parse_error` implementation. Internally, the SAX interface is used for the DOM parser (class `json_sax_dom_parser`) as well as the acceptor (`json_sax_acceptor`), see file `json_sax.hpp`. ## See also - [json_sax](../../api/json_sax/index.md) - documentation of the SAX interface - [sax_parse](../../api/basic_json/sax_parse.md) - SAX parser json-3.12.0/docs/mkdocs/docs/features/types/000077500000000000000000000000001477615276400207135ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/features/types/index.md000066400000000000000000000305311477615276400223460ustar00rootroot00000000000000# Types This page gives an overview of how JSON values are stored and how this can be configured. ## Overview By default, JSON values are stored as follows: | JSON type | C++ type | |-----------|-----------------------------------------------| | object | `std::map` | | array | `std::vector` | | null | `std::nullptr_t` | | string | `std::string` | | boolean | `bool` | | number | `std::int64_t`, `std::uint64_t`, and `double` | Note there are three different types for numbers - when parsing JSON text, the best fitting type is chosen. ## Storage ```mermaid classDiagram class value_t { <> null object array string boolean number_integer number_unsigned number_float binary discarded } class json_value { <> object_t* object array_t* array string_t* string binary_t* binary boolean_t boolean number_integer_t number_integer number_unsigned_t number_unsigned number_float_t number_float } class basic_json { -value_t m_type -json_value m_value +typedef object_t +typedef array_t +typedef binary_t +typedef boolean_t +typedef number_integer_t +typedef number_unsigned_t +typedef number_float_t } basic_json .. json_value basic_json .. value_t ``` ## Template arguments The data types to store a JSON value are derived from the template arguments passed to class `basic_json`: ```cpp template< template class ObjectType = std::map, template class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template class AllocatorType = std::allocator, template class JSONSerializer = adl_serializer, class BinaryType = std::vector > class basic_json; ``` Type `json` is an alias for `basic_json<>` and uses the default types. From the template arguments, the following types are derived: ```cpp using object_comparator_t = std::less<>; using object_t = ObjectType>>; using array_t = ArrayType>; using string_t = StringType; using boolean_t = BooleanType; using number_integer_t = NumberIntegerType; using number_unsigned_t = NumberUnsignedType; using number_float_t = NumberFloatType; using binary_t = nlohmann::byte_container_with_subtype; ``` ## Objects [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows: > An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array. ### Default type With the default values for *ObjectType* (`std::map`), *StringType* (`std::string`), and *AllocatorType* (`std::allocator`), the default value for `object_t` is: ```cpp std::map< std::string, // key_type basic_json, // value_type std::less<>, // key_compare std::allocator> // allocator_type > ``` ### Behavior The choice of `object_t` influences the behavior of the JSON class. With the default type, objects have the following behavior: - When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings. - When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, `#!json {"key": 2, "key": 1}` could be equal to either `#!json {"key": 1}` or `#!json {"key": 2}`. - Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see `dump`) in this order. For instance, both `#!json {"b": 1, "a": 2}` and `#!json {"a": 2, "b": 1}` will be stored and serialized as `#!json {"a": 2, "b": 1}`. - When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, `#!json {"b": 1, "a": 2}` and `#!json {"a": 2, "b": 1}` will be treated as equal. ### Key order The order name/value pairs are added to the object are *not* preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to [RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON objects. ### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the `max_size` function of a JSON object. ### Storage Objects are stored as pointers in a `basic_json` type. That is, for any access to object values, a pointer of type `object_t*` must be dereferenced. ## Arrays [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows: > An array is an ordered sequence of zero or more values. ### Default type With the default values for *ArrayType* (`std::vector`) and *AllocatorType* (`std::allocator`), the default value for `array_t` is: ```cpp std::vector< basic_json, // value_type std::allocator // allocator_type > ``` ### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the `max_size` function of a JSON array. ### Storage Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of type `array_t*` must be dereferenced. ## Strings [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows: > A string is a sequence of zero or more Unicode characters. Unicode values are split by the JSON class into byte-sized characters during deserialization. ### Default type With the default values for *StringType* (`std::string`), the default value for `string_t` is `#!cpp std::string`. ### Encoding Strings are stored in UTF-8 encoding. Therefore, functions like `std::string::size()` or `std::string::length()` return the number of **bytes** in the string rather than the number of characters or glyphs. ### String comparison [RFC 8259](https://tools.ietf.org/html/rfc8259) states: > Software implementations are typically required to test names of object members for equality. Implementations that transform the textual representation into sequences of Unicode code units and then perform the comparison numerically, code unit by code unit are interoperable in the sense that implementations will agree in all cases on equality or inequality of two strings. For example, implementations that compare strings with escaped characters unconverted may incorrectly find that `"a\\b"` and `"a\u005Cb"` are not equal. This implementation is interoperable as it does compare strings code unit by code unit. ### Storage String values are stored as pointers in a `basic_json` type. That is, for any access to string values, a pointer of type `string_t*` must be dereferenced. ## Booleans [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a type which differentiates the two literals `true` and `false`. ### Default type With the default values for *BooleanType* (`#!cpp bool`), the default value for `boolean_t` is `#!cpp bool`. ### Storage Boolean values are stored directly inside a `basic_json` type. ## Numbers See the [number handling](number_handling.md) article for a detailed discussion on how numbers are handled by this library. [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: > The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. (...) Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer, or a floating-point number. Therefore, three different types, `number_integer_t`, `number_unsigned_t`, and `number_float_t` are used. ### Default types With the default values for *NumberIntegerType* (`std::int64_t`), the default value for `number_integer_t` is `std::int64_t`. With the default values for *NumberUnsignedType* (`std::uint64_t`), the default value for `number_unsigned_t` is `std::uint64_t`. With the default values for *NumberFloatType* (`#!cpp double`), the default value for `number_float_t` is `#!cpp double`. ### Default behavior - The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++ integer literal `#!c 010` will be serialized to `#!c 8`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `#!json null`. ### Limits [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: > An implementation may set limits on the range and precision of numbers. When the default type is used, the maximal integer number that can be stored is `#!c 9223372036854775807` (`INT64_MAX`) and the minimal integer number that can be stored is `#!c -9223372036854775808` (`INT64_MIN`). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as `number_unsigned_t` or `number_float_t`. When the default type is used, the maximal unsigned integer number that can be stored is `#!c 18446744073709551615` (`UINT64_MAX`) and the minimal integer number that can be stored is `#!c 0`. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will automatically be stored as `number_integer_t` or `number_float_t`. [RFC 8259](https://tools.ietf.org/html/rfc8259) further states: > Note that when such software is used, numbers that are integers and are in the range $[-2^{53}+1, 2^{53}-1]$ are interoperable in the sense that implementations will agree exactly on their numeric values. As this range is a subrange of the exactly supported range [`INT64_MIN`, `INT64_MAX`], this class's integer type is interoperable. [RFC 8259](https://tools.ietf.org/html/rfc8259) states: > This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754-2008 binary64 (double precision) numbers is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than `#!c -1.79769313486232e+308` and values greater than `#!c 1.79769313486232e+308` will be stored as NaN internally and be serialized to `#!json null`. ### Storage Integer number values, unsigned integer number values, and floating-point number values are stored directly inside a `basic_json` type. json-3.12.0/docs/mkdocs/docs/features/types/number_handling.md000066400000000000000000000353571477615276400244060ustar00rootroot00000000000000# Number Handling This document describes how the library is handling numbers. ## Background This section briefly summarizes how the JSON specification describes how numbers should be handled. ### JSON number syntax JSON defines the syntax of numbers as follows: !!! quote "[RFC 8259](https://tools.ietf.org/html/rfc8259#section-6), Section 6" The representation of numbers is similar to that used in most programming languages. A number is represented in base 10 using decimal digits. It contains an integer component that may be prefixed with an optional minus sign, which may be followed by a fraction part and/or an exponent part. Leading zeros are not allowed. A fraction part is a decimal point followed by one or more digits. An exponent part begins with the letter E in uppercase or lowercase, which may be followed by a plus or minus sign. The E and optional sign are followed by one or more digits. The following railroad diagram from [json.org](https://json.org) visualizes the number syntax: ![Syntax for JSON numbers](../../images/json_syntax_number.png) ### Number interoperability On number interoperability, the following remarks are made: !!! quote "[RFC 8259](https://tools.ietf.org/html/rfc8259#section-6), Section 6" This specification allows implementations to set limits on the range and precision of numbers accepted. Since software that implements IEEE 754 binary64 (double precision) numbers [IEEE754] is generally available and widely used, good interoperability can be achieved by implementations that expect no more precision or range than these provide, in the sense that implementations will approximate JSON numbers within the expected precision. A JSON number such as 1E400 or 3.141592653589793238462643383279 may indicate potential interoperability problems, since it suggests that the software that created it expects receiving software to have greater capabilities for numeric magnitude and precision than is widely available. Note that when such software is used, numbers that are integers and are in the range $[-2^{53}+1, 2^{53}-1]$ are interoperable in the sense that implementations will agree exactly on their numeric values. ## Library implementation This section describes how this library implements the above number specification. ### Number storage In the default [`json`](../../api/json.md) type, numbers are stored as `#!c std::uint64_t`, `#!c std::int64_t`, and `#!c double`, respectively. Thereby, `#!c std::uint64_t` and `#!c std::int64_t` are used only if they can store the number without loss of precision. If this is impossible (e.g., if the number is too large), the number is stored as `#!c double`. !!! info "Notes" - Numbers with a decimal digit or scientific notation are always stored as `#!c double`. - The number types can be changed, see [Template number types](#template-number-types). - As of version 3.9.1, the conversion is realized by [`std::strtoull`](https://en.cppreference.com/w/cpp/string/byte/strtoul), [`std::strtoll`](https://en.cppreference.com/w/cpp/string/byte/strtol), and [`std::strtod`](https://en.cppreference.com/w/cpp/string/byte/strtof), respectively. !!! example "Examples" - Integer `#!c -12345678912345789123456789` is smaller than `#!c INT64_MIN` and will be stored as floating-point number `#!c -1.2345678912345788e+25`. - Integer `#!c 1E3` will be stored as floating-point number `#!c 1000.0`. ### Number limits - Any 64-bit signed or unsigned integer can be stored without loss of precision. - Numbers exceeding the limits of `#!c double` (i.e., numbers that after conversion via [`std::strtod`](https://en.cppreference.com/w/cpp/string/byte/strtof) are not satisfying [`std::isfinite`](https://en.cppreference.com/w/cpp/numeric/math/isfinite) such as `#!c 1E400`) will throw exception [`json.exception.out_of_range.406`](../../home/exceptions.md#jsonexceptionout_of_range406) during parsing. - Floating-point numbers are rounded to the next number representable as `double`. For instance `#!c 3.141592653589793238462643383279` is stored as [`0x400921fb54442d18`](https://float.exposed/0x400921fb54442d18). This is the same behavior as the code `#!c double x = 3.141592653589793238462643383279;`. !!! success "Interoperability" - The library interoperable with respect to the specification, because its supported range $[-2^{63}, 2^{64}-1]$ is larger than the described range $[-2^{53}+1, 2^{53}-1]$. - All integers outside the range $[-2^{63}, 2^{64}-1]$, as well as floating-point numbers are stored as `double`. This also concurs with the specification above. ### Zeros The JSON number grammar allows for different ways to express zero, and this library will store zeros differently: | Literal | Stored value and type | Serialization | |---------|------------------------|---------------| | `0` | `#!c std::uint64_t(0)` | `0` | | `-0` | `#!c std::int64_t(0)` | `0` | | `0.0` | `#!c double(0.0)` | `0.0` | | `-0.0` | `#!c double(-0.0)` | `-0.0` | | `0E0` | `#!c double(0.0)` | `0.0` | | `-0E0` | `#!c double(-0.0)` | `-0.0` | That is, `-0` is stored as a signed integer, but the serialization does not reproduce the `-`. ### Number serialization - Integer numbers are serialized as is; that is, no scientific notation is used. - Floating-point numbers are serialized as specified by the `#!c %g` printf modifier with [`std::numeric_limits::max_digits10`](https://en.cppreference.com/w/cpp/types/numeric_limits/max_digits10) significant digits. The rationale is to use the shortest representation while still allowing round-tripping. !!! hint "Notes regarding precision of floating-point numbers" As described above, floating-point numbers are rounded to the nearest double and serialized with the shortest representation to allow round-tripping. This can yield confusing examples: - The serialization can have fewer decimal places than the input: `#!c 2555.5599999999999` will be serialized as `#!c 2555.56`. The reverse can also be true. - The serialization can be in scientific notation even if the input is not: `#!c 0.0000972439793401814` will be serialized as `#!c 9.72439793401814e-05`. The reverse can also be true: `#!c 12345E-5` will be serialized as `#!c 0.12345`. - Conversions from `#!c float` to `#!c double` can also introduce rounding errors: ```cpp float f = 0.3; json j = f; std::cout << j << '\n'; ``` yields `#!c 0.30000001192092896`. All examples here can be reproduced by passing the original double value to ```cpp std::printf("%.*g\n", std::numeric_limits::max_digits10, double_value); ``` #### NaN handling NaN (not-a-number) cannot be expressed with the number syntax described above and are in fact explicitly excluded: !!! quote "[RFC 8259](https://tools.ietf.org/html/rfc8259#section-6), Section 6" Numeric values that cannot be represented in the grammar below (such as Infinity and NaN) are not permitted. That is, there is no way to *parse* a NaN value. However, assignments can store NaN values in a JSON value. This library serializes NaN values as `#!js null`. This corresponds to the behavior of JavaScript's [`JSON.stringify`](https://www.w3schools.com/js/js_json_stringify.asp) function. !!! example The following example shows how a NaN value is stored in a `json` value. ```cpp int main() { double val = std::numeric_limits::quiet_NaN(); std::cout << "val=" << val << std::endl; json j = val; std::cout << "j=" << j.dump() << std::endl; val = j; std::cout << "val=" << val << std::endl; } ``` output: ``` val=nan j=null val=nan ``` ### Number comparison Floating-point inside JSON values numbers are compared with `#!c json::number_float_t::operator==` which is `#!c double::operator==` by default. !!! example "Alternative comparison functions" To compare floating-point while respecting an epsilon, an alternative [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) could be used, for instance ```cpp template::value, T>::type> inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept { return std::abs(a - b) <= epsilon; } ``` Or you can self-define an operator equal function like this: ```cpp bool my_equal(const_reference lhs, const_reference rhs) { const auto lhs_type lhs.type(); const auto rhs_type rhs.type(); if (lhs_type == rhs_type) { switch(lhs_type) { // self_defined case case value_t::number_float: return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); // other cases remain the same with the original ... } } ... } ``` (see [#703](https://github.com/nlohmann/json/issues/703) for more information.) !!! note NaN values never compare equal to themselves or to other NaN values. See [#514](https://github.com/nlohmann/json/issues/514). ### Number conversion Just like the C++ language itself, the `get` family of functions allows conversions between unsigned and signed integers, and between integers and floating-point values to integers. This behavior may be surprising. !!! warning "Unconditional number conversions" ```cpp hl_lines="3" double d = 42.3; // non-integer double value 42.3 json jd = d; // stores double value 42.3 std::int64_t i = jd.template get(); // now i==42; no warning or error is produced ``` Note the last line with throw a [`json.exception.type_error.302`](../../home/exceptions.md#jsonexceptiontype_error302) exception if `jd` is not a numerical type, for instance a string. The rationale is twofold: 1. JSON does not define a number type or precision (see above). 2. C++ also allows silently converting between number types. !!! success "Conditional number conversion" The code above can be solved by explicitly checking the nature of the value with members such as [`is_number_integer()`](../../api/basic_json/is_number_integer.md) or [`is_number_unsigned()`](../../api/basic_json/is_number_unsigned.md): ```cpp hl_lines="2" // check if jd is really integer-valued if (jd.is_number_integer()) { // if so, do the conversion and use i std::int64_t i = jd.template get(); // ... } else { // otherwise, take appropriate action // ... } ``` Note this approach also has the advantage that it can react on non-numerical JSON value types such as strings. (Example taken from [#777](https://github.com/nlohmann/json/issues/777#issuecomment-459968458).) ### Determine number types As the example in [Number conversion](#number-conversion) shows, there are different functions to determine the type of the stored number: - [`is_number()`](../../api/basic_json/is_number.md) returns `#!c true` for any number type - [`is_number_integer()`](../../api/basic_json/is_number_integer.md) returns `#!c true` for signed and unsigned integers - [`is_number_unsigned()`](../../api/basic_json/is_number_unsigned.md) returns `#!c true` for unsigned integers only - [`is_number_float()`](../../api/basic_json/is_number_float.md) returns `#!c true` for floating-point numbers - [`type_name()`](../../api/basic_json/type_name.md) returns `#!c "number"` for any number type - [`type()`](../../api/basic_json/type.md) returns a different enumerator of [`value_t`](../../api/basic_json/value_t.md) for all number types | function | unsigned integer | signed integer | floating-point | string | |----------------------------------------------------------------------|-------------------|------------------|----------------|----------------| | [`is_number()`](../../api/basic_json/is_number.md) | `#!c true` | `#!c true` | `#!c true` | `#!c false` | | [`is_number_integer()`](../../api/basic_json/is_number_integer.md) | `#!c true` | `#!c true` | `#!c false` | `#!c false` | | [`is_number_unsigned()`](../../api/basic_json/is_number_unsigned.md) | `#!c true` | `#!c false` | `#!c false` | `#!c false` | | [`is_number_float()`](../../api/basic_json/is_number_float.md) | `#!c false` | `#!c false` | `#!c true` | `#!c false` | | [`type_name()`](../../api/basic_json/type_name.md) | `#!c "number"` | `#!c "number"` | `#!c "number"` | `#!c "string"` | | [`type()`](../../api/basic_json/type.md) | `number_unsigned` | `number_integer` | `number_float` | `string` | ### Template number types The number types can be changed with template parameters. | position | number type | default type | possible values | |----------|-------------------|---------------------|------------------------------------------------| | 5 | signed integers | `#!c std::int64_t` | `#!c std::int32_t`, `#!c std::int16_t`, etc. | | 6 | unsigned integers | `#!c std::uint64_t` | `#!c std::uint32_t`, `#!c std::uint16_t`, etc. | | 7 | floating-point | `#!c double` | `#!c float`, `#!c long double` | !!! info "Constraints on number types" - The type for signed integers must be convertible from `#!c long long`. The type for floating-point numbers is used in case of overflow. - The type for unsigned integers must be convertible from `#!c unsigned long long`. The type for floating-point numbers is used in case of overflow. - The types for signed and unsigned integers must be distinct, see [#2573](https://github.com/nlohmann/json/issues/2573). - Only `#!c double`, `#!c float`, and `#!c long double` are supported for floating-point numbers. !!! example A `basic_json` type that uses `#!c long double` as floating-point type. ```cpp hl_lines="2" using json_ld = nlohmann::basic_json; ``` Note values should then be parsed with `json_ld::parse` rather than `json::parse` as the latter would parse floating-point values to `#!c double` before then converting them to `#!c long double`. json-3.12.0/docs/mkdocs/docs/home/000077500000000000000000000000001477615276400166615ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/home/architecture.md000066400000000000000000000057211477615276400216720ustar00rootroot00000000000000# Architecture !!! info This page is still under construction. Its goal is to provide a high-level overview of the library's architecture. This should help new contributors to get an idea of the used concepts and where to make changes. ## Overview The main structure is class [nlohmann::basic_json](../api/basic_json/index.md). - public API - container interface - iterators ## Template specializations - describe template parameters of `basic_json` - [`json`](../api/json.md) - [`ordered_json`](../api/ordered_json.md) via [`ordered_map`](../api/ordered_map.md) ## Value storage Values are stored as a tagged union of [value_t](../api/basic_json/value_t.md) and json_value. ```cpp /// the type of the current element value_t m_type = value_t::null; /// the value of the current element json_value m_value = {}; ``` with ```cpp enum class value_t : std::uint8_t { null, ///< null value object, ///< object (unordered set of name/value pairs) array, ///< array (ordered collection of values) string, ///< string value boolean, ///< boolean value number_integer, ///< number value (signed integer) number_unsigned, ///< number value (unsigned integer) number_float, ///< number value (floating-point) binary, ///< binary array (ordered collection of bytes) discarded ///< discarded by the parser callback function }; union json_value { /// object (stored with pointer to save storage) object_t *object; /// array (stored with pointer to save storage) array_t *array; /// string (stored with pointer to save storage) string_t *string; /// binary (stored with pointer to save storage) binary_t *binary; /// boolean boolean_t boolean; /// number (integer) number_integer_t number_integer; /// number (unsigned integer) number_unsigned_t number_unsigned; /// number (floating-point) number_float_t number_float; }; ``` ## Parsing inputs (deserialization) Input is read via **input adapters** that abstract a source with a common interface: ```cpp /// read a single character std::char_traits::int_type get_character() noexcept; /// read multiple characters to a destination buffer and /// returns the number of characters successfully read template std::size_t get_elements(T* dest, std::size_t count = 1); ``` List examples of input adapters. ## SAX Interface TODO ## Writing outputs (serialization) Output is written via **output adapters**: ```cpp template void write_character(CharType c); template void write_characters(const CharType* s, std::size_t length); ``` List examples of output adapters. ## Value conversion ```cpp template void to_json(basic_json& j, const T& t); template void from_json(const basic_json& j, T& t); ``` ## Additional features - JSON Pointers - Binary formats - Custom base class - Conversion macros ## Details namespace - C++ feature backports json-3.12.0/docs/mkdocs/docs/home/customers.md000066400000000000000000000627401477615276400212400ustar00rootroot00000000000000# Customers The library is used in multiple projects, applications, operating systems, etc. The list below is not exhaustive, but the result of an internet search. If you know further customers of the library, [please let me know](mailto:mail@nlohmann.me). [![](../images/customers.png)](../images/customers.png) ## Space Exploration - [**Peregrine Lunar Lander Flight 01**](https://en.wikipedia.org/wiki/Peregrine_Mission_One) - The library was used for payload management in the **Peregrine Moon Lander**, developed by **Astrobotic Technology** and launched as part of NASA's **Commercial Lunar Payload Services (CLPS)** program. After six days in orbit, the spacecraft was intentionally redirected into Earth's atmosphere, where it burned up over the Pacific Ocean on **January 18, 2024**. ## Automotive - [**Alexa Auto SDK**](https://github.com/alexa/alexa-auto-sdk), a software development kit enabling the integration of Alexa into automotive systems - [**Apollo**](https://github.com/ApolloAuto/apollo), a framework for building autonomous driving systems - [**Automotive Grade Linux (AGL)**](https://download.automotivelinux.org/AGL/release/jellyfish/latest/qemux86-64/deploy/licenses/nlohmann-json/): a collaborative open-source platform for automotive software development - [**Genesis Motor** (infotainment)](http://webmanual.genesis.com/ccIC/AVNT/JW/KOR/English/reference010.html), a luxury automotive brand - [**Hyundai** (infotainment)](https://www.hyundai.com/wsvc/ww/download.file.do?id=/content/hyundai/ww/data/opensource/data/GN7-2022/licenseCode/info), a global automotive brand - [**Kia** (infotainment)](http://webmanual.kia.com/PREM_GEN6/AVNT/RJPE/KOR/Korean/reference010.html), a global automotive brand - [**Mercedes-Benz Operating System (MB.OS)**](https://group.mercedes-benz.com/careers/about-us/mercedes-benz-operating-system/), a core component of the vehicle software ecosystem from Mercedes-Benz - [**Rivian** (infotainment)](https://assets.ctfassets.net/2md5qhoeajym/3cwyo4eoufk4yingUwusFt/ded2c47da620fdfc99c88c7156d2c1d8/In-Vehicle_OSS_Attribution_2024__11-24_.pdf), an electric vehicle manufacturer - [**Suzuki** (infotainment)](https://www.globalsuzuki.com/motorcycle/ipc/oss/oss_48KA_00.pdf), a global automotive and motorcycle manufacturer ## Gaming and Entertainment - [**Assassin's Creed: Mirage**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a stealth-action game set in the Middle East, focusing on the journey of a young assassin with classic parkour and stealth mechanics - [**Chasm: The Rift**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a first-person shooter blending horror and adventure, where players navigate dark realms and battle monsters - [**College Football 25**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a college football simulation game featuring gameplay that mimics real-life college teams and competitions - [**Concepts**](https://concepts.app/en/licenses): a digital sketching app designed for creative professionals, offering flexible drawing tools for illustration, design, and brainstorming - [**Depthkit**](https://www.depthkit.tv/third-party-licenses): a tool for creating and capturing volumetric video, enabling immersive 3D experiences and interactive content - [**immersivetech**](https://immersitech.io/open-source-third-party-software/): a technology company focused on immersive experiences, providing tools and solutions for virtual and augmented reality applications - [**LOOT**](https://loot.readthedocs.io/_/downloads/en/0.13.0/pdf/), a tool for optimizing the load order of game plugins, commonly used in The Elder Scrolls and Fallout series - [**Madden NFL 25**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a sports simulation game capturing the excitement of American football with realistic gameplay and team management features - [**Marne**](https://marne.io/licenses), an unofficial private server platform for hosting custom Battlefield 1 game experiences - [**Minecraft**](https://www.minecraft.net/zh-hant/attribution), a popular sandbox video game - [**NHL 22**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a hockey simulation game offering realistic gameplay, team management, and various modes to enhance the hockey experience - [**Pixelpart**](https://pixelpart.net/documentation/book/third-party.html): a 2D animation and video compositing software that allows users to create animated graphics and visual effects with a focus on simplicity and ease of use - [**Red Dead Redemption II**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): an open-world action-adventure game following an outlaw's story in the late 1800s, emphasizing deep storytelling and immersive gameplay - [**Tactics Ogre: Reborn**](https://www.square-enix-games.com/en_US/documents/tactics-ogre-reborn-pc-installer-software-and-associated-plug-ins-disclosure), a tactical role-playing game featuring strategic battles and deep storytelling elements - [**Throne and Liberty**](https://www.amazon.com/gp/help/customer/display.html?nodeId=T7fLNw5oAevCMtJFPj&pop-up=1), an MMORPG that offers an expansive fantasy world with dynamic gameplay and immersive storytelling - [**Unity Vivox**](https://docs.unity3d.com/Packages/com.unity.services.vivox@15.1/license/Third%20Party%20Notices.html), a communication service that enables voice and text chat functionality in multiplayer games developed with Unity - [**Zool: Redimensioned**](https://www.mobygames.com/person/1195889/niels-lohmann/credits/): a modern reimagining of the classic platformer featuring fast-paced gameplay and vibrant environments ## Consumer Electronics - [**Audinate**](https://www.audinate.com/legal/software-licensing/dante-av-h-open-source-licenses/): a provider of networked audio solutions specializing in Dante technology, which facilitates high-quality digital audio transport over IP networks - [**Cisco Webex Desk Camera**](https://www.cisco.com/c/dam/en_us/about/doing_business/open_source/docs/CiscoWebexDeskCamera-23-1622100417.pdf), a video camera designed for professional-quality video conferencing and remote collaboration - [**Philips Hue Personal Wireless Lighting**](http://2ak5ape.257.cz/): a smart lighting system for customizable and wireless home illumination - [**Ray-Ban Meta Smart glasses**](https://www.meta.com/de/en/legal/smart-glasses/third-party-notices-android/03/), a pair of smart glasses designed for capturing photos and videos with integrated connectivity and social features - [**Siemens SINEMA Remote Connect**](https://cache.industry.siemens.com/dl/files/790/109793790/att_1054961/v2/OSS_SINEMA-RC_86.pdf), a remote connectivity solution for monitoring and managing industrial networks and devices securely - [**Sony PlayStation 4**](https://doc.dl.playstation.net/doc/ps4-oss/index.html), a gaming console developed by Sony that offers a wide range of games and multimedia entertainment features - [**Sony Virtual Webcam Driver for Remote Camera**](https://helpguide.sony.net/rc/vwd/v1/zh-cn/print.pdf), a software driver that enables the use of Sony cameras as virtual webcams for video conferencing and streaming ## Operating Systems - [**Apple iOS and macOS**](https://www.apple.com/macos), a family of operating systems developed by Apple, including iOS for mobile devices and macOS for desktop computers - [**Google Fuchsia**](https://fuchsia.googlesource.com/third_party/json/), an open-source operating system developed by Google, designed to be secure, updatable, and adaptable across various devices - [**SerenityOS**](https://github.com/SerenityOS/serenity), an open-source operating system that aims to provide a simple and beautiful user experience with a focus on simplicity and elegance - [**Yocto**](http://ftp.emacinc.com/openembedded-sw/kirkstone-icop-5.15-kirkstone-6.0/archive-2024-10/pn8m-090t-ppc/licenses/nlohmann-json/): a Linux-based build system for creating custom operating systems and software distributions, tailored for embedded devices and IoT applications ## Development Tools and IDEs - [**Accentize SpectralBalance**](https://www.accentize.com/products/SpectralBalanceManual.pdf), an adaptive speech analysis tool designed to enhance audio quality by optimizing frequency balance in recordings - [**Arm Compiler for Linux**](https://documentation-service.arm.com/static/66558e9d876c8d213b7843e4), a software development toolchain for compiling and optimizing applications on Arm-based Linux systems - [**BBEdit**](https://s3.amazonaws.com/BBSW-download/BBEdit_15.1.2_User_Manual.pdf), a professional text and code editor for macOS - [**CoderPad**](https://coderpad.io), a collaborative coding platform that enables real-time code interviews and assessments for developers; the library is included in every CoderPad instance and can be accessed with a simple `#include "json.hpp"` - [**Compiler Explorer**](https://godbolt.org), a web-based tool that allows users to write, compile, and visualize the assembly output of code in various programming languages; the library is readily available and accessible with the directive `#include `. - [**GitHub CodeQL**](https://github.com/github/codeql), a code analysis tool used for identifying security vulnerabilities and bugs in software through semantic queries - [**Hex-Rays**](https://docs.hex-rays.com/user-guide/user-interface/licenses): a reverse engineering toolset for analyzing and decompiling binaries, primarily used for security research and vulnerability analysis - [**ImHex**](https://github.com/WerWolv/ImHex), a hex editor designed for reverse engineering, providing advanced features for data analysis and manipulation - [**Intel GPA Framework**](https://intel.github.io/gpasdk-doc/src/licenses.html), a suite of cross-platform tools for capturing, analyzing, and optimizing graphics applications across different APIs - [**Meta Yoga**](https://github.com/facebook/yoga), a layout engine that facilitates flexible and efficient user interface design across multiple platforms - [**MKVToolNix**](https://mkvtoolnix.download/doc/README.md), a set of tools for creating, editing, and inspecting MKV (Matroska) multimedia container files - [**NVIDIA Nsight Compute**](https://docs.nvidia.com/nsight-compute/2022.2/pdf/CopyrightAndLicenses.pdf), a performance analysis tool for CUDA applications that provides detailed insights into GPU performance metrics - [**Notepad++**](https://github.com/notepad-plus-plus/notepad-plus-plus), a free source code editor that supports various programming languages - [**OpenRGB**](https://gitlab.com/CalcProgrammer1/OpenRGB), an open source RGB lighting control that doesn't depend on manufacturer software - [**OpenTelemetry C++**](https://github.com/open-telemetry/opentelemetry-cpp): a library for collecting and exporting observability data in C++, enabling developers to implement distributed tracing and metrics in their application - [**Qt Creator**](https://doc.qt.io/qtcreator/qtcreator-attribution-json-nlohmann.html), an IDE for developing applications using the Qt application framework - [**Scanbot SDK**](https://docs.scanbot.io/barcode-scanner-sdk/web/third-party-libraries/): a software development kit (SDK) that provides tools for integrating advanced document scanning and barcode scanning capabilities into applications ## Machine Learning and AI - [**Apple Core ML Tools**](https://github.com/apple/coremltools), a set of tools for converting and configuring machine learning models for deployment in Apple's Core ML framework - [**Avular Mobile Robotics**](https://www.avular.com/licenses/nlohmann-json-3.9.1.txt): a platform for developing and deploying mobile robotics solutions - [**Google gemma.cpp**](https://github.com/google/gemma.cpp), a lightweight C++ inference engine designed for running AI models from the Gemma family - [**llama.cpp**](https://github.com/ggerganov/llama.cpp), a C++ library designed for efficient inference of large language models (LLMs), enabling streamlined integration into applications - [**MLX**](https://github.com/ml-explore/mlx), an array framework for machine learning on Apple Silicon - [**Mozilla llamafile**](https://github.com/Mozilla-Ocho/llamafile), a tool designed for distributing and executing large language models (LLMs) efficiently using a single file format - [**NVIDIA ACE**](https://docs.nvidia.com/ace/latest/index.html), a suite of real-time AI solutions designed for the development of interactive avatars and digital human applications, enabling scalable and sophisticated user interactions - [**Peer**](https://support.peer.inc/hc/en-us/articles/17261335054235-Licenses): a platform offering personalized AI assistants for interactive learning and creative collaboration - [**stable-diffusion.cpp**](https://github.com/leejet/stable-diffusion.cpp): a C++ implementation of the Stable Diffusion image generation model - [**TanvasTouch**](https://tanvas.co/tanvastouch-sdk-third-party-acknowledgments): a software development kit (SDK) that enables developers to create tactile experiences on touchscreens, allowing users to feel textures and physical sensations in a digital environment - [**TensorFlow**](https://github.com/tensorflow/tensorflow), a machine learning framework that facilitates the development and training of models, supporting data serialization and efficient data exchange between components ## Scientific Research and Analysis - [**BLACK**](https://www.black-sat.org/en/stable/installation/linux.html), a bounded linear temporal logic (LTL) satisfiability checker - [**CERN Atlas Athena**](https://gitlab.cern.ch/atlas/athena/-/blob/main/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.h), a software framework used in the ATLAS experiment at the Large Hadron Collider (LHC) for performance monitoring - [**KAMERA**](https://github.com/Kitware/kamera): a platform for synchronized data collection and real-time deep learning to map marine species like polar bears and seals, aiding Arctic ecosystem research - [**KiCad**](https://gitlab.com/kicad/code/kicad/-/tree/master/thirdparty/nlohmann_json): a free and open-source software suite for electronic design automation - [**MeVisLab**](https://mevislabdownloads.mevis.de/docs/current/MeVis/ThirdParty/Documentation/Publish/ThirdPartyReference/index.html): a software framework for medical image processing and visualization. - [**OpenPMD API**](https://openpmd-api.readthedocs.io/en/0.8.0-alpha/backends/json.html): a versatile programming interface for accessing and managing scientific data, designed to facilitate the efficient storage, retrieval, and sharing of simulation data across various applications and platforms - [**ParaView**](https://github.com/Kitware/ParaView): an open-source tool for large-scale data visualization and analysis across various scientific domains - [**QGIS**](https://gitlab.b-data.ch/qgis/qgis/-/blob/backport-57658-to-release-3_34/external/nlohmann/json.hpp): a free and open-source geographic information system (GIS) application that allows users to create, edit, visualize, and analyze geospatial data across a variety of formats - [**VTK**](https://github.com/Kitware/VTK): a software library for 3D computer graphics, image processing, and visualization - [**VolView**](https://github.com/Kitware/VolView): a lightweight application for interactive visualization and analysis of 3D medical imaging data. ## Business and Productivity Software - [**ArcGIS PRO**](https://www.esri.com/content/dam/esrisites/en-us/media/legal/open-source-acknowledgements/arcgis-pro-2-8-attribution-report.html), a desktop geographic information system (GIS) application developed by Esri for mapping and spatial analysis - [**Autodesk Desktop**](https://damassets.autodesk.net/content/dam/autodesk/www/Company/legal-notices-trademarks/autodesk-desktop-platform-components/internal-autodesk-components-web-page-2023.pdf), a software platform developed by Autodesk for creating and managing desktop applications and services - [**Check Point**](https://www.checkpoint.com/about-us/copyright-and-trademarks/): a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity - [**Microsoft Office for Mac**](https://officecdnmac.microsoft.com/pr/legal/mac/OfficeforMacAttributions.html), a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations - [**Microsoft Teams**](https://www.microsoft.com/microsoft-teams/), a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services - [**Nexthink Infinity**](https://docs.nexthink.com/legal/services-terms/experience-open-source-software-licenses/infinity-2022.8-software-licenses): a digital employee experience management platform for monitoring and improving IT performance - [**Sophos Connect Client**](https://docs.sophos.com/nsg/licenses/SophosConnect/SophosConnectAttribution.html): a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data - [**Stonebranch**](https://stonebranchdocs.atlassian.net/wiki/spaces/UA77/pages/799545647/Licenses+for+Third-Party+Libraries): a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations - [**Tablecruncher**](https://tablecruncher.com/): a data analysis tool that allows users to import, analyze, and visualize spreadsheet data, offering interactive features for better insights and decision-making - [**magicplan**](https://help.magicplan.app/acknowledgments), a mobile application for creating floor plans and interior designs using augmented reality ## Databases and Big Data - [**ADIOS2**](https://code.ornl.gov/ecpcitest/adios2/-/tree/pr4285_FFSUpstream/thirdparty/nlohmann_json?ref_type=heads): a data management framework designed for high-performance input and output operations - [**Cribl Stream**](https://docs.cribl.io/stream/third-party-current-list/): a real-time data processing platform that enables organizations to collect, route, and transform observability data, enhancing visibility and insights into their systems - [**DB Browser for SQLite**](https://github.com/sqlitebrowser/sqlitebrowser), a visual open-source tool for creating, designing, and editing SQLite database files - [**MySQL Connector/C++**](https://docs.oracle.com/cd/E17952_01/connector-cpp-9.1-license-com-en/license-opentelemetry-cpp-com.html), a C++ library for connecting and interacting with MySQL databases - [**MySQL NDB Cluster**](https://downloads.mysql.com/docs/licenses/cluster-9.0-com-en.pdf), a distributed database system that provides high availability and scalability for MySQL databases - [**PrestoDB**](https://github.com/prestodb/presto), a distributed SQL query engine designed for large-scale data analytics, originally developed by Facebook - [**ROOT Data Analysis Framework**](https://root.cern/doc/v614/classnlohmann_1_1basic__json.html), an open-source data analysis framework widely used in high-energy physics and other fields for data processing and visualization ## Simulation and Modeling - [**Arcturus HoloSuite**](https://www.datocms-assets.com/104353/1698904597-holosuite-third-party-software-credits-and-attributions-2.pdf), a software toolset for capturing, editing, and streaming volumetric video, featuring advanced compression technologies for high-quality 3D content creation - [**azul**](https://pure.tudelft.nl/ws/files/85338589/tgis.12673.pdf), a fast and efficient 3D city model viewer designed for visualizing urban environments and spatial data - [**Blender**](https://projects.blender.org/blender/blender/search?q=nlohmann), a free and open-source 3D creation suite for modeling, animation, rendering, and more - [**cpplot**](https://cpplot.readthedocs.io/en/latest/library_api/function_eigen_8h_1ac080eac0541014c5892a55e41bf785e6.html), a library for creating interactive graphs and charts in C++, which can be viewed in web browsers - [**NVIDIA Omniverse**](https://docs.omniverse.nvidia.com/composer/latest/common/product-licenses/usd-explorer/usd-explorer-2023.2.0-licenses-manifest.html), a platform for 3D content creation and collaboration that enables real-time simulations and interactive experiences across various industries - [**Pixar Renderman**](https://rmanwiki-26.pixar.com/space/REN26/19662083/Legal+Notice), a photorealistic 3D rendering software developed by Pixar, widely used in the film industry for creating high-quality visual effects and animations - [**ROS - Robot Operating System**](http://docs.ros.org/en/noetic/api/behaviortree_cpp/html/json_8hpp_source.html), a set of software libraries and tools that assist in developing robot applications - [**UBS**](https://www.ubs.com/), a multinational financial services and banking company - [**GAMS**](https://www.gams.com/47/docs/THIRDPARTY.html): a high-performance mathematical modeling system for optimization and decision support - [**M-Star**](https://docs.mstarcfd.com/3_Licensing/thirdparty-licenses.html): a computational fluid dynamics software for simulating and analyzing fluid flow - [**MapleSim CAD Toolbox**](https://www.maplesoft.com/support/help/MapleSim/view.aspx?path=CADToolbox/copyright): a software extension for MapleSim that integrates CAD models, allowing users to import, manipulate, and analyze 3D CAD data within the MapleSim environment for enhanced modeling and simulation - [**Kitware SMTK**](https://github.com/Kitware/SMTK): a software toolkit for managing simulation models and workflows in scientific and engineering applications ## Enterprise and Cloud Applications - [**Acronis Cyber Protect Cloud**](https://care.acronis.com/s/article/59533-Third-party-software-used-in-Acronis-Cyber-Protect-Cloud?language=en_US): an all-in-one data protection solution that combines backup, disaster recovery, and cybersecurity to safeguard business data from threats like ransomware - [**Baereos**](https://gitlab.tiger-computing.co.uk/packages/bareos/-/blob/tiger/bullseye/third-party/CLI11/examples/json.cpp): a backup solution that provides data protection and recovery options for various environments, including physical and virtual systems - [**Bitdefender Home Scanner**](https://www.bitdefender.de/site/Main/view/home-scanner-open-source.html), a tool from Bitdefender that scans devices for malware and security threats, providing a safeguard against potential online dangers - [**Citrix Provisioning**](https://docs.citrix.com/en-us/provisioning/2203-ltsr/downloads/pvs-third-party-notices-2203.pdf): a solution that streamlines the delivery of virtual desktops and applications by allowing administrators to manage and provision resources efficiently across multiple environments - [**Citrix Virtual Apps and Desktops**](https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/2305/downloads/third-party-notices-apps-and-desktops.pdf), a solution from Citrix that delivers virtual apps and desktops - [**Cyberarc**](https://docs.cyberark.com/Downloads/Legal/Privileged%20Session%20Manager%20for%20SSH%20Third-Party%20Notices.pdf): a security solution that specializes in privileged access management, enabling organizations to control and monitor access to critical systems and data, thereby enhancing overall cybersecurity posture - [**Elster**](https://www.secunet.com/en/about-us/press/article/elstersecure-bietet-komfortablen-login-ohne-passwort-dank-secunet-protect4use): a digital platform developed by German tax authorities for secure and efficient electronic tax filing and management using secunet protect4use - [**Egnyte Desktop**](https://helpdesk.egnyte.com/hc/en-us/articles/360007071732-Third-Party-Software-Acknowledgements): a secure cloud storage solution designed for businesses, enabling file sharing, collaboration, and data management across teams while ensuring compliance and data protection - [**Ethereum Solidity**](https://github.com/ethereum/solidity), a high-level, object-oriented programming language designed for implementing smart contracts on the Ethereum platform - [**Inciga**](https://fossies.org/linux/icinga2/third-party/nlohmann_json/json.hpp): a monitoring tool for IT infrastructure, designed to provide insights into system performance and availability through customizable dashboards and alerts - [**Intel Accelerator Management Daemon for VMware ESXi**](https://downloadmirror.intel.com/772507/THIRD-PARTY.txt): a management tool designed for monitoring and controlling Intel hardware accelerators within VMware ESXi environments, optimizing performance and resource allocation - [**Juniper Identity Management Service**](https://www.juniper.net/documentation/us/en/software/jims/jims-guide/jims-guide.pdf) - [**Microsoft Azure IoT SDK**](https://library.e.abb.com/public/2779c5f85f30484192eb3cb3f666a201/IP%20Gateway%20Open%20License%20Declaration_9AKK108467A4095_Rev_C.pdf), a collection of tools and libraries to help developers connect, build, and deploy Internet of Things (IoT) solutions on the Azure cloud platform - [**Microsoft WinGet**](https://github.com/microsoft/winget-cli), a command-line utility included in the Windows Package Manager - [**Pointr**](https://docs-dev.pointr.tech/docs/8.x/Developer%20Portal/Open%20Source%20Licenses/): a platform for indoor positioning and navigation solutions, offering tools and SDKs for developers to create location-based applications - [**secunet protect4use**](https://www.secunet.com/en/about-us/press/article/elstersecure-bietet-komfortablen-login-ohne-passwort-dank-secunet-protect4use): a secure, passwordless multifactor authentication solution that transforms smartphones into digital keyrings, ensuring high security for online services and digital identities json-3.12.0/docs/mkdocs/docs/home/design_goals.md000066400000000000000000000045561477615276400216530ustar00rootroot00000000000000# Design goals There are myriads of [JSON](https://json.org) libraries out there, and each may even have its reason to exist. Our class had these design goals: - **Intuitive syntax**. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. - **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. - **Serious testing**. Our class is heavily [unit-tested](https://github.com/nlohmann/json/tree/develop/tests/src) and covers [100%](https://coveralls.io/r/nlohmann/json) of the code, including all exceptional behavior. Furthermore, we checked with [Valgrind](http://valgrind.org) and the [Clang Sanitizers](https://clang.llvm.org/docs/index.html) that there are no memory leaks. [Google OSS-Fuzz](https://github.com/google/oss-fuzz/tree/master/projects/json) additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the [Core Infrastructure Initiative (CII) best practices](https://bestpractices.coreinfrastructure.org/projects/289). Other aspects were not so important to us: - **Memory efficiency**. Each JSON object has an overhead of one pointer (the maximal size of a union) and one enumeration element (1 byte). The default generalization uses the following C++ data types: `std::string` for strings, `int64_t`, `uint64_t` or `double` for numbers, `std::map` for objects, `std::vector` for arrays, and `bool` for Booleans. However, you can template the generalized class `basic_json` to your needs. - **Speed**. There are certainly [faster JSON libraries](https://github.com/miloyip/nativejson-benchmark#parsing-time) out there. However, if your goal is to speed up your development by adding JSON support with a single header, then this library is the way to go. If you know how to use a `std::vector` or `std::map`, you are already set. See the [contribution guidelines](https://github.com/nlohmann/json/blob/master/.github/CONTRIBUTING.md#please-dont) for more information. json-3.12.0/docs/mkdocs/docs/home/exceptions.md000066400000000000000000000675671477615276400214110ustar00rootroot00000000000000# Exceptions ## Overview ### Base type All exceptions inherit from class `json::exception` (which in turn inherits from `std::exception`). It is used as the base class for all exceptions thrown by the `basic_json` class. This class can hence be used as "wildcard" to catch exceptions. ``` mermaid classDiagram direction LR class `std::exception` { <> } class `json::exception` { +const int id +const char* what() const } class `json::parse_error` { +const std::size_t byte } class `json::invalid_iterator` class `json::type_error` class `json::out_of_range` class `json::other_error` `std::exception` <|-- `json::exception` `json::exception` <|-- `json::parse_error` `json::exception` <|-- `json::invalid_iterator` `json::exception` <|-- `json::type_error` `json::exception` <|-- `json::out_of_range` `json::exception` <|-- `json::other_error` ``` ### Switch off exceptions Exceptions are used widely within the library. They can, however, be switched off with either using the compiler flag `-fno-exceptions` or by defining the symbol [`JSON_NOEXCEPTION`](../api/macros/json_noexception.md). In this case, exceptions are replaced by `abort()` calls. You can further control this behavior by defining `JSON_THROW_USER` (overriding `#!cpp throw`), `JSON_TRY_USER` (overriding `#!cpp try`), and `JSON_CATCH_USER` (overriding `#!cpp catch`). Note that [`JSON_THROW_USER`](../api/macros/json_throw_user.md) should leave the current scope (e.g., by throwing or aborting), as continuing after it may yield undefined behavior. ??? example The code below switches off exceptions and creates a log entry with a detailed error message in case of errors. ```cpp #include #define JSON_TRY_USER if(true) #define JSON_CATCH_USER(exception) if(false) #define JSON_THROW_USER(exception) \ {std::clog << "Error in " << __FILE__ << ":" << __LINE__ \ << " (function " << __FUNCTION__ << ") - " \ << (exception).what() << std::endl; \ std::abort();} #include ``` Note the explanatory [`what()`](https://en.cppreference.com/w/cpp/error/exception/what) string of exceptions is not available for MSVC if exceptions are disabled, see [#2824](https://github.com/nlohmann/json/discussions/2824). See [documentation of `JSON_TRY_USER`, `JSON_CATCH_USER` and `JSON_THROW_USER`](../api/macros/json_throw_user.md) for more information. ### Extended diagnostic messages Exceptions in the library are thrown in the local context of the JSON value they are detected. This makes detailed diagnostics messages, and hence debugging, difficult. ??? example ```cpp --8<-- "examples/diagnostics_standard.cpp" ``` Output: ``` --8<-- "examples/diagnostics_standard.output" ``` This exception can be hard to debug if storing the value `#!c "12"` and accessing it is further apart. To create better diagnostics messages, each JSON value needs a pointer to its parent value such that a global context (i.e., a path from the root value to the value that led to the exception) can be created. That global context is provided as [JSON Pointer](../features/json_pointer.md). As this global context comes at the price of storing one additional pointer per JSON value and runtime overhead to maintain the parent relation, extended diagnostics are disabled by default. They can, however, be enabled by defining the preprocessor symbol [`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md) to `1` before including `json.hpp`. ??? example ```cpp --8<-- "examples/diagnostics_extended.cpp" ``` Output: ``` --8<-- "examples/diagnostics_extended.output" ``` Now the exception message contains a JSON Pointer `/address/housenumber` that indicates which value has the wrong type. See [documentation of `JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md) for more information. ## Parse errors The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch. Exceptions have ids 1xx. !!! info "Byte index" Member `byte` holds the byte index of the last read character in the input file. For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack). ??? example The following code shows how a `parse_error` exception can be caught. ```cpp --8<-- "examples/parse_error.cpp" ``` Output: ``` --8<-- "examples/parse_error.output" ``` ### json.exception.parse_error.101 This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member `byte` indicates the error position. !!! failure "Example message" Input ended prematurely: ``` [json.exception.parse_error.101] parse error at 2: unexpected end of input; expected string literal ``` No input: ``` [json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON ``` Control character was not escaped: ``` [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \u0009 or \\; last read: '"'" ``` String was not closed: ``` [json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '"' ``` Invalid number format: ``` [json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E' ``` `\u` was not be followed by four hex digits: ``` [json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\u' must be followed by 4 hex digits; last read: '"\u01"' ``` Invalid UTF-8 surrogate pair: ``` [json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '"\uD7FF\uDC00'" ``` Invalid UTF-8 byte: ``` [json.exception.parse_error.101] parse error at line 3, column 24: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"vous \352t' ``` !!! tip - Make sure the input is correctly read. Try to write the input to standard output to check if, for instance, the input file was successfully opened. - Paste the input to a JSON validator like or a tool like [jq](https://stedolan.github.io/jq/). ### json.exception.parse_error.102 JSON uses the `\uxxxx` format to describe Unicode characters. Code points above 0xFFFF are split into two `\uxxxx` entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point. !!! failure "Example message" ``` parse error at 14: missing or wrong low surrogate ``` !!! note This exception is not used any more. Instead [json.exception.parse_error.101](#jsonexceptionparse_error101) with a more detailed description is used. ### json.exception.parse_error.103 Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid. !!! failure "Example message" ``` parse error: code points above 0x10FFFF are invalid ``` !!! note This exception is not used any more. Instead [json.exception.parse_error.101](#jsonexceptionparse_error101) with a more detailed description is used. ### json.exception.parse_error.104 [RFC 6902](https://tools.ietf.org/html/rfc6902) requires a JSON Patch document to be a JSON document that represents an array of objects. !!! failure "Example message" ``` [json.exception.parse_error.104] parse error: JSON patch must be an array of objects ``` ### json.exception.parse_error.105 An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors. !!! failure "Example message" ``` [json.exception.parse_error.105] parse error: operation 'add' must have member 'value' ``` ``` [json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from' ``` ``` [json.exception.parse_error.105] parse error: operation value 'foo' is invalid ``` ### json.exception.parse_error.106 An array index in a JSON Pointer ([RFC 6901](https://tools.ietf.org/html/rfc6901)) may be `0` or any number without a leading `0`. !!! failure "Example message" ``` [json.exception.parse_error.106] parse error: array index '01' must not begin with '0' ``` ### json.exception.parse_error.107 A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a `/` character. !!! failure "Example message" ``` [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo' ``` ### json.exception.parse_error.108 In a JSON Pointer, only `~0` and `~1` are valid escape sequences. !!! failure "Example message" ``` [json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1' ``` ### json.exception.parse_error.109 A JSON Pointer array index must be a number. !!! failure "Example messages" ``` [json.exception.parse_error.109] parse error: array index 'one' is not a number ``` ``` [json.exception.parse_error.109] parse error: array index '+1' is not a number ``` ### json.exception.parse_error.110 When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read. !!! failure "Example message" ``` [json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input ``` ``` [json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A ``` ### json.exception.parse_error.112 An unexpected byte was read in a [binary format](../features/binary_formats/index.md) or length information is invalid ([BSON](../features/binary_formats/bson.md)). !!! failure "Example messages" ``` [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C ``` ``` [json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1 ``` ``` [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02 ``` ``` [json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02 ``` ``` [json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648 ``` ``` [json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1 ``` ### json.exception.parse_error.113 While parsing a map key, a value that is not a string has been read. !!! failure "Example messages" ``` [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF ``` ``` [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF ``` ``` [json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82 ``` ### json.exception.parse_error.114 The parsing of the corresponding BSON record type is not implemented (yet). !!! failure "Example message" ``` [json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF ``` ### json.exception.parse_error.115 A UBJSON high-precision number could not be parsed. !!! failure "Example message" ``` [json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A ``` ## Iterator errors This exception is thrown if iterators passed to a library function do not match the expected semantics. Exceptions have ids 2xx. ??? example The following code shows how an `invalid_iterator` exception can be caught. ```cpp --8<-- "examples/invalid_iterator.cpp" ``` Output: ``` --8<-- "examples/invalid_iterator.output" ``` ### json.exception.invalid_iterator.201 The iterators passed to constructor `basic_json(InputIT first, InputIT last)` are not compatible, meaning they do not belong to the same container. Therefore, the range (`first`, `last`) is invalid. !!! failure "Example message" ``` [json.exception.invalid_iterator.201] iterators are not compatible ``` ### json.exception.invalid_iterator.202 In the [erase](../api/basic_json/erase.md) or insert function, the passed iterator `pos` does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion. !!! failure "Example messages" ``` [json.exception.invalid_iterator.202] iterator does not fit current value ``` ``` [json.exception.invalid_iterator.202] iterators first and last must point to objects ``` ### json.exception.invalid_iterator.203 Either iterator passed to function [`erase(IteratorType first, IteratorType last`)](../api/basic_json/erase.md) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from. !!! failure "Example message" ``` [json.exception.invalid_iterator.203] iterators do not fit current value ``` ### json.exception.invalid_iterator.204 When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an [erase](../api/basic_json/erase.md) function, this range has to be exactly (`begin(),` `end()),` because this is the only way the single stored value is expressed. All other ranges are invalid. !!! failure "Example message" ``` [json.exception.invalid_iterator.204] iterators out of range ``` ### json.exception.invalid_iterator.205 When an iterator for a primitive type (number, boolean, or string) is passed to an [erase](../api/basic_json/erase.md) function, the iterator has to be the `begin()` iterator, because it is the only way to address the stored value. All other iterators are invalid. !!! failure "Example message" ``` [json.exception.invalid_iterator.205] iterator out of range ``` ### json.exception.invalid_iterator.206 The iterators passed to constructor `basic_json(InputIT first, InputIT last)` belong to a JSON null value and hence to not define a valid range. !!! failure "Example message" ``` [json.exception.invalid_iterator.206] cannot construct with iterators from null ``` ### json.exception.invalid_iterator.207 The `key()` member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key. !!! failure "Example message" ``` [json.exception.invalid_iterator.207] cannot use key() for non-object iterators ``` ### json.exception.invalid_iterator.208 The `operator[]` to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. !!! failure "Example message" ``` [json.exception.invalid_iterator.208] cannot use operator[] for object iterators ``` ### json.exception.invalid_iterator.209 The offset operators (`+`, `-`, `+=`, `-=`) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. !!! failure "Example message" ``` [json.exception.invalid_iterator.209] cannot use offsets with object iterators ``` ### json.exception.invalid_iterator.210 The iterator range passed to the insert function is not compatible, meaning they do not belong to the same container. Therefore, the range (`first`, `last`) is invalid. !!! failure "Example message" ``` [json.exception.invalid_iterator.210] iterators do not fit ``` ### json.exception.invalid_iterator.211 The iterator range passed to the insert function must not be a subrange of the container to insert to. !!! failure "Example message" ``` [json.exception.invalid_iterator.211] passed iterators may not belong to container ``` ### json.exception.invalid_iterator.212 When two iterators are compared, they must belong to the same container. !!! failure "Example message" ``` [json.exception.invalid_iterator.212] cannot compare iterators of different containers ``` ### json.exception.invalid_iterator.213 The order of object iterators cannot be compared, because JSON objects are unordered. !!! failure "Example message" ``` [json.exception.invalid_iterator.213] cannot compare order of object iterators ``` ### json.exception.invalid_iterator.214 Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to `begin()`. !!! failure "Example message" ``` [json.exception.invalid_iterator.214] cannot get value ``` ## Type errors This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics. Exceptions have ids 3xx. ??? example The following code shows how a `type_error` exception can be caught. ```cpp --8<-- "examples/type_error.cpp" ``` Output: ``` --8<-- "examples/type_error.output" ``` ### json.exception.type_error.301 To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead. !!! failure "Example message" ``` [json.exception.type_error.301] cannot create object from initializer list ``` ### json.exception.type_error.302 During implicit or explicit value conversion, the JSON type must be compatible with the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types. !!! failure "Example messages" ``` [json.exception.type_error.302] type must be object, but is null ``` ``` [json.exception.type_error.302] type must be string, but is object ``` ### json.exception.type_error.303 To retrieve a reference to a value stored in a `basic_json` object with `get_ref`, the type of the reference must match the value type. For instance, for a JSON array, the `ReferenceType` must be `array_t &`. !!! failure "Example messages" ``` [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object ``` ``` [json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number" ``` ### json.exception.type_error.304 The `at()` member functions can only be executed for certain JSON types. !!! failure "Example messages" ``` [json.exception.type_error.304] cannot use at() with string ``` ``` [json.exception.type_error.304] cannot use at() with number ``` ### json.exception.type_error.305 The `operator[]` member functions can only be executed for certain JSON types. !!! failure "Example messages" ``` [json.exception.type_error.305] cannot use operator[] with a string argument with array ``` ``` [json.exception.type_error.305] cannot use operator[] with a numeric argument with object ``` ### json.exception.type_error.306 The `value()` member functions can only be executed for certain JSON types. !!! failure "Example message" ``` [json.exception.type_error.306] cannot use value() with number ``` ### json.exception.type_error.307 The [`erase()`](../api/basic_json/erase.md) member functions can only be executed for certain JSON types. !!! failure "Example message" ``` [json.exception.type_error.307] cannot use erase() with string ``` ### json.exception.type_error.308 The `push_back()` and `operator+=` member functions can only be executed for certain JSON types. !!! failure "Example message" ``` [json.exception.type_error.308] cannot use push_back() with string ``` ### json.exception.type_error.309 The `insert()` member functions can only be executed for certain JSON types. !!! failure "Example messages" ``` [json.exception.type_error.309] cannot use insert() with array ``` ``` [json.exception.type_error.309] cannot use insert() with number ``` ### json.exception.type_error.310 The `swap()` member functions can only be executed for certain JSON types. !!! failure "Example message" ``` [json.exception.type_error.310] cannot use swap() with number ``` ### json.exception.type_error.311 The `emplace()` and `emplace_back()` member functions can only be executed for certain JSON types. !!! failure "Example messages" ``` [json.exception.type_error.311] cannot use emplace() with number ``` ``` [json.exception.type_error.311] cannot use emplace_back() with number ``` ### json.exception.type_error.312 The `update()` member functions can only be executed for certain JSON types. !!! failure "Example message" ``` [json.exception.type_error.312] cannot use update() with array ``` ### json.exception.type_error.313 The `unflatten` function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well-defined. !!! failure "Example message" ``` [json.exception.type_error.313] invalid value to unflatten ``` ### json.exception.type_error.314 The `unflatten` function only works for an object whose keys are JSON Pointers. !!! failure "Example message" Calling `unflatten()` on an array `#!json [1,2,3]`: ``` [json.exception.type_error.314] only objects can be unflattened ``` ### json.exception.type_error.315 The `unflatten()` function only works for an object whose keys are JSON Pointers and whose values are primitive. !!! failure "Example message" Calling `unflatten()` on an object `#!json {"/1", [1,2,3]}`: ``` [json.exception.type_error.315] values in object must be primitive ``` ### json.exception.type_error.316 The `dump()` function only works with UTF-8 encoded strings; that is, if you assign a `std::string` to a JSON value, make sure it is UTF-8 encoded. !!! failure "Example message" Calling `dump()` on a JSON value containing an ISO 8859-1 encoded string: ``` [json.exception.type_error.316] invalid UTF-8 byte at index 15: 0x6F ``` !!! tip - Store the source file with UTF-8 encoding. - Pass an error handler as last parameter to the `dump()` function to avoid this exception: - `json::error_handler_t::replace` will replace invalid bytes sequences with `U+FFFD` - `json::error_handler_t::ignore` will silently ignore invalid byte sequences ### json.exception.type_error.317 The dynamic type of the object cannot be represented in the requested serialization format (e.g., a raw `true` or `null` JSON object cannot be serialized to BSON) !!! failure "Example messages" Serializing `#!json null` to BSON: ``` [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null ``` Serializing `#!json [1,2,3]` to BSON: ``` [json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array ``` !!! tip Encapsulate the JSON value in an object. That is, instead of serializing `#!json true`, serialize `#!json {"value": true}` ## Out of range This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance, in the case of array indices or nonexisting object keys. Exceptions have ids 4xx. ??? example The following code shows how an `out_of_range` exception can be caught. ```cpp --8<-- "examples/out_of_range.cpp" ``` Output: ``` --8<-- "examples/out_of_range.output" ``` ### json.exception.out_of_range.401 The provided array index `i` is larger than `size-1`. !!! failure "Example message" ``` array index 3 is out of range ``` ### json.exception.out_of_range.402 The special array index `-` in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it. !!! failure "Example message" ``` array index '-' (3) is out of range ``` ### json.exception.out_of_range.403 The provided key was not found in the JSON object. !!! failure "Example message" ``` key 'foo' not found ``` ### json.exception.out_of_range.404 A reference token in a JSON Pointer could not be resolved. !!! failure "Example message" ``` unresolved reference token 'foo' ``` ### json.exception.out_of_range.405 The JSON Patch operations 'remove' and 'add' cannot be applied to the root element of the JSON value. !!! failure "Example message" ``` JSON pointer has no parent ``` ### json.exception.out_of_range.406 A parsed number could not be stored as without changing it to NaN or INF. !!! failure "Example message" ``` number overflow parsing '10E1000' ``` ### json.exception.out_of_range.407 This exception previously indicated that the UBJSON and BSON binary formats did not support integer numbers greater than 9223372036854775807 due to limitations in the implemented mapping. However, these limitations have since been resolved, and this exception no longer occurs. !!! success "Exception cannot occur any more" - Since version 3.9.0, integer numbers beyond int64 are serialized as high-precision UBJSON numbers. - Since version 3.12.0, integer numbers beyond int64 are serialized as uint64 BSON numbers. ### json.exception.out_of_range.408 The size (following `#`) of an UBJSON array or object exceeds the maximal capacity. !!! failure "Example message" ``` excessive array size: 8658170730974374167 ``` ### json.exception.out_of_range.409 Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string. !!! failure "Example message" ``` BSON key cannot contain code point U+0000 (at byte 2) ``` ## Further exceptions This exception is thrown in case of errors that cannot be classified with the other exception types. Exceptions have ids 5xx. ??? example The following code shows how an `other_error` exception can be caught. ```cpp --8<-- "examples/other_error.cpp" ``` Output: ``` --8<-- "examples/other_error.output" ``` ### json.exception.other_error.501 A JSON Patch operation 'test' failed. The unsuccessful operation is also printed. !!! failure "Example message" Executing `#!json {"op":"test", "path":"/baz", "value":"bar"}` on `#!json {"baz": "qux"}`: ``` [json.exception.other_error.501] unsuccessful: {"op":"test","path":"/baz","value":"bar"} ``` json-3.12.0/docs/mkdocs/docs/home/faq.md000066400000000000000000000152761477615276400177650ustar00rootroot00000000000000# Frequently Asked Questions (FAQ) ## Known bugs ### Brace initialization yields arrays !!! question Why does ```cpp json j{true}; ``` and ```cpp json j(true); ``` yield different results (`#!json [true]` vs. `#!json true`)? This is a known issue, and -- even worse -- the behavior differs between GCC and Clang. The "culprit" for this is the library's constructor overloads for initializer lists to allow syntax like ```cpp json array = {1, 2, 3, 4}; ``` for arrays and ```cpp json object = {{"one", 1}, {"two", 2}}; ``` for objects. !!! tip To avoid any confusion and ensure portable code, **do not** use brace initialization with the types `basic_json`, `json`, or `ordered_json` unless you want to create an object or array as shown in the examples above. ## Limitations ### Relaxed parsing !!! question Can you add an option to ignore trailing commas? This library does not support any feature that would jeopardize interoperability. ### Parse errors reading non-ASCII characters !!! question "Questions" - Why is the parser complaining about a Chinese character? - Does the library support Unicode? - I get an exception `[json.exception.parse_error.101] parse error at line 1, column 53: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '"Testé$')"` The library supports **Unicode input** as follows: - Only **UTF-8** encoded input is supported, which is the default encoding for JSON, according to [RFC 8259](https://tools.ietf.org/html/rfc8259.html#section-8.1). - `std::u16string` and `std::u32string` can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers. - Other encodings such as Latin-1 or ISO 8859-1 are **not** supported and will yield parse or serialization errors. - The library will not replace [Unicode noncharacters](http://www.unicode.org/faq/private_use.html#nonchar1). - Invalid surrogates (e.g., incomplete pairs such as `\uDEAD`) will yield parse errors. - The strings stored in the library are UTF-8 encoded. When using the default string type (`std::string`), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs. - When you store strings with different encodings in the library, calling [`dump()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a50ec80b02d0f3f51130d4abb5d1cfdc5.html#a50ec80b02d0f3f51130d4abb5d1cfdc5) may throw an exception unless `json::error_handler_t::replace` or `json::error_handler_t::ignore` are used as error handlers. In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding. ### Wide string handling !!! question Why are wide strings (e.g., `std::wstring`) dumped as arrays of numbers? As described [above](#parse-errors-reading-non-ascii-characters), the library assumes UTF-8 as encoding. To store a wide string, you need to change the encoding. !!! example ```cpp #include // codecvt_utf8 #include // wstring_convert // encoding function std::string to_utf8(std::wstring& wide_string) { static std::wstring_convert> utf8_conv; return utf8_conv.to_bytes(wide_string); } json j; std::wstring ws = L"車B1234 こんにちは"; j["original"] = ws; j["encoded"] = to_utf8(ws); std::cout << j << std::endl; ``` The result is: ```json { "encoded": "車B1234 こんにちは", "original": [36554, 66, 49, 50, 51, 52, 32, 12371, 12435, 12395, 12385, 12399] } ``` ## Exceptions ### Parsing without exceptions !!! question Is it possible to indicate a parse error without throwing an exception? Yes, see [Parsing and exceptions](../features/parsing/parse_exceptions.md). ### Key name in exceptions !!! question Can I get the key of the object item that caused an exception? Yes, you can. Please define the symbol [`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md) to get [extended diagnostics messages](exceptions.md#extended-diagnostic-messages). ## Serialization issues ### Number precision !!! question - It seems that precision is lost when serializing a double. - Can I change the precision for floating-point serialization? The library uses `std::numeric_limits::digits10` (15 for IEEE `double`s) digits for serialization. This value is sufficient to guarantee roundtripping. If one uses more than this number of digits of precision, then string -> value -> string is not guaranteed to round-trip. !!! quote "[cppreference.com](https://en.cppreference.com/w/cpp/types/numeric_limits/digits10)" The value of `std::numeric_limits::digits10` is the number of base-10 digits that can be represented by the type T without change, that is, any number with this many significant decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow. !!! tip The website https://float.exposed gives a good insight into the internal storage of floating-point numbers. See [this section](../features/types/number_handling.md#number-serialization) on the library's number handling for more information. ## Compilation issues ### Android SDK !!! question Why does the code not compile with Android SDK? Android defaults to using very old compilers and C++ libraries. To fix this, add the following to your `Application.mk`. This will switch to the LLVM C++ library, the Clang compiler, and enable C++11 and other features disabled by default. ```ini APP_STL := c++_shared NDK_TOOLCHAIN_VERSION := clang3.6 APP_CPPFLAGS += -frtti -fexceptions ``` The code compiles successfully with [Android NDK](https://developer.android.com/ndk/index.html?hl=ml), Revision 9 - 11 (and possibly later) and [CrystaX's Android NDK](https://www.crystax.net/en/android/ndk) version 10. ### Missing STL function !!! question "Questions" - Why do I get a compilation error `'to_string' is not a member of 'std'` (or similarly, for `strtod` or `strtof`)? - Why does the code not compile with MinGW or Android SDK? This is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to [this site](http://tehsausage.com/mingw-to-string) and [this discussion](https://github.com/nlohmann/json/issues/136) for information on how to fix this bug. For Android NDK using `APP_STL := gnustl_static`, please refer to [this discussion](https://github.com/nlohmann/json/issues/219). json-3.12.0/docs/mkdocs/docs/home/license.md000066400000000000000000000037131477615276400206310ustar00rootroot00000000000000# License The class is licensed under the [MIT License](https://opensource.org/licenses/MIT): Copyright © 2013-2025 [Niels Lohmann](https://nlohmann.me) 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. * * * The class contains the UTF-8 Decoder from Bjoern Hoehrmann which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2008-2009 [Björn Hoehrmann](http://bjoern.hoehrmann.de/) The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2009 [Florian Loitsch](https://florian.loitsch.com/) The class contains a copy of [Hedley](https://nemequ.github.io/hedley/) from Evan Nemerson which is licensed as [CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/). json-3.12.0/docs/mkdocs/docs/home/releases.md000066400000000000000000003067411477615276400210210ustar00rootroot00000000000000# Releases ## v3.7.3 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.7.3/include.zip) (274 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.7.3/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp) (791 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp.asc) (1 KB) Release date: 2019-11-17 SHA-256: 3b5d2b8f8282b80557091514d8ab97e27f9574336c804ee666fda673a9b59926 (json.hpp), 87b5884741427220d3a33df1363ae0e8b898099fbc59f1c451113f6732891014 (include.zip) ### Summary This release fixes a bug introduced in release 3.7.2 which could yield quadratic complexity in destructor calls. All changes are backward-compatible. ### :bug: Bug Fixes - Removed `reserve()` calls from the destructor which could lead to quadratic complexity. #1837 #1838 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.7.2 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.7.2/include.zip) (274 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.7.2/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.7.2/json.hpp) (791 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.7.2/json.hpp.asc) (1 KB) Release date: 2019-11-10 SHA-256: 0a65fcbbe1b334d3f45c9498e5ee28c3f3b2428aea98557da4a3ff12f0f14ad6 (json.hpp), 67f69c9a93b7fa0612dc1b6273119d2c560317333581845f358aaa68bff8f087 (include.zip) ### Summary Project [bad_json_parsers](https://github.com/lovasoa/bad_json_parsers) tested how JSON parser libraries react on **deeply nested inputs**. It turns out that this library segfaulted at a certain nesting depth. This bug was fixed with this release. **Now the parsing is only bounded by the available memory.** All changes are backward-compatible. ### :bug: Bug Fixes * Fixed a bug that lead to stack overflow for deeply nested JSON values (objects, array) by changing the implementation of the destructor from a recursive to an iterative approach. #832, #1419, #1835 ### :hammer: Further Changes * Added WhiteStone Bolt. #1830 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.7.1 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.7.1/include.zip) (273 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.7.1/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.7.1/json.hpp) (789 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.7.1/json.hpp.asc) (1 KB) Release date: 2019-11-06 SHA-256: b5ba7228f3c22a882d379e93d08eab4349458ee16fbf45291347994eac7dc7ce (json.hpp), 77b9f54b34e7989e6f402afb516f7ff2830df551c3a36973085e2c7a6b1045fe (include.zip) ### Summary This release fixes several small bugs in the library. All changes are backward-compatible. ### :bug: Bug Fixes - Fixed a segmentation fault when serializing `std::int64_t` minimum value. #1708 #1722 - Fixed the [`contains()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_ab23b04802eb9da97dc3f664e54e09cb3.html#ab23b04802eb9da97dc3f664e54e09cb3) function for JSON Pointers. #1727 #1741 - Fixed too lax SFINAE guard for conversion from `std::pair` and `std::tuple` to `json`. #1805 #1806 #1825 #1826 - Fixed some regressions detected by UBSAN. Updated CI to use Clang-Tidy 7.1.0. #1716 #1728 - Fixed integer truncation in `iteration_proxy`. #1797 - Updated [Hedley](https://github.com/nemequ/hedley) to v11 to [fix a E2512 error](https://github.com/nemequ/hedley/issues/28) in MSVC. #1799 - Fixed a compile error in enum deserialization of non non-default-constructible types. #1647 #1821 - Fixed the conversion from `json` to `std::valarray`. ### :zap: Improvements - The [`items()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) function can now be used with a custom string type. #1765 - Made [`json_pointer::back`](https://nlohmann.github.io/json/classnlohmann_1_1json__pointer_a213bc67c32a30c68ac6bf06f5195d482.html#a213bc67c32a30c68ac6bf06f5195d482) `const`. #1764 #1769 - Meson is part of the release archive. #1672 #1694 - Improved documentation on the Meson and Spack package manager. #1694 #1720 ### :hammer: Further Changes - Added GitHub Workflow with `ubuntu-latest`/GCC 7.4.0 as CI step. - Added GCC 9 to Travis CI to compile with C++20 support. #1724 - Added MSVC 2019 to the AppVeyor CI. #1780 - Added badge to [fuzzing status](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:json). - Fixed some cppcheck warnings. #1760 - Fixed several typos in the documentation. #1720 #1767 #1803 - Added documentation on the `JSON_THROW_USER`, `JSON_TRY_USER`, and `JSON_CATCH_USER` macros to control user-defined exception handling. - Used GitHub's [CODEOWNERS](https://github.com/nlohmann/json/blob/develop/.github/CODEOWNERS) and [SECURITY](https://github.com/nlohmann/json/blob/develop/.github/SECURITY.md) feature. - Removed `GLOB` from CMake files. #1779 - Updated to [Doctest](https://github.com/onqtam/doctest) 2.3.5. ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.7.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.7.0/include.zip) (143 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.7.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.7.0/json.hpp) (782 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.7.0/json.hpp.asc) (1 KB) Release date: 2019-07-28 SHA-256: a503214947952b69f0062f572cb74c17582a495767446347ce2e452963fc2ca4 (json.hpp), 541c34438fd54182e9cdc68dd20c898d766713ad6d901fb2c6e28ff1f1e7c10d (include.zip) ### Summary This release introduces a few convenience functions and performs a lot of house keeping (bug fixes and small improvements). All changes are backward-compatible. ### :sparkles: New Features - Add overload of the **[`contains`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab23b04802eb9da97dc3f664e54e09cb3.html#ab23b04802eb9da97dc3f664e54e09cb3) function** to check if a JSON pointer is valid without throwing exceptions, just like its [counterpart for object keys](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9286acdc0578fc66e9346323e69fc0e3.html#a9286acdc0578fc66e9346323e69fc0e3). #1600 - Add a function **[`to_string`](http://nlohmann.github.io/json/doxygen/namespacenlohmann_a6ce645a0b8717757e096a5b5773b7a16.html#a6ce645a0b8717757e096a5b5773b7a16)** to allow for generic conversion to strings. #916 #1585 - Add **return value for the [`emplace_back`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_abf29131f898b05aad2c01a9c80e7a002.html#abf29131f898b05aad2c01a9c80e7a002) function**, returning a reference to the added element just like C++17 is [introducing this](https://en.cppreference.com/w/cpp/container/vector/emplace_back) for `std::vector`. #1609 - Add info how to use the library with the **[pacman](https://wiki.archlinux.org/index.php/pacman) package manager** on MSYS2. #1670 ### :bug: Bug Fixes - Fix an issue where typedefs with certain names yielded a compilation error. #1642 #1643 - Fix a conversion to `std::string_view` in the unit tests. #1634 #1639 - Fix MSVC Debug build. #1536 #1570 #1608 - Fix [`get_to`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a65753c68f06639eda0d355f919564e01.html#a65753c68f06639eda0d355f919564e01) method to clear existing content before writing. #1511 #1555 - Fix a `-Wc++17-extensions` warning. `nodiscard` attributes are now only used with Clang when `-std=c++17` is used. #1535 #1551 ### :zap: Improvements - Switch from [Catch](https://github.com/philsquared/Catch) to **[doctest](https://github.com/onqtam/doctest)** for the unit tests which speeds up compilation and runtime of the 112,112,308 tests. - Add an explicit section to the [README](https://github.com/nlohmann/json/blob/develop/README.md) about the **frequently addressed topics** [character encoding](https://github.com/nlohmann/json#character-encoding), [comments in JSON](https://github.com/nlohmann/json#comments-in-json), and the [order of object keys](https://github.com/nlohmann/json#order-of-object-keys). ### :hammer: Further Changes - Use [`GNUInstallDirs`](https://cmake.org/cmake/help/v3.0/module/GNUInstallDirs.html) to set library install directories. #1673 - Fix links in the [README](https://github.com/nlohmann/json/blob/develop/README.md). #1620 #1621 #1622 #1623 #1625 - Mention [`json` type](http://nlohmann.github.io/json/doxygen/namespacenlohmann_a2bfd99e845a2e5cd90aeaf1b1431f474.html#a2bfd99e845a2e5cd90aeaf1b1431f474) on the [documentation start page](http://nlohmann.github.io/json/doxygen/index.html). #1616 - Complete documentation of [`value()` function](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_adcf8ca5079f5db993820bf50036bf45d.html#adcf8ca5079f5db993820bf50036bf45d) with respect to `type_error.302` exception. #1601 - Fix links in the documentation. #1598 - Add regression tests for MSVC. #1543 #1570 - Use **[CircleCI](http://circleci.com)** for [continuous integration](https://circleci.com/gh/nlohmann/json). - Use **[Doozer](https://doozer.io)** for [continuous integration](https://doozer.io/nlohmann/json) on Linux (CentOS, Raspbian, Fedora) - Add tests to check each CMake flag (`JSON_BuildTests`, `JSON_Install`, `JSON_MultipleHeaders`, `JSON_Sanitizer`, `JSON_Valgrind`, `JSON_NoExceptions`, `JSON_Coverage`). - Use [Hedley](https://nemequ.github.io/hedley/) to avoid re-inventing several compiler-agnostic feature macros like `JSON_DEPRECATED`, `JSON_NODISCARD`, `JSON_LIKELY`, `JSON_UNLIKELY`, `JSON_HAS_CPP_14`, or `JSON_HAS_CPP_17`. Functions taking or returning pointers are annotated accordingly when a pointer will not be null. - Build and run tests on [AppVeyor](https://ci.appveyor.com/project/nlohmann/json) in DEBUG and RELEASE mode. ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.6.1 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip) (136 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.6.1/json.hpp) (711 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.6.1/json.hpp.asc) (1 KB) Release date: 2019-03-20 SHA-256: d2eeb25d2e95bffeb08ebb7704cdffd2e8fca7113eba9a0b38d60a5c391ea09a (json.hpp), 69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf (include.zip) ### Summary This release **fixes a regression and a bug** introduced by the earlier 3.6.0 release. All changes are backward-compatible. ### :bug: Bug Fixes - Fixed regression of #590 which could lead to compilation errors with GCC 7 and GCC 8. #1530 - Fixed a compilation error when `` was included. #1531 ### :hammer: Further Changes - Fixed a warning for missing field initializers. #1527 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.6.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.6.0/include.zip) (136 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.6.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.6.0/json.hpp) (711 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.6.0/json.hpp.asc) (1 KB) Release date: 2019-03-20 SHA-256: ce9839370f28094c71107c405affb3b08c4a098154988014cbb0800b1c44a831 (json.hpp), 237c5e66e7f8186a02804ce9dbd5f69ce89fe7424ef84adf6142e973bd9532f4 (include.zip) ℹ️ **This release introduced a regression. Please update to [version 3.6.1](https://github.com/nlohmann/json/releases/tag/v3.6.1)!** ### Summary This release adds some **convenience functions for JSON Pointers**, introduces a [`contains`]( http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a0a45fc740637123fdf05fef970f8be47.html#a0a45fc740637123fdf05fef970f8be47) function to check if a key is present in an object, and improves the **performance of integer serialization**. Furthermore, a lot of small bug fixes and improvements have been made. All changes are backward-compatible. ### :sparkles: New Features - Overworked the public interface for JSON Pointers. The creation of JSON Pointers is simplified with [`operator/`]( http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a90a11fe6c7f37b1746a3ff9cb24b0d53.html#a90a11fe6c7f37b1746a3ff9cb24b0d53) and [`operator/=`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a7395bd0af29ac23fd3f21543c935cdfa.html#a7395bd0af29ac23fd3f21543c935cdfa). JSON Pointers can be inspected with [`empty`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a649252bda4a2e75a0915b11a25d8bcc3.html#a649252bda4a2e75a0915b11a25d8bcc3), [`back`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a6bd5b554c10f15672135c216893eef31.html#a6bd5b554c10f15672135c216893eef31), and [`parent_pointer`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_afdaacce1edb7145e0434e014f0e8685a.html#afdaacce1edb7145e0434e014f0e8685a), and manipulated with [`push_back`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a697d12b5bd6205f8866691b166b7c7dc.html#a697d12b5bd6205f8866691b166b7c7dc) and [`pop_back`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1json__pointer_a4b1ee4d511ca195bed896a3da47e264c.html#a4b1ee4d511ca195bed896a3da47e264c). #1434 - Added a boolean method [`contains`]( http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a0a45fc740637123fdf05fef970f8be47.html#a0a45fc740637123fdf05fef970f8be47) to check whether an element exists in a JSON object with a given key. Returns false when called on non-object types. #1471 #1474 ### :bug: Bug Fixes - Fixed a compilation issues with libc 2.12. #1483 #1514 - Fixed endian conversion on PPC64. #1489 - Fixed library to compile with GCC 9. #1472 #1492 - Fixed a compilation issue with GCC 7 on CentOS. #1496 - Fixed an integer overflow. #1447 - Fixed buffer flushing in serializer. #1445 #1446 ### :zap: Improvements - The performance of dumping integers has been greatly improved. #1411 - Added CMake parameter `JSON_Install` to control whether the library should be installed (default: on). #1330 - Fixed a lot of compiler and linter warnings. #1400 #1435 #1502 - Reduced required CMake version from 3.8 to 3.1. #1409 #1428 #1441 #1498 - Added `nodiscard` attribute to `meta()`, `array()`, `object()`, `from_cbor`, `from_msgpack`, `from_ubjson`, `from_bson`, and `parse`. #1433 ### :hammer: Further Changes - Added missing headers. #1500 - Fixed typos and broken links in README. #1417 #1423 #1425 #1451 #1455 #1491 - Fixed documentation of parse function. #1473 - Suppressed warning that cannot be fixed inside the library. #1401 #1468 - Imroved package manager suppert: - Updated Buckaroo instructions. #1495 - Improved Meson support. #1463 - Added Conda package manager documentation. #1430 - Added NuGet package manager documentation. #1132 - Continuous Integration - Removed unstable or deprecated Travis builders (Xcode 6.4 - 8.2) and added Xcode 10.1 builder. - Added Clang 7 to Travis CI. - Fixed AppVeyor x64 builds. #1374 #1414 - Updated thirdparty libraries: - Catch 1.12.0 -> 1.12.2 - Google Benchmark 1.3.0 -> 1.4.1 - Doxygen 1.8.15 -> 1.8.16 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.5.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.5.0/include.zip) (133 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.5.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.5.0/json.hpp) (693 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.5.0/json.hpp.asc) (1 KB) Release date: 2018-12-22 SHA-256: 8a6dbf3bf01156f438d0ca7e78c2971bca50eec4ca6f0cf59adf3464c43bb9d5 (json.hpp), 3564da9c5b0cf2e032f97c69baedf10ddbc98030c337d0327a215ea72259ea21 (include.zip) ### Summary This release introduces the support for **structured bindings** and reading from **`FILE*`**. Besides, a few bugs have been fixed. All changes are backward-compatible. ### :sparkles: New Features - **Structured bindings** are now supported for JSON objects and arrays via the [`items()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) member function, so finally this code is possible: ```cpp for (auto& [key, val] : j.items()) { std::cout << key << ':' << val << '\n'; } ``` #1388 #1391 - Added support for **reading from `FILE*`** to support situations in which streams are nit available or would require too much RAM. #1370 #1392 ### :bug: Bug Fixes - The `eofbit` was not set for input streams when the end of a stream was reached while parsing. #1340 #1343 - Fixed a bug in the SAX parser for BSON arrays. ### :zap: Improvements - Added support for Clang 5.0.1 (PS4 version). #1341 #1342 ### :hammer: Further Changes - Added a warning for implicit conversions to the documentation: It is not recommended to use implicit conversions when reading **from** a JSON value. Details about this recommendation can be found [here](https://www.github.com/nlohmann/json/issues/958). #1363 - Fixed typos in the documentation. #1329 #1380 #1382 - Fixed a C4800 warning. #1364 - Fixed a `-Wshadow` warning #1346 - Wrapped `std::snprintf` calls to avoid error in MSVC. #1337 - Added code to allow installation via Meson. #1345 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.4.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.4.0/include.zip) (132 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.4.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.4.0/json.hpp) (689 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.4.0/json.hpp.asc) (1 KB) Release date: 2018-10-30 SHA-256: 63da6d1f22b2a7bb9e4ff7d6b255cf691a161ff49532dcc45d398a53e295835f (json.hpp), bfec46fc0cee01c509cf064d2254517e7fa80d1e7647fea37cf81d97c5682bdc (include.zip) ### Summary This release introduces three new features: - **BSON (Binary JSON)** is next to CBOR, MessagePack, and UBJSON the fourth binary (de)serialization format supported by the library. - **Adjustable error handlers for invalid Unicode** allows to specify the behavior when invalid byte sequences are serialized. - **Simplified enum/JSON mapping** with a macro in case the default mapping to integers is not desired. Furthermore, some effort has been invested in improving the **parse error messages**. Besides, a few bugs have been fixed. All changes are backward-compatible. ### :sparkles: New Features - The library can read and write a subset of **[BSON](http://bsonspec.org/) (Binary JSON)**. All data types known from JSON are supported, whereas other types more tied to MongoDB such as timestamps, object ids, or binary data are currently not implemented. See [the README](https://github.com/nlohmann/json#binary-formats-bson-cbor-messagepack-and-ubjson) for examples. #1244 #1320 - The behavior when the library encounters an invalid Unicode sequence during serialization can now be controlled by defining one of three **Unicode error handlers**: (1) throw an exception (default behavior), (2) replace invalid sequences by the Unicode replacement character (U+FFFD), or (3) ignore/filter invalid sequences. See the [documentation of the `dump` function](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a50ec80b02d0f3f51130d4abb5d1cfdc5.html#a50ec80b02d0f3f51130d4abb5d1cfdc5) for examples. #1198 #1314 - To easily specify a user-defined **enum/JSON mapping**, a macro `NLOHMANN_JSON_SERIALIZE_ENUM` has been introduced. See the [README section](https://github.com/nlohmann/json#specializing-enum-conversion) for more information. #1208 #1323 ### :bug: Bug Fixes - fixed truncation #1286 #1315 - fixed an issue with std::pair #1299 #1301 - fixed an issue with std::variant #1292 #1294 - fixed a bug in the JSON Pointer parser ### :zap: Improvements - The **diagnosis messages for parse errors** have been improved: error messages now indicated line/column positions where possible (in addition to a byte count) and also the context in which the error occurred (e.g., "while parsing a JSON string"). Example: error `parse error at 2: syntax error - invalid string: control character must be escaped; last read: ''` is now reported as `parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \u0009 or \t; last read: ''`. #1280 #1288 #1303 ### :hammer: Further Changes - improved Meson documentation #1305 - fixed some more linter warnings #1280 - fixed Clang detection for third-party Google Benchmark library #1277 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.3.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.3.0/include.zip) (123 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.3.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.3.0/json.hpp) (635 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.3.0/json.hpp.asc) (1 KB) Release date: 2018-10-05 SHA-256: f1327bb60c58757a3dd2b0c9c45d49503d571337681d950ec621f8374bcc14d4 (json.hpp), 9588d63557333aaa485e92221ec38014a85a6134e7486fe3441e0541a5a89576 (include.zip) ### Summary This release adds support for **GCC 4.8**. Furthermore, it adds a function [**`get_to`**](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a8a3db7d78f74232d3a6fb8f1abf69709.html#a8a3db7d78f74232d3a6fb8f1abf69709) to write a JSON value to a passed reference. Another topic of this release was the **CMake support** which has been overworked and documented. Besides, a lot of bugs have been fixed and slight improvements have been made. All changes are backward-compatible. ### :sparkles: New Features - The library can now also built with **GCC 4.8**. Though this compiler does not fully support C++11, it can successfully compile and run the test suite. Note that bug [57824](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57824) in GCC 4.8 still forbids to use multiline raw strings in arguments to macros. #1257 - Added new function [**`get_to`**](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a8a3db7d78f74232d3a6fb8f1abf69709.html#a8a3db7d78f74232d3a6fb8f1abf69709) to write a JSON value to a passed reference. The destination type is automatically derived which allows more succinct code compared to the `get` function. #1227 #1231 ### :bug: Bug Fixes - Fixed a bug in the CMake file that made `target_link_libraries` to not properly include `nlohmann_json`. #1243 #1245 #1260 - Fixed a warning in MSVC 2017 complaining about a constexpr if. #1204 #1268 #1272 - Fixed a bug that prevented compilation with ICPC. #755 #1222 - Improved the SFINAE correctness to fix a bug in the conversion operator. #1237 #1238 - Fixed a `-Wctor-dtor-privacy` warning. #1224 - Fixed a warning on a lambda in unevaluated context. #1225 #1230 - Fixed a bug introduced in version 3.2.0 where defining `JSON_CATCH_USER` led to duplicate macro definition of `JSON_INTERNAL_CATCH`. #1213 #1214 - Fixed a bug that prevented compilation with Clang 3.4.2 in RHEL 7. #1179 #1249 ### :zap: Improvements - Added [documentation on CMake integration](https://github.com/nlohmann/json#cmake) of the library. #1270 - Changed the CMake file to use `find_package(nlohmann_json)` without installing the library. #1202 - Improved error messages in case `operator[]` is used with the wrong combination (json.exception.type_error.305) of JSON container type and argument type. Example: "cannot use operator[] with a string argument". #1220 #1221 - Added a license and version information to the Meson build file. #1252 - Removed static assertions to indicated missing `to_json` or `from_json` functions as such assertions do not play well with SFINAE. These assertions also led to problems with GMock. #960 #1212 #1228 - The test suite now does not wait forever if run in a wrong directory and input files are not found. #1262 - The test suite does not show deprecation warnings for deprecated functions which frequently led to confusion. #1271 ### :hammer: Further Changes - GCC 4.8 and Xcode 10 were added to the [continuous integration suite](https://travis-ci.org/nlohmann/json) at Travis. - Added [lgtm](https://lgtm.com/projects/g/nlohmann/json/context:cpp) checks to pull requests. - Added tests for CMake integration. #1260 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.2.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.2.0/include.zip) (124 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.2.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.2.0/json.hpp) (636 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.2.0/json.hpp.asc) (1 KB) Release date: 2018-08-20 SHA-256: ce6b5610a051ec6795fa11c33854abebb086f0fd67c311f5921c3c07f9531b44 (json.hpp), 35ee642558b90e2f9bc758995c4788c4b4d4dec54eef95fb8f38cb4d49c8fc7c (include.zip) ### Summary This release introduces a [**SAX interface**](https://nlohmann.github.io/json/structnlohmann_1_1json__sax.html) to the library. While this may be a very special feature used by only few people, it allowed to unify all functions that consumed input and created some kind of JSON value. Internally, now all existing functions like `parse`, `accept`, `from_cbor`, `from_msgpack`, and `from_ubjson` use the SAX interface with different event processors. This allowed to separate the input processing from the value generation. Furthermore, throwing an exception in case of a parse error is now optional and up to the event processor. Finally, the JSON parser is now non-recursive (meaning it does not use the call stack, but `std::vector` to track the hierarchy of structured values) which allows to process nested input more efficiently. Furthermore, the library finally is able to parse from **wide string types**. This is the first step toward opening the library from UTF-8 to UTF-16 and UTF-32. This release further fixes several bugs in the library. All changes are backward-compatible. ### :sparkles: New Features - added a parser with a **SAX interface** (#971, #1153) - support to parse from **wide string types** `std::wstring`, `std::u16string`, and `std::u32string`; the input will be converted to UTF-8 (#1031) - added support for **`std::string_view`** when using C++17 (#1028) - allow to **roundtrip `std::map` and `std::unordered_map`** from JSON if key type is not convertible to string; in these cases, values are serialized to arrays of pairs (#1079, #1089, #1133, #1138) ### :bug: Bug Fixes - allow to create `nullptr_t` from JSON allowing to properly roundtrip `null` values (#1169) - allow compare user-defined string types (#1130) - better support for algorithms using iterators from `items()` (#1045, #1134) - added parameter to avoid compilation error with MSVC 2015 debug builds (#1114) - re-added accidentally skipped unit tests (#1176) - fixed MSVC issue with `std::swap` (#1168) ### :zap: Improvements - `key()` function for iterators returns a const reference rather than a string copy (#1098) - binary formats CBOR, MessagePack, and UBJSON now supports `float` as type for floating-point numbers (#1021) ### :hammer: Further Changes - changed issue templates - improved continuous integration: added builders for Xcode 9.3 and 9.4, added builders for GCC 8 and Clang 6, added builder for MinGW, added builders for MSVC targeting x86 - required CMake version is now at least 3.8 (#1040) - overworked CMake file wrt. packaging (#1048) - added package managers: Spack (#1041) and CocoaPods (#1148) - fixed Meson include directory (#1142) - preprocessor macro `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK` can skip the rejection of unsupported compilers - use at your own risk! (#1128) - preprocessor macro `JSON_INTERNAL_CATCH`/`JSON_INTERNAL_CATCH_USER` allows to control the behavior of exception handling inside the library (#1187) - added note on `char` to JSON conversion - added note how to send security-related issue via encrypted email - removed dependency to `std::stringstream` (#1117) - added SPDX-License-Identifier - added updated JSON Parsing Test Suite, described in [Parsing JSON is a Minefield 💣](http://seriot.ch/parsing_json.php) - updated to Catch 1.12.0 ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.1.2 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.1.2/include.zip) (115 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.1.2/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.1.2/json.hpp) (582 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.1.2/json.hpp.asc) (1 KB) Release date: 2018-03-14 SHA-256: fbdfec4b4cf63b3b565d09f87e6c3c183bdd45c5be1864d3fcb338f6f02c1733 (json.hpp), 495362ee1b9d03d9526ba9ccf1b4a9c37691abe3a642ddbced13e5778c16660c (include.zip) ### Summary This release fixes several bugs in the library. All changes are backward-compatible. ### :bug: Bug Fixes - Fixed a **memory leak** occurring in the parser callback (#1001). - Different **specializations of `basic_json`** (e.g., using different template arguments for strings or objects) can now be used in assignments (#972, #977, #986). - Fixed a logical error in an iterator range check (#992). ### :zap: Improvements - The parser and the serialization now support **user-defined string types** (#1006, #1009). ### :hammer: Further Changes - **[Clang Analyzer](http://clang-analyzer.llvm.org)** is now used as additional static analyzer; see `make clang_analyze`. - Overworked [README](https://github.com/nlohmann/json/blob/develop/README.md) by adding links to the [documentation](https://nlohmann.github.io/json/) (#981). ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.1.1 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.1.1/include.zip) (114 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.1.1/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.1.1/json.hpp) (577 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.1.1/json.hpp.asc) (1 KB) Release date: 2018-02-13 SHA-256: e14ce5e33d6a2daf748026bd4947f3d9686ca4cfd53d10c3da46a0a9aceb7f2e (json.hpp), fde771d4b9e4f222965c00758a2bdd627d04fb7b59e09b7f3d1965abdc848505 (include.zip) ### Summary This release fixes several bugs in the library. All changes are backward-compatible. ### :bug: Bug Fixes - Fixed parsing of **CBOR strings with indefinite length** (#961). Earlier versions of this library misinterpreted the CBOR standard and rejected input with the `0x7F` start byte. - Fixed user-defined **conversion to vector type** (#924, #969). A wrong SFINAE check rejected code though a user-defined conversion was provided. - Fixed documentation of the parser behavior for **objects with duplicate keys** (#963). The exact behavior is not specified by [RFC 8259](https://tools.ietf.org/html/rfc8259) and the library now also provides no guarantee which object key is stored. - Added check to detect memory **overflow when parsing UBJSON containers** (#962). The optimized UBJSON format allowed for specifying an array with billions of `null` elements with a few bytes and the library did not check whether this size exceeded `max_size()`. ### :hammer: Further Changes - [Code coverage](https://coveralls.io/github/nlohmann/json) is now calculated for the individual header files, allowing to find uncovered lines more quickly than by browsing through the single header version (#953, #957). - A Makefile target `run_benchmarks` was added to quickly build and run the benchmark suite. - The documentation was harmonized with respect to the header inclusion (#955). Now all examples and the README use `#include ` to allow for selecting `single_include` or `include` or whatever installation folder as include directory. - Added note on how to use the library with the [cget](http://cget.readthedocs.io/en/latest/) package manager (#954). ### :fire: Deprecated functions This release does not deprecate any functions. As an overview, the following functions have been deprecated in earlier versions and will be removed in the next major version (i.e., 4.0.0): - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) are deprecated. Please use the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) instead. - Functions [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) and [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) are deprecated. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.1.0 !!! summary "Files" - [include.zip](https://github.com/nlohmann/json/releases/download/v3.1.0/include.zip) (114 KB) - [include.zip.asc](https://github.com/nlohmann/json/releases/download/v3.1.0/include.zip.asc) (1 KB) - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.1.0/json.hpp) (577 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.1.0/json.hpp.asc) (1 KB) Release date: 2018-02-01 SHA-256: d40f614d10a6e4e4e80dca9463da905285f20e93116c36d97d4dc1aa63d10ba4 (json.hpp), 2b7234fca394d1e27b7e017117ed80b7518fafbb4f4c13a7c069624f6f924673 (include.zip) ### Summary This release adds support for the [**UBJSON**](http://ubjson.org) format and [**JSON Merge Patch**](https://tools.ietf.org/html/rfc7386). It also contains some minor changes and bug fixes. All changes are backward-compatible. ### :sparkles: New features - The library now supports [**UBJSON**](http://ubjson.org) (Universal Binary JSON Specification) as binary format to read and write JSON values space-efficiently. See the [documentation overview](https://json.nlohmann.me/features/binary_formats/) for a comparison of the different formats CBOR, MessagePack, and UBJSON. - [**JSON Merge Patch**](https://tools.ietf.org/html/rfc7386) (RFC 7386) offers an intuitive means to describe patches between JSON values (#876, #877). See the documentation of [`merge_patch`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a0ec0cd19cce42ae6071f3cc6870ea295.html#a0ec0cd19cce42ae6071f3cc6870ea295) for more information. ### :zap: Improvements - The library now uses the **Grisu2 algorithm** for printing floating-point numbers (based on the reference implementation by Florian Loitsch) which produces a short representation which is guaranteed to round-trip (#360, #935, #936). - The **UTF-8 handling** was further simplified by using the decoder of Björn Hoehrmann in more scenarios. ### :truck: Reorganization - Though the library is released as a single header, its development got more and more complicated. With this release, the header is **split into several files** and the single-header file `json.hpp` can be generated from these development sources. In the repository, folder `include` contains the development sources and `single_include` contains the single `json.hpp` header (#700, #906, #907, #910, #911, #915, #920, #924, #925, #928, #944). - The split further allowed for a **forward declaration header** `include/nlohmann/json_fwd.hpp` to speed up compilation times (#314). ### :hammer: Further changes - [Google Benchmark](https://github.com/google/benchmark) is now used for micro benchmarks (see `benchmarks` folder, #921). - The serialization (JSON and binary formats) now properly work with the libraries string template parameter, allowing for optimized string implementations to be used in constraint environments such as embedded software (#941, #950). - The exceptional behavior can now be overridden by defining macros `JSON_THROW_USER`, `JSON_TRY_USER`, and `JSON_CATCH_USER`, defining the behavior of `throw`, `try` and `catch`, respectively. This allows to switch off C++'s exception mechanism yet still execute user-defined code in case an error condition occurs (#938). - To facilitate the interplay with [flex](https://github.com/westes/flex) and [Bison](https://www.gnu.org/software/bison/), the library does not use the variable name `yytext` any more as it could clash with macro definitions (#933). - The library now defines `NLOHMANN_JSON_VERSION_MAJOR`, `NLOHMANN_JSON_VERSION_MINOR`, and `NLOHMANN_JSON_VERSION_PATCH` to allow for conditional compilation based on the included library version (#943, #948). - A compilation error with ICC has been fixed (#947). - Typos and links in the documentation have been fixed (#900, #930). - A compiler error related to incomplete types has been fixed (#919). - The tests form the [UTF-8 decoder stress test](http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt) have been added to the test suite. ### :fire: Deprecated functions - Function [`iterator_wrapper`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1592a06bc63811886ade4f9d965045e.html#af1592a06bc63811886ade4f9d965045e) has been deprecated (#874). Since its introduction, the name was up for discussion, as it was too technical. We now introduced the member function [`items()`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_afe3e137ace692efa08590d8df40f58dd.html#afe3e137ace692efa08590d8df40f58dd) with the same semantics. `iterator_wrapper` will be removed in the next major version (i.e., 4.0.0). Furthermore, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0): - [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) - [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.0.1 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.0.1/json.hpp) (502 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.0.1/json.hpp.asc) (1 KB) Release date: 2017-12-29 SHA-256: c9b3591f1bb94e723a0cd7be861733a3a555b234ef132be1e9027a0364118c4c ### Summary This release fixes small issues in the implementation of **JSON Pointer** and **JSON Patch**. All changes are backward-compatible. ### Changes - :bug: The **"copy" operation of JSON Patch** ([RFC 6902](https://tools.ietf.org/html/rfc6902)) requests that it is an error if the target path points into a non-existing array or object (see #894 for a detailed description). This release fixes the implementation to detect such invalid target paths and throw an exception. - :bug: An **array index in a JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) must be an integer. This release fixes the implementation to throw an exception in case invalid array indices such as `10e2` are used. - :white_check_mark: Added the [JSON Patch tests](https://github.com/json-patch/json-patch-tests) from Byron Ruth and Mike McCabe. - :memo: Fixed the documentation of the [`at(ptr)` function with JSON Pointers](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a8ab61397c10f18b305520da7073b2b45.html#a8ab61397c10f18b305520da7073b2b45) to list all possible exceptions (see #888). - :memo: Updated the [container overview documentation](https://nlohmann.github.io/json/) (see #883). - :wrench: The CMake files now respect the [`BUILD_TESTING`](https://cmake.org/cmake/help/latest/module/CTest.html?highlight=build_testing) option (see #846, #885) - :rotating_light: Fixed some compiler warnings (see #858, #882). ### Deprecated functions :fire: To unify the interfaces and to improve similarity with the STL, the following functions are deprecated since version 3.0.0 and will be removed in the next major version (i.e., 4.0.0): - [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) - [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ## v3.0.0 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v3.0.0/json.hpp) (501 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v3.0.0/json.hpp.asc) (1 KB) Release date: 2017-12-17 SHA-256: 076d4a0cb890a3c3d389c68421a11c3d77c64bd788e85d50f1b77ed252f2a462 ### Summary After almost a year, here is finally a new release of JSON for Modern C++, and it is a major one! As we adhere to [semantic versioning](https://semver.org), this means the release includes some breaking changes, so please read the next section carefully before you update. But don't worry, we also added a few new features and put a lot of effort into fixing a lot of bugs and straighten out a few inconsistencies. ### :boom: Breaking changes This section describes changes that change the public API of the library and may require changes in code using a previous version of the library. In section "Moving from 2.x.x to 3.0.0" at the end of the release notes, we describe in detail how existing code needs to be changed. - The library now uses [**user-defined exceptions**](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9a0aced019cb1d65bb49703406c84970.html#a9a0aced019cb1d65bb49703406c84970) instead of re-using those defined in `` (#244). This not only allows to add more information to the exceptions (every exception now has an identifier, and parse errors contain the position of the error), but also to easily catch all library exceptions with a single `catch(json::exception)`. - When strings with a different encoding as UTF-8 were stored in JSON values, their serialization could not be parsed by the library itself, as only UTF-8 is supported. To enforce this library limitation and improve consistency, **non-UTF-8 encoded strings now yield a `json::type_error` exception during serialization** (#838). The check for valid UTF-8 is realized with code from [Björn Hoehrmann](http://bjoern.hoehrmann.de/). - **NaN and infinity values can now be stored inside the JSON value** without throwing an exception. They are, however, still serialized as `null` (#388). - The library's iterator tag was changed from RandomAccessIterator to **[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator)** (#593). Supporting RandomAccessIterator was incorrect as it assumed an ordering of values in a JSON objects which are unordered by definition. - The library does not include the standard headers ``, ``, and `` any more. You may need to add these headers to code relying on them. - Removed constructor `explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr)` which was deprecated in version 2.0.0 (#480). ### :fire: Deprecated functions To unify the interfaces and to improve similarity with the STL, the following functions are now deprecated and will be removed in the next major version (i.e., 4.0.0): - [`friend std::istream& operator<<(basic_json&, std::istream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ab7285a92514fcdbe6de505ebaba92ea3.html#ab7285a92514fcdbe6de505ebaba92ea3) - [`friend std::ostream& operator>>(const basic_json&, std::ostream&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9e06deabe69262c3ffc5533d32856983.html#a9e06deabe69262c3ffc5533d32856983) Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8) and [`friend operator<<(std::ostream&, const basic_json&)`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405) instead. ### :sparkles: New features With all this breaking and deprecation out of the way, let's talk about features! - We improved the **diagnostic information for syntax errors** (#301). Now, an exception [`json::parse_error`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1efc2468e6022be6e35fc2944cabe4d.html#af1efc2468e6022be6e35fc2944cabe4d) is thrown which contains a detailed message on the error, but also a member `byte` to indicate the byte offset in the input where the error occurred. - We added a **non-throwing syntax check** (#458): The new `accept` function returns a Boolean indicating whether the input is proper JSON. We also added a Boolean parameter `allow_exceptions` to the existing [`parse`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_aa9676414f2e36383c4b181fe856aa3c0.html#aa9676414f2e36383c4b181fe856aa3c0) functions to return a `discarded` value in case a syntax error occurs instead of throwing an exception. - An [`update`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a1cfa9ae5e7c2434cab4cfe69bffffe11.html#a1cfa9ae5e7c2434cab4cfe69bffffe11) function was added to **merge two JSON objects** (#428). In case you are wondering: the name was inspired by [Python](https://docs.python.org/2/library/stdtypes.html#dict.update). - The [`insert`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a1b0a4e60d56f1fe80501ed941e122892.html#a1b0a4e60d56f1fe80501ed941e122892) function now also supports an iterator range to add elements to an object. - The binary exchange formats **CBOR and MessagePack can now be parsed from input streams and written to output streams** (#477). - Input streams are now only read until the end of a JSON value instead of the end of the input (#367). - The serialization function [`dump`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a5adea76fedba9898d404fef8598aa663.html#a5adea76fedba9898d404fef8598aa663) now has two optional parameters `ensure_ascii` to **escape all non-ASCII characters** with `\uxxxx` and an `indent_char` parameter to choose whether to **indent with spaces or tabs** (#654). - Added **built-in type support** for C arrays (#502), `std::pair` and `std::tuple` (#563, #614), `enum` and `enum class` (#545), `std::vector` (#494). Fixed support for `std::valarray` (#702), `std::array` (#553), and `std::map` (#600, #607). ### :hammer: Further changes Furthermore, there have been a lot of changes under the hood: - Replaced the [re2c](http://re2c.org) generated scanner by a self-coded version which allows for a better modularization of the parser and better diagnostics. To test the new scanner, we added millions (8,860,608 to be exact) of unit tests to check all valid and invalid byte sequences of the Unicode standard. - Google's OSS-Fuzz is still constantly fuzz-testing the library and found several issues that were fixed in this release (#497, #504, #514, #516, #518, #519, #575). - We now also ignore UTF-8 byte order marks when parsing from an iterator range (#602). - Values can be now moved from initializer lists (#663). - Updated to [Catch](https://github.com/catchorg/Catch2) 1.9.7. Unfortunately, Catch2 currently has some performance issues. - The non-exceptional paths of the library are now annotated with `__builtin_expect` to optimize branch prediction as long as no error occurs. - MSVC now produces a stack trace in MSVC if a `from_json` or `to_json` function was not found for a user-defined type. We also added a debug visualizer [`nlohmann_json.natvis`](https://github.com/nlohmann/json/blob/develop/nlohmann_json.natvis) for better debugging in MSVC (#844). - Overworked the documentation and added even more examples. - The build workflow now relies on CMake and CTest. Special flags can be chosen with CMake, including coverage (`JSON_Coverage`), compilation without exceptions (`JSON_NoExceptions`), LLVM sanitizers (`JSON_Sanitizer`), or execution with Valgrind (`JSON_Valgrind`). - Added support for package managers Meson (#576), Conan (#566), Hunter (#671, #829), and vcpkg (#753). - Added CI builders: Xcode 8.3, 9.0, 9.1, and 9.2; GCC 7.2; Clang 3.8, 3.9, 4.0, and 5.0; Visual Studio 2017. The library is further built with C++17 settings on the latest Clang, GCC, and MSVC version to quickly detect new issues. ### Moving from 2.x.x to 3.0.0 #### User-defined Exceptions There are five different exceptions inheriting from [`json::exception`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a9a0aced019cb1d65bb49703406c84970.html#a9a0aced019cb1d65bb49703406c84970): - [`json::parse_error`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af1efc2468e6022be6e35fc2944cabe4d.html#af1efc2468e6022be6e35fc2944cabe4d) for syntax errors (including the binary formats), - [`json::invalid_iterator`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_ac13d32f7cbd02d616e71d8dc30dadcbf.html#ac13d32f7cbd02d616e71d8dc30dadcbf) for errors related to iterators, - [`json::type_error`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a4010e8e268fefd86da773c10318f2902.html#a4010e8e268fefd86da773c10318f2902) for errors where functions were called with the wrong JSON type, - [`json::out_of_range`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a28f7c2f087274a0012eb7a2333ee1580.html#a28f7c2f087274a0012eb7a2333ee1580) for range errors, and - [`json::other_error`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a3333a5a8714912adda33a35b369f7b3d.html#a3333a5a8714912adda33a35b369f7b3d) for miscellaneous errors. To support these exception, the `try`/`catch` blocks of your code need to be adjusted: | new exception | previous exception | |:---------------------|:-------------------| | parse_error.101 | invalid_argument | | parse_error.102 | invalid_argument | | parse_error.103 | invalid_argument | | parse_error.104 | invalid_argument | | parse_error.105 | invalid_argument | | parse_error.106 | domain_error | | parse_error.107 | domain_error | | parse_error.108 | domain_error | | parse_error.109 | invalid_argument | | parse_error.110 | out_of_range | | parse_error.111 | invalid_argument | | parse_error.112 | invalid_argument | | invalid_iterator.201 | domain_error | | invalid_iterator.202 | domain_error | | invalid_iterator.203 | domain_error | | invalid_iterator.204 | out_of_range | | invalid_iterator.205 | out_of_range | | invalid_iterator.206 | domain_error | | invalid_iterator.207 | domain_error | | invalid_iterator.208 | domain_error | | invalid_iterator.209 | domain_error | | invalid_iterator.210 | domain_error | | invalid_iterator.211 | domain_error | | invalid_iterator.212 | domain_error | | invalid_iterator.213 | domain_error | | invalid_iterator.214 | out_of_range | | type_error.301 | domain_error | | type_error.302 | domain_error | | type_error.303 | domain_error | | type_error.304 | domain_error | | type_error.305 | domain_error | | type_error.306 | domain_error | | type_error.307 | domain_error | | type_error.308 | domain_error | | type_error.309 | domain_error | | type_error.310 | domain_error | | type_error.311 | domain_error | | type_error.313 | domain_error | | type_error.314 | domain_error | | type_error.315 | domain_error | | out_of_range.401 | out_of_range | | out_of_range.402 | out_of_range | | out_of_range.403 | out_of_range | | out_of_range.404 | out_of_range | | out_of_range.405 | domain_error | | other_error.501 | domain_error | #### Handling of NaN and INF - If an overflow occurs during parsing a number from a JSON text, an exception [`json::out_of_range`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a28f7c2f087274a0012eb7a2333ee1580.html#a28f7c2f087274a0012eb7a2333ee1580) is thrown so that the overflow is detected early and roundtripping is guaranteed. - NaN and INF floating-point values can be stored in a JSON value and are not replaced by null. That is, the basic_json class behaves like `double` in this regard (no exception occurs). However, NaN and INF are serialized to `null`. #### Removal of deprecated functions Function `explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr)` should be replaced by the `parse` function: Let `ss` be a stream and `cb` be a parse callback function. Old code: ```cpp json j(ss, cb); ``` New code: ```cpp json j = json::parse(ss, cb); ``` If no callback function is used, also the following code works: ```cpp json j; j << ss; ``` or ```cpp json j; ss >> j; ``` ## v2.1.1 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.1.1/json.hpp) (437 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.1.1/json.hpp.asc) (1 KB) Release date: 2017-02-25 SHA-256: faa2321beb1aa7416d035e7417fcfa59692ac3d8c202728f9bcc302e2d558f57 ### Summary This release **fixes a locale-related bug in the parser**. To do so, the whole number handling (lexer, parser, and also the serialization) have been overworked. Furthermore, a lot of small changes added up that were added to this release. All changes are backward-compatible. ### Changes - :bug: Locales that have a different character than `.` as decimal separator (e.g., the Norwegian locale `nb_NO.UTF-8`) led to truncated number parsing or parse errors. The library now has been fixed to work with **any locale**. Note that `.` is still the only valid decimal separator for JSON input. - :bug: Numbers like `1.0` were correctly parsed as floating-point number, but serialized as integer (`1`). Now, **floating-point numbers correctly round trip**. - :bug: Parsing incorrect JSON numbers with leading 0 (`0123`) could yield a [buffer overflow](https://github.com/nlohmann/json/issues/452). This is fixed now by detecting such errors directly by the lexer. - :bug: Constructing a JSON value from a pointer was incorrectly interpreted as a Boolean; such code will now yield a compiler error. - :bug: Comparing a JSON number with `0` led to a comparison with `null`. This is fixed now. - :bug: All throw calls are now wrapped in macros. - :lock: Starting during the preparation of this release (since 8 February 2017), commits and released files are **cryptographically signed** with [this GPG key](https://keybase.io/nlohmann/pgp_keys.asc?fingerprint=797167ae41c0a6d9232e48457f3cea63ae251b69). Previous releases have also been signed. - :sparkles: The parser for MessagePack and CBOR now supports an optional start index parameter to define a byte offset for the parser. - :rotating_light: Some more warnings have been fixed. With Clang, the code compiles **without warnings** with `-Weverything` (well, it needs `-Wno-documentation-unknown-command` and `-Wno-deprecated-declarations`, but you get the point). - :hammer: The code can be compiled easier with many Android NDKs by avoiding macros like `UINT8_MAX` which previously required defining a preprocessor macro for compilation. - :zap: The unit tests now compile two times faster. - :heavy_plus_sign: [Cotire](https://github.com/sakra/cotire) is used to speed up the build. - :pencil2: Fixed a lot of typos in the documentation. - :memo: Added a section to the README file that lists all used [third-party code/tools](https://github.com/nlohmann/json#used-third-party-tools). - :memo: Added a note on constructing a string value vs. parsing. - :white_check_mark: The test suite now contains 11202597 unit tests. - :memo: Improved the [Doxygen documentation](https://nlohmann.github.io/json/) by shortening the template parameters of class `basic_json`. - :construction_worker: Removed Doozer. - :construction_worker: Added Codacity. - :arrow_up: Upgraded Catch to version 1.7.2. ## v2.1.0 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.1.0/json.hpp) (426 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.1.0/json.hpp.asc) (1 KB) - Release date: 2017-01-28 - SHA-256: a571dee92515b685784fd527e38405cf3f5e13e96edbfe3f03d6df2e363a767b ### Summary This release introduces a means to convert from/to user-defined types. The release is backwards compatible. ![conversion](https://cloud.githubusercontent.com/assets/159488/22399173/aebe8f7a-e597-11e6-930f-7494ee615827.png) ### Changes - :sparkles: The library now offers an elegant way to **convert from and to arbitrary value types**. All you need to do is to implement two functions: `to_json` and `from_json`. Then, a conversion is as simple as putting a `=` between variables. See the [README](https://github.com/nlohmann/json#arbitrary-types-conversions) for more information and examples. - :sparkles: **Exceptions can now be switched off.** This can be done by defining the preprocessor symbol `JSON_NOEXCEPTION` or by passing `-fno-exceptions` to your compiler. In case the code would usually thrown an exception, `abort()` is now called. - :sparkles: **Information on the library** can be queried with the new (static) function `meta()` which returns a JSON object with information on the version, compiler, and platform. See the [documentation]() for an example. - :bug: A bug in the CBOR parser was fixed which led to a buffer overflow. - :sparkles: The function [`type_name()`]() is now public. It allows to query the type of a JSON value as string. - :white_check_mark: Added the [Big List of Naughty Strings](https://github.com/minimaxir/big-list-of-naughty-strings) as test case. - :arrow_up: Updated to [Catch v1.6.0](https://github.com/philsquared/Catch/releases/tag/v1.6.0). - :memo: Some typos in the documentation have been fixed. ## v2.0.10 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.10/json.hpp) (409 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.10/json.hpp.asc) (1 KB) - Release date: 2017-01-02 - SHA-256: ec27d4e74e9ce0f78066389a70724afd07f10761009322dc020656704ad5296d ### Summary This release fixes several security-relevant bugs in the MessagePack and CBOR parsers. The fixes are backwards compatible. ### Changes - :bug: Fixed a lot of **bugs in the CBOR and MesssagePack parsers**. These bugs occurred if invalid input was parsed and then could lead in buffer overflows. These bugs were found with Google's [OSS-Fuzz](https://github.com/google/oss-fuzz), see #405, #407, #408, #409, #411, and #412 for more information. - :construction_worker: We now also use the **[Doozer](https://doozer.io) continuous integration platform**. - :construction_worker: The complete test suite is now also run with **Clang's address sanitizer and undefined-behavior sanitizer**. - :white_check_mark: Overworked **fuzz testing**; CBOR and MessagePack implementations are now fuzz-tested. Furthermore, all fuzz tests now include a round trip which ensures created output can again be properly parsed and yields the same JSON value. - :memo: Clarified documentation of `find()` function to always return `end()` when called on non-object value types. - :hammer: Moved thirdparty test code to `test/thirdparty` directory. ## v2.0.9 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.9/json.hpp) (406 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.9/json.hpp.asc) (1 KB) - Release date: 2016-12-16 - SHA-256: fbf3396f13e187d6c214c297bddc742d918ea9b55e10bfb3d9f458b9bfdc22e5 ### Summary This release implements with **[CBOR](http://cbor.io)** and **[MessagePack](http://msgpack.org)** two **binary serialization/deserialization formats**. It further contains some small fixes and improvements. The fixes are backwards compatible. ![cbor](https://cloud.githubusercontent.com/assets/159488/22399181/d4d60d32-e597-11e6-8dcb-825abcf9ac2a.png) ### Changes - :sparkles: The library can now read and write the binary formats **[CBOR](http://cbor.io)** (Concise Binary Object Representation) and **[MessagePack](http://msgpack.org)**. Both formats are aimed to produce a very compact representation of JSON which can be parsed very efficiently. See the [README file](https://github.com/nlohmann/json#binary-formats-cbor-and-messagepack) for more information and examples. - :fire: simplified the iteration implementation allowing to remove dozens of lines of code - :bug: fixed an [integer overflow error](https://github.com/nlohmann/json/issues/389) detected by [Google's OSS-Fuzz](https://github.com/google/oss-fuzz) - :bug: suppressed documentation warnings inside the library to facilitate compilation with `-Wdocumentation` - :bug: fixed an overflow detection error in the number parser - :memo: updated [contribution guidelines](https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md) to a list of frequentely asked features that will most likely be never added to the library - :memo: added a **table of contents** to the [README file](https://github.com/nlohmann/json/blob/develop/README.md) to add some structure - :memo: mentioned the many [examples](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples) and the [documentation](https://nlohmann.github.io/json/) in the [README file]() - :hammer: split [unit tests](https://github.com/nlohmann/json/tree/develop/tests/src) into individual independent binaries to speed up compilation and testing - :white_check_mark: the test suite now contains **11201886** tests ## v2.0.8 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.8/json.hpp) (360 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.8/json.hpp.asc) (1 KB) - Release date: 2016-12-02 - SHA-256: b70db0ad34f8e0e61dc3f0cbab88099336c9674c193d8a3439d93d6aca2d7120 ### Summary This release combines a lot of small fixes and improvements. The fixes are backwards compatible. ### Changes - :bug: fixed a bug that froze the parser if a passed file was not found (now, `std::invalid_argument` is thrown) - :bug: fixed a bug that lead to an error of a file at EOF was parsed again (now, `std::invalid_argument` is thrown) - :sparkles: the well known functions [`emplace`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_a602f275f0359ab181221384989810604.html#a602f275f0359ab181221384989810604) and [`emplace_back`](http://nlohmann.github.io/json/doxygen/classnlohmann_1_1basic__json_af8a435033327d9237da414afc1cce513.html#af8a435033327d9237da414afc1cce513) have been added to JSON values and work as expected - :zap: improved the performance of the serialization (`dump` function) - :zap: improved the performance of the deserialization (parser) - :construction_worker: some continuous integration images at [Travis](https://travis-ci.org/nlohmann/json) were added and retired; see [here](https://github.com/nlohmann/json#supported-compilers) for the current continuous integration setup - :construction_worker: the [Coverity scan](https://scan.coverity.com/projects/nlohmann-json) works again - :chart_with_upwards_trend: the benchmarking code has been improved to produce more stable results - :memo: the [README](https://github.com/nlohmann/json/blob/develop/README.md) file has been extended and includes more frequently asked examples - :white_check_mark: the test suite now contains 8905518 tests - :arrow_up: updated [Catch](https://github.com/philsquared/Catch) to version 1.5.8 ## v2.0.7 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.7/json.hpp) (355 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.7/json.hpp.asc) (1 KB) - Release date: 2016-11-02 - SHA-256: 5545c323670f8165bae90b9dc6078825e86ec310d96cc4e5b47233ea43715bbf ### Summary This release fixes a few bugs in the JSON parser found in the [Parsing JSON is a Minefield 💣](https://seriot.ch/projects/parsing_json.html) article. The fixes are backwards compatible. ### Changes - The article [Parsing JSON is a Minefield 💣](https://seriot.ch/projects/parsing_json.html) discusses a lot of pitfalls of the JSON specification. When investigating the published test cases, a few bugs in the library were found and fixed: - Files with less than 5 bytes can now be parsed without error. - The library now properly rejects any file encoding other than UTF-8. Furthermore, incorrect surrogate pairs are properly detected and rejected. - The library now accepts all but one "yes" test (y_string_utf16.json): UTF-16 is not supported. - The library rejects all but one "no" test (n_number_then_00.json): Null bytes are treated as end of file instead of an error. This allows to parse input from null-terminated strings. - The string length passed to a user-defined string literal is now exploited to choose a more efficient constructor. - A few grammar mistakes in the README file have been fixed. ## v2.0.6 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.6/json.hpp) (349 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.6/json.hpp.asc) (1 KB) - Release date: 2016-10-15 - SHA256: 459cc93d5e2f503e50c6d5876eb86bfea7daf405f5a567c5a2c9abc2383756ae ### Summary This release fixes the semantics of `operator[]` for JSON Pointers (see below). This fix is backwards compatible. ### Changes - **`operator[]` for JSON Pointers** now behaves like the other versions of `operator[]` and transforms `null` values into objects or arrays if required. This allows to created nested structures like `j["/foo/bar/2"] = 17` (yielding `{"foo": "bar": [null, null, 17]}`) without problems. - overworked a helper SFINAE function - fixed some documentation issues - fixed the CMake files to allow to run the test suite outside the main project directory - restored test coverage to 100%. ## v2.0.5 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.5/json.hpp) (347 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.5/json.hpp.asc) (1 KB) - Release date: 2016-09-14 - SHA-256: 8b7565263a44e2b7d3b89808bc73d2d639037ff0c1f379e3d56dbd77e00b98d9 ### Summary This release fixes a regression bug in the stream parser (function `parse()` and the `<<`/`>>` operators). This fix is backwards compatible. ### Changes - **Bug fix**: The end of a file stream was not detected properly which led to parse errors. This bug should have been fixed with 2.0.4, but there was still a flaw in the code. ## v2.0.4 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.4/json.hpp) (347 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.4/json.hpp.asc) (1 KB) - Release date: 2016-09-11 - SHA-256: 632ceec4c25c4e2153f71470d3a2b992c8355f6d8b4d627d05dd16095cd3aeda ### Summary This release fixes a bug in the stream parser (function `parse()` and the `<<`/`>>` operators). This fix is backwards compatible. ### Changes - **Bug fix**: The end of a file stream was not detected properly which led to parse errors. - Fixed a compiler warning about an unused variable. ## v2.0.3 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.3/json.hpp) (347 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.3/json.hpp.asc) (1 KB) - Release date: 2016-08-31 - SHA-256: 535b73efe5546fde9e763c14aeadfc7b58183c0b3cd43c29741025aba6cf6bd3 ### Summary This release combines a lot of small fixes and improvements. The release is backwards compatible. ### Changes - The **parser/deserialization functions have been generalized** to process any contiguous sequence of 1-byte elements (e.g., `char`, `unsigned char`, `uint8_t`). This includes all kind of string representations (string literals, char arrays, `std::string`, `const char*`), contiguous containers (C-style arrays, `std::vector`, `std::array`, `std::valarray`, `std::initializer_list`). User-defined containers providing random-access iterator access via `std::begin` and `std::end` can be used as well. See the documentation ([1](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3), [2](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a90f05d55d9d0702c075cd281fd0d85ae.html#a90f05d55d9d0702c075cd281fd0d85ae), [3](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_aeffd70f622f8f2a51fd3d95af64b63a7.html#aeffd70f622f8f2a51fd3d95af64b63a7), [4](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_aa8dca2e91a6301c36890f844e64f0023.html#aa8dca2e91a6301c36890f844e64f0023)) for more information. Note that contiguous storage cannot be checked at compile time; if any of the parse functions are called with a noncompliant container, the behavior is undefined and will most likely yield segmentation violation. The preconditions are enforced by an assertion unless the library is compiled with preprocessor symbol `NDEBUG`. - As a general remark on **assertions**: The library uses assertions to preclude undefined behavior. A [prominent example](https://github.com/nlohmann/json/issues/289) for this is the `operator[]` for const JSON objects. The behavior of this const version of the operator is undefined if the given key does not exist in the JSON object, because unlike the non-const version, it cannot add a `null` value at the given key. Assertions can be switched of by defining the preprocessor symbol `NDEBUG`. See the [documentation of `assert`](http://en.cppreference.com/w/cpp/error/assert) for more information. - In the course of cleaning up the parser/deserialization functions, the constructor [`basic_json(std::istream&, const parser_callback_t)`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a32350263eb105764844c5a85e156a255.html#a32350263eb105764844c5a85e156a255) has been **deprecated** and will be deleted with the next major release 3.0.0 to unify the interface of the library. Deserialization will be done by stream operators or by calling one of the `parse` functions. That is, calls like `json j(i);` for an input stream `i` need to be replaced by `json j = json::parse(i);`. Compilers will produce a deprecation warning if client code uses this function. - Minor improvements: - Improved the performance of the serialization by avoiding the re-creation of a locale object. - Fixed two MSVC warnings. Compiling the test suite with `/Wall` now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996). - Some project internals: - The project has qualified for the [Core Infrastructure Initiative Best Practices Badge](https://bestpractices.coreinfrastructure.org/projects/289). While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the [contribution guidelines document](https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md) how to communicate security issues privately. - The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute `make check`. - The continuous integration with [Travis](https://travis-ci.org/nlohmann/json) was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations. - An 11-day run of [American fuzzy lop](http://lcamtuf.coredump.cx/afl/) checked 962 million inputs on the parser and found no issue. ## v2.0.2 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.2/json.hpp) (338 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.2/json.hpp.asc) (1 KB) - Release date: 2016-07-31 - SHA-256: 8e97b7965b4594b00998d6704465412360e1a0ed927badb51ded8b82291a8f3d ### Summary This release combines a lot of small fixes and improvements. The release is backwards compatible. ### Changes - The **parser** has been overworked, and a lot of small issues have been fixed: - Improved parser performance by avoiding recursion and using move semantics for the return value. - Unescaped control characters `\x10`-`\x1f` are not accepted any more. - Fixed a bug in the parser when reading from an input stream. - Improved test case coverage for UTF-8 parsing: now, all valid Unicode code points are tested both escaped and unescaped. - The precision of output streams is now preserved by the parser. - Started to check the **code correctness** by proving termination of important loops. Furthermore, individual assertions have been replaced by a more systematic function which checks the class invariants. Note that assertions should be switched off in production by defining the preprocessor macro `NDEBUG`, see the [documentation of `assert`](http://en.cppreference.com/w/cpp/error/assert). - A lot of **code cleanup**: removed unused headers, fixed some compiler warnings, and fixed a build error for Windows-based Clang builds. - Added some compile-time checks: - Unsupported compilers are rejected during compilation with an `#error` command. - Static assertion prohibits code with incompatible pointer types used in `get_ptr()`. - Improved the [documentation](https://nlohmann.github.io/json/), and adjusted the documentation script to choose the correct version of `sed`. - Replaced a lot of "raw loops" by STL functions like `std::all_of`, `std::for_each`, or `std::accumulate`. This facilitates reasoning about termination of loops and sometimes allowed to simplify functions to a single return statement. - Implemented a `value()` function for JSON pointers (similar to `at` function). - The Homebrew formula (see [Integration](https://github.com/nlohmann/json#integration)) is now tested for all Xcode builds (6.1 - 8.x) with Travis. - Avoided output to `std::cout` in the test cases. ## v2.0.1 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.1/json.hpp) (321 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.1/json.hpp.asc) (1 KB) - Release date: 2016-06-28 - SHA-256: ef550fcd7df572555bf068e9ec4e9d3b9e4cdd441cecb0dcea9ea7fd313f72dd ### Summary This release fixes a performance regression in the JSON serialization (function `dump()`). This fix is backwards compatible. ### Changes - The locale of the output stream (or the internal string stream if a JSON value is serialized to a string) is now adjusted once for the whole serialization instead of for each floating-point number. - The locale of an output stream is now correctly reset to the previous value by the JSON library. ## v2.0.0 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v2.0.0/json.hpp) (321 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v2.0.0/json.hpp.asc) (1 KB) - Release date: 2016-06-24 - SHA-256: ac9e1fb25c2ac9ca5fc501fcd2fe3281fe04f07018a1b48820e7b1b11491bb6c ### Summary This release adds several features such as JSON Pointers, JSON Patch, or support for 64 bit unsigned integers. Furthermore, several (subtle) bugs have been fixed. As `noexcept` and `constexpr` specifier have been added to several functions, the public API has effectively been changed in a (potential) non-backwards compatible manner. As we adhere to [Semantic Versioning](http://semver.org), this calls for a new major version, so say hello to 2️⃣.0️⃣.0️⃣. ### Changes - 🔟 A JSON value now uses `uint64_t` (default value for template parameter `NumberUnsignedType`) as data type for **unsigned integer** values. This type is used automatically when an unsigned number is parsed. Furthermore, constructors, conversion operators and an `is_number_unsigned()` test have been added. - 👉 **JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) support: A JSON Pointer is a string (similar to an XPath expression) to address a value inside a structured JSON value. JSON Pointers can be used in `at()` and `operator[]` functions. Furthermore, JSON values can be “flattened” to key/value pairs using `flatten()` where each key is a JSON Pointer. The original value can be restored by “unflattening” the flattened value using `unflatten()`. - 🏥 **JSON Patch** ([RFC 6902](https://tools.ietf.org/html/rfc6902)) support. A JSON Patch is a JSON value that describes the required edit operations (add, change, remove, …) to transform a JSON value into another one. A JSON Patch can be created with function `diff(const basic_json&)` and applied with `patch(const basic_json&)`. Note the created patches use a rather primitive algorithm so far and leave room for improvement. - 🇪🇺 The code is now **locale-independent**: Floating-point numbers are always serialized with a period (`.`) as decimal separator and ignores different settings from the locale. - 🍺 **Homebrew** support: Install the library with `brew tap nlohmann/json && brew install nlohmann_json`. - Added constructor to create a JSON value by parsing a `std::istream` (e.g., `std::stringstream` or `std::ifstream`). - Added **`noexcept`** specifier to `basic_json(boolean_t)`, `basic_json(const number_integer_t)`, `basic_json(const int)`, `basic_json(const number_float_t)`, iterator functions (`begin()`, `end()`, etc.) - When parsing numbers, the sign of `0.0` (vs. `-0.0`) is preserved. - Improved MSVC 2015, Android, and MinGW support. See [README](https://github.com/nlohmann/json#supported-compilers) for more information. - Improved test coverage (added 2,225,386 tests). - Removed some misuses of `std::move`. - Fixed several compiler warnings. - Improved error messages from JSON parser. - Updated to [`re2c`](http://re2c.org) to version 0.16 to use a minimal DFAs for the lexer. - Updated test suite to use [Catch](https://github.com/philsquared/Catch) version 1.5.6. - Made type getters (`is_number`, etc.) and const value access `constexpr`. - Functions `push_back` and `operator+=` now work with key/value pairs passed as initializer list, e.g. `j_object += {"key", 1}`. - Overworked `CMakeLists.txt` to make it easier to integrate the library into other projects. ### Notes - Parser error messages are still very vague and contain no information on the error location. - The implemented `diff` function is rather primitive and does not create minimal diffs. - The name of function `iteration_wrapper` may change in the future and the function will be deprecated in the next release. - Roundtripping (i.e., parsing a JSON value from a string, serializing it, and comparing the strings) of floating-point numbers is not 100% accurate. Note that [RFC 8259](https://tools.ietf.org/html/rfc8259) defines no format to internally represent numbers and states not requirement for roundtripping. Nevertheless, benchmarks like [Native JSON Benchmark](https://github.com/miloyip/nativejson-benchmark) treat roundtripping deviations as conformance errors. ## v1.1.0 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v1.1.0/json.hpp) (257 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v1.1.0/json.hpp.asc) (1 KB) - Release date: 2016-01-24 - SHA-256: c0cf0e3017798ca6bb18e757ebc570d21a3bdac877845e2b9e9573d183ed2f05 ### Summary This release fixes several small bugs and adds functionality in a backwards-compatible manner. Compared to the [last version (1.0.0)](https://github.com/nlohmann/json/releases/tag/v1.0.0), the following changes have been made: ### Changes - _Fixed_: **Floating-point numbers** are now serialized and deserialized properly such that rountripping works in more cases. [#185, #186, #190, #191, #194] - _Added_: The code now contains **assertions** to detect undefined behavior during development. As the standard function `assert` is used, the assertions can be switched off by defining the preprocessor symbol `NDEBUG` during compilation. [#168] - _Added_: It is now possible to get a **reference** to the stored values via the newly added function `get_ref()`. [#128, #184] - _Fixed_: Access to object values via keys (**`operator[]`**) now works with all kind of string representations. [#171, #189] - _Fixed_: The code now compiles again with **Microsoft Visual Studio 2015**. [#144, #167, #188] - _Fixed_: All required headers are now included. - _Fixed_: Typos and other small issues. [#162, #166, #175, #177, #179, #180] ### Notes There are still known open issues (#178, #187) which will be fixed in version 2.0.0. However, these fixes will require a small API change and will not be entirely backwards-compatible. ## v1.0.0 !!! summary "Files" - [json.hpp](https://github.com/nlohmann/json/releases/download/v1.0.0/json.hpp) (243 KB) - [json.hpp.asc](https://github.com/nlohmann/json/releases/download/v1.0.0/json.hpp.asc) (1 KB) - Release date: 2015-12-28 - SHA-256: 767dc2fab1819d7b9e19b6e456d61e38d21ef7182606ecf01516e3f5230446de ### Summary This is the first official release. Compared to the [prerelease version 1.0.0-rc1](https://github.com/nlohmann/json/releases/tag/v1.0.0-rc1), only a few minor improvements have been made: ### Changes - _Changed_: A **UTF-8 byte order mark** is silently ignored. - _Changed_: `sprintf` is no longer used. - _Changed_: `iterator_wrapper` also works for const objects; note: the name may change! - _Changed_: **Error messages** during deserialization have been improved. - _Added_: The `parse` function now also works with type `std::istream&&`. - _Added_: Function `value(key, default_value)` returns either a copy of an object's element at the specified key or a given default value if no element with the key exists. - _Added_: Public functions are tagged with the version they were introduced. This shall allow for better **versioning** in the future. - _Added_: All public functions and types are **documented** (see http://nlohmann.github.io/json/doxygen/) including executable examples. - _Added_: Allocation of all types (in particular arrays, strings, and objects) is now exception-safe. - _Added_: They descriptions of thrown exceptions have been overworked and are part of the tests suite and documentation. json-3.12.0/docs/mkdocs/docs/home/sponsors.md000066400000000000000000000010561477615276400210730ustar00rootroot00000000000000# Sponsors You can sponsor this library at [GitHub Sponsors](https://github.com/sponsors/nlohmann). ## Priority Sponsor - [Martti Laine](https://github.com/codeclown) - [Paul Harrington](https://github.com/phrrngtn) ## Named Sponsors - [Michael Hartmann](https://github.com/reFX-Mike) - [Stefan Hagen](https://github.com/sthagen) - [Steve Sperandeo](https://github.com/homer6) - [Robert Jefe Lindstädt](https://github.com/eljefedelrodeodeljefe) - [Steve Wagner](https://github.com/ciroque) - [Lion Yang](https://github.com/LionNatsu) Thanks everyone! json-3.12.0/docs/mkdocs/docs/images/000077500000000000000000000000001477615276400171765ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/images/callback_events.png000066400000000000000000001317271477615276400230370ustar00rootroot00000000000000PNG  IHDRсgAMA a cHRMz&u0`:pQ< pHYs  YiTXtXML:com.adobe.xmp 1 L'Y@IDATx]U>ou "bkڟPAQ&"أ>c7jb5DXQIX)Rò,_ͽ-,!7̙sg;WO< x$I'O< x$I'! ʺE5M`ڝm抗/;$H@)ta[͎淭$pWV]$ue4uewѮd{nO;6W7-rh~ے/.0O$Cp7H{B Z.x~;t;9a1`?ǭ8vA V~N3J^:P;#pD v21` 0 j Nc".LNggiu%}كguIUw`qmhǭ8vmD nn{p.ZXuRvqJ ӁGIC x/| m0=FcQ@OYiҝ 4 4Np|1.M46m_FCӃ] 躡MJv]?hPFY !lxa_#59h#<ٮֿ:&ۃ[)WRx45?ډlgps/M _W6ap*x3>YlɃ8a9,8+`wIN֒Qvv۱[~ nl2u;Ur1]hֹ3 v5!(p.ȕiiSYǾtlrPG;N|ya9㓃|۽r~۹\1Az] 8$܌w 'w9~44o<8s x/4 G5lHș; 7 | t ? 7e;xI=`99O;Ω/y~sJ@ׅQ<]G@*Y3x 4 \; n`i<w]PI_Ppgge`;x9?x _$ґ@go Cޣo]=-P)mKmȭɊ;=Jnj;\\$ȇ̊0H X)Xء6s5@V0++4>8 tC2 6g ÁO+@vZGȆG7@vT cx;bB  NX$hlZ>Kw/~%uvz! j /n,+YO=`O` ȁ~@v`ä eA |a;@qWlr<x:l as)"V B9FŰP.=a^?(Aǧ}.R!Q2ɃsS $p$t~J`4tOwTЬ\<J #>O'02ih~l`l,l4p PMxyJ@s*O:cدwT\a`9p?*X'8 |ļ>t~p2P4:@&]QAor,uLqdqlW@v,7ys#WoG?o)6?rNE:depk|8(|&Mp֊- _ȂpNpO cW y2N@Bm3rxCA!@+>4 \+L@2IKQ4tR2<RH@lG?Y9!|Hzap4vv|N]'鳳xqY#v|ʟ !Y94+H9!hjx 9adx+6I̡s+Ǣ3pA <iو82!<|1g $0"b@V^]aHQ*πRa:kɺEAA X &TF&n:4 HެlS}븿%$T3;+:8'I `:Omj y Ip>2r莀H?>4>P'^;p=E>"=_h52#Hˊ!X>Z@A̬wN:p` `Qv·O@89`p zXE)]l7 7ԸTΐvŶx/I2^ $un h2 /Xj  $芤+"ßqt8\O+S&OD g' (ȑ;NCǛ@晕z YƗzu/񙏋Џ< He]*]XW>R1-}|x ;f }E@v W0P%Џ J|(@E $ ] w7]W!L2;;.@ '0Iϸ9!t Pwb` L5#ƀwE@~¦de~Z2ÀvMG'@V> :<67"qN:wvLG,M G9=̯T:V݁Zk#mUce;[r2,?G;uoo uLyΠ y@]faN^ZÚ]`H6+0ESےN~:.Ls_Zp~r jΦ4igng k:9óO~l+ҪI'O d%*y^;̯ <~JΒϤ'jjH;I4Cw_{R5"FĻ'OA du?gp_w8Š?HşaJaڒ@wrѽx3SI'GٝOΡL_4u,?nLS +mJ- 6+V#Sd@kޞI'O dwZc̈́Y@ԐEƦɱXy` xR(/ZL7GHl'O= dw\M@UЭgYX,|4eMYZGE**q<Ó'OY+gzx YO#XȜr{vO< xnH@w:7Or0<Hi!تj}<ͰlLҷ9aU%mQ='O;GYH9Iut'@%ீ<z:P󭲩+t^PYdC< Zy԰X^Vi='OߦhNJW ܊bY(}|t(T +NG^~VaHف2m-2Ɏ aT嘭F"ݰkcB7||A3ǂQߺhQWs+pxz'O߶t[T˵lH##ѕ,"2΃ˆXP҈ǎP1FyJuPۃVay&bH:-ܞ! $7=Eh4U>}|!+PgCIYiI,'rf~gUD*T[TBQi\U3?`źsVŜ0{D@Ӵ*6kgޝuun`Ê,eV+>nG.:E_?y=.;*\i4J_?&}pH':_'ش&sѴnN_}ۢA݁۰R.=GE3t#u?lqn6&oߜgwf\Krf-O$7^zU\F]͙U{ѭK K$/lJ2ȏ.:"r"~B-[i_4J WZr)TK՚FΨX۴bmh%HjV:TTk_-9tChUTtMeeYLY -LPNDELJjގ% N9'D&3pI dzz$mK vbt5s.{(k[^6(Z׿?Ug)F] V>#5 91@q3J3i?c%_}rM҆æ[Z ШQ5u͸+n\Xg* NxeD&-{˕e{{ld(WNׁ_M|coq)yVqZ:(xsV<龛 1`p·~Pҽ-ɐ;~dGi:VXs^QG Nl;=LO} P{5e=?ɼ΁`(C߾<5q>q=V,54ėY\?r_Xs:q.yqU0SSpPא~8$$~TPQ.g g*4mMsS Lf5u-TL>::Xt<~gqwArE{畉!_aL*X-iolf+so?kK'2cɗR ϼg.K bOluf\BAê=sxᝦm,tnXSOM(JV~xkAyw>2nz7~\o4>H(O~|wzqgF5LKAs9VD@қg.EFU Y+G9xH4x-qHOms;'eƣg4ESȆp, ۋ}<_u>jɿN_R}Iqr`I_u"m]W`>{˜#kGxƗJc)NuK1h4|הiB_q3ofT&5..*jaSjZ \S7{k~C޾+.\䃢|W:%6ŭŦ?pxSc|x{єt.?bUO qYQ?cpĂ~IIcyӋRq  M39ތJx dMӔRHJO4SUf(8*K 'xC~?Pu!LyuWT8eȅa20j 04R*-nPֶ~;`&D \е˨Ӗ3/aJHRw]p\S#߀K':u|2<#ۛIdžy0:q*NҾWV4Ω(c3YZɓP=s쉅u>z_#╌|[( ^?_W+fO3A{\16)`zI"#d73PmFSR* ʕߜ>8Zv:Y}Ï egԆژ b&vZR8e)Lh%6 zB7j֛yfӏjbŨ;[h0ë\ݴt0#ÃJ9K ʲ l.Uy 6TuGyJ'uF+ճz6~6:SpV[´b庿y}c.՛G=tG,Mi:q2{غwm0xI*)u.XO,H R --B[#rOcDĕxVNwPHiDZ웓(H2l)+GW.6{.-!~a~מіGj6o~?ƕ)f>n~LRwņ;"=J: ݷJp݇j^P0,k֮/ єR2 >Bf2?c+i(tB1Jdx%xt6+We$M^~@uĐdT;{@e2Ka GSiPͷWwNqdPp}jİ/" y7.Z>O*4u6GagdW7O0ߏ4r28tƝZuwM ֲ_)K>fXF)8-< Yaaݭ*+YQTdZo6[ѭ;Ɓlْ.Pf \FrgZfaqxc)~.9E,SV?ⓅC-А.i)ik˥{{ɬfpa`Ɯc{}TPgSēhqkOA/#bw`Fw\)Xir/[0TYm-ƺx/u׍ #{'-97!'S'8BIKP%5FIUSX.Ӹo9lܮٴ,-ş.1 {6ev|VqZdH4uQF3~pGyEI*iL11SS$]/A4uHjknMN/Gr˴R0\g`Ę(Vfs}P'?C؟X1PJYn2FT#Iɑghit|I  !=UU&;Q016z~ySȍX9PvI+о A~G3C4X~}o,C `Ӳ4Aj`8hB3R1*L0lg* !^nʇǩӸ t?wag|{!5?>B]k|(|:ӽQ"/.tׂsqhi7tZmx<y<Ega?pÈKqH[[IkcU3WP'݉4ޞpA9zV}P63$| q.(FR\Q۴vhC`[1k : spJgj9aHLH!G KOGC |4-ð|ǔ;I#l, p⫲UCuRaܙm0 g~[Å?FLNe̛֦F - =8q%j]}JKT^O*Y_g+ Z<22UVφfaJvsWHQ{,V>5)h~LQ{̯J%"ƝzNv:ji71Д؟A?KLӁ_-!KP{?s6V,}|̤1<5 .4Y?XbkF7)e__4N'}fC߹:Э9c^u Md]U5dUì.}ta8qXQuK/MX)ѓg0rhnj\{<*غI^gDov~ դMߦ1L?e3daT;^DBL)4RTH,B ;|c&quZSD04KD\KG :ᰧӧ tvO9GnEF5/*1;9=H_y\AbIc'5k11l&ЩGL ӫ~8xSdϊqBa}M^iUEǀN/ӳl區G d͜~n#xZԚte{$v2ަ6os`p7'!i^<&4biD^G>c $}K 'DIc _}$5[I'^W h ])uLw6.g_Qޔi%%jfgb8凚9Mg y Kdup-8/y̯a=}Ǎڦ74M:XvíqRȦBYSmtOVCoj$P䟊y+[6L%,&N_Y2#Sj̭ 9f@9?'w/ ' |̕Ceߏʕ1~7&\ȠG}yNwܼr>t[îpKrU@TC$<UCdM?MºYim8$0L(Sք-M,Lwn]}7`/#6rN_"ݩ=DJbhMY`9jW %Mou9棁r~/e{ rPa{Q3H>,ˌ?eRT|WƁ ۜ]'lwfY*Uxn9.Odvih-(Lxa 9&bc ²:&|_k<ǮL}|OMJ~9|Xhȑ,؆2yVONʅ97chNPp J&-#\S^°{\Y /p%䩥\rvĦccjɴ4.66GB7OYG^|J0e+WG8En*07 (:$dtv'X iq yLBb7T= CgΆRkSSRnrr?50lrh"%? 6|brފrP b39dl5naI'0vOIҌB&*~ ?#3F~3rv#J#I5\\lȪhXb7bڃJo@rQVSxmBڔp%d}$+dr;5Q> 2XeY2X>B{ 5yR¡EV)"r2⪃T9!nZ67(ONyMyT.NOnj#߁(O||uf1䵰 ʀq2ҳyȝ'dT~ @;81!/mZU/>N9qP6r cNSd𠔔+s(dPAP6 Ib)FɉLSe SSА*'<꩟;y>ސ91}ϵ-%@vA"hLfC^_b;$9V,{ǧX[@f|)e8&w7ӡ+d˘} yx^!CX:DuajO _!-)so%0fSpBfÜmƽ=wńȉ<.>o,:ϯ}!'xk(3j1^/wn)wt愜KxO䙣T1yPCykSpUGH_<r ^UbKGcyT `?X5CHSrzS>fJotvG'P W-dƊPƴ܄zFАSrS'KvsPku쩎/<iqU :'ɯ)O^neHcEWiݨ4NA9* l)fg𵎀AGIG|#jO!0fw=4%00<2lt .hGkmp†,`0aj 9(*=̄{rNVjhw&aAJ~ ̣%>/G*MhAP$Ʋ&Y,3x`-U@#BVq&L_` :59:J5DLn}rSŞ@g|*',mX:PL6A61 rk2#|#˫tsݚvN4m[ǗnXH{\Ζ^1L)s;$ : 0MJ'])e@?mf<7:ڃpX-t0zmޮF.rjoKS\ϔ`LqrzY/|DW"Pk8pyOק%ɔI֖riI?߁TD3VujX@Vl ee~73k9*(? `eCPKl0c5##D>_(%݉L{oGZ' (9Z&UX&rD%Ef&zfĝ CS b|_=QڿMEo" mF}v[-+6R\JSrZhtk^VfOսaqu"ZhYNUh]I}NiN^_.MW)اZc#Qo.A g~ M=ʤ i2eHAHn}lR腛U-hI E x˛Edt=ޚQ'`bJd08P್@ J֒qRZȀ_%':%L$N-8Dms#j֏}5.%sGwu (ڨRn[_0w^d'D1A]gtg6s݉nL#~}Ptq__V&;\RϾmPdF([ x9L ~8H K89 ֵkS(j0 i)?xD(!ܳ$!H(.q-iZvN[?MY\)GykVg( _#:i0͌=+U\y 30?qKCprm_ɟp0(rݦ<%!Ř192X%V33le1:SFr Nh1Lܸ-#wfe !w&%{?-Iu3Т$jaլt[^ Qۍ/SWZ]BZd1q9:v6Tw_f  cy[KR柝YSyVrMi#䦬ںN]Ep2Yo\nEhp4 \*-)>tDzo=jpغ˵Jtq00y W«q*]qľGu/g@ul\Φ{3'}c~wabUf!b'5toEK1O1|kAWbƳ&N o,+dM,thpoUI6]aj΄,(cf/d#ȄDleXmt(.EE#y#}w.J.M;&`A&;χ.Ĉ  T9eg蜱Vu^rLLp)/>xJ)oNӒM$1l9uӻ%ysdF92Sq۾O/TE{"-liFyX vkӡHK1pG:}u uGd~9s |TG,{\\X93rP0"u̳sMn֐p _#qܥd]F?Əo2kG_4Wԯ:yߟ1ʀ&OZ}Lv.}zt ޼:Oļ/tgTpqyEz_0"ϪJZ:^[?<@Q 'CT#Mq5AJZzAqǮOGyilE梃<ڷ @9[ L%$KCIt9> r3Purə#g72T j^ugJPzRu N% 8* j("M< A'O.[]: h3 zKA#8{,93v9g];m'{9>fGTa<\xΎ@)XG1m<[5?M {+n^ޞnFqiscZk [ΓDM7-\vw\Mw۳inIn-4¥&! ljk4iu}p1 .>ao`6Ц^o8Mv#ׯ~^XrӅoGW\ѻS*X%<$P 5xJqힲ'ٰ#L#] ,HOg`S]|30RKpFוgrwj4mat['^̮ʾeLWw2˵3Nmn*Nn6(x.h94lnPx7OØ4?|ǸAz$&kqpp٧GݹjOztl2&7,Z/oȇؑ3ż㝪F"JnNNV*sy1wfepm5x|@{N!V-33|t Ơ7I : D\G7tΎXڐFW|~Q= `.t#c<ʪ^9_p/Fv|Φp^WtSwENϡsz#.ǫOf߫R{u>ˌhRÓ?ı`WHS`Q-IƩ7qȤ}). 2tNL .D,\|@ ɓ{l?Ake./YU?|לq:Lq~R+ ڬ |%{= ,ڕؼ`M7V[m~?=vc~S si'R=9|3NʲpUď?LqӽdJצMYO]wg y?JZ&|֥2Ȇ]Oꢍ/EOƯtOŪwZaI>bP 7(*|RR)|oع .(%.}%q~ӡ /Xq2<"o7U]ob84~S§O8^/SLH/S# :;-\"-oOOGgDq_ kR/Y? t|HSh؟+,뼱VyO@&ɔe3:H7<ꁙ5_M@S-\]ϭ֊ᖵpr7LVQ^G@1t="sէno"9׮CS5n>UkD=Yeee]QEg[.ꪫ8:7 Z7Ħn3 m7"w}-b@/ LF0Sd H_='F)F3n2 DE=(L˵+:K-s:(ծKqLJn-nA?yD^!3ĽBy"~>bF@* ʱ^'!^Xħ7p/78HW~ 픐 O þgId%24~:I㢼w].yޗdi]JK~/s2k >LJX*%SVpqgfNry8 2}k@)D`CQܵ^qq7ajɌjS|y]/]Բ4yJ@@Eu-/UQ FED=-%ag HDΒ;t::HfOx80U >=hca,_vxJ#VKR_mw7_nP:mI6( /|N~b='a:ߏiO*zr.-ep7)ӊUI1>(p/_c]E k|kSL\$,ENJڶ{ { }g\Hw 3JwREl5}ZIOLo1.M{QO5H{.6o\7XFGW/{_d9 qDGrn؟t6 ^ьD)pyĒiS\aǁp@MIhט+5@yjjqo`ɯΒ˞8:H5۾z+$ĸ txO9oӫN= Z.jP=ô=|??Cu+X"K7@G2A-5Boר|c}7Gfur35{B/?;nW^"PS+HPUJ^"owɒ)oW똥B&2z,Z7 |gn(6GQKb2)qVpy&*GMih㳍!< y m8WJ_`Z9y eb8\`7rqe P?"%|@YPg[HVdEi,. =oVBxFr?utpxuui(~Ǹl*]V_$:6]A`gub?f+&٫ ǵO(r_)ݒrY0!UL@t9tȗa9BOqͽjd퍥|@_:?<ʲbMFQT_'GUd8W= %zJX_^(Lt?-qP~ :063o>e\M!6F P+d(-7ފ7W1smTl2MR2k[GH`:s;s`&tvJ2:GARHU^ Jd=JLרx QQB4(R^FK_~ybkя#ü%pJ?T̨[L``jPd@"jw{$~y0deVGKSP<͖aRjī`4Md+Uwhh<8&;cN ]713-J )WYDsfzf.zx;Hٷ5,ZlkƷ9Jk+"ܤ4[i+P̣VVXkM)P6ro>y%Pac"^@~0l u"`R,H9VxDUG/w(̖ax9XxgdURe_(}n5[d:[Ɋ7 7LWX7jꐩnv̔EE≂ӡ4O曖M闼(ؒttгc`zq-+2Yi3-itɚfcG?떜~-FůR^tlkI#FmVnv˱k Y80 # =*QbN .>c閒ۚT'ZNV'<ںyj#-~: 6thSkނ#G` z0L #QPF4`Lzt>d39z5vxڃ4VSqsp  kI ?dJ)Jij/yQ!* s"(2yR uh~3Ցr& ByՉS7)^ lSu/ Y; 1-l4~ӗ1꼾KNKc.ـ΃o.ul !̎{Od9GC:OoaTǶt,)<6gΜd`;1JsyG"㻭\)eZN^rƴ|W&9"WrFPQp[ OD|pj4b*|B@P07M6z0# Ap |&'8A[Lۡۢv~h>j@||tEXCa Lp|:-&@E){vE%201G]nXG4hpr"XV-+W}2$8VkCrQ౼u:Eg9kq" lmyiJ';-q3Q`M*Y.zOηvsmRBh/c1{=p$ݫZЩ\PѴ _iM\~ֈ%0{|̾ /檆:Ì ㋍ "@@`}ÅreCUYψZ1[s;zt6撷iHRGleVG/0! Wq;냪ʬpxFGI&\qS!;S'[wŒd|/׫x+Fq 0\nɟjJFj?x*(Ri%8`_y14n#O iGe e:>mX7-xG8bc /6%fǘyrg:/\֭Ojcl,pQ,C-FiDZo46pLY>PG#9aO*t&XxYgo]mud8.@ 있$k>N' po?>GxN/Mќ>X{8$^K(u*d: o뫑ݶr}c'=RـȜ)xmKy&iSI5VOY?kYYUOV[R)?cq f}yZR(@i5U=q3a%ŀzg8<驧ɠ3݉9+z*Iª. =zzwfv]Uқ^*/֞Y,-ъ蜰S @>@;XMh:u8'nHP`:]Y;SXPF܈~F+CEy1nANKNZ%t~bB5l#L:ڄwJ8a?*I; K!U=b3-} 1Sa9pĽ2qCн  ?obp^'8$Ҋi,uE~%KݠŒk' gm@WITx'#al+XpŻQ8b`lxhklX&hx$D; B`bڏA)._D[ Z =#WYLkmlUVľIK_P wi`oOuO{V@7n>]? f} HMUZB.Df+1 DxYX3wb"TH@~&#1qƑ:z\` I̴`TT [dRO\[֥NDBVo1t0ӐGiH5@HCPG,nAa [FX4/TⱳH'RLpXM dACG}Wr D ̍'-=5P`FJKt9}Ǟ ʛ_ؗv8CB5< l.RY8.=Rܳs#-8"8<c$1lt Ym;!0 Њ@aq!KȮ $ڧ(Ͱ+zPwcz١r>rlb|߭gYh rwɼ VMYZz:Px] ߜM&`[ZJxF0>qffADDS䚊;\xn1d=c۹7ƀp, `#?_&N$jI"<>,<*坘[9ሮ0B2q: {2ׂs7MD!]pޟYnͦC?U6f/SMTh#^8 98NI!G?{ Qn ~:-m8t N\KO󹗷zCH)ؙi)-V&\"OF23?qm!10u7޶_I>i*+EWe=rOt&0ғ]i}TԁD,9dUL#?acmfψU1b 98 )bֳ]SwO'#Lj(?Aa3|F<vk'/\x.;3Ev鮆>Yl ͪ@`'za'kh=x]*# 6A'-83>Fg"G-\(j9bZ `">=_ \r.jlED6y \ȍ)/E-x݌1zSTmn9|1l_=`6R.pJ d' %P+ko6VaW>kԽ]WfJ0c) YEٮQa,4 ZEF idF6m8N!!&=ߛnqB={}Hep"|Vɞfa lGHt%[K\͟Vzސ&BH=K@tUlѽr&LfOb:b9y"b}. J۬QL,br Dhy0̘F3 Kr/n%vP#JlF"10غ\I>Rn$OǦt|r}ȉĨa˰?? }Kmuyoph TPB`ƉX;,Aq4hecD>n>$#Ɖ<}KsZՠ x$,۴{hXci‰U,R ":?$GbZ2LNZgJđL PT(}BOH}rvzJH?;~Ȋ"CoSAo=O)Qi f=L➁-/ӗC%t 6ڢFG-ޠdFc\'uzwj _^=7P1UX&u~I lo+" nR_ok0H2͵od(0F͵Yp`nxv2TO'8m>".Z> @'qŀcŰ# ]6aV DQcbW!3U2lؒ?*s„Y@DД6,߬9̰ 1j܈1=#qܸr92SaX![>.g8qHčS9ƥðR֕Gen3Z1-]#MGGaЧbyHcbݘQF8.D:m^z%Ԯ/+Yd ץEzr]3'Wm*{c|kLֿAy$IӯqOIetܟ1G-Cymr}rZj˾{;0v;D2ʥK=E1֊55dM.)#nV&QP]+O)c#/RI0z%|VV|$X] $nsC|TqTm +njH[QVZ1,7a]UzbeCfC -nꎓYP~ ʶew0ߑEH& Us7n~E G@{N81`ɯɍljU~S¾M:\ZAQJD,N`:t_m @=/+W_Ct-lFܟl]];)>j{rg3dQ;|yծ^pKa;M^m ºlޢy^Ktsٕrla8"Ł#,Y2~'~L;}7xtA]'X01;He>-BeXek[mFuAUK/{i 9EiHޱbaa"bѢnECFQN +;-h:_tQ׏Ž1IqAlj~0 _C?ڤ`z LqTSTU6󠪜NyϽCe1&"k,asu1GK@`,/2uIdRjYT]^S#& [ʯTෘI&H~g+@*ujT  3iMӄ3TrBKS( x ds2@U#?^X%8BC捐Yžq;MI[b$VPU6޳Q@0;WHO}8c0p)/O3vq8zC_W-ƗՖla+Lw*RЌ=bqSBC0h/]@ b>ԀS"zԔ;}X{*lNO46xWgZz6cY5P{+b$nZ ]%c%|BR>e7u\΄pob&ua( fEKr_o$3b4-$v%||P^L_v.ha}R;x0-|>o&MX U̘堝׸U6)?Z3{k6F\Mc|ފ^3f7EF fh1 u#˭08hR7;^T㍺KΚycژmnp0e=^krM?ܕ@#RP" >CNJAb/lF'bLX$F,YXhf' [كyDzOQke WlDtHyʕt=qNn"oSY]B6hGSV:t9Jl8t` N3=3 Q]g"Qv\VJ0 ԍ83VLh_ 98)9#D+ gRꂂ;e@X1txv[3s"@i&c![Ͱ186O/Fíi *[ =̮Oi bdg4J"# \00f p.E:Yd_,ΒPWf*1m2r{x)4.šh䌅e 6)zH+uЁf0D膮 ^L`D{L+;Un JVfs `"yy,sqS?f p2}̨N/⢥ոCqP"J7?!q,v^L?؁@F. pR>_y]7fWPȈ \R)4MY:i Xq5/[:'bmdW iueb+s®`@.3&ކ-7jb<*\#Dam ȩ)PfԅKambrsR~z)>lUSwKSlTr. myi0'd(Nc\X:1t A4 K\/@u xp¡B ctn19O7$.΋aͲ@ϋZߌM0Q0!9\URP ~%iHXt [C\!`!VyaDಁXT|^4JUx\lon}$ܽkM_ ?޳M&b 2՘ewB ya`b50 FjoUTu] َS[8P+j:s/ j( ,Q%@u_`q,=tU1',{{!1t_I Ҳ8иn H\Dp` +BCcs#k.EE;.+ss?gD k~(1,Ss!AŤ`|{A&_Jq|%ʧS1V.fVTf6bœKd"RH۬YݶĶm;^WՒQ4'2X.vѡIi8o06<#^pV乮X+%. &w V#k)0?A}^/sgRפFYL /s/iZnGa  3EFz5{v9J #Al8{GTWUCpYN@E4f NYjqml|!i6*4&Fw+,ƕT9~{EI:kXg׳V)C9cS\õg'd A"uuޥmLq?{+Wk3=m Nk޷aMp{XqEL>ln7 ` =%kisme[B?v={e./;}G 6#$mcߗ=C:HDQc1= -`L"{<1>ߣj\[ R7+Ls[EMNmp-B7_q9 H8Bym8rJwX]Euz"[c]̷n!`;6S\LkGr^-F+~W[#hi'i(>,7/C^l!lSOմZdPjӔWxZqmzO3z^|Sj&X Xs7hWaJok[I h'oT{pny1:GM%w#f돪yuu]71T+:`qwPJʷB1fjǒgFtD.&6{{l1IW'Re&z'ӡ?cjZg[o.÷-pG:1$xB*̞m})g_`ZˮZ*#1l:: ho׳ w'B "[=BQK쓃+pXz %ь?lJ`F1?8-\i sTՋ's^1wɆU+}hy9Y|;drk. 񛯽Q*dhѬL=k3kɯ UXP_ձ8_9wmkK7~gdk*o5=|iE\j-ze SywYq=UHb(ZpHsy㙫vWl:nPzbA]tFVWϵwRT<[mÛxN0MPYZϫ7m PS}~czJ0G |^~TRSSxzذtCKqvZkw;Ok`JlwRvnCq~^ axCt`Gi~i8ʎB/ Ыgpo*3^[nN;Ge,(ȅZZrVTE~[qX|pg=Z|tή)gdxq/o(gz5?4~Gmf֮@/wbaLl&`ŷN(o5mKtփ"o\+]IƶGWPLi3ڌe8ؼ?O>Ot2VI[ S[WN Hն}]XїPDCAP\;z:y2[v]֮kCo~|?߉UZOz(}_C{_3:p0@HE\X$9Y^CQ% ˄Gk-hV}Z|M6£py˻_7~{40TGcy kF_. ;w/ͻlS[;ηW9U laT̢W^djGEqgݎwxf*=%Dr'#VrxMRիWQFMͻ:gYӾ ;w2_Oܢ`|^yT?b%Å6̿&Ϛ(ӌ^olա(ﷸvd Š"2SosRq 4KDDpS~Z8p@( 3| -y#3prfxlUy3DemAj٨8BCG 5\8rmHcsUE|ιA&T;a7 ;CS+NfmEb/BMq"O1E`+hϓ}G.TtO7m~dS-Dϊj%EIpǏ9jB 񴏔GujJﮯ7ݔG~)'JeE`0H{(tY6Aa$z@Y,͕p,nP BH7p 0RE&> /-IA?*rmOp%-gFP٭2C{0d-Kퟕ=L1ajنv|v$3 _V)SǂqqgY I"rcuÆGtt5 ۔42Ommp )X6"}@OF@--DXStu?hAUUoҟLQS1.YT2KLY>Ms6nR\s$}ʡ:.mɆ΁rE~zjtS=|]UJkWGI%'Kا 53nD0\`V *i1'R|EJEi}ې7q55D3D*{ &9#!n_`RMR2iHxtڽ~x@  +Fh/=b.JDx]?)dcKĎ<} Qaɢt }g= uCJց-q@"lMLuU`Ⱥ1H{êmCt`.YSwӣNa׈99jTkd5|A./Nm6V bXԭhKlжNdに8W 9#uy~wCk&XEV2F }(mKhVsPXg\xzC|mzrIF$ (Dv*hC;5xt~ut:ߔLQzfenV햲@f3U+k/A]ȋpOPPhUEAz;h#M|׌o!7RͪM~n`:1 Vz\cMn4U4Rk)#G*U\s&!88+Q0pRSU}qh]zqfak?% f}gAq8Œ)4kj@cJGbB y޲Wqs?ͲA13"Ë?fT ^7B8bt9:yxYXT>d]ch44V啸ȢG ճ{:\ K\œ 0f= 󆂑+< ַ1T0fi5|^ hrd*Ugp՟aEy8y]?vt¡$&RPhUGqqr`Ub 2`ޤ &D-8QO +2~Q\?]c^(~MH9 eHY7^2;n|Aҭk_E OC,Yʃ*)\~Tڵ}=f ھZ8Gn2gM'?5Ǝ. 6C/iPq"m̸CfCJ1IDATҍG뎄guq7iJW|elg05Rq7ޫKiq:5w̫ O)aJ|zf5]\$Z;ߗb>kjSk2++<CSQ]=S]=HM6S.[ݺu٠j"4+kC4mܰQ"Eٽ:_O awm+ퟱGBnT^xq >x{Ō;2p?Q+,,j!G>kX nżt?{`ʭJq6@ۄKC5{Wea_' _ݼh?߰1j%+z~lxo ؄&zgd)r#zd#*_ ;;Zդ$/=HFc4SGjN0r+: 3rü}I=o|j/ǰ뼥.c惡WwRLzJ7O4vXiiLT"M߮ v$>KfHqrn 8p MM̔ҍƍ8hIG܂]NEٳs,NjN|^{CwyOo p"CƈdnZ{~0~/lEWP>JҪ > őhUXtٲehF"e˼4Oęo9[o~vk3`pA?^9cfu>ٜcyqQ8ljo[8뎾zֽ/aՙ`oh5MaJBCG+'%H>0ϦRCI4Nj1/""Gp63%g_KwU[ZH55{t&F"wz'E:)XJٌZ`_ʒC6]?;򐙈·okO8ul n,[<$Tq qx,{ 3T5:Dk_ Ņ\X zn!B.,r?qW7rcDUWSq>3*6Qz6C ]Z0Yq&μ?~ZK\DA@hUT|űXM3 9yP%NYbc 1n 3X֔~*:Wh4ݶ)}ݘ:{ 71[Z el`cO e6fwrpxcg\zG@= q$&i\%PnS\j'{ID)?e] 2sɰ -wК[ HR]}Ջ ;A_t uNG0h"2(P}S_;]qXYg m4L54Qy6X])w)P:L2DInt }:~X̪O}A u' ኈn5K!מC|T0{_ D߅܄Ee㔰uUC/E&`95fڅ3:*(g pf|M>ԷqlYG GX*Q?jl݅K?xG qY4)"8jTKF.<~?%x l\`gUb\C 3KSch  DmtKpNa9l$߮Dho-Ւ%KwPI^sw/ ʼn$cA,$hthu8=v%¶o nXW̒u A0צइP I&|.61E)p+;^8_9 aiZboǘYRt!^Ws(+}h I0obv?J}JndWPgdhңKNg\ϣ2W$SSc+pT㴘nC=į:06 zϦ3Ꙝkic5qBɩDZ&: ww3mɫ. %]__q_B+c܇^ ?9uCݜoS4"-Or"kzR!c+ r_#g> ?xדD#<z8gtecūLR-Y;1-M(HC. n/rsYl+ƥg]^97sO{`J(p[0Î7_Bw1\X#l)Ξ=&lA8f^iV8jPNp0p0gV'cLc ͣbaZ&D JHdP߭q{`=qa2P.9jRkgP{F}TEFVbf UB #NS8࿆^r4;\>38y.Z Ƃ30&mEi)a XC4mi:Yyu<ˍ[n3!0X"XX`KM݆SX l"u4Y/|3j0Ad`ъ0Y,>{DtFz_j% f濆1\%#p(Xd%CԛGm*8pc,id$0%b|z~ٿ,pT%;UtCd!sjM4l*浞49rd y0^ǝ75z=A`O _PZmw.]?}otp)ob}@uշ|(v x/|!;Ucw9J,éNjSjKjqAWRcӹ檻lΒ1*4LU*zW.7 0Y>z !t<ՌOgBX=#V./X%3wM ^~"?峇[ЧG_V-k i7FԺ(ojlbݖ]n#\+S,7~^yeYeZى8v"K.(8Ff9ۣQEx%˥,@a_}!c.?+ % 3zgvf.j<)Ǡq_q=\Xq>èo&gΜ0~k$d cC?4{UPV.Vw~ȒE/0_ p6G]V4۟b` -3.3Lmn ACCrУ7Pأ)3>0flZcn0ŀdf;o3u*֗}ذ~ӎ˞D޺AU s rwHL?h<뒪ʅL$T>KeE}'KʠrS:1Ց BETU~bÞ5Z/euXym8ϩ&ƷVwb|sbYD7:)O]NN`,`vg=3GZ]G;E3ӝac*Сm]}DQi4h#ŢT& biב ؎OR]b\.{8mN)L$7.C,ˇ, vSvG/sa ^Xj\E>D$Lh8,i/TO8=3n#8X΋qGOv5[ҌɃ0)%w_qN Wjwo_u^y{SrF^\zN=;<{ÏUQDc6KHٿ}fE<b!4a~]&&@+ C}u{$iY=}i&Ц=? 7 R8L.F!F@-z>ChD)P"Z]8_||^nq[/kOͥgW?y J?\E򐘔劁zo+ id3a+e}vYcACݘSo _9PEL2@9?czQMg\PМB+2/þX.,HL RK.i6/l.\3>S':T O9z~@Ɠ}j"Y"rcБ_C%#]mqLcЩalc,2R ۚ m1E ([`Cq4gΐg52χiZ2ݜ@z]\&&~j3NBbbwMC 尤)'p~q88Րj0ȈEgs5W&Olܼ~kk.(?zh (lc%HtM]v:,dd3Pn @n#. ݧ+Pjь4e^S[b]V}ۜWm-/BL.~Q1G_V6L* `C|wQ0@[EGrTU|E$s8(zaOŮCU_r-6FN0 `Jk4|LqÖqxQ/ N̐L3U`pV5Մ2$ IHu D0`3_y¶^vT]XNAA4ͫxDX;eTS;r"aF|LZ>f۩O?)(ˀx` (Gj6YX#:I>p@I몄+7wYddH/$r峟S.\f_U#.W\l"ͱJ+=\?MG^_,'EĹ/}LOe{c'SɓY .p:xLx>]3aW.T\xz3 !g/a0 E9MG"r1m?щu0Ahv_[cQI3Duz&P1:Bw°9 W}49a7i]neEIė47 OK0+K$4+lBAegݞ̡ 򠖕yD/u=NRh!E2 r/y"uwn/}h>{LP y#Z&/+KRWy }:sR) IJ"eKoWRAJ??J(!cx_S؛i)L΀*K` v~A㛅3;,|pϸ;^{1 ﯺc|Rܘw"o# ӮXrQjJO$vq,/AZ:(tOX_ 9t&UW#bta {L)Ӳ@l.Y5nGUױ_Bn3P~Wׯ/J7Q9%zGgf{b +ẙ?|`Pa~xaKg*4u٩ncrB Vm]ȁY+ I~b{ŋ0w@Yq~11w!i-8O1KNnOxa41,B'];bOe$t T>as *o373{/T>/ڨN x(&4]GU37 gg$,%3⎬y]6 uٺfl)cj^,փ?%wʟ_ 8acc|=zB ǗCQLgp?6Ew@д"OF(Wa =/& {˙!DjKKa-cʉu0@'AwkAg:n.iE]se).i 1 1j|vZn&; B  uH"iY1Y|+#ޮV4 5 C(k,}Eᡃ w+X, UTz[r̓u6iO Y8(W40&Hq0i(RYQ᭝LG0}Ȱ_\O3-1|;wûE/t+"!\i0G (~iH,KFߨGhhe!A=ʞEY*nҠ2`'ysMh-[)X uK1hS%wX[΁^=!bO&`su7 | @j_p{?ճ Ʈ1XxݚX⩣.+}2Jae \jGkiyB7z¤)W^S?9 脟.褸=k]}Ej?i29QOF,>3 =D-9 XN%nCgb1"v0,KRơK\C${6$X8 5&YD~z]Itjqm=; =8bs]x eS?bWHR2,I?1 Ŀŗ/T\X ]E%V=f(҄4ƾ, 9b%kVr;H"ȍ|Џ!^\;ҳ%Fr \RQ'A?;j#gI`tK [998!`fn|5c:>HDOje>:6[ 7|u&.a-t]|FǺM=;S]_~  JBnЦpV17 ކ(зu%gq~W"\7<Ūq?q(o}[Egzfvϱ?t@"ZeϑH><0/l P1ti /0o [ayI_NXB\Tl)`GuGݛ7h], 6^EeXnj,7,ܮ!{I&DԍXI7AjkW]Y0ELM{N[n! <吥.g=>1bK0'•һO },T%[KiEp{Dh qz6tG"&`W7i/bo$ST$N<=#Scwh!4s Z_keJI\Tc*0oǞ dC?ŪEpO՟B/UUͫQ]مrKж&ULٲ2ҙ^,=7> 9vS.,}we4݄Y: IՋ0c]4{ я}oCK. 88p IXFZrd }oڿ+fIvylϵ?mڤ3Wq j7ʄPuLs_ļJF$(#B :pZ+ Y>AS568،-ؔZp+?UhI(LMpIˬ,fesT4q]k#YHf1%`PId*t{[5㶍S tc(l`G'ΫoR]k鬡Vp ! 1_?wd#gv4*K6 Ukvg 3^uJ#o6jd.X8IRveɉ S $3j$Ѵr=ђ>x^z"3G`"D|`2?tEtMiE@Ѹlmo|` 0ߕ޹:34H]@ L{I v(I\b,`QHYBU?q.b|Ѱ,S=؂ꇍ'\#[OTNq~0zfWSeKܬ0/޸ f3_@khV2Eí˗W4Wc{W{͈ZdDU^t6yFSwpnҜ9iq.v~)뷏UƿNc s앀L,F* Wp]ϸD S^DJ(6x5!~IB5}KM`KUsF0Y2ڥ"b8ŰSٕ*]bFt`$n|L_2;@%yظo› iZ,L@ wkuiֆp.f#oꊯd,c"\So?`Ѣ!fun9VC:ak7]FaT+fz]tn.BE df,c1u ʊ@,ql~-$L`SOjz{ >A⿨늋-xMP,* sk|E`ki##?+fʢ/"5* Hsi'88;dxZ>P>Mflvz X})\RۗDJ!;geU :m.ۆhl.|.E؍GNdm<zF90Vܽ3sx"ԤK"N_\Y2L̑ƍ +F  J" 383Zck@a \UygPE=ȿ[UQoI@E#CP2OƼ.N`=؃'QZ) 88@]hv_81.)ɸFm \ŖfBqG`W_eǦX]}o &``D@ZA$WjYЮ@KD@x2h)X-` 6%N3~u!,\d?\+D4bC e@ꏧM_Ys` Й'yq0`A€-c)6iN:7 81b^$ap 8p0#@*mߴ# 8p0`?i ?,#IENDB`json-3.12.0/docs/mkdocs/docs/images/customers.png000066400000000000000000037113341477615276400217440ustar00rootroot00000000000000PNG  IHDR*'uiCCPkCGColorSpaceDisplayP3(uKPOR:2C vqh+E0TS~ m|$)RqW)XYpTpqpDݜ:)hxޗT"8s\P+(閑LĤԺ{Sf, OYMvO\.vS]՟ɚAm %1h)ǂ.;dX jI,;|eޟWQa&PQӎ?-rW`P.,DIСa2qAꐸs~mmmp/B8xnL5TGr 0(a!w{ {c v#+)jSAcICP neXIfMM*nv(BCi~U pHYs%%IR$ziTXtXML:com.adobe.xmp 1 512 2 144 144 512 1 2 3644 1702 o@IDATxUŽe AĂ"51Ob^D}iI^bBb^b4n ҕen?sfp]xwΜ737躮)P( B@!P( B@!P( uo3T B@!P( B@!P( B@! P hU B@!P( B@!P( B` VT!P( B@!P( B@!P(ZB@!P( B@!P( B@!'(>U1U( B@!P( B@!P( Ve@!P( B@!P( B@!P( JO`UL B@!P( B@!P( B@)UP( B@!P( B@!P( }R@XSB@!P( B@!P( B@!P hU B@!P( B@!P( B` VT!P( B@!P( B@!P(ZB@!P( B@!P( B@!'(>U1U( B@!P( B@!P( Ve@!P( B@!P( B@!P( JO`UL B@!P( B@!p"S( (* =B jT B@!PurJMwhC%LFX?9]:TrP(;@1UB@! sFTَaUd# B@!K4U !˒UQZNJA@S݃TQe0D4Ş2_Y` AXӥʏ肍*, (Xp!2Hp,9=.9(EAU B@!P)L&kIƑ;ScLQf[-VeѰ`_nQyT( /tFXQ2f%V(zA ΤS -w9tӢcZ(G1]nv:|2hia۩,Z{a^)|ĩVPDOާ{lki͖i.V=ݞ$=ƍ[]$98;ceq8!:ibTXC!=pX_ږr3唖AuQ=* @[V4bob2,y^ꝇzPCt4h%eo.'al5)>Et;=t2-)Г91x\$tv jb[;$RK$#[).kf.&: VFXC+KsNG ! D6ijxH'$[ fP6';.>TdcG{={Xn.䪋i)) Dnh@s" ✳n*@Q!/D, 6n <5ͥ)C;o]:fL=^!P()xr76i:ͤ[s /-=f@iϱPI( `p#Ҝ{<7翖4ۜ.d+MD_ kD,du|'^V2`tN5ARGW3[-3VQ-tOЄscAۈɟwRa5f05)ǽHJh9H*QCgkʹP PG#Ol^ӥMrhe $J ;RݙDUObzpI(G. p+Al֙#}F1Ήu=宴[Jq=~Gf3k.;A! @+$,HDa@+#d -Ը%L{0ns;匨(^Vr:!4KE.!RJ<[#n Н^ Acr-/5}4A$͉=KDL(ӆP@oKۊ~'g1KFORQϘ3N Wiќ.+TN!%!r /UC)Ip'Wjq! hCol/,v,buZS*˽ЪCscco2z3iW^y%KCC7tb"imlYh*tϢ)"%XڙCQM,QDxs}#,sv{g G$KmAAve5@ ~z;̓[!HD{'Z5YN Z C$Z<%G pcOoLfܺf@dM'O94i@5ՏB@! RS*PA Oktsc|uɻNw(-˘[1Dl-6b(0{#Hu QQQOmrK_ߒL; OPz-A@`%M ka&Ft?FG,7 u0FZpQ8YK$5U+yJNy9K1ɊRz[nMcթlժY|pϿCЃ(44"~8m ehavt0M$Yyk-w]-j#%), T@=nvHKK Gi~80 4x*N̖-tT׍.10 bE;ƾ |N6n jN[y$nOg(0P+* ]E@l.އ^w?\asQɆgW(f_U-n&YuK&:v`ńe=$ۘ`=c%6) Hv@;}D G>wg 7|NdH$r 713I&!`/ H|mٲeO=ԓO>ٿ /jGIV8U/O.)D,&BDn?Z$x b15v9s1xᑌY_V@/[`.bme=Ҽ;x5u8zpJ> QqG/#L' |)b8Zo+fije-MYf<t@zfiXCfnٲ"o_VcxzPHLw车'{e$rFGk4I$ʖqy^vZ-H̟?ɒ%da!ъI|=s~oXCbŊ[ouذa%%%()~'?o7nҥk֬5jρ{mn-KAs-=$%z|kS어 /ZQ6' mm\Ш5ENug}MY!p# Gd;9Y*ZlNÇxt猚; 0B FV7ncu=~%hVi}um{] :3o!7Y؆$dƍ؂577b1&< ]PP0hР=_~ Iή#%+W~gh/rH&gṾ +|yffSD .DdZ/oQp(V/Q.M,~qћ63 ;c8V:VaӔqLEfPi - ņP\2؝v_d }|= %`z,`gmYg1:3ECEź ֶBߋOȄjeZmg̽ m|tX5qPZhjUv-LvkٴZ_{˾y'AA1y:J5I5+MDSAb|C,F+rٸWCG:vv>ZG?Quuuiii]]ݥ^:}tc4`_r% ~Ȣ[UU5cƌ~p9g.9s?aF`0Hv z@jJ=E@ -ڪUkXC3uW=p5҉h"fFht&+qr1-''/#,Ь.gyn׺\g:fRU>lT_!%!0N^L9鰣~i'f[`m3L'^EP)}I%KoiN8cWկ8)ϔFtM-P<ڱR~d׵|v)1E|NM6{xƔmS_QC3A%磏>Xfڴi't6hvɡe$&f0⋑K$x_q|{r-Y@QΤX#Gd D/gq_j/JbZͺ^ JAְJbĬ.M&֐b[n)#Ke-clO뱅n-%GXĵ(4գ3d1Dņ;v# w. K-ӧZ MLx✜1c4LX TY6!LnJl,̄QJ-1i2Jtv()͆--h_^?u|tT(ە6ͽh!ňEѼyTnT{{3nI eѮt8;e_ Hrߺ{X2%cQVN?k,6AGQA@; czOӔaOSɁ y9`X%d 駟袢ǬD)Wld:paZ=%h]hָ)#g 3#RD[zGI&eq5ᴵp8Gvrey:qq`tzU1FWF!TV_!ފ#c9[jNJ'ߴX)ae^y79blӲV 9)\nܯ:>t^Rݼ>M% c^WcLfE~NPvO ųgϞ9sfMM fP]}G}4]os1N2t /&Zӟ}|l$N|DNJIDLh匶? BUl{úْn?E}Ç\C i/_riiFTc Q۶X'3N[hvxS_6H6<$V&8 жGy䨣L4k', hp[(֭n"< 16ٰw 'Z"H?^hkƒ6Yw0K{G DG* #xIՑldK\e\jb>۞l ;dbɠfuuHf]\ᒋtPgўORT]tnhe@i9 FU?C9!2c 3$)@G`i1 Kt\^ߙ8K#>h]~J"Z*^‰Vؘk^} vZ?2~CpXٸ~} |!S@(+ii^"Qq &4ONk+(ڕk4$TdGK^Z=Ɨ#uʜ[t]t|~Сַ|Az#<`p!@^O]~cG|"{x @yaLިNp7Ň᠀D).N`E/hSuJrLiiַPuc(6c-vɑhp :ܾ}Qp rK3-s}}=4scwg?[0`ч~`-Jݭ(Ce ]tW; 3g14uua(DI(,V{iwIc}޼2ǠU¤^:9??n̍?oj;s=k2wdt<xnQ-N[}:q 2xT,nw:"_geҎy.*ֻ㻗[jٌ}v |Xza%%iY66}Lv{VsG9idE餓Aɿm /;~>U BL*DVOqkne{<6ݙX͡UՍfiU{ <]'x1#0OX*#wurQ‘h0I99\'Q= s ?[h^͛ LNKvk2d$5^&*! E^aМ1h kW hliCλ8)? 1829q@!3A<2#2&DgZʛAO,fSUkkk9 Ac+Yh#(j"EeF8H%;\R29 qV ?[̦siMh =i|-QN)TI+'A TF]j:VG e;uE0_V,ׯ n^3>fـaN/h,[ +;g31g#p!0 19``?Syny/ `taX+4v-~y#%I&bot}Fh<-m[nȜ!DV[v7O" ӊh9{ɘñ<6 b6X`0ɖ|~RczSڃ>#'au%N 6f>pD wOvB_>hx#*v (ȯ,uA>fuqňB0cjTT;((1H',|a]N̂2C{ 9w3y)h{e?1vXrpəv+qg|9>#;fw9% ضX=vηO'>qtMnO!$l]h.{9#4?̯Ps/qet2~ÇC@Z#*L7@y?i%+R|%IF2}ر""ַn:-©GM˜J ^a t>tJ 'gfaSFZ$G4k Ъw?U_b:H8{<QL ~"/_^e4Ɠo?nkA#ͬDD0cSHDQmb$ 7nhOlP*Oq@< M~_Cy42\\4i̒ xGfi5< (eKso~qÍIcB~O_Pp~OӥSBH_iⲤ'aAgxx>%^|GEĒY:?za F Wܝ9dRDSӹ>Z9 ?mL98ZxҀ~NNbŠ.#,NBHQՉcw!uH!dx3C2O";_y\@0$Q`Mb2!> F\lwB)Yb̒-C#ڳk^E\AԐL'!=@vD*(ژUJE`1GvDMoAQ C?%3uBiie_~)mi|W\r. Bկt|PYts8 @:wG\}7R= "YEmlw1TƽMJ8d2׭mV0nקXYEaKLa f=d Fd*l'szfEC)hm|l=;*r1I687 q .D0ߌlŬ?2 [Z#5[ۖ,+9sK4pKҟ׵ә!%E9n[!dRKX-8@37ú`%4X8\-y.6z)ɡwyjsϽd:}uG9W]5{OJ޹ɷfaݒgW" ^{مlB/L?{=t?-Mi0&*DQ2E_̝+Ve1jb~~ǘs:eL%1 xMoܸW^.IE+R})ذU3.dlr "Zfh["w͊\cpMqN2S'GK'٦ʷD[/^LQKp3)'8,Uz~$嵤޾'\2ȘjFJqGM-U[_W@$ʲrU¡Mm^D$#&BaUjgOǚkI9ufSz T`}h>čTCiIL 'Q$ 7=nN$"$d0ILV2G]fd%sOhf]8sDDS.L! w!1[I#[LJb۝ԈcETכ3Ic1J~XD8,#p4Nuj6t*mi{S eϲtz~)BQ{$`d| l, ׄՖmiX~ŹS|#q}VD(*j$ҟ5 I(#tD3˸js&](1iLńmwHndSC>Bc"HT"0[lgF:X9D;lEuG(MgD8s,tD{RLfmAȤa[~En J~yyw՟}..rc 'tl|)^_*x1]ׇ["n%e©D(P0 lXV>Eo^FX2zێ{ &cW`;l`>)ST,s4kfK=2d/cs%읗,Y}4QϳrЩoii)͑P.ɁRE`ij4W$qqÕkSH:JU3 üfy%'ѵfH? ߮WJ S +M#K٢]"n%{x!bHύ!9٪aÊ-@u^ ߭<[L=sj*ᗹ=lr!Peeezs1LegcwG3y6jCgbO ;`WQQvħk[|9}ކ  9h nT5څ']?rr6[0'f] ,K 8?PB?X()i ٺؚtuRXgR9~asF (fSz4[ƫ6ZjCZuBDⲤ$SvL^o#`jLf @0 kb aȨ~"}iP}uNՖ&&3)qOWL#y֔qoZF_Eg=uͬ4y Wl\%D3r :qGr9L.Hz~yزp'KTomN$xÇT4ai'Si%QbI>p>FQMoѥ6s^gk77'4 Zng@'3 49\Ke+\3K1'߿$ɞEڴ.ZU6Xyqg:!ǥ^]8G]p9>1Gp-b*|Q}%6ϝ["+}R)H0Tږwv[i/iBxl6X2G&,fSHѤ}P.1\=1$LȿW^1j'Wn riF +1S}VO >rb4 XԊM~уsb $A+M/ljQ?+G "2_X)1J++r=,.nJ 3V9 l sިeVN2h<_(rMS7Z%:̜=zXoF*2˪B b~E稡9Hnl67ׅi}`(*d#TN{S]lz7ώv{k=xqM0JID; $LvOI&8}IY}޼t6|QuّIJ{0#`Fźe_p;Iu^qW8\D9Ώ|hC?f uod8Nad_YH3z2Xh S6_4C0|g <8\gs@HCޙ9;[Gg_z@H"\)Ϥ'ٸ0(/+vɷ\][;6lvsy5c$'FEI=M` >ѧv+Y0qhV'FZzDhqPȱlyiSsܾc\p!p815)dv4K45'Mdfƌ׭xu@#l뗣+H6l@)p:6cTM<({WM6Mٳf3Xqn7Dñ38WKH]3z,lQ,otwGů;3Sgy瞣'SlRɁ^x3'G0ၞ@fvfDj9ړ춆 :h3z8Pԏ7_Si"P,dsk3EޝcmhwZqtdsuK 1?KwTO. >FtrG*;3N*5-cy?p!h Փu u?%,'`6aXgբDcϾMT]#$ss{Oy"{Ձ uq3oe8G7H`ڬ)f]y mmHHnm]~73 %jki::('h_m`0N璳^9_#2qc"b!/ ?]ǿ罏3pC;cYꉗf{q_]D%1} }%i^zT$r!Zt>\27.roi ) Ai3?X[sWEsOQE L@?? .kg0k?sO?QK{NmNke|1=ڞNK2嫪_ig<ۯvEjBUx`ۯ8Z?\քJQzMY'hFdHgL. _zz=ꀊ3N0?D6t }ˋҿՏ=v$U+gZۂmpqG}HI~5tI6e1f2g͚Ž@A4dK/gJ(mYD Z2!셙0 d `zt?3e94ڲ'9 /ѹpԨQbf%"Wv^k7he#9{r 7PF'|LEN>'Xs6W6=wȐC-Hj8֊FLpg;$ ["ܾb^^R2bH?EĦEbfW-<_e_ ؊D/v޶eD-VWnO9:d(J`@cgvx'kU\[oan9,?|Ƀ J$IR 7B7:a $yT1`S a!'MD) _BÜŘ>/2ygo'|2uTHdfk3f-͛7# ZSN9|&`"Fm , "Q[@!yĬ#@ƓT@֟bu\&Wf YŒit%!wq@IDATÚ믿j2dgc/{8Ґql8/_1Wp;ܪ_˴R~be}|k{ Ƣ9Ⲁ yfgۘ-ԟdߩ2~y-^bL}7_RÖ% 7]Z1|zc,jc}a妔Q@I%[ovި!bϧN[Ra{mxegg_zZLboiZ_L߹#IUݚ2ƁG2Я K&.FZsW^ݬ[–9j\>G Jkw>۰bSas{[.HL;aKQgZf- 9bI[oN'{0=VtbHޏmP7uz%G*Iuwh(N'|N 'S=TolI6ʟW >nKs舓\bvt4NQәP{S(4)dJǦ׿馛 ir+ce.Ib1i`j0^n-6E=ިQZ{h" NN MwX3kNYՉhdhtrsP:]9#:QE~ٱy+W Q] .FD4μlETA:w@ogC$vuDtfI̝;7 fbdR+MnfcCGCZ-ꪫe+3] ɚw V_sp1ICyV&2onD9D̢8{#J$A/&]RPZ־r-gN’L%cOםp0pNWrlZha+?Ԯfc3dBA!m[>=C|,;k ?}]9!R_]]*26( K`eTD;)UvX;KzF&wj 7|e >(=ĉ4!)HȀY)CE<7(g|Mv4錟zѸq㲵0=xiO UAQ(ʊ;ɜ#DeH< 2StJf}BP[s NTjkd6& QdO_ykNG2BdEF߃_^:ihVg2ÿx湟4VQ>oWi;.a- fB,J\C(i~%x"Prs},V==iܦH6s/Ŭ':V}Ӄ ,-tẤ[sk-~߭U?rœP4u#u[6K{ENiת`<_(g^%跄"Tw˦|j>h>+Jlnmm/hW&z# qcyZI,[ n~`o {Kg\ hebpKY+`bIGSuRuo.qf鑃@&]r˲?=݇>tv @-nG Ph()g1s~NofB$TLSuqMS6^c.s43ʭ#82;#ez ^G,Jh)@Ξ)׊J rH圳i< !PZlu_[Q%-[| >ۅJ SN6_2u0V22[>EzU?̧z&j)@&%wFG-K;Q22 21F$q@#^ 6\(+T>9'f'#r鄚br5׾5mGoθ#1evdG7{1bQk-7ݼv[o>V#d)v}C]5?麟1߹8D_ 9Wގ dtd87~m/ uk5AJldX jԇ4ǃ+9t-cP5wlOSq2H5$ي7>gߨ|]nr!xo!%)ȵ)|-;23*}/+3ؙKSE'_cgkp G :}8G)]Ϋ.;D.3_`vؔF?] eFHtkb֔t{ C+K23يOtA=k 8֙ ۴B{{ =5aؓ)[%a2iAjdM}ѿ^wg'JF( hfR|yd@q ]ٙN[M-R8*<͑]$S|XGbRmsM@]Gґd<ם'l>Ц͑-[Eљe_/c8‰d6Z]̞l7hv7:01Z[ۗWߟ1{A,Β {݋;͆Z& |Diy?]N%zi';[+ƞhJ.h)%GM6HfHG+~d̑(Ѹc?[Ld*Ȇ=s f,2k .@VZ`B =J(th١DfGESN*!(=B`wL#7Yh m&]H&ʸ]X17,CLTPq\oHW4tN,XiG2N.FUJCc0݇0ewjrk%8ZDO%#z ] I$L67*؍GE3쨌&Ft^ٯA4 b{2&=gY~)}Oi  ׾4r%jY>kz99d[AbMK46bаr HI&]fZقK!r¢>r#;QђKX kR-0u(ȆeвR%Y@%ْ-bG{p*/Ydo1eʔo~gT̘[* `Ţ mqZ.n>bd?7VFzK1Ⱦ'34?*vxAxuk|`17}W3ęǺ~x1(/)85?V<1۳xԑl_v),_jg(54"ĬKw拦{I aS9s|IZgv[55irf olM7]Z|~|׏GJl={bXm-q& Ekb_iG&>Ioe s_uVUv_ cX9g#c(_[ :JDxn~I|VwΉ^Z `b_z@re+#z *a;m>nO"6cɚztNT?m{O,簣ׅ9KD*;+%?%76bq[A(Y sVUA Hlhme ܮ%tUYn ؽg4l%eIU{&Ƕ1Q:?h2cf'ga\kAgm3u<$[1\8aᄋf䡢  S}X5|7vt/bɑ#}۴%[С^aAEyw \0~mm߫jksqVuaDD;k7njx{DY-O^o}muWiU: x% niy5{<1JM7Si>st-[asuKe#FV{.YZv} NX^!*}Ū!֬ilC G6>Mn6Eby͋6`yⱕnjc>eB>%Ѕ`]-fL<"!D7E]L3 \ӟR. !0{#9(ʛsÍ7ȴrlOS=Dw -FjBl !|5_@>fD2 ete +aH#3H3JC"{<-;J* ž,Z;<[k ߩ=VdACiigyV7{ݟ!Bid<!'I=O?`2B񌇣.L&܀†,07Ozh:e7P@e)[@p?O-6{鱇ɱ[9)Ep^-??cGb:'7=|HqcF(Β1% ;3 =s&ssm;h|3>6c*Q(03XJsy#8Wkw,zO4Blܭ_u١>%PiO{)'90?Kkl5{Ͽ4F,J{ >L͆J)QHlպzEƔ ݙ_^wNa}Ͽ;wUJ 8-t<{Fmϟ|1.̿;jr]cwoHi/9Ya7$<_ٔퟭHS3 d,wXDIVߢHi#CjDI ZVZ\t)e k,]#6A.ԚX"AljRx[QVS<;G`}9Ɯ/W{Ca'Ph&C/th~U?&#ST`hu0DYI|$dG.;I~R<1\%/hٺ(!)[h  6$[ǑGrG~Ѩ}%ei RKAl O&| ߲J{6WVj\̼X^9 Nd$D$t뭷"@K#9 eil.rGJ4D6Othe7́h|9t fIQb$0G̙^ Q1C/'gyřGul ı8ΗBtcIJYW_}5g"tF`s6@潦\!V3Nš(Š.8CjđȠT@Pi6_F J>-6_~戂"Bis>wZx5jIc Z *vؖĢn(% $EY3'Jsœ rs2E/,؂v+jC+ }QyqXڲs]px_qvI˟Z-^jQXtuxr>NcݕN%Q/RY8׻5:G 80lPN!Fy{2T*! &&S+dFZo~7׬]j_9Ou R.:k;bFO6[B :\ckI1=t1Vow:[9\,M&  %H:Pb~Ӫm&@u#}}(+CW\B્킈]]ދV El>Z7q;,'<"<~5-mwV/x -55[[Q@?A TXGxku,pVU[ ,[Coz>-#Ӌ?[Us/n̨?o{]vY`i4 Kأ&EiFh4%ƂHAzﰻ, -{s݅3Μ9sfL;s9k{m2-3gnyboXT%%?3:/ϻ`eIs攑}}s7_6|de֕#>f :rӓ˘1T5`XsԫW[Ҁm֖_bҮ,j򋟨CpvrF2,—N<" 3=m4T!,/0+-reQSn V>bʓS-Bg!c]1I>,OsK#r#i ˖f]^,T'uRfǻ`+eC >zb#)Qs'Ef^vП_'F4onK^%*=P{-"^Q}CXx~r Zymnܱ]9oHF/uBqZ㷍 Yb-^GEnCIG=wW75۫ivMsBH&#fc1XҀd 0M0ݔ` K+$XfRX1udIASۜ7-S3FT(p2]77ނ!㰹end cN l`4$#C]KX.ZM8a饭0~ňw޹In knCHX(SbRXC'a8kYS2}ꃪm&7dgd<Z.F㊡ݫ\^tL) (dpq8Ҽ%Ԭ"v˾]kflkp)FƯѽC$ @)I65FZJ(|n (1IuY%t"u)|h&@4 5aܯHQe06*IlT.9q8"XZHb[q8SbnE}JrȀüdFv?ܳ!83!oG~EkkǶ3K.st]T]ng Xe`h"d8]RŭTp]u 9jS ,f qfLj.`,<'h6= V:pd6Nk=lqi*jqy8ygh1,2" ?<9t7ED3_1vdfInI+.ž`-z̧"{$wYyi妉h"O͹lC^^0{֟]7jbBt9ק8vuL3~ɺ>\XiT&2њp7+?Yչw{슝 Xmhtv5{4ǒ+3[g=S ;mgٲc7+G  1 C!{ue& G;3L$T`EldAc_E?I &W'QÆC񭱱iŊ勾ZD8.%!?8+7MLB453J%6 B*IJWy/Ɍ"81꾘ZGD. ˒]. 1S>5ItA-܂ZvcGHAV4-}C } iܾiɲfAJkm-ޮ=i|z7Ciɨ\OZh. :3B4x$w(훕п;^ʵ`6F*0-aΘ4"n7Oǟ{ P Rڍn 1}cPB5r/=0;vWyx2a`38apD/G嘑CΖ͑͟İGPl[/={ӏ fee `^iS~zSi._W߻vҍL+O]kcA`c_ë2Gbkk@k&Wߍ[J%+ eCm@=諦:wfuvUZP'L.'fGfJp6֐ՍD/Q~bs&쯨 e^.r`)DrK36l„tag~Sv있r ;Ӑ%ΌDX[a|0wъ--TW֠`Ѫy#_ogUk6UT"TH~`[iڍ;nMwUZuVTV|nRYehVi{n w6Q3$Lnöd=u +mްRn+lhlihn*߽Qos4f(-qH] #qf&ESƎ$*| <CfH"6Eyj*ſe# h" 9L \1<:\_"FH3ȔO {e{U;"YPaIfNEk@= v*O3AĔPF$D5 Hi$u űkNiSTL $Lh4Q?BE9Y@`[_;fp54ﵷ:H!He, =$//r\*p^En[X&@#]O,^]cWXKnOt甼.W>bZYo2 L(@KEYbB#ihstH+] !#'TۧdVSŀw%UOk.e0L`r$,6D"%Zb!-80q!Tѝ>_U 'k֦$~__q=u?imǫ|> 54muvʞ)v:2/QD09^'zh]ܼrVٮRnq=ƣ(~qq17cCݰI*ZXVƍ0ǣ$Ps oC rh`Vr<>BYt ?0qz5s$x XX$ eH ȢL&5FNFǧ_(H4F;a`LV.f밡ūV g5K(C˪[ƌ9de1t(=3n`eeMw_a}:~?h@-Z1z.wc,!IjO~Qc{=(kκdwn+3?.^[{f]G,ՒqwO=қ#[ɜa`5ءHEP y..mz?-e(nt/| 9^|i8,9ha@91H !E7_><;ߒkv 1 8'ԙa4=.zC iiT3tI(Kwtmȶhlx30F2uq31<Ofq`sK5%X*@S#n-FȢ%9jlhl\&}9YS1!2P߿v{]u5uNySsZ0֐$8c);Յ1yQ'$͛1QZEV6MͅXµ> 'GB@ZOM[-0; DU-hmʔ?7;f=MJN'.ٳO>fݧ7,,Mu%0v.P`94 ÿYgE%3psϝylÀ!(öO?bs@'.tۦq,o,aYyUtuמr KwOiNk7d<Lw`q=゙4?fk [k $`M77|fԼp S!ٚ ' JAv ;&=kf= xTbxij^IO+9uPp74'Hh E]-Qamkuuf=NN{ư?vB*_uiSBNr'E al Xյ܁<dB^N1xǏ?ӐXC{o+YN%KUFPr GNd.?Oh8<|B,]B؞GǵEzH#8cCx#[,D | .}r)A$SB ݷvGIb5xj^+_CߟGdݐAkƆ&зX =ξy;N_97@wNvS 3;K[D(E#o)mxuV]\wQ''݇7خ08(u#{l@yf°섭5BQ:Wr/̤ vq <91t$FG= V,ycjS`to>OF Fxz#jBk $XЗ^z)GV''!2`C"/S,r"<38ߢ.;3 NU\s5܉a^J/ƻx@=8`IB 8LI\po*I3\T~p7d44LqiM6uk)7+Я-rbo=woZ{sKÍGV@DB"ݍUvݹa.C%0cԩԕԋ*#0>s̡T$y In5gRτ %Qzh}XRJ`"98`J@,($#49 "xwa;RGj_OdaYс9ܼ׈I /,]F]fx2q^!33`C39(psώ_.m.[B}@"vX[ʑldo*JF?"!e(HOsG!ۆ4`_r•6Oo1Rs&Jwodo40'==['._g o8?T5.Gʋ^,:3p 'N#GrYc H`%qW ~22UHԄ>L[뜡h^~< qb $ɚիU}k~@Ng; A=JuNM=00ʞe^+z(2I2y%%_ <U}4șҸsg-HW=2J>#emƢe80Z+hi7cl&%܉eP^ n|oJl¯W-\c#\fۻ5)H_>2o^驳,pjyP'ƀl>/CN7dB*)ھJT;|Jw!$lt{tS˟6iq_1c輏nHLIR1 H0%!Iբrε)Sٚ鉄*b^mEtX̎#ak 9<5k@9bsbwVgv_Yr 670>EYOaq]kà\ەxed-< >@'j6ۑ 'cqMS$o~tS_|W]J*'Khё!馛nb bD"],IWP =tHuY-fsċΘ-8xخE gyJL_dd@:6hO%0RPN iV8 iO#K:D_Q'[j v%zsæJ[̐~/ |#28\0l$#訟hK!qr\ۂJ#>P~Bx)3^* ?z~yH0f޽{-ӊ6?oy|PiŦM`~ro p I F+s 3tP|AiJzeXzH ,L@Apq8G-*ci323F2PЭkУ"QR Ne뷣l>6>)҉uh9zvr`:M`[za̴{|15>?/x9P>ΜY "ZHJKvja5~9k ȜVKٞ=9p䤂IUh7mN䧋z keӓ9È VLQ/,s23+7>\d:'%)ҳO db 6mu5~uHb2)x lpzv+ollijmhlfK0y:_QPo?1ƫ~ȹlaxq!~'}}x1zT$6D=kѨ(hӠaDѸ<ƧiQKw w~t0-;O3йȈ䄨eDYyYc)$JELtBʥWGVn<j%`&s٭ziŊEjf"+@SY+R8R&5Jk#']iY66dRQLۼY 'Ñթ=d\z;x׾XB@;2i}whkÆ y W`Ї86rX J~dzgCF(=>.@GݻӦ02p%)̨]m8T >)jF̄ Wٓ8pI iYZ]޳LUW9[[B[\Qҹ+)I]U̿w[gceH, _}ZA}DզknBA^NǮ*x=[64 $3{vL~T/[Jr?'5жfWIW4ez/3چcznkw mO1B4B:e9:VS,Is(E'hsٴAC/ʚz'5)_Cc֥' ߬ƨv!evMooZm#/!k7adϑ9Ҭq30=$t2+r„ v![bh=nHiƍr)9qp=w nx']w mO4ΝoO'\|EeKΚ)J?gq2r:\N!5B;<$ae)!4`13`Xfc!ܼ!) 1OQ{_S?TXXp'ʢ~b!Rh,E'\S*~L0i{}-}|sS^kf9zHK}~ͺDe;fw9%br6rplnGAclmT< a+pL Q$2,#bF)Fd1j, N rs?v.-0P6Ƭhn9$^d^xm $\ a:f8w`*֟YގpƊ%H "wIHSY;n{ȕle"lؾjx|%֍?D!mil؀9K&ZgbO-¦&btlQaίϸ]*w7^G$y~=de&}Ѫ# !?8[=iR@ ܠ?}LѰa%:Widfj犥q˖wթ.kwխ7O2S^vҟo++FYg(OD?"Eϖf?if^9CΞc߃u?׭c^z)J`&/\'8g_v vwUj=nT0J2$>M"!#N@s" %DRavA d%ie=b`<,~nޙ%Y6FTG ,$t:-&{Zyغ`UWYLh9*R|ʫa8#l#(L+ Y)Eku/Ce<śٲ}ؑz㒓OGz݊e`ܴ.I,H2Q$ L|FzZJ !Ndu&N΂ǞE,a@{6%T@f CnqFQ^{烏AE@de5}7/:VNxvٚN[vT7'n337/ 5q`A;-Baj7$JHN?RuUoVU]; wkZxC;!'=Uq[!<\2ҙJ !|^˼ SSB\u!}։u99-_~yt -1 (s1B.,Qpujwy^-FPxώjަey4<|iSS"s wÓ>v˖9Y)㴒O |n^8sڝ;˱yO~W>;H 2n/f. 2՚_6FdHO}'~;j:{&9SM_iŃ^]7k79 ֩{YOv;'++TхG "8EsL ܘ˼K>f`d64S`Rɼ&_Yߞ}7]L*{LT-:gOMY 3(NT孂[L׈W6']f?CKN[\ Ԇ"(1QsmaF?Djb Yh=GRC*I;3W#snmܐR ez7>"{[xᒵ\|)-vDF8<W-֍iI{y)ʷ)f{P ю .6o[H 6Kyegl&-Eڱw?ey㠡2}44L0_A:z(앛 OqB>2d`B C9ǎ.wh]k ~X횚(c5[5(q+D(ͣMWr͘4nDvf[Ԥ쬮]s恍ki55!ZouV"s z蒚܊ l)+Gf@3dY!d"*r [e]֗Hˆ܁H㑛=)Ax-:2b > 8]q!u% CD)0H5%6"haHrkll)wZe-rq%o燎[?\Ves7Vhgt{]y)s fkB{mܟcO¡mIcCnO {Cu_P4l2l`@Y(tyӣ:YS.`ht*B0*-:X>1Z$[_FL`$+<%}"{R4c `HB|Er[ƪx.眯 '#ZBWUĨԬ %%]7bbnsmwyt+&$--T+ * y]jR"GC?Zl/WTO.R$#;' 70yX~"/ܖTތoFj!!>-||x!$ _gkiȑ? r[IC.ac0`[%UAkۅ6`F5S z`M,i<&(ʖʿIQ$3g(x2R'A1.D=XvY9/jv;J<^Gi۞ \zJgyGwrP+*avcUM Q gH(N/#xwtd }k8qF_$ λ7olm]hEWT/baagnA LH8aBvNLHJj :/C#FhnW O곳S#}V2t\?rr[>3A?RR`HS1 wfCJι QHj dgeU\y߽'RJ8h|[uZB'&Ѭ-Rr迊_fFp#oL^ ~5>mNp缹,}Ol]8CߺmAssmf|1I7`tݹ(;E:Ō+x~sg+U*%!W谯WScVDX(1q}N[ggJc5@= 9 4`P ǃ?`*}V〖\HhdOt(=h;Rk :HHe@qjzwy> I)|&أE{[[4~3mYnAPf5ĉ"ֱʰaFbS<' գ1c{O!"`& ':uʼ&LL?+`SS&Of*${@UЍ f@?399qrOr$OJN0 $w %L׊< T?M *+w 9  ܺbhfց¡ ?yYqjkƘV$h L8dw,ei[la#CSk}x!QGn mCK1.T U$x gȎR-BN !Yt=+xkY!|fF|QáFAֲ\r{k0D"Rg R4&1#-55\9<7Gat>vM:wW755&%EƁ(=յ(%Jg.0uH@%1Y([GϿڶlW|ͫ6lf!C#Ͻ߷O A at^ =ڇa0N'oxF_D4 k:C$o.w[Ι)3:7[ܻyO/h-{wu5>QNtJ mʏ-aVnG.4bq/;l2|(}UNBPp8(8f*Ah *G2fb0*fe' =\pBNegkѣa { yQwB~%_Lxg_tg*<kˠ">DsPf4N:k|̰'A b``X:*U`4U\B=Me*@ rLfQ;2~&?J7%2:鋐!m<);iȈfZRV++E @daLQt&G:[M //G]v\`lScN݃@z>A` ;O$ZoW]u0 TL'p9meԩ> Q1F$ J֪x3BxM. p<;DƪG^` S8c`9 B- .hC:>HcPbX6MWTlKR4Un V.~nfYA"O0vP &'AAӊ%8 c2XiHȮD~Ma ) p<#~# HF!n_0/B]IK ""ǥ%_)! Cta k'r CM> ŏՔq\9 r6,)#|aKT\i Z=H9I¯ywOGŜ߈K )?zI["ppwAP=};L-H<<կo?GFL˗-{7Q3bPRRBݻ+!uUG,G଎Xz|5nW_ye7`ƈ#Ϝ|f0+[ByzJj=gDSEU8nܥ,Itbᗧv>%CU߀M;_05`)EiƬ3YPxM%E|*.X=_=+R)irm $#s/L,:!)D xE( VJZ$֬5UR1+{D}X5 !,aȷ0M;e"*s#>/`260xcdr@H0l#jL kv(, $6v \40*|AYGa$/B8oljbJBS |Z3 &>5#W?0&*ODR"08<ҊU<7xzMᒽ!@$ˆ%FV|h!G8Kٖ,( l-L=O $ `*j-qV#!0bQYIڃiP. !Q9[n_HfFspZl (Ә$\KD?5Aq8 M(SCD|@g`^~뭙Ay7bshVaTfټe+V//8zu\[aKBF4YF(4L$G~N9[/vܻ{Is$İs-4YD62hքtZȿ 9Mx3|gW*A{;gHK;\dS ;p^J*\/}%03kZYVU-m@A_~fj֥-jv׷-p(꒙qvLI;w)PGaȀ ؃!y ٴc[nZyn5)Jdzc.^^B|15_HF$_v1 ٟKa\[~T844I,'#pR'auUi D{дW\qi$]Hnk b;v'h1[o;u[kmUvo{O93R904.$ta~Ǔ[3q!Gūea/Z~MΡ}pTdV >!y.W4HuiA8*>I0U/eCڸUd Bм@9._m,R]ydͳtBƵV>q cݎDc9, e]JQdʥkBHG<@cA ~C!t"yZU"H*еal=LIKB$(SqhZԥŠW)BeLw@rMId;ғ^] E,+'bLVڝ.T2q2ar6m?߶ˊa&CPS$mEO4Pv&1:I X4AD[gxX/SzvUsk!afe?F2PF m:mܶ7f:2- {f1$-kQ92W +-ݖ>Ε`DXH1%~۾D&g)71~s9sZXĊ.% v |A'8,4أ9q,ݱSf@SOEh(E3d{2tt.N(@n}8>742S2.,f}td0>vukweM"̬5w+ʿQzL~΅_߿fSSŜA(/'8n똰wP:j/<̹:ii,p8}ڝ_0&0ӄ;X7>X+k iSOQz:N `;Rj(KL!1bd #弜iKX-C-b3'%95:n &+`6ޟ).t"Pe\, g M/X76!tw}袾8֧fM)Qq0G200>|<:􃍝ÔK\xх˖.ŞfnڴYCF Lb 4+2sP]#UecFbDYFgZjs.p2%#up*晟}v ,ޘd,VHщ.Mr(R16*alB1E?Q? ^swK#Vl&o2 *G/yn{_~_i9*.oSOm f{VMw{Qo5ջoevR*Vj#ցؑ+UN{3fӋ0̸ ~W?rDWhp7pBbrI|90 /'{ls­k6ظyg>pcH:%ɻCv٭ma PIG r~}S ۪|jٱ5?5itܢLcH6vW`nWaFb =*hp(e6$*Ȧ14͆LMRFHthB<j l"$$!!I@ d __LPUjiv\hĤܜNM^Oke./DGH^(|ѹ#WqA=1+p]^=$#v]VA {~et33dӨp0!أ=Nh^h) H'OM ())b  EC[tj Y0,A JD%)5@#23+_6|8n&$l5kY:7('XJ+݀ǰLxT鿕S lssrYX8u[l90A8Y r cjDUZ4w*Mr/~ɋ$,}._VW_[^MNZHO9Nc gG-yK Zy瞞ڽAz(ԌtOS!(0-@1m $"ô 2{n[Es:r83x?z$`CS&K}ל׳{7GyT߬؊V5ߛs91S f|p-NmIcXwZ?ԉ B&f1Pj)ɧsWۜs`Cf}}E=9Qe?)7E zY?Ryiշr/2W$wi)eM(qLYR3ʫ^}2KrzgX|9BIvG;f+Bedd?1| '>[f`ZadY6n=zH .oZ6oj%}{_e(.bןQc%1D1ĘQĘk^@Dz]X3w^VX`۹sg|9sL(wQsO'rI+(jaL s1\T}ɢ/\rΉbzG>~d{fX$-,  ^K*U]9@IDATY{>aLF4td`ZPPGߖɺ-E1~XeF\"C^~,r?[QR3v0ieOlU<vHү:ۧLOi{b ztu$V+% , 0]\}c,H槧הDXK 4v96lؐ*ףw6֬YpP݅AߙT ޴*$!uS&𵣀I+R 6K*6\BCZQWOe%ٜ"˙$DHt3j`$D*0B(ٜ֓uL2Ն>֒+؋\i~Xt[l3qէ1f)& 6~Ijb~B|YM7re]^VeDg~,5'qR ߐw!M[WrE8m%h' Q@ 7Z2 ?RwY:w=ȝH6Ud3YX.>C{HNK HP|-6hl]|QӦ$RԔ>-F,9%ӸjjrQb2I 8=v;5cj[} /ΘV[):率BE_/p <7% &1IX~(.̮^Kt>mVKBN)\\$ߙD2}-2DGrM F}m>ZVVJ'', K!$'&YQ/4l݌Ue="I hM;#Fc<|0@ի7|wA9@>k0emWuG;δ:9ngNd{woJgcs8(WkWVbA`Z-І<*Y.C`RqgT(Rt騀Ҏ4lyXdF6U5x&K4jx5YPMDMl*="P4Z;3aD qNlܸOg} 3Dߔc/ .L0|J;@X˧7xcpЀ&:'L`ֻX?P^ _r u8#c((,isEGRwgHϱ҃Z_e9ꄈUk lf\@".c(59TKEԌ?c4[-V@ѱzS3Ot+){GzWˆaqm.1BS-58~;O?_d3sE;qv'ʤ :1f,ۃaDG&5~(Je굯Ǖ?5Zz4 5ŘĕD|og2@~iǤ٭g`}R*R m1s>ݮ|/7MĀbXbCa%vdl.݉Z#RH9q2y2 X&hy;S^-Ԕhy#=u=W~[iAGP0Rx?T,C'lmxw _֬^+dnΟ1UI;oY由/W_yeM VVD񓡴kfg%RGa"[Tyϋ/8Ӛnn ZBn^Sa0>Bo(n7sF~݋GqٷL.EߘSMv֛mm=[t8v^ߣO-GcSŠ<`c t!qK+ uu;|/Vnswv=R@ z*As;OT˜6sʪuH/38a&К9h1 C,;@/9L̗t8ԉ|\m q 1"gޜC dFOT9!T-s 3n#`[ظ6Rc9qכvcSyΛ:mg~-% |sqA{͛6mܰI2Rltq֙~b!KasQ+W` R6rM",8 Z0%7+F?k}}Bfï4JjC?"Üj2EyٖW#:0{y<Bq}sYWsO[ 2gBPcc:yI4hJxlnx ΂QFՖ=mDC=7x cacANZ"pז|^_ꛟ{#8ʘa:arI ˋ~Ga\Y o^s9aq6owBhK0vGM:8Fr|uT-Ƹ` bF=qSwDK~JK n'wm{:x!EPhm-]SbXEW0(Ko&D:wG9aOVq7rM7x #vk7ɗ+cx>Yi2.{,$sJbLTzYr!צdlFturicK3J1x7l@oMTPU#g$[-)0Ëlv:zR$ijv͟7s@~?{czrr /8س]:@X-D1։l1&j28bqJ8,8Fsn1Vvv"b\tͯc/t.fmzՌ p4QQS`85v^ha\?~_Wnr4*̀v+CPS}czO]]SHF; !i]rDA,~4, :Ѭpˬp :|–va٤Ylt/ Nԇ\1tc[7~m[YJZ|+;> ;nʎm\ 9=w4,0шV \6i:V`ҝF5TɜZvu]WQQm{#td(#5Ly<%o3Π1b\Bˢ ! @KKr0Ž ؄a9&[L|Oj&^Tt>䂺CWL-G3xmHkyZ:zf'33b6ĚA>4C"G,*>rgeyЉ!FA{`fJ~/^̦% yb¦1`i?ͣ$sNq w.s)<$O1h|i2h$ً룏7~Lc~x͗]r)>:M(*}`[4O^m,F57t%sxхrA[ytĵ)d\<,xX$b 딨S;id%ۗ3*еfK6+O! ͆u[clk"!4A.n\cےm6$ LLLĀ6B{BaM8sW52oT$䕬[۪῍pCCeyGM>j\@(n\r.O=sqB`k ~r cHܸKx1EYc'5F?qɳ_rD-?!\rf.עA 8ܜhCY-s>;KK8'Η=@o;ŻknzzÅxK0P-_(7onkq"Sf) +m/=bwN\rYR!}ywh:5s"cn64̀rPE٣ ӝvQ;G*)λ44a:0?WoݛqO867'93V߲tOiqa* -G9]&vw/BF!.3 I|lq>MUϹc֘P40O$V *U=j⊵j뚐8RJ ]"lO3f2/#p֫<餓yA_<ZQoY3k]ʢ5? h/GŃ]`5aUH%͈9;Vu0B_;],|Fsț=e|pEa.t8B3iΜ9"Clq{@*D{,FN2Lz?}l|1qXtX-e#3ٖ.uO=tHjmcn,riCcѹC\gL0 +:n2 }x8GcC\i&Dd`Iap`#~ﲑcM((\^WU͎M0 '^:nr'^F8"R!>WVH}g+:3w ZN2NA瞃<!6Cyy9h6/4zP4CU_*[?PTu 8ds03%kݱ(GQ=\$JI1ogckB'No93nL)' f2#kfm1h" gn63| &#ܔz=цS}' ر|镗 'In4v#S!H?=hԠIH kv aCR )>7rWasmHE5iF"1>,QS?te'J(nM]S`Y4/{N~OQG1-3&c]{}-N+S|m bT%H]z S&.3mT_ٛm/=p`dkD5U6{׵nnDK`@`aƬ!EEn}.h$ÊQ7vkK5Ҩ뜎LOf8, 0hAۈeX2!-J@OQRZuM}s 6LYyAÑjtPkLj7[>P 9"k͛ʶԇn% 𻵲z˦N!Tڴٴn6|fC >:j?0C&K` kZ0ț5ĝS˜;dP$ T"&7?׷dQ! E`,~8:s1]qrɬIbTHK uML+$+QH_Sٜ6哬jGA;M{8acמ:ҳEmE06tX=|Mۣꎶ/ǒKqHdU~KC>=8?$& TLt:>MukOzXz2h!w:AZҳN)/EP(ZhJ;v!Mŧk/{7ofٞG$@N U6**f+5!kf! ٺt%kٮ@Ϛ-'<9DK aU} >alacDɕd!"ݚ5kd0xAK,2˹$T'ZbQ$_#PBӌwڌ( *Ԥ_tausYGv6wb]rͷ_ y]v.-|q?E(x^~ipKɈ|@Tj*.I:/i^w{pLed=\]3G{z]rԛsOu-1?]GsÔ|yQţi0'  ÇM?m:馄" RLBz-Xckܺ5緻]$"q|׈B4Yμk:PV[zN")IƉp1O/X#NL+/<ސa29w4bq__>ْAB:a_?/|e*uN&aJI]usi4-jȒ_>dAg69 C1/B˵15_96GFލ SW1!> H;{ƒ/#?HHŃj3s\:rc]"z(Kq%H)ey9d 6í aA5`MC\cZ3+5y\YV!EI!?`F%YةEG~򝚧iid#~(4lrYD֒C/N9^wqor̀hsߟQi0΂wۯ\U,&;XTwxԽOAnxM93hmC.^rKC!aWƑt<[~ ϕ2Q 6EdSO;MH%74xp/O&CO>X?]|1_t"ÿ́~ |%5#/[>f8&?bX*Bc<&x]>l NJ""RК 3ebÿ?e,[ol(V6Z%UO0 fTF;e6Sc3묓sFڶ?vw~o WQdqNZvrc1j-]V6k&sjnwK)k7T 2N9btM=4#=ӯdQqq՚ cF Kyg]tI/YoŽЙY%S';`۝v1槫6T7Ъ'F|G9FnCkqc\y tnfj 5z9*̏' 6) 3NG%Y/ tFG׃uN75+S{8(> pZB!(4(>`zѥm۪86c'o ""z \KZz]c g0U' 4Nd:E⤁'N+կ-ƍFSIM-82&$|11gNKAYbRl_g1Uv M Oz&= ~z##,om !4; IK='{D:~.>kLtK'5$>dm`iSCJ\G׮hH[j YnM TP, ЦVg7mf,b>!C)uO/˥4Pw@Id,*t 1ƶz:ɒ`SᓤLҗO~'s ǟֿ/apbgtYYv-W{FnE9w-Cå\rf,fvr3>} 5)Az8^ O/KS pb '|Rww@i$Ұ)DfLR̓'mϿJJJD&Z)DO<#F]"$J-<}BB-/?sι꫐h'ς˷N3J@d%ˑ͓|1ӯLf} EӘ=Q8zDL&S8.o 7MĜ)(tЉZ>95*Js8;3G\jɥV nIWX}?s)8j+tsE{jn Ǚ̙]ۜ]Cj25M)^'+v_CJT K B-5^&Qƣ{(H6LKh.K"}Xq[N7uӔ=`keA1dmJr' m.1)(]Y:;7@8dkfvB^%˙[m@O'Y/6<:B)êb$g&ƾ}d>R5YS-- rk}.1l]XU5a봣 lp+n-*#E0ºZu;}*rSE@a4MLF( jYZZ^1sP)+}1d튅>(鷙T~[5*cb,Z嵅ͭ>W$9.Ќq+Eq K"Q~T}]ʺJ|񲯖a)JNW[1ry'L M=JOide˾ްa}Ue ck6-=tА&LXVV&)jwSNN~W_-ݸacնm~vqL*𝳇lTY!\r 6r/P&K8i3grRI@^+9Ie"(\ V:PW=2|Æͭ۫MŒlR_0#˗R ˣ"e+k7kB-1Cpf?;\VU1,ԮYƩY$+SۖƯW}޺zo@k YrJcd5tpZ_)#WoZ:յy3LwTDBAgg~y4x:Y"#GnF"kڲ CcK Ks2r0hVF= SBbԆDֽ3z{*B?#@[5k'iT?wzE@ С;碩 z0ͭK6Vq\ B8m */HX=I[9\@H,3 Ʀ7nfꌠ*Μ08Os#"ra8,&K$4.*3 "yTN%>@d6X 0!"@twWma=EB|cG |j=*W /K=L^HڣJꞩHA0`/PĂ&k/K%;dKŊQ%.w;Q wQX+tbX|A)ȋQ-wYGLXk]=zcR<7WH{vV, .z0ɧD]R6vOHB)5O!vt Kj2z.=svH}QNO7I2 v(ؒ6rtM(տkBgC!ЏիvݏGeM!Py!̑R, FEh:SzDe82@C.N휤j}I)%Kkz cQȗFݖpyY)'ql6R+]%zp#]Y I5ukM)qdMK2Z^L-ޗ45}&N&Q&CJ8HxUգ2P(NpC}Gg5}jBUG{xSuq-j'y]"(m/J@U$Ĉ?9j &KHJ0~UDB@!P( BG4!ھ#Q!k>7Ԟ8u, B@!P( B@!P( BPD@;9kUI!P( B@!P( B@!PTʂB@!P( B@!P( B@!8PCVU B@!P( B@!P( @?@@ A%,( B@!P( B@!P( C%>kUI!P( B@!P( B@!PTʂB@!P( B@!P( B@!8PCVU B@!P( B@!P( @?@@ A%,( B@!P( B@!P( C%>kUI!P( B@!P( B@!PTʂB@!P( B@!P( B@!8PCVU B@!P( B@!P( @?@@ A%,( B@!P( B@!P( C%>kUI!P( B@!P( B@!PTʂB@!P( B@!P( B@!8PCVU B@!P( B@!P( @?@@ A%,( B@!P( B@!P( C%>kUI!P( B@!$xX*B@!P( Bg,=V_  GA?Ϗ`_I:AT.}e7aQYB 1'x_!=5r+F{LFB'P0%B cECTT(bPB@!P0YVY-=hhqj~ISL0iRVZс,.= x,f2 r`?E#p6+Clr;mN#asvd`X[K)>eQ+kyRO>?~A(n! E\$-V˼ +畧^U̓Ͼ'e(6H`?C4nbuM7Mwg_Rߕh)0$c6Cm(ĶԭZ.`0LV,Ms9-#n$vK$u+ ).,t9NJtZ0ˊB@!1Fckkܹs/^Y~5Bg>`Ȑ!\z۔WZpcF E7y%M-kgL/ OhU! ~>ߪCbqsV"gU[o(gBjDj2Z͜Wx'f:]dloDzﳋ7؟Y6?noL+v-Q@4eҸWU xflFbcBɴeTyFWdY !i0AXY/ 6!Kkh1<{&M8G8v3䠿z~d_mgzumyÅ1Jt( dVo}hW˟SN;Y Ƣ1q^F!Lza]_ t7Ahj6i4+d6[0|r&t1~o,pXdH -*[Q>f-lDfl3/b$JbJN <\Xl6u]~fD":k8>s|I%N0,=c~ոRIc b?E[;*CG@IDATx,ʺ5 tY_X-֓0N4K!p! - ?|P(n4lSܧз`(>F30w=R ZQr= NcFH+7gE'O}!Ȁ<(έ n?owߚqh mԧ)˝;|,}i d6Dch,a#z͔␭5`51"qy3FeJ[^hCST}!aH$ʸ?'Kaz~Mٲ9`~&soSl<*@7ai,/*x5- UUB G@cz__~/~>w]`s?D8$AU\@O3zKϾ>ozs܂JXk0oUkv[,#;_k  ͎G(vzD7bO/3rc N,ƞmi"fY΢f]ogxÑIfRk4^ Kږ>-BmĻ+M6̮WORm `,Yzˁ^/h4lZFwݾ}{QQ`\%TݏHE%hUoeinIaVi19\/'tܣKӞ_Z}&3SVJj"z }Ep 4 Z>@%#1m0B?Y\HAgnq^{LO"ʽ4Eufq$-Edoz_{7Xŏ|.c S>z"\h; ynӂ!n2 L5qtL@W7o;i%%yb[Q60SazGoum ~Ϲyf'k کB~ڛ! M6_K46i+* 4#ԟyX,jaՏB@!  +;Go\elMx}blp1A6Њ9˽Gc>#8xVO\07=YG GMMNDɸ9˖ 6{.vi@n KШ\n'p qΥ+]jjـSVWzGK6E`ȥF_.F6gvk&Mb%})\AEaE򣕤]fyŸZH7Qdބڰ&Ƶn2,TT(jGF@m<XccmH]ijjSN(vxBrhKsKk #4D [b=Dմ9ƻL=כOq҈\x-bѥ]E!8dsM`>L@g!gؽ;pBivbޛ$PIh EZw_o?AR" ojK?Xzi&L`e_+u}oteY@G 'fūW< 8ajyJ0M!dHI`GIv71qXCMYЁ@3Z\(S kjGh}'HUO>`GOh긘AtHPY>j(cpһD;2@krqG_xnyK/3'йФ'W%b #6ƅK|!r lڂ9s;]UH4t-FԀ h 7z}>RiτnGXͿ̮(9ul%,rN%DSp[65mnjWyۃp s)V祹ӆdv[k*9oQ.#^M6h4 `1۬Þv椻9hqb\0LhE.bC-Mknē8F8b4Q-{RJmj\IyP9 ,ⱚ3ʘ.Jw{\fPؔVk6deeq !ynqmZP_UBKY^"Jů q g4|]UyLf +HC*Bv7t" )Qwڂ-!t,c¥ul%br؝3B 9pJ)ݔHwgHt8nCJ%d󲝃]if!"3ۛ(N|Zs,o͟:ain$˒2d*jE UXY՚o}c]]VqF}m9qqEHB*tJ5'5!փQCD6j0, dž-7Mx*,BWZ9}@ eb ȸ-/xpW4 @7Nwo7vbVd&K6rQ܀Gid\ӌFyS̉-k.z߾* `2rrK=(cDͦ-G_{wEH842Rf,;;|7y1ߒ=iln63rjlC#Ja'&-XWWlXxGgmBݦsџ`X&Cu_mquW6;\9\ I 4]R P0ZEGQ fLFI)!.$yDz$͘߶m_SHcQY6j=k `0/ctq޸!.G5,DˆqGV@drj Tm%RI`(Mk7ox[*Jji{l]MKa8֕34aG^vڈ19ó’a c/󳟃7~vyV\}+V8&O\VV&B =2禐ᩥoq@٧ XƆpڤ/ 1,kW?s&fE)@L*վVF-W4 @ qytO \Uv8HBC\{q*b}tٛ7[y3QgĠm2kD (.ݭw`Wȉ!Y#,VM@V]޵Ua|_\&ZT7֖Eˆ (ɵYvBj{ҺKdU_5ta978Y#/X+^d{ԒYVoUV\4A'? c}G|1aة'E^yP>2k쯯㤙NJ4/Fq*m ^)r 4^&궆{Q(#[}-+:lh29v&dV0Ƭ  &# ݰA/\X7B M,"Y|aGn6]{ !)LP]=Fȉ?^[w>Hs؝fK j `^"چp( jEA AǙVmz&JH4jvL"C4`#ڵz/a&F Dt4qF ȏ7m^Lޅ5u OjZ>l}@ތNX0dE!QR a;2YBp07F*pZ.((#aSx.iZ6KZQ &Z,BA^DC~!aIVH65nT^avŅy]+7ZݰLh[S&'*OErP"AFMČ"{Kkhڅ97cYe2<$eܽ BH3`vɡJ" H `H~}wVh^YY^:Sb1uiQ {:}Ti~^s6u,EEW(r #jbI\,7x!h)FҸT=tSz!ՖSm\Sp gSD c0!xFoHʴYF pDơ6hvWtTG/ >#vV9)w N%>_ R?wN2]ڗ?tKx^ީ}Y]Ϙ9$ ;/tIh|g]0b-MnC '3k|yQV 02# zH̴NJn5UR(Nܶ#ǔLUr1U-\VK/[6lo88OllNO9v2hR?ܴjۗ.=0wΜ/}:Y6oƂf Zv 3Vfq-ykS{X%"d^rc]并pCՅ3ք?.\A g ײ:,hP$%<5QcPN$/!?sA~'Fc{RXbf" Vi nCr5"d!Fɴӯ_ˁ9?Fwҁ%cRrەfZ~UaJ>i>&rra"ڌfEЉgA͌|p0+#~?cH_c߇}RI٢Xٵ[_7٢!!-MC&$d>"S{9GA 5U om}8kƸ!G}'͔k_qkȑb#ٓfY D"F!/N$"ʆ7׼qR|AǹB>h]@xD7h?KujÞL]JvgV@\wS_bʧ%%I.^y-D /HoY`A'Ze?es8~vDJKK_~.h$~x֬YJ+lgoEj/T0~HUD&L8yҚO7ԟ1`FYBjDPK}Q;dG]ieڊRF 4be8#1vIDVx[q:XliҕD)%ACM|Pk+_qdB]8KUeDkb_[[{g1bCq!LmS_;fE7:T\h}-N3o1Ȓu$HJ+5v|9{<>}US_jUrbQǮ^/G̚rT3=f2zw+'1hPW}yWvjC#hc&lV *aF6#49p"s\iM/mV<"6!'zws?_ ӰL&tSJ>2Fp!":ؑc`u2 [g#~#X$n0QYx=hG_eq:4zS=v> uy,fj? jGTZgIR>muᏇZ'i݆!ZI'U4u%WF\FJ?$Ic^^_aCc8]BKc-in)N4]-~c=dEʻl!M+64{DNLGoBD?^ OQQ 6DU[ ByBxjn"9S; ([Tv~ָG8Z BA=LmL8 ^x!;*..p_o gasSɏ[N8qT&{żv˾J|ˈ5a`\QgYSw92)ԣP.d qӏ{wT2 뵛HP)JOX8޹1.C4~ QK?Rf:rt!i_oم@Xv3~/guLF&EϘńӲZe+>vI yW&¨"w4k`$w"$ʷxwaVFMc~#J{+++<.DwCTE^)&MW͛XvF=zLlr)644ԑ$'wi Ic{$d~ů-[Yoz1lCO9p$HH8̧>u{SCmcsĵHȇ} es )Q^TXh׫YoV+h Nݎ=%9od[Ϝp^nOPMmz2dp?*ybCFV QW!=T4)9IqL ȆW|rkCPtR)ڴaG_?\- we{LUki"q>s$DTt_l]0yCҚ[CUXL|ݺ( G ?esg`ZVJ z"2.omKh(P)O"/D( Ź-_.lIY/D]fw@yϬd!~ҥO=c=ZO=SPC(VH%[>\[3bmwͻCB}#ҟ[Z{ۛL;g|~SB+>mGf >Jq< ->z4ƶFKK>_P&ہSRݙ7ew/9mbI~y0vz()4> fG >$Cٰ9os`;>o&dLfEKqk <"֭;]`]O,`}9ꏅ6Co6wxh]>i&+˶Gb v\DDƎc#~zܡ~y˳3q˟_]v7\,U@=812JjNڧ&.un`IV(DC<I|gڷ ~85}3)C,8y[FzOw'4BzȊt\8)WV' K3$Uvߝ|W)ϛ\xyvVfS]wƱ롇ՂU:(5u1h0,۵}}(-W!f0 ;\7-ց;Bw=(=E ͷ $\هr1UΕ--Mm(I5Y4}&};d\Ņش4WW}+?b23[Ћ%/wMnm;d1ni5s }b|dJBLB9* Yhca;%ß?Mx{P(& ;crt,mY}hhr*-͍oo4 !* +XH4PNƦUÌz4BeBJdU uec8ً"`.hąfVgttIWMzqG 8S=drQV-s%WqqiG8m̙.FyiӦbWpS i^{}ٲs/{ו%XMUջȈjYȤFZZEYL*3 +((h_跛MG:yD-{?8niO9t ~y_mm4z9ڜp'j L5hcEmp__~{2WI1шTk d!fɈ4z@~bv#kDM*x*gM谘o|~uNLۻRb#' O;p5_uʊovHOHB迥zzܞ72sÆqSqa90o6Z ,3Ւ^AJIM bdNۗ?;F O}7pxXrѷ+[rØoX*t3&HK(n:hn혯PA8bԜc|f{~3eǺ %fgW5B7USw̅gff_O4@駟ٽO;tEKǎ%%%hѢK|O=Hxwuls-̈uQZf>,m/)z6mMtxZmu5ъ2o˕\]+4&pk%hygm5ȣ}&Պ𚽐YcF:Rkꐌcb/&_+/L ~Gb4kU3^$gAgh䟲BN=T(@S@%Xh!+!;sj/u?6"uӡk;+״4ѺD!tиDM&NV6*w^;>Gɧ:w#rSeW02f!h8|G>ʅGw"oϜN PUX*QC зF{JC=_cm{&4\s  /OXXv3/)CgLzHzX;pvS?9~;}䌹ǖVxåcWU&?.8fe|u_ԆȘ+w)4LVkB>)Kڜ>#:LqڕCX0s?y[%IiJ>U0f;S' 4wx* % y !҆P`BO>w}^ݥYˋ\Zb\gbDÝW_J#'D54S(5/=kvTQvTӠ%WV ~͚'L;8%b ФW~o}'Mnza]x#>ƦҢSǹwKF._|GNz&KZC5$q ̴=h"+W%}߳Ї ˕+Wա>xtqƒjoe˗/炯 U+Wqٽ}c0y544lٲ{Rħ,HA)>>wq 9\:I(;(ĉ*MRSSC.)|Ѓh.ԅ4ؒ ~1Q5!J=٢HԄBzzOkT߮E6bB,#>+ч.sV*j47X@SD Rb*XG.@aڎd-„ &o̱|o(0 %U5J˧i%M0NL[fnnn>¡qɓ'O_yU d:|hb8FQ99ywuwus~%i|b2$..A%רQc뇘_+獈pБ8Qэ-MsE jRR2W\-%~iaEf;f1tly9~f:wSjx~qQqGK07|ՎgZܯF8Jnmh Xd=fZlc&g1(/Y xHsQ)os`W.X~Ϭw=գZ=yojlTTWuxȸK@ ^ 1 `(,LZ~E0G ̃'uLr)gMNH!):`D9PE0Hv&iŦ=2Jڒ/E e7}7^Cyt&Z&a G9Ef35~8՟A߳g~;q la(FN#<_Ӈ}C@EC6ZHXO: ЛG*lkknd "67c`8,i'Z=M)Zڬ#2kmC_M͉:qXwj{]dA"-*Zܒ5 ' zo8ȝ;BP]8j}tuY,zqYRQKv GCJgU5|a}dgEYvFFt_Sl3l=8zT=_jmh<5j>d^]a% 1vL0e?w>V苠1.Cϸ옜,6Xa}-&HS215n-H ‡|bAMCf=)DBF)vkԤPWYȏ]ck _t,sb,Haa(Wqj)'8@L:2=&5E ;zթj6D%NN:Pwwz^=>cVq!y=T슼 ?͗ yښlY85ʞi7DGjgi5Ɍ;I(jLH| W#Θ5tn6\)DIGvy|cĈz<|va'|w8!@4?5fy [ ۷beу2Yf9>L\NwvϾ06;hBJC獵DBZw?P(. '|wKKKqve߾}566r̶)CK.֋a駟.X/Cyy9!' *WF7{N7i;HO@7z /BD;۩?QFb\#cǎ^{ :4,<"19&b)coY*e'Mw5L>+2P,$Lpf,.30z60Eshklnq[lֈ@%P+;"]Bn - T>Y92#S .mθ-@B)Q op}W[C "C@ I֔oWu3q+fCMSRҰGnݶxSO=]56kssoE'+gRQ] NUx?3ee֭tXSDĎM $!iO~fժ5(]|hsqy͎9f#h45Uo$#`n mK''` du;l{TQg/pPF6:̖{[y\HzԱȨ膀aƺ@kC+m&` 5}pS8j\Pl9FzzT3`sX&?<1!aJa¢ʕ+VKfZb"U ss`ao:}̯ n7`h^nDjȈRL̪M1cSEJw{)2 3ۤ!h Btr=bHCA;Q;Px5[ ҩm'V.HRӐ}t4#Wpۦ=C zNgkHϠZ"V T$7P [შ?O&vFgo/^uFOޠuVuhGGMLLKqwGl,0#-tk~ziɚƸ-WN>3sE+=i\{Mjwh|&{E{; ~CltG澰lq''|=PEV v v-\XȦ})BS}uto??-G{H{tZv|ȘAA2Ryav;|ԿjOVUou2 $=9'_~ hX {*bMOaAW#d7,!1hKp:X]sX NwMM v)r>9ËvL"YVjBi;K"lSPb͡K 46 \XjaBrW?ie4&9"E;, LHMUU<;kGT}"`gh̋gDZ[u=IV>Ɉf $O(  ^,F;fڐPqZgpĕJ#mܔ)#Ë&isw'R -Ok%^Ŝ_XQG8ĬtLa#w@SpC' Xl`j&ktǡ12C} ;"Fd$x7ٵs5r,H]L>C!*ҕ@zui<4RBg>$C5@1 pPM^C'Ó7=QT(# 5,Xt$)n^1#RM Ȭ-ܪ7ڌܚ򵦕&sʨ)Nc-KT/g0+ X٨'d=mp%qQ@pv4KUUE~~~QQqLL4*-lW8C!)ܵk  )b.$*/3bU\Q1NLD+X,B5ї6DmEz87޼}{>u(Un:>G[)?JL8SpӦMfzPAX׺l߿5އaʰ~HtsCn#ғ"}f4q68N,5l./Կl^"Raja݅s3-t!{ROӅ@-:3zp`̞{mcu8w''oAcp\έTL2ī1U*ǚMiG?w }n1Yğfz{&7Yn[ncYo&'\= %<4%QZD9SPRsE#מS&P5hXQ CSFF%G:b-X=|vCU&lrBi+ILhĤ:&LyB8d;E&@O-%A|a,fˣ@ XZ:WnDH?o1vkfWh7U[WVZksMJһk&vS9kcׇM Ue7n jxjegzog7T/ݻw 7]=SJk[|{wy ҉}ZOEƴ$?"ⲊUmڱ ` D<_֗Y<//+bCOg[5fD>Yӆ9\@([dFX0.=i̐^~)[vEyK߹Q*!K*,_T1s}~ϔ3344Gw,ZY(3]"chFGEd&+ u ouyE͒)Ge".$uS'[G[YhZ Aũ_5P3yEEG$d'%%px7v,v.][h"C4c't@*Zb#B#V/;=鸣R4{^`W^pފJRBC6Z3r^g Qx s ֵCI@IDATw:y0Dc~|e"#x_4 ֩Fco7Un/ʟk&Q&:!BOȍm <{7q; qEk8yb„\͆N48Դ䷼qTr$Y)l\PQ_?,wDFg*G)HH/Ztn~#^eZ\HN7Gs DbƢ&Of jNj쩫=epqQ6+#95~t)d"ro/󽺱:=:)*/l∔݁dq-w `.֮L>kP:HgJPuH @{䠓L_Mߢ;(-6çmnizs)Ó⳻#qv-ٸKtAԿ $G-;GfO{zVJl(ޱ½f F"ӻa̜[\A 4{_v [ h"hiS^[/s mE5jĐ^DQ~']fZ^;0,~"i9 ZZ*j K*_jcr|!*joܣ]@']?Kٰg>?|21Z Й1Lk<vOq~T0yS3-&d?쎏 K`tr|!ͦNqVU}{SbOK{s9Ò5M=ctC%KKՑ;=uL띞WWQ1w5$aG^IPHl)&-NAVm{}AĠg̙zi3cŚpٝn}s}|DמqtW>f"{ɖqԤ;CHC"ʾx;|ITƂ,މcVzzԈN} 3'XC1v? Öۏ$[hڬZ2x]#,fT[E{J?z٧3zCp?х梀o?=J]twvP:m7Y" J^V*&ֽR=)fNd@tƟY1_f^Wڷ9H.hG{Ws|\D++&1cBMΗ>>)}ϝ;oH#Jfo*|!R065&cd%&"Gg2}-.WeuՎϿ-dsm:#"X,#2mx/3f TOxfI&8~}_=$hu O}XxeE%OO n7F;K~1MzbL7ï^+MN7rHA[[\I9y1q%ˋ'e'OvF?Erͥ]rO:0W}@sH ˈ )\,Y3O0Ӷ@ 9ƒ,M ? N 8&SdO|2{nO&v=q8P"Ό3H v:ڱhAz; .N` w=C0C!w+V@a׿5du`iО饥1e &#fP8"[,kt|?iW >hY~r=s;!ctj2pc7ml6DO#+W,Gܪ^xK.T2k 7o޽{C=p~aV}zЊP斖nᩧ֩Nu? ~m#H*nxGyy9Ӆ۶x✗_~sS;=@ HTvUfxĿoTvEe8@B; XzylhKXO^n< bDjDd$G8El3H04479"vˮW|rYI܉&)sg;w%Fbmmr6y[]}b" 2jĄ(6|.9~-^cIA7&4>0!w~~);+(,EpDJy"{APvlF ̺##1_|W98eq+)M{uOr} L.>B%kyJF BL$#OI9aȅ9u pBt'ؾFWt/6zgYɇ`qM.:*NGp8$&}GP{s LXhLHPkh;EO}5g2/Qu](Y#&+޻q˞Ow-9n]1q :>&:ASNSss3aN7ވ!ABiW_}Ex"8pԩS~iԟ1TH.#!E!'9,YHOT=-^djzk_\^۷2wD̰.#!D@=g]Q+]-I:rhNڲCRyquW;=*!ɀ<3AtLmzo]iVLY}2Qza(uwUuw?,aZSBİ,ű.ȠL]zW:#%g^q;PI]]}ww}?[-#Q lf&-5U#JkZ N8Oh;􋟟DbTHsj]Y":F#O\rloފOoI㱹l{wRF(*לwHdM7hNZ_H.z םar沖Kԙg,ܰfgKCFT4X"gffĊ/YZcTaZ?a`Bt 걭ϥ+4(nb8}JQ]94(iv7p9rKlY ^Vfص3ϙ5IߓeU';6lBVq`Z1.8*/v΄ϙdQa]7.Z/1$Dp]Om'fqIzo2Lt~\8 ѰbG eӎ`ڃD~a4U5V_1٭54fP5>C|"HKKyU76 J$2$&><ᘫƒj^oᙙhZ\ḮƓ2`@E#9EpڡT&Bxpȑ\=Cnr:PpA<`}f%“ t^h|";x>:6ޟA=QUd6aDl_a+la5C^o'||l|؅<$MViQuOj󫯾8ղ~_zqqO8ovRb,ua/ e> 1 506ݺ^ߚ{ WJm ]j+-mEm-8ːtnqc%u.I'TkJ 56.k(hp`PeAI}ncyÆtZy鰥sj[9$iDN'9fE ڜT01_ȽdП)t /Q4dFދ{9s fC#BČ<.-v^u qgc>3DƊw߭kȈ%.щV$ ' eV}wW-Z{}i?b#8!X6/.-/(*18C9MC\"adN /{ee'.5,+X".{iY}Czc"D%B-]fnkyE=d8,73%j%1\rc"%xwFڹiYΞ>uH>aqINrJJƔAM('(K,K҄rCFq11{3ÒƆ̘Xwd7M)J x,kj+0G Ֆ[OaWQ_f'8$DL+wq3Mt,;a6S woӱ,`7-s6+-SZ;k> +ȪwUY1\0k5/W'M>gƀKZyZQy;sW *S֌T7V)qܕ ͉PN,wqD廛fy ;JiC "0P]^v7ϙ8,#=q7-uqÆPgɽc24J! M=u#_W[ ᙵҽ(Bކ/-{OIZbTyFrMq_^]==%kbM}]X矮:j؞@B:i#JU3Wyw-8ښO]k,rX':zM",t>ñ>A_F e5D%!_Yױ>-Em?9oj2l*ܙ'{՜dsv+_z\W_|ڗ3OD6ޜ?YИn55|5{ɩ}s%CX:SEjbrez,֙4W4l۪ܸԈܔљ RbX͢jmk4Kjp<ꝻKjVխhd9Ynl5DQ+&*ӶCs b5D|vB+¾~m~:!ȓ0ĜٳCgBXZSSm۶ 6nD]tرcCIzZ(UA4&R8:ɱ"}9FWſ#Ak_bh ǡFqvщF)xO:餄4\BFzz睷N94Mؤ~1',`s&8r '.zi{0As 1wq Ն  7&YY`l駟JvG3f9vA(iqʌ80`qf0aEH9"ز3g:(+cbd_}kЁMIH:^oyM݆m;WYlfTZQd2^Y N̲Үۏ22SW~jopYG=JuPnTl]`Uc?g<|zK =1 _d9ƒ1k`۹r˦OB+ ^Ld:iM?oSh"D%NpU^z+5=8E&>MA QVaNT+lcIh"T3$](a$\ȡ#̔)׏=cvW/K//:,WS7#zЌ3gD*q!r zz Pwyڵkdllx#F [b5kI )Wkڗf4.7 {h dM q@lf{f>}pj"voEIY 54RgȜ: %}cdv3ļ٤[޶7%N8wl_@n1_p~z 2"{Uc,Qx644ः%2U>f1z/l"-\}鋖[&RN{neӱG~j 3ו??DFh1XVGەw{[l" Wg/lᎧ^{67uGicm|[IXɌ+l$2{b43PFT"{/ 9khjF ;R^j’5;nSwzVvPм dmG@Mog.GZ MS:d]3)umg̝3vYHR]P2桧}(RMgJ&Ȼ_(Sa p_nWYS}I'sGlPjMgw]WT,aR"h+=]ї Lv3”O1n pqۄ~rE|qFi29 TF?:d\h .{ ƄwaaIi6sj#'NsnZ %98<^.bWܘ 3keGgbyVga?1Ց<5Rv尤$D:Z ɵ%n:G`E;vWE u0 hȋ-)l]P6%->+190)`Qv7:e4 \P\\^Z<:5zx٫5;l0T5egGM@RP8)7ʶ6w& a~X>^QZo:죆QktY8M'_GEhkk* \}}!Qh+[WM!.oa2v;qt۞]bN>^HA&4j1oxcXiNqt+UF#>)`u"DQg$ Z*#TJu;gŤSӎYiMvd ŸMli0ѸPׯhJMmSRRdҡC=Z1T`~HFd6dVv4lV=/3aLVV Rw4l+wqp>x#wn]Zʆt@3݁`qժ!s:U"P@$SZڳ[l X!C!<3O9EͬQ'ѓSWW#-:& t'SutcK:G1fG"G%990R82hn)RpPeU_"X/[,//] pٻg':2\"*>r/>H]&C sXo1ӯep""ht"YBK$G1iGuQر$b-Yuo0mIҒ/ sXR 4$lPL>+9E:hY=Z 7Z\p!EBPAOl9sQGEtti.Efͷ >@ELڎjjj?Yg]w1rHaD6Đ0ϛ):u>e\r_(WMkY1 ,tWBs}ꫯ;NWk(ɡ;ZV6wf&$64<aDoot5cb `wq4wA>*"ڌN?QWDž.&QnK+?∄XNY ýccRX35c"c"'L5^*g&&z%/+m5a o{ZZ 7y,;7/=w9E IxѾV9'Ƹ2G|2%5־i(ɁC(jKrFC?>f uCU4FWh"%PRBP.&ڢTS%7:ގG`Y59!I]!&2C ]j1s]^F . ݌"-As} !z'ɵ8τ'A!PUa?ńͧ<_KJnyQ}Κ C+brKVǛ~?ϰ4'l'8pYeG9ťEÓOiSI{}E%#1(5A&T l-q5Esiu<)Rۥj?[ k0zM{9'-$\F[A+[6ާ|,h3ġ}ޟߨ rDj(m_H׹Nh+ߏ8E=%D ,wkj֬ m^=5wd'N~EF5:M--!i酷4P4q9>I(.NxUU+lz(EmVH7Gst -S+g *JwGvgͦE|ԓ9Aڒ^TXg_UF]a$Aȫ#'Ў/yպ-<,"g֩}{>vﵴF@l mliNvn?)c"N׆ʂߗ`22Zq}5$hR-fXϪqJ4NIHs"rZŀlM׷/^4 R L#-qܰs!&&)!1XU ةZu+7 u _ n(V~x rn&7<.ǬM լ]K4dHtovU?yldHXyR9,'P /P+USk$2!cBcp߼qPeH߻bծo&곸b/lvY6f4,*1WDi2eZҐ v{ YLtE\[ "Ci !#Gτcq!D;QVlEo4+ZVBQRbGCqRu45BDi*7W4hl IJ ehLz}M cQ e+n:SʂP 56"ƛGdih8CskPXwF*弅XX!J,0,̴fnZ1m*+hJ:b%sl9-9ڎ?hu퐥D5YYťy}B! o6/ X;EMO)r6€HIm[{݌r-{РAJU_O4y*إ!J>c!<5_믿`R#/\qk4n@oٸqSw6u g80d25 +ڱA4|}z׊j?9(ƴv|"f#?Mk;jg[A f%N EQH+lz0P/ECx+34DB1fwí߾o8":,/; Uls$?銂Yqll09rU0D夏0rR:y$ӆt|};wT-vB@#S)#o3uT"IG 7w.;IhGXDWЛ*$<$iUVtH TUwMqlnv3/xRhd|gqG?< f"G%:Е漎`jR(0D| K^f0O8haY:@?)Ю_ sV#!q̾'V4n;yDꉣvT:_zgs}c2)]5L/GCV.;B dn)jgJS#sKZ5 Ȧu&)ˍ?fLhc_˓$@XE X9xW^~듙>T&=2!n?vzFcO~Q) H+|5aM爘ˋ>XO*#1#Wĉ>?<`ZdnМ*r&#ƙ>_nWht)]8S4޵G3.6o޳zYf 7_~kMf|łWTm"0UPM)FBG|: 5 Kb b UI`bmr=?}b؇!VEeoo{JܘI62Q7c6>&%%ji}Rl}r _9xxfZ3~QX,E{^`nqr6VV\x賏d j)&Q,d`z?Mۏ`bH? 上/0,&eѹ:Z+x VoYu;ZYƼn=2XZ ^qG&@(Ƶ~or"CUs侁k/=3b )2Y RER* 9lp".ѧw [8#1 @ /1glƣ &Znu$8epqq YY;uJs[C e۳qnʏ NFÝ2e~`o6Ffp{_zNvj2-uҠ`~x]dh^ bMTn~b`9Mf&jeHYuGDqǪMg)ף1^ H0| 9J_~䑻Ga]`twzkPtYgn]!W6ޙ55/gp5nڵĭ$YW'̙a!9(}X(*=4W E8C)XL#{.tnC㞋e} EuK} >&]Ҙ[GÄ]Y!Ȕ!uhwU?z!LPd p3/wQQ=㸉4_|ŌV!,O;_|C~rh(@ 7}R<۪^^^2S%ø3O!`Hf0Y<*7E~Uo|d3"vi{ɂ海/[}gPc+0ht"QDnbǏT};j$!K \vmQfaB0T6Woѧ,.c D,U_t,x{gԔwhray%neoUd m; Vn{'Fc>@vɾ;;0q:FҮœB)<A{xi^Vݨ [voؼc/|~SL_F6iz,mZaoLGYj'iF3sb Wý<ީƎP_$7) FT0Ac2ѹ|oW^Hӆf@Uh!; bJT& 2eYI$!DZ8E6uH`aMf`4Rtp`$5,3jx_=gn)VlUbKQhMfi BBFSdՌƌp@Pi餴m ʝ },22󐨆5ޜ*O85.9~݆t2(ݻ{+oPknu>mqBzΗwdۮm:{O 2Ev`3H.XǼtx1o푊zJsXV W2~J?$<@IDATSZ@Y:l5y7ƅE#Uŵo:Yb#ejv8E5&iw'"T5`;w}u~TZbs2]@ mTkd!Oy' ZD>zVu>!TAa!rvD|{vIU $ KxB&T4io#;hLYm]H8ϥ#q fUf_)рRអ *s}(XJqP KrDV{Lx'}&#AiRM*)RMxXQiiAPOӦM㎯i},b0tG"!mS|2v*n_ݸq}W^yuܸHHHn\4ѧ"Ȃ |W{uCiʐ$G>Cg-BD`F4J*OF @l:3r;[[=mټEiz>Gmvc~Rrc܉oAFGjm-.EKTvR%R}~ %r5ŤuIA6H̤˟}}uȠ S`K^^O.zɤ`QO<:}XM u^|oH9{ 6p!B犊 =0"nnFþ~5矸MʑϿUn[L脧Lx3ۮ:%[INڥ' Z&(LM|]!=9#&Sk˹b9w? ZTa/"Vw민!ς+}:k DEw{{ N&$$8UH'{|5>YS&zݍzoƲt$!pK]@*EWP 1'kn  :wѩ^XoE:w!}Ͼ69&u|L22 Ư{k}gf\l}ʄtQՏu VOX!k@N Dx]n Gxh`n:}59%Vcu>g5arҾȹCRg $jnYY?YFߟJHvA5Ceg$g|cIu4~a2C/]̭/N^¹H L4 SKLjGBV5~锆U%')QP:I*@!,PdSWh("^ UVb "8:N. 4Pal`3`CR8Ö!aI8Ꮖ:Ccp̨tj9p\-,r۷f:frAOn4dboDD!& cڳx捾dǶǩsrB7ŷp#gZ[N90%>>F G$tvOJAԟ5F#3#x"\\}>P|pJHRJȢ9 Y#+Fiȋzt+"9S*,[W#TRF8rObٍ]{Ƥ9JdLKA* 00;9qrEpa([(X'M>tRi?}i2}Ih fM);*I9hņ2&b9+9{^QBᐤ|4V-moI͕ #F=VS<"E3_wz[1`6S 玻K;dK2r\h#n9!2PiҌUzA|*TX^r 9;;y␌RUhO,I04t׶8\Ayb#B6hz dxQ+T@ ) 41ֱ'7}g'Y;=?x&Bz{hО4RR8'Ȳ(ܡd0t=80 wɜQss6Up"tE$MHO;Wa^O|:xJ.4P :2Q./nڴiue\})4q^,n)*:*~\~ePc֬?$5-ރ"0Nl~ oĚ&~TQ=fO:09@u@%966 V$BD(Pmf؉P 醩"I,av8Z\q˺e>('pҀ}vI4JA%7-.Cq0CY69`IP SFIzaXެ ucUP;u60CG7wWR穬)6'ZooSF_ʞRab[ʁGXt+6dݹ|x="{gϝ2܂QB)Ɖ%6ɯڭqܯ)plFt^z X+VO>cƌ:sRˆ(њ)!f/VȣLu 4nOZ.QiTwANED4. ҧ8n).!ӫ^{0T i`剝 W(Ơj7}̍W]HD%2 9 #jYD{"AfMemp<^9 VmܾK Us6[/b. Y`E5sɎ@hKAo>\2<>j6om}ͭ\xI394 EEkzŇMJ s˩TǸ/BuGց̷Edx_Fё4B#A 8mEՁ"B$L5r@ M~-J)mȀFW[ ӹQEICl=xz,~T^o4R\aǙ \Hds7^dpzjk+K)(>1'b~U>µTu0W+eJ+"c#&٦]}X. Pr=97l f߫˷mbYn80~‘g%rtD$y{Ej")BH ӜSǤ>qL\pw1fq. '߉Tf GyYo ]&4Վ^ԄW~S͘aI!Tkm d0ps1#iȗ@= 2wm->ϨሞK$]S ]KiϦ?Y6Ul1+7 Za$Rs6@Ep}R;\})~NZMJioSL!޷|o`]@É`L͟6swDo;2wqzTUZL.6[zH,u\$|[Wll}a94n=7 l䩫B” Ře A{"?O"j-yhoF4- 2n}.NהTK u%#/,8 [|s&4TxPB!ڱnmm3xj;HeSUY Bd֍66ހ qAN;K۳g/i]|Er%huuǐU$ Ery*Pad7tòew~M+(e IdC Si1c/bi?0UL"60Pr{bIy˶l'TN^8j GtuStuD ~֝e UsNVNR\kkwZܗ_AV4hCUJ$73/BJ8rU"`:bjuFEqCr4 hli{*"\Y}珽IGD2lIwq@t[@'^!c@*iiOlٲ%Ma6#ed?]5i].b ~t &OGlP-fq+CS"&uӋ4:ֿj[W:jtZA9Eӆr1\lasȼ6)J) Kk"$ GWPɎJ2Fw&G) `p}c3Kq>(Wt YK'"iS,6׷EkK_8m֠ܜU;Tק"2X@ǐfh~ԍ3S8ugsLk렌6Cqm bL{??y#OS|=+^?_v%ӆOTc HJX IɶP;km<-~xB35*7Z~~~v/X`NoNj4Z&|\tK+BNS}=[ feLC; -ͲC>)DS[CUE+.J09*gb۹sgZF* L8f۪YO7եPACN9-zه, wu EReF'wuW3*P`[.xM&M|'qDIpٲ_~7,Ztf5463tsp0qСA🽝-[ڦxKVL->6ѳ02br)v(ի:]H!Ƨ@dapuÛk6UR^;%3E)@R輄aHeg@C 5 %MɎ j}I\COefNƔ(kӖy@EٓߎpN,= "k dWI=$EPҎbh96M ) T2F<]lH]K'!LȞ&k"lv$Yy+[v߻f!3idAԢASڭbE9z_5nR:`>$IMM]jrhZEqZ=k"a%B쫰v^'Bᚚ-%GE|N3b#K#HIE~s>ObhQ㦳V=6@dAZMϾ 2P Q*fpg>좏8mE}H4֍[1@i>n=*oQď zL{W~!n171o1ٰސ{z u#Gk/1:;[Ž$%O(.9JEQLL;mһ[]JeEb/WXJ v b/ȃ rD`ZHVxo(m^GN;83#1%V_B7rA%dxmn(;;S޲#\#`T  hE.P~aY6*^i;tY~ۉvǢJ)4w(84)K{]4aRLĉ>' 3͖/J\Ǘ/X4:/JnʬOdd6͋O:mWοfz*(HSCw/kCx~moFqŏ|6"JІ̸jop(s*\().ChCu1\c0^FL챖/:n6oS[\6g;v;k5vkjt hR1YmjD KbjX0$7-qRW}J&IY~WVnj@H5J zf5'$~}ܜ=kˍ3!Wo[FYˮ]:6Vغ7W5n+F3@F,& b>}a3!Uko0422䌞=|~x}_TK"jh&@eB K^1^d.:t̑\$;\խ7/x,<4)-vmK^߸z?-.1f;xթQbEirlh_HC_zjs/ln.;tոs!K@G_OϟhyvOQλRlof1@C_Ra5ɩx5@cva qE$g܉*zt0lTE꩗Бç5}ܝ#'mW|藈j cJFGNرcqf⁂xw\s5ZKB8hۑͿ䦟}d] WnQÜȥ,bDʒB[38Ģyc r (S?qBǨPUK/j:qի#lm(2hz&֭ģFɇyPqzJOlM]pȑ2Z+B2cYJ]s7b;1kAņT3_z:q>U-Y3gμ袥?-٧1[:IL8p`TQ/:Jxs"M[h̨vܵ{ W]h'2 gZ?.x؞s8Ze|̢8)!(YL5J#!u!C39\fÓ+?;嶂Ň{sjL"D<[67ԘnvTSh7+[,"#Lc ۜ1QBcѶ'C@I5-%An.?G"`d~k56)ƠJkZ۪B HZ |lurGFT3"ԏ $R~&oVT-m "l+A xd6i'r!f䦍NteGc/&ć$Z8ߑT#!~AG[laz͚5xZ\\\VVK{`B qݡHp'jF{L#1ca̡ &\pFӤ@[%]vmiiis3jN;h.@~ -ϧ:T'+J-%u>a+# tt^:^xЏ"!R_RriMS1ijfvڨb$Ka嗯~륓,BtwCc-9%щ|H>8ۏG ݷܼEĦA;δ&e[BܥeUT7B)o~uڰfIJa YhQiWcW?,w,^'\nls#Չ(_ѹ1%ǁm|-*9晫\yo\sFb.5-gBlzN>7G/QѣrγYXƵsMPBpP=ea[ѹ) b~5Gr7$}L;ʧ@e"n6'f'Qv\}fC ,A BU7&5`$:*F kZ׷zʈ9m^_vy%kȟBIj]>cp SCSҒ>^98}xVRis}-w$Z\:I`^[XQϲT\h ރƅ1Ek0MՇG;elgXs{}p_r73dDnj>WvwN<1('OeexQ%U灥?嚛2 FxOnBA{2|(Q@0*ToMǁ_Ǩh/pJ< ]R0 5XRQH+9.D x2:,X1bcv+LG@v,,1Cy% +؁/[0,GyŸ9gx(y!>[~ꖪ)  δ4Г2RS j_|apP v<46CОJ=߰p8=pɽFqbٌA 12x|PvrBӄ9P8$)'ΕrK'n0h֭!"43ɓ')s1tciBo?◾yh0bESr06x:o^6HuGŗxh3U>ϟV<'ZAņ;)3wcm0ZFHPjfYN>cl#u)4慔 asњŃ {9g˵jwkhX't$Ʃ({B\jI1OЫyS[ԫ3Y)iɲmao+m"}U0IlyDԖ#pZg$Pɔl}SɢArT5s)%nhj,'K(2%RXJ)z Й6mUkwUE"25T]>iT޼9ᑋ"B!q2`,m=7d_/. {}8tdOqp駟ȏ~:ݥL6~.8amhvx|=z38sz16`{ H06eee_Ͼ8]ЋMůK 5daa/3TU !Db%rmvFouяd?_k԰{Ւq]0;)zxHu!/Tb=i4N.ke齵[WdCѐ4QC!IͱW|_I3w9g|r՘e_z\wU)Tf_Pp~PCc8z+5Cg`m7Hf "5=/f} 7>%wNbaC? h1jB|i &Z]7o S\׮#>ih7幔kttF,Qtv]w)f#i{jCM;$̀Ȇ O}Xcq ᮄk}MONOJ8"*!}t!s=qGǐ䯪gQVE@XgXz\qzd3C,)j2&ڎ<"m8%u?-?v”{;8=eϽ[Ż~'?Z\kM; -֏LIlMq'nvo[TsQF\“QkD,^RDUY`Y=*HBatRw?>YZ>Ӓ{kEUN=E9L\2=!|=:P͢eh6y^]Jn`jMш: F7ti9~"ۓ E,9>Ր7qąsμ`XUeM4r‚kιHtD"^oD6-;߻rԹ#lN Tx_}N/\[aXF ooxi?5ֺy32eUu53 ם7zMW]LqĘ'c9s(2lgYKS_dMRZҨՆ=U=f{K zփ_4xh'%~% ,!ǘlnyʶ3'D`qن |lFZS7uĉIIInOfҥl۶Ԕh *ǜ%W!fʖ/L l}JLZ+H8F_J)݉@JAB:EZ׿lJFֈÔ0^R)!f$jٰ_P-Y}Y,zVA+P20Eeiqp YOd 2}W]ʸ*[!{&g?R@?9lsk+'%ŋ`1ظ :K/A"HyN5CC^^޷Gy[nAv?c (Oy׭K_"nF-^kCh eMw<㋆0k֬N;uݺ=g8%hfrE}]{}hWXyW{Q2Iba- 8UR#;۶@kdt 7h$cSu`v<>`$܉NsE(A3zNǁ:a69Jlڊ4lSVZĄ؟B,!Wv(d/gÕG~Fq2bH(i bDty$h8O}c c;Q ͌^p(4auFvK3a208*0PۿM k myX8lڽRϼG2Գt @<~edM{t׋a< P9%cbAY CR,DKupzOLn]&T(FD%fKufkv9IrSh~*t( s dMr}7_b>Ȕ]D /&:/FksY!ndA- b(o2' #P(j NKE2c"d^ز̓!1߸$SVT"*Ó`YUoZP5 LE jœfCyms!o89є5T k2V7TbRgfCEᝍ; BGS]$Z$pk1'[f g:=ݳ\%ߦ=zSeUs 7h3pEXo;A FŰJ!?q{-Q&K _ &#zBjjuJ1AdR C2((sΜ9C(w(/px4FQ~J^FYUG!ZrH+Vo'sϱD9QQıDJހws C !32d݂YTzS~As{nKg=tݹ/Ո*9+ؽk0=Ԓ281*"=,g[48 sLݵg%$%[(;aʡ :ӦMEǟ()9?11,Rq2 VDf @?̳7|g,$1bԛo~/`>|UV?_s~mHEF=a}Dʈ:6~wu5E<+bnTӍNn(ȱ7 [ffظpsrbϪoaZ緘 [%Tj$]>]:ӌ[)fѪ&u)#(3:" g.P7Dfj4Hb=^o?#MrTFG4 rvl4;"g[' 䯭>jt&i-2^)!SτP'&Z|uw(c<%LYB k hZ=fJM/G1/a? qG( ;+` 6( 9B&8u*0PccNB:{松ښeACXT‰5qM2zM[^ټgwyv`x+'tou`⠉^cA݊+~ٱC}бAg G.LƐ&D&=cKT7\uMԽ XfF- ỽ8)^4Vd-";k[=^F(U3Ghu-l-"J1PhYC^ u rm+F"Eڃ.=t{gmuH ǒ- ռ>{]PG2)P=Ag-%8N*Ki0_t+.ٝot@GU4<G1XAn.XTB"Q4(Hה~ȊbK}ݟVaɩ0ngE>@TpQ>vFovO9=ߕ.ӫ=M G| 9JP a'BMUrT?AU( k@RH.//:$ɎTC=\8+&ѺHjf.f7`@ $yZ SR".@DkD, fIcEJJj†H lV^%VBF9[R# ;ΠGYS51 n1L^ ! ŀFL'dOC&%ǔ5_1!$pK,$iz6yMf[0NOL?w>nAQ)P6 5ZX^6 ,.zb$k,vhD]'{wF_P#1`tASums-> #OWG +PUɑYZUoŗh"t +v4@܀[T1a2$dGQNAiR8CQ?#H L\q$ _9e啌ȑwq]]WQ\z5Z/**ҟex[FAc6~cB@A Qj֫Ma{88}MBNݢ >}`ZM N o4be s4xō|f ,+%\ i;^r5OW_uph,w3YmMaUhy x[@ot g}hX9sUMYСbC~hŋ22Z"iS&&تiMUDZ*q QǏ OsIxU7t-&:kɻ{W_|]who H%kH^@ħlNb#k^ʩɓ'oS잼]prr-(Q0K-fkN rtlR/&Cag.'KݲB d.cOHLm6),/ۼ^+apdH)Ca$~z%{9Цqy#M#|"NdJoh#%WojxIKhxj>wɠ`4WGk낶Ǽ@JM:dkc9;nU\&z4~,C&F;l[|D#{hM0l1D& yIdغ6-=Cb704AJ>"Fyuӯxԭn2MoϞ=3&Y 1 Crf}xj;o%r hpzH{  {4뺁[ qt{@&POƻ dގ5bl(C#(Ntyc`p 6 s`vjx}>/P,.YѴ@LIǰK!88a$~:n6ٿR"tq@^jw:?2/qt6Ύj9~0$`W!|>) &Ξ`<5*9N JI6/F.QLE haPWѢٻjP}-lmC7Cy|ϭ96q֍ymy'8}KeKov` o`T"qTE!WˤZ+C2Z0< vܽpPjA3_|+ϽdDHGFm 5v+5hNdWR 4Օ?o~;1) ɦgbѶ{cg?;Gn9 O4# u 2 &fNk'?S^sW%B|]zHf4^q/ Fq\h]h>a]Aͻ~[Y㆚lK^Jh.T)RCcMI:%7eJzb7Gkx0SP3#5Fw^+?X`Œ'~aw͚#(DK L'EĠ  M^]~S4ThіXA14gQJGd1'zҲ^#q݆zDHE͚a3$؉ao۩O[˯~;3D`J>YGJTt9b.?3Aq',eBgAc5N lmu#@$=q$'N@~ȐaQun3C7"ݴi>ӏ46CmHݑtp`={6bA@QYqb' :ԡCt >^z4R}m{޼y\n:,{9r967O-m@#0tP/XUtć 6j(Ia|E5qp@¡ԍyzDks1UC89}.Y-;5%BGf &i*Te"4%<$ې/9L ?څ̪B>C4q6X ZICx 3a -nO0@^n5G1Xk)1#OUI:>`% .ĔNsJDŽ K 4蛋R9~?67`W0 U!${wdaWPy&L沗l^:<ؼ6b+~ro~=7YyOˈz\T 0.b\ӲWQBM"8B\O?if C^wuhc`c-^ ӈL8N. 's2 K pcѳ(i~ /$>I0ALmCcS!LFl?F#7 D}ꯜc^͓ckȱ>'?pߊrDN![>prF:pmNʾEDGRr6)63kbFQ/bwkIJ[LMI9X)Cd#_ZI߻x.TR "*43m? crEJA}}Ӷ]_}s7s'O+nO<[D4vMN4P=9w?0ahR=?x`sIr$~eDүj },ϓ|=[;-/?j)LAѸE8g>(E^*ąg/3y"!nJ")>NH roG ${f3%K?pϗ ѽ>8~1K!ǭJFuGnc!/1gEKLɨSk43xq]^\mQ]Z ?̤1t}yCVEU2zB"lBگ$AՁy17Rx[(x ;ŒK't9$pc m *lq,AGZZ\$9bU::L)I$s&#)!5=--?Ff3,avęB棵M x|GZRBUk)^ˏb 6Mg/.?VnZFü`D-mu~(lgijk[rl )oYgaQTIĝ6eak kT5:1ѐd"9,=sF%ZQs,#ٚ[Q[7(9!9oo3Z9jC4@<0Qi bɩ' D1G8d}iU"͓v'|9]u듑Q1v?ڊ8R򪦲lgM6㼙> FSmaތꆈQF/D8@Hؤ.~:8%uJJE-;FaOGD%xCܿCp" [7~L;`:_&Eؙs=wՕ[Tl)<ּ٣5QZs͝b 2.{}/Q :RQz bv1Va 3UHN~O3,NeLt-歵mr-p`^q5JQ8dN"`sw,Up% fLLK̵DrZ*z&|gtz@VM#ID̟ϫʹQT hNj1@}G<_RrEB){EJLL41hB5Mx=z;ś^aرFh ?N*g|dg&tngZbވ#.NKOM0)3 ? %'=dq/;9^ܝ 6ٹ`P|sxG_tDEFx HO?j0o T/d\l$j ]4mW`s.Ru "t54l|O4)xzv jH!c_1A=hD(TJT! qѴ='hPT%,],*!-+O]=m1&vяfBK 8-/>0UF} &/Bx)<#qfE$h)(2KvhI؀#Fg=g:P( Ω@ҀЃ':Uo* qFgb2өd~4՟6`8$cYv"3͜:Y(cP)(itpbz(l3c62C!G-ܒнPi&Xv8&Oivv!5g,9x{^t`? xesKz Tg 5׹SŒ&73=Yys*oA *8M}BED +"eDјQdhODdg)? ^ կ~#ȅLF'C dłM?l),<"hr5TF!iU00Yd $'˽u19r׿7xC(.V8}QB6Iԣqx'$ & 5$|b@9ȺHWyѸ`/iml܅E4PTҕ{S`l 7REGһԜ򏏼4=xacN*Q{rWd96q{$i1CsW"@3fTǕy E}R|)=OIN2sǫo=1yn%Lث61Р:K3{[ %jcP;*L%!{"(Ӏ̌s^sYBn^i7b^_[tyJ懭X,}5pC\Yu,/l޵gƬIzPGɎ߷{7T9l qƏ7;IG}A{AoI4;gB@z ھvPUOd86:ڄS>0qLsmeYzFN{ܟg)/;vY ҆IvVnhQֆM5Fvmf#=l[hcC6_wx2HőuڴtWiV^qYɆsf*7_:iZA#Jh,!ř|/zXf\4N$}eXDgP4qd 3r @جfh0` L?Ok-Nɚ?_9]7mD}^s=r!5thVl}e+D>:Q1IG` c O rkc٢w^?+Vx"aDn|CrYWs 5j6m-ٴ 7}+>u<k0aK) H20Wp8{d?+\~ <DዯzЉ'+jk% ZCs (V.ʊ(/`۲5*Dp0gH;@>3=@ 2̵ ZGՁھ . U3qDѮ8lVd[Dm9AkXVU9ўN2aP ~twqY٫Aڀ!Z\Bd UTz 7٪9Itài^-"kT܌<^(E+3i/q# R z 7>&d& /6׬|~?dBZVp0A8|@ M "y 'U#y!"NY뮻dGo +# (t)8-Ā@7 8wSNU8(իÌ _+[aP  ?h&!F"2]}ƍ\qYgWU0+@ aPEA?ydU Hd A3+wua#"J;0 0tqo+kr L<< S%+0U/>{8[,uyIFCeIzGɼ;LΘ6,8}~ɭnRkZJrb|M:&+*b1 0Co(=#Fv40pn!4 !,Dh B OŴ:O>MY Lo~t$CIjqQ[0'䚈&aRE=KKqWҢZV G%?^9oOmW=b{_1= V˦5n"<88bZLXmh4"m IvGKٹS^Aì=t׬}¡^K');].Βw.CiCt6 #}d\elvBZt@WhLVÐ-Ml5)H52 !&+QN+@y`=i ;#*ڀ@q}0Z>נϠOJMxE 3lvi)I;r &u߻[Rfu%G'$/i}G J:9GTk{1b2&&/_ gOգwkCYuuR_..+)オ⬿ѭD 9TR1Updt/*8;%n[ncV3󴞖Ct/\Wߝ]X]~fsޔivGBzh܉xVﶼxWu˯ftXS]g!O|3CmEk6wߒk **tWLOMp(6Wj-:),}oVvCǫ7|hZrjm{=_݂s+]u՗;=>.ޤSuT ѹ@Ĺ6RA*5]wLEo}U-\n{*_Tֲ GJH| O?$49lf3vrx<GC8T!]<:W_/U8[sڃijWs}SF9 ]ޘٵ;{zgjBjl&DZ`=`Rn}KZ<sj 2r"֮ 1θ?̽~i-:K>tga=.+BٟۭQrc~t`"p%;GMKjCtxH)/i{itE?HQ"ii8zD06!4,M eQF0)Bq_EHG?S"2 ZqTtPqppwdddpcrޣ?޾gO<?E`Fh}6ֲ-9/i\Pt]=wqΩ:` aE8( R8@9`l7毝֫l10*}RhddHj!%{ͫ' {ÁDj?N~8$Gb0{wZ늳 }R_5J1:E[Ͷ81!kƞ}B5vIօe2C[䟺cbVqP!@VbAC(6fSXoK"Wb ;PLSΚ55% 7='2oYem4K^fuɡ¡7~s\=<)?ksA MYDC]:tS\2Ci6KYCzܝyvWXKo |"3D[տ踄O5]B@ X^6 402xM /41 VK|1ݹs ' Z{ 1&@jKs!hA#hƩ ] BdɛK . [XGWD.ࣼ#d@,xFS`YS$yh[B{S0 .͂* ?d+IN|󉐗^z 4!Z wRXe >dƒ;('6Lt:WT1LBNuj׿ue'_0-#։OqeAL=p9CϘ4fE\ yȦv.Ȏz+ W\5g4&εep{2^wV<"idj6i]0( ?m"J9u#ݺ;h,젽Єpha ^7\q' j1]v{G\+ZtCPj) ɦv/XnҚH2ᇏQDc37# >jUwHS;.4-9x)c}/f;2}{zi?!i'3Ear2C.0wpG0}Öhꗯ ),Y6F\5*˒>GhS^?n|0v?P`ḮK!xFi>FsEx=ΠtDƢzT̎m>ŌZGӪG@OkAꁻ孽 TjUBXڈq(0L& 9@iޞ+^S/3ڌ' eHyOM!_p4z%ޙ6\-X?M,(91gޢİt1;\ İ\ ( G*KVx% Hk6J8(X93HBL\60H*Pj&x&HU,e 42m'X7' )h3R jŊ L0´$P+l%K1cd:?@}N|MgHÁ<(|Z= 2vmn5#g>k4Vut_׻fNַ+!HY0GӖDv.a/,us~1* 3\6c/_?KFuIVAP0#ed&-`^\=Q.vaAA/-;!}g`hhI 9{eJ1\eNutW#G=^p_JjjP|3럱*pCCRMBhr)"[##zzm_6 Ƚzg^dpڵ;;m6+xQ' KZ=Cw]~ۃ/,] A/8.( @[||oP~̹D'? 0%J8GHq+*›p>R특{/>X|9]pZC=2?r8xES+K gx%!4q)Tc}J۴!w B]z{+htݚ_ڸb])k06{]%U0?lȉ69ez$N[,oݮJ,*6zOoݱ.ӰݍT⍹vG6{[tazRo.-?jPW9.7YZXU5ֺ3+dĀ UWx WLH+-lA`g4!c.6٩7,N]Qqߣ[&[f 4]SYf_Vtݸi[aԤo14!߿1ψ!&skktQ V HZ]X͠w~CQba /krҤg@4&@JbWDa>kvELMd\8:I%>7nqMu*O怜ms &Gf Ky}]ރbEẹ nj$@Nl`3*1mYQ"8-^}߬XTXOF1QeVEb&XXjv'b=R5$75q8A%"e8jYIK%y%/" :GFe!7ZwBMmeAv./irJ'{$TQ~{#̌r^/"# EL:խ/| I ݓ>[ti \1Ew |MbL4TMixذa|&#E<7PKGB3OΫ*ϨVTB =[$r#ddVHNAά -Nt+UY4y_[:??܉=gKWT~bCVО'g=Ȋ/.]tP^a}`pYWt0`0ިOsj*lXX?۴`>e_w6_v7br4JP3n[> Hl@ɐm/lxM$i l$2 f}˚|{AwM`';MĘ0]( \y-d6ao `c7軻Lt#ŠW̰Ƃꊯ?+l Ͳd|wbZt]˚n&`TON~6kVdLKu/À~=!a JND*fǞLL, vd1mhEcyж*Y&xs.W;%i8pOɁ&!eotioMI(IhuY$7$ț;7?7 2O ^]SoҎ Ѭ{+L*@+ U4ўp;\uyvL Π j &3sH,D+͙7lcM"72ytN.,$OT|+YSfp~c=b/o;}?8V15TQھ[Scp<犽+hy(Sr,Ĭ. ZeG vUXl!@g.׮]V&_UhH2(8wBz?fĹ7#3|r>{TZ2\k9uM6t\I[ M.oPn юd*} J`Mq&߲ߗ?l:8Әӿ˜`GN=ɉ 'heU9 +|YUabcv ׏hN\қ+P{m/qɈ,ѧ0(Šf+Bٱ$ zNr U8;8sKR<(Cfnbɒӭ̻KmrmQc亣`1/xsĤFiY/k4tx±ehgv. cҠ@IDATt9YACV=>Z-8PU`]* 9T MRDLr)bޙ2==ߑ [aә 3 Qܩ) d ٭d` Hmѽzuutٴ۰,cU!W@PUalٳbL4*D#CReTrގ;0&-Cx$BŬYp:jK~d Hx@"*U]6A$U| g梩BuqqqX|9TB8 [< DDxa ҭ[W_}Й̫^Y%2=:hnV|Bluvl͠.XS.WzTbxԽgMXB{suP DjjL4>YUQ7){\åT4f~!>RƧ_0? ĉ2 >XtXx%LGO8'NƖҊİ_}u;̿uG3DF*4݃\42~_oۙKo :E8DԦš#iW(( mL~.**K].4L[ɜQ%0P]Gy=.Ͽ>̓L@_H7l_-7͙ /``O>^dⷆ:u]'=-xA/\6͹HIr~C4s_5јSZ2;˥'Gj 'hSMPεW h:ں?Μ3{&;2c-&MLMy곏UǹHmP"pm3UEzȖJ4B(b*`6mg'Jo*}F``G= Z9#ǍKίAȈ"ylK l,Z;[mҍ9Yz}E!80p'0EEh: E.x>b0fXEKㄶ6;BL T(;]Lf ҭE;2q=N7*1V(uYՍ=]L8 #nB1l]lӨ$6GB_>ز+jLEJwPlz_ۚNc-4ڤ1HE3TBoèbÍlMVK(co)8[%䐹Ue(mt;j<ڢ_?.-i~'q9t8F2!QTYg7 Taq͹vwD90`c' t#A-&:ؐ쑳n{s$F%EQ5Rtg<$7m~AHcys*un ĦS"h"/;2h>t=EsVxw̘9φUTW2/ޝ3}NVr7M8mhUCUӭx̟tE`gZ ~U/.8^l CaJ'N7b7k%zQ}ɀ;il/G5v4cRX {11IPF^v H).vSYUϐel-xbA: K/~9 &Vh1TTbz^ɾ݊j=쨹Z"[lm>k6tt: Q(-VG d H껭p8ĸ Z^_0pL?%FRϒ17D:hL!PqsIoh49PU'2Vl<]`߄W;..7$Ŧ'%J@A{؈Ssҧ4-ޒ $y4ކnjSмC"x'i$Rh(-K $ _h1P&<ډA`ɌKR㇜sߺo7W/Y̻MȨh'ϣL?駟Cvv !+!3f$k9Yi9ZW䒈T:xȯ@ i"o8 Sgi*dT꡽T|GUeʩ’#hMpk' Eu`7'"0n{s**Uu"$$M++j?uPd$soMZhG$Јv~^_U,| #G"/p{Nמ;_6U{9ϗ>׷ *}n]~N#|ar ˱{~z>"E6 m PFFc~y%%~=:3[o3 4頡 胈 -8U=#k"{emC!*J _-BPZK3I7m( !p*  "K 4 2g[j 0a;E >HC+nj6"C0tDYk.=na}K$#RtQAe[]ռ;.UEٲӜ=㝬߰0~{ˆfSiq`~3WF .Ǣ 0,mYQT2kGQlܚ:DF@{T{FKuN/~jWfHͭڗ1Ugs2DY`nc-))K7,\ry]54T#,_pFluNkkرs4+xi]zy ˥-!Aќ^rol޵kD?94v ɶv55w2mZK;9/uwEЈʆs)4NB10jt[gx;631\[ۣVn C$;OhyJHMZ'9q:g {J.RG+0!41WTLqaEᘒ|mq5]Kr5o#,S'_ܧ3wZkt-~C7s͟7Qиbz #ž=2/8vuM)54[I ܘds/gf\zŕJ4A&"B9s)&f'[\}T :hcmqSLOU}= KFdSBFk T4lb`XƳԦi<>9`@-܈ٯY&b[ia9 R&24Ѣ)1Z1hR>5ˠx)mMAZߧءI؅$8)'1v,H*PpW|t: q?4{b{b< rᚙ2hW@y)vD4%ၛ(ܒ|Pd.VrGRdTzd8-MwF0%R<bLX5px4hEw+kHUR&!mK#t{asiqQ :zSP5*++gN.#Pu=SlQؽ[neᇊ{-}n"MP!@Gݛ[8!9L,2ï<ʥ `CL2pK 58H/&!}]5!J>"ʷ( jV-g30v;}zٴL(-@_F :w3Gz!26#U gTX厫ϼ&謂eo;;&O:m}'':8EKݛ_-|y`bo%+nñ52nIʐЊQ %ev{aQ Agff :{JLj`Կҵr9tI[*%EV ٠d3~1帉#;SN/,.}$ gT^w}ޑ:hdx]yX2*^,48Ϸ_:_O6/͠˥]^,ȘygW,9}ʨM@4EMҷWs/+WFyO;bbۡL'et ?&-=ilKBI($9M1F_yO7yOlAS,Jivu[mݴ&?ƙsuf11?^y(IqӊچBC}9(gVуto1@e%C0,Z2zA\#>4Die({]"oyWD6m1p"Yl½tXQ2ap8Q(0mʥmh*?g1ю]bNMLi;ڧYl\&4eBtMrLhNte[{gNphgᨘv|UX1{Č[8[y[]_XN3.5bMmBX';H6*pS=` !ʑjHp~" %V>=ޔ>|JW\SJ;Lop̑~%ed]A!9\z]LqԖ|}ӆ)1=)P)WdHΩ_!}:}R̙5ip3zꆍ2riWKQT`^{E:1=s`{0IuI[mſg(S L:bbB^8A/(S}\Pai A7`r/ndr *:oUFA4M/ML6ll FyL4&ao7}]m#sVP[v q F}d`4kR\|b^{6!%EjXyך-9`DA^fv*$漷꾫C"!6&r"hڍͥv>1cC6Q(Wt!0mKֽ{>}:j`\8'$i:ֳ0YLwŗ{ f\,50vĹ/=&\ Dc34jN7S[#FЏMO0kީ֭5M;3՞Y'OT551Qn_MC3Sm1\aDl-٣ lb,yY׼Ȑ/WHc̦Ȉ!ه Udġ=J 4{>Q1rG8|Bۜ´ (2]OƸh!W_!;L /׼pDfm!qCfVu܌[-8Ȓ$j#q'AWo h#sFC=_bH8r$>kjo2m5`KAVwϴks>7M =Y@HNipς4R&Ge(BiڥՏj " j)ZD>7o\-b͉qϖlzWSNKΆ&DjE [k+3cĄ,:GIҌK}SZ eS(t#PPYW_EY]]. ^uU>g-9!!54cx:@-\GX(:Ł(<?U xҠ pE!Ugc׈#ZUT޽{ ZӹK;G}TA5/*#fT27(U;S]3'όq᫜Wlza=Z&F ݅貹rJk_|]'8i6kύNNSHH |?pۓ7ыerS _B_)9KRQIРf|%j]mb"U.< @u BIį>e'M2bÈ# L\oKΞu`}4KIJVa@#5e_{_ uցJk@vair|ޫKK|}_+(-׻8[@`6li+RGIC ;}he\0EGg7wCA#o߲j2F+b{*vK o[PBm5'Ӈ_0/đK jHoe/\Kԋ מWPpͨ53MYiyOzjyۼ9sqv6Q^X.%umaHa7Yf} ?߾7N+^o1ߴeϡn;PM)F?1|hgڶ_[k'$i(adUNyIN:uڿ,͑BU c,+es쟌*3eh{Gm$VnŤ>6}CzL~gQ ɩzU3, Ỵ S Lz'ۓ6+3!KKu7Sn)2#N-!z? ;W [2@ihyU&]ߔaf1%5/?7r\A F2J!q+o}/C@ذ{?&56I P@42!( g-'Lpx WBfCgt 6 //}:k0[Cǰĺ`kgGYphn!Bt͒~⛹ >ôIY @Z!z8!YD)[VE9Vy.yi%UHz2D]M3չ1HbR6.S]`(@WWGZ}%7d)|oRF’18Pm}yqh.ixp܈А;gȠ c7 m\|Mroo`l;aK7s{΋c^3<h{(5bS'>;f\]x}fT]\$ %6ֺjS 4hh"29m6A 3g#BSKf0WVT(]yqLAen n\,\E!ĠSzWA;bnx )s336X#+!9^HTTzjXEN'l`/X+ǫ8CA|€kQ=ӛBhBeC{L Rf^c֭cPw]k1ZSr\H +ձj5R\ZP(MpԐojOp-'e~zC??~Ŗx1Lr! Jnu2vrh1aFW[W (i`O>${/.^3Ѹoo}}&_q4hgI&L DsL`6l4i=#7 oT/?um7^y3PYBq*_ g 4? smD2.%'s =Xpd3qedKCRݿ Zj4oDZ<66ppGi^"0$GB\{14V}^qJ8CNQ 7?i# z܍_#n&*1a)eک& Ât4fĬ5PbiD~'xSqF}0nCapy hơse5"b1IT#t0U:_aa\! xՊj/rcN1Q1'M3'd`R׽y_{yiurT\8O^ S*t>1 vywo`|Tԩ{Mg0Pw{jEF%XV]}/t`AEGmKRS4ie6-9W) _wnyk.UHR$ǛNf"jMn&wQ m 6%,IdKfɽT)i[}UjD+PV02p &glVR,QXP4֣|[_w7}#z/ #.a " }~BbWNHZsoUXeO-_.ǖ/|?gYIsɫpmn5Teoo}x&xE?0H!/( ɏ?8&C)I[ i]Rx5i::U??ttO$~0&WKkQxzFK[bʳc,}fh+N.M5݈WD/0DȨD;j9*bn>yL9q&00dhզ-=Eifj́Y)#v2ԇi`x&m]a4=TEټ؝{ӆYtb5) H rVw LhU02ꄟ.ⴡu(똘W~m挼$!F| GMPTPnsWy<27 㡨Kl)(dah5N5.w}w}79%yxٳ'p8\ FÇ~ϣ¾ Omv"(ϝ;!G 5dO<1ći.믿|WK0@N.7tv4dMz,⵻+^hs]mկ6"@>#ZHE-0/oΨUsF$jjæYHisVͦt_ 5@l&nE_iʻ !/xE~ԏ>_[v쫨TZ #vI93O4Am#;PRc-N܍ܤX{D)͐go h(Es:~eG ̀nǛA./jbESwiK!i3'8,gU5yG?;o|wkً8MCTf6yy_}漪.&[HNVca1Qѯ0˝}Id;=hZ.p& L>w\/ȈӢt +ćJ4qB .iҠe#M02i1wW6$G.ao `c~m :͍&̴@붭{aSc&s٬ >;j~9٦z| k((DpShْ<}W뎱l+W/E38iE%$ f$Vc78߮{ܛܔ=_[Z录]Y >.>*.nP?V _f%Ծ}^|]-I=vիSuQW u4PZ{ ܱ_ܷnx ]nG!XD0+w? |8ĥxˋ FHwBbziȬla4hrE3kE |Q6I3ե;1qß}ﳞ]R.lBS ^OrvBL^j4 ^"7y}yV'(p`M}}ˉ M^:nhQY@^+D͸oN"yME!G_J;u2t)1XLcPRvڹpE6l8(m;%kEm[vcp2>?Fxѿqz\Y7Wf:ԝ_/BP8R2_ł@K :{m2J$"q[H.2恿Z F:YІHk$1pájnzc̸7dIG=pGv“j .<++()-cGNpSSuLe1^eO).;hUfLpH=m܄Ql-̴qP23 F>(cF '"ճ*B!†?)M1|-&:W:"NyK`ŸPYo>EN} N)Չ58rhٚ82:Z E܇ 'CGe*@\nhnݢbbca̤ɚM3z6e{W;;{7[7|iKxNiؼ0SSu9guX V*Z$Иl*_/GK~>ɫo7SAI⇍㱄][qܰ۟[~WYf9mQ/vd+;ןRMug$F]ћ銜YSzg%LjS&cEWmۏE̶Gʬ&X,$z-eBLSh.}↧_^ڂ }.rϬh)Wn.Zbxc8Z PN՘Jy;jرOv'q / X*RX5 '$l.]~10s cMnu]Imq^>k{Gqw;.˶,Yrn܍馃1@BB IHB@PR@j(l0.ےffGZOŒ%۲Ŝfgg޼̛oxKnٹm^ЬgkXp }~5^2@TӴ@Yl/ܽFN9|u\e;m.GbCTa=oCٰNS_sp@~g7FPZR%S.o?7nH=;G QRoܲ~וؖ3·=N%=";P68S'.gV%B!;gL7?Ko-Z^;|Gg5#^28EJo[+ L._Q0EIKQ&⬤`jذaPqH"TH綤W"$Ӯԫ5:Out]'guI[6bd4 8~R;$.  \pݻsyIߘ){qdWo0̅C~z!{Jo߹jb ^tuucxR8oZ)#/3<~4 =Uk,~4 x+3݂^-tXCc&1)G1 Y3յ*ЏREZ->qeXPKbÛ*O7#:eH,p Ʈ49.s+o[lؔߦ'N"/v5 (44UUفyee[n;tlh&*px@}Ev>_JvpMsGdHu4i؝I qٖgeU=pbh% dT `[?!' j8K3I\W]?"hIK.2*-qC1fvyy7ϞkP廋S`1_N2T?2wc<}< zח44s'-v/_v%P2F4pӏWXŚc_T8gfv=ˣ,((Q.c j7ּl19>j;t֊7)xdAZIa>M93?8wUmϸO2R=55ᤫ.[Aƨ5կY}?r3 '168X)0Z[pY@xBFʱ!|9xK~t Cs x) Ƀ/߰gie;NC/xxu!dCzwoh~SXBQ;/~".zm.`_75F9ZS6ebeO~{Ǧ ŧMV0m4q7WB*As@p*V& m{nf)?{,\&")hkM.>;Y~~z߰+?4eܶ}ihUZW&$zpƫ%_ `@OvjA@B<þZwIIq%@Γx 1J5}.ڿj[APdc( qVb.`f(xx,H2n,Y+,ZXVBg|oK.lOVtZìꫯ+_UmۦWAV_gKbȌDc_˥'k1 ir! o;ZheHjyBBZW~x^co]2`\hwX=:xI̸hݡ|q7/PQ]OCoYtdO(ʍ;ޟ1dr.iEՖV",_W~ 9{Jo.‚ 60~iv1Rtzv pުo)4gg? CptC1 ,Yqm{[Փ34ABq,+S_ifs\=X!)6#a5e6Z܅xmr8Ӟ#q cÙXujzBhAK`k< 1ltc|$AȪ'zdg]>g| f6Խߕ.#ɐ?tR >fWV,߼lZi#aR_5%1 ,=j%#ǿ󄸩ZREgvZ%e?߶}g_dCqlKv2\-2n+;v#?#"zS߆*C"H>JoXvpDeKO}hݥMd*tUZZWm rƢ[\ȗ@nZduIBz,_)Q|@FKXtj^q]it,)þSA5M/KUVq+ȢIUTm{rER ˼_~ڵk44+dm',am`*9zQ_G'/ 4u^%qqq%?mti~!ūgj6a{6, .#n-قy{~n}*W ?T35D}jYqBI8Z}'< J70PpR~a>OC=әװMЅ4汗Ļ[ ŤZ6breEY5i/D^paM >tW ^Җ:jt9] *H[a7,tK;8젛;E>>LI 93ocg%_e&7d?'P#ZeZ7vbMw/~pea icdYX"'/w'Pk\2KE9amx\6qCqӾe%ڋ{m}ekF, zwӓ ?WУ0grN@l }VHa/}R|7l|-;^vQ֡X˖lM MR2WVV3ƶ>=tm2^, @QyOѭ. G;pI68~{"ȼԋx}\9[sE"%|^bѣ9t@r/ 0TƑܵ9Nkˑy3SJG$F<jo|ȗ_ RӲV3c[AѴO{օ})pZ#mN炓-SD}Kth(og܉4F= Ox?)Iht8HD\ dքI rJ?7x &ֱP @|=.%qϤ3)9_ixˋ ,-%'8ؖ(b0@h6Zo󑊁eϜ66wzs_m]T6!Kf:']7cBy~4 ~kŖ,*}b-^^IC[a#;_5v$% Imsk&.waz'Ǹt{ŋtu!CM}pu]Б sZeiS"FBAm->־1AG\`fQOAi$(??_lO<U/{.)Aq 4yn;oֿXp+7,VۭԻSWi 78iR!mCʉ$ mO!T!!HӔM$:#YB;bɞ@E̐ l)YqMJJb*"XboK/q9'([* 駞.)+q@1j!µ999߹g+ gЧUET ^d>Á[~x(h1Y-inpA~y8^ %B|?HkɯS{ŭѷETa f&_Z4o.[΀y-6WǍ7YXE7|N1cţo}oSRiuvԁKL>s-'d$ƛSL%#gB5PA<.E߽9"ߋlڣ,7ʽ[}|'MZJ!!e+mOI7-۞:Y| 5e*vT_=>,r^:$,jE AXE?m$FOt G/Qc(x+:Ј"i'hy5.Pfreg'g%S1q;o@~ȶ-/NVap* >^Eh.=wx!R5[D7k1W N{%|[=Evh.F!>yrD^GZLv"#+Ҝܧx!SR/=4Vى1Ftd=eg#G N{#So0#Ye{_a,qKFSQ߳ood݁)óaJ6AQ*B@!p"d,. JLBd ,)"b=6ڒ!]NfjKǫW]5$-Nf[R1~Z?)_:C,xgՊĎY5|kVs3Lw_#3HՅǖvS jDk:|[+fu}1>-F$^<ϛʳ k7 5Xމ^궛n7Gv_ZbǠF<\vHu+p˰e&$%,VѽBJ+w{lϊLr|s}_~g!Gh7 Z6 O.=u-_0')о4wM{e_OL,[ثG/sX 0ƘĨ 'rBȖ,]umweWgf"X̌̌ltaŰFdI2U mf=oFt+9Q !qϰ>\KYR]2dvrY4eܘGeE_?q0b0etUyo|O?wM1 gӋ2dݳHd+'N"b{խ[H'*<'miLu.5+ ǚ.v`f}n^_zϨa_"4;7lK?4cC,A#S0&%J{J$#Wk)&ɶd!oSnG #\idA20\ܹsaUSu%'1ӞQiRS%n#%p… K.}g춞ZPK6l@O A<&P#7_(+OHLO1PB9;pߪ&D-eȇM bG"xp{1-gzbo9uUu%GOoD fꗗp! : ڣR\^Y+&|?).:h(w%AΉ&5ƠGGe} 7|{xPVF X,M^ #ZHr'n8 7"{&icܰgʭ^?$#dd8RwS6:s@4+D8FE7GKq;TS|e8nkݺuګ'Ql~،"OT|PU4l:Kv?aL8+'1)zo2>*m^JoSɖݽ{7d"oH5G}Ld5ݵW&F^쮕d0Rƙml\G_P=ovFstt [j}?|mѮYq|('[a m9N@W=V(qЛrF(JH48l9F &&nx-y3 .}XY>& 1Ip92}yS'6m{}.D~Z 8Oo#Ʊ[[]gOiǸL'GY] 9>~Ikwnb# gc[ZvĖпdLOA@rebui늫{&c.I7 amjpങ0wo6qئoOYŕCl7_yQ^=4H)(Qc4` Ͱblpm]煢,.hc@JCEɴ(Ȍzd}}"2Aa¢J#ͽkqN; E@,y\|5jԅ^eĒ fԔpEm棞1dIxz-%RzNKƨ)pҷMH2ꫯo~-l+%%$Xm>K4'aR&cd ! .UBrJmEŘA~z՜G^[00qVO6CCp89p݁=xy_=G ԇLb44]&8|[l~&xBitݚr&1ew)Q?ZUoàCN)Up;>^X_TTLL`4\f?Jwvڼʫ-L 6<׽2"KȟNQ_ hv g^:6Hq(ѕb.<B=) Y'A c`u>C%A>AN >Y2E9@;"$dǏ;\ſi᎜t%i/:B80nzd 3qa/$'% ~3?_XD}p4HaּI9Dt[(X0^H~¦iDD,\2BkA-'AYfI<gα~˗O8y[oݾ};%OSTa ݞ9TTMr. W駟nذFiD?%yKI!s}!i2ƥ^Ѿ6 cw#:r.g\awcWm9_+sr/>h(|f@r\eVk˟{{¾}ŐCs(GL.,:DMCBA nQuM/,f0ՄUv,q>R*^hf|Noo|v){# M^!*&0tE27#ڷrґ2rsܱ%[K>tו|qt'BêfXha#dq]9TG_2n2=O[q|cm^> c~)N b/I^praV翶~ cEl-^SN@`~k^)_+pBdrJGe6/\SY}!KB\9/W" @|M4D_ T4~ 3Ye:]VjI!y%AQ(\MHMwZ1$6&y,zzF2O[Ҋ#Eaf8>Yf -MulFJP uDL o5\ I.K3~bzÓ隁I[ Vy*h. {Yꋣ$~;օEX(YNh9DTsǃB#%jsl6;֯קO)N l,jG+m ;04e| xP};bި+/wb 4FXMGޫ QD#.v1 ?4!/1H)~#?yC9;;8 dG PvuCUt:c!+_`Qx~jAkbqlDpD\| &d2WO{_Pobi<2,*#ZS̐ZK >(':X.D%Z.-Fxls|bX2. #DzeT5NxL4cؗ_Y^BdLc42Ec0`d!qTSYhI^V}G`76fT(N^r7M4EӚͼf͒gz0_s(1dGD 6& ͯ^n%>EBSL<% O~L:ޟ,Bk_<qZ#g>>w6t '9n@b۳@ol*ofJ3{q G3K!Pcx(H!F2b1\NntaFQAZ̉#n[EqL!FBM_c =c];nm{CR ;jpn+/YჍ62qYMq1`ȃgW֤3Ɂ5ۆ$~yF30Œ^dys q,F$ofqAHl"ʑSgwV49-nKOlD&ftsdY jYg>n`d*Z(O'n`6-^?7 m}s \'wDFӯ&M]ri 4(1?"@T7X&XX4"qgMlA MP_dV0Khb麫kC~ㆿ Ԙ&v9\y ѹNGT 8 xhH+v=M;RKd&E_yZRD+*wMsm_" 5LKXɼ2#}B9yt_I!==olNc$Y\-9!o2%\bv;!3t$|hZnRMi[vD%5\sgNq_lx= YlĮkh@r޼591!!Ή~!X|rVlb33Ld@mm5[|U7?;bpx ٬o y+ ӯBo}== ץV Qԏ7yM8B$'f1Kʰp%%\g{|md @= ?y9&F3&iI+֙0*~6kկ,㾓 uB;2~SڰK[R}: R+ 8qfQopavD+u!Z0J>6pE!+9em:39r/$׺F3:o$mDP{й;d pܔ/в<=# GyT/DJnóJ[Vstl^PrHm͜kDNG+Ǫ ưGbg}&xa!T`Rhns{KHK^yC.WfY:EiIhzM{Vm.[bӑZo(EZ,BPbMI)#bG ߧGj"$KL>-#b`2~\/ 춯N*ܣ˵_{:J1o1ZZ)D#DeodEu hz.Zr#qų9:lxm-MөS_uX9IN\ ZvVyn2O]`IrlH:U"oO.Jv1 lE\͍eA.Wbܲd:ŒHNI)3ymR'<U/C<8gnժ99ru}BjB|oܸqРAJF9!b0]Kꈉya/]4a9=|_a!,Wk >YIG'-!9Ogġn[)ə`z*o 3`!}Һkzuu%#ej{دd$澼&Ⱦ*)Fٽe4U'T;}r3 }!HEz ̭nKC'䍫_j{&tNK߾My}^*&`STkRsv%B'YC1v?q Ejh=b 媪) €6QYR`SJi~;+kx52lO2,ZE(]RQSbZ [s0.13c_oT {*B@!p!ٳ(g{띕Ϭ/љ~YճB)cP$?-ř.knSD| D ~2;#8'񻢲O:*tjՃӺ1Y)67φ6nE.!=qy6XU\Z~H͑ښ:NGvv-qdgԤx-6, 3Һo2.QOf-1 ^;/ NEBsbڵ:1VStZv=& ^_XvhAXΉ>4Gڳ=fh/mo6|uPwD|޻[.ƂUHU624寜[KO6Uj<qDWIˡ@>Pp&2{BL a9{hߖnzhǷ8Mef.AAV'b-ƒM+Q`@ =taݑΞ{Vկk1M?h$Ay:dm'wm4/)Ց#GdZ1 ,?ѣ=ŬO>ByJϙwy*16*YkOd"3J٢^z u?!/̎o <[g?TD&ƯN P' <%1vۑm5n"-ԕs.͋NjW-ߴo~_^Yj6J}"#'l+{u@7/xhM[  jB@!$Ifӊj  {Oo8e8BL5ENl(<51o 2BUu졇fdOڻ7h.9!?31G$~tà@GkƊO,8D]H PFPj2!cJN꟝2Fx_n)D&#β A,QChm6OHJ9o=g?c1mS[1w( Z_Vw^8Yc]x)B/f'=8`&ߐHKw nXu4Z#7 5>: nW'tƈd }l#@kś͆C^^4ވ. g1gg Rt< '_)Ip)ds9lNgf9P"{Bኚz Vnu/ӯ<.?D=}Vˡ+?Z#u]byQ(ɰ𤜖 bu '6S>Zd|ͳE& |GD;cbkxǷa1O }q/b rdN ,J}B{LI W2!d{kŋ-XࣆlUbl햻6B bΎ;1;0 SYu‹{fB+^*3>hFE$`i㽌=}};  ݵ8d yŚLO4=25x*G!0D"b6 J[bOY2BJBԹcsR! W\䞋iWyF< {WOUbԭ^tNy"Q]1s ./؟" K'++S}>4%Wo%82dNŀ) o٥Y##aUU)t>Ridy̠^;Ʀ?sIz7󴗸9`˪?k0pD-z@a*F`D! ;#K'w+6 s׷c 12לŠ)g9ш83i}ϯ>XaONnS{ڢI{p8 YeցQHӟRBɞ'sdHx"1,<ov[V຦|aONX]9'+{z$9$xfRJ,b1 ={+Y&{͎̽ݴxV+^NΟ6Ӧ}֙PA@lf֭["=zIz"u qk#r3[} f4 1AII Nw -4N49B0ll81ᩯ?PU=w}@N#GlV+krQ#ά0h]k0 ˞ti LSLR3t勹J(و`gk V #'0FƒuXޘL ل5ئMnCTI_f*/e\`5M!ť,,ö/5̴9ZyQdXҤسoެ;> RxXa!b5*/N6>I|" r.rJY)ƁA,6Z aX3,Ǎ!hmVWv/O|3urȦR`%5Ty+)1]Y.|zXI&I-)V塨ЫRbx*n @R#"~%B[a~y? L|Ke >%?^f7J hx<*_IznIo 7VDJ>(\Uqt$eE/C/rP;b`Bί kA0cd/ߛ''=j>= hrE/[pn0>}o>*?8g(9DVU|wIN%3mJ4%8N)?eJGC^'pɤ[,}|\kFF+:#c3 /\[SG}> RE03eΈ{覑v\%8mm?kK(|hƺr $&z~52V[+DZȇrw^meZW7Np-&䫋;?OiOاZO&0KGr]ASi&B`eGvO=6qMmgɱ5u?5"]XSdШ'V!D҅YzUL',L"+4ځa /0eedU"R  z 68ЁaCڃp =Dı۩H8uЇxv|Jhzᒱى8Ic! hA$_fVJ?gBR|f`AOU7ߦYmV-V  3s{" 3{' 5ߋ1…I9#$>m?P̃hxS2FL9 ڡ*\h&|oB_RBfcVsS؜`I1eyOngt#yh,:jTZkP*??oZ֨j̊N{oV搳 vL 8I#VK}@IDATZnAZ秌`W.tcVZ/RQڥ>% Ggh=፧ٸkT=ΦJɼj9΃# oL1%=9 ȑ#<%(IX'׭[WeAr-ФFzbФt*r!ғ$//`DwȊ 999d"‘<ʒg :CDZHY_1vAYcwk yXwܠT-dy NBL,Zsϭ_|[t87GcKW; *BlEd*+9lMqLvՔ~Oo%[Y iJjr'){+>"Qqg1&w=;YiWTϺ?Ddkv! rՀQtˁ!i8$=p͛ ¸+H* nٯs5kg v\Xh}C3Dl%Ft! %66;r]p*>?/y3zp5Gj[8s0BԭXl4>5uU{xÖU5%J̡p5l\i2*/=9D+By^p q&&8d~sF]vȯ%ܡKb(͛~Ȧ,|G4Pj(D q0d n{󜔾Yzf DRnKwŸ,Jiʩ@Y5BfiJ_Z\&oWcM{JWYW]҄vcŅs:dGeσLO>1 Μ9HQWP 0EU~՟,5TVO -Ͽ/" jͰh aJIiq8Ց"Vԯ|UU~X8fj槺iC(:)=pPA4TQ&ͣҨ[@sX!Ha;LA1xv4\;4q6m:?8H@a_ypl[y*?ц>:p~4'x>.yp:I28MK(eZ Xyj=QONj=okO衬a+>hU`yC]pOaH嚎8zlPT<8pybÂ?vsTMy=HQ[E@{n}7o.]*;bɗ)&{4^ !!ATszz<':Бetu9r Q CW'aEn {#@ﭨVx@JNKqmGbQƕÁGh9guC$#s*odr]ѪU55 j,&r;]IIqiq(@fzqvgI3(" SSSŏ|-23hQ tu?૬)+)/..x=ROj:cĤԄLl1xn 5RCF;5(-[HGj+&Vfi$B`ۋ ңu Uu|oϓf˘ؘ8WrJBZ;%ҋ TgQGF<[lq~zQ>}0aP[{jWVW[\ﻰ u>H<JΧIrL*aPUw[oao~<"-hẋ&?+&''_Fm%Ɩ֮nJe1=]iC~3jsx_ŽvǍJQj=|Y"˞_^^{nvY駟mS$f\W\qn7ȜţN'N8c0rF,f(>T{{(U]/^Qp,@԰1*C!+9_9).34|>?J(;gT8u BJgC{/M蠟~gf6:]3)9q@y3E9DH,BԂ/R?{s!x bDvJUv5; BTnɢJ9o&`X6*Kb6 @{9h^"OIC)! \҉Z ZHFR(z R=RxF{7~f.{{ ' v`sL(ȑC\[UB@!MJ pqo9+80qTH5qIYM7/(2p &Nń{ _?3E55[7o~~E &U ?ZYzhuV679& RMMIs\F'41jjCuJ=m]hWM1ÍB{ J4vr+uD )uЛvysx59i];]{"H^ύ 5<ЗF#aLldEiiF](zKHp&F`WE9zfNV z⶟fGsXY6xSV@k.!"NFR9,q@^ߴ⢜38}ۮ/8id. X.7$3*B@!p uПȂ56s5j4q 2I*]0w1YF rŖm {EəNʬBi&1 9v%7]\^{w(AJ‡[@=7őlM %i3@m<"PQOcLCs _%&[lB)d/$ΪS Z股i#íPOg|Y-[n\^|7&3o}w#˳ l @w񹡾VV&F6[͙tVyS མ @mM;> WБ7oJH0 Ό ( t1r؇k=ζ} ֣WMtX* s]V+f 3uUUf{eq!tK!1QtrIx1 ^af;?tӭϑDIRS[$D*|o*YxîOȉ3!z 9úRC9\q4@ؗuirr($P4ĭKR"o#:22QddGmdBcަҋ&UP߱t6peIS%"Q'uj` v*$e0PBCD(P/tÆ Wڵ{77ZXXاO^Ce#(MyzSuZ22/Wq-=o "ZFYz@/A< )[Kizg e4'baq{w8P[ohs .eᖀ`ֺ)HԮ[ Zgi)0TWK8B "/ M ҒG? nɭx*8[0y:1B~<G` 65%6K C< SY8[ MԭYnKCu=5ă`8RVN3MZSM7].6ObbC&Dl;[T|ӡn*B@!PxlW芊)tWh( B@!P( B@!P( @39~ Q B@!P( B@!P( B@!(tWh( sm9QU B@!P( B@!P(J=AqP(4RtgT B@!P( B@!8P>ϩTQ( B@!P( B@!P(e}BqP( B@!P( B@!P()jNUB@!P( B@!P( B@!}P B@!P( B@!P( B@!pN!Ts( B@!P( B@!P( R@wP( B@!P( B@!P( s >SUF!P( B@!P( B@!PtD!P( B@!P( B@!PS(9՜2 B@!P( B@!P( B ݧ-' B@!P( B@!P( BB@)ϩTQ( B@!P( B@!P(>m8Q( B@!P( B@!P(J}N5B@!P( B@!P( @"]KQQS|] Ɵh4U B@!P( B@!Pe&k T=4PT8l7_0TuAۙ'd;L݇Ӄ*E!P( BHMG'|7Pz|wX)6=umNnrwC  LݭӀm6Hm3CqyM %JexZAqn QSB %44rV1+/ƱR]UOB@!P( 3?rxδ3tTl6wR[ (Hp=Ce‘5|gQ}ߩ(X̼=;LF`nhh L7pC||묨bt" ,}gjfjBraxɌNfjlUY@U@G[lD0BxNXcX>K4ԠAƚ}b=+H$`&>ɻj#!Ra@9@xYRO1z$/E{ٓ,2^OAkVK@UE7QED/Ydz%P3'&RO IEfI%5IABмQ[ɏ,T'IQ蹢QO[s62MxfGM6^%*p8Ng7 ٠RL/z]HY'%ӇE3zWf'Qhzz*dc{Æ1jg0?bXr~{u|*yYBUVp?kJPcAoQ_eEɃA_C@.@+DZIv8))o߾hO7C ܹs#G.6K{ECƯbx=62B7ι: )P?:O뫧(*yGu(;/}]:H)h-$/ĨIXcL~)Kj+bJo.u{ϙmaeWwķsΜ9sLΙ JL.a'hA`p$Xtflx)// x#GPJjS1ZӄƁ~l=U͝;YB'x駟7t#F̚5&khGв׿9N+-˪)/@~@cd-VzKN#q3lq Sc#~q<6[C\M zygfdffQQ s:roί\x#xkN#0E6#i? Z/Ĕaͺy6+KC/USP8\FH8\!yS4`@ab!E,X= H"~g$10m~; +Ќ̮JKK7lܿ{aDF%׬Yӯ_Çw4s,P_;5OЎK΄Z*8X/rX9t,Xb:mWqyyyItmeuyyOYpi]t`׮]\s5]?킖Dh*Ҳ:ݱc8/q8\E-ZuVx ht]}nݺ{8yd"']\$a(ТLӦ/]OJJ ӐaȐ!&M" E{oUUUća 8m޼ySN>7n?_g̘vZLA)8ɉFWAAǢ9?Ps^eeeqQ'DFRPPPh"!Yz' mBq6o̞=d'NHeA/L#g+8{ϞeKTgdfqlS(D~ 7hHKE@>tM{rXV* 'LzYV`SO}D=1ˡ'Q>5n1o')9K/ :׿L9syh;(UV5TM"޽կN :D 4~Ɏ.u-=LۋPln<})}ΐNNфlҿ3_E!ۗ_lV3gmi~@ee3?9Ǎ=6c):ȸ#R 2g7Os`Tr]MAܶTq+qZyNHu6wnE`(<}%;}Yd9#7 8^˝⪛3!{l}1dw iCIc4e*_ʌ +m۶~Vag#b|9kgo\sDNG9y'0(5dWB:B =4{$p_2̅&lقC P!ӽhǣZXqq1˾(ОrGW 1y(?ruu500 I)vGXvA SHR䠱47<!!0A_iJMi{8qI0! Yp ]d  XdSCEtHNW(Ge$RHrBB ' CV|&1<8 G7(I`|RLx:#G2$3;{ΝAEj7mV]lr ص+;#=AD`z5<8աpv׈Q_{5v A%-~),b<^|űcDzRq4U.==J _ve l9lVQ٩6mڕW^tLo@@oxF <8[fSlэ9`) Gz6ajJ'Lf \~3ɥ֫OgJ@5{9S {3MFsTE!J<9y+V//~r۽qvPg4Zɍ> %l#ʃ)t< rèRd›H$抚8 uWMb57*{#Ax0cу9@ 6%i!;Õ2++B{1fNbN\.FdZhicNۛ' <{wTY\NsVP/4;Z`5Wf j.>a.@>oj֨c2a>o;򡥂ud-Ӧ%3x饗m ".XhjO>W]Ӗ7 lK^z=MH7;٣/n |O |&%@oF@M6`ѹrw(c4%kGZCi*,|m`QرG1t̉%5H[H@W J w(0ڞĶ9hsKCWk#R4!w8hц _iZYB;&$ΰBjZ"Y ;@FO±L5dyq[6)SQSw>C࣍III 6?e8C\xᅘC k(pmywsi /@dc㦛nB8D8UL~Faܹs'>7"7|/~ ^aKE9̐G9ƍ(;:)B )- R/^s5k]%VKѾ9:5$C,Baob~cC؄C'~C)HE4z" ˃jQ|:X8hl^ Mv8X7)GYT;ݵ+Þ ǞT{xY'PW%!GSΣYY9l8p :OC_(@85kMP-uG( . 7޷1J]D栤 fia&K_GS+HR7Wcq $Lko#uFFJn͉gϸR0!^uGj\pҺ_[ec~gTQ' us/ @+AG._j.ʋ19y `0oMnEY){iPfkq@Nhw؂ƟtӾcD@#wYv .lD@9_`'o9{l;EGph:u]tQ+˺Pٶ멫se~:=1T^9G,oذU"`Hwdb֛%Q@0ı2ǜS,0&*`O0Cѣvǰi6DbϷh,XsV@[*8n` j+p+i&կ1E_x Pq (FxAB}d|Oqn`DfqJ+\qwhvApdiPZ5*0ķm,F$|1 Xp4p%5:VG2gkQ<0,P[oCH `\f!eI?C QFzjc:"#3Xѩe?8xp7Y!I8G ~Ju%O~F 4l%P% ̵ַPlm~u}vϪbq@LZ~Gxꫯ %}Ŗh\|I'KJ QКޥB ?WI epU,NYB)ΣQ/@ie4%^C 5G%9!YgEtm;$]ٯcK?(`iSmGUzT2Kyف^0CA x̘1l`N*Q:uc+ J2LRcGII 3+d&ɤXSfl`Rhڅx̄T:ߤ8m~oܓts5v^ "ZT(KL['gͨ#qhS  ,}Qx9RL.`nAI-=%R[߯9\vϦ}HlLA-j^XPzʳe<"-3=UDGb_h K{lg}ծ=++yOÐ(3+Dpà 94Vz$oܿ|` KFLu:H7{k݅-L,qy x}߮ɈBR5FA=83gnx-Nyq4N?9RD@GJ@&"aԀ#3V:3f&L?~,F:|0BQH9J_V.@yS5kV/^d|˰NiܷO{tvȈyW@K0tj#} $n Wweh< v pI͖裏CB JM{%W8<@K_n-P5`5<G;Kq[^W$N2DSořdVZv+*ZWZZ6(W>:>YE眖z{ݽ=3Ҋi}H#c$t|g}&<@pHV^߸BN"֯0ivz-.,a'T45b/~- b8b,L|(0VX .6k,~zQbwP24 w, V>,HJ{jCDaF1EC`bpp圼OpMҸ0&D"7NI3 ,`غ:px٪Q!k*~I1qV`P EqȍG,j0]= ~flpy?CIh uYͱ[YlДR| G[(}_o–l̠=Pu=.i~ϸ1?Ğ) ={ƒ eTRlP@>}W}J.Q.~ors]SDl1T<6-G\ES6E`"_́,mͤ'd ߫g0O]@ΪC+AP@ṚOĦ۴±'Nu틛'q` 8=ELj^߄XƧuu,SMj`b65yj>1-9ļΤh^) 7")J[L}~ aH}Z)d)G|ijހ^R]DCȫQQPl69)v$.m)?av42t]-=qRCf'dJh8Ncpfi ̛7kV֭_v',SP %מ]=$UN.ξ+²mzD/ZqxS$5$ͪ1y-0F+UG6H޽ShrrP4- R 4_(?Lz38\}&0 $gh`y5T Q03!ҙ Ch?{dGz[+++'ٹ(E6Fu8Oy]XZF< tε8k+Vբ) YU`Xٙz+[w(htbs}=SwuW63RDڅ̈́q2ITKIµߤWmyLh.M-yggtP4.ĻQ{p^qsɂAw=۟3kCYIrRԔ2։;7tc8L8Ba3/3`䋏>3`:_*hwa&7ݻl={*>CϏ;n"_.$ );쳖-[>o;{V>^zeݟs [za s^*;S [f`f %/2- $fƨȚbښ7mU>Ҩ¸C6e~~%"\`j3hZ~5luD%%V.v@)u Uq %#Uֵ? 9ڌ]#Ng7epJ 31U#es,Tg-tQjV/{ji/ˇznݺG=8ݏwY5DavL> +QXv@o`~\B qBVU ֶ/ lޠxܳ-6 /ĴSJVnYCOFLHb%Tm0wFF ƹljB{||f\甋ڡjN9` VuS| (vsXU̐/{Lh_h#4> i:iǕ:`8X/v=Tw pݨ#*?357 ^PCv ܟЪyf#5@iUr.OrC }:!NqʧT"'3,5??|Rc(dF]ɬUewtr>uҤ#1pd$hd7nX}cYtn1^8VIҴrGA>1)kHڔ#~9ȏfb/kt@MkWo\p60_E@d{$DZھ?0 9*@$AoX" ÂL@Y>k-z+5%&D(9*= $- m~@ (= L3H0/X0#^$9IO Iq7-mC@i$)IDtpU%%%lT;+ۏ<Sb`k?xt@p;"_EiZ&Ӗ+\r 4mO~%<nca]/̈́ 6 ( V]:"i;V6U 'l7Vj Dn#ϪcGmn2NBՁcN_Ԕ,Ed5'5㑮٘%0l.rN!\O_W[__wWbo굫gΜ׶˃k0cB0MKdç#  `J 4#8h)$&a 9>WuOs?3}ɆJ'BF$)js7WGB :m>+"# S4fԤEB3C꽵%?4ɀAQ&+c9K"L4&n* `k^]]4nG+ERp!690lK˦ ?I~/yV (>qt(6* 9'0 xoqiMQVIGzT>i&_CZǤ&l) 'AOS0vujG+H)O,jun]9o 9ѐZZyJnewA !^Җxߑ3|iL(ofѶ VGzX/[lgurAˆAzHm]pqt% l{웽O!wIceEFEV7<g \ DWn|2%mǠog("C-_c T{wX^n*Q[#N&+yI 0]%#8 w=M3Rڠ@؏A( x^Ke˖qɢ%%L:h䜰q6H2hЇf@ik& eC }| Pl1,Ȕ {[84n " +gQVVKJJ;x(aGQsX#+CrrI.ބ@hS9|Ln򓀞5{3DKrmO,qY″,b!bM7tR>-̷ Iz7[l›J$ԓs&m *֖Xje߷CDcHfwomxNMI$k5 af enj#!2So)i_j[@lxenͣFb?3,hMD|99rqً3ES5Mӻ5@{$Fak WQme+ӔrERmI#NpdĭzTa8h͟W:YNjYЩp*b<ܹo3yg,YB8D/` -ч=^aR}l7K8}f)"U4ﯕ{[RY![;U{V^V\\tBQ +K|+G-5INlj+^ZH1kF4noǦ;P֕RL Ft+/< ]lJ DLӬa!+PhODG#8op`L;LLj"50{ȐJ_H\ GIEaQ_#8;Ľox<;Nq~,QT,_˺-sz׬ْ5r4wPJ"?Xդ/qyo'&1_IݜEXcȬB2@owYQԩQŲhwމ Z' /2F z=[2s-EBbrm6v=ǚPE8iVE7lؠ0ۖ Y8DPRcLZ~ڟSU NӾ3&f<UiI'W]s#&B-ף `7W5AEMYΊe'يC*z<&tAVa `w(҄~TzIcg'k(!:{Vmy7m:rbۇ ڷ(+0][mx'3shfʠNBo3J`4#⋎/0Lx7Ҳ_"ࠍEƨvcg;yl0szpϤV0$̡5sdh˅GBX ~ co^w#&+K +˞ڪ`P*B ( C9Zުu)G]5i19yc~x}c9 -+s6e9=NW0 "x㈬'V_ϧeXx/3Ddꡑ" eroG֔O _4&u젌fdx< bUM̑Yy)  Tc^-D=`C@e<-$SYZ_HM{Z!.Af˙! (bـ dh3buΜ9H!!+gGr.L]xkή@ ]YGl UmPCH_tHъcWͭiDG% 4u"H mT w!oZv9;"un&X>vySozHRȴ'NBYcpp+HCW5'+x$!o2tJ8FS^nƟcCoV{0(8W-v-[MhEk#ݥ\+zZhRYIoM[!*)>6eƢMevW#ŹUa[L[ !Ff?Y.+(BqͅL2Dغu+WaJIYh"\/[BG= ǰ! 1jH'$'yB(I#=lPe`eGnfHӌ5,Y2l3now\կ}zG!iɧvioy?XQSQ@1zN1IJ. n.QKV ɋ@ҨD2+-lEn 5U2 !Ri-ͱˊMނACidbd 9 |0!D DD0! dx@%KBH }ܒ4dɚq_r O2.V~z> 87S05RR`+g䔘 ' /R D3 cvZ7r[vǩ->j7۔oQ\i-anv0ox 'ʪ% rх c MCP`zX=˷pڵ&#Zx_9rNQ( \"*C_^lNfo퇻o*7ag+:!9dS>oSKKbr 4֡8ZHoO= dK >l{ep=uu|mfmڸ|Jk=<^-ʠs6xO}aCYq.G'Ws 2^c`$ _xvѢ|IuQf%ȝg_ GV7'P[=if˓ dUwp (۸o>ѵ@Z;w]#8 # 2G|i3=m# ?7띙DJr.{2*-4AuR4k'/pTG;_tPf] i Qpɶg?FϘ̬?(67U iBFbv.lIA:<ÙW~ȏ6M=Li- -g Ysf&5ʕ+i$ϤIh^c$Kjc2ĻF?EC鰕]97{5vC`th!D:j WEXZ2;kxBZ7}i13Q~?&hrt {gr+=qek Ur7{,mȠ'Jt-yf.: 8}w9n]Kg8vq1aaY)Kf 2iv?D#>;A qYHXux w{,=Gd4E?nNB9;,}aCIRi$PiXغt]ޘ`HZ"p'&)<URdM m[D&5S{5>qZ/vƘ#SH+4e71±^1l"4 A:4-p}UCrnHǴʥр&fsDp󊶓@_7"banN`OlhB8ъy(lbZ9i$jOq?u so",_]βX|ҁ{IX9ͷ$ݜu~!w^C<8(JK]G2:V<,Y%:Elsk Ehou [fĵ΄`: &(8ncIM#:{L+z(, i/dw!p%ђvGdhGt/:"7*6˩22Z=^Rܬ ԌHlvP8|RkZ;T=MVY³.,A B650Eh\ȀTs%:NEedüO-Q:oQ2`ਮ-YefqinzH_UkmO_¢m(]>g⥽J}[}3n㒰]D"Zl 9l1kȄsR:%ҋ{vZ+$䂩;IMsYǸ_|E&{7oJ ic1Q8E蟙y 1L' + Kjjk{+ʷ.h6HK qS17pu58ǝ>|XRk#e.}ywݔsT$ޚU}a~ah`i[.Y6ə^5㸇-жۓVrmm% NF;4JҖTL֕֕9ò'a128A9>voXsF5 }dm_R!윎TosN:>tѢխi "i;RKчDDžhmq?^hgڥ2г;ʆI?SIcϙ-u75wcMS,7 NOΤ_ 5fќ,wI$u\! yH"xlwCn'wimN ݡB?G[N§VC2Qi!Q:Ib oED_&MhVw$ Z̩hm+_ky 0Yxz$pPfLZp!'Bш+Z˳}آK38뮻kZl ܹg]יҼ0wèMu&1!a#XXfPS@$==*HQ,!J˿/|s B!!07fϞ"ߒz00:L_ߴR5i!mۿw=P4̚I5SúO;ٱQ`ֺDS%0`Dy'y- aĨ$!qbXr%B(6ҡH()bꝖ~ϒp?ZG@`2."'d]eEkŜ@)5E)D I jLTH*t^*)mlG{'p!9Z5ɚ3 <iXE@Pkb 鑰 *jHyJW4 cjl[Bfv2?ʒ14 )Q6v}/65J@P~d Z RC;";a:qDDM1RK]s!8ĤhҠ@S KhSLf}E#<O҃Y]wEgv*tbʈiq d Y%h_ف0y#.8,"I9!eWH:+w(6d8a_NlNr8$;j({l>Ӝ); oYR\rɥL:(`Aee&+v E.AOԛrN?h/JCY?4D!VLC@e!=rǑ/5@C*YrIB*̵j羸{wf:c1 OL+n /֑?zsc:F;i|~}sv93F%/=w8RŚ5lJe"=34'99RT"nα@&ZUUrK{9A}{)m#23f4]wa˫7A!2Rbx(`P[}ԁ>,"Vb ù)G0ÏMc8WmgRQY7-?t FAk'Ġa&M.pnd(D<uk+;% 3[iRZ,Ɯ&hѢ$3$&m.e#O8fxׇ3w"g c!ٰ#lܶ\ AlY^Lو.Rcպ4-W|,b'reA9s0mR+Q*|_3f]=(z~++V(ܹ=Jem;#0zې47<-Ud+zEKL[.љ4Zuu krcu=/"],,+sB":d.H+1f<^jUW]uM7P^t:1B>e~Ͳ 3)< dGߒ +vC[ #KV,X`Nĕ7k׼]p)ЄyVœO>"X,)G@0Ӎ|L2=e=T ù˗k|a?zWXAPIr c 30|pfZ\ފ6W’YQ(frPAa˖^Æ &L9az&kR}GbIYȞSM)`mRP@fibJk֐L0p,(8FmJ#+*j E:TΪ [$2gV7 GzV*ݖ@ blŁmxT93Uḱ,2T Y޲Y4\FZ>OY:jÊs\+4vtVk;F R逹pz饗*A`F #hh r3x.񡣁VK~b@B,JJJZ hhxfCztXD:[Ȣ'aUEى,ّ  h86EӾT.<_K`PW̴{9.I*5&hcA X4|VH[``h N[U o-Jp@~A!} -JWC1!ekuׯX7nC~3IP&U&,w0HQjz V-з8L=F)PTaK*:\`,w~qzyΘyUacE.mo fRk`;ݎ/>e+b+ջdGa#W:駫T:`X|96AF v=1g,Qt&/듿xro8)td(F dh !6mkو4ڒz3_+>Ig1ñ =/xER\8i=oecڡEG}󜒷Lza/CѺ^ullu;\~w 7Y:0dXeJݙG;}{d6@L\ԝcKytJlWTh3= (.Q;;r9ǫQ{huymF̔@A_{j4=PL ڶ')(/'p{x5tZumZH"ӉX`c)zlP:ɸ=w `G]{폱:uZ'S"(m@<ִ\:3hn0eS ~zKKeX'#=R_W\qpzg_~~WJeXK[<$6l!kAMfzVL1/7Y#z꣎(sn>!~wi{嗳⒴Q"(B4DN01{bcOSN9/JJl%iRb %:`F7,e&X #z͈ \M}ky,PGnH@05XDm'y*@L\g*aB4 B4#o쬜qСL7$ݟ/jF$Y`ᥗ^b嫕jGVeIJKPD-i؝D0Ϙ_Yn sFuם)qtDpFʭVG o}*΃=[ hhJ |$&zi~,:itSqRjI)&!UNHz &~]h~48G%H3Jlo4:-`G|8dwnQBx5kKUEa"Ã";jF cAaܱ !]4 }Sv A,"[18 oOmܹwZXT}[;c=g"&L0p)8b(W۸ {>z46Yl dsjǞ1`ATH3GWj @u]t`P&_ݤ$! BTg Sdb+o+Nq9meYC]kwL3SOlܨ€co蕥?>nͳ_qR; fl|u[ߜ%(ݽƛjnwU&KK7r2"F'驜}T0S6. ^~Դ>{YEEU>=aJz*85t3EgDmMpiO *:p#_\Wo/}Qg=iU{>h6+P 6(uyAhXf3+|,_96/3N`q Mg*ǵ۫\>KCR?t}u֋A+QG;'-˵7߿MIiS>\Xup;RC[U `<|it'OfIN'xE_ͯ ^UGQuŖ]vWtW]aV k0@]H,#Gx53QI>]~̔(3/lu3yy%Ge)6IcuHJ[>kd{Yd"|+WpO? CZf<A\́e1֠i6; wXz3Iը:MlIsϼ`-1'D Uk \a&95/Y#J5.r!~+i%S+Ax p$GID+0pVy,&;< :ow** ?\- ;X7(줒D !@Xr=!j(5j3PSR ,ϢCel$X2 @`!g E(UR 8eZMB9flex$ؙPt^x$9.}& "_#>)=c|a Kx 5Ϛ5 cal,8~ SeK3]t)~̈́WrȽjO.0#  7p {us7ߠ6#=mkB8"^֢*7!NkeE^߿n:s3H_se U0dWvs&~zn-kՉn鬭m ;nVXmt0|pVq4P:+EB+6Mqt h ?4IZx,64Ge 837u۲)?xX3ox1?.'FiN$`PNִV>2<o~:׌p3 ;7V<>5dfrx8^WS+mlT+ݽk7# ^p,޵Koٺ~#%q䌏ҦW4hxQ6 IvnڎmegʭGLvAT#p73g +>2U؎>x֕>!`*{mK6i?2rN2O,M-F7EƹyȀ#K) HOw>e+}$Qvqmt Zr4Ad~q/9D} [ۼ^>c JȪ+EhR񡃀q$K]N:WN'+2݅.ɴF=>_M΁?VL$Y4T>@IDAT0*F6!Pv,{wi0J+&8@l~Lq#I͛DD7& $bHB׹Ҕ}+^Β;رhuCduhU 7$E&?ޔ!!Q>hq̗V4.5 FHFl|4m؂W#U8:>'39'@'o6eʀgھd#_/<#N&E 5l)&"@ZCO&]NpyP"3 bl$胁X++~f<M 5Y? f'VC3#=g:RL1OI@\?y-( l񊋋6ʭhM3!7x2*&k~,8⭷'g)= =0XW;.Krl+L\%#iBIHy$JH-$f lp6ےju]ovN>`٘Ŝ۝ݝݝQhAaҢI\OmSe?_rS0*‘Ùxg>씤Z! '²E96\" i `KE8kjj¥VA >\giŔ$cY(5Z!xqeP#*щsDư(d,!9*ml1@0edM8tz]/jBkD!UiT$'Yw{ cjp+)XՅqչ#f+l-\ԼJ=R4CDsT>)G½ (ĺꪫsN^C cih <@`h5k+إڋGhwk6K҉K`dתEǍ ~hQ($bQǚC*հ h-ӳBrofCl\f+H,G݊D%ilԽj<8kCMrF}c*s!;/|6r7dN]A3D1q1CoR'Jd>qW.|O˜T ~Y5ITG_B vt^6!wʸIЭK=z]<p~f(:.&T٪ )g+tK/el GWXL{9 HQ)"@VLd.i;%QϯaXH!@r qGN&~;dgVY-D,>+mw[wt4Lg' !"8\Qsu]!sk3zb<.vqHx"Ҽy^LD`S;#oo[g_d2죎. #>zFwt^:ZQUM'V#l6vpמKΝ~aF8TSR,YBtLXu3D1Ą1(n ksϱs-0xU(\Ge% KY[ f/x^=ԽfG/0;Vx$" “P(+՛P۫W$$9z^oZSmlh@ z?I,M |%JA%QcTW3lmi"9G)P7M f~!S56G6 hj˩tM J:,hQc ^j Nw^uUT> [8 X=Dl,. ~pXr6[{3\R,H$P6_hA)BX _eygVV?qgEѨ`'5z= MHZC0cҳǙ`Υo}W;ӜިdcP˯!؁~zVQfhajBYY+2Dl'e`Q "p}`qa^HN]jP4 :hK+骏ߺkvi.+ N'Ǽ6aAkVE2!}ѼiIŔ% @lxRROȇM~ϋEF 9deŔ[#vuT ݲ(ϗ924(Cmomݷ}w;`E3M)@$ f}o3!01QFLgyl=BX{˨T DII1Z~UU {B`ꭥ+fwf~iWǦ'+1 (BMvǠapTT/ ĥ(B }I QHrd阄WmK|WUtW"9L~xǯ$T|іDjIŐ *Ԟ2zT  Y 9J`Xf &J,@h1Ou*jsJ(W[h,h/%$,p89dRA3T,ȣa7ZV: tԛ4&b\Ch:G=h $f:Ԛg8T=k`SlO !y*VvA?dX VZf/I4ر)Bx(+GgnO엾%ꙫlHP!Ӹ@#U7N̴x8/91l* F:GG؅nV^g]}O.S_7B<ಊ~Sd XUzbh 6X0; $T 0VTbyɉJCR #n9b׭H^%[2hĐ9}aϪ]մ웿8g| Ao -/x'^s>Y^<2huݜ3PYqTʋF^u;bm!`'(}EeM \1_B#(I .Xp>iH.e.;|衪ʹsO?sYK^|' udd8@b=Ē쮻b 7Ýpm9.q*wρ6 Uh&l@!d<jBP$ri!9qnG-L8iĦ$s`'"4o dϾbC2*I˯ajFh QWӼeE"/ڈs lo]+E~AA_c3aY>յo48i&k'P #u:ݼ?!GU.>|Gք)NW[Q.θ3Z!Z:LSeTp?оsއ  o7ti NyuJ@nzj#>m~-qw˒ͷ~W|]}g[ZZQ;b| 7LZ<5GOe r\6:E=VFp@y 9dRH0WHB 0?w7oPT w 5 st}>N{+r [SHC3Z 1@㦖$>m4fmv,fI*ޙa]8>RTx(mJ>U>YRgyRʈ !E`om2w X:n%Ovbx ˅ "]'mGP8UߡfOOʌxy MggE;;x>fK9N hO^Rh AGB&<ǼnLN$9L`;v47Kh$!0_eO UE˖!X!5\?a͋  "-. >ALf΂1J8NC0(~~`*۷oEU@øPJNBOv'H6 [>×-.zv"jɸ"CI/3wj֝Et˾v|Ӷ~hXVHs %}dR9L TJ0>q:phZ'h IRSCӯђYjɟߴ1D[K种7xĹz_<L;jݑ"܅|h܈.og>[iYs2}X%p1X^) >BI+Ln„GXpWqCׄx riJfR@;i?4aԩe0p!@'\mĢJ^}aKۻ+kP=*0hD*&V@gϽ|yͷEwM wV!{ȡ]n1շl^ީ3y\~-u.jUiyH>mKq0ۓ'[h;91Ϋ4͙3F V%lCUF'~`3ԙr|UYFBlƨi=~:bֲz1f.t=--L."t "IP`lF-GV=&Z\GX ̵Jo`젒@lT>AA$xkX|֓ Iv'Z GhzHtT[Ekђf"~fhN{cy$dF\ Nd | }NJPknJ;]u<Ⱦ&훟oz'`ۓ V<<܊us6̜/ps^$]B0 ߓS;rfxֹ< ^gq$`!jFӘ?pyr_GULP bJy 0b⮎c8rxDBԻu乾[ ace@V6mgJsWMmRugݎ Ν`%׳Nt0o%pFQ&!0nfMwuPz"3}`gw,?SmAi2jG"N\\U]]_{}Z vk(rj?x9rXXH3p7S1j?\l*2IŠR%%Q-3a;CFn^W믿ꫯ" bm#e;%{ȑI,Mnٲ @fYUUq`@@XŽ?Jŷ]-+`հoc%~Fm}vRU`h hnj \(pTIUdEYQӉ[JY'ij{CXaU<2Q J~r\}r: N'NnRHKD)w hr@hShhP{fA@PbhI$l)$:py)L@ϥ4ⷕHN^$wVjBH8W]u3'9\|wvc@!xê$)4x93xhKxTQB'ha'XϗenV;H/z]JwW01tׄxR[(-pX0q~ #wZ'ec*:h& d4z*++>FIz!uq!X슜t'2݅]Ҟ*32˗ sgׯ/9olz+f/ZZτY#;/u,gl@}/"7.DI]F)~,?L>S0؞`{~%t+&œk7'Eas禍o}=u۞^}yQA*EjE~]]Y]]Y-Rc2mYi |ֿΝqK^tS6qD O|I^o=RO,!k:bƘ3<%\Jm{U駘Ks*?o "Y-uuxjSs3{1T <5ґ gWF`|sNYg~$˽hȢx]vllE7?[N6hU1o)i{e߱fw Yc2m"nf~~v:iW4ۛՋV3ė_Z?ȑރW7GC 0F8GAռq~Xmw`AM ~$23aDCFw(B Fa7=R7%w0¢N kY'$DwF,Q5 &D%IyH(۔&IL`ST ;GT<9*y`d%47[I 26.x1UUp+V>JH4h (9aJG$\EzFm6vuD"LoGUbBqr 7 lxao3^sF$W+A=`_=ZT):;:7RT9Gޢ AӁ|VřoZJ&Pd ]IE+4fg!W`x@1ed0'`fO9kB#QI0l9{36!N#SZBf%TJwj"N1uqIBcWeEW=#-PǂW`f`G6) Jis0oODVt>(<}9cɅp;ĈՌ2æ}It~bC6=BzO2<a,N^{j*/rn3Tii1GK}󄙳5G?£  8k0$˜g^.IgxGRs'^VZ\͕\q_v;㟚ԺvC/p6d"g&Gu1G[ߓCKyyq8q3X$%>ML4\e!ˍ$DzoՇfu B1Ax%$z&zeӇd%G警_trٍ`sÊV1n&ecNŽ;7ig!kiY𨲂ݎZ(LKѩ1/0r?{(qf =mǟ8~{vWIVRvwYf@* O$)INm/!S,`0`~/S 1R1f@;Zm2 4XyX 1âDaU;@<狶7=c# (Fea@lՔ??kQڊX-;*@6diX&ƊjmcՍY҈7`(VNWff\Go:R^+$TQK `(Zн6?  - 0*KF qH9L^`Q+)%0̋KNmқJI8 SEKM2$^`KDF"YD*"h)h#7w;cx~N桶yxlGY&gldͬh;Y3%56j%'𔼋dT_mn9]4Qgի 萨̭(qXq0͜@+Cݦ(Z `y[^N@YF0eAf}4i"o[HR+!)D!QaGZbP$ŭvttN~{FT:.wF/g‰ms>{"zҒ~u:ҿ$15}B56Lub^#%M^jN]v'(iƣ mV B,rAT!4Pa4 AEj ete mIJ AB$xtL4_ͅ_B iwZ$ T0QHTAρ).@LVdA8|")VJq8U!3 0 θ.Xٔ%rS\k' R6Jڈzb'U`R4.*]hP،R s!1S׊.mH0͐C.h fpn9;ZVx >ºEM;*I p^IO &%W ӛA1 Ge4"yH-"T1/)>U,X/j-wH>n08ߐ;9i|E?sW| c'b7' 2z\K\Π/xAi7uv/,= 45h2x}]>R'6iFDY>SYZCf8ŮF6 eL+(㭥>_z4Jnb Hi؃;Z:g) nGf؀3bgT9_!Lpp#ZtzG3P}…s@@KD^'4ʼnփne86w/0`w,㈊u{kv8 GW.90NJR>03kȏ^zƬac֡%".gNewS$1?ڟH3OZ^#҇Pq:ɕfgRL n 8$MlŪ:0@Gg x#Fau;3(oPAvVf-f#ղxcB>fhmc+McgFfz~vB!+n$VuOP'V Ǡ̝ھ{>C;MJ+Hy# _zQ~VIAߗF^vm8M 58Mԍvh yNg԰A~CVao]r:*M{箻ϊ13neGAgf ^9|8B14tn%UKJrZ(.L߹ϛFYIIRn!`PscǮ"h GCW,2g0oyH.j3N^ӳ1ByX0ډtO2b5V`G^ uڵ;2B$4'/0N2R>Hհ>8×| me'xCo[\7`I_:ب@ =Έ,%GjvH- KѸh,{.U?,Z6a졅-w?Is'e<$gdyѨeK+TZ0m]UaÖ+wխ ٰMf2>ILb}Ɂ{4P?>֔ =KǦs4E(=%11mDal28]|oO/GT[.@Bc&9> P(JWaUnL\c;V}(!#H(a 1KE/(8/xy:2bGgkXwWkxŗpV$z{bmn+d/ٶ DݭjN (ݴO$=Ot4eYãR/p Ghq 8v&+`ty/ä }6cFk5?[O, .g>' \0k>c$jC;b/ϼdîC: ^@3 cG{֜93Fb $t9}e#ϻz[ #٫ə6']Y2 1 e(pCڱjεo%9+Y>L5?=HFEiоVͲ7n޿,ciY/]}FҜM}*Q㒃fפ E!q(m/ںmW}}S'S^pge ))=r%bj;I-wo|k;6Y3PEycG 1DO4%츌_2w-{s+koe$hYw<Z7qԠ3N;y&T|Z^{&:]S-<|7\#2u;$g,Puẏ)俻rѫV硫=opJcF>.JY*I)^g81hspLsPdx>Y&%MƃT}湝?k 6xHE#uQC6wM0Ny)7 f$>֨7xF3Eشi'?+_6VtzQ]]I\Y%--(Wp`+Z _W\qe $/0<}2 \4; +o+++-<(kW%S_}՚P៤!!ҬhbƀԚpa$po>yfvk$Ƃ-(˟JFj()^'65mI)~3t=І0=Pz@?dI|bU%*ZK'RkQH rv'!0rvtJ1XYYQEiq`6J6? C*;h^HX4\, IZj1fFӄ`iKitpS6'Ss{`mƒl/d TKHC!R CNF~cWW[lPzݖ? I*R9W 1Vδ`8UpvpўyeAN{a5$`•*+#+1eQЏPUgSOh 7efp~Z"-˟VVךZZjwm~.:|h^Ƕ򉕋}/.K>puD0UE20r9D`CcxI5puĪ)C ؀! 8GZ+8TL|u4MZ4+#j]-Ons}d3[FF.2|5:+cO8q7}z#лE)Y߹0` =Akk Q6XBhY|w?cJrQ?'> I.b̞.Z0, rr-x/bP+#(?~}^،grKc˫* 9cl.KsjyO.LHsgx4{`[`Bŧ&:/͝_]8/۟ W+$?p߻gKQ;ݝn*!d DEy콜?yK3%\NRBm|齋Wt>6%NW:%,Ȧ>=# xs@LY{M'ش=bHAqnK粆 JyH.^(? -ka҅U}*'_ǟtL8=t*W- %6qЌ@pvbJ D-09URRedVh IfzD/z,鉮F#Ya3:F.7x#LDإi޳ N,A@;\e x…NWsv}<ꄛ?-.o(=7 09皭9YJ&!@IDAT8kta$GE<>r] N(Mt67m[jT&r"k}g|ji~6y<<)>ymhK牗w֩=^-38ʫj륫6?6?;TgSzh#uOӎ}[C/9w6@0 ӳZNj\zݏ.X}fH#ol}5>'ͼhL<(җVmzrٺ77nBu5if l|#K*qkc>ڌ"kprSP8k]rFFZd:,# qIvkgxݍuI",Tg{g=(;J st_b2Ԕg&ܙ㻺~eޣi '!04Kh^0vȟyᷧ26j5a(לFtRn#ljy r#l@kx4ݟ IHvX׷ofOC6:d N0g=oۅ$|'Q4̘1>YlQgQ38t+T5KI<+PP2Vmm6lDJv Y`ƒl+D=e-I30[bJ`nR_җBr*@gRqҺxʒˣ,H`# KGf!}2<W0/<;!%2 ɁH#"vw3lPie^L(Mj@E71$d+р1XC$Q>)<{r,W+MQi[ıAOBQ|&![z0U ImM>ND t|T,"ZB P@3 PA9%4,z Z? CqnӉPk̵8LEÂ(iXl~OH>CǸJt[p,+Mxt3';>/"l&7` -$Gd~ ۱c/RLY17ߤp}VЬ~jh z6Yq̴y`^Lz H`h{ADl5#NCK O J>ޛ'yo)ct:ϕƬ ׏TRXvbeUUstmU0ubWC>(*μ+O>tvjbړn8zE:;24z8RFLNA{1䱷dz0l0LOJd 6mtf3cϞ`㟔* m$H"߼ ӑ0\/~¢ ؓD6L3dxV7кiu&>hY#\qIFpr;Cg~t܈i}3)`M=xF#jwVAԟԏSH ۱ò9a2NJ-a,'/}bEd`$F]!˽~CtN{ ݎ[D1EUFOb x6/7ݨҙX:7#'P#, Dk}VG,ҧ5WӭNSqaG* v,0 /IU 'Y)%ܠ#k!D靸( h p-w1E|W5@ abB(+H{`.V b0I,/Ym.Gzܽ~2vG{"KQm렳(94guz^Zq/~Iȅ[AE&Fp ͮw7^Z??:wzKW}ƛ5;{9ILJ$1p8ɗeQB#/^a (%\N^4l`qr`]b76~5ߺ` #X{Z%qW5ҁCFsx0?Efuק>vs]a;~ƀ8ݱeŅY:Ϡ^G@C.߹෮#DvmiY}X(s L!WyxɆu!QrKNRGV)[ӇZ;nv9<#beP)7v%]f5ۿs\eh'Psj/Iw3IH c=ӄ[ <~l)aIm4!/U#TJ0&JpTn?0Y0/erxY!W(ySghhS fDRub#_6l%&g<)7c XܰY)ӻ 04$8%EF|p<&NPʭ<(a9<ʊVl!Ҿl0 ~b@΢? g~$xҀqdgB;~ȧ&܅M9)?cG^[֝|cfp+{|/,y_j&OSZ.<)҂B601b/G;1968"Kr=o-Zr ֊9:UBJHRK I~cUSoB_*XK)0]eYsi vD3BQn c^8{񜨎QG)  ,25" vKc  ~WMxM:-.\WEHD#!=C+.э4! RÊ 2_x{ EH=0z-a5s_Ik ~E!D2\`DKaBٰ61bf?);p= kYXS7m3D( 3H Rt)s2<(+zko4f}]AX_8 +ݟ4/3mV8nFsHAJ]1wf0+ڶ`f0]:Cm5scV .#-28;Wno|rde9Jz'r\'Q.4<3%t, tם5]Ȇ8atDM"q˽/mܹEˢ)egE6VE!O9x:8M'Oy{ $6 \qe&dBԃuXCMY^״$~1gj ^G8`d֨CMg&H#CC n}*;u(Ej :;ښȐA6<(aBKaZ[7 ~P]w&Qw7 R0Th)MCk25L-,(ژ\C5К 8GJppV7oԵmzB:ųK5DolGCNQ2*#05~*0k*,ǹsN<8BpT/ j5NT#`}6bS9òO"?r=ȝwީ85D֯f ,͸ggP~փAR8s= ьsc]SL;IhRԪS$F/e%ǓZcu?8mmPTQFYC*Av)Kn<˘}}"RH~ CƂh3|_ɗTݐ]gM[{, Sc-?=;VU(2MkV:Fy P@@B2RT|R:RRzTY āGRI6i_lpB,˯z(D (KSp :d yJpN(LxB5tF;#;ԟ^Iny\.HOsehcYC1+F`wA(Z96wȱ{}v-wk u~_fNjmֿ%[s 44ge2#WwuN9+rixye!(.c!@U~ -bHHdάjoؘy27V`6FnWZqa)_]8cKffXtй#oس٥r/}L(%oHS t.ߤ4} a2$Y4ȵtqR oc̱deӳKwNɤY]ueiaD,hNWK7-/FOU;-H̎ɻ8(%PZrCf?>n{A{ 6EQ/ zޗ{vԻA^"z '>sϝ:I} ھVq@/ P;높b9ğ2IJ/*1K[<\'"09e@C7 ."'Q'0.Ke.ѥrvԴ/ʥΧU`cm> Ә!E> z;}n}iŗ2K8J6K޵?2 C=4|H ?\yʰUI"- vR8I2.5 !- Hɘ xQ+M?)$q0WYŔ4 ݟ>a* ~2eT@A0JB$ +i}i],Z^NvzRy"ʺ=N L΢Ъ4{BbqwoD`BJ$p0 y3 U8#8 _e~r=V M?B_rlū5,[1emdOzWr%774N?3wϞA+[72tx>OGתVT4y3tP45UZ}u {\s+W>q_t,V9Mj#Ir``$Η,0ME 7 20'_u0Ru(r::ü./(HT}7s!`SJ,~'ZVqfīq_45`KFtɞpV)/hc<ԝ8Ղ1nП+oHٻ+a!"|he#<ťY@۶kUXUd`1BجhyFܱ^_\yyݞCAΧOb&r@l 1sef T UĒtCcocɡܺ#+fM[Uי'kV⇙Zڒcf=^]UMQfX3 p̍h>Z2c"c#?Erws \=HA 2O<䤝NS/5L=BfE(k5(u 4C B ք'Fa͞?Sb@< }̟y^sÆVdB#hzH#[iuorl@9\Stcs?@8b$XpP=YgVIF単Ie'a ԥZ} = q 4fx~n6kh~sCkuFce˭X+1|s烎TyߖB*zzfȹOx$SWYQ8wƨVtS(c]N1t)K푗 23c,  y3p\^Kuvmض'7֢ԦRx|ƚ#UϬ^& 2tYGb³}XR'III V?CCp,Y~!'&>C*ڈmQI{}" O=4S' Ă)?VQ. 9 X+G{I+<ɠr;!mRX,Lc W%L4 > K󆌉U= 6GTR-x5/_ u>Eo'4nMQURc-, WN=Xa >$F'Olʂ.X!k^]] ҬIQk.x8 )pj"c];hF]Uw}7bR5 bi-?>?8e{cN!Xʦ;~{=uZH%3ae4Ѳe=y$CqLuZ3~U,D:[x1{Xq(6E,щhAeF,CX*aN*hg!G`i?c_z"c HB/!B&MpB< Rnn*;&-e')48^~q*H^/t !xT'pKXAvqcNԀrdU%X?  P /,Yp"Paꪫ9?LA}4 a]׬^]ؐ(s!SweO0#9Ь|cG _*g{lb]sX:ٝ8-̛̚>~_7%{|;%8WWZrm6`S{i$$祼 !@`lL6nr^n/7;WGҵ$'y?k={fggwg֭6GrJ; 1`>Lo9&:lvKk Mx j@y^L':=-A%$+ND4X¹)f:\mFۃM&)Adq `:#;wJ;-pKLMSc!qˑгvĎ2 tƲb9\m4Xh{(mf3O yUfCB w#2Z[9 sŢJL Q4- _E7@"a'|C$>6p eBM2J|̌(< dwFXS&ݳDK'k+׿_`m h{,hV>d"M+*m~GI1(qP$8zoۧ7838  &a ߁ Y< miNƏqC !ک.>sڲ5}*NM,rECy3ƎUA-x#-Tn۰co =^h3]簾Y_b5fQ`KLYf{c:%,&쁏*k>ZCdRV6bs!طo< Y8z1|gq0Mhk(Q tSK1& 33Ϛ15ۙL…M?+-6Aw8̸&Kŷ? aVɈh7*׬*}~&a ~smھf^Qf&KE\y~}ZD1?QRp'nr^hZކ 똅Ϟ}qͬ;Bkڴi` Y:sQD[B edEh22C>rkѢ-N FYh$HYl~>INBeӢ ?D[׎8UiJB!:묗_}[w޹lwky0*Ѵw) VdvdСCEg1FS)Q.ĪSX)*$֊DS= "`&W8G- WbM W@iXfm0b{aD.JH[kg&qo07\y$aNK-\w೽%nWGSZ{CQ㺝BH>W^7_`%n s'vǂ?$iQHD-K?XrWY7S"=0(xRrR v"bYH$H'I2(:T)h)K+'\ @af\^Hg1`"o̐e%tL6%U#SlYIxSmmf;6R=4=(ʂѺ@܍X^s5PޕhG2g]{,~%0xQJ}'HSS $h(w. ]7SqvP4 >i\%L$>C[tϮ)kj#*CJ6=:Knf\'=ZԧyCROܰrPeXV3ȉ;]:ugЋoÙWP{w>㬋[Z&71w;:=SOIY IGO7tkxEqB3BǫN{c8E0x%rW(B鵕L;`utՇd\n8pTh PڡAQ5SBa3A$XT15V}N بcpO;L%~BRbOR.rwv$gr94˓㡲*׉ɔl/6g0]2 G җZP0b*Nk mѶpckVR<9nk(#r6kd VD>zE6$E EU$YaV"bq) H}BJ0o_!{LVW7"0/ #FND;'dҤFC)pIpk s.cgV7W>pvw4 $r)I8Zzu? ȑQE=K0ÑZEp9j(n/h&V $9?&Ra7+53h`W>))'az ʻLRN0V ȟ3SJ'՟ZXVKX~hmI2±Rܢԭ(ՑEcmVQ"8:; žr eԠ3vWo7ǃ6!ZuVUWE'<SP߽) ]404n2EX%&9r`2CALMjѤ1~yeMX &w9Y;^]tzN0iF `JKyl.)5$<5{1/h*l*,0yڳ>C<2N 8k^[切WC8E0dŦ͠::ܙ'Ly4^bd0_?bDPSbӟQ,!XB O;sy 8Hq _\o2 "y?!6)Lr _s0F " ST~>ZXrBv)S&crhѢ_W8e"ԯ}7| ;s{3k3 ᗭiSպśi~on6%sLwdi[w6 H g _ךѼ;$˶yKtp}Ɵ1j[ ?ƃQdgjVF2vd 9Y#D-cֵ,<ʠ)Ϯ ;,?~PÑV/f_a? K`cXiÑ>e޴_nHrW_U$lWNj cp{jDctn4,N`KI*? < Afk 8 k8°s[ 6hQܮtxAYVgXJ~ Pd WUme3XtLc٥={60^~j6leHZW"<]Ϫ*exɶ C(p]!E::D1d0iǼK/4J+yK)UvpV!PGo\q3gx%%M˲_᯿z+"tۋK >hqnN7tg$NzpOx+O]:9|"-}OîUH|@r (Zy4%jVQhyau@NӍ ݱ 7h|T J&y[666L8q55; k6oX#hs •+>&l敖cDz VWSevwefȦ5lk4,/(4("=S5Ph:jE\9>ZR=2?0Mq|v:k;vby̯ϟ8Oe9s I-,~~|^`~@>)[sȞ9Bo#*3$#-U@;7]_U{ h X2`{ [ }b'o*u`WԮ2gt%"#!x4B(QyJ\黑$Z#wH'#ܴ+̂WDuЀG#L^fG"ڸ잚=aX]Gϰ ӃCz0CBf˵^ԊC= i ] 'Ei I}vH[DȄ0$ĈW5E}H8zʲvG~{f7/cGzl3;\uI df{=5\/P94^"atg5+Wa<.hP}}.٩Gn73Eؒ5 B:^{I?[ H D}h"]f30s2A"ݸ[@Ψ R\)^52}569ZiCj +P$ctU` ς"V sd ;CbAF?Җܒx|Ӫ?.Bt}hF+يLū|?6]R*r\wgmB"B HjG{a|a=ږr =D2;VW:o Ȑ ]>~hegMDz4$M^,Yn]% y9ZNA!]I[6[ac^v_rs7Af3ﰟ>NSL oo5 Vss`mk?&S:#>+TU7.R:Cu3OMHw^-1?QZ@@VQQ<W^p _W!-L, GCH4lLuτC<5c۞jաْ{LCeNtz Dɂ*+1<\3PZLR}(~"B~T0j3 Θ,J8PlCM$S97m |ȠcCFZVC!}#>L֫h ˃3m`[^^NZxHt%0+|daf`!EF i$`#!^aKV p#GŕHU.U&.kZ4Bv((?ȝQh%Q&ʶ83-уs/t^1p= ~NW},RnXaYw3c㭩nZSD0ͦԎ4J1(b֬Yb(&SeܷOXo(OS-N[o虸?0Ȝ4We> %(79t_җv8nGDa*^ }gb?+r?s7@aҠ(. ^ʍ@]s;We{~ڍn Ss /=sUE[HB鰛*_kݤ铕G)XJRV0!mW Ir5#Wෲ N `A Kh!$ҒJC'YW)8$~DNyO7)~2y@~)I\ I'Oߴ~#mI,^ZssKE0LzZUUŁU>6tؒ>3z5G GDYGUFҢj-vD/+ӗ Ģjū{O;ǝ/{So7)|e z^Fc&pq04,"Ǧqf1h0PQ4byI:VCc[MAXaMm)c,de^Vv;a,zolakȖ]<1MaCt,G8DlTr9NaĦ6.V>|N9@p; JbB6`շ:sB,%< TCp&hog 7Ȩ9$LVK3gM+TzN|?P 20 u DLC!4ؔvԳv|ݛV.ܳ-6lp$ ĸhs;A\TzB{׸=X֕tiB!-ԴjЂ@8pҡG?1X&oaLH<8m Ii,iQ40f l`hXad/l7;Igfoݸ::"vL Éy1HDzGb8)"D֙:I4wŶ}!_eD9oα#Lk6f6nhf1gf=u&mHH&J)@S;jJ̌ V"5 mdm{mK2=Hiӎ)̎<$[Zq͡4*`4žyGԍD9i(oL1b=#j=θ*akdP6T2-{DT+mɧHEJ PH;f'C_Q1u#hR||%7m*SҝRB@IDATCAl/?Jqh.%Gu ?Zba[tbF GZKXHNH)mmAtP+.HOT`_u'j"*//G{K~_1?眳uCDe]w.8tPs F4 s0`)UBx*ªzj8ck0Kϡu+FAU(saU+i>2T?x%%AGZc琹 )S|gR(̸nZ$zsKް+7־rRԑN0t'i^T+>:ĸ?J*|V"bS?qj"nH4sUMp$OWWWc ABE+f/Q`i4J!/IZ$NS_ۆ͸Bw٭Oxd__A F L^YNN`΄*`Fli{/h#y" G1괢v6|7rHQzm4EAX Y<a-]=kS,\$I.Y2O@J}8#(4xUzOb#~֖ZP|'PVy]`x1eE<8 #!:!A?+jO-%- Jؓ`CϿ[k 7~hX0CG7tn*47M/E6C*mBNcE6S >$l b@RK/!@BĤɰQX^vU׫\M6;N4 Dٹ6լ;<ᬓo8|*ͰMA Q[\S2损3w-MӦ uMÍDvQ'vb1JSE,@u*$X\w~I)yO}3i̎⎊/w!}ݿYR{lA2r'#-겻qc<}b;3?\u$ve;J8d,4z*QۮhPDi4EȐR̦892Mg U5?Owm2(3>M(qs}(Om4*0yƜzQ¬ Od_Op2-rC-Æ̜<2oN\RR>7gP3JR%+-IO a~5Nh|w:zv^4ôG,ĢԶ0m pe+ 2k<>LVv6 eiS&϶wn^;LB*;㣻s;!.#@JM=.{iq~],L CfdpAt4;ڠюV(Ei9昌52 Kv:`,.ÂSjD8":H \EL UrB ⤦r6,rDyE_s<ֶc6joЦ 7I M-Ą}_fC+% @1<35DւMCt82"e5&$@&M/tfEQN1EG ktdQiq-KPK_N)$>1S p,2Oq 1I/SOۓOo~5DA^& kE܆U<:iÆO Ǎ4!BtQv橬LP\x1rBXOY&3:;H vعihA^&HHBd6%eS eB>sJSfT@!u*_shS@dWk8+$գMI?53UT ~a }?ÆrO^pyمu9 M#dj\pu]4wڨ {߾y"+􀐽[zLTAY0%GQg?CsIX]SP O,gt*d7(rmt4{GUvn;%)t'LЯ^BdS\LA`p-̟τKkmmm䒋a23"ya.A93]S;n0Ţf #F$ƝJ r.FL"P/:- ٵqcLwQ\$Ȯ۲Əˡ%rV\4OGY%C6{7BJrDA5jYaA%:p銓ŒQ*cJ KUԎp"!I_zΚv wQސ>Ί_p05nǢz*v3yx]]] }6|- ?+XbTT1JÂ">P樉sZk9`Ǡ ȕw33 $ 6_Aґӷ.y$'K,P >.d`Vh'#wbga5:zymh!ЙdAN'HI֐ (1QT3K2f-f{TkOY vܳ{7^'WȜ^^| ^",YېCxlo/2!ʈej-CM;#Wc\}.ۄq.!xD(,iGQ(Ð{SD ěv8]^ž/T4J%ػsU:M3'A9+iiXH?:Q Cdʙ0O" sxV[LP^Bp;&1(GdDdDXv+HQvJ"Ij0|T j'+F=FǯqcrQ%7O9õ]w 6/<:iS/zlgjT6݉L6&YA!(dQS&Ԝ4T~PFuWs>(*b ;%k BIidWx}$ZY\s{a0S[|Rt/ߚtŊMҽ![wN?=˯1ν+BEJ&T.!Z0vWX2+$qSU/5k<]뎈WTTI,ڑNh &GhyXMiIHI̧&4J$ G^/kHR) bf)N 9Hh>V-Mv⢢ɵ, :@=cxE;H&K:8u;۸aB2!2qA%5.=81z۩p̥)OT.OQ'eN󚊼 ƫIwbi+3Oh =7>{挙7\3==dGlnlU~ 63K\"Z#tܹFSB *6U"8077bq-n4*~ '&@#5b,hyZ>5u: كHi~t&sۓ p);.ƛK)]y~S{mi6*9f̣>'J͎Д:*(R,V3J{ס Ɠimr\u Ai2*qAyy9t>^٧ڢ>ǙT L|q{(\hc:QEabL}> H('ۗ3eΗ+ǯ_lH?wF^yO;{]99e^,$n"NwetngudǢՔ>OC Q,%44u]j8s)1PQr*TeN|VL.Ɍ>gOK9%a^44&A"w&\m ɔY\W2j{ZY\P4S}I- 1YЖ®@+Ă%`*AXu}j9á/+B#TuF͸l׮?Oc$܅g;+ eEip0 9nsq9P4e!bL&V@gw H=he}ݫI2M Xd={UQR'gĞ)dZCX~ѴX(7m5ZfB`>:S ȴ 5$T`űC+hvƈKiZ1?#(TVk'#M+ͻŃdf9"2yC n]{~]NwcSʉe&\F8xm&nf=ʼn;?ʢ6#igy?p$4u #))/! Y>/"~|u9?fP `ٌaɒg G ˙㫫ofTbhE&itГ*8%P(vxŪilmM-"ݷ%bklP83ٙ Ǯ&z'_;zP;L'U$+ mM*2@AdΚI5JzG )J(Z叢fX(\Y2T6;6#>TXh`*ct /K[T@@ZI(n֬YקO*)$сƂ-LJ>;X>U~X!!ԑ6z`hPň)bOُrm*Ǘm{q~#yM0H<`O cu`mM+Tǘߩt*QD57'Ue%xʍw ļ#O (?[n%:6U<4_a jS0T`$L^qL9Pҹ-I2L1؂$+n#6q"q!'όMnR!xGX*#kw3nbC bN /[Z֮9#PV UQQ ۑҦON(ں:6Q0Rr  cF/Ԏɂ7d5u$eFQxWkCM_dF6۞{MA P|Յ$;uz=x<8?󧖀v2ز_aeMso}G Ͻ(a, 0)~ kN`5Os8$^f}W{i<ҁt `u е(E cW?`/xvijWTT >bD߲2 5\}YSsɥYoP˖!Z8Es: l5 8q$ԁkk(P]y5gVYQf!9 -u !fsuz2{5b"rFF Ycudꒋ/aؔYVV0D3O^r)CЦ4}5'`@^y]m 69q9 4!&iu AksK RlO YA} *5v 4,JNd(c*m包xaސ?7"_вI_dqs^YƪhH);Vj75l9Ͻ!'k0P {HsNrԨ'OӄdR"9dhnddµ9H.p&k|fs4dr3"93鈜bQҖXk q[ڍj;&g:1 pi~ө2>]a4zdU En{d!z#~b 09rB#~KƑdwE귬ɩ@dLˉ>YW9<1cJEKPy|Nڭ;e*Dh Xo̜ŝ[d.{"3#h' ʟVV}چeM^`jZMH=t^gnvv<^ߩiǢ@&r@΃.>yAqp/#Q3uCcSl؎  BTY]sܘ!2c>(?B4l ?隃ܱҢ<. cXVQ-tdۿ~ܜ}p܋ x$ ή];p(B[v$u۪^[ş=3)aOQx#7?Zfƍ %>NJXuxskL˘J D})Rw ۮݻZ[ zcN5*Dy[(VwgT"Ѷbi-KAe$+̌!'9}#'GV7K!.xhi]P{eFqПƼgtФr)O3%vyVJBQJbo6bnQcI|ef^ժ+QXF2=q[IQ3()ipCkAMZZ{ beF`JbѢEiB(ll}ELuq2hVq=} G&BYQ ,%]aB2^Xs)GBf_:B;Ό;%h4dfYn+vV0$ Υy3KdD9nvOw4 rZAJC=Ez;4]r/2RNmm?,TRDOL.Cbb0Xrҙ̔NqȳiSt%lblewp}%W(ڈIoNn %F.hDҏ,3g ^^q[~^ģ.5ϩWSj8>"9>=%[nF[QQ|rP[W[ǔݝ+VPȑ)iM' cjR&lJp pJ?r=2ArPщcĵN|):`o<lΘ+=v٧iҘ)o[+\bP3fX4aiN]:N_#N 0佻|)gHaD(I6ot}ZL!ijX5(s3},1`~(t,Z[52\neg(Aw i>\.B\I *2}]4#51$iQWسO8ahiIt,,$(;#̊p_me r #0CKIk%t)=\h4t~_BRf-V9sJ (_-QZ>-IH6[V) '&H+IfEa|"Nzd&4.?_ٌH"l Dp,]d==+}'a[8/p7o6l&7U) Κf㶟?ѩ#crQHn㰽]2i\LUv7~#nu2(\C%xKEdOc/O˩B$bIq!Ap TL2YcY_e uH ϧ˫@R2uYQFHkێl6{QIm6}M!N_<et ] ϿY3}>2eS`6Tzừj'֙%>ʐ~q>yw608K!5ճ G #u8;/)F^C.&ə[ꔆSjs6(yfxT"֩[U4hF dr5@1i2=ٳg/Yw =x4eёv%Gy#mÄ3#%JƴhnmmeqW9P+@&!nFD2 Y/<+*Nhr0@wa C*-Wy\'X8]zǕ+<[1sX&ݞ߄*&T,8i<'62o(uCZ*l]'j-`X@] X&Bр`k#/OffW|J&j IҬ6"(S<߰VY Ҫ}DZ/Ban+V)rMW䅯LBH3h\5iA}V Txe=L~w%՚T9Bv@SҶ};\rcP娏GsbrCh761lZIPĞ "vr{+vc,uylǍ e=hGSZJJ:,JCnP>‘2uz0) $ Ih&B OXz54=/:8'^Kwdo4eisJ\f^hmA_㪇QTGi_BH(xTHɣC#j!H2NIBpG?+>a"$Tc+G`Q p+Af;f̭v e'0ƛo-|[ ^nm]#*G6$L@@GԢf i%Y+qEYKMBʭWed&ĚcL}RA\,aw!Ro0 |9"(/XYf|gy6 uٔx:#=p}@6!?+96zWGB*,v9*&&_:9xy\}ny~;Oz .8(lN̙32BY4f*V7'vկ).M"vUc|OSGnc֘;%[/p.6,bMcox:$Cˊ#/R$t>cdqYmhirƹY>nRd]* ||7#5SJmpwQ3CrߙK_wۂq 5(۴ز9~ٔ [5/?[1C*$gbb=V!*h#CV}MͥM;HڨU#47ΊBLPl6xn7.\ouťҧSV`F-oY+yR*RRKeCӊNw5s |@G[z{Jv%`W*d+\t}wr%7+3p@j[^YϾG˝5Le!#J&'*mR܇"`Vl4^y0OA\'hni.v1);8BpI1/hyG`?'y<6Ѽ l{Oƚ؀=lULZ(߽߶E4~3#vmu;v,{$DvҰ,^񓶪O"LhnÛM̕pW'blw~7Cu;{dަ3k'ڶ]~NsmMb^{ֶ]?pedO>k61M!&s;=Pv%,n33rj8w ,:ꌫ{HSnjlshIQRH˗?g=ϝrL_qՕcFپm;Wa7bgQQ,JawsÎ$ *U":$:͟={~];jj|A ;}gM~ v2FJ HW<OG5}3AM]-4=^#D) 0K/H@Giӱ800ʱ"f&5Z{ǥ+:D`{6Ȝ3xs 3<4LQV' T0-.N|'+- d4!쁋(<[KIA\}ŕGZv-w{0_=Շ ϡCm2tib`*4ڗ^|‹.dFڵ@pWJ a4_nF;7#Än7s<`es3o9v) {lݎ?df(V'M3|O׿pwOQmx,4q|8>2!p pyuދ ;M.k53N,?0.OhGlK>#=%Ԇ\7nky{͍ä! 8n!^$mv[WV23"ΛN`z2 ŴT T|+0mNqI$c0g:`>9 ĝewRFU w]w]|$tDL/~ 7ȴ^u83Nxヤkz]*D߀C+{($@P6}agJؽ %4ou 4(OZósdjRN7^fh G$ ux +.k{DPsS00қ)BXuhe϶nZY:$ЇAQ2ϹjgZ6|hs& zz$!WKֈaGG<%h'm6[߲H4m5D9Xb֛ob0?>8zh6};얛n~ut?N/[7SO~n_1{m}km<3@` ]*=JUoS"~#,bMmꬱ[ҭ<ҿkVZ6.;8jz %i$BH2}[w@ W;ְssI<٣L4My_aڄC84G>ucClW2M!ގ>T"ʉMktnOJyV'e֑;9~ޘe4'kȮE_(XA+ ^<aI綪5Q>w/xtS>?~.KyܔiLq V0#1D%SgHlMoU3HU*|II{o|?~_w/y⧺~i4}Y4K/mܸ6s$V\aFhwA!"K'hw9dia`.Z\g1d=i^F#(y/&Ws[W4eIǕ-M7e[s?2ΆжeuBݟl{K:c* B-X4=眪reַ8sMfVKJL3+_M gUS!WDp׾5^}āM,YQwb<!t[^AZddxC D!z4W*W L4rf +h&價j #K,0 Y#.0IS9u(eϷ{"6DPу0X`Eb~g^:i"UG"֡?/@J4;=gX+?bJՑpnǺ#j;k7|7'HH a "f.gPfA je!GfISSX)qF49鼚̜ob{9WŽP ok^+L:D]Rovkv%Q^N"a#p.75?yZ9T,`Q3 nY!zC\jNR KˣܰҊ!&(AYZVv˭r^?<a BXL,|H/n5 ^K>{6/+uiqe^q啯-\<{Tl"/89 I񱧘ꀅI Ԯ|EI篝$4НSx g!$S?OKqOD҇ g˖-t5XIb@J1tjZZٙi'LCu,]P* ѧE$L;/?e)aB93zᇉE h6S]#AW(TzʣĆ k 332֭^3f-[rY(#>ƮTYY)rsrlQq1Њb!gB wMSJBPMr@/̫X88()nQ؏S !{ Wq$qw6vWHBPL͝>l?`3Ndl0`EFdI Yaf'_uͼ S#]]]]]jj^WZ{.;bnY09Fl=َpXirAr-ô9@u ^t49atY5)@ױuӃ8 8< ֗jYFZ'Pq\VQOqm#'V7_wDF$8 3tm-{"*wR_7ȫ08|l8mF'C'*UW5gtXhf`ēO>* ilT` |`_~J$%;rTi_fqH70AœOyϻͮdcؠɔ.>,xyjĔ=R`<8FҶ9dƀj7E1l8;g=~7ܯqX,I}1sw>rn 隒&!=GLm+gP0K A$9\Cua D1d`A.ܹ%宀w;aʙ(kTO "3lIƝKmtȕq#d;1l!)^# }o.%ś_|ɴ`5L?Ɏhm ߳dM]plYasw1n@DoC-r++N'_ho{uLrLڟcOi![* +$2aSkD(qӵ4n,ͨ K%\K6mQS4n`@޵k'Zc' XDӏUm3x >'zU>Ϛca g]`u>?Y 9X`  "@`I&E*) X\{緿\R>;, ,,-xܛHkͩTh뮻Xr !li"JfPA+28U^WH.q9^ OvR9ڰfS{b?h3]04P|ฦjlwW>Ꭹ=%dtW˶Ǜ{KapKОiK[^vB~OaERc77-}#ܹ.xyhtu42z͛77n^Ub߇A.w } r`g?kq&h(T _P  L!W򴾾idzrzd$)~@7bCa~HJ[ kkkohvt9XfgnI}!@JhG4WV_h VK*66guNU0jv3+Is{"N׎p 8cD:U~ʖu亝P^C"zۋ!x7ɲU3Ч`~hZv7nZY2v Fo~e=hzj>:ɰ)v S6yoMdz6$O(:y-kߗ_Tڿ"CڥmfiKƜH顯S*)P- =~6XU-v3 Dsf&a:M=>Ȯ'qlS m݆J/7e4C_ `#7pϛ7k!s#0L^ 뛃QFAc}FLw}W]u{|u֣^gy79gESK5wڱc\Ip"Mc?|z$4[s|~;؁H-WA{6*x{"j<`mIeeqx˼'lz?;ghUsNĪy{yEϝ,Y_-o{BKʋٝE~'Vm}fI܀p! 0_kOf\q&4::G+gL6.Y%N rMֺ0Qʀ{l l9wި T,8-wZJrQw7" JӶ,i3k^{72^͝;c:ρ1c{xa t.V6һ +E GoF wBO r_W:>g)`!{5Ӯxt(A>{4$hfå *sc*qØi'FNCtkIr\]k|xME>AK|-*]&L#T` `E`LWLΆ)#>݂jJ9w0cSP3f^rmq+ l })'m(F!F,TasH30Ŕv['w<ӤEo0boFs<嵠Οj YڸH(O9Ic .Y2^O'lP 31)6`wn6S.1e'Q'Q2C7ޱ!%N7ooGB4<2Q8I\pLAyqPS3(?b.haU..6VYsbzIF_Xn2&$r`,cz `6myW>qzn]<*;C4łK蔉kRC۔ՒImfguGI3l9.o.EB^ R6l؈ʒrGRaPfǁԚ} Fz[4Us0"h(aođ hwޅ>vCg m| ;V 5!Q\h*0IJa(e_λIN`$lcÂ!'Y,A`(QcLV\uԲxcb$ `Ӭ=Xy{DDϮ(m- |3'kI~;"S ^ب< |!ckv{ҽ@sJ/.jvy+Hp9a a>h4EOklZwƄ'9<]}k&Ru}ڀoO)u*Ó*(Jd,#kkkVYYJ!b|PL(fj] P"\VxB!]"ۼK'SAqj.-YaR(~+:hD)̐ $jOŦQEh.5W,3h%vTKpPR 5 )!?ȭi %Yp-+NѶO8ߋ9+3j&i,KJ\.-UL6Ds0]K&0;,˯6{ㅻҶc='Z[HI"$+Ha 4`KN7PT4FhX> _d8Ҩղ+םb<ܰ1'Jp{\#SRsV 3({#?D gkk$C+-0oQ>$|>9 unߙ{UWaK'|sc=l|vMM \6A<$M(Fg y6INa->I M!Oр<5Bv3t{kb*yM=UlewGD-d}Gv)|cdkŷWwְԗih0|M9U,xKHryƕ=K,aעnٗ]vmD8s&{ 1B}a@( {YJ?>G.Hv ۦL < HCߞ q;\p@C4*[ɐ/PrW$`dcqvKZ{˳Eo՚?yg;"☚I,Ÿ2VT C䧟>hd%Tj5 KUu o_^~ϯ;^+ T>XBR ̿NʖHs5~F=Ap8Zv3Jrr)--au,2|,2D eé`H{lqp0ҕc AWyGq*\_ZT, *'(Eӧԧ\4%0vǨe@xtE7$Fg$2Q?>g|YD=I.R<>InWLCݗpӷ;-wrU(tr4HrC=^ڶqœ;¹0y3r2@& :smيԜes;Ojź;6'Ng^84`fD lN6MVU1N (9REyC&\Ie5=ulO^ڪ o޼~k-XƘy]`uI`|mɬcN:\d.-ʲKę).VrcAX:*e*"٣ؤQ[[bduŭrٛooxnٷ~OCs;(>?;<8m3NV[]滉h…re~$ DMC2-;y/ܰrݖ;9Ÿc#KyQ4w9Sǎ$T4ڴ1sNp #j#3-D4L`6B#dp䘺~DwO78оu7>}`iĉyQVP@T9,RC羰xN?RNNCOFX(3rJ?Axx~WќB+lp08k2CEr?Ӹ>C)Nz9(A8+'RA"Ry6V<R E4185 tA)eF“`*l饓$ʲ+9i]ނSFkoFʹpӧ_dgg)x !c\x t4:BF^ TqN͉i]G["{Nwm/&|}ZPWa p@{D$lܪ'd.Q.%`!ZD^Γ|eeKCXDKC`l]_чU ~PyETDNx}NqAq[fr0qm?vyZK=!QzJHyr\l_of hYVRvxFT3{Ay 4YKQD nm7n\NǞ-mVˤ;7Ka;;uF0-EsMA0JA闂gfWH|TW0=Txٵk7p0*ʼn{ovϯjIwd W8xQ~! X P?YΡR.Vv\ ~ -XTޒ+13;(OI.&& ~MѠ-C[9У} %;z|#S`?VjNר|P 2QA6H׷Dxg[`)ˬwB`7 C,LP=Z|>7OPx76n܀#lL P3B-'._Zd1mY+v*xc@j.,5I{6h@Lur+~0?R^{$[ q0zo`| KC%sN[Yɘ7sfN<9=,az왻[i,KGdvohȋmOPUѸ>t79WR{V[JaYA`1Q5DDJNWiW߶_6&-7-Y8w,[-mo"dˆ;kGt?9~)O=((8&2[5\ > 44i=MG7Ʈ3g6Zs^{-tovCp6O1S:A(_<{?,F5 (PLņ2myR[!_Sq*~Dk`B -T3-Zf$&²V RllZz[1~8?|ۙqKMSD1;z&XwҢryyXLEV4C 0ANJZ;PX٣ y2";'-s Z(oU[8Jiy s @0VAv[/^%p=@*D M ~cge%wE9L /z 3[;r;P8pj̉KgGKGCOS mimwF1mcJ rr$AufV}aG>%ę},\:S3goc&C4袅7ؐ?OaEWC'!Ѐy]댺}/$ϯ~k>l D$7JEӟ;/}KY A?ϬHq7=J@mm-ŐD؜'!HEHWbx "XD@P@'"1Vw[.q 1.eYx{ =!W`MYyLFNx·tp Xʏ*{>2܉WѹQyQ6ٰ̞u-alU'(R*hl\cC#J~0"*A;DO J7G@ãf pT&}"*UIۤ}@“8xxjЌ8Bjb]~v6PK]?`;؊?i:ʊ|_ZJώ[aV%HJag{8,w븦T[p$uV7ofEevtC`O/سg/HdejGf4?ƗPF7YWncLgl_ߴeed˟+g;ai7SmtzLRݗ@ݙ2äKrIQ>5&TʀR@K:MsFp85g5'O*h VF韔bH Q0$D莛*/)_6FLC `Ty ;Kv}e nΠAWܔKL}Wbe ʍsW^yzh[dPnW@}THy}0lø)QrĪUiL޿կh,4M*UrQ9ͫ窴I[J ? ^f5a݂cɓ' HR'B6H04Ϫ $L^RIϨ," rD45OVO,ж@gXtTn 6;^k NkFDVz֝cv*3<_dDɤM;YɎSwX%x8$TNSUxSSFJt('ʳϔ=3eX EH'1/=Wޚ8:I)I6K5۔e0MCzp4%eB]EA z-۷QܵikPRأضu+^5_mC46Im}l Fj1r9`tVϲr#KRD'77g)T1rbܲJ¿1Š ڏ.fʄK_knsHq͞!>M65l߷=w+.lwu- +W !gNE=tʟLoM#?ZL~ZE~#C%VAn ϸe>J`0lGū m5ު|nz..8s@Ä97%|f_ުS4FY1)oR9T((NZ.JfD}!Z6]oa$PE/"z8wrX%^z*E?c֛X!|cD ց`u\e~\,q-w?ϑ{?3rӫ, ZGf`T ԋ/Kt(Ǩa7p,0Bz8#ج aU"/cA?nj@-ZN f =w <WO>[gIaHP2j"MSDO FӈCD6NJO}0GtF)]qο5\z 匘?~/2}^wx Bs=6CV4=&Ռm~v_csNHC\5ǹb+Lpyy9.#k" žFo $~ Q¤ƪf c;.8H1eiUÔ/:O+9;wWn#}5iϦV&BNh}M7>^V C"L?V)ĭM`PZUmlxzmm\K>!g79P-4hgVa Lw%Bz@P3WDmR)#৾Ng;Dى9 ItʹgWcfgڱ $ޘ5 o dʞϸp_9>!58*XyOApx\#je0e񮼀h淩{)^O@".¥Z.#V"Z6_j̙X^z@cH"?XjeU?"AjәP:qltT"قaf$͖Ri@ZOz 6D֎IJHڼy3PN <;*-FvV4+ a\J~z]*LqjL\] D.+ʊwH-.+,w%9,@./x4԰1.[gO&fMVv,R&b=s5ţWn~ax;&maJƠ>4uJOXPJGls\5Y)([PQ*Jy|("3;q 4EQoj,Jg |3'扴*r(6#jtD`Rsz")ږj߶7Jsh$~5ꝥ1$"(hxT7J)` w,#?s؎s555\o>ʢ{'SCxE-;$d˗ C@W<"/3n0yESNClt(Yz5Lz]w}1jb _}Xlr앺5w8xBUi?u:}&BH(.\*h(Rta|S"E70ҍK&|],޹⾍DrWrh.eCO0rIQ*29XQ@.❞4 }1JАX0e1KS25,팶"(R|YZ~'4ž 5UV>røU&eelSN7yvՎ4Bv"}Ռ`}f rYo5G.~.ɔ;C&b,"`J$eg_m!zk'* Ւt mפQ:DgtZ!8IjF; V>Q/.!pcަE>~RkvIՠ#avŵ?0g@n#5"0pIvD~ȅ86^S5&8`W`%Zͪ1ϦqHȮPmgt`k ʑYlρ}5Gq.n/ T\[/)oi{($YDÏ>]FvNu8XRӑ_>c':4Ȇ-P\3nU~kç/dȴ~遐1ze׵FՒ\oڸm=6M]rdƙc o3v>{*E|Ko~kSU<6a&ӑ48Ė:JnM;=u,JXݝlh7;/lNhi\Gy'Dk/X{ \f ?1 R?? Ý.**\> ;s O=$-7#!;I|w?DGV&FIʲxZA'{f ~MFOb>eC̑ȹ瞻kvlHo>d@aAG,󓲒lȡMd>Dn%e:>ƨ(-+ov4rAY>s܇G}ae6sFk_oi%ݶ >MDyL;:Ǡ(C׊wPB:M:X>m"]BP.%p(N˓f1hSe[a@IDAT_^Px)G=K"+4$'?CGfM70ACʹrqUWGF $gV2un>Z^6"xc (ex"㉲24u*p*#IpF{;;;@fRٙ\lYUyTicgr$6ho4G   RMymb퀳%qGLCCXmiǨҢQ{5ִyƢeg8xl^NpݨYf9wm]É@\bSsN*PIlȎ:bQGATuv?<ApPHNn^ҷZV:؋XTDetM3@ )8"v=#B?`e"q 2=,bOk,tE2GE2#p&~pc爃jOd!Ѭ*^))L.iƭd0oq(߲e&GG^7" ]pVbqKf?K2}&5(<=R-sׯ ;-;Nܩug iF 2RwǮʶ(:LY޶pn|i%SΨ*~ܠX ٪p.~b%mK:تL 5. ;"Zp zR&2{Qh-2x㍨bBy iu]$iAI\!OE cuYyZ{ *EJϚES# 駟^HqT `Hr^QA򘴠WÇ&՟=Y~b %Oreg[nolirmxp`iUŦѾkuk Y9]p#WH1_ʁ=)}]Zіл*W>6طE=ܱ'!Yx4F;NT҇2qwbr4 _V7yy\uۍ7dbUU臚(+(, Ko|VQ:|UΎV J!?]fadž6x5 @~g:F)kX/L3Qj2.dԦFN ֬Eu`f6pCcѢ\Hkkky;{y!0^#bƍ;l|\HaɥAanر-/0+bBb߇e#H{nI=HRa@5<a&:hrsyA[{sO“.*r0 G2ynQмYJ)2yJ!_ܙ_8O{:_1KF~Inm}Oj+avr%lRHڞtF 9!VӦqDmnGvbgmg-sfsruNM$a1e&לxoOͽ͝l\ (pX"iQ뙒P=Ns\d/1]9ZiC+xDot bkJ "+Cw}7 h`dx,hIJiɒ%(Y\3aFZAKF܁MSxJՈN@7Ec`.8yV j,A^g䢆Ə0J M4Je E+~?fF8I"j9E6dGdv@kHӥ 捊Y@Kg0Yǘrt[J 2C_ΤsH?Q(%ɛ{LAǢ VޖRQ&>+έyztCR}# v ǵϽxJ[@0aFtì& v?3Z[ `Cq9, 7AO A($MBb!#Wفr<iDeHs𓓤V7YF $'ZK\60x(8w N"hx ݤc!4́\-|}~?RI.hMϞ*  !8%+o>YԚtth"$*"BPnV֤+ZGPC+ .$kݷ8'7S*=v׮ sLe1wSE-kThum/Vy˒ Wb-dkÈ|k *ЭK&-ۮOMo#һ=BI󫭙"&됓_:ƕ%ûZ:CW[$)7 +́G>-Gcvnlo,(KdC:ź̄Xpyo~g̝ʙ 3YН`6EnH%ŷIIfDiA“1A F c ӳec2H' >a|{IѼDd'B5;Ц< aw<@:4SA&И4~Iՠ8XiZopΕ8- c'֢B/ìJ]%}@1^#etB^*m^{ǶmXO<ZdqMM l0v9rگLx*${!x;:#=T4ز5{Tϡ|=Xxpf׀x1 i 3dMTϦb.Gg| w}hw̹r]npln"v]h{=MC+3Sl:QiM˿>TԛO-oذwWg" ጞEr_F xiHBz/嗌00XW@S7a<ڳt3G!)s{K.X{.U1>gKtn9ӛ9 ֜E8M;}>6<w8-`G010kfgģGPk4۷G)4$8]c) h6!x4s@i(<:Az@Xx_ \l"o'+BgV>䪹 U& &bO{;Ty$H?U]D fzXc]0e(m ('VFjGv !RGYLd# f#hh#Ei L @aH!ªt6)4,OtXqŁ, _`;d$Kɩ5 }.!;l5N/M{fa*]<,v=%VZ9~SQTvKW?rA-TR)1=#U e)hq^q' ɤH6!c6c|G4mHyBT8ajJ3e Cs00JMM IU6dC /__\JQ9OsWҶҀCRH|ƦC嫰4q܂o^_elR͛v~ WxB@"oqVkИ"U KIu546a@N&/gP|v bDkSkY03( 15\ }Cl/q 4fF4![1%$ؐrv\'J sRw/-qE߶?ڑ(<ж3'`sT1$MDy 5O[{"9<_k򚶬rvXQX=mֆM;ݏ=WRBH}ʊRzP}?M[[Cd5t_1a;<TgvX n^1I™ ^-qi-i:h"EĭNW͢ Rx ?k ~tpN*UXE%S)P01B?p &ٳg08+I?=0?^UuN齼O\q;FjlÆ(P?v-+ {x26lxeh_G:^~9[NP@c=ݏ".89ܑpZhGn4Ǝ[UR)zsy+\=t#ǣYWzgh˧xG;Q\86 "@0+R'LGqwU@ .e۸7Xr3/uc֐.`|D|  @tp$FcSӮ!*|e)vC) 8bXDdSO,*ڎ"PS񩍏JED̶ ͙#W\@mtQ(c@[8_ + Ab},GA#j0h5"5UX#$3HB\6{ 3B: Luu+$rs ۿ!6 ![nQ8` /@QάOn&\x1Y,ҕ?ڋFN;myhGRD xi X\m!ӗ3H_"钬93X4'Ng]d6 C=&ЦEb <΋ѲڷއcൎXU1@׀IfKL8U3m\zQ eO A`w"-I"[|Ēv桼ƅ0g1c HՋ1tؖۤ`xr@6sݑe+]f؈*"ήQN+) ;.vS1ІNjH p JluH4e`͌T1}]%ZY4Q!{ @K\׌zky RZ`^޲X/MTThOPS*1V(8' >ލ*'gȦt~j(?pU*z[%츣AHT1]?"]I/!s3PngP<͙:uWcӟ`&JZlʫxjkoC+vy|An]^VVBe1z{NЇ+qqMsCD3 {}^^S3`cc*at.޽%TŸM< Cג~zԅDYVm Wu*eD Bhӝtm2t QenzfͪH \g}i Aa3#>eʶGhzoo"n/.4 s2\D` l#$5)uCL7I7a#juhJc^qnlꙌ~` 끉p7G"V0: Z#s2PcHk8]yP"U;pX+"}z5X0yX+ 2 e1QB |~B~$T N:%r+١jÆ *z&3|LO~ o/TߨТ@?|Dqtt)b3r>Кbٌ|CA /߀/611> X%OWcêXLSTY{6}oN1, cKg96M7Zgs ,Jw4O?]?F]?jz b>WQv͝ɽKy4)[ֽq86tV )`mp&:VO+e~ ;#HfiЦ?gՊʨ;(=GPN0c >ì i:Hb`asZIP$b?Hr+MA^~p]X4Dm+#I'Q W\v dP#+J55b_R̡Yp!(^88&C6@z71U|>v tfvٛ7o{CŅ23+9q1bX~NKN++*Oҋ/|䬳v]PTܳ.K.,l{@t@ z9)I*kk ="Xts(;b2it=-`P 1N԰9%q!G&b~5UDb3譿78A5eB2C, ]pr?juIW^\n\ȅH7(QE᜙#gm ǭkQ~HKn'wZN?mr٨J9pF0 C e`,pA7,T_q41A}ܘe'q!- a0"&54]ѠbJ|O&3vyVS2D8{]xgy]կ9ll]~Gכoa AUg '?AM.x8.ApswS)dĂ7ag"~tVš xt>Rbpb,qH-b+Wꨔą}o.]WN[U8b\vpa3RMXh{XsD mI16;ԝ; f̟Y^;jvpzFgs.868N%˻׷vnHZH%jgwQCDzo@CЊS=t>E wQ#>EDFZžZ#lF}W#+Y?D0M:5B'.FZ `߈'f_h~U1Av4VhU"!O)/:\riXE_|Fr)>R'kjo~؎)3?_2| PIU?Jz #vѧAy^8}(dǁ=s.ƌ `,j[nos>5G:ԭxb?{ex3&spg& 'w"Y8fR@Z@ ȗA2`>f!B>aBb?J,ҽދu f8LzA f"\sQ|vYs4s(fdH-E%%XN#G6߇/nz9~dŠҎpXg<?~ٛL!a# [pֺZV[Z[;jmvZGVպ*ZEFV %yܓ\Y$"/{|un;w>~j-;#--˯<)sίlP8ץUʐ~!>ld8!C5Q#BL* +>/csX "BbYH-}ѐhw/漟/ud!PWngi•5p#CY z &A'U2-pq.\L]0fȇϙ3w\rq%Hm-ustda(֡:0(v2fI?u|<*91GDcQ#_2AɃ*-#pfHLA2(FZ>!cSISN~r# ~M1beQ$t/ه%] ,Hh+tb6ov"ˍ\k$CbGUpS._Bï9|av=.UO gOI9-)C|‘d_unYUD9rdhUc&36٘d8;|YL-9aZ:<@/"`2aO%)OeH p0r!ƃ/HHfGeX[ɔÛmM[)`%&CV H9$^2BC:"v"0ԈO0⨙HKֈ GPK)p8P~ɇ=" I鉀8(!4=~ 8s9l=!ʔI8{lE=EmmO@'! J($ !yJ_Oi^BX|q_͡~Ə^pʘd?(b Zʐ."X,~@~%o$f(}#h3@$t7UbY 7Kpd*#bȬ歯!sY&E"閪k*eY'wv?}@˜9ys. QnĎMu^a̱xXE4@VK!*_XA OP|TFGbK]HLJ` Y'xbUuuM]\bE\dR?vwwO77.IcO}- Cr!v=4{8`}(jv\r#H)}dQQtIRf.д$JwmyaYArqAg#>=19'&=מ2Ve|}kB`0!`|ʜ69_@hNGrR5B<@  JEg Dc5?XW=H6I8j[qd%KpޒJ2™ɇ"AfhlGtqDCKWLQYu F"G;yԁN2q9pUk0DT1gNh ^Ii(AȄ&Gg(0EM/l/)} |lC: tZo8Ќ2!'=\]]- VuҶB&r6.!?zӈN=eHJNaO ߳R 'D҆VQ~*.4M爣~AS/Zd]`=7f8h,"ˊ+e,K.mDH"=D .p&YN:/߃ O<_>&8''7!>.69eذ|FbLq]tE$o)5^+wF;v13Q(q[|Ռ,XIģVx7OF0RT1x+h;?ߎG(CDQ/-59K%}a_]Y{HB,s'凑h[,Mg1)(چa*-SE>Vl Y6RʷÏ~&d"cL ''3\lf&"DsTE!P}1QG-]P$Rq&_ r$ji,$hk6䣌caXy'-y'N?'lps"(<ƺU e>a^ku87UAw]r0uWyǵ{13iYlnKAІ _#4˟3̘Tz%˪ֽg4]V0P 5ݺNf/5 D/uvf:@|S/Is{ZP^v6sF:8Bv淋",{RzT(eb6H5 <5@ڌҟ,z/AŋɣA*>1{BAqb.:ڷr Eic.+UVxO=t1wPXSY=*iT@#"YBKAUK՚aW(5Q x/nj*YվX 9`r|C\kgqOi8gR)sS^@ p$%~9f)yL5tm̹/ T 8#GwKS&d_~B4&Y}`05ncdVB 1$i_?scviK B``bB$B2`}Ed*]kz}&f4 U*bfƲt͒V#p3ԶOwΒ+ ;п9Y6bXqG.X= e<~=!h\GiFU.-ݶ2P[Yf\Wq@in۳}0,֐)!'#™RG%*:ʽtk-2A+2JKz*KMըOqj;1 ܄좴.*4HnE4T_&쓠l(AC~3+tCӆ:qը)sc$Q @/!"'~qb䖀NLF`9 ^r)ah(j$mh?G-481KAt]Cn. 5uq.kG-Twh)idq2 ]p#)G?E!h1M×F1끼 @O6h"w.((e\WL”G! #`Rp-?TVȥS( cFYcKv&iF_vU}d2:ʲ3 .rIiseqX $m'UMc3+^{ndbfinIeHq$uJO{i{D^ބ/;˥&4uGDQ^BxE'(7s=FM死+W͙<4;C\HgAc֋ P_Uڬo) R"~\P( B@!H-ڎĸ\P_fgn:Ie*oB@!8`~шZz|5m4 0рA!P( B@!P( BB14搐;7u\*8:pS B@!P( B@!P( BD#^+ B@!P( B@!P( @"2.B@!P( B@!P( B@!0PAހ|B@!P( B@!P( B@!(tK!P( B@!P( B@!P rz7"_!P( B@!P( B@!PD+J-R( B@!P( B@!P(% W( B@!P( B@!P(ъ@Gk( B@!P( B@!P(  G@ y* B@!P( B@!P( @"2.B@!P( B@!Pei@IDAT( B@!0PAހ|B@!P( B@!P( B@!(tK!P( F v*?B@!P( B@! % N!P( Hu]TGUD!P( B@!P zP4"R!P( cBgo2R B@!P( B'(tORq B@!HPRרلjB@!P( B`p"` e8hdUE@#߅ B@!P( xB@! zBVCJlFgE?U͉Y,EVW-rI:*B!P( g% Q,33j= g\uuLHH8TCYt)xQI0R +:G[0)l6"Y!P( @ ȚCѵ+^,Da}e@L{^@M88ߪD&⌛Z_WJǥe5=W)ZaYVCa6iL*Zc`#sP%*;PϜriߣzM6ݩL( cw/r9~{B JH!# R uW Y3 mlR/IoDU@ @g)yѢEw}e˒v@r<)S(uCup׈1SāU o\bf k 7j'>^ 'ϟ6 P$OȔْ:^gLRXѰp/fe!fsG!5B@!PtB DG4i.ܪp48dWjh,$>32GY3g›yp8xD ɯ)j(:zɩlٲg?Z2X)rTNb6װfe0a&r6T(0qO >7Ի/,Pl Z}G򬇌JB4ۓ2.ndYy5a+O }-?%*Y! (#"@Ϋ5͡3!daj:4 G;5.mv:} G@EF }*A! @(ɶ>|~^Vj2 ?R|B/.^(H14P&}"{bz8vG:t;4 b q"cU@l*" EȚ~A3޽{ BjjjAAa1t W=BPo.?H/uGh 鳦]}zS6k-!ak|lZ^l戄h l_/Ay0ȇ+˚MJ@f,rEYmf)od;0 ewSH <3o|oٖ_2 9sڵ Nv޷|P-y6o#͘2|E_>{vv P3ǚM Wcͨ5ꈰN04GʟX8F2G(SN]1IZ1v|H1B;Ϭ2#CX[V/!bCM0q=,a?0|ug3l( 8CEU+݆Fy5ͥinb#=@6KC3DFaѼ97z0 V]Soi;O`8/9|ɂַ*XNJbAɪUJKKbbb0 ˛3gI'N|n&|bՠ=j}lJU |rfi<|65 Tڠ{C?(>Y,!_hou2G9 $f g67QZ-Bl46_l(鰖6jYqVRLFb7Z~@L!&=]ZZy;-8k6RۋJnr} _8pIRϯ,4I|kr'^YʾS"5E# FZ1)=O6d[(-e$^D'; P3z;za-$1_z[ai l}>o[{IKgZy4F#]Ê$ >FR+]ՕIy,- 9/LQ2(B@Z*>PцeC_VuW}~>XRE+SC\"vFljmk5M;}rw]x]ͦ=OՒІ-pLro8˗hmifb"u!d9u Žx7+֊:Zj}zQj{ONsFZ"&K>A {{х4Q2hċG{u}GsE✘ڊ͛7?΂ f͚Ej F@;Z"UGlM<mMBt5Xw Wc8 6D #Y-E =zͻ I1̡g^NnY47B;>u DB[-wϞUp?yO/p}ȑv>؈]C5+ްfw ccΜ7/dв"rnY\Nkծ}3Npd.7""#K*lmShnct. .M|Q6e䭲d.&~hgzcbFOն^,ά[ٹe-L1k'Sb;$2闞pC "Ut1L̲ǜ.vM[QU;cQuoFVSt( ߊ516F / A; lIINs%ӀuQt gȄXdfrᜯ1?]=)>~HRǍ(d088hbճ/ p BlNUg3Vkڎ2eT?y$$$Ynwם2X|ZBС͚5*{RQVa'zkzyNS {[Ɔr8A:fi( I%MF`ɳQ6a .ٮ cg=^j}xF,[h5_E mXDŽ>iCor6oI&1PD^4|pvڮ]>{lW\q9O)$/OGGDw@ٲ}[q8acֹ^rBoކJA ;8a!a=gy/lu{r κpY&%o}XTT_A$EbUsw/3}[w|ԘU8[o_9,=&ۭ4)@cqEF R4|()A{t`4i*爑.=mv@kk>?<SVTs Xvv[k|Y%:1Y}9cI-V[FL̴bG!xNalI/.@C| u.ZЖF {|5MxkNJr)l;+|nq1"1 |LPqgaSBa>|O ܖYyӛ^TȚq5o~ /}%/q! h9ժ'2&p3SN8~Ymv?7عjh;~oܑ9ԡCҨ9ESm-@f?xV[*m|飒>)JJ*}K\ekKN]qBٹ NɵF͛K>پkon1*9O6,%.^CbH(tK+mcs眔>{Lb[J%#qKl`WQ&fNA2B#M@&*`EAlFo?WUJJ h`^LO$d„ cƌYr믿^RRr 79RK4Y`vXeH1=SJnVkCw36 H݉f!~h|ad3HL+ G4 ~A`k-nҵ k%і<<۝1GXu;7[|'!5r}~k=E㮽~yԎmCvM#d,j&ڲr:;ZQ 5qiq?݅_/;!#dyIq/Bn86=T狹7}-WjA㑣l(#o?OdjUuF>ҎGGFM-'kX6 UuQl!$Pt6ZRGF@bs7,=+Iz8VnWmA=hIW@O@7~ <_2wr}f0N}o&%[r2~*'xPKjZ68aGC܍$,|"m%>_x6 &tEdYPyj{r L}=Œ>Z˚n͚L-؜-Ub}icT4#?s`)' [jﭼwO|眹2NـgV 7}eIЭ;/-eQpʥglUhCbsq#r&nPeU^l|'?9793 SٌL"G1!O֏wG'`1. 쯟7aWG!=eIoF51^5k>BHmVjYJ}W]?B $sloWMnbotm{0_a"賄-A[jS0-.m\ʈi٣ɶvMe*~XfggYIw]{^tI_g_-]T{%^TxT6?7mؘ#W5CBvZ(Joq Kt~kr{㱗WL uNdj/A3nӷK%7ۼbSL\0@QfR"kdޥl7k"^yi5BDnnjl֓Ix[EPvfP@Xv46+k˚1Nú-$ZVwx`u<9v/-=-70.(bjle2J&@B,̭i׹n:U`Y+|\ 1Wج!_%8ޑ9ާgV:ɜm|oe^2>@`0:㐯GܳnYKyU^QM݆0HCrӃ_ zx~đ1OS^EpP 䔯qYp_[|_~nrb UMK6\h0 $ Pf}GïkS)|BB3'<2{u͜:FtR +U=RcGdO}ެ7~mW;|™Eimf95yK|E >0;?!ˌ855;OL4g\2RlouV&8EZiإ+tA}fw@%蚚ŋ#}׾6d׋gqqqq0d8"xCފyh,u<<ɓ'#PP"] aԢ,E 6p~<:vmk֬~=ؾR6- ۷cHd5J9j9l\\H4 h}Rde+hNJJj_k C!駻wKO KaaW,1<@D4ӷqW Tda#dϯ I=hn\|ITخwR8`ux_&<e~=%8Y-zh}Ȗ<ƭr7a7d.WM=tuBz(?9.֢5y#ǎrSۈ2MpGv+S]6ϟ>}IK? K\RgC d"[a?AE70AF~\̖#p2[9"pv+Fu}|gavE?F$z|Ygiֳ/jC]rj-"rt SQ!S=oVVBQ| ǻ$[)%mf&W 7+uP7XћXaMwP BLӢ=]XN߫57]ֹhU.S! $Ͻ]P` ??Pi#߭V[ " C!a=@XSBkv =`lW8kH{4kg(3q>*BB\qO~tXmMɆpyR|'xs6}zӯ_d(͌6UV'Ce g\'XY[7x:԰wynMj~zzor558ĆpdV 3dу>#:tڴi_-o kđHK5{W#|;fLsC{Ƥ3mbDs`!Ř=J2?^{W*3/w ~ >,"mȏ7 /KVmDR$U,l5܎;(/ @S *//CdL:,d K6 VYD3+.$'IHA~޽t6EM> Q|n@bi*}5PT 9PbϿhxyÏh?`&!KWr!f2~_o[ǵAbf6x_$ 跭hbxݶ0EgXHr:FG~=,sy1XШiaInt97i ˎ,[s飯p8f{ΊUCBřT=dÞ򪜬 N@zFeJ}1e>y)QNx&Op}K Fe=+~p]H<oь0 Ŝ -;=\Y* &'8#Fゑ@$LK,a1 5!\pAAALud/P+Ⱦæϲ?7Sj>osʛ<<ج )L 🱇]qѮ ⯘'GKV{Bv>yX(iZsx>_?Ϟ:+ۮRлaOp3׭x{ˌF:bY̦WPK,=$tjV16};@^Ӫͫ,ͱsI5*Q!7#fO}j7n?u H/3՛3ox8_c0[ӿx鸂<%l&iڞ}?=L>/>h؛|} .u)sS1?2d+Ϝ2iwmy[ O/Hq9}+59U yeu؃O в4~!SαZV4qݍéU08& ] };B 1o/MOk@/U^Se l MF/DLl 74v0Qp }&42h$]vy[oᘢ"bbmP뀦~ F7 *<"}衇NsD%h2~?1򗿜>} S\ѢEZ#{5JGpoꪟ'Æ E4DzFJ< fUVs~ > 'B .ļ8\qS5'9bPToH7ofevbTusul`kq$'LΜtEjpA0b6yik踤ش efL2vڴaYKkxaߦ]os7d *۶`Iynkhѣ0tBF?.3ygCSrp(;9n蜷7OtJ-N$h(|g_qI_/+a<97zSߞeƢ C̭5WWH9޺chC J$si/gH?p!WR> \En.ыES@`Ic r2 h9O4VP^c^2وgf3҂ʵ-;q6!bxDҁw#w}0uvYol~RۙO1 }WWq9\asph yo-Мxc #Sqh6&mzd *3m|lLmGM:g9XH=Hkgm89PuS4/at"v ,÷n"||mhv_Nw'ΤlfLQ|6`&Ny9oޅZ뮫07`1ߢ ?doꆇGwSnnp55PLkm)4w29MubN-1K#}x|닩)Isen-gL3m9u_`(]FoKozrS <3`&|`"Pxnm -z-AQ9V1KR 6kߪY kbN_=*O}xzu Nh@3kkkmƭcǎ% Vgo`q)%JH'~mfϭdYcNnԐ%%q3Zd{F=TM|~.%Hyx䗂 }{_tbF$&& <\<裨WkHhF"}݇VIBYB|ɠ@(=*i0 r8')p:&?1Ti~OOg3N[mq)HNNf,j~(C"#!"~3c''avC<]~鈊Ro U4L'\߀']h*.IB ͱ{Jݙ鎴TBŀpQ93?*'فbV. YlWgsG]6Zbh;DRL36sT>_ŭ;=̈́:K6A12u^z#rFQimv}CѱEP˞-O{_ ќAG5-EIBȧYi-a,5Y4D@>Y'N 6L{>?YH6EΞ:7Ffi,3-ZS~,򜒘MW^) Dot2'h1c/GqeUdiKg+3Myj r W&]w.8?'uǁ }qUɱ G_x/o>w4mU6|u cDTZC-6bㆋgU˶WiIL+P ~gOMwBmVqX,aoaڄ<8v'>J'5 jmcelӻN {O[0I}13R-d?,Ņfz)y$PzĤ85sG[>^w"QU}{ng)7~@yD.|饗SF_'7+Bg ՟ed$W{/O>7b"0RYiɇ_UUunݺ׿5!eE&/ 7v0)M=ʢ$gMn>TWȫW} J$}iRGVW\qG]~Acol>3#|-ӏԫ9`}yeݺ[L(Ur es[/ڰ#eoa̙ CvaŵGbˬs%EQznʧPP=@ͻX$ !P;)gAEVqS)I u mo@b[(l@b=PQC 2z_}ز@߆}[<) e M&Cۚdqx)cfrщK͞1X$M00ĕq!yFĤ?*r^zFҠkfg/#acCmxDtE [J)Enl>+ %S(H%Fډc:9igU!7΄s(PB> ,%w˸h;rs)*,j&PV[K4(L& __C=\Xb88(1_#CF 7W!0NDπU1N`Mb#5Y[䉂/`4Pp;H$rD*C@ -|tᒕ̛6A w?_"`'-i?Ÿq4$ۼ5crԈ@o!2sX&'$m3$<"4D$'LoAQtdyu뻛&hvDŽxKR_Z[]߿252c?ʙnv}'VyK-;֐Z3 (^ 4ܡ=g[HM{c D o Yo$LKKձДD̉ª1뇒N>%`2t%K6]Yz HG$i*)")tS{CǦSG/5:v 47dY؛.,,LKK!k{niZF|sĿ;^e\i5i8@hd"Ӆ(s=#I$b?D6GhT:HI1]PP._\\,/<4/a6yEDh,K԰qB9ě{Q> 4 >__m~+b~Ϗ8:BW_{M ճnj:w~Y*j}vo:mlZw r{WY%30cS(l}kE).G`0㓚V ͱvK;sG_xyg~W-ȧ+kf&*6^w3.g%[|6|bvZ0b2 "jAhi{8FeF_d)phlN2ݑwOJ=[ĥO]Bx"F>vm6NmtvBn[* D'P;ӂ±f%; ɠU-mg̷"q`HL> `⌛(23 qB|t]a0%]ѻtw /VJ GX:M_Qp,|(tg XA{P 1Ɩl6{"&d"z摉SW3-0&+L8eӪ@#  I ms1A^E3VrŹRu 5Of k\9Lxmi#oDJNаu~z'vo J싻ĔEbTd7&833iiqB,4>7oוkv+Yj- lC c@\CDm:x4G(iQZgGkٮ#8 u,u3;L:k|/tXA%='nuA[,6 ،F!Ɔj}BM)GZ$D:31Zx2f5 ?O`s}9i\$ΖplHeF3s! ;htZ~!rj:Ev>Fef:a&}XzlMkmسadI Ç =}LABlW^{kgq1w>YTԦϿw~O^nΗ.V+**kkj֬dlܼ2RZ+#-m옑gq'In߾D9+v >71oƃeлrR>tXӅc(+pNKܑ9,h0ׅ-eMJ*Wm)e[fxr̜įOMwmtdB̽KOs tp]S> oebA9S&_.޴ M)HXDA lw7$=Qsq qPxCrLUT &AШƘ_"!Lbgx>,_jϛ8!CX$aCV Pzpig0U"!iя~;$< FZ4yd*~NI/^__җHN ~)R5X$R͊KxяCַ駟Im݆4f #\t>K bIG$fAGiB%yfxGV6=*{F0mƗL5տ[1+7CY}3( [7oI\0TgQ4Qqݸ??]un :#i3#Ĥ@}ytp67a3_,ik hAd3][fxnf͚;s>jw#/Df-IZ V9c5P^,wHv8]%E`S.z-a'`)_2|.tAОA5$2 a9#F <:dzn/|74kLA~dgh3;we?rӾ&qcҨXo>Cg_kW=x׮dʹ3ߕ47|fjJy1#fqa3F W6ׅN만ˈe^J {8lInB%6/Mw\;-H҅3ކmZ%F'f 2bD:#zrUf cd$555 D$†W8BdL~KZ~J8WGXHc3,hᚵkZY8c09ƣToX4*.*ĸ\~g)q#@IMIUNNZɇg""Yuz)4[H ;&t@HPiCZ ш'=-cs12a/%U6m”6/_ aø3R*YiQ{SGV3 H| ٹv@?-9sUNg,-/Z%?"@ [-[0m 2T.oT^mo^ic6}3p39 ͽ[ؿz3j^>S-g xB dga܌P0n+õf^u奟YUZgB5I_ o6]T ?BD@GAX~?(&Yf&dG h$!X(y&B&~@e߶#py/ڼ1N>Փ *Jޠ%8w+ZΘZڡCb؍%D͟9[=z ƬrJZ<ʜi I 02c'@WD$m(>WprE+L1ri` $r;21b8}`YXķH-Dц2| عU؟5#njGD -2b%4-w.j!/jw :c: j+6ذ16r“0a^Cy|a!/ނð[DFdѿu) ZUX[lV_qՕsR4-%١iPa:BZ,ΨqUgO k6qkp{S/0hhnvF!s%B}ǬI#/] }\SoGZh3:MwCo|f-Y0{6睨1˹W;8щp ű/u#b)Vy2*+`X!)F}+x VG#YF)q3:lA Y'.U`zj,BbAq3whAn"eMq%~@e!g'̣d%#Bd/G )֟EZ0H7)Q q1g0PGb@'p kK0*eX "&:|'dF>"} TC08%>S}0VT>> R6Z!<"GI*2ya,bfr+aDnWՎ~gmzq!n& #:[& RƨHd@n@{G̟>صg_8O\.8ٷ|nӸnEow=h#C,E2n0 # fc ~aY!ZIřYu ܖXL(gݒSTTc`[Dnb6-yPDlUJZY@Dm#" gy&D>21Q-ˇ=@ϔшŽ=_;%lvąAF鞀-LktL72juGpK"wjӔi;n-ul/ Lk۝ͼļ裏RA_92p0$70 JȾ[_~tA!0(0qb##jB;A!vb b%,% "38ȝ%p6lwXǤVjԟdT0 bzؑh21Thd!T#ǖNh ԼrI[$%:yj̙)0EvhO?P|6 QS~Gmv ]6s C&Zk]lO@b1sfm<|/{S(C[qq駟^RRBE2-$K6Ad+V=DYfyGFSь6އхz$fqƉʺ7y&7H&j&٦Nñ C^au7|rqNH_zkfΜJAqَ#dv8,8McPӧt]VwjpYC2Eא{8ê_xY̟3$<>X7$ڟ>@3F~H'en+m&&i9؎8 epٰG #ZeN]T5K"S_$OgӘjl( Kwv?.w . ˷7sL;s̙3TЉ+Ό3ּ;u2mfq_A~XAoNb`D\ʞL 0_lF8~7tڤӦx#bꩧ^|ޖ߂H_\Vw5%L{EwjQ/%lh|Fʃ"?as6zS#)g,vE<9Wmcݕmm 0)dI ufn' 75Ϡ*}8u]5ף|ts+'~g;-qWnI;ZzqgVrlyUt N{by#"q/zHs @`k}N2Y(%B_5&)0gakVGAy鳂%5V(yY׻ロLQH&`Ob`\PvӨ''j 0Xm׌1sm8m)R59 iRx5{Gns(**^ͣ*Fs֙~wA.lK-Z tg.AQB2.~[c{cڔI 'zf-h_azWr e3mqcmuU.j7%wuM2ahq _^Bֵ\iyMy9^19xon} #ܜ: #&!,*Vljl6ffyT/sv@el~kfR#f/esGg3a~PGNhEyBU4٥먫;vþWެ}޶PVG"Y^ae- !g*!d0rveh ?O)QГF%xBmKuW"cp ^+qsf{{L8j6q J VR[+**Hޟ?N5- VܠH^9x$p  OZSyL3'[,]jf`Iw(du3U&v D4=c_G, $sLM52<:&2BR s?Q7]km ~L\ӹ7_u$h_`=`bì)~81F";ant񹗞]6hoƖ8}MN:`I]*#ln &YB{Pb` LKXHI3vw& Vd >|q + e7cey"wރ|rz5\Ӆ3i;1G}mHgnsPZRhl"=}|VbR9t« 8n`ɇΌI+Ld`-ԭ\SG}T*8VfM[Nzq 0;sҝӲP:^iKQ`Kh1?cS3 ێL0!c ?4, "b;Lc#YCACݞ2[r\q6hRSB=|Mo4ۘCN:M̓R޶?N-cK?׾մN"Hmv*ers&{~S|I`o*g)5Sd ( OG91kj2X17])S>K1p2&D#?uhN[OwDVg`jOYȝQjFADf[erB(MرcųgFK6 H Yd˖-%p bѢE$W鳦똃6?E,Q<! 2_O>WM N!jP+7 [/8=M.YES{BǎH7gyI4W\b{4{Ru*erD**Ů E!@g3H -?s()#S|{iTg13Ă`d'xv>u|?2=TӑzmK$' ̆_Ӈ^մ@J)Ud3 )۫;w+ş{М/۰we~:Ws.<WY d,z}/:}~wj.It_kάfZԃ!Vp*'9S gVTZnK=Gͷoz腽ن@:cȚp>T5H7@)asȴ TeG Y Y*cj7ZК9ED9i{mE#!ZpX1 uףВpwxg5wVVWGoeskd+hhU@~ELPFI$H p6MAYON!Q%!oѸك4CUUT[ha~up*v6; m%[B&,|i[K6EQ_S#i6G,loo** tf:YTQ3'Ī> Gu z&j麆`IiX8iaPw}Wt '_*n'GC:W#D@Z т_p!mWZGBdv)6mDaK"!S$ )y3;(ӂЃN ߈NcK{2L̀),J`s3B DV|3WJ:|ԙ.X*@:Mߎt.(9he7d6ྦྷıqzMr}Rǖb_8F4% uks ̎n.3\*[r4bˏ}Z$ X:w}࿊}ӦXpm SCGjҙEެˮ\|O|t?@CaŲ tAo=Ř3B/o g[ (vve3cUxeFҰD9)-%0i 7WF)n4k9쒊Qиr)ħX[N,+ˁ-N=p˾j拨\f[Yٓ.ՇڄĒ.ǯ5u\㡆hoԶǜ"v+U,0ϼ]?}_4"m5MQn=BaVPOa<ģM]3̥&+)cvC}ضWjdV"}oK$j'/1C :i(+d#~LgnM5gqp$޶nC!3e,, {:.TT捊l-S QeCaDRZt5gRFnvѣr A #3~ˢh G**9%h7'Lxb[n!CǪJs {., Yƍ̙C.B@y"F$}?F@|aIUFWnK/%$&>`g"0/)}jyA œ=*pX&'G2+d)g<ӜAohٹ'8YŢ]z\ o]N~/˿o RA}_^u͚!%!m9 e+͹{*rPJ{Atz6֒#3˳b~gh2,h4tG|v ~BUx% Alœ1%/ ɂO ILOMPzL| hs!uwX$Iw׀tlnwbю";~ĵMm{M[!êH}guR ǭ xg1zO-M[\^Eզ2pESLIRd9/࠳>QFV֟+ԟC7l@ $?CN;P4I4yee&GKK ~͈'>T?<V8":Soϔzӥ;'Ty#̷TqH;3v1vK5o]ɚx K`}%.%K(El[',}}[ [A~sqcAiy d_YǓ{6غ~t3-dt׿.0ט^v-A ~V>n.mzf<+=Mgx Lf+hCRwJ#$HTD-&Lܺis}iS}x␜HBn3./V_ ,ZtXLm'>14YB}Yf t6)2ӳ; = #z#/+kzѶ=K%,wQ:(7"kʌL"."c>h"e`C+ *UQ1+a[w='_Y X}`B 1ҾE͖mF3@ZW㰅a6'4C=Y{ f . ~ܷ7;Հ1鮌YE*ha9#eaW2Ll7@g$Ė2"IARdtqSraR/E,3ÉIV\bdC;In&ٯ̲vƒ^2 kNm:#YҷI%u8Żk- jlz:fJd$@XKX)_ }2˘JC.Y&gRMJe3Et3KUYG]X/Kāg"ٻka5,l6zǠ :@|VI,8MtQFI醕򰼲DÏ" OIl,%K Ch=s1IE " G*' *=I ^"Uh~kK;,ʈ*A~ rKi]7/^\ϒ,#^ȥMHY{pqzHA2vwxy-F Fffu`׺kꌬb@׵'^]5zWZ4;[P-\ugʼnFZCޔL8_u<=s)/Q,Tڟf//ZuͧUmuGvAb_Sd-cqSKbG8b/-*[,N&,5 gW9mk1"IcIƘ?~K 4IXhL聩ǓPݺeW\(ЇγT(YF#kn{>EIErL2 {8uVKsmꝧr K8&ojFP?a:-S'5e玑"[Ā)[?O`I4V;Gq']qD+i+V~A}F+zD@Ñ4r!_:'XdDj?"lR V*vyXC2R@+x`P.hRqkӋ!MMMOuv[c[Cg3\5hBE9/`GKCKJOn״m[bIڹpoܸ Y;J۰;q4;ȩ=cUOsͲ7>[g/?Scqɍɩ OeE9E 6$$˙'C&P,+#xv6ǣDEc!ilB#˛4)m;:3?>yڧ17ӓ+FVФBg|Po,H m&GK0ɧMoB2Pe5}oM|,?i^Ӳ_^ &߭)Ͳ1]dL̚dh^~O0dV2+m DZ!%.݆Lr,J Xd# ꬇^3/ [Y@t~9,gt.\(C#21~3^2q( 5;JjA|.cI㥗^Kd1. 88`@ &0, y)5 iO5 vIκWc,fic[=![ҩT e3Q8zP$AzEW]w@}$"0qge,qwkFYd*W 5W+Ҁ>\~~;s$|6CT:ڋeBI76U{Y^p}D\ 'dS!RI9_=/~0oJkwmH n7n]^ eB!i A昍EޅR3 wd{WL͹梑E.L"PxU V6#5)t o$dsߨm-9D@X9 { 1p1R<8eqX) u{UMȳNJJ$cKh9|.-3. ̸hj^n6Dc[p7,9ZXEX"EcСaHX[M!BK+hne Ψ[p#&O"p95u Xx(O짟=2b_Ch,<`nQ璑yr:.==,v4"gBK9Ѫ ㆹ#pGFۍP4# SPm՛bMQ0jƟ2Մ/9 Vumn𴧼b:N9~{~'Ee:FO[2a@kmege,lBBKcOǫ;R Y d^,xv/XrQ7~ݭh9RNP}=RnӶԞ"UҜjf%7ۣr8yu9Ǟ֘1cQh#FW:7J#խG Urd!lZky'n7=Ůkΐq(ܩIi33tJѨ;+[>ӞT()y Ez]Mm1Yfڀ#[dH zTK,aì[dY.15Ċ72J$wfR[YhhVW+ &9&ř'qєT9$dP^X`uj=4oؾ@K<qdK(@'$FgX-fVfq@.WX*5&)N\'5t9cy/wq4: 5 O:ɎG=uóKnD /s*͎ RFO965C)1570%tbe_mu\ 4)\EչXWA1XDg{#7䮹AT@2u_Wጵ =̗HKf*{O!CЃyG>W IX@<QVBrT?`[` TjE!!8TY[_Iuea簅+{(:QEv4M{e@ozg__6!%>=WEpZ_1_xO[z.;wmX!!bcӗ0jIκ &=ooSC6ʝ-l?~,;ܱH[>~wC3'y#lnOvw&[X?k& jH`( uDcmV[CVߒjHj uV ۈ !tt$1*E[Nɔ'kd ӣlc%!HVk4,}!ia3&$xenٝ\cspk- U{\fOkӢm v1֑pZsc n/'ˣ8T "૬ *B(;qZ apd5°;ĤA*6"UCE3NG1P!_ կY`OK<R,(%4?R|HBfU6눆)aҼ:- 6HCN1'E9\i(&b6g,-خ}X;([ ta)bð91O>tƎ\#LkH8b:t8Z/fD5FSw*A;wr 2^2vApHhs[;e}-! Q*lH9x++Dk0t" h y# sHa>jFO7i†'lP1C.@g؂°m莥=rT"]ƈkNG w-3%ZF$k=nt9vvT7+i^hRu1Û3+NDV[I/-Fck@yȅ`{!#:kT:#GoOtǣ;#raKz hdʓ"1+!<9M&Qx3&/ "0Yk:nJ?}WfRjPW ѩLh),p W3 Z [@ua!d}5iI@CK_ӿr#z&D ɝ򷅿zΞ|Džg8'}p`+ϟy5nBu,OIQIpb{*BX2IOW8R0kq)7sƍP,aQƺqG͞ITci V{f}ss 6 V  U"yo\0yhi~[+a e+`sTyY.15<.˄\<#}2Y(Lm W5"#N٣<ƺv8ac(a#'m*`*'\_~^VNJv47_:DdO#wq`&E|;o͑S<¦ȊpИv9koimn..GK(`KGJ2LL?Uk$p x2ᷧrvschu;rA|/ i]C>pS+)qge5e{gt0⧼"ȣr$f|a0LIAUuZW@IDAT{ZzP&0gi͌2[@̓pxe}wQt0(]\y\#)_oG/n+/%+m990M~g]bMoW_uaZPt/ӟ4m_&덬Yҡs<\mM,."gIrܚ5k0^uQ5jԍ78{lhPZ4ߕ,3hB>,a(E a>}:zׂܹs .,ʕ+I &,`ۖ-[>sRL ~" Oկ@;SŜBixe3,Jo~Z&8ʯ]V+D'x9vLs .ΑlxA35ں;XSFC).eWa5` Vl*pYA%XNXO!:LQw^rUdu E mKSE`SPmm䖔 2H{ @$z&R_aS0NE?[RFeͻ+=dB%8; %KhxGG0QE+a}f}ˋQGre8@13+k k[ȊŘ,$5]P\sz뭼Jhx_5P,,fc;\laoΚ=Qj2}ر\ɨ' CdNUW\,pN!h̾W{SJrskOF/7?3=@qot&e曎p %V3J 1Ui\wq!2|+G|CMR~pGok_1_St#$//Ch,6-c[ky1fXwEWG-99mm9,YY$jU*0XÐĺLՠY3π! uȵ!vϐ1$ԂDfOq{ZxZ.F[YY!ǥ)/!6lziu}LV/>p(>Z~Ktp\vz!B{|樑y9jrѼ8N"Yd =t#*[ W*&|E%4o٦a`CT*Qa 1ZEDkW:猩/X@E?Q5BvCNL$gI(qt2V>NCh"MKǕ #m;mnNd_~0Wgel+~:=# Y{`zL <Lf81tN&03˿ VtqM֓O>i (-l U!1b)3=G~LـHOJa  v3"nǾ,|z⁤$6Wy rIyf큪7Ebc\."{:-UBԕ[-[EƯ'=5@j }HvD??֪kϛ.ԌXVZ8~gyΚ|5ΐ?+,ʓλ宏jD7>wY3Уqΐdd?whDaR;mɞzP@f\\(3> 'rLZG𛷖n~م\7/os뮜Qz9v̤.)VEzC\wKN_cӳ2Xuwii"THsz_L&V)2W2@̱u0s陓.!.-!$//]c(u {7x1NBu|Qi#N9ICXIC^iBGm2`JC@+PZހp->2j.ZdUg4t`'$aL)(\e7S67f|79@v8iL"nvĸ;mLNd fN:lnliMcvsv`]{!p5{?\c>v{[(`ꑟֆn4 G,i'"r U0 "YߝJ|䄡@am c W1gi0ue,*׿5T=a3x?O~lOh++@Νk oC-2Z#J[Ckw7~,c&*?wb\^ii y0[$"GKvsA8{{5[3K/E.3aAt3ǡɋRy>Gkn1 z *,XcȬ@U3Z_{5 wS1W GjFIIAsaUO.?IPp*B H H%Ѐ;ɅLmۆωιfEvo>{, b?Ԇ$@)46:ԟ yz1kURڼ'aGǮl$Jn`TX> .dcPvN6,8yC2a!#KYěz&su֌1&&i@sjJ~ׅ;wS2E#gW/MiBaK.(9΀pG'I:ͽ7I&(C.+Ta3 i:t$1>,Ɉ(5!JUԻ:"0L&p7Ys׌+l2YvJbH3iq>|?~gm15#26Ft$M^wt#sa/stAx=)JBVnDIY v_l2yolME*Lj=b(CE xfp0DL]Qު m*9aQ)X2I<K.|ltyZҁ"ԏ~xUsW4 ,Bjh⋰zhEZVuGI mqⓊ&3fs21ǫ&)>G<P{TiOH-Ox!f6 cKez-]n j(Ģ\$^}u@6|˓aѬ(5#ql"reřd GZg*d Nanʎ9aٲ5׫đh ݟ\ށ(HNQA 3C-iFE&h!(f5iRv YӹmWMeq u46  c#CEjco J,!O^Aoǜ=l#ίM *lq^4XKBm9CElV] i UtRxVH<2nw3rsGnYQ{6iE$i(  :X {2>iHlHϣg2=|b'HAOt7䊂s@l!}Ǹ_3X; kGJ %'K! x*9ÙdY$@8+GřO={6D::+x+~vuhQo|ڭLESڠh5:~xS_OW; lIsQ|g C VZ1ra@퓝1NG{C [4W?h,^NClDI=H`gH'SNe#o1vyU;W N<Ow?eַFcAgx5e捗\y+8ww_uջoxOOIɒOzemu2{7qgϙ2(G^2ٚ@}hhNRER_R٘o_Wv^gVgg-I2QiI2G~ a6d3b^{sbIʚfU ) ƃԴDgaUת._xd#^!W񨭣1!(Ca.oԅ 9-/(A"953Ј"}N>XpFp&$Iy%*fҍfE ~+1kgȠo$B .Q2+IFXkFEQ._`=MƔr , bTzdUZ-ilmn&;TdL\ekqYUSϟOajR"AB0%c '9H Qg2F8"`c?n(_71\.>wH|kf=%&Zzvb[=8-(0e-ǒ TL{q< FfCr6|Ğ (vlfX&MD6sdWN4Z ȪOF)jݚEIM't5i8@%H ̵55NDY>OXzIy哆PRՖNXA)+OjF+pvSKw`{z]ڝ0bHK2'ےMv`$TADRduvrGWkvVX'JvSQbwɁc8)EaC5E[#u16A*pF \Έ\n䶡9δ} d"•A.\I*c{j[j{*:%W\i\10Q)3ɑY c%'-4] R'&xsvFv{2Dkd6=Y{96Wo2SzlwO?nޱsﳯ/#&.=׃ `m7 Z[~sMHL臕飷t8"j5sV ]\VsCAZ@,b\`e ƌyT$KĒD=2\qba'LqڔI'bB#As{fmi:ۃ];Kw(N77~Hooof'Lez^6nzg?=w3&OVʭ ]E2,H޲EFE0rk ?RvZ ;_ dȋ,^W & Șay~a!wן]e93ru"g@1# TL R 6h$~>-+;/x1ǴH;Ç8N"ͥ|+.bZڂwWzW\cBCuBR^fFm<|?Q:jpX|;:d﬌&X~}RVG__M#[ދc/-4%[j64~ 7\zU7QgwɸO=7V} 6gI`7\KsXEV9îxB`/'}`Ԓ,70ON &7mqƌu8|fCLJC~q:񠴝ݣ Kãe3|mk(~s @7m]#/9!|f8讆;w j Iţ>ʍ 0"z{{WGVܼy 9Yш+izښ*sssݕ$dQ̃mwe3|iXĉ[%∡eJ#-<=grF ;|"{C} I=ȂuRDxMicZkli9/>iISTYgT+0I3HRc;4o > |"-N$GIƦ'l8Q+!C>Rr;7<:Zj8DVCv'GQ|&uZUlqx }1/{wT n'rR#]o;~E=#7[~TYz#ǂ,鲍hE_Il^yjL*5,}2#5bibLɗp=ְuvw3Ϝ\,(ȭ]/ 5`˪oas"4h%u&r3eH]ױ_ۂF: if@#O܅'Nxئ!ya y(8Sv%%+i.,G.#g?Yb( ZiUlFTHzӬ}VQAh_#lRf}mzfndS$9AiW 21P5d}Sknvu q]~F<>9xYsr Jʲ[mEwŹW%25 D1J%ńEYɄCc%\4I,k؛^#'Q77ۂT h$aM\vAe瘫,)E qpN,q׮PW;!X"%MgZj" a'1A<D|55{r# lg6sMH(,̣&Ҳ!e9]N'ʍ!g#PUWW=vy"Q%!?(1DCN52E}1"&u"OZp$`җ h[߂$ 3xH?P0XMgeCiOHIJ399Nq,,.*puCRሤTMePN/>T "cQXLEF/">j^9Osd帳1d\12F̻8iHաfѲ,5yRiXѕXx>S>{1n.z-\#ĸ/:rLs4!HdN{xitgpfe s;'$UW5P?yǟyL K-zwY2sz .@xqɰI&iQLfʆڷp JL{=1;iͷ~eNPH:VMGPF $MxvX[r)j  }+ |ɞ#Xs؂,З#tlӾ&7pٽd4fO<q\)䨹*>AgK|C |I G]!El4Jc;EFFK D`#NƇSRF}-My 7 [|9Ɣr :q QaC_2za*9  ͍T:_ݲ[z!ج VG Ih6n9@qo:vvD]dpV'#!Vr : X߯R~w/%^:)9 `jPlM[ȍ5= ‚ݨU_WƲKRTPFhbhzbIL&_MT]P۲ ,l/ow_}<./ }sΜ9Μ9sLӧXxQ:pZqr 8 ^O; ~l%;'j*h0S̃1 EzdC&K"53WlBǐf^ A<]M(*pZx'-JR4,SIXSq<-=ON ܉P _ )p8'>OV"ޒb*'8ޓi?>K OB`QЂB͜_&)Q8rf=ܯNr@X }XJd:@q`\dA>OQд+>P -|kW]ܖ:hkpa+tpvj5{KyP5;Yw"#ƌo!r[w|mHGQ=w?w0ijaE3fϚr:h5zo |Hy uhi :91[nyb(08vfQLj(٘ tzwsjO-sI2X32-5`v47rSvzTA<ܬ1S7dgL/kvfN;uTH +SAJb*(ݬ~J;Wčbl#l*;-qQ4ej~e 9B[('hkbiLܐ+J8|LEj>(rC[,|wzqy&7Gsb 5"@a򕹷ُLiU J38;衯t!<$zLިbr3CC DNHjjJvcFUP @3t~~X;>{EhVT5Z,`%!>e\&$$" G `S+3(')#쎜GQ Y&w\Ƀy yZo1wUՍus֬TpFUؘtBh g(5 9&fn 8E tq^C0}bB&vfuɆcڒ$d Ж=p@#G0m@B5< 7l_~ %΢r<R^Dfߧe~\#7=fe#s/jbjR?ms0ǎ:UK_79~-$ GVUwXl^k 'rKIB?8[2g х-PɁ\ uC/*3M16,QŠElʾ#3b[1{_e+ $:nO5 D>跧 OBZN A,K-{U{^#ю}8魊r Z' ; %ZZHUj\._}G /,LO pȟgZ[qMcr5[-7$lXKEBvRkf7gّ msI%b y1=dGuOrAEJ PӉ 2#*ِA/g|9@ VQ ?SW"tъEsrſ/v˜id'i7^zm Ɖ*Xc7^pΝUŤXiS2}S~e-B 񡣎,YxWj"& =V{~9鿽{.(Qq#,>{ŝs-"K-ԓm ٘]H]9ɶj/W]}豑UM,b z.""P~?/{>=+zIK@1w\uwNS QiAHݓGeӮ]NA"_&]'ӒP+GVIif$,èW+yosqQzgM1ѓeM* <9 f}lshBIUO5[CzKCT`V 5-AaaNM"g8sPm5ohnq$& @;^Î$FX Sջ> 592WH^6w\4PE y"vJѨ=j )O?MBYLHyyygv+;Mf$o>|Wq=!ȄD. { i>bŌ s$a"])홗#w wwP6$}h1Ӌd$'FpQH')cR rjL:sEY<ؠir+ÈC`'Yܔ쫔K'KAPق,љk}* m(4gY S6Rh98 HLpYlyphBl|Ic?uSi,jT gwF"$'0ӎ&[+9TJ6+ aƀŐ6Mgee OFnY\X<2O1tq ES@ u#'ٷVz!Ն:dYaG>a0šcMYv8عϹRd#K4=|FrNLz-}9"uvF RZJ BئA 9EjQ (Be]Fd%n {FiP`ɼEp3YaQB>v␓&.\ ȯM\nl1%\̗`@p8\*Gx)DTdg #fnI]_eu:%“u}tjǍ􊵿{ա~zvtWA%_b|+\y#ǕBk_;o!l$i᷿~:@IDAT^[-ecǎ)>(}s Lу$E/Cm܅&ܜlr췢T />sعj"B˱I]V:f\Y),1qcAL>PA1}LꍝnE[j8x}djowxLy 1h5(gS"(|ydDzBIzރG'Po.U)LF/s?c s2!$JG=a|4ҿE1^m,9TBbCzVگ?W 16#gxQ sr^.OI?u` _!*yU XI j?0?&&N(wDcfpmHoux:V&F 0wr٠m$fRG uGLNf^^a BTrD%ɁFmÓrKX!2 ~+5*^Ag2&2 X4 WZEX;c#a쐕h 4lcH)QPx(`1iT2%L*.Ї4e*Vډ"@bQ5M_X?q\٢ z=dXaӼL1Rnb#iv:r۞A1bS3loaMs#ۦˈ`+19bQ vм`)M`Fx/A=*?7dj}Dj^؜==|t5ou/ 𠗨{?> Rޗu !_7{m. Lr.鉶:a^eH;1+BETIM 'y Viװ]o=򈉩C Q=GhX%WY礈D@RyMeGHy% rRz.;=WQ7Vwz|:iu d);,b#ȴL?OOr@j5[&ddHO[زj[d*{k!$ʮnjiv]#CV}K{SU}P}*)n6>lXv)*[ Qڪ)A޹dXSzYSKͦzo]q^z{}7Ύ7ե?ԽKr}I1k[kȆ8CdBݬW^q!!R[6xDOoyѲ1-:$>,n鷫uIv:#Yfђ23 8ܙbc;?U1baʕ> n|t Ǭ # 5",).JN2}uϒnގC,)33{Nb )<#[[Y5(`2F<@偺c>cXNzbrlvř @"KZurAo5IYSEg @Ц@A e _rKr}]wņ ~# 9ȨoK 0YW8vmr/㐐A;?_MyIQ7XMy$I#GXD/5_pڇQ{O)?3ni3*5eGފ Lcqw6޸hδa>`U{,_| t!f<>5h;/,8W&JT'K Itx9sL m0H +@+tP:-]֣+. ۿmg:‰y{&"AbFL+8?PP|7U/lOWQ Dlx)q'(4Oj2TCC7&2gI˖-FAzu$&7\ t;I" X6'I!re%уB=1'BI,cIΛhBF[G,ƖL!zי㝔u$ 0hpaȉw8spVǟ4Ѫ{[7 h.ri7 }H%L- 60 9/ĩt!}8 f}XO {$O"dкPUhGI)Rڕ9Pnء̩J֞L(,x¨p.u JTde+ rЈ2SZDrU&FtM?*-Y Cw_6ctp)6G-]뛍s.Prٌ)=cƦ4P%*o6Eg>Ö?[ka? ba \oz7E\"m)Bs)J4ӂV}VǺ'!'%)PXy28ۣwG^] vk#yg*)Q縋2!T5E~%?Ѻd*;񵛓@%^!+_AGюMudϟ+6YrwFu1QƌϷ6Fufje% &D59?ה-~vcśѦaDt.BSƎҽcU?[8*/ڭm=q$n~"l$(#t?'gمd* @ssT1!7! _=۶mE|)Gε={AWKY?"I94O/nzy *:K%F((EiJDTkuV+n\e4-^x d_j֯۳}B,}jK'$۱H+YR6#gO:|Ryu9ñ)M~̑ym۲YWϸxg_~[m._>/NW0ϋ-e-4a'"n_Т׏g~ ~[|kGMI'& Ĝ;QBєrWvלearF9 =YYY7puDjbZpFz*P^6?::Z'S{cMS(TU7IsbrIYdQ\reֻ(t{ʢ+4'BxB29􆶮h)Q#@Ora X^dP4%NKPHnɑ`,HXF5 ,jeHMVZ`žR羡!Q  Lm =@T+. E<Π'Y(*N8=P 4v,b PK2W$_I {> hh`PsZc@eisJ[L9.eM;ptzUkcS !ިeq[jMw.;i4^ Xaw^(e,d(j45X ,DOI/'! JvX FF;_p.p'PWѠg^҈.6N}D{^=u_D^"*(81VTچDV9CZ碹Xښ]]]{<&>11>1 ݞeOKKhnia#THUq,Axa\T{ɓArHYc%!˹r:n n FA?`%:LB@pq4UȯGC'" A@m#'Ǎ,@ZJ- hgd%;vQͦfPFR,A;ⷵQ|"P|le޼y5}ŏ)>͐~Ѽ^5{=ov8u*4K+z:jMv9 0 ꖘلADWcO.8M8j^̗N`ͯuR3zHG=22|lʕ;n]U^r9u![_;B1̉@^853{7ohѡ̱㳄k!jEr K*tzmUc{گdiCFbkCW4+I?6mGbѠ@W^-z!Hi~a1_Z[\q?Ga0>,g_4/v"^'srL6omͺtM}AYsFCnԚtu(#膋Իq+V{'CħQ*h&<(h]x2|*dV+]|aQOJX^%%dqF@!B&|&~'3YVf')L~4d  unaw!*$"PV|F dPNWQDVVc\ؠ7(HWCjj6a7F^@E+~鳫#Ǹ,ť,ƼtTVj:q*|qsF"c)>j n4zޤWR/{d%Czk d]0.[j%/"v zf^ݮK`R(!sٻ.wk^\>+SelzMk6]{GC9% V:EtCnS*jxƱDO]f5vqlܰ/XAm6e(R4L8s*uDPbto29[5EoVcՇm%yÐbCC0DԪf/;g(3'ٿIc 21'rRҌY*GNw@uE ďY\Jy6lxnC# LFu[kCן'Lf$,!=+l2/wޭW>,3p)wht;|^o8J@I" (OG;Vj\Pkld:;= | pAnu(Q9>1qs$r4#<p29LFAO`JQ/._2n(\qOٲ=#D(ሃ%X#x|=!J} cXM_?gIHK+F%1*/Q&F + +0v"2+ _2"nуfJ1JѲmE]F-j'>p Wu[o͡Vj*Iss73e֤v_=[Fm`|^|p!SjMOn8n7'^՚ݪ$amtP8BLb% cKlzrѝ *ɼ~fm2ZKg~b|w& sWn=b:$Ä́Un/؃'GgMm zYŽįNpФGFͷ?gCrkuL+ $@@`S?Ta_&,>+C9%`Q@ktS0;/ UrE}.ninndC"XǶD>Bmɂ "FA^x#%Pu` q,e#'Oѳ,bn"0%eA3'ʾ z GB`+R\$plaf'ݘ `Xm#"۠ :9{CNVbJF=1E[ 3<7p{x+0ERWwOQw[FFZ49:( uaCB|&u}B{Y)pַ:S/I&ieh1:|W`w0 de;i;+,X %l_Y辋;v}ɆK4X@/nv8T( 'Fɘ=)i Ѝ{ `0q;01j3"^il},g2;âR} Q8i=j9,3i_eggH.FtFec? hulDCrX"DRHGyc9{U֌Lf֎1U [:v-M)JjL 3Xv"GO,+An}8g8-M?Һ`{V!=8"ɜj@B08Xb|j2ԗRIK~L)qK 4EQҪBI1ntBgd<9EGP:e Vo06`K#!պE3%sR[ gCtAцI.2?'sDѪBLξ̤D5uG:8c(hmhgRR Fl0WՍL L=Y|JjEZZ,kvvPƅ+Fћnljlq69jOHɈcLIyWY7[6teX]~UM-6k vnU26\(dd40uMgٖ5?67V=ts Biq`>JFDuC'SIxSEr $Jt Vb\lSF~Sߦ};z:tM{ʟ}d44J7}º>TrNGסADˇ0!H gO@1Hht.}=84&||m+ }eR4]Q;ѓ \J'|n_\}(9uo6| i v6鿝4*7;]0"9r@S!ޫkK&W{Ȼ{&#ޞjb}iǽ !^8d`Q֔b@uaonn馛ʑ@2 _ dlyBozFܞt)Yd( 0\<˴Xpx1&• )J`U%]=Ve4Ԯ''TgnTivQ݉чMƁ@'&r\Q˙]kU ?Huc 3x^c+=G"چCPx+l9lt"5O.k Ɖ HD~H9 $Cb#.f4$ {E?D( P!W@I5}kvrTI싲hbzл!ԩサrARb҉'ÓvcB3U p"RծR۬ ,e_Hp֪!kʨ VK 'zXurؘotp+CVE@^"$c 43hEL Ǹ;mI ,D F HPa#%Bx!e䰣Ċ;+++h+*rV$G[b)<ȅ >9)v[&g?ÚT#V( O9)Jv?kw@9J;ڷd%yyXɩg+KJrTz[ әԉoB!J_W"k_\x'f_7ދV&kaηkߨV\]oي/5 .Zu $ :Y r>5h7}\qhqz9 mꑖۦ bFsl-Dš6njiaV8<%Rʱc~a_A 'iR&뼗M/2s]|b zm p΄GnY9LAB llWUvzܧMři#Y%iԧQ{DY 'f'.d2k)`B{+/^gc|(w1 r#̻u~ p1~w.8+Ν@]L/A[x_9rdѢE c[ ,iܸ5kVp:[ڛl6ėzбe{Qq^j1<oK7ٱzסd˅3Ï=`WIIra0"*  r1${qv[4B|s5p?rg*G_&w8Spd'AgP0k4#^ ?HbUf1g7 Q'i`5LJS[Zmgֆk\G~sC_8)ϏWX 1f4 E!xF+xSFr1sZ{Ի|+!YwfG~C |_u6{\p9z:Jb#jlaB?/p5%.Ę_m]-ӎ64W71M O%?fm=?5{w'~wx}|j~n^VFJ_W~/|M}{4۰sZo_xkw|nŸ-[V?"k_n~"%z:J*AFxt>9O M> xLI+#8dD ,I$dh噕ڜ= vxvku ;敊C˶>3FL'fP R6]h@׃D& Bhnf(+(A{)9Нo4H _ GO ]᢫H?bidBB|BXWBG$QL")NJd@[*SŢיDQ1ZP'Y~톣'wE$Q8+H rY+|xܷxTmv`QUC,F[8t)&%0KXנ!+&EvuK[(JHɄ'~:\!r!M/4n^PȱE͇vNr (їk 2w䑵mߪYMhhJYH%57v^6Q9 4Yi؆*؇>?ʖg?!2jSXw^nƩ9F!BDrU@f9K{8*YIӹzR&.-iКUlF 0E-s3 N\t%&x"̲WK`tsbcH(p b`ruXbsc666q#p8>^^;.Ge[GGkٸjUxECG$Q\:mhoGZj'&@gerp(&pw_T z8{0:A-  ԃ,`e4(dGgjw㉄o|zXC0 Ok?ƞ5["s njbF!?1k$t5}h씑~K&iW|[| do R&3'}uG:O ٝiy}型]2]~{Eٟ^0`ݱCYر;v$řVÛ˲|;l.{f?dk;KxK.zoedlcSwhyqykg>h{gJ5R]x[G=z4$5;e igϞ=}tv{rUZ#f dЕ,8Ujfotf 9a?"8 ^nUVz~|&i *nTBMӒEe{hX:OɆ㣺I(tN( Փ|QTGKQK8?HĘF ꛯ,JI? f3Ճ:RMQFWb3G+WK3>̙b_<+IZ~};D*0"A?gTޒM` OG[۵zs&vɅbH ^HnijܾM>UoU,4Rk{tk\zB}&#YYT-ѴUY Ex֎[24H@GE Ƶ4 BGQ&]YFPʆx]3Qvյ{ZM~8t1@e,Y#;j Dz;_<8AIJZG%pѭһTz-QGn?*v0P{bjL@hPfDdڸD`Fi=(]qb{pxNAh0+Zˏԕeٓ0&}P\Dַ8{C$N9t J0x<עH*r]N`B*CLK3obfIJ6k"|B[AArhT; @!pv HD>x(nݺu|@idn$oĨa C D*i h3Wpjk*n3f\Ve"Ctyvn|ww͛T6X6oh]z581xi 3'x㇖?|{[| {ghx Ɣw5\;q%EO?n5+7ncmu*8fx*|%=曯zI, dIF,a3FJ?6 bONid$;I'V+uls./'6=*K㶩sd]:N}%\~ Zy>!:#N?T4ϖl6`"9isi嫼OA}@6tSp6 !xxe򆃢p gn'#=zlKOd̞ҊsƺzWWb٬8#)wM? vM .P]s 9\G)yC2"Ŏ* Uai5rp22[8I}y#*Ic_=WR#!WUE>0q'IfjN-znaJ%8AUj G`@Cb#G,!huq]hddPIbH+uOFt7ʉ2+P^D {PJLs)@-aLX."0??YؽdD0r*~eZ^/ >XCB (g5H P,$A^р~&(WS Q8(3+Hwy?$2NO 2$ p xd k 2S=ZJ 2,dS_nwo6rxݖ=I"ʮ6+&nIO'޴9!cW5[Lʱ$<^ IzDQGkܣU zH~S"mL}S;%3)̷fe>ѕI+n\_T*HsRMȱBAk8gV+hv:}Uڸ-8Xj)v|;*HRedieۏ9.70["&[fEQ+g ݰE8xU gd$-]{tkmw\gӓ'xS{pEegЅ"Ad4X {%f#6t{PxY1G䮴I6Y(o*^(H|q}L9/^·$GBp(s-!*Z\a<@8$h:ځaCBԥ+#??j_hhh#b b7p*ZP֨|F8EH "ʤq%ABKkǾl;@'7}M?pۥ)'t8"!&p]Q.'d>dl4aI$ W93lRY 1DR]oȱXѭFu@ ̌_4 rXcCiy_~W7t'Xj6ƽK^(B?W Io$g{<9<}14T8{x(g)&3"WV=,.Ǡ9:qD`(h$!sJYp)ӝ+o>׭KUKbb,٤"DFa?p$<7lwy'  J xVYJV˫BUZ|H/`PgMs8 ⦎{m`$Tr!GpUJ:-7rXPkFk s?x{17ŏ^12:bثGաVǧ"d'HDVoXR41Sv;b߰GG'L gNj4oQPyJ4(vM)g^rJR@IDAT-F=CaXq%Ze~Ujq:Q臖59/|Tӯپ@Y%xc?<b& L!*rojZvpgR5`kv58U*v2wfֿ"Zu(?ٔ\F>LG-CT-FT!A<mmń 5NN2KMINDOֆT*Vk;Z S EI90 'O\(Tٚ'6KlU7(# 3=ޚ.UڳgW(Z2mnE4&,Ȉ=(gbssB|{骶Ya^nwhڭ/x5 o1SFZ l<珵[KFwZEbCC&\`O1ЙfbR&IIi@&hUO,5z<r&k棥 b3cfӈ<>&P>z%4_}}CݱVy\bLԈ䄖u{OJWKZب3Bw?۲6b=̪b5YgaUK޶F'NTH]dUw?0jfѠխto]K~uzNlE?2h(}huT1.iՅ&?3#(ervfxڈP1س +VpXDMYWl7:}O O")=܃ZM(¡C8/bQ+J tD yyyX"L>hU]@nPX`~DJ((̰/&LN!u>?: GaT30>b_ӸXݨ5i 4}$7 %.Gttn#J꜡z{U5h$z98Kt?gs\{/4W.LZPU-5#n N14ݕ:Q[z؇ p%sڰ'7Է]|YK & :“*tVܜ"W4k/Ld'YD#;<>2&R̓B=fgBhp4;&olamtF\mCW.K0 B:C0-RaqlMD,ZS3*Շ4Y3,9:25pk3u Y3YzճF'`XwH1>(ʠֆAA`,jM)"CF%Lb9T #  ўT_I%)j\'Muzӫz9A<)=Q a/ǜy}YKK[L,R767յ45Z Ĵ{RbV>{Exi#=B}Lr3OgEA ={P98bxȝ#or<ǘ.\87.6uy]CB`蚶8a+?d3m7f 茾 C,@E"n7ծ6%mzjɎGpŔc5)Y\]W: Xq`NwO)HH+x޶eBbҧ]{߻=Gv\R6#xkf.*ZѶ<,itaׇeҳ\Y-e#Kr嫯z +D;$ Tmvz.6pPVk/.Ԯ\Ĩn5qaBB& IKJMvzV#t"qK"p;>W\g,E0CEhbfe˖ɝ^3e/@r/ɈU $ڵknf"xEDcNjSJ8ýg3Ti>Ω#3 PeԤ=N*Qh ]s<er͞ 1#"uwLK-T6#|ZRʼğ]g!,DS*睆c~WXP*O1o`l)kO?SOaIPsHr3H5 3JsײDZN%c%7Ko"mDu[s@F%// I.K ]`D\3Á#Ya ;[ׯ_OBqxHHSO=Ō e1 kwuF(D{3fu]+6I0gH"ScX!DN]qV60lꐳ_qbՋ#"dXjAjREc_4hVtZ M-y&,X~SpRmJ^=SqISpܳ195$b/u7[wllwվȆ6e|=g bm8"LpjDҞ43){XSҐP"$G$X_[ަ> m~qmr17٪] (uN-C܉WdL vj*?޵{!ϔ0Z]Uc ~H:+R|(ĉM~P]yĮוYyYմ⌕G}Pijpw;QLb8wlt^k^Ե𺽵 H>;-K2w\^TRVuOv{eٿޕ卷*82-Q%İLv\l!zybLLʝ,cb @mwB$zr : d_E-p \W8~xV7o9fnR9Ʉ*V0aG%Ӳ\J[Tz|w'[cDԆZd <<>eee>htS]NCy55@#%7crS?C*UrKƍzĀ%9g^Xذt]07Ņ57t^0Fs׷Es n ۣ6'|Q3hiΜ>bޮ9PR2/LkUEn4-;_mSBͿH}?;-s܁TRyFGiG[[cCƍ9A&y<4ZRD<”^i;\[ I, +%>.[Y?N}7ْ^6 %T+Xyˁ@= $!f{yz7}}nv'|;ڼ Mb]g0"ΥۃB]ϭdFs=Pn4O/09Rr~4N̹LݹQB-nؽfFZew w@cPx<wo_7~b*k9O?p2SE6{=y+o?]MÉMYMօy3pa<`1uo&wX$,H=ݴf^'c_ F[mBWxa TI(cfGBl두FC ߳g|4\dHɽ%nM_ڍKbu#ވ}(fD9$2OɈH \At&:\M+F}d 5QޥM0 pQJkKd s&lMD75˭vBv-bZqr?HmВ3&?0\GO55g8X@ح&8̾]*ygPWu]傅~sO7'LMD'fFsM P?*ߗU变hl_?7뫋+&x}NZ;1];"7_9x?yݍ޶4Kv=R,"Q#e!Gm^XYピӊl29_{ieɊcY,㳳=uݼiM0w{᤿xZ.RS ~~]y$C 3[z<ߎ%_#.\>VXt 4X<-ZMxW?,>a °.ܾFB#2`P cRں;fZs)4s^DC,L?9Rɓ'dG)d.0d@'mi44xdBXJM./^q5ٹ9 7΀Tz)&ZëWmjґ fQbabr֒>{>e]v&_,?gU62Л8-/,:ZsP\R=ͯnظKX볏=eڂRS+Yp`Kw89!܄C+|9eAIHE!p>%a4cisD%LE.^ [i{k2tV+;(Hn!.{S'I;ys+K2fVNl=|b΀& \ɪ¼ԛzO:˱i7vbC n cPC&.wSVG8.z^T55(+rNϱe9^bCρXRGwD<=nWضw.w2>RnY1e7Z)ȶ`;E12.vPbjHϾ,r*#(d!CL7e~ "w05Ƚײȑ~vx\sPy-~s."Z }@w~&,9N{qum=?>zьʖPCM(g FO&vWTf:?TxY-,e'n_1+={IY5hXgt3c̪U{'׬Yb xФIW굗 ?n)t,Sjբ76qgUVgn)~vz,]\f (K ߩRe6[hr\f_ͥ&A*~3yb,}%62($|%nq /K*<^|WѵVʅNϜuߤfiGx:`} [x~j4{h֒& U{ݲͺs'U;' &dT)A)l)MyGPNMM$pg6#!ҷZ\GM(H|T:M+YXQس{Y:p<JNd沝Ѱv{%v_:w)#9hvu]1r }w35V_46/~H!+tPnGF,Yv=3!+^LƯKE-bH,g?YJqgDH!@Ip f65èM*J&\Ǜ!oc/?JzbI~nl-VPk!%hf ,NqNƂE8›1w_3o&^o97%Ļ(C)݈LBP ~7{W?bȐ#Fj<基SR\7 ֶS2b_d<]2+~weqn' @W}y;#fq<'hkcjL )ٶ iAEeztڴ i#~Grl %4Gvw64kQi-@ЊdɎn7 6OʩB}dh@Gc/nlYfcވhppCkJNiL3a]M(mҪO19P""d[ӖxfWM#azZݺ72cpm6qX/[PhքWw]څ?EBB|^(Ǥ}$f@^1J$Kɘs:l&)1nARBab@9wIcg:w v~y}UW#~v2-M!F*. o.m9!1 aeP%BmO24ZɸkrWxh0?{0 #q ՚x(ּ[Gs3Mָ92PtNCr0aN0Y̹ w^IZG|n&!d۳ ZΥC)l"!텔8`5a8&H]=CJ}aG`g=}?9/lOcfm9i&䀋y#5ÕS)÷W $W\0`䞽RreHiGnה#|}G?z7d^ãAe˖mHtR?_:74{MA:_^D0:Gu\:Q 8MK}WN|vaĽ68=nϛGj%LzDWL7{UpyCfg͙Wa@;s(ONCF'7?1ln|#dJc Yr4[lV./mG#'ewk,DMG=6¹{:5Q,k]ssttEYS\uBx h'іȡ(wMz^\]?zrDws20pŀtp _,d%} W^y\2D0cAE΢9fAgH}HȀfH b$h,\e'6xty饗l"†JI&gx/ճ>{nNիWs> ЫὬ"5qi׿0ƉP=W8H /^tsc Թ$5ww=QCr1hѢKvK?51k:/`$Dt[@  ~ΘRZ5 MZ<Ep,JCqPG-09Ʌ=D$V&f|ȿD7F"Cy,kkks1;p3G &~f@R__8Kt")S+pa#e c- bkbVƐoLd }uaOcJ̒mRJ}pIYfO7HՄU>@O4)ru>YW̜Xd -MN$~l^bVM-ȱMS&ڶᠪ83rػ^2_I9yͩ-Lf|m'_G"qHISsog:$E%5hMhޢK?HA_R|dmhx`2hЪQ 'BPMamg3VZkVÒz&]󶙭6 3m,Ep$P-h sr D먻A5qH ֳ9UgM.:BZtߞ޳X:d+4Լ܂ŅwXZ+w7"ק;*1`4;GEe$h&37^qi+J-7d#oc7[#悔~M4UKgHK+$QeRUN.G<7(ߋ4:Mj&#FLfX*S2 8ft!YrjoD1 Fp`0&M5D{K:/1| S2"QΘGbT?) lhh@hgA)u' v!+_.E' @Ǩ k_k>#%arEWTTPY2 |sn566ԖTG&.B־O?tvw0OR~^ kh<3\KIWjzW<1O<"4D\봘vl_;Kܺs;W.}ޣ*=>utC[7/=r˯9RwM}W/~T/Ą e` OLxUy%> Y}S$BA25..;H kJΟiP0:mKz4B礉W$6 .h7=H4Iݏ~|4w50 #N?gdfp׼^ %+\/| l <+%#u&r6Bpm9G‰!%=FeDz=9Z" I0BrY6p8|l:t"JQ"nN–z'P,OJmq8[,HMDgtY"Q[lo!pZ/W/VY}w gO?2@[] nn;V{#Z}4y/^}fm*wk?n) ݲh+m0%&fw,5RYW%??u'eoYvS)Р1LY`X'}׻œJ Zz\ (-D+ aq+a@^FI]^0}QLA o~0cهѐ R"j@7nm~dU[R3qa4'PK p1nP-7i-,y/ʾ[o-//?ȕ̑dSY|/~ `!ix4k&L@v/ #Ar%_Eaq1 2@H,FOL02$.2U\yեWz(FDi!Az>]Nrj1E|L0#y$UE8a;lҚhf5{_ޱY=n=O=mV`?<{Ve6"C8%/9- gUB1@ LPB5Jg Y'H^WYza~hpdN-QP]Yy"aQ=/Z-ě-9ĵKaԭnP@'89=*oa\fD& o ɮ:&%2brF3kb ^Ǿ]mأ%aǔE C nLQ6 1>O!|לAUta3o/)J}nkG*> +qQ0(eGc)`_L1x[3GE#\OuJ% WDcHލ8bpŚy^js:HIپs;ؔ>8Å ¸TU<-P IcFڑ6}+K k9;@N@y.ʠ.4R0"΀ZD.2|2y a&}nUR%( =J(CQND"?]G,(.Դi$P,;1-Z-lURɴέ2cp .8 י7g얬 W0Jw?i'w@F 9\/A{iky 7&AU,D+cOK%~`uDwu_53XK_? X})#1G(ċ:[6'a=T3:K[{''݇BdoqNV䂪Y{\ؿzQ29t#t;&tbd} o>1 La5ĩoNNϰhxn6۲/쯝p*MG}aQqPm[4fX_{%%.f2X3FN*ѫO$g+ pROi Yr,CxN+Zd[RfIM|> /l1!)UnŀN*!#@;+M[0t7#$jzUE2s?% E0@)/p3exzm\Q P< ?7O1ЩtE܏Cu @Z_ix;dԨ^>9 %TFǎ#Z7w,(pf/} 7FFa+uƲXYY Ka=xs<@5cR^9;0]і'`Y [ɢ͍Z6lq;l3Ĉ#V4!0*VѴ+cjxr+"l1ݗn=eS$r612yٖTw}ɶ-5ѭ; 8:9BtqC/G9HoHf&[& | XU`YRQ^ o 3bUֵ2rC#c'6쬋45n[6밡LJR볪HgiYUцSۣ.dRYN77MĴ6qzmb_}+mxKVpk-@'NTK̮*8o2~͗-ys_c@hw BKJ"?'!#H+ݷr~;t"ҙ^g]5R82u3nzSi~_r(j~vw g͗#eۀz2܆ojm7-_!0$hʲ&H- W^AUW]|+lbHt w}74h6dlq?1g]w d6.]>m51Gʲ:zrjIn޻ K+&Nྒg=u5_|Irn֔XrHTgdlfؘnC(h8̙3%ZƁ#@"'_x_=i}~uJF#F8:m8M:_wa-xp`IEw]TbZD DCKFvJz1mgiҥg|,2=Ќ ;h.mh}琾7pV]!RaI^pD mM'wCZ?UD>%N5QQ|]vC?::-n9Dw굟qV#HeEJO5|"{m;/|O T'P |dyxڶ="{ua[zm&ʨ,?t䣏fxljwg.Q h]6/]5 #@tis︂i" }i)^u|l̏(G&8%t>vuY/\'^rhIqq q7m"ٳAI|>pAOg_IR7}!E=%}> O h-$6 *\F@IDATR&)QqY@MJG&300PТ6a[# l͚5s%0 '*bSe"9:m*X8CJ ɊϸbT`U}!Qⷿ82.zBFP *K}FFR91PY=(I0iF拣$RHwi(cj1n8p1 !PRG}ꫯy盚'?ko~#p/ɓx~ߏnnxho}$w$0Ѣ`m# mjs95ݵkS(!?Os)._t_kA{+4Ff[Һc K޳|فG߳ ̙1ı㿸U̟R馪QȑE[LW NK]El']~Csj"v ˊD'vbHDIh9֖ ~nKaojHWvl;phr_Mpm{[[ka>8i|74R<6)*4ydeX}wo 3Q >16sҁtp,zMĦW,:9qCSTǔl-{ 5Sȍn*2eDnyZ MMm;_ l0:W&M>ocvRxd2,Zs2鮘X6\vtc{ȞYrAw4w>jUoӟ-DvdѬ@@2&3 yf,tK&OD5-N. P%cu8&?l 뢎ե{jiV\D \E򺨇lq˒on]gnL֘G Gf-!ejbސ[s7~7C3Ҁfj59hFNcM$<)DK_ѝ裰}P~H2J3m..?ew},gXb5i>lnEONN@-djN5 EN})Kz,cw; |EY0Hb "gd9mY8"2رU7k' ؈Pu{9+$'?[2\r'l'^㦵y|)obyb4s_;QI Ɓ`ܡCPF(WsGx}rsy^FG#z/y FY;4 wء#Rn51~!]9!wlC_#i6"߆`@&-@(tZ`T9~ 1Vkݩð7l؀%\Qv!Ă;zjүEnq!8nc2px`)%8WN ]j,jGYeҕRc NK w9.l$f$dV@Fϗ9cغu[yyZ9ͼ߉|z[mηsxA&6ɤHx &y}MσK VEHCc$pSqxhWiBFU_Hnؚ_i^F;4/ A/qXn#&Ze%bՏp"=|d?5uuA;n?\g@3 `~,!99AR_xͧCΔտ ̼R#sޏLlGlfmytbcRFD̦L7MKZ#4Șh%i\vL,`"t?dMS4\vGsmS8=xލ)D3yg7sUD^޴flñ9Q$> ^-.-vKrs#nl/,[`r[y1ڲrv%\]'Z_|}V:xnaYe4'w+Y2}fĐfz>kNcouIm[7<ˎ\0> >+**8PF41}0܁@㺍\1BoG\J`67sBO5L\Q%ot.B2o!/Y&DB!I^jLs$){/lht0RY0IC]2BF.E{63uyY̍ۯK'94kGqUv=ԋMabv|/vO/]Gԑh#fznGq/.Ո--g]݈5qT5th*(kl8a~=颖MN=KSBnU!F|A>ub a̝O݈(įHCCk8M8TexN;.+s)֣ Pv"׆R4O6|gX+gOƓU22<.hGi;oW=̆^ #'a@oߜ7mt+{.*ɟ`\fLwo^;Ϫko|q)̪,63;^]^i` C5SB 9#&w6i.D f·D 3,/c`%Æ;q1Q<Gb D+sB2Xee%_1%\@.[<=8< ov Ak8myrt?|tz#?LC,8P|'Lj4;g\x~HÙ YZի;䂬=C0wH`-@'ZOuv܉N{9]n]jHT=F=9g\sᴆr1oM(.%ΚYג%9AťR! G\y饗>3!\;y$L`I b3 N&L$ʠ9,kDDAi')r^o>n Ifם7}Kb -u}z'|֕.Yu_ꍯlo_)Ȫ^ $/[aH)ifK%Oo#J#} bTŅҮ{29ȣĮJfeX@IMcW"ﺤiG*EnzTl W'm D#Jd%}mC~ "O!y#A Ü~}t!Px-jjH$2'.O(P6# 9t, Y'g@Qc$ǷJ$)@3zbg2//^^*:}~NB9gdT~kVßD[KW7Q"uJbtXŠrΞm8%{Eɳ J:'Ӹu.JE@SaKtU`'^ݶ~4L-XP׉vq/'+kD&$)tPX=}qp!RҝNiN"wA;vo|yھ5y3Y|_=1ٔpex̼eKXtap[<@ phl{-&6S˗,{a 4~ݢh&t=Ye^QrZ}9=Kܰq/2wiejYjKNS4Duab$G/p`h ^sNX[l.0)&v/^@׈9#&{p\~<+ Bp C`֭0Ю)ΨKO. .DtH? )g?qDA]qq'XH ?RUVለ:Zx&uK|]֜A|fY 0Ozy cEnD(#FE*ݲ dq|}*hPȲDݲ# 'DYzQqZPG8 0ɹFL&#)I+ r *iccIe^gg}kY:WL\ Y5ONZnu%/sSx%cV#H*PfA_XNvNjjvd}QN€$Kߔe#@s3MfzdϨvEXBAFqA*4CIJ #c߬b,FHVJe; Q18dHV52un@tv%zx*Iqlfyw0Mg59ƴ? nӲшXŐ:Z&[lR9SIg"_}{13-;zBn'='؃05xʂ˾[~Xg'| hȦ_ v6R;ݙZ\\kЦ|H|644p/6g0d-E OfM̋%xYUyaϬb֐BʾAĖ_QQ4dFd:悲өcɒ^! AyUcN(fF.ӉDvofctʶ11<;TpxԨt\kux|v'v2Np_RnGY jǘ GljH,ؖW?exb8cW1{aD7XYtX>wb'Dhĝdܙsg?_vŢ&]jʊ=Z6)z gfv5-zH^XbәW!p`2>mr0o1rbn,d1?4ib-pyUjד#]>@{$VV^\ ƕ h}^ه?ꍗ /Hd~w(X G)sǚxϥ|7s©8F! {$kL̺{y}xP$[30/ă[8zͪc[R$Z,/!$3/abV0!:kF@6mv5F*e23ucD¾GScW^wܑg6m@,g S dan`8,5I.`rх0`!<ό4~FYX+ (*x_#°ݷop*@t$^I!uhS掬:i~Q`$b!px>R ##tGNB1 7wdoyK !M+XO@jqdjMp]Vad`Ë~$KF`ьFxd# ^F:Fx,#jAke>rιٸu4Pm'uN#B_]4ƒIVV'D/2W83~iپڦB_nKڟ8U&4 Iq6O8=!KȮ^}ncNY}bw?_;NPgoj1s._3{QƔٞ .HXҏQwVG!0h􊝇D^mN/\RQZ,g:2012jgD4dDŲ%2O'ol3#~vp)ģOx\{u'LF5ieUOoY7WZM/u. XjP,VSy<\^su* ed %߹˧gTM`5hUwYjPϞc.^fq*}PQEmS( `=<2$T0@zm~a2EWA,R|aHd:|qSϲRFU#P)=Sf`@-EY^iNoҦ>YmF;ʛ7o;{V?1-׶Dy<3*ή\:oj~6y,azQIe/L͉7D>v p1<Ƞ͌q: +P NIײ[.s]D$qxԷ46U?YÂKjhu:,F 2nsKSu{l3O?*C%G)"`pZvDdAEWcT :)!Q|̄VoQdqR'440xk<9he-N C.昆,}\ԁ%4qk4gKbDJrY 4HG9ĕ\ib('c+1NJL_ޙʦRE{;lˌ_XqG/a`nJ&n$1hrL%s0odG'JLE@ŝW J >i.XoqMn0}}Oq@B,!p&A!-,a;l*yH!&(ndCߏ&Uqll7+B ¥\^tD3i,N #U 5b'~ED/ՓSj>"P" =[;e.]fH:-0DF }9'F($'p9Ϲ2Tk J.9\fYtg4 PyR @SpU3F3N[ETV,~^eyN *tTI=OѠCPy0ht D 6PǍa]JTn @@c+ ךSt+ C@C?{٫ B@!P/*P( B@!P(b@*C;qZerR( qٔtXEB@!P( B@!8 PeP( B@!0e}^@B@!P( B@!PŀN*B@!P( B@!P( B@!膀R P( u.׮*B@!P( B@!0P W'"B@!P(F iĒV + B@!P( @$A!P( B@!P( B@!P(ҁb@EB@!P( B@!P( B@!P@@1{@ B@!P( B@!P( B (t:PTi( B@!P( B@!P( @$A!P( B@!P( B@!P(ҁb@EB@!P( B@!P( B@!P@@1{@ B@!P( B@!P( B (t:PTi( B@!P( B@!P( @$A!P( B@!P( B@!P(ҁ54 B@!P( xF ) 0xGEB@!P(c\f=E B@!P( B`4H&]|d"0C!P( y:?*YQ!0g]BH) B@!8Hpo|mDY-QJP( @PiT%P\C+!c=gR$ cX*_ގ/TMW|B@!0: ym޼Lō&w5:d\ B@!P(9\h @0hN`Eȃpju:*>ٲ*8[ȏ|HtFt[!PDɄf='l MDn.\U/zKJ~BZ YE` ݳJ\!0P T[VG unni Gx\MD#;)'Z,mLY^Uc^de%RH/G"\rI_?L^INغWN-7.-s,iJʙ&|Jyp?vN{gRE!Cs WMAS"cѢ5df|UגO|C@Ng8: x;\%\Q]~O}w<"pf4+L aVM𴈢R # (98΍MMxd5;3}N-CK2fCF'~4negg0q!e8p:uQclE(#_w]^nu]G6tqm?YVL=n5˲ij ~nsgFod:9(&5sՃ!̫(.% L}˃ ۃXTj~)"HPfmzVĩZÑ%r̠ qPU -[޽ɩn)kvXwakF") $ x4b ? ŗ,gqֱȓ@%o5Ojmhnkk%Ymqd 2 r9lo8,.S<3ZqRc) ٿ|35SBKpZvAI{X{;+E8R<1QC@r1fcIj=&f[M_RQGTNCF@lR;΃W#Z0 JeHZj-kl@Pkl'-@6Eݩr#-gTۓHDSSsss h#0kNlܜ׃~\qV jX)CAI)P8 fqGd3%I"2Jfed"PwT~AeC!G z }i*=.۶v $kA;(K[,Ў6/D1FRR݅˲`Q|3gΜ9sf̙3t%?\\`)*0*/ee{lFrcb3_ 3,{f1D _ؗijHr>~aͦJpkȜi3fٍ6Q:v5rP=0<"uHuDiHY|mLeݼ0 d!hf)sdAis/PBF//YVB,= a4:ehx9uʑe$iouCC؍p^s܇~|)~geewf!-Ñ J$-54l6ۮ ЧSFLVi.MT[I7麆瞺i{GKAh.@ܹ1-g~_HEY'&$9 TKD윛6b(^{e (ԋVm{Y VI[(^vƼ _,ܴLf9AS< b[J,xZ~+]o0=-PuG{cx7Fؔ?3Hi3 a'N4nXomb,]Aw&N{H/i_1ޓ} l1Y"_h.+ ?CTC$>b=K֑PGip@,XFP"JmJń&G4‹/+jX6E=dNr!f0hA\?ۖb-G@!I^`WPJ$H Z[m-AWGQa|DEDwPdg]u!fS,-P{kf#z۴ìa+PCkG҉}z'cQeN]Y /">kE틈 Wx]tب @L.BK 87^10'=nhҫxR)6M)2#Vi5#TKzfJvnJ~1d*+C'޿=*cN q;ޜ)R$/'#E[ j ^WWWPPYfYYo_DAhUֈhķIZ )I@pZܭF ~1^{7pq-i횴t)4u{nW~^mjw# pm=wO@2Wh=FS =ѓQ@Fު E1CۏO][HLQOuZԵ~0knX*db6D)0D{yiQu:8;1\tLVf3I"YVώ +wnnry|ƨ"T@0?e6 1ARjly}(3#F5d'7w>Yvs'e {wLy]\`s$MEhen 1 cF|e,tEMm^Y>+c 7S'W/kŶ|5?vb{)Bkr%wJacF0I~[eւMUo!i$4/5#-epE}O~owRi&CaFPY\5^dSM&&/.Muiw ft!. K ?#㍨w/2;O4#VtRυ~/l0NSOjѰhLh78J/=,zr+2Ga 6>x("E(`r[֚ۚvy[i~\&tYܴ>9s*eQa{[y!jFm:Tj,iJ]]ks[4c6nm4T)_=(X,сeym@N^P 2LFLt/t LC#ќLkr.l R4vUfJ9G kj[[:PJY*&Sһ8'TV*`LPȓ{ބ ϰicʶQl=|D1氘 Ξ/$c/q[g(hD0Tگ4袴43[(b &a.M)@J͵f(1(+)ita$!W&k[;aP:w>9T3]Jeʑyp(݋uڇP& n Խ +w>{cH&C'>&RCCdA5Dbͨ®f0bg]OptdֈNӻ#2k"BMc=N*f;+zғx|"$"FқLx$N Bhh7<o.Sd/_ڐ#`(y!v7^z_"(xӄqF6f5mH{O8.Y2>Qܷ3$<:A/}r'#~j۫]~dd: =o^i!Cfi1t+ cKT ҰKWܫ_3_U,PbD}v1tOw%fT 篌$LΥHfDqzu2/D=0`0%#1f4F|C+͖¢kw{#Vr׮mzο6w0v8ԭu80IK+m,ƨ.W#C/{֑,DD^d ˢE???k!>1iMoG,v :5ƒ["xX Go9IS᏿`S׈HcTx WX//$앒GƔ*{uu,>Я|&d]<%L Nћ**N(d5uͮ??[_Iq\]qpƠ8>bϿA_swԻF+\ @&lM)9(5}tE}s"Դz^U >vѱhaݳOm*S3z/r.;\9`+ e$覕'yRdvWV^~A/uŬS&')P]p*_.pζ/֮1dJDZPY6@D"la# ^rQe}eHID?XMa!<,../1Yl\R,I'^hwø–Ac03?:~:!N)CU+]: C} ß~ǟoH7H< p tu.=oJ=ZWa/y2FA x>>ĺF~q'%,;ztOty5/yL#=vU) ŎrD:1v{F76^UaCy^t&ggo^e .8hHm3jjɍq5Z$|t@+?q}2jLfgyJlBћjNϰ~ڐ]78SOrluummlDqeSGUhByfUu6\kceg^뚞ALQ_48GG0oû+ Zl7WM6O!UVx+T@1%G Ĭ5lil BAyiTﬨfsۘ) ٭ (8o@t{ ` 9]x4;.;oVTAr*Qȫe VnW_=GECBMI/CK7oތ޹W^蠱]aFG&L~ ]=HxMus/Kƞ~&1㓙y;olbdL2%[?hw60]QJYk7W3O?3O9nҔKH bCӃ3ƟqڴZ$/%j$s4]TCio :>)h9EqpguZFg' f`Hlf;,mDđ^|tߢ&(5A{@4>Mٲ8;،aNHd}Ci)@p+ImU.oB=!,5ﯫ_½anRdƿ/r jCl7Yl~Dؑ7uY<}BQnwQF`=镱Y3giM$ME&?"՟PBb3Sa}}9٭F'2kGmt7:ETc1rBK:j弱yJ*[IFS!e˜O7,;;K>MV/pԬ FNX4k0[p~ 8h54h@8ҮunǟyePx5bs)A':8F}EK_QTB}Z,}}r~)6c'#&9QM\[HÊX X- UoZ]YXp1CN=ap#21Tt}LIW;JwksӺ6= 7dt~ ,p?U zmΙE^(f!ʄ eeP]m. UcF)z:Ԩ0 y.3w9)!5SNGEE5gt~~~*PUUŝ'SI|bL"%4&[CHBT"o۶ 8|IX @U=C ,Ρ3"nٲӳIə&@Mx/ANjaUPB2P@J0u Aspg#傡JuQ$57udYoVRY;gs,Vi0uҀk/I饿 .[6.NO}িFcv2iXl%?= V _5@0ɐ~7GBO(L,gnL$brzBIfegO?  /<ӦM;Ax L7r S\6G仫UE6)M2 Em@6ie"$Lq_p]Z¹Aϑȩ>@đ0?Zys>Gq;Qh9"L#=݋jX*,B'Z%u6u:7h1el% c.ڏ\+; dԒ NXO*Pzj}HH+z+99ۗ^%@m=tc3<>0!7Pdxy;yyENL >Jn?CB0p5kQk*[B~P56SiR*KXN]oԊ hf̭\j~|B"3-@RY)|=wU.Il+.fA[vK›w;sW}o#=4SqPڷDΌ/V4**;PI41>|0q@*Z}D|,s'YO:[PY;3ELb%uМW?wwE)e]2&ԂO6^ug &6" TM$VU_62<>ȭw@k%RB)`nvB/0(_*]iH CkGL|:0L=>wA7C`> q=S::?Ez& zU^ޮI;BVqӘ*( w/ <`[ȅxs0 xdڌm_s?; 9D?$2"J=ƃX5%bg u]ҪGg&9 œJ߈1im&8G>{A_DLhiECSu|wAºWx-B FöH۬-l<#lxA&{FqBP(UM*<& Y jk h$fDKmڴ@PZa8I( 6gy^q7]ܱSdΫWI)!wS3k4Q 9́eY%2,ql)eeCênYWR5qˎϱ:&S+4xv8) 'e8ڥo(дֵ-Œ6tG+ITTRH_Bc~gqe+Bj]YI#mS{I ;"}pIcL2d'SFh3]F Z1b77ͮe *!Y11,ΒS|v{\_M뗼n2ǥAĸ_ pW^f駟yθrJk],nݺA%PzD8.++80mnݚ֞q,$'AgdXm4tP: :h~xzF;~xtȥy/1hi՞ u)*:Rݻ9=%xmYVZr33k[yOlϼE?-߮Yg_i%Y?8+g 6,}+~-kljkwW[ -(zGmMG AyZI P+d r7 86m>[Ã?RAJ·ՉEi˜rیdi|tW1CAʋl̶:akQmW F/.ҹSioMͮ?ޛ6sƜwZ Og8DR5peHnDQOTRNz] *DOUm˭J-/aL1Էu3?~/oNTgdw2L {j/rS_bb'.irC衿qز#UI(E㳯/tA8ZD,|ѐj ;Sus$#aK$ݿ5Q(BN5NAGyB h’I2-޼cQ@KdW<;!QV=Q D'A)]\rSSTcmѢU5\Mj$Jk#$|,y,Z*0W[B!UY8JSNlָ/mgޗ)&T1a.pIn`b8+.vbƨ;~x E+3~BXmYZ=w_ޫP^n.i?Ag6y!V%y?A G$. aoMC;as2)Pjw)BM~;&U~#c#,'L =["eJ];Jw |aR6YUj hs+p}e1#QKKaf?X(1QU&2L-z/o:FzИ6Lu!#p$;c3Y:z,4w8ЏWT]ؑKߨ eպ۷8; ȒNazܾ gk/'ǙTʁO#;|?1h6]YQ[6,[lόS k,c$V&3jix'fa,`N YF- " %N83/&"9a;\FlB׳هcXhɖ᭡z`1K79i88~GE(l0 /~uz`lh3}@@E=f?]w5.:0"%b?>h,[ޤgAѻx1B|q+HP_JKKn VeeeɸPgYb qIG^ްU_*(Dn WU+L>J2m.^`kl{i0,ePb^FD-&q7(?VZg!E OKP%r}2'o-СAfͺ x[CS(M.AbC#{nOqusNUCUjRC OD:z|h(WqV8O3RK;x,}~Gsͩ)Nq/uGvTd6gkK4C鱭ֵ ܼjLbôh´$k 4^t鉥iν8˳jߚWW'rE^9nj_>lu*׸YOo+/mxo;,ubƂnҌia y?8wۛný&L,=t\-l,ӧϖ-[2576AV9s栛F}LLk+20r6m;vnkN(Cf|LgGJJ 1rs7\dCTh(҃$ yVbTGGjeUd,#P.޴`I~0]bt ;u ZAM WgJ\& MS4rdŇ_֮҄+=C3/|xi`8uR;)PHeE̬#O9_&@#r@& :Ķ=WYiqc-]BrX)ְ$b@fW//PlgedrǵR$8)Y00/ .Y-eBk!>ivZh,hl[]NS>Y|ZiaN[sj[\Ŷ3)Iu JId\[^V6cy'i}25*3=_7x~sEXi = p"P\a(/g40TD<:4}}˶=~׏j>m{D*`gG^e:#~/El{?|SCZ"OdEc&Xd6jj5e^G*BXݘ4X4 i#Y8t^1 764uHLMIx)6, ˉ#DwA8m5 m^cwsk-q@z.zKM w"Ѡ$`L1UfJֳ.]Qcrr$&bG9 =8qNi厖mic̉t$Z~¼!bz?_`|^7ӻ†Hh~hC B:s3nqř)DH$܋?So>[@@UsOGmU<s/Nx8+}^s>zJKs+&VN6|{O>sqffF3튡ˋھhӎHe k޺`ꟍG;N0VlgӞsG`H%l})N8$#8˱4CN]G0fx^9dWu8^ũFb9ʦio텢藭\}o~2NYvSx"잪{x䢟| :C Ԣ X".o umF[RzLXi2akqV.CVo'P4ja9+oT5AycKn+툂qF]kVSnӊD`lj^u-SҼlXӝel0 )M(NÊr%E]KխQcJI}D:Eb27?KOM޺nVNZP*knS)z^ML!11yoԾ|oɇ~!Ý%Q$gЎɝMMM;vfbmmYY :O N8] N-[6ljh8E2;JJJR kG?PrFΝ{Gx@]SSbx~'@/W.bm'|2@v nиk:묣>Z'>餓HU5Fxo9CE_~_.X4!hII}݊c9qE֏(!˓O>~Wr`(~gyKjn5|xk:w%^Ìgyc5ʭӆmg.^?>ht36z°e+ qMP}E^a.tƎ }ugv<ќIZIz2& ^d&~(7`Th_7̩ /@w zGXk꼿kp6h3׶2 fZgW{RZZ$WU6>cON0;Ӗ.tJV$gтmKsyUѩg_fY8. .sQb47ԸwÎs}(OKUl5\˨Rxl#' uzt|/9c"mܴ7IV%z> {!=N[D`nx3R9 =Cۏ/V؏<~o(OZ䈽6`@ɀNO<ϻfsӪzQ)'WEv-wX9]fF^َQWm 껲ti$C,loj[ 9i6jf6K0Į3g_>)tRHöJ&u@ TtI{I mowAvمD$sQ~kBtV[|cNŰy'8S kf-y#? 0UaOM6{P@x:S& fhrqCq={L X{G-NC۽7M:li-=3|+1LND#ƫׇ6]+խf6"lB7|o8]B._OE [6KÊ;g$0qT=nc{L $ (ƖQZA#y' `7N2~$V&{0^d5BTKz\I;&ߍ0Wy  2Jf?"RWC-B#Cs ՖnhpELhݩp3TKQm}߬>wlnTf\SSӅ';~W>kp֨=6 RZ̶E66,ݱAg詫l=(wd~$IՒT]qB:$Swρ qdiZvmQ9ɥMʬ~}鞥Æh=$2#$D}| L|/=MF+xMN'[|7ʱ(M~fjWSugŨ5$Z(owm0`k֜AS*ol¤Gf*!2FքH Cj3irGyk)++xQ"_|Ř?嗣GO4Lmvv܆xFbly7owy+Ģ 1zaJ\u鼐^?y `z!_H"~ hqٌ9p {W(kZ:(,+[f4u8X}^ϋ64so=~5&{5e41:/mQ2RPr{]F%dЖ"bxzj$~WPVq& mOE 2+P?umނ46FꑗBnxU'//Q( kq:[IM]ⓥDrU+䤤}IHu_Qjw'UƵчdSSpH2В0׭r//ˊQʸ>`ot'$Jx!ht2G?i.~of4}Zvk#6 (fr'adua*`G:\}B} ߳u&܇ؒYģ•;^=`C qKav=zq4.pK_+f-lEߗ(QwE~RGlѬGrovP8\Vasa;$qԡii)^O^o@6qC;ȫO~ę}cYy^l9 JgѺ $ L5unm"Yu/NGj `!悯`VԶF!x8}lynN^q ie6| OƄ=ɒ)K*D' lR@/*o5BT4S[3<)*iƕD+L5@L'{1wx"^~+5P{'m5TjIGjSUsy Nә3D\-~?=י&ןMPآ;>lt>(zpBKHdu)*aDF=ZSSkX !Vm[I2}.N/(:u*Ki')(A8ly9}pl7RꖚVȉXy9R&O47V;gk_^;Z]&Gs],V Z[KyV\E5v,_/͡h <`B (RjwMl8ҝlH8*qG&霔zpQ?vw#~)3Sޡ}?@߾}W< | i=޳z+POڢKw;lxZ4 }ºMnǘ3S k[65핣',\9{G:eX=ElrAAjў>f4)D+N{-dUSwP^VټٽjsG}K_w2R[|k94o>ɬ1._CY)Z[k׿ڗYr3iZ&fTtr@?ٙ\el2@* lR74@A GZIp@ԘTa$i VUUэ{0r+C6AېG-3<|؝EvΖG.4j_2RЛeIy^U ߓP@C7VYgɹnnþK.A3/,g̘ҭ[2J@@qbن ԋO~hCiIS!@GFbe= ?35u;QĨ Ԡ G4rɦTuODD\\,E>vxg]ߎ͡7pM~e) D~r8FX4E9O3빺8.'bIy%)ݖ^V)A MRh-ҧ&F~u_s+p4l3 x6*w=9nH1 EBFsIӑ2`:HW}y}(&ե oH굛#b, Pk@{ e$9yxGvweֽlGnZn R+s ҙ=sC<' iX,g(=Z D:,KdJK͆'_7볇|;}\V9nFZBzz>f#3l`X = Ǡ;p I4,~zO#?$o^Yyi 8E7PLpbD7Rwz+i@⭏6^yܜNԚ-,`ʹu<}״iSG^7.Tf#8xPxmb:%$<$ԟO6o?iK{У].nN7t]Q -BG]wj%U*:;*_W$|~/uW p [Ԟ" u+YXP L,,,0C-ݴ۷Vc#xC s1C秭1!y(%%YƴѼv2}.HqČr %$YbQ:b)eR+s؊z/8tɄ-j>gΑrnTf[\Նc)!QC)gp{5p!sP,\~~^y5OY)*YYzWe|p[{fGŬ[.qtHM1lXrgijyk[; WGA ׭߰u6ed 40=TN̙3f_춲㎙rcs20ÄjQQ`3YH̀ rJ äAB\҄2oiڸi"!W{2SM7㽏3rׯ\nu޽]r/^S9raeG6'PST\̐6t7Fǂn`x L>kh_bvySϦA~7 ) -%K\n6Xg.lYҢ-j1rsU1cgoqms⪙Cʆ ϖ~pxĜu3?Zc~b)r5V6mo\?q,6˪)q/Pe[6{wBaь~yCGMO)ڳнЙP n[rsΖMm%.kM`8:wUK7b4ɍ52(ghhi]f3{e:36Xմlvan`JK5γ+cĒek c^b}SL6Z L9`}0nֶYECO?0~CoujjZ~:Tb믏ex#hbsȬkMɼ8뮻CO ׿o29'p1x,wbA 24hÆ $1f555}A ~)gLMNޫ oZI5 dpD4Fogy[f~AKJ=X=1x 1ԵjGmݙEHĢZ.~Eyeҵ[o<_L}F7j[WnrcY@\ݜ[^pRgM-۟x90)sFQHMVo uUQm@jy=TuUA,z/Da2;WUXEK8#CG&NNaZ*Rh pl/k7eN‘KqyyY)ذ /ddyz~Nm{KP#םpvZJ.N&g7TqDXz"DOtݙ՜}ʪgm}UY%Ё+y#}J 3`Lmg,>[y@Y=sŷIg?$_13NƉ&ӳY#ƾav4tR\ͩyo'X0=QZR٧WJYߌ~%Y%9iq@1u%3*H女V { #'$Orv\y73hbhZ* Ը*<3zyߩ4t ADhH,<\d.Yw~/ ZC!xU-ZIJlRJnӎH{egYzHRͩbuBdDž#M,/c:5+?'"FiHHS,nJLg\B[O'VH:['ۭ tk覾.ae2ӱ|.ȥhCQz_.m/B+$uS 1mP+ʈFD$X۸rRaM[ɦc ڵzv✄Z[iOvDw^(ǵ~'.T|#L˚ʹ%bY[w8ZKx "!zw5mD+ʌQ'"lQ|8BUVZ*ծݶm cGHpx@T?RXYvQI1g%LOwݞ6ΐXgc[ٯv6uU;:F"} 2lҮMI\H%4]kSid_vj<GeC@pVl__Ir2 H=&1(ԟ<=X|9 U=DM$>Bױ*rԿk< Ϟ ~|g-_̐]r-)'O?,H"0PHa] a+kBH\!x[47^xk`T:?!UVV+[lA 2@ͨx(_y5s9{a< <餓!̲e˨%!25/e9hSL`Xc#\(URJO m`0Nxl޺83f̝g۵iX#ʪ2ZMNl.,hAbFKv0PoF' p`4tFd7k}2z4$O7Ol=1^K 3&g  EzOF緟6Cr(X*r -97׷-G}T6-DeeA7vtx7XR -w +F!=W&/a)5P5>IH8h0裢|H0gddeWTpw+!Ōu ͟t=;+::V_^7(:;HDS*% Jmۺ|U/dQQxLc}D2qڢ}Ca"7&>V>ӈ"}RPU0:JJOȈb߽"!*j-_X<5zt[m!ZiȎ B!< i+*"k'("*m3R&{/? 9@Ծa-[t?P@a3ݯp0%z*BqGU~N GVf57e⣦N]yT?cLYCAoI/^ұ#'wW.[62(V8J9#S ʊ6W5!zEo]{[Kl.Pľ"EdT|%o.LSl5FyU=W!z.K%A4 2EY5-mj{+E9U R~y X_l\Do#fLHBv6)o{~h$m 3|\:Z)2SYӂO n*T7F@4))TȖ}6ùcrGQ!?0D.3=;V.+}znkC!\?E.hJΡw{%m^~dZ7|/OQNXN )Z_%^-lV9#l,AI~/_ "a7O!,YUs#IzJ{ZnBR цhh@pƍxi\H=FIa֏6H^{.c)eqݠ + ':EPF嵮%HS h/}'̗&2T+(%x5|a'm2 ՟xEp u 1}*ow\  f1]#bD8,L;{WM'f{YjL ׭d6GpG9tr:ܳu+qLi)fSc1cr'M1uZqvNĸxSjzh(>.Hmm={̼\(4ULVL8# aHhtU #e(sD 602P_v?+=P٥JW~lJ}z]oZn /Ⲡ͈5\wj㵍흙iqD% =\mj3G{LYU&*;-}']@vLsL.t$p)adMS9,ɘfLt`|c"Lo.Hl o*1`099\wO#"'/>{&$!)墓zW89s~'y[]m}Vv褅rztbz6GSkG޲Fo?ڵsg5*=-5!1eob|<|s/Rh#c™!R)R@+>ldjTtbĆf.e)@EG5ubN{6b=cDEv _S~I%o;BÈMYGXLT9hClzg{m 5~&ף RS[P|, U+طť|{ܣ&̝!.b13F] u^Ux "w5,E!կsk#{o?{7ekٶlb{eBH07_}U/ɂV>1tI/h,h,c 5EsF&2/II2+L %S A`~1] ĢEA>ʤX T4HL?ѷr >v $OJ7{*D>^l~cWMgWfʸ[m믙~ӭ 6QcLc-*lꍦb́\=eJ?Dθ+:zڈc4FE-Gzu+zuJL`3޺u+I{U)SxŔrp ͅmgcÆ (c[+Dí\awD0rQGa(c|<펽oXˬ)'e :]d )cD1򇊁')sիI` 5k!WP5~ɑX\IWN7dïlA@Kůss# XbdocuC; rGŃ]I6XCemZϦ'cή+ivc@[j&ޠӡ $A -I = Z8a0,}&NO6v9;[:@Xd1a<\#@4 [LK7XrQp!T:\f qQ|wRB+$:䍲j`5!:X3eŇk_'I Q$`?&2aZݣk}t A #T_鐕4u0fͺ;nIO%*W}Ĩ8wϯi:H+|œWqWK0.D}}m7QQ*aىn9W޹pR'luq͢5*0oCel#衟/~|e:q*ꍞuqIh3>J,Ǫ^SB䋃 4391sġf340( WX*'1SC \!DN,*v.*!WCWk?Yב8$> wȴ/}uk!X NNJ ̬XhvĜ+:6773166eRǠ]f9#EGY̬I'_YQʅ\G(Xn殻~dx7Rӳ_~?o$>>a۸qK{{{##jrJ2y,ڲuYeL,NIb~৯eś>T?`짫ԥ{ns.8_ Q3sӑhn3D B)gm:5hA`7خ8 K >+rKnsCkBjbL|ޭ2RŔE'ʧ;yj [n4o; 7y|~HqHN)7K8ak+Л>י2{ږem:); U^}?f<^pΫYu\椲;8h5qT3NfZ1{;YյW(eiU,.N 8KulMș5`O 츼SF]PQٲaAfoO~r0(.=ixbjvKk)'.867*ߗXoqF4 rJ3㣍~~:*R=KK1r֜|ؗÂԸ뫟W5;'M+T]~#&@+6g;JQ0`SRիћ ӵ9B?'z)VXk]!ՠKoUcν57#P#KT;5od/\uQ'-Tt} xMԺy3V|1FR{:wr!I U |7/h HxK'|R(+C 6mڄ99Ҍ7/770uuu\XĿ1zp}(33@0`B@y@1N+,Fx`T޽O>|& ;I@*rwQ Ͽܴ䍼/Μ2mfBkG/yo5eTQW{lc'M/nר Oab>f*Uvb<ꠙ9ek^ymg㣏ʻc߹gygcOi,ײ}^ֵR9YucZC朙[HMhn@O>V?>cI\RRaFbcCF E<미g}C̏?8X6+4 G_J"X*'J~~>!%'tgyP`goloo?Caz7^qRZ>B1(_̖.5"ɓcmQdjЖȨӍp9-mLzTwW1Arc& ,{kؤ72J3* : [Rk/< :ѯr' Q r?:!a:"@3h):瘊uB&-1RP\T(08R:+㘣`9<*ʤ0._nw(P/u09Zb^uJb&&1C>+( ʟ#?0S &|wpAl&IBZ]W3*;)IoB4"ˇ'VzĀ=A Q2'&|Zy8톯Y^Z2ba+dWaU˺U?ڑr-ɧ!ÛDˏN5mNri %S~J;1G8K܄'z:~o)gOoƆCG$D1kAgյx`%ΛB~B  #3 ?zvB|w>V%T,Px|o[WpyY> _IyeyIwAH :{zlh|R^^W9PQIUS]w睗x%ZjQcsTVVBu0nן/{m[*tz`zwu )~;dYڄHu ĎWU5wOR!!P1͝A2@x DX1?;t&rvv\m`Elf #+GM@::"pGAS1" &'3i=E)ޢB #B+j3b+ܲ0g$2I=9?*)L_G~`H+RJfW^\0sPak )67|f:g (99?,vشi/RR`(y޽XNN*Gןy-Z4wێR TZgҴqgԴ?M^5*?oגcɎ}ycbnIpgSPƆ&VUG[uԭ&cmԸhxŪo;R+=%7%̖yV4 (7.9Y|Ɋ6%% 6<$?S$Q4%S~ꂣw:>w/DR}<IMaA%ho@M=~)GKIHP%(:MĊ+02vT6!+,㋒s2*Nt-ݝV;yLQl_߾0 ^FTkʶM:,r..}~NLT霻[9DSyT!\u+*52kLҔ5핅i">dk5L(nմw}w6=6j r?Rʆ5oNqLJ ĐTE$ 5ҤÀȺm-NO~FHfѽĩn5$;*ݜ$Y8!}Ŷ!h $Mu:udt! Kܱe)|ն==Wݹ}GW;qxsuENSf_2D&x?B6mJJ)q5{Қ"ThӉi7:PH}+(=ӧr?G(r všTB' b/ʤ Ki)0|Zx!}E'A+Cn(RZpЧD%Z}ꩧ@/o&tc7"i)I®2[ҦhMtlTQ?xwʹ]RMZtfD_TcMXTfwߵ3QsM\Ά78NZX/͟oKTp*šu/oM.-A4 FZ?C̡@^pBm;]s5_Cd7!If4̉J/$flI|ꫯ,%Jj6gK #]FҠ9$KXK'G 5pZuu5S˓!aS@?|egE_ WVݹIX^:,B*R9L]2qBc7}D4a[6Q/:mmXYmwE{E/%*"Z9G%7W7tqjX∈"4"89!h'm^} r@)ZX+x7I7Y\}hmZW$<0ʃO%U`dwfTT} JS!(Sh5,{n''^WHC NcXn*HKJrJ$f,VFDg9--5EV9Ys)3l=ţ~ fգOܗP[i  97c0]';b@5)<:Ѻ z}Fhc4zr~4W*}Z$) ϊ! kC 20sɲ#D W0Fh-'p *&Ld%$,/, 8.]SK9g.^|"fk׮gb|GXZx G u#[|AQƚ%>: =lsG|L̒W.Ҷ}Ą믻p^3h9NnO`mw/:͍FA>Gglj6:\/jm}ZdDCc"򯼲EO.-6ZW–ktdF&Օ>@a0wi"\͍#bcдۯw"s9 xyYF1AC%v1`@DzVJC8p6[v޲Q# Ī V}ݟKx."&ʌb`~dfz߳t}{r).V<.2Ҷt{cgi0h9hbUFH6WKQ .3%NMm뾎m;ClѼ|9 qtU"4q > yVVkn[KOaв*{o}[ͻlkXfB M`V!*9`KթФ' U(}DPhUF9:maPr,3Fih^iO)QۿO/Z6c)"e ت6hԓs=#<"hsHG3eEÛl|5ܺvDƇ|$*mJJݚܧ7M$.2z}Vߪܸm݌3Ͽy7A/GXbgL ;\zrYx< w5_/L9vAT8 (sqfѼcD/jUuk|ucxo-[ 2B+D)* vh>c?i C,Imn!. lk#+Ќi@yK̚ 6HpO/]NBx`hQ1c XfBCnAf̘̏#$eDٳ̜9s`{onݤS@/QF8GUBA(#LrRm۶qXv D|^y^X.@[`V͍fٓ.a^a)zAn<17ٻmh.,G.`a}aEoڠAsӠ(i@s!@l ~rVSFOTT!61*R'W'$Fl>r$֘:45(0Z&Pn98p> vkX k fסנ:6RuOvpU6sͶ*E0i(Z /}sȡW`)tcEef=窗&& 0G{XOHqǝ pހ\IAzmZ쌤_ܘt% _TlolGxN7k|$RA Z'H.7P{ ^@ MGHC= B5~2d(M1% Wm`߅TRfG@hLg13ҺЇ*pZ 3\Ƒ4 /ڗ(!kF'V؆5YiXD/)56{ϔc|2Ϊ+K233XO4v|E3,*4wޜ H`cZ4ĀJ!4f.zWJwn xQk]A 0L``2GxׯwO1~%ZmVՊ5X3,]Yr]KS@W׮Xꌟ0q1=sqmQۭOfhݡ GZZ(ڣ h0AeVy* !VoNGy9LOcxb}sHӠ ls9ӧOMI%w}gu2.+  4 9w\F% rf U>Q`rEe|/ #_%;=k6*xTDy\_3vEop2V(/uH|ZW8jlɩ Ma]/|XdeN{|66UͽY!+~Y|)ɸQi#rwW7n^}"4`= Ͼ(O EE}4b*&wt~̤r3bH˻ak#ϯitB,R#&.[yenC+Ers:0i\up[#%0j~~1I1\й ,)ɗ7l,fbI&>3>d+|( =;"' VÖ7! #W6  XG}¶?dHheֈ&)C5=pޱgr)>j/0o8)b-[0TPM}mꠡwv^vWpL.dڡIBltG'Q͉š`MoUX}FD4fS뗯orTv]l@C 2~$Q&(b e%!VE̮UAH4$QCOw:yd^A/KΕ!,$Er2IⱮ?Z}i(y_\7>i4jŎ#L.Ad^_Pw:;^~4#C|W>nN:a]&LݹiBdj=. 9 kA*1='r:8?Z8Nrr ̩t i)r; UuZ^ns > oƿ 8$R`FI!c),-P ǟ P2d!c=m@Z[,n;UEj)lᾹ~ƚVյt^'6 zúVMESOrT;;[+Blz @ =^e}#򚛻LX@JVa2&Tl! vy&#WϪ.Bw%g\͸_lL_}llLzjQtէssׯ]b=3Ȝ~xkj5yӝ-\.Q%,ML< Ɲh{eE1LXɫ;h;=iʎ9P b\פH=?[%tB>]Fn33?slZttv쭮ݒ^WzϮp_|=lm_|y#ⶫXnu)RT\`66;#&"Cx W]qiTdGÓ/O v8c~yk+K)¢ nZ|)r=Sk7׽fWeQcFxtzLeP%$Qv˶(cN+ă@!eB xkz[e^ll xK7:I)/DωeA(~';Ctg:Xͺ7tb;%&Lݷ:fCpVqeaE:y:{J@R m"1ɀS!2 I˘,r玊yc ;olN*GesR#**{[VskgGU7Hg&ao0'ba?Yuh~1P'-.^x2-dUO1Q2ИDG]`0hcq#:fjZ6~Yœ^*B†ѩs8-$2*!(!C+=WPdU edddJN .C ̆Pd01ڀ:'ȱW0!`Ɛ' (Ss07"26PqVЖɑ_ނ _zvdgw]LbJ2%cxU\S8uĕ Mb|Zj]F B4g\|u[F(g^}]l'pZY9)~ߓvlދhh'Yʌ9e*̐ BJ"&dRJ^o9N";ZGr+2*F^BBʸp’%KmeQaL'18)ޛ;w.Eޙ& T1#(DMr}& ^wy'!_x*"?zX_ҹLvieZғő^O;ƍXo=eQm܀.Վw^;{nr,0t&Q;unўų:hZH'S)4\PU>Bs\,DQeUc9]T7yTԱG7cJxը͉g䣌PjjAIIN8'F%`Ԫ=+K#݄5%cƦ&No/ߵeO$nĖnUkM*vQ):0n~I*g!h 1 };TZH+"}؁WXJ2 >)IgXcp\`]lE'vں 9d0wrX1^vy± bg_b{i*CDƮ85Deel"vM)?+cDp$ Ux[KK]Ye6=OP=v6iy)B)dGU=R[]f_G-s,ESl Շ8Snt5bxyqYd ZbYQD洴>@vSڎo΁Yg R&NLC{YR >!H5]jWY{^R]IB81AxdY4 \u38<[?hlG@Or*M;m{n.ɨ$}$B ]2c" hة׋eBN5Oy¤8m5kaJv:|LH0X^ebYVP`.x^p,j |?{CG->~=K8}mNfz)ojuB+J_Y+<!ht '!@I!GDSh_vԃo(wD2${t{*1v.j8TՂO[;jo>#13릨`#@VKOO/m*=țh$&dmȸ5Yس< brA^Yc].-M̝lD]Qy`^jcyX?8:jjxndi9MEgdEŲ/&, A&sOups`^[/6-|tyEWFK۞ێ5-[wp)Mmn!`1W(Z]l((-,Hjw-BEvG }yi4 ([KŌDtyb' F\hokoi.V26gBV?Y~mO3^ՏX/⢩.m;wv̬D+Z>jO֖EZ~I!be_y `!A# G"_lBbM#Ӏ;C9*bҪ j㲵=>=9nҍ5/yWFy䈤EM*_P8 I֤(*3 D$ X#GďҼjWumW54u:usfA(eQJ#("OќPFPArJ,nzr@^BXPE/.kl7V8gO0B4cF { %ޚ_}S>Fϡre.+$ ?_i5E3-b>/{uNqlekkkewc u/tX΁H&D*Pkp ycӬ LH'AdP#:*J bJUWz_r·n{F #RT'ؓKj1Oww?OOOoUָųΞS1%+<]9r35GD-fI(\Igp^655q`( _}^fcETD9U@g`; cۗ{ވ%#DHg@X "@^1enu4b|Q;%#BDYW4Ox/tP{uJ`R5fΚJ@c;) VuiJܲ>Se{$|b&BN7X7_O[Y͎.}rLY䩯}Ѷ^[wŹ3؏y ѪQ/_/*(2քOcw(1Z? 11qٓAdjt+6ۋ5}|nqA] dJH3oV'LLd:~ITN}|iGmȚ5m! HWrhp$ӕ YS_*y$J"Ը^TkEςf @d@+UWh73w "H$,:Q`p;pB%vz{[^{ckږ&ZN>y\>T#G]% w{iܖ{53fT!]n.T3²L |Kjs]um7u}n捷DX̌KU[k@BVQ%LOMJDaA^OdY& D`QX`*[%(W6=Fc}VgQDPz?ܱc_4J\W4$&!ϻZϿݚ6N YEGXD׮Xx" j-}bphH]c0**CKFLʲfi"^[\.T< JG.~x.C3줫f?vR }]J D0 EEAA3N_$+# RU{kFQל ao}Z{ѣ,Ex#W%%഑K—jhmqLbudKgrcm02U[ɔپMxAF i4^BZfU0!-NE,mP!͆fZh 4:N݉^=Bѳ1vupks[gUGĤ DT50B2.ŤGT2u̜ހ v3s7tۅ'θ[>z(aCx?#+R[4G_8Eoc 3'EQHl1}Z&Wwa}ѹ 3F溜NT223s 󋧎sZ͖]6{/ϛqy~X)=9΍a)kmklR ɳIJM?MAup۶RhG@׿B̝MFݴQ1ljѿ:/ćBG0Иwz2y\iƍ~eKj[;Q#`ڈ-M^\y΋-P!H-UA\Q%YqۤYVsֆi)/gu$bXQ *sP7 3Dy)IamJtj+MZٳ'UߐEJ$ŭHQ&Eir6O<" X*ըLŚgz76={\^Lͻ~o' 3" 33kL*m;>JjSAfh60?DZqrLFîOo?Ӓ~]:^|)wM[uح'wOѲSf.x˾uν O>/wO}铦L~鵏w^O֍gqas{]N%% k_RۢS(@a)ێ;$ 51bĈyayE]~zr|f.d!#ʼpK `䅝@kɼ`ln&"Q-ZDF \rJ> xfΜ8qȔQF_-4yK ZA(_G[ZOO,f6_'v"'N*:"M6K/l/dE9׌MaO>97IQ9v@RckdaMߴPH4d5z[J.)’nʆN9/ÓxtF2L2Veet`[_=Kdt桢z { k[faIRw713D1\}.=pʞe&eA=]y Fo8X"߾#P T\ |٧'Je^LU `5EFa?^MTFN:3p9U=ݮXq_"r-^+nL(aHH3v 2lH8 ǡ ±[uQB!wEJpPx&aYBd]:P)+mgÁ5)\ˢ =K&.*""ƹ)24Et%M5f0ԃ@5jUڠ^-(1Op,bcM4QFUhvF/D!vW^nbK|ll0|jePlq7^wy~AIDz~SImN:iX׾eW9S{ZWFbVRى^qx^v;wF_z3Y7vOh2F_sz1IYi9#rǍƺ"2j7ŧ'2xv3R2pzXUVo_y}fMຫr Gd Nzm%C}~V%!wH 2*z.L)U*ZϴY^;ƺʸs sFƛ;56w )YccHI8ЪCR S0"~LS}Uy玦mM:w)wB0E/E5#,VRw:М+e?r)(>=8+Ki5KžzKoЫ&2 (J :*mveLaVM(::ݺassY˱cJ= ]. ٣0yLml-LU:cɈɈ6滲3VP.j< <~{iW{-Wg%[cb րUc&E-P[&%yXL5?jm=J*ߊ v~E)K 4I$lﯷ;wv߾mɆP&Νr̙33gΜq=!aLetVojDBoN `_|PMyƳn?%55%HCќbQTNU_0+4=)--=.I=%="`2vWFlQᄤ{L5[32Z[|>mil;h:omn_ \sO-=B%3[pi2R#+w8ܼ_5ŜnK1r| clytɒ*?tdg堮J+앹t"j?74Іz_U}]̩S+MˏР=4˞zaS 7?qϰ+/au5z{{(l,J՛X^zmM[kWpN;9R’2Ӵ[{Ŷ.B߻ᄉrmk˶>үϾl>W߮fcQHgyڼU} `ao$ݧ9c,~f lhcqA7T `01OB<݃v2&0R*/}Qk_+;UUU3fLB^%#m^}'/Yxb@BHL"Sya'Vzӊ6B79t?a91/DZG2́WՑV\YZZ[nA?_5ʒşΘiZٺ,Ei'}FaaeY uF;1%bqFwVv̛gc^UU,PWdx;-(k;?|J@0DyKJXvC^ f"7 QQ"ܰ-vi(#&I~iH 3,DCH57ZQQ EC!I|"g%C#Д|xm7; n݄jCsB Ԩ=1/NO`Ƀ5jBW\qm[?gg}vj}  Fowt\w\tgJ3tLӯTL6 ;팙Sz7!wV i&7nݳ}G ~U&2ə]p&b}&XN]-|6Lȷ/sR#KE{sB5TJe$t@Nv)V1cRFj޺&ab~Bf2̜`^d:]F3e̬E[VZFJx Laٟ-jP fkZk6Ě3oD"?{dˊ7ܔyӷ.3O#\^,3):Ք*r6wԓ+N*KlNڋfd#'1Ər${6W_n4mJDl\qLVE=(nFGoՏD14KKuŶ]j Nţɶ} = UScswg`KD? )2bBkDbQ I>;:y\Hz(TI\N5[zn bYO9M> E铊R0'6V":}^ 5rDiK?vsQ0u4Tp.pMI&*QedQ l#n'jD.66oosWw]ڷmg]/b[d(g ZXG>8 ^]7{ؼwhOU)EQvW.] "/in7XIs64,4|CY].;\O&wqq2BO?"':ST؆*̺#8d)0׃4`` fafX+"="bߙ;}ULKϘpEV硐R9.9&X۱UJ D Gt-]pp=wc> %s]11ư. ƙe%Ejǔ67()̎srSB g+#ltf},dM .5^{K_Zۋ@)<{䳫Av@a{/ٲqȢ=[jx T.NmαL?VM)7g`~q'eK֎hMUUe+j}czp$0ף9ڮ AHq#<ߏ4Gor!+g?XA: + u5-,O,+E釔y8W&|JנڑT ũcojZS7iԙ'LA̗3W:w'hLC.kشcViKXa4Ja{:ֺ yook˛[<`JnG8ҫOi<߱3ֺd)p0 +?*.&XӝZVn d(hgVg7l .Bʝ5A{U=pW19#vzo<_4 yG{G~qӖkc31?JFs SpWo˂2iSq#4{v1[GznV*iedY99bPʛ"CdVd.hh`^JVJM$A|͈A#V3cfڦtj%H&>k+CdΨ*7!qlWn%V;wwA*&F%)+(c4U4qa!5?sÚVN]9Y)hvX~ x6UkMMooW-b65vdp_:b *)hKɞh/]8o!;A@e#0so5\Ic Ḧ́Bu >.\q"Zu$ani6 6HF<1A%mP4tݝD*|q>.pt&b\!R_HF3cڨ@i Œ@Qw,fۼne˯zqmu$b!E$GW5J{\3=9]H(@\h1wye%,ivd`"4qǍC4`0w[Q;2nu}Њ؀e+3(uЛD:zz2s &,RNH߰nhPn>sjڮ~O:`[[Gs[jy4z%DLt a#86}uݶ65[t9\<,S^I)NAjɘ [;mk]K%αҦPtTN؉ٳs;J+nv ciwvX)Ys6Q_]77aDޝ ö O~*U8&znCmC;©cSpj~/HԜ"\6} W8,^Ȗ]].4/7*.nFeƶ,ohEVӑ[ԸDŶMUkh5ؤtse%I8ocwtvtu9򘫶n+ZαYsskYZ wɰ4cjiWc'Y᫬:[\X;0_[l6GOmY7W1ѦߚR)y9JxhH]ٛ'd#6%ڦȶ(]} Ah, b_Br<%OuuuaȲ|Wi6WTdF2Pidpڵ&pSsFWWWc eJIGeDTC[OFWKd_PZZK͘"ISpWW_tݏ&}嫛W}ue.Ó3 GqH첾aa]S>\}W0-3Qs5 W[`~(<Zm_|!\}"<*"!OP4s. o~U>{C}<{AAPD'RuL:k}kjnVon8n^9@%Ɗfn BojZ03#%:2LXNIy hS%t0|߭g|ӏ>+޾~$ؤњKuF4Qwsq_>5яBڰJmgS/qض OӇ~tIcʋIyU iToize ;MHo\rʢy/;-z@H#eb`OF_]k)Nz( Ymm f;H@}6T@o?7 TCRBzCAB"YdK$Źlq$(kHR Bj5yv7,Xnu:*ni朝wij=KT͠&{gѸ܆%ߒs̱YL莟_yɨ21|1dȑ,OIN9tͰ(MM{ Eq{ E|h Rj$_cآ[})ŷ]ݍ =i͍dC44/B)/!0X珟5!_Ӷ UyQ=)yկL$ؼhm:{ S_|u׋:ScSzKBՈ@ǹ,) zk?Hd@*[%..HN?g6 [Rd41^h1wGϸ?޶p@OQ(v*d?Ed}_/AMt>09 6i{.WَI06e]Olܺ5/7kOC3 +/+nl/]ݨwc lA#>s].~1LV3U   栯a̓HB49C 3“t hO9,ʋzmfgd3ۿDT=S!\QN 9a$ΓY-=F^e&3սf[+pvV)ڤ8[LBE c@ ]iNu, eRrccoJ4BZEW!}CZK$0Qla]OPٳ-E]6ѹvPZwg̪Ug2rQI#Diȅ4Q5+-/OhMMg.--;N8:8<`GItֶB7K&B-Y+,8r㎺tw?X82+;swS<':zJ,TMvKWK[(rc?ÅK @NWohhl9~:~yO‘\7,|tRd)~Hmz[}:#aIzE9ƯPhf)B+"@1oɏi9fEi?әZ`nu1N;xkڷjDy3XL S+\OW}uRZ}=nt)@a~~Pa:2pnFa^6_Yv-DϨx:;~rƔ3]nYdq4sѳw;]퍍 ٕ nd5Bg%K'R/ČA<9H`]vSODSiJzw%>~~ᷯZTY^L(|Qds2LFVS=-Yr}Yn aLVZ%Vwh{0)M5V]29I&F>K7Y䓬%D#PGQ鉨~;lF JX댋lI}d(ŞF -b o0iF1TÀ8E.ޓq&}q)Sk~ +b8- 4y(5mܫ?vW.¯N S7Z4rNl5{RO8eʗVT"_ ՛dZOV~cv2KBF{HVBoip~\wgMθ5QAP]x뿞};q振ZZFÂ*]V:DB9b^zvלDEǬ;Y([^[1zlS؋IyhR(, NN$zo =oTi`77L.$"OBA=3ιu;R@\@h]K;dѰahMN̔] c-w;S#V%B®z2Ral4(40g4s^yeE8|+X-wU:]UomYHh =hu#S*(Tj~#6hH{-W"ΰ|& )8D߸ NY am0]`oO}>=x3zRb 17M RPU4_uC;z֌dM7 aƻiRZۺXdS"=Qu>MQnflNs w!a7^q.x8d&VXAV|n[8oaELZ*b!Mjf tkt|eֶ*\#+'~Ϟ',v;5U;֯[_V1fw]ĉ7nDe&AV{OOرSLІ1!}f_ Q_<:T\q/ 6IxK@r~: I̞^)ƻ1xbvYP1n&/1W8̶5+W>ǧ3uOK治2<)v1Q zj z{L\%`d'M 9|.#1`f5q㙥M>^2ĩ?L+eK21IDZ7ybWtyi%ʌIpC$M186T'O;?+voۋUOt5۳jrc@k*.2#/?3Gv ]cR+@'sx^\jW`S@ 3+2mO‡,>fsqMH杍{?XqjlTq ] SlA~z;7kO ,dD䦖y\3':)AkNNvCSbcau9icKT(O^dKSOlxnK(-ߧ#ˊ-#br3fqwˆcw1!waW.'*1S}QD(xƘ5d=Sy{o6e)#ɵ Na\L~ DRD"I@'?A;TDRDs'Tx# jSܑ=uז_Ϳ+u &~OKƥC1M ꏛkΔco/`.m>CXG32L!Je߅!>īڎ87 ӑ=_Ι_mn_7)힄 욲[n\23:^{YJ"3X±9%zɗ]Um(EL*f7 xd8.Ҿ|U56okq R5.+ˋ=5pƔ2U\7BZCLB_I8h',vSiWqGҲ B{IuD&򐎿{Sql+)B!ܨ)>bP40a@4hItME=nW蹥sf4DI. OD >VJlqxi|r5rMas`L:l+VliJKu;l.^+S-t{`H&dp9wk#~.bSd aOS9@Z;_HT쪮te\'F Z[`'=qr1EVK/X,AÒ{L V+WIfu {ZX(57d ,? ^?a':hGHq`v>Y<5+XV&`s`ůrjsނ#ܼekKSSqqQyi*)z02xq<ފƜ,µҢ{b.7&bjp%8fblEX? hImfg@Tv0w2,_|pi1R\]H6~_}xg[g Ӻm,NxG&W-#&LX"%* }sA@Gڜ#>2ǖQԲF_<"C0!Tf5甸Y8i)ξBF8S緵s]Pr!,b.<-]vEu떦N_EKIJ]e'*82;5_2؟(93ݡMQsc#!R9Ι;ɝj9fv ,GtLF e +mEϮ8lCk?oM EC1Ԏ{eI܉.' tZry(ߴ1խ wdN/Qf:": &ZC= &d12OGZ[We bܔ˩p-ӬT"M(1(5XIF]9Q| ggh9ز'hjiBOH@Nw衇>ClZ&BT82Z׋/i!qȫ 3 Vdnv&s"' EbSk_4UGMc9[^h$"Zb7jus_qx{>zӚY{_:8sN8NZ}=/pţ܀=णЩd VV}pXD 2na/~FA ~IJ\HZH)HxҎAVAp T1y& 2D=~իWptkh#mP T8d<*-0H.UU'ٟ mbj|q)x[jO$iNҢœ<(Fz,YME'}hi\ ]ʫr5_;wᅬdN"~DHzg>1C~7 Hs?谊㋊ 2D uRjS$Tzs}cǷ|19Ʈ_X1:!9xu54wDpnve9igY\4 |L#\3aH6 FbrׂD(RˆDžBiO UU6UkHHMhLkj@% ",g08_:{?Jg{cHhȤwT2# i_[4ZqN7d` tx!D8UE$>ߘqAFW߿0' p ѤOA?덖@`$X(+b[+P"JA4(<ή<{6LB( UuARSOOLuܑm۶gƖukLqZZRk)55%'Y\9yl&S'E ͗cr>L*@gr'MZn5m;v56wx ةd$~#6KVjJA(k҄C&e _[X~W/}Zߺt}Cc'q]K,B{+&Ht:.?`=&cf\ bC).pAbϜ;VG^\{=s[&{O8Ă4NCs(u(/ØEE$'7  p!0?AȂY(ɫ \ڰ#cMޓX Pݍ ˗/5s յр8#[lJ DeD6n1j~Dg3 -A]:8tFHNvK,Hr.rj:K_5zDzC]12I>0.qzr^INͭ,|vFjZSKf]jJ⡇ϯ(/KO;Y.;3GE[+FD+.d'3> 8ˮ?eiDHZ`&ֳv`FoByS'3F9__+(q_PGi`)5sS ɍ|s@}/`C"*~=?@# KsS:1k|S6dCʃ@r?m\Pf'-'\0%8O&&:Dũ8sK=} roӠLCǦOwxh7: \^HeI'm*LϛnB|nӧg =NSR_2Ւ*dp"JyܢCg0GJ?B** g-psC=&qX<&9.^qZy[Xf &*Bs+Y<+q_:_UO@]Qmܼ\Y1ʡl߁>z-.͡a1x"3PfX,ZZ[Z[ |1LQ\9VTT4ܗ}!.G>S---`E]  UnP6?Oop<?r J(iln]zU77ܫO;ݙ̹K ~;fN(S[mҥ>بۑ*_<OY_ɉ1‘G,Pَx7t /0mΝ|r4z}}t2T$ f< +Ogq뭷b?^BO)YƦ'c| /3-=\VY*_tO d6让5ΕU8 out3AJWk>0fMo{}|?{_۔; KWVoT]׹isU] hmٓp-)-2>+۬qz 7-ؗ#uI~Eٶt..<%/.l Vp*ek2Є}!|#2ԁpTzdGbp;;9Jb(dXvc ť Uӓ1%p_Q#S='WJ^qY #\r5xG&W*+;G' C/KQ͡ivc%QbZ)1վ!ęHq@H\AN.}U@"i7?A7K@Et hCJyau98B? J"AXmQdP*`h'M;0 &N&:)yt4lҸ~`| ʈ XlԢ- `ْ[hrťSLu2M0vp{9bf3R sSK0kM QЃpvշ>񯍏<"#AQȡxȨ3\&9NA Ef.;~1gN-Sx[|\<є$ {/713ZmU'(3OҾ`EuDa=MKg٬GTԳ(]"+^0I9} W&g%,"zf;WKWl [-Z-*NVFc.2d>9?`\r^5۬;GQ^p G#hY3fV\ NYAd܁Zr[ژ8 X} 2{CA&,B[>$B!40pt^Z <6cL$#+vŃ$ z ؏p=`PH$u:͎QPvsC-&\)mAP N&Z GQ1(43oZREB&q„~~7 s.6%$:aV$ېԂIxJUYJWtΆJ>sI_ uh8v* $hD5^t3dǔg3%ycm&`X^~{M?^% rrR aՆSN5ܪ0i\;O?zwY6c$I:QPe8`DMLd S=i6$^(c'>jz%^2ͷEd/ hRzzoQ4=Nj4P>7U| E =Ѩx 3Q묾ɜƝeg#aoet:"XyU+{TfQ~z;f::̘VbyƜ\Y?.~w=&P A ?.{ӱ6T?mN+wBhKGⴔbIdZO,\L72_7,r| (o/?FJT[4$hd>Rd>EMPQ^ Ԙ"^ޝaS%rPG$;hJ\V^Eyyu{uvu!عkWNnjE"& $jA&\^YȢFtH 9q%k@ T^>[ 332?fɕğ:RbOç%vWy&Ÿ:4rr~ENNO.Z'f'뮻r.]ڵ~]VQrʵWf[ǞEn;D*M#$ڏ+|ᇙpp\` G i%)&h.K4 WL,jP9-ΏjzOa;{"ƦvhJA]/mw&-:OUO7M21BU|O%eFvVYKfW\{ݍm=kTgû[u-61er Ӹo&=7%`=3_K|8 9D nF1|!*&TK`\וᴏ˜393&FCwDB AclUcg^&.?HKsÝF!lU!T򧄟n4Ga>3l& ߰F((y/A+KO.P,1}oO> *azbMKdYes/ڜ .6#q#c,^Ccjϫ mo-.5^;1L )O] 7" I2 n7]`Ԙ jИumum/ELƤ]hY ^MT3'O0t/[k3spϞ@ak칳&OvcG \%ߚe> 0,SsRASNt)pR1 A%H%q{/T9D#ro^Z#qAT,(jfC 7N$Ld>l F<A%p؍b4Ps`o?n|>[V; Γq5ӱ* c^|̜캪_il &T6;{ڻ{t >_b#%麣f}^9"4rɣ˰8^Ӧ 9Nm6kcfvHÄ/c&hVb\̋YQqӘ쌫=]G,Iw%VN*GѪh03c=ӤGQdk8y#ת{] :ր+w_,jkgƘ]o3Rb)OJ\ zI,)H Esbje#ξ1( `jlnHg{ʌt$4c@a/>!NI*4P}f.g4JOO-)CzzsX=c;# 2PlGЊmhhzoV~껷|Ϡjlgժ~SNW&yrpGz=&8>CHF³oG,> F:OT>)s[[ou=<3njjęOZ/XJ±#ߵkZh=3?b1cƠRDM+UhltL怍!SPh_Ϙ1׿5dN1߁ ^}(h-UPxf: X l")ivVoR/ T32_{#v$9ÛIR~vdEB>w扺U{|Լeg[=Mަ?m7}Řls3c *ƹ=}.X6D#5U*0r%SHI$ v(= xOONdC-3L!(={kf4JFHQV/10/bl CTS쎊gΡ~1uҌ{A>D"6P2,ͅS*B'RA{s*Hu,\XK6[rʆtOGr^]GWV Cbz3;Z~4:Ls^po>r"2ur_29)Q,ȧ=X~ٌxElvX#/iK"c4l҂NY 'u'b i)vaܸ'-HIaolj,)._? 0T¡e%H %ُF:<3$L 8+w>%ft)xBTg`f@hhDۀ*C'5+Y|DqifKOAQӝ:wb{//Dž^8M>cܴq;e"{VV.{tD"kkZolmmvvaqa uM:: 37'0^V!i})sbRD9 ǰyI2V9$MएCRfxOkQ6|&z%8'$LAusĚ;~axp4\FG4ᑰi8f*5s:ƎMJ}_-'9-~#v-Xq4Z*O_NyI0t0'*ǜNazpMWԀk<_xºa[el0S}nص)˙5c30=d-m̪zla9 SefdLo$\$I+Mz p`V])XŅ1e2uTںxfxbt`Xf>:h۷reD^:3O8QE;b Sb܀7$77WɠR^U6KX#G剡t] dTrd;xS4E)sĴPӦ[)i7jW)'G@$HRCb c5hYs~^NQAUB^\\b͋Fvb0|yvjvv6uO(vE|4Xj8}̆Mb˒]8v{tW = nuFZ@Xԙ!, } ,0(RHWGFߢ_ 㢡׉aOMqC+ru1sLenǦ/5|fyGeroۉiOvSܔiuM,oڝ55_;.8'a8wUYKoB TiR.誻m*T"K:%;3%E1^Ν9s曹3h,*=ޕ:m/qvUTְzm͐ݵ85=aWN=ČqÿYNxA\ΠM;yTހ~@dMi7<֭[,_l;׀z, f=36Ӽ?F[v!gFaG0mv|[]S.kx^L.!hXtZ|nN/q ټ^oD5H۲8:ы>jw.P="p+=~Pǿ{{2u*fs]bg9Si9Ӌp|.P8b*h3善vQ$t"đGс@_SIGY>[ݺ#XD6(AqUI94† ,sic*n2SZީEډaL4-.Ė!cݸXěc _`/̇,< z {Wkl!Xn۴q@]8L;&& ?vA㏛]Nl9{  0 pƙ ."G~80 v34BƇw*췞"mg XAX~O RC2~;Iv)Ơ0/M1 hMd ?Xn#`@KT0Ń@7^_zɧ⒢ )۶x~JL (y ٭S&K1;t~^3f6t0$NV`ނϰk*- jB k2ǎ:WqȆ+_ysv4;zN׹h闋774rR-Y~oFnIIV> 4>[n+df;r \{E2TixSd&G}VI}iqdRtHYZ%N7;ʐGh hRM84Ґ;%W]Q]^^ATF-i:k*W0jMF b2d/_.d@铧!+('y=ÊUo= 6;{va Je(l/':2-֪Vw%d,8qG|!(5&=V#ì[_:iM#/^X?ha&lhFB0v!# Xʡdg[q:#R-rs6m-fi0tFMom7۵aK43=M>3Vm͢32['om_Eى@zL@ےT]\"g$0ź: !3f0 4/«kh  AdžfALZ&arrs@a"*>ipZMG\3)fӡ* [L. Fp8a,N$⧗<?T;ơ/ W!<OoJY(٦#(xllNNwsQ앤w@YY/׮c`Qt?G,-'YnZX7G:qXYD ~A )OS7^4kW;DF>[` ݗ4 M)?. Fp@5?g5ؒ3veW_< g%xz=K.Y򇴔̩'ٵ7/ /F |[EvOA ƅz\d%!gR(Gz 3dlth+Fj@msCK]&S&&x]KŏP6G53jY.ߎOLWGzuM_rC>=q-wgKpcvG t='='+w+{â/<,o耳gMw7$amzI3jDp!}&׆e mY_c.5_^?-,ѝ J"@@ -1jrf{ ¨>  bA0u<v`ɜO nۢ3>q_RNdluȑ-BgM0H iaUd~U~l5=}#M?S޹!#i[7l~uiq&)Kss/*^xE5eлc]>MAvrX'CXFbLQ;Q?tkF5Ro z#/P!"I L&%An"^p?VCC*KʱD8/%7~z}gc*숪psç]n 9' KJ̍6{_mu5>m/އHKMH:a<<Ɩy_O{ϤZ*Pdo۵{7[@HˇK~2+c Muu0Qrnssz7ښ//{嵷+jxهz_c IAJ<)KD6WN&x(j/T|`c@?Eh~m]g +k :4 F I0K} "X`f\ rKd#f4vVxuP V wF%HR;4u.yl v:*UGZ]Ug|rg4\w lN{Lk*&k j4oغYk48+O;}~5ɡP[ny۶ӧ`ᇞ&F$쇊@̔ ZJXͤ=PitHH5XKP]qz^^{#-v;L{ ~.jVpjri';:ȃʰ; C~_ո"o<^Ecתe_-CFfyw_8Y#LxO43&y*>uxcO@80)[/bWis&mW|rsxVÇlB 2#8?>3o :J?%xtD|'F.-͏tGq|x뭷SHˬo8Yb\xSQTBֈz?d;bTF%)0=O)ь0eL\/a_ ڑ:yͳMm+.T463+X=)t)Q `lKttQ<#az tJbt樼`ZQd]#YׁCZC>F+m;29 #=)1 .My׿[ty :$B6β] ːR(`Lx N0ëܪ.Hq{!l[n}D>fh}\W^t_ס3#98tHv \\5&8vqjnݽ-5#.)).8j)#3uMH_oV|3xР׫7 -TZu0*Ån+7<(aDq*VNήQ'}l` T,a\9v4iK8CĨ9Fz'1eN'Mr/4F=XjuJ[&'w(U'vvcn`AK8T&J1k=i׳5† [, egeœ&jGH T oSN6xǼ[2F4 a_P5}W詓R%߭R2p1;9'Yl\ĿBrY ""-xTqv{?>}N8M5z&"'M=12bG^Vq=Ɋ"hvA3dϊ '  =Bo@Y*(Vyi_/{#2i"j|609Ŭ ѕ,{XlVn~TzNM_߁JW yk Zg_xޱz=eRshY?i萇m#>1|g}Qdk3ӆW jr4٢/.`VZj*7V\784j 1H2KC߰=n&o765*tÌPJ!P.R#>c7ڹkhml+:E2Pڡ}V 6dXn%(am}ws@=ĘFwUdCMn>j4rra)M[iԸK]41Y׮~_hҤEEE&`ذaWxJ ی30lfK^II GeplrHЭIu=}Qk.˪nzIJ**jnw@2zKvn̵ {_1bqKdj.@@7xilWk?lLHrU@7gMPꈚX\M B/2ˁ uMMNRPoQ_tzz]DCXBlrdX٩Ģʹ{56XH6wġ!G <1gؐK9*,#3H┙SL:%wvO us|jbHnk 06{u?~kvjxdދ؊nz|FO<730Tһwѝ2]6etp#B} ,_f! Rq<ہJS1,g?^MB?Ox⿸={zR$^#f)?Kd"?Ç G+6uVl7kSVfNp`z֎2|&7'WW7&'uK{{.1b4 !'iھ=]쒞pm"h'{S8.@+Eq0zE yťϼ[bq+~GpRW_y9xg ȁӃ(F)J"|?b>PuKGA-Xl^(^cl vyjڍ9M#>C*/U;@`S ɬsTˑ*O{#O4fE+/?Иe[9UUA"h]%<^·y(bFXf5&>9X଩5mZz 8;gbb"VN3ұ 0W;MT(,Vsc>MFr`6)bU*!zD"ZPN:YoWKzAmi2hZ"TBaӚsM9 1dպQM7Db F.-ӮO/PC@J6hBRp& *o9/%QNW=(Ȕ"mpaʩf1zyJG.‘ٯ=r՞};#%׬_^IZQ]ؑlL ;$iweYQ'1xEkpUϽmJ!mS򤉣`(;݂]& KD@OUf Gs-plpw*DAD2A C@`Vʖ SA06 GatT2X"|+Թ~SIJ \!sK>hl6m^ v-79pѫtJ}2ŨM>mȂSAc+aƢv/vq((^i;,=? | -k#CظlŷQY=e)숹V.I}ǟ}/&"cLl^][o1 M}΅IYUiIqIi8PF 5t{}s7;AYը5uׯ] : tB+#6d`gΘƲt<ۓy ;G\ ؇ugwӣFx <9bp $ @@ 8~ϴ&@]!ȧp4 I}rmM嫬hxݹ0)|sT_+3{gxG&&@kx͛}߿7(*I{._y[߾^OYzK &_Db 2-hd-F# ;*0㎒06u~޼#>¤8 p|#u NDhyex>lVK߂>RjFgVřP~ial}=NH }yI٪ sFbxhs@n"h4}+**F1H#(Fp*T0u 94ə+f7y՞ L0':8޵{5{҇̎"fhte0½x/qG"nu'VEղ&h!M4T@Wo-sUTn_mm]۫R"`|_\}aIc BC/0%ӍX,n̋wzUd json-3.12.0/docs/mkdocs/docs/images/package_managers/conda.svg000066400000000000000000000064741477615276400242660ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/images/package_managers/homebrew.svg000066400000000000000000000113761477615276400250070ustar00rootroot00000000000000 json-3.12.0/docs/mkdocs/docs/images/package_managers/macports.svg000066400000000000000000000062101477615276400250160ustar00rootroot00000000000000 image/svg+xml json-3.12.0/docs/mkdocs/docs/images/package_managers/meson.svg000066400000000000000000000012431477615276400243100ustar00rootroot00000000000000 file_type_mesonjson-3.12.0/docs/mkdocs/docs/images/package_managers/nuget.svg000066400000000000000000000043501477615276400243130ustar00rootroot00000000000000 nuget Created with Sketch. json-3.12.0/docs/mkdocs/docs/images/package_managers/spack.svg000066400000000000000000000046711477615276400243000ustar00rootroot00000000000000 json-3.12.0/docs/mkdocs/docs/images/package_managers/swift.svg000066400000000000000000000034331477615276400243260ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/images/package_managers/vcpkg.png000066400000000000000000000262011477615276400242670ustar00rootroot00000000000000PNG  IHDRddpTgAMA a cHRMz&u0`:pQ<eXIfMM*JR(iZ``dd3_ pHYs+YiTXtXML:com.adobe.xmp 1 ^*IDATx} EfտY!$H LXe "à8ޫ50ΠWu^Pq2&n4[H9R_UNwӡO7UWWUV1TNM>{IVFϬWӂ08(0{L4ƌ6ڄDk]EF״QՑ <SU>jm6fQ5=C: [.Ay9x3=7DJ@=R2rB* "86kAy(+UOᗊ2ϋ<4|p*C/Vg Ydapj}`oU@pU7$:[g:5l4qT ^ RVg!㰊8`ʺm7&zn1@r<]aY0T7i==e QUqjA+*rUO \:!/ 3-7F: [8ue/^}䊿2[XZ"zRaYwzI4{ό@Lq0 Uk)lAhr}UΜSFA;2q{`*thK/j Į¸5ؗrPCfHYDeuh'%)͏qD2k'f0CH,٤R ,7è~&,oPiN/fZ2]d/9< [ɖ46WɱeC;?zRǦEp!e |\uLβʷl ܰ=8#m}60/ǾIbb[6"ي}K |wI^ӧ-pޠ9VOGT]xwCr f{u܉VHER^ޟ㦷n3oCx/C l]rw!󱘃Io=5,ْq]Ȋ(GBa>ػ=i3FڒۆWsd;DhWK3(L|UfԱƎE.0^< &]r;b3IqVFD˴#5$45ɱdɐt1 mtk^GK0nzxH,dꢊ\Ը\ G Q[z4YJ[82vb~7'[:kBenPpaN?+"F7 e!FC*ۤM!C3oQVd7o8;{o ' =-FwC/a|LHۤ WZwIa8ijo6[2V}i5Àn@ўµ.>@E;w2U- ijq|)g&C>b?NSN Bm0@t Og32qH$՟p3v 2:و>|mRK@,[v ȓ5Lm9*31 $)jts@{xFUpeC0lbD=dݛσWZ R78-^=00gZg.Dq\|F-0Ŏ¯O]bV1X8KAKtGέsNoah6a$܅J8buG^\/0*ke!CmSTmUw:XYgZW-ёID#&9A qVW˷ly?f?xA k N)fSQ؎/Gݑ:z|?a  $X#`* ~L࿩oT}\ z7>~Zȥ4Bb *ۉKX4fJRu?#C~Ɍ;W͞jف@aޏn0mԀ&H׺0WG0'>jɀbLͫqXD2Nu 8[D'yv\M[Ost%W̩!eoHI!%!P!ɖh|}"&V.b㙣;0=Ŷ9_FV7,9 'fa=rgz[ǩ2`\q^A-}&@?Mh瑁Χshx!{܍ϥihGX86",A !/PL|2LtRipe(V i[># {7 fy[As1Tz}d[`KTgF1OթaG=N:QN#ŵ&8CYT-!&;U)afr}؞ۦ0!Sn6| eEl߲ǹ F @PѯHg h0|-Y1=1wNw/WQ=]@TZj 9O%7 F/ '$dϨ 6Da&}=lB mw%J 8~WC?h/JIR}`^ APꩱ yGSq7]3d \8n,0F֬[- .xLdӱa]T߂=-HS9=sT039xL&u< ̋W3OHΜ0J^&x# QLf% fXX_n5Ro4W :Qmۢ<=mVkq|f#a`AFZs"'څf Dw6_ 6"cfq殃y|55p `G  aE7$\1kJ$d½ ?d GtEOOv@+QN ]F,@z.5 P#ME5೯`m ^4l$̢z.Ԥ@Q;դϮ`瀹=_Lz~THԺv Lq ɓN~YQtɶ"[vؗ0m;/ٚ}̴$SDQ Aƻa).vhq K<0k`ZT mrɝ H֊p`}K ݩNVju8TLl.=a.KOaeX 1^Qh900G-*ΟD8{C:}FWx \OܑBfWwt"nQe9ήPP./%> 5!K e^d!y8800@|?Ja q%EFfY%BCg ZcA+v( ;+зzDT S=<U8}ֆL E sUg010+_Еv;/ 1qwNf ޸m0ˏHap.N{$ RhMÅ/S]; >᏿O: ;˩]LYR\sJ-@.>mBSHzvwu@Y3_%b{X̪()U8jIJ |F&M΄Zv &b=n0sbZ iԟsH }@~(@[3!jq'?oE3VxY֦|v=E&Om̿>]7jI:#*x2PW,b*l/I+{U=EM23| G0Ag5 }ʓWSB_:sޭׄI6$e Lb{B{‹m<<!"} { SO(8ܶ=<VW&5]3xH;8NUPޑC+.yo RYyf*FieB_:~ ( !Ui9J,~dLfj/BӳO|Yv{Ek(;-,dP8Np됆%isX?8K}? [mEla3̤b<ي]s^9fj~[1g۠U%.!Lhڑ@La@JĜi5-OG@Nͧ@Yl >1*;Dh% :"*q\2N84q3:ykf2  XB%@J L #^_v8>eד!r1^s'9 OP7![AWae[k8V@@s:[ i^9 ](yo@lt+4U9u}/[F6<ۑ i5p !D!F yE8Y&s_d7s`9(\f1 oGCabo츂2% >p.nA%ʬ3Mo= w'qb1@9) SFqZe@%[ժcKWG"LUjي'_] 7Oy^ba(݅!f2iM3P6#ng_{ܸWўÓr5EftE|9jaY5{l? u| %c}@kCU =c٥*NV`b9m{XoSByj^-( +@o SC80d5`1dY^~3 nb>ζ,&P9V"0AޗgK+e$y Gy` 4&^ޤٳY^XG3iv ? iDtb͖ #3i=ܬ $ŏcq{xײ>M5>cf>fUX gv$g -**a\7)OPrliFǼI'Pgp}I6VxˎlL%_\FQ֎quצ,?D>VƱPVAV?Ksm?oZ"/ C*{+Q?JB2k_q0!ob 81 \B꘲fb~ASA|GSz}Q"c@uXIKKk6Šw[[`Fm8zLguI7'( (R V3s0EfAqGK/e90`%$EK~HDbqfd;i*CEd \3Q}^L!Nʲd[^y" $&P!I$0)pd`P ws06ϞE.5!ejo凤/ XNe7ӕ%7{%Pc$vIs0ہPJ>!\``t\avnثHy#)Jn][ J*"|l9^p=,p^72X>!3I`f{(H%$dd>7G@HJryݫ, k{c(WdQ:CZ$ooDa/cd~Õߋ` -@\] p9UIqb c ~v%\bnےO,emi+!V)JR?z4&ag)T^5ovI|ΐ .W1یONذ ZGHA "w=U%zTh8BW#; )ڨ#rAG5]$APeN1fT-rMl.* !p*G S6J6΂%"{8 r` ,{ϑw{ߥt?˾Cfhד|[Sh56XD J4fAƕaFZF'ط +c+<}gl;j{˽{:Wس7$_؈,Lە}. XDvE8Gz<*wܕ9'W. xNڜҡE+߄jq-=P8<9,^ @\#lPԐ$CwZ&YЧH,Lʣ܂@6g#$tP _}+蟿FbywLRd*uQ+N#b<3]P§9E;\3,Ė+'- cW:<0`zi7#3o1c?[0ba)ӗ]h^-$dq8"h{q?;(G䧾~cj*j0M!>g2%:j>W7TGUtz#`ÞR\P8Ew<dXZ͙)OgEMr(5)l|O1+?^RRP![r!Q
? }y9W4*1 Aۨw ۉ|% Kՠcs"Cހb)IPvjyӮ_^,P-x׿ͩ IZ yd<ɾj8Ct2R!GȖq/];iG8naTJ(%fDYr^'wUܩ笖? ,%|qurKGԘE 0szUMTl "}W&ZD&BKm#YB7yd! !I%*^ϲ}bD4vv|Hۥ:l@Y@Az.v`6] QBPH{˹8-wGEEd#1oG_y5Jx\5`,RC|duw]M^[sQUC^m|2= @ w*tTy,Fփ_c? ]E1Bw w2w=䓲rIIENDB`json-3.12.0/docs/mkdocs/docs/images/package_managers/xmake.svg000066400000000000000000000035311477615276400242760ustar00rootroot00000000000000 json-3.12.0/docs/mkdocs/docs/images/range-begin-end.svg000066400000000000000000000336401477615276400226470ustar00rootroot00000000000000 image/svg+xml Past-the-last element begin end json-3.12.0/docs/mkdocs/docs/images/range-rbegin-rend.svg000066400000000000000000001204751477615276400232160ustar00rootroot00000000000000 image/svg+xml Past-the-last element begin end Reversed sequence Reverse past-the-last element rend rbegin Reverse iterator stores an iterator to the nextelement than the one it actually refers to json-3.12.0/docs/mkdocs/docs/index.md000066400000000000000000000000541477615276400173610ustar00rootroot00000000000000# JSON for Modern C++ ![](images/json.gif) json-3.12.0/docs/mkdocs/docs/integration/000077500000000000000000000000001477615276400202545ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/bazel/000077500000000000000000000000001477615276400213515ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/bazel/BUILD000066400000000000000000000001421477615276400221300ustar00rootroot00000000000000cc_binary( name = "main", srcs = ["example.cpp"], deps = ["@nlohmann_json//:json"], ) json-3.12.0/docs/mkdocs/docs/integration/bazel/MODULE.bazel000066400000000000000000000000741477615276400233560ustar00rootroot00000000000000bazel_dep(name = "nlohmann_json", version = "3.11.3.bcr.1") json-3.12.0/docs/mkdocs/docs/integration/bazel/example.cpp000066400000000000000000000002561477615276400235130ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/cget/000077500000000000000000000000001477615276400211765ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/cget/CMakeLists.txt000066400000000000000000000003241477615276400237350ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/cget/example.cpp000066400000000000000000000002561477615276400233400ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/cmake.md000066400000000000000000000151711477615276400216630ustar00rootroot00000000000000# CMake ## Integration You can use the `nlohmann_json::nlohmann_json` interface target in CMake. This target populates the appropriate usage requirements for [`INTERFACE_INCLUDE_DIRECTORIES`](https://cmake.org/cmake/help/latest/prop_tgt/INTERFACE_INCLUDE_DIRECTORIES.html) to point to the appropriate include directories and [`INTERFACE_COMPILE_FEATURES`](https://cmake.org/cmake/help/latest/prop_tgt/INTERFACE_COMPILE_FEATURES.html) for the necessary C++11 flags. ### External To use this library from a CMake project, you can locate it directly with [`find_package()`](https://cmake.org/cmake/help/latest/command/find_package.html) and use the namespaced imported target from the generated package configuration: !!! example ```cmake title="CMakeLists.txt" cmake_minimum_required(VERSION 3.5) project(ExampleProject LANGUAGES CXX) find_package(nlohmann_json 3.12.0 REQUIRED) add_executable(example example.cpp) target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json) ``` The package configuration file, `nlohmann_jsonConfig.cmake`, can be used either from an install tree or directly out of the build tree. ### Embedded To embed the library directly into an existing CMake project, place the entire source tree in a subdirectory and call `add_subdirectory()` in your `CMakeLists.txt` file. !!! example ```cmake title="CMakeLists.txt" cmake_minimum_required(VERSION 3.5) project(ExampleProject LANGUAGES CXX) # If you only include this third party in PRIVATE source files, you do not need to install it # when your main project gets installed. set(JSON_Install OFF CACHE INTERNAL "") add_subdirectory(nlohmann_json) add_executable(example example.cpp) target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json) ``` !!! note Do not use `#!cmake include(nlohmann_json/CMakeLists.txt)`, since that carries with it unintended consequences that will break the build. It is generally discouraged (although not necessarily well documented as such) to use `#!cmake include(...)` for pulling in other CMake projects anyways. ### Supporting Both To allow your project to support either an externally supplied or an embedded JSON library, you can use a pattern akin to the following. !!! example ```cmake title="CMakeLists.txt" project(ExampleProject LANGUAGES CXX) option(EXAMPLE_USE_EXTERNAL_JSON "Use an external JSON library" OFF) add_subdirectory(thirdparty) add_executable(example example.cpp) # Note that the namespaced target will always be available regardless of the import method target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json) ``` ```cmake title="thirdparty/CMakeLists.txt" if(EXAMPLE_USE_EXTERNAL_JSON) find_package(nlohmann_json 3.12.0 REQUIRED) else() set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(nlohmann_json) endif() ``` `thirdparty/nlohmann_json` is then a complete copy of this source tree. ### FetchContent Since CMake v3.11, [FetchContent](https://cmake.org/cmake/help/v3.11/module/FetchContent.html) can be used to automatically download a release as a dependency at configure time. !!! example ```cmake title="CMakeLists.txt" cmake_minimum_required(VERSION 3.11) project(ExampleProject LANGUAGES CXX) include(FetchContent) FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.12.0/json.tar.xz) FetchContent_MakeAvailable(json) add_executable(example example.cpp) target_link_libraries(example PRIVATE nlohmann_json::nlohmann_json) ``` !!! Note It is recommended to use the URL approach described above which is supported as of version 3.10.0. It is also possible to pass the Git repository like ```cmake FetchContent_Declare(json GIT_REPOSITORY https://github.com/nlohmann/json GIT_TAG v3.12.0 ) ``` However, the repository download size is quite large. ## CMake Options ### `JSON_BuildTests` Build the unit tests when [`BUILD_TESTING`](https://cmake.org/cmake/help/latest/command/enable_testing.html) is enabled. This option is `ON` by default if the library's CMake project is the top project. That is, when integrating the library as described above, the test suite is not built unless explicitly switched on with this option. ### `JSON_CI` Enable CI build targets. The exact targets are used during the several CI steps and are subject to change without notice. This option is `OFF` by default. ### `JSON_Diagnostics` Enable [extended diagnostic messages](../home/exceptions.md#extended-diagnostic-messages) by defining macro [`JSON_DIAGNOSTICS`](../api/macros/json_diagnostics.md). This option is `OFF` by default. ### `JSON_Diagnostic_Positions` Enable position diagnostics by defining macro [`JSON_DIAGNOSTIC_POSITIONS`](../api/macros/json_diagnostic_positions.md). This option is `OFF` by default. ### `JSON_DisableEnumSerialization` Disable default `enum` serialization by defining the macro [`JSON_DISABLE_ENUM_SERIALIZATION`](../api/macros/json_disable_enum_serialization.md). This option is `OFF` by default. ### `JSON_FastTests` Skip expensive/slow test suites. This option is `OFF` by default. Depends on `JSON_BuildTests`. ### `JSON_GlobalUDLs` Place user-defined string literals in the global namespace by defining the macro [`JSON_USE_GLOBAL_UDLS`](../api/macros/json_use_global_udls.md). This option is `OFF` by default. ### `JSON_ImplicitConversions` Enable implicit conversions by defining macro [`JSON_USE_IMPLICIT_CONVERSIONS`](../api/macros/json_use_implicit_conversions.md). This option is `ON` by default. ### `JSON_Install` Install CMake targets during install step. This option is `ON` by default if the library's CMake project is the top project. ### `JSON_LegacyDiscardedValueComparison` Enable the (incorrect) legacy comparison behavior of discarded JSON values by defining macro [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](../api/macros/json_use_legacy_discarded_value_comparison.md). This option is `OFF` by default. ### `JSON_MultipleHeaders` Use the non-amalgamated version of the library. This option is `OFF` by default. ### `JSON_SystemInclude` Treat the library headers like system headers (i.e., adding `SYSTEM` to the [`target_include_directories`](https://cmake.org/cmake/help/latest/command/target_include_directories.html) call) to check for this library by tools like Clang-Tidy. This option is `OFF` by default. ### `JSON_Valgrind` Execute the test suite with [Valgrind](https://valgrind.org). This option is `OFF` by default. Depends on `JSON_BuildTests`. json-3.12.0/docs/mkdocs/docs/integration/conan/000077500000000000000000000000001477615276400213525ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/conan/CMakeLists.txt000066400000000000000000000003241477615276400241110ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/conan/Conanfile.txt000066400000000000000000000001071477615276400240070ustar00rootroot00000000000000[requires] nlohmann_json/3.12.0 [generators] CMakeToolchain CMakeDeps json-3.12.0/docs/mkdocs/docs/integration/conan/example.cpp000066400000000000000000000002561477615276400235140ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/conda/000077500000000000000000000000001477615276400213405ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/conda/example.cpp000066400000000000000000000002561477615276400235020ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/cpm/000077500000000000000000000000001477615276400210335ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/cpm/CMakeLists.txt000066400000000000000000000004061477615276400235730ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) include(${CMAKE_SOURCE_DIR}/cmake/CPM.cmake) CPMAddPackage("gh:nlohmann/json@3.12.0") add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/cpm/example.cpp000066400000000000000000000002561477615276400231750ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/example.cpp000066400000000000000000000002561477615276400224160ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/homebrew/000077500000000000000000000000001477615276400220645ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/homebrew/CMakeLists.txt000066400000000000000000000003331477615276400246230ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json CONFIG REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/homebrew/example.cpp000066400000000000000000000002561477615276400242260ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/hunter/000077500000000000000000000000001477615276400215615ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/hunter/CMakeLists.txt000066400000000000000000000006471477615276400243300ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) include("cmake/HunterGate.cmake") HunterGate( URL "https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz" SHA1 "3319fe6a3b08090df7df98dee75134d68e2ef5a3" ) project(json_example) hunter_add_package(nlohmann_json) find_package(nlohmann_json CONFIG REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/hunter/example.cpp000066400000000000000000000002561477615276400237230ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/index.md000066400000000000000000000011751477615276400217110ustar00rootroot00000000000000# Header only [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp) is the single required file in `single_include/nlohmann` or [released here](https://github.com/nlohmann/json/releases). You need to add ```cpp #include // for convenience using json = nlohmann::json; ``` to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., `-std=c++11` for GCC and Clang). You can further use file [`single_include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json_fwd.hpp) for forward declarations. json-3.12.0/docs/mkdocs/docs/integration/macports/000077500000000000000000000000001477615276400221045ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/macports/CMakeLists.txt000066400000000000000000000003331477615276400246430ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json CONFIG REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/macports/example.cpp000066400000000000000000000002561477615276400242460ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/meson/000077500000000000000000000000001477615276400213755ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/meson/example.cpp000066400000000000000000000002561477615276400235370ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/meson/meson.build000066400000000000000000000004041477615276400235350ustar00rootroot00000000000000project('json_example', 'cpp', version: '1.0', default_options: ['cpp_std=c++11'] ) dependency_json = dependency('nlohmann_json', required: true) executable('json_example', sources: ['example.cpp'], dependencies: [dependency_json], install: true ) json-3.12.0/docs/mkdocs/docs/integration/migration_guide.md000066400000000000000000000202741477615276400237510ustar00rootroot00000000000000# Migration Guide This page collects some guidelines on how to future-proof your code for future versions of this library. ## Replace deprecated functions The following functions have been deprecated and will be removed in the next major version (i.e., 4.0.0). All deprecations are annotated with [`HEDLEY_DEPRECATED_FOR`](https://nemequ.github.io/hedley/api-reference.html#HEDLEY_DEPRECATED_FOR) to report which function to use instead. #### Parsing - Function `friend std::istream& operator<<(basic_json&, std::istream&)` is deprecated since 3.0.0. Please use [`friend std::istream& operator>>(std::istream&, basic_json&)`](../api/operator_gtgt.md) instead. === "Deprecated" ```cpp nlohmann::json j; std::stringstream ss("[1,2,3]"); j << ss; ``` === "Future-proof" ```cpp nlohmann::json j; std::stringstream ss("[1,2,3]"); ss >> j; ``` - Passing iterator pairs or pointer/length pairs to parsing functions ([`parse`](../api/basic_json/parse.md), [`accept`](../api/basic_json/accept.md), [`sax_parse`](../api/basic_json/sax_parse.md), [`from_cbor`](../api/basic_json/from_cbor.md), [`from_msgpack`](../api/basic_json/from_msgpack.md), [`from_ubjson`](../api/basic_json/from_ubjson.md), and [`from_bson`](../api/basic_json/from_bson.md) via initializer lists is deprecated since 3.8.0. Instead, pass two iterators; for instance, call `from_cbor(ptr, ptr+len)` instead of `from_cbor({ptr, len})`. === "Deprecated" ```cpp const char* s = "[1,2,3]"; bool ok = nlohmann::json::accept({s, s + std::strlen(s)}); ``` === "Future-proof" ```cpp const char* s = "[1,2,3]"; bool ok = nlohmann::json::accept(s, s + std::strlen(s)); ``` #### JSON Pointers - Comparing JSON Pointers with strings via [`operator==`](../api/json_pointer/operator_eq.md) and [`operator!=`](../api/json_pointer/operator_ne.md) is deprecated since 3.11.2. To compare a [`json_pointer`](../api/json_pointer/index.md) `p` with a string `s`, convert `s` to a `json_pointer` first and use [`json_pointer::operator==`](../api/json_pointer/operator_eq.md) or [`json_pointer::operator!=`](../api/json_pointer/operator_ne.md). === "Deprecated" ```cpp nlohmann::json::json_pointer lhs("/foo/bar/1"); assert(lhs == "/foo/bar/1"); ``` === "Future-proof" ```cpp nlohmann::json::json_pointer lhs("/foo/bar/1"); assert(lhs == nlohmann::json::json_pointer("/foo/bar/1")); ``` - The implicit conversion from JSON Pointers to string ([`json_pointer::operator string_t`](../api/json_pointer/operator_string_t.md)) is deprecated since 3.11.0. Use [`json_pointer::to_string`](../api/json_pointer/to_string.md) instead. === "Deprecated" ```cpp nlohmann::json::json_pointer ptr("/foo/bar/1"); std::string s = ptr; ``` === "Future-proof" ```cpp nlohmann::json::json_pointer ptr("/foo/bar/1"); std::string s = ptr.to_string(); ``` - Passing a `basic_json` specialization as template parameter `RefStringType` to [`json_pointer`](../api/json_pointer/index.md) is deprecated since 3.11.0. The string type can now be directly provided. === "Deprecated" ```cpp using my_json = nlohmann::basic_json; nlohmann::json_pointer ptr("/foo/bar/1"); ``` === "Future-proof" ```cpp nlohmann::json_pointer ptr("/foo/bar/1"); ``` Thereby, `nlohmann::my_json::json_pointer` is an alias for `nlohmann::json_pointer` and is always an alias to the `json_pointer` with the appropriate string type for all specializations of `basic_json`. #### Miscellaneous functions - The function `iterator_wrapper` is deprecated since 3.1.0. Please use the member function [`items`](../api/basic_json/items.md) instead. === "Deprecated" ```cpp for (auto &x : nlohmann::json::iterator_wrapper(j)) { std::cout << x.key() << ":" << x.value() << std::endl; } ``` === "Future-proof" ```cpp for (auto &x : j.items()) { std::cout << x.key() << ":" << x.value() << std::endl; } ``` - Function `friend std::ostream& operator>>(const basic_json&, std::ostream&)` is deprecated since 3.0.0. Please use [`friend operator<<(std::ostream&, const basic_json&)`](../api/operator_ltlt.md) instead. === "Deprecated" ```cpp j >> std::cout; ``` === "Future-proof" ```cpp std::cout << j; ``` - The legacy comparison behavior for discarded values is deprecated since 3.11.0. It is already disabled by default and can still be enabled by defining [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](../api/macros/json_use_legacy_discarded_value_comparison.md) to `1`. === "Deprecated" ```cpp #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1 #include ``` === "Future-proof" ```cpp #include ``` ## Replace implicit conversions Implicit conversions via [`operator ValueType`](../api/basic_json/operator_ValueType.md) will be switched off by default in the next major release of the library. You can prepare existing code by already defining [`JSON_USE_IMPLICIT_CONVERSIONS`](../api/macros/json_use_implicit_conversions.md) to `0` and replace any implicit conversions with calls to [`get`](../api/basic_json/get.md), [`get_to`](../api/basic_json/get_to.md), [`get_ref`](../api/basic_json/get_ref.md), or [`get_ptr`](../api/basic_json/get_ptr.md). === "Deprecated" ```cpp nlohmann::json j = "Hello, world!"; std::string s = j; ``` === "Future-proof" ```cpp nlohmann::json j = "Hello, world!"; auto s = j.template get(); ``` === "Future-proof (alternative)" ```cpp nlohmann::json j = "Hello, world!"; std::string s; j.get_to(s); ``` You can prepare existing code by already defining [`JSON_USE_IMPLICIT_CONVERSIONS`](../api/macros/json_use_implicit_conversions.md) to `0` and replace any implicit conversions with calls to [`get`](../api/basic_json/get.md). ## Import namespace `literals` for UDLs The user-defined string literals [`operator""_json`](../api/operator_literal_json.md) and [`operator""_json_pointer`](../api/operator_literal_json_pointer.md) will be removed from the global namespace in the next major release of the library. === "Deprecated" ```cpp nlohmann::json j = "[1,2,3]"_json; ``` === "Future-proof" ```cpp using namespace nlohmann::literals; nlohmann::json j = "[1,2,3]"_json; ``` To prepare existing code, define [`JSON_USE_GLOBAL_UDLS`](../api/macros/json_use_global_udls.md) to `0` and bring the string literals into scope where needed. ## Do not hard-code the complete library namespace The [`nlohmann` namespace](../features/namespace.md) contains a sub-namespace to avoid problems when different versions or configurations of the library are used in the same project. Always use `nlohmann` as namespace or, when the exact version and configuration is relevant, use macro [`NLOHMANN_JSON_NAMESPACE`](../api/macros/nlohmann_json_namespace.md) to denote the namespace. === "Dangerous" ```cpp void to_json(nlohmann::json_abi_v3_11_2::json& j, const person& p) { j["age"] = p.age; } ``` === "Future-proof" ```cpp void to_json(nlohmann::json& j, const person& p) { j["age"] = p.age; } ``` === "Future-proof (alternative)" ```cpp void to_json(NLOHMANN_JSON_NAMESPACE::json& j, const person& p) { j["age"] = p.age; } ``` ## Do not use the `details` namespace The `details` namespace is not part of the public API of the library and can change in any version without an announcement. Do not rely on any function or type in the `details` namespace. json-3.12.0/docs/mkdocs/docs/integration/nuget/000077500000000000000000000000001477615276400213765ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/nuget/nuget-package-content.png000066400000000000000000000457361477615276400263060ustar00rootroot00000000000000PNG  IHDR,s| IDATxpU߷0+Sq6-*MХ)V']Eag-huZ|L[拒q] $vMMGۯn/:Jd05 YA$eY7խYusyy}ǽ7wgs|p?nyDCh @<,~yU =PV핐ڞ⁧OC+F+~~\z>]+WbNK7tW KyJܲE9oJe02n=S11O6G$@$@$@Y&%edžXHX5Zygy?^zY Caᖇ0 :C[G%HoQzWRСg0~`?<0{Laott?v㞝w=,Kwޣ<'[㠎:|oY /W_Q>|K⩩r0lHHHJ@C}5}ge^(NW7hxf&%ow: 㖐+qWW`*l:~ {|߿bp7i%܈Gix >HHHH mY K?YXXV+M‹!A!N¨\* !$7/=7qh]W·qo|0HHHH @A,[~zXY,>yd_,s7'*[s6|=^N8K*aFǂ{WDA5![-JN2(6uW, 8U|s_    H@dcoX?rb ߃F$@$@$@$@$P| R|c     lHHHHH 4XҀ*$@$@$@$@$@!@%7 @hUHHHHHrCKn8     4/ϤQx ,β$@$@$@$@$@Q`(B4$@$@$@$@$@$P(V(#~ $ $@$@$@$@$@BKA$@$@$@$@$@K&  ,2 @JXB* @A"    l-Yp,IX    (<4X oLRò,˹lnWbvS$@$@$@$@$O4XI?mArembWJܩ=h"HHHHH w8>w-Ȧ)`(#qd] !    Ș"o_5]n뿼3 ,U zJ)ζA=+2)>n$@$@$@$@$PT2bbǎxws@y۩4gBuuuaFX!]C$IOܹs?3' { yEۘ={vB?7xcKZ67w*yo߾({+'[33.^~l9vrʽ,o{~Cʫmt$#(ϯOJ7uWڝjtydlLoțz W_}5.천;p0B5ZLcEʄ"hϊςIXbdqϑԵp1uo;ŋӐ}2)Zߠ)jvΜ9wږWU2T0{n?`Pf@H^No=u䷸w^U̙3HʽJG?*j.‰]:j0$YddxVn:F' .Ҍ-1^{8U~_CSLcE~"|NNc/ˁi/W+4*uuuʻ6881^~`ю ndJwy8W_}a".wysş*5Ra_zBsчt\m!kV+/evEWJ8ʐ7/73J:(=̱ǥk?]bQjii,dAɤrQ_V?x4L)3i'S-Ëu$r8j^} .'}clOjl<63]ږv^ak2Q^(JÒu2Pd<<2K ۧX/)kRK{Yu(%S5uYMuyOW/ٛ}3úҺq},}ZieLyO Ca*a_Wb _\S^xEcJnbͳȐ{W0K^JE*+cgE>VS]O=97t/ɓ5ZDZsNP  "z?Sbb}1dkud]\~=: {k_ سg~FC+'2oVQVo}+aJWܺ]n&ȋcXC^/Ȗ }g?Sׄٮ}5@ ;w4}:fT+% ߺ2V,c794y)2N򡷟f.{W1eb3g'\>MˆhXɆm%K]F-_QSSSp0cE c1<%T3ԃYgooohd gE-oܽ0.ìElDnnӟ =!R[R=Ho|ahP{m,L0>SF=P&oK.>P)\8c+:IF'?a:KTꛗ#(Vk䈾_W؋'o$ectyEMW-?k-vyq> >{/׾)[ʈ1"/4_7cydýtTw OA׾T+˫& y s~S͔w݇ݿL^Ac/t5/}r2fawߣL8-C:JNݾ뮻H+Sx5V #E ?MCi`E@ZX6a_4.|ν&R011tDA7n6rC!R,w\бɔrCJ&' _MNҮ =y6L6Hv+L+Zt]?{JX"$3F&NzPCTz7WtHm1č. yå7H:o)ݵX<@Hy@L1:Z9GFBiOUot[<]Yx&#bpʃ9_\0ݿdt\XkY^tY~}]^?9,"!H<}y11ӦǔwwMK%ݏc*2̲[[]ʙl\C\ !?=ʵ.#Zԕ0U4{O:ȋ M}{A҂}:fT0^_^^Iذau v_\И]!VL(=žOâFE\yZt>[Ɗ_{e"+''aSJ__XCCa?^&o%i4`MEwC,!_]x~)F1~Q%Q }h_tiCJ)6-y#GD="C RY@(lb*d}$͏ [MB;t[p /}MF9=꾛+:zᇣ!a~,®;?NS'L7uMe=teB?n,Xo@ߡW  єMLu;,oكk?ΛZ{w}I_M O>DGlo:Άnf;̗ܿRӠ+d;=b8y k9zDb?0lY'MeR$H&۹Wkqb F%,s y`ղh*v5 YB꛼Q N@-kP/-܂} A$PaE}dtlI✕ĕÄn/ L/B(Cp- O';[#(}1X-0VgE蹷,bRsU"joa!DfzdS6I IؠC)%[nWK=e9dlH`HH_MB#N$@$@$@$@%*a @W @հ:&aaHHHHH`RD#^Ҹή @Z6V"    ,6HHHHH"@%-lD$@$@$@$@$ 4XrAm EKZXHHHHH h2     H RTi.{HᅬG}6 9sfz(q9=ߩ?,Sc$@$b444`޼ywC%#T)HH`)Q$@EM@+wu~FKQ(;O$@$I4X2IHH Erm .ђ"G' (]3IoeYs$9݌z+ 4% ^+Wi|ӟ L'EeArembWJܩ=i+ @cmhUhF$@$@ӝ@q)gc+ʈq/}466fN% $E  ʤ\·D"_zkdD"hʀ(m}fC$@$@$@$0 Pϊ 1YP] t[b .@n,i~n#}}N6$ύyJ$P{{k {ّgm9wyIiiN|az36z|e_|c\X\ 7Wgt.kjgnߜYQY0 K얠mB)oDc>lq}.{9V>'lŷUD$PPm#Vvn_a)"Ge֜h{J/:qO {],/_[oŞzi@+hJe1Lځ槶Zh ;\Ԣ<,JsYL{QoxWDNZ5#6AEin' Nd UGʪ\'P8 Y(|8 ͂l$(fm7cAo7Ŭ{+z% x83eLY;"R KXƋbD[u"M@}|MChA҇u,²u=e(C^ nBxwz M ]=A<"Ӓ[n3"\д9UMnbjÀzsL;ܘ* 8Txtj;їPU9%6Vt~:?[ksފ #xj+&o2*“Kqx77])m1v3;ǬL:oZ\'$*57)^BJqyX1Vd1̘y܂*W87u*vb :Ch Zb*XnK{eF&Ewwg#O޶; e]ek珚Ш(p-~SUDoHTS,ux˜z =#mߌN܄{L~NQoWZ@7c]1Fn};p)زw(fyTOî}Ch.%NYnBT -mƒPKoDVG!gư`;AV˃ t/,֛cE"aR.p0toAͭkkI7]$a}WFZ5xL [^/ j$`4Ըiz_YH  ߴK,Bu3h1&b{fܦPK/[!ᬋq[feCX'ޣ.;>乜{}n]-iSg/"BGgtu{ܧM`gqZYN[J & d|3~eZ 0sW݁G<5|uQܫ[asE׊a13:KYP󠛽آA`y LxJ݅gϞ&&&0k,w6IH )gΜy\7)XEXh*++~X-k)+`*[pC^*$v$YQ8ϋ a$ K@d}ܼt  9,gDؠ\YXNC̼ O# S/, @)u2. $G K_ON9"   ',멈|CÍJ@Q0P3     /4X0HHHHH `)a`'HHHHH`4     @   ~%Ƣ88181yI!     ,9FHHHHH!PTa Sۑ%aɷ%-`WbvD2HHHHH J`c۟Ǥm`ϝړGlHHHHH f`cOː @I,^IXTfM!RܵȖHHHHH5g%>+g70ԁHHHHJ@I,j½Ϝ; 1V0i0:ԋHHHHJ@I,$Nw+jt¸zP ڈi$=cHB[u,/.K:rvCʌHva]aobbbs#   !PR!a:+M s&'5M-0hY(#m{XtX:BmkX.FCvH~-m zkjThUU$o ZPM4(Cfv4UvÒ J5k|۷oOT ՚$@$@$@Lj0bY1&[+'!c[֮F(ӣ}81TiP^HZ>GX4ۮ:ۘ0m O98^ՊNfkyC8>4U8^NI*6 p_z翀hzj|GސS#  J"ècȲ0cys ._IX qyvXxM꒐6.l(M9T=vP^Qyc">w[3!1ZB=-c(:cm㢬S* <.l5iUlֽg\]_XJK^𐡋y3 ]tXʛtmKuёؼi /Wܞ5ef'cO]1w&Oz:,qnaǐߠۉvʹ>:kw*l~RJ`?jba`$>x #"hî}Chs}UT1嫱 -mQeº^4o0A?9 QW=jkQ^Vk(o Q70x{z4f^iFˬY*oTw&SI @?v1юaIfVڄUƓ5f` G~y#L?l,ò(Ȑ1vKCGY`>qOE~2%}k6ca?yKUJY(h{1v뇻8q :W-1VnF{ v4ڊ#K7]Y H]]7_ 3J*$̞L/7V"caC  U~2F12o)Q^dQ֬f l 7q@1SdP 6Uqtd 7 R vbzKxPy|cQF}~FɄÒ2XԗUBeHA)*$0KXW=_,J z;kԠru$Mqܘ95v{WQaގڰcFy+!\,N%X sqљƷ^^As;TG*|Ay ҙ@ӎ͍-3gOG15lDb]bOJYSF|FŜ2 ]|e]8^חA(- \4vOԢx3^Ѽ\!r#Hİy{L6`kSiQ~ہxFކ ZxԶkbix" *ys3I:^rM;a|UG#Xh>`뜴nR ko8b{ўFQ}G0œ hgwXV5jYҚâtωcI=.z&K<,زj/b#ʲ4uݭl^an3J*ѬWvP5a<}UhլE=Z=mXi/%?n>픴ca~PMAHf_`29/.amغaw_;hSy]=(.Ȥ޺܏OxD].4/^Fv^ό(/Q#E`ONO`Kٓթ ^ߺ{u2 3,[Ao|ڷ;ϲejlo]WdCaޗceqt X D5.őp@O7tmè> ?()E %d>Tbȩ[=y0.P,+YvXcVdS( 8{??9݌U K((ym9[!V"/|Jۼ8_q:eI  ˏk? uRMX ,H_LR$A 78wv#ƦGakyTEnGqbNJ*$zpi<>[m+~?ʖb?8eUDž$PwE:ky\kDF׉=6tcm ?SU;b§8 e& >QqMae*⚜ B9Q^=߬lnvABLe9u{~OtbIHy -O^˰v^߱yؗU'rW_E89R^>>%gϞOLL(Sh?Ě5kw^>ek󶢜Jd 6[7y>53!#Q*S!H?zX 4# ȔZSD$@M`1642m p,yl2]FzIjEju^+,M$@$@$@9%fcNC G$@$@$@&PRe g$@$@$@$@$@oGG$_'ߖ_ٕ@,     lV+^=&mD+~Ԟl|     +$`c!l     VW2V&Y>}]5چ$$[.LNP.Sڪ#D =޲ڪe"x;r!  ie(+DY)cFMT:Rވ^ 6[j5؊>w;<ރZے2ݨlKh̦^M$@$@$@$0U`Q}a`Iۆ*]O@ jj Q[ *|3z{Zآjص/ Y$@$@$@$@&0 v{ '-$V4(aWv~,ɑ˓P)3,*ViɏDcg*S>[%ۆ^acT+34pUES}'cxD$@$@$@$Pt"Q^i >4Xk2uףiǼ4T4R2's~KZ. cJYA<۫СRݨl1B{v4Uv[:+# Bl7#ý\xxJ$@$@$@%J`Z,vHa1ɏ䃐aBF'f-qG=FC\߇؋*v5BMIΫºdwdZt:AyqB쓊EꬅA21PkBkw#:ɿk1DL"   R#0 5xcȲ0cysKqdE'*KV-tN4]khK}NKTl*Pm啻 < @ibfxX9+6VɏaZQ.YhÉArI xU+6eQD5!    b&@=z{+>Ɗ,{<>z 3f7kax@6HHHHH`1wB # ̚GᢹxQ9îzU ,2-=û {vZxui$@$@$@$@$PDh40V"caCL*TS#jI숮r46ף֞@ٍ$»jSuIq$@$@$@$@$P\"s{izޞ{B{Y=+*ݚA-XiRo(6ǧٳU ̚5kJXHHHHż > 1VEձڽ)$@$@$@$@$@bSUTm>IHHHH2K`ff4a%sUl}\YXNC̼fIHHHH `1%4 CǞ- $@$@$@$@$@#@%2 @,!M$@$@$@$@$?4XǞ- $@$@$@$@$@#@%2 @~%~Hd뒰ے0+1fu HK X1i[&Xs EIHHHH0$̋_%`ct     d `Ic$gL*&jCumCUg-    (t4XR!q9+_p0yy$4Pk<,B$@$@$@$@EHK &Y=/IۆIA6 $$$%qX0!bxKDԿj#NSy =*_N"H4MB†VJ4 R-BǴ4n$@$@$@$@$P h2J*$L|ż)!aΤfZ]Qcòӭnwmr*Z:jcHN77\ ]X'u, V7bF @!aŜbfM~,'HBFYzǀ@/yJ<=}JkȫD߉$ T@oXeGa0T%5֪d`cq=jku_r,qޙdd wB # ̚Gᢹx ҍ'W4]۱}W%a QNpc x4 IDAT@%HxXTplD+P!!\u'P`m9%|5֡kRV":ߞS    (@9a4_]]+.{S@{Y=+*ݚA-Xi/c@$@$@$@$@$&,ic5     wX2ۑ%aɷ%-`Wbv3:E @1c۟Ǥm`ϝړ)HHHHJC29+v~&,    (M4X28^IXTfM`CmTm(T@fҪn0HHHH$4yVEY)cF捧I,oD     a( >sV00Xmdm"    R$@%㣚8m^,縭HDB[. =n٦,s3-w 4 At|i @F `$NCbޔ0)RiM'֪z5mw1V*kݠgYIEn*Pm]؅huۅuv Jт<     AvHa1笨cX&?VNRh Kf-q2!hvգ<YFѡj]،z-yCS㽩D߉A= d L#[1Vdc1<%ӭgA^=-"7YE L'4X28G흐8&{h2|4?Wc]UgHVU! *_ʾ&lw& !LU    #@ŏL:zIcE<,:&;,:hFeSEtB~r46ף ڍXj˫úVInv$@$@$@$@$Q9a4_QUعjq|g,nMbl OW\5{lUbbf͚,V&   aU I<,M+ke @ASU4:i6lHHHHH,5e*vo\YXNC̼ e$@$@$@$@$Phdp.߁ N"    a5@$@$@$@$@$P8pdž=#    iO˴HHHH 200P=dH G.\ @aIˑ #g$@$@$@$@$@,)#    9~%N| ~]v|[><ǧ7wlHHHH +^=&mD+~ԞM @a`HX.ŒƊˎ-    (L4Xr8.^IXTfM]{\u'NIH\ @v`Wob9+_p0e<ۼT    hpՄ{9+vc`Ҷar76E$@$@$@$@HKG%qX0as¹UW]v w:e#d1Wbuީ;={/OIHHH-,zCbޔ0):w oz}mUc޲x4?SF|޳߼ ފ-~?Ǡ0ݙO$@$@$@$0`(!aŜmcŚX9Y" <v7a=/Xb(NF-WEJ wԬT%˾==ijqcP^ LS4Xr={+>Ɗ,{<>z 3f #׽K= )&#Ҽu/IO k 7,wB # ̚Gᢹ0㡩+E+v ?xLI]Ks zfB(e /*K+a1!dS l90\uR:BlU?XUW=,Yd+ 9ar-.&\<&kcQ`%d?^s5`…ٳg5k֔d2 @K%WD~oO~@ROK.ƶHHHHH `HbE:%r96E$@$@$@$@HsXr9(e}jrFO)rx @1ϴ56E$@$@$@$@O!a?ԀHHHHJ Z*F$@$@$@$@OK!5     %' @F!    E     B#pp;MsIENDB`json-3.12.0/docs/mkdocs/docs/integration/nuget/nuget-project-changes.png000066400000000000000000000741521477615276400263110ustar00rootroot00000000000000PNG  IHDRPny IDATx}'[-J,J[(P(FpT2Cbd8$j|ģrrRՔ.AN%/D  0DY @9ILA$geRر{F 8Eٯz}f 1#0#xF)`F`F@ #0#D(19#0#0@90#0O؁ 3#0#p]/1#0#ω#P1cF`F@9aqkxymk6uS7|I3#0#f@t.oZ}a͂†3#0# ;< o;1#0F%}"/%[#0#8!+''[)Ww4`z[y<̬aG 8+4hT7)^d{"_fw1sV.Ng{(kߋ^yUIL`9SYcU1'JrC(6VqnDn}/-b{WɩbpcDvxҫx{Psý" !fqYlm"XeJIq;wIG9#ު;P;o6 6m$5atG ?T^F1HN2C iZS1As1 :/YvtGSd'^C"# jߋ^݆5$x?r'25(6c/X};2oL?*?)DZxk,6$$(缮!Kôg/?c ]{}6b8^ŻGqll=,q6]qF`{eR.*1JxQlX[e0'oMK'ǻa⣔` 'x~xS'3oYZ; ~jicO^il_Liz2yE3xw}NcMRB{~t''f3^1D+x51N1`/w-4]dz;j?ȱ{1<~{A F G =p^D髠šwOE'Y86Οyg%<*xro#"FUQŃ,rxSrS ;Je6Mo 0jJַnU%PP(uqaظ]O's4i?ƿ~P"ѽG mxZOşL`0`+tVۘz5>[R1<{WWZ-hc0^"-#p"@рg(30j^ުgR!o -vd\: [y{[ѷS8e RR8z~)jQ5dEr`[QJmnOww)+RH DZàvxRzi8M_po F`rxQŌG(pD)@van?ҳ s gQrH G0lQS #È`ϱ藅wuAi@.Yɧt{/Qx|Ӟւ$8Y<ydsb0 \;<?zrp}V&ӝW4~5瞂|joEퟘf^v |Ty(%S~N@ſ5ꞌ sխ[yb]֣2!r4mR9ʹ?9S8rt+ܾi6̟kkuzG 6^1R^ @ 'YVJ/V8P[;oFE ~eoq8"S5k(}ehpyu{B{c?6`-mp]Ut D^s⛯WX.f0#(yxqUl*mOʣxu{ `ooF۲=49ߌ p$g'R&'waJv"!ҁ1RQ?/ ihxnc}@q<8i*$Jeq |Y%y/d,J131@Ě4k(3"QX9@u!2\93X3#NcCn/ /z`rwTDj"ĢЮ6_3.}_xd(RH)9i@[F`F`\sC#0#IޚfF`F[ xN-틙(e.G=r7uLu|*#{'۷1̰hIPFFdzKGS$e #@ǹf/*/ Ʌ: ^\jZ+Wzd@97YA)EuSY6(눏%ⳕ.~QDeh0I!Sv-b«TqVP6WŷpBT_Ѿ7s!I{@OUTf(#'lE S=YvZ#PiBrR#wzNuO HQa PB,FUC1vWwp#0#0_%0]w-ny%ٳ5>y><FCG2'+?k| ֩_ɠ0F+ƀl#J$!O0fRDԯmA5kgƳMS]_}w[dl0*G@jkOESƇ(e(ǑM@P!?>ݛIr`/{tq%AFXTϑsEtBi.^_G1jM]F  t>e7@|s>Z8ki@<e&U׿a$Rqf+b[S-f֝U9cR8O6~Qǂ~]!/uINRR^ a:FX4GLcA* 60׈Te6! 6?r6CbQܯ %Wnׂ 9ȶʳ9ҙ{+[F SQL, S6^C *NBFEK̻P&iI"KADBT )A[ˆYhF{1#(s̀/NNs4dF<+5TCqXG.0*G[V`}9P"rwTeM"Z1CL)1jȘ( ETDxd8pFK2(TtN f@lYy z -[ILw^Y8^CIx Z=IiTV b`_q'nT̿Հ@oӴ)xtNEFXfZM1~UTx$'a;Ua`ZF` !j t2sW"D՟zᷚ 5ܱQ=*Jyyq@9EK)L dȪT,MI΢Xjp@.BpJQxK"QG,v6CC Tb< 9qt)(:ro wa/EO5uZP>Rg5#)R^WD 0WZx8@*7g$$6)Y$Rҝ}VFGxu9k-ˤhZ4x`ԟΔH閜ca^B)zGI1t<j F%q:Cp*-EN/SKsu1w/ZDz2/k̴suJ8OCϻR}=?Sq*Jǃ#"YȤSy꽐Y2# (Q9H~͏¨n<00Q̮2yFDEuM-UbK嗚"m' ?Br."{F`F`= +&s`F`F`z oʘ`F`;P(F`F`Y*cYMbe#0#,5ur;VL0#0@6Ϳ>_W>x5.ϕF`FXv$jvl݋_W/w0#0F`ٿyc{v;{AD("?F`F` =k>#6_{g"F`F` /Ҵ{ ﺫ?F3Oׄ߯Ϫin) ]=nB n~u{7X4c{gW|7Ha~%ƒÀJ&ūwO$rvl.fΊ ;}p-{ѫ/Kl:lp t8;1l3H`I nLkEcҨg  ҡ%Y{W,c'[AsWJ3W58gƹt6[bmZѼlOOW}_ānj/SToF`=!PřgbŃqlxe sh~_j ̝cKaN]x q IDATfj2.]}iA'^%Wjjb ̽ehPOߏcr†1׭i>&i\ܮe+nctfAn9u ==gYupB߬mHkR>LJ !O)<<=SxwL>|>y'>n0[sǐ cpppa&Hq5\@0*1'`,=1jM];Ѡ)e`H|4pאsqcWa7})ϔpO ۍaÆc$0:8:n`6G,V3C`VDmu|$n{r>&C:}o1OQm^:>D0vdޔ?裧~`⭱KڐhҖ,m,ڿӢv;xX\ 7:wA|~8M(z(n2 S p6]q˶ʳROIDHP+brWvl)㕧ԞKiN^E_C< $NgȔΛcO[?wPC$Z}ZTHtIE,'Μ鴌bPjSjVy4Bt̜; f^ǩ<'|&ΉG'JG/_ajt<} M̾zv 'f&f=?:h/}k"] ǚ}ls `.YS W_5rؽd#p#?IJ__NPYƻ'rЌ",@hY-E7^I.[藻u(6#ڮ"xW93AEiu$UyRFDV`4gd(>1q1LV;PF+b94j1[أ$wQGQ?ܲZd#` @w;DMR7]UYck+CHVTҸ-v L !/\ƉS8eƉ׻JIN)I4vKiȉ"TcӒۆpH5/9vvF yFFqPï|<`BQ*i6tyrOMM|>d-1w0)Ȋ9<Ջۤ%' FYcJD±L*e?fΘJoz-27;oPZCwI3z2ܧ=YK̓ÓF1$nB In2yeaBdWsFzϝ>V/ A+([ȼUuiHVU5L7 ) Ued1{']V<9P"w8pڿwBL ^[Ɉ.;gQݺ'Zo0mڅn=*Sj9 _}bYhQ"G9b'C~G\nt7نszSX\Ć+F 9w8;' wߘRzAx4*(]g+[UV%y(J4| h#:nϊz=T8NiY'D9L&Q$J)@Q9XD`[m?}($~Rq+zD#h ,8)UQr9j믜ښ,nv"zN%S.&rO\OYt;a`":=kb_y|3vN`B?ߌ跥tSvÏû͈p' Nrv"ulѽ}q HzcwtE<ޣ Eӈo=}L]DQqx 9zWpx|Ҋ +'ǭ2(g("rϔޠJ`ręvo:s)71 CG=/fI|զy|A۸Q]1-R|8vN 'vp\t E cQ'"O^?:4-#0:E>:=OwJN-KbF`F`u Z # F`F"`<_>¾rn[ˈ;bl͊P xN-틙(e.G@a7(e( ͡^aDyt߬9*"IːqǑMdJ%Y?T{I)wȔBzC|, Jt:⩬lj uP(Ͳd4JXʊg)QB]LxUr8MH(btt[-a. 8EV-6JU {a{a ^腝,c7RͧQT@q\:ݍ"f"O*D/faՎ@ c$@cP"PzCLc਼Ktb iZSiyASvc G:磩LOFPf\un4%'˝Ԩ qCGLe1+@AIaoGAԱ_i|r|RN)q8|0ׇy46tΉGN1].FPG(h&FR`AE*Q ir6F.2 kAȏskϷLJ9dJ0ӍH R2֬AnC *HDQ D7Q3/|ɤ찑ch[깵o2nچˁ'I/.5|CEf4lN558A$G~Ndw)egEPNbE91~WAC,iYF5C݌"9 pp+{z/Etʈhޤ.d5e/D6H9-%R,89ir3zp Y) !9YURE>]F$%@呹 U@ ,Zmig qMJB^zwJ49GLk=6P~?D=~|kN#֓8>3oMUk<;wcF`]e/{F`FrXޕ0ϔ`F`Zǔg0#0v.3,`F`@c3bF`ˌ;P`0#0v11#0eF{>$ׇdxF`FXa|9Pdk<w4ɓD9#0#^@ğ:ka׮]`'`F`u@mD׿ƥKz }n绉JM3#Ud2L"sW4=7Z1A[|j>)>j;n(N4NO6J$ۿogƳrJvad:P+=2)堧%LGve1Y!ΔusPm>S雖L=kI?j҂U6L*Y2ug곲2"0GA7BM\bvUD+ңP6P |M r6Мhڇpjlu0r#,bcdIDdzFTR*종ʨsSHĘ?̝F5@ ̕k@ě o)#26 mafBA\d;6dz+P03sUeDRYLg^c$.r( M)A:d` ` ٬;ZVyP(5HJYn,فRNHyiCH8q8O<јƳs7&po;,t,e*FݥOc٬X|N?# TI$2(b!kZR $VEr 'Ӎʑ1(u`MkuXй.K AdAQ]ˤLc!NF p@~:I8ƌ5EPep6J B|7@snOP5\wimĖsT4us`U3 YR2+6>+=+^uv̀(?h1-#0#|2]`F`#+tu,`F`[0#0#vc#0#p#~F`F?@nj9F`F G+3#0؁s0#0;PW gF`z&Ϲ?~F`FJ@E>-|pڇѣ#DŽ/;';FLx@G2'W/?LNJ$WM7Z1g+^dTIfvl.fΊ! RxV@)FfX >&laǜmRu0Fo>]D05)?j ǣ}(\B@?O/~Sxyj>}ja f--x+2A|,q S(58#jW7P* %Rjd4JX"]|nA'^%Ӧ7B}V`KJQUf=ł_T cYr"oOIɛ4ajȸ&G=GN1A'}󹳘ٶ~ߩvx0j!#2H(5E0*h uXi̡wN2@l2lb]F y'@0dݘ+8ī_*86W](MlS#uBAKr葩,f%r=h3"9c2fQV@?cA.Y)|rHV)[11sçO(6çc&)5֦"aJW>(mVyn$Mr6f{ZDPG(غ@De/ElC4:etDa%m^ ?@~}V_{eR!Syn0UEbЗڕ!&'f=vPtn8dӪFDH&忼6Mƈz/|ɤ͈b˱WVxo !0q2nz05_$)f<9@C&GYs 6 }E`KADfle{ IDAT)s6Xorbz- eT9(?,6 ̕UOw9x)SFD.\zTF"BIJ(Hъԋ4UC=8"HT".#"Ydǁ禆V5 Pפ$eI[ <gO7@h8'm8d ߆C}`5l%x{)4ځ8HfCx 38V8>3oMzغpF` @wSX6+R2T`U+I,e2Z cؾpxd@h+֍NuQB92I ڙ!WV⌚9tnfR>L`vDɦL_yJPGj 0-B !"ѴQFCf0N6*\QvU!B|J<:'Nϒ.y:~zMXAzDE[dzk"3PJp@GZ q],tN ff٘@jƸt畅54Wj I%F1KR`@ɬCZs2ž(}fM=0=@u--֖X0g;s|NYZ{""\GN?'%"!h%"PNZ`<;F`FXy8ǀ-`F`5;Pk쀱#0#ǀ-`F`5;Pk쀱#0#xzRe F`FX:(Rm 1bq1#0#Y ٿyNB[o=saF`F@!9l|>|B4#0#9|9P*m)ߩ}=j OB. %rid4JX"]|nA'^%Ӆ!w\5el5V+@ ^:OΆ, DF f8:<,f.6yʄ~pwRͧQM $:#~B?sg1m 6+-#jFP#q< "wa EkÍ92r$&&!eb!ŧ\tGA'^CNTqD"4[**QFPfrՒhS˺ײsoaa=iNف:~8t'ǿ?+=2)͓)N7J"1Kq ͢n-Σ1"h$$!t ъy!DkLAGrE tI!ê#BEQ#CgkZȩikAㅿ#zfC:hf{./ O_Mɸg7O㪫9O/ ۛ L%rxe^0đ9!\s+ kEI H=MϪitlue6Dvc"Dm4.9f~ V1Ne0=ɲF˭οq[t>QHt[m0o(o"=P:q m 'q|ƃ,[?i nnq3mɌfq6 qjNF@RdL@Αp2DB@Q+~+dᎭ Bg+[WV#WoE,!/2u^R>*m% JVSx@!'YHd*R~T-PTsl:2ՒⓩUNb|GT4\+QE=-(.% lf>JۺW@oi*t";L\莃"miQNa8Ki:?QDs?šm@mRHz`Ŧ;vȹC޼NȎ#("s=7+q'S14]zxeP B8%*"$Jeq |avImE;QLi ZTJ5dSGhvukdx!95}H2j"KJG%m#E N>8aK'QD:FbeO(Ge%QۆHő=Kiw䉟tGqkXNjz UIWg:v_^G"_kNAS*O([ޏ S ɜ~FXg08ҷ^FpEE>֯~+|ZAێog\- ;P˃3kaF`\<詸OZ:NԦ,ѫ F`F92#0#y ϫuL0#0*DUxP$F`FX.U@Zݶu#0#,E|ց"KίYX,`F`Հop ^L0#0#P:6[/]<0#0jEE>9_>(>fbF`F`"ف P߽{o3.gF`F`#ˁl_ڇ{"'px{N)| n~un|??8m_ŰiD<ȯnؑ=S'NJ 10F+ƀ/U[MO$rvl.fΊ N`C1\K^j$LzvL #>F=â9*Τs)/'hvxk\(Oi140UX&'E\g_ܼah;bm1w9ETLhd9{ M?Ki?5]Glϼ3ϐsE"5^BMz_A@LC_煝d/͊Ͳd\(IW>iA'^%WjjbܭŇ[Kv9o;GY$u9,#Iٽ<[Ej6pOjCs8*fz8;ݹ4oIɛ4A:3y܅ϐoʏpGw΢uKr~Wy`VoU;0wlэ$"al> 07 ~(!Qk266$FΧo#A'^C"# jߋ^݆j_Ć+"Sף$nl׵[1Q^ g`+߽ߝ}㭈x;~\:>9ہ'ID}e7}d}z~[2)6x0K/ `mHտӖyEQ1~r\侩ˤuG}Qbߐs޴ p:6zQܵeb 6A-p+$g:#(ˌtV>z/6mg-ROiђ %UGYW%}#=LYO;nniLFΜ 6XwFo()dϠ1y:# bb 'ȟ7Lw;*wf^ǩ<'e&ΉGoʇlҝ9|ҝnjB{~ta: 3xw(wl÷)c~1h_=|;QfDMgF4?L:=9K&^a)|R=3yP tTjخ[F`5!@xOiI%J_(bmv9|dF+Kl]Dy㥨MD%o~Zܴ%>iFwB֋] ?{2 )C"L;jEVMa?A,&Wfk(eu(ZE;PԸPoڏ|8;u ߼m|XDy.^7촣N|;E8FDN>7{`:F`7].62>o-cft_~D=Id.CF =YeO"a<L[X7pC5OA>Eoc[";% #RNHp>4Q3":qCz*veu-6.,,V]F:^=ב2ڏ"6_Qi5SxJnWK<f "c3֨2E:Jʦ[1mi;}w^x ?z>#iՁW<]X5U!ՆMƟh9X ,E @D~D^u;v2:*Jylwy(JiO=Gu^ݞkSRt%M_;Ż9Q|;q_0+ =$\٤نG^R`V"ܟźdgĻy6&Jmw#1i*$Jeq |Y@|}*4AhvuRxM!Ai slQBɇ1պSUnn,/0?lwAiA:Ow~h[2HO2 :/0MpsO/Z9z@l{k6vSVo-S.-< es,/m?#xX,Uyjő RLrT+YsI,03md{W?~CdpPl|]2+!@qa%-ҮJ!UKT^B(V؇u@;~" jt~3g'$g39ό=x@3^<~iwMX |.dQ> qЭ£4g@]oZ}svP~sΖ2&.L6iy ³ &`L M].[`L 0؁;2&`L ZE!-^`L 0&F 8@v=L 0&` ~eL 0&G)<}OS}~{ `L 0&@TBsVc.41&`L`p o [`L 8ϣ@rO͢6ԕֱ|ks>Rd+N+": mqkW+ &6n0j?^D)+ڀL)h2ڕlq_dj<~|+͍1/zױJLk!혒RaCBծ(ijFQɕae$4ԩYMBEƎUb9DG}jM]XnU{ܜ<7CҰC@,S}Le OZ~ ~??_7"SđTC8(jUYU~_2iNdߗv8zjp"&C >= u5}dPgg^i:xzd:0A>qeΞ*9$'._ckx=y5x+z60w ma9ӲQ?H'CvR1QkqmG_W:rgEY IDATO's8O=5zN}_w:oь#FέaOJ-|cބy S-cedhS@ GHV뢧\P҈ @JE92 $oArOz<:J9FI3V7׃!6q|â`Ge!x˱0Nu%H"mN5^y]O22È_B|JgZ떿3\ȉZ~ls3P_ uN%w$ۨlgd;lXf:R ReK;06ڕucegѶJ-6 2ڗX`/&eѥo>OC޼s=C2e .yJGB]􋮁q 4u֮}!<bu-2)Uh7D/3;v35e ERZ'WW?Dqt5rBd,.hJX Epe%ƻ3`Yέa+Li8{S4 `]>v"wsspZ]gb^$V?Ξ8VʱJy6v!7^} ک(vAUw >/OO_sk9c7KAQK}J3F#ˤ-Rlt"#J#|g1S4aM[`MK1TH@DN+zI >5?c(^Q!tx%sΣ?"Ή_6Ll0'r1dKQ.#g^|]kj&\HǾIh! Љ^4[L`Cc6($93uYb]]t9b6vq\Rw#[r ؏ _Q98R_}uP5Ҁ:&T(υkY,$EOTTGgK z+9|`^?ĖJ}Xր)"MLI̬oTfR:sk80/wȘHp2Z'fR?VJ/V\dW'7t}_v^ lE>֬ԍLR}n{[4P-k:I$c8*`) 70kރѢ8X7P3 5{d?#m7Fk]ffKקnl t{Y+=C C+[}GxKl pQVn0> ЏL:0,< tz> 3cӲɵ3ۙWmT x~80KiȰ;Ec,u 4 @sD]?^|ϧ(E1'hi{"tz8͎ xv(4iH$knIKqMS 0&&0MZ8;0O<mJNjWi2ڕlq_dj<~|+MـNhcU1iXIn bbN.;)/~ɼڦ9k9n .C}4 yTCh+2HK߅GN#ԺݙK@ g:xW ;5ycAJ>J(2U_';hM~ecZl<7CaWMFEeS6](+viƛjWm;5aZk_%`/)L`;{~lzA/ IW&< a]=Үъn_PLW=%jU$Jv[4NskX[VLa<"xS@ GH뢧_u'hFMHlPJ/:#eH)"C|4V7jt4W]{\&u[C|ٳ!ѝ OS}3MKRP6bX4*CW䰮˰6 H~}|ˤCAxK"ȗLQ\9J\Nk6H&>;-s0ԐEhtPڨj>Pt @.~'#=>t_8{=;P<͟|TU,ݟN#|{=x@aV#ҝ]ԐۆmB)Z{Ҩ)Z&GQc5B5ER_ *0,nU`٭5́W:sX;ᡰUJQR_Z<̓jȦu[lHeh hk7A(b#}l"uFޙ"s[iޝ hdɢ&"?# r2E1mTdDɭ2GQx&SM3y#m>4p;H@D]+zI >5; 1H/Exr&Q<0f8'r@0R@jƌ9~Q8E9Xtƪv1!R6Y`KxNMIԠ털S1B-%{Ч䙯7;\qS9f⸝ƂrHH텐M˾#WaEm8{Ny=.:&kqxjkY,$EOTTGugKQ^C}RQw+.IU[D2=CݤMfl{Yn1xo)FK*~'`nbsͯL`)8Ů @D:1,#VJ/V]dW'"PW]AH͋L}YEԌ;O:ۺ(=vA<u-wT5oH0C G7p~5[f D"Ñn0#8AmZ :(E~Q t'/T:fk9D@$62P(SSIvaf~d+b~Si<,}("Az]_s?aZ](iCrdlqZ Y6*s<8ҷiyc-t0/| oKaSԿk%&^x~Y$: H_k4d\ Y-%@Cx|KӺ<Խ{@N-N 69U|YMKqMP:0&0 tOڼ)Ks ΐ gL 0& L.)`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0s؁C1&`NY?Bl`L 0&0sIENDB`json-3.12.0/docs/mkdocs/docs/integration/nuget/nuget-project-makefile.png000066400000000000000000001537041477615276400264570ustar00rootroot00000000000000PNG  IHDRsV֒ IDATx_׽K~FWDd Gia3!# ޸$c=Ll"&nr 66@YFt[d ̆8e,Wq]^ߪZUVutt|Z~VUO\u?      cDr)HHHHHHvMgZ7·'q8=!J[+pcu^Ƃ ݟt:KͶn~lp ~3  c^;5Ƞtb&||fWu:KNt jYѣsht|挑R=j) o$uƒWŷWQTJ)_[jrה:t\:Kh([<=VJ(5ͲSa, n'㙍k4=?pO >&67܌wcIu@B>X*maEIx Nm n N 3z jTR]smU,|YZǢԱigDMFxESjγpQ*Ϊ]cIHHHHv7!w<K/<[OK7qC3~(Sf~HahÛRڽM4Q F<+h,%Pnٱd] ;)ut+~2Tj[} S#œX,SH߹vMxL$@$@$@$@$w w8W(N.t¡} Dʀ5vun|u-\Dy."m\`0u]4NI1]05 ֽ|c4N$@$@$@$@$0Irj{v\ls*7УJLat/]k^f3&EUeWۥ3&,Ȅ*ZF'lLJ%jbCuGF1W*MЍe}+ Z/3@dQ ~gP:-CL =uSF:պ׵, q<$     ?>ӷBLH$@$@$@$@$0F:vmz$@$@$@$@$@$@c       8v/{ ps Y exev     v<E ^&xT@/'@nsL)bC}Z(TMsnoiYo_V'   49;[WpuLpS87sF!* k.\A%-_rхf9x^gLwwóa3)iw7>$@$@$@$0n_8{SG|>MgZ)Qz"a}t{TFJ[+ptј+6ۂyy+?%]qrJ0XSa:d3( `8KXޅ62   #GS,pCKۖ=-v.PN;bSEKZV>J1ScPS; s 4^7Uz{誖ח)71]ObMgMdƦƧӚ6j9a%LC6Fn,"7\U`٦"e'$3bjP\V R;8 Ll߹O=.KJk7I^xN{WnFL=;ک: ejVWb,.c[Vie,Ou4F_'X6i66D PWƬD30;e qbn2:ESӒu7 G6m6~hnb+k.",/g+ӋOWE뚳s1 r3j/x;-^TtBlڀ5tüYw rN0(S<FZ;mxTvUdvQTHHHvH;76|o?AU^ xPk?zJCYE,'Qn s2f⃛YWQT5wu5b;*pތ.u;븪Fcq65DW3ZQmq*^[7JA$@$@$@$}'o_|ӈ{LOͿ{ة]T[[\eHfwfMn uò%WUyV]2tn9 .uWg="W]c$]u]O׳\G0㪭 ?e_aHv]tھ$tW֡~du˕ֹ8 1eipi$ɉ$?tMMjB$@$@$@$sF:vb$@$@$@$@$@$@BI      ]JSmwci L xN' RxR,     xN' 6 K炷-O2֥Iu#NxNv ,ŞK óE$ՙa*R/GNBB ZXH^E u8hq6f2[C)7V|ko[K,i׊vFdL(CDuSD~û'I<dXʸ ru3l5dRRwR 3ϻ8{?}>sY:8'׀Oe04zUN]J)]=$iݬ$#Q|ygi)3X*;.ZUr{NfъۛS{gNFZ _94gZW5]rũo2S7og^gkǝ:P;GhŠGL <%:g @ڳ>BX'~״f9P˟@az*xkC ~etۏݕ^DD~ 'X`˿77 o Ԙry&73;w7FyCz}doJTCM7>H0-fW( !A6]63d.(A=ԽN5 2gJvG_(=54|ϳìf0p~ 2(by#E<ܤN,ז'͹_,ןgȑj fV:s~y8_ 9|k[yfY~\}!"s&km<Ӯ7o%MS8R3|އ{ǻ7k%ݦb0wlςN҆u(fg+6<,.o`eɒiؗNdOx6&SSRڗѬ]y]LGFSڴh=TR~StQ͸ؽ?ElKhY^̴:Z0rwo) OvnofF,@˭nIxmVʮN֪E\r^Uc\9jޯSwF:8weJPW td(I^~8 ^y8OOb%At"AX'(RZD6"S} 7bu٠KHQZ%_D=]T颾_EU'4S@g:f4~+٩F%( vE릷R7u0$Gfb=t\N?8o=] f`VEjϓw+t)YmVPՈ9T\AF@zafs96ڳX]PqZ)CdZz+L̗ժIEŖzu#(^Vun)?Q,I%Y2=fD4!&3vMOKj#Q_gN! |Z6K%1ytL0}\>Һju!3GaY!0GC Ljo0^z!f{Iq&n,WSG8y۟ J[DEQ9dJ,&| 6.7˨-dS/D1 j8Šv"؛ƠAl6țr &x%Ӻ"Gm2%|+h+/KI ,꣈f,`an=)FcoZ$~PEϫd5W CE 5ejL9K mY}k m;vf6&vz ~bQKMvd:Qp іs=df>ɽZ/"2VA_Ӄ3sKyuyr3/x;_k>xwٜ(g>u3WwM 5 SHvЉt&䚬Q`ƒPuzziʴeLSGLJObbpT~ba*feaw#<Jtg—N1d-G**clן-n"eʻ,q.#h?]+̙9]}$_@ї*jzNCRfPwݞY}z|&w FkڦK(xFaU'x3H;76|YwBŸ{!J٠hLOQ1*2X!7N ˤd7NE͍= k&%o#;U,ZE"m6gPZ*4&S 55Q[y6Ϩ5PVnlԮL6s CN~=M=T(_uaP Fʵn"I?`J1݄lZu`DF5xRlmTg+?^5a羒R3Bendq ;f'HHC+5=*ფ(m1w?[#s0p EcYHȧxey:yz0dy:g=Ol=Zߐ,S/m(us >,rPkYBߦې@uY?0 8LT>y= %דY?zxݵx>Ynk[?5d67*Hֽz9odiuiir1',#az AĶu:f[=} צ׊O5Ҿ0_Oq ֗|.)9ڌ`އv_.MalLcfZ=3ׄaɺ6~ m+<#3]b`$k_3-t}]_;_m%]FKi^ GpG =A@viꞰFN]X=IFXO wah|dUl:=7L7@Z.m98IKۙm^T}K%ZIKgx\&&J_J4 @w 9"K9ڽLɲ0`GUK4ef.Dyy%|jkejSQ5{)H`FsR Z(ZX'ֆvH;\*ج;ɣ;vm/VTvogȩ T8J 5j6B-IaJM]1>>$ɆeΛ/SpolFAu>F7(KRoCА}Ec.;l>S5h ѷCi5=16xPea lん/f6#3T9;[WpuL}pS 870w7&=\뎙8g_s偳&goE^ifޜ 9XF:9 g}I3)"$^ JZ !|$'F*jq-1ٚMg|ko[K,iJnktL`G)`D3#pN =IZ^FN_D:P?_ITۗ^FhI9:wq|8~ >sY:8%?ǁWd P7Cq-uجdĢxVPmo{7 i {)p룼*]a}d +c 7M*Pm6p6V9:?too;L1n8k-Tɒ۷bV@olk_t 2KNVs3"wc9zPZE5酘ES3)/2"`>v)(b66VkIȡ("Ow~g#Wrma&V.u R*n+8wznz-.Կ1dF5 h%R3n` u٘l ycGhOs\O#N8Qok*ùY/کa5whE͍= kl`'o1;U,rEl6gPqJd7a!VMf(n3$rfCvEfAny(FU}rcxNa.ʵn"I?`J1lZu`DF5xRlʏŵsi?{+)u>Z)d qiꛕpsX0ggx; y,;זkl#v*:oTXm|?\iՅ= |~{sOb4|l p&C5oSP@4.)Q}Pk IQ2>HIs#kBz^ӢDD B1ʊ\o텖epYO[G)$TM;Z!YnlD:r6A鯽3Cs/%xy$,^t=@~Z=} f_+>h Tz\ if|KgV_Tޘ :;kP6O ؚ s#>}k~z۰N5޲̶,>oL Bw4KRo ho5xEc.sn(;ˆ0 [O7׀Ab0ۡK[~Yc|f:7q7.rrv21cCZeuE T[n: ͢н 0ǸyF dzίPm%Knߊo[~}IyƮ~[%,O2NmcdZDnqx2qj +!gڟ)<{Df^FEYJj X_q=i(yXZ_y5ObSoZVͧ1u$F ^ev>m2z}dycM4o`fY>aZ3TC'Q@B/6l3l拗g%\JQz*{jd$N-= NՕ ͻPB4+zjh#-gY7:aj܍eQFҋyIY.vq{3a-O"pY@O3?+O=|SO5xkULfyf9tLVkz@o@ƅxyY#fmȜkZcϴkE-xrV8:=(ߒ/GJb,y!Mbԋ0ٶ*i:䩊Nlb3d~$/6&ALM]d>K/Y]7ODEm 4״eEi\qz5b 3_B{AXq 2`j0 6|}cC>{OV*$gu~mKomvu!Znpu'+UC[U(:Y 庫syU%sM̓m~r{q1;V5v?O!Ҥ,QX$֩d}ˢ-姷/qVr# |d>Kqb2cmA^\GCew0>g|9+dkC'c3{i@f'ƻW 0fcChjG8thNuEF?K #_f2g Az&PUVT4be}lAXH0_E֏dJNsD|f+/KIQ emG? Xi!ZPrO {S&7m."uE+Mr"2ZًZ5ȄU;3Kbm}ilq=Jތf=GγY|$#jF Ȓ7ؑiHr6TMVd_jRҎ%zDKLFP`_%G:d1۳em""lUa`p=._Gq鴩:2BU+ q a:Ηܼք\4 2XNS;m62VqjSwULl:Fe"q/9"ڷ5'QBkU:cNd$\iQtp\p=Bd^Y/˓mkY7Q)}kd5rY7Z*BƦ ʎ/[1)>Y[7nCzl"#_N=3 Cי r7PS2뙱m SffT"vh^4Ėx 0||G~E= "ul׃~8^Po<ע'<ˋRrXmOC;mǸǧO%3udi^^l_Yi&=t=\΢SNAoYfevt]IOx G6'2de'2Kӡ(<V!nk`%LS (O4’|`#C3JCŦ[s3΄~4ҖÌyT6/x%"`$O&}b (/h,H&@w 98R)Yv6X6f[숴 Uz{Ь۾P(/Ͼ3 L 5M|Z$0sz9Ps Z(ZF6u KkD;uY l֝۝q嶗PA+W}]ni3M$IHH ڦa8 Pps()HHHHHH ;idN$@$@$@$@$@$0x# <q+C $=vM$v殇.saݏؑeC"oGeJsU,st~qfMSǝ,K\}(øq$ߺ#ଓ ׹$[[$Ak1<vSίp]v%{WAo7Ba>֐!fr1TgSD z!/8*Mtj%*<ɮkګǕN82Vfk6Qdm.e0߳x]+щ2o#u6(rT: D@f;hp$YjyCj"WׁxMv%OĦ&i{Lϻ8{?}|\=,n 38JbHu<WN]J72v$\}Gy]&Pf>-}?2(oJg?8{Xʘ1keuE T[n'; ͢uۛS{gNFZ _94gZW5]̲%Sj1m-{"=LX^%gQMzI "3($kς"FpL ic,4_Zm~; ,^2,2nͷW?6}'̰qRxhU\w A˭궂sǭVI_2Bi3<̣En^w\w+\Oz\7ӆ7jum6911ٱ|em ʓX\\fCcJXtzyv?6߽]޴|JT.zySB)V0lp3,Svpzt"3g!;3Y_Bna} *;d)f[7.+NxD[i{̒y~_imV]y۲s:;|R qo`my%^oԍøΒF'1۵IO1H7؁g ˨s1iL%ps=dԪ%Fu7Qy6 SدMOO>/y׮4Y}׺>w" ȿ}?cR44DFeR㍲hE,W.R5a:; uW`zaM\ "ߤ8 ^y dF5>YS7$FC(VqXy(A;G=~P,n6t I~pKx{S &uG+.r_u_2D>?x•TxtfA8v"r˦qTżk͋[Z1:I~(dt|u=O#׆_K,/zE:RV*OklqhUu?Vwc'+i?|MbKAeO 00@.ݖ/$# |/:ڌ^qiZI//:(a2UTceؘ5>/([ Շ‚/VbG|`H1Jd#S*۸zv77ꨰ tD16}Twpeo'P{ym'^WV:&*;5]0:岺Nۑj`66a+T hrB6::,+F௥(Ǧj8Mxe#_P6ڗ,ב`W@9\;Y?j)9u8:Z][yY2L3} [6ԡɔ*ΔѬzygɌ(;_STjY"Dtj8K~{ֹ IDATl7֔Gn紸T baMf3ܫe""lUakzp<F#wy)ON:w<>+zNJ뽷; cB[D:_NUI&עl/\:M^@cPߚ rQ%;g1Ã:f+iL`cs_r{R^L_&{av7u 9_}[yꭻR,<>߫-Kݝ祐_̱<(f:ag]ƂvuLLY=+ۙmPmP7MO X&N &    q+8r : 87Uyk wt{[x^{xOG7N{uav 94^ uP/ô|Ff9%X xQ,·0*x?@)C!6VkI.sTЂJ'S}ͷM;Z> t/{1; xkIR.nugL0^zI{_f=t,E8Iߣk_Fy*ZIim̺)i^G%;@ßX*,!fz)4GWi"ۉ+[%?ț&$@$@$@$@$@H GbŽpO >D2P:nqn,C-CShDL8Vv3 i\IG|+cGP:6+Nm n N 3zu֊7ԁک& TJ0 ]$LuQskr9 %     x\@ٛf{ nvzr:7qC;aΕF*@F0S̲ETuJQ2Vleu__Z6ҍI,|: DP_F>][1HHHHH` 㹯}a8V|OV5׀݆H}T=@rՕHh,قK)o~-]w rN0♼UU~ַM; "    &v<y'`Mt{o ᐿ t:H^tǚ뢅Jn60fzϠ^n2ТIxr`,f3sdSB83815p~AM]m ĺk~s0HHHHH`RxʮIh޹f~Vat;rA鸿ѽ-WO|eRP`͢љl{[&,byjl~N۹P(XK>}m͢V{;hLlΠM[<{ᕑ5#tE @oso ~d݉y5͑.caL֞$@$@$@$@$@' 1 $     &cTKIHHHHHLSm ő ^#ϽqK$@$@$@$@$@c&瘁8     kk$@$@$@$@$@$0fxxK7.O|Bq]&NKbvJwJ #)``گ ᩓ*i(̆T%A$@$@$@$ߺ# *N⏼;~̍w<*{x/#_(AA\z9TZԣ sXvNӔ>q𬟡~`?XQ'MY+3[F#{uC    ϻ8{SG|>upzY=,nUk[8LOX]{*6kEcl ;ȣp|Ī;M!dǚbM^Ƃ;; 0{XJ40WZǢb؞IĬoXNVS0oqLH$@$@$@$`%c^;5HܻX ,3?g;2BYZ_:ɸN-}7),+_lLC\vhSyxe\BCMF誖ZOX.=)bL])dgtZӆR SW3.a4r<wcE*-F/6dԾfufzع΁<    ]E GbpO >F-۪Qr(qΆgL#8擎?b.\J8}S‚BS^mDMFc|{om," 0tIOgNm5Xs) dYRٖ/ϩ#k/af3;e\R!3M u٬伾M'n/=#Ɔ ejqn33 ZskH     )wpe:,n~c-J1STu@*@t>)5GuXvj' I,|yѽM4Q jV#'L#xYN\7@Fu$W}jZl(tP^⣯>+6~0g8k*jXDOs)^XcmX    ,x+G_}/ j<ꀨ'Zb]jSKh[pGmD:VKٗwPzӫjpKMԝp3}52f߰&+29O*]T?Me( p;<pw ݇ph_=}q4qhB]mB%:}r &*iٖ|œ(7Sdes2fҞ N 3r/)^7z!Cl\n›qE㔱8rgWՈq,f6F<#\Ԩ?uƶW =~}kOF~b+fʨUޭXÈiHHHH`܁/_?qA? \.-è[\eHfwfMn uò%WUyV]2tn9 .uWg="W]c$]u]O׳\G0㪭 ?e_AHwqkòL=G[7,3?&ڒ8o퇸ou}|8-w_a޼Z\oj B Gѡi&  OLk$֦-.'ٖlpMrl$@$@$@$ EIeVJ(520HHHHvO {ۏxSie~d14Nf=~Eo^<w?ߝ_y}}/\=_{W5^/yJ~aʭfJyPx:}.:^WxzgjlĦIM3g;Җ\=vi;OYŹOj/x tבoW$@$@$@$@$@H 箶;ښkW5[xx _#׼Qs*gVUeWw~N7`~Nx;Oz@l.+Og)~ ;2dJ6}3<1$Z9 ^8?c2%X?/@F:պ'O3HHHHH`(!{#"<>ӏ.LC$@$@$@$@$0 ;v,$@$@$@$@$@$@c%Xq0     {8v X psY =x=b     +v<NJ #YwϩƝ_u|3&}\ɑ_zr</c|:oHui,Y" Lq+8r : F;7Uyk w$83^;~:eNvVΘ$x=8wcJw|qy"#_bƵRW/?Ϯ|xj[03 @?Oh8{SG|>F·'q88@\,8Q΋_r [|sxlG |?{?t@_[۝_~Lq<Ўk OJï>7B/8N0 ~9F<_K$Y3g IDATN'`Kd+Ot*s+Ͼ_$MC#Qpڦtx]MRQsJ75,Of0}6>Ҵ᩟)Ό;0tͧk%GϭZݾmEGiah0\i䏄ko_ 6ǰ!&:m=Yu(,++g=̨gc/_+΋xk|f1 y}qp'W_}YD(؜8mv>vi||w]yǧG<(K.by  /, ܽXJf:߂`BSR ??qΡ]w ,A:L)}1.c?DX:QY4[2B0.wދ=?o4U.LOAٚ| e{˴ID푄9N[+\>wH    nS!gwp_K?{FsxwZ[|tJd9Ӄs],3YÔ;_pp>\22oZ0"iD;}S7|gDV{ _l1曯VOLvJu#.<݆u PM5cJF>?:$k33IHHH%0~$#Tjǥ!x!|oAnIMM)jLAz}~'?2-4cp =' /N6_׿yzV׼RGNґms\!ݹ9n0IHHH` rhȣ8kz{[}i}Q=?dOgG7^x]o|/KbʈM75AaVeOʾiL?Iq6T'AUvQZ>ѱ?4_Ad:kر|hT#)2jZ_O`=Z#'hdgMl 렩 6O}9i_^smIHHH`[rx]+xgZat/]k^ 6"ia{7XK #k$҉z3<2:!ؼO:M_#:y'X&T^t:o~L; F ?#ÿ} NF BڧuK} '(?Oq#JO=YmRfQ:_MN)?3h6c}gC.T?u# gNl7D x(/ 2Rar    n,lϜ4_鞐OȨtem;رtݟ G3w̭,HHH`1warYoz!خ_CWA$@$@$@$'gI`RZ/hL| 2˶) TϢIHHHHH`/{m$     ;bb      A 9(1'     ;ʑX>prde      rjq_^n;EH+#@XF1 90&0/V!ƺ:2}6 vV&%"0$ 9lS]]3#HADd Np/C. _2ʚ)T'wVeWwԬ |&n﹉k4"~:FqO6$ rVj.At 1\2L<DZlJȹf`L 0&`@ Ӏon{ OGIw_}2X΄O\Չ42Q_ 3\[ɣf([ʥqr@K98վc"Gc.YÞz/!LctOVame{[JV3J-yoM[^wdВ>9KA<+P0Q23# ͢׽ `L 0&kxY a|_C'qryٹAhDf@3Y/#8PYed@6M"Nvat]V\AsLz?O~JN&;`L 0&d|~Y}䴑yh#!۝snMU`L 0&`[@-D'bg 0&`L 0&9 wdZ1&`L 0&@ m 8+`L 0&`L D$3Aq2&`L 0&G x8`L 0&`L D$gDP 0&`L 0&`37U YWwJ)w0aR9: B]}Qy;Kh*{uuu?%i R7C?L 0&j@LW|$Z/Lb8m/7S1W2PnEB6H4w8M{* -mu=Wh(:顳\Kydr4 U_ٺUhC"@"i)%N}N7,h&W1YEJB12ݴٝQ a |)'D1y>5)(e@+&,1D+tIaĔ`L l1 /<vĶB?~o "YE~xo9/Qk!xx̠Ȉ+5`d#큽j:eZX ZuDHce<Һt*Z>Co"c7 ;\E2LP%#A= M'Zz >` P| ~* xW'10|hkVΓ.7gm޴ZKo) _,-o FU|ųבrB&5'#/O+/6z:?2?Q5Gmcl|?-<;֖oC@_$Difmyd$C/Tz-zeڔ|P}@9eNy|R,ֿT4UB~*gEچʰ Ne[o73c;d ޖ9B']^+{akws}VN}7Q~1XQM/2~^L^O)R{G6\OK^O'5x=}t$\2ŹKup5]H0։򵾢fZOGy]+>׽X$_{O)N`LlK>g~g~??дj#ŬZCAzpĕ\u|e "t0{TămMáGv@>]f*{nSM-˪DeL0N:96Z^mCTxk!gX> :KrS\LBkcMZ͑bмl] ~+W |`L` ܖĿeK:~ ϟa{"+~?jFx*x/L˻β˻GmF)uY8M{ lȠ ad:žH;6ڮ~#v%cYbJ7%}Ļ ފ 0&@ |e;1M~êLoB)Zn"AkҲUEoYih,ǧWIa kCRb˹}?¨F4C~%x dс-a#Qh6*9 iMU EN;3NvDnkFTFOx"6FsC|D~3η].$ |=xxF[mOk6ڸTP__}"cVPM}>@D;ؒ5ȉvN~Zܔ֒`L (6ij&C/<5vⅨVֺ' r=&7k&bX'W%q,κ*wHmI賾%w&^ӄW6W^7ΈG.%3R:moZ)V[#Ҿ>khKrc*]L+Xez tj;K~2EGwݹT^()ŋ.ԏdvbjQ=(ݨboyz]\~F}yj\zpNW9*YMV_P?>K4~_`L 0&P]HBsC֟} %rXkQ+R6|!7">ֶY&̘,ʧ-Y{ᶾ5)Zڌn DӸd[g%jWر1&"[K]ֶ*X.yțˋ@˻6Wc;<|Y666DXQ\uFp![+&IZ}^,$Y &`E`óH`<&Y؟[,^yh6;U8k+%S 6*6n;уLEk%|L8=`L 0*#U ,`L 0&`L`(﮶`L 0&`%`ód\`L 0&`L iqL 0&`L 0&P26mZF4 -} }4[Ȏq*?3D1`4A:5>Z3f1< Hګ__Y3 g˨34ٴc}1+ 4)YI!4F\KY y'=ӛ<<}+4э%|Vc9F 4~\r9܃cY1#hj?꠱Шf_@7>\>H<Ƙ2@mk t8#H\WV>3&`L $/Gt={$<4| ߾Ѻ 3^{JO =@&ˠem]6.>h{e`ۯ3a0 dM'YS?6&2Urׯ@GE ~4E3_!_Kh,؄W|1zYYsd&B8nZ^vSvKu,ǧWТ866[uy{G,!=qwRTO -Pn9YU=A}υ8I>sXW{~ELnd_vգvSG<."?_h^h/FQZ|o_&`L l|+/~-O; ٱ<3\|??ON:JӖʰ6:{x[LV;.ӏ]A;Ȏlyu4"tjCV IDAT&P/SqU*\LGXZ!ڜ2U٪>lQu9eRkK.']U2::P*B l;>M)B4V~yZԭI.^zZ]gޞ?]ML 0&`:b/%@}7f۞|^1.T:4H}%U~. 0&`Lhu-z(|s~7R9?`L 0&@C⒘`@`I%SEF :U0&`L `W[?*`L 0&`e#g<e1&`L 0&?^υC`L 0&`LL,H. 0&`L 0& υCMHt 6q͉1>N%:q`Yyk=\|Y>DsBEo;Kk_e/%mLW}$gi:DfsN'eN2Wa5{+뚶mW%uAB4M㠮Cy˲䘆I^pVkF"qZ-( .FsP0m*uolJ'÷Mqk~R.[WјʒAi5'jb{>C̫D/M~V)9/~z!p8~ad)ole.q5Аccl.,ƉXKO`Fa9 EknP2Bzoae ӅڕMa.p67b&^,qYNGqmnʠL~/CA%~F }896kӞ5z$Q C✔V/~_tM>43ǩKx#=!1Jrs&vA~WnզzS F[Fgu拫gc%zziMr<e6⾲zƨ3ƌg#׶c2m︽-ÖaX0ϘiR۬L Ӭ=@)\;{n(g5*] pjB3T_s"yVJIfy؆?gGOYD@9[8}65OJ~k(_ăvvpnfSuq…c{bg 3OG{Yw{s-eP/KINS\"tYu+-HFO{cY,` ٮA*ڧm!^i_0r>_WL/a6HNs;5 _|*#Ě&VLOCc}|mbޗ~iQv ~aH*TaV`dq9Y'@N5Dz\klO(WB"NHV;cSN;jےK龀TN>[8]Ǡ`3.8בd^ί|^ax:Er83! ?/^zܝĻO_ʼn& Ws1.Viˀ™5ɍw24O'dES 34+f f3G2Im@ޚ> .ɇq5޸Ggct˯>9S$4 ^wMqY1KG ~ȼE6HMzҦaON&EYqA?8ZIn` >frK1!8ƙ>k/5XM#u{PS)z[LEi_+282{Pr|~ŖRؗLk++eتyڸݶ m̬hAq$gP;3b: kGw׻q,uKZ9?\G|m:Q>2|td!#wR+^HYzY#3|Ma3?VO3{_w&K)2Vݸs 4Խ:P@k0.>AT=zig}O.B7*ee³bRu^{-ZMhOlq}{C=/랫8L2̑NViW![fq5k%t\.yWrsZ/<ʗ";\8Gq6n1B^X~^ ."N*bx}ŒZ۩I_ YuJ_9#qÎD9igg՛x\vv N[ZLl9z&5elAsWJ[ >1b=,LNʷ g$K0I #3GF jM[Kwn*Ŕ/J6۵@rx{YĬ@vo## V~X)ȧgw=^pz.2ԫ g^1y`wg@ZDn~+Wv(3L" q4ȢCpѣ:MVvLK,5+h=I"/q4*XJyf'ptAǾmo>DAKNE=750&'VOO4^>XՎ/N H`o8$΋@JΖіZiWO֮6q/7asr7/s-;1S2Cb{ gr ,/" ;@3{\7I=)4]QqZ]v8w Gvh==^/9)FNk=M)>;ѕ}2bY;ownUɥyLu wh[_iS>&݃؉5EeN튧jϘצ,1k?Gˁ>D/ vat]2K]x#@ю"|1I6hN]}vϖLcJ##,|mƽo_cVsbYy,>YnVF41*|N9wl0]\DUzP( Y>d=X$ eyB .<\|6ҘUfއqq,`[y)͌}sD4u|>M~ 4ZJ1M ΧCXZLQVQ;X%2Zp-¥L f̵VԊa9NdfhWu=u)#@.bǨ%?[%,ƌVAzVU'h D 7:gCnHcJVKi@MS%J[1hoy(jT:1Yo^6p`L 0&`L lQlxnцg`L 0&`E "0&`L 0&(6<+米0T. 0&`L 0&Pb/'zaYMF& Vf;\k`$ p]\i.:e.b`L 0&`&a#k7Nl| i{x "!Z;]>uVdWyq|2JIk2:z3d㊴]P2&`L 0&P1 F_ `,n7%\=)C|ᄲ; bK꼜y˙QiLa'ך-ubיIm`yrUrUuI =ݝQ =GO'Ae e:ؓ.d~M'$vNQL 0&`LJ 0Y|v {,"zk+k2Șk3VCa$/_JU7e~e",a<|$ F1L 0&`LJ TtvVqu=@&Aә4k`{F26=Wef m Gj |/윟91p*W7P~2Ȣ>OO#d=unZOL 0&`L TC^ f|/htRmh) TV w߃En.cHe?8G> M?^K͘`L 0&'NKK/ӞϪ<_K>k;CIWaCmG;r+[ur]h]]*zĆ?Q?ס1ƲF716==IE֦Eʅ ޴iƬQUI|]w"x->aL 0&`L ;|;3sd~ZfT.ͮ_鄸&`L 0&PJϪbL 0&`L l"'W`L 0&`5J]mkXl&`L 0&@Ү?Zi' 0&`L 0&PնfgL 0&`L 6N%:q`Q&4}k=85[7q Q('hN?."?oc1osi|2!~5#X&"ix/DI gDv8`}/ky7ɡ8P(΃`2؞Viw ֍ɺ xIGQd j3i~<*8fK㤧.E$1\lPk4]c9 u7gc\U 1bL?Jlz+|eC[/\`L`}\( Y4܍w˙| I=J~a7ǻӋ4Yjl),ۅq, tc=!נNؑ&~W;xڛَj C,dD02.CFu(͍PM]dاƢ_k q#Xhwlngkz' X vǗM3&7 l?jz?k\6t 6c WLXx&@9 ĘL`;p1VvSJ2>[褜 ^^/b:hͭ>C@q&`5kT3ۏSe7)Rj(FAځcf1>w`pmk뢒G8z cK2P&I 7]͋*0sd>ۍRsfQm)[(PwrP vo#zvdAmpQ+wffyp'F벏6G˧Tκ슃CqSKA}0u.뱮1v0fU:[6S㕻.$32Oc}1nImdKs|{N Osߍ3>} C>ceбw c2]}LTC G/NeS{Wf>gL gT s83ao@ӫ!ꛨԉɴeEVHײAiq} ǬUف'S 3pf {r#蝿L2Ix jTf'Do)\z4ỵcwyMjO0[ $NJyҰ@L:XwHs;0ce5Yc 6[PV}q}2)foуoЌ[k̷LAҍOHv(z p}L}ףZ`4F]>][B1J^/]gq97BpL 0T,쵝tՑ\ưǽNPx :V5Xh&..:?e;n~k1e Z ,wW̨}88JWWίrTUW֐{._ĚgQ62 )1hwcҎY^;YI,_;bd!~Zq4[>? z=d^O;kuP ͥF![IGmcd1<g19Uⵢ]0&kY:,q q0.o(JN`1f={]0B;>_Kb7؅IgցX{Ao"?IlZ.sj z5@)_K'$-|?މfm?:)4J'w; 5b4&3PiQ\ky'fW[. N˚]m4mV.S;<$-Th[7$-p;u'E~D Uc5rg`L 0&@max0|!ƃqb.VtoaA"JM&ݽ x"v z[xm(),eiݍ˹!Mh?ks8)YFg2Jߍklb1qc` 53&`L 0-B m#ǣTdyistkӶq Dώ,pJj&$:,0jwԬY1\8jāg*R`kN0:J)Y* znbͮM}E核uDZl .ym 0&`L 02axF=+;ZDIU|ۭi6!DLc)A C-׵[,fpo ߑ)fFg3'×$% AYFiV gFǩ5[ʍ|_}d-8CrsrV~ Yܵe|7 l ͕ƫ4Z#ٿpRx2OLEWB8 0&`L 0*fxvl>,[w/<ݸb>1s7 g\h%qԯ>O."3#gUI6ZJxՂW_~z ݵdB4p$Z>dL 0&`Ld1xF"L 3Wtρ[eKmmbTA]]ŽALf]c~t?k Liı\CYL氆]1+5 ;vix\jٜ 0&`L 0I"3wfdZIug^:Fv,b, ;;z=mJۋ.v:=m蝿 {=*võ.a!,]w+VmÙ`L 0&(@OZnj'q{ZE/ӧR|ےv h+l' O7/͢މQL_,IB[ ҽ8!95`L 0&bxn .dlqJvTZpF&`L 0&J&gELN#L 0&`L 0j݀ 0&`L 0&*J"VTb. 0&`L 0&j5\,,`L 0&`LY{m3&`L 0&j5\,lyЧV0g*l&$:qj֔JjIV_dp w`o*,d{oԵEEп\Z+D{JsWbDUA2BٴWEN`cfPO혆I^pV} (\syb8 寻+-~굉9eH?UN|j#gKk:F1 r31"m] wVRQc Hl]X%t}r*e'n[U…k U3z1~v/o wV!eOQ",1>,ƉXL`ݦeݧ/mi|X zxʦtn7=aUރq, PtÞ[EAic +fYZPNA@~/ʀZ $0;$RmRƹ}rM||sqk?7D׎¡o|^4JW(h6(V}K5seG[Gqmn|IL1u-5UIF_ s,n7%9 O]o1<;!@]֌Ndvp+nPS,52k9*z!2l]͉F[)fyDl6ҧn ^@-XUH1\f|FF-~8r+͖qkod}:[̵zq/Dہ^qd֏ցcf1Q- .궸|7.]roM<5Qw8"vͪzm/ _y婌؅xYH5=tT- LJEq~_Ug$灉r&Ycʫˢ̦v0iڠ/Bxdqϧ( ԶAőê#/@;Xge4Bx7k[2xdqr%G?gGOYAw?Uvh{Zف5g酩m=qOT_{J eiN7K0ppbgNtw'dj Q;B ݉4|޶8FYgvkrc7]84虓Ksxr=7Q8վcK@1t7n'xr:-f1e.;%W̥mZLEWغM|S82,/ݍ35TޒU+ -G1nSYjn83ril8Q<$GVkk'wCɒʐ3QX;u@.$ЧQT'iiwIqkTf>ЍT4}o I4Ky fVZj<}W^+V? jAii9c#8ZI5.\f.k'Y{hPx:l)^f*$L:R.YÞz/!LɊ\wl5L@뻮ԗ uCc2 . mwU^!3hU\®8(: f.ڸ?hInyƞ~GiUj8v^q :#9^*?*s ZUBK\P38c/՜cDcɆ6j;@ŭMb/ʭ9]w sLVbJH:JtJ#u~jusGmU6kPVr+>3P u-A ^o k8}h[aA\'I뎤{Z/Ot[.'iIAaz@L K#(e:Za%+z3"K}Gp^dol&sXîu!rY_{0Slxlj {qD=r$t/bVOz@9Dh < L`3iKyj+̪H &YA?hk<]JϪq!'%|bɵe|}X8v6཮}X`3bc .c6bI z; v-\ ׳YfDŽKa\vxPZztc(7Mo {0DtsI`FHO ֫YE:6b(a%,qDGN."±"f׀gF’cO΄Yx-ܐSO;.S4-:\CuJS[\3BY &E(Sӓ\v0S/ʉ=&ʔQ16L+AQ̂۲鮏!BDu]z:I3q}L<+j~wՎ? 3ߍ{urLtdz~fߣtYm}B߯c_cQeU̲51I;JFh|/i*!N' pK+ze'0 kz ͮJs~r9މff@;ݒ2L{  yR؞B:s9hS{=WvKUSܯk輕!חYrp](b5hmhIY9$_Xf1RML\L:'qh,AM]zzj&^@TB] !$+^]_@ 9muOt5cMZ-}ˤZ:ѕnr3rGk?"zj3fE(SY; %|ayls8W}ɜFY_^JeW[HNqWXgRZk僅-FǬ=&g9x?KS RB\"8^s?{f'>`j[S_qMb*Z=Y՞u|>*j?2!hcJ~^FrOt Q+t*w&^PٺvOjS[GD@d7gRR!h \lk !qV5bL, \R*mPA]O"Lh[}M]*o Ⱦ!2rL D'ttV2 ȵ1&CX}v5. ЧDbM:Hi;(٥ҺRevlD1j@LW'PT| 0kbh]0ږ(`L 0&`.j'L 0&`L 0&Pnlx(`L 0&`.lxp `L 0&`L &ZhU`L 0& 1w_|y_uHҒ>+PEq ~n+v0rv*` v1=[nZ wS #`L 0&&#aBw]@oaA"JI2T-y6q] 꿏3@Ϝ}nSGqm|2:[Fٵ}c G(K0&`L 0'6W•[1MHiK\)>Dd N,o#zvdtU2NMkn'ş+\vU8}NqY1\8jāg*GT D ("&شꜽn\c!>_(*PN,).f[Dz)4&`L 0&$ZCW'v]ioOO}/G-k3#i,e@g6G 3PK'I r37$c}=s2|inOR90J3on83"D>NURnp#m)rs8;?ƱX[YnxFc$ç(Hw ͢&`L 0&P$/?q[ntr16 g8ɨDvkFy GԌfj'=nCKFu })a2X3S h,jOY_Jegn]ӗEfFΪ5}V'n:맗=]K&dIG%C&`L 0&"3Bgõ.a!,]w+77Fg7gL 0&` ĘjmU$nOkUy|f;=SٖķjAG*w54IžKo֏fXkhnĨ;EZƵ]8;7hVP lO ev݈#)Tc Fvat];lmJ짻I=*ˇL 0&`L E.ʱGm^3l=Y,Գch/oq A'$fL 0&`@M{u)"VH>NN5寍KdL 0&`L:Y饠5GӸQ5+`L 0&6 v$ j0&`L 0&@EvVeY.&`L 0&Xlx?s 0&`L 0&ṥeL 0&`L ?6<ן9F>-ÜNuԬ8nE{ME>҉I,Gqm\:IEź z|\+`(?-ϵJ"֭_TF1LĶ o4*XZd Cdf.Jl?WYtRV$sVĒ{nBR!A%H:̎>i:>OkVV< qYg>蘆I^pV6@QE\&llP}e-1U.&BF+?2XI,tƌn4G0݉x#ڛ$vƭE~nK4NW3k,x~c'z^_)JYS:cVtZX> -A_~k.#340(xb`x<ݍ:(%53)40|@'9~peO":,&Y;AGSaBw]&BRna?~woClוMa.@os1r@E -#X9rW\:W7_5;Qo4nw"nLxͧno&>>ӈˁm>Al>]8tҔG}d9!ݏnbwfV}6T%1B;\RnΕEstTէ]ʮps#Mq=#r8(faW|Ү[4Vx'y }h YFk+C\1f<9>|!|NWvSJÕ6:5فiAhQS䂪t9b8P'=? 3ߍAr'ݐ wT jINVOwIELTCIDATD J.E%t.!rjr!02>lAm3b_T>%%t|V.͍{/3O]jcGWY;vNN^w'\Qo`k1Of.۱{V1y] IJ'&n>Bn1׬F1 bj#SWh\UmAzS:ŏDŽbA㧺w>hk%XTcUL\ q1 OWцܙiW{ o(y_L-#ŭc@uS}k<'].2o]0+tcQ;"CvA'MafxIt7\q:3JN}Z?I\iVB | @" |۝t7n'xr:r&5P?)d,(>DOg&׬34;(3I0M.J%74؊8;Npqz+Lw;I}p Ǭk)7h׊ P?vցhs::2u,YÞz/!LctOVA̅7inʗ/ ݉yF +8.]żœk=vT۰Udv|bZ McAp>&gP;'Hb;?q,uW@f~띯BJ~7·8fRف{W,%p3$'>x| lEgZ*ӿχk%P#*fxg;-9_d16,߇G#|djqe^6S`9at #/@ )yx}LiC3!Z_tn u~v+S`w a $:źʠ~㭷>>k*i|~7cZ߶f\M`wn2au ,O6+l5'9--y8]7 ylaImF 0r1iJCK5}gI:/;,ALj`['ݔ |"/-,^ʔ7&nX4ev bZ'q¥ 0C^&.aT(<_UbEb"B>1F^jKլpwu~qrV92DZOYv(5+ódݣ"f:[ߜ"B>?wD' [mVK:RO]{Ŏzqq7LNH5M #=zy, 6zSf83L" qǬYtH.zXS Lod`|нO!ot >1ͫHso:݉{W( =lyϫC1[wsӵ%I?C\]mm%$nOuMX剃N/î$|5iHylRdav$Ֆn\9C&Pр^Cs{'FEmO=lIg#xFuU*7f}}]b&+u*Ew:k2-P%)_L9mwpŚ!ʡ "Ӟ:O݅}xt@Ď쑘䣷cø8 \ѐ %GB7K8b{A@O Ps=>ֿ7Nt%.ib2w K37ݍ#c71ū8LW@4vKVXXT&z?Sswjv:B9K_p6'IcV՗=r)KJB[(;>"=.t4J#SXF;VuY5~߯M=WڴnM*Md┛8%+p='}#|!H>uߟϋyU]&݈#)4\ x{EѡvW0~hV!.PNM_IYh&ahVledw126!Ȩkgù!Hx͞p9I2(mvvNUzzJ4^/hEUvjh' \>OPccKcWm|%#s~"ǘX2'cL`4S5S_Fbw5i+71rqe"[Nµ_jEN͠Iq[ڬ8_kڑs+fSe;/ Ι}.+@> xnZ0u%@3.f<.tZ 7Κ]zP L L`_rm8OJo+!o ?#^\7rskËZ>KMI͆Â`L 0&`L*m"`L 0&`LF Y b3&`L 0&jR,'`L 0&`LF Y醣1U. 0&`L 0&Pb~NW|]׵#IKN@U8 gGqz`QיlR] b+ wU1`L 0&@ 3 Y4܍w3LiC^F  2.>&=s;X I1ơ]`L 0&&6WoZS\xՓ5فio4íEh0՜pN:zRܩ rU.}k&W* D {wyq[0E9H)]Sd-ƢA*A!PZbT,6ՆHldV"1[AEY0ۤLxggwgѮd_gNcuug>϶ yқ< @@@} xG^󏤉 jtoS&kyA=^_U;}|ɱ-NݿQ=,IV>ԇC4^pQ:3OLC}\1ץBpd_ <#; |VQ/5^@@@ @KmC* Ȍj 72YĞzcι<_e.|jl3\x9$ Mhy=ՊynjiEF'@=m2c\B@@'S@V[쩫2d<P)J~@&3\' 00z.h:ɵDϵufTj/ltZs{K  8Uj;k;9uKSu_i6;?Wˆ=,7Vg#^崞nZQ@ԯۥzPJA.~"  @x:OS:n>ro/ir'k;ksS,Aai^&hTot,6Jim.T =ZA*䞱QCDͅLzjЄ  ضm:|Kd_VЩ nyg2&hS(z@@/p85©2ԵM%'k(ѥvE鶛]N뮩4clQVP4um)}FbYM3ɰ3B3, 6e;Y{@۲{Y@@^ C Jf'mWKgRuVьo*irk;H5uitBLiUms?_}iFw]IJr6tKhF@@B N๓lu7:wS_XB;:NUSMD'ܕE,9\V]IY^F,up-  /C <[z\fB;?*m<4oZV1ҵͤjlՕVބȌ/ Hh&*Qwm(()߼%m> ,նڅ幁$   Ѐ@vI7 Sj4U\d5;tgZ]qR7&E <_KK}2l>Ch2o)s7q=d4[ ( Mmfbs&R"涗ӚLg  4&͎3p62E&ooV   @ xc   @ԱԶEi"  4gS&  _ny2@@@)<50 @@@ i5e.IENDB`json-3.12.0/docs/mkdocs/docs/integration/nuget/nuget-search-package.png000066400000000000000000002747361477615276400261050ustar00rootroot00000000000000PNG  IHDR IDATx |bdI(m%VQXAն j+BZW\VZ\@HEIdW93g3sg'̙<9߹;ysʱc.&`L 0&`L\Zg`L 0&`L 0A"`L 0&C bL 2Db`?k`L 0& :wl L qlش;qaMp~`L 0&`L 0&P_k`L 0&`L ! &`L 0P֮]33B۶mMyѺxwwM7a_B&PY [[nQ~}k?OP*g"nҿ~̟\\ժ'F+`L 0&@zz:N<o!)oĢ[oFWL@xװqFƱcǰk.a3ш A n~3˓yfm^Uk%V 0&`L Fطol5t_hr@ =5jm݆T?ݻwcժUTG;?xهG˧)dL 0&H(mqz4o<~߾x駰w^l<0 ͛7930#4OuWStf؂'OS-hq'cPQ)V̘aJ6&OG$(R3{odLvF9Aatq߱cGNJJˆ#bС]ۺyuBTTxe=_Op*|&`L 0@@øqOi2:ևf0&cĬY|Lۖ]Yn}hF =& 8|&?+H^k2oy-jEkY-))ݷh¤MQZbD`9:[2k]:j>+{/Nc"lZuXL 0&`yw܁Q,^?^F|ʏAjwAד}pE7j;_!y,H{_I>*P;A~<ݫ铌&g_''' mis==mGl3Ç% ^ 2_k;x%}wG佴ŻNp73 &`L T0iӦƆz^s_jOF3g"q]#:BikLƽ&/KRI9l W44wv>>J_ZOg'#/Okx6r̷ߗ~-y}tD !X#iM\#+go%M6OӽJ6BC)Y^=1܅ |ZOEWWen!^B94BSOGi2eQ!_,o= .B_2wxU6>Qs>^qFSx|ڀy#eпS3 0ĵQќ(YiS֡K8m͒|^wy:-Y{LYmL(+٭>u nyҔ1UqvcW.F4>J_pOI&\Z/n6%]Zs/|YFu&LYU'Qz1 |x5 4}E.Fȣ5p0qJlC[gBI8Tk4BCnfLgMƬY$d F#DŽ{ɥ[AqǪ+XA~~>蕗t8qg6aÆӧ)/O@׸'|Ԩcbq,u.Ez]p¥I"sq^ьXFosq<^/,EGVhじ:omQLsx]4CXV2-6ZG 7`ޜOm+%;us6Ҽrƍ[@u]6t.{IK`y/rGVq%mSa乗ǫcދ)Sڵk)CHoqlym~2&0`alK~ =zGAG!ZꘂxjPVr!t _m#TlXE!N, ߫hrPM7Jdܿ;W^y%N>bPX>yɸ^Q#PvC62=&26}G8{;Ԩs1n{jԾ%x:jKYchDfh1DÐ&FEd l=M7Xzt[{ zE,Rhv=6mƵף(6(*GX e2&@'@d8pAat9 K /^"Oνi+Gc*C>d ,Zt>%[܅~'.} ɳ^P(k_ɃDE q:B|,Vh={'|ܓ~.-LQmLأF6E=m\izټyeiກ2'=@5yPɞ7Gא ^ڡ!hUecX4e0rS FEK1`ү"#PU?cko,9mRq7.>FWLVt1}t|mS0IϮy,=3!9S`|Z)|Jq 0&@QߤI3ȏdwI*Vx/bVVouT.h30 f[%C#\ aS-[!& +lOAAϰ-7I \кs/"dGduyvQVr;+qQ6M'ҁX}<+8P*PYYcԆB^P|MZ9gVVV}6R:V^ k̍b`R1t2KPX;X$&ۚ\˧MߚWȸ~*)cjK]΂[o݊/,EI8[h24YEca`WFNUw %fHʤsjun'&n}F.V>>_A 9 0&@d?p@z%T?2kg2fdl {d!#VN?i#99@Et= F!uԮ4vԕ(ǡtS4 }RF^'SM`^ֳ80 oPWM1N$J}"a5Unej=kڷߺK=Пz?oyq`ׁ 1|iへo:LٸKȣ\@S%(-v@&8^5DUv 9l/ztbe}h%xhsm?Ф G]>̩]><&` N,e`-sZ>~ff8ʽLAL:K\ea'.YXk$^Û >mG;_(olq)(,%P70e; ̉gZM7F|ERoi].d)oVcϩ/}]yD:j6Ţ9o]:yØib P?H Ӈt@ RG)EqAϜgW3.}o=}? h$NI&`뭷[nj_6s _*EO28-Z &,z%o[gɿy|K\riUT(js.;5F)mL's1d#2-覿MV~n&a(-^f5VL dw{% CE{3OQWi{ֲ@ imLavX+Kn6c6Shso0fX&aa5aOo툏Ϝg@g}go\@fCnE7)gJ-N2&`L 0&PT9v8㫒R .}jԪIZv@W穨|^ܫ.Cۜ/%hxkDzGyrx1&`L -<[1&,6lڍi,|(|y_*NpI\wq,~-_8ʫެ1A2&`L A!`L<myWV)-k%s(5~}s{cgOc{ ݃8`L 0&>Pώ[2&Pv|RW78k?t>ɗyfmƭjs`L 0&`L 0&@T |%_kOjUOpuI]`L 0&`L 0&G f~TdIL 0&`L 0&@(1x]. 0&`L 0&66M1&`L 0&(lt 0&`L 0&@ nw&`L 0&`L (&$J<9_m g2&`L 0&(_/_eL 0&`L 0&`K |[,`L 0&`L|`|/֖ 0&`L 0&-La —1PP:2mW 2o׍Ig˟*2w0eZVa8rO:vX$Ƥ|,b!XX>᦯mg;F/:t?n:B7}L -!XjG2'cѤkU8B\_^P%1~eKb}⑛.8]vc%8F߈;ldRF9N9jz4`L :: F:sw/.}Q.mx6oH Aɲ;zM I~g{쇡TԫG3Բ$L (,.M*h=Ƹy(aDc Ag; JY˳|߈(ȏ,|bߟ[)!~pnkk7w6W;CH8 ?:B|Q\2 Ơ9"MtϗR& D#/?]X V6W&Iw)cߎB$UcJ(%%G.-pi^?n8,{rΝ9gmja\R%+$q6bXY!N=DZ.y]Z>g 11iܾ|(| P&/ƪoNLG$vF p._dl 0!=/Ҙg<΅BYe ֛s`VS /]l*!kGIxw'bրY8`H!fAdȭhHU}V0Z4:~,vwHkLX%$+dPoM7TAeC;ŝ4LQVCm g).:e;-0q+)/Jg琓ӳZ p.bώH=X߹Aiq> ̢06lw/tP$q 02$@r,_tgjԩޏL'za놰a)S/G ̵}uLK~iS31[ }˱$H\L߬G{H(]Fx~.Lw+QF(?K2"0Obf09kvk> Nϊ}!hV#f(Ck}s'܇<&؜d )^nGX2}naؑ;O1E55O0Ο܌gNˊB17MK!2kp+SddԍzSS(ӑ@[n9 UN|Vfx*eLF,+;َ=m OmF1Ë1 kB3=S O>WRɟ=E${{ =*M Ӊe{fQ~ GMP[=F>: i#38/[ G _Q)?5?sޞ`z3p<(,ht#>RK _ c7"PD1kA܃TB@[Yrv ACQi| c0Ɣ&fq:FAdB|ϖkq;" ^:+嶉d"mLƦai

:K2z`}IYK07C2-cٜqp+SEb֍vU:xt9i@+>S fф,"gi.p>B * s2/+'uPҔF;]OϽk.~n{(Tc/BUx"`)[g+ x-/FN ̝P,}_ҏe7O_t·k Zgj'zE](i1a p+H͘(R4,KD<#5 9s`J!b=4;ĄieM9z`8'aD5[? rioN=x"g9Z{/n @\uTvLr})I3G,Id?lse7a zQH=/F~2g/,Sv.of `g+|Ns4Xn:8G6**șybFq)_uɼX IDATEQP>mo6SFf£(`M?}tP%;CmÃԟsشlq %xI_.C4]A0Ȗ^KoyӃ]XgY166t0s"YFW!=SB t.ϛ ԽFNz˘tl:p18ݠOÈ'-  mB, ,1L2p+ĦnԲ>_zqI'l7m ՛wNgA~#*r`x4 %&'@aO iW9vԅ x"&@a:+ыiDL2Ќ=5~Ǐu$>3 s֋6nZKX4CBWWS{y$ ot,6m.XZ P796Gf^93ɖ'0jޫ&\ 0K@M:)WL?ݯ\ r(̀FEl3eL Es/p:6L 0&"q#&`L 0&`˃M k1&`L 0&`!~t8&`L 0&`eJC?w`L 0&`L :؃, 0&`L 0&@`LsL 0&`L 0&C_, Tj{ U[5ell$|LxYA&`LR`?Om"MIYxpܱUx+@ v2qgj1G^sATT{Pl#9@Yp}-^ 0&`L x$`}^{՘` M`OLYMa\~0SkS!_0& .UTѯe6q 0p1Ɲx&P X+C}T?Or~0Bs_/[2&9+Ozq^Gڃ/_vF3teD=;}YyӓmeZṑ]\? $|]T?mX'N}󭸮[ x?gĉ8vΞFtWFM\q?ѣhԈց3۱t&P&ʟ1EqrRjoXn̒4n8ܮ<~?|[ȺW].d {4) 8 9#TNO4 zm*yq_tkiXqP۩9~3*4f\ ~{GSUnݺhР.䒨Y {y}-LgϞ?>ǔwO??GjKt7yBBqO Ξ(dXooLNLb?p>}8z(g#߄/@ {1hX0kb3wbOLG^٩uOE#s&6$wӦMQ <2យ֡M4H={gbKϽ͛7GZCw5&]4hӾ0 2Vr=p 7fFA _uFz/~vya˺d(aFF_5.E18_ٳgQXXh2O8.4w4G/z:Lt|{^ |mXzȏb?{@n^z}hROuBG:YArA}r;y̳;6Ǹ4Fs߅MD=ғO{i7lC?~89'O"|tRJYe[*9vIj]rRՈYY l9H6ς5a/ĈX ־)6Lϒ:#İˑ[OD.O0yiAZp j3\ivwI V2\#=zcvX?XiSx+;wCzzطo233UkGRߟG|wߡI&>t T@T8X#eΨZw[^O>MOԤZjQ~qv@>MKEaaO(Rȣ.OF~, |2e1:1.U3~IhE/k¾'^JQΟ0uCȧW_~ɸy4l5kA?܉w(=Z"xF+1xduF$V$QTjrQ8s T p t{ܰ5V΅_Q_ilCa.dz`{"ǘ }:yc,#*Z+n\x~KMMEjomJ lж3lD)&j:FsΡV-9[tM"D_CdlS) z"ǧ'b%WTƥTh:Yj]7 blXV7@ UQd=U~?:P9属5+o@3 ˵˔v]s,tr^Y':T7XC eHnܸX|IlC!~!H,ܓa/}GuVKUÛo,>ycq=gibEj|ݮui]avP}8bl7gۻDo5(/-#u8vL3I+ZGgV>l[=n 7oy{\ظKśgtd|Bˑ Z'bZ{?+?@##9SFK׾KP$E#NʒgеzeyVoU^Lҧ3)HAvj{r¸?mOaȇI .uDV+CkВM+Q%~/'^ue^δzQO=mTFƾ<ʲpdKЧ5sp{iCB^4r; U."7=އ:\~y}q"涼ڽr{GT%5ud(U?/nȳ%,צ6[& x*1QX~籗` %yo܎lY72 0Gr2Ñ O (|:CoJ*QؽaJHr=Ba̧g@ƒк*Ğ9>E]==wF_ôMAEaT2Si@T{XlrEc\UxcN7 HCYR)S"gO%)#.[@Vt@=? &n^%GFӟw94m_Ms4|Ƀn.۽*WiZ.;:#rc%[S@rkd$RݥHF E@.hUw \Ꟁ/uFzԽpJԃ6au|k:?5>ҽ{deV5]KLt/Dp!{)B^c Bwc|2鈅a/7֓c ,7Q$I'#:$78rshwn^ ѧk985 vb.M{֭:C'Bz.EXF{4 "$g \Y82_,² qnM7e/ uVF޽EAF?3{qXrxc2V")\7zfEt331{ C1_;ybw=k6lN8GpY۟XUDBA_L끴AsPXdĒA! w;rhyGdQޅb0mXsiLr(ȄT" $?bpG`߁ 4ȝ7oC`g<9Q.6o6W8'j{ŵⲎc*}h/zmCuЬY3ܹKiz(--jyX{]Uu<ZJKVjX-ɀL2ʧ̗뽶w'k6Q8 M8 #:]p0zV*Rб=T dwH6TkJ{^9#w˗=v5#ts8 hx᳷ Ͻ!K#%O.=##>)I>|Hfo`֐?9KjhcܷCYN|O݃V }3ыs6EN!`_Tg>YY^Jgˎ{{SɺJ3i"c!oϸWp+݃1cㅫc0mGƶ7s/Y_%-D`~j:_m9#uC;7a Fz}1nc2 v!{L_ o5 Ȃ4,_NoT1;Xr;rj9O#@-7X]9lb.{"P)vIv:<u[ݨԈ]\ivϧH+HZΦzpi;YJc0Ynmo[{Q@LͤzVEr#m X 5>*@1@ !g6N@7uA Ԟ_wvΓdEOF9eSMSu2)4θD6A:"߼NiIxuLiz^XyKROG:Ҟ7woXN]qZ~e3.w>}jrEʕguv_-8}4@|׽R pPħqN:^3R@_Xv)SO<2?%6y%Zx~'=.Rwi=SgDY2UQ}Kcdҗ[7NAʦ=BC=ppj׾.=!A2xK:mX-FĤ-Ntٌm{sddF)4-3mɿ+@; u蝍؋sbq~^F~L?~C5{=p~OBI% tbv#']?goaOwΝ;ry&$+|u6y@\Hrr9NmHn>?\'PKJNg/28ɓvmW|:((8xwRaiy_U3"t6jf aj˃oQ^;7dKoچT76GME^/%!_|o&)Z])$~{In}5y_|X[H|z+;EItnOkzeNJv߳'R EOiu3 #5U{ Go9#Txv% eye pMŎGV)DGrѳX)=% b!`Sk+x`Wm`u:kkꭴwk;prM]bbwWٝڵmXVogmŊNTd0216 $=6ůogߧ)Mef=Zp;B//U2^' }|ܧ&>6E=7 { 'Ͻ|݊o4α2V9 IDATfߝ97{C Y2Tx_Wڽ,8WS**'vק%IIWW9c[G5핓:^($bߢeKa'f_jK$,Yɥ4f?p3cQj_hsf nWխؖ MʓhuCkQ퍻`ܙ He>hiͮ@=0@H@gl@UetRnþOkS:V,zX靠yaFGM<WOO*B}LOƹfprҐ~8 ߕ~7]M~ |q7N/FԬY -[wcl2?O߉?z$&`K௷hϙ\ Tl@߉_lr8e~bca܇J?ϙea:y:ig]ޣ+UNaS[U_ Ē]8ߋfܯ|U{WVZv_neͿa'ohz덩Vv ~i?sT߆ 9l2TE./&H)s6[m2h@X!J뵽zy+oF=+d6˓d}>;?ߋ23k 0(?B1KcHD+S"Px:Z+B6mE2i/;PMDeG7eL 0&[I1@b]+н0&`!@;VmΦ<~DZL 0&@!~`L 0&`L 0&e> d I@Ip9/nQ FYE`L 0&`L "'qMu-H/>s옟V]ضK+\"7 8Qݍm+F3>=mNrN*ZߨhN4m4fIjLӵ;뎚VfL 0&`L 08XvCP^2|0xrpy99a'~W; U; ~Ȩto ghS\륙Zdm"AlM$C;jjOgr\wܐCi2j8`L y :gz3!zF s2/I ۽R wE#ޯ%[5^ςvYlກ2KwbW}vyԯ^$3[S=Z5Q@-q`nmCenv+SzOA/ $C z2ٸp`L 0x_?a}9rb܇Qk8RZfyP*K, _v^u.eaۿȰ?JqOe>=.bʚQY̚x%.xo׿_|udjzTWGNwo7b~gۯq{ߓdXmY[Lߠ 4{]/:Gh} Tykͨm@/jYE ~Gc=̳2_ɸi#Vf걷3j`L 0&3YY=?\c{eG|CųR#eπ3``$y}mj$9;PU3|]ƿ!PE~%TK;CY(E,:C19 vڜ2ՕTi)Z 3e5P?Uw<誒< ?iiȓaOG$=e@[%MfP EogCh=D|kԍy.Lp`)$#_SQa/O 89մoA|z5yz?j:]8;]^jl"hKCEpj"gEW6}55f$Tvwc[>y)TNjɞ ;.bL 0&m7ޘmTFfX ͑3Qx;c6ArğLF0FdXitNj@Qɚs(o迨.<*"Oo~:PlA/i;DDRL,Ĺ{jy|@PSh!wЗgYiBˡ5^du|z?3CoРٚ]7ݥ2Y îG-+X֯ueU.\̊g]-rwզM6G_rq,ʋpqYKv=y> 0&2g+z Gy#GN?@!):E*ɞmlyPn&ޯqOrDTڮ/5Sh>- :Pjܑ4n1:b$=l(Xm(,^5T"Lݯĺ_{a/?][cE+0*;=]>"W_%k>KO_}!_m 蠭E;wb,&Fy^zqK1r4CRr+k&`L A #|CB#cE}"rU8bWJw~-?w?Cŋ|w1zhop m>9&(eG/.g K?g=G}Ա'J x[[^iMj*ɐ:t-WJ*;#O i6sxn=e9Іp˰/z626$uoC5ǭp+jL 0&#kݹ15&~xvD`d7'WKiksj]W͝_d[ggǏ^n(/Hd;ne~c4[5g7ϢǓqujqSN֝cܭUêAR4VMb+ؤֱ퀥3&`-<.oզTW~H@Yw vv|R|U֭Ʋ;P놟mסI42WP+x\L 0&`L 0rHzO+^h>6>\?pB91c Xw ŏunv+^, 0&`L 0&M_Ih@x#<`L $> uP*bmvTĻcb剀O?F6`ݢAõ]3`~Dy2&`L 0&(|rMu/udS4iLy:R`dE5\~j9;#wY?۷t⎙`L TT6F+yW!/w^q&30 |hΡtYk 0&`L a [nְbL TçO}>^y i_{+P`L 0&@$=zвeHDq[&$|1=-9!i\[I0`L 0&KǏwߍ{bȑ?>RSSc%fL $߈|9݀ui q7G!ODRJ?^[YǀaL 0&v|IL8_| p_X&K x& KŽšJb*T U}z=``L $ Ν;㦛nDяXh-o>7@=KӃ2pXq+ܷNT=g8L 0&@9!P\lޙBsyVѤIyRi&p'@ ]vK`L 0& ˶wO!|- .J*B 5V[54WINMZ8 0JO)g|- y *`L 0*~f@;zȎ\i?LaqAx% T!Y}_V?KǴ[~8q-0PS^y&b|:;vTT]7<:t> ~;Szj-CG+O?ܴ7y]v|ո#ibt| mIzؾQ &`L 0Jϵ+dߞǑ#Gp)AժPn]4h\r ~ի{D}گ2 :SM֡kq||cL 0&,^}UP}1sLa +={a/EDžџ5OY+ո;V32{n2 ]WpCs=a(+2?#<@V\ao߾ M4CQї8w,{Ah # ;XQdĻ^xصDD{qN[}/7C0~uv4v߀w<~]g&`L <]v55uqSoָW!Ojc:VrcQ!qEK@fpw=o '=O>0Eg(Dkp}#=Z(Cժ#=B]K_P:j.#8E|mjtZDRIZ~ (DX`o9nX9`L $6m۶a޽BI: 7ܐJ˗!Դq&pI(@u(AeuG4إ!B{ոi2IM(,u.UTLL>Ԭs8鳦x_К{ '=y0]_\}W|A>zAt#O>z|Xt>)cᆞ1 ]ڮ-y5ȗ2U}IޅvhoSDoݾ?>`L 0E`w|zЫȃ.K:T!_=5JFRRiOtJDyXF<3݌ PFSg˖7ޘmWFr x {2{RX ˷OeT'ԡrQӡ9K_~VS}䱁W|NNIȹsʍvZ_~!'=508%B;la5Ԥ)RŨueCeL 0&*6+02;K"sO£C5k zre I[>wmė|ukY Fb͚ЦMZ_ӄzPx!zq|_](ogR& PSJӈv}-0m];Hu)WaWp"<<&`L 0 udKC_휼Tbh%YvU5*-Ԁg>|`GQQ!իXt ~*M D\zi PXd(҆zQOeT~ \¸h2i7uú!0}/T7D@IIԗeǒ5x|4m*n*>s\sU2NG}mDsnIJGgc_8'8.=A ~Zro}=`L ėמ^kFȷj@F8ա^X,QH>zi,)^w^?KlڴApA袋2(rᮻ+d Md>QvwQO/ ^:|=ڊƾZI^ ˏs.OvRCC VV\p\$Z q뻰C|b`026K\?k9cs`sxhwL%WF}>u}y+n:Nƫc=}3&%PFM+뤡O=ϓޏq/;\)?PQ(XYh߬\zI)F:O? `'v֧(#=nHaTUx[k:u^]zj&{N:Xjԫ͢?*}IhuWwD IDATߣHnF\1l(*Yߝx) =0/׮9-"l?@Gp0 hX_v {`f!}oOkxZE⽏1g1x&ȀwۿKX=Xupkz54¿dFuw7,#kwc͝)  sO{ o1yxԋ6 wcX%e>Ϟ{Ģ[ϧ]L@!! ĵ)]H;ڧ, |>_{y^ ; ?SWLkõBk;QO[)`g_ÄWQ7DOWC]J3o6YOɀ!_V|(<ߙ3g'+>> X-(:N5&a7 =vO7uͨD^gc›MTc1<pn oN9ކS> zYT9KvnkODsX`,0Xm;_}=s1|ӿ!= 2* i&?vA p`L T`dQy |3yhL 08i+p Z(x.52a:xfq] :4`…Ay8rd!c=}UMoP c %,qs?߁fV#8A6DN gu~MhQڃ޻UYaPiGƝ 85jBL]aQ۲w[&1V5R,8*'C4V=awY/,`ּsˆ}y89(mà'z88XK$@$xT^NJW  wt:"sVg%RO{μ sy;9 kB8s`M5% 􌀽sJƍ׿.׼]*. D3 8rgnU+&ߗ{hĜ\|Zw82IyxK?70؊]`ﱈ6Txc+>}wZCD@k-Ls`o4n#srSU+p"̔Ŏ58+NTǔb CYM$@$\9* :* ^Iw^ ^[TiػW”E* ta|xOrC { %,[Ec(K'o[1lh58} ?"]o`'^dEEWMɜYw(?{6&*ٵI bV@Bi62WV7sf|.=5S9~<۹;%M< M&7l"  Gݬ! {;>?z j4?b5 !@O0s    =~$kBg2=};gtB@wU$@$@$@}J`}:'# `!&tC1ے (i5l &YχU#    N_*D`(,;mX   9N+6^M9 wy'f̘ f H|N߳#lYFS9   'b _cy)_Fzz:ֽVMCIH'݋ٳ:t(&O'馛z"X_+&0]z5 z,8? ())W_}eQ W|m26@=gM(*څa spRϭ95[r&uWS;f.TmF|Y6̬ L$81,8p`$׼Vd܏ŅO!g݌Y07DntNRzv{[Pn/.SvzuRYs ((ۂʂT(c!'']=:g׼9GҵMAZb^8… q=HԄ?sʽN_ +Ֆ3D~ՎQ0Yijٗh7e.İOP> ],I ŜEhw׫ǮmصGq` \ue=‡@޿a}مHHJ@8o e5@/z߫z9a )h3ݥ^a:IזJ"'Gy!AAF,.DrB}1ɼN>s% 'YE|/݇bxq^qu¦Ͻ۲ [l+ύ%8ʲO\@a ~ag[ĝq2szo+طJ6EɊJROġ<`g[=Pp5YopWգ^$@$\Zϡ%l8a HP9?W9[STνe1_g0$$@Gm?$=gΜ7nTniQUl{\й/G`߮,``>6/VbK+q(B~ldfAp#ؚ_۰Ko9{6]2'TMp])ޔs94<aۃK8C kTB+W$]We s $/'b09&7XmJtצQ ' bpXg٧ IkPZ6NĔF|)  >%{/-TNq VVp?w"|ѿX Wtq?#0n0VyuX$c\ۯ0+P Pqi6vk+2@ETwPfQ**#'g8>) cQV\2ˆM_9{F-t%jZwGqЪý`U0sS@\NvD#$#FHSHԏ؋}M}>C裏B|=tqU !L$^\ B=}[gܘOQ.N݆͝يqd/9PڼB*d ^qeѢM*EA> Z3y{*}7p} [\K׺cRӊBT{v>If|^&d3OtLك@x)Z8nɗw6!(0j};[qT㘆p|?_}v<%ΙZY[sh4d\1R5W  # s< ;gVK/DjFAe bTy֕*-8;<bա-h-jAEe,r &{ϝ^ʲI.98^] y.rǕt[P!r[ [[P!^ HfvBbދRZeskxH8 MZ/+{W)`dϤZF^mr6Cj @h 5bbjrbqI+ toٲE 9¹-)S8+k׮a׮]Rٳ=vE+_?PGgf|wj0xYӰuD SCgy$,Ts qG-yߑZ1ΆSmh1F̶ܻ>Ϊ4dfUz"sQ܋K1eQNhp'+k_iVY'nTa Y?Ԑ 8nDɢ|v5(FSm,b%?=bJs%! maH)D\fm!΢_[TSX . ,!v⊩+νyFmb8'-][)7Ҭ,+p[^`۝0{DaBwX< ޒ6ݳfBhx]=;=nr9εkeDȒ,bP఩κmh'= xF@8_|Y]]dF#WѬ{1KA{ots'w[@Ft`SGaTm2* U4we0+#F.ܾu1xA!9=OKmttV=w}*;݄{Z(D/J_i[ziۂsg8pץg'E x($l b*p)ZDx8خeC!J?+Es–;,sR4$::.]ӧ!ʽp V^^s=uȽӧߋ`vνP҈9ȜmȟϕrE|M.t=Pc+vVs= MJoŧJE@k-L&MĤ]tHVD:Jn=:{ף)\mG7XܡcA&Mk=0KB"}OB68.00bww950ƙ=Nľe)HfxV m5PC5-nDx4FQDJBAAt2Ew.:FՋ]ݿ:8b礿]DAcS+sˑ[okR`\=;jV˥~b[Yx[e-S^cXBr!:.7G';uE3ɞP&VڌCa׮ؚ/RvA&PT|5h^dϝI5{7!2KgcRrq]kip!&mU~H0MjLsE_K+"lΝR6ꖍb~I=Jf$b1JLn/ G꽔?w7EDDld*f|n܌ϥ2kQ ]xbv$ 8,UtN:{< OCAADn6{Y2~29Z׋sxKH:kz:9Ԭdo'leoN/6\ؚpv^B&&{"eaĹiZѣfua jABPcBap,Dy1t5M<(e Q#e҈{H5:ogc<tPUپ׸5KkDөP^K}7ǎȰ]wGWv1w\܁rMBxGMi&ix0)]^+Qyc-P$ib=\9y@YeHƙ֡:|U=u%BG=e[Px%j8/FPO -f?H|r*5Ԇzȃ/=Kb7;{ثtc +ժ!g0+7۳ iu_lAwmn#Dոqnv:u qދ}.`=`}Dig;fTH@¦aТږ3ɹ5+Kt$@$@$@$.yE(mmmi \jnSpopӭze !  gt c`/܆QL2HHHH ]ԩS-Z;ƍSn4P pZiokxO$@$@$@$`!ν-@xC$@$c%t"gy~4̧#-+g/e#)wT?52%K*6Ll8g4bw.l!     _&s?E*h}ӭ1%<6o^y'ư̅ig!w$4ia.&-sݮ-||ӧ$@$@K`Ղ @O8FN7x,;8 핊6ơZ1szef_za\ }fgvQ^?Ia7_:^`     :)H{mR-uiA4 U- ~s/V\BV4 b~W|59m[bݺ[k1tvv)㍳39hZ[C'aaB eNT0v̲)F#Mkmբ˛+ܔV^,gϲ6NΊ۵표hB^,0݈.}1߉ y˃|"l]+Ao'SVO!RmDl&fk]Kwb #J ٿU1IHHHH toÐQi܍Q)Wq/pa:ovGx<xOl5Dņ(zx\qk'Zyp#վ#[u7̑xɹGh-E_-ċ\/ Lh7Тۃ+c׶bZ%^;ZrK1zO+!Ry.,Eٹ5bʢ<!ぐ 8!V؆ɱK?ڄNl"#(IWB Ej (Yz)pxCkz'xX\|Px%    :WYЉ7:`r~(Nԝѝa|څʈϜk}''e)>sƝHz6pmdGg0JN7aV)_&UAN֝J@W#N$@$loׯ ?ϻe|ЭqD$@H@1y@M!x:}/W :>#d"s">Wu6zH}av9z$MJoŧZs!"Zkar6i"&BCfb&Q2w.x] ds,݀Ccqm?{ -rS{IHƘ<rvTot|osw'JS6  nƞ={paTTTI@ƍ@'Zs #@kkkoŰaF@Zv 8b_=޺q+A&fmwYN$̚ R欝8ۺq״n7 3gK }_f3>WzZE8|rJ)V^ȕ78k -I FFy:NmJ IDATFytcy3"K_?SW}!Xt94!cf+&A:7sˉ$@$ 8}4;7S[nAGm-:jjkޘ2"P&N|_@UWQ&>.;vh.g+ES ân;4} G+`'*?;vv7?/h~ [O~vh_ e ::.ʱd}lɱ02lpg 12|U;PYn^RHH6mڄ4mIHH v FPC_5>NoFf$Bm{W׸2D_8UIGW/6x2i:ƗpW}Dgjϸ6 :{) 8#p;Shߌc[uy0Ō;х)I嬚u$@$++X)HHH ,; گ?:콄/~_^,oHLo+t"<,Y k#؇eq]RJڦV[eHܧ0}ۧs2   pC`缻 p׏ X9y( ѕ+WJμ:\8os^L6mjxR[$)Wᅤ?`†Z֢9/Փ;.n@ b\y-j_w[IH}* )az/ާjG0_C_ᩗpkޫ^؎G܇apd[ )"^PWC=R[/oS(yg6k;"7$@$]tKHHHHEc1K6cUg^GanZkx\9vV_u_ G `?!G$@$@$@AB@8±W}˫55rbƏaJS=)`oq,ǘpTON*n/vv(N_~HH@ž$@$@$@$@=&`zcďQqFږwx9<.6ȓD.Qzj_ߦ`҉cK{<,Ҥ@E>X{ uJ?5XnDF[05x "phMoIHHH jY.BŹfxx6C-ibf)?jwW{֡6g<[|9}Y7Φc?֭gH xy ~+?6o^ sl>ޯxW0OxqK$@$@$@L`*~{6 ަ`04 '$"<ʔ)x7peIo< ~a/j mI U[d͔V,AӇ$@N@?iCKV6l <O+41oڋG10$@$@$@$%_O0t^ҥb|mpå{1YN.'qA ǚpwF$t:aȨuܴbSxD&mAs;U@|ĴHHHd6ԫDi2Iν_uuڲPLkfHt3 Ο>ӧ㪍mjPatA>   EwU*&$*y@jWaUb&աkP&+[ x|B@e8d fAS1yQ؞F4ӦU$@$@$@CSﻥtGe^'cAx2p ٝF@V/F?*LD(:дwJV t yM-_d˚R7   6n͋5[yBfWeo͋SWFHtC!9>#0f'&   o"ٿrO](ݿmf?WٖE0K^lBmnD8~}?A)ccc:"?@;&}LQ\1䱍HG_AȽBE~]~`   [ׯ1`8F~:f3nV|~kS(=l ڮ7B5#/}.('yQ+=nmJͩKW9M>‘,љr}J RE1bu9HzN_ׁ/⋟MD(Σ33f>K(HHH7p/&9OSDFF {~_F NUY߅_|Ƌ!| -v[G+n%_{';nZOM.~vuuXJըӴZn8u3>=1H t1yݖдQ%A(>D/?$@$@$@A1]s=O~¹"1V;o]Xgd@, V~y Ňjzyv_$Fu,l.V3K/0)_ܫؗz^IH*b 5 0tU( 9B9<'"8uBBAȍ¹t$/ۍ1~ vλR8rۯۗ908{*;MQS)y?.  Nc<]HHHH H}wsύO U~W~r .IuQx0oo)H<':ɩ 1yelوW=+KpiVF ,)9lj,Dm=˗؍ h; K$@$@$@L@sUcEb%_|ʽz/:ڗ\B'2~9_`(" =+BA'=\qF~bQ؞Gnڴ_LZZZ}qHFZ]#k@ԒhEIHHOņz]2.&KMj=nǢԟfAױe;ЅV @膃c°}>wx/"}f{)>X>s~ 2^ \>,nf-G \T޿I7 ̩Xix);2%Dj^C$@K@g8&>Ԭ|_W/F?Dƽ@ּ_O| `0_%W(֨eW.b*z\a! 0pMȽeGۦʱİqqqv y{+$<~HHHȷ:N~,_Ź⫛,{i}iQRHH@+<&G>M[΃CnFHMYd< HBzwBM7I6/j@Ú45IHhtQKPn(9r[# `rг٦2 }_Eyоe*6*="i]u=#Ura͏kIy"Cs6ej}d 9EkF,6Cyn" !_l^ZSe Xܳe =14 ؏#Q`g_LZ%5X`s|ǵzKwސ ~: ܭ>HN_C[-mơ*llQM8q~o[cuWP FQW|jq:/Tw]Mv  pA`O~⢕$@$@$лt:"祇yQxb{\!+ؼȣId@gyv]@n`Ȗi@wGed#9!nښ5Ȱ˹V= fKBjF2r7"67:#+) PsX[t` "`дqc{!ǎȰ.:l+]==ggcFQ W65JŸ}9a+%  " Nv1KvߨFDFvTU#\(ƛ8ad!HD1*:R:^Sp+ƬGĎmwht]\2$KpZ<[H \EaQ2=hB.ǔQG@/qU2 ΟP}6*6'msĿN$@$~_N~7sU%Jcz/꣣-}WJ+-X}# Sa)B[k̓Z|̮E Prgl8m_?EOV}eh )$ w$   B/_Fff&0u^'|zߪ4 1B"mSJʙ6Wp({ 'cG]¥l?3'AS EuS7Buci @w tC1ے yGq$@$@$@$@ K/yɷwq ^%VPJU_KIP gM ,K)@q@t^'&k ːR^v'pF@F lJ$@$@$@$@}OG&˕ҋ3g`MN*Uz5F?Ez^THzF@gȹ߁?̕˱r寰В3e8o/1@qcمo,$@$@$@$Л_RZɿtW+^ r}8L@)[5Pw L)HV""Ƅ&/>"_uy ޠx}c\ c Cش1Wdz$Bс;P[V N+9Pbr/G9T^Ec!r3PxS ~: T_ᦛpӭJݕ+p]Nsb?O|=+L_58Gbv1ږ;rh)A__-`BS6M:Xpd,KAtf줧 EE1199HAl N_ɹ"'?C3j:8'M'ϋj %r|G{աgq \+.C1hčKpѿֆ=+Ç#rνν:X]n'k ]]Y-9vVůF]rK{~L`I膃'/~dՋIHH@GGwM7:t(]n?N\=woG?7&Bcc1h\8|'P]ts' g:)H{+_?PGgf|φ'q/6\.;#  C|g֬Y#23mѿT6v".޸a΂gn>] Ϟ { -m2*嘼 >&ϿV˱Đ27& tI@N ';8#?aH E 60}uR]PqMX$l4JsIHH 0>2m$芀N?3'~{ yO3Ď׀(a-w.]vbVUFݕj_RxntkmGq`V(Dne\V|ؠv-ǒ",ٯv?/X B07AM6,Rʬ6!\lli@ÚiLm.;=ݵ9:sx^PU5Owk݊siJ[Z*>ƛ3(%7{=?S<*LKc[4,fy76~aXUHuV*=yL8،9r{"t歳8!:vR0wM"_~A  M& &wZ͖'JJEqAi](_5\Io2R-]_ IDATaZ]dHHq SG| aOFtt43KajR^yW3.˲bNTl$:9+0Urc?&O'ejvd q\1&=" ċwsRȃ#[kr:KȄXH7d.Oe:cM=dxh:qB\H#^>h XD`_Wq"_Kd.^nmB 2EhĢ{0ZHN@!9/|uNaPw 6oPPQDt>auⱎl4gMT'/O˫[;G?tr3 f4`ÚJN7a W/6? MtUF?Z<$[Vż;q_o Јb8YI;Bv(ʩ&{-idl Aa}gf?  (e)(͌*\bmY(>Pj ˷s &5_鷴H f540B% kvvjUd렍Yy+:dwu^}9j:Eabcj ֐v64ꮢ^S|piE Aۮ[\މ=y\&~SO= b4p;15y8dR]]&a=Y" ѡ~^;1 Cnm8PlPPJ$@$`K`_:Q#Jrx/wJ8~4[g$J0+? H p}[0{(T>6o5tZ~JdfcR`2 [j5 =\yȜf 2`)EG -amI_+vܟ-&[~wp/s7"q7Vy4~),38,v{0Tl75opƔ@HM:SHa ec0SZO=y>Èu/mVt󪤣o+$'+b ^GU# ߊZUMqRZʍ۵Ƒ$@$ 1_ዏz=!<2t:_ƶ:8 XE$UfJPر02l]w 1u츸坶;\'$!Dmڴ iii.Kdx9_K.Ҧ6'b77 ٦зb)ޖe?,B=WIg.b@5˽.NKA@&"6x=Fo07 # VO֣j &]Yz _'|_B/p 4ԣP=W]2s/GfaӚ8D-)wPO*GqW՘Y/Y> !ye0=<z;rQ-֐ _:~0$tQ[ Ugoj@b%? HDط342kʖnXu _?l9+sV?+L:ҳs_7HR    tYQ@ rN4Y7*Zs{("_Q9{~e!%   '@ߞH.9Uά$  '0lX pD4HHOt:aU^|_:!?q 4HO 0D_ǜU/@+ \,z!} '9pYб3:D]:W  `{v^nŕWp{^zӭRϨ0#w?w#~l<]8& [n `_w 3~{w _|{Da;މ#* X㥗^"z׾C, O -j#d^ c-j+(+j8s\ad8`Bv5P;AiK㢬[/qMZmІi .~r@6Xu}S5QĹw(Q^W9w't|u sJE7)٤7po0 k][J{}{=_9q9݁ 7œ2gqn~]v^Ā[`}l,9±?t.\ o9[]Gmk!0hGv~8HzWøU%' ;riLlll\j6bgw޶|>pJ`7cM{9Di G+c}s2oƢ3E*iT !K]|boEL-6b$ߠՍܵ;]L7! -FIMPb5OK)e22ӠH7hoI?V $ܫ nν|xwm=)p+oН%&] x ה/Ac#SZ9 )=?$@Og؉7K#pt`n)?n7)^7[?Iϯ}-gaT-6>9eȰQode.![,O+Ev_WWy (y]ࡖI s0Q+ܵy(^W7wksė{66Ae#G qv/T- ׿A>M"mSpdL" "[nū+?RT׽&qq;mWBxGK6mڄ4K{[%~0+kWYMP6sؼ4bFi͋NdE$s"1nx't/Z?C >#c,! # {\:_EvuRlHמ !s/zԹ%e8VN4o>zPgʹ"Ŀ"Ue=Ye}R$?ټωXV .߻|}F3 Q8:|tqm(Cw> Z;ߜ؍|6GT>F@2cWG#TeH>y V55V<MxfC7p+Y Go[T^D}Rڐ @0z*~0`zb[c mYOm |?I_Y Կ (zKB<,{=ꥱ\7\RJ$wH/N$@$\7lGV\::v nT;[oaäwŘ10GZ d`y7~>ĕWp߈PX1e dDh7HV>R\i0ɿw9HMLDt2kJVC /(C/Õ,oiM9$@]! }w o(9{O13qy]ũ0k_%g]p9,0cȠ!7.w@\:Ƈlj~pT͸[:>vsB@:xӜzXE$7 gB$@$@$M$$ғgƿ **B?9IT5WxQ:UKFvrV\%9,!  -:Z~/vʮ2`mq<  ~ :b!:Ԋ׬uzP%i" X p=+ NY&{/65:mf]#l.CFq. }TIE$@$@$@$@$@$-\w$^\׀iȪQ>'D[wg^/nw *$!5#ۄEz.THHH \i9o궻U3sk)I||Oe4^^>@'޴oohQ.{M-%|+uCX&   æyN9uyͬ$ ^'@_'K0Ъa(dE^ŽN!:_F K83 8S_9ԳH|s$Sq8=Fr)_%m4c`01_'%      Nᡃaz<?(V;|?K ȍi|IHHHHHg p_ cšoGaHz'     _&|OG좿m y rhv OlzR`d=';J$@$@$@$@$@$h;}./;m04,qz    ;g4H @V< 1{>=IHHH G}d1G>k)H|s}Nq0Q,e%  ™N}WF*/<*NEqDQ @>i&_Y`6aޘ= ꊽsbOAJz:N=H_ 0D߇\_=4=ٗHHHH=]?)d#fddTHs\{ > -n?O`WW!::Zjb殺~1ũѰZb|Vj'U;5#U HFHct=FŎ$@$@$@$@$?AX('V M C]Q LoXur}]RJÑ,V7)2mqHAxUXX"`eB $9rNH$@$@$@$@G@rP~8"~VA3@K+(uf_ZBe}TQ{ժLh5$P/^&$ʑљ05w&u$@`KPx c(mGwm~'  &Wo\ŀ[70[\T^E \wM/&4Z/;jy]!񳵭}H!>P ν i6/bZ_|(**5'0pMRE>kVM$|XXI$@$@$@$o^z%:g^{6+K"XE ̙ɽ#JFc +C2x\#Dq|X˪qr:.2)LRH4cSRR9Hg ,*Vb[,[­F{"rB~ona^{w?/ D6kD_ԃR`H&`L 0 !3EmDY /3&eN㨖we=.OUo&`L 0 @NܜW~}{>-G;X'`L [R๬,+p"`L 0&򓟀ٹ_"謆 0!+`C`L 0&!@=s#2&ʍ[L 0&` _y)xOo&r`{3&`+g_~uk&Wj /o|)׭Y__}GQ}|̧_|o]O>s_^OW?k׮-??t?90&J;+l`L 0&Pŏaq𓩟nsޛ;7~s #ܵ._m;-xۘ2lnYs jk L⏿¡t0~5x|ֻ˒[!k<9sϳ)@1 >^.&`L 0N>mkoڛbpgfp]afqU8_o\z[]o,]>y7񫋿8qwWz~)zᝏwg+yXs9ν?g2&P"xD:`L 0&ʟÛ4=F=푴4կZOޖS?OQqGH7;+w? zicL 0 ~nʿB?{1fYUyN+[c.zmF>vkD,\qf{ JejC֬Whs#&_` IDATܠZeν1|9;ڜE RY$`L8xߖUq_}1Dbے ,:{S'?GX8D߲๧fƓO|W8Tk`)D#Xϴ24ӊ('9` #ڒ%T^J%W!G3~hvZL^G#IyzZ09]N2CWiΔ4YahQm~uѯΆ SY6y-D۫"XF6F%}KcCGd zz.׈q ɢ<'cjS];֙dT.K?uHwd #}Җ(> L>رƵ\" ?m?gg3Dw-Q̡>QU;0^ L g_ޤ;y[s?3nY`Y^f0Y OFr"U4m#KE3 N`62c)1O!W- b0#j)oWu%QxG[`hC=uPf#(MLVz,2Kth\;u])/pC1MiAone?+U(߻G},0)-Ƨuk2AzJ*!8]_ف=@ ?Xyz/LY۔Tnآ{ }d8KF=qf}ZL9cЎ"=ȓf=+vp:Xhf݋./.řP|nKa@J9@HTD;)P>*F-OO>4{fq^Sut!Z%Eox o&p~>?g[wGi2~q\Y4QP7zp`U0]AV, *2"Vv'ЏRf&k{ȕ bgHO)2ivʴV[>舠j5vxlېba9FGY^'(T: `k#w#CXa a :u+p2+(>^eƾ'^k<٘,?[Y2+varf2rm#ýXr" eJtY͚uYvl֡V.V-xq\_k(a]}!"֦Һ{/i۩Ǐ!"uDhhqD9d=۰ղG8Ga(B, 05LUwmPAˡXvK,D&Pϱo{'sw5[gBL ˙`Y(5I]eӮS9y: f4\)@jYrvJl*(f>H䌜V?dډhΡ|' rC-MV)X9];(& "1Ԯm\ǠG̴"!R1ARBR^cFQjb/{p ^Dp 'חy,Yu9 HCf6_HiJp#qCӄiiڹmNu_>|磛 d/XO 41zY#8/Pxg݀:gq$<Tmdzqr'3=H迎Zމq{Y+*==tiŽ,i wݧA&<5xݞ | Y mw0cI?•2K9pA) ^ݦ'a̿h_Z~zS(}ўft2۴;P \,5Z3ja:l^g-;T-Ngɥ} [& j[ƧzT7GW7-^s-ǒ%1o-|H! Li Sh>= A*h/c7k}ұ$?QRg1ĹTe ?;Ϯf.ǰݨL['QSMaqw>H'pM7_ዯ{ $˷lum|xxFqGc0WlԅSXfo؎_K*&P'{!82҂CYpܑSh0N8}HK"UC]د?|P !_*DϬ ^ Y=e('+W>J,/\MV[Q_l=5jOUGJ\p h4#JNSV+:lB1XWffYajCA>&Fr|>? (.z?8qfTY7.?'~޵@z}׷qɗ/k| .|x:6?}?_W4U7_u#z=>('Y|mS=CK(rC^/g$ՏZ=%lx&]EXxUwޝAئ,ϦMyfFt`W Xe-t:R5(1n,-8bՖ{xøֻ߃(W8e-?s/yLĈg*),e&XT$&P8D\{nvm{rE; + { 1¦St܁L 0 "D?{WCYi;߲o ׷,̉}}Rs1GgW\rV$C誥͟Bso&L 0&F6_+P*UEb9lX"%j`L 0&`L ;Ť˲`L 0&`L ,vtɩWCy:Yhn;ݹ Zeqr}4(L 0&Xn߶ş #9/МVq=:ھ'7h= \Y^JqczO^K%@nNq~Cڡ_Ԏ"qjTh9&5)N` 5i9\ `A@! |gXv.&2r#qC}yK[̧tJ*_:nܸn6dQ9L>3&#e_ij`[:N-Sf8+8p"'<2+1> S߻+˳hQeqHܩzoi|GYޒ]&cy1!&!)S*eWe&;Jcc}n|obzacsc\΍5q\so 6$8ov>1l*-= Gט<=[oml} n&XE8D߲๧w}9#ѐYJ&VD2Sjx>qhiPͫ+d u&mI=Rd w)Z2.AbL&iXdGjnΔ.͙N+ݱT@Gz ӆY~w(a}lԣ_/$ʎu&fX&-{?dƴ(z_ȴ>^׃̖ :;c8 |mm˳e-YNp?CrN8|x7w7ĥk֕G^~I_.~tQ<<_ci@o_}yL 0&PX<OG=58Ė,O9B "kG5ŤSZEjhYPK3̷E"'jiQ"n#ӊC-ME{b<-ǒx rzF'DMS}hi -xY~37AfQuF 0&` |第K{6sO݋A}ax9AWaKIg-iSqrwz[ o3{[Pg)D•'l^dmϮ<-(\)CmQ(ѾBKa__4B^[Ɯ2K4s߽!,EH hلq˦Atj:Me!kzTAzƮDŽRC{2 :t&Ut&@xy<j nz%Mɱ>mZa%(a/aʇH̰D ۴LV &$\W|XM&%/\MMٟn+hkkKo c5(K|)IBʦf4JΖeת&g[rU J8s&뇊uvKsYD6g. IJ,*+~i7sx`o0cjS}b^A5[ItRƪ^.i2]l@*DH=NḢǵEeVṿm>Zaf1ޅFvr:X/ %Ba2\_,׺97 ݲ9,-I |~RdyI CfvpO/?úp+5HFh9ױn:P7Y'cGƓmPϟ,itC8dH~ks5ϣ:tA@<|wD 'ЂP̸ޤ-8=PKN^R12:)v'[3wqDĦV8 ,vhZY c%L 0& FXv߿9\p~O\΍xF_6>/. '΢Uo}xq˚[Սr'~{G^0{Y*'PCӋ@fipr٧v? QW7\]i2e`ayg (:펢%CP. J rAE0&`L .߶6ḓON >,Έ;o}p^8|xׅ#ūŬ~8~_cMʜ7ƵVTnmQ Ь򺹪#8/NQ}mJbT}QZi RrK+*lb>##-ovڇf]Uwz0{>e8. =aL 0&@V0nW}&2??L`i 4#zwOk{?yTӂ w=hZt=r;]tMnKʥ ;ΛX? _[@Z$>gKC_4Y `L 0&P5y:_*9%)-( icؿvd0@8DUӗlܺkHkq*`L 0&X}_K/gū%ifE !P/x'UY8U.1&`L 0UN6kDFB؍/1AЇ((\7e3%1`<WeE<{ct'ޱ~`Y`L 0&j!P_$_4WTa;@1p~TǏw*s&`L 0&`E 3B!<7n1ßmu.`L 0&`LϊUx;9z扗ql |!ɲ|`L 0&`L x^v[} |`L R}P5 IDAT֭]\WARH?y[3Rti%֭Y|ke2׿n[6"?,){&K|K8 Gؑא7`L 0&NXv߿9\p[' wnŏ.⇞⳯>Ï'~mlu;x)p?CBx`p Y,3S;nwTnsøee=^rNz냷˷<yMzUd}m[܂mĞ{޵ƵW^Lo7.{QƱeL ;H]3&*3>fL 0&V/ro[{y7F08-wmN29⯄N35؉f_cGq /~(.|pospҿ}׷Ńr/}r ߺ[}z`@H/~ ēOb~13g3~/{zW_ `L$ \(p 7[om[ `L 0&B"ϢiV¤!`͚5ugο 8:{{oV`o孆3o54@6 0&(2ZwͷŹ'w#S]N{5%aL 0%|m[`L 0&`L```L 0&`+;+ L 0&`L 0& `L 0&`L 0@Ћa=+˳*/K\h*dC.zSs79+ 9vR̅`L .n ed::ޥٞ S.^Cs9(Sm]ŋ?GGs5Zdft3jkk,3 "Wg,>w5'InO{җ$a0"݁[@jXHw0#zVeeyI=KrDr(kG8bY KB0&tjuk&Ww_~ wS/o>sQ]cMy7nW52!@Nbh  d@l;ʹbTު{AU>Db>|a+;x>ǃm 81,ʤ:(΁'p4rey;^JC{OHXij)»t}(~-b4KS8Ch'0Q)o&DXv߿| ^kXn=N_8?pNwQmloǞ{reTQo ip}?\"Q4lm o x*<zs7t3j_k['  |t#|o‡DY񫋿MϱMOƇP_}s~pQ6le\k 0$x4m\๧'7,P9AV,/KƆ!@C0l)ʋfUa I-Y5Գk3E ,0h STf:z/<3vs6LM-O9aI&lx yƈbF;,fL _}&w>~1nYs HgW֕pkxxgB8up?9[LzXW ϽNw\WEYr]9'nVD{n/MK.azaZF7޹Qo.w]7z$?+@~DaG؛ {bEhE?NJ&JeZ @~ F7ܚ:nhY+mZW`Egs쏣'^Ty=:aL!Eey3$5L qP N+F(M[ aL&01=)T& Gr!|l49zW(HJxw'?9ґ4IH tK1N @C'lB+)"&c^C@x0i Ee &B2?AaNov&;XȸPxVRa}#&xxøֻşޟ"}UP}YwO/cֽgiOQ'']O~%f3 ]>ӲE>^+@zc6bUbEhq"xqt5a{(#ыVEߑfP%{71q] A';B@J~&]N;`7^eI&bm!&%7(g݇w'Ój^z7^G?QZgii"AQoEr֯YK#0]yDT@Uў=PQdKt6A)/ [a a{4ƒ:<4 &G߶ kݲf-I'da jze`L LRvCJK!Gss 14mhh_0 x/O8ntUF[p(Ź';GxrO&"< ?^|ZfεV7ܛ{vG mg5D3lZ6>+ѽ3V PX]5E3 #֯sӊn]TN8q(P BmVS۾ `j~<~jK.Kp*BFf6vrIɴB߅?lsd#SƓpL`/YR1`L |a+hm[}hym~؎4?2҂ڌ>}^OGJSɓΨKV9*_;=)~0@g-;vG^y`Y]]xGSi-AР  C.<ӌ~ CZ]ڦy&.i<5Lߴ… ?>Z@Dİ1^F*jmA/2%<{2 p>fL 0&9OKk !"!s+k)[Y߀Fx#l?Z%t) U ⇟<.Z!UE e0!rr>6oZMژr`d詡=V,/)GP u8`8&2m`&H,Ϣ"M&3Zx;o.6ؙwqW,% =%`V1/םw'mO)(˳J` i`Aerm`L 0&@:vәu gukjALa9P'+3L 0&`L vKV~=ѭ6>lo5: tR$bL 0& @wc&L E:M`L 0&`L 0&/v%`L 0&`L vK&`L 0&``?_Z^ӎ1+eyV9D^hTr)Nx}8q2 h^&QEIq퇕~ڗk^pI͡?'ԟKjK+ZI`L XvUӗlܢPȣ?bޢH)'E=j;Y^ڔYqP??UmaP֜uװC`8iY}kEb(g(dc`Z?a0"M&f~e&_+`LPx}Kq<րxTfWp&{1Tt O~vBf|B]rȹ ՟D֎zTv`{L`Hm)gKʹKqtnM!K-N^XcY`L 0e!%-x-Ŵ8 tyԹ0A +GQ"5ysUDZO ^29q$Nգ*m؅0 C?+E |elnmAK%CȈ{G3j/[[}=SRdlEqь=qLImj{dCSh C-HڕEAtql!kS_S̶҆X:2^+ 1I})y2}ІV:@2`EN{[`_f~ڗv; ~chyx-<~riPt@)˿KGf?wT 1&p~}cلs!?|jRL!28_&@ؙvPusXC*Q` r{'w1Lns0gJA&OV;Mͬ v6e)83쾰Ĕ6Z}!̖0{,ȬQ†tH!< kνn鶌}gxThm,e[zvmZ'(*mTf`bֶHCƠzQ`mDcVYJvc^[A`>h鰾GN= BCSdڇ;*%33%onԎ,4[]#kt&`Ngs+q xP8$^}}:#?i!L$C+;S@dU?6{nYn {zb7r\ QӠZ+f owLΝQֲ3T0 ib'S)\_IH\.A-IӏdT; 1ҭs}י%/!Khͽ?*if9T<VZSBbw|g*09U>Db Uc1684m5oA܅'Gв( U|R"8D߲#(uN'Gy ܍'_JJ/|q=Xk} slūC:l5C  `|er)yMQOkFy9#mDwӤԴɞ9K U6R6(\+yn3{ufu{-}22[,8NK,>9Bkĸx

(!_BQTS;&& %P1{a67 $m}=}jei7􆰽/`~]hC<(|c?~`Ue6}^5hmkkI~NYOrChBPTgE߹ʲP }/ E_q*"ČʏD(A*kwۂz!y>PG@5{0{^=U>j´|VK>>_&;wI]K;7vE&`+{y}gTwwK.-K1?*:JT~=[.5`JMvC1q+6:L@J`_r&ڗsv&J;p/tWGy ըg;iRʤ^\t3-dykM u'Qtzo(oC݆ IDATtBdT=jN+,{?{|)6`*S\nh`\)+VtYe0ZS&@oI"}>qbo|ojξHWc,Tc8|h+pԒ͡(zp^_9]JYwԺ҉(Yb>uY6`L 0"ЀXe"[j&{]=}<23%q8V8*Rq9O#XϘ f3j@,D1W0(b@ Lyj=JzjXڻѿ(@ՙ>TCIh]QOl _-[+ʐ9)HhbS  k?evirOY$?=:ɀJfhP)<2ۢg:8v-؜q2.<촲%cmڕ^[lĦ!zpIInFb Y/O6$Ӿo3ϖzcL 0& ~^yg-yIYs?3jey 48Ħ;MIVP2@q_!_2̨HhE{@qcl/=C{Ve*j jXX0y> 4chG=mh[VZFxXM *#jnvnƔL\&Ԇ~pl_۬Lc׊!1&(WsfPSتӇ@+Vey")m5wa"~7ԉ09 bBឰA{}TxPa+LmΤ}djJuhTC33Y6DvzQ$T@keEVQUM{BL(=Uv6o@4Dg}AH|#gm0N1AQ3$ klQOG`,2M{i-UEf6\D}l(tL*RCME?rM;-'[1439Lb'~n:j-v6-}[4[%mK:EZ!<†2@`W@+ L 8%SRrqT?)~t/1x:Y7)s: х![PcZ<+J!ԇ";؄Z/|8<ݑkٌ!d9 0ۈ+2fZP OO# >ȤӊP7w7)кT|*b.ٙÃgf#XO&[dS.m@#yzQ O$gСEs)'[{[mhZbX >})㘟BlhL/6HHyʤ̏K}>Y9 ?{Q0&;hgqT;20.r?[_fkr#nZa(B?+&l7:b]~6 +;0g5!=%`XYsKiҥ5aD}y=VXݴ;P \L5YR'_6q Ej|f(b@YxC䃜|6ʘ(\ͼVE.iVQ5lB`zF8KiDi7Q*Ўm"ѧfY]>L83еУSDŽ Zle}+EUc6X˕iPhv_2k3{{DȸxʸHdJ Yԓ3vzmJq`L 0R%r#k?/\Mֻ[󖱒 -IjhvOE8,/]0 t+s՘`$rH,ϢoV`o7 4̾2MdL`ғA6dy6U8 0&`L 0&JMe[`L 0&`L Bgsuȁ@:*L 0&`L`ӕ&`L 0&X_ͽmgL 0&`L 0Cӕ&`L 0&8n?/w)raχukHvlS*Y0FrR38;2ڬ Oj\DB1e'w2@iǘzYUyN3ٰ5S1\h6;=TӦƆ]p(>rG"Eg0˧L :p 8pӚ5.ZB1">TUEJ+,Q4vmp!S|fo'?ŎyΜ|Ӄ\εaGr@ o+WO__ƳqSYNyES?{eyjpԣ!Op1C(GQ#;X cȉ2Tag1d]'t0DwJ2KS>*̥#hZ mXjf |UChՌSV,<ض*=۴y}J}@ۋlE z-Y1Iq!H dts=.D%15\#Ƭ ԖalNHGL 0G@eRVʝ ,cQ5l N UnJ`7om<70:y3j8-WP)vף"a2&YϘ/)d%u2 YíK;==}<*.\eN=72Ad\T-DŽɖ6(c-Җhd^DԟG; _ll=ٵb̳jS{Ϙ!0>O3Qn "qt5̺;މY?o@o,(i\>0އ#V=۠$l(FCVGlL͉✾ #@0B_ WI^#~7~!jA"JQE_ mUG8П Z+;_jV;Yx7+om›Oxf ݖBI?n53p:fث=N(zhD(`fzfջ' MhA&OV;MImlVToeà \N \QmKdiaSH-Nywi< }NSONBh~o̶h"Ҷ3KI?m|6ߩۥG}dWs)#0=Ll鸶W%e 1f{hm{hL= BCK$dkڇ'dd9 @;6mGYc*Y J.O'Rg@agVW6ب%)ƥ tUY2k/ ε(Tt6B F4k#كN j[h"E&~ր?ױ;|fH#Vܜ& hN(j)9b}شB SY}jF maT{hQ18җ;+r\eQtSS`~pa-`'ETEH?%1iTQ}bmLudjN3kY~ҏ.͘m'YqWLq~llq0|;,r-{ԥ.ˠZr][3$3@ ɞ2S_6 D3ڟyl[82!S$BGpҼ^o'$)8?k8-xAGJ S , m\_ٌ#[D͆Ƈ8e+wʏ̈́a1fT+3+q>L!F{Ô٫;"Jؼ/F1YD\{ 3d娏~Ԛgfs1iTWm[Zwbjf Ԇ] KaO)Bi|8/$giwU/g^+눖1o$!W)f@Ȉa׉Ū ˰|~h.b90~zftEꄋ;;du C:oQ mGSv,["7zMB/CT[J ;^p!~N?Ƽz<_N[i݋ֳkW\ Y/}Mf&hkaǴ 0<[;Ȟ(!pa!BJM0zZ䨯ӊd<״qK{@2LS-R)#YdQ-FpjD08SnL~sڬlgc)͔=vI*gYUۭ]d !O#"zT4f9P,gNDs!/"Ѐ^^ݴM7[UIKSdQ0N-~uS9ۏΠ=͹V8 iA͆rvvڈ^L6"Cl?P*/x5`T!IAv?$3o O}h$sخKʕ.aylӷ6-#]:2}15=%݆Kw+5Sc\LTK35/%:iAqh?zaP)Fqḍ}˅DbY~zoV`o%gr43r8{kBmT=\=.O)eǜ.fY,ޱa`Ev%KT' cҲ.ͅ^(, 0&`[E<|582OG~ NO8Ur%}<çV<$Mff|HYUu}0/LtȞեdK\ Y&bL 0&|K[Ǔ,2\L&ŹMxʻlQT#@YEܓ><5)Xv0D(5,a}f (@ՙ2>TCo?elcrv_-zVdN4F!q6٢1s:Mͬ!Zbю~5PE1 1OLlKjBƶ[곓 ).h/OX$iٲdDNsW `L KνϿ\d,[9Bpep$ 7cjϠCª(k ^-za (zD(0lr-;DwJf̈́iIvֆ1,{#g&4Vj?)S-i$X)(3k$:ZN 7ea.a,l&-m>=- 0j izkžͽ}o2\1h瀋e=)T|2 }?L 0&ʝgۃ5űQ$Bim,(e'p=8L)DW{G=y7I}VM7Si,]tP{5;zrO<]բա(Zm@7iMjq^֐y2vjWfFzVFթ]LMq5N;w٧4qTª:qP7$9=W5ʞ7)zM U/Kң:owofs\?3eՀ;2gWy>TT,u#a?Ntґ%XA=by?qhg`2݊>~\3趁w@@Rt nWѬɿШm~ (YNODG[_9o !<#:٠h/I-Hi#qa+SQHt}TkT`VޣKփ޿WOM%Mt 4 [5bByzZxHOOJٽQuXap?匕@@?|l^xfZܞ\s%Hxq1G}Fs% uS­iN~=cvP,f;zzzʹa{|Gzcޛ AudNM8,^uNI>7|&:]Yh%ʗ~b 6zͨxH{5E/svIJ,*֗R2O鉧!wGXn +3,sE~ݓ# +1Oɵ|[yF'>l4?7oͱom-4?zrn)bΧUtOi`Z:5wљnf?-Lu,wɾ;ؠ^SF!}yH_[~uUDTJ2{aDW:4+q|mu*[7v![Py5v#}I  }_"  iv1v7Z35?w{-fteJvw?rnߥc<+$q?]n?U_;ƋOUqM TaR^z;v"rǒ>?Q 4ܼykI~Fjr8N`!kx7czĴ&T:۝,aK-'Nh߾}Yڧa2t|ܨ=;Fg@!Yԓˌ_l9ny]rw%0%|)ݦRg#j89ΏO~6lVc:zgy̨mͼRFm(wƛJח^) %p3KU;g~}%Z4iKZ;j]@&,euPy0<D(#3o_^§fgb ]ӗOLk's[3'.wcI{_$*.qsr4YRu nb@Fӱs7Oޫǽ7;rtx]\vD)#9n':= HO3vG y$]YzvI뚏؛s"I@.xYZܛߖR@G:WIrln-9?w~shgSMjN} ΃8| ;瓼jM<{5t>9N\jQ{Pb3^@^UݰϘ鮏<ճ">3z&Ѿ|:) βmhH.0xWu׃q3_*kҊNv?K&aak;_{[6Yq}u7۹DY:tؽ|Y2ܸ4˙cWJ8cI;WM\  -Ss~37 }jg:|[ڨt漤J[$_'} ;瓼Cv.K}6D:Y"+nayRQQ!(sf=$i9snT:KOmi=AW:T67 hqS#:v~>LH72t3"b>f{Cip|hr):ےnlfb9}Oҳjf,2 @et,UfjCgjЅFBkJJsK~Pj}GCΥoR9"%ҁ1]S8jwMhA Qs?W\Cu]ysWھiQ`44SVOkxԟֹϡ$GpnKC~ƓxӺm0JV hY ar |dfeH1p{܌X4!=jDoP' .`+$1N{ɍ{ߣL??K~kekdszA[ gZUА2 L^!B mv9NfŸY7y'K>r2@XB:!3?'s6]nҫk-iotzrHۣM;3S_vްi2KYHj)^j)>{#q9{hVх`ϤGG.:B_ZO]:LN=}33!$ovnGsCRٍ{4>yZzzj.i\l*S?$KEvd+MY37N3;%1&FY`aeV3ք8\XY27qJr42@-\/νtj}JڱOO(:_\Gn QаseL_Wy;֗۬!tAɺ0q$ ;։NE= 3eks2Uqe&uuڠq4S}_mMvL=8W9ʰG,S8q%Ɍ^w_SGэjxm7OS`Z2Ż9w?#nn'Xmة'ty,7K%%Ӷn 7#Gn\G/qޟT?i>ѹ~{F{rخ|<9{!f"Al=ڠnY'ѨO ?h/:8j8m \g,ܾ R]uz)Nam)?Yg",{g>$Z$kgabI~K,p +]}R%RR y5葉5k)ۖ>w&>%$(@J~1=oC֟7&7}㵳})G}v-x$щm|\ucM*enw+ԝ4}dQGu 9/A9DV̌<#޾KY~^RQ֝{̿aX- wnB7N+ozG*0v8,t8ңdas -S}giuI?gbtM_ڴ~k_<3s>cعҵɽV'/kک',Iz<{"r+ҍ=*Kjj)|/G=-_ OzOvxx7+hfcNx <{,iޫW^ԁj;nu븆fV!j>ν9ͷuJ۪|}3a ubvdo" >PN==gMeڻ"pt^SM=Y)e0ZdנύKXYiSsq30#s=3@HV'4ϿY?YQa{ySlˆ.ϬKPhŪ:1bfXD!Z`s.i|]!Pts37 TqKz/k>1I^qj":܅Vg7ZSj?|t+3]~wgH&{|4E1u/Nn-jRǨS_tkN8v iZ^Xki>}s߀^ }s4Wϋ6G ciCJ{CpOƴpO %3mL}y?/ͩzpc+ gm-3hJ3DxB zX[[&gCJ:|dO=b6Ko9Qn0ڦ.0#Mm[R3CDD3t%#\jJ@` gC.4l)k㼵{vԭ~PGtĎDǫjtsSceT4704]ѷ]*f?9|qV Y%[Fx۳\UiqYefm'_?/MX iN3P P^.߃5K|x3t8he&or.j/oFHB?/ټg{]G<\[EfkTLoj݄M~5Q$%K(|k!9]?$yM:=9}Ƈ+y<#jNtҰx(ye.FL4]2Z|=!5>#1epoV*P[1't:ҩ'U;\*V_ >/f9葋YO'G^bjK? {} '{K! Q~uw)/,#;f:zAIa >lFuP?fTtDg-u|67(RzF_;z{ӾKzTeXa˥ ]#87DsH~ Pgf\U>o_|9xR}κ$4o3N&̖suA3 0Fe |2W(RՄKWVB,:X{Wfa$g|lҚ} !{`@.DL|3 GL9lӯK@ 0wAߌ?_X_v"ŧ>i}eywܣ|[yFϹ| ֦iso={oK7?O3$WAIɩCGͤ^i;БjxdFܩ'Rg7S~6:PuwҎ?Z`F<4yZOv=!d_'QlfG|f@¾vv9?GCX6:aV :)O-O;g>{Xڵ=$Aytϵ   u,@/.MC@@X>oiMZu`o볷;q@@@(/>Wi=Yzfa|    e`ߗI͉3m(|[W%)\"    TTgn.HV'm9B@@ /O~y'1,_:ٮ=tQwf ;#  %v2K>҇as}ع"9  @N !,+:t୑}й8  @^wSҧ隆{gFC=E"Ο!c:ѐtK 0v8c޳>V$ROb|6u @" iNm}iIa   zbRY?x3 O逧f)vk{Fz*)4z>y'aʔJmZɏ)~Iap@@iyI)2ˡ W`\ǼOn-ozzEhF]2j?tHSߩft~T5@>4p@@ ҟʼܛ{Xs35vo>0d''اNܶU4*{̯ߺN#ge_XYTdf9\vÇMvl =CW<@} J@@jHCл#{`l'6[|1wGkǞP`bz5XJmZ5`]֥Sbf鏝H[; [teeg+HJL Pt"@@_|#v;{ѝ{SK^wփc3~O='K tYS׮?>-;vO4vu*][if>djݯn7?ԩ:4 @@6zzvdt;%؛T舼ϻ T2MzrQe=ό:֬yc;ǮLY#жut혧;> &Wz>XtE  #`޻LT/~s+ȒuԻ[#}i?[73!CW/+N[G1jʚco;`_2˷^mf~1ك{)K\Lٱ~=kfxrBO%Sz =6jT#l@@ǴsL IDATxՉƸ`i;)~fzvDqkҙawyߡ~)ڭnwLsWwk0fƗy,8M[wEowOu҈2ߛfji$g[dKXeDRFg@n޼ r 5n,wQt 444hqqIq֭fmjo6+ɩ9E#-śfۡ7/y-w;F @@ZvMbEԎ  _#PWTD@@@t+-N}   A~P)@@@J ԇ  ^?Bò4%` Щ@@@R /(!   L_tD@@ ]`;ߠ_-JoS;h;7^s O`@@ lAyV|QbWOIM.Z_*D"T@@pGMܹsVgW\ѱcq'A@X: @@"o'8q"UVY&-/@ Hp@@ }/;|3z7v1_5|O/<6GM?\rbr':lGF~ ` 0'@@%'??Ĺ~7Zw׺;R4w1IQ*6q^e:9~sR9?:́ř_Ҭ Q}9gn|φDs@y/+"  )܌y/k:gR|{zz hU}{!3?|%:Kz`ƫnCH15!@&.A"  P:Zw_xg~1itTG>y?$G~(uj'p5zxWW)ҧ{6y=e S4\oO'z77l~- ūF  %Х-ыntS)S?Է5VPZE5r%@@@"GV@@@E~\ @@@@:E@@@j_-W8@@tu}򓟴m^ @ts"  ewW^y*^Hr9kۜ3ix!aL^@@(_jYnxDC]r%qSTb @+Wm@@*,`:tݵ{oD|7+8k,H_t8ңo~ǼMɼ̐z S9@@,pw}ӟjxlceҘELgO7άו~!,Ph]u:Cgl3CJoKm-iٶد:pi  @M 8q"1-GՇ>ԡmoཫZWW]Nޫ!ֻ_ݱQϻ_@edA@:‘ @@b>ZvwZ۹?x7ˤ1|Wvuu0u]5ܝn>(Egv{h'y<#o uoj>,313S8{<23zxcp9ElS{c %wDɗo.}8>5&]:q7Ɍ#$x~҂-@@**o|Cgȼ k~``mu옵}Wdm׌$`\^єbQ[zvw+<,o9!v#}YFÁ }bȼ oծdO;83QWo~* INf_m*Jx{jA}gt(Ꜷ*׀HneIT'ZwcqXv?ʔ0=x܌ԗ╧s)e#@\j  PJw(oM==?f]o~.Ϥ-56䙊>1Eׯ֩]#:Ztfk4Y[jꊻ9Cjv)KɓmZKyuotcugޭĽ!)3ȹmvEO6-tl   Py߹wDbݟ3޴EڵNt8{muZߥ_;LY/5vOCJ]Ag4<3ƮcgE":3)3jl0Xk[k_Af 2ۖ| hy֢gbWՍE׷N{:SQ ,k-..עr7N/]ҺwM5զr;95h%$~l_5;o*V<֟)wVK6?I_NW" T}Vlއm۶:fѹK=)I@t"-  u%Хcg):rVtҘe*@^x  %жU#:gԓ85y.9?}~ھ!CtˈK  Ԗ.w t<>Ҁ05~K4!ZjJ~M].E@@Q_+i抦SA|}#]Tա^^)q*($S^>e'hݯGYt   +0s^v7=w'ww9+S#@50_ W@@Xw ӡo[vx{izMnmg4lr)/֯'3CǓE%`$  @SpݛS{vPN u*~̜AE"1+g`oSnE"v罻3 K碇[V~hyb^╫oyucYR,)8 dhhh|-\0N/]ҺwMU҅295heƚw\%,1!P{LѯkF  ԤE<Ϗ^)7D@@f4ԳC~I~ΓB /9)"  -Цz@0E"T   @yח@@@0S    ` ~y})@@%ϖn*F 95"  PU}"P TS:   E /   TD   @Qt#3   !@:Q    PȌ   @u@   %@(>2#  PccD?5VuhǍ/Hϐf,1hhXSqm F  /03>i0W9^WoN|&|Q1IBZxgN   ˊEkWmRh`:剥b&U(~^BB@@,]A9yrjĨyw>|G;?u}ݴVΜh[۽{ik3eˉi(j9ާԿ#'r`_ׇ@@(@hk ~Jy=znO?\מ4~@1utwht{ @uƙz?(]jSFX1_n;حXi!Swbj7lfV~^C@@m6M')yFz;Ws?][y(yV(y_߈b~.+ʬ1Fus𿙩)] |87bڞiYS  #֫CQM/slɇ%Fӝj۶jWtD ̭xBRS'  K!06ɷ)~ԶNtgt|_QhYt3;gO)M5*p i܃M\{-  PO/V  Ԋ@:]6SxӷؙC1Ι5ò'H_ww͟nrd"n]N2uw~/!6eeŘ@woGDVSf妗>K/pť7ԼWyGeP  Р%ZTSiKZ;T`'xE2A@@@jO~]3"F@@@ C~ @@@=:w͈@@@ :$@@@@5#b@@@2ޙq   PY]F @ntss"  5'\ 0Ep;r"   P5tR    /܎   TkR  rя~þ9 Oa@@ qwܑQ`A  bVUv~ӟRUSԙk@@vk'j"Ej`Z q! ԵzNͩeΞS˶mh6ʴu\C+6mYOzfJ+2z2d3=Fm*$H :upi  @m |AQCрh:M!I.&d,sŘU=D=m ȓ8\LBبrW"<@@0|wVnl]S]-sz}~yVOR2  Y܎/~ }zz:?>%Knn)ݒԲ[хsޤ=5c̙i$YS2LlZ͖OwI'g*̞]ڳJӜe6jf5)o|J;9e)gOO?%>=ޞ-ZXfZ)kyM:7Z6wJ|b,@# ԝ_zUw}w闿^N&wwڋ:yaD j&ڏ뵨^ߓX^DY~M/Rnm7u9Mp/h)ӽQ׹θAez٧Is3930kݺƺaRJ[~)65+QtZ{=2չmު=< Zcw὞դ-  5'ܛNymܸz֭[jmm:7jӽ:f\XЊShOi[sn֟٫kJ@@jX`Vohů~N~d64;,ꞟF[̨}~%!IDATS5kN 1_ou.sH1R:;}9_ e@@@ Mtn]/KЇ>RW<W$8@`+;  ̪C~ğ_5W:@"T@@x{c5߬Q__G>]z5~umOQa.>  0[nYwwɟڵkS"1zZ_ؚkzԸf=l}LQmSGSAtܜZ ɛgUeM؎t'iŦ2iI3nPV/~_cZ  Px;j*'?\7!{2zبnv Β㙌g>vN߻]ۢʫ# /\Յe mG)YDSNVkIK@@jPUS^="D;Y@@&`{_f޼VXaOOOkƍ$/ۥۘĹmު&ڋ:9ը5*f|on)2qi&yYf79] vZIF4yWlu=Fm޽Ekԙkmurest^\Jv'uLocff7-?%NAZx֕4@@&綾^¿q~PoOMζU֩[z-j:f5I ݭ&xQ-f5pnJ׭s4]?ƭڳ 鄦]ؔfC0Z[ͬvu665Q%ndЪ뭺owlvcHr4R}>Bj)BݩW'tB @@0?g^nFMW^Ii䛧#Dyn}tԸ5&Q^6묇o*rהfP锪Yw0{C6%Τjn8x{ʙVn1fi~A͊x;\s!Ǽ[FE lP8Y~5_bC@k}yyp3yHiY仝ABr} Cȣs>Sc9.or9GcxGݵ!  PC䙗}S%55߬IQYg5bFը9͚Y5SfYC%˵N']<Ԣ9ewk ֲsHK 2H,pcnR!yEjā  ,~&π\|9ѹ7ON7Tܸ6m5iӔw.mj\{ ={~۶FtON^V5 y?d[εN7y4 95{a;㕡<4ΩfwC~_zߝceF~55f_BVtnuny6i͖nb;mo{ה_ S۱IsS:hn"$@dӪ[qM6vj϶dlV)HM೷)j:5O7gAl54M-ۮl7r6tS=C@@"c2O_r~_lwosG?jiq: 2F j_{Q'/9G=}M'Zuӹ>uN |zV4jŅqm\({Ja;S!νߨM:l*rהfPEn]~9[e|>   T7ј~;?(45iMwFyiS~Aڼ[k27|g&Jb-kM@@=ctBSUoka!liU@(FQq6  u%vMyݤv|D/\r9bo:sRZ-w5Z3<@rU^V)YinӃ`=Su`Nq{K i"Ѵ:;  Ibc,ߴ)e @q~Y`\j  Pf~Q-ڳ¬ NIMzp_oۂΞ;yzx^D{f3V5 O9{ת{7ԓ2mߌzycV4c[nJƝAxj\h0e?皸~viL&csL7o-f.+WPƢ+Z}EA  @CCkQM.iZ`;ަvFԜ ~{)Y8$E d' U"~\@@X#@t&@@0f?J%@y]oZ  Ptڗ´Xxx~anB@@@W @@@ _@@@*W @@J'p0JB_@@(L`m(,#@&_@@@H   5)@&/A#   *@?Ճ=@@@jR~M^6F@@@ U~{   Ԥl   @;SwC@@ĹwZԮEմ$ NkNҊmQ^{qD^TlشUۣ%$0ssj)Y_O\V{[f=<6G~\ "A@@VrJO4qMjr ЎbV,k_[k\vgbijhlԦMeǷrVP)Ħ*@@V`^}JG)2vsisK{br'䒇4 *~{  ԯf ۣɺK}Qwogl2ݚ^/{s#t@^UqD/ZG4FmOQs ݦt~-FMNYyS=lvJ֙q,MHi,io,:Ҽ SL^soS~u^B@@<MY/hq6kүk=x[/ll^kMJ>٦vuNC5n͖N͞uqlonօkRktmN M:4?;'5WM1o%M矈:XB"]{Q'/Zt\kS{=,i=b)x ' dւ&Mg/y #a5Kͱ_]׃h@@(5 >rjiq/wY2έ=-5j{ߛ.ݪ6d:ΉrZbn܂Zڛ5;5rop+U&6<6רMf\҂YWQ+.l e&HݰqU)͚VbhԪ{AYn %򳱤t𗔟@@@SZk&x9- )f$ywLMǻ{:}5MSµδ3~̫E|n-4+"M5o"Y[2:iE>xs:yj39_HAu+ R  !Ф3}aD/\D?#Xʔ~3nMh,3[nZSx|ۭ3gf% hyb!sj^Xl1Z}EA  @CCkQM.iZ`;ަvFԜ @ 0EbT   @ϖ@@@QS   _>[JF@@@bt+FME   O~l)@@@ 5!   P>:峥d@@@*&@bT   @Y)@@J!pMU{XRԙZgIENDB`json-3.12.0/docs/mkdocs/docs/integration/nuget/nuget-select-package.png000066400000000000000000004631771477615276400261160ustar00rootroot00000000000000PNG  IHDR IDATx |C--.@%j1VGAZ)kSjK+7\oXL 0&` T8!NWC/?*.Oj劆ɻeC? 0\;w4H466b߾}2e{hĉC 'AwWwFu{jaL 0&N+DǎwE m7ܐe['V|7V&lh%;6RRRĪ_߿6mwlq 4˧Oz(~zZs &`L 0A ==;wnW_#w'ӧzhg4 *B ΝR /a]?{6F&;Uڅ?x ]\I~,G:2RaԀ,09g#C~۵xlvFr #"|,YUUU礡VUX%Vf<} Νt*|&`L 0@@]WMOI#dypŋXG)fqW䮓Gbb7#?VW%DMvX##C %!/)s(Mokkekٶ^t߻wo4yFGCC.I:e˖&zYZcjQx폱ayO>gL 0&8Ъ޽ꫯĨeYaܫ(اdV{2s F; d^_oK++-1/$H yU2F솊&iߊwMhKAC2e*>a\GJOeT~ÁOx4'A>?*y}lYg'L 0&8={4{Oyd˃V )͜9-E╢7x`25yڭ/Հ[\Uws5M-.0~)5hgW=9PQ5LQ]t|"T{m$R^)-j`c fB7ޠ `ۈ͓/t"m ԶpW^-i>"n^\cq̚c!f(MF,3 <&2ox_;c.h>AyKŪGW&/}]ow .7,\yNMΓj8FEs~ ~^ 7E,癮X>y`Xu?C ƄQQKyeٹ~IU/yU.Y #WK&$`L -r~0o#_ҥ=}_їeHl((-ЩSG#Mxd/FanS3wųRy)}vo1G=iK#5S]Čҍ5 g7PR^ɦ6R&# p:䮸Jb)>7pX삶h|[Û ?dUMGXAee%Qt?~%%%^uU9r)ObO@oOEeSï> 鲯a}pܨvI"K˟Ռ5XGOqűzyBި!3=Ft71ZUzvlr l=Nb"E`u;vNέ.mQԊx e2&O?x (4iƌÆ k^=|%)job}-z,bT gx4LƯpXƯ*-zOC־E`CZivptHׁs_Ƀ4ykՋKK}XݓOd~4G<^{pէ|2Oq͍7a{i!Ն=y|^D?úkslNVeݟԞt@N&{rWO+AziW=<4;mx/ݏ)k]yeLX u"#PU?cko,uk} n:vJb&`mus{N&m]XkfCr4nS~0ߟvJ=C`L Ď=z2Iv?/+V0Ua: J$tk25n#uyZ!nѩ®7!M: db> $)tBҥkEu嫫۫Z.QxtL)hx /:kEGpX2s9T֜F91fC!\))ʢ9^ø{pwD.ڏ[.Fmb_an7N~*-Kg@8I nv |A.1^zLGΌ&[In dwoN;vfwRI*;f&b{qaUﯰ`LIORe˖魺6!~įP\֌34%gs$c|Rt;) 0csPAAZ0ȑ%ݫNgYGY5V 2]` ̐i|t7 (EOVq~%W=#_+Z?n7O6pfgg'l%%xS]2 {5LKC_{%*C㲫:`И|7?mcb0rO謗b¸hU<@ytPA7vCs0(!EڭklM  7~[0VW}=w ƪFUh=ƻ5_gh]ǴX|6܁ }Qp)ПLp(_݆5^Uv;~[~i[*<5wD`{ &DLXe  S]><&`-@s7;õuknG ]>Fz\TWxa|q m84zn/{{~ Gz\c2+9Pf; 'щJp_WvxkBҺ cxqVϩ/}ytpմ;F iɡ!W]<_`޸^8D.A4HFr@^t~=sw<եOb߰^7 DL)r9`L2{0dB-A@#28{L>XS&TQuJ+ߜ/<_yI%c1n(7-?NV =~ɓ5wz|boEZ![<{{/!r,'b099mRV tRя<b\/ Y}rGZYr<hDwM}hD7zV:ނK |zlG|snwAf}ҽ75Oql).ZdL 0&`L#Ю#_9cЮ];\tt>:'.@.v|x䞊lY[HO)>,2 ~a7.?`L 0&p xeL Xxc?Zr%𽢟˳8R)?Fp h_|w(/ ^a/; 0&`-4|0&Zo>-{p~G/ >LJFT|r}_q\ 0&`L zb=;n@Iݏ}O3aM.v!NKнor`L 0&`L 0&#sC_U/B}'py@ƭIvp(*?L 0&`L 0&@l Џ, 0&`L 0&D Ͽ%3&`L 0&`"~Ȳ\&`L 0&`@ f]2&`L 0&/, 0&`L 0&N G1eQ[Gy `L 0&`L >l跾k3&`L 0&p$#.`L 0&`L 0&k`L 0&`LC 2M( 5L;p*Pt3lW7vyET hZVQ^rO:L7ɦ1)Z| ẇcaP I3F/:t_zM$KX$v,?tͲ\_~P%12{%1TnX.|Q)'(,ۍ*oU~LĪՠdfeGĤs|?䳇硺V̂JUn*C-%bZV](,NM*h=XU65?z4lҘ¤5!Cѽj ҊmTAye rYizɽMk>?.!#?JZ-4=wM& $,AFDW`YMrk yk^IX AEe[;܇Ԗy8qL ĒSǾ=r(dUcJ%z%Gz‹CFzNSWMź֦a> @J*7*&[<#MFD@TVo!'@oaE 8 ż,rYFSLeQL5Sn W`05=o- n9uNOE|+791)&Z׼cL g"C@NvȄ9L 0+EcPUZ%4cM$֗%_kg`8'!10#͊HW\TQIhO(}Gi(ui(E;+K!' IFI=􆊾YY/KM%)PTDn55魺k2eE.:Y vL'L+N `LƸ;@:[? ȭv'վ&FVf4 bQ@f6g- gTO&O.Vi5ƞi"Cv9XaiqEalZ< P$q 0f$@ 3zh/ifg#zia)Ey#]Ke?xdx-S"hab^"Y!_9ї 0]y\*7&=:!V,/Gt)G!5V̜5x=臓>+Nu!h}CMf[/!މ>e|b]6(%yL&WrMwXKP^v7JP]\14=U0\%6FǦ%Q;Df}͟neL1O:_a:ş1X;)Er!"bاo2X:5ݮ[!㩔2܌ Y&#Xvŵ#l? ?OmSn;}Dd"O>q1{&jH`bC1AV)AoR)$[[N@|Z:]+岉dKۘb:\+dBoy"j ż~(~F?K i:%̭cKXr68|"1Q:t5N@&;'UD_MAh%6bnѭL 0;&>`yfpi,p<B-TA5*%ӄr~6iSRcz- Nܮ7]c}Ab(Fl tswoRw_@#l'SIF7{P\\)Mw)_,Š('aȐ[ )My~߉樂}_v2|oLAsJCX^9R(Ae%*lr0ިI˖.IESҌuE-]Hp>.ĄI?L!݅7 kXM1&NmDzpl2'N}7Ald.%!!bD}+D8 m;1SFfQw?Vo78\3dz~3Dp8;w-JExF/#4_Pȑ yim+ jKZgYq=6bPc`Nv3'0EWzNzI7J}ɉ]Ĭ{Sh!]ܬcӁ;I .&t3?T_C˖PCB>ne6ԍYwP2LP9j[dH#wΩ\lա=Z$H:Ȏ+ON2cUE+F'DXgLȺ,}FT^bE(6Lm~C^p2&PcIU)'j'iMx_ԋR=21vGnO8s&J",:^ 7:@owE[f F-TmV 8ؘ `LsL 0&`L 0&H(+3T'L8q<֋ENgɾe;>}pKpW}17<\6lO/4d&&]Ni2e9g)a@Oi lLLJ6*Oݺuѣr6M ĝ:^); G08Y*:tD>c:h<`L 0'={"h0,O(MuxQmm-0S2(N2uP*π{:xrϪ?:߼y3|XڪCL+(obE K7uw>Ͷ,LubAʒaOL_|%z?JAeσVU]ѯ5+5o'N xMFJIA7RTՃVUe,Yee/dZ/{|wlAQxW۾ʢLUlU>-@p&DL˘Ld)y|k_m %%F '#G43:1 QW45 )6F# وYT뼈tc:uxO xIbXx Qwh>~2~#NbU nrѻDKͅ*9+~ۻmQnuZV_Ŵ?i>{}ieP_~^ohh@]]04-= 7?* ˆ{vF8@lDEx{h-3y+O+=T׼i+7 p&Pk䠲nֽW6ar\pL 0&Q^W%$ړ/2' . wV6z=փ 'Nƾ]]k[?dKc^O{o>꾟>"եxGPxMО|Z՗{?;\Gʟ|KոѣM@w퐜/OJ8;sr3C<цk,Rrc[Mmj[)0Dbr,A+\z JNT7 E]>nvtBxrv!-QiaDmu?GL.J1krLmj_ж ؏܁Ƙ^M7y'hB˹"oB 6 eYYRMvQx,S&`go=wOK#ꑱOAd]5ߚ܌W^1xfj:+owO]h/sڟOL؟OzHVs|ʇnǽO"䓑OG< |Qy2 _(˴i2i]뼗c_^gЯ_?Kb7ɠh]"u?TwGzIElĬa\uq0~GdN~npѠO+X_ǝw FMRl|0O=B=,pu ;_U#@!L)X+^O+^ݘ2$g-([XyQZFdAEZT2gۍy$ƥ(4>@l0 j1 C]`Ȯۈ”܃کz }Q_E`x̚ľ9y(شQT< 8PiKPjh62 ) AOx(UF 9(͎U<9QUU몎/j{:_KШr 0&Z+֕|yN!U]JG2S?243iСO|'qb~|U.Xw hˁ4.vb25/K^ɠ'nF&U?"}sv8 L^id~3FU aznWF'5}Dҏp}SN qKu?EdggȗF`)d/ zИtSa<_mL6M3ePAhb)&s[33BܴyCAm (?QeVF zD*A|yG(p﴿bc5n 0&Z+R+>Jtwsݧ^;1i#&A+R_]Tڵk7aL ?u$( ~/sZzVnm5.0íJ-+ ?o`}ϊ:.#((##:62m]v>V_(+!/YjjڵQS (> O醮!Wˌz˂~4SFf^.r+$ *6ba3jkcpm?}G䝓V ωܭn`WCD@(ͨr;,GF0ިI˖.T`45( DxV<9ԕ)4 z %Uyf/A0\=Tմs o%ӟ3R>tw/D𷣀/{`L ^ї]ucE}ڟOƾ5W^ϗ%hDSѾ|Z1U|*k)i? _ ~~&8r>~c1}n~^{s\տ, EiӾظ*WiFF_Ú\tgt___#Fp)^rknIE:CSv;w\۬}: -SˮI_a>Opb<'bJalBO.&蓚/7VzEg;ym`Lo]ɷ;'yׁd} S*(S \ŗj>=̋ l^;tStU&>ۄ}c]+)$#_{좌|J =^P/V?s+.'0k>9 t@?z0hhc:juk#%ehگރR4#{|re>0 rZ? ތ>c觰yBla`Zc`ygOjbDH<8.I@s.[Ū|-brظJt6k Fd.E@zrӽAv1 C1<(ʷyC1$Y]^8ؠ7t < 7^t^CeWPˢq;or1 2V;Gx PS[ Jh< mE@F`C+rEħ_κhT~G%1&@d?"7d&dx8n%!fs j :?|Zh#H;Μ2RUOu_ }짇plrO/[{r< < $S's4gq)=ӭ[2扛 w\cgAUٳ_ꫯм]tčkh įa[َ7OVKT ]OL,fs՗Jk bJeq>gl[96@&h=vݧ|F綫)Mrx3𩩩Yu>)ʼ~O{ x(^:Ǐ7@ds׏vb[ MFw"?m;iO6.vg{=5JL J1sՏnrT>(u¢[jJ#~D:Q_6rpL 0&/{G_KI=} ,wDמnU!~jO~횚`ػ&/|^XOVfu]mٯMwDs8si.>}zZYĔK0J҆ Oѷk9,z~ q dJF>GRO8vݷɷKpū+Y\'1frKK2N.zEF-u?1ыw[gc@jE i7 zer1H1.L/W`E>=O 0a` ^ѷ[#@%_C::,-QF­@k&F~kz{"ND`L-mEHaL 0&`L 0&<}Ŋ~nǛ\b!U(N5┧Ap%&`L 0&`m@|vw֜ oz|vAkyϙ $K,o 0&`L 0I z)_=1hȻ{(2{$)0~^`/XQ~&d;#fNu7$}Q2~^NjfNOUAíZt^2GPi*eGiM>Ցzk+0!ڶ"9 0&`L 0?bo_GOxn~3(n7Q$`(F:. ^5ہf|/n/G)d$w6V%?݁BϞX|m3(p]6'V->2nDOup6Y9!C=kIK eێ`ʠ+/]rGTAFpPR(@8,%3PX X:ysW {DUUPdR:(dL 0&`LQoυqQ<x^}=!Xۅ{4ޔt_c׻aBσWv{3M]~ MgAi2eQ)QWTz¨-5?KQ/K%uaL 0&`mׯ׬`u>CGiScpaįği~ IDAT?+c8_y+ݿL]@C=1Ⱥ8֏K ktUIhX;Ns ;_Web;,ư_0T jӘx$ 4 'M/W',q- zYB0Q0i5Vߋ iKc?*#:܂i[: h\9*2QPg.AռQ(XK-ٍI+#*e )Q< 4y@J< ,Bl&^geUTO+ cP;[, A D `mV4`L 0&h+[l;f[EO D}UQ߶ԬC}}Oeŝ׵}rytڽS: t)z6\{?쀐I]xG z_#Ia|W7u8V(K:<ο;~$#C6QƋҌo& Wj >fI|ai#Sb(UENGH٠=o7o r˗*x0JP^x\[>nLx"G*EySW,ټ,]Q6#&Ii%)ԗfWL;Y\Dԙ^rq`L 0&d[|)ӟ^'EOp{P_|uM:?/\ f+.4kn[f:h+R2zݾ>;0Ct:+oܥ3xnW[G λ: 2( 30<_튻0# +ALև3X#}Pcj]o'M{i@+ݙ(*!#+(Ee4}}Hַ8_`A LĔET6A Vͥ#@W[o_wPQ)YkpKq9w%L 0&`L Q3غu!DOͯwtOt$~,a<>QEa!gzޛNVP|XwY?)]\Gi%2lP Gݽy/rC(~"մ髧DrOmhE/pD/܀M[0/%H\-.AK](ϮUty.!Nt\K1HCUIn=gKoīL"H:C`b:\G-Q8FOu0b͠ZV&HfdF-=^S9o2 A^" =^3V;YYZ> g󁡘W6 KwU 9{_Cj jB:Ox46Tmne|N3&`L 0s-%Wְ۾ư[>i4)C|>^/irR%} Mv8_B3"73i~#G+98m/ǟz]AiHr, 0&`L 0&K i]m5h=/Ġq?qrO?ݧbۿ})E}+`L 0&`L 0Iɥ>\FԼ<^}yΛG | @G-L20&`L 0&`Nwa-O~%.=܌= 0p 0&`L 0&@&`x= зCu? C-p#:N1Ϗ_+®•Hj"m`L 0&`L AœĚWw__ :( }j 'dz E;>eL 0&`L 0&l-~F[Sa߇LDoh(oۏcj`L 0&`L 0(~FSᶳ갾3PX_XirOPB3gj ˲rL9{gN/|6f7!~~G$I3Xl޾0V32;OcɁw:>C ck4E$z$9=?]zsY\ҽ|-Rh5tC,L& _ yY\}+C%}ot^GEb>%91ѬB<9vv_mkf\\A֬ w9G E#M~AXeQ s3YHq=DŹlpZe[v&$SmDUW)V+sBsُxQ|Odڣ6apgt7'p(tLCFͺ˿&ly3~b٣Oɽ_5/V ;zIk?ޑ8j{Ob%5Z9eh ]=k>cB~?4,[i :_ȳx٨ѲsQU%{PoI;V3M=Xa׀Wu1II==jR^9{oMknk Gk}xxIi%1 7'Dzu- zF??%yJi-x(˞2l{}`Sy1AjӹKZϟ,oc?sZ8`L?t 4M='LLP7V>,sMdeBr0Yy@z(fr*گeEHG{. KM){;m\*7O!3~-3N{+:9*ڷ-CBmo'\bS{M?2s/c , [=ݗjޟV]؍OYspd,[j^3ɔW}ӱ̑:DZ&v~r 3 5؏ w De\qUjT{++?:TK{\9 b|K#ަЅ;=Z#^<S./!; ^ŵ_3}xDk9oi%/5ԾpÐYeȚWzT>Z\2QlK]I2\2, [ize`!wHc?(+BΪ2&Zmr"oQ]U_O4 =}]?h{WF2z2PUŚ i/?-4XdP*,WxR&9bӄm^UWVh~*^QSKHexU45lyNs m$ $]Ӥ = [0 j2P]O74lB6[1/bpVጩЦ?6~#ذio?c!P$=mi{'ѓ~Q]ffu?*̿ɗ +3ro*"v: Wt9}f A]`r~ ԏV~B~o<ÄhM/`pIJ*׽u2p_Xf ;'յ*7iM?vmأ 7 ֈ3`LㇾG]- VqϒnbN3~&{;߂"f`\O? 돶#!C[bOT3X&Y*tII@CD6a2qbC:v&Ҫ!pwl*,ps@(JaXmCmߟp.C1ILNnt~6upݧ=W^(0VРo;kƵDd}#[MG=[4=8p_ܚjGG;G)RO'񷣝=>!t7SWb@ڣwUZK1 _r:.;\ 8DL]G03Difdϛ,rV=/߈қB {ҋhe열S &f{^3)׉y,TS&J 1znB_'(@luC?hUU>8GHQ(böN@\z*~}Ea r.ӂauyOgF͐ Ƃ_\j^^XÕqg^? #*32bUUkM[s1F9=T)2deNF'k1tMߞfmm^~N( oP˳TiS =l5uǘ~WR7/ ,5LU0V;~~ڻFt(0peRJx0Aa(Qh ^2U*"]UFv͆•&!Y^<٫!A_,e^P/zxx?%&Vo_z#e(/'xZ40Kӟi,&,f@pΟ7r5-ֳ4diR d6 'NYSd'^p|?W\"to"iM}x4X٦Y˛<ou_?oW#r[ uS4y&C]˙𞄌1--GK3s P;J(,ۭ<;"DO0ZS>#ߒerJﵵH2XRUBg}ccjO/B- 9s۾]>v\z#W;Խ 0w+Ԓ} xX*GyҋRD6kE 0GU7  J@FBp7h*]i'El˺*r#ʲتZMmnVKݮjS&Z#HO̟ys̙9>N9>/ " QXkZ]gB 0I! H-،`qJYf0NF0@h>BB_`;-F`C#Xm xh8~]BW}.XF$@$@$@$@$`&ѯ&sas+49nLh5"sVNч|a>U-`aKPLDZ8GJ˰tXD# HHHH&9VE3yOrF2|r7',ڪO8xv3݅1'яmzЂJb%'&E E@ȣb Jj"yM}r|׽YdHI[mỉI)>u?|߶8?fVU"~?~Ps{Kj{Y*?48ڼȺ<&      @ ~[p4sel@϶#s?`       #p GOɁmbq|۝eia^Bţߌ?+Ae&A"!      dL|ר˰^迌#k迁gݿmnձܞb}Z $      J.bt:C <>{QibqM ~~yո~]HHHHHH'0< }•Xv2lYO ϻ3gK A ]sF7vE$@$@$0R?Ӎ>4Rݍ~fE._cGpBd {?zgEcl/cQ 'oHHH`Bz}5b |jqIHHHNFNNn6kۿ᭷N?<`1, [2&tɯ%Y(ő LD{OaS:/lxvax F~A/^|MoFy2gJvbeGnny {QPx$.>;uKtLlG$0> h3hgA#K8w9-[B趶6\}uQ: xx"ȺHH`^ ð˾ɹ䍵x%D0tB7Zc747 % }+ZZZjU%D@o'j<Ibab,]4wމ=C=|UUV o~PDC~s-Jl$67 -69zC!9"Y(mOt_\ӹ AS_{6Kb9\4H]oaFɹ_7x6 K3ABe{^r藮_Y5Kn$@$@$+{P~ʹcEzH@r࣏Zl~/V܎/+.ۃٳg#-- o?vdYS8ٓj\?+Pڋɓ'UV>/܏7axLk:>W7#F+OÏ7.FK#(,bG_2~_˖.ᅦ/w~N\p۷o__I}(Ac4Ǫ!$@fӲBK:v畱/Fǻ'uUXCƧRF;ud4N6tR!-hyR7G4=kiлp;*vV ?݅9r ԖZ`_ C|jZZҰَP6t<k X}*ݩej4?=eHb!ۋƢ(sX>y-̀*ʂ:_9JU@ خ;X?X8;oY!dU݋{q#ƚ Z[Wzb>-:U&ux*7187 PH&L ";0K 9Z[L/.JW{xMt {!=oh+v/Ti^C+hQ./j#*{ԵwIZ1ʌ_DxtEleU7ᖽ(j܌pNMޚ_$@$`O 5cj[4zy?[=旵rܶ}V`g=ힷBg.t(hv|\7*˦;r6ZWfY6sn>&q`*=Lh}[KW?(Mb:p=իW?!=aNJS(9OKb˗#33+SG#RJ,_ x@65~i.xaWcX%7'Pup?fj݅+@QF=5KOԨ]`['0)IeW·nYweæiA'?8ORŚ9ȹm,ᚍx'7ii%7E j[ZQg5 8в:FІVT ' [6CrDz)Ԅ䈬Akè & z%dIuΝw~/OpPKI¾1h#2?q8LP(ʇV* zHr1O-r6hY>ȱmE_щIӱ~&qH ]f}9*þ$䓹˿}P-'K̋'7?}#8k? Ag[fh~SJh~yʃ\sE(`v6lEUEH6Eە\ʤ+;Գs7֠d7PTrc߰W*"1 D!PjҝS%M[pNQKPE+hhC"9؍m)7{l\օ; [rX|9o[ uOye6bcFe5y=kGC#ԱǼypWc͚5O~_])୷Bcc# o4Bm)ԫc`U=jOxB+V&}\E/<'X%$@$0b^A̳.*д~`Qڝܺu+|ڝ'qy/ aL}'SM $Ŀf5~n̽b&d&Wiɘۍ${gӏܩJd~Sϱw^p ַSR鎒hmݗx#xqbf ^}j|}uC>V1-DŽ #SYS7?{jT4Gy?s츌16LC$@$0 4?E[u$}Kf46㒩2W_}N%O+Iz%Xڿw|U<=?x"gG + cY8xg3!Yerv 7/yn$@$@$02%jڍd:)Q'm+pp5I7RʣwC;qMU5iMa6fgzK8T:,m$R߁;PAU=aPQlCm[ ˪M$@$@$@$@$@$@$00oSccWq2ay3!      9 oY1#{i!ЅG3ȫ#;{"       8p)#_aEcKV#      > u .))J$@$@$@$@$@$@$@H t_So3݋ܰN k # }Y^o5/BVߞè1E Ё;PVўkY`Č|1i[e! @:^[B׋[6       H }.$C$@$@$@$@$@$0 +QbKO&`>(%$@$@$@$@$@$@$@6$pY }݉ }}y=e9 dqYQڝJzv0YN$@$@$@$@$@$@=B^؊vXVO$@E@^y#Fy(3TmٟӋ/"?F V0oHHHHHHH`<PC Qe&}QCf  3-5K!T[}a% %Hdx 3 LOk͑ :--Kw`і[(A5BNjPvɟrzUR6e     $`$M7 uv gFK~ <+#_׳? .KOc8;l H2 f<^ kb|l    !`gbg/<>nGo9ߖd`Ɍ CM~ #`|})Y_mxk^Z^[}L_^Osy% `tʩXut7.9qρK> x;S^<[Sdfqy gd# qf=5c$]xmtcp{19ЂgE    Q!0)N9zT,<gkg8peS^~G׏>o^x{ݖ#_^ :H|pRGo~%nzWlr4Qco@ym+v D }9! Z[}{bDHHHH&Á9SsP>#33S_y>b>1w:ʣoPŜ~ӁNi~e%SxR\ H`(˺9G__t. AnGk.ӻZaS    K`8CQ>R&a'SxpB?. _N~<٩N;___Ìk~%塱u!a"<䯽+_¼ː` yX3a5(q0y *f$@$@$@$@KZO,Zg8C:A8׏^\:߃y@tOЏ#E-'Mq u@b_|(pn$@$Gv8jsaj,]%d} 9, o8zƏpE<$ Z0)*\Cq/[3p {}Zx?%~8r67N)3 4oT7㚋߼VdT!MG9wSWŨmY%T|Zv9Ep "q@dŘ+Q0T-Pj)cv3:./ZՋX^.S;~~L6:Y?-w4^zu;^0M[q. $@,I.͝tė뿋˰tue6W> " # xłLL KZ32qˤ}ӿe߇>#l7g/k+ІfOT1;^/t=(Gj>2}<}ךJho r{P/Ͽi6xt#86E=~eP$`K@Bcd<?3{cۚ΅9ضCU*     ,+ItؙE)kq>+!oo (+O|~1J\W@{g4C_3VQdCY@!4E;*psX .Q Sׅ"o!Ƙԉ[xSDӹmH`$t<2'    #~ ^~Njw#^NG_>#U=_&,׏}p}on֍gsQ-t(*#j'-c, Q%d1F;N5:va }7*Dh57 14:$@$@$@$0V tL߁@ # q;j^gpJY j!~R^LKln_ Tm @T'CNv/^}-2޾f5mG$ףe=%ۋV`eqS!0c-E}}udacQ$ A`C%y˷0€p\G*]˦fﺈgZot#si@C񏤝@c͓h^J J3Q~}ư_{ ZOŭ 'e6e;Q1Hzl2(-oa֙q#c   F:t_Qd3B;5_rN2c6zm>XOΟ3rP0#7BxZ6~`dZvTG1f|?"wk%$;9ѝg?F{*ya0â_(d6Lg#/u?Y<=3c     "PFA_ s=[ G_vz9>03 gcux/wT8mv<5(<| Љsa=,lI֫߃%Ub>7Th+ZBIckҗ@|Ã=qZ/G$@$@$@$@C%^}uP}B 99͝s8wC̟kAB G{_~t_/1%koHSg/`ï!kT̛7NUUg#%%-G@(>wC=G[`bw@3Qv)i]|ˎp,ZPCljVTXF$@$@$@$0z~8/l=tLL5e0wNn&/KG$yj0fF9F)|@|]8 xv3xCaM"hG! !EFo?zCb @w7pRH#'; eعJ~'1vmNL$t?->u?|GŢ 5'@}\e2 @2 t}19ӌsz}w~塏>8Ճld80E5 .gI@[.O8^K)kktx fn\?Dfx}Xs"x<_g{IHHH" t̵wMw*…~I$Sƽ)A߁ktzxۏfl7Sҝhi>81t.{M Be~-W>YŶmGǧڸ7|~mg?G٩GIHHHY>d:;T@y3}>g>YjfۇcLT\ }h,&@|2G&\]T-]KԯC'/t=~. +T'|,!#]oG)IpXJ$@$@$0t>qNe'@7_@LT;N{ ]Ife"C~E^[g|2p|fO %GPȪ, П.H3]U)8pKNs? ZU+F0@A&pm $YGu ]-֠=\V, dӇbS<`O]%*jYy=Ҡ@ Lr?xl8~/tN?^(ߙ9|RG/sT,UWLUK8 -ys0kz>ɩ<YYr$@& E6(5W'L|-W"ߺ!/FS33X5=[gyl퇡>%Vy`W%vk(A $@$@Z/M U5A`rL";9K瑙ڏ=N'S NԴ!{J.rfⲙi&fϘ~-XH 6Q*_;jU8ҼŸf"8j/܊(;5y͟>?3K~<ԙ^Oǻc~v{9?oǩK&|󡠑/|#9IKmއx7AцlQnHO!6-};E4!%']hC7?P ?ކpsXxyڀ\kPiP%h:wO ()#~5.8^Z_~L҃})X]M qi+7?j ! > Ld.?Њ8*/Wiwwfֻ̫{ Z+}$iL%|lF>.>@}GkM8Nd;1;+,Ӳ1e 8%| BpMXu .D..\ ;[ Yk ?C׹Ky̺oc/f]@oO?z}뗏?GO{}/>C%^hGĪd-(@.z|_#UAD'?](j˿fo2uI l؊CQ1J%ӌ|s6`}$ϡtĶ;֠p+ƍ)fBiY(x%A1ܻ!I+۾&OF-ix dԻ\wuzggeaX\:weໟM?ur "#^?.}9>[Qj:}7*"CmPV?HJwVI !rDYDhaaC%GaMڇvUDK` M0yK1g;`=ޠv;W( 4CȽ5Ǧ*|tx6 ):$BiUuo4}%c4!^3T i^6Ec lZpB=^z '2ӐjZ/-ʼn/˱׼>t !c_2${Pa7_Vqm# sTo@SS<)۵yRʏbֶHnjpߥ/9%CxB$taN[1Jͨx5<֛RCh:QRM^p? g~PlL{Ct6>Mt@L#cMo-gf'1Se+ Ə>PPyHH`2,t?,w;*~jÛp4!)J=8?viZ7e->櫄-Qw2|p›"kՒҾg?=s7yXKAnDAϘk%UZ~V4UV,yy#~D$$Zl\ JX)&PM= YaXq6 )|F {h]Ѳ^;ᩫDE^_iDq_Jΐpv4{Bgj%S= +_ۃO=0))inA`y'Wj'4cӁ<2hwU<+P#x(k:,+ʱH 4/vteڏm71W+ F9Pk/ECJ(:w |Ff@KSEG>8>ߐطi~JHxt{rtRzXM um*ɓxxʺ6`o.o ]kYCU#I<極 ~*d'ڍPzӊ$s]B4 lO96!^8H[H/xҴl[e_֕m@=?r?[-%7-(^11r-K}ƽ! /;8jjMoȼAl!K4:"/V<6a*dcĹ /tXj/J,3Σp]NitKG.?^Y!O<Ğ4߽+"@@>pyg"4S! !cJ]^tD][9pɵHYQn ]z^ع]y?x@%\p ŋl^Hh^gKk}kPQ(@]fy[,UkPbk@P* 7$e IDAT)vƁ;v}h8DQu2]_r*~7:E.-XRDݓZҿzCQO{C92}/rb`Gǎ'-JҧDk޸є9 qAXJb~1q=0:kUь$@$@vx%zl*n\}GWWw<2;'039gcux/wT8$̟@yj%  u\_>*O$0& H.<6^y8߽ Dx#/~m½~ Pf+O7 T+S" L6 ݟlW%H@|u5?/.[e˾wQ OD`Bz^}oO0^ۋO´T<(؟>Hb&<&     H27YhMHC?ߋ~녣odyo R2.RtNHE3bL2p|fd: `C͎H1V~ k_]20! }IwsAUIŌY?WN:DfZ*23{],qx*T?=>/߇#5-iȞܩlf6>lɹ3f%?g?uT{QY.c$QT5PҊRُfTl1ZuYbAÁbulƎVT5N6@ˆ5^QXۊc:3~i>61-Pڋz'jc}o a T@,ϜbhZڊr1F#x (Z=|n+XD1NRA{aQ"QnI&8+|2ePң/w$ʻjqm:^5ˋs1,̛y; .99̿<󯘎yWa<̻b:^tt|SP2sgBjjߏ(nU45oꓝh/*k+Ճ} (5xua@͓a^M[ѱ/«mțPݧa/5 f KPR5k= C#G`$9{+|嫴Xܱ=sɲHs$@/t?R8~8Dyswgc٨^34Wy(;W̾lX|&WjprZ q_XHx_@S{n6F{Jal*a ~u6C^Bk!Z;*QR" %$Wm*7D *{ ^u) fJBKspoECK+j+TDˁ OX߷dap ;ᬄXnF#PSaH[otO18wX3^zT`o{|l=3Q)6=#L'cc0ǵ6LP]M}x ;T<^(CD>!BzuMup/gNE|;(% B]h g6YL$@$@@|y(P_JO#pzd|_,̝1gNò+|n6>0o >?U}>=7fLǼ9s 1xg#Q*=A_-ϡifИ=a:dXJwAaмӦ6vABmJwE[QQ(ZZBi)ܣ3 (kMm qm\ɭ@{DB- .x)R8m9J !%_aO9wT/:DI }P֬؅hh <.z.Tá͇PxQb;A*>ȽԊMQi*{.>3&XmGkmSWue\tq{8կ@,:v>|7/ MUmsYgJ1JshsewY ryFrxzl`ظԂH`"(Dٖ[H I;T8=hRRR r6>ri!+uϱ e@!)zġ hwGމ{^oW`!jv.bw醛k6^[WѼHUEÓzBၖ &Yb倈-3QR5Q97c:miV|#SF${I4a%}m]zk=(@z¾>5w+}Dw-M(hQ06ϝ:</?^$M+oGO-sT8 cS-iTCe8S]6`X6B Z W(j8 J*灧C!zr+n91V$^+va{D&~yk3Y;&]rIW["ىx"+܀c@;S2GxyEX("~u)x@5BM:3g0E#޾+kDG%Bn䈉YB$@$@@|&v O  ĸ%$*k~EaM!2M{QW^]J FKQ7-(P<椀f྄#Q!\W pSb01E=`=섊voC5 \((2G:paDۜ_HFwZJxZ9$zxd.nzZ'sbP%w Mhm :kaz=,@3+ i0u{rybyDv,)@ݰElUy6LzP5Z~`ށ#/>GX"t5 x%p|1Q)6U(o%Ns0qq 5%AпDgrM+|FFmuX6H>1wY # f?Tnp~/ТdkE)Xwat." /Lv|W o4S4%HxxE'6I8E%W: Ljc2|FFJ2vlup'=rrr; p܇xgi Y<~x$K';__& ??U5i[1ʉ7U[(H@yK|si~z7ڋb@. :b$5' Bخz3fL2kM(&<(;rp+V,(8r(:]rfo㎀߫= c%*QbucjXGbmz$@$@KEEIF@|YGQz*/`oDas#j;fC E`! $@$@$@ɺ/ѣ?7 # G Lj4'IHHH v ݏk L^c!tHTGrΞQ'%GcǑ1uŠHVJ!%,$ZC@=y 1g!#%!%c\LcwR 2c*ʍĀƐd)Gh2:Huu ^`S͢H!m}1{%9jGhl#  B@BG{Ѿҿ؍VkypǞj{x^ VA~䙖瓵[6)cUcWx/0_ *E92p7ԇ^ڊ@͢6huXvp;ږV QW߀V&%Ay%n6V}Nv6T0c0J#,wH攖9)f &i iH#@~bܒʃ4#atcWQӆ%(؍ƚ5$jFQ$0mڊ}4I Jn!4X@SsX\UPY*~kmBӣK Q"oF#PSaH[_gl/YaIj,Bz/O]~²aylsvAD\p1C ]#FINH{5C׬_y*\?vlOH^jj&:`6}Qu} 셞Is E`˵'Xn#/ VT03c}ߒd4o~L7{bʷ3qp7ČG^ [{\ha٤e<>s\(-+SD)9Ik8y6?I)vhOXݧG?+6fl:q\c&e]1dDMa޼ 5]Ҧa+P40:oQCŒ%j6tVI}lxpGv\XCy 7|ǂ]@N_K7Q["->0͊5h*{.uȑsQ&u-O RkmSWc\tqHG{ZZ!K~Ec{// MUmsY=( gC`|}9h;g*Dhe~2>q-=3fo qȿPִF {:`hў=otqC`C]US{ \E2FXio2J9PZq`ye04`zVVH7.á&x]`h2X"ЏnIKɆwm37d jwEhE,[PT .um6t9y 0E#Xr1܆dA>.=]&]ɾx#+wljM/ ╡t~^{QiD́+v1j |չI@H{PâIVBAZؗ`zŋԦVZ*F\ *F)JՂJ" {93gK6~>ٙ3<9ߙ99yFhJCՋP_̼1w,tj ϸݔw`dw=| =I7lDar0<(55mGlQ+Nx7ar^Jk];Ŵm&zK%WԚ.<{D JgV}ehe oG.ƅ!‡fY4#xqܢح.e `UVWEi2Ig0r$z Hyhl:C_ƽkRZ3?5׌  o؃M9<Ӄ<2s_(^C}OllC&\80tFp׼JtEi}XBrƣ v_-ˣݫ.ӄ#Cr)DZ97>onE#4 'סM)O7yOiixd]YE)u2xLwRk/hɀ+p׋!6-nBRӄS}/oUOiU7e Gkȶ{PX=9lH$i D["ΆMykU6v -; H;I9_ړl䩲EyU ʠ{ẓݴPVIv~LvkHAwbD2B10߄Djo1GČ_Vvj}jtߧew1eEx9V"r\m?r|)-R5zid#Tv7,4~՟6s}α6N 鯸 _mDEm#*6 /'#S Z\\UwB3-~BcqQci?Z^6cg]'; (VUQ-2L34m%YaJCPul>f;6MBXCҬÆH:x{1YreZyv>MrЖI.n7}ΠHmXC)/n{JTv1\P tQFs5dxr eDTqmMΔDD{U߿n-^Ojn8_f?r7VЉ+{*dkԆQhਢE\kito %Xu>E]toވ+IiyfncovJ_Ueginی ")U=>M3W܅[[睢Rw-6ZrSSvFF^yU*-2Sȏs;n>]m~E*~r(Ldaxo6 FYV2v3rI)Bk \YQE84%>Ĩ^=$u;3e)m<`GS yǙHpH6µSm4(TMv;&diA 2 ÆÇСXv-cVB-[QM"yrP`9 )uϙ::6ZMI/:KQ ŭrx#Zʩ5'sy Uy?_]J3~/6x [Sk~m}I@ rŻ޳+Ul9揨:}Q!F7bԩz=kYNNl@t4w.GL$vRUZqOpx Jz 1:k_9֖l\kl{wxn]\E\;q"Om#`϶vѷ'5n}݁wk[Ϛ`*TǦBs۽@wN[} BU2G,4ХykeaY<*r4o;iț'eޤEpw~<O3qU=o*|?d"Hb?CUwQ'Sf{`䇑+tU-ɥ2"Pe<|NrԊy;fK8̬ED wK̤@~` Lj *,V\ _*q8r;k.or1xF?fdX7ka(S!S0X]]U`L J4+T~Fea >:t>X}r# G)-N3³rJ#@XwE VlDf}܇ū VӈB l`L 0&`L 0~lq팉zZ$lK`L 0&G`1h +x~l87`L 0&-rgc?Qm4He?O@Fwd{̴}Ɲ5gH Æ~8NaL 0&`q8ܳA_0+ogk(X`8N9]Sf1&`L^wJX!&8L4c#/E-[ã; '2&`L?ls[@,QCu`Dl̽F Џ`L 0&`L 0&`O ǟ_[#ݦ}8`L 0&9v7 0qOM6-"WŴq)&`L ;N97 08⺟#P{81z7!Cg8q\ 0&`L 0&Xp`oOU<7 a1ܐ3+'vO gL 0&@!Ls;.{1T+oӄ q)&`L ;~;`&b$@olovUj0>gLĮmhC&ANb6]LL 0&`L 0&%~(͟]lG׿?/obػw/='N`ҟcΜ;#CL 0&H-HmԩSx׿~;wk9ӣbL 0&@? $sH@,mhƆGp»@N623mlǾ{.ZZv)YYCp*`L 0&`L [JzqDbz=x/Owe/$E1&`L`XC&d{p@|ӽǏǷ <2ahYxソc8CxEN'[_-<KڵtX2 F_&a]6$M7.,.4ˌ2O) 62۴lh`x %kD9uC{f+[+ 1Ib%(7-soIe#A_0&:X[ج㕰F'z~|ƍCiM8q8jj 3b͚eS EXGf`I/ti߬]S?)Rr#Mq@G/dS  iU^lu%Do;L3j]NjǜQpLWvh^W|X!f͓$2T{8%O78; :;P#H>"#_&cg = <㦍 Z[Ti(o1&uX]ĿM{q^Hd[)iݻcg_?GX^|_O&fP9wA.%U hf&Op V fШuS4 /r~FԼA'|yPTو mp@64jFJp3yv.Xt~SU؉ &{M߆-EbfҐIɍhX7Nz[Ԋn&N7e lThG"# v<1;dl *֎٥A$-0d & @6@u48QIʶm#gcw9;M:ȕKvdȨ.sxP@usSVFc.!r%ռTkߵ#dh| M1>$qɛbYiϤn!(Lj<_ΌMɡbmM2tUzfy xP>T< "ṭe)?%l^J~ r;E38J3>IPNBii ˿oOTUzy9n\]t1wa$@6fŕuRhu'C[7JQBֿp;yPcԓwE(gRdzd6 vOF4zX"Do3ϝ kCȿ?':DݟHI;_,b_`]a8([BTx,2cp&-X"֤:U*2iV֬ ّ]i+!(eMQ:h΃1Mr碒}pL$k9U ]4oj>w~7\>KıӾ,[qOJ[噍y%tɪ+#FӀ{!Ud!=8t} }+ wh$TV5d o i'M\1!SA,Ȝ;+SB<棢*dg$8ݍfePS~9`Q> 9f DYk'#ŦjͻQ!NGbMׅsM795+v$cfUExg `N1^Qf_,սl[]mp`L skEbAwQQEOGG~ w=2`S=(_Sp>CS͔{5ƻ:мjz<vݟDpW\IH]f@.ICQ'9I1L X7io=Z?ŰAp]jADvvuf=tipơɖA(*XE]\n;( ϚNd4~ ZzEdz;4τ D(fǣJ -2xb[@g("Ԗܑ{~vl26?c EUAnD%,~udn"`J`WOkGMP~1lHwkAtkc㭬A9r$n>u̔X*ΫӍ5ĥP.ꔐ$;覴|^/fەz(ПX,e܅*u2f42hH[䆭CFWg |Ldb@pgM&jSvͅ^0M Ą PgWvJm$P5bB؄ʠM)$t<f ºCͣmk]>eQE@b9{G;iu 4$cMp}\=ڊ%}A5tM/ϯ<\%2y5 q)j'eHGdǹuZ#tmG[*=F@ բ庥M NkīОag4S}|kiT̮=+eLuhvD0jdDNC7nP翀5k1`@}fUWx]o#4LiY΢~! LPxx߶f{ aweQ^[4"As7naӳ5]yYn|x[YBFZe&l/uvf Pr+ P^}@Iw*k  ]̲Qea])+54hnOF@d5X{"ðʻ1\A}@j1-SpE%2oLYZzz)Ui-b]04~LE؉P5A;>ԝtO-S`LY?ŨEWu HK׭ KE1b#0˗/`L /'?մÑHe>^C\(a97|#aYr~uW $@FFWQt}!w}'#H/E4%r;|gJi 5<93N`Р Shڷ5F22d ;¡C=`L X}.m6v6*K36ȦČo.F̙ⷿa#ᴤhoDt<747KKSg$lkV8氐$vZFAIXRDX`ϭgLX\lFu_.Wi`I<|-صuu/p=>&?--RHpGOn:;žN(6tur5Q"N;% ϙjoSlУC`L 0&Ы >SO >s 9A&B<00?z(^{UOôi`ԨQG{{;~k> w3:^+Lϙ3>@o"Q{`]H6TlDf}G⭊]CkSЧxlsFFVzBsk:V'2&`L? }6mgL rc{8.rɨ[d!;';|YiJїqWrS#===4x 0&`L 0&b!Kac׶]8[BGk4)_}}!c?L 0&`f=9o>ocϞ=8zP,+k."ǣ-4k{L 0E}w IDATN 8OIۗmhY $zJ^/9s^(:tȶ%\o8 0&`}PxڵkuԩSؼy#}]9x^dgk/:x ZZZo .Ĵi3\'XUx|^of%F>:tʿL 0&`=H؇^xW]uo d҆ +SL<*L^+m;L 0$[ѬoRD~| 0&`@w>|>[̚5 3g 3s@.o&̙3m&@%Ni mQ(XO0bxo4 >?o'y$Ј"棢xQ#*i:+k=.zfc]lǿ*^f jQRPGiT54B\5EC4NT6~eQXg$~T6 ]r a=П7pK\_} 7|zY󕔔?)gu!ρ(lYIaD~ k8'0&|dB?ckb?Ǖ]N ^hGc_O2>_ _ n~bkGh^j_\J #i)ڂ\Ffzu.ʗ.OfcKksB@}z _|LSO=^2e]fU\UuJV&>BU <,jrBCC28l>{L /wAq٭ocΌQOO я~;ҥp+fC:/>&]̲BuzmRrl.b۽'mסlӒ%Q%ZM.qјؖSuTWO+d Y\eZԫ^V&|醭 Y #:u⮮GuP맼;z"1u%m*vT4\ͨo*g2v"^?TerF $z;5S2srvX0ص0VZ특M9NbLaF>5.}Y~톱OFO~q,ha\r 8Dv|;P˯ʖ<`A Xt%o{u_ߗKgL/&Wz-Ú L RHj^ 2*l챧f"I2w>5w < wa~ .QK]f-ScUhBO9PT^"kL.'poyP-Ӱ%#;_,mhDC-ͰJ]0-g!Ҟ~;М i.&!¬Rl_%Vcŵ:*`a6б(?˙~zۯ_U*:=A|`a5O8MenOBezOk2C0u_-hi5%DP^ʔ%sB^yy gP4uXh΃i%;ȥu9cҟ|C&V#Y{Z!o3&H;\O:0z!\pxׅrJaSŋQYYhoo ;Ԝ+ >XLo1OaDVx г6+T4"& kc 5kT&R@0*GiYȰLBeW[QFckȆ Ok5փr?KgC̝8E_sA- n` 4()7Z4mp~~fEAװ>>X'S::-D2|˃uڠQOenjŞ׋ڹGJQPb$ڍӉwM;Q`I#>VjS'#} Y֏7Z[{]OŬO8җ<R@'~dc"4sbl6GзI3wfO^4 (x""2侮.6ӂ5M>vըфATrQ8y7Wۮb%ݛ^ikm] ֥kxFxXܶMo(Uhv{hɁ%b jXxXXy:2𠨘fWYDNlZ3SSQUxYuq_C=ϒM_& t>ؿ'W9s!ݻèQ*<$=bؖAh?Y31+[ t8bd+r=}Hs"w^Ju"AePDk PWh2)B}/ʶm;24;j:J y(qχh][ yOĩf 4㺤aZ?M7 R(ץ3:U2ByBKA)\ ڠPJɡ6Qh@r_. U8\Ոu}  bàD߀oZD{MLQ aÇpA] }RW_җpW:hmmo~y`n',lܜ@?i^ӻ\ٺ{h/={pZMm};*@`r4-߽檘`L Bg.4_R235y^x<x晵>$~#?b | 0&\9 ?*n7FJ@0WWn]W`L/‹pVG1/nݺ>( k q`L uoDf}܇AF~!ުx}g6| ƤKb$+W*5p~&`!G{qsaËx뭷p+4 ~KK ^u?~Ʒ1|!nx[1& P}rwi.ǵ3&"[d!;'۵Sl;t&`L 0rW+_mhj+A}}==*P/Xw5?L 0D%Lصmǖ~l87`L 0&-7/3/`@,Q {qhT6_qg7 }񵖇=ƥ`L 0&`L  }LxQ|^3'clN]n}(`L 0&N'\õ&@*иڻ؏,ٕzDd'L6E`L 0&П~meLouo0w?&$J=4x 0&`L 0&@bq6"̺Z+Ϊ Ϯ L 0&Ou?mn+`u?5뾎z`C?>n\ 0&`L 0&@rozw_X]h*֠/a~M}6hs`L 0&@vC L 0 E-U9Ќu0a,F'`O gL 0&@!@aL 0uʹF'w Fc={ 36P8 0&`L 0&@<bqomT"Cy ExF '2&`L X 뾕3&#0>⎥wD`L 0&T캯m&=X\%$ʆ~ Y`L 0&`L 0A\{Æ~O 0&`}j2& /`L 0wu'@&s`L 0&`L ~Pn`L 0&R1&JRc-L 0&`]G\VЗ?L 0 eՐۛLl軡y`L 0&e}u}= ףr&`L ]5wL 0A qXK&`L 8㧀`L Qu\("`L 0&`L uoFc(fƿ6gmp"`L 0&[>`L 3&`L E~Hn`]J]/ gL 0&`L 0&нbsߊfDTD<~3&`L 0o` bwLNǣNw"L 0&`&ƾ 0&ݮ0 5QqF&`L 0&` ~c8w=9Xv)軡y`L 0&x6&@ SO Cx7 G&F`Œ<cL 0&@?'QgLآYv5z_*F3T? =b@:0kzkG3)٤I?7]v'QNbL 0&`L 0H Dr\;c"r@sZ3i iG g `.?>^g:NK\eL 0&Hi/O/7 0^A`?vmۅ ÇGp 9w.`L 0&~_;c/`=A 6lx<(m_νqgPϻON}N)|;!y\n.hy`L 0& l̫XuKj@q՗H.h dL?'B9"a3D9~<0Nv(>5EFuștOFwY=f.d_ u{vF:erne(,Կek~Ф8^'9g7\2eP2 Զ%kɖk`L V=)_<u+?P]y6՚OS ey 0T#ll{aF{nM9C_28މ>º8~3P>a`ߏG_Ϟd~b2kS ZMY0ޑb.&c2uuSaL 0&hf@uz  pY׏Nw^,Ӄ|;";I6QBȒ&}}AT/ϿrMЄq]Yar{I`՘;ܺ=!V.wJ<ڏn\|^4uܶw-nx_O^mM_ęv!-y4ZZlRgQ.O0Mq;eF"ΊI V_]7فyAe)Ż73ٳm:t OHdmK0EHv=ɖE}>͵ (Z; oPЈusT}&C;$-XRM%+{C5-G-,sѨ}rq32Coj҆FVM˱:FT -) cW :R&tVd&RDSS▅7#W4ыiv|mNIC?oD>?j08?GMa۱4m=3ѵ?~8:> z5cnS\^[a^ = #Q'Xз*OPԜ ]ei[ZUP>s!;ӵYP3j>Q>(#uBq2s/g`R(:cQRi;5]RmvGYWjL R##mjT+c܁+pGP5gV-e'\Նy=xSb|mi#z̿440+RyœŚUΛqd9O4qZ[_2E) ˪}5 'L3# 3F7{=|q^D&BtH"=1 LCidXgէvr yy p4bt#UHfF-GiPB)xHS.ڬ-3 ]02R͜XG'cNo@\XQTmPclxk"6hQpHxf]VĈ{imcC#bNm0#>˺zů׌9k$ jJi0)sP\:1Vy:j>:q؈漐{ϷԹ9r} (1`SsYM`"Gċ& Ŏw뾾PhƄ-5{ thR_O^V2"ĒȒgTY4 EʒOL u 溟 W#7grh3҆#3T)R}S1^>a(΁g#Əe L#֐`q}Ht r/qM}f`[Qj4խ< :h)EU}8ĮkLm:SC ˸OevƼD>mDrw:+ GH +-_-3OTV Yh n>rG}P jfurx5˹A|T/韷K%a-ٵR3X*͛Eb'JQX'_T T9xsSk+5,Hmѡ=tw#Ihݴ~f'#P/ovfTpXn~6+\̴6Y%-Hиe0ׅ&rt+\g|$I9!Wfvx.X+lbXdo4zߋ tcTUIhhR>UZΒ.5#o3&W ~ӻ\E=^K^4K(}~F?mYF<)LõpZ> eY}wtt`wrq8/bP@g<]يW]#= c}h۾OVk7j]+*g5Mn;XuUXd(4k䁋671JJC4M22OACΝQfA2ƀbi6QeXEf %#wq#5Is\ZLh)Dz@L;hIkdi(*"-hs"z9G\#q+@Obu7>TF3u4lܔy@>J6`,u=;ZZ0&>owA'f=ͻt HO#' ýz_=>ԽDkm͟،oqaO|'/G'7x m;;p+DB'IFԢ$kPlF0&׶nj]#v2vpc}qtɿU3=<Zq[oj"N:_BGY89|?ˋg"}`Fe]c~spY/mW,ME}Ck$ ^WȽ,[(lzyEmYM@6=!,t+Ɣ/޽L9ȕ[VQ6yjkC RťT/ܸkQAM> )@^)JI*E@y Pmeݖlw aRq%W9ۉi4+sk,BOC.2*.X_^1-!ofگrNxQH>뺒ANmcqǖsڇOz@l]kZ['{q"nѧ8p?]8#G^Hx^g@p|D{v=8`?˾VLe!^9`8YRD@ iJ`waER7K[0d \/@j4(77v>{M(s0Đ!0l98|:.YvE9 0&2xFkٺ[,z^Ojj|Ȧe[GW tp#-8ŝS: mp$ ў~!:N۱_(v ~S;~ą"[Nc y, dJ ^\-܂Mu<Dž`n>wC0&П ۍ\.PЫF$`Omo\cuvYI&9HUi@K$HōV_&`L 0&ЍbwB6ZOǮ|7O 5:k;;JtiGggDgZ=Vd+Dmdp8ڇ\t fY+EOϨ7+։"CHn`MeLOMOfhʧ?;ǶաGH"觵3Gq cu1 U8˛5_qb{ĺ_\>k)!3{X:&_30Hq`L 0&;;3.@#[L,&^L[xv# }j3D;'Zq0t <ig>EZ `' 9/ i3c: Cڙ}1Shc52`L 0&`L }6zmocH O9C_sj878{ :CЬ>Љ#/HK31Bt8bշp3(1\cxfL 0&@"tsc}bݶض<8";SEz0ض8w@)瞍γ)vfd"atyxbq`vT)~؁;Cx6?k2&`}3&-bs 3|XV39yd?nY{fLԃŧrg^q:N',scgr1t; _\q~y d;:v1|qӁ? Z<>*9 0&`L 0&b^[>,.8ص۸iB)iӵ5B Oq7??-|WU8YAF/Fz869C0,ɟgk"u`L 0H$6'0&,hp|ƇDL5[7C?\%Γ0x$\,%wǏi>tjǜ #`dN:n((2&`@oY@>zL PfL$K%tEzT+[YzݶSZ`,s'4ޮeDDud]„8D3%8ܶ웺/إc~S?}$N<;p F.[2<#4o.Ͼ ǎ7|ny>3jV.my.&^q?0ib~W= ]\] uxcNFۖNA]V*᭲c ]V1 fX3Ebo1;a4 Uo!֛я"\d\Y_?]%dxa`JޤK׷6Q|R\56: V,Zgz4r{OyӠ; SJvKfwjvNdu_A]4%M˱ M"yY3y;To#gcF,#~iPr>RųIrB\,!7|{o;Ԁ'v⎩5/:䥦+_]Z`hBxk$P]& ;]NcG ~@{^9I+'aβk瑗ВlPZ-z^VN ibH?/20C rc =µOz0>EĆEj||ilrY6'j] ڒّPzG&Fڃ˓E(TV>u cv.z֐ޡUQt,^,11Q PG֌ܢQm;tA46>:t!G,قMu6Ia8d^Ѯ:Qd8NsNJw]!Ev]/\ccL "I]LIF`eQ xl\eAgJ'L# 7-XRrk٧.E܁ehhyHi/ bt}'crPUTRl@,F (U`ULՖ>T4`y*yx 0W[C8.6}ۚ~7vge ii/ŕAq{Б>Hwmpx=9> 7uP1?(j*rnuqzU}WfÙeKmcֹR[:uWKicU)|X h}'\6遍ќ&%F.b× 4cwa3]-u4]'И4Xp<^ّ Etg7Tm4a}"tu>\|4ԗ5EjnI=sY;fR#wF':RRUrp(IE_DsZ_$h}>_ GvPY5|΂X |zfc)?V!Oγ,TZ;tO(rW&ë̪W>*!ǃS S-|>1p\L bZ TlDfٵ&ۤ>o_9 6 .3Cy8| N1d$cn@GzXtqxuɡ 2Q9rǨ+FjZt6ьGR!J9ԉP\vx4~3P[x:G^-tR[: &;Jm zh'O7#Z{XihĔMJG"ŕHu`EJSR+WRE_D\[t 3K+f᢯̖|]zTDh.*\泔wWz `UshW\i(H! K89D{GE^^#fJR2~B "'|<[c[QsgLD->oޝ ts3#pK$% YY%kB%1hK15e_;[jha"+CAIaYE En`;Q2E)MZ6w|7#J{'Fd#´a*zf@WuSZu~k R ʸ!5= (@|y; *:xTi}p|QBL6c-Qc:Xr]+Cz!1 2\j N\ G%2'b„q3 cC?A-aM=Cıt ;S~`"jP.rk*qr+,w|YtS q7g]㸮;?R|MY"GP0!ǎT &4vbcX~d,e`gAg"8,fBmB;qM!,`1a, |X@{otL0q9{FwB0tlz)o#ZBfBuaQgv*ӆvBۮN*8zC3L"nws/T'ڄ0AZpm/ZEб-zb}o=\;k~Xwf:&Q^&)7ɑ @e]l2$وqm˪4w#}0ȍGj}QnF\. ˉ5{ H r &c[-}fBT푣I/xR] i|iĉ"!U{(v'BA LUmCS\ l;,\Z#qq,1A?"xBtqi05ul#ϑ.,AM`aўܱ ^#C j/J7b䴕rWtH~$C[Q3Qb:~ t:yB؆AC:F4"9!u"v?ƛ9 BhqZ&`L ,b캿+MgLn`oQV8.H/dL 0&"P]J6 0&P/>:/EC xFxՙU{4"޴2hZNYePE0&`L 0&݊~O? f}F.T08)i$=L 0&'v_V3&P^wGkv)&;P~qN;e-Ac6I%\-,@od^13&`L 0&2\?߈q?,~a/^F{F12Bі<C8Hq. 7`fކӲQDt7tA#:ivFw>w }/1ǷŐSHE<|8|p>eL 0&WiŰZL ,`Fg^Èz7r VqGxe˚R4ypBڅ1_T~q*}ł{-=wS 9Pn98݂6C6ЀHr~%`L 0@\`uVXfa^ nT6w OFgK|L1q^ydx -6An̜ 0&`L 0&P sݧ[| ~/:ٕ'q# @Ĭ.v )n<9#o΢/N!C5@_"BFCr?џf=SHt6"#kU"fL 0&W]BL ,x/DYO};&|1Zm/^YFG'z #loDxܘnk@y~qnaMČghi7e6G˗Π5릧Վ%or_F%C&`L~uk@u(u}į? sVa{aeML\-QFg_Ã{_i[{X8[B>aL 0&)KgL J`Lxo~q8`L 0&v_tU3&P\h_E9t Ӎe/]sһWEũ4`L 0&`sMv'`rIp&EÙ`L 0&lu߆O`e !F)i?_Ywa~8`L 0&%v_F3&P \W,k}_s\.\=9wu|`L 0&0OAݎB8vkw~(_V@쵛R7^,^blv`榦H:er/0~/>;fL 0&!PY0DZEhѐkCbdd#.d:;'Ӎ@4Gatw}$g0A@pGRdY.`L 0&j@]Cѭ1gs 45Zn~̞YY5U͈^{h#ž5ag$:d9Ќݝ (&PS sݯѯ W`L 0&P(Уh=q\y1|O;3\[a(rӥ\s3'y9;jY+0lf d%f!` B3|j@~ Y`L 0&ʺB徟-N?X/mMH1Ft&mнIQ8^[L %:o}}V!݋c~hK.+aY;O*}v_Е/ _F2&`Ltv' ~rh4ClN?{|;MR364im95Z\Slxm_L6 Ԩh)cl&uЌ6^ *u[`L 0& (Y3N?%t;]}q$!_Cɦ0&`L TuJtɴ۾qOǏZuK]̾FKD[A1K@f]AF?5l1틠6ݣ};$ wKY)k(&L xXL 0&`L@'@s٧az͞OJvdEGvO]q{3:h4..W ~Ա Mq#zh^oЎ6\@t z^ O4TG} JF/&Pu2jbĵ|5<wr`L 0&P//ɶl6ի`͚pU\z'N~Isf&@JR_׾.oWb#L 0&X,b6d;`$JeL 0&!s~ bSXxEZl6`L 0&`L &u6땭bL 0&@M`V6 0$5Xl`L 0&*A]+Ae2&PkuѼ^i|;s^_]ӢMݵu>tj|2.ʦXSNX&`L 0&O\i|G|b?_7F/crzƕč)r=V/g7C/ߏu]p `L 0&v_l52&P Ԭ;g_<"oyv*N|MH`L 0& bol?`AT~MvߚD_GfT{{仗,&`L 0&`~x}?:EƑ}1F:$dl0&`L``Zl7` @M菿u;&{ I?hj;#P<;݊oڏ#tRfw ءthڎT8Rl*:`ٲz6c `L 0B]JML 'v/#}ZG_;WNR:LeqQ(H B*qMA^ܠ\1&\`2R~]K5r㧲iD$BRg`0 D"/Ҕh &r҃xl3:)l+|&.26Y<{6xCy1吡d:eIϋa`-o).*b(ẖn%D<.ٶ WUu-y/Kk@أ| !'uNcdd##3( &Bu&`L`Dzޥ9>ra3:LCorpkn^zZ4r0V'˘N6zM/`@al T ťD0:Xwkӱ%K7/۸+dV⩑:ƟކivZ=g]¥クj 'G1ҳGa ep0oiD155gڳQD%'ovpC񬰐r/{^A=-]HZ%<*/3#ebՒv/Tӳ2ihY_ʹ1c?.Ɏm~i`ڶ zo$]=ЏDW[&.P6CۑNv8YcS{Ф 8e,]Z/xóD߃߉܉bݾSFjU)kѓBļ*UN1rY7{B9dpe 2(I .HSHin,ۦ|,qSӮfXNUUb>r0 ";pI196$1PhysmQs§Lu ݜ7F/ARa"1:*|1CuixNArB%OAm W¾?㘜nkgA:~}?%:O~kW㲓CT@l/z,Y$oh(r)D >>rrBrT{qL_ja)--GqJܳBo/OƔkR+aYë;|V5jj?b[p<%`eZ^boMEH `i׆W ^.>9tg]fz8emW}ӣt[6ʵՇl+Wώ zie%&Ħ!pOA@١S׎Mlu%O/sE26U>z_*#}S^^.r^ `g! {OAےBW3mH)Rrڈ9зVa](VԳZ% 9nއ8Fp?z/'𫑻|µ@ IdvGOC[gfSL|6R3X#Zπ&#p:N@Sg\`{٘Btٱu}(53஥aۆxq 7ۿf|*}6kDA9څ1E>6B!ٞnڍsv$>٭6p"ܕ}i:Cu#L*}o9G9Hc64=նϞ~IvDI4߶>]+W;HO,呦xzjUz4gWoBy)[<E~:rxdyO~h,^K׌ݝĠ! dZ/=02ktaL1n\Qlo£OyQHosT7xWy W`m0 :]`@«fָu _|)eղ%XbyA|mf~ 2Wy8-O<8 $A%vZml{%? ~!t<_v߸gKO?kـD]*C}NV V#;W}2o!3+ܭB;U5gauM,fw32Qő{]CaC <2S{GD} }` u[386ݹ_j^5. _Y݈1Kly1КSޚz;![>Rؤ]O4_?D h/cPؓA>@~r:=:Sc7\\uXWČ!D/ε.;,b \OCji.}'b.Pڀ7u> r%9c=Fc-*sE>E)b fx g8}';ǩBy9I5 , <,,b@Ve <4NX'dunb_׀R#g_Ã{KsScZ Q%dze~懗#bF/_y^e;A6%70zuZBvWrק|߾m XBiCpI#q ,x͛XfYy؝1sqR-/bdfY^k܅k׮+xܥvC+i96BerY"%"Fc8ƀ,":Z_A)7JT KH2}3h?@Ϙt!e^^7 ki>i#D IDAT_S婴;SiyɗFWM(I/Zr_ ^??\eutϪ@pzC;u]n/i9ҥxgfޞњ|rPx2Ia#CpÔBϢ%?Ǻ`nTƌy2w. -Aխ T~~_=H{t:)`UM'?Bf^;;U5\[Gl냶Mrs?z9},_~!ӾQ3ͩ/قl0 ȍi^ `vVFF#݅D-unb4z( ɧ<&+_Dwe ƌa1w.ZݎCIHH<@ }џς<zZ7k_[" ?6[穳Yy[o5݃/faul `L 0&PJrѯ~V#P̝o#4"O#(7gϽuǿz% ?^P[f$0&`LT|0&8 Tî uỰ~ &WwOc}swczxo'_wvm }=p40BWׁ`L 0&`L 0E\|Gz<¥t诐υIS?ʛ@e 0&`ވo2@-XT UNT&`L 0&bm 0b T~Mt֭½CzPaL 0&`L 0& DG ~џ|ʠ`L 0F][L ,T5_l ++ndST`L 0&bq 0b~1|4ܽTO|MeތܿYnqXBU>;>$o3 (;MyQVdaWTǎ TVn㜄e rʨ@ueWWa`6,WFqy<}⢙`L vݯ@~UXV7~r'$ܟh(FF0Ј΄q~rgE͓atw$7kU#"#.8+ZNyȕR]ez ɑS֜Tf. c>] 2fYTMUZWqx-`Z] 0Z"P>4>;ē !}r׈ ޚ`>׏Y$bh8&:>ݭ.RxJUF 0&@iu4~ 0A]+Xϴ߇lߌXQ@E&"_K'Y~xjiv /h@& ˻,Mڃ$mMwM׆O"?@9tޢ|ub,R@k4Pt+0|@ve1Cqsjl܌ >ݴAֵ-1⧷[]72ԍE{NulC]w[[dJ08*--J*Gh6ږ8#s)s)vTחa@.ir\x-~ tɬ[7;,HxpTZLʬ^zۓ{W)mhɺ?Kly:iqvV#y[d{}u%C&`AkA7ේG~f֭Z%u⏎)(K]M"OuBo ~ Ő6;莝AtsS^m~dqI=n$хLmIA͵dt0r,Yі$x/GhFK[Cj! QN^Wz87j(7uхz0۵ITu6X k@KɇE7^ga9voL᫯ۣK;^7)4M97Xju߭2,6×?3?zo|c⏎)( O#:ʵ-h9d9{9S.f:H;)M eG4I^䏡EuRC6rqC#<): ~cԱ^穓#$BcZ^'3A64 顠׮ h l ]puc*oN:f.9+/ 3$6nxخg02KG1>'4`c} 렓<`.6Vf!6/v~PI~v;٫s?(΋wAeiv97E(]շ[8I_ՊOE7&m}'}#F<],2T& TRL >1[f}ET-s.l^R` {i/mh" 5adhB#-Nl [F,ʜ.Q[=%w!U7(^ٍlG83! vc <}YldZAcRڴQjvWWu5]̂!mh8s+B#rrN z@xA|\FY :|J֢2""@_W͌RDᡍ#⮯Fiҽ8&]G,}r?8tb<1t;5p7! x-a:QV/҅xzitFe63oy FdbR"]AQ`ܮ)1 h֍\bpu9 wo$+O]_Qܔ3K^v>~:"IsֺFވփo/c دB- CkVzSfzk;=P_Ad[Css (Fs&UzHC̀e\7rE-~r3tpi!oekxZLJXgQxi"'cɲڪI9mhBFbZzތhX:4ڋ7{Uߖm>Z>W>h͕i~qv%is`++ܾuK+Êj7>8jA y+B"MW{YLވ[o+#ɐ]h1 $,P-|–HIWpŰ ir;/?Y j\]Az=~X ^"Dl+u#yOq B_< >5v OB}V,-92/}&&W糯нU+W &AC=~q XVjOۢZUDEj6O4|?D%9fzYs]Wĉ=rᑧw `4b/b1бm_@A .5 -S2 /~0''eqcEY7Y*&Ӷ_ eMAY n:<KO!)<{z$^?}]_D6oW/"l*XDE- e|>p8}6_.gDYr>- z#KB'}dqv Hb-lƭ1g7@捵ckg/Wr즃B={<79i@5[7exϴzwtG2>}t %&$Y݂te@܍ =jutѪ¤|[­WksUJoaDdh_E "}੯_±0i Dpq`M~"/ObIoY }r!@`#xyҴD9Kﺿ[@Yrjk}n_@m=mskS^7{;>yOoH@ 4;&勎t$U 2 ,X _A֩áI|%ԋ=uu5ymu2x<%>$Ux=LUoA8;ׯ@'WyͧL`հ>/8`L 0&@kL?/g (@O*~3&`L`EdL`}{Fx+f4:tb[sM`9Sɭ$RdateN:(ɵ~yŝ@x`F.FC]"Db-W^'8=Rh{ڱvYMiƒӲazpȱL 0&w?w x߈HKg~;="V0T[+ZE#z'HI%i۫-1$< ` )]qA-E;+G$!h[ lPw8h:E9y!k!pZ&P#iAf0&*B;Z0l'!5uɶ+lyJ)\ڍhXHK74 `vֳ3wvEjheqhhK6&`E:G.#Okzp״lz_U 2&Pu *aUhFɥ )԰IG;?Ed1h(\{4L$1xL-0f_:{u)-8[uv \0K6}59yupӎQŖ-Ϳh S>Eʰ0* @QBu֍N}Ct#ɳf1,{ƟD~Aye.f`-1P:Nq񋳿̾t^}iisI-c,.W_XcnչlQC?҆Yd"gy?\@ ;'M߾t;%_v\7ogt;wp}P[זuMaL B] i`G]}74"ܾ 6h>ZSg#B,rbhQ3]hoS7g>y޼Z9~lЙttaG|9umD`F dUl廀Ig_N6VٙN}xh}}>:&"ѧ^ N[C׽!N68`fM̮ Ay{8Zk\8֖6Ρ}+0 ^`Q"Vgj䝣Cׇ&L]L ,b຿t_ 7HLCj>dkQ  -Ω#YCvfS r@n=Th=|M 6|ilCSܢ$Nf9X@72(-yٱmdhB#-NlRKŏݗ {nxf+v< ,G U>"7@u3Kl(>fL 0&@ ˯ΫFw-2&P ~qWJ}z|-pqOӏݥ5);]A-7'v+=Lr(ߐ^ 2-dWJһ<ߪho)o? 6'IU^3O訷 7Y*=u7Yz/V&C[ou?џ`L 0&@̙>qEvo ; *f#"#.yշ-z 7hov|Q/ȶ7F8W0+nGFpzf4 A۠ b{zG7Un6!̒@9tno(J Dg*N;P&`L F`>\C;ޞtI %r= :u']ߠT-J00JE-f,SYh0EKVhv!47 QxnNUQlI̦怂ޖ "jowYfz]qI6oIXi2~8)`L 0&b$ _1_3|)v$ >Iz}r9Vn*۫Q' =UT[W.6p,OPzRw9>6(}E:Ji5~Q}\;;4+H 6?\˷cM݅ۨ;cْ-Ur{ʥ~z:]~ivر:Ŋb< ͞C!dFBw ֘AH Z Η-͹\L ٴJ$8vñL 0&`UD`\=ld@hN*ž,=k32L&u<E&B$݋޹JgppdFjўKuALH7lV1`dž~s/S+i7-!Pf_Qi2 cD2Z1Ƿ IDATq}1́ @5 h4CrȚ%]\**O^FFNdAz)vPjC X@Y'ԡdV <0f[Lo.@l mD8=#\lv_l52&`LHắ)L ̇~{iӎYd3D4{:mF:4jftUu]v7$3I5SNjvx_>[̶hX'~6({?Ԁ[}#pX+4tOj3#B c9Dݜ8t(knd?X5 |ڕhXPPy67u\SGw֠kӫ:\s΂ ]rK;6 Oٶ\rrmL 0&(#9sݧurpU6m+}v;uHHWh8cϤrŦvmCn-.W;6skYscҺ|d hE(l=wucgК8Z8Sf i3a5AAqՎ򔗖H\M~ϡS1k<{І$O=]!vm@gFflg.A׆xG<>;)]nD(m#/n6Tyǹ*>w-Sj*e %1Jksa[糯нnQ`L 0&PKM,V^5kµkWq8q1_!A2S#!\^NSj5^)q^9T䩈)Lapu JF kUHZ=_ji@rJ˯k_gsC`L 0&\d'N"Y^ T`M;BUd[h|C'8mN҈e?'Hl5jiX†0&`L TsgYIfci9-8R=#.l7A.Ħ}AԮ4U?Pd4?o`&`L 0 6;P@;Ob:]0 UxA(J|~u>sL 0&X@x6U&E]l<`L 0&])`UGv~5 V 0&`L 0&*rݟw|&`L ,캿@*dL`o 0&`~0N 0M]wL 0&`L 0&Pcu&^wkvf$s+gzXcas`L 0&0ukgL #]oGt ۆo7{oS1&`L &QqB&1v/COLOqƛ?ſO_[ E0&`L 0&N]Ly{z^K`zj%n߾w,7|1:^aL 0&v_&2&P:7܁U3-l\9-끥7ggq~K7c %pizӳ,vlFS;U2Fv[=]`8v۷c 띬,1e+Qg;ézv`VQRuwf8ڜKUD2T6 bG-oYG0oxTCg*3G~^V?hzrzܲ_iYMg|,.N_yk g 6)|)gD)WffpYLLUO7mM%M(=,Rc>Y` luxv:6>qzx2>k/qV.F O/;4`ZZ>t!12ElnM^=L >g0$;@@| :ˡ |I|4anaZb;\?nJԁP[>( k x0\$YWW{ߵ܉\}7KwfiMd&.][t6.]s~mvm Su3U޶:G?~ɦΠRceP"\mIv]֬%N`H>444 =V['_O \_ O`𕛸|Y<{6xC~xY!a3#AR"p4ip59y|BtzL2̙L/gZB]]N幨\A`@4G,BBƵ6p|o=r9w3[yw/BFj(QD.,hueׯ y}+u ub\\gw7uW\K|S[+u7.&q7qm7kקq>4 o4&ޞo૯WszC|@v<_z02;fW,K#V:\j Qr\?eyn2lqO7l-.[A8ltCI 7mMz9"]NaN9^,;I22,vc.7_NSG?T:XlVfEvt&~=~Z߷O\iT֍0{)/.ݞ9NQ\܅v0@i9 Ebc=Ii1`u-f0tHt6"ߖ{JA|Ɛ Ј ~4#z%A-r;AXaww8.&," ! @^-uܙ_htQ~c3|z{gd=iN8&6&@B=/3ސ3Y$o\3/w_|R^z,%7WqASKW=LyS&D WqG*sl\H ώoX~:̳jK*YRm %G+5(T^u')/?7{Y|Ȯz^Y-L\}7GW v;wߺq4nݦ͛3Ӹ>9'wqi ue3Ac6R-~Dm3ɳo5i}!pg|ff?r}ۍi ttRHٗ*$9^AKv8dδe1`֑rۏEK(zp0c{5~edQA=ST=':o VvYEof:J>c쥠yҤǍ\6{NdN>KK/k=/w"wgX#pإ!:!1.ZresVP3v3sY15B(vxڐdzr O1&ڋqӋêq?Q'JfР1Se[VC) v-V*>*hH3|#:eqQK"=h@QIt!\`dTy)7Q[4E<8KUOg/wϭŋ×ácQd{q:Zᬱ',(::N++y &k Y~N&"3˶߇4=sdN}>zL'6?mৣ_îqT:pkfu=5-ueVwRk{'ϏOYMW,~tk{k~z \?,ǟh^/ -ff0;73=3ysܜ7//)߬>ͬnMvC;U,55H7~1SG?P'>KPdJL|b̔:5̅<6u܏@JU3M+ ./wS(Zu}svL 8WK5a{qH+>a=ua Kڷ^|PTȽT^W וW*绯rNGYk77)ȷڜRuRrm$ @9tޢ%vΠe6f:NnSmb'{dqy3ꠑIp4Ì76d\iZmxE؊&qU5^"[:+l1Syq0,:!yw@tx) 1SB:ag{  7I;OLroR9s:9V#}1^FBTe[-mTb[FF>?ҩ2,;(܈gFظ1q5Ww$2ox |Y 4>l,Ʈ |>F j ~O"֠#mXehLK^ Kf~qR>|^>o|>l;ZZ^.cZwR[{'ϯrQ}Մ뾽0r}o_oC++ wg\V܁+ϽNt~p505 LȿYi{}ߚ~6Wo}_ņ3ʘf"˗ GU?hb^b8g]N@0ta|:FҼjvFRgXt\g -ƒҶ]j?fܗ0ڒjy=Mo:Ue-^WXA5thVB;O[B-Ӣ᜻m sO$mf=7jX?rSh՛ߐډ>/#+:NoաٌNvJn_ /bsjSX}+JD )4OY@Zvݯi본99[7au=Z KM/A㻗3c:fnoOI`zD؍r٤n9CH^i22 \i걤n0~GZn'8 Μ.:k)euضa%o\g}Y3z'ro߆|%hK)Ro#-sI#F^:>PSfCYܜ&I6qTiyrCl3:P{Wk$Vw^}DnuVG,42=K8oݹoy*Y_LffY~y߽4k5g_}-`^ėwc:anSҷoaL=fg˃v|nքzh}a6މTS*٢aAaS?>4keз!Szns\b6 FKvm252߆~0*ցf=|xsFf(HXZSOkHvD-xw3vjڷͦC>ƌ6KM)#Hvܲzzx7@x 055+ |5 }+S?*Lr!Ϗ6GLZB}Gq @AH%&4uNb#:/eJ0v {T l>Z[9+%"9[]i}z?)6.=fFcUoԆH29&vǦjߠi+ؤXj\Ќ1]۝ȗ7}zq1Qɏ{8V'~ƑVnr`Q-R'ƪSߖ4o1+X͖:)NH9 oڃik((xʩ^2iFA]:y yP3j3@X,LߡoU>0MBMH\l>%~N Fd4"w[0t5ckv=~_ x>sGp_*l29%( NgFhB1`atYOCf2̊ثH 4 ]Eʣ]|{l;_=rм)tji,`zuMP| 떡%_K#E8>qe\|{ @MnS򏎧iʿ%oD{V/Di9kdb]FN P.LmKQfH]fug7Gm>'d6O.M0(~X~ f{Yё1;XlYJ|u`a8KA{Auw| AK(1 ڋ(cK@L ([wURB#`b. 6#smx1fk"7 ÖW(D,ȡ@ϙsyoX9_g;\1/G4O|ZR]ՎBnbg{V(**JT ^ZUUe7&~}d̦Rd2^Fi-5Ե7S*c/B̿jp+K2eh6In"͗y"%;j0MJh? Д?|1-OQ%h-V/ /_~;r?|yyP(ehiD]s/Oa4,-3ۖN(+7"'B;:ZoU׹@b{3ٳOL 6KcG |8Idp>qY@qa]p9ѧN8ciޢïDt}nǧ6h=%b߷|1X_gJ<\ _`$8{{=%%9臵RS ^Qr\bVpr a>KpL 0&Xӌ~6_NA:tm;sLM+P]15I)<,{۷_Le2 xɐEX s/F*k'3gƎ1&w/hL 0%Ppp0/&`L  0& ~_$4 Gק4XWe2*3F!HkhX]<(0M"`L 0&`L 0&Pr!~AJ+fP1=Eӳ(g:!瀹`V"x5 a /&`L Ussec_ -+ rFWL͠tj ;Si`:BO3wo!$f裷bay} RS[L 0&?,Ͽ6c<9I}5%3^Q Ч=͝{xo2E())qh`L 0&`L 6,]UZTeTLSG͒ ZVϮ`iEE^\3&`L 8`>` Hv) բ_T.*wQř_ p|/[C}{+UaeM%;Kt)rw]15ʿ}D $/r2><=guIq A—n2-$OԶZ/Z>\v ;Q멤5bOgC~_;c{a9{, 4v wmA发C:*/žj!z`L ,=,aEk"XZU]KXQ]K15=2zbXkW.}kՇUjr'.7t(;6}{qv|IlÏދ9{U~J|_sq:zfw"FEPvƩq ~she7~l̪i{+Aap\0x uMK;FZַu*5KҦ|Yߒ,##ٮ`(nF s.d2|?n=t̚%9z%(tڄm\rP+q*/]Iwu%֯K~m5]{^{׭w/q_ ~wVKиd Z|*a_~~h@eY!puZ_^5'A3uЇc,*;zfC-Ǯ*yueG?;YrI[h߱cκo3Eߓ~l,(+DykSQ Sxs+cNǔn mԋn^SgͲjv-BVʄX׆ʖҙ@?Lt^w1w]K};cOߙ88O}8:6v_@d]kl#RvuNe@OضN*E^%A3g"'WH>4@KY$t\@E_ik64_a/l(&yhZi#lOSݨoHg lvv]θÃ6{2 Է \0bdvNZj14o.@͡ztg"YWVblk~x~h]>{SQ4Q'Wa;?0b0eY62+}Fm'5niSڕLzmlϊ %+wB">TׅwZk;~+ێmGv^wǺXϫ{sکjɔnE3o*lG^)V?%ҖI7C$A0L%(ƯZ$]9s_8vG,5<[vשoYo/KmlgpnXZ7Yx/R.uؘXĂˁNf`ڂF)օpþ ʔ:?S 7 bu*.$[x%_#/@Az ]^祒oOypn.w-CW^@}:~ f} :RK/F4.}2Xe]u_O#8ۖ0Pq<<h-kG^ +[UuiCZfP8QrΨ5^3Wt`NYZZ ׋ŋGI^ASiѢE^߀}M7l}=Eݴֲ=%_B '80"%KĖavu3>4(^LNKcw3zN  mXO"ƆZu1Sߗ2H~Ȝtߏ͖6@h'"P8V%Hd`VL,;Y|t.гKQQ;#G}BI-Q^l_]6I5t4E (ƮsL @5xy~8nxD~im_vΕk!H6'ǮC^X|} Wi BbJc py:/k6&pHJ&B<k Wj/ؾgԘ SΛy4p-Yj%IWq*>Ҷt>P]#v6zM9K'K3ϜKt% 3MBkʩ݌lžKB {c\Sml՞mF`Vϡv>]qe$=>jILN.;0Lu:ъJ.Çс *9a;O6.߫TJ[Io/u6hDߏAOZ`^Ϧ+0N8x -۵Ag_N`xB QAvf*9TyW~A.ɧ )Wk:g @YO*i%֧.ۗKiʲ|fyC-viCqMGBKSE9/xt6R҆Χ]Oa}++A]а v:DkyE1ޔP40kD+G-JE5c)VniIx?3ߛg?Es0De(v鼝h{mR`e);I߭AËg e`N)*ݱ^2:!wRvIQCJۈ o #nl95mwR PnМ7l"cmbm(ׂn.2:z$ݸt}'}].Z;d-m]9τBO>df۾o=)UeFKlEF+˞~ecTcEח0Xi~|̶E눢lOfLzt{%r ng^Ȭt_EP%42'R8̸?x*>$OU -=7zeq6^zFPtM4O3:ñ5h:ޫڟp;hmHYӺAi-ҍmDJt~ O1"4h^$e9prNt?ۙrD+r]kaigo+:-8s~Z7oA 8uRi ƧAI^GNo@ݸ dxR.ݩ*ۭi 'JC3fpْHSHR+ղ~yWDmuȟhۨ&)ڵ@VT}B,jDNPzk,BAݎ6)4\kju%ICuY,}/|3R7SMOZ8mSbUeF)V"׶ $JYF2}m.=2O.ujڈq xJԸKM1fh&Ya7**@9brA:i7,ub+w@:.iym˜7bo: fΪˈ4OR%'-sn ͮ;=wl32TULqZ,:A*nNRz賽 Ջ$V;Os:?{ lSٔPB޻n\$<^w5s6a="m:؏[yEhe;\.^^T]hPe[hy(9\$rMK\{_ gfi`oy Eܮ 'QWUGenk $nG ;Q@zZ%PQlFv$`0jTW/ ܸ1~էC:!>hNY!׏*٧vUSIklaG;O3b`Lڣ20@bogzzR/퓝qr~Æ̯Q߀@`T>hbNGØF]nP} Ěk>D^{E:L&|Ņu +DŽku~̾W6e_2*>u-&s¯kxYT,:WM,y(fs[ .ex5cw(-X-{T-הkmZ\h\*`Ω~"vHI|. VVO9Kp,%wPhh2fG^ctӸvyÚoS9};f' UjjlwzSNXQ;wԚMkz}H~,9VtXIv(əd/ 1|MupId_p l 9:0mf̓qz|Lo̷d_Y\Zt?38n=Mg굚>e>[D fH,TJrG?%M?9@[G'}vp0Zݢs0ŇѾJ,z[=&@eS hق򤁴:ͲX>X(>gl粙`L 0&& t?M,`G`D,}_|-ט 0&`IxLL 0ȅ5 Ȥ=61)0ml,WgL 0&`L 0A~,@SEtj o~ZTvXS.3MIװw؂Ʈ!%ahYtac4 r`L 0&`w'пj-x5Y7gV{Qo$oxQ~LkyqhRyXl5`70nIW'Z4m,v tCj=ދ8D?=?6!I^!y4/,> 7gލgq;p4 ?9oc`L $de[8:4!*q:#"B[xv޴r Qoʹzp|G19ݎ nF=\ ޽RY?6oc)=PȤWޟWy.6I5k]] bvr^/m,~sȥ.F@ˣ50m+h׋"vuS)Mj` .:|{2va9t4"(zZ?A=C:h%ԆZebL 0&@$G2)#S8^&5r ^ 5˪$]kO Ifaz3/hݶCIWTw4shk8J/8Ea IDAT:;Eϧ5$緿㏥QoOoߏ, Qn:cMuR J۴y >וhX]Ly\{=}vs7, +j@ґ5lEEwwz^c8(dmdL 0&(L^}m9bHߝB5fgv:t?%/xTXFذczP9{Z .Gd[`9\w1ҋ#Fgf㨟[l]K쵂6>ܠ dO~]+|Uo9PF}->ʄ9X# <3ߓ3Jۨm d5@bh캒ҥ\%EĦk-BFtg3Iۈ:1(T2Ï4;^(zS}r?r}mlOS2&(,/ZMI*nT;$=o#(Z/- kaN[D _i/F01\:S$ij3wh9@;6C6/iOP,,׵⩛~6Vt`CድG U< { -zvA }2s ڳf{JgL 0&KA&0 ;Qe?xޟ˫,0I-Rd  uՋdo9xEsGtH#fK)yqaL 0&(^+p} p`/MZ<«}Mޝ}L7ͤ/N~VN%ӁP?-J:s SK?<(J5l{-h_UuAͣ ^ԿGMOe(7-=b4&Y^ \c"p |ϼu痢$+jAJ'IBbX\>&m/&ߚgL 0&(V z0DUU5arnܘd33Wgn _3%k'|,\C>? 7B? ue~^\3&`L KSeRV6dda(epO[t;&&`L 0& (LO( rer@.Dg~]`L 0&R@`S`yI`TieӳL 0&(>,/63&8'Όs0&`L 0&Y 59{ycL 0&--&p$}G,| 0&`LNv"$H&| 0&`L 0&@`~6;`L 0#ks1`In5`L 0&2NG2&X.3&`L 0&p#}72| 0&`L t?的bL 8`#>`L 0&`'};gL D`~$>`L 0&P۳=g,J&yTi܍\kk]ow6;#g—ڪu|{qvڲPׂ&'3&`Lx tx۞k@X?+N`L 0&PZ+R`0]%O0|Xݓsl7> ާ*.Gv?1-h$\[^/.Җ!ʵK/%h s.CIkSp"vV{Xʹƅq^O-HNOnx3;,ϙ`G`L 0&bHt?JBGz[ aBJ{[L]m@_׽<[F3C[*ۊ@SF'[g8r-O/ݴ-ZފAkA?ZiZϣYI/p*KE)E=8\߅f}Et7I~"Ftnv Q87̤aVY&wC]#Aɩ[p㼞m-\27Z tʃ`L 0&\dU/g;wԁWO[V[OǴmm٘Ml:":gܨCl4s>Ҵ- +!i$^(n Ƥ f;BfۯtcDeWu_/` Њvkl6`;ڹz_0ƱRQv[]LK;8׀&=`=S}Qښ]d~5`L 0&@hF?휑6г˔Ǒ(hYs܊}l}I5oS)Ȋ_AJ'U(FRvȇqtm4Hi'MfY"30!p#wfN]6`L 0&`Ȏt_v`ᐜSA PGJy|/}&јӝqkRj_N`)ln68%5a]u֋o}\V4;^7c و փЀH%GnwPN~e_M[}\ t6 <?M| |8Za>`L 0&H5bn0}Y{Z/fwat p՗c3;oC1tZIjhuƌVloQٌQ~T[-ֹ2( 2X͌n&7nX3Dkȓ#Ю94*W;[ѭu';J%G `}:"^_K7I4x赓dQdɬM_M50H\roݘC(Ũ(_0&`LTT.`UUը^qcO?43_U(7k@/?ܞmFޟD\gI[>]Ô:/jxuB.gCq ܺ1;;%`.w82L 0&@qN>=t(0+VʷZa0|CçOK(#bc;,sh,Y='gmt&hi\<ecf\a&`LIsO3J$Pr=I#E{L |D/F[g%12q g4Qh\][gO,ྊ**A]@3ĽGs:%`GMXQ'JC]&}hjn@O`=FdJ Tq?`L 0X{`s'րt;>-4IN"'ga d#Ik/-" P}g}ǃ5Kм~ ª}}'5Ooi\361k7fON9?߿=7?3/o^S|K|-,1N"6u,(Ԉ4/r#n#42}ijx9#jOl]x=d!)Ssr8&Q ӒiC͖q7MfGO=iw៤llв)%PLj1d|L&OLO]vm3dwʈ~ѽ#m(lmd3LHu9gmtɷc!t[FƓx̭3&2F ;D:Xlcg_{w>h7n9Lޚm}k7}gߚs!|>L5Уk3ԝ>ע.@ɍiS1ۥXy#Z#A[R7~IǛHPsن<̟9BG3֊Ƕr~}c^Ӵ-I(Uf-[r0xtX)Ķyȧ8zcSe)wRL[0GN-.42mf'~Cc(:u :+?_ߘwp{&U7ׇw,f13K==Tqkj7ѝyLޙ' ѿPujW hnߩݐ~3)tf$Ů9Yo/gQslU2CcЖY-eŋg*jMC]Sw=A|xT,bWy^3uрxtpmx+qL3848]v3Œ8&V[ø3­ikCdhV_[/.+;kچfq00<ԛ]\WIIP5ih )glQcwx]*$C5pM}fUqW?!Q G]S:DߩKܷCIhcJ?,]`h bnFsŞsl~kihDY &|M;qQ=3u3.n+Vsf|xPddXVY[oJfe--*CѼm9[BEbE3%wXrcS|֎KBmD{WԞ-gqC0n.9 Kq M:#¸ykoMsB]{˼7W.AU<0a`>mtgBO˓!5Nf<_oƂC֛/Q(E+i]'P׫}յJYX:ߡ8'ˤ )'ΣYJ{Sb8f 0!DK*Ys+h8hMK2x3b03Schv|ZP׫{۸݇ZaUm/64Cb:54У՟^߽c8#'vpiA@Rb}DG͓hOq B3ufܐl2׹S=V8wY6-OP1B⳶[?aЀ(PQd!VOcoovcT5 t/kKZ.5t.2ئAaU+p5h>n X%a貰t]uhn?Sg%qSCNiˋD'd~.yƭ003= UX]R3Z4,:!`NvmWޡYmvvv3!~s @gX Mݬ+0/UyL|o/[.7JQQ NbDDF,QWU ܀N9qN-UJ`I.Ojů0ݎӐ)y_ݴBM3OXuj: T1q)VW=Thfc46sFCEײh1dߎ%q}YҾͥehZR%zC-G{uVd~b5r^Riٞ,`}6bo/*1پ$iSUR إJt]DP Mf_Z@.M9z "ڥv>yOd%}O=( {^E5*n4M1˓i<"1yi?%xI%7=Ƭ9C,V^gsaY0saLX>%g?ϰ+鏢__/;tCDL]Z盏n Gۋc :wYʘt;b" {..r&xi3OƹTlD;A$c'<jB|ugTCqt]ʔ,[&"}0D`8ʽE-lߩ-Tj7$h`W@'a5} apl'h)H5K=jD]Rpz` Q{,4`oiI| ;-ͱ,{pM&t?[/B[pdeb(b'!5YȀ^h.nΠ$4>ki&AgUʬіRAF %y`RsK57g5f'Mv\IJIq3OQ̈/?N=w2 Tr;;\nu )E3}k |b2: Ȩu>.8 YLCzRqzo&2Ew6|TC]P2yzeRnrKo`iGS WS 3۴Oؿ7vuƎ]}]/8诓%VѠPkRڨ_=]!o~ζZSY9vcϡ>l|RȈg@7'<ׯ;`P wY\>7Ӻ[#c=bءՔ I\@ u1p"NQmvU)ndcm}t3B.&ich=|L!1GGw`Pw0ߎE >YyfMGD|yV'51&@*+eYⰼ-){*;[z>0k4&o`vza1B( aY/ELè cyeY^-JͼCHu cw‡ ^E.' oF?KI޻1s"0E/:,V-GSj1^@o̡m UTb ˋ?b=4L˶`L 0,tFiF駟~\9Q:*y?(sɗg ,Ǔ`L 0%m:v 0 ~uI)'ݗ|z}d=~~}?9%bEk{xo2E())8|9&`L 0&A~dOae9*Eբ,.(e"8/mwК}׭%Ty˱[Xw]xa&`L0 t0ەk@(Ȏ<%XZQ%[:W" t?M^[q1VTaRYZtKPUVE%.*;7~8KNv|kocŲ*g)֖Π2q70Ikf,eLewmAװ,T{ `n6dӰs,j1ذq^;(-W|]򭬔3ؓkYMb>C^{ %?Z%ܵ1\`L 0&Biľfq/>e_U+.]Ka2 ,_Ŋ*,^y/~3%Xr [S> U˗g9_O:e7iP|^F10lvUK"FF}-h@_?4+qJ_Sk`j޽[{^.D痠qݵeeT;?'jQ?vŘ G]`\v뺐4os\Ghk NQgIve?nit=>}hkߌMn9X4ָSWոɖC,Fc89u,CwOU/YAf]WkgWaUuвq wZNUn$pat5G?F$-סn؋8"wKys qe(a>|C,_dZKyfvdd~h1Vvw#;NK^Srӹ7İյfUxu[6eL 0&`龕GWVblk~x~h]>{'ZϣYď|q%x2nY)郯nWi'qDo+߲DN%N#@ؕ>9iD_Gs 8F 0pj?\u@ɺc-ѷg?@iĵ×VTo#)M;~*mEqg4x1FD:R߹s:KEODfnj_[X->w+.A98L C+s(+wjRx^,^8M :NM-z|etxwDk SǠAbi#`H ELgi# u6 Zm Cwʷc>:cJgߵ$vhs,E߀ck^D<؊5w]E. 4?'W|٧> uTv鉲Gh0gDT:]R-L;}V܍fba]@`~%ׄ 0`~eC>hj"8\̂'X RGQ%Tr:#R81в]@vZ\Q^l 20"$.\9$WxS/xs@àN< Ot?Zݓ^m$\7`L 0!iA3$e'O|hj=1d/a{9>Y-҂̍ucEkqmLczQh:z`#_O'TìZeI)"FETN2rU~Iف/*In}ݮ1Cq=YSa#C&s;fٱ$Z&KL 3^C6I/rm,w@OcL3hm{`|jelVt߻g̋z6$MvzV7ZC㨋w6 Wlڈq X(BOIk:M!QmݺqބenEp4Oi[OutnS$x w;`KPnd_4cOxkE@A`~A7/W 0pꓰwɷ&|!3(vyٙ)1RHB}8g'GQe~c  jD?6gL 7U  09y7nL駟/+gfL ,xuyF?.8A;;^,fϣ5G4 !0EіУi`L p'?[cL hp&@#;'șso X¯&א 0&t;``L@!@_Ҩڊ6'N@Z RZ1q&`L 0'@QIKIfL 0&@`L 0&KM&w`L 0&Kĩ(n,/3&`L 0&@`~5(W 0&`Lܺ\7& K 5.L 0&H#.fL`t`+`L 0&pCj܂F{O_pSd!ط[5"v.WuKĩ`L 0&r@Ƥw6 г ]C9@]`L G;L 0&:lH}mYI~zڢ8K}@Ft?#&`L 0%CSsQ_k<=qw6s5F=I>-)hLҦ!ח 7۰-q`Mx dK\<`L 0&@2&wqi,H!t@夘@}Zn`t?'pHtcvZuÇν^^o\6OuP(Dڏ~4ӯ-oު:L 01&`L 0&g_OߏFy}6{N"0uE>ZgzC. Ggd+}i݂9Hd1&)$Kc*α;bL 0&`A ˷b{$ܪw?r0\>W`6KQmc+F|^mpfL sHxPs‡`L 0&" dc6kz@}chYz`|5s@[6 ڔO i\)e%>@qlw5`L 0&&1>ojđϴ`lΡw| :=am#_lYĮOS(`J{=XЀc<1lp\M5*eL 0&@(]P݂ Q] 7p~鬮яY!Zᇣ?ffN,t?}]`L 0&lHr1&w-8x 0&`LI` t?/^`L 0&RC@;[l 0&$$8`L 0&y,`3ܩIgq7q0&p,_8C`L 0&PH0?o`k0x $s&[Z|ّshnR0!T5R|Pc՘VO,&`L 0@FW{-~RmH?{uhnJ6wj.\!55a+L :|g@ ))u`L 0&@&rֻi`"(|N2-ho7ٺ@OѿFvK_0E=@\vQ^Ϟ3@>Dg֨ezbRϛ4+X]|0#,OAcM{}nOss)&`L 0&2I'pZtƒ5V3轈݌Cj皼. 4?9COv+he=O/bp;;y щd|fVo!bx@*\| ndkrYL8 t? 1{0qu)Cu))Jx!dL 0&@jއv>g䇟GI֦h $O$ʅ딧n&m!;0ҽUt@#}aFIQD]qH?ݞ· ,\E!:AV?(Te^hw&fV)ᣥUoϗ<ۉ^R}s4P)iC~QקzO45r~}N}oD>#atKٿB@Yo8ECjuJ2$!.{i{yN6uDI2&R,ONǃR|d[zQSLtߩƓx4}H\ŵx~Wߧw'gaKq;)hLU5$WL\h)SPx_m^Yf)r72w2ydZow톛bSoԣVLIu9cN U2gOps'DŽ:NDH_!76]߈f|9[/5Q0ڎsl\N[ou|_O3Xzȏh.ZЌ{gnW єdC LƇzg  /K0q`J .Vz[O.]y|xk15l!x#{JPԃRff_͖f1Z9n)kW[,qS>iBUjكH{z%d 8dܨd1nvꤖF?1V( d1 æ;/,_Yp)d?O^=auR:_7_.l.痿F'tK}mp6&=7v"[Zn^c pʯ=)`_9;mI7H0YS^ ߸7>k|f13=Yz,B==[Ss95c<JI3ٽ2hRCK'\8Gf1O#g,}2h0v=.?X [̻璎3&GY>/κ5|i 'Yo\Ʀ5s&\~ c7.ei,OCPIo%~A΍V}ۃ[k܍jJCx.|[twC5Ma, b'_\ƛ^;y_𴢪i IDATse_J7ѹY8^M6=@3Aڦ zХLQK$FX?޺ ?? x_7к+}=k9Im,A Cz9P#6b3E[>-r3L #Iu^4| ^&e\Ӻh,;/^t3`g=e|dFa?~jX9Gur&הG %P_rg֮Y6֪o/¿˥軾_ֿ|E+lY~% k١Ƨ6IʃBp,nߚ+ڻp/yQ-o\y`>|τD:'C(M}Gۃ~N{dđ7yA S`4}>PwYu{F(O|*A܅у'*5';@lЧ]^cQ9h!~(7fyBqGZ|fIVV  sZ_#}Ƌ?ZԾt˜Bz^plc;FßL O|svg׿^7~;[:Xƌc?H|x^A֎+@ t?ۯ藖;LOafzJ̻eZE%hX^ui۴C!͆0;;限x;_Ph>헝_?LS^emi1+O%2qHko[FJ,#JT^npH㠦vv u0{ˣd]0y$c^p7O/gM\V׶|m 8JjWu|v  Ձ r$gwƂnumퟌ㲋a@X۾lW 9N)sM$@$2WB#lgt/}t YdJzel~* 9"B/g*E:-] BSeTNofEGK j/'4Ⱥȵe$7M47 n|yD!Rҁ7޺v#~H^fEY" ʠeD3i~U1-rim}w~/篴sHͲ]Y+X:ssBm&6Ȓ Co+ߕ:9gX~/WP2k-,8o ڏ\,yK {)oa2 Uy:vG+–#ZRdVz/ǭx+b"_\f2~xq۰_tqsڠOq=Ko'G*ܿȠS0y٩H} tpLA$@ Ԃt _"Зw6A6E:Ҍg_ܲ_OS|nbXzcz^2wC"~HTsDzekOᛯO w<:-# +ͨޔs} k5)8b-ahw A<nAgd:TC⏿f׵ XzA} O&~?]RJ?24aKױeml3vYe, MFH ŀ#r?F,¦]!mGYeҸ [h7TO%Ntd:5~)^ Q.mV ")wlހ{޸*$֯߈7aq][n[Mf& z *3«ݫ3՜^>Y1Qzf L|DD 1@ѓ VR26n~WWq7~{Y XNi~j#>!4gw)ZYʎεb$2/-_H֜k !J+Ui |!ŗ2N?]8m#Qm?~ms8[@4b&R!ЮASN鑦j䲤A[ƂR0ȘHHHH@-HCF_ZDV;Kg_fm3F'?BdF~wbfDeMCZ/s ^{@ o x\C3P>&"  ]룞% O/u""wQؼ5)~fwޥ䫝|i&ź̲&#   F#@~8%(@-HC7: ",2|Y/Zo|5!;+S ݽqЂX& ٘!pf9 @~B)o]IuiK+.Yr~頋>RMlEv/C["x;EIM$@$@$(og$@uD tUyަhmzg2bn!rpsIa_7f\GF,x-ȓZc"ƻ$@$@$@$P(ݯ:$@kO 0d-Zg5 D!*#x/[~ ښcظ.5-HHHHHH Ԃt?t3Ҏݖǰ9ۚ"h-IۜO٘/'7"y?b9%[]_Z3%_ׂ5uܸh4!* @t PT[Վu1lhN"zYȣMϿ㓛K}o| kS+]+h*:itHHH\(/I!3J+T^e݆;7bN뛢hkb]sֵ ?<>~oNw OL cU9N3ߟFbܔN3׶l4 ]~=Sz*HZWE)wo?hf^a^wa`Sxdeb׎HHNW  @B)ݗe{M|sFvFlB|:|ކ/ [^l{6b7__ҝJ .6v;b[w.myocHh+tO*H|q`m8.( }Z^U28pnU 溂?;wi  Sim 5%P KMJgC-}-ہTG3.C:ŗljGZ#DDlnZAmhD_=;+, ^Yx9g|_m?f|118.?y\)?SY'+7%+~o+9|xQ|{ ?ӯy1=W<<   PP! 0e^mmi|Iʭ7{ߊ1 pM~ |j;~΍ ]xM\mS51 @=]ѯBIHHHHHꂀ_?v],HHH7⫓$@ Oo@$@$@$@PS 46J= @P e8$@$@$@$fv @Pd,$@$@$@$PAW.M JB$@$@$@$@$@$@l$@$@$@$@uC*:J$(oIHHH (Jb: F&@~#>c'     JCW HHHK-##JUHHH*Fa t?DPHHHHHHH}    !@~T%hp7x`$@$@$@$AI1 @#tk RD$@$@$@%@~x떑 OFC$@$@$@#@~0 @Pd($@$@$@$@$@$@$@> @tn 48J0|   JH PȵIHHHHHBGU)"   t?uHEp'!   tbhiH D(Qe2      ~Sa{jIHHHt?$&!  @~ T]    z @~=}$6J],HHHHHHH/c a]F$&臩6 TK$@!@~h @>[ @tn 48J0|   JH P_feFS$@$@$@$@$@$@$PM[@) ) @=tj> TeT$oFz%[i|&H '@~pV)YDiD=M$L6H]:h1",2Y?    JHH>Ɉ(@4XFH7f:|Is+ZZ.gWšZJ-G1K6b>_+=q3y~A)lԵޤQ効\v 9uY(G5bޱY.3Veϲ{XUTn/8sנ_}YwJ8h,%,'@~諘 eMgqgSmn^_l6@k(>\R|}+&\5Xڢ՜m3ۏ^w±xC0~7g;bwV/@l^uνqoPܷ%uѡwA*s`~+z}%)[W 9ҩY ׃Wq ّ}Nf /{1`}.h71vqj~_{,g3 ptILHײQ,imϷDnZat@"k h,nK"/߶vc6 y֑ٖ\vi)%,"F?'X*1*?MفQJNJz& 4يϘe|ْ\L }T@G IDATXvzw|փ{}/E{fƿv*4% mW>羱(:?CsZ sؑ߷%t1Iba~sY3/c>yB$@$I}O4ii R Ö[qφVl۴onA[4l:󒑀6E*J&YEHtU1l~E,rJe`EH'p}Uh0HHB ԤO6C?[N#2~s9uz}3Lr k]̚}zfl\6rf3?61p2&OkkحsgaY,S_Yh+<&WwPu[,z( 8(N OT/:'?7;6X"WsK/:spx\G &-h˯p׮9ۏˏ焺 .\Ϲh%FKt~/KW0NMO6!46V85 Cϋ猽o+zA~=}%hdKmj}|m)>]FZ:7߻vk|w]_@/dѾa/gzd$,̈"i+1k?3.>|ۚ5mK肞/'v蟛%sk»mkyvfYMyn1ug9rPL=o&JAR{Ӑh }+ׯ\/e.3la.OQv}ڔR 'E.mB~T;Зey⳽|_{r)l/EDKKٰ/i}}+E)/%* 6#/vГx*{&  $qmTtq تL&X~#6n܄kvl "$@a!O0;e7}_$ܛ/.At koïՆ/ាb ">}~F^!c' ;WH%(3~ t5q~5N1jPzK$((ݯ`MGDo^2dXo][%Bϵa-G4Y@1ܐpH 49VUꏠNE<ǾZ\  (D J?r*K՚f,Cwsm-s\ҙ,Shi%/n%S%龋D$@$@$@*JO)WiHSXQ_ctMd|ydoj3QN'ԆU.uX4L$@$@$@kA2HkQ KAl?Qc=t࿹)u3xHHHHHHԂt)еɞI}k}_6#6m$j/kw#k$@$@$@a'oᰇHH ·~hf j;ˮ"/Mʟ:Ki} @ufŸ́tvSxHHH d(Y2 tX{˲h1MKYH2=Y4 M!k* HHHHHH@-H7/34Zܾ)Ѥ1[]vjs7xD#Ţ&dV҈r~|N$@$@$@a"@~j @8; ֯"&3Iُ v̵.xE,2~w!(Z[bhEH(х36   UtH!P_jfMbQm=FtԵW4skp!1kxOqO1"ߺTMMɏbm *3GݽxLyy w?񤘑19d4X6| ӄgr{( S@Y3~ޜjLJTBށ z7?Z k)t` ㏢;2/w9|3 $@$@$@$W*e#- MXKgIHO6ӓλ6$cH%-|pmI[H -1pdžfDW˻tl D;/cxpc0{f/83LҕڙЄr,Oeo ?1wrUJa;X=38ҕI8Sg*y'hۅ'rB cNyF/xL$@P @ V.#n1lЌuMhma]KK:MhmiºVIӌu-hWk 6ք;oon)umuc{1c{ڭ9=>bFήpJgA̟, Jb% {ȞVMg[W/m#޼ڊ @PFFF42iDS)W:JYYAv%v7+;12vksc%1t},&3bJ׏R^|}=3ecImr/bt!}XsZgB9~rw[>58ّ؟tn]gf{GA%jc/_6_Θv: 49~ǚP3a^NV07c&Q7tC}2^I,K`rpC>;ʹnvr ڮ=֕/6ʒ0]HggoinM.7yH P_˵CHH G \#SrF՝s|Y/Pc&-;b1ɰjm&3_^7fݵN@Qv:N2KHԽ)!؟|٘<5B Zj&kbE,\t?':p/E?=3Hޏ1#Js}: ꗡfȝr~Pނ=3|?zQֶvۺ!]{w+}?r7\qn f/ TUCςI@-HW]Y$cd_ܯ"=c(1mv_I+irNhKU:UqȻТLiwDI`C͸Kc'5d G}&#?3оg7NՕ k6,`A۵ʳo߅> 0%Xͷ"F<    %"ݟ{흪P3U%UieG$f.=C\npMmوS{&`"ѝ3o8>& rϷ\%]=Srs=5']>K8վjB籱/~g97ӗk'.̋D@.WX1pTT3ZR^\bȽ][ Օ!ctз+̯=r %T >Jk! W܇3~Ǭ8Fܡu;gT=w=Ht:4 ;wbd $v{Ը'e)i;5H;vh0c59K_><Zjr9etNL{?_zKg:զ[鼏gw{E[av'o{|o& u3#>Z,ÍO[[Y3! >;kE 5W5իjyz}l]\-<: /KtI\LLF5N+@hmd27bMX\k>?ώ23 @=X(ju)ݯFu8 !@`ӊ$И8ߘΨI;Wg pyězR`a#ve<$~#2c$X-Z _mxㄯ?lqf A!A 4pU΀IHHH~ P_uGIUߌHHHJ&@~蘑HԂtjp HHHHHHD_?v],HHHuRQtH MHHHH Jqb* &@~c?'     JCV HHHL0.c#JTHHH*H ¥i t?4U@HHHHHHHtHHHHnP_7UEGI > %@~PRLG$(og$@$@$@$@$@$@#@~誔 @x P޺ed$@"@~ѐ @P_14L$"2 P6@$@$@$@$P7(ݯ$@ No HHHt?()#hd7r3v      t?tUʀHHHH (o22 pt?\hHHHHb(ݯZ&JCT HHHHHH(g    MUQ '@~7O$@$@$@A Pӑ 42J; @P*e@$@$@$@$^n @Pd4$@$@$@$P1W - !LB$@$@$@$@$@$@ J릪( @t'   (JH\HHHHHH t(]2    /J[H \(W}2   J+IBDU&C!      Z7Y,,g-W۲BK 0HHHHP_CAWHH@KWsW  __?|2o BR1 @t 5~5O/?|S[XZ^)u       (3J:kׁO(m"j2Z[e+_ YD *!  h7@%3D P{m--eזC_bYQ1Ͽa((yɏ"P}'OcOtw?dʨbswW3M$@$@ No H ZzÁ\Dcӄ_#{[3hmmAY'D|r*T&Lf}o'5|56gww6qkHHVA`٧e@3w3q/KN$@$r"ݟ{흪FY3Hw߾}[7ڂrzA +_[-ݫKxcy-OV޵x}`+x1) ޺*oξP&Xm|_cxUj g$@%% *;|P8c @4.䇱44%^\8әvljEw.c?A)q0 = { M4ocP8Uz(l(A$@5E;BS:mmmشi.^_Oߊ`2>&>&>^?]µ++i,0^Ӹ&i|"4~}V/Wntѱw΋u* ?Nty%0,;gS-8Νeόޙ3;&Hpb̗fwc%̎,޲6QʀO:O+:0J߆eIma&ty☡sveU|sE5fF؎r L;W iL uWd>:m_67E܁=ڮ̲jcS`9o)D} r? 87ݦ_j}Oc9EKglJi ņ(IĖ9I ~qs@+t;70/epT t=$F{JڒI1ہ13=Iu l;)&kRc[o[&Ֆ=8@c`U3_AZ*/ԉ/t_\tȢIH.$`z]_KORxsuش׵W?Cd=JBZ_W^V9ub,Qr]7Ac 9sV<} z| ༣k-fAFG(kt>e7L8gM~|s' 0Q18>c`dv 89"~p^C`͜#o؉~eDz3J=#5nr?t&h*}yx "72A}`^ǹ1G8V1֦V`1 a#+&0 J%S]a(j{2*1ߩ+)$?q;rĞ{=yެ2s`ShH=ec0<GDl;^yu潮;P$s 'P uY,Jay)mcشMnͱ(h;+ evc9W^}ve%zNW~ C>sF4 h~; ~%P٪9gJ:2*}L{,s[^;/b0X3hy>ͲN`n!Y}`EFϾ?oz7s:fM|X|L jh1&k <),X lg2g=hcW4cmu_zo`^0<ۈ/& CXpf?LCIL}J ՝_9[=-M0)j<&}Cpr< ̛*N!腺m٩w @~Bї-X1:>,2y_g, /e6_;NeMeu?%<"9y)L<~^*Wl_d՜ٕwqBƄC4?ͫɤ^cHxϿ(kuUDRӆKE0ܶg@p :h"E}E886[%oQR`b7lץV(Y*zh*VbFƺ,Չg~|2#zz.{(( J['T!mYxa é}>&c FSevҌeύG'F.F`6hEv6#4mY)NjFv In:PpiL ]m$g1si*. 1mJdSlV}t 2klh퓐gdJ\a-Sʈc̹=JVdO<1L6gO-3q9+ǫ65,ip.qHhuxAlߤ b;7R{H Ԃt[$D{6A6E:Ҍg_ܲ_OS|nb>=X_ F" D?[A$ d${TZm;˦{p^Ks~0i3Sfg]o?:naR|Bǂ̂ꏢM%:D߱CM\~V [؁h9LĞnt ̺~pT+1w[.NFЙ@ TCK$@!"@Ty w@)`(Ɠ-5<=cT|+*_,ͧWl5OJ_k9 >0V$/4JjNm3Gԡ].!b.&c*lC1 @Pfم _#=kVp}ߋ3/` ^ۥ+$W~`-.t@is,X.֚Ck_#S*Y֊1: ]왽(kj_lvY6UQP7 t & !@~T p'з O2 c^< ]hV^C3J\H\(/ +r^<8={"oq#3J*SOd̞v4ir^w`Pg|VMy Incǘ8|ʱ@^۶ \0o۹X<&CɣldlEW3.R7-=X ˆ!igϞq߇|^x*\vqs?\5|jw\{%ƋVуYHH PfftΜ 1?yX/PTK.R= %c ̍>YtC{@$#;5jvc8!3z\GqcHǀ'#s82qϯ]xH/KꃗMWwbd8a,XNs/8'09[+>3=",ݭf%>Wj^o{zg^|'05NΜMGilE̷?`=#ѡ||;aN'e`A؝]ڈG J>?6jݹa^*;onL nzqx:U#+m}Qa10qo+{ح%PK~;# #_JmW^> ]brQGUwȷJ{OmS_[AoHH@H5JI3]wa許6!쁊XIߋ`. .L`>`[<} f| n%9- -:֎i?0O/;r+v?5{ʬ̼yL7x{r=8n1T/y6SD3S@_?Ͷ2fks]J~!r-^)mr/`V1Rg~RˏMvZ+O<ڙ_;óq2$^qi|εQgf:RA5'~y} cc?,x1ҹ~_{k].jPu,pw@~ ="= o=,k fU$z de^etʍUɾ'0pUh/YЋXhq6WrMϺI:%i' p}Vp30`1ЇCIއGodp9\NSxG~'إSy =9\9߇1o5lXv̬㳓Wj;+G~m67Ao%[w+c$6PWq @5 twdF߅̙^mH# Y9̂N2wA]s:ᔱ>9~"':=%C]w.Ö3/~%T}#׽b2wŰ7mnXQ.GO%LZs2a]"pQYZ!k??QF:f.=\y'lR*|+ !7vJQ(SMR 5uJ-;^ڗ|^E~6{^^A(Ri^8=/^}wCPUHG~H (@QPK83& w8s ݻmd97݅Cxhd1#YJ=#/!g7b⌗"oN{p:~5ۉؓŅ֚3z]dƩ̀n?\}{jz'z`0F:֒2weY 8r8̸L@"Bu(׵=r \7FϢϘr>=m{qt,Y\w2ܳq}GӺ|G4s040[Ӻ[,ۭ,_+`ZTIwkn$ȫLծY#/,~lDQ3} `_ EXvi`ZbB=r]bTgPg+ͪ *w,}v+ǗIA@"_l=>V*Wf'O}H oV䒉*ƻL;zt*wB5Ϗ :QVr26mڌ7aq]?<;.)^"ت~5+_uվSrjPd&|km]Y TyL{,ǩXu`.}hnͯ8]$  "o)4:g+{)%@K(%KuqHn c͌zm p>1mkk{mYJ>X> @=t?zhzHHH PχwIK-##   pt$@$PFF+n @>HH t yfB(ƝOr%;b#XBIHHHHj׫Ztl <jEn TJ$@$Pn /72#   $@~c;&(*!̈$.b4s6.Lw`WgG}3Syr=2l͸ v_jr_4Qt9 JRՂkt;ъ9_w2:au)b yR->WH$@$@$@$@$@K׍<8!⽀Y1z8:{c ̍>wg1;4zpÉc 8K@3q=d̊'YW}ߋ LN+f'п/^l3^bFzX@b7HEԃ8),3aG<&  6J],HhP~䞇ЏKHڧ z]170yp| ]gRN|/_e#kW2r,Nl J|{"M\ ݐA[_Fo`TVH܃[H9y@QU# @tvꂞ .Z7.:LooH5hCwb ObN`Y|3r/jZ,M6J?1Ma&;qfv/D"ǜj5-IHHHHH twd<~:ᔱF>9~1f"f 1k+ l6ɢ]w~-0NM!6KZd]ХywAuߏ܃W@|L ua^V ,   5"@f1$@$J ߉~#c L#9龧.t,%~Y/ocǐ ttzp]tL` x(ʍcqt6o3vyh'F} rehZKv 1z/BN$@$@$v(_;,H~ Ԃt?rbZ_OU|˕YhxC^ tĽrH ؟'/3 1+W.cӦظqڵOσk\,H` V]HmUQmHIMjՙSrKj5zC$@$@$PvK,$@$PWziEϛGԙO (Ps>jO؁θ=.4 i IDAT @P_14L$"ZPHHH W H @> @ta 9J> J׊4!g gG[}'     )ׯ_?W J룞% 6@$@$@$@$01 @t'     JUHHHBMPW/#JCT HHH*IJҥm t?,58HHHHHHHl$@$@$@$@uC*:J$(oIHHH (Jb: F&P WêB?WIHHHHHH^{/t;VHHHH (c2& 0t?ʘHHHH(ݯT$ZfŀHHHHHHEW|Y=V^{Ɠe\#X{}MƞjTr+SJ$@$@kF5C͂HH`U8*|]YyGnt_}:T e~ W ?*'#  : @~T]$:J^t`'F&se̔,m J릪:߅ L=}M"m#2W&q.*$x{Y3;1[/ >~%XK%rF{Oۖ(Q5'$@$@$(og$@Cy 'c̐O]xH_0s*NG?#;Q<юƒ 1o_I,5Tӛ䴱aewS3^ə@˫\/>IO03:e{%vߙ$@$@$(og$@PSB670zNv|/_ep0<~\BREPnkGf]:Z+fLՃ?ay 'oޓw<}؃^:^      󩿻s }JFm6wGqH%*p3==r+A~~b ,A`L% u0ZJfHHZHP_3%OC\߇럜TfJ01ԅyMSo9qSO`oK>h>vKuCT 12?H{)/f!  (g+  (/̨Si۝@^߅~@.q} @lDof|\}c{r2}9!/B>|C8>w7qedKmt61KF0&I'v"Nd:S@& ixqg@gHq ,֝!v\%lBxq08N \ٗi_ }g?ϞF{.KmI?qR^C@@ (SM~ #;׽'tiU2?tS7-MӯP4O^! P,c>}Mwi͛gK@UՄ#ozᵲRˮt@ uLJ!@iB~eiPn/u :rF*@H9@@lH/ PDRH"^4   0Ja}uMq6  u׷Gn*FN@?:KjB@Ƶzx99H @@@R uF>   u?@ _!  @y_D/@ן@@@TH9 @@`4HM]F u?:KjB@Ƶzx99H @@@R uF>   u?@ _!  @y_D/@ן@@@TH9 @@`4HM]F u?:KjB@Ƶzx99H @@@R uF>   u?@ _!  @y_D/@ן@@@TH9 @@`4HM]F u?:KjB@Ƶzx99H @@`LlCq.pZ M{>ۥ_qԻb7~{b[9@@@F_Қ٣H@ E n@@@(P{ 0@@@JQ@G>!   P~p   @) '@@@  /@@@(ER   @q   (@_B@@@(Pȁ~iϿIL{ٟQ۟QlO띝W9du94mfN̠M^NΝ|Ww[*o;n+zwooRӦηwW"c|Kr ,W׆#OYe4>=a#)Ldl  KSX]ĞT9:`mWl$4oySͭιݩ1mR[-DQxņ2_6o6wμֿS&ҷd.k}(u7113-;4oS]gǽ}sX$}EʘWRW\[n?>;F=jb~u߹Q-vnjE51ߩ'A?ӟ2JY@@ <_bu9'aׯvF8[]PJzkbzF=،J5M ꉫsDTTOfEw?yk{qnUu5>n#V2rlU*G@"(@̾lfI|eRUS)>eSӗw~}Q[K]zwASuոAE_k u{{sz2#}t3uBo㖶,ж[qIo;{mwоkUNzڱes`5fy 2EL<~OOV3sP͌s5ˤ~'H}.tӖ}B]мvPi޾·{Wuk%%7ZK+VS:r\sY~L}Q]w\WtfOrdӺE%m2qU\؇ @ t\)==v3ե.yI3lgeFu&Seީyw}nkoKiw:K=~kIeoQתCΛ1Y_=e<԰CiV=jQ{z^-;hRٻ7+XRsVZ6isۈZIګ;T +}I}c=w` K_uQgǤ{ղm6۽M&ƂN3۲״cB> >u}6AS:¤[m{|]c52ׁ}3znكjߜ9s-d 9mG@@ J`FĔizoAV|+'p9~D\:zԫ;duR?Խ, BI-@@J`Fi\3+8Pe!ՍV}Q,e8;M\ͫ?nd%N=I-b̂k[OZČ[u8fؽ~8i=;1E"L¼VN}O5:kld^Wp[&mk-\,Yg>YbU$؈:smiS*sǜjޟ׌>?*9k -GvfzP5|godD6U@(@ ߿[lnn8zk];xVQ{&;Y\0Yu73lf-jKK=<7Jzoӟ^-Mv`zhռx֬ ϧRAZi8XӼV z6&M}Ř3&x^. d7=S~}zf/͹#kLm3G6gkTVѫjYCYP5X 3FTuadnK5וHUmmErLjzYCi`:5ρOsN0Ypu5j=9Y;qg^֫|f<^ly@(@ũS&: (`/qn0zW}E͏q3' @y9:M#mš pɌK@J u?O@G^6}jf)xbr^   u?e   e/@~!'   @J@?e   e/@_C    (b|=Im]Z3;ޖyk0>d\GǵjwK@ 0`@@@2 /   xl#   Pe>t@@@Wm@@@\B9(s    0ϥ   8 Gɩ    @5   8 Gɩ   PT%!:K@5ޜ-  @9 $S~zUv5 h tae5Κe}y?}Xybsl*Ƕ9ZC@@`F!ԘTb>h3sǤّ4b'[U=ℾG:un"Hpt_ÇjUuzxx쌻c~o:ټTqaD+=vuҪoChCJ8@@ң_UUU_!v=>_e/BBZ4=-X@\pv~ .PQGM8.=.cOj̙={ s~p%L< #Г;Fc׌ ͇QAq[@ťS=xP=z`<}an=z xn;8v+  e'K.ަc1]q*~d0\T#gdkWY}>E[7,Vv@A׿/ wѪO߮\o`냊Cdr0 TyڥI"  2|sUW]^ .\-R< 򌎜 {` [CHzUDszbVoϞ?9Yv1m|ܝk 5x\|tԷ}o>㖱 5@;Y~8/|˧Zy̧w.Q@9M*oJU)I~I=ek3b:u$[  ,仧>Yfիߧn ݦL﷟WowsCV=on,:0E'Oڟ G38s~rg+ui*0mwc7ueMќ'HܛM2Jyu?ui)V7Fq~@Vۖ۸RsJ-gFDi7?NVa>]9d3f Mc=_?!]|]}ɷ߼"%fmک<{^/]ȷ܋VE2eS9$sE- ȏ}wӮEszCz-6lP+/O} pӵgyӄ:{ ! KM嗓]pM_m^ٽV}|+*/P۲ mܹhZ_'G.`_~D" hݯŋ@;rtG jeX=N\1MN"}t]_xUcoWITvͭJC'<ڲoŸ۬mfli&{ù>h؛|9ںVӦM?]l)X_pW/cøC8Ҽ/Uy?]2?X}=7XiݗoyY+ {4{3I U/QU𾔶ǐc YYi3ͱ46ΐ],5:{Xn<"  |8qb:(C t!AݻKs&߃ZYR$KS/3H$TQQa-,a߆޾DOY/.Rk3gt%gAEva+SS6}GfɄ,k&1{6ݎYB !=k18$߶btAW!M΅웳~l28p@\sM|п5 95rVLv:xXy&x̜c'G~&Rd_gf/霤J냁<: :ڷgT)|\1A{Dу}g&~:da'5}k}Dr=[>.3 *?5=,]#i8yŔ9[8[i3Ƀ_:--{+u6@@[ *$Ҁ.W4cڋCouBN'NА,}nΟ?Sjʔ)2A=zOl6҄ gȬ6db+8(.p }j:?uc9vu mzLMG:\-V4z'Eܐ L5 fSeUj܃x<0ifܦ~0 };fV{P/?oLϷ|DBca~GQ@@ҫ_lu΄O /Iz7}EԾgdMJ M~#oV\#R ԩ~Ph_jooq6+{o?=i>eͿy|uSu 21R@  i/077K+ȷK׌=%љC;"Q@L~3#@l2s4(#  @ZjyΈR]`Yxo{ ![Homebrew](../images/package_managers/homebrew.svg){: style="height:1em"} [**Homebrew**](#homebrew) `nlohmann-json`   ![Meson](../images/package_managers/meson.svg){: style="height:1em"} [**Meson**](#meson) `nlohmann_json`   ![Bazel](../images/package_managers/bazel.svg){: style="height:1em"} [**Bazel**](#bazel) `nlohmann_json`
![Conan](../images/package_managers/conan.svg){: style="height:1em"} [**Conan**](#conan) `nlohmann_json`   ![Spack](../images/package_managers/spack.svg){: style="height:1em"} [**Spack**](#spack) `nlohmann-json`   [**Hunter**](#hunter) `nlohmann_json`
![vcpkg](../images/package_managers/vcpkg.png){: style="height:1em"} [**vcpkg**](#vcpkg) `nlohmann-json`   [**cget**](#cget) `nlohmann/json`   ![Swift Package Manager](../images/package_managers/swift.svg){: style="height:1em"} [**Swift Package Manager**](#swift-package-manager) `nlohmann/json`
![Nuget](../images/package_managers/nuget.svg){: style="height:1em"} [**NuGet**](#nuget) `nlohmann.json`   ![Conda](../images/package_managers/conda.svg){: style="height:1em"} [**Conda**](#conda) `nlohmann_json`   ![MacPorts](../images/package_managers/macports.svg){: style="height:1em"} [**MacPorts**](#macports) `nlohmann-json`
![cpm.cmake](../images/package_managers/CPM.png){: style="height:1em"} [**CPM.cmake**](#cpmcmake) `gh:nlohmann/json` ![xmake](../images/package_managers/xmake.svg){: style="height:1em"} [**xmake**](#xmake) `nlohmann_json` ## Running example Throughout this page, we will describe how to compile the example file `example.cpp` below. ```cpp --8<-- "integration/example.cpp" ``` When executed, this program should create output similar to ```json --8<-- "examples/meta.output" ``` ## Homebrew !!! abstract "Summary" formula: [**`nlohmann-json`**](https://formulae.brew.sh/formula/nlohmann-json) - [![Homebrew package](https://repology.org/badge/version-for-repo/homebrew/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) - :octicons-tag-24: Availalbe versions: current version and development version (with `--HEAD` parameter) - :octicons-rocket-24: The formula is updated with every release. - :octicons-person-24: Maintainer: Niels Lohmann - :octicons-file-24: File issues at the [Homebrew issue tracker](https://github.com/Homebrew/homebrew-core/issues) - :octicons-question-24: [Homebrew website](https://brew.sh) If you are using [Homebrew](http://brew.sh), you can install the library with ```sh brew install nlohmann-json ``` The header can be used directly in your code or via CMake. ??? example "Example: Raw compilation" 1. Create the following file: ```cpp title="example.cpp" --8<-- "integration/homebrew/example.cpp" ``` 2. Install the package: ```sh brew install nlohmann-json ``` 3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found: ```sh c++ example.cpp -I$(brew --prefix nlohmann-json)/include -std=c++11 -o example ``` ??? example "Example: CMake" 1. Create the following files: ```cpp title="example.cpp" --8<-- "integration/homebrew/example.cpp" ``` ```cmake title="CMakeLists.txt" --8<-- "integration/homebrew/CMakeLists.txt" ``` 2. Install the package: ```sh brew install nlohmann-json ``` 3. Compile the code and pass the Homebrew prefix to CMake to find installed packages via `#!cmake find_package`: ```sh CMAKE_PREFIX_PATH=$(brew --prefix) cmake -S . -B build cmake --build build ``` ## Meson !!! abstract "Summary" wrap: **`nlohmann_json`** - :octicons-tag-24: Availalbe versions: current version and select older versions (see [WrapDB](https://mesonbuild.com/Wrapdb-projects.html)) - :octicons-rocket-24: The package is update automatically from file [`meson.build`](https://github.com/nlohmann/json/blob/develop/meson.build). - :octicons-file-24: File issues at the [library issue tracker](https://github.com/nlohmann/json/issues) - :octicons-question-24: [Meson website](https://mesonbuild.com/index.html) If you are using the [Meson Build System](http://mesonbuild.com), add this source tree as a [meson subproject](https://mesonbuild.com/Subprojects.html#using-a-subproject). You may also use the `include.zip` published in this project's [Releases](https://github.com/nlohmann/json/releases) to reduce the size of the vendored source tree. Alternatively, you can get a wrap file by downloading it from [Meson WrapDB](https://mesonbuild.com/Wrapdb-projects.html), or use ```shell meson wrap install nlohmann_json ``` Please see the Meson project for any issues regarding the packaging. The provided `meson.build` can also be used as an alternative to CMake for installing `nlohmann_json` system-wide in which case a pkg-config file is installed. To use it, have your build system require the `nlohmann_json` pkg-config dependency. In Meson, it is preferred to use the [`dependency()`](https://mesonbuild.com/Reference-manual.html#dependency) object with a subproject fallback, rather than using the subproject directly. ??? example "Example: Wrap" 1. Create the following files: ```ini title="meson.build" --8<-- "integration/meson/meson.build" ``` ```cpp title="example.cpp" --8<-- "integration/meson/example.cpp" ``` 2. Use the Meson WrapDB to fetch the nlohmann/json wrap: ```shell mkdir subprojects meson wrap install nlohmann_json ``` 3. Build: ```shell meson setup build meson compile -C build ``` ## Bazel !!! abstract "Summary" use `bazel_dep`, `git_override`, or `local_path_override` - :octicons-tag-24: Any version, that is available via [Bazel Central Registry](https://registry.bazel.build/modules/nlohmann_json) - :octicons-file-24: File issues at the [library issue tracker](https://github.com/nlohmann/json/issues) - :octicons-question-24: [Bazel website](https://bazel.build) This repository provides a [Bazel](https://bazel.build/) `MODULE.bazel` and a corresponding `BUILD.bazel` file. Therefore, this repository can be referenced within a `MODULE.bazel` by rules such as `archive_override`, `git_override`, or `local_path_override`. To use the library, you need to depend on the target `@nlohmann_json//:json` (i.e., via `deps` attribute). ??? example 1. Create the following files: ```ini title="BUILD" --8<-- "integration/bazel/BUILD" ``` ```ini title="WORKSPACE" --8<-- "integration/bazel/MODULE.bazel" ``` ```cpp title="example.cpp" --8<-- "integration/bazel/example.cpp" ``` 2. Build and run: ```shell bazel build //:main bazel run //:main ``` ## Conan !!! abstract "Summary" recipe: [**`nlohmann_json`**](https://conan.io/center/recipes/nlohmann_json) - [![ConanCenter package](https://repology.org/badge/version-for-repo/conancenter/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) - :octicons-tag-24: Availalbe versions: current version and older versions (see [Conan Center](https://conan.io/center/recipes/nlohmann_json)) - :octicons-rocket-24: The package is update automatically via [this recipe](https://github.com/conan-io/conan-center-index/tree/master/recipes/nlohmann_json). - :octicons-file-24: File issues at the [Conan Center issue tracker](https://github.com/conan-io/conan-center-index/issues) - :octicons-question-24: [Conan website](https://conan.io) If you are using [Conan](https://www.conan.io/) to manage your dependencies, merely add `nlohmann_json/x.y.z` to your `conanfile`'s requires, where `x.y.z` is the release version you want to use. ??? example 1. Create the following files: ```ini title="Conanfile.txt" --8<-- "integration/conan/Conanfile.txt" ``` ```cmake title="CMakeLists.txt" --8<-- "integration/conan/CMakeLists.txt" ``` ```cpp title="example.cpp" --8<-- "integration/conan/example.cpp" ``` 2. Call Conan: ```sh conan install . --output-folder=build --build=missing ``` 3. Build: ```sh cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release cmake --build build ``` ## Spack !!! abstract "Summary" package: [**`nlohmann-json`**](https://packages.spack.io/package.html?name=nlohmann-json) - [![Spack package](https://repology.org/badge/version-for-repo/spack/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) - :octicons-tag-24: Availalbe versions: current version and older versions (see [Spack package](https://packages.spack.io/package.html?name=nlohmann-json)) - :octicons-rocket-24: The package is updated with every release. - :octicons-person-24: Maintainer: [Axel Huebl](https://github.com/ax3l) - :octicons-file-24: File issues at the [Spack issue tracker](https://github.com/spack/spack/issues) - :octicons-question-24: [Spack website](https://spack.io) If you are using [Spack](https://www.spack.io/) to manage your dependencies, you can use the [`nlohmann-json` package](https://packages.spack.io/package.html?name=nlohmann-json) via ```shell spack install nlohmann-json ``` Please see the [Spack project](https://github.com/spack/spack) for any issues regarding the packaging. ??? example 1. Create the following files: ```cmake title="CMakeLists.txt" --8<-- "integration/spack/CMakeLists.txt" ``` ```cpp title="example.cpp" --8<-- "integration/spack/example.cpp" ``` 2. Install the library: ```sh spack install nlohmann-json ``` 3. Load the environment for your Spack-installed packages: ```sh spack load nlohmann-json ``` 4. Build the project with CMake: ```sh cmake -S . -B build -DCMAKE_PREFIX_PATH=$(spack location -i nlohmann-json) cmake --build build ``` ## Hunter !!! abstract "Summary" package: [**`nlohmann_json`**](https://hunter.readthedocs.io/en/latest/packages/pkg/nlohmann_json.html) - :octicons-tag-24: Availalbe versions: current version and older versions (see [Hunter package](https://hunter.readthedocs.io/en/latest/packages/pkg/nlohmann_json.html)) - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [Hunter issue tracker](https://github.com/cpp-pm/hunter/issues) - :octicons-question-24: [Hunter website](https://hunter.readthedocs.io/en/latest/) If you are using [Hunter](https://github.com/cpp-pm/hunter) on your project for external dependencies, then you can use the [nlohmann_json package](https://hunter.readthedocs.io/en/latest/packages/pkg/nlohmann_json.html) via ```cmake hunter_add_package(nlohmann_json) ``` Please see the Hunter project for any issues regarding the packaging. ??? example 1. Create the following files: ```cmake title="CMakeLists.txt" --8<-- "integration/hunter/CMakeLists.txt" ``` ```cpp title="example.cpp" --8<-- "integration/hunter/example.cpp" ``` 2. Download required files ```shell mkdir cmake wget https://raw.githubusercontent.com/cpp-pm/gate/master/cmake/HunterGate.cmake -O cmake/HunterGate.cmake ``` 3. Build the project with CMake: ```shell cmake -S . -B build cmake --build build ``` ## vcpkg !!! abstract "Summary" package: [**`nlohmann-json`**](https://github.com/Microsoft/vcpkg/tree/master/ports/nlohmann-json) - [![Vcpkg package](https://repology.org/badge/version-for-repo/vcpkg/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) - :octicons-tag-24: Availalbe versions: current version - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [vcpkg issue tracker](https://github.com/microsoft/vcpkg/issues) - :octicons-question-24: [vcpkg website](https://vcpkg.io/) If you are using [vcpkg](https://github.com/Microsoft/vcpkg/) on your project for external dependencies, then you can install the [nlohmann-json package](https://github.com/Microsoft/vcpkg/tree/master/ports/nlohmann-json) with ```shell vcpkg install nlohmann-json ``` and follow the then displayed descriptions. Please see the vcpkg project for any issues regarding the packaging. ??? example 1. Create the following files: ```cmake title="CMakeLists.txt" --8<-- "integration/vcpkg/CMakeLists.txt" ``` ```cpp title="example.cpp" --8<-- "integration/vcpkg/example.cpp" ``` 2. Install package: ```sh vcpkg install nlohmann-json ``` 3. Build: ```sh cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake cmake --build build ``` ## cget !!! abstract "Summary" package: [**`nlohmann/json`**](https://github.com/pfultz2/cget-recipes/blob/master/recipes/nlohmann/json/package.txt) - :octicons-tag-24: Availalbe versions: current version and older versions - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [cget issue tracker](https://github.com/pfultz2/cget-recipes/issues) - :octicons-question-24: [cget website](https://cget.readthedocs.io/) If you are using [cget](http://cget.readthedocs.io/en/latest/), you can install the latest `master` version with ```shell cget install nlohmann/json ``` A specific version can be installed with `cget install nlohmann/json@v3.12.0`. Also, the multiple header version can be installed by adding the `-DJSON_MultipleHeaders=ON` flag (i.e., `cget install nlohmann/json -DJSON_MultipleHeaders=ON`). ??? example 1. Create the following files: ```cmake title="CMakeLists.txt" --8<-- "integration/vcpkg/CMakeLists.txt" ``` ```cpp title="example.cpp" --8<-- "integration/vcpkg/example.cpp" ``` 2. Initialize cget ```shell cget init ``` 3. Install the library ```shell cget install nlohmann/json ``` 4. Build ```shell cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=cget/cget/cget.cmake cmake --build build ``` ## Swift Package Manager !!! abstract "Summary" package: **`nlohmann/json`** - :octicons-tag-24: Availalbe versions: current version and older versions - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [library issue tracker](https://github.com/nlohmann/json/issues) - :octicons-question-24: [Xcode documentation](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app) ## NuGet !!! abstract "Summary" package: [**`nlohmann.json`**](https://www.nuget.org/packages/nlohmann.json/) - :octicons-tag-24: Availalbe versions: current and previous versions - :octicons-rocket-24: The package is updated with every release. - :octicons-person-24: Maintainer: [Hani Kaabi](https://github.com/hnkb) - :octicons-file-24: File issues at the [maintainer's issue tracker](https://github.com/hnkb/nlohmann-json-nuget/issues) - :octicons-question-24: [NuGet website](https://www.nuget.org) If you are using [NuGet](https://www.nuget.org), you can use the package [nlohmann.json](https://www.nuget.org/packages/nlohmann.json/) with ```shell dotnet add package nlohmann.json ``` ??? example Probably the easiest way to use NuGet packages is through Visual Studio graphical interface. Just right-click on a project (any C++ project would do) in “Solution Explorer” and select “Manage NuGet Packages…” ![](nuget/nuget-search-package.png) Now you can click on “Browse” tab and find the package you like to install. ![](nuget/nuget-select-package.png) Most of the packages in NuGet gallery are .NET packages and would not be useful in a C++ project. Microsoft recommends adding “native” and “nativepackage” tags to C++ NuGet packages to distinguish them, but even adding “native” to search query would still show many .NET-only packages in the list. Nevertheless, after finding the package you want, click on “Install” button and accept confirmation dialogs. After the package is successfully added to the projects, you should be able to build and execute the project without the need for making any more changes to build settings. !!! note A few notes: - NuGet packages are installed per project and not system-wide. The header and binaries for the package are only available to the project it is added to, and not other projects (obviously unless we add the package to those projects as well) - One of the many great things about your elegant work is that it is a header-only library, which makes deployment very straightforward. In case of libraries which need binary deployment (`.lib`, `.dll` and `.pdb` for debug info) the different binaries for each supported compiler version must be added to the NuGet package. Some library creators cram binary versions for all supported Visual C++ compiler versions in the same package, so a single package will support all compilers. Some others create a different package for each compiler version (and you usually see things like “v140” or “vc141” in package name to clarify which VC++ compiler this package supports). - Packages can have dependency to other packages, and in this case, NuGet will install all dependencies as well as the requested package recursively. **What happens behind the scenes** After you add a NuGet package, three changes occur in the project source directory. Of course, we could make these changes manually instead of using GUI: ![](nuget/nuget-project-changes.png) 1. A `packages.config` file will be created (or updated to include the package name if one such file already exists). This file contains a list of the packages required by this project (name and minimum version) and must be added to the project source code repository, so if you move the source code to a new machine, MSBuild/NuGet knows which packages it has to restore (which it does automatically before each build). ```xml ``` 2. A `packages` folder which contains actual files in the packages (these are header and binary files required for a successful build, plus a few metadata files). In case of this library for example, it contains `json.hpp`: ![](nuget/nuget-package-content.png) !!! note This directory should not be added to the project source code repository, as it will be restored before each build by MSBuild/NuGet. If you go ahead and delete this folder, then build the project again, it will magically re-appear! 3. Project MSBuild makefile (which for Visual C++ projects has a .vcxproj extension) will be updated to include settings from the package. ![](nuget/nuget-project-makefile.png) The important bit for us here is line 170, which tells MSBuild to import settings from `packages\nlohmann.json.3.5.0\build\native\nlohmann.json.targets` file. This is a file the package creator created and added to the package (you can see it is one of the two files I created in this repository, the other just contains package attributes like name and version number). What does it contain? For our header-only repository, the only setting we need is to add our include directory to the list of `AdditionalIncludeDirectories`: ```xml $(MSBuildThisFileDirectory)include;%(AdditionalIncludeDirectories) ``` For libraries with binary files, we will need to add `.lib` files to linker inputs and add settings to copy `.dll` and other redistributable files to output directory, if needed. There are other changes to the makefile as well: - Lines 165-167 add the `packages.config` as one of project files (so it is shown in Solution Explorer tree view). It is added as None (no build action) and removing it wouldn’t affect build. - Lines 172-177 check to ensure the required packages are present. This will display a build error if package directory is empty (for example when NuGet cannot restore packages because Internet connection is down). Again, if you omit this section, the only change in build would be a more cryptic error message if build fails. !!! note Changes to .vcxproj makefile should also be added to project source code repository. As you can see, the mechanism NuGet uses to modify project settings is through MSBuild makefiles, so using NuGet with other build systems and compilers (like CMake) as a dependency manager is either impossible or more problematic than useful. Please refer to [this extensive description](https://github.com/nlohmann/json/issues/1132#issuecomment-452250255) for more information. ## Conda !!! abstract "Summary" package: [**`nlohmann_json`**](https://anaconda.org/conda-forge/nlohmann_json) - ![](https://img.shields.io/conda/v/conda-forge/nlohmann_json) - :octicons-tag-24: Availalbe versions: current and previous versions - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [feedstock's issue tracker](https://github.com/conda-forge/nlohmann_json-feedstock/issues) - :octicons-question-24: [Conda documentation](https://docs.conda.io/projects/conda/en/stable/user-guide/getting-started.html) If you are using [conda](https://conda.io/), you can use the package [nlohmann_json](https://anaconda.org/conda-forge/nlohmann_json) from [conda-forge](https://conda-forge.org) executing ```shell conda install -c conda-forge nlohmann_json ``` ??? example 1. Create the following file: ```cpp title="example.cpp" --8<-- "integration/conda/example.cpp" ``` 2. Create and activate an anvironment "json`: ```shell conda create -n json conda activate json ``` 3. Install the package: ```shell conda install -c conda-forge nlohmann_json ``` 4. Build the code: ```shell g++ -std=c++11 -I$(conda info --base)/envs/json/include example.cpp -o example ``` ## MSYS2 If you are using [MSYS2](http://www.msys2.org/), you can use the [mingw-w64-nlohmann-json](https://packages.msys2.org/base/mingw-w64-nlohmann-json) package, type `pacman -S mingw-w64-i686-nlohmann-json` or `pacman -S mingw-w64-x86_64-nlohmann-json` for installation. Please file issues [here](https://github.com/msys2/MINGW-packages/issues/new?title=%5Bnlohmann-json%5D) if you experience problems with the packages. [![MSYS2 clang64 package](https://repology.org/badge/version-for-repo/msys2_clang64/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) [![MSYS2 clangarm64 package](https://repology.org/badge/version-for-repo/msys2_clangarm64/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) [![MSYS2 mingw package](https://repology.org/badge/version-for-repo/msys2_mingw/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) [![MSYS2 ucrt64 package](https://repology.org/badge/version-for-repo/msys2_ucrt64/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) :material-update: The [package](https://packages.msys2.org/base/mingw-w64-nlohmann-json) is updated automatically. ## MacPorts !!! abstract "Summary" port: [**`nlohmann-json`**](https://ports.macports.org/port/nlohmann-json/) - [![MacPorts package](https://repology.org/badge/version-for-repo/macports/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) - :octicons-tag-24: Availalbe versions: current version - :octicons-rocket-24: The port is updated with every release. - :octicons-file-24: File issues at the [MacPorts issue tracker](https://trac.macports.org/newticket?port=nlohmann-json) - :octicons-question-24: [MacPorts website](https://www.macports.org) If you are using [MacPorts](https://ports.macports.org), execute ```shell sudo port install nlohmann-json ``` to install the [nlohmann-json](https://ports.macports.org/port/nlohmann-json/) package. ??? example "Example: Raw compilation" 1. Create the following file: ```cpp title="example.cpp" --8<-- "integration/macports/example.cpp" ``` 2. Install the package: ```sh sudo port install nlohmann-json ``` 3. Compile the code and pass the Homebrew prefix to the include path such that the library can be found: ```sh c++ example.cpp -I/opt/local/include -std=c++11 -o example ``` ??? example "Example: CMake" 1. Create the following files: ```cpp title="example.cpp" --8<-- "integration/homebrew/example.cpp" ``` ```cmake title="CMakeLists.txt" --8<-- "integration/homebrew/CMakeLists.txt" ``` 2. Install the package: ```sh sudo port install nlohmann-json ``` 3. Compile the code: ```sh cmake -S . -B build cmake --build build ``` ## build2 If you are using [`build2`](https://build2.org), you can use the [`nlohmann-json`](https://cppget.org/nlohmann-json) package from the public repository or directly from the [package's sources repository](https://github.com/build2-packaging/nlohmann-json). In your project's `manifest` file, add `depends: nlohmann-json` (probably with some [version constraints](https://build2.org/build2-toolchain/doc/build2-toolchain-intro.xhtml#guide-add-remove-deps)). If you are not familiar with using dependencies in `build2`, [please read this introduction](https://build2.org/build2-toolchain/doc/build2-toolchain-intro.xhtml). Please file issues [here](https://github.com/build2-packaging/nlohmann-json) if you experience problems with the packages. :material-update: The [package](https://cppget.org/nlohmann-json) is updated automatically. ```shell bdep new -t exe -l c++ ``` ## CPM.cmake !!! abstract "Summary" package: **`gh:nlohmann/json`** - :octicons-tag-24: Availalbe versions: current and previous versions - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [CPM.cmake issue tracker](https://github.com/cpm-cmake/CPM.cmake/issues) - :octicons-question-24: [CPM.cmake website](https://github.com/cpm-cmake/CPM.cmake) If you are using [`CPM.cmake`](https://github.com/TheLartians/CPM.cmake), add the [CPM.cmake script](https://github.com/TheLartians/CPM.cmake#adding-cpm) and the following snippet to your CMake project: ```cmake CPMAddPackage("gh:nlohmann/json@3.12.0") ``` ??? example 1. Create the following files: ```cpp title="example.cpp" --8<-- "integration/cpm/example.cpp" ``` ```cmake title="CMakeLists.txt" --8<-- "integration/cpm/CMakeLists.txt" ``` 2. Download CPM.cmake ```shell mkdir -p cmake wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake ``` 3. Build ```shell cmake -S . -B build cmake --build build ``` ## xmake !!! abstract "Summary" package: [**`nlohmann_json`**](https://github.com/xmake-io/xmake-repo/blob/master/packages/n/nlohmann_json/xmake.lua) - :octicons-tag-24: Availalbe versions: current and previous versions - :octicons-rocket-24: The package is updated with every release. - :octicons-file-24: File issues at the [xmake issue tracker](https://github.com/xmake-io/xmake-repo/issues) - :octicons-question-24: [xmake website](https://xmake.io/#/) ??? example 1. Create the following files: ```cpp title="example.cpp" --8<-- "integration/xmake/example.cpp" ``` ```lua title="xmake.lua" --8<-- "integration/xmake/xmake.lua" ``` 2. Build ```shell xmake ``` 3. Run ```shell xmake run ``` * * * ## Other package managers The library is also contained in many other package repositories: [![Packaging status](https://repology.org/badge/tiny-repos/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) ??? example "Package version overview" [![Packaging status](https://repology.org/badge/vertical-allrepos/nlohmann-json.svg)](https://repology.org/project/nlohmann-json/versions) * * * ## Buckaroo If you are using [Buckaroo](https://buckaroo.pm), you can install this library's module with `buckaroo add github.com/buckaroo-pm/nlohmann-json`. There is a demo repo [here](https://github.com/njlr/buckaroo-nholmann-json-example). !!! warning The module is outdated as the respective [repository](https://github.com/buckaroo-pm/nlohmann-json) has not been updated in years. ## CocoaPods If you are using [CocoaPods](https://cocoapods.org), you can use the library by adding pod `"nlohmann_json", '~>3.1.2'` to your podfile (see [an example](https://bitbucket.org/benman/nlohmann_json-cocoapod/src/master/)). Please file issues [here](https://bitbucket.org/benman/nlohmann_json-cocoapod/issues?status=new&status=open). ![](https://img.shields.io/cocoapods/v/nlohmann_json) !!! warning The module is outdated as the respective [pod](https://cocoapods.org/pods/nlohmann_json) has not been updated in years. json-3.12.0/docs/mkdocs/docs/integration/pkg-config.md000066400000000000000000000006251477615276400226250ustar00rootroot00000000000000# Pkg-config If you are using bare Makefiles, you can use `pkg-config` to generate the include flags that point to where the library is installed: ```sh pkg-config nlohmann_json --cflags ``` Users of the [Meson build system](package_managers.md#meson) will also be able to use a system-wide library, which will be found by `pkg-config`: ```meson json = dependency('nlohmann_json', required: true) ``` json-3.12.0/docs/mkdocs/docs/integration/spack/000077500000000000000000000000001477615276400213555ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/spack/CMakeLists.txt000066400000000000000000000003241477615276400241140ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/spack/example.cpp000066400000000000000000000002561477615276400235170ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/vcpkg/000077500000000000000000000000001477615276400213665ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/vcpkg/CMakeLists.txt000066400000000000000000000003331477615276400241250ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.15) project(json_example) find_package(nlohmann_json CONFIG REQUIRED) add_executable(json_example example.cpp) target_link_libraries(json_example PRIVATE nlohmann_json::nlohmann_json) json-3.12.0/docs/mkdocs/docs/integration/vcpkg/example.cpp000066400000000000000000000002561477615276400235300ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/xmake/000077500000000000000000000000001477615276400213615ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/docs/integration/xmake/example.cpp000066400000000000000000000002561477615276400235230ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; int main() { std::cout << std::setw(4) << json::meta() << std::endl; } json-3.12.0/docs/mkdocs/docs/integration/xmake/xmake.lua000066400000000000000000000003051477615276400231670ustar00rootroot00000000000000add_requires("nlohmann_json") add_rules("mode.debug", "mode.release") target("xm") set_kind("binary") add_files("example.cpp") add_packages("nlohmann_json") set_languages("cxx11") json-3.12.0/docs/mkdocs/includes/000077500000000000000000000000001477615276400166075ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/includes/glossary.md000066400000000000000000000024271477615276400210010ustar00rootroot00000000000000 *[ADL]: Argument-dependent lookup *[API]: Application Programming Interfaces *[ASCII]: American Standard Code for Information Interchange *[BDFL]: Benevolent Dictator for Life *[BJData]: Binary JData *[BSON]: Binary JSON *[CBOR]: Concise Binary Object Representation *[CC0]: Creative Commons Zero *[CI]: Continuous Integration *[DOM]: Document Object Model *[EOF]: End of File *[FAQ]: Frequently Asked Questions *[GCC]: GNU Compiler Collection *[HTTP]: Hypertext Transfer Protocol *[ICC]: Intel C++ Compiler *[IEEE]: Institute of Electrical and Electronics Engineers *[ISO]: International Organization for Standardization *[JSON]: JavaScript Object Notation *[MIT]: Massachusetts Institute of Technology *[MSVC]: Microsoft Visual C++ *[MsgPack]: MessagePack *[NASA]: National Aeronautics and Space Administration *[NDK]: Native Development Kit *[NaN]: Not a Number *[RFC]: Request for Comments *[RTTI]: Runtime Type Information *[SAX]: Simple API for XML *[SDK]: Software Development Kit *[SFINAE]: Substitution failure is not an error *[SHA]: Secure Hash Algorithm *[SPDX]: Software Package Data Exchange *[STL]: Standard Template Library *[UBJSON]: Universal Binary JSON *[UTF]: Unicode Transformation Format json-3.12.0/docs/mkdocs/mkdocs.yml000066400000000000000000000413221477615276400170060ustar00rootroot00000000000000# Project information site_name: JSON for Modern C++ site_author: Niels Lohmann site_url: https://json.nlohmann.me/ # Repository repo_name: nlohmann/json repo_url: https://github.com/nlohmann/json edit_uri: edit/develop/docs/mkdocs/docs # Copyright copyright: Copyright © 2013-2025 Niels Lohmann # Configuration theme: name: material language: en palette: - media: '(prefers-color-scheme: light)' scheme: default primary: indigo accent: indigo toggle: icon: material/brightness-7 name: Switch to dark mode - media: '(prefers-color-scheme: dark)' scheme: slate primary: indigo accent: indigo toggle: icon: material/brightness-4 name: Switch to light mode icon: repo: fontawesome/brands/github font: text: Roboto code: JetBrains Mono features: - navigation.instant - navigation.tracking - navigation.tabs - navigation.indexes - navigation.top - content.tabs.link - content.action.edit - content.action.view nav: - Home: - index.md - home/license.md - "FAQ": home/faq.md - home/exceptions.md - home/releases.md - home/design_goals.md - home/architecture.md - home/customers.md - home/sponsors.md - Features: - features/arbitrary_types.md - Binary Formats: - features/binary_formats/index.md - features/binary_formats/bjdata.md - features/binary_formats/bson.md - features/binary_formats/cbor.md - features/binary_formats/messagepack.md - features/binary_formats/ubjson.md - features/binary_values.md - features/comments.md - Element Access: - features/element_access/index.md - features/element_access/unchecked_access.md - features/element_access/checked_access.md - features/element_access/default_value.md - features/iterators.md - features/json_pointer.md - features/json_patch.md - features/merge_patch.md - 'nlohmann Namespace': features/namespace.md - features/object_order.md - Parsing: - features/parsing/index.md - features/parsing/json_lines.md - features/parsing/parse_exceptions.md - features/parsing/parser_callbacks.md - features/parsing/sax_interface.md - features/assertions.md - features/enum_conversion.md - features/macros.md - Types: - features/types/index.md - features/types/number_handling.md - Integration: - integration/index.md - integration/migration_guide.md - integration/cmake.md - integration/package_managers.md - integration/pkg-config.md - API Documentation: - basic_json: - 'Overview': api/basic_json/index.md - '(Constructor)': api/basic_json/basic_json.md - '(Destructor)': api/basic_json/~basic_json.md - 'accept': api/basic_json/accept.md - 'array': api/basic_json/array.md - 'array_t': api/basic_json/array_t.md - 'at': api/basic_json/at.md - 'back': api/basic_json/back.md - 'begin': api/basic_json/begin.md - 'binary': api/basic_json/binary.md - 'binary_t': api/basic_json/binary_t.md - 'boolean_t': api/basic_json/boolean_t.md - 'cbegin': api/basic_json/cbegin.md - 'cbor_tag_handler_t': api/basic_json/cbor_tag_handler_t.md - 'cend': api/basic_json/cend.md - 'clear': api/basic_json/clear.md - 'contains': api/basic_json/contains.md - 'count': api/basic_json/count.md - 'crbegin': api/basic_json/crbegin.md - 'crend': api/basic_json/crend.md - 'default_object_comparator_t': api/basic_json/default_object_comparator_t.md - 'diff': api/basic_json/diff.md - 'dump': api/basic_json/dump.md - 'emplace': api/basic_json/emplace.md - 'emplace_back': api/basic_json/emplace_back.md - 'empty': api/basic_json/empty.md - 'end': api/basic_json/end.md - 'end_pos': api/basic_json/end_pos.md - 'erase': api/basic_json/erase.md - 'error_handler_t': api/basic_json/error_handler_t.md - 'exception': api/basic_json/exception.md - 'find': api/basic_json/find.md - 'flatten': api/basic_json/flatten.md - 'from_bjdata': api/basic_json/from_bjdata.md - 'from_bson': api/basic_json/from_bson.md - 'from_cbor': api/basic_json/from_cbor.md - 'from_msgpack': api/basic_json/from_msgpack.md - 'from_ubjson': api/basic_json/from_ubjson.md - 'front': api/basic_json/front.md - 'get': api/basic_json/get.md - 'get_allocator': api/basic_json/get_allocator.md - 'get_binary': api/basic_json/get_binary.md - 'get_ptr': api/basic_json/get_ptr.md - 'get_ref': api/basic_json/get_ref.md - 'get_to': api/basic_json/get_to.md - 'std::hash<basic_json>': api/basic_json/std_hash.md - 'input_format_t': api/basic_json/input_format_t.md - 'insert': api/basic_json/insert.md - 'invalid_iterator': api/basic_json/invalid_iterator.md - 'is_array': api/basic_json/is_array.md - 'is_binary': api/basic_json/is_binary.md - 'is_boolean': api/basic_json/is_boolean.md - 'is_discarded': api/basic_json/is_discarded.md - 'is_null': api/basic_json/is_null.md - 'is_number': api/basic_json/is_number.md - 'is_number_float': api/basic_json/is_number_float.md - 'is_number_integer': api/basic_json/is_number_integer.md - 'is_number_unsigned': api/basic_json/is_number_unsigned.md - 'is_object': api/basic_json/is_object.md - 'is_primitive': api/basic_json/is_primitive.md - 'is_string': api/basic_json/is_string.md - 'is_structured': api/basic_json/is_structured.md - 'items': api/basic_json/items.md - 'json_base_class_t': api/basic_json/json_base_class_t.md - 'json_serializer': api/basic_json/json_serializer.md - 'max_size': api/basic_json/max_size.md - 'meta': api/basic_json/meta.md - 'merge_patch': api/basic_json/merge_patch.md - 'number_float_t': api/basic_json/number_float_t.md - 'number_integer_t': api/basic_json/number_integer_t.md - 'number_unsigned_t': api/basic_json/number_unsigned_t.md - 'object': api/basic_json/object.md - 'object_comparator_t': api/basic_json/object_comparator_t.md - 'object_t': api/basic_json/object_t.md - 'operator ValueType': api/basic_json/operator_ValueType.md - 'operator value_t': api/basic_json/operator_value_t.md - 'operator[]': api/basic_json/operator[].md - 'operator=': api/basic_json/operator=.md - 'operator+=': api/basic_json/operator+=.md - 'operator==': api/basic_json/operator_eq.md - 'operator!=': api/basic_json/operator_ne.md - 'operator<': api/basic_json/operator_lt.md - 'operator>': api/basic_json/operator_gt.md - 'operator<=': api/basic_json/operator_le.md - 'operator>=': api/basic_json/operator_ge.md - 'operator<=>': api/basic_json/operator_spaceship.md - 'out_of_range': api/basic_json/out_of_range.md - 'other_error': api/basic_json/other_error.md - 'parse': api/basic_json/parse.md - 'parse_error': api/basic_json/parse_error.md - 'parse_event_t': api/basic_json/parse_event_t.md - 'parser_callback_t': api/basic_json/parser_callback_t.md - 'patch': api/basic_json/patch.md - 'patch_inplace': api/basic_json/patch_inplace.md - 'push_back': api/basic_json/push_back.md - 'rbegin': api/basic_json/rbegin.md - 'rend': api/basic_json/rend.md - 'sax_parse': api/basic_json/sax_parse.md - 'size': api/basic_json/size.md - 'start_pos': api/basic_json/start_pos.md - 'string_t': api/basic_json/string_t.md - 'swap': api/basic_json/swap.md - 'std::swap<basic_json>': api/basic_json/std_swap.md - 'to_bjdata': api/basic_json/to_bjdata.md - 'to_bson': api/basic_json/to_bson.md - 'to_cbor': api/basic_json/to_cbor.md - 'to_msgpack': api/basic_json/to_msgpack.md - 'to_string': api/basic_json/to_string.md - 'to_ubjson': api/basic_json/to_ubjson.md - 'type': api/basic_json/type.md - 'type_error': api/basic_json/type_error.md - 'type_name': api/basic_json/type_name.md - 'unflatten': api/basic_json/unflatten.md - 'update': api/basic_json/update.md - 'value': api/basic_json/value.md - 'value_t': api/basic_json/value_t.md - byte_container_with_subtype: - 'Overview': api/byte_container_with_subtype/index.md - '(constructor)': api/byte_container_with_subtype/byte_container_with_subtype.md - 'clear_subtype': api/byte_container_with_subtype/clear_subtype.md - 'has_subtype': api/byte_container_with_subtype/has_subtype.md - 'set_subtype': api/byte_container_with_subtype/set_subtype.md - 'subtype': api/byte_container_with_subtype/subtype.md - adl_serializer: - 'Overview': api/adl_serializer/index.md - 'from_json': api/adl_serializer/from_json.md - 'to_json': api/adl_serializer/to_json.md - 'json': api/json.md - json_pointer: - 'Overview': api/json_pointer/index.md - '(Constructor)': api/json_pointer/json_pointer.md - 'back': api/json_pointer/back.md - 'empty': api/json_pointer/empty.md - 'operator string_t': api/json_pointer/operator_string_t.md - 'operator==': api/json_pointer/operator_eq.md - 'operator!=': api/json_pointer/operator_ne.md - 'operator/': api/json_pointer/operator_slash.md - 'operator/=': api/json_pointer/operator_slasheq.md - 'parent_pointer': api/json_pointer/parent_pointer.md - 'pop_back': api/json_pointer/pop_back.md - 'push_back': api/json_pointer/push_back.md - 'string_t': api/json_pointer/string_t.md - 'to_string': api/json_pointer/to_string.md - json_sax: - 'Overview': api/json_sax/index.md - 'binary': api/json_sax/binary.md - 'boolean': api/json_sax/boolean.md - 'end_array': api/json_sax/end_array.md - 'end_object': api/json_sax/end_object.md - 'key': api/json_sax/key.md - 'null': api/json_sax/null.md - 'number_float': api/json_sax/number_float.md - 'number_integer': api/json_sax/number_integer.md - 'number_unsigned': api/json_sax/number_unsigned.md - 'parse_error': api/json_sax/parse_error.md - 'start_array': api/json_sax/start_array.md - 'start_object': api/json_sax/start_object.md - 'string': api/json_sax/string.md - 'operator<<(basic_json), operator<<(json_pointer)': api/operator_ltlt.md - 'operator>>(basic_json)': api/operator_gtgt.md - 'operator""_json': api/operator_literal_json.md - 'operator""_json_pointer': api/operator_literal_json_pointer.md - 'ordered_json': api/ordered_json.md - 'ordered_map': api/ordered_map.md - macros: - 'Overview': api/macros/index.md - 'JSON_ASSERT': api/macros/json_assert.md - 'JSON_CATCH_USER, JSON_THROW_USER, JSON_TRY_USER': api/macros/json_throw_user.md - 'JSON_DIAGNOSTICS': api/macros/json_diagnostics.md - 'JSON_DIAGNOSTIC_POSITIONS': api/macros/json_diagnostic_positions.md - 'JSON_DISABLE_ENUM_SERIALIZATION': api/macros/json_disable_enum_serialization.md - 'JSON_HAS_CPP_11, JSON_HAS_CPP_14, JSON_HAS_CPP_17, JSON_HAS_CPP_20': api/macros/json_has_cpp_11.md - 'JSON_HAS_EXPERIMENTAL_FILESYSTEM, JSON_HAS_FILESYSTEM': api/macros/json_has_filesystem.md - 'JSON_HAS_RANGES': api/macros/json_has_ranges.md - 'JSON_HAS_STATIC_RTTI': api/macros/json_has_static_rtti.md - 'JSON_HAS_THREE_WAY_COMPARISON': api/macros/json_has_three_way_comparison.md - 'JSON_NOEXCEPTION': api/macros/json_noexception.md - 'JSON_NO_IO': api/macros/json_no_io.md - 'JSON_SKIP_LIBRARY_VERSION_CHECK': api/macros/json_skip_library_version_check.md - 'JSON_SKIP_UNSUPPORTED_COMPILER_CHECK': api/macros/json_skip_unsupported_compiler_check.md - 'JSON_USE_GLOBAL_UDLS': api/macros/json_use_global_udls.md - 'JSON_USE_IMPLICIT_CONVERSIONS': api/macros/json_use_implicit_conversions.md - 'JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON': api/macros/json_use_legacy_discarded_value_comparison.md - 'NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE': api/macros/nlohmann_define_derived_type.md - 'NLOHMANN_DEFINE_TYPE_INTRUSIVE, NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE': api/macros/nlohmann_define_type_intrusive.md - 'NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE': api/macros/nlohmann_define_type_non_intrusive.md - 'NLOHMANN_JSON_NAMESPACE': api/macros/nlohmann_json_namespace.md - 'NLOHMANN_JSON_NAMESPACE_BEGIN, NLOHMANN_JSON_NAMESPACE_END': api/macros/nlohmann_json_namespace_begin.md - 'NLOHMANN_JSON_NAMESPACE_NO_VERSION': api/macros/nlohmann_json_namespace_no_version.md - 'NLOHMANN_JSON_SERIALIZE_ENUM': api/macros/nlohmann_json_serialize_enum.md - 'NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH': api/macros/nlohmann_json_version_major.md - Community: - community/index.md - "Code of Conduct": community/code_of_conduct.md - community/contribution_guidelines.md - community/quality_assurance.md - community/governance.md - community/security_policy.md # Extras extra: social: - icon: fontawesome/brands/github link: https://github.com/nlohmann - icon: fontawesome/brands/linkedin link: https://www.linkedin.com/in/nielslohmann/ - icon: fontawesome/brands/xing link: https://www.xing.com/profile/Niels_Lohmann - icon: fontawesome/brands/paypal link: https://www.paypal.me/nlohmann generator: false # Extensions markdown_extensions: - abbr - admonition - attr_list - def_list - codehilite: guess_lang: false - toc: permalink: true - pymdownx.arithmatex - pymdownx.betterem: smart_enable: all - pymdownx.caret - pymdownx.critic - pymdownx.details - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.inlinehilite - pymdownx.magiclink - pymdownx.mark #- pymdownx.smartsymbols - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tasklist: custom_checkbox: true - pymdownx.tabbed: alternate_style: true - pymdownx.tilde - pymdownx.snippets: base_path: docs check_paths: true restrict_base_path: false # needed to allow including files from the .github folder auto_append: - ../includes/glossary.md plugins: - search: separator: '[\s\-\.]' lang: en - minify: minify_html: true - git-revision-date-localized - redirects: redirect_maps: 'api/basic_json/operator_gtgt.md': api/operator_gtgt.md 'api/basic_json/operator_ltlt.md': api/operator_ltlt.md 'api/basic_json/operator_literal_json.md': api/operator_literal_json.md 'api/basic_json/operator_literal_json_pointer.md': api/operator_literal_json_pointer.md 'api/json_pointer/operator_string.md': api/json_pointer/operator_string_t.md 'home/code_of_conduct.md': community/code_of_conduct.md - htmlproofer: # see https://github.com/manuzhang/mkdocs-htmlproofer-plugin enabled: !ENV [ENABLED_HTMLPROOFER, False] ignore_urls: - http://nlohmann.github.io/json/* - https://nlohmann.github.io/json/* - mailto:* - privacy extra_css: - css/custom.css extra_javascript: - https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML json-3.12.0/docs/mkdocs/requirements.txt000066400000000000000000000011301477615276400202600ustar00rootroot00000000000000wheel==0.45.1 mkdocs==1.6.1 # documentation framework mkdocs-git-revision-date-localized-plugin==1.4.5 # plugin "git-revision-date-localized" mkdocs-material==9.6.11 # theme for mkdocs mkdocs-material-extensions==1.3.1 # extensions mkdocs-minify-plugin==0.8.0 # plugin "minify" mkdocs-redirects==1.2.2 # plugin "redirects" mkdocs-htmlproofer-plugin==1.3.0 # plugin "htmlproofer" PyYAML==6.0.2 # linter json-3.12.0/docs/mkdocs/scripts/000077500000000000000000000000001477615276400164705ustar00rootroot00000000000000json-3.12.0/docs/mkdocs/scripts/check_structure.py000077500000000000000000000243201477615276400222430ustar00rootroot00000000000000#!/usr/bin/env python import glob import os.path import re import sys import yaml warnings = 0 def report(rule, location, description) -> None: global warnings warnings += 1 print(f'{warnings:3}. {location}: {description} [{rule}]') def check_structure() -> None: expected_sections = [ "Template parameters", "Specializations", "Iterator invalidation", "Requirements", "Member types", "Member functions", "Member variables", "Static functions", "Non-member functions", "Literals", "Helper classes", "Parameters", "Return value", "Exception safety", "Exceptions", "Complexity", "Possible implementation", "Default definition", "Notes", "Examples", "See also", "Version history", ] required_sections = [ "Examples", "Version history", ] files = sorted(glob.glob("api/**/*.md", recursive=True)) for file in files: with open(file) as file_content: section_idx = -1 # the index of the current h2 section existing_sections = [] # the list of h2 sections in the file in_initial_code_example = False # whether we are inside the first code example block previous_line = None # the previous read line h1sections = 0 # the number of h1 sections in the file last_overload = 0 # the last seen overload number in the code example documented_overloads = {} # the overloads that have been documented in the current block current_section = None # the name of the current section for lineno, original_line in enumerate(file_content.readlines()): line = original_line.strip() if line.startswith("# "): h1sections += 1 # there should only be one top-level title if h1sections > 1: report("structure/unexpected_section", f"{file}:{lineno+1}", f'unexpected top-level title "{line}"') h1sections = 1 # Overview pages should have a better title if line == "# Overview": report("style/title", f"{file}:{lineno+1}", 'overview pages should have a better title than "Overview"') # lines longer than 160 characters are bad (unless they are tables) if len(line) > 160 and "|" not in line: report("whitespace/line_length", f"{file}:{lineno+1} ({current_section})", f"line is too long ({len(line)} vs. 160 chars)") # sections in `` comments are treated as present if line.startswith("") existing_sections.append(current_section) # check if sections are correct if line.startswith("## "): # before starting a new section, check if the previous one documented all overloads if current_section in documented_overloads and last_overload != 0: if len(documented_overloads[current_section]) > 0 and len(documented_overloads[current_section]) != last_overload: expected = list(range(1, last_overload+1)) undocumented = [x for x in expected if x not in documented_overloads[current_section]] unexpected = [x for x in documented_overloads[current_section] if x not in expected] if len(undocumented): report("style/numbering", f"{file}:{lineno} ({current_section})", f'undocumented overloads: {", ".join([f"({x})" for x in undocumented])}') if len(unexpected): report("style/numbering", f"{file}:{lineno} ({current_section})", f'unexpected overloads: {", ".join([f"({x})" for x in unexpected])}') current_section = line.strip("## ") existing_sections.append(current_section) if current_section in expected_sections: idx = expected_sections.index(current_section) if idx <= section_idx: report("structure/section_order", f"{file}:{lineno+1}", f'section "{current_section}" is in an unexpected order (should be before "{expected_sections[section_idx]}")') section_idx = idx elif "index.md" not in file: # index.md files may have a different structure report("structure/unknown_section", f"{file}:{lineno+1}", f'section "{current_section}" is not part of the expected sections') # collect the numbered items of the current section to later check if they match the number of overloads if last_overload != 0 and not in_initial_code_example: if len(original_line) and original_line[0].isdigit(): number = int(re.findall(r"^(\d+).", original_line)[0]) if current_section not in documented_overloads: documented_overloads[current_section] = [] documented_overloads[current_section].append(number) # code example if line == "```cpp" and section_idx == -1: in_initial_code_example = True if in_initial_code_example and line.startswith("//") and line not in ["// since C++20", "// until C++20"]: # check numbering of overloads if any(map(str.isdigit, line)): number = int(re.findall(r"\d+", line)[0]) if number != last_overload + 1: report("style/numbering", f"{file}:{lineno+1}", f"expected number ({number}) to be ({last_overload +1 })") last_overload = number if any(map(str.isdigit, line)) and "(" not in line: report("style/numbering", f"{file}:{lineno+1}", f"number should be in parentheses: {line}") if line == "```" and in_initial_code_example: in_initial_code_example = False # consecutive blank lines are bad if line == "" and previous_line == "": report("whitespace/blank_lines", f"{file}:{lineno}-{lineno+1} ({current_section})", "consecutive blank lines") # check that non-example admonitions have titles untitled_admonition = re.match(r"^(\?\?\?|!!!) ([^ ]+)$", line) if untitled_admonition and untitled_admonition.group(2) != "example": report("style/admonition_title", f"{file}:{lineno} ({current_section})", f'"{untitled_admonition.group(2)}" admonitions should have a title') previous_line = line if "index.md" not in file: # index.md files may have a different structure for required_section in required_sections: if required_section not in existing_sections: report("structure/missing_section", f"{file}:{lineno+1}", f'required section "{required_section}" was not found') def check_examples() -> None: example_files = sorted(glob.glob("../../examples/*.cpp")) markdown_files = sorted(glob.glob("**/*.md", recursive=True)) # check if every example file is used in at least one markdown file for example_file in example_files: example_file = os.path.join("examples", os.path.basename(example_file)) found = False for markdown_file in markdown_files: content = " ".join(open(markdown_file).readlines()) if example_file in content: found = True break if not found: report("examples/missing", f"{example_file}", "example file is not used in any documentation file") def check_links() -> None: """Check that every entry in the navigation (nav in mkdocs.yml) links to at most one file. If a file is linked more than once, then the first entry is repeated. See https://github.com/nlohmann/json/issues/4564 for the issue in this project and https://github.com/mkdocs/mkdocs/issues/3428 for the root cause. The issue can be fixed by merging the keys, so - 'NLOHMANN_JSON_VERSION_MAJOR': api/macros/nlohmann_json_version_major.md - 'NLOHMANN_JSON_VERSION_MINOR': api/macros/nlohmann_json_version_major.md would be replaced with - 'NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR': api/macros/nlohmann_json_version_major.md """ file_with_path = {} def collect_links(node, path="") -> None: if isinstance(node, list): for x in node: collect_links(x, path) elif isinstance(node, dict): for p, x in node.items(): collect_links(x, path + "/" + p) else: if node not in file_with_path: file_with_path[node] = [] file_with_path[node].append(path) with open("../mkdocs.yml") as mkdocs_file: # see https://github.com/yaml/pyyaml/issues/86#issuecomment-1042485535 yaml.add_multi_constructor("tag:yaml.org,2002:python/name", lambda loader, suffix, node: None, Loader=yaml.SafeLoader) yaml.add_multi_constructor("!ENV", lambda loader, suffix, node: None, Loader=yaml.SafeLoader) y = yaml.safe_load(mkdocs_file) collect_links(y["nav"]) for duplicate_file in [x for x in file_with_path if len(file_with_path[x]) > 1]: file_list = [f'"{x}"' for x in file_with_path[duplicate_file]] file_list_str = ", ".join(file_list) report("nav/duplicate_files", "mkdocs.yml", f'file "{duplicate_file}" is linked with multiple keys in "nav": {file_list_str}; only one is rendered properly, see #4564') if __name__ == "__main__": print(120 * "-") check_structure() check_examples() check_links() print(120 * "-") if warnings > 0: sys.exit(1) json-3.12.0/include/000077500000000000000000000000001477615276400142145ustar00rootroot00000000000000json-3.12.0/include/nlohmann/000077500000000000000000000000001477615276400160265ustar00rootroot00000000000000json-3.12.0/include/nlohmann/adl_serializer.hpp000066400000000000000000000043511477615276400215330ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN /// @sa https://json.nlohmann.me/api/adl_serializer/ template struct adl_serializer { /// @brief convert a JSON value to any value type /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ template static auto from_json(BasicJsonType && j, TargetType& val) noexcept( noexcept(::nlohmann::from_json(std::forward(j), val))) -> decltype(::nlohmann::from_json(std::forward(j), val), void()) { ::nlohmann::from_json(std::forward(j), val); } /// @brief convert a JSON value to any value type /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ template static auto from_json(BasicJsonType && j) noexcept( noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) { return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); } /// @brief convert any value type to a JSON value /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ template static auto to_json(BasicJsonType& j, TargetType && val) noexcept( noexcept(::nlohmann::to_json(j, std::forward(val)))) -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) { ::nlohmann::to_json(j, std::forward(val)); } }; NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/byte_container_with_subtype.hpp000066400000000000000000000067171477615276400243650ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // uint8_t, uint64_t #include // tie #include // move #include NLOHMANN_JSON_NAMESPACE_BEGIN /// @brief an internal type for a backed binary type /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ template class byte_container_with_subtype : public BinaryType { public: using container_type = BinaryType; using subtype_type = std::uint64_t; /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ byte_container_with_subtype() noexcept(noexcept(container_type())) : container_type() {} /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) : container_type(b) {} /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) : container_type(std::move(b)) {} /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) : container_type(b) , m_subtype(subtype_) , m_has_subtype(true) {} /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) : container_type(std::move(b)) , m_subtype(subtype_) , m_has_subtype(true) {} bool operator==(const byte_container_with_subtype& rhs) const { return std::tie(static_cast(*this), m_subtype, m_has_subtype) == std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); } bool operator!=(const byte_container_with_subtype& rhs) const { return !(rhs == *this); } /// @brief sets the binary subtype /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ void set_subtype(subtype_type subtype_) noexcept { m_subtype = subtype_; m_has_subtype = true; } /// @brief return the binary subtype /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ constexpr subtype_type subtype() const noexcept { return m_has_subtype ? m_subtype : static_cast(-1); } /// @brief return whether the value has a subtype /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ constexpr bool has_subtype() const noexcept { return m_has_subtype; } /// @brief clears the binary subtype /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ void clear_subtype() noexcept { m_subtype = 0; m_has_subtype = false; } private: subtype_type m_subtype = 0; bool m_has_subtype = false; }; NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/000077500000000000000000000000001477615276400172705ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/abi_macros.hpp000066400000000000000000000100311477615276400220730ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once // This file contains all macro definitions affecting or depending on the ABI #ifndef JSON_SKIP_LIBRARY_VERSION_CHECK #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 #warning "Already included a different version of the library!" #endif #endif #endif #define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) #define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) #define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) #ifndef JSON_DIAGNOSTICS #define JSON_DIAGNOSTICS 0 #endif #ifndef JSON_DIAGNOSTIC_POSITIONS #define JSON_DIAGNOSTIC_POSITIONS 0 #endif #ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 #endif #if JSON_DIAGNOSTICS #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag #else #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS #endif #if JSON_DIAGNOSTIC_POSITIONS #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp #else #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS #endif #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp #else #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON #endif #ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 #endif // Construct the namespace ABI tags component #define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c #define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) #define NLOHMANN_JSON_ABI_TAGS \ NLOHMANN_JSON_ABI_TAGS_CONCAT( \ NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) // Construct the namespace version component #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ _v ## major ## _ ## minor ## _ ## patch #define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) #if NLOHMANN_JSON_NAMESPACE_NO_VERSION #define NLOHMANN_JSON_NAMESPACE_VERSION #else #define NLOHMANN_JSON_NAMESPACE_VERSION \ NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ NLOHMANN_JSON_VERSION_MINOR, \ NLOHMANN_JSON_VERSION_PATCH) #endif // Combine namespace components #define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b #define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) #ifndef NLOHMANN_JSON_NAMESPACE #define NLOHMANN_JSON_NAMESPACE \ nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ NLOHMANN_JSON_ABI_TAGS, \ NLOHMANN_JSON_NAMESPACE_VERSION) #endif #ifndef NLOHMANN_JSON_NAMESPACE_BEGIN #define NLOHMANN_JSON_NAMESPACE_BEGIN \ namespace nlohmann \ { \ inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ NLOHMANN_JSON_ABI_TAGS, \ NLOHMANN_JSON_NAMESPACE_VERSION) \ { #endif #ifndef NLOHMANN_JSON_NAMESPACE_END #define NLOHMANN_JSON_NAMESPACE_END \ } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ } // namespace nlohmann #endif json-3.12.0/include/nlohmann/detail/conversions/000077500000000000000000000000001477615276400216405ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/conversions/from_json.hpp000066400000000000000000000516741477615276400243620ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // transform #include // array #include // forward_list #include // inserter, front_inserter, end #include // map #ifdef JSON_HAS_CPP_17 #include // optional #endif #include // string #include // tuple, make_tuple #include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible #include // unordered_map #include // pair, declval #include // valarray #include #include #include #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n) { if (JSON_HEDLEY_UNLIKELY(!j.is_null())) { JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j)); } n = nullptr; } #ifdef JSON_HAS_CPP_17 #ifndef JSON_USE_IMPLICIT_CONVERSIONS template void from_json(const BasicJsonType& j, std::optional& opt) { if (j.is_null()) { opt = std::nullopt; } else { opt.emplace(j.template get()); } } #endif // JSON_USE_IMPLICIT_CONVERSIONS #endif // JSON_HAS_CPP_17 // overloads for basic_json template parameters template < typename BasicJsonType, typename ArithmeticType, enable_if_t < std::is_arithmetic::value&& !std::is_same::value, int > = 0 > void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) { switch (static_cast(j)) { case value_t::number_unsigned: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_integer: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_float: { val = static_cast(*j.template get_ptr()); break; } case value_t::null: case value_t::object: case value_t::array: case value_t::string: case value_t::boolean: case value_t::binary: case value_t::discarded: default: JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); } } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) { if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) { JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j)); } b = *j.template get_ptr(); } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) { if (JSON_HEDLEY_UNLIKELY(!j.is_string())) { JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); } s = *j.template get_ptr(); } template < typename BasicJsonType, typename StringType, enable_if_t < std::is_assignable::value && is_detected_exact::value && !std::is_same::value && !is_json_ref::value, int > = 0 > inline void from_json(const BasicJsonType& j, StringType& s) { if (JSON_HEDLEY_UNLIKELY(!j.is_string())) { JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); } s = *j.template get_ptr(); } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) { get_arithmetic_value(j, val); } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) { get_arithmetic_value(j, val); } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) { get_arithmetic_value(j, val); } #if !JSON_DISABLE_ENUM_SERIALIZATION template::value, int> = 0> inline void from_json(const BasicJsonType& j, EnumType& e) { typename std::underlying_type::type val; get_arithmetic_value(j, val); e = static_cast(val); } #endif // JSON_DISABLE_ENUM_SERIALIZATION // forward_list doesn't have an insert method template::value, int> = 0> inline void from_json(const BasicJsonType& j, std::forward_list& l) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } l.clear(); std::transform(j.rbegin(), j.rend(), std::front_inserter(l), [](const BasicJsonType & i) { return i.template get(); }); } // valarray doesn't have an insert method template::value, int> = 0> inline void from_json(const BasicJsonType& j, std::valarray& l) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } l.resize(j.size()); std::transform(j.begin(), j.end(), std::begin(l), [](const BasicJsonType & elem) { return elem.template get(); }); } template auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -> decltype(j.template get(), void()) { for (std::size_t i = 0; i < N; ++i) { arr[i] = j.at(i).template get(); } } template auto from_json(const BasicJsonType& j, T (&arr)[N1][N2]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -> decltype(j.template get(), void()) { for (std::size_t i1 = 0; i1 < N1; ++i1) { for (std::size_t i2 = 0; i2 < N2; ++i2) { arr[i1][i2] = j.at(i1).at(i2).template get(); } } } template auto from_json(const BasicJsonType& j, T (&arr)[N1][N2][N3]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -> decltype(j.template get(), void()) { for (std::size_t i1 = 0; i1 < N1; ++i1) { for (std::size_t i2 = 0; i2 < N2; ++i2) { for (std::size_t i3 = 0; i3 < N3; ++i3) { arr[i1][i2][i3] = j.at(i1).at(i2).at(i3).template get(); } } } } template auto from_json(const BasicJsonType& j, T (&arr)[N1][N2][N3][N4]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -> decltype(j.template get(), void()) { for (std::size_t i1 = 0; i1 < N1; ++i1) { for (std::size_t i2 = 0; i2 < N2; ++i2) { for (std::size_t i3 = 0; i3 < N3; ++i3) { for (std::size_t i4 = 0; i4 < N4; ++i4) { arr[i1][i2][i3][i4] = j.at(i1).at(i2).at(i3).at(i4).template get(); } } } } } template inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) { arr = *j.template get_ptr(); } template auto from_json_array_impl(const BasicJsonType& j, std::array& arr, priority_tag<2> /*unused*/) -> decltype(j.template get(), void()) { for (std::size_t i = 0; i < N; ++i) { arr[i] = j.at(i).template get(); } } template::value, int> = 0> auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) -> decltype( arr.reserve(std::declval()), j.template get(), void()) { using std::end; ConstructibleArrayType ret; ret.reserve(j.size()); std::transform(j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); arr = std::move(ret); } template::value, int> = 0> inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<0> /*unused*/) { using std::end; ConstructibleArrayType ret; std::transform( j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); arr = std::move(ret); } template < typename BasicJsonType, typename ConstructibleArrayType, enable_if_t < is_constructible_array_type::value&& !is_constructible_object_type::value&& !is_constructible_string_type::value&& !std::is_same::value&& !is_basic_json::value, int > = 0 > auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) -> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), j.template get(), void()) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } from_json_array_impl(j, arr, priority_tag<3> {}); } template < typename BasicJsonType, typename T, std::size_t... Idx > std::array from_json_inplace_array_impl(BasicJsonType&& j, identity_tag> /*unused*/, index_sequence /*unused*/) { return { { std::forward(j).at(Idx).template get()... } }; } template < typename BasicJsonType, typename T, std::size_t N > auto from_json(BasicJsonType&& j, identity_tag> tag) -> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); } template inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) { if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) { JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j)); } bin = *j.template get_ptr(); } template::value, int> = 0> inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) { if (JSON_HEDLEY_UNLIKELY(!j.is_object())) { JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j)); } ConstructibleObjectType ret; const auto* inner_object = j.template get_ptr(); using value_type = typename ConstructibleObjectType::value_type; std::transform( inner_object->begin(), inner_object->end(), std::inserter(ret, ret.begin()), [](typename BasicJsonType::object_t::value_type const & p) { return value_type(p.first, p.second.template get()); }); obj = std::move(ret); } // overload for arithmetic types, not chosen for basic_json template arguments // (BooleanType, etc..); note: Is it really necessary to provide explicit // overloads for boolean_t etc. in case of a custom BooleanType which is not // an arithmetic type? template < typename BasicJsonType, typename ArithmeticType, enable_if_t < std::is_arithmetic::value&& !std::is_same::value&& !std::is_same::value&& !std::is_same::value&& !std::is_same::value, int > = 0 > inline void from_json(const BasicJsonType& j, ArithmeticType& val) { switch (static_cast(j)) { case value_t::number_unsigned: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_integer: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_float: { val = static_cast(*j.template get_ptr()); break; } case value_t::boolean: { val = static_cast(*j.template get_ptr()); break; } case value_t::null: case value_t::object: case value_t::array: case value_t::string: case value_t::binary: case value_t::discarded: default: JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); } } template std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) { return std::make_tuple(std::forward(j).at(Idx).template get()...); } template std::tuple<> from_json_tuple_impl_base(BasicJsonType& /*unused*/, index_sequence<> /*unused*/) { return {}; } template < typename BasicJsonType, class A1, class A2 > std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) { return {std::forward(j).at(0).template get(), std::forward(j).at(1).template get()}; } template inline void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) { p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); } template std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) { return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); } template inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) { t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); } template auto from_json(BasicJsonType&& j, TupleRelated&& t) -> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); } template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, typename = enable_if_t < !std::is_constructible < typename BasicJsonType::string_t, Key >::value >> inline void from_json(const BasicJsonType& j, std::map& m) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } m.clear(); for (const auto& p : j) { if (JSON_HEDLEY_UNLIKELY(!p.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); } m.emplace(p.at(0).template get(), p.at(1).template get()); } } template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, typename = enable_if_t < !std::is_constructible < typename BasicJsonType::string_t, Key >::value >> inline void from_json(const BasicJsonType& j, std::unordered_map& m) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); } m.clear(); for (const auto& p : j) { if (JSON_HEDLEY_UNLIKELY(!p.is_array())) { JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); } m.emplace(p.at(0).template get(), p.at(1).template get()); } } #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM template inline void from_json(const BasicJsonType& j, std_fs::path& p) { if (JSON_HEDLEY_UNLIKELY(!j.is_string())) { JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); } const auto& s = *j.template get_ptr(); #ifdef JSON_HAS_CPP_20 p = std_fs::path(std::u8string_view(reinterpret_cast(s.data()), s.size())); #else p = std_fs::u8path(s); // accepts UTF-8 encoded std::string in C++17, deprecated in C++20 #endif } #endif struct from_json_fn { template auto operator()(const BasicJsonType& j, T&& val) const noexcept(noexcept(from_json(j, std::forward(val)))) -> decltype(from_json(j, std::forward(val))) { return from_json(j, std::forward(val)); } }; } // namespace detail #ifndef JSON_HAS_CPP_17 /// namespace to hold default `from_json` function /// to see why this is required: /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) { #endif JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers) detail::static_const::value; #ifndef JSON_HAS_CPP_17 } // namespace #endif NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/conversions/to_chars.hpp000066400000000000000000001132621477615276400241600ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2009 Florian Loitsch // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // array #include // signbit, isfinite #include // intN_t, uintN_t #include // memcpy, memmove #include // numeric_limits #include // conditional #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /*! @brief implements the Grisu2 algorithm for binary to decimal floating-point conversion. This implementation is a slightly modified version of the reference implementation which may be obtained from http://florian.loitsch.com/publications (bench.tar.gz). The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. For a detailed description of the algorithm see: [1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming Language Design and Implementation, PLDI 2010 [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, PLDI 1996 */ namespace dtoa_impl { template Target reinterpret_bits(const Source source) { static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); Target target; std::memcpy(&target, &source, sizeof(Source)); return target; } struct diyfp // f * 2^e { static constexpr int kPrecision = 64; // = q std::uint64_t f = 0; int e = 0; constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} /*! @brief returns x - y @pre x.e == y.e and x.f >= y.f */ static diyfp sub(const diyfp& x, const diyfp& y) noexcept { JSON_ASSERT(x.e == y.e); JSON_ASSERT(x.f >= y.f); return {x.f - y.f, x.e}; } /*! @brief returns x * y @note The result is rounded. (Only the upper q bits are returned.) */ static diyfp mul(const diyfp& x, const diyfp& y) noexcept { static_assert(kPrecision == 64, "internal error"); // Computes: // f = round((x.f * y.f) / 2^q) // e = x.e + y.e + q // Emulate the 64-bit * 64-bit multiplication: // // p = u * v // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) // // (Since Q might be larger than 2^32 - 1) // // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) // // (Q_hi + H does not overflow a 64-bit int) // // = p_lo + 2^64 p_hi const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; const std::uint64_t u_hi = x.f >> 32u; const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; const std::uint64_t v_hi = y.f >> 32u; const std::uint64_t p0 = u_lo * v_lo; const std::uint64_t p1 = u_lo * v_hi; const std::uint64_t p2 = u_hi * v_lo; const std::uint64_t p3 = u_hi * v_hi; const std::uint64_t p0_hi = p0 >> 32u; const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; const std::uint64_t p1_hi = p1 >> 32u; const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; const std::uint64_t p2_hi = p2 >> 32u; std::uint64_t Q = p0_hi + p1_lo + p2_lo; // The full product might now be computed as // // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) // p_lo = p0_lo + (Q << 32) // // But in this particular case here, the full p_lo is not required. // Effectively we only need to add the highest bit in p_lo to p_hi (and // Q_hi + 1 does not overflow). Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); return {h, x.e + y.e + 64}; } /*! @brief normalize x such that the significand is >= 2^(q-1) @pre x.f != 0 */ static diyfp normalize(diyfp x) noexcept { JSON_ASSERT(x.f != 0); while ((x.f >> 63u) == 0) { x.f <<= 1u; x.e--; } return x; } /*! @brief normalize x such that the result has the exponent E @pre e >= x.e and the upper e - x.e bits of x.f must be zero. */ static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept { const int delta = x.e - target_exponent; JSON_ASSERT(delta >= 0); JSON_ASSERT(((x.f << delta) >> delta) == x.f); return {x.f << delta, target_exponent}; } }; struct boundaries { diyfp w; diyfp minus; diyfp plus; }; /*! Compute the (normalized) diyfp representing the input number 'value' and its boundaries. @pre value must be finite and positive */ template boundaries compute_boundaries(FloatType value) { JSON_ASSERT(std::isfinite(value)); JSON_ASSERT(value > 0); // Convert the IEEE representation into a diyfp. // // If v is denormal: // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) // If v is normalized: // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) static_assert(std::numeric_limits::is_iec559, "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); constexpr int kMinExp = 1 - kBias; constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) using bits_type = typename std::conditional::type; const auto bits = static_cast(reinterpret_bits(value)); const std::uint64_t E = bits >> (kPrecision - 1); const std::uint64_t F = bits & (kHiddenBit - 1); const bool is_denormal = E == 0; const diyfp v = is_denormal ? diyfp(F, kMinExp) : diyfp(F + kHiddenBit, static_cast(E) - kBias); // Compute the boundaries m- and m+ of the floating-point value // v = f * 2^e. // // Determine v- and v+, the floating-point predecessor and successor if v, // respectively. // // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) // // v+ = v + 2^e // // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ // between m- and m+ round to v, regardless of how the input rounding // algorithm breaks ties. // // ---+-------------+-------------+-------------+-------------+--- (A) // v- m- v m+ v+ // // -----------------+------+------+-------------+-------------+--- (B) // v- m- v m+ v+ const bool lower_boundary_is_closer = F == 0 && E > 1; const diyfp m_plus = diyfp((2 * v.f) + 1, v.e - 1); const diyfp m_minus = lower_boundary_is_closer ? diyfp((4 * v.f) - 1, v.e - 2) // (B) : diyfp((2 * v.f) - 1, v.e - 1); // (A) // Determine the normalized w+ = m+. const diyfp w_plus = diyfp::normalize(m_plus); // Determine w- = m- such that e_(w-) = e_(w+). const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); return {diyfp::normalize(v), w_minus, w_plus}; } // Given normalized diyfp w, Grisu needs to find a (normalized) cached // power-of-ten c, such that the exponent of the product c * w = f * 2^e lies // within a certain range [alpha, gamma] (Definition 3.2 from [1]) // // alpha <= e = e_c + e_w + q <= gamma // // or // // f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q // <= f_c * f_w * 2^gamma // // Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies // // 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma // // or // // 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) // // The choice of (alpha,gamma) determines the size of the table and the form of // the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well // in practice: // // The idea is to cut the number c * w = f * 2^e into two parts, which can be // processed independently: An integral part p1, and a fractional part p2: // // f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e // = (f div 2^-e) + (f mod 2^-e) * 2^e // = p1 + p2 * 2^e // // The conversion of p1 into decimal form requires a series of divisions and // modulos by (a power of) 10. These operations are faster for 32-bit than for // 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be // achieved by choosing // // -e >= 32 or e <= -32 := gamma // // In order to convert the fractional part // // p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... // // into decimal form, the fraction is repeatedly multiplied by 10 and the digits // d[-i] are extracted in order: // // (10 * p2) div 2^-e = d[-1] // (10 * p2) mod 2^-e = d[-2] / 10^1 + ... // // The multiplication by 10 must not overflow. It is sufficient to choose // // 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. // // Since p2 = f mod 2^-e < 2^-e, // // -e <= 60 or e >= -60 := alpha constexpr int kAlpha = -60; constexpr int kGamma = -32; struct cached_power // c = f * 2^e ~= 10^k { std::uint64_t f; int e; int k; }; /*! For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c satisfies (Definition 3.2 from [1]) alpha <= e_c + e + q <= gamma. */ inline cached_power get_cached_power_for_binary_exponent(int e) { // Now // // alpha <= e_c + e + q <= gamma (1) // ==> f_c * 2^alpha <= c * 2^e * 2^q // // and since the c's are normalized, 2^(q-1) <= f_c, // // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) // ==> 2^(alpha - e - 1) <= c // // If c were an exact power of ten, i.e. c = 10^k, one may determine k as // // k = ceil( log_10( 2^(alpha - e - 1) ) ) // = ceil( (alpha - e - 1) * log_10(2) ) // // From the paper: // "In theory the result of the procedure could be wrong since c is rounded, // and the computation itself is approximated [...]. In practice, however, // this simple function is sufficient." // // For IEEE double precision floating-point numbers converted into // normalized diyfp's w = f * 2^e, with q = 64, // // e >= -1022 (min IEEE exponent) // -52 (p - 1) // -52 (p - 1, possibly normalize denormal IEEE numbers) // -11 (normalize the diyfp) // = -1137 // // and // // e <= +1023 (max IEEE exponent) // -52 (p - 1) // -11 (normalize the diyfp) // = 960 // // This binary exponent range [-1137,960] results in a decimal exponent // range [-307,324]. One does not need to store a cached power for each // k in this range. For each such k it suffices to find a cached power // such that the exponent of the product lies in [alpha,gamma]. // This implies that the difference of the decimal exponents of adjacent // table entries must be less than or equal to // // floor( (gamma - alpha) * log_10(2) ) = 8. // // (A smaller distance gamma-alpha would require a larger table.) // NB: // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. constexpr int kCachedPowersMinDecExp = -300; constexpr int kCachedPowersDecStep = 8; static constexpr std::array kCachedPowers = { { { 0xAB70FE17C79AC6CA, -1060, -300 }, { 0xFF77B1FCBEBCDC4F, -1034, -292 }, { 0xBE5691EF416BD60C, -1007, -284 }, { 0x8DD01FAD907FFC3C, -980, -276 }, { 0xD3515C2831559A83, -954, -268 }, { 0x9D71AC8FADA6C9B5, -927, -260 }, { 0xEA9C227723EE8BCB, -901, -252 }, { 0xAECC49914078536D, -874, -244 }, { 0x823C12795DB6CE57, -847, -236 }, { 0xC21094364DFB5637, -821, -228 }, { 0x9096EA6F3848984F, -794, -220 }, { 0xD77485CB25823AC7, -768, -212 }, { 0xA086CFCD97BF97F4, -741, -204 }, { 0xEF340A98172AACE5, -715, -196 }, { 0xB23867FB2A35B28E, -688, -188 }, { 0x84C8D4DFD2C63F3B, -661, -180 }, { 0xC5DD44271AD3CDBA, -635, -172 }, { 0x936B9FCEBB25C996, -608, -164 }, { 0xDBAC6C247D62A584, -582, -156 }, { 0xA3AB66580D5FDAF6, -555, -148 }, { 0xF3E2F893DEC3F126, -529, -140 }, { 0xB5B5ADA8AAFF80B8, -502, -132 }, { 0x87625F056C7C4A8B, -475, -124 }, { 0xC9BCFF6034C13053, -449, -116 }, { 0x964E858C91BA2655, -422, -108 }, { 0xDFF9772470297EBD, -396, -100 }, { 0xA6DFBD9FB8E5B88F, -369, -92 }, { 0xF8A95FCF88747D94, -343, -84 }, { 0xB94470938FA89BCF, -316, -76 }, { 0x8A08F0F8BF0F156B, -289, -68 }, { 0xCDB02555653131B6, -263, -60 }, { 0x993FE2C6D07B7FAC, -236, -52 }, { 0xE45C10C42A2B3B06, -210, -44 }, { 0xAA242499697392D3, -183, -36 }, { 0xFD87B5F28300CA0E, -157, -28 }, { 0xBCE5086492111AEB, -130, -20 }, { 0x8CBCCC096F5088CC, -103, -12 }, { 0xD1B71758E219652C, -77, -4 }, { 0x9C40000000000000, -50, 4 }, { 0xE8D4A51000000000, -24, 12 }, { 0xAD78EBC5AC620000, 3, 20 }, { 0x813F3978F8940984, 30, 28 }, { 0xC097CE7BC90715B3, 56, 36 }, { 0x8F7E32CE7BEA5C70, 83, 44 }, { 0xD5D238A4ABE98068, 109, 52 }, { 0x9F4F2726179A2245, 136, 60 }, { 0xED63A231D4C4FB27, 162, 68 }, { 0xB0DE65388CC8ADA8, 189, 76 }, { 0x83C7088E1AAB65DB, 216, 84 }, { 0xC45D1DF942711D9A, 242, 92 }, { 0x924D692CA61BE758, 269, 100 }, { 0xDA01EE641A708DEA, 295, 108 }, { 0xA26DA3999AEF774A, 322, 116 }, { 0xF209787BB47D6B85, 348, 124 }, { 0xB454E4A179DD1877, 375, 132 }, { 0x865B86925B9BC5C2, 402, 140 }, { 0xC83553C5C8965D3D, 428, 148 }, { 0x952AB45CFA97A0B3, 455, 156 }, { 0xDE469FBD99A05FE3, 481, 164 }, { 0xA59BC234DB398C25, 508, 172 }, { 0xF6C69A72A3989F5C, 534, 180 }, { 0xB7DCBF5354E9BECE, 561, 188 }, { 0x88FCF317F22241E2, 588, 196 }, { 0xCC20CE9BD35C78A5, 614, 204 }, { 0x98165AF37B2153DF, 641, 212 }, { 0xE2A0B5DC971F303A, 667, 220 }, { 0xA8D9D1535CE3B396, 694, 228 }, { 0xFB9B7CD9A4A7443C, 720, 236 }, { 0xBB764C4CA7A44410, 747, 244 }, { 0x8BAB8EEFB6409C1A, 774, 252 }, { 0xD01FEF10A657842C, 800, 260 }, { 0x9B10A4E5E9913129, 827, 268 }, { 0xE7109BFBA19C0C9D, 853, 276 }, { 0xAC2820D9623BF429, 880, 284 }, { 0x80444B5E7AA7CF85, 907, 292 }, { 0xBF21E44003ACDD2D, 933, 300 }, { 0x8E679C2F5E44FF8F, 960, 308 }, { 0xD433179D9C8CB841, 986, 316 }, { 0x9E19DB92B4E31BA9, 1013, 324 }, } }; // This computation gives exactly the same results for k as // k = ceil((kAlpha - e - 1) * 0.30102999566398114) // for |e| <= 1500, but doesn't require floating-point operations. // NB: log_10(2) ~= 78913 / 2^18 JSON_ASSERT(e >= -1500); JSON_ASSERT(e <= 1500); const int f = kAlpha - e - 1; const int k = ((f * 78913) / (1 << 18)) + static_cast(f > 0); const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; JSON_ASSERT(index >= 0); JSON_ASSERT(static_cast(index) < kCachedPowers.size()); const cached_power cached = kCachedPowers[static_cast(index)]; JSON_ASSERT(kAlpha <= cached.e + e + 64); JSON_ASSERT(kGamma >= cached.e + e + 64); return cached; } /*! For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1. */ inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) { // LCOV_EXCL_START if (n >= 1000000000) { pow10 = 1000000000; return 10; } // LCOV_EXCL_STOP if (n >= 100000000) { pow10 = 100000000; return 9; } if (n >= 10000000) { pow10 = 10000000; return 8; } if (n >= 1000000) { pow10 = 1000000; return 7; } if (n >= 100000) { pow10 = 100000; return 6; } if (n >= 10000) { pow10 = 10000; return 5; } if (n >= 1000) { pow10 = 1000; return 4; } if (n >= 100) { pow10 = 100; return 3; } if (n >= 10) { pow10 = 10; return 2; } pow10 = 1; return 1; } inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, std::uint64_t rest, std::uint64_t ten_k) { JSON_ASSERT(len >= 1); JSON_ASSERT(dist <= delta); JSON_ASSERT(rest <= delta); JSON_ASSERT(ten_k > 0); // <--------------------------- delta ----> // <---- dist ---------> // --------------[------------------+-------------------]-------------- // M- w M+ // // ten_k // <------> // <---- rest ----> // --------------[------------------+----+--------------]-------------- // w V // = buf * 10^k // // ten_k represents a unit-in-the-last-place in the decimal representation // stored in buf. // Decrement buf by ten_k while this takes buf closer to w. // The tests are written in this order to avoid overflow in unsigned // integer arithmetic. while (rest < dist && delta - rest >= ten_k && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) { JSON_ASSERT(buf[len - 1] != '0'); buf[len - 1]--; rest += ten_k; } } /*! Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. M- and M+ must be normalized and share the same exponent -60 <= e <= -32. */ inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, diyfp M_minus, diyfp w, diyfp M_plus) { static_assert(kAlpha >= -60, "internal error"); static_assert(kGamma <= -32, "internal error"); // Generates the digits (and the exponent) of a decimal floating-point // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. // // <--------------------------- delta ----> // <---- dist ---------> // --------------[------------------+-------------------]-------------- // M- w M+ // // Grisu2 generates the digits of M+ from left to right and stops as soon as // V is in [M-,M+]. JSON_ASSERT(M_plus.e >= kAlpha); JSON_ASSERT(M_plus.e <= kGamma); std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): // // M+ = f * 2^e // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e // = ((p1 ) * 2^-e + (p2 )) * 2^e // = p1 + p2 * 2^e const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e // 1) // // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] JSON_ASSERT(p1 > 0); std::uint32_t pow10{}; const int k = find_largest_pow10(p1, pow10); // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) // // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) // // M+ = p1 + p2 * 2^e // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e // = d[k-1] * 10^(k-1) + ( rest) * 2^e // // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) // // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] // // but stop as soon as // // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e int n = k; while (n > 0) { // Invariants: // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) // pow10 = 10^(n-1) <= p1 < 10^n // const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) // // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) // JSON_ASSERT(d <= 9); buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d // // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) // p1 = r; n--; // // M+ = buffer * 10^n + (p1 + p2 * 2^e) // pow10 = 10^n // // Now check if enough digits have been generated. // Compute // // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e // // Note: // Since rest and delta share the same exponent e, it suffices to // compare the significands. const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; if (rest <= delta) { // V = buffer * 10^n, with M- <= V <= M+. decimal_exponent += n; // We may now just stop. But instead look if the buffer could be // decremented to bring V closer to w. // // pow10 = 10^n is now 1 ulp in the decimal representation V. // The rounding procedure works with diyfp's with an implicit // exponent of e. // // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e // const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; grisu2_round(buffer, length, dist, delta, rest, ten_n); return; } pow10 /= 10; // // pow10 = 10^(n-1) <= p1 < 10^n // Invariants restored. } // 2) // // The digits of the integral part have been generated: // // M+ = d[k-1]...d[1]d[0] + p2 * 2^e // = buffer + p2 * 2^e // // Now generate the digits of the fractional part p2 * 2^e. // // Note: // No decimal point is generated: the exponent is adjusted instead. // // p2 actually represents the fraction // // p2 * 2^e // = p2 / 2^-e // = d[-1] / 10^1 + d[-2] / 10^2 + ... // // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) // // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) // // using // // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) // = ( d) * 2^-e + ( r) // // or // 10^m * p2 * 2^e = d + r * 2^e // // i.e. // // M+ = buffer + p2 * 2^e // = buffer + 10^-m * (d + r * 2^e) // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e // // and stop as soon as 10^-m * r * 2^e <= delta * 2^e JSON_ASSERT(p2 > delta); int m = 0; for (;;) { // Invariant: // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e // = buffer * 10^-m + 10^-m * (p2 ) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e // JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); p2 *= 10; const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e // // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e // JSON_ASSERT(d <= 9); buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d // // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e // p2 = r; m++; // // M+ = buffer * 10^-m + 10^-m * p2 * 2^e // Invariant restored. // Check if enough digits have been generated. // // 10^-m * p2 * 2^e <= delta * 2^e // p2 * 2^e <= 10^m * delta * 2^e // p2 <= 10^m * delta delta *= 10; dist *= 10; if (p2 <= delta) { break; } } // V = buffer * 10^-m, with M- <= V <= M+. decimal_exponent -= m; // 1 ulp in the decimal representation is now 10^-m. // Since delta and dist are now scaled by 10^m, we need to do the // same with ulp in order to keep the units in sync. // // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e // const std::uint64_t ten_m = one.f; grisu2_round(buffer, length, dist, delta, p2, ten_m); // By construction this algorithm generates the shortest possible decimal // number (Loitsch, Theorem 6.2) which rounds back to w. // For an input number of precision p, at least // // N = 1 + ceil(p * log_10(2)) // // decimal digits are sufficient to identify all binary floating-point // numbers (Matula, "In-and-Out conversions"). // This implies that the algorithm does not produce more than N decimal // digits. // // N = 17 for p = 53 (IEEE double precision) // N = 9 for p = 24 (IEEE single precision) } /*! v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ JSON_HEDLEY_NON_NULL(1) inline void grisu2(char* buf, int& len, int& decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus) { JSON_ASSERT(m_plus.e == m_minus.e); JSON_ASSERT(m_plus.e == v.e); // --------(-----------------------+-----------------------)-------- (A) // m- v m+ // // --------------------(-----------+-----------------------)-------- (B) // m- v m+ // // First scale v (and m- and m+) such that the exponent is in the range // [alpha, gamma]. const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] const diyfp w = diyfp::mul(v, c_minus_k); const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); // ----(---+---)---------------(---+---)---------------(---+---)---- // w- w w+ // = c*m- = c*v = c*m+ // // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and // w+ are now off by a small amount. // In fact: // // w - v * 10^k < 1 ulp // // To account for this inaccuracy, add resp. subtract 1 ulp. // // --------+---[---------------(---+---)---------------]---+-------- // w- M- w M+ w+ // // Now any number in [M-, M+] (bounds included) will round to w when input, // regardless of how the input rounding algorithm breaks ties. // // And digit_gen generates the shortest possible such number in [M-, M+]. // Note that this does not mean that Grisu2 always generates the shortest // possible number in the interval (m-, m+). const diyfp M_minus(w_minus.f + 1, w_minus.e); const diyfp M_plus (w_plus.f - 1, w_plus.e ); decimal_exponent = -cached.k; // = -(-k) = k grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); } /*! v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ template JSON_HEDLEY_NON_NULL(1) void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) { static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, "internal error: not enough precision"); JSON_ASSERT(std::isfinite(value)); JSON_ASSERT(value > 0); // If the neighbors (and boundaries) of 'value' are always computed for double-precision // numbers, all float's can be recovered using strtod (and strtof). However, the resulting // decimal representations are not exactly "short". // // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) // says "value is converted to a string as if by std::sprintf in the default ("C") locale" // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars' // does. // On the other hand, the documentation for 'std::to_chars' requires that "parsing the // representation using the corresponding std::from_chars function recovers value exactly". That // indicates that single precision floating-point numbers should be recovered using // 'std::strtof'. // // NB: If the neighbors are computed for single-precision numbers, there is a single float // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision // value is off by 1 ulp. #if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if) const boundaries w = compute_boundaries(static_cast(value)); #else const boundaries w = compute_boundaries(value); #endif grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); } /*! @brief appends a decimal representation of e to buf @return a pointer to the element following the exponent. @pre -1000 < e < 1000 */ JSON_HEDLEY_NON_NULL(1) JSON_HEDLEY_RETURNS_NON_NULL inline char* append_exponent(char* buf, int e) { JSON_ASSERT(e > -1000); JSON_ASSERT(e < 1000); if (e < 0) { e = -e; *buf++ = '-'; } else { *buf++ = '+'; } auto k = static_cast(e); if (k < 10) { // Always print at least two digits in the exponent. // This is for compatibility with printf("%g"). *buf++ = '0'; *buf++ = static_cast('0' + k); } else if (k < 100) { *buf++ = static_cast('0' + (k / 10)); k %= 10; *buf++ = static_cast('0' + k); } else { *buf++ = static_cast('0' + (k / 100)); k %= 100; *buf++ = static_cast('0' + (k / 10)); k %= 10; *buf++ = static_cast('0' + k); } return buf; } /*! @brief prettify v = buf * 10^decimal_exponent If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point notation. Otherwise it will be printed in exponential notation. @pre min_exp < 0 @pre max_exp > 0 */ JSON_HEDLEY_NON_NULL(1) JSON_HEDLEY_RETURNS_NON_NULL inline char* format_buffer(char* buf, int len, int decimal_exponent, int min_exp, int max_exp) { JSON_ASSERT(min_exp < 0); JSON_ASSERT(max_exp > 0); const int k = len; const int n = len + decimal_exponent; // v = buf * 10^(n-k) // k is the length of the buffer (number of decimal digits) // n is the position of the decimal point relative to the start of the buffer. if (k <= n && n <= max_exp) { // digits[000] // len <= max_exp + 2 std::memset(buf + k, '0', static_cast(n) - static_cast(k)); // Make it look like a floating-point number (#362, #378) buf[n + 0] = '.'; buf[n + 1] = '0'; return buf + (static_cast(n) + 2); } if (0 < n && n <= max_exp) { // dig.its // len <= max_digits10 + 1 JSON_ASSERT(k > n); std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); buf[n] = '.'; return buf + (static_cast(k) + 1U); } if (min_exp < n && n <= 0) { // 0.[000]digits // len <= 2 + (-min_exp - 1) + max_digits10 std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); buf[0] = '0'; buf[1] = '.'; std::memset(buf + 2, '0', static_cast(-n)); return buf + (2U + static_cast(-n) + static_cast(k)); } if (k == 1) { // dE+123 // len <= 1 + 5 buf += 1; } else { // d.igitsE+123 // len <= max_digits10 + 1 + 5 std::memmove(buf + 2, buf + 1, static_cast(k) - 1); buf[1] = '.'; buf += 1 + static_cast(k); } *buf++ = 'e'; return append_exponent(buf, n - 1); } } // namespace dtoa_impl /*! @brief generates a decimal representation of the floating-point number value in [first, last). The format of the resulting decimal representation is similar to printf's %g format. Returns an iterator pointing past-the-end of the decimal representation. @note The input number must be finite, i.e. NaN's and Inf's are not supported. @note The buffer must be large enough. @note The result is NOT null-terminated. */ template JSON_HEDLEY_NON_NULL(1, 2) JSON_HEDLEY_RETURNS_NON_NULL char* to_chars(char* first, const char* last, FloatType value) { static_cast(last); // maybe unused - fix warning JSON_ASSERT(std::isfinite(value)); // Use signbit(value) instead of (value < 0) since signbit works for -0. if (std::signbit(value)) { value = -value; *first++ = '-'; } #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wfloat-equal" #endif if (value == 0) // +-0 { *first++ = '0'; // Make it look like a floating-point number (#362, #378) *first++ = '.'; *first++ = '0'; return first; } #ifdef __GNUC__ #pragma GCC diagnostic pop #endif JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); // Compute v = buffer * 10^decimal_exponent. // The decimal digits are stored in the buffer, which needs to be interpreted // as an unsigned decimal integer. // len is the length of the buffer, i.e. the number of decimal digits. int len = 0; int decimal_exponent = 0; dtoa_impl::grisu2(first, len, decimal_exponent, value); JSON_ASSERT(len <= std::numeric_limits::max_digits10); // Format the buffer like printf("%.*g", prec, value) constexpr int kMinExp = -4; // Use digits10 here to increase compatibility with version 2. constexpr int kMaxExp = std::numeric_limits::digits10; JSON_ASSERT(last - first >= kMaxExp + 2); JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); } } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/conversions/to_json.hpp000066400000000000000000000414541477615276400240340ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // JSON_HAS_CPP_17 #ifdef JSON_HAS_CPP_17 #include // optional #endif #include // copy #include // begin, end #include // string #include // tuple, get #include // is_same, is_constructible, is_floating_point, is_enum, underlying_type #include // move, forward, declval, pair #include // valarray #include // vector #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { ////////////////// // constructors // ////////////////// /* * Note all external_constructor<>::construct functions need to call * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an * allocated value (e.g., a string). See bug issue * https://github.com/nlohmann/json/issues/2865 for more information. */ template struct external_constructor; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::boolean; j.m_data.m_value = b; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::string; j.m_data.m_value = s; j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::string; j.m_data.m_value = std::move(s); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleStringType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleStringType& str) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::string; j.m_data.m_value.string = j.template create(str); j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::binary; j.m_data.m_value = typename BasicJsonType::binary_t(b); j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::binary; j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b)); j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::number_float; j.m_data.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::number_unsigned; j.m_data.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::number_integer; j.m_data.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::array; j.m_data.m_value = arr; j.set_parents(); j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::array; j.m_data.m_value = std::move(arr); j.set_parents(); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleArrayType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleArrayType& arr) { using std::begin; using std::end; j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::array; j.m_data.m_value.array = j.template create(begin(arr), end(arr)); j.set_parents(); j.assert_invariant(); } template static void construct(BasicJsonType& j, const std::vector& arr) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::array; j.m_data.m_value = value_t::array; j.m_data.m_value.array->reserve(arr.size()); for (const bool x : arr) { j.m_data.m_value.array->push_back(x); j.set_parent(j.m_data.m_value.array->back()); } j.assert_invariant(); } template::value, int> = 0> static void construct(BasicJsonType& j, const std::valarray& arr) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::array; j.m_data.m_value = value_t::array; j.m_data.m_value.array->resize(arr.size()); if (arr.size() > 0) { std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin()); } j.set_parents(); j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::object; j.m_data.m_value = obj; j.set_parents(); j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) { j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::object; j.m_data.m_value = std::move(obj); j.set_parents(); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleObjectType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleObjectType& obj) { using std::begin; using std::end; j.m_data.m_value.destroy(j.m_data.m_type); j.m_data.m_type = value_t::object; j.m_data.m_value.object = j.template create(begin(obj), end(obj)); j.set_parents(); j.assert_invariant(); } }; ///////////// // to_json // ///////////// #ifdef JSON_HAS_CPP_17 template::value, int> = 0> void to_json(BasicJsonType& j, const std::optional& opt) { if (opt.has_value()) { j = *opt; } else { j = nullptr; } } #endif template::value, int> = 0> inline void to_json(BasicJsonType& j, T b) noexcept { external_constructor::construct(j, b); } template < typename BasicJsonType, typename BoolRef, enable_if_t < ((std::is_same::reference, BoolRef>::value && !std::is_same ::reference, typename BasicJsonType::boolean_t&>::value) || (std::is_same::const_reference, BoolRef>::value && !std::is_same ::const_reference>, typename BasicJsonType::boolean_t >::value)) && std::is_convertible::value, int > = 0 > inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept { external_constructor::construct(j, static_cast(b)); } template::value, int> = 0> inline void to_json(BasicJsonType& j, const CompatibleString& s) { external_constructor::construct(j, s); } template inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) { external_constructor::construct(j, std::move(s)); } template::value, int> = 0> inline void to_json(BasicJsonType& j, FloatType val) noexcept { external_constructor::construct(j, static_cast(val)); } template::value, int> = 0> inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept { external_constructor::construct(j, static_cast(val)); } template::value, int> = 0> inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept { external_constructor::construct(j, static_cast(val)); } #if !JSON_DISABLE_ENUM_SERIALIZATION template::value, int> = 0> inline void to_json(BasicJsonType& j, EnumType e) noexcept { using underlying_type = typename std::underlying_type::type; static constexpr value_t integral_value_t = std::is_unsigned::value ? value_t::number_unsigned : value_t::number_integer; external_constructor::construct(j, static_cast(e)); } #endif // JSON_DISABLE_ENUM_SERIALIZATION template inline void to_json(BasicJsonType& j, const std::vector& e) { external_constructor::construct(j, e); } template < typename BasicJsonType, typename CompatibleArrayType, enable_if_t < is_compatible_array_type::value&& !is_compatible_object_type::value&& !is_compatible_string_type::value&& !std::is_same::value&& !is_basic_json::value, int > = 0 > inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr) { external_constructor::construct(j, arr); } template inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) { external_constructor::construct(j, bin); } template::value, int> = 0> inline void to_json(BasicJsonType& j, const std::valarray& arr) { external_constructor::construct(j, std::move(arr)); } template inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { external_constructor::construct(j, std::move(arr)); } template < typename BasicJsonType, typename CompatibleObjectType, enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj) { external_constructor::construct(j, obj); } template inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) { external_constructor::construct(j, std::move(obj)); } template < typename BasicJsonType, typename T, std::size_t N, enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) int > = 0 > inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) { external_constructor::construct(j, arr); } template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > inline void to_json(BasicJsonType& j, const std::pair& p) { j = { p.first, p.second }; } // for https://github.com/nlohmann/json/pull/1134 template>::value, int> = 0> inline void to_json(BasicJsonType& j, const T& b) { j = { {b.key(), b.value()} }; } template inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) { j = { std::get(t)... }; } template inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& /*unused*/, index_sequence<> /*unused*/) { using array_t = typename BasicJsonType::array_t; j = array_t(); } template::value, int > = 0> inline void to_json(BasicJsonType& j, const T& t) { to_json_tuple_impl(j, t, make_index_sequence::value> {}); } #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM template inline void to_json(BasicJsonType& j, const std_fs::path& p) { #ifdef JSON_HAS_CPP_20 const std::u8string s = p.u8string(); j = std::string(s.begin(), s.end()); #else j = p.u8string(); // returns std::string in C++17 #endif } #endif struct to_json_fn { template auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) -> decltype(to_json(j, std::forward(val)), void()) { return to_json(j, std::forward(val)); } }; } // namespace detail #ifndef JSON_HAS_CPP_17 /// namespace to hold default `to_json` function /// to see why this is required: /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) { #endif JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers) detail::static_const::value; #ifndef JSON_HAS_CPP_17 } // namespace #endif NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/exceptions.hpp000066400000000000000000000245361477615276400221740ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // nullptr_t #include // exception #if JSON_DIAGNOSTICS #include // accumulate #endif #include // runtime_error #include // to_string #include // vector #include #include #include #include #include #include #include // With -Wweak-vtables, Clang will complain about the exception classes as they // have no out-of-line virtual method definitions and their vtable will be // emitted in every translation unit. This issue cannot be fixed with a // header-only library as there is no implementation file to move these // functions to. As a result, we suppress this warning here to avoid client // code to stumble over this. See https://github.com/nlohmann/json/issues/4087 // for a discussion. #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wweak-vtables" #endif NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { //////////////// // exceptions // //////////////// /// @brief general exception of the @ref basic_json class /// @sa https://json.nlohmann.me/api/basic_json/exception/ class exception : public std::exception { public: /// returns the explanatory string const char* what() const noexcept override { return m.what(); } /// the id of the exception const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) protected: JSON_HEDLEY_NON_NULL(3) exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) static std::string name(const std::string& ename, int id_) { return concat("[json.exception.", ename, '.', std::to_string(id_), "] "); } static std::string diagnostics(std::nullptr_t /*leaf_element*/) { return ""; } template static std::string diagnostics(const BasicJsonType* leaf_element) { #if JSON_DIAGNOSTICS std::vector tokens; for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent) { switch (current->m_parent->type()) { case value_t::array: { for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i) { if (¤t->m_parent->m_data.m_value.array->operator[](i) == current) { tokens.emplace_back(std::to_string(i)); break; } } break; } case value_t::object: { for (const auto& element : *current->m_parent->m_data.m_value.object) { if (&element.second == current) { tokens.emplace_back(element.first.c_str()); break; } } break; } case value_t::null: // LCOV_EXCL_LINE case value_t::string: // LCOV_EXCL_LINE case value_t::boolean: // LCOV_EXCL_LINE case value_t::number_integer: // LCOV_EXCL_LINE case value_t::number_unsigned: // LCOV_EXCL_LINE case value_t::number_float: // LCOV_EXCL_LINE case value_t::binary: // LCOV_EXCL_LINE case value_t::discarded: // LCOV_EXCL_LINE default: // LCOV_EXCL_LINE break; // LCOV_EXCL_LINE } } if (tokens.empty()) { return ""; } auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, [](const std::string & a, const std::string & b) { return concat(a, '/', detail::escape(b)); }); return concat('(', str, ") ", get_byte_positions(leaf_element)); #else return get_byte_positions(leaf_element); #endif } private: /// an exception object as storage for error messages std::runtime_error m; #if JSON_DIAGNOSTIC_POSITIONS template static std::string get_byte_positions(const BasicJsonType* leaf_element) { if ((leaf_element->start_pos() != std::string::npos) && (leaf_element->end_pos() != std::string::npos)) { return concat("(bytes ", std::to_string(leaf_element->start_pos()), "-", std::to_string(leaf_element->end_pos()), ") "); } return ""; } #else template static std::string get_byte_positions(const BasicJsonType* leaf_element) { static_cast(leaf_element); return ""; } #endif }; /// @brief exception indicating a parse error /// @sa https://json.nlohmann.me/api/basic_json/parse_error/ class parse_error : public exception { public: /*! @brief create a parse error exception @param[in] id_ the id of the exception @param[in] pos the position where the error occurred (or with chars_read_total=0 if the position cannot be determined) @param[in] what_arg the explanatory string @return parse_error object */ template::value, int> = 0> static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("parse_error", id_), "parse error", position_string(pos), ": ", exception::diagnostics(context), what_arg); return {id_, pos.chars_read_total, w.c_str()}; } template::value, int> = 0> static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("parse_error", id_), "parse error", (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), ": ", exception::diagnostics(context), what_arg); return {id_, byte_, w.c_str()}; } /*! @brief byte index of the parse error The byte index of the last read character in the input file. @note For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack). */ const std::size_t byte; private: parse_error(int id_, std::size_t byte_, const char* what_arg) : exception(id_, what_arg), byte(byte_) {} static std::string position_string(const position_t& pos) { return concat(" at line ", std::to_string(pos.lines_read + 1), ", column ", std::to_string(pos.chars_read_current_line)); } }; /// @brief exception indicating errors with iterators /// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ class invalid_iterator : public exception { public: template::value, int> = 0> static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg); return {id_, w.c_str()}; } private: JSON_HEDLEY_NON_NULL(3) invalid_iterator(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /// @brief exception indicating executing a member function with a wrong type /// @sa https://json.nlohmann.me/api/basic_json/type_error/ class type_error : public exception { public: template::value, int> = 0> static type_error create(int id_, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg); return {id_, w.c_str()}; } private: JSON_HEDLEY_NON_NULL(3) type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /// @brief exception indicating access out of the defined range /// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ class out_of_range : public exception { public: template::value, int> = 0> static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg); return {id_, w.c_str()}; } private: JSON_HEDLEY_NON_NULL(3) out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /// @brief exception indicating other library errors /// @sa https://json.nlohmann.me/api/basic_json/other_error/ class other_error : public exception { public: template::value, int> = 0> static other_error create(int id_, const std::string& what_arg, BasicJsonContext context) { const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg); return {id_, w.c_str()}; } private: JSON_HEDLEY_NON_NULL(3) other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END #if defined(__clang__) #pragma clang diagnostic pop #endif json-3.12.0/include/nlohmann/detail/hash.hpp000066400000000000000000000076621477615276400207370ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // uint8_t #include // size_t #include // hash #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { // boost::hash_combine inline std::size_t combine(std::size_t seed, std::size_t h) noexcept { seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); return seed; } /*! @brief hash a JSON value The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc. @tparam BasicJsonType basic_json specialization @param j JSON value to hash @return hash value of j */ template std::size_t hash(const BasicJsonType& j) { using string_t = typename BasicJsonType::string_t; using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; const auto type = static_cast(j.type()); switch (j.type()) { case BasicJsonType::value_t::null: case BasicJsonType::value_t::discarded: { return combine(type, 0); } case BasicJsonType::value_t::object: { auto seed = combine(type, j.size()); for (const auto& element : j.items()) { const auto h = std::hash {}(element.key()); seed = combine(seed, h); seed = combine(seed, hash(element.value())); } return seed; } case BasicJsonType::value_t::array: { auto seed = combine(type, j.size()); for (const auto& element : j) { seed = combine(seed, hash(element)); } return seed; } case BasicJsonType::value_t::string: { const auto h = std::hash {}(j.template get_ref()); return combine(type, h); } case BasicJsonType::value_t::boolean: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case BasicJsonType::value_t::number_integer: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case BasicJsonType::value_t::number_unsigned: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case BasicJsonType::value_t::number_float: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case BasicJsonType::value_t::binary: { auto seed = combine(type, j.get_binary().size()); const auto h = std::hash {}(j.get_binary().has_subtype()); seed = combine(seed, h); seed = combine(seed, static_cast(j.get_binary().subtype())); for (const auto byte : j.get_binary()) { seed = combine(seed, std::hash {}(byte)); } return seed; } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE return 0; // LCOV_EXCL_LINE } } } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/000077500000000000000000000000001477615276400204275ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/input/binary_reader.hpp000066400000000000000000003147441477615276400237630ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // generate_n #include // array #include // ldexp #include // size_t #include // uint8_t, uint16_t, uint32_t, uint64_t #include // snprintf #include // memcpy #include // back_inserter #include // numeric_limits #include // char_traits, string #include // make_pair, move #include // vector #ifdef __cpp_lib_byteswap #include //byteswap #endif #include #include #include #include #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /// how to treat CBOR tags enum class cbor_tag_handler_t { error, ///< throw a parse_error exception in case of a tag ignore, ///< ignore tags store ///< store tags as binary type }; /*! @brief determine system byte order @return true if and only if system's byte order is little endian @note from https://stackoverflow.com/a/1001328/266378 */ static inline bool little_endianness(int num = 1) noexcept { return *reinterpret_cast(&num) == 1; } /////////////////// // binary reader // /////////////////// /*! @brief deserialization of CBOR, MessagePack, and UBJSON values */ template> class binary_reader { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using json_sax_t = SAX; using char_type = typename InputAdapterType::char_type; using char_int_type = typename char_traits::int_type; public: /*! @brief create a binary reader @param[in] adapter input adapter to read from */ explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format) { (void)detail::is_sax_static_asserts {}; } // make class move-only binary_reader(const binary_reader&) = delete; binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) binary_reader& operator=(const binary_reader&) = delete; binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) ~binary_reader() = default; /*! @param[in] format the binary format to parse @param[in] sax_ a SAX event processor @param[in] strict whether to expect the input to be consumed completed @param[in] tag_handler how to treat CBOR tags @return whether parsing was successful */ JSON_HEDLEY_NON_NULL(3) bool sax_parse(const input_format_t format, json_sax_t* sax_, const bool strict = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { sax = sax_; bool result = false; switch (format) { case input_format_t::bson: result = parse_bson_internal(); break; case input_format_t::cbor: result = parse_cbor_internal(true, tag_handler); break; case input_format_t::msgpack: result = parse_msgpack_internal(); break; case input_format_t::ubjson: case input_format_t::bjdata: result = parse_ubjson_internal(); break; case input_format_t::json: // LCOV_EXCL_LINE default: // LCOV_EXCL_LINE JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE } // strict mode: next byte must be EOF if (result && strict) { if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata) { get_ignore_noop(); } else { get(); } if (JSON_HEDLEY_UNLIKELY(current != char_traits::eof())) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr)); } } return result; } private: ////////// // BSON // ////////// /*! @brief Reads in a BSON-object and passes it to the SAX-parser. @return whether a valid BSON-value was passed to the SAX parser */ bool parse_bson_internal() { std::int32_t document_size{}; get_number(input_format_t::bson, document_size); if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) { return false; } return sax->end_object(); } /*! @brief Parses a C-style string from the BSON input. @param[in,out] result A reference to the string variable where the read string is to be stored. @return `true` if the \x00-byte indicating the end of the string was encountered before the EOF; false` indicates an unexpected EOF. */ bool get_bson_cstr(string_t& result) { auto out = std::back_inserter(result); while (true) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) { return false; } if (current == 0x00) { return true; } *out++ = static_cast(current); } } /*! @brief Parses a zero-terminated string of length @a len from the BSON input. @param[in] len The length (including the zero-byte at the end) of the string to be read. @param[in,out] result A reference to the string variable where the read string is to be stored. @tparam NumberType The type of the length @a len @pre len >= 1 @return `true` if the string was successfully parsed */ template bool get_bson_string(const NumberType len, string_t& result) { if (JSON_HEDLEY_UNLIKELY(len < 1)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr)); } return get_string(input_format_t::bson, len - static_cast(1), result) && get() != char_traits::eof(); } /*! @brief Parses a byte array input of length @a len from the BSON input. @param[in] len The length of the byte array to be read. @param[in,out] result A reference to the binary variable where the read array is to be stored. @tparam NumberType The type of the length @a len @pre len >= 0 @return `true` if the byte array was successfully parsed */ template bool get_bson_binary(const NumberType len, binary_t& result) { if (JSON_HEDLEY_UNLIKELY(len < 0)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr)); } // All BSON binary values have a subtype std::uint8_t subtype{}; get_number(input_format_t::bson, subtype); result.set_subtype(subtype); return get_binary(input_format_t::bson, len, result); } /*! @brief Read a BSON document element of the given @a element_type. @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html @param[in] element_type_parse_position The position in the input stream, where the `element_type` was read. @warning Not all BSON element types are supported yet. An unsupported @a element_type will give rise to a parse_error.114: Unsupported BSON record type 0x... @return whether a valid BSON-object/array was passed to the SAX parser */ bool parse_bson_element_internal(const char_int_type element_type, const std::size_t element_type_parse_position) { switch (element_type) { case 0x01: // double { double number{}; return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); } case 0x02: // string { std::int32_t len{}; string_t value; return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); } case 0x03: // object { return parse_bson_internal(); } case 0x04: // array { return parse_bson_array(); } case 0x05: // binary { std::int32_t len{}; binary_t value; return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); } case 0x08: // boolean { return sax->boolean(get() != 0); } case 0x0A: // null { return sax->null(); } case 0x10: // int32 { std::int32_t value{}; return get_number(input_format_t::bson, value) && sax->number_integer(value); } case 0x12: // int64 { std::int64_t value{}; return get_number(input_format_t::bson, value) && sax->number_integer(value); } case 0x11: // uint64 { std::uint64_t value{}; return get_number(input_format_t::bson, value) && sax->number_unsigned(value); } default: // anything else not supported (yet) { std::array cr{{}}; static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) const std::string cr_str{cr.data()}; return sax->parse_error(element_type_parse_position, cr_str, parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr)); } } } /*! @brief Read a BSON element list (as specified in the BSON-spec) The same binary layout is used for objects and arrays, hence it must be indicated with the argument @a is_array which one is expected (true --> array, false --> object). @param[in] is_array Determines if the element list being read is to be treated as an object (@a is_array == false), or as an array (@a is_array == true). @return whether a valid BSON-object/array was passed to the SAX parser */ bool parse_bson_element_list(const bool is_array) { string_t key; while (auto element_type = get()) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) { return false; } const std::size_t element_type_parse_position = chars_read; if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) { return false; } if (!is_array && !sax->key(key)) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) { return false; } // get_bson_cstr only appends key.clear(); } return true; } /*! @brief Reads an array from the BSON input and passes it to the SAX-parser. @return whether a valid BSON-array was passed to the SAX parser */ bool parse_bson_array() { std::int32_t document_size{}; get_number(input_format_t::bson, document_size); if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) { return false; } return sax->end_array(); } ////////// // CBOR // ////////// /*! @param[in] get_char whether a new character should be retrieved from the input (true) or whether the last read character should be considered instead (false) @param[in] tag_handler how CBOR tags should be treated @return whether a valid CBOR value was passed to the SAX parser */ bool parse_cbor_internal(const bool get_char, const cbor_tag_handler_t tag_handler) { switch (get_char ? get() : current) { // EOF case char_traits::eof(): return unexpect_eof(input_format_t::cbor, "value"); // Integer 0x00..0x17 (0..23) case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: case 0x0C: case 0x0D: case 0x0E: case 0x0F: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: return sax->number_unsigned(static_cast(current)); case 0x18: // Unsigned integer (one-byte uint8_t follows) { std::uint8_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x19: // Unsigned integer (two-byte uint16_t follows) { std::uint16_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x1A: // Unsigned integer (four-byte uint32_t follows) { std::uint32_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x1B: // Unsigned integer (eight-byte uint64_t follows) { std::uint64_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } // Negative integer -1-0x00..-1-0x17 (-1..-24) case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: return sax->number_integer(static_cast(0x20 - 1 - current)); case 0x38: // Negative integer (one-byte uint8_t follows) { std::uint8_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x39: // Negative integer -1-n (two-byte uint16_t follows) { std::uint16_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) { std::uint32_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) { std::uint64_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - static_cast(number)); } // Binary data (0x00..0x17 bytes follow) case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: // Binary data (one-byte uint8_t for n follows) case 0x59: // Binary data (two-byte uint16_t for n follow) case 0x5A: // Binary data (four-byte uint32_t for n follow) case 0x5B: // Binary data (eight-byte uint64_t for n follow) case 0x5F: // Binary data (indefinite length) { binary_t b; return get_cbor_binary(b) && sax->binary(b); } // UTF-8 string (0x00..0x17 bytes follow) case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: // UTF-8 string (one-byte uint8_t for n follows) case 0x79: // UTF-8 string (two-byte uint16_t for n follow) case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) case 0x7F: // UTF-8 string (indefinite length) { string_t s; return get_cbor_string(s) && sax->string(s); } // array (0x00..0x17 data items follow) case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x8A: case 0x8B: case 0x8C: case 0x8D: case 0x8E: case 0x8F: case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: return get_cbor_array( conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); case 0x98: // array (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x99: // array (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x9A: // array (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); } case 0x9B: // array (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); } case 0x9F: // array (indefinite length) return get_cbor_array(detail::unknown_size(), tag_handler); // map (0x00..0x17 pairs of data items follow) case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: return get_cbor_object(conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); case 0xB8: // map (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xB9: // map (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xBA: // map (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); } case 0xBB: // map (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); } case 0xBF: // map (indefinite length) return get_cbor_object(detail::unknown_size(), tag_handler); case 0xC6: // tagged item case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD8: // tagged item (1 bytes follow) case 0xD9: // tagged item (2 bytes follow) case 0xDA: // tagged item (4 bytes follow) case 0xDB: // tagged item (8 bytes follow) { switch (tag_handler) { case cbor_tag_handler_t::error: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); } case cbor_tag_handler_t::ignore: { // ignore binary subtype switch (current) { case 0xD8: { std::uint8_t subtype_to_ignore{}; get_number(input_format_t::cbor, subtype_to_ignore); break; } case 0xD9: { std::uint16_t subtype_to_ignore{}; get_number(input_format_t::cbor, subtype_to_ignore); break; } case 0xDA: { std::uint32_t subtype_to_ignore{}; get_number(input_format_t::cbor, subtype_to_ignore); break; } case 0xDB: { std::uint64_t subtype_to_ignore{}; get_number(input_format_t::cbor, subtype_to_ignore); break; } default: break; } return parse_cbor_internal(true, tag_handler); } case cbor_tag_handler_t::store: { binary_t b; // use binary subtype and store in binary container switch (current) { case 0xD8: { std::uint8_t subtype{}; get_number(input_format_t::cbor, subtype); b.set_subtype(detail::conditional_static_cast(subtype)); break; } case 0xD9: { std::uint16_t subtype{}; get_number(input_format_t::cbor, subtype); b.set_subtype(detail::conditional_static_cast(subtype)); break; } case 0xDA: { std::uint32_t subtype{}; get_number(input_format_t::cbor, subtype); b.set_subtype(detail::conditional_static_cast(subtype)); break; } case 0xDB: { std::uint64_t subtype{}; get_number(input_format_t::cbor, subtype); b.set_subtype(detail::conditional_static_cast(subtype)); break; } default: return parse_cbor_internal(true, tag_handler); } get(); return get_cbor_binary(b) && sax->binary(b); } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE return false; // LCOV_EXCL_LINE } } case 0xF4: // false return sax->boolean(false); case 0xF5: // true return sax->boolean(true); case 0xF6: // null return sax->null(); case 0xF9: // Half-Precision Float (two-byte IEEE 754) { const auto byte1_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) { return false; } const auto byte2_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) { return false; } const auto byte1 = static_cast(byte1_raw); const auto byte2 = static_cast(byte2_raw); // code from RFC 7049, Appendix D, Figure 3: // As half-precision floating-point numbers were only added // to IEEE 754 in 2008, today's programming platforms often // still only have limited support for them. It is very // easy to include at least decoding support for them even // without such support. An example of a small decoder for // half-precision floating-point numbers in the C language // is shown in Fig. 3. const auto half = static_cast((byte1 << 8u) + byte2); const double val = [&half] { const int exp = (half >> 10u) & 0x1Fu; const unsigned int mant = half & 0x3FFu; JSON_ASSERT(0 <= exp&& exp <= 32); JSON_ASSERT(mant <= 1024); switch (exp) { case 0: return std::ldexp(mant, -24); case 31: return (mant == 0) ? std::numeric_limits::infinity() : std::numeric_limits::quiet_NaN(); default: return std::ldexp(mant + 1024, exp - 25); } }(); return sax->number_float((half & 0x8000u) != 0 ? static_cast(-val) : static_cast(val), ""); } case 0xFA: // Single-Precision Float (four-byte IEEE 754) { float number{}; return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); } case 0xFB: // Double-Precision Float (eight-byte IEEE 754) { double number{}; return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); } default: // anything else (0xFF is handled inside the other types) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); } } } /*! @brief reads a CBOR string This function first reads starting bytes to determine the expected string length and then copies this number of bytes into a string. Additionally, CBOR's strings with indefinite lengths are supported. @param[out] result created string @return whether string creation completed */ bool get_cbor_string(string_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) { return false; } switch (current) { // UTF-8 string (0x00..0x17 bytes follow) case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: { return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); } case 0x78: // UTF-8 string (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x79: // UTF-8 string (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7F: // UTF-8 string (indefinite length) { while (get() != 0xFF) { string_t chunk; if (!get_cbor_string(chunk)) { return false; } result.append(chunk); } return true; } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr)); } } } /*! @brief reads a CBOR byte array This function first reads starting bytes to determine the expected byte array length and then copies this number of bytes into the byte array. Additionally, CBOR's byte arrays with indefinite lengths are supported. @param[out] result created byte array @return whether byte array creation completed */ bool get_cbor_binary(binary_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) { return false; } switch (current) { // Binary data (0x00..0x17 bytes follow) case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: { return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); } case 0x58: // Binary data (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x59: // Binary data (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5A: // Binary data (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5B: // Binary data (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5F: // Binary data (indefinite length) { while (get() != 0xFF) { binary_t chunk; if (!get_cbor_binary(chunk)) { return false; } result.insert(result.end(), chunk.begin(), chunk.end()); } return true; } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr)); } } } /*! @param[in] len the length of the array or detail::unknown_size() for an array of indefinite size @param[in] tag_handler how CBOR tags should be treated @return whether array creation completed */ bool get_cbor_array(const std::size_t len, const cbor_tag_handler_t tag_handler) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) { return false; } if (len != detail::unknown_size()) { for (std::size_t i = 0; i < len; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } } } else { while (get() != 0xFF) { if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) { return false; } } } return sax->end_array(); } /*! @param[in] len the length of the object or detail::unknown_size() for an object of indefinite size @param[in] tag_handler how CBOR tags should be treated @return whether object creation completed */ bool get_cbor_object(const std::size_t len, const cbor_tag_handler_t tag_handler) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) { return false; } if (len != 0) { string_t key; if (len != detail::unknown_size()) { for (std::size_t i = 0; i < len; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } key.clear(); } } else { while (get() != 0xFF) { if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } key.clear(); } } } return sax->end_object(); } ///////////// // MsgPack // ///////////// /*! @return whether a valid MessagePack value was passed to the SAX parser */ bool parse_msgpack_internal() { switch (get()) { // EOF case char_traits::eof(): return unexpect_eof(input_format_t::msgpack, "value"); // positive fixint case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: case 0x0C: case 0x0D: case 0x0E: case 0x0F: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x1F: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5C: case 0x5D: case 0x5E: case 0x5F: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E: case 0x7F: return sax->number_unsigned(static_cast(current)); // fixmap case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x8A: case 0x8B: case 0x8C: case 0x8D: case 0x8E: case 0x8F: return get_msgpack_object(conditional_static_cast(static_cast(current) & 0x0Fu)); // fixarray case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: case 0x98: case 0x99: case 0x9A: case 0x9B: case 0x9C: case 0x9D: case 0x9E: case 0x9F: return get_msgpack_array(conditional_static_cast(static_cast(current) & 0x0Fu)); // fixstr case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: case 0xB8: case 0xB9: case 0xBA: case 0xBB: case 0xBC: case 0xBD: case 0xBE: case 0xBF: case 0xD9: // str 8 case 0xDA: // str 16 case 0xDB: // str 32 { string_t s; return get_msgpack_string(s) && sax->string(s); } case 0xC0: // nil return sax->null(); case 0xC2: // false return sax->boolean(false); case 0xC3: // true return sax->boolean(true); case 0xC4: // bin 8 case 0xC5: // bin 16 case 0xC6: // bin 32 case 0xC7: // ext 8 case 0xC8: // ext 16 case 0xC9: // ext 32 case 0xD4: // fixext 1 case 0xD5: // fixext 2 case 0xD6: // fixext 4 case 0xD7: // fixext 8 case 0xD8: // fixext 16 { binary_t b; return get_msgpack_binary(b) && sax->binary(b); } case 0xCA: // float 32 { float number{}; return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); } case 0xCB: // float 64 { double number{}; return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); } case 0xCC: // uint 8 { std::uint8_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCD: // uint 16 { std::uint16_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCE: // uint 32 { std::uint32_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCF: // uint 64 { std::uint64_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xD0: // int 8 { std::int8_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD1: // int 16 { std::int16_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD2: // int 32 { std::int32_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD3: // int 64 { std::int64_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xDC: // array 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); } case 0xDD: // array 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast(len)); } case 0xDE: // map 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); } case 0xDF: // map 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast(len)); } // negative fixint case 0xE0: case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: case 0xE6: case 0xE7: case 0xE8: case 0xE9: case 0xEA: case 0xEB: case 0xEC: case 0xED: case 0xEE: case 0xEF: case 0xF0: case 0xF1: case 0xF2: case 0xF3: case 0xF4: case 0xF5: case 0xF6: case 0xF7: case 0xF8: case 0xF9: case 0xFA: case 0xFB: case 0xFC: case 0xFD: case 0xFE: case 0xFF: return sax->number_integer(static_cast(current)); default: // anything else { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr)); } } } /*! @brief reads a MessagePack string This function first reads starting bytes to determine the expected string length and then copies this number of bytes into a string. @param[out] result created string @return whether string creation completed */ bool get_msgpack_string(string_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) { return false; } switch (current) { // fixstr case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: case 0xB8: case 0xB9: case 0xBA: case 0xBB: case 0xBC: case 0xBD: case 0xBE: case 0xBF: { return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); } case 0xD9: // str 8 { std::uint8_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } case 0xDA: // str 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } case 0xDB: // str 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr)); } } } /*! @brief reads a MessagePack byte array This function first reads starting bytes to determine the expected byte array length and then copies this number of bytes into a byte array. @param[out] result created byte array @return whether byte array creation completed */ bool get_msgpack_binary(binary_t& result) { // helper function to set the subtype auto assign_and_return_true = [&result](std::int8_t subtype) { result.set_subtype(static_cast(subtype)); return true; }; switch (current) { case 0xC4: // bin 8 { std::uint8_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC5: // bin 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC6: // bin 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC7: // ext 8 { std::uint8_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xC8: // ext 16 { std::uint16_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xC9: // ext 32 { std::uint32_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xD4: // fixext 1 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 1, result) && assign_and_return_true(subtype); } case 0xD5: // fixext 2 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 2, result) && assign_and_return_true(subtype); } case 0xD6: // fixext 4 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 4, result) && assign_and_return_true(subtype); } case 0xD7: // fixext 8 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 8, result) && assign_and_return_true(subtype); } case 0xD8: // fixext 16 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 16, result) && assign_and_return_true(subtype); } default: // LCOV_EXCL_LINE return false; // LCOV_EXCL_LINE } } /*! @param[in] len the length of the array @return whether array creation completed */ bool get_msgpack_array(const std::size_t len) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) { return false; } for (std::size_t i = 0; i < len; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) { return false; } } return sax->end_array(); } /*! @param[in] len the length of the object @return whether object creation completed */ bool get_msgpack_object(const std::size_t len) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) { return false; } string_t key; for (std::size_t i = 0; i < len; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) { return false; } key.clear(); } return sax->end_object(); } //////////// // UBJSON // //////////// /*! @param[in] get_char whether a new character should be retrieved from the input (true, default) or whether the last read character should be considered instead @return whether a valid UBJSON value was passed to the SAX parser */ bool parse_ubjson_internal(const bool get_char = true) { return get_ubjson_value(get_char ? get_ignore_noop() : current); } /*! @brief reads a UBJSON string This function is either called after reading the 'S' byte explicitly indicating a string, or in case of an object key where the 'S' byte can be left out. @param[out] result created string @param[in] get_char whether a new character should be retrieved from the input (true, default) or whether the last read character should be considered instead @return whether string creation completed */ bool get_ubjson_string(string_t& result, const bool get_char = true) { if (get_char) { get(); // TODO(niels): may we ignore N here? } if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) { return false; } switch (current) { case 'U': { std::uint8_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'i': { std::int8_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'I': { std::int16_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'l': { std::int32_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'L': { std::int64_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'u': { if (input_format != input_format_t::bjdata) { break; } std::uint16_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'm': { if (input_format != input_format_t::bjdata) { break; } std::uint32_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } case 'M': { if (input_format != input_format_t::bjdata) { break; } std::uint64_t len{}; return get_number(input_format, len) && get_string(input_format, len, result); } default: break; } auto last_token = get_token_string(); std::string message; if (input_format != input_format_t::bjdata) { message = "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token; } else { message = "expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x" + last_token; } return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "string"), nullptr)); } /*! @param[out] dim an integer vector storing the ND array dimensions @return whether reading ND array size vector is successful */ bool get_ubjson_ndarray_size(std::vector& dim) { std::pair size_and_type; size_t dimlen = 0; bool no_ndarray = true; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray))) { return false; } if (size_and_type.first != npos) { if (size_and_type.second != 0) { if (size_and_type.second != 'N') { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second))) { return false; } dim.push_back(dimlen); } } } else { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray))) { return false; } dim.push_back(dimlen); } } } else { while (current != ']') { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current))) { return false; } dim.push_back(dimlen); get_ignore_noop(); } } return true; } /*! @param[out] result determined size @param[in,out] is_ndarray for input, `true` means already inside an ndarray vector or ndarray dimension is not allowed; `false` means ndarray is allowed; for output, `true` means an ndarray is found; is_ndarray can only return `true` when its initial value is `false` @param[in] prefix type marker if already read, otherwise set to 0 @return whether size determination completed */ bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0) { if (prefix == 0) { prefix = get_ignore_noop(); } switch (prefix) { case 'U': { std::uint8_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } result = static_cast(number); return true; } case 'i': { std::int8_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } if (number < 0) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); } result = static_cast(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char return true; } case 'I': { std::int16_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } if (number < 0) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); } result = static_cast(number); return true; } case 'l': { std::int32_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } if (number < 0) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); } result = static_cast(number); return true; } case 'L': { std::int64_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } if (number < 0) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); } if (!value_in_range_of(number)) { return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr)); } result = static_cast(number); return true; } case 'u': { if (input_format != input_format_t::bjdata) { break; } std::uint16_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } result = static_cast(number); return true; } case 'm': { if (input_format != input_format_t::bjdata) { break; } std::uint32_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } result = conditional_static_cast(number); return true; } case 'M': { if (input_format != input_format_t::bjdata) { break; } std::uint64_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) { return false; } if (!value_in_range_of(number)) { return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr)); } result = detail::conditional_static_cast(number); return true; } case '[': { if (input_format != input_format_t::bjdata) { break; } if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array { return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr)); } std::vector dim; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim))) { return false; } if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector { result = dim.at(dim.size() - 1); return true; } if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format { for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container { if ( i == 0 ) { result = 0; return true; } } string_t key = "_ArraySize_"; if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size()))) { return false; } result = 1; for (auto i : dim) { result *= i; if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type() { return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr)); } if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast(i)))) { return false; } } is_ndarray = true; return sax->end_array(); } result = 0; return true; } default: break; } auto last_token = get_token_string(); std::string message; if (input_format != input_format_t::bjdata) { message = "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token; } else { message = "expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x" + last_token; } return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "size"), nullptr)); } /*! @brief determine the type and size for a container In the optimized UBJSON format, a type and a size can be provided to allow for a more compact representation. @param[out] result pair of the size and the type @param[in] inside_ndarray whether the parser is parsing an ND array dimensional vector @return whether pair creation completed */ bool get_ubjson_size_type(std::pair& result, bool inside_ndarray = false) { result.first = npos; // size result.second = 0; // type bool is_ndarray = false; get_ignore_noop(); if (current == '$') { result.second = get(); // must not ignore 'N', because 'N' maybe the type if (input_format == input_format_t::bjdata && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second))) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr)); } if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type"))) { return false; } get_ignore_noop(); if (JSON_HEDLEY_UNLIKELY(current != '#')) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) { return false; } auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr)); } const bool is_error = get_ubjson_size_value(result.first, is_ndarray); if (input_format == input_format_t::bjdata && is_ndarray) { if (inside_ndarray) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray can not be recursive", "size"), nullptr)); } result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters } return is_error; } if (current == '#') { const bool is_error = get_ubjson_size_value(result.first, is_ndarray); if (input_format == input_format_t::bjdata && is_ndarray) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray requires both type and size", "size"), nullptr)); } return is_error; } return true; } /*! @param prefix the previously read or set type prefix @return whether value creation completed */ bool get_ubjson_value(const char_int_type prefix) { switch (prefix) { case char_traits::eof(): // EOF return unexpect_eof(input_format, "value"); case 'T': // true return sax->boolean(true); case 'F': // false return sax->boolean(false); case 'Z': // null return sax->null(); case 'B': // byte { if (input_format != input_format_t::bjdata) { break; } std::uint8_t number{}; return get_number(input_format, number) && sax->number_unsigned(number); } case 'U': { std::uint8_t number{}; return get_number(input_format, number) && sax->number_unsigned(number); } case 'i': { std::int8_t number{}; return get_number(input_format, number) && sax->number_integer(number); } case 'I': { std::int16_t number{}; return get_number(input_format, number) && sax->number_integer(number); } case 'l': { std::int32_t number{}; return get_number(input_format, number) && sax->number_integer(number); } case 'L': { std::int64_t number{}; return get_number(input_format, number) && sax->number_integer(number); } case 'u': { if (input_format != input_format_t::bjdata) { break; } std::uint16_t number{}; return get_number(input_format, number) && sax->number_unsigned(number); } case 'm': { if (input_format != input_format_t::bjdata) { break; } std::uint32_t number{}; return get_number(input_format, number) && sax->number_unsigned(number); } case 'M': { if (input_format != input_format_t::bjdata) { break; } std::uint64_t number{}; return get_number(input_format, number) && sax->number_unsigned(number); } case 'h': { if (input_format != input_format_t::bjdata) { break; } const auto byte1_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) { return false; } const auto byte2_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) { return false; } const auto byte1 = static_cast(byte1_raw); const auto byte2 = static_cast(byte2_raw); // code from RFC 7049, Appendix D, Figure 3: // As half-precision floating-point numbers were only added // to IEEE 754 in 2008, today's programming platforms often // still only have limited support for them. It is very // easy to include at least decoding support for them even // without such support. An example of a small decoder for // half-precision floating-point numbers in the C language // is shown in Fig. 3. const auto half = static_cast((byte2 << 8u) + byte1); const double val = [&half] { const int exp = (half >> 10u) & 0x1Fu; const unsigned int mant = half & 0x3FFu; JSON_ASSERT(0 <= exp&& exp <= 32); JSON_ASSERT(mant <= 1024); switch (exp) { case 0: return std::ldexp(mant, -24); case 31: return (mant == 0) ? std::numeric_limits::infinity() : std::numeric_limits::quiet_NaN(); default: return std::ldexp(mant + 1024, exp - 25); } }(); return sax->number_float((half & 0x8000u) != 0 ? static_cast(-val) : static_cast(val), ""); } case 'd': { float number{}; return get_number(input_format, number) && sax->number_float(static_cast(number), ""); } case 'D': { double number{}; return get_number(input_format, number) && sax->number_float(static_cast(number), ""); } case 'H': { return get_ubjson_high_precision_number(); } case 'C': // char { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "char"))) { return false; } if (JSON_HEDLEY_UNLIKELY(current > 127)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr)); } string_t s(1, static_cast(current)); return sax->string(s); } case 'S': // string { string_t s; return get_ubjson_string(s) && sax->string(s); } case '[': // array return get_ubjson_array(); case '{': // object return get_ubjson_object(); default: // anything else break; } auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr)); } /*! @return whether array creation completed */ bool get_ubjson_array() { std::pair size_and_type; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) { return false; } // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata): // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]} if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) { size_and_type.second &= ~(static_cast(1) << 8); // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t) { return p.first < t; }); string_t key = "_ArrayType_"; if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr)); } string_t type = it->second; // sax->string() takes a reference if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type))) { return false; } if (size_and_type.second == 'C' || size_and_type.second == 'B') { size_and_type.second = 'U'; } key = "_ArrayData_"; if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) )) { return false; } for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) { return false; } } return (sax->end_array() && sax->end_object()); } // If BJData type marker is 'B' decode as binary if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B') { binary_t result; return get_binary(input_format, size_and_type.first, result) && sax->binary(result); } if (size_and_type.first != npos) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) { return false; } if (size_and_type.second != 0) { if (size_and_type.second != 'N') { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) { return false; } } } } else { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } } } } else { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) { return false; } while (current != ']') { if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) { return false; } get_ignore_noop(); } } return sax->end_array(); } /*! @return whether object creation completed */ bool get_ubjson_object() { std::pair size_and_type; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) { return false; } // do not accept ND-array size in objects in BJData if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr)); } string_t key; if (size_and_type.first != npos) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) { return false; } if (size_and_type.second != 0) { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) { return false; } key.clear(); } } else { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } key.clear(); } } } else { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) { return false; } while (current != '}') { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } get_ignore_noop(); key.clear(); } } return sax->end_object(); } // Note, no reader for UBJSON binary types is implemented because they do // not exist bool get_ubjson_high_precision_number() { // get size of following number string std::size_t size{}; bool no_ndarray = true; auto res = get_ubjson_size_value(size, no_ndarray); if (JSON_HEDLEY_UNLIKELY(!res)) { return res; } // get number string std::vector number_vector; for (std::size_t i = 0; i < size; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) { return false; } number_vector.push_back(static_cast(current)); } // parse number string using ia_type = decltype(detail::input_adapter(number_vector)); auto number_lexer = detail::lexer(detail::input_adapter(number_vector), false); const auto result_number = number_lexer.scan(); const auto number_string = number_lexer.get_token_string(); const auto result_remainder = number_lexer.scan(); using token_type = typename detail::lexer_base::token_type; if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) { return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); } switch (result_number) { case token_type::value_integer: return sax->number_integer(number_lexer.get_number_integer()); case token_type::value_unsigned: return sax->number_unsigned(number_lexer.get_number_unsigned()); case token_type::value_float: return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); case token_type::uninitialized: case token_type::literal_true: case token_type::literal_false: case token_type::literal_null: case token_type::value_string: case token_type::begin_array: case token_type::begin_object: case token_type::end_array: case token_type::end_object: case token_type::name_separator: case token_type::value_separator: case token_type::parse_error: case token_type::end_of_input: case token_type::literal_or_value: default: return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); } } /////////////////////// // Utility functions // /////////////////////// /*! @brief get next character from the input This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns a -'ve valued `char_traits::eof()` in that case. @return character read from the input */ char_int_type get() { ++chars_read; return current = ia.get_character(); } /*! @brief get_to read into a primitive type This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns false instead @return bool, whether the read was successful */ template bool get_to(T& dest, const input_format_t format, const char* context) { auto new_chars_read = ia.get_elements(&dest); chars_read += new_chars_read; if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T))) { // in case of failure, advance position by 1 to report failing location ++chars_read; sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); return false; } return true; } /*! @return character read from the input after ignoring all 'N' entries */ char_int_type get_ignore_noop() { do { get(); } while (current == 'N'); return current; } template static void byte_swap(NumberType& number) { constexpr std::size_t sz = sizeof(number); #ifdef __cpp_lib_byteswap if constexpr (sz == 1) { return; } if constexpr(std::is_integral_v) { number = std::byteswap(number); return; } #endif auto* ptr = reinterpret_cast(&number); for (std::size_t i = 0; i < sz / 2; ++i) { std::swap(ptr[i], ptr[sz - i - 1]); } } /* @brief read a number from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[out] result number of type @a NumberType @return whether conversion completed @note This function needs to respect the system's endianness, because bytes in CBOR, MessagePack, and UBJSON are stored in network order (big endian) and therefore need reordering on little endian systems. On the other hand, BSON and BJData use little endian and should reorder on big endian systems. */ template bool get_number(const input_format_t format, NumberType& result) { // read in the original format if (JSON_HEDLEY_UNLIKELY(!get_to(result, format, "number"))) { return false; } if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata)) { byte_swap(result); } return true; } /*! @brief create a string by reading characters from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[in] len number of characters to read @param[out] result string created by reading @a len bytes @return whether string creation completed @note We can not reserve @a len bytes for the result, because @a len may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of string memory. */ template bool get_string(const input_format_t format, const NumberType len, string_t& result) { bool success = true; for (NumberType i = 0; i < len; i++) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) { success = false; break; } result.push_back(static_cast(current)); } return success; } /*! @brief create a byte array by reading bytes from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[in] len number of bytes to read @param[out] result byte array created by reading @a len bytes @return whether byte array creation completed @note We can not reserve @a len bytes for the result, because @a len may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of memory. */ template bool get_binary(const input_format_t format, const NumberType len, binary_t& result) { bool success = true; for (NumberType i = 0; i < len; i++) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) { success = false; break; } result.push_back(static_cast(current)); } return success; } /*! @param[in] format the current format (for diagnostics) @param[in] context further context information (for diagnostics) @return whether the last read character is not EOF */ JSON_HEDLEY_NON_NULL(3) bool unexpect_eof(const input_format_t format, const char* context) const { if (JSON_HEDLEY_UNLIKELY(current == char_traits::eof())) { return sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); } return true; } /*! @return a string representation of the last read byte */ std::string get_token_string() const { std::array cr{{}}; static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) return std::string{cr.data()}; } /*! @param[in] format the current format @param[in] detail a detailed error message @param[in] context further context information @return a message string to use in the parse_error exceptions */ std::string exception_message(const input_format_t format, const std::string& detail, const std::string& context) const { std::string error_msg = "syntax error while parsing "; switch (format) { case input_format_t::cbor: error_msg += "CBOR"; break; case input_format_t::msgpack: error_msg += "MessagePack"; break; case input_format_t::ubjson: error_msg += "UBJSON"; break; case input_format_t::bson: error_msg += "BSON"; break; case input_format_t::bjdata: error_msg += "BJData"; break; case input_format_t::json: // LCOV_EXCL_LINE default: // LCOV_EXCL_LINE JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE } return concat(error_msg, ' ', context, ": ", detail); } private: static JSON_INLINE_VARIABLE constexpr std::size_t npos = detail::unknown_size(); /// input adapter InputAdapterType ia; /// the current character char_int_type current = char_traits::eof(); /// the number of characters read std::size_t chars_read = 0; /// whether we can assume little endianness const bool is_little_endian = little_endianness(); /// input format const input_format_t input_format = input_format_t::json; /// the SAX parser json_sax_t* sax = nullptr; // excluded markers in bjdata optimized type #define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \ make_array('F', 'H', 'N', 'S', 'T', 'Z', '[', '{') #define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \ make_array( \ bjd_type{'B', "byte"}, \ bjd_type{'C', "char"}, \ bjd_type{'D', "double"}, \ bjd_type{'I', "int16"}, \ bjd_type{'L', "int64"}, \ bjd_type{'M', "uint64"}, \ bjd_type{'U', "uint8"}, \ bjd_type{'d', "single"}, \ bjd_type{'i', "int8"}, \ bjd_type{'l', "int32"}, \ bjd_type{'m', "uint32"}, \ bjd_type{'u', "uint16"}) JSON_PRIVATE_UNLESS_TESTED: // lookup tables // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_; using bjd_type = std::pair; // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_; #undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ #undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ }; #ifndef JSON_HAS_CPP_17 template constexpr std::size_t binary_reader::npos; #endif } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/input_adapters.hpp000066400000000000000000000462631477615276400241750ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // array #include // size_t #include // strlen #include // begin, end, iterator_traits, random_access_iterator_tag, distance, next #include // shared_ptr, make_shared, addressof #include // accumulate #include // string, char_traits #include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer #include // pair, declval #ifndef JSON_NO_IO #include // FILE * #include // istream #endif // JSON_NO_IO #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /// the supported input formats enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata }; //////////////////// // input adapters // //////////////////// #ifndef JSON_NO_IO /*! Input adapter for stdio file access. This adapter read only 1 byte and do not use any buffer. This adapter is a very low level adapter. */ class file_input_adapter { public: using char_type = char; JSON_HEDLEY_NON_NULL(2) explicit file_input_adapter(std::FILE* f) noexcept : m_file(f) { JSON_ASSERT(m_file != nullptr); } // make class move-only file_input_adapter(const file_input_adapter&) = delete; file_input_adapter(file_input_adapter&&) noexcept = default; file_input_adapter& operator=(const file_input_adapter&) = delete; file_input_adapter& operator=(file_input_adapter&&) = delete; ~file_input_adapter() = default; std::char_traits::int_type get_character() noexcept { return std::fgetc(m_file); } // returns the number of characters successfully read template std::size_t get_elements(T* dest, std::size_t count = 1) { return fread(dest, 1, sizeof(T) * count, m_file); } private: /// the file pointer to read from std::FILE* m_file; }; /*! Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at beginning of input. Does not support changing the underlying std::streambuf in mid-input. Maintains underlying std::istream and std::streambuf to support subsequent use of standard std::istream operations to process any input characters following those used in parsing the JSON input. Clears the std::istream flags; any input errors (e.g., EOF) will be detected by the first subsequent call for input from the std::istream. */ class input_stream_adapter { public: using char_type = char; ~input_stream_adapter() { // clear stream flags; we use underlying streambuf I/O, do not // maintain ifstream flags, except eof if (is != nullptr) { is->clear(is->rdstate() & std::ios::eofbit); } } explicit input_stream_adapter(std::istream& i) : is(&i), sb(i.rdbuf()) {} // delete because of pointer members input_stream_adapter(const input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&&) = delete; input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) { rhs.is = nullptr; rhs.sb = nullptr; } // std::istream/std::streambuf use std::char_traits::to_int_type, to // ensure that std::char_traits::eof() and the character 0xFF do not // end up as the same value, e.g. 0xFFFFFFFF. std::char_traits::int_type get_character() { auto res = sb->sbumpc(); // set eof manually, as we don't use the istream interface. if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) { is->clear(is->rdstate() | std::ios::eofbit); } return res; } template std::size_t get_elements(T* dest, std::size_t count = 1) { auto res = static_cast(sb->sgetn(reinterpret_cast(dest), static_cast(count * sizeof(T)))); if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T))) { is->clear(is->rdstate() | std::ios::eofbit); } return res; } private: /// the associated input stream std::istream* is = nullptr; std::streambuf* sb = nullptr; }; #endif // JSON_NO_IO // General-purpose iterator-based adapter. It might not be as fast as // theoretically possible for some containers, but it is extremely versatile. template class iterator_input_adapter { public: using char_type = typename std::iterator_traits::value_type; iterator_input_adapter(IteratorType first, IteratorType last) : current(std::move(first)), end(std::move(last)) {} typename char_traits::int_type get_character() { if (JSON_HEDLEY_LIKELY(current != end)) { auto result = char_traits::to_int_type(*current); std::advance(current, 1); return result; } return char_traits::eof(); } // for general iterators, we cannot really do something better than falling back to processing the range one-by-one template std::size_t get_elements(T* dest, std::size_t count = 1) { auto* ptr = reinterpret_cast(dest); for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index) { if (JSON_HEDLEY_LIKELY(current != end)) { ptr[read_index] = static_cast(*current); std::advance(current, 1); } else { return read_index; } } return count * sizeof(T); } private: IteratorType current; IteratorType end; template friend struct wide_string_input_helper; bool empty() const { return current == end; } }; template struct wide_string_input_helper; template struct wide_string_input_helper { // UTF-32 static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; } else { // get the current character const auto wc = input.get_character(); // UTF-32 to UTF-8 encoding if (wc < 0x80) { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } else if (wc <= 0x7FF) { utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (wc <= 0xFFFF) { utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else if (wc <= 0x10FFFF) { utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 4; } else { // unknown character utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } } } }; template struct wide_string_input_helper { // UTF-16 static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; } else { // get the current character const auto wc = input.get_character(); // UTF-16 to UTF-8 encoding if (wc < 0x80) { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } else if (wc <= 0x7FF) { utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (0xD800 > wc || wc >= 0xE000) { utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else { if (JSON_HEDLEY_UNLIKELY(!input.empty())) { const auto wc2 = static_cast(input.get_character()); const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); utf8_bytes_filled = 4; } else { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } } } } }; // Wraps another input adapter to convert wide character types into individual bytes. template class wide_string_input_adapter { public: using char_type = char; wide_string_input_adapter(BaseInputAdapter base) : base_adapter(base) {} typename std::char_traits::int_type get_character() noexcept { // check if buffer needs to be filled if (utf8_bytes_index == utf8_bytes_filled) { fill_buffer(); JSON_ASSERT(utf8_bytes_filled > 0); JSON_ASSERT(utf8_bytes_index == 0); } // use buffer JSON_ASSERT(utf8_bytes_filled > 0); JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); return utf8_bytes[utf8_bytes_index++]; } // parsing binary with wchar doesn't make sense, but since the parsing mode can be runtime, we need something here template std::size_t get_elements(T* /*dest*/, std::size_t /*count*/ = 1) { JSON_THROW(parse_error::create(112, 1, "wide string type cannot be interpreted as binary data", nullptr)); } private: BaseInputAdapter base_adapter; template void fill_buffer() { wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); } /// a buffer for UTF-8 bytes std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; /// index to the utf8_codes array for the next valid byte std::size_t utf8_bytes_index = 0; /// number of valid bytes in the utf8_codes array std::size_t utf8_bytes_filled = 0; }; template struct iterator_input_adapter_factory { using iterator_type = IteratorType; using char_type = typename std::iterator_traits::value_type; using adapter_type = iterator_input_adapter; static adapter_type create(IteratorType first, IteratorType last) { return adapter_type(std::move(first), std::move(last)); } }; template struct is_iterator_of_multibyte { using value_type = typename std::iterator_traits::value_type; enum { value = sizeof(value_type) > 1 }; }; template struct iterator_input_adapter_factory::value>> { using iterator_type = IteratorType; using char_type = typename std::iterator_traits::value_type; using base_adapter_type = iterator_input_adapter; using adapter_type = wide_string_input_adapter; static adapter_type create(IteratorType first, IteratorType last) { return adapter_type(base_adapter_type(std::move(first), std::move(last))); } }; // General purpose iterator-based input template typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) { using factory_type = iterator_input_adapter_factory; return factory_type::create(first, last); } // Convenience shorthand from container to iterator // Enables ADL on begin(container) and end(container) // Encloses the using declarations in namespace for not to leak them to outside scope namespace container_input_adapter_factory_impl { using std::begin; using std::end; template struct container_input_adapter_factory {}; template struct container_input_adapter_factory< ContainerType, void_t()), end(std::declval()))>> { using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); static adapter_type create(const ContainerType& container) { return input_adapter(begin(container), end(container)); } }; } // namespace container_input_adapter_factory_impl template typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) { return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); } // specialization for std::string using string_input_adapter_type = decltype(input_adapter(std::declval())); #ifndef JSON_NO_IO // Special cases with fast paths inline file_input_adapter input_adapter(std::FILE* file) { if (file == nullptr) { JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); } return file_input_adapter(file); } inline input_stream_adapter input_adapter(std::istream& stream) { return input_stream_adapter(stream); } inline input_stream_adapter input_adapter(std::istream&& stream) { return input_stream_adapter(stream); } #endif // JSON_NO_IO using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); // Null-delimited strings, and the like. template < typename CharT, typename std::enable_if < std::is_pointer::value&& !std::is_array::value&& std::is_integral::type>::value&& sizeof(typename std::remove_pointer::type) == 1, int >::type = 0 > contiguous_bytes_input_adapter input_adapter(CharT b) { if (b == nullptr) { JSON_THROW(parse_error::create(101, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); } auto length = std::strlen(reinterpret_cast(b)); const auto* ptr = reinterpret_cast(b); return input_adapter(ptr, ptr + length); // cppcheck-suppress[nullPointerArithmeticRedundantCheck] } template auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) { return input_adapter(array, array + N); } // This class only handles inputs of input_buffer_adapter type. // It's required so that expressions like {ptr, len} can be implicitly cast // to the correct adapter. class span_input_adapter { public: template < typename CharT, typename std::enable_if < std::is_pointer::value&& std::is_integral::type>::value&& sizeof(typename std::remove_pointer::type) == 1, int >::type = 0 > span_input_adapter(CharT b, std::size_t l) : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} template::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0> span_input_adapter(IteratorType first, IteratorType last) : ia(input_adapter(first, last)) {} contiguous_bytes_input_adapter&& get() { return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) } private: contiguous_bytes_input_adapter ia; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/json_sax.hpp000066400000000000000000000746351477615276400230030ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #include // string #include // enable_if_t #include // move #include // vector #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN /*! @brief SAX interface This class describes the SAX interface used by @ref nlohmann::json::sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input. */ template struct json_sax { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; /*! @brief a null value was read @return whether parsing should proceed */ virtual bool null() = 0; /*! @brief a boolean value was read @param[in] val boolean value @return whether parsing should proceed */ virtual bool boolean(bool val) = 0; /*! @brief an integer number was read @param[in] val integer value @return whether parsing should proceed */ virtual bool number_integer(number_integer_t val) = 0; /*! @brief an unsigned integer number was read @param[in] val unsigned integer value @return whether parsing should proceed */ virtual bool number_unsigned(number_unsigned_t val) = 0; /*! @brief a floating-point number was read @param[in] val floating-point value @param[in] s raw token value @return whether parsing should proceed */ virtual bool number_float(number_float_t val, const string_t& s) = 0; /*! @brief a string value was read @param[in] val string value @return whether parsing should proceed @note It is safe to move the passed string value. */ virtual bool string(string_t& val) = 0; /*! @brief a binary value was read @param[in] val binary value @return whether parsing should proceed @note It is safe to move the passed binary value. */ virtual bool binary(binary_t& val) = 0; /*! @brief the beginning of an object was read @param[in] elements number of object elements or -1 if unknown @return whether parsing should proceed @note binary formats may report the number of elements */ virtual bool start_object(std::size_t elements) = 0; /*! @brief an object key was read @param[in] val object key @return whether parsing should proceed @note It is safe to move the passed string. */ virtual bool key(string_t& val) = 0; /*! @brief the end of an object was read @return whether parsing should proceed */ virtual bool end_object() = 0; /*! @brief the beginning of an array was read @param[in] elements number of array elements or -1 if unknown @return whether parsing should proceed @note binary formats may report the number of elements */ virtual bool start_array(std::size_t elements) = 0; /*! @brief the end of an array was read @return whether parsing should proceed */ virtual bool end_array() = 0; /*! @brief a parse error occurred @param[in] position the position in the input where the error occurs @param[in] last_token the last read token @param[in] ex an exception object describing the error @return whether parsing should proceed (must return false) */ virtual bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex) = 0; json_sax() = default; json_sax(const json_sax&) = default; json_sax(json_sax&&) noexcept = default; json_sax& operator=(const json_sax&) = default; json_sax& operator=(json_sax&&) noexcept = default; virtual ~json_sax() = default; }; namespace detail { constexpr std::size_t unknown_size() { return (std::numeric_limits::max)(); } /*! @brief SAX implementation to create a JSON value from SAX events This class implements the @ref json_sax interface and processes the SAX events to create a JSON value which makes it basically a DOM parser. The structure or hierarchy of the JSON value is managed by the stack `ref_stack` which contains a pointer to the respective array or object for each recursion depth. After successful parsing, the value that is passed by reference to the constructor contains the parsed value. @tparam BasicJsonType the JSON type */ template class json_sax_dom_parser { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using lexer_t = lexer; /*! @param[in,out] r reference to a JSON value that is manipulated while parsing @param[in] allow_exceptions_ whether parse errors yield exceptions */ explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true, lexer_t* lexer_ = nullptr) : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_) {} // make class move-only json_sax_dom_parser(const json_sax_dom_parser&) = delete; json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) ~json_sax_dom_parser() = default; bool null() { handle_value(nullptr); return true; } bool boolean(bool val) { handle_value(val); return true; } bool number_integer(number_integer_t val) { handle_value(val); return true; } bool number_unsigned(number_unsigned_t val) { handle_value(val); return true; } bool number_float(number_float_t val, const string_t& /*unused*/) { handle_value(val); return true; } bool string(string_t& val) { handle_value(val); return true; } bool binary(binary_t& val) { handle_value(std::move(val)); return true; } bool start_object(std::size_t len) { ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); #if JSON_DIAGNOSTIC_POSITIONS // Manually set the start position of the object here. // Ensure this is after the call to handle_value to ensure correct start position. if (m_lexer_ref) { // Lexer has read the first character of the object, so // subtract 1 from the position to get the correct start position. ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; } #endif if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); } return true; } bool key(string_t& val) { JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(ref_stack.back()->is_object()); // add null at given key and store the reference for later object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val)); return true; } bool end_object() { JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(ref_stack.back()->is_object()); #if JSON_DIAGNOSTIC_POSITIONS if (m_lexer_ref) { // Lexer's position is past the closing brace, so set that as the end position. ref_stack.back()->end_position = m_lexer_ref->get_position(); } #endif ref_stack.back()->set_parents(); ref_stack.pop_back(); return true; } bool start_array(std::size_t len) { ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); #if JSON_DIAGNOSTIC_POSITIONS // Manually set the start position of the array here. // Ensure this is after the call to handle_value to ensure correct start position. if (m_lexer_ref) { ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; } #endif if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); } return true; } bool end_array() { JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(ref_stack.back()->is_array()); #if JSON_DIAGNOSTIC_POSITIONS if (m_lexer_ref) { // Lexer's position is past the closing bracket, so set that as the end position. ref_stack.back()->end_position = m_lexer_ref->get_position(); } #endif ref_stack.back()->set_parents(); ref_stack.pop_back(); return true; } template bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const Exception& ex) { errored = true; static_cast(ex); if (allow_exceptions) { JSON_THROW(ex); } return false; } constexpr bool is_errored() const { return errored; } private: #if JSON_DIAGNOSTIC_POSITIONS void handle_diagnostic_positions_for_json_value(BasicJsonType& v) { if (m_lexer_ref) { // Lexer has read past the current field value, so set the end position to the current position. // The start position will be set below based on the length of the string representation // of the value. v.end_position = m_lexer_ref->get_position(); switch (v.type()) { case value_t::boolean: { // 4 and 5 are the string length of "true" and "false" v.start_position = v.end_position - (v.m_data.m_value.boolean ? 4 : 5); break; } case value_t::null: { // 4 is the string length of "null" v.start_position = v.end_position - 4; break; } case value_t::string: { // include the length of the quotes, which is 2 v.start_position = v.end_position - v.m_data.m_value.string->size() - 2; break; } // As we handle the start and end positions for values created during parsing, // we do not expect the following value type to be called. Regardless, set the positions // in case this is created manually or through a different constructor. Exclude from lcov // since the exact condition of this switch is esoteric. // LCOV_EXCL_START case value_t::discarded: { v.end_position = std::string::npos; v.start_position = v.end_position; break; } // LCOV_EXCL_STOP case value_t::binary: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: { v.start_position = v.end_position - m_lexer_ref->get_string().size(); break; } case value_t::object: case value_t::array: { // object and array are handled in start_object() and start_array() handlers // skip setting the values here. break; } default: // LCOV_EXCL_LINE // Handle all possible types discretely, default handler should never be reached. JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert,-warnings-as-errors) LCOV_EXCL_LINE } } } #endif /*! @invariant If the ref stack is empty, then the passed value will be the new root. @invariant If the ref stack contains a value, then it is an array or an object to which we can add elements */ template JSON_HEDLEY_RETURNS_NON_NULL BasicJsonType* handle_value(Value&& v) { if (ref_stack.empty()) { root = BasicJsonType(std::forward(v)); #if JSON_DIAGNOSTIC_POSITIONS handle_diagnostic_positions_for_json_value(root); #endif return &root; } JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); if (ref_stack.back()->is_array()) { ref_stack.back()->m_data.m_value.array->emplace_back(std::forward(v)); #if JSON_DIAGNOSTIC_POSITIONS handle_diagnostic_positions_for_json_value(ref_stack.back()->m_data.m_value.array->back()); #endif return &(ref_stack.back()->m_data.m_value.array->back()); } JSON_ASSERT(ref_stack.back()->is_object()); JSON_ASSERT(object_element); *object_element = BasicJsonType(std::forward(v)); #if JSON_DIAGNOSTIC_POSITIONS handle_diagnostic_positions_for_json_value(*object_element); #endif return object_element; } /// the parsed JSON value BasicJsonType& root; /// stack to model hierarchy of values std::vector ref_stack {}; /// helper to hold the reference for the next object element BasicJsonType* object_element = nullptr; /// whether a syntax error occurred bool errored = false; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; /// the lexer reference to obtain the current position lexer_t* m_lexer_ref = nullptr; }; template class json_sax_dom_callback_parser { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using parser_callback_t = typename BasicJsonType::parser_callback_t; using parse_event_t = typename BasicJsonType::parse_event_t; using lexer_t = lexer; json_sax_dom_callback_parser(BasicJsonType& r, parser_callback_t cb, const bool allow_exceptions_ = true, lexer_t* lexer_ = nullptr) : root(r), callback(std::move(cb)), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_) { keep_stack.push_back(true); } // make class move-only json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) ~json_sax_dom_callback_parser() = default; bool null() { handle_value(nullptr); return true; } bool boolean(bool val) { handle_value(val); return true; } bool number_integer(number_integer_t val) { handle_value(val); return true; } bool number_unsigned(number_unsigned_t val) { handle_value(val); return true; } bool number_float(number_float_t val, const string_t& /*unused*/) { handle_value(val); return true; } bool string(string_t& val) { handle_value(val); return true; } bool binary(binary_t& val) { handle_value(std::move(val)); return true; } bool start_object(std::size_t len) { // check callback for object start const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); keep_stack.push_back(keep); auto val = handle_value(BasicJsonType::value_t::object, true); ref_stack.push_back(val.second); if (ref_stack.back()) { #if JSON_DIAGNOSTIC_POSITIONS // Manually set the start position of the object here. // Ensure this is after the call to handle_value to ensure correct start position. if (m_lexer_ref) { // Lexer has read the first character of the object, so // subtract 1 from the position to get the correct start position. ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; } #endif // check object limit if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); } } return true; } bool key(string_t& val) { BasicJsonType k = BasicJsonType(val); // check callback for key const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); key_keep_stack.push_back(keep); // add discarded value at given key and store the reference for later if (keep && ref_stack.back()) { object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded); } return true; } bool end_object() { if (ref_stack.back()) { if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) { // discard object *ref_stack.back() = discarded; #if JSON_DIAGNOSTIC_POSITIONS // Set start/end positions for discarded object. handle_diagnostic_positions_for_json_value(*ref_stack.back()); #endif } else { #if JSON_DIAGNOSTIC_POSITIONS if (m_lexer_ref) { // Lexer's position is past the closing brace, so set that as the end position. ref_stack.back()->end_position = m_lexer_ref->get_position(); } #endif ref_stack.back()->set_parents(); } } JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(!keep_stack.empty()); ref_stack.pop_back(); keep_stack.pop_back(); if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) { // remove discarded value for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) { if (it->is_discarded()) { ref_stack.back()->erase(it); break; } } } return true; } bool start_array(std::size_t len) { const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); keep_stack.push_back(keep); auto val = handle_value(BasicJsonType::value_t::array, true); ref_stack.push_back(val.second); if (ref_stack.back()) { #if JSON_DIAGNOSTIC_POSITIONS // Manually set the start position of the array here. // Ensure this is after the call to handle_value to ensure correct start position. if (m_lexer_ref) { // Lexer has read the first character of the array, so // subtract 1 from the position to get the correct start position. ref_stack.back()->start_position = m_lexer_ref->get_position() - 1; } #endif // check array limit if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); } } return true; } bool end_array() { bool keep = true; if (ref_stack.back()) { keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); if (keep) { #if JSON_DIAGNOSTIC_POSITIONS if (m_lexer_ref) { // Lexer's position is past the closing bracket, so set that as the end position. ref_stack.back()->end_position = m_lexer_ref->get_position(); } #endif ref_stack.back()->set_parents(); } else { // discard array *ref_stack.back() = discarded; #if JSON_DIAGNOSTIC_POSITIONS // Set start/end positions for discarded array. handle_diagnostic_positions_for_json_value(*ref_stack.back()); #endif } } JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(!keep_stack.empty()); ref_stack.pop_back(); keep_stack.pop_back(); // remove discarded value if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) { ref_stack.back()->m_data.m_value.array->pop_back(); } return true; } template bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const Exception& ex) { errored = true; static_cast(ex); if (allow_exceptions) { JSON_THROW(ex); } return false; } constexpr bool is_errored() const { return errored; } private: #if JSON_DIAGNOSTIC_POSITIONS void handle_diagnostic_positions_for_json_value(BasicJsonType& v) { if (m_lexer_ref) { // Lexer has read past the current field value, so set the end position to the current position. // The start position will be set below based on the length of the string representation // of the value. v.end_position = m_lexer_ref->get_position(); switch (v.type()) { case value_t::boolean: { // 4 and 5 are the string length of "true" and "false" v.start_position = v.end_position - (v.m_data.m_value.boolean ? 4 : 5); break; } case value_t::null: { // 4 is the string length of "null" v.start_position = v.end_position - 4; break; } case value_t::string: { // include the length of the quotes, which is 2 v.start_position = v.end_position - v.m_data.m_value.string->size() - 2; break; } case value_t::discarded: { v.end_position = std::string::npos; v.start_position = v.end_position; break; } case value_t::binary: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: { v.start_position = v.end_position - m_lexer_ref->get_string().size(); break; } case value_t::object: case value_t::array: { // object and array are handled in start_object() and start_array() handlers // skip setting the values here. break; } default: // LCOV_EXCL_LINE // Handle all possible types discretely, default handler should never be reached. JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert,-warnings-as-errors) LCOV_EXCL_LINE } } } #endif /*! @param[in] v value to add to the JSON value we build during parsing @param[in] skip_callback whether we should skip calling the callback function; this is required after start_array() and start_object() SAX events, because otherwise we would call the callback function with an empty array or object, respectively. @invariant If the ref stack is empty, then the passed value will be the new root. @invariant If the ref stack contains a value, then it is an array or an object to which we can add elements @return pair of boolean (whether value should be kept) and pointer (to the passed value in the ref_stack hierarchy; nullptr if not kept) */ template std::pair handle_value(Value&& v, const bool skip_callback = false) { JSON_ASSERT(!keep_stack.empty()); // do not handle this value if we know it would be added to a discarded // container if (!keep_stack.back()) { return {false, nullptr}; } // create value auto value = BasicJsonType(std::forward(v)); #if JSON_DIAGNOSTIC_POSITIONS handle_diagnostic_positions_for_json_value(value); #endif // check callback const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); // do not handle this value if we just learnt it shall be discarded if (!keep) { return {false, nullptr}; } if (ref_stack.empty()) { root = std::move(value); return {true, & root}; } // skip this value if we already decided to skip the parent // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) if (!ref_stack.back()) { return {false, nullptr}; } // we now only expect arrays and objects JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); // array if (ref_stack.back()->is_array()) { ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value)); return {true, & (ref_stack.back()->m_data.m_value.array->back())}; } // object JSON_ASSERT(ref_stack.back()->is_object()); // check if we should store an element for the current key JSON_ASSERT(!key_keep_stack.empty()); const bool store_element = key_keep_stack.back(); key_keep_stack.pop_back(); if (!store_element) { return {false, nullptr}; } JSON_ASSERT(object_element); *object_element = std::move(value); return {true, object_element}; } /// the parsed JSON value BasicJsonType& root; /// stack to model hierarchy of values std::vector ref_stack {}; /// stack to manage which values to keep std::vector keep_stack {}; // NOLINT(readability-redundant-member-init) /// stack to manage which object keys to keep std::vector key_keep_stack {}; // NOLINT(readability-redundant-member-init) /// helper to hold the reference for the next object element BasicJsonType* object_element = nullptr; /// whether a syntax error occurred bool errored = false; /// callback function const parser_callback_t callback = nullptr; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; /// a discarded value for the callback BasicJsonType discarded = BasicJsonType::value_t::discarded; /// the lexer reference to obtain the current position lexer_t* m_lexer_ref = nullptr; }; template class json_sax_acceptor { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; bool null() { return true; } bool boolean(bool /*unused*/) { return true; } bool number_integer(number_integer_t /*unused*/) { return true; } bool number_unsigned(number_unsigned_t /*unused*/) { return true; } bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) { return true; } bool string(string_t& /*unused*/) { return true; } bool binary(binary_t& /*unused*/) { return true; } bool start_object(std::size_t /*unused*/ = detail::unknown_size()) { return true; } bool key(string_t& /*unused*/) { return true; } bool end_object() { return true; } bool start_array(std::size_t /*unused*/ = detail::unknown_size()) { return true; } bool end_array() { return true; } bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) { return false; } }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/lexer.hpp000066400000000000000000001543431477615276400222710ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // array #include // localeconv #include // size_t #include // snprintf #include // strtof, strtod, strtold, strtoll, strtoull #include // initializer_list #include // char_traits, string #include // move #include // vector #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /////////// // lexer // /////////// template class lexer_base { public: /// token types for the parser enum class token_type { uninitialized, ///< indicating the scanner is uninitialized literal_true, ///< the `true` literal literal_false, ///< the `false` literal literal_null, ///< the `null` literal value_string, ///< a string -- use get_string() for actual value value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value value_integer, ///< a signed integer -- use get_number_integer() for actual value value_float, ///< an floating point number -- use get_number_float() for actual value begin_array, ///< the character for array begin `[` begin_object, ///< the character for object begin `{` end_array, ///< the character for array end `]` end_object, ///< the character for object end `}` name_separator, ///< the name separator `:` value_separator, ///< the value separator `,` parse_error, ///< indicating a parse error end_of_input, ///< indicating the end of the input buffer literal_or_value ///< a literal or the begin of a value (only for diagnostics) }; /// return name of values of type token_type (only used for errors) JSON_HEDLEY_RETURNS_NON_NULL JSON_HEDLEY_CONST static const char* token_type_name(const token_type t) noexcept { switch (t) { case token_type::uninitialized: return ""; case token_type::literal_true: return "true literal"; case token_type::literal_false: return "false literal"; case token_type::literal_null: return "null literal"; case token_type::value_string: return "string literal"; case token_type::value_unsigned: case token_type::value_integer: case token_type::value_float: return "number literal"; case token_type::begin_array: return "'['"; case token_type::begin_object: return "'{'"; case token_type::end_array: return "']'"; case token_type::end_object: return "'}'"; case token_type::name_separator: return "':'"; case token_type::value_separator: return "','"; case token_type::parse_error: return ""; case token_type::end_of_input: return "end of input"; case token_type::literal_or_value: return "'[', '{', or a literal"; // LCOV_EXCL_START default: // catch non-enum values return "unknown token"; // LCOV_EXCL_STOP } } }; /*! @brief lexical analysis This class organizes the lexical analysis during JSON deserialization. */ template class lexer : public lexer_base { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using char_type = typename InputAdapterType::char_type; using char_int_type = typename char_traits::int_type; public: using token_type = typename lexer_base::token_type; explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept : ia(std::move(adapter)) , ignore_comments(ignore_comments_) , decimal_point_char(static_cast(get_decimal_point())) {} // delete because of pointer members lexer(const lexer&) = delete; lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) lexer& operator=(lexer&) = delete; lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) ~lexer() = default; private: ///////////////////// // locales ///////////////////// /// return the locale-dependent decimal point JSON_HEDLEY_PURE static char get_decimal_point() noexcept { const auto* loc = localeconv(); JSON_ASSERT(loc != nullptr); return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); } ///////////////////// // scan functions ///////////////////// /*! @brief get codepoint from 4 hex characters following `\u` For input "\u c1 c2 c3 c4" the codepoint is: (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The conversion is done by subtracting the offset (0x30, 0x37, and 0x57) between the ASCII value of the character and the desired integer value. @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or non-hex character) */ int get_codepoint() { // this function only makes sense after reading `\u` JSON_ASSERT(current == 'u'); int codepoint = 0; const auto factors = { 12u, 8u, 4u, 0u }; for (const auto factor : factors) { get(); if (current >= '0' && current <= '9') { codepoint += static_cast((static_cast(current) - 0x30u) << factor); } else if (current >= 'A' && current <= 'F') { codepoint += static_cast((static_cast(current) - 0x37u) << factor); } else if (current >= 'a' && current <= 'f') { codepoint += static_cast((static_cast(current) - 0x57u) << factor); } else { return -1; } } JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); return codepoint; } /*! @brief check if the next byte(s) are inside a given range Adds the current byte and, for each passed range, reads a new byte and checks if it is inside the range. If a violation was detected, set up an error message and return false. Otherwise, return true. @param[in] ranges list of integers; interpreted as list of pairs of inclusive lower and upper bound, respectively @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, 1, 2, or 3 pairs. This precondition is enforced by an assertion. @return true if and only if no range violation was detected */ bool next_byte_in_range(std::initializer_list ranges) { JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); add(current); for (auto range = ranges.begin(); range != ranges.end(); ++range) { get(); if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions) { add(current); } else { error_message = "invalid string: ill-formed UTF-8 byte"; return false; } } return true; } /*! @brief scan a string literal This function scans a string according to Sect. 7 of RFC 8259. While scanning, bytes are escaped and copied into buffer token_buffer. Then the function returns successfully, token_buffer is *not* null-terminated (as it may contain \0 bytes), and token_buffer.size() is the number of bytes in the string. @return token_type::value_string if string could be successfully scanned, token_type::parse_error otherwise @note In case of errors, variable error_message contains a textual description. */ token_type scan_string() { // reset token_buffer (ignore opening quote) reset(); // we entered the function by reading an open quote JSON_ASSERT(current == '\"'); while (true) { // get next character switch (get()) { // end of file while parsing string case char_traits::eof(): { error_message = "invalid string: missing closing quote"; return token_type::parse_error; } // closing quote case '\"': { return token_type::value_string; } // escapes case '\\': { switch (get()) { // quotation mark case '\"': add('\"'); break; // reverse solidus case '\\': add('\\'); break; // solidus case '/': add('/'); break; // backspace case 'b': add('\b'); break; // form feed case 'f': add('\f'); break; // line feed case 'n': add('\n'); break; // carriage return case 'r': add('\r'); break; // tab case 't': add('\t'); break; // unicode escapes case 'u': { const int codepoint1 = get_codepoint(); int codepoint = codepoint1; // start with codepoint1 if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; } // check if code point is a high surrogate if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) { // expect next \uxxxx entry if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) { const int codepoint2 = get_codepoint(); if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; } // check if codepoint2 is a low surrogate if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) { // overwrite codepoint codepoint = static_cast( // high surrogate occupies the most significant 22 bits (static_cast(codepoint1) << 10u) // low surrogate occupies the least significant 15 bits + static_cast(codepoint2) // there is still the 0xD800, 0xDC00 and 0x10000 noise // in the result, so we have to subtract with: // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 - 0x35FDC00u); } else { error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) { error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; return token_type::parse_error; } } // result of the above calculation yields a proper codepoint JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); // translate codepoint into bytes if (codepoint < 0x80) { // 1-byte characters: 0xxxxxxx (ASCII) add(static_cast(codepoint)); } else if (codepoint <= 0x7FF) { // 2-byte characters: 110xxxxx 10xxxxxx add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else if (codepoint <= 0xFFFF) { // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else { // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } break; } // other characters after escape default: error_message = "invalid string: forbidden character after backslash"; return token_type::parse_error; } break; } // invalid control characters case 0x00: { error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; return token_type::parse_error; } case 0x01: { error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; return token_type::parse_error; } case 0x02: { error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; return token_type::parse_error; } case 0x03: { error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; return token_type::parse_error; } case 0x04: { error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; return token_type::parse_error; } case 0x05: { error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; return token_type::parse_error; } case 0x06: { error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; return token_type::parse_error; } case 0x07: { error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; return token_type::parse_error; } case 0x08: { error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; return token_type::parse_error; } case 0x09: { error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; return token_type::parse_error; } case 0x0A: { error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; return token_type::parse_error; } case 0x0B: { error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; return token_type::parse_error; } case 0x0C: { error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; return token_type::parse_error; } case 0x0D: { error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; return token_type::parse_error; } case 0x0E: { error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; return token_type::parse_error; } case 0x0F: { error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; return token_type::parse_error; } case 0x10: { error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; return token_type::parse_error; } case 0x11: { error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; return token_type::parse_error; } case 0x12: { error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; return token_type::parse_error; } case 0x13: { error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; return token_type::parse_error; } case 0x14: { error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; return token_type::parse_error; } case 0x15: { error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; return token_type::parse_error; } case 0x16: { error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; return token_type::parse_error; } case 0x17: { error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; return token_type::parse_error; } case 0x18: { error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; return token_type::parse_error; } case 0x19: { error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; return token_type::parse_error; } case 0x1A: { error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; return token_type::parse_error; } case 0x1B: { error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; return token_type::parse_error; } case 0x1C: { error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; return token_type::parse_error; } case 0x1D: { error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; return token_type::parse_error; } case 0x1E: { error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; return token_type::parse_error; } case 0x1F: { error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; return token_type::parse_error; } // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) case 0x20: case 0x21: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5D: case 0x5E: case 0x5F: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E: case 0x7F: { add(current); break; } // U+0080..U+07FF: bytes C2..DF 80..BF case 0xC2: case 0xC3: case 0xC4: case 0xC5: case 0xC6: case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9: case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE: case 0xDF: { if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) { return token_type::parse_error; } break; } // U+0800..U+0FFF: bytes E0 A0..BF 80..BF case 0xE0: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: case 0xE6: case 0xE7: case 0xE8: case 0xE9: case 0xEA: case 0xEB: case 0xEC: case 0xEE: case 0xEF: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+D000..U+D7FF: bytes ED 80..9F 80..BF case 0xED: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF case 0xF0: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF case 0xF1: case 0xF2: case 0xF3: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF case 0xF4: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // remaining bytes (80..C1 and F5..FF) are ill-formed default: { error_message = "invalid string: ill-formed UTF-8 byte"; return token_type::parse_error; } } } } /*! * @brief scan a comment * @return whether comment could be scanned successfully */ bool scan_comment() { switch (get()) { // single-line comments skip input until a newline or EOF is read case '/': { while (true) { switch (get()) { case '\n': case '\r': case char_traits::eof(): case '\0': return true; default: break; } } } // multi-line comments skip input until */ is read case '*': { while (true) { switch (get()) { case char_traits::eof(): case '\0': { error_message = "invalid comment; missing closing '*/'"; return false; } case '*': { switch (get()) { case '/': return true; default: { unget(); continue; } } } default: continue; } } } // unexpected character after reading '/' default: { error_message = "invalid comment; expecting '/' or '*' after '/'"; return false; } } } JSON_HEDLEY_NON_NULL(2) static void strtof(float& f, const char* str, char** endptr) noexcept { f = std::strtof(str, endptr); } JSON_HEDLEY_NON_NULL(2) static void strtof(double& f, const char* str, char** endptr) noexcept { f = std::strtod(str, endptr); } JSON_HEDLEY_NON_NULL(2) static void strtof(long double& f, const char* str, char** endptr) noexcept { f = std::strtold(str, endptr); } /*! @brief scan a number literal This function scans a string according to Sect. 6 of RFC 8259. The function is realized with a deterministic finite state machine derived from the grammar described in RFC 8259. Starting in state "init", the input is read and used to determined the next state. Only state "done" accepts the number. State "error" is a trap state to model errors. In the table below, "anything" means any character but the ones listed before. state | 0 | 1-9 | e E | + | - | . | anything ---------|----------|----------|----------|---------|---------|----------|----------- init | zero | any1 | [error] | [error] | minus | [error] | [error] minus | zero | any1 | [error] | [error] | [error] | [error] | [error] zero | done | done | exponent | done | done | decimal1 | done any1 | any1 | any1 | exponent | done | done | decimal1 | done decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] decimal2 | decimal2 | decimal2 | exponent | done | done | done | done exponent | any2 | any2 | [error] | sign | sign | [error] | [error] sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] any2 | any2 | any2 | done | done | done | done | done The state machine is realized with one label per state (prefixed with "scan_number_") and `goto` statements between them. The state machine contains cycles, but any cycle can be left when EOF is read. Therefore, the function is guaranteed to terminate. During scanning, the read bytes are stored in token_buffer. This string is then converted to a signed integer, an unsigned integer, or a floating-point number. @return token_type::value_unsigned, token_type::value_integer, or token_type::value_float if number could be successfully scanned, token_type::parse_error otherwise @note The scanner is independent of the current locale. Internally, the locale's decimal point is used instead of `.` to work with the locale-dependent converters. */ token_type scan_number() // lgtm [cpp/use-of-goto] `goto` is used in this function to implement the number-parsing state machine described above. By design, any finite input will eventually reach the "done" state or return token_type::parse_error. In each intermediate state, 1 byte of the input is appended to the token_buffer vector, and only the already initialized variables token_buffer, number_type, and error_message are manipulated. { // reset token_buffer to store the number's bytes reset(); // the type of the parsed number; initially set to unsigned; will be // changed if minus sign, decimal point or exponent is read token_type number_type = token_type::value_unsigned; // state (init): we just found out we need to scan a number switch (current) { case '-': { add(current); goto scan_number_minus; } case '0': { add(current); goto scan_number_zero; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } // all other characters are rejected outside scan_number() default: // LCOV_EXCL_LINE JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE } scan_number_minus: // state: we just parsed a leading minus sign number_type = token_type::value_integer; switch (get()) { case '0': { add(current); goto scan_number_zero; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } default: { error_message = "invalid number; expected digit after '-'"; return token_type::parse_error; } } scan_number_zero: // state: we just parse a zero (maybe with a leading minus sign) switch (get()) { case '.': { add(decimal_point_char); decimal_point_position = token_buffer.size() - 1; goto scan_number_decimal1; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_any1: // state: we just parsed a number 0-9 (maybe with a leading minus sign) switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } case '.': { add(decimal_point_char); decimal_point_position = token_buffer.size() - 1; goto scan_number_decimal1; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_decimal1: // state: we just parsed a decimal point number_type = token_type::value_float; switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_decimal2; } default: { error_message = "invalid number; expected digit after '.'"; return token_type::parse_error; } } scan_number_decimal2: // we just parsed at least one number after a decimal point switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_decimal2; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_exponent: // we just parsed an exponent number_type = token_type::value_float; switch (get()) { case '+': case '-': { add(current); goto scan_number_sign; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: { error_message = "invalid number; expected '+', '-', or digit after exponent"; return token_type::parse_error; } } scan_number_sign: // we just parsed an exponent sign switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: { error_message = "invalid number; expected digit after exponent sign"; return token_type::parse_error; } } scan_number_any2: // we just parsed a number after the exponent or exponent sign switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: goto scan_number_done; } scan_number_done: // unget the character after the number (we only read it to know that // we are done scanning a number) unget(); char* endptr = nullptr; // NOLINT(misc-const-correctness,cppcoreguidelines-pro-type-vararg,hicpp-vararg) errno = 0; // try to parse integers first and fall back to floats if (number_type == token_type::value_unsigned) { const auto x = std::strtoull(token_buffer.data(), &endptr, 10); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); if (errno != ERANGE) { value_unsigned = static_cast(x); if (value_unsigned == x) { return token_type::value_unsigned; } } } else if (number_type == token_type::value_integer) { const auto x = std::strtoll(token_buffer.data(), &endptr, 10); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); if (errno != ERANGE) { value_integer = static_cast(x); if (value_integer == x) { return token_type::value_integer; } } } // this code is reached if we parse a floating-point number or if an // integer conversion above failed strtof(value_float, token_buffer.data(), &endptr); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); return token_type::value_float; } /*! @param[in] literal_text the literal text to expect @param[in] length the length of the passed literal text @param[in] return_type the token type to return on success */ JSON_HEDLEY_NON_NULL(2) token_type scan_literal(const char_type* literal_text, const std::size_t length, token_type return_type) { JSON_ASSERT(char_traits::to_char_type(current) == literal_text[0]); for (std::size_t i = 1; i < length; ++i) { if (JSON_HEDLEY_UNLIKELY(char_traits::to_char_type(get()) != literal_text[i])) { error_message = "invalid literal"; return token_type::parse_error; } } return return_type; } ///////////////////// // input management ///////////////////// /// reset token_buffer; current character is beginning of token void reset() noexcept { token_buffer.clear(); token_string.clear(); decimal_point_position = std::string::npos; token_string.push_back(char_traits::to_char_type(current)); } /* @brief get next character from the input This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns a `char_traits::eof()` in that case. Stores the scanned characters for use in error messages. @return character read from the input */ char_int_type get() { ++position.chars_read_total; ++position.chars_read_current_line; if (next_unget) { // just reset the next_unget variable and work with current next_unget = false; } else { current = ia.get_character(); } if (JSON_HEDLEY_LIKELY(current != char_traits::eof())) { token_string.push_back(char_traits::to_char_type(current)); } if (current == '\n') { ++position.lines_read; position.chars_read_current_line = 0; } return current; } /*! @brief unget current character (read it again on next get) We implement unget by setting variable next_unget to true. The input is not changed - we just simulate ungetting by modifying chars_read_total, chars_read_current_line, and token_string. The next call to get() will behave as if the unget character is read again. */ void unget() { next_unget = true; --position.chars_read_total; // in case we "unget" a newline, we have to also decrement the lines_read if (position.chars_read_current_line == 0) { if (position.lines_read > 0) { --position.lines_read; } } else { --position.chars_read_current_line; } if (JSON_HEDLEY_LIKELY(current != char_traits::eof())) { JSON_ASSERT(!token_string.empty()); token_string.pop_back(); } } /// add a character to token_buffer void add(char_int_type c) { token_buffer.push_back(static_cast(c)); } public: ///////////////////// // value getters ///////////////////// /// return integer value constexpr number_integer_t get_number_integer() const noexcept { return value_integer; } /// return unsigned integer value constexpr number_unsigned_t get_number_unsigned() const noexcept { return value_unsigned; } /// return floating-point value constexpr number_float_t get_number_float() const noexcept { return value_float; } /// return current string value (implicitly resets the token; useful only once) string_t& get_string() { // translate decimal points from locale back to '.' (#4084) if (decimal_point_char != '.' && decimal_point_position != std::string::npos) { token_buffer[decimal_point_position] = '.'; } return token_buffer; } ///////////////////// // diagnostics ///////////////////// /// return position of last read token constexpr position_t get_position() const noexcept { return position; } /// return the last read token (for errors only). Will never contain EOF /// (an arbitrary value that is not a valid char value, often -1), because /// 255 may legitimately occur. May contain NUL, which should be escaped. std::string get_token_string() const { // escape control characters std::string result; for (const auto c : token_string) { if (static_cast(c) <= '\x1F') { // escape control characters std::array cs{{}}; static_cast((std::snprintf)(cs.data(), cs.size(), "", static_cast(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) result += cs.data(); } else { // add character as is result.push_back(static_cast(c)); } } return result; } /// return syntax error message JSON_HEDLEY_RETURNS_NON_NULL constexpr const char* get_error_message() const noexcept { return error_message; } ///////////////////// // actual scanner ///////////////////// /*! @brief skip the UTF-8 byte order mark @return true iff there is no BOM or the correct BOM has been skipped */ bool skip_bom() { if (get() == 0xEF) { // check if we completely parse the BOM return get() == 0xBB && get() == 0xBF; } // the first character is not the beginning of the BOM; unget it to // process is later unget(); return true; } void skip_whitespace() { do { get(); } while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); } token_type scan() { // initially, skip the BOM if (position.chars_read_total == 0 && !skip_bom()) { error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; return token_type::parse_error; } // read next character and ignore whitespace skip_whitespace(); // ignore comments while (ignore_comments && current == '/') { if (!scan_comment()) { return token_type::parse_error; } // skip following whitespace skip_whitespace(); } switch (current) { // structural characters case '[': return token_type::begin_array; case ']': return token_type::end_array; case '{': return token_type::begin_object; case '}': return token_type::end_object; case ':': return token_type::name_separator; case ',': return token_type::value_separator; // literals case 't': { std::array true_literal = {{static_cast('t'), static_cast('r'), static_cast('u'), static_cast('e')}}; return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); } case 'f': { std::array false_literal = {{static_cast('f'), static_cast('a'), static_cast('l'), static_cast('s'), static_cast('e')}}; return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); } case 'n': { std::array null_literal = {{static_cast('n'), static_cast('u'), static_cast('l'), static_cast('l')}}; return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); } // string case '\"': return scan_string(); // number case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return scan_number(); // end of input (the null byte is needed when parsing from // string literals) case '\0': case char_traits::eof(): return token_type::end_of_input; // error default: error_message = "invalid literal"; return token_type::parse_error; } } private: /// input adapter InputAdapterType ia; /// whether comments should be ignored (true) or signaled as errors (false) const bool ignore_comments = false; /// the current character char_int_type current = char_traits::eof(); /// whether the next get() call should just return current bool next_unget = false; /// the start position of the current token position_t position {}; /// raw input token string (for error messages) std::vector token_string {}; /// buffer for variable-length tokens (numbers, strings) string_t token_buffer {}; /// a description of occurred lexer errors const char* error_message = ""; // number values number_integer_t value_integer = 0; number_unsigned_t value_unsigned = 0; number_float_t value_float = 0; /// the decimal point const char_int_type decimal_point_char = '.'; /// the position of the decimal point in the input std::size_t decimal_point_position = std::string::npos; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/parser.hpp000066400000000000000000000464001477615276400224400ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // isfinite #include // uint8_t #include // function #include // string #include // move #include // vector #include #include #include #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { //////////// // parser // //////////// enum class parse_event_t : std::uint8_t { /// the parser read `{` and started to process a JSON object object_start, /// the parser read `}` and finished processing a JSON object object_end, /// the parser read `[` and started to process a JSON array array_start, /// the parser read `]` and finished processing a JSON array array_end, /// the parser read a key of a value in an object key, /// the parser finished reading a JSON value value }; template using parser_callback_t = std::function; /*! @brief syntax analysis This class implements a recursive descent parser. */ template class parser { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using lexer_t = lexer; using token_type = typename lexer_t::token_type; public: /// a parser reading from an input adapter explicit parser(InputAdapterType&& adapter, parser_callback_t cb = nullptr, const bool allow_exceptions_ = true, const bool skip_comments = false) : callback(std::move(cb)) , m_lexer(std::move(adapter), skip_comments) , allow_exceptions(allow_exceptions_) { // read first token get_token(); } /*! @brief public parser interface @param[in] strict whether to expect the last token to be EOF @param[in,out] result parsed JSON value @throw parse_error.101 in case of an unexpected token @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails */ void parse(const bool strict, BasicJsonType& result) { if (callback) { json_sax_dom_callback_parser sdp(result, callback, allow_exceptions, &m_lexer); sax_parse_internal(&sdp); // in strict mode, input must be completely read if (strict && (get_token() != token_type::end_of_input)) { sdp.parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); } // in case of an error, return discarded value if (sdp.is_errored()) { result = value_t::discarded; return; } // set top-level value to null if it was discarded by the callback // function if (result.is_discarded()) { result = nullptr; } } else { json_sax_dom_parser sdp(result, allow_exceptions, &m_lexer); sax_parse_internal(&sdp); // in strict mode, input must be completely read if (strict && (get_token() != token_type::end_of_input)) { sdp.parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); } // in case of an error, return discarded value if (sdp.is_errored()) { result = value_t::discarded; return; } } result.assert_invariant(); } /*! @brief public accept interface @param[in] strict whether to expect the last token to be EOF @return whether the input is a proper JSON text */ bool accept(const bool strict = true) { json_sax_acceptor sax_acceptor; return sax_parse(&sax_acceptor, strict); } template JSON_HEDLEY_NON_NULL(2) bool sax_parse(SAX* sax, const bool strict = true) { (void)detail::is_sax_static_asserts {}; const bool result = sax_parse_internal(sax); // strict mode: next byte must be EOF if (result && strict && (get_token() != token_type::end_of_input)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); } return result; } private: template JSON_HEDLEY_NON_NULL(2) bool sax_parse_internal(SAX* sax) { // stack to remember the hierarchy of structured values we are parsing // true = array; false = object std::vector states; // value to avoid a goto (see comment where set to true) bool skip_to_state_evaluation = false; while (true) { if (!skip_to_state_evaluation) { // invariant: get_token() was called before each iteration switch (last_token) { case token_type::begin_object: { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(detail::unknown_size()))) { return false; } // closing } -> we are done if (get_token() == token_type::end_object) { if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) { return false; } break; } // parse key if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); } if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); } // remember we are now inside an object states.push_back(false); // parse values get_token(); continue; } case token_type::begin_array: { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(detail::unknown_size()))) { return false; } // closing ] -> we are done if (get_token() == token_type::end_array) { if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) { return false; } break; } // remember we are now inside an array states.push_back(true); // parse values (no need to call get_token) continue; } case token_type::value_float: { const auto res = m_lexer.get_number_float(); if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), out_of_range::create(406, concat("number overflow parsing '", m_lexer.get_token_string(), '\''), nullptr)); } if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) { return false; } break; } case token_type::literal_false: { if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) { return false; } break; } case token_type::literal_null: { if (JSON_HEDLEY_UNLIKELY(!sax->null())) { return false; } break; } case token_type::literal_true: { if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) { return false; } break; } case token_type::value_integer: { if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) { return false; } break; } case token_type::value_string: { if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) { return false; } break; } case token_type::value_unsigned: { if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) { return false; } break; } case token_type::parse_error: { // using "uninitialized" to avoid "expected" message return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr)); } case token_type::end_of_input: { if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr)); } return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); } case token_type::uninitialized: case token_type::end_array: case token_type::end_object: case token_type::name_separator: case token_type::value_separator: case token_type::literal_or_value: default: // the last token was unexpected { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); } } } else { skip_to_state_evaluation = false; } // we reached this line after we successfully parsed a value if (states.empty()) { // empty stack: we reached the end of the hierarchy: done return true; } if (states.back()) // array { // comma -> next value if (get_token() == token_type::value_separator) { // parse a new value get_token(); continue; } // closing ] if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) { if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) { return false; } // We are done with this array. Before we can parse a // new value, we need to evaluate the new state first. // By setting skip_to_state_evaluation to false, we // are effectively jumping to the beginning of this if. JSON_ASSERT(!states.empty()); states.pop_back(); skip_to_state_evaluation = true; continue; } return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), nullptr)); } // states.back() is false -> object // comma -> next value if (get_token() == token_type::value_separator) { // parse key if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); } if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); } // parse values get_token(); continue; } // closing } if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) { if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) { return false; } // We are done with this object. Before we can parse a // new value, we need to evaluate the new state first. // By setting skip_to_state_evaluation to false, we // are effectively jumping to the beginning of this if. JSON_ASSERT(!states.empty()); states.pop_back(); skip_to_state_evaluation = true; continue; } return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), nullptr)); } } /// get next token from lexer token_type get_token() { return last_token = m_lexer.scan(); } std::string exception_message(const token_type expected, const std::string& context) { std::string error_msg = "syntax error "; if (!context.empty()) { error_msg += concat("while parsing ", context, ' '); } error_msg += "- "; if (last_token == token_type::parse_error) { error_msg += concat(m_lexer.get_error_message(), "; last read: '", m_lexer.get_token_string(), '\''); } else { error_msg += concat("unexpected ", lexer_t::token_type_name(last_token)); } if (expected != token_type::uninitialized) { error_msg += concat("; expected ", lexer_t::token_type_name(expected)); } return error_msg; } private: /// callback function const parser_callback_t callback = nullptr; /// the type of the last read token token_type last_token = token_type::uninitialized; /// the lexer lexer_t m_lexer; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/input/position_t.hpp000066400000000000000000000017001477615276400233250ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // size_t #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /// struct to capture the start position of the current token struct position_t { /// the total number of characters read std::size_t chars_read_total = 0; /// the number of characters read in the current line std::size_t chars_read_current_line = 0; /// the number of lines read std::size_t lines_read = 0; /// conversion to size_t to preserve SAX interface constexpr operator size_t() const { return chars_read_total; } }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/iterators/000077500000000000000000000000001477615276400213045ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/iterators/internal_iterator.hpp000066400000000000000000000020611477615276400255410ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /*! @brief an iterator value @note This structure could easily be a union, but MSVC currently does not allow unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. */ template struct internal_iterator { /// iterator for JSON objects typename BasicJsonType::object_t::iterator object_iterator {}; /// iterator for JSON arrays typename BasicJsonType::array_t::iterator array_iterator {}; /// generic iterator for all other types primitive_iterator_t primitive_iterator {}; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/iterators/iter_impl.hpp000066400000000000000000000604451477615276400240120ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next #include // conditional, is_const, remove_const #include #include #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { // forward declare, to be able to friend it later on template class iteration_proxy; template class iteration_proxy_value; /*! @brief a template for a bidirectional iterator for the @ref basic_json class This class implements a both iterators (iterator and const_iterator) for the @ref basic_json class. @note An iterator is called *initialized* when a pointer to a JSON value has been set (e.g., by a constructor or a copy assignment). If the iterator is default-constructed, it is *uninitialized* and most methods are undefined. **The library uses assertions to detect calls on uninitialized iterators.** @requirement The class satisfies the following concept requirements: - [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): The iterator that can be moved can be moved in both directions (i.e. incremented and decremented). @since version 1.0.0, simplified in version 2.0.9, change to bidirectional iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) */ template class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) { /// the iterator with BasicJsonType of different const-ness using other_iter_impl = iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; /// allow basic_json to access private members friend other_iter_impl; friend BasicJsonType; friend iteration_proxy; friend iteration_proxy_value; using object_t = typename BasicJsonType::object_t; using array_t = typename BasicJsonType::array_t; // make sure BasicJsonType is basic_json or const basic_json static_assert(is_basic_json::type>::value, "iter_impl only accepts (const) basic_json"); // superficial check for the LegacyBidirectionalIterator named requirement static_assert(std::is_base_of::value && std::is_base_of::iterator_category>::value, "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement."); public: /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. /// The C++ Standard has never required user-defined iterators to derive from std::iterator. /// A user-defined iterator should provide publicly accessible typedefs named /// iterator_category, value_type, difference_type, pointer, and reference. /// Note that value_type is required to be non-const, even for constant iterators. using iterator_category = std::bidirectional_iterator_tag; /// the type of the values when the iterator is dereferenced using value_type = typename BasicJsonType::value_type; /// a type to represent differences between iterators using difference_type = typename BasicJsonType::difference_type; /// defines a pointer to the type iterated over (value_type) using pointer = typename std::conditional::value, typename BasicJsonType::const_pointer, typename BasicJsonType::pointer>::type; /// defines a reference to the type iterated over (value_type) using reference = typename std::conditional::value, typename BasicJsonType::const_reference, typename BasicJsonType::reference>::type; iter_impl() = default; ~iter_impl() = default; iter_impl(iter_impl&&) noexcept = default; iter_impl& operator=(iter_impl&&) noexcept = default; /*! @brief constructor for a given JSON instance @param[in] object pointer to a JSON object for this iterator @pre object != nullptr @post The iterator is initialized; i.e. `m_object != nullptr`. */ explicit iter_impl(pointer object) noexcept : m_object(object) { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { m_it.object_iterator = typename object_t::iterator(); break; } case value_t::array: { m_it.array_iterator = typename array_t::iterator(); break; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { m_it.primitive_iterator = primitive_iterator_t(); break; } } } /*! @note The conventional copy constructor and copy assignment are implicitly defined. Combined with the following converting constructor and assignment, they support: (1) copy from iterator to iterator, (2) copy from const iterator to const iterator, and (3) conversion from iterator to const iterator. However conversion from const iterator to iterator is not defined. */ /*! @brief const copy constructor @param[in] other const iterator to copy from @note This copy constructor had to be defined explicitly to circumvent a bug occurring on msvc v19.0 compiler (VS 2015) debug build. For more information refer to: https://github.com/nlohmann/json/issues/1608 */ iter_impl(const iter_impl& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} /*! @brief converting assignment @param[in] other const iterator to copy from @return const/non-const iterator @note It is not checked whether @a other is initialized. */ iter_impl& operator=(const iter_impl& other) noexcept { if (&other != this) { m_object = other.m_object; m_it = other.m_it; } return *this; } /*! @brief converting constructor @param[in] other non-const iterator to copy from @note It is not checked whether @a other is initialized. */ iter_impl(const iter_impl::type>& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} /*! @brief converting assignment @param[in] other non-const iterator to copy from @return const/non-const iterator @note It is not checked whether @a other is initialized. */ iter_impl& operator=(const iter_impl::type>& other) noexcept // NOLINT(cert-oop54-cpp) { m_object = other.m_object; m_it = other.m_it; return *this; } JSON_PRIVATE_UNLESS_TESTED: /*! @brief set the iterator to the first value @pre The iterator is initialized; i.e. `m_object != nullptr`. */ void set_begin() noexcept { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { m_it.object_iterator = m_object->m_data.m_value.object->begin(); break; } case value_t::array: { m_it.array_iterator = m_object->m_data.m_value.array->begin(); break; } case value_t::null: { // set to end so begin()==end() is true: null is empty m_it.primitive_iterator.set_end(); break; } case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { m_it.primitive_iterator.set_begin(); break; } } } /*! @brief set the iterator past the last value @pre The iterator is initialized; i.e. `m_object != nullptr`. */ void set_end() noexcept { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { m_it.object_iterator = m_object->m_data.m_value.object->end(); break; } case value_t::array: { m_it.array_iterator = m_object->m_data.m_value.array->end(); break; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { m_it.primitive_iterator.set_end(); break; } } } public: /*! @brief return a reference to the value pointed to by the iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference operator*() const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); return m_it.object_iterator->second; } case value_t::array: { JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); return *m_it.array_iterator; } case value_t::null: JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return *m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); } } } /*! @brief dereference the iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ pointer operator->() const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); return &(m_it.object_iterator->second); } case value_t::array: { JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); return &*m_it.array_iterator; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); } } } /*! @brief post-increment (it++) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp) { auto result = *this; ++(*this); return result; } /*! @brief pre-increment (++it) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator++() { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { std::advance(m_it.object_iterator, 1); break; } case value_t::array: { std::advance(m_it.array_iterator, 1); break; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { ++m_it.primitive_iterator; break; } } return *this; } /*! @brief post-decrement (it--) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp) { auto result = *this; --(*this); return result; } /*! @brief pre-decrement (--it) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator--() { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: { std::advance(m_it.object_iterator, -1); break; } case value_t::array: { std::advance(m_it.array_iterator, -1); break; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { --m_it.primitive_iterator; break; } } return *this; } /*! @brief comparison: equal @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. */ template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > bool operator==(const IterImpl& other) const { // if objects are not the same, the comparison is undefined if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); } // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493 if (m_object == nullptr) { return true; } switch (m_object->m_data.m_type) { case value_t::object: return (m_it.object_iterator == other.m_it.object_iterator); case value_t::array: return (m_it.array_iterator == other.m_it.array_iterator); case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: return (m_it.primitive_iterator == other.m_it.primitive_iterator); } } /*! @brief comparison: not equal @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. */ template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > bool operator!=(const IterImpl& other) const { return !operator==(other); } /*! @brief comparison: smaller @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. */ bool operator<(const iter_impl& other) const { // if objects are not the same, the comparison is undefined if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); } // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493 if (m_object == nullptr) { // the iterators are both value-initialized and are to be considered equal, but this function checks for smaller, so we return false return false; } switch (m_object->m_data.m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object)); case value_t::array: return (m_it.array_iterator < other.m_it.array_iterator); case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: return (m_it.primitive_iterator < other.m_it.primitive_iterator); } } /*! @brief comparison: less than or equal @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. */ bool operator<=(const iter_impl& other) const { return !other.operator < (*this); } /*! @brief comparison: greater than @pre (1) Both iterators are initialized to point to the same object, or (2) both iterators are value-initialized. */ bool operator>(const iter_impl& other) const { return !operator<=(other); } /*! @brief comparison: greater than or equal @pre (1) The iterator is initialized; i.e. `m_object != nullptr`, or (2) both iterators are value-initialized. */ bool operator>=(const iter_impl& other) const { return !operator<(other); } /*! @brief add to iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator+=(difference_type i) { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); case value_t::array: { std::advance(m_it.array_iterator, i); break; } case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { m_it.primitive_iterator += i; break; } } return *this; } /*! @brief subtract from iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator-=(difference_type i) { return operator+=(-i); } /*! @brief add to iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator+(difference_type i) const { auto result = *this; result += i; return result; } /*! @brief addition of distance and iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ friend iter_impl operator+(difference_type i, const iter_impl& it) { auto result = it; result += i; return result; } /*! @brief subtract from iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator-(difference_type i) const { auto result = *this; result -= i; return result; } /*! @brief return difference @pre The iterator is initialized; i.e. `m_object != nullptr`. */ difference_type operator-(const iter_impl& other) const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); case value_t::array: return m_it.array_iterator - other.m_it.array_iterator; case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: return m_it.primitive_iterator - other.m_it.primitive_iterator; } } /*! @brief access to successor @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference operator[](difference_type n) const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_data.m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object)); case value_t::array: return *std::next(m_it.array_iterator, n); case value_t::null: JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) { return *m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); } } } /*! @brief return the key of an object iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ const typename object_t::key_type& key() const { JSON_ASSERT(m_object != nullptr); if (JSON_HEDLEY_LIKELY(m_object->is_object())) { return m_it.object_iterator->first; } JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object)); } /*! @brief return the value of an iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference value() const { return operator*(); } JSON_PRIVATE_UNLESS_TESTED: /// associated JSON instance pointer m_object = nullptr; /// the actual iterator of the associated instance internal_iterator::type> m_it {}; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/iterators/iteration_proxy.hpp000066400000000000000000000176111477615276400252620ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // size_t #include // forward_iterator_tag #include // tuple_size, get, tuple_element #include // move #if JSON_HAS_RANGES #include // enable_borrowed_range #endif #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template class iteration_proxy_value { public: using difference_type = std::ptrdiff_t; using value_type = iteration_proxy_value; using pointer = value_type *; using reference = value_type &; using iterator_category = std::forward_iterator_tag; using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; private: /// the iterator IteratorType anchor{}; /// an index for arrays (used to create key names) std::size_t array_index = 0; /// last stringified array index mutable std::size_t array_index_last = 0; /// a string representation of the array index mutable string_type array_index_str = "0"; /// an empty string (to return a reference for primitive values) string_type empty_str{}; public: explicit iteration_proxy_value() = default; explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) noexcept(std::is_nothrow_move_constructible::value && std::is_nothrow_default_constructible::value) : anchor(std::move(it)) , array_index(array_index_) {} iteration_proxy_value(iteration_proxy_value const&) = default; iteration_proxy_value& operator=(iteration_proxy_value const&) = default; // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions iteration_proxy_value(iteration_proxy_value&&) noexcept(std::is_nothrow_move_constructible::value && std::is_nothrow_move_constructible::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations) iteration_proxy_value& operator=(iteration_proxy_value&&) noexcept(std::is_nothrow_move_assignable::value && std::is_nothrow_move_assignable::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations) ~iteration_proxy_value() = default; /// dereference operator (needed for range-based for) const iteration_proxy_value& operator*() const { return *this; } /// increment operator (needed for range-based for) iteration_proxy_value& operator++() { ++anchor; ++array_index; return *this; } iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp) { auto tmp = iteration_proxy_value(anchor, array_index); ++anchor; ++array_index; return tmp; } /// equality operator (needed for InputIterator) bool operator==(const iteration_proxy_value& o) const { return anchor == o.anchor; } /// inequality operator (needed for range-based for) bool operator!=(const iteration_proxy_value& o) const { return anchor != o.anchor; } /// return key of the iterator const string_type& key() const { JSON_ASSERT(anchor.m_object != nullptr); switch (anchor.m_object->type()) { // use integer array index as key case value_t::array: { if (array_index != array_index_last) { int_to_string( array_index_str, array_index ); array_index_last = array_index; } return array_index_str; } // use key from the object case value_t::object: return anchor.key(); // use an empty key for all primitive types case value_t::null: case value_t::string: case value_t::boolean: case value_t::number_integer: case value_t::number_unsigned: case value_t::number_float: case value_t::binary: case value_t::discarded: default: return empty_str; } } /// return value of the iterator typename IteratorType::reference value() const { return anchor.value(); } }; /// proxy class for the items() function template class iteration_proxy { private: /// the container to iterate typename IteratorType::pointer container = nullptr; public: explicit iteration_proxy() = default; /// construct iteration proxy from a container explicit iteration_proxy(typename IteratorType::reference cont) noexcept : container(&cont) {} iteration_proxy(iteration_proxy const&) = default; iteration_proxy& operator=(iteration_proxy const&) = default; iteration_proxy(iteration_proxy&&) noexcept = default; iteration_proxy& operator=(iteration_proxy&&) noexcept = default; ~iteration_proxy() = default; /// return iterator begin (needed for range-based for) iteration_proxy_value begin() const noexcept { return iteration_proxy_value(container->begin()); } /// return iterator end (needed for range-based for) iteration_proxy_value end() const noexcept { return iteration_proxy_value(container->end()); } }; // Structured Bindings Support // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 template = 0> auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) { return i.key(); } // Structured Bindings Support // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 template = 0> auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) { return i.value(); } } // namespace detail NLOHMANN_JSON_NAMESPACE_END // The Addition to the STD Namespace is required to add // Structured Bindings Support to the iteration_proxy_value class // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 namespace std { #if defined(__clang__) // Fix: https://github.com/nlohmann/json/issues/1401 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmismatched-tags" #endif template class tuple_size<::nlohmann::detail::iteration_proxy_value> // NOLINT(cert-dcl58-cpp) : public std::integral_constant {}; template class tuple_element> // NOLINT(cert-dcl58-cpp) { public: using type = decltype( get(std::declval < ::nlohmann::detail::iteration_proxy_value> ())); }; #if defined(__clang__) #pragma clang diagnostic pop #endif } // namespace std #if JSON_HAS_RANGES template inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy> = true; #endif json-3.12.0/include/nlohmann/detail/iterators/iterator_traits.hpp000066400000000000000000000033271477615276400252410ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // random_access_iterator_tag #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template struct iterator_types {}; template struct iterator_types < It, void_t> { using difference_type = typename It::difference_type; using value_type = typename It::value_type; using pointer = typename It::pointer; using reference = typename It::reference; using iterator_category = typename It::iterator_category; }; // This is required as some compilers implement std::iterator_traits in a way that // doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. template struct iterator_traits { }; template struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> : iterator_types { }; template struct iterator_traits::value>> { using iterator_category = std::random_access_iterator_tag; using value_type = T; using difference_type = ptrdiff_t; using pointer = T*; using reference = T&; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/iterators/json_reverse_iterator.hpp000066400000000000000000000074271477615276400264440ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // ptrdiff_t #include // reverse_iterator #include // declval #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { ////////////////////// // reverse_iterator // ////////////////////// /*! @brief a template for a reverse iterator class @tparam Base the base iterator type to reverse. Valid types are @ref iterator (to create @ref reverse_iterator) and @ref const_iterator (to create @ref const_reverse_iterator). @requirement The class satisfies the following concept requirements: - [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): The iterator that can be moved can be moved in both directions (i.e. incremented and decremented). - [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): It is possible to write to the pointed-to element (only if @a Base is @ref iterator). @since version 1.0.0 */ template class json_reverse_iterator : public std::reverse_iterator { public: using difference_type = std::ptrdiff_t; /// shortcut to the reverse iterator adapter using base_iterator = std::reverse_iterator; /// the reference type for the pointed-to element using reference = typename Base::reference; /// create reverse iterator from iterator explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept : base_iterator(it) {} /// create reverse iterator from base class explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} /// post-increment (it++) json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp) { return static_cast(base_iterator::operator++(1)); } /// pre-increment (++it) json_reverse_iterator& operator++() { return static_cast(base_iterator::operator++()); } /// post-decrement (it--) json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp) { return static_cast(base_iterator::operator--(1)); } /// pre-decrement (--it) json_reverse_iterator& operator--() { return static_cast(base_iterator::operator--()); } /// add to iterator json_reverse_iterator& operator+=(difference_type i) { return static_cast(base_iterator::operator+=(i)); } /// add to iterator json_reverse_iterator operator+(difference_type i) const { return static_cast(base_iterator::operator+(i)); } /// subtract from iterator json_reverse_iterator operator-(difference_type i) const { return static_cast(base_iterator::operator-(i)); } /// return difference difference_type operator-(const json_reverse_iterator& other) const { return base_iterator(*this) - base_iterator(other); } /// access to successor reference operator[](difference_type n) const { return *(this->operator+(n)); } /// return the key of an object iterator auto key() const -> decltype(std::declval().key()) { auto it = --this->base(); return it.key(); } /// return the value of an iterator reference value() const { auto it = --this->base(); return it.operator * (); } }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/iterators/primitive_iterator.hpp000066400000000000000000000062351477615276400257440ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // ptrdiff_t #include // numeric_limits #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /* @brief an iterator for primitive JSON types This class models an iterator for primitive JSON types (boolean, number, string). It's only purpose is to allow the iterator/const_iterator classes to "iterate" over primitive values. Internally, the iterator is modeled by a `difference_type` variable. Value begin_value (`0`) models the begin, end_value (`1`) models past the end. */ class primitive_iterator_t { private: using difference_type = std::ptrdiff_t; static constexpr difference_type begin_value = 0; static constexpr difference_type end_value = begin_value + 1; JSON_PRIVATE_UNLESS_TESTED: /// iterator as signed integer type difference_type m_it = (std::numeric_limits::min)(); public: constexpr difference_type get_value() const noexcept { return m_it; } /// set iterator to a defined beginning void set_begin() noexcept { m_it = begin_value; } /// set iterator to a defined past the end void set_end() noexcept { m_it = end_value; } /// return whether the iterator can be dereferenced constexpr bool is_begin() const noexcept { return m_it == begin_value; } /// return whether the iterator is at end constexpr bool is_end() const noexcept { return m_it == end_value; } friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it == rhs.m_it; } friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it < rhs.m_it; } primitive_iterator_t operator+(difference_type n) noexcept { auto result = *this; result += n; return result; } friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it - rhs.m_it; } primitive_iterator_t& operator++() noexcept { ++m_it; return *this; } primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp) { auto result = *this; ++m_it; return result; } primitive_iterator_t& operator--() noexcept { --m_it; return *this; } primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp) { auto result = *this; --m_it; return result; } primitive_iterator_t& operator+=(difference_type n) noexcept { m_it += n; return *this; } primitive_iterator_t& operator-=(difference_type n) noexcept { m_it -= n; return *this; } }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/json_custom_base_class.hpp000066400000000000000000000022341477615276400245240ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // conditional, is_same #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { /*! @brief Default base class of the @ref basic_json class. So that the correct implementations of the copy / move ctors / assign operators of @ref basic_json do not require complex case distinctions (no base class / custom base class used as customization point), @ref basic_json always has a base class. By default, this class is used because it is empty and thus has no effect on the behavior of @ref basic_json. */ struct json_default_base {}; template using json_base_class = typename std::conditional < std::is_same::value, json_default_base, T >::type; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/json_pointer.hpp000066400000000000000000001105171477615276400225170ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // all_of #include // isdigit #include // errno, ERANGE #include // strtoull #ifndef JSON_NO_IO #include // ostream #endif // JSON_NO_IO #include // max #include // accumulate #include // string #include // move #include // vector #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document /// @sa https://json.nlohmann.me/api/json_pointer/ template class json_pointer { // allow basic_json to access private members NLOHMANN_BASIC_JSON_TPL_DECLARATION friend class basic_json; template friend class json_pointer; template struct string_t_helper { using type = T; }; NLOHMANN_BASIC_JSON_TPL_DECLARATION struct string_t_helper { using type = StringType; }; public: // for backwards compatibility accept BasicJsonType using string_t = typename string_t_helper::type; /// @brief create JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/ explicit json_pointer(const string_t& s = "") : reference_tokens(split(s)) {} /// @brief return a string representation of the JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/to_string/ string_t to_string() const { return std::accumulate(reference_tokens.begin(), reference_tokens.end(), string_t{}, [](const string_t& a, const string_t& b) { return detail::concat(a, '/', detail::escape(b)); }); } /// @brief return a string representation of the JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/ JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string()) operator string_t() const { return to_string(); } #ifndef JSON_NO_IO /// @brief write string representation of the JSON pointer to stream /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr) { o << ptr.to_string(); return o; } #endif /// @brief append another JSON pointer at the end of this JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ json_pointer& operator/=(const json_pointer& ptr) { reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end()); return *this; } /// @brief append an unescaped reference token at the end of this JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ json_pointer& operator/=(string_t token) { push_back(std::move(token)); return *this; } /// @brief append an array index at the end of this JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ json_pointer& operator/=(std::size_t array_idx) { return *this /= std::to_string(array_idx); } /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ friend json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs) { return json_pointer(lhs) /= rhs; } /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param) { return json_pointer(lhs) /= std::move(token); } /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx) { return json_pointer(lhs) /= array_idx; } /// @brief returns the parent of this JSON pointer /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/ json_pointer parent_pointer() const { if (empty()) { return *this; } json_pointer res = *this; res.pop_back(); return res; } /// @brief remove last reference token /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/ void pop_back() { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); } reference_tokens.pop_back(); } /// @brief return last reference token /// @sa https://json.nlohmann.me/api/json_pointer/back/ const string_t& back() const { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); } return reference_tokens.back(); } /// @brief append an unescaped token at the end of the reference pointer /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ void push_back(const string_t& token) { reference_tokens.push_back(token); } /// @brief append an unescaped token at the end of the reference pointer /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ void push_back(string_t&& token) { reference_tokens.push_back(std::move(token)); } /// @brief return whether pointer points to the root document /// @sa https://json.nlohmann.me/api/json_pointer/empty/ bool empty() const noexcept { return reference_tokens.empty(); } private: /*! @param[in] s reference token to be converted into an array index @return integer representation of @a s @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index begins not with a digit @throw out_of_range.404 if string @a s could not be converted to an integer @throw out_of_range.410 if an array index exceeds size_type */ template static typename BasicJsonType::size_type array_index(const string_t& s) { using size_type = typename BasicJsonType::size_type; // error condition (cf. RFC 6901, Sect. 4) if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) { JSON_THROW(detail::parse_error::create(106, 0, detail::concat("array index '", s, "' must not begin with '0'"), nullptr)); } // error condition (cf. RFC 6901, Sect. 4) if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) { JSON_THROW(detail::parse_error::create(109, 0, detail::concat("array index '", s, "' is not a number"), nullptr)); } const char* p = s.c_str(); char* p_end = nullptr; // NOLINT(misc-const-correctness) errno = 0; // strtoull doesn't reset errno const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int) if (p == p_end // invalid input or empty string || errno == ERANGE // out of range || JSON_HEDLEY_UNLIKELY(static_cast(p_end - p) != s.size())) // incomplete read { JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", s, "'"), nullptr)); } // only triggered on special platforms (like 32bit), see also // https://github.com/nlohmann/json/pull/2203 if (res >= static_cast((std::numeric_limits::max)())) // NOLINT(runtime/int) { JSON_THROW(detail::out_of_range::create(410, detail::concat("array index ", s, " exceeds size_type"), nullptr)); // LCOV_EXCL_LINE } return static_cast(res); } JSON_PRIVATE_UNLESS_TESTED: json_pointer top() const { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); } json_pointer result = *this; result.reference_tokens = {reference_tokens[0]}; return result; } private: /*! @brief create and return a reference to the pointed to value @complexity Linear in the number of reference tokens. @throw parse_error.109 if array index is not a number @throw type_error.313 if value cannot be unflattened */ template BasicJsonType& get_and_create(BasicJsonType& j) const { auto* result = &j; // in case no reference tokens exist, return a reference to the JSON value // j which will be overwritten by a primitive value for (const auto& reference_token : reference_tokens) { switch (result->type()) { case detail::value_t::null: { if (reference_token == "0") { // start a new array if reference token is 0 result = &result->operator[](0); } else { // start a new object otherwise result = &result->operator[](reference_token); } break; } case detail::value_t::object: { // create an entry in the object result = &result->operator[](reference_token); break; } case detail::value_t::array: { // create an entry in the array result = &result->operator[](array_index(reference_token)); break; } /* The following code is only reached if there exists a reference token _and_ the current value is primitive. In this case, we have an error situation, because primitive values may only occur as single value; that is, with an empty list of reference tokens. */ case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", &j)); } } return *result; } /*! @brief return a reference to the pointed to value @note This version does not throw if a value is not present, but tries to create nested values instead. For instance, calling this function with pointer `"/this/that"` on a null value is equivalent to calling `operator[]("this").operator[]("that")` on that value, effectively changing the null value to an object. @param[in] ptr a JSON value @return reference to the JSON value pointed to by the JSON pointer @complexity Linear in the length of the JSON pointer. @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.404 if the JSON pointer can not be resolved */ template BasicJsonType& get_unchecked(BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { // convert null values to arrays or objects before continuing if (ptr->is_null()) { // check if reference token is a number const bool nums = std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) { return std::isdigit(x); }); // change value to array for numbers or "-" or to object otherwise *ptr = (nums || reference_token == "-") ? detail::value_t::array : detail::value_t::object; } switch (ptr->type()) { case detail::value_t::object: { // use unchecked object access ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (reference_token == "-") { // explicitly treat "-" as index beyond the end ptr = &ptr->operator[](ptr->m_data.m_value.array->size()); } else { // convert array index to number; unchecked access ptr = &ptr->operator[](array_index(reference_token)); } break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ template BasicJsonType& get_checked(BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // note: at performs range check ptr = &ptr->at(reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, detail::concat( "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr)); } // note: at performs range check ptr = &ptr->at(array_index(reference_token)); break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); } } return *ptr; } /*! @brief return a const reference to the pointed to value @param[in] ptr a JSON value @return const reference to the JSON value pointed to by the JSON pointer @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ template const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // use unchecked object access ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" cannot be used for const access JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr)); } // use unchecked array access ptr = &ptr->operator[](array_index(reference_token)); break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ template const BasicJsonType& get_checked(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // note: at performs range check ptr = &ptr->at(reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, detail::concat( "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr)); } // note: at performs range check ptr = &ptr->at(array_index(reference_token)); break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number */ template bool contains(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { if (!ptr->contains(reference_token)) { // we did not find the key in the object return false; } ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check return false; } if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) { // invalid char return false; } if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) { if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) { // first char should be between '1' and '9' return false; } for (std::size_t i = 1; i < reference_token.size(); i++) { if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) { // other char should be between '0' and '9' return false; } } } const auto idx = array_index(reference_token); if (idx >= ptr->size()) { // index out of range return false; } ptr = &ptr->operator[](idx); break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: { // we do not expect primitive values if there is still a // reference token to process return false; } } } // no reference token left means we found a primitive value return true; } /*! @brief split the string input to reference tokens @note This function is only called by the json_pointer constructor. All exceptions below are documented there. @throw parse_error.107 if the pointer is not empty or begins with '/' @throw parse_error.108 if character '~' is not followed by '0' or '1' */ static std::vector split(const string_t& reference_string) { std::vector result; // special case: empty reference string -> no reference tokens if (reference_string.empty()) { return result; } // check if nonempty reference string begins with slash if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) { JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr)); } // extract the reference tokens: // - slash: position of the last read slash (or end of string) // - start: position after the previous slash for ( // search for the first slash after the first character std::size_t slash = reference_string.find_first_of('/', 1), // set the beginning of the first reference token start = 1; // we can stop if start == 0 (if slash == string_t::npos) start != 0; // set the beginning of the next reference token // (will eventually be 0 if slash == string_t::npos) start = (slash == string_t::npos) ? 0 : slash + 1, // find next slash slash = reference_string.find_first_of('/', start)) { // use the text between the beginning of the reference token // (start) and the last slash (slash). auto reference_token = reference_string.substr(start, slash - start); // check reference tokens are properly escaped for (std::size_t pos = reference_token.find_first_of('~'); pos != string_t::npos; pos = reference_token.find_first_of('~', pos + 1)) { JSON_ASSERT(reference_token[pos] == '~'); // ~ must be followed by 0 or 1 if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || (reference_token[pos + 1] != '0' && reference_token[pos + 1] != '1'))) { JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr)); } } // finally, store the reference token detail::unescape(reference_token); result.push_back(reference_token); } return result; } private: /*! @param[in] reference_string the reference string to the current value @param[in] value the value to consider @param[in,out] result the result object to insert values to @note Empty objects or arrays are flattened to `null`. */ template static void flatten(const string_t& reference_string, const BasicJsonType& value, BasicJsonType& result) { switch (value.type()) { case detail::value_t::array: { if (value.m_data.m_value.array->empty()) { // flatten empty array as null result[reference_string] = nullptr; } else { // iterate array and use index as reference string for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i) { flatten(detail::concat(reference_string, '/', std::to_string(i)), value.m_data.m_value.array->operator[](i), result); } } break; } case detail::value_t::object: { if (value.m_data.m_value.object->empty()) { // flatten empty object as null result[reference_string] = nullptr; } else { // iterate object and use keys as reference string for (const auto& element : *value.m_data.m_value.object) { flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result); } } break; } case detail::value_t::null: case detail::value_t::string: case detail::value_t::boolean: case detail::value_t::number_integer: case detail::value_t::number_unsigned: case detail::value_t::number_float: case detail::value_t::binary: case detail::value_t::discarded: default: { // add primitive value with its reference string result[reference_string] = value; break; } } } /*! @param[in] value flattened JSON @return unflattened JSON @throw parse_error.109 if array index is not a number @throw type_error.314 if value is not an object @throw type_error.315 if object values are not primitive @throw type_error.313 if value cannot be unflattened */ template static BasicJsonType unflatten(const BasicJsonType& value) { if (JSON_HEDLEY_UNLIKELY(!value.is_object())) { JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", &value)); } BasicJsonType result; // iterate the JSON object values for (const auto& element : *value.m_data.m_value.object) { if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) { JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second)); } // assign value to reference pointed to by JSON pointer; Note that if // the JSON pointer is "" (i.e., points to the whole value), function // get_and_create returns a reference to result itself. An assignment // will then create a primitive value. json_pointer(element.first).get_and_create(result) = element.second; } return result; } // can't use conversion operator because of ambiguity json_pointer convert() const& { json_pointer result; result.reference_tokens = reference_tokens; return result; } json_pointer convert()&& { json_pointer result; result.reference_tokens = std::move(reference_tokens); return result; } public: #if JSON_HAS_THREE_WAY_COMPARISON /// @brief compares two JSON pointers for equality /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ template bool operator==(const json_pointer& rhs) const noexcept { return reference_tokens == rhs.reference_tokens; } /// @brief compares JSON pointer and string for equality /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer)) bool operator==(const string_t& rhs) const { return *this == json_pointer(rhs); } /// @brief 3-way compares two JSON pointers template std::strong_ordering operator<=>(const json_pointer& rhs) const noexcept // *NOPAD* { return reference_tokens <=> rhs.reference_tokens; // *NOPAD* } #else /// @brief compares two JSON pointers for equality /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator==(const json_pointer& lhs, const json_pointer& rhs) noexcept; /// @brief compares JSON pointer and string for equality /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator==(const json_pointer& lhs, const StringType& rhs); /// @brief compares string and JSON pointer for equality /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator==(const StringType& lhs, const json_pointer& rhs); /// @brief compares two JSON pointers for inequality /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator!=(const json_pointer& lhs, const json_pointer& rhs) noexcept; /// @brief compares JSON pointer and string for inequality /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator!=(const json_pointer& lhs, const StringType& rhs); /// @brief compares string and JSON pointer for inequality /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator!=(const StringType& lhs, const json_pointer& rhs); /// @brief compares two JSON pointer for less-than template // NOLINTNEXTLINE(readability-redundant-declaration) friend bool operator<(const json_pointer& lhs, const json_pointer& rhs) noexcept; #endif private: /// the reference tokens std::vector reference_tokens; }; #if !JSON_HAS_THREE_WAY_COMPARISON // functions cannot be defined inside class due to ODR violations template inline bool operator==(const json_pointer& lhs, const json_pointer& rhs) noexcept { return lhs.reference_tokens == rhs.reference_tokens; } template::string_t> JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) inline bool operator==(const json_pointer& lhs, const StringType& rhs) { return lhs == json_pointer(rhs); } template::string_t> JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) inline bool operator==(const StringType& lhs, const json_pointer& rhs) { return json_pointer(lhs) == rhs; } template inline bool operator!=(const json_pointer& lhs, const json_pointer& rhs) noexcept { return !(lhs == rhs); } template::string_t> JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) inline bool operator!=(const json_pointer& lhs, const StringType& rhs) { return !(lhs == rhs); } template::string_t> JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) inline bool operator!=(const StringType& lhs, const json_pointer& rhs) { return !(lhs == rhs); } template inline bool operator<(const json_pointer& lhs, const json_pointer& rhs) noexcept { return lhs.reference_tokens < rhs.reference_tokens; } #endif NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/json_ref.hpp000066400000000000000000000034251477615276400216120ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template class json_ref { public: using value_type = BasicJsonType; json_ref(value_type&& value) : owned_value(std::move(value)) {} json_ref(const value_type& value) : value_ref(&value) {} json_ref(std::initializer_list init) : owned_value(init) {} template < class... Args, enable_if_t::value, int> = 0 > json_ref(Args && ... args) : owned_value(std::forward(args)...) {} // class should be movable only json_ref(json_ref&&) noexcept = default; json_ref(const json_ref&) = delete; json_ref& operator=(const json_ref&) = delete; json_ref& operator=(json_ref&&) = delete; ~json_ref() = default; value_type moved_or_copied() const { if (value_ref == nullptr) { return std::move(owned_value); } return *value_ref; } value_type const& operator*() const { return value_ref ? *value_ref : owned_value; } value_type const* operator->() const { return &** this; } private: mutable value_type owned_value = nullptr; value_type const* value_ref = nullptr; }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/macro_scope.hpp000066400000000000000000001452071477615276400223040ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // declval, pair #include #include // This file contains all internal macro definitions (except those affecting ABI) // You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them #include // exclude unsupported compilers #if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) #if defined(__clang__) #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" #endif #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" #endif #endif #endif // C++ language standard detection // if the user manually specified the used c++ version this is skipped #if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) #define JSON_HAS_CPP_23 #define JSON_HAS_CPP_20 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_14 #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) #define JSON_HAS_CPP_20 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_14 #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_14 #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) #define JSON_HAS_CPP_14 #endif // the cpp 11 flag is always specified because it is the minimal required version #define JSON_HAS_CPP_11 #endif #ifdef __has_include #if __has_include() #include #endif #endif #if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) #ifdef JSON_HAS_CPP_17 #if defined(__cpp_lib_filesystem) #define JSON_HAS_FILESYSTEM 1 #elif defined(__cpp_lib_experimental_filesystem) #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 #elif !defined(__has_include) #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 #elif __has_include() #define JSON_HAS_FILESYSTEM 1 #elif __has_include() #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 #endif // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support #if defined(__clang_major__) && __clang_major__ < 7 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support #if defined(_MSC_VER) && _MSC_VER < 1914 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif // no filesystem support before iOS 13 #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif // no filesystem support before macOS Catalina #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #endif #endif #endif #ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 #endif #ifndef JSON_HAS_FILESYSTEM #define JSON_HAS_FILESYSTEM 0 #endif #ifndef JSON_HAS_THREE_WAY_COMPARISON #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L #define JSON_HAS_THREE_WAY_COMPARISON 1 #else #define JSON_HAS_THREE_WAY_COMPARISON 0 #endif #endif #ifndef JSON_HAS_RANGES // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 #define JSON_HAS_RANGES 0 #elif defined(__cpp_lib_ranges) #define JSON_HAS_RANGES 1 #else #define JSON_HAS_RANGES 0 #endif #endif #ifndef JSON_HAS_STATIC_RTTI #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 #define JSON_HAS_STATIC_RTTI 1 #else #define JSON_HAS_STATIC_RTTI 0 #endif #endif #ifdef JSON_HAS_CPP_17 #define JSON_INLINE_VARIABLE inline #else #define JSON_INLINE_VARIABLE #endif #if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] #else #define JSON_NO_UNIQUE_ADDRESS #endif // disable documentation warnings on clang #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdocumentation" #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" #endif // allow disabling exceptions #if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) #define JSON_THROW(exception) throw exception #define JSON_TRY try #define JSON_CATCH(exception) catch(exception) #define JSON_INTERNAL_CATCH(exception) catch(exception) #else #include #define JSON_THROW(exception) std::abort() #define JSON_TRY if(true) #define JSON_CATCH(exception) if(false) #define JSON_INTERNAL_CATCH(exception) if(false) #endif // override exception macros #if defined(JSON_THROW_USER) #undef JSON_THROW #define JSON_THROW JSON_THROW_USER #endif #if defined(JSON_TRY_USER) #undef JSON_TRY #define JSON_TRY JSON_TRY_USER #endif #if defined(JSON_CATCH_USER) #undef JSON_CATCH #define JSON_CATCH JSON_CATCH_USER #undef JSON_INTERNAL_CATCH #define JSON_INTERNAL_CATCH JSON_CATCH_USER #endif #if defined(JSON_INTERNAL_CATCH_USER) #undef JSON_INTERNAL_CATCH #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER #endif // allow overriding assert #if !defined(JSON_ASSERT) #include // assert #define JSON_ASSERT(x) assert(x) #endif // allow to access some private functions (needed by the test suite) #if defined(JSON_TESTS_PRIVATE) #define JSON_PRIVATE_UNLESS_TESTED public #else #define JSON_PRIVATE_UNLESS_TESTED private #endif /*! @brief macro to briefly define a mapping between an enum and JSON @def NLOHMANN_JSON_SERIALIZE_ENUM @since version 3.4.0 */ #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ template \ inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ { \ /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ static const std::pair m[] = __VA_ARGS__; \ auto it = std::find_if(std::begin(m), std::end(m), \ [e](const std::pair& ej_pair) -> bool \ { \ return ej_pair.first == e; \ }); \ j = ((it != std::end(m)) ? it : std::begin(m))->second; \ } \ template \ inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ { \ /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ static const std::pair m[] = __VA_ARGS__; \ auto it = std::find_if(std::begin(m), std::end(m), \ [&j](const std::pair& ej_pair) -> bool \ { \ return ej_pair.second == j; \ }); \ e = ((it != std::end(m)) ? it : std::begin(m))->first; \ } // Ugly macros to avoid uglier copy-paste when specializing basic_json. They // may be removed in the future once the class is split. #define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ template class ObjectType, \ template class ArrayType, \ class StringType, class BooleanType, class NumberIntegerType, \ class NumberUnsignedType, class NumberFloatType, \ template class AllocatorType, \ template class JSONSerializer, \ class BinaryType, \ class CustomBaseClass> #define NLOHMANN_BASIC_JSON_TPL \ basic_json // Macros to simplify conversion from/to types #define NLOHMANN_JSON_EXPAND( x ) x #define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME #define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ NLOHMANN_JSON_PASTE64, \ NLOHMANN_JSON_PASTE63, \ NLOHMANN_JSON_PASTE62, \ NLOHMANN_JSON_PASTE61, \ NLOHMANN_JSON_PASTE60, \ NLOHMANN_JSON_PASTE59, \ NLOHMANN_JSON_PASTE58, \ NLOHMANN_JSON_PASTE57, \ NLOHMANN_JSON_PASTE56, \ NLOHMANN_JSON_PASTE55, \ NLOHMANN_JSON_PASTE54, \ NLOHMANN_JSON_PASTE53, \ NLOHMANN_JSON_PASTE52, \ NLOHMANN_JSON_PASTE51, \ NLOHMANN_JSON_PASTE50, \ NLOHMANN_JSON_PASTE49, \ NLOHMANN_JSON_PASTE48, \ NLOHMANN_JSON_PASTE47, \ NLOHMANN_JSON_PASTE46, \ NLOHMANN_JSON_PASTE45, \ NLOHMANN_JSON_PASTE44, \ NLOHMANN_JSON_PASTE43, \ NLOHMANN_JSON_PASTE42, \ NLOHMANN_JSON_PASTE41, \ NLOHMANN_JSON_PASTE40, \ NLOHMANN_JSON_PASTE39, \ NLOHMANN_JSON_PASTE38, \ NLOHMANN_JSON_PASTE37, \ NLOHMANN_JSON_PASTE36, \ NLOHMANN_JSON_PASTE35, \ NLOHMANN_JSON_PASTE34, \ NLOHMANN_JSON_PASTE33, \ NLOHMANN_JSON_PASTE32, \ NLOHMANN_JSON_PASTE31, \ NLOHMANN_JSON_PASTE30, \ NLOHMANN_JSON_PASTE29, \ NLOHMANN_JSON_PASTE28, \ NLOHMANN_JSON_PASTE27, \ NLOHMANN_JSON_PASTE26, \ NLOHMANN_JSON_PASTE25, \ NLOHMANN_JSON_PASTE24, \ NLOHMANN_JSON_PASTE23, \ NLOHMANN_JSON_PASTE22, \ NLOHMANN_JSON_PASTE21, \ NLOHMANN_JSON_PASTE20, \ NLOHMANN_JSON_PASTE19, \ NLOHMANN_JSON_PASTE18, \ NLOHMANN_JSON_PASTE17, \ NLOHMANN_JSON_PASTE16, \ NLOHMANN_JSON_PASTE15, \ NLOHMANN_JSON_PASTE14, \ NLOHMANN_JSON_PASTE13, \ NLOHMANN_JSON_PASTE12, \ NLOHMANN_JSON_PASTE11, \ NLOHMANN_JSON_PASTE10, \ NLOHMANN_JSON_PASTE9, \ NLOHMANN_JSON_PASTE8, \ NLOHMANN_JSON_PASTE7, \ NLOHMANN_JSON_PASTE6, \ NLOHMANN_JSON_PASTE5, \ NLOHMANN_JSON_PASTE4, \ NLOHMANN_JSON_PASTE3, \ NLOHMANN_JSON_PASTE2, \ NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) #define NLOHMANN_JSON_PASTE2(func, v1) func(v1) #define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) #define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) #define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) #define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) #define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) #define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) #define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) #define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) #define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) #define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) #define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) #define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) #define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) #define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) #define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) #define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) #define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) #define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) #define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) #define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) #define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) #define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) #define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) #define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) #define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) #define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) #define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) #define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) #define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) #define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) #define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) #define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) #define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) #define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) #define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) #define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) #define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) #define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) #define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) #define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) #define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) #define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) #define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) #define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) #define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) #define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) #define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) #define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) #define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) #define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) #define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) #define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) #define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) #define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) #define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) #define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) #define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) #define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) #define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) #define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) #define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) #define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) #define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; #define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); #define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; /*! @brief macro @def NLOHMANN_DEFINE_TYPE_INTRUSIVE @since version 3.9.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT @since version 3.11.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE @since version 3.11.3 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE @since version 3.9.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT @since version 3.11.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE @since version 3.11.3 @sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ */ #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ template::value, int> = 0> \ friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ template::value, int> = 0> \ void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE @since version 3.12.0 @sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ */ #define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ template::value, int> = 0> \ void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } // inspired from https://stackoverflow.com/a/26745591 // allows calling any std function as if (e.g., with begin): // using std::begin; begin(x); // // it allows using the detected idiom to retrieve the return type // of such an expression #define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ namespace detail { \ using std::std_name; \ \ template \ using result_of_##std_name = decltype(std_name(std::declval()...)); \ } \ \ namespace detail2 { \ struct std_name##_tag \ { \ }; \ \ template \ std_name##_tag std_name(T&&...); \ \ template \ using result_of_##std_name = decltype(std_name(std::declval()...)); \ \ template \ struct would_call_std_##std_name \ { \ static constexpr auto const value = ::nlohmann::detail:: \ is_detected_exact::value; \ }; \ } /* namespace detail2 */ \ \ template \ struct would_call_std_##std_name : detail2::would_call_std_##std_name \ { \ } #ifndef JSON_USE_IMPLICIT_CONVERSIONS #define JSON_USE_IMPLICIT_CONVERSIONS 1 #endif #if JSON_USE_IMPLICIT_CONVERSIONS #define JSON_EXPLICIT #else #define JSON_EXPLICIT explicit #endif #ifndef JSON_DISABLE_ENUM_SERIALIZATION #define JSON_DISABLE_ENUM_SERIALIZATION 0 #endif #ifndef JSON_USE_GLOBAL_UDLS #define JSON_USE_GLOBAL_UDLS 1 #endif json-3.12.0/include/nlohmann/detail/macro_unscope.hpp000066400000000000000000000024011477615276400226330ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once // restore clang diagnostic settings #if defined(__clang__) #pragma clang diagnostic pop #endif // clean up #undef JSON_ASSERT #undef JSON_INTERNAL_CATCH #undef JSON_THROW #undef JSON_PRIVATE_UNLESS_TESTED #undef NLOHMANN_BASIC_JSON_TPL_DECLARATION #undef NLOHMANN_BASIC_JSON_TPL #undef JSON_EXPLICIT #undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL #undef JSON_INLINE_VARIABLE #undef JSON_NO_UNIQUE_ADDRESS #undef JSON_DISABLE_ENUM_SERIALIZATION #undef JSON_USE_GLOBAL_UDLS #ifndef JSON_TEST_KEEP_MACROS #undef JSON_CATCH #undef JSON_TRY #undef JSON_HAS_CPP_11 #undef JSON_HAS_CPP_14 #undef JSON_HAS_CPP_17 #undef JSON_HAS_CPP_20 #undef JSON_HAS_CPP_23 #undef JSON_HAS_FILESYSTEM #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM #undef JSON_HAS_THREE_WAY_COMPARISON #undef JSON_HAS_RANGES #undef JSON_HAS_STATIC_RTTI #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON #endif #include json-3.12.0/include/nlohmann/detail/meta/000077500000000000000000000000001477615276400202165ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/meta/call_std/000077500000000000000000000000001477615276400220035ustar00rootroot00000000000000json-3.12.0/include/nlohmann/detail/meta/call_std/begin.hpp000066400000000000000000000007071477615276400236040ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include NLOHMANN_JSON_NAMESPACE_BEGIN NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/call_std/end.hpp000066400000000000000000000007051477615276400232640ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include NLOHMANN_JSON_NAMESPACE_BEGIN NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/cpp_future.hpp000066400000000000000000000120651477615276400231070ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-FileCopyrightText: 2018 The Abseil Authors // SPDX-License-Identifier: MIT #pragma once #include // array #include // size_t #include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type #include // index_sequence, make_index_sequence, index_sequence_for #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template using uncvref_t = typename std::remove_cv::type>::type; #ifdef JSON_HAS_CPP_14 // the following utilities are natively available in C++14 using std::enable_if_t; using std::index_sequence; using std::make_index_sequence; using std::index_sequence_for; #else // alias templates to reduce boilerplate template using enable_if_t = typename std::enable_if::type; // The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h // which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. //// START OF CODE FROM GOOGLE ABSEIL // integer_sequence // // Class template representing a compile-time integer sequence. An instantiation // of `integer_sequence` has a sequence of integers encoded in its // type through its template arguments (which is a common need when // working with C++11 variadic templates). `absl::integer_sequence` is designed // to be a drop-in replacement for C++14's `std::integer_sequence`. // // Example: // // template< class T, T... Ints > // void user_function(integer_sequence); // // int main() // { // // user_function's `T` will be deduced to `int` and `Ints...` // // will be deduced to `0, 1, 2, 3, 4`. // user_function(make_integer_sequence()); // } template struct integer_sequence { using value_type = T; static constexpr std::size_t size() noexcept { return sizeof...(Ints); } }; // index_sequence // // A helper template for an `integer_sequence` of `size_t`, // `absl::index_sequence` is designed to be a drop-in replacement for C++14's // `std::index_sequence`. template using index_sequence = integer_sequence; namespace utility_internal { template struct Extend; // Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. template struct Extend, SeqSize, 0> { using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; }; template struct Extend, SeqSize, 1> { using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; }; // Recursion helper for 'make_integer_sequence'. // 'Gen::type' is an alias for 'integer_sequence'. template struct Gen { using type = typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; }; template struct Gen { using type = integer_sequence; }; } // namespace utility_internal // Compile-time sequences of integers // make_integer_sequence // // This template alias is equivalent to // `integer_sequence`, and is designed to be a drop-in // replacement for C++14's `std::make_integer_sequence`. template using make_integer_sequence = typename utility_internal::Gen::type; // make_index_sequence // // This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, // and is designed to be a drop-in replacement for C++14's // `std::make_index_sequence`. template using make_index_sequence = make_integer_sequence; // index_sequence_for // // Converts a typename pack into an index sequence of the same length, and // is designed to be a drop-in replacement for C++14's // `std::index_sequence_for()` template using index_sequence_for = make_index_sequence; //// END OF CODE FROM GOOGLE ABSEIL #endif // dispatch utility (taken from ranges-v3) template struct priority_tag : priority_tag < N - 1 > {}; template<> struct priority_tag<0> {}; // taken from ranges-v3 template struct static_const { static JSON_INLINE_VARIABLE constexpr T value{}; }; #ifndef JSON_HAS_CPP_17 template constexpr T static_const::value; #endif template constexpr std::array make_array(Args&& ... args) { return std::array {{static_cast(std::forward(args))...}}; } } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/detected.hpp000066400000000000000000000040771477615276400225200ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { // https://en.cppreference.com/w/cpp/experimental/is_detected struct nonesuch { nonesuch() = delete; ~nonesuch() = delete; nonesuch(nonesuch const&) = delete; nonesuch(nonesuch const&&) = delete; void operator=(nonesuch const&) = delete; void operator=(nonesuch&&) = delete; }; template class Op, class... Args> struct detector { using value_t = std::false_type; using type = Default; }; template class Op, class... Args> struct detector>, Op, Args...> { using value_t = std::true_type; using type = Op; }; template class Op, class... Args> using is_detected = typename detector::value_t; template class Op, class... Args> struct is_detected_lazy : is_detected { }; template class Op, class... Args> using detected_t = typename detector::type; template class Op, class... Args> using detected_or = detector; template class Op, class... Args> using detected_or_t = typename detected_or::type; template class Op, class... Args> using is_detected_exact = std::is_same>; template class Op, class... Args> using is_detected_convertible = std::is_convertible, To>; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/identity_tag.hpp000066400000000000000000000010201477615276400234040ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { // dispatching helper struct template struct identity_tag {}; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/is_sax.hpp000066400000000000000000000154621477615276400222250ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // size_t #include // declval #include // string #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { template using null_function_t = decltype(std::declval().null()); template using boolean_function_t = decltype(std::declval().boolean(std::declval())); template using number_integer_function_t = decltype(std::declval().number_integer(std::declval())); template using number_unsigned_function_t = decltype(std::declval().number_unsigned(std::declval())); template using number_float_function_t = decltype(std::declval().number_float( std::declval(), std::declval())); template using string_function_t = decltype(std::declval().string(std::declval())); template using binary_function_t = decltype(std::declval().binary(std::declval())); template using start_object_function_t = decltype(std::declval().start_object(std::declval())); template using key_function_t = decltype(std::declval().key(std::declval())); template using end_object_function_t = decltype(std::declval().end_object()); template using start_array_function_t = decltype(std::declval().start_array(std::declval())); template using end_array_function_t = decltype(std::declval().end_array()); template using parse_error_function_t = decltype(std::declval().parse_error( std::declval(), std::declval(), std::declval())); template struct is_sax { private: static_assert(is_basic_json::value, "BasicJsonType must be of type basic_json<...>"); using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using exception_t = typename BasicJsonType::exception; public: static constexpr bool value = is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value; }; template struct is_sax_static_asserts { private: static_assert(is_basic_json::value, "BasicJsonType must be of type basic_json<...>"); using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using exception_t = typename BasicJsonType::exception; public: static_assert(is_detected_exact::value, "Missing/invalid function: bool null()"); static_assert(is_detected_exact::value, "Missing/invalid function: bool boolean(bool)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool boolean(bool)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool number_integer(number_integer_t)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool string(string_t&)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool binary(binary_t&)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool start_object(std::size_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool key(string_t&)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool end_object()"); static_assert(is_detected_exact::value, "Missing/invalid function: bool start_array(std::size_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool end_array()"); static_assert( is_detected_exact::value, "Missing/invalid function: bool parse_error(std::size_t, const " "std::string&, const exception&)"); }; } // namespace detail NLOHMANN_JSON_NAMESPACE_END json-3.12.0/include/nlohmann/detail/meta/std_fs.hpp000066400000000000000000000014271477615276400222150ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include #if JSON_HAS_EXPERIMENTAL_FILESYSTEM #include NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { namespace std_fs = std::experimental::filesystem; } // namespace detail NLOHMANN_JSON_NAMESPACE_END #elif JSON_HAS_FILESYSTEM #include // NOLINT(build/c++17) NLOHMANN_JSON_NAMESPACE_BEGIN namespace detail { namespace std_fs = std::filesystem; } // namespace detail NLOHMANN_JSON_NAMESPACE_END #endif json-3.12.0/include/nlohmann/detail/meta/type_traits.hpp000066400000000000000000000713471477615276400233120ustar00rootroot00000000000000// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann // SPDX-License-Identifier: MIT #pragma once #include // numeric_limits #include // char_traits #include // tuple #include // false_type, is_constructible, is_integral, is_same, true_type #include // declval #include #include #include #include #include #include #include NLOHMANN_JSON_NAMESPACE_BEGIN /*! @brief detail namespace with internal helper functions This namespace collects functions that should not be exposed, implementations of some @ref basic_json methods, and meta-programming helpers. @since version 2.1.0 */ namespace detail { ///////////// // helpers // ///////////// // Note to maintainers: // // Every trait in this file expects a non CV-qualified type. // The only exceptions are in the 'aliases for detected' section // (i.e. those of the form: decltype(T::member_function(std::declval()))) // // In this case, T has to be properly CV-qualified to constraint the function arguments // (e.g. to_json(BasicJsonType&, const T&)) template struct is_basic_json : std::false_type {}; NLOHMANN_BASIC_JSON_TPL_DECLARATION struct is_basic_json : std::true_type {}; // used by exceptions create() member functions // true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t // false_type otherwise template struct is_basic_json_context : std::integral_constant < bool, is_basic_json::type>::type>::value || std::is_same::value > {}; ////////////////////// // json_ref helpers // ////////////////////// template class json_ref; template struct is_json_ref : std::false_type {}; template struct is_json_ref> : std::true_type {}; ////////////////////////// // aliases for detected // ////////////////////////// template using mapped_type_t = typename T::mapped_type; template using key_type_t = typename T::key_type; template using value_type_t = typename T::value_type; template using difference_type_t = typename T::difference_type; template using pointer_t = typename T::pointer; template using reference_t = typename T::reference; template using iterator_category_t = typename T::iterator_category; template using to_json_function = decltype(T::to_json(std::declval()...)); template using from_json_function = decltype(T::from_json(std::declval()...)); template using get_template_function = decltype(std::declval().template get()); // trait checking if JSONSerializer::from_json(json const&, udt&) exists template struct has_from_json : std::false_type {}; // trait checking if j.get is valid // use this trait instead of std::is_constructible or std::is_convertible, // both rely on, or make use of implicit conversions, and thus fail when T // has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) template struct is_getable { static constexpr bool value = is_detected::value; }; template struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; // This trait checks if JSONSerializer::from_json(json const&) exists // this overload is used for non-default-constructible user-defined-types template struct has_non_default_from_json : std::false_type {}; template struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; // This trait checks if BasicJsonType::json_serializer::to_json exists // Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. template struct has_to_json : std::false_type {}; template struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; template using detect_key_compare = typename T::key_compare; template struct has_key_compare : std::integral_constant::value> {}; // obtains the actual object key comparator template struct actual_object_comparator { using object_t = typename BasicJsonType::object_t; using object_comparator_t = typename BasicJsonType::default_object_comparator_t; using type = typename std::conditional < has_key_compare::value, typename object_t::key_compare, object_comparator_t>::type; }; template using actual_object_comparator_t = typename actual_object_comparator::type; ///////////////// // char_traits // ///////////////// // Primary template of char_traits calls std char_traits template struct char_traits : std::char_traits {}; // Explicitly define char traits for unsigned char since it is not standard template<> struct char_traits : std::char_traits { using char_type = unsigned char; using int_type = uint64_t; // Redefine to_int_type function static int_type to_int_type(char_type c) noexcept { return static_cast(c); } static char_type to_char_type(int_type i) noexcept { return static_cast(i); } static constexpr int_type eof() noexcept { return static_cast(std::char_traits::eof()); } }; // Explicitly define char traits for signed char since it is not standard template<> struct char_traits : std::char_traits { using char_type = signed char; using int_type = uint64_t; // Redefine to_int_type function static int_type to_int_type(char_type c) noexcept { return static_cast(c); } static char_type to_char_type(int_type i) noexcept { return static_cast(i); } static constexpr int_type eof() noexcept { return static_cast(std::char_traits::eof()); } }; /////////////////// // is_ functions // /////////////////// // https://en.cppreference.com/w/cpp/types/conjunction template struct conjunction : std::true_type { }; template struct conjunction : B { }; template struct conjunction : std::conditional(B::value), conjunction, B>::type {}; // https://en.cppreference.com/w/cpp/types/negation template struct negation : std::integral_constant < bool, !B::value > { }; // Reimplementation of is_constructible and is_default_constructible, due to them being broken for // std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). // This causes compile errors in e.g. clang 3.5 or gcc 4.9. template struct is_default_constructible : std::is_default_constructible {}; template struct is_default_constructible> : conjunction, is_default_constructible> {}; template struct is_default_constructible> : conjunction, is_default_constructible> {}; template struct is_default_constructible> : conjunction...> {}; template struct is_default_constructible> : conjunction...> {}; template struct is_constructible : std::is_constructible {}; template struct is_constructible> : is_default_constructible> {}; template struct is_constructible> : is_default_constructible> {}; template struct is_constructible> : is_default_constructible> {}; template struct is_constructible> : is_default_constructible> {}; template struct is_iterator_traits : std::false_type {}; template struct is_iterator_traits> { private: using traits = iterator_traits; public: static constexpr auto value = is_detected::value && is_detected::value && is_detected::value && is_detected::value && is_detected::value; }; template struct is_range { private: using t_ref = typename std::add_lvalue_reference::type; using iterator = detected_t; using sentinel = detected_t; // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator // and https://en.cppreference.com/w/cpp/iterator/sentinel_for // but reimplementing these would be too much work, as a lot of other concepts are used underneath static constexpr auto is_iterator_begin = is_iterator_traits>::value; public: static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; }; template using iterator_t = enable_if_t::value, result_of_begin())>>; template using range_value_t = value_type_t>>; // The following implementation of is_complete_type is taken from // https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ // and is written by Xiang Fan who agreed to using it in this library. template struct is_complete_type : std::false_type {}; template struct is_complete_type : std::true_type {}; template struct is_compatible_object_type_impl : std::false_type {}; template struct is_compatible_object_type_impl < BasicJsonType, CompatibleObjectType, enable_if_t < is_detected::value&& is_detected::value >> { using object_t = typename BasicJsonType::object_t; // macOS's is_constructible does not play well with nonesuch... static constexpr bool value = is_constructible::value && is_constructible::value; }; template struct is_compatible_object_type : is_compatible_object_type_impl {}; template struct is_constructible_object_type_impl : std::false_type {}; template struct is_constructible_object_type_impl < BasicJsonType, ConstructibleObjectType, enable_if_t < is_detected::value&& is_detected::value >> { using object_t = typename BasicJsonType::object_t; static constexpr bool value = (is_default_constructible::value && (std::is_move_assignable::value || std::is_copy_assignable::value) && (is_constructible::value && std::is_same < typename object_t::mapped_type, typename ConstructibleObjectType::mapped_type >::value)) || (has_from_json::value || has_non_default_from_json < BasicJsonType, typename ConstructibleObjectType::mapped_type >::value); }; template struct is_constructible_object_type : is_constructible_object_type_impl {}; template struct is_compatible_string_type { static constexpr auto value = is_constructible::value; }; template struct is_constructible_string_type { // launder type through decltype() to fix compilation failure on ICPC #ifdef __INTEL_COMPILER using laundered_type = decltype(std::declval()); #else using laundered_type = ConstructibleStringType; #endif static constexpr auto value = conjunction < is_constructible, is_detected_exact>::value; }; template struct is_compatible_array_type_impl : std::false_type {}; template struct is_compatible_array_type_impl < BasicJsonType, CompatibleArrayType, enable_if_t < is_detected::value&& is_iterator_traits>>::value&& // special case for types like std::filesystem::path whose iterator's value_type are themselves // c.f. https://github.com/nlohmann/json/pull/3073 !std::is_same>::value >> { static constexpr bool value = is_constructible>::value; }; template struct is_compatible_array_type : is_compatible_array_type_impl {}; template struct is_constructible_array_type_impl : std::false_type {}; template struct is_constructible_array_type_impl < BasicJsonType, ConstructibleArrayType, enable_if_t::value >> : std::true_type {}; template struct is_constructible_array_type_impl < BasicJsonType, ConstructibleArrayType, enable_if_t < !std::is_same::value&& !is_compatible_string_type::value&& is_default_constructible::value&& (std::is_move_assignable::value || std::is_copy_assignable::value)&& is_detected::value&& is_iterator_traits>>::value&& is_detected::value&& // special case for types like std::filesystem::path whose iterator's value_type are themselves // c.f. https://github.com/nlohmann/json/pull/3073 !std::is_same>::value&& is_complete_type < detected_t>::value >> { using value_type = range_value_t; static constexpr bool value = std::is_same::value || has_from_json::value || has_non_default_from_json < BasicJsonType, value_type >::value; }; template struct is_constructible_array_type : is_constructible_array_type_impl {}; template struct is_compatible_integer_type_impl : std::false_type {}; template struct is_compatible_integer_type_impl < RealIntegerType, CompatibleNumberIntegerType, enable_if_t < std::is_integral::value&& std::is_integral::value&& !std::is_same::value >> { // is there an assert somewhere on overflows? using RealLimits = std::numeric_limits; using CompatibleLimits = std::numeric_limits; static constexpr auto value = is_constructible::value && CompatibleLimits::is_integer && RealLimits::is_signed == CompatibleLimits::is_signed; }; template struct is_compatible_integer_type : is_compatible_integer_type_impl {}; template struct is_compatible_type_impl: std::false_type {}; template struct is_compatible_type_impl < BasicJsonType, CompatibleType, enable_if_t::value >> { static constexpr bool value = has_to_json::value; }; template struct is_compatible_type : is_compatible_type_impl {}; template struct is_constructible_tuple : std::false_type {}; template struct is_constructible_tuple> : conjunction...> {}; template struct is_json_iterator_of : std::false_type {}; template struct is_json_iterator_of : std::true_type {}; template struct is_json_iterator_of : std::true_type {}; // checks if a given type T is a template specialization of Primary template