python-mkdocs-1.5.3/0000755000175000017500000000000014502137725014205 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs.yml0000644000175000017500000000325014502137725016210 0ustar carstencarstensite_name: MkDocs site_url: https://www.mkdocs.org/ site_description: Project documentation with Markdown. site_author: MkDocs Team repo_url: https://github.com/mkdocs/mkdocs/ edit_uri: blob/master/docs/ theme: name: mkdocs locale: en analytics: {gtag: 'G-274394082'} highlightjs: true hljs_languages: - yaml - django nav: - Home: index.md - Getting Started: getting-started.md - User Guide: user-guide/ - Developer Guide: dev-guide/ - About: - Release Notes: about/release-notes.md - Contributing: about/contributing.md - License: about/license.md extra_css: - css/extra.css markdown_extensions: - toc: permalink:  - attr_list - def_list - tables - pymdownx.highlight: use_pygments: false - pymdownx.snippets - pymdownx.superfences - callouts - mdx_gh_links: user: mkdocs repo: mkdocs - mkdocs-click copyright: Copyright © 2014 Tom Christie, Maintained by the MkDocs Team. hooks: - docs/hooks.py plugins: - search - redirects: redirect_maps: user-guide/plugins.md: dev-guide/plugins.md user-guide/custom-themes.md: dev-guide/themes.md user-guide/styling-your-docs.md: user-guide/choosing-your-theme.md - autorefs - literate-nav: nav_file: README.md implicit_index: true - mkdocstrings: handlers: python: options: docstring_section_style: list members_order: source show_root_heading: true show_source: false show_signature_annotations: true watch: - mkdocs python-mkdocs-1.5.3/.coveragerc0000644000175000017500000000003514502137725016324 0ustar carstencarsten[report] show_missing = True python-mkdocs-1.5.3/.gitattributes0000644000175000017500000000103514502137725017077 0ustar carstencarstenmkdocs/contrib/search/lunr-language/** linguist-vendored mkdocs/themes/mkdocs/js/** linguist-vendored mkdocs/themes/mkdocs/js/base.js linguist-vendored=false mkdocs/themes/mkdocs/css/** linguist-vendored mkdocs/themes/mkdocs/css/base.css linguist-vendored=false mkdocs/themes/readthedocs/js/** linguist-vendored mkdocs/themes/readthedocs/js/theme.js linguist-vendored=false mkdocs/themes/readthedocs/css/** linguist-vendored mkdocs/themes/readthedocs/css/theme_extra.css linguist-vendored=false docs/img/plugin-events.svg linguist-generated python-mkdocs-1.5.3/.jshintignore0000644000175000017500000000060514502137725016712 0ustar carstencarstenmkdocs/themes/**/js/jquery-**.min.js mkdocs/themes/mkdocs/js/highlight.pack.js mkdocs/themes/mkdocs/js/bootstrap.min.js mkdocs/themes/mkdocs/js/modernizr-**.min.js mkdocs/themes/readthedocs/js/theme.js mkdocs/themes/readthedocs/js/html5shiv.min.js mkdocs/contrib/search/templates/search/lunr.js mkdocs/contrib/search/lunr-language/lunr.**.js mkdocs/contrib/search/lunr-language/tinyseg.js python-mkdocs-1.5.3/docs/0000755000175000017500000000000014502137725015135 5ustar carstencarstenpython-mkdocs-1.5.3/docs/dev-guide/0000755000175000017500000000000014502137725017006 5ustar carstencarstenpython-mkdocs-1.5.3/docs/dev-guide/translations.md0000644000175000017500000002274014502137725022056 0ustar carstencarsten# Translations Theme localization guide. --- The [built-in themes] that are included with MkDocs provide support for translations. This is a guide for translators, which documents the process for contributing new translations and/or updating existing translations. For guidance on modifying the existing themes, see the [Contributing Guide][update themes]. To enable a specific translation see the documentation about the specific theme you are using in the [User Guide][built-in themes]. For translations of third-party themes, please see the documentation for those themes. For a third-party theme to make use of MkDocs' translation tools and methods, that theme must be properly [configured] to make use of those tools. NOTE: Translations only apply to text contained within a theme's template, such as "next" and "previous" links. The Markdown content of a page is not translated. If you wish to create multilingual documentation, you need to combine theme localization with a third-party internationalization/localization plugin. [built-in themes]: ../user-guide/choosing-your-theme.md [update themes]: ../about/contributing.md#submitting-changes-to-the-builtin-themes [configured]: themes.md#supporting-theme-localizationtranslation ## Localization tooling prerequisites Theme localization makes use of the [babel][babel] project for generation and compilation of localization files. You will need to be working from the git working tree on your local machine to make use of the translation commands. See the [Contributing Guide] for direction on how to [Install for Development] and [Submit a Pull Request]. The instructions in this document assume that you are working from a properly configured development environment. Make sure translation requirements are installed in your environment: ```bash pip install mkdocs[i18n] ``` [babel]: https://babel.pocoo.org/en/latest/cmdline.html [Contributing Guide]: ../about/contributing.md [Install for Development]: ../about/contributing.md#installing-for-development [Submit a Pull Request]: ../about/contributing.md#submitting-pull-requests ## Adding language translations to themes If your favorite language locale is not yet supported on one (or both) of the built-in themes (`mkdocs` and `readthedocs`), you can easily contribute a translation by following the steps below. Here is a quick summary of what you'll need to do: 1. [Fork and clone the MkDocs repository](#fork-and-clone-the-mkdocs-repository) and then [install MkDocs for development](../about/contributing.md#installing-for-development) for adding and testing translations. 2. [Initialize new localization catalogs](#initializing-the-localization-catalogs) for your language (if a translation for your locale already exists, follow the instructions for [updating theme localization files](#updating-the-translation-catalogs) instead). 3. [Add a translation](#translating-the-mkdocs-themes) for every text placeholder in the localized catalogs. 4. [Locally serve and test](#testing-theme-translations) the translated themes for your language. 5. [Update the documentation](#updating-theme-documentation) about supported translations for each translated theme. 6. [Contribute your translation](#contributing-translations) through a Pull Request. NOTE: Translation locales are usually identified using the [ISO-639-1] (2-letter) language codes. While territory/region/county codes are also supported, location specific translations should only be added after the general language translation has been completed and the regional dialect requires use of a term which differs from the general language translation. [ISO-639-1]: https://en.wikipedia.org/wiki/ISO_639-1 ### Fork and clone the MkDocs repository In the following steps you'll work with a fork of the MkDocs repository. Follow the instructions for [forking and cloning the MkDocs repository](../about/contributing.md#installing-for-development). To test the translations you also need to [install MkDocs for development](../about/contributing.md#installing-for-development) from your fork. ### Initializing the localization catalogs The templates for each theme contain text placeholders that have been extracted into a Portable Object Template (`messages.pot`) file, which is present in each theme's folder. Initializing a catalog consists of running a command which will create a directory structure for your desired language and prepare a Portable Object (`messages.po`) file derived from the `pot` file of the theme. Use the `init_catalog` command on each theme's directory and provide the appropriate language code (`-l `). The language code is almost always just two lowercase letters, such as `sv`, but in some cases it needs to be further disambiguated. See: * [Already translated languages for built-in themes](../user-guide/choosing-your-theme.md#mkdocs-locale) * [ISO 639 Language List](https://www.localeplanet.com/icu/iso639.html) * [Language subtag registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry) In particular, the way to know that the `pt` language should be disambiguated as `pt_PT` and `pt_BR` is that the *Language subtag registry* page contains `pt-` if you search for it. Whereas `sv` should remain just `sv`, because that page does *not* contain `sv-`. So, if we pick `es` (Spanish) as our example language code, to add a translation for it to both built-in themes, run these commands: ```bash pybabel init --input-file mkdocs/themes/mkdocs/messages.pot --output-dir mkdocs/themes/mkdocs/locales -l es pybabel init --input-file mkdocs/themes/readthedocs/messages.pot --output-dir mkdocs/themes/readthedocs/locales -l es ``` The above command will create a file structure as follows: ```text mkdocs/themes/mkdocs/locales ├── es │   └── LC_MESSAGES │   └── messages.po ``` You can now move on to the next step and [add a translation](#translating-the-mkdocs-themes) for every text placeholder in the localized catalog. ## Updating a theme translation If a theme's `messages.pot` template file has been [updated][update themes] since the `messages.po` was last updated for your locale, follow the steps below to update the theme's `messages.po` file: 1. [Update the theme's translation catalog](#updating-the-translation-catalogs) to refresh the translatable text placeholders of each theme. 2. [Translate](#translating-the-mkdocs-themes) the newly added translatable text placeholders on every `messages.po` catalog file language you can. 3. [Locally serve and test](#testing-theme-translations) the translated themes for your language. 4. [Contribute your translation](#contributing-translations) through a Pull Request. ### Updating the translation catalogs This step should be completed after a theme template have been [updated][update themes] for each language that you are comfortable contributing a translation for. To update the `fr` translation catalog of both built-in themes, use the following commands: ```bash pybabel update --ignore-obsolete --update-header-comment --input-file mkdocs/themes/mkdocs/messages.pot --output-dir mkdocs/themes/mkdocs/locales -l fr pybabel update --ignore-obsolete --update-header-comment --input-file mkdocs/themes/readthedocs/messages.pot --output-dir mkdocs/themes/readthedocs/locales -l fr ``` You can now move on to the next step and [add a translation] for every updated text placeholder in the localized catalog. [add a translation]: #translating-the-mkdocs-themes ### Translating the MkDocs themes Now that your localized `messages.po` files are ready, all you need to do is add a translation in each `msgstr` item for each `msgid` item in the file. ```text msgid "Next" msgstr "Siguiente" ``` WARNING: Do not modify the `msgid` as it is common to all translations. Just add its translation in the `msgstr` item. Once you have finished translating all of the terms listed in the `po` file, you'll want to [test your localized theme](#testing-theme-translations). ### Testing theme translations To test a theme with translations, you need to first compile the `messages.po` files of your theme into `messages.mo` files. The following commands will compile the `es` translation for both built-in themes: ```bash pybabel compile --statistics --directory mkdocs/themes/mkdocs/locales -l es pybabel compile --statistics --directory mkdocs/themes/readthedocs/locales -l es ``` The above command results in the following file structure: ```text mkdocs/themes/mkdocs/locales ├── es │   └── LC_MESSAGES │   ├── messages.mo │   └── messages.po ``` Note that the compiled `messages.mo` file was generated based on the `messages.po` file that you just edited. Then modify the `mkdocs.yml` file at the root of the project to test the new and/or updated locale: ```yaml theme: name: mkdocs locale: es ``` Finally, run `mkdocs serve` to check out your new localized version of the theme. > NOTE: > The build and release process takes care of compiling and distributing > all locales to end users so you only have to worry about contributing the > actual text translation `messages.po` files (the rest is ignored by git). > > After you have finished testing your work, be sure to undo the change to > the `locale` setting in the `mkdocs.yml` file before submitting your > changes. ## Updating theme documentation The page [Choosing your theme](../user-guide/choosing-your-theme.md) updates by itself with all available locale options. ## Contributing translations It is now time for you to [contribute](../about/contributing.md) your nice work to the project. Thank you! python-mkdocs-1.5.3/docs/dev-guide/README.md0000644000175000017500000000105714502137725020270 0ustar carstencarsten# Developer Guide Extending MkDocs --- The MkDocs Developer Guide provides documentation for developers of third party themes and plugins. Please see the [Contributing Guide] for information on contributing to MkDocs itself. You can jump directly to a page listed below, or use the *next* and *previous* buttons in the navigation bar at the top of the page to move through the documentation in order. - [Themes](themes.md) - [Translations](translations.md) - [Plugins](plugins.md) - [API Reference](api.md) [Contributing Guide]: ../about/contributing.md python-mkdocs-1.5.3/docs/dev-guide/themes.md0000644000175000017500000011171414502137725020622 0ustar carstencarsten# Developing Themes A guide to creating and distributing custom themes. --- NOTE: If you are looking for existing third party themes, they are listed in the [community wiki] page and the [MkDocs project catalog][catalog]. If you want to share a theme you create, you should list it there. When creating a new theme, you can either follow the steps in this guide to create one from scratch or you can download the `mkdocs-basic-theme` as a basic, yet complete, theme with all the boilerplate required. **You can find this base theme on [GitHub][basic theme]**. It contains detailed comments in the code to describe the different features and their usage. [community wiki]: https://github.com/mkdocs/mkdocs/wiki/MkDocs-Themes [catalog]: https://github.com/mkdocs/catalog#-theming [basic theme]: https://github.com/mkdocs/mkdocs-basic-theme ## Creating a custom theme The bare minimum required for a custom theme is a `main.html` [Jinja2 template] file which is placed in a directory that is *not* a child of the [docs_dir]. Within `mkdocs.yml`, set the [`theme.custom_dir`][custom_dir] option to the path of the directory containing `main.html`. The path should be relative to the configuration file. For example, given this example project layout: ```text mkdocs.yml docs/ index.md about.md custom_theme/ main.html ... ``` ... you would include the following settings in `mkdocs.yml` to use the custom theme directory: ```yaml theme: name: null custom_dir: 'custom_theme/' ``` > NOTE: > Generally, when building your own custom theme, the theme.[name] > configuration setting would be set to `null`. However, if the > theme.[custom_dir] configuration value is used in combination with an > existing theme, the theme.[custom_dir] can be used to replace only specific > parts of a built-in theme. For example, with the above layout and if you set > `name: "mkdocs"` then the `main.html` file in the theme.[custom_dir] would > replace the file of the same name in the `mkdocs` theme but otherwise the > `mkdocs` theme would remain unchanged. This is useful if you want to make > small adjustments to an existing theme. > > For more specific information, see [Customizing Your Theme]. > WARNING: > A theme's [configuration] defined in a `mkdocs_theme.yml` file is not loaded > from `theme.custom_dir`. When an entire theme exists in `theme.custom_dir` > and `theme.name` is set to `null`, then the entire theme configuration must > be defined in the [theme] configuration option in the `mkdocs.yml` file. > > However, when a theme is [packaged] up for distribution, and loaded using > the `theme.name` configuration option, then a `mkdocs_theme.yml` file > is required for the theme. [Customizing Your Theme]: ../user-guide/customizing-your-theme.md#using-the-theme-custom_dir [custom_dir]: ../user-guide/configuration.md#custom_dir [name]: ../user-guide/configuration.md#name [docs_dir]: ../user-guide/configuration.md#docs_dir [configuration]: #theme-configuration [packaged]: #packaging-themes [theme]: ../user-guide/configuration.md#theme ## Basic theme The simplest `main.html` file is the following: ```django {% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- for path in config.extra_css %} {%- endfor %} {{ page.content }} {%- for script in config.extra_javascript %} {{ script | script_tag }} {%- endfor %} ``` The body content from each page specified in `mkdocs.yml` is inserted using the `{{ page.content }}` tag. Style-sheets and scripts can be brought into this theme as with a normal HTML file. Navbars and tables of contents can also be generated and included automatically, through the `nav` and `toc` objects, respectively. If you wish to write your own theme, it is recommended to start with one of the [built-in themes] and modify it accordingly. NOTE: As MkDocs uses [Jinja] as its template engine, you have access to all the power of Jinja, including [template inheritance]. You may notice that the themes included with MkDocs make extensive use of template inheritance and blocks, allowing users to easily override small bits and pieces of the templates from the theme [custom_dir]. Therefore, the built-in themes are implemented in a `base.html` file, which `main.html` extends. Although not required, third party template authors are encouraged to follow a similar pattern and may want to define the same [blocks] as are used in the built-in themes for consistency. [Jinja]: https://jinja.palletsprojects.com/ [template inheritance]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance [blocks]: ../user-guide/customizing-your-theme.md#overriding-template-blocks ### Picking up CSS and JavaScript from the config MkDocs defines the top-level [extra_css](../user-guide/configuration.md#extra_css) and [extra_javascript](../user-guide/configuration.md#extra_javascript) configs. These are lists of files. The theme must include the HTML that links the items from these configs, otherwise the configs will be non-functional. You can see the recommended way to render both of them in the [base example above](#basic-theme). > NEW: **Changed in version 1.5:** > > The items of the `config.extra_javascript` list used to be simple strings but now became objects that have these fields: `path`, `type`, `async`, `defer`. > > In that version, MkDocs also gained the [`script_tag` filter](#script_tag). > > >? EXAMPLE: **Obsolete style:** > > > > ```django > > {%- for path in extra_javascript %} > > > > {%- endfor %} > > ``` > > > > This old-style example even uses the obsolete top-level `extra_javascript` list. Please always use `config.extra_javascript` instead. > > > > So, a slightly more modern approach is the following, but it is still obsolete because it ignores the extra attributes of the script: > > > > ```django > > {%- for path in config.extra_javascript %} > > > > {%- endfor %} > > ``` > > >? EXAMPLE: **New style:** > > > > ```django > > {%- for script in config.extra_javascript %} > > {{ script | script_tag }} > > {%- endfor %} > > ``` > > If you wish to be able to pick up the new customizations while keeping your theme compatible with older versions of MkDocs, use this snippet: > > >! EXAMPLE: **Backwards-compatible style:** > > > > ```django > > {%- for script in config.extra_javascript %} > > {%- if script.path %} {# Detected MkDocs 1.5+ which has `script.path` and `script_tag` #} > > {{ script | script_tag }} > > {%- else %} {# Fallback - examine the file name directly #} > > > > {%- endif %} > > {%- endfor %} > > ``` ## Theme Files There are various files which a theme treats special in some way. Any other files are simply copied from the theme directory to the same path in the `site_dir` when the site it built. For example image and CSS files have no special significance and are copied as-is. Note, however, that if the user provides a file with the same path in their `docs_dir`, then the user's file will replace the theme file. ### Template Files Any files with the `.html` extension are considered to be template files and are not copied from the theme directory or any subdirectories. Also, any files listed in [static_templates] are treated as templates regardless of their file extension. [static_templates]: #static_templates ### Theme Meta Files The various files required for packaging a theme are also ignored. Specifically, the `mkdocs_theme.yml` configuration file and any Python files. ### Dot Files Theme authors can explicitly force MkDocs to ignore files by starting a file or directory name with a dot. Any of the following files would be ignored: ```text .ignored.txt .ignored/file.txt foo/.ignored.txt foo/.ignored/file.txt ``` ### Documentation Files All documentation files are ignored. Specifically, any Markdown files (using any of the file extensions supported by MKDocs). Additionally, any README files which may exist in the theme directories are ignored. ## Template Variables Each template in a theme is built with a template context. These are the variables that are available to themes. The context varies depending on the template that is being built. At the moment templates are either built with the global context or with a page specific context. The global context is used for HTML pages that don't represent an individual Markdown document, for example a 404.html page or search.html. ### Global Context The following variables are available globally on any template. #### config The `config` variable is an instance of MkDocs' config object generated from the `mkdocs.yml` config file. While you can use any config option, some commonly used options include: * [config.site_name](../user-guide/configuration.md#site_name) * [config.site_url](../user-guide/configuration.md#site_url) * [config.site_author](../user-guide/configuration.md#site_author) * [config.site_description](../user-guide/configuration.md#site_description) * [config.theme.locale](../user-guide/configuration.md#locale) (See also [Theme Configuration](#locale) below) * [config.extra_javascript](../user-guide/configuration.md#extra_javascript) * [config.extra_css](../user-guide/configuration.md#extra_css) * [config.repo_url](../user-guide/configuration.md#repo_url) * [config.repo_name](../user-guide/configuration.md#repo_name) * [config.copyright](../user-guide/configuration.md#copyright) * [config.google_analytics](../user-guide/configuration.md#google_analytics) #### nav The `nav` variable is used to create the navigation for the documentation. The `nav` object is an iterable of [navigation objects](#navigation-objects) as defined by the [nav] configuration setting. [nav]: ../user-guide/configuration.md#nav ::: mkdocs.structure.nav.Navigation options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 In addition to the iterable of [navigation objects](#navigation-objects), the `nav` object contains the following attributes: ::: mkdocs.structure.nav.Navigation.homepage options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Navigation.pages options: show_root_full_path: false heading_level: 5 This list is not necessarily a complete list of all site pages as it does not contain pages which are not included in the navigation. This list does match the list and order of pages used for all "next page" and "previous page" links. For a list of all pages, use the [pages](#pages) template variable. ##### Nav Example Following is a basic usage example which outputs the first and second level navigation as a nested list. ```django {% if nav|length > 1 %} {% endif %} ``` #### base_url The `base_url` provides a relative path to the root of the MkDocs project. While this can be used directly by prepending it to a local relative URL, it is best to use the [url](#url) template filter, which is smarter about how it applies `base_url`. #### mkdocs_version Contains the current MkDocs version. #### build_date_utc A Python datetime object that represents the date and time the documentation was built in UTC. This is useful for showing how recently the documentation was updated. #### pages A flat list of `File` objects for *all* pages in the project. This list can contain pages not included in the global [navigation](#nav) and may not match the order of pages within that navigation. The [page](#page) object for each `File` can be accessed from `file.page`. #### page In templates which are not rendered from a Markdown source file, the `page` variable is `None`. In templates which are rendered from a Markdown source file, the `page` variable contains a `page` object. The same `page` objects are used as `page` [navigation objects](#navigation-objects) in the global [navigation](#nav) and in the [pages](#pages) template variable. ::: mkdocs.structure.pages.Page options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 All `page` objects contain the following attributes: ::: mkdocs.structure.pages.Page.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.content options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.toc options: show_root_full_path: false heading_level: 5 The following example would display the top two levels of the Table of Contents for a page. ```django ``` ::: mkdocs.structure.pages.Page.meta options: show_root_full_path: false heading_level: 5 In this example we define a `source` property above the page title: ```text source: generics.py mixins.py # Page title Content... ``` A template can access this metadata for the page with the `meta.source` variable. This could then be used to link to source files related to the documentation page. ```django {% for filename in page.meta.source %} {{ filename }} {% endfor %} ``` ::: mkdocs.structure.pages.Page.url options: show_root_full_path: false heading_level: 5 It is expected that this be used with the [url](#url) filter to ensure the URL is relative to the current page. ```django {{ page.title }} ``` ::: mkdocs.structure.pages.Page.file options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.abs_url options: show_root_full_path: false heading_level: 5 For example, if `site_url: https://example.com/`, then the value of `page.abs_url` for the page `foo.md` would be `/foo/`. However, if `site_url: https://example.com/bar/`, then the value of `page.abs_url` for the page `foo.md` would be `/bar/foo/`. ::: mkdocs.structure.pages.Page.canonical_url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.edit_url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_homepage options: show_root_full_path: false heading_level: 5 This can be used in conjunction with other attributes of the `page` object to alter the behavior. For example, to display a different title on the homepage: ```django {% if not page.is_homepage %}{{ page.title }} - {% endif %}{{ site_name }} ``` ::: mkdocs.structure.pages.Page.previous_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.next_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.pages.Page.is_link options: show_root_full_path: false heading_level: 5 #### AnchorLink ::: mkdocs.structure.toc.AnchorLink options: show_root_heading: false show_root_toc_entry: true heading_level: 5 ### Navigation Objects Navigation objects contained in the [nav](#nav) template variable may be one of [section](#section) objects, [page](#page) objects, and [link](#link) objects. While section objects may contain nested navigation objects, pages and links do not. Page objects are the full page object as used for the current [page](#page) with all of the same attributes available. Section and Link objects contain a subset of those attributes as defined below: #### Section A `section` navigation object defines a named section in the navigation and contains a list of child navigation objects. Note that sections do not contain URLs and are not links of any kind. However, by default, MkDocs sorts index pages to the top and the first child might be used as the URL for a section if a theme chooses to do so. ::: mkdocs.structure.nav.Section options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 The following attributes are available on `section` objects: ::: mkdocs.structure.nav.Section.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Section.is_link options: show_root_full_path: false heading_level: 5 #### Link A `link` navigation object contains a link which does not point to an internal MkDocs page. ::: mkdocs.structure.nav.Link options: show_root_heading: false show_root_toc_entry: true members: [] heading_level: 4 The following attributes are available on `link` objects: ::: mkdocs.structure.nav.Link.title options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.url options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.StructureItem.parent options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.children options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.active options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_section options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_page options: show_root_full_path: false heading_level: 5 ::: mkdocs.structure.nav.Link.is_link options: show_root_full_path: false heading_level: 5 ### Extra Context Additional variables can be passed to the template with the [`extra`](../user-guide/configuration.md#extra) configuration option. This is a set of key value pairs that can make custom templates far more flexible. For example, this could be used to include the project version of all pages and a list of links related to the project. This can be achieved with the following `extra` configuration: ```yaml extra: version: 0.13.0 links: - https://github.com/mkdocs - https://docs.readthedocs.org/en/latest/builds.html#mkdocs - https://www.mkdocs.org/ ``` And then displayed with this HTML in the custom theme. ```django {{ config.extra.version }} {% if config.extra.links %} {% endif %} ``` ## Template Filters In addition to [Jinja's default filters], the following custom filters are available to use in MkDocs templates: ### url Normalizes a URL. Absolute URLs are passed through unaltered. If the URL is relative and the template context includes a page object, then the URL is returned relative to the page object. Otherwise, the URL is returned with [base_url](#base_url) prepended. ```django {{ page.title }} ``` ### tojson Safely convert a Python object to a value in a JavaScript script. ```django ``` ### script_tag NEW: **New in version 1.5.** Convert an item from `extra_javascript` to a ` ``` With properly configured settings, the following HTML in a template will add a full search implementation to your theme. ```django

Search Results

Sorry, page not found.
``` The JavaScript in the plugin works by looking for the specific ID's used in the above HTML. The form input for the user to type the search query must be identified with `id="mkdocs-search-query"` and the div where the results will be placed must be identified with `id="mkdocs-search-results"`. The plugin supports the following options being set in the [theme's configuration file], `mkdocs_theme.yml`: ### include_search_page Determines whether the search plugin expects the theme to provide a dedicated search page via a template located at `search/search.html`. When `include_search_page` is set to `true`, the search template will be built and available at `search/search.html`. This method is used by the `readthedocs` theme. When `include_search_page` is set to `false` or not defined, it is expected that the theme provide some other mechanisms for displaying search results. For example, the `mkdocs` theme displays results on any page via a modal. ### search_index_only Determines whether the search plugin should only generate a search index or a complete search solution. When `search_index_only` is set to `false`, then the search plugin modifies the Jinja environment by adding its own `templates` directory (with a lower precedence than the theme) and adds its scripts to the `extra_javascript` config setting. When `search_index_only` is set to `true` or not defined, the search plugin makes no modifications to the Jinja environment. A complete solution using the provided index file is the responsibility of the theme. The search index is written to a JSON file at `search/search_index.json` in the [site_dir]. The JSON object contained within the file may contain up to three objects. ```json { config: {...}, docs: [...], index: {...} } ``` If present, the `config` object contains the key/value pairs of config options defined for the plugin in the user's `mkdocs.yml` config file under `plugings.search`. The `config` object was new in MkDocs version *1.0*. The `docs` object contains a list of document objects. Each document object is made up of a `location` (URL), a `title`, and `text` which can be used to create a search index and/or display search results. If present, the `index` object contains a pre-built index which offers performance improvements for larger sites. Note that the pre-built index is only created if the user explicitly enables the [prebuild_index] config option. Themes should expect the index to not be present, but can choose to use the index when it is available. The `index` object was new in MkDocs version *1.0*. [Jinja2 template]: https://jinja.palletsprojects.com/ [built-in themes]: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/themes [theme's configuration file]: #theme-configuration [lunr.js]: https://lunrjs.com/ [site_dir]: ../user-guide/configuration.md#site_dir [prebuild_index]: ../user-guide/configuration.md#prebuild_index [Jinja's default filters]: https://jinja.palletsprojects.com/en/latest/templates/#builtin-filters ## Packaging Themes MkDocs makes use of [Python packaging] to distribute themes. This comes with a few requirements. To see an example of a package containing one theme, see the [MkDocs Bootstrap theme] and to see a package that contains many themes, see the [MkDocs Bootswatch theme]. NOTE: It is not strictly necessary to package a theme, as the entire theme can be contained in the `custom_dir`. If you have created a "one-off theme," that should be sufficient. However, if you intend to distribute your theme for others to use, packaging the theme has some advantages. By packaging your theme, your users can more easily install it, they can rely on a default [configuration] being defined, and they can then take advantage of the [custom_dir] to make tweaks to your theme to better suit their needs. [Python packaging]: https://packaging.python.org/en/latest/ [MkDocs Bootstrap theme]: https://mkdocs.github.io/mkdocs-bootstrap/ [MkDocs Bootswatch theme]: https://mkdocs.github.io/mkdocs-bootswatch/ ### Package Layout The following layout is recommended for themes. Two files at the top level directory called `MANIFEST.in` and `setup.py` beside the theme directory which contains an empty `__init__.py` file, a theme configuration file (`mkdocs_theme.yml`), and your template and media files. ```text . |-- MANIFEST.in |-- theme_name | |-- __init__.py | |-- mkdocs_theme.yml | |-- main.html | |-- styles.css `-- setup.py ``` The `MANIFEST.in` file should contain the following contents but with theme_name updated and any extra file extensions added to the include. ```text recursive-include theme_name *.ico *.js *.css *.png *.html *.eot *.svg *.ttf *.woff recursive-exclude * __pycache__ recursive-exclude * *.py[co] ``` The `setup.py` should include the following text with the modifications described below. ```python from setuptools import setup, find_packages VERSION = '0.0.1' setup( name="mkdocs-themename", version=VERSION, url='', license='', description='', author='', author_email='', packages=find_packages(), include_package_data=True, entry_points={ 'mkdocs.themes': [ 'themename = theme_name', ] }, zip_safe=False ) ``` Fill in the URL, license, description, author and author email address. The name should follow the convention `mkdocs-themename` (like `mkdocs-bootstrap` and `mkdocs-bootswatch`), starting with MkDocs, using hyphens to separate words and including the name of your theme. Most of the rest of the file can be left unedited. The last section we need to change is the entry_points. This is how MkDocs finds the theme(s) you are including in the package. The name on the left is the one that users will use in their mkdocs.yml and the one on the right is the directory containing your theme files. The directory you created at the start of this section with the main.html file should contain all of the other theme files. The minimum requirement is that it includes a `main.html` for the theme. It **must** also include a `__init__.py` file which should be empty, this file tells Python that the directory is a package. ### Theme Configuration A packaged theme is required to include a configuration file named `mkdocs_theme.yml` which is placed in the root of your template files. The file should contain default configuration options for the theme. However, if the theme offers no configuration options, the file is still required and can be left blank. A theme which is not packaged does not need a `mkdocs_theme.yml` file as that file is not loaded from `theme.custom_dir`. The theme author is free to define any arbitrary options deemed necessary and those options will be made available in the templates to control behavior. For example, a theme might want to make a sidebar optional and include the following in the `mkdocs_theme.yml` file: ```yaml show_sidebar: true ``` Then in a template, that config option could be referenced: ```django {% if config.theme.show_sidebar %} {% endif %} ``` And the user could override the default in their project's `mkdocs.yml` config file: ```yaml theme: name: themename show_sidebar: false ``` In addition to arbitrary options defined by the theme, MkDocs defines a few special options which alters its behavior: > BLOCK: > > #### locale > > This option mirrors the [theme] config option of the same name. If this > value is not defined in the `mkdocs_theme.yml` file and the user does not > set it in `mkdocs.yml` then it will default to `en` (English). The value > is expected to match the language used in the text provided by the theme > (such a "next" and "previous" links) and should be used as the value of > the `` tag's `lang` attribute. See [Supporting theme localization/ > translation](#supporting-theme-localizationtranslation) for more > information. > > Note that during configuration validation, the provided string is converted > to a `Locale` object. The object contains `Locale.language` and > `Locale.territory` attributes and will resolve as a string from within a > template. Therefore, the following will work fine: > > ```html > > ``` > > If the locale was set to `fr_CA` (Canadian French), then the above template > would render as: > > ```html > > ``` > > If you did not want the territory attribute to be included, then reference > the `language` attribute directly: > > ```html > > ``` > > That would render as: > > ```html > > ``` > > #### static_templates > > This option mirrors the [theme] config option of the same name and allows > some defaults to be set by the theme. Note that while the user can add > templates to this list, the user cannot remove templates included in the > theme's config. > > #### extends > > Defines a parent theme that this theme inherits from. The value should be > the string name of the parent theme. Normal [Jinja inheritance rules] > apply. Plugins may also define some options which allow the theme to inform a plugin about which set of plugin options it expects. See the documentation for any plugins you may wish to support in your theme. ### Distributing Themes With the above changes, your theme should now be ready to install. This can be done with pip, using `pip install .` if you are still in the same directory as the setup.py. Most Python packages, including MkDocs, are distributed on PyPI. To do this, you should run the following command. ```bash python setup.py register ``` If you don't have an account setup, you should be prompted to create one. For a much more detailed guide, see the official Python packaging documentation for [Packaging and Distributing Projects]. [Packaging and Distributing Projects]: https://packaging.python.org/en/latest/distributing/ [Jinja inheritance rules]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance ## Supporting theme Localization/Translation While the built-in themes provide support for [localization/translation] of templates, custom themes and third-party themes may choose not to. Regardless, the [`locale`](#locale) setting of the `theme` configuration option is always present and is relied upon by other parts of the system. Therefore, it is recommended that all third-party themes use the same setting for designating a language regardless of the system they use for translation. In that way, users will experience consistent behavior regardless of the theme they may choose. The method for managing translations is up to the developers of a theme. However, if a theme developer chooses to use the same mechanisms used by the built-in themes, the sections below outline how to enable and make use of the same commands utilized by MkDocs. [localization/translation]: ../user-guide/localizing-your-theme.md ### Using the Localization/Translation commands WARNING: As **[pybabel] is not installed by default** and most users will not have pybabel installed, theme developers and/or translators should make sure to have installed the necessary dependencies (using `pip install mkdocs[i18n]`) in order for the commands to be available for use. The translation commands should be called from the root of your theme's working tree. For an overview of the workflow used by MkDocs to translate the built-in themes, see the appropriate [section] of the Contributing Guide and the [Translation Guide]. [pybabel]: https://babel.pocoo.org/en/latest/setup.html [section]: ../about/contributing.md#submitting-changes-to-the-builtin-themes [Translation Guide]: translations.md ### Example custom theme Localization/Translation workflow > NOTE: If your theme inherits from an existing theme which already provides > translation catalogs, your theme's translations will be merged with the > parent theme's translations during a MkDocs build. > > This means that you only need to concentrate on the added translations. > Yet, you will still benefit from the translations of the parent theme. At > the same time, you may override any of parent theme's translations! Let's suppose that you're working on your own fork of the [mkdocs-basic-theme][basic theme] and want to add translations to it. Edit the templates by wrapping text in your HTML sources with `{% trans %}` and `{% endtrans %}` as follows: ```diff --- a/basic_theme/base.html +++ b/basic_theme/base.html @@ -88,7 +88,7 @@ -

This is an example theme for MkDocs.

+

{% trans %}This is an example theme for MkDocs.{% endtrans %}

It is designed to be read by looking at the theme HTML which is heavily ``` Then you would follow the [Translation Guide] as usual to get your translations running. ### Packaging Translations with your theme While the Portable Object Template (`pot`) file created by the `extract_messages` command and the Portable Object (`po`) files created by the `init_catalog` and `update_catalog` commands are useful for creating and editing translations, they are not used by MkDocs directly and do not need to be included in a packaged release of a theme. When MkDocs builds a site with translations, it only makes use of the binary `mo` files(s) for the specified locale. Therefore, when [packaging a theme], make sure to include it in the "wheels", using a `MANIFEST.in` file or otherwise. Then, before building your Python package, you will want to ensure that the binary `mo` file for each locale is up-to-date by running the `compile_catalog` command for each locale. MkDocs expects the binary `mo` files to be located at `locales//LC_MESSAGES/messages.mo`, which the `compile_catalog` command automatically does for you. See [Testing theme translations] for details. NOTE: As outlined in our [Translation Guide], the MkDocs project has chosen to include the `pot` and `po` files in our code repository, but not the `mo` files. This requires us to always run `compile_catalog` before packaging a new release regardless of whether any changes were made to a translation or not. However, you may chose an alternate workflow for your theme. At a minimum, you need to ensure that up-to-date `mo` files are included at the correct location in each release. However, you may use a different process for generating those `mo` files if you chose to do so. [packaging a theme]: #packaging-themes [Testing theme translations]: translations.md#testing-theme-translations python-mkdocs-1.5.3/docs/dev-guide/api.md0000644000175000017500000000113514502137725020101 0ustar carstencarsten# API reference NOTE: The main entry point to the API is through [Events](plugins.md#events) that are received by plugins. These events' descriptions link back to this page. ::: mkdocs.structure.files.Files options: show_root_heading: true ::: mkdocs.structure.files.File options: show_root_heading: true ::: mkdocs.config.base.Config options: show_root_heading: true ::: mkdocs.utils.templates.TemplateContext options: show_root_heading: true show_if_no_docstring: true ::: mkdocs.livereload.LiveReloadServer options: show_root_heading: true python-mkdocs-1.5.3/docs/dev-guide/plugins.md0000644000175000017500000004050314502137725021013 0ustar carstencarsten# MkDocs Plugins A Guide to installing, using and creating MkDocs Plugins --- ## Installing Plugins Before a plugin can be used, it must be installed on the system. If you are using a plugin which comes with MkDocs, then it was installed when you installed MkDocs. However, to install third party plugins, you need to determine the appropriate package name and install it using `pip`: ```bash pip install mkdocs-foo-plugin ``` Once a plugin has been successfully installed, it is ready to use. It just needs to be [enabled](#using-plugins) in the configuration file. The [Catalog] repository has a large ranked list of plugins that you can install and use. ## Using Plugins The [`plugins`][config] configuration option should contain a list of plugins to use when building the site. Each "plugin" must be a string name assigned to the plugin (see the documentation for a given plugin to determine its "name"). A plugin listed here must already be [installed](#installing-plugins). ```yaml plugins: - search ``` Some plugins may provide configuration options of their own. If you would like to set any configuration options, then you can nest a key/value mapping (`option_name: option value`) of any options that a given plugin supports. Note that a colon (`:`) must follow the plugin name and then on a new line the option name and value must be indented and separated by a colon. If you would like to define multiple options for a single plugin, each option must be defined on a separate line. ```yaml plugins: - search: lang: en foo: bar ``` For information regarding the configuration options available for a given plugin, see that plugin's documentation. For a list of default plugins and how to override them, see the [configuration][config] documentation. ## Developing Plugins Like MkDocs, plugins must be written in Python. It is generally expected that each plugin would be distributed as a separate Python module, although it is possible to define multiple plugins in the same module. At a minimum, a MkDocs Plugin must consist of a [BasePlugin] subclass and an [entry point] which points to it. ### BasePlugin A subclass of `mkdocs.plugins.BasePlugin` should define the behavior of the plugin. The class generally consists of actions to perform on specific events in the build process as well as a configuration scheme for the plugin. All `BasePlugin` subclasses contain the following attributes: #### config_scheme A tuple of configuration validation instances. Each item must consist of a two item tuple in which the first item is the string name of the configuration option and the second item is an instance of `mkdocs.config.config_options.BaseConfigOption` or any of its subclasses. For example, the following `config_scheme` defines three configuration options: `foo`, which accepts a string; `bar`, which accepts an integer; and `baz`, which accepts a boolean value. ```python class MyPlugin(mkdocs.plugins.BasePlugin): config_scheme = ( ('foo', mkdocs.config.config_options.Type(str, default='a default value')), ('bar', mkdocs.config.config_options.Type(int, default=0)), ('baz', mkdocs.config.config_options.Type(bool, default=True)) ) ``` > NEW: **New in version 1.4.** > > ##### Subclassing `Config` to specify the config schema > > To get type safety benefits, if you're targeting only MkDocs 1.4+, define the config schema as a class instead: > > ```python > class MyPluginConfig(mkdocs.config.base.Config): > foo = mkdocs.config.config_options.Type(str, default='a default value') > bar = mkdocs.config.config_options.Type(int, default=0) > baz = mkdocs.config.config_options.Type(bool, default=True) > > class MyPlugin(mkdocs.plugins.BasePlugin[MyPluginConfig]): > ... > ``` ##### Examples of config definitions >! EXAMPLE: > > ```python > from mkdocs.config import base, config_options as c > > class _ValidationOptions(base.Config): > enabled = c.Type(bool, default=True) > verbose = c.Type(bool, default=False) > skip_checks = c.ListOfItems(c.Choice(('foo', 'bar', 'baz')), default=[]) > > class MyPluginConfig(base.Config): > definition_file = c.File(exists=True) # required > checksum_file = c.Optional(c.File(exists=True)) # can be None but must exist if specified > validation = c.SubConfig(_ValidationOptions) > ``` > > From the user's point of view `SubConfig` is similar to `Type(dict)`, it's just that it also retains full ability for validation: you define all valid keys and what each value should adhere to. > > And `ListOfItems` is similar to `Type(list)`, but again, we define the constraint that each value must adhere to. > > This accepts a config as follows: > > ```yaml > my_plugin: > definition_file: configs/test.ini # relative to mkdocs.yml > validation: > enabled: !ENV [CI, false] > verbose: true > skip_checks: > - foo > - baz > ``` >? EXAMPLE: > > ```python > import numbers > from mkdocs.config import base, config_options as c > > class _Rectangle(base.Config): > width = c.Type(numbers.Real) # required > height = c.Type(numbers.Real) # required > > class MyPluginConfig(base.Config): > add_rectangles = c.ListOfItems(c.SubConfig(_Rectangle)) # required > ``` > > In this example we define a list of complex items, and that's achieved by passing a concrete `SubConfig` to `ListOfItems`. > > This accepts a config as follows: > > ```yaml > my_plugin: > add_rectangles: > - width: 5 > height: 7 > - width: 12 > height: 2 > ``` When the user's configuration is loaded, the above scheme will be used to validate the configuration and fill in any defaults for settings not provided by the user. The validation classes may be any of the classes provided in `mkdocs.config.config_options` or a third party subclass defined in the plugin. Any settings provided by the user which fail validation or are not defined in the `config_scheme` will raise a `mkdocs.config.base.ValidationError`. #### config A dictionary of configuration options for the plugin, which is populated by the `load_config` method after configuration validation has completed. Use this attribute to access options provided by the user. ```python def on_pre_build(self, config, **kwargs): if self.config['baz']: # implement "baz" functionality here... ``` > NEW: **New in version 1.4.** > > ##### Safe attribute-based access > > To get type safety benefits, if you're targeting only MkDocs 1.4+, access options as attributes instead: > > ```python > def on_pre_build(self, config, **kwargs): > if self.config.baz: > print(self.config.bar ** 2) # OK, `int ** 2` is valid. > ``` All `BasePlugin` subclasses contain the following method(s): #### load_config(options) Loads configuration from a dictionary of options. Returns a tuple of `(errors, warnings)`. This method is called by MkDocs during configuration validation and should not need to be called by the plugin. #### on_<event_name>() Optional methods which define the behavior for specific [events]. The plugin should define its behavior within these methods. Replace `` with the actual name of the event. For example, the `pre_build` event would be defined in the `on_pre_build` method. Most events accept one positional argument and various keyword arguments. It is generally expected that the positional argument would be modified (or replaced) by the plugin and returned. If nothing is returned (the method returns `None`), then the original, unmodified object is used. The keyword arguments are simply provided to give context and/or supply data which may be used to determine how the positional argument should be modified. It is good practice to accept keyword arguments as `**kwargs`. In the event that additional keywords are provided to an event in a future version of MkDocs, there will be no need to alter your plugin. For example, the following event would add an additional static_template to the theme config: ```python class MyPlugin(BasePlugin): def on_config(self, config, **kwargs): config['theme'].static_templates.add('my_template.html') return config ``` > NEW: **New in version 1.4.** > > To get type safety benefits, if you're targeting only MkDocs 1.4+, access config options as attributes instead: > > ```python > def on_config(self, config: MkDocsConfig): > config.theme.static_templates.add('my_template.html') > return config > ``` ### Events There are three kinds of events: [Global Events], [Page Events] and [Template Events].

See a diagram with relations between all the plugin events
  • The events themselves are shown in yellow, with their parameters.
  • Arrows show the flow of arguments and outputs of each event. Sometimes they're omitted.
  • The events are chronologically ordered from top to bottom.
  • Dotted lines appear at splits from global events to per-page events.
  • Click the events' titles to jump to their description.
--8<-- "docs/img/plugin-events.svg"

#### One-time Events One-time events run once per `mkdocs` invocation. The only case where these tangibly differ from [global events](#global-events) is for `mkdocs serve`: global events, unlike these, will run multiple times -- once per *build*. ##### on_startup ::: mkdocs.plugins.BasePlugin.on_startup options: show_root_heading: false show_root_toc_entry: false ##### on_shutdown ::: mkdocs.plugins.BasePlugin.on_shutdown options: show_root_heading: false show_root_toc_entry: false ##### on_serve ::: mkdocs.plugins.BasePlugin.on_serve options: show_root_heading: false show_root_toc_entry: false #### Global Events Global events are called once per build at either the beginning or end of the build process. Any changes made in these events will have a global effect on the entire site. ##### on_config ::: mkdocs.plugins.BasePlugin.on_config options: show_root_heading: false show_root_toc_entry: false ##### on_pre_build ::: mkdocs.plugins.BasePlugin.on_pre_build options: show_root_heading: false show_root_toc_entry: false ##### on_files ::: mkdocs.plugins.BasePlugin.on_files options: show_root_heading: false show_root_toc_entry: false ##### on_nav ::: mkdocs.plugins.BasePlugin.on_nav options: show_root_heading: false show_root_toc_entry: false ##### on_env ::: mkdocs.plugins.BasePlugin.on_env options: show_root_heading: false show_root_toc_entry: false ##### on_post_build ::: mkdocs.plugins.BasePlugin.on_post_build options: show_root_heading: false show_root_toc_entry: false ##### on_build_error ::: mkdocs.plugins.BasePlugin.on_build_error options: show_root_heading: false show_root_toc_entry: false #### Template Events Template events are called once for each non-page template. Each template event will be called for each template defined in the [extra_templates] config setting as well as any [static_templates] defined in the theme. All template events are called after the [env] event and before any [page events]. ##### on_pre_template ::: mkdocs.plugins.BasePlugin.on_pre_template options: show_root_heading: false show_root_toc_entry: false ##### on_template_context ::: mkdocs.plugins.BasePlugin.on_template_context options: show_root_heading: false show_root_toc_entry: false ##### on_post_template ::: mkdocs.plugins.BasePlugin.on_post_template options: show_root_heading: false show_root_toc_entry: false #### Page Events Page events are called once for each Markdown page included in the site. All page events are called after the [post_template] event and before the [post_build] event. ##### on_pre_page ::: mkdocs.plugins.BasePlugin.on_pre_page options: show_root_heading: false show_root_toc_entry: false ##### on_page_read_source ::: mkdocs.plugins.BasePlugin.on_page_read_source options: show_root_heading: false show_root_toc_entry: false ##### on_page_markdown ::: mkdocs.plugins.BasePlugin.on_page_markdown options: show_root_heading: false show_root_toc_entry: false ##### on_page_content ::: mkdocs.plugins.BasePlugin.on_page_content options: show_root_heading: false show_root_toc_entry: false ##### on_page_context ::: mkdocs.plugins.BasePlugin.on_page_context options: show_root_heading: false show_root_toc_entry: false ##### on_post_page ::: mkdocs.plugins.BasePlugin.on_post_page options: show_root_heading: false show_root_toc_entry: false ### Event Priorities For each event type, corresponding methods of plugins are called in the order that the plugins appear in the `plugins` [config][]. Since MkDocs 1.4, plugins can choose to set a priority value for their events. Events with higher priority are called first. Events without a chosen priority get a default of 0. Events that have the same priority are ordered as they appear in the config. #### ::: mkdocs.plugins.event_priority ### Handling Errors MkDocs defines four error types: #### ::: mkdocs.exceptions.MkDocsException #### ::: mkdocs.exceptions.ConfigurationError #### ::: mkdocs.exceptions.BuildError #### ::: mkdocs.exceptions.PluginError Unexpected and uncaught exceptions will interrupt the build process and produce typical Python tracebacks, which are useful for debugging your code. However, users generally find tracebacks overwhelming and often miss the helpful error message. Therefore, MkDocs will catch any of the errors listed above, retrieve the error message, and exit immediately with only the helpful message displayed to the user. Therefore, you might want to catch any exceptions within your plugin and raise a `PluginError`, passing in your own custom-crafted message, so that the build process is aborted with a helpful message. The [on_build_error] event will be triggered for any exception. For example: ```python from mkdocs.exceptions import PluginError from mkdocs.plugins import BasePlugin class MyPlugin(BasePlugin): def on_post_page(self, output, page, config, **kwargs): try: # some code that could throw a KeyError ... except KeyError as error: raise PluginError(str(error)) def on_build_error(self, error, **kwargs): # some code to clean things up ... ``` ### Logging in plugins MkDocs provides a `get_plugin_logger` function which returns a logger that can be used to log messages. #### ::: mkdocs.plugins.get_plugin_logger ### Entry Point Plugins need to be packaged as Python libraries (distributed on PyPI separate from MkDocs) and each must register as a Plugin via a setuptools `entry_points`. Add the following to your `setup.py` script: ```python entry_points={ 'mkdocs.plugins': [ 'pluginname = path.to.some_plugin:SomePluginClass', ] } ``` The `pluginname` would be the name used by users (in the config file) and `path.to.some_plugin:SomePluginClass` would be the importable plugin itself (`from path.to.some_plugin import SomePluginClass`) where `SomePluginClass` is a subclass of [BasePlugin] which defines the plugin behavior. Naturally, multiple Plugin classes could exist in the same module. Simply define each as a separate entry point. ```python entry_points={ 'mkdocs.plugins': [ 'featureA = path.to.my_plugins:PluginA', 'featureB = path.to.my_plugins:PluginB' ] } ``` Note that registering a plugin does not activate it. The user still needs to tell MkDocs to use it via the config. ### Publishing a Plugin You should publish a package on [PyPI], then add it to the [Catalog] for discoverability. Plugins are strongly recommended to have a unique plugin name (entry point name) according to the catalog. [BasePlugin]:#baseplugin [config]: ../user-guide/configuration.md#plugins [entry point]: #entry-point [env]: #on_env [events]: #events [extra_templates]: ../user-guide/configuration.md#extra_templates [Global Events]: #global-events [Page Events]: #page-events [post_build]: #on_post_build [post_template]: #on_post_template [static_templates]: ../user-guide/configuration.md#static_templates [Template Events]: #template-events [catalog]: https://github.com/mkdocs/catalog [on_build_error]: #on_build_error [PyPI]: https://pypi.org/ python-mkdocs-1.5.3/docs/css/0000755000175000017500000000000014502137725015725 5ustar carstencarstenpython-mkdocs-1.5.3/docs/css/extra.css0000644000175000017500000000304414502137725017563 0ustar carstencarstendiv.col-md-9 h1:first-of-type { text-align: center; font-size: 60px; font-weight: 300; } div.col-md-9>p:first-of-type { text-align: center; } div.col-md-9 p.admonition-title:first-of-type { text-align: left; } div.col-md-9 h1:first-of-type .headerlink { display: none; } div.admonition.block>.admonition-title { display: none; } .admonition.new, details.new { color: #15654a; background-color: #edfff9; border-color: #bcf1e8; } .admonition.example, details.example { color: #353579; background-color: #f0f1ff; border-color: #d8dcf0; } /* Definition List styles */ dd { padding-left: 20px; } .card-body svg { width: 100%; padding: 0 50px; height: auto; } /* Homepage */ body.homepage div.jumbotron { margin-top: 1.5rem; padding-top: 1rem; padding-bottom: 0; } body.homepage div.jumbotron div.card { margin-bottom: 2rem; } body.homepage>div.container>div.row>div.col-md-3 { display: none; } body.homepage>div.container>div.row>div.col-md-9 { margin-left: 0; flex: 0 0 100%; max-width: 100%; } /* mkdocstrings */ .doc-object { padding-left: 10px; border-left: 4px solid rgba(230, 230, 230); } .doc-contents .field-body p:first-of-type { display: inline; } .doc-label-class-attribute, .doc-label-instance-attribute { display: none; } h2.doc-heading { font-size: 1.5rem; } h3.doc-heading { font-size: 1.4rem; } h4.doc-heading { font-size: 1.3rem; } h5.doc-heading { font-size: 1.2rem; } .doc-contents { padding-left: 0; } python-mkdocs-1.5.3/docs/img/0000755000175000017500000000000014502137725015711 5ustar carstencarstenpython-mkdocs-1.5.3/docs/img/screenshot.png0000644000175000017500000014631314502137725020604 0ustar carstencarstenPNG  IHDR [@̒IDATx}@g_ymc{ZzjkhIkvfwfwY@NYf>;;s=p`0 4VmP`0 `Z;: `0 t Μ9o߾۳;{IמtٓY{,5jj6MUӻ@'''ƀ`0 6Fq駟~y~/s:!^~`0 `3(:mm=1::!9N@`0 o1*tB)@`0 (;u.  `0ؔw+o;o޼91˳Z'|篽O?_|yyy-SN}Y4-`0 h?@୷:w=6|ͩ(ӧ6|8[n~/\ްqo~7$b_322v gsʗ +cWo]׾̎=>dSF]Q䜯HyvєTU0PUGk,/항w(_vN'r`0ޱ>+}8v؞={U~Q`KƧ~SMY/^x*}x?퓬3 #O=~3oo+VxgC<:`pppÍ7mxxtgΙЗlnۜE^ܺcR _8+GH~nEW_l7G_|5]$h7gVq I'_ٿ7Z/^<:EVtV <}b{nyG{$`0 l۶m4&}|(u#U__6K Lu[^|xѢE< {MgθΝ;kͺUa /$X`|zpX';T:e9 ENssC;8~ 鈯_4Ο1 8_ vJ+\C7e0niiyGN6{ `0 ˒M`PnwJz]]kRڡC[n3\wSWWY ,V'߉εkD>1ܾ}ui#h',^g'h$>u$Wi"}n7_]c0ǫAۉ)p^uy1ׄCo9(Q `mGy-VbvR??Qr1_dnܸA"oNNuݟ}Irƕ-˿ pTP+~; WΤ=D'TW攑Qi C^Q0qٿK|i~4'f}]Kh;wG&vr*Zj7KK؁ћOWJwܢklHWˎO( `0 6j7(-}b̓Rٕ+WNu­[Ա6}Ŋ7}גHzժUK,L}f1g-"Tظ>?5hpZ[?<}.IىU/D%>EoURIh\ j!5ĐaGoVK(s+紉Nxjjh?s&"}&5SRzɈEI/͸b\'gԿ֧^)UlK+ ՍX`0 D(*jo4dMSSӟǴfLea̿uue UGt­裏RMe˖~괹IF$s]uyGt̳]r峢%$1:7~GWCCщH f8А{4$FGٰw.zxη6P(_^# 7N`0 vŋi={4mf(`?z#jLH+Ũfl&yH0p?R~ɞ5{Մ%!@>q.r]cBg'i "eڵT'|=?u!;ڶ@4*$oNH'^:tC&a_~a>z`+qpuH(]X <^̍eKyU y(ۻP50cJn̤:Ke:h%oH4yt4{0zqt΋ ]ݜf6"ihcVBwM67l#q`1`0 ߍla78`6KK^0Wc șN`h*S4>Xm,]Ԩ@?S S4r>KԘ_K3'AֆTEkmzmPCFh:a&a&_.!F`@i:S̋ `0>7Z-W7k2P$`:Arrx|#3KSu ǘ +.6mTH)ۼy3N鐔8&2<,g#'e{i~)1 ʐzѸ>>PLOsIR^̤4OG%U> ѨƳQ)t~wU74' jx>jv.)d ̺%NWQQJBQ1X,шpglP#jrBY{֭oh~G0 `h78Ov;F{n:00@'PSJ czNhG-'[SSS?3ua5,ZDnCQ1zLN')#ꡈt4~x4PIv]5{`jna%$Is&=C+n. V*jrq˄N0Z4-+mlt `0,۷o-PQQ{)"aW^(X rJ1Yxɥ~ȟ鄀?|)Y`\iœ,PWL'P&4}˗{Lڟv=f `0}nP'NV! )w̖-[hB$3Exƺio(x]#'#{rfOޡP>9NW P6D+|U3 7o$hFG0 `0)FOz}>MG 9a_;N`'+G3Rf>)\˧d-&'T<^xS)fFKS 0 `0tE4k);v<@Ù~?U?K{gv+:yWT[sڀTYjRK{N&S;P5T UCP5T UCP5T UW:;ɏŗL*I_=+Pӟ:Mߥ&9r>bi@P5T UCP5T UCP5TmUkoo>_z]w\O+]w\Sv_HcYKܯJ'*YJY]S_HN欵xxה^E䢨EP5T UCP5T UCP5Tm\Uo 6lذaÆ 6i\@^S~x4>>:>gF',> ?[}v:!?<<<<<<<<<; K?;}6:aÆ 6lذa67I|t:a^6lذaÆ 6lfN?[}v:Kny$辐mTO?Jrŧ?06 "9ٿ;wn_=~e-I.h d ?=>zߏtxb@4O4M:bȣٷo7z/D(e]rx ?>U8%Fn|r)1|(bn*{05e?rlpF'ϳ}tH^z@s!Н1>rE ?_ξI'xP|z2/LO}'.ݼl$UCh!yuGW+.S/`OgSQ†P+ft{MNDZ;?sգ+wn;Oe]jr:5D :1gU'$];GŞ5v:*Z{0<~ǚj}5&` ve~3 >r]]Kp 6}~|l$xz?=isk)(aCh B,~6_`p޼36YzƝCD@p0@jzD9ga(&g[,ꄷX?PG}U{kxsǝ~?sgX6Yj$z,kAiÈ 6lذavm>*{W{LT]TwnO_aSţ͑ƀvw>9|iWӱw-B[no}X I'x/ŎKoG7X6:=C?H:a5 uO|a:w崿ʹ59gEfsqlSE{sw~kIw$TO}dwsGt4&\Ux4̨4gfNrk='оa /<,8F;{ӽEYyӎ^U"aS2`ڈeq}D?KqyOu3Q >Y(I(g^ IWH݌-IcGu98k:wT^]'F= Y~ɚ!<<<<<<< چģO]rwg6Of7?ho55"H',[{? ܹUzoWȳL9F6b[O@_ nE٢ ac>P +tB9wg]txzl(Fٛsk ?z[ "49z#9NH<(ux=bbsH'ܲ0B%zX='cǺ"???U}o׮o4Ώ# !i^ʮ/6cؐ0=~u&J|`z|1}bN ;c ~ ="E/LhF#cmzh#k"Nv-]txEQ'Xs9uLTuXV:a7:*VGo5{L:g_HEk5Y {cWv{쐴H#A9'D :t@FYVkk\"34VOG/bFno?k}r D`>ѽyw]"֎G5R!!?~h@|+Uz߳^kg]W{[g6A#N ?Rs[oW@iwb#s3@/U6:jXq ys֛'J(:a&Hw]\Ӝ5Wo'*ʱ{_|K{FnI#w/}_Ə޾ƅ^7Ŵwgtue_Am41oVu}_7z+TJ=ou=XuEsʷgWὮo#z.gJ>9{r>f׷UV:AL<=ξ\y-hS=7L;[ ips|뛩^A9t2OH*o޹Ehh>͚op]N_xdN>7{ }XQfxxxxxxxxx ?LCs=\e>o?0vW^ZQZxxxxxxxxx _9gN'pRNs~t΁-&>`)gJ'gF'w<<<<<<<<<Z@4@4`1shN 1222XF׋f~*j] 6-GEQoO%W/ иi*NqyTj И4D^'(L1h@'N ЀN ;4@4@4@4@4@:w*hhhhhtT ܩ SA4@4@4@4@4݀hhhhh@' ЀNw4@4@4@4@4@: hhhhht Q'DahhhhhVhO Иp{ܩ;4@4@4@4@4phhhhttT ܩ SA4@4@4@4@4fN 0it] 3W'PFqa7~nppO1k~)hL:^SϷMo:a r4_ JԌFLNJG R@4@:N\1ڔ[z#x|{Gy::!y"bc:aXq[SNyEbWZN+u YZC yXT4AR6ohόJ ꄂƦTBF\&X*a 3C'd m{Ib~@4@: BCRҞ-{D~FK];_a^3m 1^pП/sDRDjg=&CLf(U'߆inWLjc*]?r';VJ/QnO_!$ҼP~]Npsf! C6걶بH7QKO74B'ݕXn_pA4Y3\^hESA'@'d}TB!FTuh: Y߃4@40, =VԶD8|U4i: s B,niV'9_ulb tĴ*ϐ@JoA;jhXiBB'a~GrڹG—$KBE'lf@Yj[:0'vEew?dzuuBGU=CWL;j3=!=L Ir"tT-󨦜NהZcI AZYR&/(.jύa(caK)ltz)cj@(h*+Wsbhtqz:j,)TRq K*}zBӒgʧF)ҭY$t~K IX_$8QtUkq;I Ӷ Ҥ\MUwwp?7>gcUP 7~&◽f@,NP:`[N{lOfq!~rRLH:1ȕRq=:bMAwNji: )%/BkYwfq$tW:AH'ե6Gu>jNHKцHfƇqI;l#QYz*'N(/r׼}3/Ըݸqi6>%rc%+" \w{:!B!Se#LH';t"iO`5$F?#)UX6/,`\KuW  vXSb,A,h`e?h<S:aHkoM. :zC)Q',KqouBH =y1+r%C Rs)EY[$ t74_=Q'Ҙ0:!/E;xNɾȚNE{&';؂̖-F 4 ' 7Mrk\@NqT\XӜV` Dy <2 ͓l]IENH%tB7FB.8i~gFрZ #!ESX%Ȥ7^c}  ИBucNX+- g 1wWCbvߑ4Ma9+Zq̛c _w-ImFL1NPCaA^~¢~^ W]lQyyq:YUĦߪ\qv'hFK#ЬE("1vCͼƄrrYES'pMڅv : e/0aoE4y^Ե6yQ=UyQq6c$BB8iťNIB@dy GԙI6l^TiFԈ(o-tic$vNM.OyQݝKU0'dKIk/,M4A[Y" 51c^Bm;;N-`H>)Ct 0xF: Iax,bcMX4@:a^ Z-Z佞Wnj1|r[vKe(Yd(l on  hy 㻷qRx6,|INeMNо8M?:6sIuwti 8.aNHjQ 8!l㘵) h$r9s?9~7X0ӏce.8[e(Mg]ğM /ա%m`09q0yQf&tMP<&#z\[ .d^*yQr#?рpsXs\fc45ɤ htt 6tvM"^_AK-8Rfn%՚T0)>P[B'ACT&-,::8x9FdARoxn>s;)[֍fǮ\蚪JҢ`0gqg b_J[z|\'TTXEū r MR_Ka)d+!_;בx_{sV.(7RwkS.3_w}׫iVF,:A]ߙ;K;mz!pW7[IN.A')t&]FQT܁^VOze)uo:5_iSQz W?s/lqSoǡ '~n}CsuY^{P(Chek;*}0l`{=o;@4@4@4@` xhhhtt :O1 ЀN./roUr NDء ) :nN=3hk/8ytq! 6A[oƠ` xhhh}BaK-gqsAw} #Kv rD^oK[ O쪴jsmF[`m>"J-YKNUv>z‘hk :Un!<<{G+nBAnPWGk|k5k(<E4 IWlF<L' 7Sm rNGC')  =W7>wԓIT'I]U<(>ϱ/I:1tIsz=kL'nxY j}PBK< Il I'0!< :O1 ЀNNg Ua{˱M(bB|Va[IIDUPo:M2@js6h-Ԥ%df>|oNC-6퀄XإNs)HC') 7- Nآ NLhA6taP{':aKNO PZqżAH<@4@4@4@:a ;r6Ǩ <8Iw49:Aho`J~GhaN p2XdrGnC' \?'ld'ԟ/POq4vja1O==FۣW#CAsu𰗝o9=G͕1mU>VKL XR/Pi3\hNo9u:i/by6v+k{b::<q#fͼR iJ#$0CR/w؇3, I} ˖lr g*V =N{;?k j=9.{A4@4`YU4;h']dNg{gB٨.˖LUo[deCt ЀNNA'dV왌W%mfNC'L3:ރhh@'@'&I':mY?%/u‚QI>mhtt :at {j p[-i4$yv@|i)Ӥ$I!RQlU.G9yeH~ r7 |~Pbt%ZTrYRK_7kk﨟u^lpHM=CрsK::^I'H-K]F>UuAtBBԇ(<(Ñqs (I/uDjgs zED{$.E4  ~@4@::0Y:`|Bj`NMN Z j- uUZjqwĭ7RpE=/߶f?\6V:SVrj[!%yQi?PwP:A脀ND(5H!xNt b#KG Bj{!J'N@ 0i ƽ}ڃ7B[d~.EvQyQӿ/_NS~2=/o)t\§C~-hgU2wtLw~Ghh@'@'V'^w062VǜV'7n\tIf~5,U8x:٨$8vu1u}q؏%Wϒvi8\'E{ П{Aظ&[' i{8{1?MivO|95b8Lu fGfv&4:A|:hqo &~aF\ceq8$QI\()13` 9 $K>&<< ^1]8S>;QA:A;ZhŊG 3I'kfj3΀6aíXV;7>&&T3/j&:f2mxYsCl^T_z&^T5$RᛥN| RL:mo妝Ֆu-ri Btsgq x=McpޘFXE R@4@cVtؤ脼iSfB' ;]iqѸU ]\Ӯ:ni{ иiG z0d;(1?W Ffq%T~G-GOjOhMn GnNx]IcR:~U[tUoN%tϓ1EJ5z O}3B''mh&ȹAi9ug] иO]Yba!ƇN^)SN̶tS(@cC ͳGju;j #s8΁ OFyOnkO'ܧy{KhK-toC:nGP]ĐNJƿ'lif-b#l^g:hhhh@'d<^ɷMNXp"*|7?R%jqV^{ P$V˖`mP~G1;3rɃ:yvUuZ)NNWJC:L 脌1Fik^Ĵ.I ~[(>^9rk{cN]jt n$I?>!v'\u21~ Lчy@HJUܢQPV:!F|#Xu6I'H<u:Z`muB BwNK  3Q'NW.4+:9 xnhhtTиohprK\X K+jj*K Grpo@' SA>tU"RL<3* <7@4@4@:w*hnAW`PPc.WӬ}7 ܩ1iY FEMG //䍣It ЀN  w(CHBMqaqYJVAH')'7͒LW5_ i-/ϕZ ˬR֔JsԔZ$i_\NΊ,uV }tO*{ⵣr\_7UȩrՓSbJRq;8s@5)RP\^Ks4@4@> QbSEóc<ѫs굿!8 e(ΉhF:!tp$U d6DiHsTLc)bS qOӀN 3: xXMƒ z2 d=y:=a9- x@ˡ4Nפ1y(A~wu(+$)2;_  n@4&sz ͤygN*s*H鰪'jSQaW[+ ծP9EfJ ЀNwEM\Tܩ͹$r>qL AeQ=jjƭ>^&/}:It:.$j  ЀNw1k{lt2QT3/jeyQ-I r'^i&!O55$/ |7G#T2k4X36լVnΚb&'J4%IbudM?~Y#RwM:kJNbQzJ.}_ hhh@' ИH;F6VbӂjG4%FL9%UMWGTSV)&U(,+qtx82O . nY{ rI _yRh斘NT_ hhh@' Иk SX޺G0p|TKKm;g|GP;:*sJ'r WX E vTӚ[T◂hht!pM5Ņ5rr-lq/;핲AHI&wRyQ}eZ* jvq֎K|*Z dF;a뭥Y= ЀNw4@4@4@4@4@: T ЀNPufc( '@тhhhhhLR{ܩ?{ouyc>lӼSab|[<*BcX""Z9+&͛AO3)jBnd]=ibـ֚!EI"K XͬY5Pj@ @87Pj@ 5ԀPj>5pB 5ԀPj@ +j@ 5ԀPj@ \Pj@ 5ԀPj'JPj@ 5ԀP/ض:W*ԀPj@ 5Ԁ RԀPj@ 5ԀOPj@ 5ԀPT8Pj@ 5ԀP+j@ 5ԀPj@ \Pj@ 5ԀPj'JP[=xӽwtZ>~7ԀP>W*Ԁj)Pj@ 5pB 16SxtÇ5Ԁ'|87Pj&5(/# gaTN m ZXNouh+e}f5V*A8;j@oPCr P4A)sƚfI[3nm ;9'JT7'6%5YX+li=uw^[}_۽߾?S;zos8}wQ|@ 8Z5'>A} fT0z' z4'ymc@lz /E#^}c9evM7<8PԀ/x±c_Pj%J>9LhO#>g$T%kN!ᧄI ':$mJDfo//=ZX$) &QͯȲ?FTs#\q}w?9OsQ֪&²Z"h`Dh\2ʲ$)in\4ȳ\Jh _WKg(FO`1r֨Fߤx:+vsY h)Cv06D5#srIꫡzynV+ X S˿O3:r(\;6o.Z{:B}:lc0aPXO`}mꚍ,Y؆lViu:yn܎B WBk^ #NP>j@k-.. \W Kr(`!zF/k9zg$%_Hv̗(YS%fK\KJТHvЫ gSKZfә| ' ؍ $kjSJ+Yd'P P͠ϧ̮O "zʠ^ ,L9 ZR&m-C';O :+FOpcJ*+SoEyZ\Xg"Ŭ e{!j1_n؋0Oize25}jnX3C·6R +1JJ[a>aq` [B2@m4?l}X_8̰V<'wQ5|Tq 2-'"R,4nOaA-.Ǟ[K0Dɽ7=BV7+pz֨n$M L#Wgo@Kv ά>Asy[VgaC;4I+ ,,kì7mV0J1NYz>^ MlAKWXbư~-U Y0 mE;F) kr|%ȱg}Pj@ Ԁ/ObG a6LYQHFvli~m4`iܣgdqs3@j+jTaK3@Ow~JCI Yz?w#wdaO0؏Ze"<L9 iÕh@sn"6f>^Яdbվ `hhiîA4FWŘO#vGc6 RQd]/4~q-wcjKC+z5N1@b쁊~> VˍyyV|Sx8>pU>s5Ʊҍ!%hO`4'9ຟ' CN).0c47Di+ddMO I<>3א!"5iMDfJh< <:f"23,22oTg!'v*>"1 :)60nI>?6Oiy2UaC0wӚZ 9K#>a+/F|wǿlü#|hӫF;WO8pPj<}'JP> YI@GT ӓ{^MTOЬRikO"5iO+3swƳ:/l0;;%7Om,IyA|'V%T XUk^=s@oBt^T+Fq}R6X;(SZc^Z&h݆aI"j]тv1SDy灥lw)6O~٘' ܍۵ׇ3o*y/]%>,`UYXU<`#ʔ*@_FYbb,ꘗ0똗2cvġi퍼])Pj>87Pj&5S<$AEhXvwZ|GT?>e||4ߑ=cR0jMD>^LAOO k_Q"Ѡ5e "7eȲ"y3ҮA-*3HjxM>Ѝ24`ٮJ tykg<](VO_Zu{o|nДXMz7ǟ}I5􏂗\>aj{{%9Xg iʆQL>z-F/pd^T6qu$a Nfj šV(]j@ ՀO 5,p&F E="'O /V@";j@ 5>X|ƒvB'ITB 5ɑǶɿRxjt)_-'t?<h+MwQ|@ s5Ƌƃ>wQ5|T5O0Vmfwh?ߡ`iBn%$B +]d66l&F~`YrvOe%0=4h~y]oSv;ү3jՔH^,n M>W+fbbŕ n-\XV\h1X;"CykRlO*,L~}1ݛbSAybbքXDfyMm=#Fۤ=?o `wk(  ov'{ -f6VmE5 ƭ ԀFIT%N&4'j3εAK>Q R6%`qK|σV!.I&4ݪ"BghDeK%5A-(\&*$ɑR#?go JZoY]P™HyG.ű, \dƮTӵ8@z" ;,g+v[Li-t X5*Fm:; F<^%XLvZL-Pd=>1YWQplBvSOU[fnS6߂vѤ^/ fHl-vS6c'2- xZ)b7r bYl,z';|BBv:X^2Xa4bf27uY_Xq4HCZkjf BtvI#^fcN Mz8FAˡ?nsA}QSR1kJaI=%P,||BHe-Wc~!"$҄c1*7[bBXRE^d=zXRj,87;,ʨrۃAc9uUe5OI5z-jmzM6ԣ 9/4kdtmv~XNB 0qLμ#䋆*Phb~כڀś>>˿RDk&)lʴ'8= hB#n/;eŘ 8 ',]{ Ē}[<> D "El|Ճb{xBhhac{˺+Zuwl즙]1jooG>-Ǹq$N2 l \&E5|_}T5DJna_5<}1g,@j3D~3w),0e1У?'ّZo|% 4q.I#uG]T c;^]zh$ =|H?)dXo'q+ _P/n=һ]j10l~5'cj%*f:O;b1un fl0h&\a pqw Ԁ'NzB qr|B,;O}B0rJ($l%d- +DqxLàNC q32Q x5;慨 !NF,Kb;J1q@bhXgiR sx_wA1jT8y1n@e4ֳJhnP>OX _]V.ݱ' uϦ >f'gEރvyfqUj%x ;XI9o_bOM )O*U)^HF4!bņP^s B>Z'|b\;j@ \PjLҍ!x'P>Rg٢DeN(k(.K1_mq jT{d Y>>xajm,>H}2 y(gO"OxX%|j*?Vxb&bjʩOp|MvyG ذ0)UVI|_a&u̬йA3:澈䗲UR+E/ޏ~llq.B_c*Fίx1sF4+J:f]i~v :fC__oWnbKhrvй]dMԼu]NT=]}o~|;Z.Fq(SԀO 58)%Ѱ(5r';L#)|{3tG9h#{Ƥ`47'0@k:iQ") G2>a_JfID͔ؒi0b1a;)>+5gֵ>ٔOkx'u͋j6|jU6IjНy@Ds* kJf5jv)̮̋au3ju8);d=I8Xzw;em\M/ &>4ЯLV. 5ԀO 5}xz$O QlV*4?xPj@ y}in+5N  :>ۥ4pj⾁kj@ q2|W8 Ԁ':{O<C*}R-v \Pj@ \Pj̳Ճ' 5ԀOO 5Ζ{F0F)o@ 5|¸Or&_F,ԀO >O >)@ 5Q pPj@y5T#ϼ#RyG@ 5^`0pƯT5Wųc'j@ 5}_|qU>s5iR>yQˍhKk] Ċ]zĻx+je+[->%B^ལI}|۟4U.!8_rE5iQ>W*ԀCϚYҤ֌[~93xnz:lʨur"K>/;߳}B,oT^\_B)?WF>4k fW&)Bf97a/)])Pj'J /O0륂ke+(=_J^-qX6B |soNNP>W*ԀOx|g+J }#a0;֛V66Q`%6-7elay=,Ԓ64~F1W6붽:{Z_Cf~1o-fS+jC= -n/)cj"ZgSK!{S8;H-XZ^|vײwu+Uf5-N5̉O*}#dOB$6qw Ԁ 87Pj6T%N&4'j3εAS.Q ;$mJDfo//=ZX$) &]YKZ_|A}MU⢉֦1I0VwEwtS+ ǿۈQ:_a,rZ[Wvbz[܎Bn0J=]gG͆Ꮊj(ڮYJZȰܥR_i8ݜSf1UtlB4+}6 -J~E-'nviY@|L jqi]o]=H3)&O o-&C?/'j),{w}RMIv>3龘'mI3NP>j@k-.. \W Kr#v5bo'_rul`!;Ɏ҄c`M-r!,)BAV2؞M=,k5NgOY)*QO ^ >f0Jhy'%"f˥7(bX]i)T~i5WttXKc)9kS{GlZ+!]ğvyc|8'+sULOb7|)Ol,wQZ̗l #'gMcm8+ KmXq>)GZ0j?p)ЗCL1l D])Pj'p[A q BTr ,Ԓ* )q8gFTnOaA-.?\ Ct{#dGj\yG>f{./0/#JS12vA=\&3|’sSN'vv=AS}Wg}k[zQܥeRh4cQ$q(Sx8>pU>s5Ʊ X>> a)7&Ò'*gK~4h QdE#jDHBk#֦*CV+jcv>'Pܚ +svX6:ˀ*7CH+>A',.~fX& ÁO.SR(Znj%;c<=' T +[^>%d-f?C.5^<58@ qՠt#rG;(3lQP09Ja|R9xJG'mSbl>Cf>/PM7Kw;>!41jk;X$]wQ;ҝ~;RSwR ~k7L9O`#9w>gםf^>9Lo]j*0qw Ԁ/ R8O~Vg=%\('}4^VtQP:O:q+Y'FTV|Oe peuz;butmT|7T@˗Egz "ڲcͱV5Y!xs*x c[5cuǬMakTܨlXм>0ZU+ſS|bT~{U qn4x=ovu̿bTnrdm] -n S v }X~[S6Ef 6妉(SԀOPL丨#.%Ѱ(5r';L#)gd{|G h~1 (dOU;|DJÖ;`'Ay} W)>6h44ʗwb&Omy=;(Ū6gvU.g7zkGxk##'\`YG7V)Y>nᓛxzO0LJci=Ƈ輨k^}Nyc>/jٚh &g,}E5| Ԁ' @ 5ԀOP>>5Ԁ 87RƩTӽ8>>)o@ 5||TqxуG`fÇ5Ԁ >)<>L2ԀL{P # s3O ԀPj@Q 'B 1=/??҄ 5ԀO/j@ӧee@N ))>)Pj@ 5N'zB q (Jr;)@:̣*>)Pj@ 5N''''JPy:iʸ6IPj@ \P쪁yQ2SǛw dƵa6rumfbgc x?F_r}e|Rp߀Pj''JgP߳f4)5c֦_ [;PͳjQdYfvx ЋP OfӯR`1ߜ 4Яng>|Pj@ +j@ s 7O}j@ 5pB .EׁeoRPd31-XHWvQZl9)-],hS-rvZvX6Zb Cۻ|aQO'OJb2r!)7QB!ʬvRm!bF]Y`nͦ;_^yWԁwbߡŕ ;}!-^-M3z6Yv +Ԃ wӯZ6k7ԀP>W*Ԁ ,WɄ&$Zm0zFBU¹[:~Jp"8>SJҦL:w0w6~{yy*"IĞfZ&wOa.C4W7p4bH>ai7~{x5ݦD )5*F|Jۤ0vc)Jhllc=ڛ<>zhX}B v{Y h9hthTWB `&+vSlb#>xulCb1@xYnsxl)WH9uY- Fz0ls!URzMGS?be?f+殾z> 7&k~^)q]j@ +ju5^{mqq~8OZRXFF  -3~Y-?E"i_H>IΚ*7[bBXR^dt`^]v:}ϧrfFԅRTQ >_ĄO `cz1y,|0mg'5hμ#2c -E9sZY~vfc}!+wheZ>VX-K0,`w$[m񄴌c]XZ{Q ajKk[-G'_{,'0&}j@ 5pB39[8O#`PK,hj3Di1ݞrZ\ =ZZKVq~I٪ssbWQ蠖P5LOHZ&#usOu(}Yrvwm'4>aHose;<;Ecz͝|x*PѼcYXw }X>SEXn(䧸w7D~rjX6s![xJ'%1p\%wĺ?N(U5q]j@ +j'pb|B}†i=Ηa2 (tr~I+Y2 lSH`4`iG4cLTcyCr0^h O`UXƒq$?_ j~jgTٵ >qp2'V +aLc}{1.񼣐(Y +3}сW;䓻]`j9Yu32Jbv٨VOp ]=#5q]j@ +jq5(݈Q8٢Da? S#<1,0t(v 6\; ׉ m=m<ylr$oiBŶ|*ŊG(ַz*'p\ZMf_jsa=̿[yG4wFGD*>N6uPj@ \Pj|𳒀8AZ8[YdjOz'"g̗xI6 I 9R'K؊_p,>Aycw15h$c?q4R!sj$ jY0c-30^Ǽ.6UW=g.Tۢx?]mw }}mz.)hS,K'ʰW 7b:fPZijRW wdϘ\K=O&ŠO ;z6>jxK'ӯɒopvS6OXljPzyu]LJZ'rF_JSo|̋jM^ʖ洅& ,NҴ֬ UIE`5Vx]]]ܥMᾁ(ԀP>Y5 Q9'eۜ45$2ډoeo. 5ԀO 5||™ lL2D>k(p߀Pj@SJ{ɓ' @j801umO yуGO>2?c(D>3 # pZGarCg;)>>O' |>O' OO' |>OLr|3y\Wd3sWL|Ǭy}U˫Sy=>>!+7>ON9s^w}kC/r| Op9vb\|U8o']8>'>!tu>˶xs 'i a||d #sbŋe+@޻񊈘rHSBͽ72/^8gG|«;QݸzVizyk5cX}jȣX{z>k\gGzdQ+W#S/[I\3yw "dOYan%g|0zqm ';`ey.S!kw΍+i󭾒1 {z´V.^[NMwOWM*ܥw-4 w޾0#$|'i'aЅ{nۄ7 e}øu-N{>c}ž~6!K[?Qh2}ñ-b FӎMJ^B_l7hWoo7h<1Po8y0/rP%Dټlq!'0'w_~7 ۷]ڳwÞ#BfsS߼|={BK/ogLݼmU 'h G+^xmBDAC(yP^ '(\D d׆3.1ҝC&R5oM^>y} a+Y^Oػq9tncDk[BI gc GmC|V='ٝ4er!G4Hܻsgϝ;vqd.BxyМΰaOx>/z+BOxuafuٙgOp9b}?{pG3ˮ175TbJI gDdyߞBgAsv'gh' 6H̽[җs3>┆j.ܷp'#JI o'xDnS}N {zjlҗ0-=};;n(_PJ'OHplg#{йc׽T>,|kvֹWu۲{=' kQkG 䰓^W{N|gU|}z߾[[)c ϳg?'8Oʵ;6SA*6a"=PJ:1qO8nEuZ9w3r's^T vO{8,2N<ׯ:e( BLik} '|;^~9Wɮ{ֆЋƦ\.´߰LA~JCjiS NLNVüs3cqT$>%i2 R}o(9 3sO`Չopbƭ۷o7^v"WQOiK* }QhG;^+~_7xpzt&sڭ .o#6g.7{L ŏ׬M޹EUg[E|iCC/O6z>Ox>?ObWңZ~F_>f݉ {&+7QTB~Q\}Jp3iThԩsHI.y|%ɨO`jdWO8Oݾ|1tem׌;S|-ъf3{õ_̍^W/] N2yW _xG|gaQ1Ƶ)i+f)!5)ԘO` 7R7@{*O| -''T>>3 \qZN{->_|K(Q4 >>G'2N}uS=+&s^wBMZzޚR&||>O' |>8_~U^g???{w:};|H&apHhh# Uoy!,FIS }'O|> '>>''|/83MOO>aT` FDNׂ,|3;|bBӝl*擣PVFߤZBQϺΚ&:9w}j|‹W96@MiU\WƑ("?)>aP+j6.Y/10OG)jJ|swo'ОK |>>ll :?S#1'i<,iRFO\6ƛ Pe_(PH3\XQ +,U%O%'`HfyI˵ `ae5j $OPxe(C V3cK)ٌ`4,03&QͯȲ? [)Y#,lM/ѻY۴x"iq1u[1ﱙKI!|A+QL_Vit?_kFG?Е HЯHrpm^;:gA`W!.''p6|BЯG=d|ڊIKKzMg/e+rfM͖^30"Nݜo@C YtHy>OIz:|2<>J&[ &NzT9HHЃv}6K0Z&V2 >_0ǢLu ~LO}O"oլenַrz7AMOOWB}S$ĕDW`LV;fT'Ѷxfs-~   Jyt) :=b=?QΣFEY0N\ؐ39ϩ+vMRrQu"O0wHǞ~k[f^y'X0V iSVӬxY`;G}`LdX>3XȃVX>#MSFRQXD#7aXQLçdeHg@0yh?E[ڥʇɫ( M AXeB@I2v`",Q˒(m^˖x}/mz5cQ fWкpD NbWyYT*Ai3|a0w(w'?y̘Q O OU'j`jk9k UJ3c_AOmf&\E5qoj''p}6YfQע4p͈ig$Mibk#zMwԆJ364Y>e>%Y{~n2!L 5O|>edHLHfK|;05 /p;҆1TI&+&Ԣɨ~oG#)^i@^Iqgن9K#zygq![DiV >pa   '?4gj 8>z5j:hmi'pg'Ye-SC7Ix2op.>>''| ;(VOx>~K3O L#*kuR @>a)$4EQ RRi|L:NolFh۬"*d96~ϥmHOOE KJ1| |iB1cJx;D -!j%#ZJfk1!9x|Y0e1Уi>"q~r$Jdjiđs''N/i%y+  =;Kj%1ZHP#EK^A9x!rk>':c.`a'[JCqBxfd%YCFp4,;Jy⅖|Gq1QtG̎5~#!OO * '0k[r|O|| OO> ' '< OO(|~-Wу?? ?o{~8>O*Zx|PM>@i,~'Ɉ ?6w2a'㉠t {W%2dT?q*똚ă2uB-)އ`rQUbjUJjX~trlCkr=kaZQɸWeIW(,afxР݄hvtDŋ/WFzFF@G?!Hd2+\ i޴[)kor:;fZ7[}M(B)3aő)%_*;h8# c t?/wW~ȖvwgO~?m['|0u|9}3u_4o};z;qG<PhlNXTg>A}Bk3('e8O|JPe1 ay3]ڦ!955[f̖^!_R:uvPυ~.T&^UT)8YN[$%Y VP$>AU^iz֤z$Gn;DtJQEId&Qv:SY Iѣ Rf>>3m͗e1ooeO@ ~m ̟Gy tY _Y(o}O3~-G ` V,iR1yzF!Ű"DÖ(o!Sv0c0'g0Orq2uk%*7_z|V-=ŪOx ,~oyHFvogJ= (*= Er @3Ft>M]%{풷MULL$р2؆+Cb0:iֶ*ۇgUf>)|| O oYAO> ^oiEOև?|5';S` -Oazj Y;3||:`N <H&IMԚ|P09Vzt0c9kFtal0O ^*$nOM IOX0597%3'A[+'=$Q0 J<x?j47޲|Z=2~al:[aI'p7'"N}W +j܀'NOh};7߹G},ۗ}fww7>d_5DM;0wO3-n3*߯EiN*Nfs'|G91Y(C9#&QsVEIQ8Mn eQUxA=|| OO> '>>8i^>>p:zgop*\٫o=Wl6/_\2V<{e7$;er0S}I(Z":>gd¼YbېRPHMpP^CP%~UQ4{Tf!Ͱ"%#~5k9,IlT(|gsX,7n7R創_>luK ֵy}B4Óy]7s 30Zpe\yGU/б6wKR'n>>p'C{So+S3 ') XT1J))Ff"e0E^V/Vg0'(^}M7[==hlbP wT)hgz{4k^-MrDqŎR2"J$2@q_&O35gTnf=-?;C`Мt%SCI4q㗹O;[Aڊfkvؑ dzԶU8[^ʕj͠dy2Q.v*J:KU6E b~Q?>gKo_gtQ<|{{3|ɝ1@WQxzKV}O GdvZӮM>%e :FKs$cOBZXR"YOO>a4ޮK)k3R (IB>k4]yug/sCVg[kVp=|z"l Xߊ;]fOѠ$GGlX,,uY=b&7E(,kDWDܣ2CS ݌59: b|儕8>!tyLO|aa5VLQzN=#pKo}OݯϪ}Z,yrgrsɝr,.h+7nb}}8h]Ŧil:[OZ''c4AVOp=S+BIl%; B}s-ƃy(#WXړH1>aY:ZC B $f&:@KuVUw ;s'8-6!`ֶb>(Q/Jk`H?fXy;sjz;%ewG vu_KsKoYƧO_sOYOϮO>S}ɝvDޑ6geQ|Wvמ9#Er-|8#d? :Ǡ  s@C^'Dz-O $u#,OfxZ/UL8Z(kͧ >;DSi{rt<>+/r<ԩs;O[<߫ '|?qY 'wY>aBMH=e\9N͵R0-OO>a@:6M{.LF 'I Qc} b |G=@'OOSA)CEb"BG1UHp@@* ѐ>7Aq]]ˑګFNZ"Yc3O`qYUIN}i,x5Jnjގ)~CןO` o}j['x\/#>g>>AMl*-6L樖E9kU̬ŵ A$ޡT،2#2i Ox>>}+cQB\5w?+(gaSXOF|8Ɲ&}Xy 枉O eh2sRav,Yע5mOd@yeg؊w&<7DvTr|G|Gb!5vzxКvJdvib5u &R`˔#6_QDgCѼFɈwf屧6¯L8ǟݟ~f'<=Z|G'Wh'B"7m2^g>g0cZ ŧi0T>MZmNٻJͧ5>''9 f2yͮ|G bZxlkW6kHo''|O|| OO> '>>''puO' |>> |>O' |>OO>> ۻc6ETK^5jbx `.*5n̂!O!x8`/nKaؙ<{;.93%;V!=r-,ef4i: Nt@': N t:A': Nt@': Nt@' : Nt@': Nt:A'N Nt@': Nt@' :tNt@': Nt@':A'N t@': Nt@': :tN@': Nt@': N t@': Nt@': NtN@'; }= NtN@' C'N t@': Nt@': :tN\aRqMNV 67{ias0LZ R'潕4. 󛃫۽[?{rݙ0{7}~|adz no$N/ ŅFZF/z9iUlԞnUKv$m ?;!Z[Y5 W89;aO<{{N|2m6__%=ڝY|^'jd+ n ͯ:8+.|(;ҷ|Nd0do ?` {{i;!Y/Zy( +8%4W]!KLi{q(kjv\mYۣ]__yί/RjNl nN^ ?W8wP,.m;r8B;D'Z?tυbLf-8>//-6~8R+% e!ZXdA3~ P{F<, v<,ub\]kw{J8\yi+:!NC6$[0zq蝟IȝV7?beNp=I +'H+݉ glm;2E hΫI=~rNZބHxN8=|?sÃyv|}[w/c<ڻq>QL>ٽA"q~Ny|M٥0PO>qhӨ7ڃOuhq0O~tb1{]gJs~M8NjVAg;a8Z˞3}N0 ㅁ R)<0?|Юqq'\wT J鋝8\ N|ƛx\'c޽px]"̇3dvpbRzw̓ڣd=?H[ k q?e#H8LHq6?=NͶJc4{ &/OǏΏfT]euB%.z"e;ʇ0jѸ&XJF٥Ag\n;a<{)n29iNw[{å%/O&;axSOtBe8jgGa?/dޫ?nP> HtD'^ FMQt> Ig9™]vgsaK:aWvEiٝc%a͗ۃ_X@2[ʧLM:OvBp8Ŀ ~? |4ݟ ^-L% Ympp2ɛa¯TY'| '׼Y5ἣi=HQ?$Z0նgxઝ韛ԨVW\?,\nN(]>390w0Z;pz:H??╄R%,JZT  㧃~x4KdC?|ӊv!w"wti}=|k!\hk['LyGub%VR+V++hqa~lR:p!&invxgvB&fwxuB^+N?(U7{I2x[BV/hzXm,d똓ӫvBxoyXQ)|I'B*65Ӹ&vN8=쿍7,aOﶏϾ?0|yBɷx+lbR.?;|puwz{GUo[iO5wm6[x9 5<Oi'L*-,oN~}Q|=@_z~i!;Va;!.2h^&4/дN MO$^~rei cKta0;}QGws=w_ԫ;*W;.7}coc8 ǎ 0ZgzeKC.tK;!w}}w~I6_6^vu0/6ɚhb@'@':?I WnFIENDB`python-mkdocs-1.5.3/docs/img/plugin-events.py0000644000175000017500000001313414502137725021065 0ustar carstencarsten# Run this to re-generate 'plugin-events.svg'. # Requires `pip install graphviz`. import contextlib import pathlib import re from graphviz import Digraph graph = Digraph("MkDocs", format="svg") graph.attr(compound="true", bgcolor="transparent") graph.graph_attr.update(fontname="inherit", tooltip=" ") graph.node_attr.update(fontname="inherit", tooltip=" ", style="filled") graph.edge_attr.update(fontname="inherit", tooltip=" ") def strip_suffix(name): return re.sub(r"_.$", "", name) subgraph_to_first_node = {} subgraph_to_last_node = {} def node(g, name, **kwargs): if "_point" in name: kwargs.setdefault("shape", "point") else: kwargs.setdefault("fillcolor", "#77ff7788") kwargs.setdefault("color", "#00000099") kwargs.setdefault("label", strip_suffix(name)) g.node(name, **kwargs) subgraph_to_first_node.setdefault(g.name, name) subgraph_to_last_node[g.name] = name def edge(g, a, b, dashed=False, **kwargs): if kwargs.get("style") == "dashed": kwargs.setdefault("penwidth", "1.5") if a in subgraph_to_last_node: kwargs.setdefault("ltail", a) a = subgraph_to_last_node[a] if b in subgraph_to_first_node: kwargs.setdefault("lhead", b) b = subgraph_to_first_node[b] if a.startswith(("on_", "placeholder_")): a += ":s" else: node(g, a.split(":")[0]) if b.startswith(("on_", "placeholder_")): b += ":n" else: node(g, b.split(":")[0]) g.edge(a, b, **kwargs) def ensure_order(a, b): edge(graph, a, b, style="invis") @contextlib.contextmanager def cluster(g, name, **kwargs): assert name.startswith("cluster_") kwargs.setdefault("label", strip_suffix(name)[len("cluster_") :]) kwargs.setdefault("bgcolor", "#dddddd55") kwargs.setdefault("pencolor", "#00000066") with g.subgraph(name=name) as c: c.attr(**kwargs) yield c def event(g, name, parameters): with cluster( g, f"cluster_{name}", href=f"#{name}", bgcolor="#ffff3388", pencolor="#00000088" ) as c: label = "|".join(f"<{p}>{p}" for p in parameters.split()) node(c, name, shape="record" if parameters else "point", label=label, fillcolor="#ffffff55") def placeholder_cluster(g, name): with cluster(g, name) as c: node(c, f"placeholder_{name}", label="...", fillcolor="transparent", color="transparent") event(graph, "on_startup", "command dirty") with cluster(graph, "cluster_build", bgcolor="#dddddd11") as g: event(g, "on_config", "config") event(g, "on_pre_build", "config") event(g, "on_files", "files config") event(g, "on_nav", "nav config files") edge(g, "load_config", "on_config:config") edge(g, "on_config:config", "on_pre_build:config") edge(g, "on_config:config", "get_files") edge(g, "get_files", "on_files:files") edge(g, "on_files:files", "get_nav") edge(g, "get_nav", "on_nav:nav") edge(g, "on_files:files", "on_nav:files") with cluster(g, "cluster_populate_page") as c: event(c, "on_pre_page", "page config files") event(c, "on_page_read_source", "page config") event(c, "on_page_markdown", "markdown page config files") event(c, "on_page_content", "html page config files") edge(c, "on_pre_page:page", "on_page_read_source:page", style="dashed") edge(c, "cluster_on_page_read_source", "on_page_markdown:markdown", style="dashed") edge(c, "on_page_markdown:markdown", "render_p", style="dashed") edge(c, "render_p", "on_page_content:html", style="dashed") edge(g, "on_nav:files", "pages_point_a", arrowhead="none") edge(g, "pages_point_a", "on_pre_page:page", style="dashed") edge(g, "pages_point_a", "cluster_populate_page") for i in 2, 3: placeholder_cluster(g, f"cluster_populate_page_{i}") edge(g, "pages_point_a", f"cluster_populate_page_{i}", style="dashed") edge(g, f"cluster_populate_page_{i}", "pages_point_b", style="dashed") event(g, "on_env", "env config files") edge(g, "on_page_content:html", "pages_point_b", style="dashed") edge(g, "pages_point_b", "on_env:files") edge(g, "pages_point_b", "pages_point_c", arrowhead="none") edge(g, "pages_point_c", "on_page_context:page", style="dashed") with cluster(g, "cluster_build_page") as c: event(c, "on_page_context", "context page config nav") event(c, "on_post_page", "output page config") edge(c, "get_context", "on_page_context:context") edge(c, "on_page_context:context", "render") edge(c, "get_template", "render") edge(c, "render", "on_post_page:output") edge(c, "on_post_page:output", "write_file") edge(g, "on_nav:nav", "cluster_build_page") edge(g, "on_env:env", "cluster_build_page") for i in 2, 3: placeholder_cluster(g, f"cluster_build_page_{i}") edge(g, "pages_point_c", f"cluster_build_page_{i}", style="dashed") event(g, "on_post_build", "config") event(graph, "on_serve", "server config") event(graph, "on_shutdown", "") ensure_order("on_startup", "cluster_build") ensure_order("on_pre_build", "on_files") ensure_order("on_nav", "cluster_populate_page") ensure_order("cluster_populate_page_2", "cluster_populate_page_3") ensure_order("on_page_content", "on_env") ensure_order("pages_point_c", "cluster_build_page") ensure_order("cluster_build_page_2", "cluster_build_page_3") ensure_order("cluster_build_page", "on_post_build") ensure_order("on_post_build", "on_serve") ensure_order("on_serve", "on_shutdown") data = graph.pipe() data = data[data.index(b"2y<Ħty㣤]ͩ{e2xbMa]/bK~Nu_ݒykԱ]5/pيj݂eKG?v<4ۉ3)XcVu1NyXċ\Tnaܻ5ǻoOYjת5}K?u �q�7l/LHh! _ZrMbO 4upGl&XY"|kYQ"AGM ^s% jr lS-S|+pPSt!n+-DO0]^(y+)o4PC9/<<[uxs-Ζ ?sT^71|O=NnoSxumjSmfswg9&pQomn~I�Gc_C/|B/) Fe'BR(D[]7B /a1M ؉@+�4֠6X oKً̅sgBay{@Cd5m:_H@f$mB{NN|:.aZ!>`girC&:QǚnEܭ,ϬVRsxU؃+Lܻ~˖ ֫Wy0R;G-\q6 `sQmG^G' ݷgèHq_KģyQF[ ,% ^(ůg I82`VfER+WPOArY+E8(W YS1�{bOz >~Q^j&m9+O.&d?o߾#G/j=~q/gI5ޕ.y^ꗛ,ĔÏ0a\1xk[Hqb¿WMnĵ8M˅[yx'+yNJ>X 'qLqMIQ>CLC]{ߦ'.ku- _C{Vէù\6K^ Mz{;۹`;9 ҆ɷQA6Țh>:嗎v4!* jx'NG,D_!{`84iXnrӦ''_EuMd K5RI06/N5-3JLbU)c< R|C12ǮU[t%ug]ƒs,n9[h1.K,o u 'NM+L2l8s`ap|J06 pV/ ]5(+ 6 <:#Au�eeS� $M|^dqx2 >5'rD^ 8P֋EWpab)(~~3qAV$ Px4OV wz14\.(,/+ G8N%$suAm(l6) DE0v.<Ϟp#jJ6TqN R<+ X >vbd8v}-9 :(k@yN/Fqr~Z70TG,j##qg5_/`ۍ"eq.Bˉ]Ӱ{o=`N}bU1sq찯g5C*4h"-D,QdQI�VN � �u#uN&v^Wt![4᨝vܜlӱt'A5"+9gx!O*ub[ΠaRK g7.WVICLhz(@TԼd5,"K4˘br^Rc"ysa0ٚjnw+˵zGvVfiVʵknrZtN#I l=f;l<:}]7qnMU%}!K|95|Į Z(6}-OuP{ N1|ϣ-Fx+ꉞ|5=p}y I4VMjþ�Hv,o5@Dlے:uY�(9W^!8,@^Q8-V|IXzY` zuUppQXrf 'MtKl );'{zs.u߹~-Kps@0wݽM>Eu#z"'?⃸SO }CXc-F$\4OYe'u{}�Pΐ (0+ʃw6|!pXD5|,uO>_6/G!kj>FI!²i<@pJZ[n)wB=i8Dmj}BHϚIP"t$@`"[ P<@f_ B^ d$V9.[(>(?珐7"@:+C~Ь bTuivi-sFNkuT4#P#,S )WJ~QL7" ?܍Vʒ?_ܯ O7lhL%v %t;c`Imw==Ƿ<9MX&`J\&â|ij47`uםA6Ƙ(x| [P3()P+:ߠVQwE޺9]tN^DpKr0ӘȢ-(cϴ2MC�Wo@#/Ot%Z (�Ԃ@k'5AJ9Ke[;',P!=(%))xV*Yq_6b<zcI2ط0?;F)\^Ǘ.Ur @!l>_CNNآ֌ W6ΤW|Ż3ovη?<Fl{M¹s�`Q"Pjkܪ={+ߒ?V [eM!y d#pg20B׊^ 8kJ 6Ƞ@Y} \?-2>Ҝ^ )3\kTEM:U`FtPmzOgYR ًp#mT^wiJ{EkTx bq *9Oi�Jb YZ0J �[-ͤ9] q?V`sbraWBld Ĕ@Iirrsڽۅ{5"DhQ7jxYnKP<1bz0pW8hX5逤@C`N#>+ l2*K( �C>\", 2vFzp< �cܕ@DVlDdR3(:F$ P7\5PkNPBG cۑ좲0FTEëxkZ2 O dfyϞH$}+*1J0CN,!pt*!eP(-`o+ Wԅ%XAnFPXil-P C@|[̂B$ F]AnE W;V!7j 7z"Ǩ$QȆl8qlOOoyykY@l,*/x.oP �:濅D,d.H, u3ËFKd20E:ԽDXj"*i+)Wa!u pӺs\a!լeƸ\Z+EԗϊxPDK!# VTT`#^)V3ғ0A�?]"U2W:$7'!M4*1,Qȕ3H:[osȶA8eOԌT?6}HUZ  ۇN! M(ͅ`5#.ً.NQF�Hڄ熮b+g+7Y;dp(P*,@^БlC*P4+@E2T,L.~+l+(]1μ8sCZY$<0v?, G .Oe[V/x`kv{4. (ŧ j�"MG@(p,yS/:jjZcp\8;BJ +º nRE l ()i%@nH%)Xd-av9D�ƹy!%ë4#f6g>%luу -t -ۊ:č3qK^uWqq9zT[x*,{p8qdz sH̀FBX]Sa%D`]rKWlK X,z`0*_0AZl-2}�J >h_ k jvn-Ħ@Ӎkn55](bf]D |#r"!K9tyi.dRN[]񕼍O6(pvH�`#Jǥ*ZM,eo@.HET T1’L6+!SS]hS$k0;<( #nWb/:@mh (>ZYWGY83R0XBX&ZG^i& 3O6Hq&@ISuFcJX,M܂Xh(JF<Ne9jFs=̠rHsScs)lř8=­hoIM|fEZnʲL#J2DPd (oA %yS8&x b1DG8.X-f& ĢdDRӢAos7)zs(dBZ+g9bsvA|ʭᠬ^|op:0�k*JGńKQ_hYӋg=6$~ ,7k8q;j-Gpҡs@JxHP bcQ$eIyEijjfgK:? %\b%"QadoR9�>7jpo )M_īQ)k0I|eTDrŕt,8 h.{"@XW$脧b3ĺRuXOņ p\8 }FN@'T΀E4HJgjEꈊ - LH,"U_DJ3oN�L-{0ZV`ݨwp:l!rE,|4[E@$HȐǭA}E4哰^3xy ` gO -VSe<:5莕&FB=P�`J.K2抻0l+}bwn#= l 6N6=$c!.0kb!%Y%uJJU\KpE�V`B*6ḐqVfnK#k.,6v@K\ޡ!& LE,qzx+vE5bX`0Katj\ZK ,DT4˱a?K5N7a :Nb`%j r@6Zqղ,yX7h ɂp" w V߄ H>mӓl4!du_ޛ04ak T1ފms~M~qQyQ+ +5…TBmFHvugu 5JjjP(uk f" 2ݠZ.U6d g'54 -�PSM@!JLr`Sz$E^,dsϢҋ#ZdZzb YQ_$S,\ 3REl*d᭛?jYb F!Yi$#M5h YD�4lUQY97Z`Kq]E05R˹6䗠{<{_qH6qvP dș)t),M0JA@%G@ Đ+GIX+++`]4,ᒯg)DICQU�M Ul@Fj#*@i"DZ6YbcqzrR )7q�.UZ(RfSi ǞEtqz9fr04Im6MV^r&85&2A` eLˆ`p8;.[Si %"f@$�yr݂=@A+JO�%؁FVx )H*D0쯈P7�b+l2c`ew4]mw“wj_3M 7%&2V60'^83\hҺsl8fj̊TPSj �0벬p b+hz:-5+(m8iƦ L=DXbˠ87m^:(0a J4:ʆYtE2+ѬE6$gg'F J [N̲T=#(f cZl lq)u3�< i0zB\>sFx뭷^{ٳg3YŽ�ҀZ lHƸ F^.W ty> A6qvxT'ɠi8En "Me (5IfB"(İǒ")E[mBVN\6W w[QT+ W_uDj "TtGn+x,Hx.zX. G8$J%< `Ԗġ \YU^)|nN֠Q /t V#ݷ": B%2j�{m 6Y(YacUiȈ&)-[PpJ[娄td2԰jbHxn8|.O8gIS@_;CЕFa1acuu]IͳX& C$F7š&$29uP6krjPf6M$"uF+tK g!0׿3(ɝw!#!Ύa\;t쬔s!4;u^ucs$sR9/B+-i%.Z Dz ?` δae[S l Β-*Tj#N&sѮX}$m4siXlp\8?(%1XDr+5 K 4]O19+%_5WjS٩#m%%!p ɒ#1XRr�!ZQIh ,&z"u9Pm^ºRV@3tcN ..@XZ40^$Am؍pg_1<�D:4V4RP _2T ؉cɡbK.M`4J(] CSZwHE;1L644ס̙3=Z[ HCcC.�Fɟ�Ԅs(Jq8j!ŢS:& ΋*d>e}gsmg2pEU咕+B (qȥfϸ &d(y T;; -"Bbm۶xHA,omEu˖-M^T>ŭg:̻ᄃGdZb̙g�[Efǎ#GC5뮾nԘeGlə+l2ڙ.{(._峖V9W$(n5zGL&x`;f\N.G8.xv2@m(+U$%dr7im=5~M7IYキZ/2XOzk4Fl.83ۺ,a �تKlŰˆgϹG[n֢7 P={=q민򇍷߶pQF&=/VC_47su`{7of&4;{#u'vܻ.[5)"бlkIgׄvGǢTnͭi KK.p:tk?>w\B=9sϢY__e󛛹sq||>AK]�V>cXK.,RC2K�͠}6/Z'xo][pQӢEd667"^k;7H5qr`HEO G8f�gyziT=W.˲U܈Jl%h0@4P^tCHM6XY@]x -}֬U% В -c]1+(ƻeeښ*vcLzbeѓ+T!g ,…kg@WwRuE[15S$޹kwRlj�#Ϙ@AI.mNx"q"M-b ͸dLX+n h QNJ:/_ @mm {8-y[[u!"c&٪"C?r=FF·/N˯ȤvZ3=ye*E OkO8Iߛ~0WC^4Yt|E@recǏBj ں:Ĺ}fV W#V-/jWWWBP7@ iFZ[O:uD)!:K|AxqH oo}k*=Uv=r8y7\=mqVG8.V`Ze.U`@V w+V^ H| ț!-<ırʣGg/lZt) H~?׭?yYͳQ zw=ЊommFi@(0dw˝Hb%/qv�ırӁFСIp s}]yh:rSO[M+|S|`dwq oZgδ VT-]8gpe�!GG/ɟ7oK Etg"Q4*FL~8z؆ipc|@ :p7:�i. %=E[g!AtaH/.@(,RSyCaw m?K/_|hha@e ɱ;"a3O`ƒý))Ε0pSda++8 iuuX6+/gi(Ov��r] u ,h7ζdkkwuM-mNdX3x5NW<#;904 YqV\VD@ +P2+(.'@I ɕ! &YCCi cpL"-2atl0RQ+v^b+k/Ŕ_^ Sq$R {55 ۭF^4fOnQc˖-vrdz:L/͸'mb]2]t/ű( s=jQ$4|ԩ& dB6BkQElJ@kl>7f"ed۷gl?{+Wq-"7to6d,H>059tŢXBnu`p& ,TL;"tA)}O73Ҙ\y"QF[. `ʏiFt.P%V.),gVUU %řs2TsZ^&}Vضy>Debf"ñNz~p^FxW>PvAР;eQm,Ҍ1 !@OENgY2*9Ht/"&2%z(i.;meW^zȕ~z/g>4xQ{pvEwhv7ޝ]]c=J ,ĸj*ˁ![v7k3-[3HUv ;oՎ[*G^WOMtb�I8Bre-J i&!G Uy�IGB1ºjO3wȈ1jo \s7^kQ/IcSwMzpW6}}Bҭ}cR?#b zɖ%; Kjۅv/|3 : $!V7ou, N?l2&6nP~[ ~(aDi"e5TWKҴ9:�mZTC@Ӵ׎8@ώ%αbv*d-0�#-6}3)N,Cw)v16[}*0HݵF b x "<5vDym.q ĽX1 A6PqfG'>u\@w8*8% |x}αȏxHǮ_mX xLObۖ:CpƇe1Tw@:ޖK8JÎ`Q7?;3b &z-v|0oXr#X:{/Tw5:^cGp@ ~ֲ vs>Q<^w H )3@"*%=QUרceՑ"uPP#YC?b#KbfBygEʹ$e`k-MFtlb1?q dw֨cʈdNk|9xN$KjKQ ʘU #IGjSv �ǛF]kͧFƽ|v]Eɝ]XdFk,g-PeB~E%0RrGd;/{B4@Ky2R (nATȡ>Wx\QNU}eHQ)q>hNQJ4bgА,Ubf*՗ܛ(ovzd)o;EDf2^T}^Oa"2gl1h7lq& ^25xfzנϠb>Ez. A5?nHIGm%Łxģ&KPσ։9ASۀQzwfk)LZ0?FS'_>U)hK*D{>B38숱lղS'wu n/kWƢO) u.^P ix%gAcO([$? iIu,֩�bMasƒ dCJ(1fg9pj?5W-ZpΜ U(/#'ȧSk>C )Sw˦WԦ' ^%eo8-j֜d{"CIQ6[><;3ʵ&p-%?cݹcFϓ'qQ{P|ɼB( N2`_[:ZzᙷwuS`?<[ua ܐ{_7Zmw_~,2H=͋.YGf|vsεK`u-|T*1ϸDP@4+Jmktb BJ"T@$J�VV41 Tg M~8QQYqhgc҃ShS9]hM<"W7~޶VnhfU9*?}2+qIZ圣DHH"E Q\ġEr1+Ji a9u-e׈0f x۠Ƌe!cEף% ?Bl Cz0L5iEJ"bZ QKUuR}P'rf I� %vDA5 d?CpY!]l+2iXhPUCM.Vͺ!,b8i_sq>jV_~oWV6Y,p*nЍD4RiQ[!8yB sj#Q4RN -PsG ȱQUD{:*#Ӎ̗;v3gΕW\!N Ge[xZ`nі$˱6z�Yn]DocJЕ"2Qb-=:ʖf#}"Bk3e~_׿n=}-#t8N "D+AVGQ)�DL|+QɺX8Tyg;6UR Ў[Щ�4U/D2-q*Awunb=]z¦L@ww߹Ko?xxAjpZkX3sL-JnV)u4(Vs|#lU뻌` ):t h \V.Il&\A˅bք#hyѳD3Owtv:}Ն l6ט4|70hPi%),2D\DYa k`Qep- lDX^׀sc7 &ڏY ,HA_i_Z8qF^nJ,Ro(bMd͠MwXb j UK4C'FUZę;]X1o4E/*E 79%`sI0 C7ų%g566}='O;wNugG,rK[\FbL!-"*ԯ]%P 09)ҠuB8-ju!m8X%;cjL@r2a0 G87ЦNgxᲥʇ5Վv)+p Dh܃j4Rp4N`V"y"l]f8bֳ̉I pcpvrSDY$F5[[97ڬ[="IUx…Ɔ="A%cJ1X^c[RFgBo+QL#98AӄAIZ,h!4t7h-i:YZ r VCX4F].uYA*In [s,G8J4=8tie/'�`-l^!\MMM%y%o آJpE1@vJ3;/q1ցwmm )emܠ>-oH1JM`*\)CT¦3T\: R*$t 'S哈eeZh֘ mr�MqUP!k3̈́PNbi)PE,=Ҥ|VY DµyE6 g,wZ^eY/q[!x̙�ZVAɞm^?yW\q׺+mp`gb~3>~5�M� @ѣlm=588@t˪o.ؑ�JFяw^2:7_:AP3j;.+ٍSj 5{q]y=@@w|xu0Arip+/h];˻,~�d'Ozۺ6ԘfmذzD>|UǕ@cS$<3xDyy�$|tE;+˵䗴ԩm`o W$_9V.=� `NMϤSؾLi;lk𼨭-BZ24|E!W&GXPe0͌3RL1.SgPW7w-n_jtďoL|Hu(z!DGuEaoł}饗gt�==HZzܹeCp=- ?Hy!cυB DJ DC ~zaOHaоoWڌi!lcɲk,ko{ p!9jAw5 Ar@< 50ow#\>848zFȰi~j0.[1^P|¹qɿ %/M | ̞3v\kr,noohGlP;2F5R\ulvttXdj`h;u MR}}ɽZڲ%Z{GWǙ.Z6t:vRۻZE�8wi57ωVr+4֗>˯L/M`<+qj$ _r!tE0JD~ c5ax:e8b qF,GȄ(~E@YG؆la .65AɁ3ojjLWwTc]CskojI0[dNM r ]{o31+Dٶѭ76B?dxb,慁}FK.yh+(LW@ UKaYyq>܇1oUh Ϊ7_rǫk-[*Tqy)7lذvZ`JZHر(xB l0�SEcl( iuXєR07cF:,$-[X'u4 {:zj.]tٌ˵NV%Z{?׃lko �UՌ+�fّ_.(< e(HLB+%@vkh0+RzLA֮(&Ǻ\[fHjg2ޘ3O_8:f7yF* ޲Tj8Zm7IW}ȰXhTjA}z}p)g0m-0~Y^q &AJk�yY ,gN7ZWWr�i(c[g,o{ @fS8_/k24Gq,ōٹ ty~]jɒfl4`q\_WGgOOߒų3@+Xկ|ry[NmOċmA#,n\ sp +uqt!Jɚ\>frCCiDD9Ue-`t[A9�d4@9#*\YƸsJM!YE NnOLGsLoS}-ǧ 7ңq{- '1}q8#JyݸY݇o{8>xU vh{Kу'N�ڒf Zj%i{[[O`޼y4guLջ0"4dxgx(ry~zPuźH>ҖL 䳛Xu}'pu-{'qpͬg~ǎjCV86"[9(.[šH8[k RI$7a1)r)Q{&qsIV1p�|R Tl\zO^,P>lL)-gh0Jk'} ϝn}Ny,aU gu>p|]cX@HL~?>O#,A]-@ᄏ=g}<+a wHA|@Y耒3EtC`V/yn 2Z}<6ͪOVYmf5VTδW dˮ\v篽5i?zKx6 %\Qk@Os2JjM9EhHJh� gPm kR,@w%aR}bxʟ1^L-Z&^Ǻ5[$ꙑ5(WvyN|Ƽ0oRd^ohhG +W!9#@>K/]`VM%K ۷7؊AQ+!a p5G9ݰV+0[ɓ'{qsvcUu]CrpNv=9u�G7GMM u}~{u8K2a29=_fNw3AeHHMF_"1FʥЅYSEfQ D[!&"&RRw dMtLrCͿ[~cc19_agZJQ[3.xbE'P|ƿRۍ/v ƯuL˖.E\ى60DW~5]s{etNץ.gcǎvuuIꫮn?=sؑ'V̍ç?ẫ"HYٗ>lbтyՊik~iȭ^\YTeB )u啉 feGhl�WQ2ũ-i9gܠ`(Sl"VWV$č 2|3&AA9/'2Բ,DpL+jpV uYqiw|}/]z{,7e(ŗ\ѝ@ A"`IIâwv%s!\eу\OwK/$/ZFUQҵvm=m4ryY<FeOP["^qk/zrWVuTSP.`nb˯ǤAĨ7&bk{͙uESnۃ^[nZr펦[ n8uÌL:Q'j"![\ʸ@�TUjQDL:K&R r9,ª~J}ہVd֩!̆cxYDhm[Vڳ{Ooo… JKWUݷ�&^&*L)ijH%E&W]>[9|g5i9t/6lo),b5�ps8=~Ksfbή֎lҮ哗}K\Iޝ+9泹yNe]C"TY`$QeZ ? }:ugz dOo/]nS礭HH@CZ.3s7#"+jQFD-Ϟ=P Ty�/*Qo;޼zIGs7~ׯ�AYx}uÏvtt XwW +ys͑)+\_?[me+[9g$) VuAM i:{ʕJ!Vڿǥ/a=uYkTX2jAڑCw1>o uӱ ,@8R.ܚg{gȮlc7>__.bg bk6X0z [ۆ=)\;,VG6sx4G!lE>(6:@-rشa;Z{ É94eIg\nhw]ީy^[3Q_ٵ`leY/E?J QOj87XxKc3n9'Y>^%C\1)3U}%RM_ԝPw ٿ)TwP04iL~Oq`|n YE އ|##kpws|W[8) "ķY$#b=aX9j,p+/+v6VqVQpF*CƔ!I[EN-=eY[7g@}l-> ;Z @d97d$U^ه@J_P#Vr ĽiZ`UK̷}v5MuGXUh c͋Έ~;5x!>HP;SZm#Fz7~O/2{c׆4c5:q ;>$v~W Cb_bBF7 IBw)]f$Qp[tw"'q {A-6;3J¹O?^߹W^ k,W:ZA]M>fy:(&AX!HHJGĘS`V!d@uJD郢& u\k J§704OdH Q�e<{F˨<Ԛ2QX҃O<eM]tD]ҫE/c&46#ϴqt{EC=O𸟩Vt\]\gpӁ7?w?BxMr;$X{8M~i*I8v5r1}qOiTv(YsHӟtH# .k!JibjvUg~Z!Oĥ^3n9?gQR+4I\IR]}`JE*OAJ6đRTR_(~sA9GٝGٛo}cϾ́'Pª?"kt }4,&\U=A^t{uk #"`;9{4C8.y'rCI>.)/aGI KXdDh索s)ZG8C(,-~GiО eH|clv\+qڭ[cm%XzYw릠Eޠ+&ր$x reł4ϪnL+uS_Yge~.h1KkWC9eEoϿ3 W`k<#7@65T;;csl6S a$GcYLh#js <;d]K:EV^Iy-i֘"̰+^Y2Ԭ0JNa/VWgi|]G3�Ѓn1bD{6CRl9~PmJ}JA  p}8 m@N5J5iPp�h!j >.63874lgO 0\{|VtsO }`Offς97|C~ ɾJFf9km೅>[FvN ZXvUD7X'Y&t5[jkj-q63䀠B# jיdhjc[ lZh)UV+u|.'8(thsT}<>|k{v;^i snF `[G>kmjfu|iza|6sѐ'0hkqV A.eݠ%X$|6=CU$,\ ;2=y}:`{YH8{>鐝7 ?Ou!Ā,ډjBta) Bh=j⬩Z8[r0b gή%B;v#IIpVXs$%DgQ8hP..E ىҪV,V5,xQ쎻P]Jatb>; gwmg'Uy`}ַ7m$�*U]W>p'م ti?X8FXOR7�c,TðnQȠ4F8J6p6B<2=(ت,gjEuyiLv:ݛ. N32Ι%2[lspps4kӀҔ,.ptC`;T8{ɺtl�(/K64ϖ'$$'Tp΢a G9䳒[ϢRf"u2EHLS|,`+w_ s!RI'2rKoPF($7϶B'dss5{Z54@;8/u�`L9LӮKYTJQhh'i6ˮߏqWJΨ  $E@XepH@Ig;Uy9kVYxh]pY;Ыe+%+p[e&.z"I=1ARf-OJB.TztɨLx@lЛ;QJT'%bl>_yNH~@<ov֙kޅQaL2Zp<#, fQNRVvًi'G)5q6529{d̶qVGͥk'j)2*٠IIgdp6Tź@p룑\W:y1i{k fgd՚{,DA~44yEKK'^%E4 lHBoQ`G=QP H'gr8N;.ٰ8>oi㬩x./ިzƲPCN*®JY5<53bgیa{٪L.H,C*d8#WX�SR'f}oF8x*�,ʃSȃml%`qe CDRu[VZdH',w![̣SY}ugc(b!LÁ,dEz)D$@agD,=qqnvgJ_ šO~ºO霶*pvE?l[n&^e">#dT4a{T:Ven8{$$y^:y?&^{u"v8K'~K?-طC=g۸2;"Š ɷ c=g ~A-|gѰx?J8 *O/2WfX?nB����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-mkdocs-1.5.3/docs/img/plugin-events.svg������������������������������������������������������0000644�0001750�0001750�00000111324�14502137725�021234� 0����������������������������������������������������������������������������������������������������ustar �carsten�������������������������carsten���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� MkDocs cluster_on_startup on_startup cluster_build build cluster_on_config on_config cluster_on_pre_build on_pre_build cluster_on_files on_files cluster_on_nav on_nav cluster_populate_page populate_page cluster_on_pre_page on_pre_page cluster_on_page_read_source on_page_read_source cluster_on_page_markdown on_page_markdown cluster_on_page_content on_page_content cluster_on_env on_env cluster_populate_page_2 populate_page cluster_populate_page_3 populate_page cluster_build_page build_page cluster_on_page_context on_page_context cluster_on_post_page on_post_page cluster_build_page_2 build_page cluster_build_page_3 build_page cluster_on_post_build on_post_build cluster_on_serve on_serve cluster_on_shutdown on_shutdown on_startup command dirty load_config load_config on_config config on_pre_build config on_config:s->on_pre_build:n get_files get_files on_config:s->get_files on_files files config on_nav nav config files on_files:s->on_nav:n get_nav get_nav on_files:s->get_nav render_p render pages_point_a on_nav:s->pages_point_a get_context get_context on_nav:s->get_context load_config->on_config:n get_files->on_files:n get_nav->on_nav:n on_pre_page page config files on_page_read_source page config on_pre_page:s->on_page_read_source:n on_page_markdown markdown page config files on_page_read_source:s->on_page_markdown:n on_page_markdown:s->render_p on_page_content html page config files pages_point_b on_page_content:s->pages_point_b on_env env config files render_p->on_page_content:n pages_point_a->on_pre_page:n pages_point_a->render_p placeholder_cluster_populate_page_2 ... pages_point_a->placeholder_cluster_populate_page_2:n placeholder_cluster_populate_page_3 ... pages_point_a->placeholder_cluster_populate_page_3:n placeholder_cluster_populate_page_2:s->pages_point_b pages_point_b->on_env:n pages_point_c pages_point_b->pages_point_c placeholder_cluster_populate_page_3:s->pages_point_b on_env:s->get_context on_page_context context page config nav pages_point_c->on_page_context:n placeholder_cluster_build_page_2 ... pages_point_c->placeholder_cluster_build_page_2:n placeholder_cluster_build_page_3 ... pages_point_c->placeholder_cluster_build_page_3:n render render on_page_context:s->render on_post_page output page config write_file write_file on_post_page:s->write_file get_context->on_page_context:n render->on_post_page:n get_template get_template get_template->render on_post_build config on_serve server config on_shutdown ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������python-mkdocs-1.5.3/docs/img/mkdocs.png�������������������������������������������������������������0000644�0001750�0001750�00000232332�14502137725�017704� 0����������������������������������������������������������������������������������������������������ustar �carsten�������������������������carsten����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��G�����A�4IDATx/~ݞ$$$vݞ-{i4$M_eB,aw.g\z 4 >M"`lL8d [ؖ-ٺZYW\fF3%c-?a4~.=|y违8qٳIv?'2|.G1)\LY&KL(y*^ eG1%65KLdRsU|~*$;ÅWٷ\߃)[o 诒ە9dWٴtn|UH+2Q!p| '8TMnqѷ;??Ug}kߟ$c Gc'Q>וA2IUTMoqѶ;??!Uw'5_$G$2Pi8jwف~~~_fM3 g#M0ɏǏD<~GG1MN(QDlQ%UWYH&OQgRI~B"RrceYGM>kc3<?[P3}~?_T5n} ұ3Q?i⤽.3I~O5e%녤jxف~~~_EU&7-HO($PNMuEY'IqT6G9YH&_`EUOtG G.zSDOXd<U&-cᩚ|bb;??U?@}(YJG/(3 x&EcʐMZeH?/$U[\_`EUh(ՁF`GD3I']>RM(Wt�?9-F)�???~YqK?{O7#+|1}>,O472Oeg/$U[\_`EUCV'oHGVO<'a5"OO+㤻 Cd퓎c'H)xJQ}}i"D>޿t],:uYʳUB"o?EXw~~/h$OQHϥBU '䣾1?ɘ j|_ jwU ׳ ~Or)#sN[ Iy)�???~Qլ~$G${b&'Iq?meʠ( 5y-F)�???~Q|7 y1CP/z1Qs=mYWę:c!bn?Ww~~/E^~BzXQD>,GU>ʠ3mYIYT gx~i/X+ǩn߮ /n땝Q^\Yud @D?} 4N"nSDW d%?oc>S'BtˎP)ͼtgiI资um﴿Vq>8RJ/M.8'<4Q~yNlnXt%~Rq>WEy+)t+|. | ^wMX]ÑjώI[eYo~lc4*Żx_Q|M?!Gv"͐i<_r(CV$`Bwx#1dH&IG],YyيG-wx\Ywg3nʡ>K߸]y !RA@я@gq|t,nih߻$@v6]"o?}Ӟ}OiݢSݮK>yCJ?6i|P5buԊGMthYW8<3Х`HpyNG7Ћnj~$lpfO|H.=WNڿ|tyο ݙ}o*r%ܙ{oHl?J{!/Fn?qymʙܔa`mUjNY7ccx{j6h;iKvIWoIR鞬GbY{iW?UV"ȑܔFQ^\?jn2,Pk4=$<3ÐrSiyW7Yɩ{}< JoY-ܙn׷yyq%6y}rzu%w%2oh ?wN8:ɿ|]-(ަK|$̶Xf9xwۑ"*$‚\Li_A㝦OiOS;=ukrž}' ᫷ߚffgf/pbE~"ݻ.3w)!wNߞ=ؼ`Ͼ,u $ I gkSUsKKKdžT8{<8ֹ##Ǖ|0fh IٮߕH[Eo0x떱}"a7LtNg>D#߼i;/%UCUAμylMz?PؽT,/Ew9lQ9uyf 6wya8lʻO"ﺧ?=ƈcٚq)+׳գuv8 D]?P*ֳjP1Acw%.@dɁ]p.7j]?{4|7oڹ{#?^_w1ѓŃ<ev%ffUPm3X9/Uee7N%EYyodi4ȭn4y8g_$̷1[enYnw~ܥ*=+;i;&ie?vHMd2tF0xG,c}j$olȓizŐHݗw:&t}$I.6qMJb期Yk?_%i޷Invs-c7#9upih.޼JO௛05b}Af]:g'O~ee.mF@JqHL?woc$ƍ>{"Nsֱ8ɛ^Gけ,O7ds5HVMK!`݈<7B*l_OPaݫL(VA??!ɟHeV?Jw_tVV>ܞ>qW̴׶8m{Nekurj3EJT ߊ؊ꡟ^o|)ȎwVyr:LlSS3G=)/2GFbw4u _brhz" ;`#<Po~cgN؃L'WDRysQABfb/jɷjoN~6An/G{ /4OCCzE!6?Fʪ[G+Vy:?'G!igp]|캱o?jJα3Oj=6֞Ir%puI4eM»fԒVjrU}t#>%MLߎ֎h>%ΕG9IuW*śU͊gNIXqÏxE G_Wq!u>8 )CuH'3\"?8y=;suA&P⯝p=s* 0U_R5f\{|F$l?Tlv}s~@ڜ y?T ֱNb⩃}''gRdNk]_,Ւ27Hy"~0#\}'ii59!vO5/&V%Q U>vD"t[!ӷF1⃎AWSHn+~|O.?4!7]dHNF?7�wH IHҶ^}~I[pq-ØwN)#դnPN#6w='1F~ <0Olwx 8ɟ!>fpRU30|  WFv9wS)R@kiu}6L "fWϐܨk,8O^gOy俁Ɵ96I_w[$2^q 8g3Ɗ`n'˕eg LX5c1O"(Hg0iVahHO=?>>t35m[PCw8y<='t(>G4;!ǧyx<%~y9H{wFشΈG mUM^ߏɚ >5gx US>=/_3O3|n6kTo$+uwyjz'лqz =S9?Qn2v~=,@CT͈&o -wOU~߲p||]ɲH ĭ ~pJ^2W =yHZ4M#COs\_MOS\-lgϡ)׍!'4~TcڢJ$ˏ ‘4CCIRlI_)J{댼sYUr=\"瞧;~u%*<諾T)J`i434ƽ}?"Wݾs|K]>Q:iO9f|%G~r?߫ac5iTs}7rJqdzSU>[ՈiL0 .:~w ȭp \o^ٲˏS�w/Mv1x-3ww0J6k$3 7G E?6z-^똺4)DXWočMF=4;Y~|}ud$D`tOrz$F?mZ>1g"1/gTg(څ�TMx@W6'iGFݾh \`~:0R]ۊ_}HU бx|/7z Khn^cʀ=6VsnbtzۈmvgnNFl}y Pqr=U5zד5ףR3+ܢ7dXDx?35g&:W32yJ;O::.43sbMеzj~rxӂ=,u \(Glֿ?WIԪ8ySFcMʓ(#S7C_&ș$Qu|eYW͈$ZhV]HτIAS_GDe'E7Ԭv&H(vط+I<4QƌU7s48fYlSF>">;}cˎ:s?Gps~Gz?z_]T?Y'{ڥ?zO']TiI/Tvs]UDkOTX(=m-==OT9Df=~C?5#v#7xۇwGK'O]$Vk-9Ļ?젥}\7C8Jq9-� y*E#Hljg~~NˑqhFEZ#;㕃v޵|PONGD=w$eX W_Y-PG~~㕉׌SujW;=+zsL~"Gwׇe2;Շzs+ArIF|;$AɯN,;4QwJ?xb OT~CQ^%X)BR&owDZ"-~95>+DuՍe&N!YvO>8λ^`'k\yc 'Qf;#T zxBŃ6C 4vsC|PxJ'wq|]ҧZ C!|n?EXw~~/bhY|285lyHOOQ?iz=אM>-F)�???[:Q?pL:hS/^?*d4)+}G)TM^oq1<;?Kj[B:⣦"_I몲Q>Ɍ աTMn1OϥŸKGc5X*~i'LR8Ri_TM^o1OQ x ґt !S/T/(矧J.ty&"i?!"o?EXw~~/P-BˮX Gd~BR5~?_T5Drv""}м\D:Vq 3 SSRpUB?/$U[\??/!]hG ׳Ǖ \&--.S|u~~~/,3*?!GmQ>a$gQ?|Tґ9GZr-F)�???SL:㟲|T]e#.~Oi_ I] jO8i8,+>f2BR5h?EWw~~/39?FL.:S&33'OUy8_`EUSH}_ q:SSS`P�3?ɌFRMn?hA l 6�`l%)\B Q1P(jȇ)f\F6\.Sd�`l 6XrlhT *\pIEUC3Sj Op8 ^`l 6�`l,E64DgE"Qոn3¼g^�`l 6� HLHU QNQ"2Q8w[|�`l 6�K Y%Hd$1""OEd�`l 6Xl$Y񄪉KXS�`l 6�F\a!SӦs1R'-TJ6�`l 6XlLKU59y S 6�`l 6!kwf;$6�`l 63iUMNF.T`l 6�`l%T Z�`l 6�P5hI`l 6�`l $6�`l 6T Z�`l 6�P5- l 6�`l $6�`l 6T Z�`l 6�`- l 6�`l p6�`l 6؀AK`l 6�`l<,UI6�`l 6XBl`l 6�`lBwhI`l 6�`l@ՠ% 6�`l 6jВ�`l 6�P5hI`l 6�`l@Հ;6�`l 6T Z�`l 6�`fSEQ3111HK#- 6�`faRIt:^/˿Fiu 6�`fRo}>\`7H{#=\\6�`l@,@*2HH$FZi{`l 6؀YTd~6!iu 6�`faT N6!iuP5`l 6؀A 6�`l@@js�`l UUA 6�`U7�`l 6jBE`P5Gj *6�`lj`rc5& l 6�c`l 6T T U 6�`l T |.�`l 6T T >l 6�P5P50T |.�`l 6jj`0\6�`l@@js�`l 6jj`P5`l 6؀mCѩCC+EcơxMW1}\6�`l jtn=AIWm~1Ms=Wx]l ԡ6ջ:z)"-2!ɕJyh4X,63I�`l@!Dfƶ)AR5qمUev~Z8Mנo(^]#͋sA@@炍jڣ Z/wզTRMU5M6zxR7؀Vլi3%[[j5ƽ/©R5W*׍]Y3ԋʮ2es<dGnm9'XPP5` UMUD( 6KWp{~[=( 6jjV5[.HoюՈaU{D&u |6qY Ks0 lޘcJV;\;yv R >lYzmvظUMe8pBm:|OYM%sLZ[[aÓ6T TfU9!SV5b'T5bԲFag<)rUCsML\6bk5UT |.(XUXQ4E7F@+>ˇnz^�sWANm{o͆ϸ% ī-Bk{+] )+60.(cAydNr;,l9ԁ'~lac59]g*fi_fz7g<:4#F2o:'vnRL~N&(M3,({0pHA;c57I`j֪ɣ5# oM;y(2ϵ^vS}u8o Qtc5P5s0%Lʈ?%a=\xđVՐw_Vo|ޓk^Oh{b4aMm T |.((UCZ 2A[9ٺT 5kgYxR7؀y 'hL? ]΢q@ jsF!*CVx ajGMՅjH*_+<[-xR7؀jsƣT5[=21آЦ!BR5,kO �P5P50T |.xtfSe&dTTa7BBoD{6!TZ]TV[zLmmƞ,V=.\ې e0L胵C7F5vP#M=63߀P5P50T |.xvMirARUN_0ʯ Y5Beըו){zf$"e#5)􃦛J &(؀jsƣR51 w>mXDmI=LU !J6s ٍ[uOVKs,bÚCEs-79`@Dʵ5K Z-,OjӠ͓;Vg5-oݞ3k`V<(ĆS_:\{`]̘TњUblaޒ94)> xQUUA炍jf⥖h6#kuNP5QNnI`.hrW͵ih0Mxٷ k}i*ezC`l@@`P5`#Fӝ]pΉPo3&Υ."T5Qj4L<:36mt)R4PE%P5`@h7hZ a۞[B/IsIf"T5a¼rFc X"䑜\Fl-:CbfjŜ3 Ɇu5`D~LxF8Q5;8;sc㑨jV{eoؤMX'ŮЌlDo jj`PL`lKF;>KX:?[#sq;mə|Vd<$\kI>)a?I`W/.\il !"( c50jMXJc5d|^LWM֖ۓXMUsXjP'z'0RH5]yxR9n16cx~^lX T U 6!K;5֫eUT^:*JyF=lSbjO*"?O|9l=UM&3: 6jj`0\(TLG<^_r,Qn^`t«"8{Z6]m*յ7ET T U 6**QiR/F6iBF UX̹G:Ϫ&|?)^{|SIVfmi-/ 6j^&k뺂X(Oh8qDjsTM6V\Z�f.1$;=Vh~gO-+iG0M[C{RB^V_+ݚY┚`xUMoMCG'E٭&^$ '(؀)NUc`ss]Y,2VqH\U4ت袒_iTM,)O ɤ?:Hը&#wy:seiԋ5IE<'%`7U$*mo S5v"`.^"lxyϺ ]7vִ039xv<[ڧXūEu[R% Gv7 Q>]CCk8 #H=kΉe :)U 6 \x;JHcjQIsfTMΘ (Tf]f@VIyǼ YҐX-b~mVgO9zS[P)o S5Bh޽rD{ZE;DtL%$Ъvf73tڪP(?؈JyT R>I;򯢩|Nrr.bsֱ"xm$%U 6 ^h6/F3RQY0U5]UmfO6vGcNJYfK4mv6 ;**UT9^&/ 6jLrIfhzDT錄<48IrRK;dY8j:KLUuIj3E"l15i%IH:[(B>l+V'.C}yhiLs0U7S0ϧ,.sMEdHmQk*q&`R\b z통6#o R5!&'v'X#$!#ZttJN'c3ލu5Um $ eUce ρ`\,oWuɀEƁEjHUcmRL[mڟϞCR5m'U?j)SQ;ͽSNx&UF܀Fjꙇ_T$^ 6j \ՐFIkwrv ۬bC1S}dt2-*U5m<ȖЭQ5 UccC1}R&N ژfި׷1hT |.( UCf:ب\o&S:%+`M YFZ bV[*ꗤzz@SV|n@ʏFmm~U 6HՄBU~nQ#6O6%IBS+MUMm)Sf,$ieS^ز.l[;*4_Ps2+٢Y@O xQUSw7Jop:L(كDНhdJȖᨮ+ IedZ߹u7 U 6JՄl=)E9wjH^6)V]G Uxvd4Jצ*3ePƮ µUmLl;M围[|"B>I[3թ6XJ~l bQ5|scYOhx AU 6j4MzhʣfuKU VRV? ,em=΀GCvQ_59nE}AlOLDk4U;Ъyky Ew9pڌ9E7ETM >l,"U3mݣȜ!F^||/U1=CM[[RiSII1*3"3A HSڲzovhOD[ >-W[^ xQQ&TU{"`a3*7xM"CiN<;`L^9%Wl 6``l 6T T U 6`l T |.`l 6T T >l 6P5P50T |.`l 6jj`0\6`l@@js`l 6jj\H-CW9"hd;$T |.`l 6j$U*{@Uc,]&5zx69YZW;yujs{o 6`c񳁱jwyYՄ:{<,"(;;a$ 6`cI@djGp]upjW5LLU罫EϚf'Nc8k=Ѵ{pKw9UHjcZzx=n1ם%9x&~'-NT |.`l 6j\mz ,o f@vw ..?N&64Ȏ?"vaMg$I/liТD9li:'6_o8NT |.`l 6jjZ-&2l oK[+*!5 4&tq]mZU.&UR%o@E`b `l 6T T U 2혊utz9h9Kjl˜X[o -n&MLV8v1`U@vA 6`Y(u0md}BS¶ jRLjzq$ɨ*Iդ `l 6T TMZG5E` j."?|06+Rդ@L7;xJu]a\6`l@@դQ5j!~ bq<)``7lq-5B٨Xm jSa-8d;y[iq js`l USd@U|>C|۠!"k}D>IF®SSzo-IU 6Fgg6 s(+6d2Pp mPv!wYuST1PWh7iQ v<!fxx>T߀P5P5bB8gqP4.Lbq01Ţ(U 6B旒lpe*IF+mkCx컅E6sWDYY.g>F2/Z0WLym]*6vQнᥗ*琻j / 6jj`0\@l^zis%Y\ݍiVߗXM9j:V5殈lS]NEBY}F<ZUnbG/d %6=`jU]MjslŽmoYnfֻݰmWc((7 aT\kڱWO mІm{5, kEU!wU]i'lWn%ޱ4wVͬIg>xP̛ۻZw60$/+3GI}ʆozӟF) Re|.>L0o,q3mްOo Xvܻm&g5Y@$UMn D|.];Z+ fyjm}{yw쯫+@d&U\{r/ 6jj`P5ŧj#3 Lf<#mW"n(?P;t~L%QQ]MʫYtƆhxA_΄Bh{9oޱ`V.uP {<`&6R_W rP\MaI=\Ax7jO4]r-}<]EA 742.6ݣoU".v}_Wa15 ng,HPQpʛjOkxK7^*ڗ>gqޅVISZ;ȸ ?jh,[3QVM-fq(6P4΂]`nIz.u5+sM߶fQ# 6jj`P5xeDy޽{w.KuؽQG*ٰ5 m]eI]RGҘh+뎎=T}c/R̆ 7wIcoy>v5K=>گ'T IN +";]E8;C3+ldfqLQYjw;(]AʻM;{pFX3]1%E:g}%)puhq' pr;B|څTj0ʇs2P~A*=2V[ۑZWƚΦF`l@@js*2wg7> fH/eQ}w(&vyv젹#~seF5KBVPRt?{jh|T(gn9 iU 9XGyYW,SEE)2-7 ]d|8$ t,QդQw9WRH&]ddoN.6,Q!g~g#5$3Gw dI'RC|bobJ D]Vm- L5mgS# 6jj`P5xI7&>R)'ߋKOW#SskeS2'JFH4!˨j|UbKF ZUS9yCjTDx>MZy7~Wy%BV5j ] an28uhu0_(UMʜ57(IY:d7j14DJ|؆Z[ȪMKPJRlU.uueP(o UUXTfn3) TV[ak4!zo }d)bnvLRbh|SBt~@; 7?3N1&?#¤t]K%@djU$aK>fqlBդQVu!7ԫ؇ fR T@XNf?$agKІQ'T5t lb#t"fxb"uei^l,uU*=BUSxT 1O6y0(MTK+ Dh**`/hqfz^ML|(mAjsvfQ2F[j*"g9LxX- K{v}ܐjU}7d5δkJAd\߀ `7I`#c5_oK|Jb:q?_ŰP"~is3Ww].}|ucu{/^ fM }HLrب!l&ffGb]͎Ɓt nDE|2m~:OQY6A:j ]Mv~+/C^R5} {ĢsNZ88Fx^FѼKO=VˊM­\ vб:s֕\ |[/ 60 U7H6[N3X۬F"|pLt!bx&"?J,*6( հ"s3OP Rna9;ʢUSe9P5P50T |.X@6|;^J`l T |.Xlرwݐ66`U 6`l  >l 6P5P50\6`l@@js`l 6jj`P5`l 6؀js`l UULA]{`P7[\=m|C 6`l@< Uk/׻iu'IQ9N^L9vSG*%+5zx)|6JE4 T |.`l 6jq H?~U`x?;XEIa"ƨ7ܫ:E 6{8?c5RS55zΞUU 6`l %jU}j7ѹ>fjy*fa2)~EbOAI預V;8gE#}O\UJ8En[.^gg9B5'MEz|WE*xjjs`l UTF"zѻŷņO""dzٻFZaA^"+'04N/Wg9ɪF`wwpO* ls\pUBHH,'S U 6`lEjBE`jXY&, yhx֪&,2)$65.j7)aZUL[]j_U xˡ^gP]xgEkn6L"ݦP?Yp_vDP51!f#&ظ{{K3 9u煫hޞjhYڂPu>kIV@,:U OJ\6`l ‚ 'QZa4"u?0?oҢc~R5ay~ TݟbZ4?i NiK1;sajTDϷ5kU$1V_U,H`l 6?KF,(bo!ʸo/EtE lOD!P8!US`0p |6`l  >l 6P5P50\6`l T |.`l 6T U 6`l  >l 6P5P50\6`l T |.`l 6jj`0\6`l,aUdP5Gjn`l 6XTl`X I`l 6F@`P5`l 6Xª@`P59Y 6`l,~6j`0\6`l@_ b1\H-!$D>rSٛ.'/] /G6TUk1.K6-\P5i2"h1%-[jP22[4RZJԇYOeyQz}ϛ:.6P5s`l 6jdDjyYZ{-r/L#?LUᇪ 6`l UUM٫S5'|cdAm55gV*}j0 6`l=Ut]7jδ1gv:NFZ5_8ȒP5{Ӊ%*FS7ԠFLtNǗZgѥc!uVgWP(Րj6SlhI/ jRM~/[>YQ&^J֪LYzM}3Yh>X=WV5p9l 6`TnQgZ2~M%bQXc$ECҦ?/}+F_ U QGUßjM̔F%8M'U)3Y7T 8AZcBџ<ƪ \|Z*ڝKT)gҨbUy؁> 6`lM|MnT5M#])nZhNGhC9$X> D=>՘iyB7˨ge<ƝӘyӱ"^1xO5&sV}%V kUs~yl 6 + Jw kyQW5՞` C)֞qjL qZ{TF9<3.΅&%O7bXO_ȋSs.`l 6jarˈӬs,0{ͥNƒE|n jv6[hF)S;@Gb1<ѰݝԆ&=x A}. f @``l 6TmW5˜= U)' ~ddjS=xTR{uu]+*9ɋ:͖G~@~VVՇv$iv:v;3<uQ֪~F ׬;g55ag>Q>! T \6`l@YUӟ=2N,!Z7\x,4&{_()V3Tb?0U 7 G$#<ʵ<<КSr( đTk,ϝDH{[Wh=V-#1 xyU9l 6P5wX U+g}u~])W1t( 5F=ZրfIQXuYڥLfD75=YjD%/9> J \*a9+`l EQjnҟ곍fS5$NB>t;4l44SfyPKُjwW#Wn[F{ZHzfd`l 6n'!;j5uEcVΝV*NOUwK &Tj]?^ 뿞mNj~yY0 (`l q;ـo[MSŴDޱi73/? ~l%[}jf7^ o`lVUMjwAwWHF;O\;#YVιnlsk/:o6, 6`lN6jU5ޢny^Y߽ R71 mKv.xnO'p52ǃ k7q.m?xl 6؀JwA?9^wtxػk|??~7' 7iBճ(q}ΌKpǑh/uqט76gEz6kykh/͕-Z@sy8'-;E韼Z\5R׭>z9AV6`l|e6>K~jV@ j&1Jd<+H]DV5lWtǶ޵yY,Wr^|U(Paz<_ږvYb;FnVY?Z~Y`l 6T T UcKWOߥ>6~Jd[ut[!'~Qm6Cx& 5tT5kw z\\9*lFٝۚB9a`l 69==Iլ>o ^ :X̽s>{2 A]=ړ{ndY=@B Cմ%"EVE%"k_EUuxIg{K4E`l ـT/ܟk_.j~b)bm3&t/BB4f<{n]kZŮjڛ?Dvp(3BrLݕXy>E5pN +c6P5P5TZhTel3I_5{Y7ݰ'=vE&\ V_BvUã7Z}RwiqjGX{6Nzl8鉊MjLpM紟݅"V 6`R5d̑G蚑X?:i!pߪj~oq(QwΉR]>5y,MN*7_,z c6`[Uc%Y?B";Zu4D`._<5UϞq_B-wZ[]}f~T9Ǻ|8+c6P5_;]P5js#ĕz]_8<|%ӒƘ7Bxz[pƳPOUJsh# ϓgi&jh ͻO"7|=̢?z 6`ֲYpsWV+ښmOVխf7!T yߙQrM35u2Th/< Z1F5.)M+0ƫPoUcD^6ie>Wn_Y3(?iKas|+НEz 6`l|9;;U3p2"˩Qߛ4[uK|Oe==|$ /FGQ2]՗SƟ_jvmkF// 3~*_Xu[>0yjf ʴ/3/O3FFs)<5K˂7 &d`l 6m`T5\z_>ZZiHL+MUU*l573Rڙ/??dwR/iy6__A~=khjZ?OPY+?36`ncNnV@xEn|?,:$`lT͕!*#RsbY:yъnPBsq֙yd&ƃ_myu3CX֢l3'~O O8ʌEV[7mvK1hJ>C#yДjо)U;rM{@P4f~~\qB<138of~+5gzdg=tej6Mݝsk_Dӻϣ69Ow9 l 6TwjRm%(1)&E\gGjlSGsTi# mLܘ<[ib~f^,nYofꓓ筹MeV+SՌU]dc[;ݩ}ưwVozW6Ew\7zbz 6`B[MJ*2CUⱈ"!Piv=U >  T`l 6ظl@ܔq"W[S_͵2}EUcI$WICSD=T٠-fM s.`l 6j]~nM:tabW^;.gjttțɊdt˒\fGHn\6`l l|Us=Q3Ȃvg:XdM9gT?>A"Ґk[ 5,V:4'<Рjn#ι`l 6P57jުV?<7>I @=Ӗj,G_؟vyfiPPHE׭ UC2ͼh_ }r\;/Nug6&T T \6`l@`_9s.`l 6~xUCv]%wU@܂~yl 6R5͹wn`l 6T T @``l 6T T U9l 6` 6`l_\-v`l 6n?\j~GoڢChj& l 6wVsӧۦj4FVo[gW͇ѢՓ["3R9l 6?Bt:[-T5;Ȃ"ʹZSFz"U3t2Fp*ݵtU7)C7`l qـ8*ȒP5T\Yh>ʫԩVKĤs2x*LHWyu-4Z_/N'Xc/ǝ&7.M:3XARA[М*6xU!qUm<ühڣTs:DM: ZD7[O]h̹`l 6؀3~M%bQXa$EU|xw e0U^W*犧Q&9&,jƤhUO,<ȝdH%̑l4?ʌs)=Sy{ŏڋ;̼82|S>7Gh+ק7OVY6:-SȕR>/9^,MԳrPB"؜ۓI 꽛cC9*J:9'WHRlj`RR r0{KQ9N$%Hrs[O^=:;IbKsL6JR+N1_0L@l<cb]Ims$IqieT;yA+Aj"M-[Jcz`\v!g%mnA |1-2 Zu^1WE2˸Nƛ8cÎke._SbYq`&w5ƪ0{  E'M^{"V9s0͓N1ׂp*_Ԉ[-R5T5Ԧ{c)D!Ic>oj ,uJE*^+;nf-o,V:;e\wۂU ?CݪFhU =C+11sݩ0k$?Z4x掩3Rf {&RYUM Y.&PxSV$osD5|) l]![^5 %B7ke[-mZ+ÛN!~΃E$ ꋾ8-jzw +T8oP0h.SO&߫[Q1f_j7]G|PGt';CՐw\kb2dj%r5P<}odڲ۱ׄ8 JG06 J{˛,kGy-*s.Dd!f7(&5,EbJ+W]YS; _l {VWOE bpR ʇ[CD)~'zIdPY#?dG\mP yN;U(9 #O_ԟtBb KV0an`n3)y>mi9lY҇uL*IL 2˪>l]lYn>,]%u׺u|2ϴWFZ{Omѓb@ep@t8*)&3 B"Ѡv2耋sQIL:ao] M'dNvӝmxXa3r;@o髙!{)9lrUK̉,iv3[URuƠ |u+t"EYq|Uۙ͝Uvj؜všĒv|ql\_=rtL8Ji UV?<ݥMiXJA5 }b4VO^aB-AUC08ݣ{`S1jWUCӓBdCv|~Eg-]$8[v]z(ߓsC4J_ IPߧz2qj U૾V ogTDY/$vda4A꣦&$P)8u2L:m}Fs5h`B]I}tE+V 9E2}-f ̰ M0Y2ߺi`3+(RV-F@ZO6&j [KQt#8Et^HȚöɞ8mY +V.QR_J1L4J>m-beQ5l)H눵)h}Lav֤c\Q(o|'SU7u^D d`nmy%T +X6-1֝1dLestm=+. fUEk鼱sm C4=pfɼAApvA@N#!+s28 jܛ6j$=JFAA1>Uڪٙ,P5WW.e'k}g Ϯ~/;أB9t?-Q5#n:*Ώ[U q&grS5 5Cm <]P~.|PUոTleq9B\S{.f HIJXiɸqFl͇Q5^7K~"$YYၴT5ҭG(C1{+a+I& F,.BjlZg=2P5|/JurKF:|7-`ކ&{^ej2 .TMjz"8Є|jU5ά 9KidAW5DES8U8X3z ]s Y<ׂ/]Ul k!">Ta+z9l "'5Dblx@(#HɊ0F]oprZvgX{jk.nIa7Ew%J٪//Q5dQjhdi'-DxZ:'g Q!T8%W'}QJ):=ڨk>wTjHAqP5F}@@AUwH(̃gkbC7ߍр*{}n=!c gvl/Nd(]`rBܛe{+Ǘ8dB^žоRZnia ʍu=gt/j/S(@,=eqtǽU5Ďv ni\47d'or =S櫯adc^j18E4@}\@y E1nGj}EaH.Wr{4q@cٺRg0j6#^4?:#!'a$*юkb[D M"Si1`9؎}Msc64&X[?m>l#*x(3:uU /;,ƒH⦰`$|9<aw{ƋёT$.vۣAeK,3f8D(7ĞJQ z}x9i)]t4Wv7Kl׃@>zXU\B 5&^sbӅdnU5^.]S"eġP.9Jԑyy1(6jsl3=РjjjUV(1$qbvq/N%#+'p & f\2̏^0Q(,]Uz`{!)T*E),vsUC3HTf9WCS'%qf+6'!d?9uU a~ؚD4~"x\"Rqdwjkّs$}!s`rو˄u~a/zGƗ 7yEzUS68bHæG CHH:_ NRI6OXNEF?dF~ Keu pT)DpO7b1l H23?d{NR#e._:(-/D %D([,Wٰq]t].o]'qzOCZW*$EtqwUר3L VnލaBV҈q%mϣt ((C3&\Ue&H_ 6YXz'skޅE&TP.RDb|RJlU5EUCJbAoT T T Us&`x $w+bv{>.]G)OU=".Ig\li?dKR[;rOGzWJ[VɵNbUC{XQtyyde`@ z|hr2:$LR7־UӅvҨq'ͽCFvیf6H#CF^ ac(ߛ&Ģdz\pqE*'(ްf8I.-/#aU#E[ T T UsWOSd\'pvul)kH)el7y$˲ؠù,']L=v5wSiڅ,e:ݩ)u7E1K $-#, uz/ KEUbr ғi{ë} / f8V(]vysDOEt8m>`rgqԇo۾\.e9tQO&`URYtQ)Fi{%OUXv#Gopu)\~d>0o8+s5Cm`8{v: o>RץA@@P5,s |$?о JѯW ʒE4"~лf 3,~W[E 9b_2Ɉ؃51ov:u6l.yXa{w>|'d޸y6zl\^]DH+PJH$r۵/Fl4s7m3f9VS1oZۯDL_`UC l5[ $ 6`㻰ՐT @\͟ǘ7`l qٸ3z~4Us##廙s`l TT pwU7)p`l 6؀j0 6`j0 6`LO.ޗs{r%/)ќ+Wo E2 "OR}+@7Rgl訔WdҶy[{;:+aco+_:zd"#Q|@SIs@+^`O\,Z/2t\W|}FnΏʗ6i_*]:!T T T UsR cV|WZ{ ecXcAQfb/(zTYhfw}=.IKl|"B$wj\IT3k}"B0ݵU/ Cn_V({X)7sVIOͦJA}jEL"ƒ Ӿ{~ۼwieoٽ툽CH*)&j58G XHMVtg,T T T Uc//Ll]L3v۬Lُ2g;Chf ݼ^9ؾٺnG uAAŹUg7r1%AOdE5*%y4X1xe5ڷ~3Al٬䎴$8ye1Vu!f.F|tM%rFQOK_л&H9#19_ԁ2fK&ơjr#=ɯ|'/bn CsG,c!b 1TV X<2t gB4p܆ 2>uJFc~=/̽ݔruQ~Jҳ .8)%Q UNuΆ4OֆA7>}ռr"ׂj~IVC3=]Rc(]Hّ=+C$22::oLebz߭SYH0ƒz ms=2Qh0"UX3 E\o`/݈ʱ 5[բc b *jy *-=či{]ո[/V@^2窆 @j˺mo֭˻RMYJqE^u-c?]9|DW"4 ^".%j UUUMA[UmO_~ˡC$V]A]?4pٿ쌶wVU tN}#6%:G̑r`_72qiGv`4'HZd[Tږm[!# **i֎mc;TfsPx=7*^s@x kWO9+D$7 lL C׍xm4@8I J*rtnc!^QqW;Dl2ʆuZqxўkDT<y+r51o\|G]gke{9&76mwW5v`6b볾'w]Xk8LrE' K|hk5ԀfMsD:q{-$MNmG됟T27;o6eMRrUugV 7WrRLHѧcc-ă#O$._ y6w+C#]j؈Y(#(ZϡjJElb۶ñqRc=|?#d&~MU)Ɩ+QPmczƲy%KOB<"dRUCZd֢c:A.%|fh>c;zCԩCKu ϾG9;Z^j܇ҁk*D<24s2N Q7,)&W'}$A!իzќyB]TyQY $NEfjs[ vqI[1⑉,˥jUh 91|V5.w  b97lB@|qUdO+g}_;V.э-]c&|sdAtCgjhnox3$-6&Djni r#)G?n=D8cd#"t{y7zd%oaNTżnGdȽ 1?1c8,YB}ՐBsd4F$l%pU5!3ܺSƚƳEQ5eNN-Q$hFbmQ^Oo^鳣N71}/mCY6g%%Uý>n[_3/@Q1 [rUC&S0:Ej>nQU3}pCXh-P[ڠ֝{Ͳ$j&m9"-v+֢x;Cܢs5ė:YT 8?d霈[3z\ݺNp{tϓ&kZ^.Tr0`XblQls-U* [? &R.1]BKBsџ~ ](ŪF˕bܡhV>KCkJNxƳE^KYwd|ccd xPHy_>+ h8ێ}=C胋{y?j'\\PN7K叻 21/bɮך7ZtvɍeZC=޻cA%O[!=;ë^ ސgZ%,*8l0G6TȬǣ= ;%ܛ7>_Ոs1 S՘enI. 2!ϫC^BWa ek^y|RXл"1 EEb|RJ|kzw (˻OL#z8w$yQ5T͗P5NWm[Sb}uFBѪH)bY;bmS5&6N|3U3C, C Cƹo4JRd1QNv|zkdu{.b҅ 3Gz +HЪ&WT=-vHۧx\>*t-Q5PoD6}hy3ApL Z%2KhDȸ!7Ynq<{d9W6b~g20fH7Pib0k ?j/0\T6,Zr (ȗWlicƫE^{x0V)cyHfy# W a{ I'3jdS*?Qv9Hc4 ϏcF\[s(9D&=§k&O'i[' A\C#@W5"#QDvvJ7WX6B<{]uc9 Z1DMI,hmfRTZ(˹'M9*cS5?[^@s˧ue<w4H>BZuYsNFynϛc$[0@dKtE q1N|Zfb|fE@T͝T5͑%-kB8TML* WU#BYtUMP#\B8nTT3S1jki͕8ksoZ $Xm]U UT͵2$U :TM&&šI_ )aQP5w\,T\msw21`z]l#1)8>٠.g.<.պ`'EmI3QjiHJ c6̇z3O6G}pIk۪gєm_ߐͩUEv ٹ~G&g/Z BՐenF3 zeO.xH6|H -S,QpCUMx(S*o~UUskUߩ$$ꓨSg4eW/B52Ϫm]]P[R4ӔWjT UsU<O3Ȥ|Kԩ ~AA/@P5=on׻?U[DTIȭYei4vf~Vt?^M }u-<z++uS9UU f ú^+*t_7f뛓+vPag7Oϳ_aw^* ,B߶PA''﹂%%E~f !/BjsT T U3$ԕtWPR_{v?Yٷ'xk,!. 9t+}҂:/hQ|OKBK6>ۢ]&1 fincfh47 R`Zjo̓Ԣ㛭;U ِRgcVOW5?#mQB}{q|\oWo_}'vےzǁ{׭o>-/Gm dJe_"Y"(XLDAˤbj)`5헑 ~ QЏVŕ'+'!ѕ'' RjV''WhŬF5rOF7j],EUU@ո3ٗQ٧vz|K߫S@R$}:yOȇQ5oYq'O_,=`7ף"6@7j=h]W/pO?QKYJa ~gPը!,xOf#`մy֠,+R4OPJ6,?09 5#@@P5P- f$hl͢j31_`fy^lT *A]xY\U W)]C_vͤG+"*5˗ O.U5QK؄g?o䰪sx61T T U .4ei[4@-=׶UaAva͠(EE4_~L_Iռ_4$7#T5\NBU"s-3͋Z$U5zr$RwlNs) maJkL83j&gcE`y9mq:o̾ܨͰ3Z|Tc!?DņCxy:?v-?p !rȿVgrRD\VAʏ$=ϖJ, ٪FyveZ- Pwi6%jUM:,nu}DbW]N\nf#deFR4{HDHrĸTlEհs>#+"#,k6^xFI;L-"9f#MG*7Kn$rN$~Oު*ؾvw;~31j,9?]٦xmjnvlotUr^ -jӧAj.̛5_R~/|jn/rmGRl1o#qVj~%P5UUUP5P5wDԏ;VnkЪ5Ժ P5T͵9"-|י6*LW|)tU@\ [ƈY_Vz;N'iK'u,˵Tƃ+yUUYg\1$T4iUuOsRag1QNvec.uH;DП5n!pt.'s7W5L؜.nhKp4Xբjfx \4XNUUOLtb1IG uSΆm8e@kv01ZBQ^3<3YF!wU3ZkwGe4 ǗtpǢjR/ EzDRD4Ɵ7t dEi(D3|C$]=z|js5 +k̫2]kr*Z ;V5Tl8ui1!A͇)/׎ZЪc4ffhQ/Uc\4LϽ+Rjj2ʌ}=I#sS}J ax͸z r&^d[hƣ2vP#UU=0`r=Pw[!C=`7Lm;>0#KjKTMOј瘼lG *N+8Ws2t20>5UU]MhߤYE}[Tꇧ? -dt=pS5T2jC}3$aZFv!Dʘ%RUOFv`!T ?֫5{5l}_>>F(`!֕h7S[.y,ҟ fI)ɻ??@@@|Ikԋ(@{;X^7jjjjV7nll}4/rKR5I*&Of_Sl}i}gUo,>}HF`#Raj>{~W7h;_эݘM Rbm?f7>#G~`=q{8WhZ̋oyKo @@P5 C5[ylJ6݀N?7Ǐ'>KV_|0??oix9nK*VxIx]3f4ʜw<.3uT gxCղ @@S5&߳kۖkvURǓKUߘ[fiY(+*Կ|:ivk˳OVOO>{f9]7/hTL : Ax';1a7qdZ RK0G>:x FNm-Ŏ5ⳠҒ,Y(H2L|2qFs4tM_fA2,GHyP?I2ljoҒ?ܣլ0ZPMyd\k wԦ᦮eU5Q5['42Mr1iE2T~+IQt?Ή\]LCلǪ&kN&U\U Mh:M0"\CyӬXjUbGOԭӧ2e)VIU߰c)ͽ jE01x†`D.bFHvKK#JWٶy1_P5P5yf!Ә<0ӪFKʍ#!qJ\uzS5+j5 Fq;?f@E2VHDu"^3qX-׭q0r޿Sop۹c&9 Ӹ΍H]˟nn8˰L&P5Is8agY>_HΌzSzq5ǏI2\#LvaCek\|Fl,ȌFfes;#/,|:"撉H4 +:ՀA33TP]ZUB0 TDDKKT̲rۼK U#Nn,lr,لR4ZU ͌qB&=2ܒDBlxIgf%["B[Qtve$)ؐ RM].U%bPe>r]7$3Iqnҁy@@&]qoS5-x*\M3cac[l_.¹.$5H]&/vORY?3?d.zT4q5j4v[rИ9_#xģwpIRo]<QJF;X#.<U#Y9;}Njޤ7 5Ϥ{fǏ^~zʇ^|:Hq".FqRE3BL-50#!3jjxT&U$e327Dm8]RjRC_y^ԫ/1^Ē:X=QOnP/tsbr"__WLUMvجD;?@(4]ULW_&ͫf9Y>}k`5R|!UDXMaШc-lLijetM3tgIjc:Unyjgj(ɰ"tWjR0fTRaJf`^P5P5IFqRG\YyW5|NId_:M""WE,`@n$ab.aɢy}I۸rR?:09~8MdZOأ(I~2olH[khK h=jxkŖƧ jTKbkaGqo I4![`(K_FU /Χ1`\tSgfXUS %fʕcCBn^[p U8;X5kU>dh؍IpelޡnAF2&UJњDc4k%qmC,gjܭw4[qfෙfUMu,2uCxF>}H7mf]-v҄i.t?^]T\÷>Ifi$ҎI&_hz gZ7^LјyU30ﯢfnzF ݷ6|Bq4EKI̴cUCv5ݠ}s(&ߖEۙ̍ݗAoB~Nf 3 7?Ӻ3Ks5S[[]ƫd7"&:A6bY+~:h ,3RJqSF+}˜dI[M>2J%mWe+Z)E oR[.m&kk*:+F}4H T T yUlf<#Q.EUo]PEYd~Q`}MDIOyoVu]կKv3?13bT%\0NIEqi %ɓdW iuy+(vjB(Ve95۳gdW iuy+`s5ƘfE6Us7i]/O@ZioՈz9CaCFI8пxF$ T @jjUP5U@T @jj ށ$ t.aɦڦ0ΊuѦ:K¬6& >;Dg5>G/t `կ39Fu%ahUx Y~t, r_M%'{h_S45gޠN4(4?RX,k[VywB̼b])_XXQnN|INCT${pMS= !XV7Y(^Zr**^rN i$7ژY(nӜeM8DߓQS]T'jyM7Sf zjo0ڧ^jhr#c*.f_Z/&^\;V1Qv\?I*\y!DJDb3lMk =$672x94tJy3|t4fzr񹚶^rGM r7 2]׈7SRUyH ٕ@w5NeM_dbFt9UD ǫ5e)Ռ6EhjJU( Mڕ3wo(94LjlSH&beZʹ U6hiKZ/2ut%i֒{E5)S˥~FXU_98Q,sT]$k5qVu/ݔf p aCEU#BT)$;li6>6")u$&IIumtSUjϓeXC+)^R&ԯ5CV@w4S蠧y_5TG*Cf<3aexNI9E G-}SnS5ӝRf?)Syvyjԓ<55RH}ceritlܨ ^/׶Z_^uvi¼y{ #bxEVLy3䷪9 JV,dur/押L21v~ah*I\s%LKwm݋l]Xbҫb쿛a%+3[2o~ƨ4yÔkw&`(IU'ޫ`NԾs͘f7x{Ɯm*w%~Z>C035H9=EJH}3 ~*m_kɹ51`>YV'UՐfUTM<3\.o*[E䪚ޚawg< aQ5ܮ`.J1+Ԥّ YsHE̮Iឫ֤5^e x}Y(4;_ @Vvl_MdOAƥBؘȿ@RD4~x詰ƒfSښl4OsPUs xfd/zT B),B49w`u+vô}UMX 2ɇ,NuW% eJƒH(Rno]nfJc5f~NW555N>J̵H_y*'YpU] 3_V5SU9K>&1H;a=O?aM{ X}=ֲK=0ls]I\N%}:ۍѶ}<yc(U,+/f?)sR5'x`@V֐bp Mw@Ǟ]T26gÎɱlrQ={8@o&ea95e R'܂1{_%oZ8>8 x.[&.޵&N֑j#%]} Q6&d+26*lLH5: .uM-j_Sm`>3VW)]2y#hBH Y.߶Gl(a?4:.{:U3QSsOt6}ȵ&OrR5۵0j6|?ݪf*3?$ˤj/v%2vCUv2Wm{C2^LfdD)S5 PōBr< '掗 lՃ # aNU3=1gT4 Us> T olJ,obޑ2#Vau|z3gH 栫݆%Ax;jHqzj7 RӬ,Kw&x6=xSwEѼfECԤ cA/ER)fo3V1EvC*ݲWYRR5o7yL7SZYm|hnsm`>3V=HLfHvfn%*,*M76W5$KCl:V 'wQZ3mlbj^tb{3R5|cvB29 `Ux4QF$QbsNu4,VPV5d 5]?Q/XVХ9 x˂r}+#U3͒vqڵUAދ@ۣjrS'iU!jxY^X~^'|e;\8t߬}Ԗq+dNCjJ/i=nzAAױ5-dkxQ`/'}f6SsNe+V ӗ7X`v/綖;~ s†z̞&ì#}nC(u-Oubz4wuneb]0"Ժp60mj39m+h |?0Է`>bA[fDU _O.Limy1U3N=J뙶]k&)qTFjQ5s4?ayU3*xYU҃$#NәDxI6 7'v 8>^eT2^"XR^{>/v >'ښt!Vm?9U4Ku^8Q5=L|_Oa՝PP.ܑ*5]aq=1b{;gi()Rvzntع\tGV'(oo@,-;򑭩ԿR5yi2[m&r}n3GDt*6d\I=-Jd#[5lU.]LVDSFִ#lnKkKⶖ"!OŢJo_HbMEBh\ϴU.Y4jTOļg}m{ap7|2Oo:]ͬUx#Cd^NF6]j&kjɝ|&6MK{մkk^ Xi.>[ y؀93AQ55[SU0ؗEۘG3س x'+x.ծ_&2c]5jIbB)mqҵ\\45A4O389oXP5=EQgp~B1*qNY(j2nWNjr`uyN \LV] U'9hOҍtI4*w+}>̰#ٚ٣:-MgU_,; ).i\I?W'}Qm{bGcUж֥gR4iLm[ msoPW48iި&ki*\N4$^]֡g{m\+EZ>ggSOR39T }WeS2/ibKNb#w]DJb+]qqH&+U@o~ D[’FN`pVa?8;_@LDy$rM1N-nDw/m )D$[A*^*%^&/q5yT @T @j:gf+auI~'YdqgCauAnjVih$5#oFK7S& _zX!u`-:ev4+R e/΁I$ 4Re~!6Wczm)'>ع˷˺N]q>\Ux c=z}+yaŜY(V~JYO1|2K+\:xIW_G[S7Sɸ~ˢI;넴7;:;;_%{9>A P5ds`N*B2/CYbxʑy"eŖc_V kDeU 9fxG ˗b'L%UB<5r7\o*rMEНlRSW s\o"qt> fKkKdKSDR<6_CiJd8=aR"O#VMɚ?~Z;˲tIvv"DlB@(~sKKˣ{%BlC~oVoZU헿MMgTYBaJ/IZTiϋͷǧ\92R5+GSL\qY,9%A- )$aZ;vyPW|݉`UVIS 0ǥ͒Vԗ BetqĚbخh3ZZBmyDl2.F1,oK}M4JQ5br2NeNjXm(jzm|Kw1zaȬ%ɦ}S|x,wM?@n0tR ]grzIGfJ]G4l~r$xUt-\yQYPG\"rUY3)Li + X۪d"G#n}jW](H %2wfEFqgOsf9JZ۪XDC) (yjU=u6?V A9e3ǝ3ːi#hU["<๝kE}0y!n1zIjMM1ՠH,e~ڝh3 V)%m+h>%=uB $ox.&fԭ991D$jT -S5D`4'a-UC1;ld]QUE!Ӯif楑H/3]C+ӈ.~'fh ;>ّVqhg$ k AhQɳwm]u-UJ3ǧУZZw4qǪ}譭羵L;|F2^][USonR1~|"ϙeq;'(Z@*L]3 +MfY[ŪhZ'֩I%. E1`vۤwzȞ)2]9]Qm4?mUx{TMF:6ﯙa m[VUhݬڰ@nJֱ)B b&TI[&rE]>1=d͙W5FNR_٬iTͰ&3HCBNm-d];,hn偺P5NCoU"q^L kdIH,gPbT Vq+^@#sIEKE3E\;`pG%~[.PHzd䫌d݋ Q3}|:E&%R-Mofei;LeF[nyi~j >Wai ´'hK uӊ5j߳6/bug:A^h\`H|Wm41KS5R]tg$߶BߥjڜO(1 T5=7j\2v{F *1eC(J8^u]zv`[v07n=]|,-ˌGGgU;9Z2&t_UC@w,ʦo+}Gj,!b3fu{:ᰤnesm{C2BCj)<^5(ͲV4j IZhL?K:nYɍ8V c5VWLk79iJմ6UJvzwil19>.?T ,Np>cP8~GΤ33դPtKf7?~p:䖪~V>ϮnE{,TTg3OUeT M(هV&UoUjzP5UP5UT @T UP5UT @T W}UT @T jjP5UP5UT @T Uxxw?_]׭WW߹x]T?j92/߹~T·P5T f?~zs_mjUU͓`#_8Ϯtkƍ޺`}WM}쇗߳nva}}7 ew|5 ɴA2GorUur淿vG6?qRU#vkyV߅.镯nOG;NT թ.u5ɼ{Wnz)`?߿o"rsL]z&TM}fB/}w_[\KN1 WɕongI >%z#t|xAɖ 1K &ͻͽEq;0w7rBd@^|T0UswԮEw290>l7!8#^|KEŕOԟ[\] 5#yqUnOt KdV=PVK..W3'T͹IR`󟾧)|#yWbuDĹˏgn^^|+셒=sU5QӗCGT,]Eцj~:zqvkY\W\w474d4tȡAd@^5/wb] hFZ0rt3W?wRd'ķG"Ls􏣡Z&:)&m>ُdr}X\Dn;>i]`5brf['T:UCyp>,U5Ń\\ۗ{;P5χH^K&aJ]p8G̈́Dx|+V33joix9+{x[ƥ/}2jy@׫\4 oM|ޭj,CwS5" ?6:Oi^}΃ dЍ_U L 5 [f./\yog207zcfP53)kw{ۯݸtIU#ִnd߫KNH`7F ]j w|{~p=P5V!l قxf)yƳ'[_˓it{)5Vm;v;.=ߵoGpΑO]y]?ïƘt_j _aO>y1<<ߏ+kUI?s7b,; ?t#o5GOm_XZ\xm,O}#T Ux}8:zM,yn>iv<{Կ7Ńgwt]~5Uxx[*Uxc G7{UP5UP5@T @T :RdqF-qj%Fg)uGYQ^E86 %J\a>Qu"c:zF.$ t.Ś煭u'ЗhjQV׼U<׶l() /η=Ր5kV.߸ӈx}h۶=?Yf|ҩr˿WLb sĤZi:&XkhvO-IOvy{o185aUUȒi1C %+lr]X2#<{eKg {oyb՝7D+ZцKS E\K{":ӘE̞)jO^+.3-!$ߴ73;~lP503uUW%%Bzz "68Brʕ*Vv!x_XԇUVu"+$üzzlJ^H{Q¢ܧQZ2qN%lHPGd'VzV FlEL7Ҳ*b 79I*鼆<UۧjƮpBﵴ"~H53Te9˦Ƈd_ZM_+]aDPJ[BI՝nykͅT4{| S`K !+9$P*[L]cֲ`)%Rd>uN+U9 Hoݢ\S;aT!D&K' TMB=޻_˸n.jFkPU3UP ?ݶ-\\uZjGSCᅗeN;P5.+R&Yɪ׶jj}ϐ3hVDs\LRCۧcO{1{d#*+'&y\)Lh^> }tgX[RiR~췿youh왢B5-]t/ O=)cҔJD+.VOLPeClVVH=KObNUԆu4Z5.kvŶ*ڱ D)+ (m!K@Ǯ[[_U:@&XzijDMS-5~›"3m:;6(_ZR !I%7]X#Śk2=OYIGh;읆%}5\*O5u5wINͽT P5m2<0 |2!rTr:eıbU?}9%1: e;rEgidj1ĒxZğ3C+R:U% ZcE~DL"h׆tkRt+o*_>4;m=󯆂VlEɞ/{5j#dJxlЖFMj^հx^iޘo0aq|a⣱Urgqu2eoijzJDfOG_H ߊtЮn9QoL];)gOD0ulcRQU-ؗQ5tFnj&oܶQ5d@}!22V )Syt{Nׂh~#M uIalh<&?_b kEjuc H RmurKz~'n1&!R߶ njM\C=]U+,x,XǕ녽u8ݡn)>q5kȀۘQ///*^ӂQ5f8b,w=f;V5<|ueQšvCi5>YȺH>"Yեє!l S#+Ox5qܷ )DI+f5KeIFw3[7feJ;LFo'CUMߔKٞ^dDv՝@'3UJ󒶡8ɪn¯EnEGwgr-%4E]LbYKqdeh&xx=U+S,nB*¥hEl*DBbtV|,فW= XlW%ykŏRV篦f&W#]TNGM $fA6*Ka3d Zݠ=esiFk+FD+ɶi-?jHd-3X$M_T6~keY={] C_61-?ZhM+6 [RE k%""byxJ<0U-bE `zҮ2[ &qXc&eҹeBR6EAng)f8ȮNƛǖjɠ o*Э_d3'YX?E3fUTx95u6,d4ֹڍS$~6iC6C'~2#[*Y'[ GjNmjNy%~nl*-0s(d[lۘ+ֺS{d3QfTwjB.dתnr<ț=s l[GM=+/T_7sWf m[=(G..+$'yso*RS͵\mjﵽ~t3WG7;}mu#/jSCEb@erY[7$ySѱoQzmv"X(Z{+UNL]^¯wܔDvX|3.AY ׶q*s{}@e!%n1Pi}xh'%-R: OJvi΋3(fN5O}M4q!}j2n7Df%.ò_q$oCO]'fAw*FymUaAtzY"LSQa>ǚa~=ΞGUMUʾdO jo& Eﲉ|qbUydtxrk* B%'ޖǟ,YW=!YGk5H˅bͅ,x+#^z#Oخ906z> %Y[AT jjP5ua\`I@P&qT T5CTT0jo C|c[8oUjZBd}|{;}MWk?N淔T'PФRDjLh,5W5Lظg3Vl׳ْgWJ4sL!J'љBj@? cs5NgTIU:H C_/ &Y--FyD)[pP5=&iÈW1ݐR5*zM{Ƣ=[fe]8@:r|g@NOUEQTƁ9>{xER/z3@T jjP5UP5U@@jjP5Ǜq9UxL1h_j~˸׳|hI^>=~OX%_]}gOGsUxCy9dvƝ݇7nǎ'mL;w᩟{kUw/ jw>ܯjvD<0׮nF|"l /\+_|CSv?\gj'_Ga2,C˛/3/g P|ݭVxwXֻ|"E0<:$s3[.׫W?6jvUx8"q'3??+>tUvw>Noͽ/k{(aerꝋW/||Hv j΋E>HRϳ_fh6?~]tޥnG5Q7ɧ? ,f/}wSu"f!ch^Epn"mV_\}o[fGyS/ߝ_/q:0)ʆZ9aФKdjy͏̽>Y g~_^;뭧.߷%_drWY>,hTZ–ow!Ѕihy?N$;hyDvUx"!6{ # _QUC|M+ C"]˾\Rm 6韻x.G~&jv x:A+]=]#S#OF;r)U5?3-G7OLkW. O4EAn|F҃WMwz9&sa> ?so~?jElU9|tg__|YխҚ}utRUα| <}dI7]2xϿ[\ޏۉEp#ٔ,Oͯ,=C3WM]Y?X6u@,xg<+|dY@Aֲk/=9G{5PgOc痽Pgf~&6W3jvfo:|_wTӘ=6чv'n\[f׭D@gHWjJ>MtwxAv#^Fjo;'v>~ CϮM_%ǏǗŜI'=~5&p|j+y.޼z#r^ Tͮt;)_tnǟ~FU{[};zݟ̷֟f'tumU'S}xRiݭw}CϗW ƴ>G5g[4l<2O?%|b⷟s] kg\b:-}!Fa`sy`n+0|RH "b`j>Շ^aGlI"3烮>, {Z˟_Ah^" ɏP5jo(GGOrͧ^*~/o Կ/xn>}*Qy8OM(Nc2þ[z쪽oP5UP5@T @T jUCjp8 -h]TY&LVai R8+NwqFKUd0) {E;q8aGt]6s&mT t;ؖe;2ٔLmR?t|L•/ s4FgzHI/@R/=7Sb!ǯ :y^rʳ6³jK2e'y϶9|+ډGJVgfMm=[L_Ζh]fFōeBplBe?Vf~=_h31^qY#}cR_,`>l LJpE+zu!h@tE)k?RzVLH?nJ}VtOdy, 7nk:,V)tMRѼp ۊ [:fZ*0v:<,ɭWV &K]­&Wܪ*4TuTպb寈=F͠cr2OYsʖ3q SXeňQs ;N|ŞfثJ¥rh;X]yMQVTﲩnt]C"NY9c2`ȖfT Ii*(JdM:vfmxꩡ撺*lj޸gO3rUˈdXf\հJ9YkRBFwhS7MhN__zoVbFih*t\"+tuUJjP3M1ʪw1UZ̛`'XfLd-b\ngR,ڿY^uǓjxjC>=$-u旈2u5~a>;w3\íL2[3SrŒ0Hȑ쭅窚7L6e:.u&4QT2@d+YҗU3\j)7m^@p[g/vl"xa=Ϫn|+4-uh4/;."Vn uw.v_/`'L8up&v`ZY Srj18cU*boО-4ye@֒O-[w ") b'Xi8&^>UCk/26hij?HϺ֦dcJuA?V7Tǧ¤s+Sas2Ew/Yaec0y8?OXSp`atC2ٰ&XlDPvXLmF{\Sߩi\' N"I(˄veڽ'}ΥIQKat j.cߜ[ oיs3[yʗa) $ ϖw*&yְ,_'`IF>[7>LΤRO%.- ĭ)$;ۊU Iw"=Cuޭ'9% "#˯j2A Y!uq^ҍD6nx5 ŝ w˞Jxd-웕ϲ5`pѹ 8euFIz|NO'|uo +Q5}q`~kuz[Bb(V|6Sn9JFiE4O𱪦/tS~Vv{%vUMW k{OT;Lu%)ٔ^NNe5,s7ho1al(~ş~U!lwZdLkdwAdYUUT [(W5SUy8@!_A{8'gOE+P-Mu<56h~U%z@HƸW ]5kPwb58hC>( HkMxi׏dAiT;auqm{ΫfgĪfzb9rp3T:ff!/@l7]C؇B06Q.̘Tr1zS}ډRq:'^Qь(dKIvؤ&9jPVgĉa[f֨6tyZ&-U5wś=%rZԁE^4hˆ U53Ecڴa2.I8Z`QsWgZH 8 eg!N6l/p jvh IjܶqGݺݒ[nQ?j_1,dt{3n8Ayyc:N&h>澝]"9qWST#T @jjUIZ>M#MY9rOt[fI~7OUاB"M1s&+2@. ]uCsmc0E`Zz[Nfmk,,L7ܾ罧ܙ4,![& @ d^(EjuTB(R%:5gqilZk,|.x;nZw"\ג2$J1 }] ,UU-5M.sLL,gR5熎zj?ˈ8I3{FUUT5yOp?Aci{H#=? |t:gjZp%hd/fpzO.ۂM;YkG.܊y1߭=GuauMNT T WOհ;XVjhlL#97U͚?JxՑ[{Y8[rYYlMgźA ?ʨt;/.]Cug7UU77ՔSȷ,<ضdϒi<KmR @T @^UhjP5UP5xT͇~C^P@T \PC^P棏>!/(D\a Q4ׂ !/(D\ ðm[ēb|'?.-/^yOf|j;lQ.dwx K\!ڗ_~O?\=U^7f;\R,'$;/mS'yŸZvyuPA Q48uӧ?0ۙn~,/}I˓dgbӧDEs-I۷o߼ypE*tw>ƧxtO~|}ko1w}퐹xٓNroWo7wr=^7A6׏+'?Hݻ+{_'$R)uu?,4|vyyI}YֿGs;4]m_ۻG ފz-f7o|oQZ6j~W/X83˜ӊlo$UO;U'zd7Io,!ʅb!#WD2IENDB`python-mkdocs-1.5.3/docs/img/initial-layout.png0000644000175000017500000001720514502137725021370 0ustar carstencarstenPNG  IHDRZi|LIDATx] TTG;g͙7orI2ef,ɘ[,(./A(**&(,;" 4BuC\Eg[nK__Uu6C &ܯj41'T,ABL,8_ /@9bQ +w=x?ȲQ\v9W:ݛkqO@Œq2{B\cӢRdxIT*eCTHqi݋d^/d:2~R3)9L!,.WTg_YD~1Xwt!S*x ɗmRgf9+Wlrz}<>0 V\$ K*I=,%۵Jaŭw:_vH~KȪP64Sܶ;{ y>*ˎHёLПGtrV tZ ߃`lMe"53HJ=+/d;3bI̡m&Bl(0p9btA0~!Gk+IDF۾[L siLdqdË/{ATV [6[ ~!IVOARDƶU,L='5KrpeF`m;DŒW;>J֤qE~{[3W^T-uΛo 'AŎ[9<ډ?a}I6̎m0  |9JoodNa?zNݽX&d~bSӛi|7Mc4?&+FC$ Ü{YVq55w+vvihY`.3a]tS[D9S|9P[mVz&ToCYyzLm>94 >Fm3k#ϛb/Ekdn"dTlSWkSr0~ ??ogs6{ .Ơ@ ܚC~HȀYw}vsssܲeKJJʒ%Ks0z mg4;튫C;LB1AO{y-_Zؘ_r6ѦĦDNzoG A|Жrי~z cwfꃖ@ ń3ffhfP3o=I7xO[,FUti7\z 3:Rԅ>r02ӻ;M[.[ Èr$k-}Bi^0ot٪"9̞( Г'\vθH7G%?BNх4"9La'K+p7ת,QS C93s=,m)݅V9K)bJxݣ9P~$.B9iiilprIaD9/{KޞD#cxԃ(f^h?Fՙm6xhž:s Jy,D1X@AGH h.!}}5Wj.ԴTxѣG7nD Fl9m-3?޿7`:Lw("7p]:<͸fG`ߠ1 qiN\Xa#z-eQQdPwIeb6mM׏qAzo,y7AE/c PF UVVVH @^/~E@ovnR]Jt3CRV&x#&|g5REm۲Wh^;7T ;uqkH [Cr^I_.wc=5E99%e-g<3ZPƟ| O~9I<נ$@!=ma,ul[UJfB}89t7EmtS(X ZLlǮϩQJl LOsSt?j HR30@rlGgaCiK=ieϼBN;W6;'ܻwI2T1߮mI>4~O]AlNjO=´(vi.^M4.y(܁$ Fmhx 3$wp1r# x)7r@H%ol|(k7`="gZr𰴼Q=TF)mnm=[igcU]f+I*sƍ+Wsʞ,  IṯY0Y{ 13K!@L>tkn@9@ WZ:H$rD"QH$|Fr{6G8|[nkLV`k!7v.Zr:nRHWJ%Г',M ^k1(1XXAV$z?KZp muϫM)򖎡8Lq6^?C1}HQ=>b}ȏ[y6w#]'ME̙' au.4=%=-%JTG?E7ݾvIv=r`YjCr AIhx9-{te=|5DEʫ TdV_Ψ ow Qʅe'vyyκuht7}c\Bho Nd(q2J"^ԆdRɁMVvIjLY`9&EɾZ]t_n=cOa^k_cYmRiܵkм,sksY5W2. !Ϩ!IqBjj=zz ѹ9Jc;;mKmV)no6U+f˹3fqB9쳃Gz>kA90&1;}y8Yx|8{Rϼ + _ +y` ̪ _2A|ӫ.WDGjłR-cηLEcj/pUGT"WY}{Zemvr`o 隼$LYvҙ?T)_`F";x5`cMKOݥq"<)1Wŗ o&Pf{]?5&+Q7;?0 eT4V1F)৘r"ַ<Yt(>Vaet:'V9*R$[?#h/:w$V g5l'-f\j)@P)@>08r2Ɂֻl]9ξ\`|9&K?+@Y0r_*qS[oYV=a@x /Y3|9 Onyq.-=~1iw\Cx_SfSP o9 3V"vɼ~(jZ{/GkQt9`ga$?@cx$ F=o0IB  N;3f}=uC<^F7iPw|¹Ǹ5|*DC~*FnqnV'wo`X|>,@1ZPKFIXƹ/wV6`# )JRXS0.@BQ'JGʤMZIV4356cAf*:IctIu%҇ ~ლJqRQrQQD/*)_VXD$FsD"o4"H$rD"QHs%ny?@ PD9Y>q@L:9^PBi+Bo_=-Yh_p\yjq) w+6񙔔I#^]_L^" H-M8L/lկîBKn)Uǩ77LNN4Fh;>D."?#2Ǔ[r0koLX#`4x;͍n>S\Y5Mr0Vr@L”.<9@83.S)C)`iii!׮ pc] Q9.d4J&؋< ]#`/4[<RYeݨ&˖])l =ĉnآ>+( \GHDc-![`.LhD1>Ρo/9h f/H6P@\]6ϛܫͨFT[{+=itC_ͲJisz˃bΒ|0.%[/g'*2Lߢڅ )D{6` 6B#ueAr|6NC?~qlޗw`H D.9SYeie؁7>kwFPǙz.Fօz>ęץ-G͠|g9vB|/(GcWw LUiG3E-jT ;شӎUtRg}m4C#]ϣiR0kO`,k5LOeG&ēoE[-ǁp C-ݒK6(v TB=k L=Nw|KǓޔ(7;7A^\ğ+R"lSǵ AZ,҆mDM5^ݞkjfjƍ+]t:$%ꌠTfS:W=~v}۷C. 6)$AɁ@ϩ֩zkr.3L:uq3l037硌6}u:9Z&nёf$>n OuJr˭' a@DWe`arx9H7AE/͆vTi?e3䀳"}%! ?d#UܰRi2XQS*3q.n$/YoȁkT%u3%! F%\WkәC83{tS5ĭ'an $rT`K > F4T˜&\Sa䙙1ZSF gc#ڕ^Xq9?3z$$d')&yY|=@2P>"9rxB_]P#N^SSPRyx29Sq˗j6Qw #4-Ӈi Mٟ#Jocx<)N%JF LF@2<D}ᐉ=ZRCqBaRDSav]]mpMik,>E ǖuCȷx\9ؖʼ;P%ĨϔW*ycCY;V*t?@6;O߂ PЈmS] Q5hxjˁ΄ϯ `ik͝Cehkd2E[3o tQdͺjog55_8bxÁw^קlC$Ȁ@L 9@ (@ q$ny$?D"QH$D9@"(H$D H$rD"QH$D9@"(H$D H$rD"QH$G2?>kwIENDB`python-mkdocs-1.5.3/docs/img/search.png0000644000175000017500000020303514502137725017667 0ustar carstencarstenPNG  IHDRZIDATx{xTս}s=*(J(^)Ver\&I~\&_I|c۴9ZAmF1X ŀ>k%I&z={{5^{g940x G7xW`\+}zby"Xk=Qpj85N Sé"Nq t``?ov_O8@ݾwB{+P`Lag(0}?5xU'&?! _0oh͛~}3o[sOaaƍ){{U?sEt_|*b|Glmmݵݱ h˗?8^{~Kq 7vmiiid^|~e˖x"7;vcKV\r! ;>Ŝvss|kuvWXyNZ]f/9_keEظW ~s6<ܱ]@~z}wȳ-[Ѓ^z'H~_lذؐ$]u](;H;;;{z^~rrr֬Yj m642׏mGzW'E2xZBGU=wiiםZrηչ[!>8vG]uFwsu::7=^XʣB`?Wzw~w6&O~?k}qw$< 0Ia@1xO8@˒>u|Gs_׶?t޻;d%+CʣB'~hѠv3@Ru_{䄟H?3O~{o_{1Q>5xtW|: \U}4< ;vhn{mo={II})?zo{o&I<ܹ3mk"(v0 d&i<}=1 d_A;v\>;o߿DR ~cڎ(!ǻ)ee[HA{)LJ'pH~ Ũ=~mGsAϻfOYv񫯾&g``@=>q<N[SShnzU(\,t3O?qG}q_^owKGH2ai_^Ș{{-?/i^/AYZg?]w>끏k=- MGvz.i0Bi|C2=8d̬gA6y !Wz{L7 *K^f}$+5}G6oWt]tP233_@de3}ߵk߹SNQ1/w[UUU+-dGD&ZNN{9ʇ #:Ӷǔ3hEs;w0$GŀS<w)ȟxw4(Q̋/::G7dяb6"v\PJeCN'N2;y,vv$;;ԩShz#S#ӳ2[V_wo|]`MԁJ$Lq2 = 0(L3G]-/I'~:4{Tz'nq{&11OG]z$I&s')<)ږ愡o (駞Dv_YOT((**ڴi},S?ω|k/LMnced6a/z%;ɼ7?*&lЬMM?R3#%fCɅ 9I)z~%(f|-z@Nh>G&##FP`.N14*wժU>n'bo6%,ر:ڣ>?׿utc4HP dmmF&xy]QR۷o^}~|> X+Wx;7pMCKhI~^~2E&ZN4xu"|7UO.M-J4M[r.Ƿ殬P>G;$I>b&=+DG{c>< (N󾋨 ?sϣ>*=zݛ8?g4)#Yxp:dV__l{E,d=uV*zLK|'V|KϾ =;f g?糇o~C'/-iii׿E+Ps=7N{T1um60EN~+p~XK1 >]9LM@ Oz駟W<񴐆D17oIiq"|/(~y~jMlϑF4M-~ |dӖCQTEss_W?EGwMV3? ssMLqIkpIcC:3 aIweu7'N<8"gh_,?+6xJ)=:)'НEki|<'5%N/*RPO|RJFD,W t{^4r_!Nߚv)yI1iq_z'rxk |駟Bw?$;aGG׏ _92ʟPu\[a/7NMĚ95 OOR;#x㍐?zgLސ77TDZi7>Ѓx#F9(N Sépj85DNooI(=z;oK}$nHK_%,X(vĎUUwl%XY3dG|m6t85N Sépj85Z*۽д-C ;!ˉ-9p@x|= CiXr@Z*{՞Ȼ:<Cyu~(pj85N Sépj)sjOx#!!!!!!!!!!M[o300z79_@tep)&+=q&N3yֵ(υ<H9rȑ#G>Y$^6x3x)H)cHHHHHHHH1k]HSRq)&+%n s]ȓj"G9rȑOVHSR&%%b;:/u!MAJǥDBBBBBBBU}Q< tv2 yi'd)cȑ#G9r䓕H19 y2x\Mȑ#G9G0u8';OD9rȑ#Yy" >yqy1x\Mȑ#G94.Sq5#G9r''Og; R"!!!!!!!MVv籀aHHHHHHHHg_k뜗D2K4Y)A7NF~=F<{yy=ҟUȖ\gV짘g\㜚< ȑ#G9r*O.7]?נ)`K.גWFOۏ8i:)e ~|UJ௱u8d9/_O+ }6[@.<-Y +~$wOqNM%_PP[NpQS謬9L|b%]lG{<۝ShtMl7Wzgu9rȑ9UzS;uwZhmrul rX,Y*_sǍULr sIcלE,paV v׷(--ݬֹn˩p/1'niȅ;f<ճ7Q66drD|I?/995y|kl|Yq >pqkeY,wNm5ku9rȑ^pPfe1ZQW.hsř}pfǒbK 2=94 rͩ&S-_%tb֓lI{9 9zZ^^NSR[!(+K0Uh4ջy;ldOA8^QZ}krW-ipX7TZh'EZ2Kg\Z⼬b6Z]@˲wPMU_k+3[n{`Xj1خ`?W6X ,dXYLp2X }X!ϓ8M8VgK5cXrMA7֨j`<)Q'!W |Hcr3*2z<~Fa&njg_Uj(:{uvi +[Q2x2z6}H_܃dE*.d霝i+`!#4*ԗ]q|g箕A?7ek*n/)p9bùd5,*IW?,U)fު θXN+fcy |\t\鼆oߔ-3gBoYc͠u͓)^u\ӒBw=vx/䗩ZƵo2M$k7f'&#G9]?pq-. {6VZ6vamV A/6n-v_ >˅re:&gmX6^eYg ˺])ǻ*zsZ vu醪ZחT%tm1[XJrɄM︎2 E8g9.Ϸiru{ЛeW_q\[n6טVfU_Q=.eEgҙ͛bo7U ejsI-d[ݚ]}EfJVXf3=Cr{%2 dTm%46VX5)GeN6sMqeG='5v'tkF{d9Rڛ"$>cN;:ϑ *Py=u c5<&#?|T9tkp?ω|rrrŸ 3XjS] |pl#׸mwFZIJFnKM~*֋n+e+*f>ץk{nc{v6 ]κF.9޺|pxko[,l>>/[.2ndk^.-(OW ߃e.ۤ<nd=sgU.hp9rȑ#?sZ"gdZo(4; 2lR07D4}nZmyymb0r%i_mݍ6&ۆZv;W^ẚ>Lynap_%X' 3x'ȑ#G/>P_"'d^ޫ5[Ֆk[nMQg^3xRiLz36KMu%k{V \; =y%l$rݡ[:Si>lR)Hֹ& ~ |M4՗n4(MbM#iv0Z.dFd_Wm.._`iג/ ^~!{l۪Ź5wY}u&"ҰN˗lyȵ)zgyn6bq<9l4{v]$S2k*< f:_(<]f9y@rgo?ZgO8Bw?`S5Ƶ\N7]uENYaʒ%Cיƕ ~IE>/4&o$k2umEchl_ys[dt,wgqցZ 0/6tCDžB٩zHW[EneV]oŝ[ϫ%cL^MF9rSg4B|uݗd:Wżvȶ{BiIe.$qo`V\ikFؐM-6 7_C,%;jPs0xiMjl4.TI<ϽpU+yzmsm3xe[(=@q*ֵZ_r}ܚo2ݕ#w|7DrQ+oe7hJ˯)g}e:_d]O/A|M5dw&. W붳AȬi4c=ݐ/1?i^ h!%`O!&f[-%Ҩ ~wԛsBYnMl]mst5&ܶgSwY]~kc[H^eFBBBBd9iWS?v{uyկxu:q"{]c:_K༉)(PחgXS1ȧ( ~$pCY&i0WcpM\U(H"GѰN7ܬbk3Tn`nt7I+TnOf))\4Ϻm9N7vu,3 z|@D-%p}O2x 379+XKwFZHٍV%%M]{=oy%Ĩ/3خL(> s:imD`O/4xD郏4UE(lW)ҟ~X\HK~_Y ؆䇥 S\g}lXfYΣuWZ:x^jyUx^UֳO$dȑ#G>Jj 6XXfEx/~X_;CզP b9^-[(՞-۲V,Q[$ %/yb;,,GH[L%ҦZ^UQV c< ^JW^=x֊c݃ELŚ:A ?ecs%\%FV=JJi1?0A.v*/aUK?oNVJZmA9rcOXw[L-t95礡>|yy[Sdpb"_jaτy1x\Mȑ#G~skΛfNjB\ ^R&%a0x$$$$$$$`@2K4YiсIy"}JwWy1x\Mȑ#G9'bHIO)dHHHHHHHH4Lwgy1x\Mȑ#G96xT)dȑ#G9r䓓'b;Wّ';OD9rȑ#j(X߀}QXi;#f0ҀM+j}ou:}q3 j(8BďҀ%4vSBÜľP󗕕EMxj @iQ#;[&ICdӦM( @iQ:3:##f&RHbnx :t ^tyJ03IKKDK#a/<42J~'8Ɇ )솇þ`Cg4AJP^^~]w;臘D OMH3J(<|G W^ `frwPSH "57P`^ Cu. >pwl6^_TTn:|P#HM!5"Hj(S)] W,i)ڏ1(--|~RH"5bbxþE:4] >l/))Y~=>XP0+|G:/摤b<lR(攄þ`Ci}l!eڵR}Q+DX `<5S }Q+HWþ`CdMȩS–|Ilʔ0xYoTk)YCG4-u-Lb+͜򲳳oD>>}WᩫY} ?8_ O]uР ڵO>Q{={5kafTeݕ5g.]AqFL4Uy ^Hmoh&qj/Ya^Ȟ}_$w}o?}' K'~ ?*~UH2|AA}~wGNxl+-4:ޯN|+^n˞߿zݴK?,<;O ; O#h Uݻw?#< =oz)xE|}lΐ%?}}j=Зcؒ#A:{^WvNm=Xg'$W}!pB:-|%&1a`ϿnPa~kN8x9sR~`[i6T yJ@΁]|oê ;&߳ee䧈Dwz@3GU$^Na0qlxdz/ u>ĞдսW{`{7=rϯ[~~+/ ^58WhυQ^7H#0ߵ"}bIo_a0x< >G>Wފ 4?QҎc ~ut`/mᱝ?ˇq=a *yϲ;v,]agIf,\.xf/;WSzH#Ҟ'ij+ Uj"FYW/80QgI?g =( "Gؼ?Zzpϛy,֧~+;I?v-a~clUGTFEy$+ @>x#̌8#n1e?7/~NR6bB1_l^رG|qE3l埾hZM^Ϧ_zQ4`0x< ?N}W$q$y^;C'g V妷A52H>[?yxS4X*oqa0x a0x`0x< a0x<0x< ` D,upP]uE2dVsӻ&=NwL 0x< ~ ~Uw㱹a ,`0xt4,_\Cj/ˊfNRfFooԊ"O/uyђ\<[Y,[[f h<}!\^-t-䯾c< ? ~E<$һ,9ǽ&7mU9\˼Q=69΅Z7;ύ|Qs7HK娞L { a3Wyn$3rYɛ<0w,fN_䵍E]*%/7duثn.ۅw8nJvK<gxv;o.5zs# ^%:2xZκɝrXϜ[|7>q'2-V6a0mt/k 3TjWD3g+cPm0x< ~j ޛ4&Hi%# ˟SgEEchT_rǹa@UUUFxj1tN S^ҐI>x凜O;E1x6Ga;fg9()ǕuZ\Gɪ2x5[B" }拪sJF/.8eM(Uɽ<78dz6I*,a 0x a0x< aa0x<0x< i  a0x< aa0x<0x< 0x< < 0xa0x?cJ0x<¬^ZRkXZZZ^^n0FlTM'@l`(< a0x`0xFj|M{ycvcVcA;>ݭcspa q++u/-[%F-Zxg`0x3xͽ ñFwUcv 0x< ~|YcV2tNWgyD}kEqmH ݫ ,F] x2/SgQsMBwsc.O+%GTg<>\'<ӹ둴ݻPzz}ee2` ΊHaeUxcuȘ+5Non 8%&c^^CqG/}f#kCO.qzn8ӵS}!rX5|F΢j_p^)>p;>_ncV+42eg/:Wh'| ta H]ߐS$wr?iLsf3nqgn/DysVz=_1$|t 3LWXm5.aNkv+.pk< }}\e gTP&$;O gyMeMp;WIss ʤ;22xIНNoF{Ekqw||H>R밟|wd?=U"8'ycGE 4R9"O"ੇ{QcD05l m|03gųD;7a Hha]춨Q4pNY삠kCt" >,pYܷWEXX0x+rHVzd-eZ䑬6x]!Mw.1L6Ak}:~Wc,ϒF:-ol>a ҨOdeSF*:&DqNnluG)#zL2|k g3t9|\Ri}-:gmN_!uu T|"Vg2kU|ZH6i;zaq[TZ觿|ijz Zzv#=~aKt::|U<9Z '?) Pux{ۛQS2"$v!/&3x:Vq swʧV*K:w$Ǹ4|wrQɴZ|v4![;*;yY2.oJ>D&6;qN;]zhttJBPQc;Q-mj|ز (E'_n1k_gnEMKDEZ%J]2ii5cK@o_/^X]dS(h+XUQm\飆k= UUUFxj1tN S^ҐA<8{ ~`$DU҈ޡpwVo;08ǭ9ͫyuF 5x 7@{ՅAt  u65B{{{OZ_[O@O="(xrN:\CkW`ڥߐm|))^`/;iǶAj$[ Bh` ݤ#|jRR;;u̘R*Y- `o_GZ:Ge;(-'pZ?ZW UjiD'3x +ށm?QuM4ul3;I:y:XV"}ihCFha`7 vĨWQK>g?v@`FQBN/Cq.VWwt I閉]:ntG7~Iz;6z/wAvRBc;1$2~dG"Zاp/?١ K_ioxQЁT$:[豏"ʇo[}7P+7Jc*ܸO>%v.؟DNHkiamoYH?zd3d/\w0ڃɒ9tGL:/ y=|`KdK{қK!~'u \K7P϶VWʄ!UlQȣF;S3!S&eo1OuiزIgUh/O ksBfk*lcQ u$(NQni: Tb }'m\ITCxwoS.nzfQw I,WFު1$ʛ,ꪺ1e }J'"X]ReO6ã]#^;<s&Pa0x< ~oS]iJۧA@w!۶mQ '%]cb;x?H_vs OaO]RZOp8 G[m[Zeb찫I|hjA4/‘hg`e"<70z!n %_6(vA#lCqiU QٟUc*F|Bj$mfkkn jׯF ):xJ2#}zs{A[56y< On4-b3x3{6SKarmS׀zP?~ U7NbZm]=}j셆ItZx.^^v<:pi2}=txAd%g^E o 9!y(ѱC>q\ߢE7xø ]eJ6( tDG2=^>f1_HwD1x-;Zg1,\$[5֛B WWU-C^(t ~ ^.}345_*2x^{ 4B׋B("Ia0x| >b(E;h(<  kkj}k^ui-M[+doUGY}(eEt]ad C EQPq<?mv |>dCfvC4W a}ɬ`wk nߢqTbUc)bhu jZ-6/+^{]]#UpWrXNDaN&?9=毁a0x|2 ^qFyÑӓcԞ3-͂B;-54u1d|Dj^xҩ6Fؚ9Q/z,~hIɪb#O9]LCwGFP>PqC}l(W!6ޒr JCy0sN[? -7;2CͭhCihXEdK7ďn5>8ȓn!)zfcEQd WJҙы![|BeilQ:3:a=)jfikmA1i~a 5P܅x014 a0x`0x< aa0x<0x< >orpӂӕn,^ɛ_^嘕.}Jw--9fw42 a ޛ4&Cucqp'W[a0x`_PPP\\\VVVUUe4IŤvv{8aDOyJC& 暟LwvkU! Y}eEiC7X|Q4UX|JMVs~&)pk+rNXg6Zl|+*˱ xB^wqXr%^OD3 >xQ4:wWKoݻFK*jr")qh7rE+RVЕ|>05<:fxlx}nLO%ͳ"mE+Kr5=vzXT)szK] ~=8r< #Yge:E97xg[Ggz9E^O}!+d cv{f8#=lQ4noFF>2&lݽ@s]G2rӶ Q4 ?੃R/27,qyg:o<6br2\{U[\Ksy,ې#i؃EK/ ggt<4Rcl{4e^Ln⒈<ٹ[,'G 1WǕ9rՎf} ѡ <  >j.$:Y\B~k-w^p/e>骣bq2J˽(yKscS+Q44it %ߒ5s >={o>_S5:P4Aa1\斲Qkl!#YX^qlTUɚʰ/d-.Wo#e->WVfehYb9L RFyb&ác;k^o0j [zGҮ-A uo=}]v$~ 5۷Vkh{-[|z0V`pV< 8'v zos0uFms/IrUѷt :aɲ5m==CC~ 0Vf;mi:y ==ۚt]3m qoc+:gdϖv li5a4a`84IB=2?"oͺinBO(-fI'jz-G+]|rN7C۵nmf/a2Wϗu gEi2x}]a flɗ{;۷4ՙ_pf=i-l soPg? |=z]sj~Z/4``&" hMm}}PYǣigpp!< }C0wcǎ-05PCM5@ a_3rP x1L P3A}'֮];eJҀa_0x!<}aC0xa G0x :`/< a_0x!<}aC0xa G0x ~ .t86>L&SuuuEEEiiN˻ `fB 5 RH#5PRsI&5ԀFF} D<>xhP`0x<|G0x u`/< 7P0x!<}Q`0x<|G0x u`/< >I;O7: }cGćfþ`C0xAXc#Ouul=6 Gs3f~v+^:6 ؗ``/< ^?~9 }aC{w#``/< >~CiKcj oq5|/ =:C?;M r_6pf4ͻO'~()9E=%u9{yYڃ~ ` <|1 2r;N&`0Ї| șu;?o~ĉi\}ɂ>|e\SCjK|籸 Wm?p-x}'~G߄t?v;z?B+ۿ)7G>=R;pd_/v(胇}Ͱ(SCgEiLΫ#{eR^:p*SQ?T7UX2< @Eݜ:΃?4K6ORKlTC /KeS$ Z=Ωq~}cE$ P#}Mp3_piLsf,||Jmԃ>ё`(q/Az?0 G: ^RmiBٕOK1cEs >ō`u/Ww˳[ >pLGfþ`C3)#.H䁧L c%I޻`j>c9x"i恓'M>i0N.a_0xԡg9$~)JKX'~ Enk֓r_~*ff9OkNSR>POA\)ӔMa"ua5!I:mݲ3,~|4IwY55C95PBg<5w^ev!?NV:_S}]MkVF彍H+ @ x>q~rt.ٖSi"d\4/ܝ/W%}}bno}Þ]xzG!xyq,O1tAA/<|AA xCAAA}C x @ x @/<|  <{?X9F~n׿~_>? OC! 4,HC$ 4\ OFRkI&"5<A  <! ÇC x @!<AA?$هޱ5@A$x׻ƇNkC x :! Ç@ x @!<A>  < :vokdqZZՎJ6; &ZS8GhS4:D;tunz;+}5^uQkOOo$xN8*sB&ċNu"[Urk`+.ˇ7{r'{̟N,d]"gPu匲`Wk|Ɂ+o8'E X ҇>bk5е\&km^8^f8XFSjJg82-2G6՝;D~#}'JD7N lN p"Uk]F6p+.壘=9r |^V;VZ13 ,C,%4F𠯏 x#Z</3cЧ)~2SK'hw9 l8Z⏻s@ x>  ~J= y+x3L %*ͮf%ZW|hC}VVsh ; #O<մNB TD8BDD) QDxAGh?Q~G((plWXfZ[z aa]U2T9( w>k(@54]sФ>̍g_JpF  cDS]Kk#6{=g2!4:|8 d[\ʠYcL9c^ִ*ި5c={6V D4ѧjk*NTao-'Kr1:QƩsc HzodL fz+h>שW{f^3srOhy6)!T|Jk8q<^43 k8A pXQ a&˙V_QE>_ )VtE/[OM^gA3:XEuӊʗ_q~ZNȯe'& d&kjMݰ=n".3Y/Y) g(uu=rv!.*Q>]s6l'9/JlC}_\5sXYuͧ8 xGO1W1b5k&qv맟~O>|r^?챑nd8d h0 >ȧF:pG!66cro /MS5 &8@m1Uhv2]^cER1Y^J'#i'2iҥxh/!_2 ̮2b<'OIw|`+y꡼ߓ ,eإ|:a() z*竽4底a1;9>~rEcId8^uyQ44Ҁ(jo%FRk5YGH{6b U:[UJ>=2KHj)Vp1 gȖ9cڠt6a٧7SCUj(#q־y'B ,)%mx,Կ8%+GoO4*: ڲ=Ud njAj31CԘ3GjOH`WV`W{u'ի9kcy&&5Db1AWvWRg-PuVyt:Y3Wf'=B SnTz ԔɨL(3 y .CÕ >̀5sJ#Vo 2?Yq/DpE}O)BÞ>XT_n Lp&0#rG25=YDF p^ݩmP MΕ-z꯴zMCj)囪7GëDe"ŠWYSZ# H6zlMIj %ߜqE'ە)|y5 ,K)w3_V>_YY V>w*_z^'Mc&nTZa<.ۘp?vͪYO@ʋlX\ W|@/<|WAlq5Kx6_fNOȟ|bp& mxt3Tl+kfm/KX/O^'7iҾ zd.c^3O챥R<6UmmS/|{ԕ+z~ϺǶK:U>c6|ڮckϙ[BĒKMU'ޝ }fʋ!%SDvBɿ/5Nu>OmֈCTM䊥$yJSS|  < AAwG>4X#k <A;7` <|AA x>k! Ç@Ao x)'hڕ>JY}@0??O3${o%xDhx}>vOB&qԉanwl$M/+}=>8<ߡWxO8A/<|A5>.w}w޳ x{#b%W$!D?g}j |r^?9zH:D#[7TߢϛpN4:Cӏ$.(-fo专~ONݧ2 OVo-wwFW"ؙ4H'ҺTgF7QIkCg:+0r Da(w5tBUafĊ PH,^/&՛:oFW# Ͷȁ1&Mi`nֻ}aMQ4FNO#of Q-O2U6S{9SK*Cz9cX ~k9ZNM^qN{zddPJT<sHŴtCt$F=6/ =`eœ kw`vVI5i 'YvjtUflu#FxQla["'=N)5wwPyvƺu8ki:1SKr/G-,66*Gcy0aLmV+waG]>.Ğ%bsU'}N.PY\JZU~EnKg'SKL2u t酹~)^6hm= 2C;; c5}O,n`&t],-g{6< Q4!Q?R%NM'5ȳ ObCZ 9vE=ű *| 40\Aеmo9ڪ0xy*b- bSO˾!;ey\+~8GE_p!C]ܿ_pm67E>OUd-(*nٞ=pQ3A/ |pX}[<螉`M#)#*bc&&A>fJh+Gۈgcڠx x`Ț"ƬG!O>7<7.Ö}iPAx\7fC๹d 0^t}TX?Sf)%ms|w. fPM5g>Y,,%FYi3qFzoPu)֛u|ɨ8* >&P$[6:8OV|X0zMv!Ҩ!SgY$`uI +W?v+sgB~EPJ_T*-"w##x@6_}|<-#FZ>τ-UKnuCʯ |z(!U2_Mrճ<{&nBawUnsI/r)/̏A_5@-&"ܽݝp$2[ =fd:[('x9LZAo0 n(6hZ2f!U=\DI9ёl."JnZQ4NxcI=%eja{i9W'Nk5 QcpM}^--VIN>ӓ \D SclAUiX6&=Lʑ M4-p+i"u;4WU!w2_^bMOv^[/F[wٽm׉{|nESq_vQU2_L< iMS;?(9*+]}+Ǿ-K!!=j *Et?K勶bVm9k->oVO~ x(ڮcFp/DX϶퉽bLt661ۊ+de]Ct*t=Rkg!jZ0p')V`a9O0tgi<pl4<͖ӑ~NVF mM|;YنK/p|2"NmdglXq'kk`:ɎAh6߯u2nM6҇,ێ;Y;lrnN1Hqɠ_ݘSL` Ttfnb %ʯxmbnm9^y8KM^r\ۚ?3;YY+Rv^Ul&q }C C|!4R<ϤrIޱ>3X] 쨚X%H5D&tSW-VV<5ZQElje5Đa+<9(Oc M/* ;yMU#l~-pP~¢)%MvIO^8>E!ckԎI62^?&A)A|<%"P8dē*qp" ,fke$yF2ӯP-+-&e\a7%!uDѤ_L'kؓ[ӜɕEls2e ^V7+ET]qk*GєVQ^ tw|Q49ؾMvŔ{BKEє]lIm&?ۚ&)BNqҍS='|۲ӌ,R(I8}@!  < :С  0l|da@A xF$(5Tɪt8ϳ@IMNtm\X%*I9;5GuuaYZG-%2W#'C:A_Qe e;g-wLC  <@G&J1^h'jbգ5wIHk/RECEydZ1 Nhm"Sr'[oG%n|7 '(A!<?p?qACA!<@A x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@  <@AC xAA xA x C xAA x<@A@~ ~*_X{j{[X[Oꆾ"ڜ[fpp3xZ A xC)?~xs:~|u[G{g~` A@>%_nD?o ߸~LR~c"3T[<AC lQ{o8įAA x<>#O!@ x `mexϛG v\퟉K8kl^hyl~_>9NZv8v=ڽ|}Mao C x^hWk_PutoV1'A|_邃|=K;<ş^(M%ym9b./m~u$]\?e~'p' C xDEWLk;9&\?!"9R$'ZNe*yh"ziz#vx Sץ7)A@D ~k%q5A,G6wlz<~<9ˀlޛE:'\w9[ 7WKR?r{ !9X+EwF7-2Oka|Q~=^.TYY]9!i哊'C:'}2  C x_'qUc7{1RuRI.{k"mc)^}j$LHo\uRsE2]59"_,LK}vя[ G_oS0`C!<?Ͽ^4y{'Kdiٗҩ$dq5}u.~dEʯ56/ipۍlD? q LƯmgn?A x<@!x;zcZ*gԻ4;hv}g/LBK*ŵx<]_@4x݃u,ō2^U:IXl9!;LLټfI'ASx pc&X @߭*If @l/׿f}l-A@c#??A8wO!lZѓB! <A@Go${Lg nd @>B}[_l?t?T=@dҽCA xAi<A!<  <C x C x<  <@AC xAA?'ҥs_?5駟^_o7Ɵkw!<A}$?ϟ|_V%?s:itOtz?g' xAA x8ZC x Cf%i@ @Щă!<A!<CAC x<AA xAA x>^]wyZcF =4;‘3lt~ NksFL[&{jTldMBל8*8N&a9ט#[UB٨u魦uȑ^B14k%T1Ha3߬z/*McLYkK|?X ؓӅZڂ[L\!<~f*F0,G3F]O_S'33utv#;8!a$D!m7,C?L'h\ >~C44,LlצFal/ &1ԄZ= !<όˍPގg^ 7ZIɏ?6,$6zGBQKLGW  +h˹(C y-}4{#ǝ[V>0 ZT5E94T]k%:#ӧ1Fdi(c[DjLn}T2Uu \³O#FY@9|oW+ zK9eőADm!Vr5tm2H~c+U|ۓ[SlZ̏ zO4?nQ&x ͡Fg b (al:ދf$v(%5mx5ꝁޫǽWZ=]qm1ճ2&.iMuKK/YP$J v1tqx#b_J :|[k6TiSǵ4Qă_t4ˡfYޝ3q fO߬)3*D5Ґ"kfٮkD0ր5~xaJ1uğ=Q[NGu!  LV:V: F ΀+5;5xUQ=Z&whk{6[gTcZ=5yax_Rh3x5z_SϨq'>T17>5{~%V1k{l{O8خkTqT(}q}.?&>r&IO^Jv]s]#7$7v.!o:fĮNlq+Qu\ξK'XtO.(L: ̞9eשƀݱdit]{$uV8K?uq邧F̿ɍhͤWh&oQ/^=T~L#VpQ<@ ^)&-vu#T"bdVlddM73,M7}64Uy%%:]FlT"VSsE*>/`A-Q`A8'LNLB2M@.(;N+f >&~3U4=uu,T~aLK(C ߈S!$Q8Q'me|1ɟg9F;2sS/)f$Vg.]g6<՚;O YYf_~dɛ1 eż(35 c&,Cs+]4dRE:;O츃L*i_md/fo XDT~l!<O-7& > ͝~bQwÊ.[8vYm{v &}|*} k<_PI"vա>D1֠ 3\oU|ehHUoAE?ll궗mVŃXJ8c1lVdM~^ f>(q4SH~e>tXHK׌9u&5o&9T|ZM||foN1W~H~Q4N6GGlrONSB4KAU\!<0(RrחNV{h*}.VWNVNnZ4>ZLԆĹii;8fVbQ%wN_k ^i`X:an'+mmmHm%#||Ҩݔ͒NֲI;Yv8Yؠ7fہ[u)$㝬JW{hE/ۜ@n oZg,Lts7.KU-[XoQdee/EQE1fŐo:/^ke^hPqh_"ģ핞+Y" Mʒ?Ħzd OVor-u] QU3-XNpĉgSFe/;!\!q.P5df;ϒl lqL24eOR'#hٲ;!|.q{n ^,TrAi6 ;G1Eni Yɤu&F%CGքu07Y^쉲7C|xLYm R$,Tle'I&e ;X_߻೦ u5iSkҼE &f/{]yƌպpnF宂EI,-QLK\-Mr`Q[2=16<;Jch8M!d&ұ5jKiOڅlM,M}`&+dUdhmSdkyi"r62{f/WwQ<@X +f lk$Y ^E[-;IQ_^!69SsLeM3]%~pԆJ)S]T=y IEٌ 0_Cci MNDU4ڃv>CⷦR]㖫Akn$#f_qZ]aOh"_oُwT{hS`4,9tF6> ̘}SljGG^j0y{UeHV$v6>j ]$ @C-NTڤvThu怜팒EӞ"ˬF~l}$VO !!q|eT YH3Mua3Fdѭvy1VԚ.ny6/= &eLETPXw# Ԥ:]8F.Hm:g{g ›I,:jqtJ]490BwQfg;YY!聆(ba58c._J-sY5X,2ki{MeX؉ _Uƨ3oEIeG/J c+pKXkY #HЦVfauJ$gLlOְsO&=RkSםq;)'zϘT 5Z|בGO-;Ol >2|ۇDJ`+Nҷ#0!<?VG!& O͎@#Ijfeǭj7)9AV9Lc4 2%Wp|[##Y Ȑa1y"xiF4Dڶ.KbrŬ=[{lL(xt@NpA8|Aҁ*.7O'(w™ES9dhf :mX <@L>e 5<+qP 7HԱBpdp ;'!"!퉡 ^GL$h)Z+O9LUp-8\V-ݢ?fH^-"?nrLM7Fe0FԂ>GyZD3+MOz"Ҥ||G*gۮq[#}u<3,[Զhwf=I"c)%xLJAEv=՛ 'S zF(8@%}wOyKUc`ԗQ4及|ӱL" <@ǛF-E#` a0)R`s2DW}ǮG^EKXLM6zMX8Q`iP/C8ZJ1:b~FG,Փ&! =yMK57G xS9$EÖEWe*軅Q4v4'd2)ȝQ7MٱGA xO&< [S{j:S&'vO۴-}Sz,("tzKII&i("dXv,C/I>OK-KfQԊ* T>zdwQI$3+%Va)-(el7HtZ+m9VefZ9#Gco"c xV{KP*@&rϺ @@zwZAmM-sf9 \S;>] d,[ C x<V%~? :}|= ~ɺ _${~~J7X /!<@H_m ջ׿ sC C x<ೋx8XA@$׷{]qSFld}_DX7B+Aao38K O6?_Cl|gbqo qk_^bW? ca_xXa73=CuJM:GIZu5+s/QS5%>:Ubs|u}1yb-e%_.R%qMV%>:D𜧷ؗ= b^Q4DO|?zζ9.|^!&xVv|w=!o|/}`(A @֟YM2yo^WQΉ|`.*y[,oBo iy7]ъl_YۺJO,ŗ?/# uKHkT_:C!ɛGؗ͟!wywWZ(Yx鍭y4r۷fsd_X ?g}TvYXD _cGbz毾26C x="~'Xs##I68{o@rխr'kfίeyi_u)_]]AOuߕ3RLs%;)%~~kj/EކVv;gMw5_ۿά6>OrQ[|7?Wl\yr_q9\w)$'rrw Pȹ;.C x'ː3rӳL΍G1"؀ zm/7)SC[<^*i]s֪ߦ9J z6%<(l5sG"7f66ln6,1N_oB'!q_~[ͮkx3iAIL|]{Os5߮?Iw&/oowd,/7}SOE{Kf#쵗{4}t8;D/m^4d~kⅵJvTzui+:e[-W ?Fq]?. f 3>̮3kXۉ|:_f:{wLb?wpG_%uI;ɛ}5}^極_B=YJw!W? <@G#s]{{1HdPuA?Y,,Iv[<}ΒLno}=B.l_ q1{[_L@bwz`R=oom.^Th_v ߡfhh!퍄Ү1DL?im?4g [-U390Ir/Nr~v}{)8$5|뇭$GЙCd8ڋ-iϛܞl]&)6>?[9H@Z(k@AN>w<  NJD1۵Ѝ>DtbG4٩laY;8uZ{<1v{˸%~.Xל8|8'' p!=x C xJu ,s{nubvث#6 >rF=yS#J_N/w+|!d{6@<@ x<Zq1a\|'}= @>?O^S-u$FZoZE75"3;HitI\PZoq'՟ם"OeZZT6?egE3ui aNuJ\O >0Zo**MUZ H%RuV` -&P0n+jMkjjg ̈9/e;x$:X_L7u8.ZՍ;$;ZG9V5:'mёc zMœܬwѷț :xr}B |Uv[gĽچ0b=i-EChZ77҅r(O9ս!ݘg?,S._IJb3E;򲣋NQzӸEӞcUiv5+00ou/g7P d >[7*$v.U~ŮiE\`R/C]^zg(l2e"ү/qύ9swzzMpǬoڹ^.;pWwKh/rg(EC x,۸Lq~}t 5pJmϧT>iݡA6 Ei4_T`~54uCeS=gLSv54S A1=1v2ΩvO]ϙ 8P gb{cR{DبӐAT,VDQ` !@6Њ10&!N.١bZ"Dj㩌gq_^UQ4'3z\6PZ9??*{omLh2/~Hz Cә;dL=63. pc`j.|."xL`PI꟰ZV$nszĵ櫯9PY'x%~H癰ʏO2SB~؀qx\ m 4CA=%T&E(MRS D&hjk%Q֫z>s4{?mŇ{j#hZ2uA->ՠz^%F ~x}IUO@ofG {?(|ը7:@{e6I1uY59 0x("wk=_p&2[.>k3hL ^wc7Hlp2&tyAkwhY|]n(Y h6:!Ml\D4܉hD$uV#:m| xo"\d(Nٛ5)j-.yI8˯t hGz<$G#_DI蔠*y֍i%I=LΎ̷EjqhQ4>^{T cNy)y ֟.Wj|tzYﰗ&fb?vRS10x0{¨%-uN2T?^E Ӊ|*co&EzsX& vOu))_ܭ&S62HɌ~>dZ558a29q~+3qBt9mOZ钓~Wǩ:E"RLW*zYc[)x5 eYQ$*s=PEЖPn9QWȜ4gwVqg7F[;W0o9 <  R>\zk+ T6P}%) < <0x<<0x<0x0x0x B?P!4k&"zQ_)eWx5/REMVs_r:m_>^|zsj}Թ_?xwoTQ+ x ^f$³i,V_%slzR؟u˺U{o5(BY 5koMSb4on ~ܗ׾ad~Dž9ƻώ blgd 34'b7QS|6ox`8 ls͏ZQBUC~w %1]/Mȟcc抟E<4uA$)^zXD:]iZ9I,el~>]6P uӉ/vW>0uTOHv=4#Uv+U)UO[&^ջ6m~${qH·P;ڨIeq stȪ`˜Fs~ΪCz%&xO=mo|}eOt8Teq'{E}r՟U k qQE.Wi=iR*jZ%>F^6GuhՇŘ&o}jMdh8$:F[H?8dB_crܮλEm}T@2fn{q\g>9osg埩Yo}dǣhh- bsr,:;{y)潳WrƬ>)n2TvaX͍k xAnMZ(ͳ?_ǫM_4:9Igk.pcQ%u+bpB?ꍳ\bt]"`rokxij0Bw3_*)tU&Ά[&"<#krmPt}h?h;RF/DggsI*û6Q|QNRLyth"FuezDž(QKC}ݼZUJ;il hg˵m@23beq#(rb W*k%b&Sռ'4nF?2b?-K˕tδ[R\iBuIK۲ 1FA0J4th+#7޹"[nw!=v'}G.wV{N]|\r[ecO*YyL+zѾ/jT\'T5N\pi7 SnpUfxMJR0x^Wm֕t>3F 8=KQ\z>ލó4cb5u9"!(] O>m敷}A27]TWeD^( NUGF.I-P{y>"88߮Cq֮xwGo5'z<^j;T+ t"E'\ . cz7 z7< dewYl%_RRTfNM;s2Ys4tRJISiW ΙeYd-G֧[/6sRʃs auek{gڨJԎ! jeKQrNv, J[aQ ˣt_\7/Yyi~ #T,jCkkՕ#)N3o%/FX)]|u!9KRIz@&_-e:CSMg{(V'ikoEh<5;udCӶetb~x )6OۺvǛ} ~B]c3YCG2Y˧HDj3%>nR蹯2Y7 i23sjUvbqyISovj[n{EѴk&4$ϣ=` lXi~'clf4[&t( o1]lQ47;^;2fn;^Ӱ95mZGf؛kWQkĥx0/Mk [x9'= Iv!r;lii`U <4dkz9an{  _ނ<< ` `   < <0xI%>w1V[nA7:QYYKn] Iw0(*a< c4"\1Av\1^q]G`Ĕ 5bVLYQɈTbe^IQ_ro׌{(2 _t  rx麴<nTp|7n71\ll+LI`0x59<;JJc7;1sUyȆY7:0\vP1\-eyTA%,4M/]1˽c+ cc" \x6~ة^`< 4Gur~Gκk-?lypxN4x΅O$wˑ³SoBǀoC/٢|0u>/ qa)S+ {5XM@fȻE<̓qm~ƶOl<2#OyqeCֱRVЖd]wGo읬RK5 ֗omDHcz_( `<0x<0x0x<0x`0x``` a a  < << <0x<0x0x0x`0x``0x` `   < <<<0x<0x0x<0x`?y>?_ko < <a`- `  GO?/~o?}7ۼw>|e7,WUΏ??x _ÿ?Gkwͷϟ_կɏQ~睏??7~=}J7`>蓑O>́W?~|ol?T}zso׃,?*畯ya{Ou `1~n[z8='%Y{N۵U"[yo4o~  `Q<0x<0x0x<0x`0x``` a a  < << <0x<0x0x0x`0x``0x` ^X,VvZu?.>5>-#X\lKnWEv풾=[ -GYݫ[blW(^~uQ:kWcЏ{l!s֋wUrZ-vAZKf)'rüzKWcU/vX59T=*vqamvDfj4۪K- c6i>Q^Ö9adϼa/vUJ=|/)ؾNH4Q;qÆ׽_҅Ϩ /jrGuU)pY!u 0x%\n:A%w77véֳձ+Nʺ ]=O_bjv0x%l`Znlw{iE@CP\129[HY?U^Α#UVG='k|GGHc:qZfE::'e=Æ>_QC'$2x>H 98JjI-N˫ܺUsKVB+S`e=EEö6Uϓ6ϩǭcCfBGkVHމW *< L^Zc|D;FiNۇőu}cezBEYK.UIy\*uKm_tLh'4KCV:(ttN֠CRkI[XFO@a'ǴgS97p3Z6Lz}J;o HtBڹLS(=m;=g#4&kR*~9|SɭSb,J+ssyFc+9lbsÕ'56S-㑀[>Jܪ*jndߓå΄.uI+?6̠]67VG.O2y%D*WG%v5)I_?ɥR\4 zT+\. lQIN`.J+2"命f$|ॏԳr'+qwZ$4d k84*CL*n~4Es/H-2KoMWQ2kW .֛q^;sVd!FUO(XsxdNayllLUL䪼H|euW-TI, CEwx<>{G!scT?푓FkmO"uO 2WyE5F ̽^+džկM͕ѭ弯o* ۍF=oNE>AdA{PJ㵴@nqZ^s(uI{}dY|K\L*Ot/AItUP-Q$ZZX&kΡq>]k?0qPR\e=%fOohғkD%uF)i3gu&ud&͋s&i~WؼhwY ^n1)ANg{7u)4 9k\e0x^K*VAuL9\}z6MrՓmum=s`ߟn{haSe9dޙ'lf,J_mjIOFzREZ˹ߛ񐧄T!SREGJP;zyզJ!Vp%缳kEpXє %6ɱq^:čF4Ba2*!Pk|EaR<[aihϦtAbPsy<~/+,#5B\F3-ŞEi8S{7yG22u4?ŧbf+/yYba +I/z2K2RގvY'Ƒ1"-nN>UC[ݏi&Iv0QIݙ.?pP$66PI4rFiY1j/P-7DaD͏cY9[Sh`QIN.dsqLأq+9z`sVUV;'(-**f$$y]9ys#Tbi릛UU.c֗fR7 -à'fַ>/0q.(73Y4,PZRFR9m3xQ4 ] et&{=) e3玌Ɗs;ԄmtAZTudYmŞ7=wʼn7c!6穕KGYͭ 0dmPaIw{t;Dڝ!+ۡ7_h\zp>iO]&?Z<.CUǃgzbi!5ktTHNEg#D~0RkEu.+x=܍h`͋icrW}n\K+c'[o~rUm z񦤓eRyW'om;@v<@R%cmS6X]*I]R^σϧ L](zW;O1՛gj ]xXԒsݢ2x98D)_?oa`I}} 1[5GE'žkN=tC,4<;cQ߅e @O\h_H*XIxً5tw:zo;2А]Xw 澿џCҝ r&lW,ȿNѨZ=|7A4F=Yepʼn;-'|OUW\ B jCGz@EXoZ*6{9}v\3x8* b9XUo%-E{#1ZZН-re#'[w:!4w"=US1Y- }9䅢wS7o>I~wڶaz1$׽^lWy'x?}P F>倚x+_E^L- G.;s >0xzB5Bka_ 5p/WWW~K_/| ˿L׬__z7~~ٮ~SsHqx}1=e攠 HsH&[nc瑯֜DKߎrxrgVE#"8^&]' 7ki1LQ\'sJMO0Dh~8&MX#E䞚Gs@ ײ8{҉u Gቪ-ͨA ":͝j` ~y'Ύ)%sV5|0Y(^,[HMk3 ^"׺4E#轻r3^.0u`8`vu-~!,o^v3@FtKNB[ΑH(NN@UO W0Cޯ}Ke*NʲBP"rBHS8.⧭6,D%E '0++e /UMrhMvw?< 'e,j3Y"U6eW$3Οi3ѩ~^Lsuݗ&ucœۺ)Lb+u}b+:%G 6QusgIUa02JSey9S7N8q8;f|:n"@hLVΌ:u<Ź8yLr 28F-u-w:Zh>\|:ągϞ,6uYBjI#e p/itj2Y'BׇcJl~CxBp2gRSy!u1m5+7d3P&9uJش ^Iz4kKӝ::aK>{߳MeG}7.ǤҖQ4 3K䮊Q󚠜Y/6nʿ!0x<ϼo0wB\7*9Y2wm4"N`78  | gUr\.Vq972Yk/-i֒Eo`<8מ[LERl60xI?6U-:cC`0xyC=!XEClȔ6:q.LfE},h),˘B3Y7ޓU< g,)9N;qm:~2:$ @s O<2x9rCִÑYoo `3l a a  < << <0x<0x0x 0x^1)}<hͨ W#VUU=NkdITG:ADO=97N4#9].3D3001//-++1*!('(<%##"I,  .orIDATxko6EںXT\ Uulp5I7찊A!sQkPAm{2?.!?M1_fQO4x~+8@2 -mV[vPiۓWǐWdm+ڱ]lvԂ6onZx^{4yLxJ)UΫUz&AC}QJ)罿RUz ^3=枷V*uZlZp!\pUw+)jgy"ꚇYmJc:|\խCE)xJxQ#8XQEԥ풠x}?i҄%2 0*Zx뒄&B_Yo-Ș$<͆ZEW;_F8WpX0MeG$izꜷ{ަe y-RxK{%&$݂2Fyy*=QDh8d-|̧"]QɎH1I&m|l0g(=X )BB3ʫ }%'r+Du|kdKdS{9K9iYz0snrο+ HSe>HZ ѡp \ȷebdmja=[LJWKXQnf/R_/C'pO/^}pU]g1jxD BH>pKXA07ukA$0|/lw3긗,pLl:-:\zea4 k/t+q:>M%1xDIEhbE4FeYbM<'r1P65<`dT~!*.uE෽uzo?׿޻:ƺ?:PM 9@nA rV̋eaMǬGU<,N9#HDy sX@^)r.N18n/E&غNx!@&+I(Nh3p^QUް <,Y8Yh0Ge?y18ol4˗iۑwe曛䦯}>Wퟪ˿;ߴ09}uMcJ%E21TҊ[_0mڤnR=gЖƽXy $1d2o{4zJ伪7*+:m!//(&ysCLu6ndZ"VB蠊E|"a'zVG-p9 8 :%NWlx[D ށ"bkX%l ^M%oN9BX mXEX}VqG\Twrچ)OxǪw2UY_/$˪=py3}CdD(p9" oXqҖAdDb+ۗc.ޜژwSvR# !TXg`?JMxsJ6Ǯ|$yât ZXLsPѝrhQhZ AF#Oܦ8m{udP:v]f<+y EHkt ڮyo( ѭvG@m/M"l<s~uey)/pJumo-CϊĻ1ֆЌJΛ4j,:/y] V)zi8Q7=bKA9մtH5l:Ǽ9Z<4EIżJNY1Dm2UJ)]R~y2DK&?9Z,6sxtt<ūs{0~ZhCW{NfplQQ˻ <3tO%y}>$wzf?$35>I. F&6v&x-/jtm-jkx ޟdɓL$Dh^u,~JYfm -ar%#6{7P"2LQ~ldҩ%z옫%EBlbO>rO܎{vW(pλ>{r#9b^9pyڼxS%bEn3Mթ$3-%=*n 2zbH&3G2bF[]~ܷ{zSͱ 2BU.Qe*ljn05*[ӻu9mE=?'9 ycwrδ0fbb&  Œ(P ,Θ((ў"İiߦa/oi~b/J"I^a2|oF.xCC.Z{a@ZHB߃@ـf[bؗ߅^w߆,n4})C޼Z"#4{W㓸ŇUPU \"!G.F!"meY3|^f~;9=L; Xg`@n&PM'[$/er?ZWe{-&oROϷ6ݹ8Z] ݁fҶ #kri5_ /XQà qs?7ۻc|;O o>SG>qëaucG##ugJQA ݽDɀ[߸qIl ?ky'`$&"0!n4Jϻ&,;c76yvuw攼FN!Ì[ftl_jip{/!=E>gaiW%YE(2/5m f'uUlhmа7&3h"OȸbӜѭQ?CexsD/Vo0ȋp*n~Wg~{^?5x\#=r/GUr{fK.}\$ڰOYyZyK}^Q ey\oqe(FQs54Mi?]yz2 #p DEi%s-ʍҲ%Qi( C&/lˠh)8Aຒ}ꔥA0T9yO}5_ΠGa49*+heJh&[t']mZn+E.p\(?[~T"HUbP.`Źܒ xwbe[\WƵ;nFYHYϫ˻6 \CQUʁ5"X,oS@Kő^Q" 5T(+-+8; ʊ eg(uyqu߹m}?gLpT/|]l2'UFQ}#2c5y -* }- Ւ,$}Sx^\Gx2U_}'i ~_Si܆a$үEBej,~z=@i~ i偬 @/-!/:Q;s X*{kw^xQz;F_( ]^B^OX9\t+_<|:UJ\ҵdm-wqJc9y/+TK7x=MåBƹtO@-숀8X[ 5!| 3dX vmϨ|'{ _bXSv3Py)ќ6F+Vcg-ᦖ`4B=mvO-%^B:sjV2Ŗ{ j /:Yvm3h%;=ei_݄~by*(IX@]>D6 6:ʮ4'Au?=@6ɭeb( pH@RdQ¹F@g.wTA1b+v6:mX&-F6o7b[:`ndV#pBKnZKFt=Z4eڲS n fv{3n@^>lmhq[=6&] Vp#|1:W -D~]ƕ*)V7B._Y"2gO*ERHئERgUƗ=M6w~"*_ֶ>z[P?v޾z}xO{b8PT>.$# {YN} rHy[L=iWxKj;G@Hj/ v~}{tvb< Jh&J1~}3W6 j$C/Gm_l{~r=r&8E4sۡ+%WCs'Ai,ۄ%H K$V%fbe#=Xe)?<9? cP^(&Y2uXNk~nF&a-]#d>wHDpf6݆{~X0悴F3H_Z.Md_WvM7fW1$;:0V\sĮ= B^ey!"te̞ F^ SWcNv=E0&繆C+*& BȬ/ yW|5vοln돀F hf!ɦծP$Uj(BuKYAh .@ɛU[b7(.5(yu=׮\\&DbOaQȻ U>غڗN>=ZB)P[qIc*؞#/mm{@^T:JU^9ɵ[b;’aY ʜ~R,YPbS ui@kSX.2ܰ]G\ (Ad aY߷Em{O׏aA\"< aQ`kaI #/3vFwHhR !N vpqPBvo@ 4 6سHhjF^[5oĿE2b9!k'7qL0"L/B=ceO1̜+ڑ;=n]6unC^-ULj5zs@J8T@WVGa k;O.tj7U%ceeQ+ia/,8:lR+|'Wm|Sys6H{Sdf,8z3"HEa€R1%7.6d§,4264kML[jy9]OB? %6*V(皼zǙN9ͼeVGg:%fU*F! KV\h~A^Lyʫ y="&@Y 7md ؀C11H|! B۰Bl_g&tIfjU&x V0Ж/ /iöDL!W3g@̧r_뿡e;mؐ?)x_~ޟ/#x8V $ |10AZɶ&ɭ4T,LkᇦWRDyh" k 8m{Z!uw4 fFޝ STUō^bD]6C_HyvqUB0G41o ^ 07 V[Tć?ќi#K.`֊@08&8#fv)TmE!b0`T)r88.A͆02K[Z$0 Y HT`D Y1H9ߑ7Jy.T KlBL %o nݮs)-YWxMŝlm%GDm\7kF):~ E;XѲ*!FT%;pe*<DD0yӄ^-+<ˆFUdyU39kv_Q%ZhQdMb$),V KQ4uhMIvY^R}fU mɪ;h*ˊ$N؊XYuTP,c# <8m8,Q2+o*r"xUbX\YLG@ o_xn^9|M7,|9ދ>H߯b Ց*qAVZTjaa+& YYh2+}K}J.rW-p%`kLcyu;*tmYՇӘKvہƩB [Ա@cBQ`!ώ}RF4V:b [@mn;pz1]. &Wt0&癫pڛ\_}7] Rvy0fWwyQ { 􎪵xA.WU2: t0xB\DI]I%c4/{vH"L(P8}n~5n}vI+D{SGTdTȴv;ͬ<,D7JZRď`Κ9#͝ZT !FŲSK%!1tEń!9wۑGl+*֢ށ5/ 4+uӲ;FhU)Ԕ|"j>..&# NlSrV0vBI/_3Uh87I/Y+efz65sgm$k Ot3}Y/Ly8iU=DA4# M+RuY 5] Kex-栤 .a-YvYBb0HxuUCQ -*M az!0D=dKjt+*@,D]hD]Uw . K^j ȭ](XR4V\&[!rc{& tJlxk7o? @!3xoKmƘF<)@u%,R}s]ZL X;Mcc˰bE'"@5kUBNs~Ieۨ98g[ o 63ڸoOƜJ%7<\@x4U1u?/؞>h2{´'wF盠ozx&',[sg+ݧEilkHtOn6[%bg9q}zc> &7aevҭ䇑PyEXcz'j#gC#@^˲lkǐǹNv'ç+WNZCY:"Z4/{›6@xcL oLt ¬A )U"]Q)inU f,&6gqpfGM,!53)>7x]f i.ePC-K܌AAbo<#Vlփktg 8V(U2Y.<6@&Vޘ5<}5қ){ȌDsǘ<:Rvp17Rr+Kҳ'n_8G`bf^9_a,|Ls3N]Jy_J'ĜZnX} ˗5\.]u\p\x}B9JmaY8X(kċ/ +L--Z('Q$j p|O|8"l8@B%Uh#QKAX}8AƱPJߡa@J0cc^L+ȅr \lTQT´1h0C;n|jVt߃JvTlIuΏzPȷۀ>}ȷKnX'u+:Q&%Vl\qb7dGHfU؋J5SgvI&%qj'#+r?qRWljb/pvpғ0H0"%gFJk%q5QNJLkXʜ* ?eHHE͜:V]uI扢@1 ف-?*fEIh# q[ӟØUPIz0%yZl>'#E':侖3MAYbrbLz7t^6FnzmNN%sĦEb.O[+voeC6ro/s/f|d#7\/q~~KjE/^u3;bs|ӻj뼙{+5TS Q!u*_hq^gf2ihQ^nw!jO";"lUZ b^;'r H/:iV4|&>) C)Do?;+7zjύbC!jk5^˨iON.-ƞ1cSKԼ'x5jq n}׼@Ak3𦏹]72z"Gx`^gluQ&+uSO^竕]k^Ȅ,#̋_lJ0`_ nw :QibA HU͢9}IޱGPXy_i"sI<ZNӏx Dw%d:SxMuEM c~wG.\X0G.oGf[59u(  cU (n,ohXBv+7ws>(33VWE ^DL ]l@l6͒LK+H|ڬ+i:8b^y/ -v@UxȮpaxaUnFbxyxc 5q);/L.@◉yֵ/r3F\o$x`yfJDhZ%|_7%=/F"ot߾'lly=f$ʹF|q3۶/g2(LRjH{"_ DD]L~?uK5lAH0cSjq%&)aL8 n9IuQ(-D>{32;gTfƁGm1CA kY8\m+,&Q 8Y\LRMV':DJ,M멥q; C^³[k0ד`x1YߘG]2&7W_~{Q/=|[{ng^X!Jיyo[ZxqV|{j=jjyU{sګ%E_|}:j˗o`ڴ3휏̋Uk2:&7|+yUOb04suy=}5W$_z#y6Ctܣx<4ppzPEq,`D{"}D&8Q Mߒ5YcMO\lhUYOD.0΋Grqw%]#OicٮBF싛;?|\l}2jVJ"^`M9;>|\Y'%N]D!Aֈ$]q5NDdIq^3]D+ h+u8۽Wok^#? X8(t'aqh|c{YW6`6EٰuC*,['J(FS577'p ID@7 8 &؄al FuEbidmA7ҏ!(n\7G"WY)y'&|.E/}ϋ Œȩ#풃%x|b Ժ' XbtW`?ֿKxI0rޚ 1ӟڝj@7 ֌l07 4@BM_/^TIS>91ˇROJ\(ʕG;Z%rS_7md c~? 0M`t##E%QUTٶiRmfnʦ]5M[&0y}:>(i]1ѧEۘ楧)zyD1EeK5Ê_ӟ}D1% \iW{O{KuN@,)`}stHN5n _ImGuBʮ \ӵ-xcECp7lH<=,VEfN ! ;{BJ~/^3CZ@+,8wa(2 C{AL. /Q^-a5MbB yP54Fl%\e`l8$yRtnfŵuj8h"O9OMfk79{_+6hfy/O\EKs\sk^;pFJوb ^kee!Q'UL`X[&'l-JTZݷ#!&0|)I߻),#.  $儏V$I.C5 ު[@PYYdI: kyhu>| g4Z! 0ʕ$z:B 9}Ex"0Ɠ!Z 5Lf SP+fB/gkr*-2ٌӌM&HKĉlN4;W%(uFv-Ÿ0eCw5ՄkuZi~6 ,4)%ÕrBlB3SW@PCuwCj^Hٕ-^yCp/-L̜x18 5/OxH(snQ) 9}e^P\+qpkE#-x 慮5C8Mf*Dގ?lk&G/Q7ka"]9큑E$6T5Vxo=܃hՁʢ7z2lef2a@ؼz[2doޚ@h0e⒧­wSCNnjنhkMa7x$٫1JEhKà 63~R`JxM IDӢH,F"" ?{K&v Wiau.6sqTLOglmzO̼@)+.l-:QZ6::ͷM3џ m]볤&{Ƅ*A H,y9@>~K?@3,J9IƆ$MQatE2SvS)ۈ_Xdxl&sFlrRrSA"I5/Խw<*s?j/mB1rr~v5CzvO&>fS$e&:{>{3~{s'<5YsC0f^jǵ>;R!m 6{'$;>X `)4 6U' URJ0n br 2(FU7( ;)#8!wx1 wBM4K197'W"B_}@nXebF>΁"^ze,n*=imG4鸃Up1pp&[4X$T'R7n )a,-Hԡ9. "AuI,-$GA~ Zƅu3ٰٕI/mw߅ -_,fC ?lX ÆUa÷/c]=Vy7T\e'tU>]J7_!z޻N<E%scwxW{k^ʞ}8;<:<9:xW^A/O&'ɥ.2W+w׼?޾I~jyI|P.Md&0?[V\w[ʻk#θ6QSW~qO?) x^ mٰ5՞ÝKW> x_DN h)n5Ye0ʻݑ{Z=:ۧKcƒx7RS[iJFErĊzY,"Ҡcqd-T|) pܙz(y3_> ͔jô!ۀ䝞e۶s{9m>arnmҭ_ra[0m$m@vM+Mz*7`"3 !xȻ]t{ q+?&Ex7zJyݛk KO{8󣧏ٗB`[}~*<V_R;^\a &%r9&LJs†*F^eNwf0g2%EuUX"UHC:U? c}29+*G׀06^?*nCf}ֈ' IgT R []ShkIv[kY1֢V-w^p4zow@9/F"x,Cï.({ Jڌ2ɫ*$:`FVui gUb,jos J@tbq/0jI:5SNf8Kn~Qd9Ogk'U'ȫl2Nb(ί%fB ŵ/]!"G"s69I9"o2B'\B| Rw(⫼*f-/9o7)ZM*BfWVm/+w;Eʏ zc~acy}J+d#/ݏ[o>%h^R\IdCUI\{BVȫ/ /"Y".F$OB"zyyYΕ~=2R]J_T+ٻ\?M-/A,UruiBFoLs[b ]xWZ2ޝ\l;J6M(xw(0 b@iݣb˚WՔq;ur|6!_{h񜶤0j~ 9/[1 $v6XW8Ncds]hZqB弪dF^^AL؋& y9cv?%i I5kbkpS{g^[Vhfk4UY(=u`P/;}^9IH<~Z%*F $GDTɑ2D9A+AKGu}6Xap"j{[`YB[ۇ= B@Go> $Qfexc`&TaNqjoKU񵾇+l%}ryj=Cɍox4ZG1A< 7>቞<^@+>b絬!ş8aF&q q}(c.Qw~/$w:E9xlCx0gA3/!xHxg^Nw&KO# ޏ3{?/?,&#&go")onw|h͍⏗Vf-jma{<ô"KK!0mmxئemE2<=00WY(-cmX^bpߤڍF˺mZVnY!t+uxAg3EO}->X4䵯e֌rYkW%%ǮiPw5ārV0m m׬UUذ}~`tdtŏOCZ,{ҠմeծV7Ksemok ~]YjU{Y5&,荷"z4W|7TiQ +t LA[ixVӌNͨ8h4Jnر˪o'qŖK^ z]j%MD#`@Bn P  ">лxw̙Grys5)Ao e!wD؜m,5]y`H .(ƙ`#e_u P}mU|XX5HiM(o[] -̈4o[iNiVSl^+[ԧKr7c|7y+yЪXOwffqaq?xɞ"ooc PH(btr`jà'r_ yN^ 2\}p1'/OFSxnKJI1@mQF yq % vd2kגTzh#RkUa^ɫmeFs, br;&/6`6 R'&)廿杁}c%5|n~BƘ|1PuN܍aiʂd+Ő%Ň !o0a8^ۤ 67;mLb?Aȫ]hɳn'Ωfø] 5.<:Gj7w"X +x6TYLi-Ψ:6ӬB^wWMї&Ũ'vF}|pɍlu %AUTey݇}Tq8-f Z;!2f*鵘1;-dN'@4;,fj䵠ټilKmpZ1%pDRDQeQ(Mm)%Rƛu.YVya3ݮ(}/IZ3drSYmR5֞cWo`QB__.yQ! Υ \jn-yh05Wn/fþcY_{O?=Kv͉1[ Ah4BF_[%ٷdݵy^ܭ0yܳcRm^}0ၐ+BZN+Rx{uKdKy.tn?~B%no\%eDNztN#|D^*uW6oa,R/>lQ,6 t>~?a.Al䁼>Zssou<ƚ#k vU{-.,6Z'1&~%gլBKL:ejËe簍KX+ !])qVC+mstp?B훗\eмl} ymu/1 yAœ؋_`Vgb+oTF~1k~9quߧ`6ےygnoyi<D b"ejo~bVsmQ,BCC*}IJݻv $1.>VfS[O,QIl#ѻnWDX$~V(ʕE鋧.h^ lc/r4$Gx!-Ďy9v r;tFWwn5 X  f^3cxX~`Q7}jh2APџFr!F4osjl".E":_&ȋv(ƛ8ϰ Ųb$`A(AQ%:A pឺ14B0lRh% Qьjբ ^"C&@^?8'ܻp$/`}It^8*f0S'<_$W9t{b ݦ᪇V=F&yѪ8w&S9T-HmTKpAkL *\<}ڗ?^{?|r?G.pc<m1uE>Vh^΍4q5x|O52>䭦H|M>7KK0 %.Hu;2j8'"_DZ#/24s($Yaib)P #PoORyEdQ4T}:ԉm?&tS?[CPO,{6pA[q0ynzA1͇Hƶ#!ܽ H^Yk^R0B&5=[f?@Nm Fb"] <Ϥ ɸ?g+|au %φ0^^E^p+V%zPָfzD}JSܫ 8@Zf17r%]¹0mfV"w$#Y2rxcskלG!4pb7!jAwBu64E?³ú."TD*VYm}޻MU}fDm{n^x<>3<9=?.> 3\Hb:Sv'lJfЦ@ɰ~`K7  GӔ:0Vj86qS6pWl,I2{qvgO;s~-_7ϋ'>b2ì^1ݒBW3 Zř5 *BVtSKE`a` J>3auF 0%^5sȅdjNSs21r@ZEBFQAtPc ,,+"TS˰;gvr0iEH;Gb}?#-+'92tZ~\4 ‡js\,,epT)q!%V9;5TSԐnZtrCXPĠ01R6'l ?]\\k]-l..?~:'s!7acf"[<6'h' M,.,]y5cC=EwfdM̦\|,w8wZ%o-=\ۚIOZ .j!G=3q>'2 }.3L~i`f#|\vBc7UϏ|{gEI m2&l#5Kl%32Z%tGgJ89xYns,zсd ;vf9+0bD-݁ͤE2tsRR': atsl3;NjtjiNA%· ߝ}{l.\jHohP.`\MxRkN3s 'xOkF0*]<ӬxLpxbP ^_)x Smf x 3?{۩EZqXx@}9HbCZq/a2 ^HxCcbjbTⓢFN&_5"h*QZхO0Fz:쉊s]+*:7U rdQ#d|DuYÄ d0c#c+h%thDxrBjA K1F'K&C*E&i :Abo`:w7/EeT@앂':lwlOˈޒyKNs:v Cro4!{`:gi@t 9dՀx95zCC4#5yӌ6xekD8=˃ϕ bȻ{&}UU̝$pz+xͣ;FɶZmP}am&on ohjwu4qd?ka˸ !]7KnI;7s<XF~xWÃ[_4U* ־XYxWm}_qa7yw/߾9|?]sHY?̒>oy?ir//./}_/qKi-]6.Y{]W"kYO#֊U'Vs^%RRXir֐S:sulS[ʴkQ0\?ʨ=k0u(~- _WȂ_s#Za2\ Rɉs֒Sə9:zFF?EP]fxxc7o_{{M_=;}/j=˱$1~LZiU?E ^n3ROVJf0 c|CtC/#N7pILEi\Ie7R2T8>j e23u3X RN3sxxǀ~fd/gz,(D kd\r\ЁvYv&T}H'ߺϦ~֝,jX LM;tqF~喢kýdm9]mkl\,[DM뎴~DGwdCuD-|Z*cvaXwj*ixkޖ|vMė.̳S+;e@Jii>AA-ep0i1[?p23\Jvj;ОxSl=x8چ&)?L6񂌡zv^=_*kVd^q"yg̞>Ê?\18R|( nq| m-:rH/=0' ^|D୕ikW7wJ)OWh+K* \nl-OgS//풪E?B)X؏l+vi)#H;qb9.{P*Ј9Ҏ& ۚkfgdc9 8@%ΤcAU{ġ֩-# *8> e~!`kv_b,b3LOvׇ!&a[>sШ~h%"lws ݶkiFoTw@y-zxNDc~ʳ.m" /$l SYS^zxgI}4m0XI d"_L}eQ3o`ŧbM 6Gv=jq)x#J)(L^F%zbz92NPU*pNDөov\|x9x=ON6~1Lޭ{^W獴4_nivPbAAIss+3xYRl}_c#QeolF}e@JQ|Bh@ȇAļ{$D^_ ^p|A / Ffıo[c}&K_8 B:P ^.͂*)d D!VPr1+^%MMʙ>xA&NկD` ^L+:L6]F2,S8(,\6KfaŻxXΩ훇&|v;wbẆA5z G'C싕]#"eFl7Pʈ2ǷSաԴ&펜kIaej\ACn74 0H-l ( u;g 9a#YW!s؛էAW:a&2P48 fNu2"IZG9|;D $>Bp!}BH<9c)B*'T|"$TބD2zjU hZXc(nX#QDs!F8z4 TȕZA KBmLZe?>[lr[ QhQey8PCrO׎\Y261^SJ%/h7ø{+=z:;+|v:A~c-ߝ=*/g&-+c+n%z^C* c9B6eSOʴtM(*IuZū'N^~>zCݛvjbZSih4N2j8+T1oEQ4M:7A(X2ke;|BϏyA$;]z<;yxuI+c{;H aոK3o&|Yek($Gm 8l8??y ^?_Axvn7>Ssԫ" %J>#IiR4V}<ן&ODv~x xӷ\/8[gۓgޞ6@ea-^\̚.Ʒ&}kV&΋iw}|az|^ 4yٞcGOgj|Gx[" TT"6MD$Mx,|@ +t#w[XwG{M 2pOJ!>!X!T嘡ϩf0[d˒D]+t&$V!_S?.4b]̝ "NIMҬtVhHDw;%s'$T(+xM#y6#g#odavvW dzPnAˏc=YUd4ֆ@C<}L{ܓđTv^CG{bɞf /K1d ^~T yHݒb@BL%g:G  >:WB:/ᖏ0̱f |p=gXterE d3W?Yay/aVEW|r}5 i!`q&~ zV=}B(}-?ox田Jn<7|d;!O*])"]& 34|pqe@j/B^Kym{{Ƒ&eL%u!ZݘJ8-Y<@ޔ;o{qgJ[#,psl{j_h?H!Kx`3' +cO29&<bvV;"3u\o#bГfo1 nqF#gj1K>{bJhK;flAL4r.= j163uΊhY+ f|&MPXb;ݹȱ Xsk;pVZ67ܷyc;T?l};z=alvdm ɧ[jy̗.ZA$VģՐ{o׸̐ۮ̰QBjr"yM<=jڪijJhE+a_C-0hVCP"VB>Ie[ m)>?pm# MV.Q^Oux'u}eWFGnӝ@k;fr\F#Z F> -(mwU ۰omV@ !̷0\z sQT35ހ۩u[.*J,uxMΕkj]]6hjʒ$+:J^-/e+Dn=Gl:%{p.g2YnʔBp;EHԙ/A^1:P{MҧWkvcP҃SBRHO5)y'@>Id5S 2Uiț)yVW OC#D MeC4u%jjFR(@$c{rBNDE;!a'wbzvn\%IQ3UA$˲$Ժ$H:/R~#T 6$Zr/gs6 <>輅q`3,z݇"/Z9VVZR/6L6Ϻ9VVl[YSoe'?q?K$&‚.]EExH} ?m*C;`"i9S/!@038>lPnAcz:0]/=IKb+5R`>h׼eA-vunĊ}bcn_[K$k3MR (isE#wkڰikIy2\כPTESh1~޵(\kW`c08yX@QxԌ@mjER&lr{箮Cv̽GF6szqu |gUh̽I:A\M`lhz/pUqyIf4IYZ+oeP#\qV-rD9)toNin Y :9#Y &pTE/#IP%pIW_w߱e^k41R1K]ӊ(*2MIY)kiNXxS픨T,JyV#Xd0%)% #,*l( &;J"* )cE75t QP4%-,ZaȀI SvrfYMX](8рT kA DC+/TIDQ$"f5)HZД"*eJH--1!ΪH)<>dDHQ2΁BekMTXHAQA{W~~_^^OKDe_}>iifjkH g˽[/|F..J{qwuwgr!W֗ay%hy5ŕ]_ОLOv?3Bf7- 7~/J&B6+KAPEy˽\L, oZq+{=ZgCZ 2 U{Cn4Y ZȪ\=~Σ~E^4ս T:t=O5 9n~*Y?WMsN6NOƞ*blv}߽ZF9ydv2zo2dr﷠S_OƮVσ 0vri=q)ǭTni~>tv23A:7Byߩڍ}{=bܪ;9sp6)holAՕ\)ዳ(Lgyk@mWθO1g} ڋ㠼hivy޳ZOdM4欟$ōl,r]> sYiqޔfTExzSef3=*ff׬710YnFUƔ&cMZΛ6͙K`˻Fl̃a?;!7M >7O?{'._߂l}j_7t嶱<3he=q̾ʋJN=lQ.ou+JÍNM˯Uu ct׾ R1x!_9`C nhbAi{j-vRL^ٍ̎UV!WEӸ^\lHUc𖯎cqhbO)bJYpp*0^EzuHfT(rS4cJ1Sxw8lket NxK98q.}7?/^xzpuX^gnyS|x{prGV<ԫ[`}SayW *`q6^%w{kXךּf8xoBCkK{3-A06mǍt<[G*}ώ8^ "W-hVo@bi~g)"7nP9^97L2;l4ojO5{S 2kRf:[ u_M7j=]o+:/Fz:j5j;s%ٱK>ŞKlGbc? {2>{Ծ|ZqnǜNήZl y;r) gjr :W&l\j4L].B\:j]' PʨRK*_DRƨ1hu!ڋZ߸Nˉ˾0pb:UBP[-#u- &/̅hYeSZu2KcHFQhd0@,((i_|︄EMxQdMr ipg5-Fn_3u*#UNM}A9y/?~W/x+>p78IR$4zQbt YLG//t iH@H% #pDvƹ -I\i]k e+ r'JAP_kg}a,C|ދB.@TUF4@1v!h)`)^632YcQ\Eː3hRq,Hq)>KGW?3Bm闇S'$Bi(.#r~'@ͩi\OiO8iI}74͕9%I1'm|se}Ge~col)\H|x_֙˨$`}$(5syɒm)4:-^e_fGȷԡ al{{%w~['9RuRqY! ~s5N&ʐ`Ӻ{<`=uגGatJJc9Oz7c)GWqO̜ HKbAMcqbUtۺ|Z'^5j8Ҧ̮"i_b!qt;}c&H;7d9V:a{6|qW/}rq4w.nt6+]Ɉ%{[NV#GzF>B2CvJp8P?~*<)ڙf2Lc*.GQNJ*2Ş`ue:|"g_2brr!i`1@`|ed4 ʈPr=!A ^e+pFO$zX(S~qqE4=9{Lؗ9aKV4=GxVy(voTLӈ9&e!ȬٞJ@13}EU,j㘚fMǒ"CK@mh^wLSեl~x57mgndxm,8{3i|f\+#Q3yB"rz,' #(E8tZq4ǙYS2a@(ET􋄖eM^Xrq@)("#ejteL 6;j75㲾xBugwFMX6neDܪYjCk~y=oʟo /jY Xb+i2_/pnUF>|QJ~S+MVv.g-*¦uw5߸ViuxQ/C׾i:b*0f0\aOI͙fB'5ճkLizt|1uΣҳpopz|z0\7hl}^/D 7\툃P/en ^/mߴ[Ae2t9o=57)4~H}d8~̝Y1tt@%Նي"wFTYK|K$xigtӴ{4jެ5s} p;h.c3_6 vsn{޳֗XJ)47 ~g;X &*MS𪃫xپ}PȊ^Y69bnEGpEY;-ƏG[[x7VcUW ",BP2GB1$;lV ~bVuot*Tl}l?x#xuocoq7;}f}+SMSPI=x;9R>uklJGn XهKm~[|ed6<:{K Ԧ١U9+_fax'lV#Vֹ 2Y)/T l7]Ox٢o ߻1x}.Jݕq;e ɠT~ƕwLT(~o ݱ_&X Y 7a¦t:6`0 Th}%3!7SE&L?oas5}Ն7Uczfm&T~nlywBە^[34bhF&KZ75G308YGȘYU um9F1A׈}܎M^}p(L 4lM$?kl!fȢvD^cS * NӐfPWSl$vb2"ٙI 4Ѩ Xl9fu1mV%)`fH}3Dj.9ٞjD{6?TBD:AʧÆGs_!u‡](i5+<׉o{b!`y)-DdAɫ.-HXbb$S7mZk)_I2D'p{z{,|= u5 0/:F+h OEu2H}r"Z ȊJ@?vh`%4BP%iS!)PQ#A1+M@ܗYJJ*TTQpB{-м1ZNz:2-4[(ADs ]Q}rN棁Ra˫QFdۀ*oP =&"Uu) =5OJ.BWB}e) "TNb#eګ24fq(R0WfRÚPތԲwIA]X.Kr,-3ƜE^vRP'|yЀ$)-7L2_bPN\QT ^Ů0)hዼl^ʃ%!xg ?\n;\P2YӶe / bk1pfBӓHn_S`\". *:My76cW@yId5ٕ@`7sf$ʽ7S@$8BڃG!\&Fu? oTZvȫ!\#+zwK%^*zö,Vwi j]I髬r:YךyWXm}]5s+ `0==eNl,DX2]N3l(ǻC 0p+΀Fx@ژ'2~&4L] AeL&ʆ J1ltC{zͅiZ!t`Y^q82"w4+/?ACۥJ63@I1Ay  8>9/ 7[gFMn~dt=iA!׮ $4.rW@ޓ+&M[r(1-1ɯ;ǻ Q QåPOwP^WNB;q6܄,7Jx5ecQkdA/2蟙L#jse=#r~h!3W pە˭'BCo V5~W|p%˵to}-_ا-t0.Ճ{ȴ#ޥ@ǫG^=c(d+X/\_^HޚОM6Zɝ P3=}.[ Na孠uvG򢶣&o};ֈ+|:-k<$^aUvڼWګ׼zܩ+bc} ylCdG'ۇyL3:nGqs*{ݷ~^Ýc0S筼cEQSg{z6Pw,x>vFѠI6˾S ( ?{wbw&}?ewIENDB`python-mkdocs-1.5.3/docs/img/multipage.png0000644000175000017500000005572614502137725020425 0ustar carstencarstenPNG  IHDR ^[IDATxk|Uϻy9oys9?gFg35"#2*x ^0[@GqPo7L *q+B @!BI'!{wu' UtCœʪUjR|kU5`08d?C?\0(LJYɤLjFB5+k욺FPʢuoBLjI˒J.+68'PYAY*,gs)k JY˃:(FNT3.kvK^OIyWQ5T UCP5T UCPj7 <F#lpr ^{6L1w"kmdU9sf߾})S(ow򮵑ʕ^jjj ťP:qwW )``觴)AjrK1L)>  * P@(<wGcSړR0 `0Xҳg67_`L3J!?r?FKF[2Z|#_0PH `01NkjNP:D0JSǽTnZ^>>9 VȐ-Wf)P6/L~ȫ5jDP8a0 `S(F>A3NK@╄ _$-U,h m! K -@he@@eTq©S8a0 `SNgL3U eDz1,K [;z TBO5VՈN`0 `o=Q&shhZp"1F@sOf/y6>ur&4 -Ң~6CdV6)痷PJVwܷ~G/O55U>_=͎+'E:rY`0 aҷ~p|g_'_nj9ȟs ,U%ȳP(۷ )FY1İ Ecuuu{g;VpE5U3Zo]w~… |;s.O>X P ڟs,m / ֊ԗΙ .`Wŏٲ?gRuVuxΌ(QFضtT֜vGݱ1g Qr8k{Fnl7hQYpzR `ǎ94sѼkpB]ş#?m&Ď3((_r, F6` 1X1T?"mʢC ?# kw4\)4o;}هz(%%Ox 4O) ?XS$tNzir'P ~Ϝp;f/-~k]~NqOWxH8󨈟obƌzmGqqn3l~^5n#Ux k--*v:JC[)QVwE_w=a) `0Me;v7mҌfGw=hG )}?۞{e˖IcE b%D3iF^筷̛7_ҿk&(+RI>Q)X.Y~J2دk-3gΟo:L aмu\=#ǎ'Tcǎ'`<+_;iDeRKK]/L2Z4H][glOXAx!==8-˷ C];f/'y*DPW7h{ ePڸ1ШlS~/R `(| NS5- Q94SCAk%*oFc ?Miްg Ked|Ewhqc&{-hgZ[[445*T$HOP:}}}~JF7$ͫJ !%>}:ܹs0΅mh5G!f:V4IhNJ?]h<^Nm'&az𿽁sB5_O220 `S*++7oG*gui}GMRrU5i a M-k0 #"gPLrIIqO?4qV1 8aժU=A+2y0﯏ _a 秝NlQ'ZJM<~4G=Q0A u+V 3XkVQUYo߸q+cͮ6^Kʶ56⊯,`0 F7wߍ}w}K 49VxԝGf&jSmmԫMH+)' b+W.ZA oqŔ9DIEEjhAjN4_H-zPo}K+x"=I%)%z ԧq!4BCwNq7vʠwWG3JgXS֚ba,ń*"zĸ2?֧;>بؖHjl*lĴ%Md) `06j)*ǘow)℺4v jxLq/1ц1?J#srr}J:F u+~a)Sxx??L%Q60¨%9'~D{+Vx[*ԣ)n4H|bM V/o兯a҉rBP:H`ΎV  6{ ePSH|j4`0j---|HGF}>B 4pW᱌cG4`psxgǭeO>^~ez嗋`ezUL[n fo!Efb ,'S mzjړgykjjR<,Z"b;ڱ#x@l6Q:-'[!c 1vgtG$Q84D.w },k) `0ؔ7 ?rB 4?##:-bx:jxL- uƞ3jR$+~Q? Xg-Zdwh٬;D4Da}U qR,F;n*'|oD4~N`;.VG7_mD3?Y 5 Y+ c`0 C7JiGW\h۶Q1H j4&8j䯆3N`k4*H>c̱{LIlߨQ^`zjOGi%[;VIgS,YORsIx3ڮQ8>'('JqrBe_.A׊{Q=lz4P|A:S`0ܨ ̇nҾH2JI42!Z)"XᱶM@qkc;3Kr2stIADO#e6mҝ2SY)eW Ir9KMJEPˈ-;-PLOíDi5i[,s͊LJ;zꩧhuo3SV%;;ZИw3Q)åԜ?ja؜`_K u3[|eOK;4_S+x}-g7 CuϥymSM(hU ch1shzhB/ſ`0fChuё#ՙQQJpn߶GbcVȟ48aO`?C@OA*R;pF5Gy uN]L#+La/ǡ$/t_[S9s} ^D):7|fԪ)%:"z@՟ ~xp('fIZk?l 6!Z%(+ԅ3缤2VR8Зڞ*-;rka#Y-_7X&`0lj5w S y>(++^"?Q9"ը1q1`>JO=A-l!92t84ɓi^ u@ LNuP9jqJ]i&< 5p477f gG.QnXA  4JIIF$S_VM.=yR?V{֭|h5`0 ~FOvMv=J)[nX,FH(RӓwDZv9JOa 7_vϲyly )T^ӡ.rh VK֡^VC^AʗKpRJb0+gE/%rJ;0j>JG)hDTN}&l8`0 6UWݷo}!--wR7J2>>@: g@X1Ӈoy3N.Hvl6Mn[ȌKߴHG,D#~srcQTN eULJa0 `?p.e'NV" )w̖-[HQ98㰟 d!%Hj)5Rr(sj v/;gW} F_C CCC b-<8a0 `a|⤆.4ϠHӇiVKK 6Ry _(Ld9kJWsI!jF!bqT`0 `rEW fP7$!lB,EdFX6Rh/v6- Z~`0 KQtJ(R>J8*X߭4GrJ lV)*9Ҽ<+*A(jU  MҬR\J1V_UwEF`0 "py6Ljxt~ hXVy,yHqi׶r,kRE>5 [4 R!:c$Nj;}ך0 `0XRAdǍM3h8YJ7|2R<#ϳ%f9ݬfW ߬H5|ͦ)rjjj#eK&4MW劘-/eY-j~$ueyF[3oAP5T UCP5T UCP5TmU BBp}~p&<<<<<<<qR;|bMxxxxxxx)GK쏖 'hOAFGJ>MNĄ &L0aSTH,&'/X?m8G~ XTN?\lO6 ?(0dNWdWlO6 ?}<*?TdO6 ?}<> 'hOA'ևO6 ?}<^Oӆp(1a„ &L$kY'kÔip%&L0a„ 96i 8S 7us^9b>WI/{}p ⾑8>PߖLONI>N@oh8a=b,2g>u?YC n.%.ӆnR᧷)ݓ/$7(*s×.iE,)ЙG zY.1TH\]&Zt4H-4rj>28pw×oOT:ߧGm7?'v^w;G_,882&i ]tnr$L"sj]φ2!VzuyCs'݇uu/-g}uBryM{@ӳbyX{`('ܝ/mg0p|Z>,,-t . \q #˱sNWLԏ=ᜰ@ʗpNOG ^41m ]Em ܀14<.~r(]NAų]׳^gE֝O}[Gbחcc\gǾ_.%t}GgRD>}}T?Nb155|mqZ΋[w˦qqIm=Y։5<g /otx[|F-}2Kyϣ6`ew㡃"jwt߸՘6ߙמvpδׁ:{sxxxxl,p[/-ϻxWJNjYahxjVYvw߹ӴIv8pN8H>*$wuo1Nؾ*djY&=vwOsWen F/kzZ/=o5ҜpϖVFNqq9Ӗw2j3;VecCou4&ٜ6әStYtJwaoQu&( ;+q{& =J/̫v}k2{79Eg'gx~ GRkqh꽗{2BBTkY?{ld#mҼ>'ʤl1@a?kHS*T&sc|~Ox'UF)ƧF o~:A8 aϔizmZ~8apW.oHg3ÞٟO&t:}P{bu6Oy\!c {+JΫnH{ӟhʰG|*s)p9txxxx}`o\;Xbߴ6|R'ݭtnrwG(}<[tmփ8{1|Vn==4k9wL& tk٪Pw߼s.Iom&_gaϙ{<5B\sH-&q‡EQ ㄣ6}I M'm:'xO)Ks]T*9'<ʖ:9'P9aqԈk|>+p'ℋ '\&K #9C^>9=}Ii8Z!mkBJ>Dt7xc8M-a ;^ya)|\2Np9쀶*7ϳ򁂭͎EDŽ{ZM9(R^&]cl>\so9l{?!NS)wvgOޞpWJ|jowjci3ي%>J͓ʱo8a_Wgm -tNrR}VM)4vL#| $N8iSʷoBԸAc ~Gr'YgV6P9 8~G<kG޷){;8J}'8EQkv۟wr8cwxK/wH鏰V)h){sxxxx[۽Jmwڞ=.K-E7#HoP#}뗀AJf {WݿLP'SlᏮu<<`|߹󐯏qj̋!Thoߜ/sխ?'|ZlRZ <|mGd{϶wn;MC)?ZfeZ RzcRΎY%˜jίh3Z6twu ]( zyw_>zIhtgzjSݥtә7x{}+_{f|B ɶj/92I]CM< <9>ZeC,VME^s ?5sbA񯔒8\ei WJ? j{ 9O9SM]~P@V4F|@xᓳ愴swWzCէ3Z7×rڷ{q$Mjl԰fs\yFKy`ϧ]ϔ6Wh_Oa5 nv- P+9>Y9ᯫi|B0ZQ==e>6p[Oy?mwc(fMb{~t(a'h2S*=XfuᯜK+u<]-ȕ9Atef~sq ƮJ,r9bK{'TQ~{OW$9se&iݻY{TSGN.knpPE;Ϩ[wy6(87Rc^r[;OLwLVw#H]-,ڤr jO6_(sBCosi|ۖoJaإ{bl(fvNۿ'o'.NcmMpNXSrRKg l |ދ:68ߋ:Z?ESÛLŃ}WD㡚Swyv ?Afy|/;x`~s(>>,w~bsxxxxwzY |5rv*t]#Al5ݏ햗ޖwXދ}jVA+MF X9 '%NږӺ.mJ e7BGGy{ "K9}U{ [J;.>KoYʒSϡyhҫN;r6)iպTG /7sNuOAKEy\|IUoOF66⨠&Y庮GƗyz!O'Wsm{4>׉ۉ=[ !NR}IRfg1N9at,4{Β8!rv^㑎~98!o7.x#Ѡ}cjt3N*'Hg'4z?v3Nx~~^?o Oܤ :M?o ^OޠIhj~O~iY9u>kuDM_}zkz뭟5r{;5yv޲Wк]Nk}uZ׼5_Bwt蚳_F_h;)]taۛnkD[|aw{t Kw1M_RPݸ"?Vή[k%|taeCx~$v׎\˰bޤOJ8J3JM(ER)}[Ŏ3C2$vʉM)04ݲSu ;HRv¥k_*Koe1өSUJKv*u7RfOG㔰s >Nr_kU[v5o8FfXcqgao Wp­Y_St P?m8G>+zZj΄q6ұ:'XomO6 ?}~p&<<<<<<<q ӆp4᧠~i 8S @?m8G~ x8v5'hO5' 'hOA']X?m8G~ 8vZ 'hOA'N'ONф>N;-s>~p&<<<<<<<p?v 'hOA'X~N+'ONф>NYg_ 'hOA'|m2|Mxxxxxxx)ib„ &L0a„)'y<rNclf6㷩 2-5ԀPj@ 5~PjP`O='PhA2׵joSiY/5ԀPj@ QC ) B}Q*+{f6;~kQʴԀPj@ 5A!SA$p*[|-DPj@ Pj@ 1uP{!N X` F ߦZԺ2-5ԀPj@ 5~8jhcnpnrQo_KW/5ԀPj@ T#X<@ qy ߦZ*5A 5ԀPj@ 1 ?'hiԀPj@ 5ԀO pT5ԀPj@ 5 8SԀPj@ 5'LPj@ 5ԀP3j@ 5ԀPj@ pT5ԀPj@ 5 8SԀPj@ 5'LPj@ 5ԀPc5ԀPj@ 58j@ 5ԀPj@ p ԀPj@ 5Ԁ5ԀPj@ 5 86Pj@ 5ԀPjplԀPj@ 5'pNPj@ 5ԀPc-ԀPj@ 5ԀnO 5ԀPj@ 5 Pj@ 5ԀPN 5ԀPj@ 5 Pj@ 5ԀPjpB 5ԀPj@ N 5ԀPj@ 5t儁mXza7:|W1\ӡԀPj@ p (nlNl4:z5ԀPj('Г] (bEMљF盝bC 5Ԁ) f~FotѹPj@ 58ar终\a7謣sW1\ӡԀPj@ p v:pPj@ 58pMPj@ 5  k:ԀPj@ 5 08t5ԀPj`0pPj@ 5Ը!K` 8DLMPj@ 5ͨ`63ۊ<Pj@ 5ОN C 5Ԁp N5j@ 5Ԁ k:ԀPj@ 5 08t5ԀPj`0pPj@ 5'`ӖԅwjX^FJ1|-1-9rxņw櫥/;`5w85Ԁp pC9!:(e-ppPj@ 58nF ԀPj@ pP-yaWIgئfJ6eɼ SIͪ%heYc_[^J)K[uVӊbh;(νζVpPj@ pB8I9," d+_.5p'{kqr#ۖFѴ. :8s8 0֜'Xu)ZHHotN^{!kMʃYֱps`ȑˊz&DC;1=%J^ܐNrlKbTw85ԀzWh2=?su*'Q9A^Q +M'8  pNt^60˯WQ9Np֦iB+v5gc+_uYˢ)a$pB.}5:eA:xl˲~5Ԁ7''a׍P)wrN ɾ0J#G~G%QJ!XpsqBguKq4|@<ʳT6?bfV%\~岔P>1Zj7/(rԮKKTѸkiXx%a16֖|~q.:bW|s B;sRߣGܮ헦z#:D̂?/mhll8VkcN/~so[ \{>\@KAoVY|?K=j@ 5X֞ W#9F9Km4@P(S q4C J!)Xš#Z"D@0uW{a _77Y4/1r[K>ac'(iUF%ӠRL]O;√gmjh׵ExPj@ ~G7&; s5b N`-%𫜠l1ߋ*׵tnxNBW(F„88, 9$NV &EQΆ4 ^U19a{F=O 'yCŸkF,nվjw8ԀPpc8 BJFmkB'!rhv놳 rBJV염N'D@Kz4m%0lK 0bpPj@ 5 8aN09by'884di/\ޑfR8A}{jWy'$E}?i:c {5'`p{ ڵĆ|$=fNX潰73#*FnhP5KEԮ 4K eԀPNY+ aa9! R ?yAuè-' (C q:pPj@ p8N NZL' 0Խ}>FO~蜠% GCpPj@ p8N ePrq{!kITRz;ԀPj@ pV8!"0!9-88!*a4P^U:5 C*3);pPj@ N'`S@+aš13fNЮ)jөǬyP q*XpPj@ N'`SA3 FDq}/ #jEm{QVQ.4-ԀPN8'B3 Q^''D~jZx>vN42)5ʘA%pPj@ N'`講]>*Gƫqs#778&UHCDn88^ 88A34DFYh?'Nj@ 5 lsBxߙ= )&e8a<6L ۖq%ihWжdpPj@ N'`7'D~#-&LXz R~0;l{e諽^#ƈ LƬ5?F&Nj@ 5 rBB K '$7z7q=SCSj b!zQݥ/P#j̐&~6피GkㄧRWal(H] O ^싯nH==d ijUJU*x] omS/!m)}^4DHA=DfĔ| 12܏/^x`0 vc 0nO5ԀPj\ 8W15ԀPj 0pbC 5Ԁi .N}^>;3߶{iʇ%eֹ'|n\ŠԀPj@ NNXg >/:W 0pPj@ 5r Y/)Kla9NpMPj@ 5\lk!QnA^e 훌Pze D,#EޢsS v2c*ۚ\{ÃpPj@ 58abv]Wh]&|*%)Y ϱw_z5@JWxpt6;mq@[ˬIej!)5k(W|[X^<^WB0N^^oWCNU j@ 5Ԁqٲї m{KLP3P~I 1:['u ꄙ%\eXm]8B*dDq:fJ\:c 6kѷPsO^۟ A 5ԀP0ANe B)c}Mȓ",6ɭzJ rrB#s 1@\N8Xjb /5f: ]~ t4ۥKɕtO@NU j@ 5Ԁ O,2>ܶMGu 'l 1'xGї^Ɔ.>6xX{ [FpBA'T~u|M|j/PԀPj@ 5 #{Ѧ;~GׇxGPSh ;Ruvb@pYrF;\#"'5ԀPj@ p 'lifO(U@ir%jl0QIqnO\ѸdI ~ f?Ϋ|'mI8frW ^|;+,'5ԀPj@ p-xR/1ӢB3sN(> K.42\Ym j0:V:5E^TDN5j@ 5Ԁ ԀPj@ 5 8W15ԀPj 0pbPj@ 5Ը99' qK5ԀPj@Q '`hO5ԀPjL='*5ԀPj@ p8NU t5ԀPN C 5Ԁp N5j@ 5ԀljsؖtQ-Nkr3V/fhkԔ2nbmE*h5]<:tU.6sfCu/P늾x&eh ߖK_sOMEVqPj@ p 68aqZyMxՋͬ7G?9wkG=*2 k{'.fVbq$[^[jъB8{5'`1sŠL-\hUIo쵦'~M'~5Ԁp p8\#Z3,9/dX!s_4M/-xDjMNMk f~ QD^m9鋡\lޱtZ RVenQ**WVå/7xUjI]GxijaƆvJXEB]d/(e ,)zAyxTڢkUnHYP=m>MN֝+K3\~GmڋN+icIJ#WZp9T8{T{!!):31;mGŸ0N.ؓmv1{,ff[g:ӎ '͝hu*f_95nr&w m6ۖuns}`8pё2$9gi k9֙N5]5g~j@ N' ׇ\b?)VlқLͺl'P,BԞis+*4rˊE) ϴP{.^4Domc)t(@ŭΤd5 6DWs&zIjPzJڌf*67@pN`#.ʩ%/fU[c.Y*&SoJBUv|KEDZm3%TZsԊm:VB^f恌jm e lf|z;bd ~!뎱hcVdtζ}c*0`6:f oy .o[ sN S@E֔ <ݝSz#,|dhmQ_1 3Kf %/[56+fiFQpz͞g@ 5 8zqBSjqD;K)urNc((.Ny(oEV=YTK^̌gԍ36YUs\MzR{Sg'~`5;-)j6Z wrs+'ɛ"/2(pL`wզcL4㘣;P䖒}!ζ; q»W/hOq=*q͔~)~>C~]+}ei^mo  xt@=:9a1/ڞ ~Ԁp p8aiZ^6kM8}9A(_ ־5ƞ1b4Nd~Gf5?%)HHn^pu0 ZоU)jr#"G#D?Pj@ p8N\N`%=$_da«SXy59Glssj۪}G_ [$~NmOqzu1uwYG\[EcWϢiU8f>\4J{ _LGظ %͂e:S{Bxq/8fkҗ.F 6*a@C lQX{f1 BdC '. 'ptPX, Ԍ@#{]l0ه4zls:bcx8怄(rw8=q ;=fd`i0 c[8S6;FᜠQ-mQbEFy {D?Pj@ pTѻ:GΫL^aF;>n8`hs׸5U֤*{c\S@?8!5Mw.^^Tzh^.i˥7J1bZbCfU᪔1sv ? 'lIc7V1&`A>dhb*&{Q[˯?MaEmCdpmN@!JԾU.61Vm)^N 鰏Z |v߻eH<-Ot{QE]R%,ޒD# r 8s7NFNEpPj@ p”y'<&/$̺02݂{Kc۵҅DpThM1&\ŠM;ku|¹5ƴ_"pBr9@.,f'q&/ejaqA_{Enzζ:˱>5Ը'ss9D5~ݳ :qD#wKed/\+Ku>ǻDk8A+ND+}- 9j}d-* ty {@⁍pR?c[Sy:8=O;Ь5pSfK  5=ǚDA ŀJ9pNٖ6t*l.ϒJT_u I}gl)gTS , C 5ԀP0qH7pN{'B^R%m' ae(q'X=^V;{w0\;~u'(e`̱DruJQ%crpMPj@ 58aLOzj}4:<m?~K_ WvyR ':BodMbE5zDkOt'+mf$F43;Q#*@ U):N'5ԀPj@ pu67Y*< 4`gNGBhD\VlaΙP{ R3JHX[蜐rܾN'5ԀPj@ puh[H(]+5Q:HRH]DꦥEˍ9O5p.6J@([wD^ N'5ԀPj@ pz._l0WS@9,s㘓8:.7qSW5|i[R-1j[hSAysa8|v&i0i.TFr7xjwN5j@ 5Ԁ rgc 4Dj_Xƣ\|tAzѐXPŊJ֋Q'&BJ!Jջu%r+;F2/ԗɟJW55x6Iط\9' KݯpMPj@ 58a2LhpcEkRa\ŠԀPj@ Nz_Ϊ~0iѳZH*a[pMPj@ 58avo 75Ao߉pbPj@ 5'LUNp5j@ 5'`0pPj@ 58pMPj@ 58'5ԀPj@ p N5j@ 5Ԁ k:ԀPj@ 5n4'aX9!36Q)SӠԀPj@ q3 x5ԀPj@ '`\ŠԀPj@ N' 5ԀPjbr~S(XyIENDB`python-mkdocs-1.5.3/docs/img/site-name.png0000644000175000017500000002543514502137725020312 0ustar carstencarstenPNG  IHDRz *IDATxyTTG3tΜ;3LhADAEqlHp F8oLb"QT\YDD%dvb+MCw,|Omm-_Bϭ穧꺷^Q uQ  q]'YTvޮ]uvP.q(1KJus|ޘQ&,F1U.A+W'ݤlHEEarbg%Nhu9Vq>Eq睹wZ>;ZV.H,^0%U\ysQQj霝묭uQ.'?G$: '7 8;\Tp\UߝgG(Q쏪#?  YE^:7?XkQjڵ N?'BP1JIdY'T'O^xpzg%si6wkfzЇ `8*iЎ A;xPVI==|_]4yIL$Di'Ѕxag»NN *;)9;oeWGwfTkIv6dG,`}{M*?X{*[{g @E=]&ƤZ>s[Uvz֎ZAU3! $Y 0 M tW$>iqL=ff[+C_j.]9x@sgN\v#T3s;! d-d>eA ̰DN,a0-Vp(xEY[l Ac\ I@m[+m. y.T9ޜ H( l%q$8)=p\=7 ޶xA'f{$o=pR9}k哖]-pʡӣ&d/(B maW#J팸dò"PC67lஞX$-Uӡ!Vo.6c)>OQBҴa_ ^r!hم]Dr Nl*& -G6KW\W+LӁm,nb5%O$״-QVHTĖ᛫mRrC œW|pS| Я9k6o* \1qCj.Z=F]eR;nt.w+&3< M8oL8dlߛ[·DJ\&DMeSItSy|#7;}ìE>뫬2:ܐs7M^}}©K6M\sXy0d9-OBV_' O#8i7\Vy|eƪUb*/dɫn6Kؚ_^k榒b %~P 2<"0ʼ=/9e]wN=ĔRsz!hy5 Ӌ&qSÅf P9)+nBו)]]2C;lݺԩS| dХs_Yt28CV _y!Gbfeۇ[2i54Ya.0l+t!-]q_ tb7CsϹ_)1cƸ~D@Bo,a[7&!zCQHߘ\;譊h~ɸ>&7!7/[9Ŋf{c|`a[_\ XM>\@<::2dN!}z1ӉKH!  g~|4X"S⥆ 1) {ˮwrzu$"ז."?y+z yyy@~;,vttO=ztyy)SBUSW%eJWgZ3?@N>[Q׈zVauH/PZ=/*Y:7A!#2ГpOaf-p Y]])^bojbdג,N`@_[qmiȚIBV,Z~YWkplQ^Mj~T!Vv_j}Mp Co8T;2 @uD#Yc5EZhKwjBz 2fu Y#|؊~whZF`!r14RYA'ZVkhv8%J35 Oנd q-הya&$.* i~s?3l ,Ё#UU_|'?b+K!p7'&p<9kEK#|w) *v" K!~"~1ƺJ#f bDJF-a ]g(顗2qhCt-' &$'%<4Rǯ\U;PzpZ}(fp~?5RA7Cp5^X7_tt8G}?vA<uo7|xecMYRl>r2rkh_oHL"q5Iz]Ъ`WA&.\}5cNA_m5h'@m "mvGh]̺u|OQZX@. њ~Wa\6T~?;CGB d9?[,lv;v7CXzr!; ^"QmwQc2'OFG/Ih(0'7'_GW<^d\E0OrAqUqE!йq󵝎N]"`%󟿿=\–g~Kgz;;*0+Lp@ZÔ(S`./߶9Q/jZЯH w].tr8lhcУ4"3[v/.~hvGO+ޱ.x¬`. hh[lEsC-[<-_N倥`J^΢׎bf1(tJjNU UyWOD(9aIP!(.%zQ(.-n߾:8<Qz^K7v\ s)`ɷKo.1yCFx1Ĵ˲qf, Z p/aV"1trWLaGs|aeK3?1-]mWޢ?{qI /rC뒚4tq{*-Vh%G ]W7C#]"ZHZ_fhm{W9W0l좬׶|sP~롛[^ӎ~]xc 7&,_l:IN`K ;Χ.e$^ ģ-+:׎ 1 Ҧ8z/>5g~DG3\|>p;qB |tv4@D)Asr NNtJFWa3F_g Ke7W?@xd=N*::CtI ێZ:{"v(x :Uܴp&{D2=@od&pe{_^rQ}.F C:N|fG/FV w_y78 ط^w}7מ:}fk=mgoҬKwLKˤ=+%ʳkC9K$+C_{~4#k0i C *: Vy$;څ[ꪃiS1E;av>!n:I"IY\CJL+B[-ل +%*8wS6fL]3рJ5E{uw a&yh^j WeEB=#lEgQbVmKN.%ݕ& V͊6$%npjJmpJH%1I1|QqvXׄVb"VhFfC󳇘 fNglN o0i8qڝB8;YY$MҮӡy xywV+ }2mmn;[#}b---LBZjBD4IWZoȻJ`C"ւV+~Z,j-dXm2bUNROVںVY+sdvX-Țշo܂yA)xY0m9L1p.vxxnÍy9(SAoa)&$eL-xk5%yb]zƘ鈅5O;Z"h`C頠@F)bP8cdf*l$Y6̢̒ͬ%0'flz`f7s%zKp!H2=i}΁v=gy˺2O+& /,A@$f4ibd2IDofZ2#61k$?m< jܵkׂ f͚2!!z_jc:EOO 2Oa&QnI,2͛qeLV 4itQ)%R{#(#3Q'qڵQ(fJZfرcCBB"""z&Mz7nڤ!/9wO]<~_wU 1~#sn}xN&pM%h<9ɇk Qo#|bsf aaa&i9({`Q [ZZ;FӬ3Yl>~=QkGFߛ k̒yN>lZSҡ*wꇱ!0L;_PԖ&#Dؐ:bsjU(\%YpG=L'' CU_93J VeEl꟬ri,n;J@g0Dȣ3|2H*: QMUIqq gv Ez9hmoEshl úuwq8t( H-nqjiܻws}C so |744~i8W4e˖YAs]jG(ȑdHo ?ha=Xbs}+\ϷZhd4*՟>}pv~ S2 sqjrh{<[9)B I ,%%m[8xv$H?LBNQWQQ:V[Ajd'Cp2sŋ˗/G3=U+-tСx)O?nj76*ZAސϤkQHvok:KR 3u{zd'%֚.gmI X/ <͛7KΝ;iW/HèQ/U2F T())={6 鬬K.̿sn]]]UUo.WVTBqi=#GmzKE577hip pα9"7'%BVs`3X (O/?bȍpw:xbWh._U_}~t…8(uoIKfFV? =Yx2X!$.|Sx9sL>k3Ve=&w1 arվcpp '-nav9p=݋D(`VǽF$B"r Cz͓hS_6 pp\oi`EC3 p?s&!M; `O]4O3jT-- 2(euw܁NAqf/$u L@<ׂ wHIHgDpf ,/+==x/\n^$i`(̌LthIl3 =3q%_}6Z{F(*ѭH?/o{BMcs!_297\t/ Y8<`=rܓ5ݻɩܧ"Lpoi3Wٝ'Xm FFF gN$?<~SWp+yH#vï!}c=^yei@ |2 s?inYAߤoBAgI/ȸụ 5]SD̙\D-jʉb@ I5`7 ٳM+.tFr}{mE3dy04 YSܮO$* )n0w>A*OGq[xVQ3'=`krt.:ڂ\X7^޽Hԏ7JݦMj9 | _INPw* Zs,JJ]C_:grк Yre5I׸,!8߲6uU9$7*A| =##BRM:'p̣p. 9*4QFMB-яQHBjVw)FWu_#1'b M ,W`=e i(ٿ?Oz~h8z~<h{]Y3>Z_Z!(bp.@^Ok+5uJ9~E{RIK%u Bm JGSoZچNhJޗuuprܹ>jX:w-&ҁCHop]w e4j5`k}Zu6tYiZs?Uk" }.sѣGnE ,ȺA]ڕ&ih^p3r^s.f_RD"#s9:YrH8|">vy,e9L$^7#[+KYODOM;,DЇӆRDRfie)a"S4S0,mY,e9L$>$S3V&CV;)S#KYgjd)a"A ,e9L$~ ,e9L$>0CxF#KYpZpF3PDwEnm>oLc4}6>R?C? kOb{ -A?=#!*/R "7NBT^Kug" 2ԡ_nlTIiq՘sďf+>E+J.Ptis*m:MOeZRbl/dñBϴj\ ~Ajp;GC1"_8~jRC4*?}+]'y0_4 u.#?Z}|V2ȥeiĐ (i R6UPiƼ?}ҙ^Ba- frJI'Uj }:.Ii<Ԋ͚&B?iu'0Rpk;R-xFk|?o;XҦ+1'3Sľͭ_1ٲ:] ^A;_ƥݍ3e0{FCTR3dNa=r lk4L=٬sXb-s?hoo9tҔյs6G ZlC/ гqbrJO(!3pyba߾~`S̾;@~ i#ʴ!?|g#|xCV@=,DQ%dd)a")gd) In,e9L$^)G9ӑ?'+e)a"18%KYÍ}D)KY??8/KY9(G9HWP,e9L$5BF&A?r9qD}CC`hnnMMMF]Я;7j---}J?~TKB@C5d4[qh[h4-C=jM,q؛7~AAbiスNsЯ{O!V`O KЯEo\ and add all your general-purpose plugins, themes and extensions there, so that they can be looked up through `mkdocs get-deps`. This was renamed from "best-of-mkdocs" and received significant updates. In addition to `pip` installation commands, the page now shows the config boilerplate needed to add a plugin. ### Expanded validation of links #### Validated links in Markdown > As you may know, within Markdown, MkDocs really only recognizes **relative** links that lead to another physical `*.md` document (or media file). This is a good convention to follow because then the source pages are also freely browsable without MkDocs, for example on GitHub. MkDocs knows that in the output it should turn those `*.md` links into `*.html` as appropriate, and it would also always tell you if such a link doesn't actually lead to an existing file. However, the checks for links were really loose and had many concessions. For example, links that started with `/` ("absolute") and links that *ended* with `/` were left as is and no warning was shown, which allowed such very fragile links to sneak into site sources: links that happen to work right now but get no validation and links that confusingly need an extra level of `..` with `use_directory_urls` enabled. Now, in addition to validating relative links, MkDocs will print `INFO` messages for unrecognized types of links (including absolute links). They look like this: ```text INFO - Doc file 'example.md' contains an absolute link '/foo/bar/', it was left as is. Did you mean 'foo/bar.md'? ``` If you don't want any changes, not even the `INFO` messages, and wish to revert to the silence from MkDocs 1.4, add the following configs to `mkdocs.yml` (**not** recommended): ```yaml validation: absolute_links: ignore unrecognized_links: ignore ``` If, on the opposite end, you want these to print `WARNING` messages and cause `mkdocs build --strict` to fail, you are recommended to configure these to `warn` instead. See [**documentation**](../user-guide/configuration.md#validation) for actual recommended settings and more details. Context: #3283 #### Validated links in the nav Links to documents in the [`nav` configuration](../user-guide/configuration.md#nav) now also have configurable validation, though with no changes to the defaults. You are welcomed to turn on validation for files that were forgotten and excluded from the nav. Example: ```yaml validation: nav: omitted_files: warn absolute_links: warn ``` This can make the following message appear with the `WARNING` level (as opposed to `INFO` as the only option previously), thus being caught by `mkdocs --strict`: ```text INFO - The following pages exist in the docs directory, but are not included in the "nav" configuration: ... ``` See [**documentation**](../user-guide/configuration.md#validation). Context: #3283, #1755 #### Mark docs as intentionally "not in nav" There is a new config `not_in_nav`. With it, you can mark particular patterns of files as exempt from the above `omitted_files` warning type; no messages will be printed for them anymore. (As a corollary, setting this config to `*` is the same as ignoring `omitted_files` altogether.) This is useful if you generally like these warnings about files that were forgotten from the nav, but still have some pages that you knowingly excluded from the nav and just want to build and copy them. The `not_in_nav` config is a set of gitignore-like patterns. See the next section for an explanation of another such config. See [**documentation**](../user-guide/configuration.md#not_in_nav). Context: #3224, #1888 ### Excluded doc files There is a new config `exclude_docs` that tells MkDocs to ignore certain files under `docs_dir` and *not* copy them to the built `site` as part of the build. Historically MkDocs would always ignore file names starting with a dot, and that's all. Now this is all configurable: you can un-ignore these and/or ignore more patterns of files. The `exclude_docs` config follows the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format) and is specified as a multiline YAML string. For example: ```yaml exclude_docs: | *.py # Excludes e.g. docs/hooks/foo.py /drafts # Excludes e.g. docs/drafts/hello.md /requirements.txt # Excludes docs/requirements.txt ``` Validation of links (described above) is also affected by `exclude_docs`. During `mkdocs serve` the messages explain the interaction, whereas during `mkdocs build` excluded files are as good as nonexistent. As an additional related change, if you have a need to have both `README.md` and `index.md` files in a directory but publish only one of them, you can now use this feature to explicitly ignore one of them and avoid warnings. See [**documentation**](../user-guide/configuration.md#exclude_docs). Context: #3224 #### Drafts The `exclude_docs` config has another behavior: all excluded Markdown pages will still be previewable in `mkdocs serve` only, just with a "DRAFT" marker on top. Then they will of course be excluded from `mkdocs build` or `gh-deploy`. If you don't want `mkdocs serve` to have any special behaviors and instead want it to perform completely normal builds, use the new flag `mkdocs serve --clean`. See [**documentation**](../user-guide/configuration.md#exclude_docs). Context: #3224 ### `mkdocs serve` no longer exits after build errors If there was an error (from the config or a plugin) during a site re-build, `mkdocs serve` used to exit after printing a stack trace. Now it will simply freeze the server until the author edits the files to fix the problem, and then will keep reloading. But errors on the *first* build still cause `mkdocs serve` to exit, as before. Context: #3255 ### Page titles will be deduced from any style of heading MkDocs always had the ability to infer the title of a page (if it's not specified in the `nav`) based on the first line of the document, if it had a `

` heading that had to written starting with the exact character `#`. Now any style of Markdown heading is understood (#1886). Due to the previous simplistic parsing, it was also impossible to use `attr_list` attributes in that first heading (#3136). Now that is also fixed. ### Markdown extensions can use paths relative to the current document This is aimed at extensions such as `pymdownx.snippets` or `markdown_include.include`: you can now specify their include paths to be relative to the currently rendered Markdown document, or relative to the `docs_dir`. Any other extension can of course also make use of the new `!relative` YAML tag. ```yaml markdown_extensions: - pymdownx.snippets: base_path: !relative ``` See [**documentation**](../user-guide/configuration.md#paths-relative-to-the-current-file-or-site). Context: #2154, #3258 ### ` {% endblock %} ``` Note that the [base_url] template variable was used to ensure that the link is always relative to the current page. Now the generated pages will include links to the template provided libraries as well as the library included in the `custom_dir`. The same would be required for any additional CSS files included in the `custom_dir`. [custom theme]: ../dev-guide/themes.md [extra_css]: ./configuration.md#extra_css [extra_javascript]: ./configuration.md#extra_javascript [documentation directory]: ./configuration.md#docs_dir [custom_dir]: ./configuration.md#custom_dir [name]: ./configuration.md#name [mkdocs]: ./choosing-your-theme.md#mkdocs [browse source]: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/themes/mkdocs [Template Variables]: ../dev-guide/themes.md#template-variables [Jinja documentation]: https://jinja.palletsprojects.com/en/latest/templates/#template-inheritance [super block]: https://jinja.palletsprojects.com/en/latest/templates/#super-blocks [base_url]: ../dev-guide/themes.md#base_url python-mkdocs-1.5.3/docs/user-guide/README.md0000644000175000017500000000135414502137725020470 0ustar carstencarsten# User Guide Building Documentation with MkDocs --- The MkDocs Developer Guide provides documentation for users of MkDocs. See [Getting Started] for an introductory tutorial. You can jump directly to a page listed below, or use the *next* and *previous* buttons in the navigation bar at the top of the page to move through the documentation in order. - [Installation](installation.md) - [Writing Your Docs](writing-your-docs.md) - [Choosing Your Theme](choosing-your-theme.md) - [Customizing Your Theme](customizing-your-theme.md) - [Localizing Your Theme](localizing-your-theme.md) - [Configuration](configuration.md) - [Command Line Interface](cli.md) - [Deploying Your Docs](deploying-your-docs.md) [Getting Started]: ../getting-started.md python-mkdocs-1.5.3/docs/user-guide/configuration.md0000644000175000017500000011445614502137725022412 0ustar carstencarsten# Configuration Guide to all available configuration settings. --- ## Introduction Project settings are configured by default using a YAML configuration file in the project directory named `mkdocs.yml`. You can specify another path for it by using the `-f`/`--config-file` option (see `mkdocs build --help`). As a minimum, this configuration file must contain the `site_name`. All other settings are optional. ## Project information ### site_name This is a **required setting**, and should be a string that is used as the main title for the project documentation. For example: ```yaml site_name: Marshmallow Generator ``` When rendering the theme this setting will be passed as the `site_name` context variable. ### site_url Set the canonical URL of the site. This will add a `link` tag with the `canonical` URL to the `head` section of each HTML page. If the 'root' of the MkDocs site will be within a subdirectory of a domain, be sure to include that subdirectory in the setting (`https://example.com/foo/`). This setting is also used for `mkdocs serve`: the server will be mounted onto a path taken from the path component of the URL, e.g. `some/page.md` will be served from `http://127.0.0.1:8000/foo/some/page/` to mimic the expected remote layout. **default**: `null` ### repo_url When set, provides a link to your repository (GitHub, Bitbucket, GitLab, ...) on each page. ```yaml repo_url: https://github.com/example/repository/ ``` **default**: `null` ### repo_name When set, provides the name for the link to your repository on each page. **default**: `'GitHub'`, `'Bitbucket'` or `'GitLab'` if the `repo_url` matches those domains, otherwise the hostname from the `repo_url`. ### edit_uri The path from the base `repo_url` to the docs directory when directly viewing a page, accounting for specifics of the repository host (e.g. GitHub, Bitbucket, etc), the branch, and the docs directory itself. MkDocs concatenates `repo_url` and `edit_uri`, and appends the input path of the page. When set, and if your theme supports it, provides a link directly to the page in your source repository. This makes it easier to find and edit the source for the page. If `repo_url` is not set, this option is ignored. On some themes, setting this option may cause an edit link to be used in place of a repository link. Other themes may show both links. The `edit_uri` supports query ('?') and fragment ('#') characters. For repository hosts that use a query or a fragment to access the files, the `edit_uri` might be set as follows. (Note the `?` and `#` in the URI...) ```yaml # Query string example edit_uri: '?query=root/path/docs/' ``` ```yaml # Hash fragment example edit_uri: '#root/path/docs/' ``` For other repository hosts, simply specify the relative path to the docs directory. ```yaml # Query string example edit_uri: root/path/docs/ ``` For example, having this config: ```yaml repo_url: https://example.com/project/repo edit_uri: blob/main/docs/ ``` means that a page named 'foo/bar.md' will have its edit link lead to: `edit_uri` can actually be just an absolute URL, not necessarily relative to `repo_url`, so this can achieve the same result: ```yaml edit_uri: https://example.com/project/repo/blob/main/docs/ ``` For more flexibility, see [edit_uri_template](#edit_uri_template) below. > NOTE: > On a few known hosts (specifically GitHub, Bitbucket and GitLab), the > `edit_uri` is derived from the 'repo_url' and does not need to be set > manually. Simply defining a `repo_url` will automatically populate the > `edit_uri` configs setting. > > For example, for a GitHub- or GitLab-hosted repository, the `edit_uri` > would be automatically set as `edit/master/docs/` (Note the `edit` path > and `master` branch). > > For a Bitbucket-hosted repository, the equivalent `edit_uri` would be > automatically set as `src/default/docs/` (note the `src` path and `default` > branch). > > To use a different URI than the default (for example a different branch), > simply set the `edit_uri` to your desired string. If you do not want any > "edit URL link" displayed on your pages, then set `edit_uri` to an empty > string to disable the automatic setting. WARNING: On GitHub and GitLab, the default "edit" path (`edit/master/docs/`) opens the page in the online editor. This functionality requires that the user have and be logged in to a GitHub/GitLab account. Otherwise, the user will be redirected to a login/signup page. Alternatively, use the "blob" path (`blob/master/docs/`) to open a read-only view, which supports anonymous access. **default**: `edit/master/docs/` for GitHub and GitLab repos or `src/default/docs/` for a Bitbucket repo, if `repo_url` matches those domains, otherwise `null` ### edit_uri_template The more flexible variant of [edit_uri](#edit_uri). These two are equivalent: ```yaml edit_uri: 'blob/main/docs/' edit_uri_template: 'blob/main/docs/{path}' ``` (they are also mutually exclusive -- don't specify both). Starting from here, you can change the positioning or formatting of the path, in case the default behavior of appending the path isn't enough. The contents of `edit_uri_template` are normal [Python format strings](https://docs.python.org/3/library/string.html#formatstrings), with only these fields available: * `{path}`, e.g. `foo/bar.md` * `{path_noext}`, e.g. `foo/bar` And the conversion flag `!q` is available, to percent-encode the field: * `{path!q}`, e.g. `foo%2Fbar.md` >? NOTE: **Suggested useful configurations:** > > * GitHub Wiki: > (e.g. `https://github.com/project/repo/wiki/foo/bar/_edit`) > > ```yaml > repo_url: 'https://github.com/project/repo/wiki' > edit_uri_template: '{path_noext}/_edit' > ``` > > * BitBucket editor: > (e.g. `https://bitbucket.org/project/repo/src/master/docs/foo/bar.md?mode=edit`) > > ```yaml > repo_url: 'https://bitbucket.org/project/repo/' > edit_uri_template: 'src/master/docs/{path}?mode=edit' > ``` > > * GitLab Static Site Editor: > (e.g. `https://gitlab.com/project/repo/-/sse/master/docs%2Ffoo%2bar.md`) > > ```yaml > repo_url: 'https://gitlab.com/project/repo' > edit_uri_template: '-/sse/master/docs%2F{path!q}' > ``` > > * GitLab Web IDE: > (e.g. `https://gitlab.com/-/ide/project/repo/edit/master/-/docs/foo/bar.md`) > > ```yaml > edit_uri_template: 'https://gitlab.com/-/ide/project/repo/edit/master/-/docs/{path}' > ``` **default**: `null` ### site_description Set the site description. This will add a meta tag to the generated HTML header. **default**: `null` ### site_author Set the name of the author. This will add a meta tag to the generated HTML header. **default**: `null` ### copyright Set the copyright information to be included in the documentation by the theme. **default**: `null` ### remote_branch Set the remote branch to commit to when using `gh-deploy` to deploy to GitHub Pages. This option can be overridden by a command line option in `gh-deploy`. **default**: `gh-pages` ### remote_name Set the remote name to push to when using `gh-deploy` to deploy to GitHub Pages. This option can be overridden by a command line option in `gh-deploy`. **default**: `origin` ## Documentation layout ### nav This setting is used to determine the format and layout of the global navigation for the site. A minimal navigation configuration could look like this: ```yaml nav: - 'index.md' - 'about.md' ``` All paths in the navigation configuration must be relative to the [`docs_dir`](#docs_dir) configuration option. See the section on [configuring pages and navigation] for a more detailed breakdown, including how to create sub-sections. Navigation items may also include links to external sites. While titles are optional for internal links, they are required for external links. An external link may be a full URL or a relative URL. Any path which is not found in the files is assumed to be an external link. See the section about [Meta-Data] on how MkDocs determines the page title of a document. ```yaml nav: - Introduction: 'index.md' - 'about.md' - 'Issue Tracker': 'https://example.com/' ``` In the above example, the first two items point to local files while the third points to an external site. However, sometimes the MkDocs site is hosted in a subdirectory of a project's site and you may want to link to other parts of the same site without including the full domain. In that case, you may use an appropriate relative URL. ```yaml site_url: https://example.com/foo/ nav: - Home: '../' - 'User Guide': 'user-guide.md' - 'Bug Tracker': '/bugs/' ``` In the above example, two different styles of external links are used. First, note that the `site_url` indicates that the MkDocs site is hosted in the `/foo/` subdirectory of the domain. Therefore, the `Home` navigation item is a relative link that steps up one level to the server root and effectively points to `https://example.com/`. The `Bug Tracker` item uses an absolute path from the server root and effectively points to `https://example.com/bugs/`. Of course, the `User Guide` points to a local MkDocs page. **default**: By default `nav` will contain an alphanumerically sorted, nested list of all the Markdown files found within the `docs_dir` and its sub-directories. Index files will always be listed first within a sub-section. ### exclude_docs NEW: **New in version 1.5.** This config defines patterns of files (under [`docs_dir`](#docs_dir)) to not be picked up into the built site. Example: ```yaml exclude_docs: | api-config.json # A file with this name anywhere. drafts/ # A "drafts" directory anywhere. /requirements.txt # Top-level "docs/requirements.txt". *.py # Any file with this extension anywhere. !/foo/example.py # But keep this particular file. ``` This follows the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format). Note that `mkdocs serve` does *not* follow this setting and instead displays excluded documents but with a "DRAFT" mark. To prevent this effect, you can run `mkdocs serve --clean`. The following defaults are always implicitly prepended - to exclude dot-files (and directories) as well as the top-level `templates` directory: ```yaml exclude_docs: | .* /templates/ ``` So, in order to really start this config fresh, you'd need to specify a negated version of these entries first. Otherwise you could for example opt only certain dot-files back into the site: ```yaml exclude_docs: | !.assets # Don't exclude '.assets' although all other '.*' are excluded ``` ### not_in_nav NEW: **New in version 1.5.** NOTE: This option does *not* actually exclude anything from the nav. If you want to include some docs into the site but intentionally exclude them from the nav, normally MkDocs warns about this. Adding such patterns of files (relative to [`docs_dir`](#docs_dir)) into the `not_in_nav` config will prevent such warnings. Example: ```yaml nav: - Foo: foo.md - Bar: bar.md not_in_nav: | /private.md ``` As the previous option, this follows the .gitignore pattern format. NOTE: Adding a given file to [`exclude_docs`](#exclude_docs) takes precedence over and implies `not_in_nav`. ### validation NEW: **New in version 1.5.** Configure the strictness of MkDocs' diagnostic messages when validating links to documents. This is a tree of configs, and for each one the value can be one of the three: `warn`, `info`, `ignore`. Which cause a logging message of the corresponding severity to be produced. The `warn` level is, of course, intended for use with `mkdocs build --strict` (where it becomes an error), which you can employ in continuous testing. > EXAMPLE: **Defaults of this config as of MkDocs 1.5:** > > ```yaml > validation: > nav: > omitted_files: info > not_found: warn > absolute_links: info > links: > not_found: warn > absolute_links: info > unrecognized_links: info > ``` > > (Note: you shouldn't copy this whole example, because it only duplicates the defaults. Only individual items that differ should be set.) The defaults of some of the behaviors already differ from MkDocs 1.4 and below - they were ignored before. >? EXAMPLE: **Configure MkDocs 1.5 to behave like MkDocs 1.4 and below (reduce strictness):** > > ```yaml > validation: > absolute_links: ignore > unrecognized_links: ignore > ``` >! EXAMPLE: **Recommended settings for most sites (maximal strictness):** > > ```yaml > validation: > omitted_files: warn > absolute_links: warn > unrecognized_links: warn > ``` Note how in the above examples we omitted the 'nav' and 'links' keys. Here `absolute_links:` means setting both `nav: absolute_links:` and `links: absolute_links:`. Full list of values and examples of log messages that they can hide or make more prominent: * `validation.nav.omitted_files` * "The following pages exist in the docs directory, but are not included in the "nav" configuration: ..." * `validation.nav.not_found` * "A relative path to 'foo/bar.md' is included in the 'nav' configuration, which is not found in the documentation files." * "A reference to 'foo/bar.md' is included in the 'nav' configuration, but this file is excluded from the built site." * `validation.nav.absolute_links` * "An absolute path to '/foo/bar.html' is included in the 'nav' configuration, which presumably points to an external resource." * `validation.links.not_found` * "Doc file 'example.md' contains a relative link '../foo/bar.md', but the target is not found among documentation files." * "Doc file 'example.md' contains a link to 'foo/bar.md' which is excluded from the built site." * `validation.links.absolute_links` * "Doc file 'example.md' contains an absolute link '/foo/bar.html', it was left as is. Did you mean 'foo/bar.md'?" * `validation.links.unrecognized_links` * "Doc file 'example.md' contains an unrecognized relative link '../foo/bar/', it was left as is. Did you mean 'foo/bar.md'?" * "Doc file 'example.md' contains an unrecognized relative link 'mail\@example.com', it was left as is. Did you mean 'mailto:mail\@example.com'?" ## Build directories ### theme Sets the theme and theme specific configuration of your documentation site. May be either a string or a set of key/value pairs. If a string, it must be the string name of a known installed theme. For a list of available themes visit [Choosing Your Theme]. An example set of key/value pairs might look something like this: ```yaml theme: name: mkdocs locale: en custom_dir: my_theme_customizations/ static_templates: - sitemap.html include_sidebar: false ``` If a set of key/value pairs, the following nested keys can be defined: > BLOCK: > > #### name > > The string name of a known installed theme. For a list of available themes > visit [Choosing Your Theme]. > > #### locale > > A code representing the language of your site. See [Localizing your theme] > for details. > > #### custom_dir > > A directory containing a custom theme. This can either be a relative > directory, in which case it is resolved relative to the directory containing > your configuration file or it can be an absolute directory path from the > root of your local file system. > > See [Customizing Your Theme][theme_dir] for details if you would like to tweak an > existing theme. > > See the [Theme Developer Guide] if you would like to build your own theme > from the ground up. > > #### static_templates > > A list of templates to render as static pages. The templates must be located > in either the theme's template directory or in the `custom_dir` defined in > the theme configuration. > > #### (theme specific keywords) > > Any additional keywords supported by the theme can also be defined. See the > documentation for the theme you are using for details. **default**: `'mkdocs'` ### docs_dir The directory containing the documentation source markdown files. This can either be a relative directory, in which case it is resolved relative to the directory containing your configuration file, or it can be an absolute directory path from the root of your local file system. **default**: `'docs'` ### site_dir The directory where the output HTML and other files are created. This can either be a relative directory, in which case it is resolved relative to the directory containing your configuration file, or it can be an absolute directory path from the root of your local file system. **default**: `'site'` > NOTE: > If you are using source code control you will normally want to ensure that > your *build output* files are not committed into the repository, and only > keep the *source* files under version control. For example, if using `git` > you might add the following line to your `.gitignore` file: > > ```text > site/ > ``` > > If you're using another source code control tool, you'll want to check its > documentation on how to ignore specific directories. ### extra_css Set a list of CSS files (relative to `docs_dir`) to be included by the theme, typically as `` tags. Example: ```yaml extra_css: - css/extra.css - css/second_extra.css ``` **default**: `[]` (an empty list). ### extra_javascript Set a list of JavaScript files in your `docs_dir` to be included by the theme, as ` # New behavior in MkDocs 1.5: - implicitly_as_module.mjs # # Config keys only supported since MkDocs 1.5: - path: explicitly_as_module.mjs # type: module - path: deferred_plain.js # defer: true - path: scripts/async_module.mjs # type: module async: true ``` So, each item can be either: * a plain string, or * a mapping that has the required `path` key and 3 optional keys `type` (string), `async` (boolean), `defer` (boolean). Only the plain string variant detects the `.mjs` extension and adds `type="module"`, otherwise `type: module` must be written out regardless of extension. **default**: `[]` (an empty list). NOTE: `*.js` and `*.css` files, just like any other type of file, are always copied from `docs_dir` into the site's deployed copy, regardless if they're linked to the pages via the above configs or not. ### extra_templates Set a list of templates in your `docs_dir` to be built by MkDocs. To see more about writing templates for MkDocs read the documentation about [custom themes] and specifically the section about the [available variables] to templates. See the example in [extra_css] for usage. **default**: `[]` (an empty list). ### extra A set of key-value pairs, where the values can be any valid YAML construct, that will be passed to the template. This allows for great flexibility when creating custom themes. For example, if you are using a theme that supports displaying the project version, you can pass it to the theme like this: ```yaml extra: version: 1.0 ``` **default**: By default `extra` will be an empty key-value mapping. ## Preview controls ## Live Reloading ### watch Determines additional directories to watch when running `mkdocs serve`. Configuration is a YAML list. ```yaml watch: - directory_a - directory_b ``` Allows a custom default to be set without the need to pass it through the `-w`/`--watch` option every time the `mkdocs serve` command is called. > NOTE: > The paths provided via the configuration file are relative to the configuration file. > > The paths provided via the `-w`/`--watch` CLI parameters are not. ### use_directory_urls This setting controls the style used for linking to pages within the documentation. The following table demonstrates how the URLs used on the site differ when setting `use_directory_urls` to `true` or `false`. Source file | use_directory_urls: true | use_directory_urls: false ---------------- | ------------------------- | ------------------------- index.md | / | /index.html api-guide.md | /api-guide/ | /api-guide.html about/license.md | /about/license/ | /about/license.html The default style of `use_directory_urls: true` creates more user friendly URLs, and is usually what you'll want to use. The alternate style can be useful if you want your documentation to remain properly linked when opening pages directly from the file system, because it creates links that point directly to the target *file* rather than the target *directory*. **default**: `true` ### strict Determines how warnings are handled. Set to `true` to halt processing when a warning is raised. Set to `false` to print a warning and continue processing. This is also available as a command line flag: `--strict`. **default**: `false` ### dev_addr Determines the address used when running `mkdocs serve`. Must be of the format `IP:PORT`. Allows a custom default to be set without the need to pass it through the `--dev-addr` option every time the `mkdocs serve` command is called. **default**: `'127.0.0.1:8000'` See also: [site_url](#site_url). ## Formatting options ### markdown_extensions MkDocs uses the [Python Markdown][pymkd] library to translate Markdown files into HTML. Python Markdown supports a variety of [extensions][pymdk-extensions] that customize how pages are formatted. This setting lets you enable a list of extensions beyond the ones that MkDocs uses by default (`meta`, `toc`, `tables`, and `fenced_code`). For example, to enable the [SmartyPants typography extension][smarty], use: ```yaml markdown_extensions: - smarty ``` Some extensions provide configuration options of their own. If you would like to set any configuration options, then you can nest a key/value mapping (`option_name: option value`) of any options that a given extension supports. See the documentation for the extension you are using to determine what options they support. For example, to enable permalinks in the (included) `toc` extension, use: ```yaml markdown_extensions: - toc: permalink: true ``` Note that a colon (`:`) must follow the extension name (`toc`) and then on a new line the option name and value must be indented and separated by a colon. If you would like to define multiple options for a single extension, each option must be defined on a separate line: ```yaml markdown_extensions: - toc: permalink: true separator: "_" ``` Add an additional item to the list for each extension. If you have no configuration options to set for a specific extension, then simply omit options for that extension: ```yaml markdown_extensions: - smarty - toc: permalink: true - sane_lists ``` > NOTE: **Dynamic config values.** > > To dynamically configure the extensions, you can get the config values from [environment variables](#environment-variables) or [obtain paths](#paths-relative-to-the-current-file-or-site) of the currently rendered Markdown file or the overall MkDocs site. In the above examples, each extension is a list item (starts with a `-`). As an alternative, key/value pairs can be used instead. However, in that case an empty value must be provided for extensions for which no options are defined. Therefore, the last example above could also be defined as follows: ```yaml markdown_extensions: smarty: {} toc: permalink: true sane_lists: {} ``` This alternative syntax is required if you intend to override some options via [inheritance]. > NOTE: **More extensions.** > > The Python-Markdown documentation provides a [list of extensions][exts] > which are available out-of-the-box. For a list of configuration options > available for a given extension, see the documentation for that extension. > > You may also install and use various third party extensions ([Python-Markdown wiki], [MkDocs project catalog][catalog]). Consult > the documentation provided by those extensions for installation instructions > and available configuration options. **default**: `[]` (an empty list). ### hooks NEW: **New in version 1.4.** A list of paths to Python scripts (relative to `mkdocs.yml`) that are loaded and used as [plugin](#plugins) instances. For example: ```yaml hooks: - my_hooks.py ``` Then the file *my_hooks.py* can contain any [plugin event handlers](../dev-guide/plugins.md#events) (without `self`), e.g.: ```python def on_page_markdown(markdown, **kwargs): return markdown.replace('a', 'z') ``` >? EXAMPLE: **Advanced example:** > > This produces warnings based on the Markdown content (and warnings are fatal in [strict](#strict) mode): > > ```python > import logging, re > import mkdocs.plugins > > log = logging.getLogger('mkdocs') > > @mkdocs.plugins.event_priority(-50) > def on_page_markdown(markdown, page, **kwargs): > path = page.file.src_uri > for m in re.finditer(r'\bhttp://[^) ]+', markdown): > log.warning(f"Documentation file '{path}' contains a non-HTTPS link: {m[0]}") > ``` This does not enable any new abilities compared to [plugins][], it only simplifies one-off usages, as these don't need to be *installed* like plugins do. Note that for `mkdocs serve` the hook module will *not* be reloaded on each build. You might have seen this feature in the [mkdocs-simple-hooks plugin](https://github.com/aklajnert/mkdocs-simple-hooks). If using standard method names, it can be directly replaced, e.g.: ```diff -plugins: - - mkdocs-simple-hooks: - hooks: - on_page_markdown: 'my_hooks:on_page_markdown' +hooks: + - my_hooks.py ``` ### plugins A list of plugins (with optional configuration settings) to use when building the site. See the [Plugins] documentation for full details. If the `plugins` config setting is defined in the `mkdocs.yml` config file, then any defaults (such as `search`) are ignored and you need to explicitly re-enable the defaults if you would like to continue using them: ```yaml plugins: - search - your_other_plugin ``` To define options for a given plugin, use a nested set of key/value pairs: ```yaml plugins: - search - your_other_plugin: option1: value option2: other value ``` In the above examples, each plugin is a list item (starts with a `-`). As an alternative, key/value pairs can be used instead. However, in that case an empty value must be provided for plugins for which no options are defined. Therefore, the last example above could also be defined as follows: ```yaml plugins: search: {} your_other_plugin: option1: value option2: other value ``` This alternative syntax is required if you intend to override some options via [inheritance]. To completely disable all plugins, including any defaults, set the `plugins` setting to an empty list: ```yaml plugins: [] ``` **default**: `['search']` (the "search" plugin included with MkDocs). #### Search A search plugin is provided by default with MkDocs which uses [lunr.js] as a search engine. The following config options are available to alter the behavior of the search plugin: ##### **separator** A regular expression which matches the characters used as word separators when building the index. By default whitespace and the hyphen (`-`) are used. To add the dot (`.`) as a word separator you might do this: ```yaml plugins: - search: separator: '[\s\-\.]+' ``` **default**: `'[\s\-]+'` ##### **min_search_length** An integer value that defines the minimum length for a search query. By default searches shorter than 3 chars in length are ignored as search result quality with short search terms are poor. However, for some use cases (such as documentation about Message Queues which might generate searches for 'MQ') it may be preferable to set a shorter limit. ```yaml plugins: - search: min_search_length: 2 ``` **default**: 3 ##### **lang** A list of languages to use when building the search index as identified by their [ISO 639-1] language codes. With [Lunr Languages], the following languages are supported: * `ar`: Arabic * `da`: Danish * `nl`: Dutch * `en`: English * `fi`: Finnish * `fr`: French * `de`: German * `hu`: Hungarian * `it`: Italian * `ja`: Japanese * `no`: Norwegian * `pt`: Portuguese * `ro`: Romanian * `ru`: Russian * `es`: Spanish * `sv`: Swedish * `th`: Thai * `tr`: Turkish * `vi`: Vietnamese You may [contribute additional languages]. WARNING: While search does support using multiple languages together, it is best not to add additional languages unless you really need them. Each additional language adds significant bandwidth requirements and uses more browser resources. Generally, it is best to keep each instance of MkDocs to a single language. NOTE: Lunr Languages does not currently include support for Chinese or other Asian languages. However, some users have reported decent results using Japanese. **default**: The value of `theme.locale` if set, otherwise `[en]`. ##### **prebuild_index** Optionally generates a pre-built index of all pages, which provides some performance improvements for larger sites. Before enabling, confirm that the theme you are using explicitly supports using a prebuilt index (the builtin themes do). Set to `true` to enable. WARNING: This option requires that [Node.js] be installed and the command `node` be on the system path. If the call to `node` fails for any reason, a warning is issued and the build continues uninterrupted. You may use the `--strict` flag when building to cause such a failure to raise an error instead. NOTE: On smaller sites, using a pre-built index is not recommended as it creates a significant increase is bandwidth requirements with little to no noticeable improvement to your users. However, for larger sites (hundreds of pages), the bandwidth increase is relatively small and your users will notice a significant improvement in search performance. **default**: `False` ##### **indexing** Configures what strategy the search indexer will use when building the index for your pages. This property is particularly useful if your project is large in scale, and the index takes up an enormous amount of disk space. ```yaml plugins: - search: indexing: 'full' ``` ###### Options |Option|Description| |------|-----------| |`full`|Indexes the title, section headings, and full text of each page.| |`sections`|Indexes the title and section headings of each page.| |`titles`|Indexes only the title of each page.| **default**: `full` ## Special YAML tags ### Environment variables In most cases, the value of a configuration option is set directly in the configuration file. However, as an option, the value of a configuration option may be set to the value of an environment variable using the `!ENV` tag. For example, to set the value of the `site_name` option to the value of the variable `SITE_NAME` the YAML file may contain the following: ```yaml site_name: !ENV SITE_NAME ``` If the environment variable is not defined, then the configuration setting would be assigned a `null` (or `None` in Python) value. A default value can be defined as the last value in a list. Like this: ```yaml site_name: !ENV [SITE_NAME, 'My default site name'] ``` Multiple fallback variables can be used as well. Note that the last value is not an environment variable, but must be a value to use as a default if none of the specified environment variables are defined. ```yaml site_name: !ENV [SITE_NAME, OTHER_NAME, 'My default site name'] ``` Simple types defined within an environment variable such as string, bool, integer, float, datestamp and null are parsed as if they were defined directly in the YAML file, which means that the value will be converted to the appropriate type. However, complex types such as lists and key/value pairs cannot be defined within a single environment variable. For more details, see the [pyyaml_env_tag](https://github.com/waylan/pyyaml-env-tag) project. ### Paths relative to the current file or site NEW: **New in version 1.5.** Some Markdown extensions can benefit from knowing the path of the Markdown file that's currently being processed, or just the root path of the current site. For that, the special tag `!relative` can be used in most contexts within the config file, though the only known usecases are within [`markdown_extensions`](#markdown_extensions). Examples of the possible values are: ```yaml - !relative # Relative to the directory of the current Markdown file - !relative $docs_dir # Path of the docs_dir - !relative $config_dir # Path of the directory that contains the main mkdocs.yml - !relative $config_dir/some/child/dir # Some subdirectory of the root config directory ``` (Here, `$docs_dir` and `$config_dir` are currently the *only* special prefixes that are recognized.) Example: ```yaml markdown_extensions: - pymdownx.snippets: base_path: !relative # Relative to the current Markdown file ``` This allows the [pymdownx.snippets] extension to include files relative to the current Markdown file, which without this tag it would have no way of knowing. > NOTE: Even for the default case, any extension's base path is technically the *current working directory* although the assumption is that it's the *directory of mkdocs.yml*. So even if you don't want the paths to be relative, to improve the default behavior, always prefer to use this idiom: > > ```yaml > markdown_extensions: > - pymdownx.snippets: > base_path: !relative $config_dir # Relative to the root directory with mkdocs.yml > ``` ## Configuration Inheritance Generally, a single file would hold the entire configuration for a site. However, some organizations may maintain multiple sites which all share a common configuration across them. Rather than maintaining separate configurations for each, the common configuration options can be defined in a parent configuration file which each site's primary configuration file inherits. To define the parent for a configuration file, set the `INHERIT` (all caps) key to the path of the parent file. The path must be relative to the location of the primary file. For configuration options to be merged with a parent configuration, those options must be defined as key/value pairs. Specifically, the [markdown_extensions] and [plugins](#plugins) options must use the alternative syntax which does not use list items (lines which start with `-`). For example, suppose the common (parent) configuration is defined in `base.yml`: ```yaml theme: name: mkdocs locale: en highlightjs: true markdown_extensions: toc: permalink: true admonition: {} ``` Then, for the "foo" site, the primary configuration file would be defined at `foo/mkdocs.yml`: ```yml INHERIT: ../base.yml site_name: Foo Project site_url: https://example.com/foo ``` When running `mkdocs build`, the file at `foo/mkdocs.yml` would be passed in as the configuration file. MkDocs will then parse that file, retrieve and parse the parent file `base.yml` and deep merge the two. This would result in MkDocs receiving the following merged configuration: ```yaml site_name: Foo Project site_url: https://example.com/foo theme: name: mkdocs locale: en highlightjs: true markdown_extensions: toc: permalink: true admonition: {} ``` Deep merging allows you to add and/or override various values in your primary configuration file. For example, suppose for one site you wanted to add support for definition lists, use a different symbol for permalinks, and define a different separator. In that site's primary configuration file you could do: ```yaml INHERIT: ../base.yml site_name: Bar Project site_url: https://example.com/bar markdown_extensions: def_list: {} toc: permalink:  separator: "_" ``` In that case, the above configuration would be deep merged with `base.yml` and result in the following configuration: ```yaml site_name: Bar Project site_url: https://example.com/bar theme: name: mkdocs locale: en highlightjs: true markdown_extensions: def_list: {} toc: permalink:  separator: "_" admonition: {} ``` Notice that the `admonition` extension was retained from the parent configuration, the `def_list` extension was added, the value of `toc.permalink` was replaced, and the value of `toc.separator` was added. You can replace or merge the value of any key. However, any non-key is always replaced. Therefore, you cannot append items to a list. You must redefine the entire list. As the [nav] configuration is made up of nested lists, this means that you cannot merge navigation items. Of course, you can replace the entire `nav` configuration with a new one. However, it is generally expected that the entire navigation would be defined in the primary configuration file for a project. WARNING: As a reminder, all path based configuration options must be relative to the primary configuration file and MkDocs does not alter the paths when merging. Therefore, defining paths in a parent file which is inherited by multiple different sites may not work as expected. It is generally best to define path based options in the primary configuration file only. The inheritance can also be used as a quick way to override keys on the command line - by using stdin as the config file. For example: ```bash echo '{INHERIT: mkdocs.yml, site_name: "Renamed site"}' | mkdocs build -f - ``` [Theme Developer Guide]: ../dev-guide/themes.md [pymdk-extensions]: https://python-markdown.github.io/extensions/ [pymkd]: https://python-markdown.github.io/ [smarty]: https://python-markdown.github.io/extensions/smarty/ [exts]: https://python-markdown.github.io/extensions/ [Python-Markdown wiki]: https://github.com/Python-Markdown/markdown/wiki/Third-Party-Extensions [catalog]: https://github.com/mkdocs/catalog [configuring pages and navigation]: writing-your-docs.md#configure-pages-and-navigation [theme_dir]: customizing-your-theme.md#using-the-theme_dir [choosing your theme]: choosing-your-theme.md [Localizing your theme]: localizing-your-theme.md [extra_css]: #extra_css [Plugins]: ../dev-guide/plugins.md [lunr.js]: https://lunrjs.com/ [ISO 639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes [Lunr Languages]: https://github.com/MihaiValentin/lunr-languages#lunr-languages----- [contribute additional languages]: https://github.com/MihaiValentin/lunr-languages/blob/master/CONTRIBUTING.md [Node.js]: https://nodejs.org/ [markdown_extensions]: #markdown_extensions [nav]: #nav [inheritance]: #configuration-inheritance [pymdownx.snippets]: https://facelessuser.github.io/pymdown-extensions/extensions/snippets/ python-mkdocs-1.5.3/docs/user-guide/choosing-your-theme.md0000644000175000017500000001615714502137725023447 0ustar carstencarsten# Choosing your Theme Selecting and configuring a theme. --- MkDocs includes two built-in themes ([mkdocs](#mkdocs) and [readthedocs](#readthedocs)), as documented below. However, many [third party themes] are available to choose from as well. To choose a theme, set the [theme] configuration option in your `mkdocs.yml` config file. ```yaml theme: name: readthedocs ``` ## mkdocs The default theme, which was built as a custom [Bootstrap] theme, supports almost every feature of MkDocs. ![mkdocs](../img/mkdocs.png) In addition to the default [theme configuration options][theme], the `mkdocs` theme supports the following options: * __`highlightjs`__: Enables highlighting of source code in code blocks using the [highlight.js] JavaScript library. Default: `True`. * __`hljs_style`__: The highlight.js library provides 79 different [styles] (color variations) for highlighting source code in code blocks. Set this to the name of the desired style. Default: `github`. * __`hljs_languages`__: By default, highlight.js only supports 23 common languages. List additional languages here to include support for them. ```yaml theme: name: mkdocs highlightjs: true hljs_languages: - yaml - rust ``` * __`analytics`__: Defines configuration options for an analytics service. Currently, only Google Analytics v4 is supported via the `gtag` option. * __`gtag`__: To enable Google Analytics, set to a Google Analytics v4 tracking ID, which uses the `G-` format. See Google's documentation to [Set up Analytics for a website and/or app (GA4)][setup-GA4] or to [Upgrade to a Google Analytics 4 property][upgrade-GA4]. ```yaml theme: name: mkdocs analytics: gtag: G-ABC123 ``` When set to the default (`null`) Google Analytics is disabled for the site. * __`shortcuts`__: Defines keyboard shortcut keys. ```yaml theme: name: mkdocs shortcuts: help: 191 # ? next: 78 # n previous: 80 # p search: 83 # s ``` All values must be numeric key codes. It is best to use keys that are available on all keyboards. You may use to determine the key code for a given key. * __`help`__: Display a help modal that lists the keyboard shortcuts. Default: `191` (?) * __`next`__: Navigate to the "next" page. Default: `78` (n) * __`previous`__: Navigate to the "previous" page. Default: `80` (p) * __`search`__: Display the search modal. Default: `83` (s) * __`navigation_depth`__: The maximum depth of the navigation tree in the sidebar. Default: `2`. * __`nav_style`__: This adjusts the visual style for the top navigation bar; by default, this is set to `primary` (the default), but it can also be set to `dark` or `light`. ```yaml theme: name: mkdocs nav_style: dark ``` * __`locale`__{ #mkdocs-locale }: The locale (language/location) used to build the theme. If your locale is not yet supported, it will fall back to the default. The following locales are supported by this theme: * `en`: English (default) * (see the list of existing directories `mkdocs/themes/mkdocs/locales/*/`) See the guide on [localizing your theme] for more information. ## readthedocs A clone of the default theme used by the [Read the Docs] service, which offers the same restricted feature set as its parent theme. Like its parent theme, only two levels of navigation are supported. ![ReadTheDocs](../img/readthedocs.png) In addition to the default [theme configuration options][theme], the `readthedocs` theme supports the following options: * __`highlightjs`__: Enables highlighting of source code in code blocks using the [highlight.js] JavaScript library. Default: `True`. * __`hljs_languages`__: By default, highlight.js only supports 23 common languages. List additional languages here to include support for them. ```yaml theme: name: readthedocs highlightjs: true hljs_languages: - yaml - rust ``` * __`analytics`__: Defines configuration options for an analytics service. * __`gtag`__: To enable Google Analytics, set to a Google Analytics v4 tracking ID, which uses the `G-` format. See Google's documentation to [Set up Analytics for a website and/or app (GA4)][setup-GA4] or to [Upgrade to a Google Analytics 4 property][upgrade-GA4]. ```yaml theme: name: readthedocs analytics: gtag: G-ABC123 ``` When set to the default (`null`) Google Analytics is disabled for the * __`anonymize_ip`__: To enable anonymous IP address for Google Analytics, set this to `True`. Default: `False`. * __`include_homepage_in_sidebar`__: Lists the homepage in the sidebar menu. As MkDocs requires that the homepage be listed in the `nav` configuration option, this setting allows the homepage to be included or excluded from the sidebar. Note that the site name/logo always links to the homepage. Default: `True`. * __`prev_next_buttons_location`__: One of `bottom`, `top`, `both` , or `none`. Displays the “Next” and “Previous” buttons accordingly. Default: `bottom`. * __`navigation_depth`__: The maximum depth of the navigation tree in the sidebar. Default: `4`. * __`collapse_navigation`__: Only include the page section headers in the sidebar for the current page. Default: `True`. * __`titles_only`__: Only include page titles in the sidebar, excluding all section headers for all pages. Default: `False`. * __`sticky_navigation`__: If True, causes the sidebar to scroll with the main page content as you scroll the page. Default: `True`. * __`locale`__{ #readthedocs-locale }: The locale (language/location) used to build the theme. If your locale is not yet supported, it will fall back to the default. The following locales are supported by this theme: * `en`: English (default) * (see the list of existing directories `mkdocs/themes/readthedocs/locales/*/`) See the guide on [localizing your theme] for more information. * __`logo`__: To set a logo on your project instead of the plain text `site_name`, set this variable to be the location of your image. Default: `null`. ## Third Party Themes A list of third party themes can be found at the [community wiki] page and [the ranked catalog][catalog]. If you have created your own, please add them there. [third party themes]: #third-party-themes [theme]: configuration.md#theme [Bootstrap]: https://getbootstrap.com/ [highlight.js]: https://highlightjs.org/ [styles]: https://highlightjs.org/static/demo/ [setup-GA4]: https://support.google.com/analytics/answer/9304153?hl=en&ref_topic=9303319 [upgrade-GA4]: https://support.google.com/analytics/answer/9744165?hl=en&ref_topic=9303319 [Read the Docs]: https://readthedocs.org/ [community wiki]: https://github.com/mkdocs/mkdocs/wiki/MkDocs-Themes [catalog]: https://github.com/mkdocs/catalog#-theming [localizing your theme]: localizing-your-theme.md python-mkdocs-1.5.3/README.md0000644000175000017500000000611414502137725015466 0ustar carstencarsten# MkDocs > *Project documentation with Markdown* [![PyPI Version][pypi-v-image]][pypi-v-link] [![Build Status][GHAction-image]][GHAction-link] [![Coverage Status][codecov-image]][codecov-link] MkDocs is a **fast**, **simple** and **downright gorgeous** static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file. It is designed to be easy to use and can be extended with third-party themes, plugins, and Markdown extensions. Please see the [Documentation][mkdocs] for an introductory tutorial and a full user guide. ## Features - Build static HTML files from Markdown files. - Use Plugins and Markdown Extensions to enhance MkDocs. - Use the built-in themes, third party themes or create your own. - Publish your documentation anywhere that static files can be served. - Much more! ## Support If you need help with MkDocs, do not hesitate to get in contact with us! - For questions and high-level discussions, use **[Discussions]** on GitHub. - For small questions, a good alternative is the **[Chat room]** on Gitter/Matrix. - To report a bug or make a feature request, open an **[Issue]** on GitHub. Please note that we may only provide support for problems/questions regarding core features of MkDocs. Any questions or bug reports about features of third-party themes, plugins, extensions or similar should be made to their respective projects. But, such questions are *not* banned from the [chat room]. Make sure to stick around to answer some questions as well! ## Links - [Official Documentation][mkdocs] - [Latest Release Notes][release-notes] - [Catalog of third-party plugins, themes and recipes][catalog] ## Contributing to MkDocs The MkDocs project welcomes, and depends on, contributions from developers and users in the open source community. Please see the [Contributing Guide] for information on how you can help. ## Code of Conduct Everyone interacting in the MkDocs project's codebases, issue trackers, and discussion forums is expected to follow the [PyPA Code of Conduct]. [codecov-image]: https://codecov.io/github/mkdocs/mkdocs/coverage.svg?branch=master [codecov-link]: https://codecov.io/github/mkdocs/mkdocs?branch=master [pypi-v-image]: https://img.shields.io/pypi/v/mkdocs.svg [pypi-v-link]: https://pypi.org/project/mkdocs/ [GHAction-image]: https://github.com/mkdocs/mkdocs/workflows/CI/badge.svg?branch=master&event=push [GHAction-link]: https://github.com/mkdocs/mkdocs/actions?query=event%3Apush+branch%3Amaster [mkdocs]: https://www.mkdocs.org [Issue]: https://github.com/mkdocs/mkdocs/issues [Discussions]: https://github.com/mkdocs/mkdocs/discussions [Chat room]: https://gitter.im/mkdocs/community [release-notes]: https://www.mkdocs.org/about/release-notes/ [Contributing Guide]: https://www.mkdocs.org/about/contributing/ [PyPA Code of Conduct]: https://www.pypa.io/en/latest/code-of-conduct/ [catalog]: https://github.com/mkdocs/catalog ## License [BSD-2-Clause](https://github.com/mkdocs/mkdocs/blob/master/LICENSE) python-mkdocs-1.5.3/.editorconfig0000644000175000017500000000032714502137725016664 0ustar carstencarsten# editorconfig.org root = true [*] charset = utf-8 indent_size = 4 indent_style = space insert_final_newline = true trim_trailing_whitespace = true [*.js] indent_size = 2 [*.md] trim_trailing_whitespace = false python-mkdocs-1.5.3/.markdownlintrc0000644000175000017500000000103114502137725017237 0ustar carstencarsten{ // Enable all markdownlint rules "default": true, // Disable line length check "MD013": false, // Set Ordered list item prefix to "ordered" (use 1. 2. 3. not 1. 1. 1.) "MD029": { "style": "ordered" }, "MD030": { "ul_multi": 3, "ol_multi": 2 }, // Set list indent level to 4 which Python-Markdown requires "MD007": { "indent": 4 }, // Code block style "MD046": { "style": "fenced" }, // Multiple headings with the same title "MD024": { "siblings_only": true }, // Allow inline HTML "MD033": false } python-mkdocs-1.5.3/.gitignore0000644000175000017500000000150114502137725016172 0ustar carstencarsten# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ node_modules/ parts/ sdist/ var/ package*.json *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo # Scrapy stuff: .scrapy # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # virtualenv venv/ ENV/ # MkDocs documentation site*/ python-mkdocs-1.5.3/.codecov.yml0000644000175000017500000000021414502137725016425 0ustar carstencarstencodecov: ci: - "!ci.appveyor.com" coverage: status: patch: false project: default: target: 90 comment: false python-mkdocs-1.5.3/mkdocs/0000755000175000017500000000000014502137725015465 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/0000755000175000017500000000000014502137725017125 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/__init__.py0000644000175000017500000000000014502137725021224 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/search/0000755000175000017500000000000014502137725020372 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/search/__init__.py0000644000175000017500000001213414502137725022504 0ustar carstencarstenfrom __future__ import annotations import logging import os from typing import TYPE_CHECKING, List from mkdocs import utils from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.contrib.search.search_index import SearchIndex from mkdocs.plugins import BasePlugin if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.pages import Page from mkdocs.util.templates import TemplateContext log = logging.getLogger(__name__) base_path = os.path.dirname(os.path.abspath(__file__)) class LangOption(c.OptionallyRequired[List[str]]): """Validate Language(s) provided in config are known languages.""" def get_lunr_supported_lang(self, lang): fallback = {'uk': 'ru'} for lang_part in lang.split("_"): lang_part = lang_part.lower() lang_part = fallback.get(lang_part, lang_part) if os.path.isfile(os.path.join(base_path, 'lunr-language', f'lunr.{lang_part}.js')): return lang_part def run_validation(self, value: object): if isinstance(value, str): value = [value] if not isinstance(value, list): raise c.ValidationError('Expected a list of language codes.') for lang in value[:]: if lang != 'en': lang_detected = self.get_lunr_supported_lang(lang) if not lang_detected: log.info(f"Option search.lang '{lang}' is not supported, falling back to 'en'") value.remove(lang) if 'en' not in value: value.append('en') elif lang_detected != lang: value.remove(lang) value.append(lang_detected) log.info(f"Option search.lang '{lang}' switched to '{lang_detected}'") return value class _PluginConfig(base.Config): lang = c.Optional(LangOption()) separator = c.Type(str, default=r'[\s\-]+') min_search_length = c.Type(int, default=3) prebuild_index = c.Choice((False, True, 'node', 'python'), default=False) indexing = c.Choice(('full', 'sections', 'titles'), default='full') class SearchPlugin(BasePlugin[_PluginConfig]): """Add a search feature to MkDocs.""" def on_config(self, config: MkDocsConfig, **kwargs) -> MkDocsConfig: "Add plugin templates and scripts to config." if config.theme.get('include_search_page'): config.theme.static_templates.add('search.html') if not config.theme.get('search_index_only'): path = os.path.join(base_path, 'templates') config.theme.dirs.append(path) if 'search/main.js' not in config.extra_javascript: config.extra_javascript.append('search/main.js') # type: ignore if self.config.lang is None: # lang setting undefined. Set default based on theme locale validate = _PluginConfig.lang.run_validation self.config.lang = validate(config.theme.locale.language) # The `python` method of `prebuild_index` is pending deprecation as of version 1.2. # TODO: Raise a deprecation warning in a future release (1.3?). if self.config.prebuild_index == 'python': log.info( "The 'python' method of the search plugin's 'prebuild_index' config option " "is pending deprecation and will not be supported in a future release." ) return config def on_pre_build(self, config: MkDocsConfig, **kwargs) -> None: "Create search index instance for later use." self.search_index = SearchIndex(**self.config) def on_page_context(self, context: TemplateContext, page: Page, **kwargs) -> None: "Add page to search index." self.search_index.add_entry_from_context(page) def on_post_build(self, config: MkDocsConfig, **kwargs) -> None: "Build search index." output_base_path = os.path.join(config.site_dir, 'search') search_index = self.search_index.generate_search_index() json_output_path = os.path.join(output_base_path, 'search_index.json') utils.write_file(search_index.encode('utf-8'), json_output_path) assert self.config.lang is not None if not config.theme.get('search_index_only'): # Include language support files in output. Copy them directly # so that only the needed files are included. files = [] if len(self.config.lang) > 1 or 'en' not in self.config.lang: files.append('lunr.stemmer.support.js') if len(self.config.lang) > 1: files.append('lunr.multi.js') if 'ja' in self.config.lang or 'jp' in self.config.lang: files.append('tinyseg.js') for lang in self.config.lang: if lang != 'en': files.append(f'lunr.{lang}.js') for filename in files: from_path = os.path.join(base_path, 'lunr-language', filename) to_path = os.path.join(output_base_path, filename) utils.copy_file(from_path, to_path) python-mkdocs-1.5.3/mkdocs/contrib/search/templates/0000755000175000017500000000000014502137725022370 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/search/templates/search/0000755000175000017500000000000014502137725023635 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/contrib/search/templates/search/lunr.js0000644000175000017500000030273514502137725025165 0ustar carstencarsten/** * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 * Copyright (C) 2020 Oliver Nightingale * @license MIT */ ;(function(){ /** * A convenience function for configuring and constructing * a new lunr Index. * * A lunr.Builder instance is created and the pipeline setup * with a trimmer, stop word filter and stemmer. * * This builder object is yielded to the configuration function * that is passed as a parameter, allowing the list of fields * and other builder parameters to be customised. * * All documents _must_ be added within the passed config function. * * @example * var idx = lunr(function () { * this.field('title') * this.field('body') * this.ref('id') * * documents.forEach(function (doc) { * this.add(doc) * }, this) * }) * * @see {@link lunr.Builder} * @see {@link lunr.Pipeline} * @see {@link lunr.trimmer} * @see {@link lunr.stopWordFilter} * @see {@link lunr.stemmer} * @namespace {function} lunr */ var lunr = function (config) { var builder = new lunr.Builder builder.pipeline.add( lunr.trimmer, lunr.stopWordFilter, lunr.stemmer ) builder.searchPipeline.add( lunr.stemmer ) config.call(builder, builder) return builder.build() } lunr.version = "2.3.9" /*! * lunr.utils * Copyright (C) 2020 Oliver Nightingale */ /** * A namespace containing utils for the rest of the lunr library * @namespace lunr.utils */ lunr.utils = {} /** * Print a warning message to the console. * * @param {String} message The message to be printed. * @memberOf lunr.utils * @function */ lunr.utils.warn = (function (global) { /* eslint-disable no-console */ return function (message) { if (global.console && console.warn) { console.warn(message) } } /* eslint-enable no-console */ })(this) /** * Convert an object to a string. * * In the case of `null` and `undefined` the function returns * the empty string, in all other cases the result of calling * `toString` on the passed object is returned. * * @param {Any} obj The object to convert to a string. * @return {String} string representation of the passed object. * @memberOf lunr.utils */ lunr.utils.asString = function (obj) { if (obj === void 0 || obj === null) { return "" } else { return obj.toString() } } /** * Clones an object. * * Will create a copy of an existing object such that any mutations * on the copy cannot affect the original. * * Only shallow objects are supported, passing a nested object to this * function will cause a TypeError. * * Objects with primitives, and arrays of primitives are supported. * * @param {Object} obj The object to clone. * @return {Object} a clone of the passed object. * @throws {TypeError} when a nested object is passed. * @memberOf Utils */ lunr.utils.clone = function (obj) { if (obj === null || obj === undefined) { return obj } var clone = Object.create(null), keys = Object.keys(obj) for (var i = 0; i < keys.length; i++) { var key = keys[i], val = obj[key] if (Array.isArray(val)) { clone[key] = val.slice() continue } if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') { clone[key] = val continue } throw new TypeError("clone is not deep and does not support nested objects") } return clone } lunr.FieldRef = function (docRef, fieldName, stringValue) { this.docRef = docRef this.fieldName = fieldName this._stringValue = stringValue } lunr.FieldRef.joiner = "/" lunr.FieldRef.fromString = function (s) { var n = s.indexOf(lunr.FieldRef.joiner) if (n === -1) { throw "malformed field ref string" } var fieldRef = s.slice(0, n), docRef = s.slice(n + 1) return new lunr.FieldRef (docRef, fieldRef, s) } lunr.FieldRef.prototype.toString = function () { if (this._stringValue == undefined) { this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef } return this._stringValue } /*! * lunr.Set * Copyright (C) 2020 Oliver Nightingale */ /** * A lunr set. * * @constructor */ lunr.Set = function (elements) { this.elements = Object.create(null) if (elements) { this.length = elements.length for (var i = 0; i < this.length; i++) { this.elements[elements[i]] = true } } else { this.length = 0 } } /** * A complete set that contains all elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.complete = { intersect: function (other) { return other }, union: function () { return this }, contains: function () { return true } } /** * An empty set that contains no elements. * * @static * @readonly * @type {lunr.Set} */ lunr.Set.empty = { intersect: function () { return this }, union: function (other) { return other }, contains: function () { return false } } /** * Returns true if this set contains the specified object. * * @param {object} object - Object whose presence in this set is to be tested. * @returns {boolean} - True if this set contains the specified object. */ lunr.Set.prototype.contains = function (object) { return !!this.elements[object] } /** * Returns a new set containing only the elements that are present in both * this set and the specified set. * * @param {lunr.Set} other - set to intersect with this set. * @returns {lunr.Set} a new set that is the intersection of this and the specified set. */ lunr.Set.prototype.intersect = function (other) { var a, b, elements, intersection = [] if (other === lunr.Set.complete) { return this } if (other === lunr.Set.empty) { return other } if (this.length < other.length) { a = this b = other } else { a = other b = this } elements = Object.keys(a.elements) for (var i = 0; i < elements.length; i++) { var element = elements[i] if (element in b.elements) { intersection.push(element) } } return new lunr.Set (intersection) } /** * Returns a new set combining the elements of this and the specified set. * * @param {lunr.Set} other - set to union with this set. * @return {lunr.Set} a new set that is the union of this and the specified set. */ lunr.Set.prototype.union = function (other) { if (other === lunr.Set.complete) { return lunr.Set.complete } if (other === lunr.Set.empty) { return this } return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) } /** * A function to calculate the inverse document frequency for * a posting. This is shared between the builder and the index * * @private * @param {object} posting - The posting for a given term * @param {number} documentCount - The total number of documents. */ lunr.idf = function (posting, documentCount) { var documentsWithTerm = 0 for (var fieldName in posting) { if (fieldName == '_index') continue // Ignore the term index, its not a field documentsWithTerm += Object.keys(posting[fieldName]).length } var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) return Math.log(1 + Math.abs(x)) } /** * A token wraps a string representation of a token * as it is passed through the text processing pipeline. * * @constructor * @param {string} [str=''] - The string token being wrapped. * @param {object} [metadata={}] - Metadata associated with this token. */ lunr.Token = function (str, metadata) { this.str = str || "" this.metadata = metadata || {} } /** * Returns the token string that is being wrapped by this object. * * @returns {string} */ lunr.Token.prototype.toString = function () { return this.str } /** * A token update function is used when updating or optionally * when cloning a token. * * @callback lunr.Token~updateFunction * @param {string} str - The string representation of the token. * @param {Object} metadata - All metadata associated with this token. */ /** * Applies the given function to the wrapped string token. * * @example * token.update(function (str, metadata) { * return str.toUpperCase() * }) * * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. * @returns {lunr.Token} */ lunr.Token.prototype.update = function (fn) { this.str = fn(this.str, this.metadata) return this } /** * Creates a clone of this token. Optionally a function can be * applied to the cloned token. * * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. * @returns {lunr.Token} */ lunr.Token.prototype.clone = function (fn) { fn = fn || function (s) { return s } return new lunr.Token (fn(this.str, this.metadata), this.metadata) } /*! * lunr.tokenizer * Copyright (C) 2020 Oliver Nightingale */ /** * A function for splitting a string into tokens ready to be inserted into * the search index. Uses `lunr.tokenizer.separator` to split strings, change * the value of this property to change how strings are split into tokens. * * This tokenizer will convert its parameter to a string by calling `toString` and * then will split this string on the character in `lunr.tokenizer.separator`. * Arrays will have their elements converted to strings and wrapped in a lunr.Token. * * Optional metadata can be passed to the tokenizer, this metadata will be cloned and * added as metadata to every token that is created from the object to be tokenized. * * @static * @param {?(string|object|object[])} obj - The object to convert into tokens * @param {?object} metadata - Optional metadata to associate with every token * @returns {lunr.Token[]} * @see {@link lunr.Pipeline} */ lunr.tokenizer = function (obj, metadata) { if (obj == null || obj == undefined) { return [] } if (Array.isArray(obj)) { return obj.map(function (t) { return new lunr.Token( lunr.utils.asString(t).toLowerCase(), lunr.utils.clone(metadata) ) }) } var str = obj.toString().toLowerCase(), len = str.length, tokens = [] for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { var char = str.charAt(sliceEnd), sliceLength = sliceEnd - sliceStart if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { if (sliceLength > 0) { var tokenMetadata = lunr.utils.clone(metadata) || {} tokenMetadata["position"] = [sliceStart, sliceLength] tokenMetadata["index"] = tokens.length tokens.push( new lunr.Token ( str.slice(sliceStart, sliceEnd), tokenMetadata ) ) } sliceStart = sliceEnd + 1 } } return tokens } /** * The separator used to split a string into tokens. Override this property to change the behaviour of * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. * * @static * @see lunr.tokenizer */ lunr.tokenizer.separator = /[\s\-]+/ /*! * lunr.Pipeline * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Pipelines maintain an ordered list of functions to be applied to all * tokens in documents entering the search index and queries being ran against * the index. * * An instance of lunr.Index created with the lunr shortcut will contain a * pipeline with a stop word filter and an English language stemmer. Extra * functions can be added before or after either of these functions or these * default functions can be removed. * * When run the pipeline will call each function in turn, passing a token, the * index of that token in the original list of all tokens and finally a list of * all the original tokens. * * The output of functions in the pipeline will be passed to the next function * in the pipeline. To exclude a token from entering the index the function * should return undefined, the rest of the pipeline will not be called with * this token. * * For serialisation of pipelines to work, all functions used in an instance of * a pipeline should be registered with lunr.Pipeline. Registered functions can * then be loaded. If trying to load a serialised pipeline that uses functions * that are not registered an error will be thrown. * * If not planning on serialising the pipeline then registering pipeline functions * is not necessary. * * @constructor */ lunr.Pipeline = function () { this._stack = [] } lunr.Pipeline.registeredFunctions = Object.create(null) /** * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token * string as well as all known metadata. A pipeline function can mutate the token string * or mutate (or add) metadata for a given token. * * A pipeline function can indicate that the passed token should be discarded by returning * null, undefined or an empty string. This token will not be passed to any downstream pipeline * functions and will not be added to the index. * * Multiple tokens can be returned by returning an array of tokens. Each token will be passed * to any downstream pipeline functions and all will returned tokens will be added to the index. * * Any number of pipeline functions may be chained together using a lunr.Pipeline. * * @interface lunr.PipelineFunction * @param {lunr.Token} token - A token from the document being processed. * @param {number} i - The index of this token in the complete list of tokens for this document/field. * @param {lunr.Token[]} tokens - All tokens for this document/field. * @returns {(?lunr.Token|lunr.Token[])} */ /** * Register a function with the pipeline. * * Functions that are used in the pipeline should be registered if the pipeline * needs to be serialised, or a serialised pipeline needs to be loaded. * * Registering a function does not add it to a pipeline, functions must still be * added to instances of the pipeline for them to be used when running a pipeline. * * @param {lunr.PipelineFunction} fn - The function to check for. * @param {String} label - The label to register this function with */ lunr.Pipeline.registerFunction = function (fn, label) { if (label in this.registeredFunctions) { lunr.utils.warn('Overwriting existing registered function: ' + label) } fn.label = label lunr.Pipeline.registeredFunctions[fn.label] = fn } /** * Warns if the function is not registered as a Pipeline function. * * @param {lunr.PipelineFunction} fn - The function to check for. * @private */ lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { var isRegistered = fn.label && (fn.label in this.registeredFunctions) if (!isRegistered) { lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) } } /** * Loads a previously serialised pipeline. * * All functions to be loaded must already be registered with lunr.Pipeline. * If any function from the serialised data has not been registered then an * error will be thrown. * * @param {Object} serialised - The serialised pipeline to load. * @returns {lunr.Pipeline} */ lunr.Pipeline.load = function (serialised) { var pipeline = new lunr.Pipeline serialised.forEach(function (fnName) { var fn = lunr.Pipeline.registeredFunctions[fnName] if (fn) { pipeline.add(fn) } else { throw new Error('Cannot load unregistered function: ' + fnName) } }) return pipeline } /** * Adds new functions to the end of the pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. */ lunr.Pipeline.prototype.add = function () { var fns = Array.prototype.slice.call(arguments) fns.forEach(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) this._stack.push(fn) }, this) } /** * Adds a single function after a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.after = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } pos = pos + 1 this._stack.splice(pos, 0, newFn) } /** * Adds a single function before a function that already exists in the * pipeline. * * Logs a warning if the function has not been registered. * * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. */ lunr.Pipeline.prototype.before = function (existingFn, newFn) { lunr.Pipeline.warnIfFunctionNotRegistered(newFn) var pos = this._stack.indexOf(existingFn) if (pos == -1) { throw new Error('Cannot find existingFn') } this._stack.splice(pos, 0, newFn) } /** * Removes a function from the pipeline. * * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. */ lunr.Pipeline.prototype.remove = function (fn) { var pos = this._stack.indexOf(fn) if (pos == -1) { return } this._stack.splice(pos, 1) } /** * Runs the current list of functions that make up the pipeline against the * passed tokens. * * @param {Array} tokens The tokens to run through the pipeline. * @returns {Array} */ lunr.Pipeline.prototype.run = function (tokens) { var stackLength = this._stack.length for (var i = 0; i < stackLength; i++) { var fn = this._stack[i] var memo = [] for (var j = 0; j < tokens.length; j++) { var result = fn(tokens[j], j, tokens) if (result === null || result === void 0 || result === '') continue if (Array.isArray(result)) { for (var k = 0; k < result.length; k++) { memo.push(result[k]) } } else { memo.push(result) } } tokens = memo } return tokens } /** * Convenience method for passing a string through a pipeline and getting * strings out. This method takes care of wrapping the passed string in a * token and mapping the resulting tokens back to strings. * * @param {string} str - The string to pass through the pipeline. * @param {?object} metadata - Optional metadata to associate with the token * passed to the pipeline. * @returns {string[]} */ lunr.Pipeline.prototype.runString = function (str, metadata) { var token = new lunr.Token (str, metadata) return this.run([token]).map(function (t) { return t.toString() }) } /** * Resets the pipeline by removing any existing processors. * */ lunr.Pipeline.prototype.reset = function () { this._stack = [] } /** * Returns a representation of the pipeline ready for serialisation. * * Logs a warning if the function has not been registered. * * @returns {Array} */ lunr.Pipeline.prototype.toJSON = function () { return this._stack.map(function (fn) { lunr.Pipeline.warnIfFunctionNotRegistered(fn) return fn.label }) } /*! * lunr.Vector * Copyright (C) 2020 Oliver Nightingale */ /** * A vector is used to construct the vector space of documents and queries. These * vectors support operations to determine the similarity between two documents or * a document and a query. * * Normally no parameters are required for initializing a vector, but in the case of * loading a previously dumped vector the raw elements can be provided to the constructor. * * For performance reasons vectors are implemented with a flat array, where an elements * index is immediately followed by its value. E.g. [index, value, index, value]. This * allows the underlying array to be as sparse as possible and still offer decent * performance when being used for vector calculations. * * @constructor * @param {Number[]} [elements] - The flat list of element index and element value pairs. */ lunr.Vector = function (elements) { this._magnitude = 0 this.elements = elements || [] } /** * Calculates the position within the vector to insert a given index. * * This is used internally by insert and upsert. If there are duplicate indexes then * the position is returned as if the value for that index were to be updated, but it * is the callers responsibility to check whether there is a duplicate at that index * * @param {Number} insertIdx - The index at which the element should be inserted. * @returns {Number} */ lunr.Vector.prototype.positionForIndex = function (index) { // For an empty vector the tuple can be inserted at the beginning if (this.elements.length == 0) { return 0 } var start = 0, end = this.elements.length / 2, sliceLength = end - start, pivotPoint = Math.floor(sliceLength / 2), pivotIndex = this.elements[pivotPoint * 2] while (sliceLength > 1) { if (pivotIndex < index) { start = pivotPoint } if (pivotIndex > index) { end = pivotPoint } if (pivotIndex == index) { break } sliceLength = end - start pivotPoint = start + Math.floor(sliceLength / 2) pivotIndex = this.elements[pivotPoint * 2] } if (pivotIndex == index) { return pivotPoint * 2 } if (pivotIndex > index) { return pivotPoint * 2 } if (pivotIndex < index) { return (pivotPoint + 1) * 2 } } /** * Inserts an element at an index within the vector. * * Does not allow duplicates, will throw an error if there is already an entry * for this index. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. */ lunr.Vector.prototype.insert = function (insertIdx, val) { this.upsert(insertIdx, val, function () { throw "duplicate index" }) } /** * Inserts or updates an existing index within the vector. * * @param {Number} insertIdx - The index at which the element should be inserted. * @param {Number} val - The value to be inserted into the vector. * @param {function} fn - A function that is called for updates, the existing value and the * requested value are passed as arguments */ lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { this._magnitude = 0 var position = this.positionForIndex(insertIdx) if (this.elements[position] == insertIdx) { this.elements[position + 1] = fn(this.elements[position + 1], val) } else { this.elements.splice(position, 0, insertIdx, val) } } /** * Calculates the magnitude of this vector. * * @returns {Number} */ lunr.Vector.prototype.magnitude = function () { if (this._magnitude) return this._magnitude var sumOfSquares = 0, elementsLength = this.elements.length for (var i = 1; i < elementsLength; i += 2) { var val = this.elements[i] sumOfSquares += val * val } return this._magnitude = Math.sqrt(sumOfSquares) } /** * Calculates the dot product of this vector and another vector. * * @param {lunr.Vector} otherVector - The vector to compute the dot product with. * @returns {Number} */ lunr.Vector.prototype.dot = function (otherVector) { var dotProduct = 0, a = this.elements, b = otherVector.elements, aLen = a.length, bLen = b.length, aVal = 0, bVal = 0, i = 0, j = 0 while (i < aLen && j < bLen) { aVal = a[i], bVal = b[j] if (aVal < bVal) { i += 2 } else if (aVal > bVal) { j += 2 } else if (aVal == bVal) { dotProduct += a[i + 1] * b[j + 1] i += 2 j += 2 } } return dotProduct } /** * Calculates the similarity between this vector and another vector. * * @param {lunr.Vector} otherVector - The other vector to calculate the * similarity with. * @returns {Number} */ lunr.Vector.prototype.similarity = function (otherVector) { return this.dot(otherVector) / this.magnitude() || 0 } /** * Converts the vector to an array of the elements within the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toArray = function () { var output = new Array (this.elements.length / 2) for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { output[j] = this.elements[i] } return output } /** * A JSON serializable representation of the vector. * * @returns {Number[]} */ lunr.Vector.prototype.toJSON = function () { return this.elements } /* eslint-disable */ /*! * lunr.stemmer * Copyright (C) 2020 Oliver Nightingale * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt */ /** * lunr.stemmer is an english language stemmer, this is a JavaScript * implementation of the PorterStemmer taken from http://tartarus.org/~martin * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token - The string to stem * @returns {lunr.Token} * @see {@link lunr.Pipeline} * @function */ lunr.stemmer = (function(){ var step2list = { "ational" : "ate", "tional" : "tion", "enci" : "ence", "anci" : "ance", "izer" : "ize", "bli" : "ble", "alli" : "al", "entli" : "ent", "eli" : "e", "ousli" : "ous", "ization" : "ize", "ation" : "ate", "ator" : "ate", "alism" : "al", "iveness" : "ive", "fulness" : "ful", "ousness" : "ous", "aliti" : "al", "iviti" : "ive", "biliti" : "ble", "logi" : "log" }, step3list = { "icate" : "ic", "ative" : "", "alize" : "al", "iciti" : "ic", "ical" : "ic", "ful" : "", "ness" : "" }, c = "[^aeiou]", // consonant v = "[aeiouy]", // vowel C = c + "[^aeiouy]*", // consonant sequence V = v + "[aeiou]*", // vowel sequence mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 s_v = "^(" + C + ")?" + v; // vowel in stem var re_mgr0 = new RegExp(mgr0); var re_mgr1 = new RegExp(mgr1); var re_meq1 = new RegExp(meq1); var re_s_v = new RegExp(s_v); var re_1a = /^(.+?)(ss|i)es$/; var re2_1a = /^(.+?)([^s])s$/; var re_1b = /^(.+?)eed$/; var re2_1b = /^(.+?)(ed|ing)$/; var re_1b_2 = /.$/; var re2_1b_2 = /(at|bl|iz)$/; var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var re_1c = /^(.+?[^aeiou])y$/; var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; var re2_4 = /^(.+?)(s|t)(ion)$/; var re_5 = /^(.+?)e$/; var re_5_1 = /ll$/; var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); var porterStemmer = function porterStemmer(w) { var stem, suffix, firstch, re, re2, re3, re4; if (w.length < 3) { return w; } firstch = w.substr(0,1); if (firstch == "y") { w = firstch.toUpperCase() + w.substr(1); } // Step 1a re = re_1a re2 = re2_1a; if (re.test(w)) { w = w.replace(re,"$1$2"); } else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } // Step 1b re = re_1b; re2 = re2_1b; if (re.test(w)) { var fp = re.exec(w); re = re_mgr0; if (re.test(fp[1])) { re = re_1b_2; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = re_s_v; if (re2.test(stem)) { w = stem; re2 = re2_1b_2; re3 = re3_1b_2; re4 = re4_1b_2; if (re2.test(w)) { w = w + "e"; } else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } else if (re4.test(w)) { w = w + "e"; } } } // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) re = re_1c; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; w = stem + "i"; } // Step 2 re = re_2; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step2list[suffix]; } } // Step 3 re = re_3; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = re_mgr0; if (re.test(stem)) { w = stem + step3list[suffix]; } } // Step 4 re = re_4; re2 = re2_4; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; if (re.test(stem)) { w = stem; } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = re_mgr1; if (re2.test(stem)) { w = stem; } } // Step 5 re = re_5; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = re_mgr1; re2 = re_meq1; re3 = re3_5; if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { w = stem; } } re = re_5_1; re2 = re_mgr1; if (re.test(w) && re2.test(w)) { re = re_1b_2; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") { w = firstch.toLowerCase() + w.substr(1); } return w; }; return function (token) { return token.update(porterStemmer); } })(); lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') /*! * lunr.stopWordFilter * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.generateStopWordFilter builds a stopWordFilter function from the provided * list of stop words. * * The built in lunr.stopWordFilter is built using this generator and can be used * to generate custom stopWordFilters for applications or non English languages. * * @function * @param {Array} token The token to pass through the filter * @returns {lunr.PipelineFunction} * @see lunr.Pipeline * @see lunr.stopWordFilter */ lunr.generateStopWordFilter = function (stopWords) { var words = stopWords.reduce(function (memo, stopWord) { memo[stopWord] = stopWord return memo }, {}) return function (token) { if (token && words[token.toString()] !== token.toString()) return token } } /** * lunr.stopWordFilter is an English language stop word list filter, any words * contained in the list will not be passed through the filter. * * This is intended to be used in the Pipeline. If the token does not pass the * filter then undefined will be returned. * * @function * @implements {lunr.PipelineFunction} * @params {lunr.Token} token - A token to check for being a stop word. * @returns {lunr.Token} * @see {@link lunr.Pipeline} */ lunr.stopWordFilter = lunr.generateStopWordFilter([ 'a', 'able', 'about', 'across', 'after', 'all', 'almost', 'also', 'am', 'among', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'can', 'cannot', 'could', 'dear', 'did', 'do', 'does', 'either', 'else', 'ever', 'every', 'for', 'from', 'get', 'got', 'had', 'has', 'have', 'he', 'her', 'hers', 'him', 'his', 'how', 'however', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'least', 'let', 'like', 'likely', 'may', 'me', 'might', 'most', 'must', 'my', 'neither', 'no', 'nor', 'not', 'of', 'off', 'often', 'on', 'only', 'or', 'other', 'our', 'own', 'rather', 'said', 'say', 'says', 'she', 'should', 'since', 'so', 'some', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'tis', 'to', 'too', 'twas', 'us', 'wants', 'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would', 'yet', 'you', 'your' ]) lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') /*! * lunr.trimmer * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.trimmer is a pipeline function for trimming non word * characters from the beginning and end of tokens before they * enter the index. * * This implementation may not work correctly for non latin * characters and should either be removed or adapted for use * with languages with non-latin characters. * * @static * @implements {lunr.PipelineFunction} * @param {lunr.Token} token The token to pass through the filter * @returns {lunr.Token} * @see lunr.Pipeline */ lunr.trimmer = function (token) { return token.update(function (s) { return s.replace(/^\W+/, '').replace(/\W+$/, '') }) } lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') /*! * lunr.TokenSet * Copyright (C) 2020 Oliver Nightingale */ /** * A token set is used to store the unique list of all tokens * within an index. Token sets are also used to represent an * incoming query to the index, this query token set and index * token set are then intersected to find which tokens to look * up in the inverted index. * * A token set can hold multiple tokens, as in the case of the * index token set, or it can hold a single token as in the * case of a simple query token set. * * Additionally token sets are used to perform wildcard matching. * Leading, contained and trailing wildcards are supported, and * from this edit distance matching can also be provided. * * Token sets are implemented as a minimal finite state automata, * where both common prefixes and suffixes are shared between tokens. * This helps to reduce the space used for storing the token set. * * @constructor */ lunr.TokenSet = function () { this.final = false this.edges = {} this.id = lunr.TokenSet._nextId lunr.TokenSet._nextId += 1 } /** * Keeps track of the next, auto increment, identifier to assign * to a new tokenSet. * * TokenSets require a unique identifier to be correctly minimised. * * @private */ lunr.TokenSet._nextId = 1 /** * Creates a TokenSet instance from the given sorted array of words. * * @param {String[]} arr - A sorted array of strings to create the set from. * @returns {lunr.TokenSet} * @throws Will throw an error if the input array is not sorted. */ lunr.TokenSet.fromArray = function (arr) { var builder = new lunr.TokenSet.Builder for (var i = 0, len = arr.length; i < len; i++) { builder.insert(arr[i]) } builder.finish() return builder.root } /** * Creates a token set from a query clause. * * @private * @param {Object} clause - A single clause from lunr.Query. * @param {string} clause.term - The query clause term. * @param {number} [clause.editDistance] - The optional edit distance for the term. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromClause = function (clause) { if ('editDistance' in clause) { return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) } else { return lunr.TokenSet.fromString(clause.term) } } /** * Creates a token set representing a single string with a specified * edit distance. * * Insertions, deletions, substitutions and transpositions are each * treated as an edit distance of 1. * * Increasing the allowed edit distance will have a dramatic impact * on the performance of both creating and intersecting these TokenSets. * It is advised to keep the edit distance less than 3. * * @param {string} str - The string to create the token set from. * @param {number} editDistance - The allowed edit distance to match. * @returns {lunr.Vector} */ lunr.TokenSet.fromFuzzyString = function (str, editDistance) { var root = new lunr.TokenSet var stack = [{ node: root, editsRemaining: editDistance, str: str }] while (stack.length) { var frame = stack.pop() // no edit if (frame.str.length > 0) { var char = frame.str.charAt(0), noEditNode if (char in frame.node.edges) { noEditNode = frame.node.edges[char] } else { noEditNode = new lunr.TokenSet frame.node.edges[char] = noEditNode } if (frame.str.length == 1) { noEditNode.final = true } stack.push({ node: noEditNode, editsRemaining: frame.editsRemaining, str: frame.str.slice(1) }) } if (frame.editsRemaining == 0) { continue } // insertion if ("*" in frame.node.edges) { var insertionNode = frame.node.edges["*"] } else { var insertionNode = new lunr.TokenSet frame.node.edges["*"] = insertionNode } if (frame.str.length == 0) { insertionNode.final = true } stack.push({ node: insertionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str }) // deletion // can only do a deletion if we have enough edits remaining // and if there are characters left to delete in the string if (frame.str.length > 1) { stack.push({ node: frame.node, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // deletion // just removing the last character from the str if (frame.str.length == 1) { frame.node.final = true } // substitution // can only do a substitution if we have enough edits remaining // and if there are characters left to substitute if (frame.str.length >= 1) { if ("*" in frame.node.edges) { var substitutionNode = frame.node.edges["*"] } else { var substitutionNode = new lunr.TokenSet frame.node.edges["*"] = substitutionNode } if (frame.str.length == 1) { substitutionNode.final = true } stack.push({ node: substitutionNode, editsRemaining: frame.editsRemaining - 1, str: frame.str.slice(1) }) } // transposition // can only do a transposition if there are edits remaining // and there are enough characters to transpose if (frame.str.length > 1) { var charA = frame.str.charAt(0), charB = frame.str.charAt(1), transposeNode if (charB in frame.node.edges) { transposeNode = frame.node.edges[charB] } else { transposeNode = new lunr.TokenSet frame.node.edges[charB] = transposeNode } if (frame.str.length == 1) { transposeNode.final = true } stack.push({ node: transposeNode, editsRemaining: frame.editsRemaining - 1, str: charA + frame.str.slice(2) }) } } return root } /** * Creates a TokenSet from a string. * * The string may contain one or more wildcard characters (*) * that will allow wildcard matching when intersecting with * another TokenSet. * * @param {string} str - The string to create a TokenSet from. * @returns {lunr.TokenSet} */ lunr.TokenSet.fromString = function (str) { var node = new lunr.TokenSet, root = node /* * Iterates through all characters within the passed string * appending a node for each character. * * When a wildcard character is found then a self * referencing edge is introduced to continually match * any number of any characters. */ for (var i = 0, len = str.length; i < len; i++) { var char = str[i], final = (i == len - 1) if (char == "*") { node.edges[char] = node node.final = final } else { var next = new lunr.TokenSet next.final = final node.edges[char] = next node = next } } return root } /** * Converts this TokenSet into an array of strings * contained within the TokenSet. * * This is not intended to be used on a TokenSet that * contains wildcards, in these cases the results are * undefined and are likely to cause an infinite loop. * * @returns {string[]} */ lunr.TokenSet.prototype.toArray = function () { var words = [] var stack = [{ prefix: "", node: this }] while (stack.length) { var frame = stack.pop(), edges = Object.keys(frame.node.edges), len = edges.length if (frame.node.final) { /* In Safari, at this point the prefix is sometimes corrupted, see: * https://github.com/olivernn/lunr.js/issues/279 Calling any * String.prototype method forces Safari to "cast" this string to what * it's supposed to be, fixing the bug. */ frame.prefix.charAt(0) words.push(frame.prefix) } for (var i = 0; i < len; i++) { var edge = edges[i] stack.push({ prefix: frame.prefix.concat(edge), node: frame.node.edges[edge] }) } } return words } /** * Generates a string representation of a TokenSet. * * This is intended to allow TokenSets to be used as keys * in objects, largely to aid the construction and minimisation * of a TokenSet. As such it is not designed to be a human * friendly representation of the TokenSet. * * @returns {string} */ lunr.TokenSet.prototype.toString = function () { // NOTE: Using Object.keys here as this.edges is very likely // to enter 'hash-mode' with many keys being added // // avoiding a for-in loop here as it leads to the function // being de-optimised (at least in V8). From some simple // benchmarks the performance is comparable, but allowing // V8 to optimize may mean easy performance wins in the future. if (this._str) { return this._str } var str = this.final ? '1' : '0', labels = Object.keys(this.edges).sort(), len = labels.length for (var i = 0; i < len; i++) { var label = labels[i], node = this.edges[label] str = str + label + node.id } return str } /** * Returns a new TokenSet that is the intersection of * this TokenSet and the passed TokenSet. * * This intersection will take into account any wildcards * contained within the TokenSet. * * @param {lunr.TokenSet} b - An other TokenSet to intersect with. * @returns {lunr.TokenSet} */ lunr.TokenSet.prototype.intersect = function (b) { var output = new lunr.TokenSet, frame = undefined var stack = [{ qNode: b, output: output, node: this }] while (stack.length) { frame = stack.pop() // NOTE: As with the #toString method, we are using // Object.keys and a for loop instead of a for-in loop // as both of these objects enter 'hash' mode, causing // the function to be de-optimised in V8 var qEdges = Object.keys(frame.qNode.edges), qLen = qEdges.length, nEdges = Object.keys(frame.node.edges), nLen = nEdges.length for (var q = 0; q < qLen; q++) { var qEdge = qEdges[q] for (var n = 0; n < nLen; n++) { var nEdge = nEdges[n] if (nEdge == qEdge || qEdge == '*') { var node = frame.node.edges[nEdge], qNode = frame.qNode.edges[qEdge], final = node.final && qNode.final, next = undefined if (nEdge in frame.output.edges) { // an edge already exists for this character // no need to create a new node, just set the finality // bit unless this node is already final next = frame.output.edges[nEdge] next.final = next.final || final } else { // no edge exists yet, must create one // set the finality bit and insert it // into the output next = new lunr.TokenSet next.final = final frame.output.edges[nEdge] = next } stack.push({ qNode: qNode, output: next, node: node }) } } } } return output } lunr.TokenSet.Builder = function () { this.previousWord = "" this.root = new lunr.TokenSet this.uncheckedNodes = [] this.minimizedNodes = {} } lunr.TokenSet.Builder.prototype.insert = function (word) { var node, commonPrefix = 0 if (word < this.previousWord) { throw new Error ("Out of order word insertion") } for (var i = 0; i < word.length && i < this.previousWord.length; i++) { if (word[i] != this.previousWord[i]) break commonPrefix++ } this.minimize(commonPrefix) if (this.uncheckedNodes.length == 0) { node = this.root } else { node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child } for (var i = commonPrefix; i < word.length; i++) { var nextNode = new lunr.TokenSet, char = word[i] node.edges[char] = nextNode this.uncheckedNodes.push({ parent: node, char: char, child: nextNode }) node = nextNode } node.final = true this.previousWord = word } lunr.TokenSet.Builder.prototype.finish = function () { this.minimize(0) } lunr.TokenSet.Builder.prototype.minimize = function (downTo) { for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { var node = this.uncheckedNodes[i], childKey = node.child.toString() if (childKey in this.minimizedNodes) { node.parent.edges[node.char] = this.minimizedNodes[childKey] } else { // Cache the key for this node since // we know it can't change anymore node.child._str = childKey this.minimizedNodes[childKey] = node.child } this.uncheckedNodes.pop() } } /*! * lunr.Index * Copyright (C) 2020 Oliver Nightingale */ /** * An index contains the built index of all documents and provides a query interface * to the index. * * Usually instances of lunr.Index will not be created using this constructor, instead * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be * used to load previously built and serialized indexes. * * @constructor * @param {Object} attrs - The attributes of the built search index. * @param {Object} attrs.invertedIndex - An index of term/field to document reference. * @param {Object} attrs.fieldVectors - Field vectors * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. * @param {string[]} attrs.fields - The names of indexed document fields. * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. */ lunr.Index = function (attrs) { this.invertedIndex = attrs.invertedIndex this.fieldVectors = attrs.fieldVectors this.tokenSet = attrs.tokenSet this.fields = attrs.fields this.pipeline = attrs.pipeline } /** * A result contains details of a document matching a search query. * @typedef {Object} lunr.Index~Result * @property {string} ref - The reference of the document this result represents. * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. */ /** * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple * query language which itself is parsed into an instance of lunr.Query. * * For programmatically building queries it is advised to directly use lunr.Query, the query language * is best used for human entered text rather than program generated text. * * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' * or 'world', though those that contain both will rank higher in the results. * * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding * wildcards will increase the number of documents that will be found but can also have a negative * impact on query performance, especially with wildcards at the beginning of a term. * * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term * hello in the title field will match this query. Using a field not present in the index will lead * to an error being thrown. * * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. * Avoid large values for edit distance to improve query performance. * * Each term also supports a presence modifier. By default a term's presence in document is optional, however * this can be changed to either required or prohibited. For a term's presence to be required in a document the * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. * * To escape special characters the backslash character '\' can be used, this allows searches to include * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead * of attempting to apply a boost of 2 to the search term "foo". * * @typedef {string} lunr.Index~QueryString * @example Simple single term query * hello * @example Multiple term query * hello world * @example term scoped to a field * title:hello * @example term with a boost of 10 * hello^10 * @example term with an edit distance of 2 * hello~2 * @example terms with presence modifiers * -foo +bar baz */ /** * Performs a search against the index using lunr query syntax. * * Results will be returned sorted by their score, the most relevant results * will be returned first. For details on how the score is calculated, please see * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. * * For more programmatic querying use lunr.Index#query. * * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.search = function (queryString) { return this.query(function (query) { var parser = new lunr.QueryParser(queryString, query) parser.parse() }) } /** * A query builder callback provides a query object to be used to express * the query to perform on the index. * * @callback lunr.Index~queryBuilder * @param {lunr.Query} query - The query object to build up. * @this lunr.Query */ /** * Performs a query against the index using the yielded lunr.Query object. * * If performing programmatic queries against the index, this method is preferred * over lunr.Index#search so as to avoid the additional query parsing overhead. * * A query object is yielded to the supplied function which should be used to * express the query to be run against the index. * * Note that although this function takes a callback parameter it is _not_ an * asynchronous operation, the callback is just yielded a query object to be * customized. * * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. * @returns {lunr.Index~Result[]} */ lunr.Index.prototype.query = function (fn) { // for each query clause // * process terms // * expand terms from token set // * find matching documents and metadata // * get document vectors // * score documents var query = new lunr.Query(this.fields), matchingFields = Object.create(null), queryVectors = Object.create(null), termFieldCache = Object.create(null), requiredMatches = Object.create(null), prohibitedMatches = Object.create(null) /* * To support field level boosts a query vector is created per * field. An empty vector is eagerly created to support negated * queries. */ for (var i = 0; i < this.fields.length; i++) { queryVectors[this.fields[i]] = new lunr.Vector } fn.call(query, query) for (var i = 0; i < query.clauses.length; i++) { /* * Unless the pipeline has been disabled for this term, which is * the case for terms with wildcards, we need to pass the clause * term through the search pipeline. A pipeline returns an array * of processed terms. Pipeline functions may expand the passed * term, which means we may end up performing multiple index lookups * for a single query term. */ var clause = query.clauses[i], terms = null, clauseMatches = lunr.Set.empty if (clause.usePipeline) { terms = this.pipeline.runString(clause.term, { fields: clause.fields }) } else { terms = [clause.term] } for (var m = 0; m < terms.length; m++) { var term = terms[m] /* * Each term returned from the pipeline needs to use the same query * clause object, e.g. the same boost and or edit distance. The * simplest way to do this is to re-use the clause object but mutate * its term property. */ clause.term = term /* * From the term in the clause we create a token set which will then * be used to intersect the indexes token set to get a list of terms * to lookup in the inverted index */ var termTokenSet = lunr.TokenSet.fromClause(clause), expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() /* * If a term marked as required does not exist in the tokenSet it is * impossible for the search to return any matches. We set all the field * scoped required matches set to empty and stop examining any further * clauses. */ if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = lunr.Set.empty } break } for (var j = 0; j < expandedTerms.length; j++) { /* * For each term get the posting and termIndex, this is required for * building the query vector. */ var expandedTerm = expandedTerms[j], posting = this.invertedIndex[expandedTerm], termIndex = posting._index for (var k = 0; k < clause.fields.length; k++) { /* * For each field that this query term is scoped by (by default * all fields are in scope) we need to get all the document refs * that have this term in that field. * * The posting is the entry in the invertedIndex for the matching * term from above. */ var field = clause.fields[k], fieldPosting = posting[field], matchingDocumentRefs = Object.keys(fieldPosting), termField = expandedTerm + "/" + field, matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) /* * if the presence of this term is required ensure that the matching * documents are added to the set of required matches for this clause. * */ if (clause.presence == lunr.Query.presence.REQUIRED) { clauseMatches = clauseMatches.union(matchingDocumentsSet) if (requiredMatches[field] === undefined) { requiredMatches[field] = lunr.Set.complete } } /* * if the presence of this term is prohibited ensure that the matching * documents are added to the set of prohibited matches for this field, * creating that set if it does not yet exist. */ if (clause.presence == lunr.Query.presence.PROHIBITED) { if (prohibitedMatches[field] === undefined) { prohibitedMatches[field] = lunr.Set.empty } prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) /* * Prohibited matches should not be part of the query vector used for * similarity scoring and no metadata should be extracted so we continue * to the next field */ continue } /* * The query field vector is populated using the termIndex found for * the term and a unit value with the appropriate boost applied. * Using upsert because there could already be an entry in the vector * for the term we are working with. In that case we just add the scores * together. */ queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) /** * If we've already seen this term, field combo then we've already collected * the matching documents and metadata, no need to go through all that again */ if (termFieldCache[termField]) { continue } for (var l = 0; l < matchingDocumentRefs.length; l++) { /* * All metadata for this term/field/document triple * are then extracted and collected into an instance * of lunr.MatchData ready to be returned in the query * results */ var matchingDocumentRef = matchingDocumentRefs[l], matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), metadata = fieldPosting[matchingDocumentRef], fieldMatch if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) } else { fieldMatch.add(expandedTerm, field, metadata) } } termFieldCache[termField] = true } } } /** * If the presence was required we need to update the requiredMatches field sets. * We do this after all fields for the term have collected their matches because * the clause terms presence is required in _any_ of the fields not _all_ of the * fields. */ if (clause.presence === lunr.Query.presence.REQUIRED) { for (var k = 0; k < clause.fields.length; k++) { var field = clause.fields[k] requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) } } } /** * Need to combine the field scoped required and prohibited * matching documents into a global set of required and prohibited * matches */ var allRequiredMatches = lunr.Set.complete, allProhibitedMatches = lunr.Set.empty for (var i = 0; i < this.fields.length; i++) { var field = this.fields[i] if (requiredMatches[field]) { allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) } if (prohibitedMatches[field]) { allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) } } var matchingFieldRefs = Object.keys(matchingFields), results = [], matches = Object.create(null) /* * If the query is negated (contains only prohibited terms) * we need to get _all_ fieldRefs currently existing in the * index. This is only done when we know that the query is * entirely prohibited terms to avoid any cost of getting all * fieldRefs unnecessarily. * * Additionally, blank MatchData must be created to correctly * populate the results. */ if (query.isNegated()) { matchingFieldRefs = Object.keys(this.fieldVectors) for (var i = 0; i < matchingFieldRefs.length; i++) { var matchingFieldRef = matchingFieldRefs[i] var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) matchingFields[matchingFieldRef] = new lunr.MatchData } } for (var i = 0; i < matchingFieldRefs.length; i++) { /* * Currently we have document fields that match the query, but we * need to return documents. The matchData and scores are combined * from multiple fields belonging to the same document. * * Scores are calculated by field, using the query vectors created * above, and combined into a final document score using addition. */ var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), docRef = fieldRef.docRef if (!allRequiredMatches.contains(docRef)) { continue } if (allProhibitedMatches.contains(docRef)) { continue } var fieldVector = this.fieldVectors[fieldRef], score = queryVectors[fieldRef.fieldName].similarity(fieldVector), docMatch if ((docMatch = matches[docRef]) !== undefined) { docMatch.score += score docMatch.matchData.combine(matchingFields[fieldRef]) } else { var match = { ref: docRef, score: score, matchData: matchingFields[fieldRef] } matches[docRef] = match results.push(match) } } /* * Sort the results objects by score, highest first. */ return results.sort(function (a, b) { return b.score - a.score }) } /** * Prepares the index for JSON serialization. * * The schema for this JSON blob will be described in a * separate JSON schema file. * * @returns {Object} */ lunr.Index.prototype.toJSON = function () { var invertedIndex = Object.keys(this.invertedIndex) .sort() .map(function (term) { return [term, this.invertedIndex[term]] }, this) var fieldVectors = Object.keys(this.fieldVectors) .map(function (ref) { return [ref, this.fieldVectors[ref].toJSON()] }, this) return { version: lunr.version, fields: this.fields, fieldVectors: fieldVectors, invertedIndex: invertedIndex, pipeline: this.pipeline.toJSON() } } /** * Loads a previously serialized lunr.Index * * @param {Object} serializedIndex - A previously serialized lunr.Index * @returns {lunr.Index} */ lunr.Index.load = function (serializedIndex) { var attrs = {}, fieldVectors = {}, serializedVectors = serializedIndex.fieldVectors, invertedIndex = Object.create(null), serializedInvertedIndex = serializedIndex.invertedIndex, tokenSetBuilder = new lunr.TokenSet.Builder, pipeline = lunr.Pipeline.load(serializedIndex.pipeline) if (serializedIndex.version != lunr.version) { lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") } for (var i = 0; i < serializedVectors.length; i++) { var tuple = serializedVectors[i], ref = tuple[0], elements = tuple[1] fieldVectors[ref] = new lunr.Vector(elements) } for (var i = 0; i < serializedInvertedIndex.length; i++) { var tuple = serializedInvertedIndex[i], term = tuple[0], posting = tuple[1] tokenSetBuilder.insert(term) invertedIndex[term] = posting } tokenSetBuilder.finish() attrs.fields = serializedIndex.fields attrs.fieldVectors = fieldVectors attrs.invertedIndex = invertedIndex attrs.tokenSet = tokenSetBuilder.root attrs.pipeline = pipeline return new lunr.Index(attrs) } /*! * lunr.Builder * Copyright (C) 2020 Oliver Nightingale */ /** * lunr.Builder performs indexing on a set of documents and * returns instances of lunr.Index ready for querying. * * All configuration of the index is done via the builder, the * fields to index, the document reference, the text processing * pipeline and document scoring parameters are all set on the * builder before indexing. * * @constructor * @property {string} _ref - Internal reference to the document reference field. * @property {string[]} _fields - Internal reference to the document fields to index. * @property {object} invertedIndex - The inverted index maps terms to document fields. * @property {object} documentTermFrequencies - Keeps track of document term frequencies. * @property {object} documentLengths - Keeps track of the length of documents added to the index. * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. * @property {number} documentCount - Keeps track of the total number of documents indexed. * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. */ lunr.Builder = function () { this._ref = "id" this._fields = Object.create(null) this._documents = Object.create(null) this.invertedIndex = Object.create(null) this.fieldTermFrequencies = {} this.fieldLengths = {} this.tokenizer = lunr.tokenizer this.pipeline = new lunr.Pipeline this.searchPipeline = new lunr.Pipeline this.documentCount = 0 this._b = 0.75 this._k1 = 1.2 this.termIndex = 0 this.metadataWhitelist = [] } /** * Sets the document field used as the document reference. Every document must have this field. * The type of this field in the document should be a string, if it is not a string it will be * coerced into a string by calling toString. * * The default ref is 'id'. * * The ref should _not_ be changed during indexing, it should be set before any documents are * added to the index. Changing it during indexing can lead to inconsistent results. * * @param {string} ref - The name of the reference field in the document. */ lunr.Builder.prototype.ref = function (ref) { this._ref = ref } /** * A function that is used to extract a field from a document. * * Lunr expects a field to be at the top level of a document, if however the field * is deeply nested within a document an extractor function can be used to extract * the right field for indexing. * * @callback fieldExtractor * @param {object} doc - The document being added to the index. * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. * @example Extracting a nested field * function (doc) { return doc.nested.field } */ /** * Adds a field to the list of document fields that will be indexed. Every document being * indexed should have this field. Null values for this field in indexed documents will * not cause errors but will limit the chance of that document being retrieved by searches. * * All fields should be added before adding documents to the index. Adding fields after * a document has been indexed will have no effect on already indexed documents. * * Fields can be boosted at build time. This allows terms within that field to have more * importance when ranking search results. Use a field boost to specify that matches within * one field are more important than other fields. * * @param {string} fieldName - The name of a field to index in all documents. * @param {object} attributes - Optional attributes associated with this field. * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. * @throws {RangeError} fieldName cannot contain unsupported characters '/' */ lunr.Builder.prototype.field = function (fieldName, attributes) { if (/\//.test(fieldName)) { throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") } this._fields[fieldName] = attributes || {} } /** * A parameter to tune the amount of field length normalisation that is applied when * calculating relevance scores. A value of 0 will completely disable any normalisation * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b * will be clamped to the range 0 - 1. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.b = function (number) { if (number < 0) { this._b = 0 } else if (number > 1) { this._b = 1 } else { this._b = number } } /** * A parameter that controls the speed at which a rise in term frequency results in term * frequency saturation. The default value is 1.2. Setting this to a higher value will give * slower saturation levels, a lower value will result in quicker saturation. * * @param {number} number - The value to set for this tuning parameter. */ lunr.Builder.prototype.k1 = function (number) { this._k1 = number } /** * Adds a document to the index. * * Before adding fields to the index the index should have been fully setup, with the document * ref and all fields to index already having been specified. * * The document must have a field name as specified by the ref (by default this is 'id') and * it should have all fields defined for indexing, though null or undefined values will not * cause errors. * * Entire documents can be boosted at build time. Applying a boost to a document indicates that * this document should rank higher in search results than other documents. * * @param {object} doc - The document to add to the index. * @param {object} attributes - Optional attributes associated with this document. * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. */ lunr.Builder.prototype.add = function (doc, attributes) { var docRef = doc[this._ref], fields = Object.keys(this._fields) this._documents[docRef] = attributes || {} this.documentCount += 1 for (var i = 0; i < fields.length; i++) { var fieldName = fields[i], extractor = this._fields[fieldName].extractor, field = extractor ? extractor(doc) : doc[fieldName], tokens = this.tokenizer(field, { fields: [fieldName] }), terms = this.pipeline.run(tokens), fieldRef = new lunr.FieldRef (docRef, fieldName), fieldTerms = Object.create(null) this.fieldTermFrequencies[fieldRef] = fieldTerms this.fieldLengths[fieldRef] = 0 // store the length of this field for this document this.fieldLengths[fieldRef] += terms.length // calculate term frequencies for this field for (var j = 0; j < terms.length; j++) { var term = terms[j] if (fieldTerms[term] == undefined) { fieldTerms[term] = 0 } fieldTerms[term] += 1 // add to inverted index // create an initial posting if one doesn't exist if (this.invertedIndex[term] == undefined) { var posting = Object.create(null) posting["_index"] = this.termIndex this.termIndex += 1 for (var k = 0; k < fields.length; k++) { posting[fields[k]] = Object.create(null) } this.invertedIndex[term] = posting } // add an entry for this term/fieldName/docRef to the invertedIndex if (this.invertedIndex[term][fieldName][docRef] == undefined) { this.invertedIndex[term][fieldName][docRef] = Object.create(null) } // store all whitelisted metadata about this token in the // inverted index for (var l = 0; l < this.metadataWhitelist.length; l++) { var metadataKey = this.metadataWhitelist[l], metadata = term.metadata[metadataKey] if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { this.invertedIndex[term][fieldName][docRef][metadataKey] = [] } this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) } } } } /** * Calculates the average document length for this index * * @private */ lunr.Builder.prototype.calculateAverageFieldLengths = function () { var fieldRefs = Object.keys(this.fieldLengths), numberOfFields = fieldRefs.length, accumulator = {}, documentsWithField = {} for (var i = 0; i < numberOfFields; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), field = fieldRef.fieldName documentsWithField[field] || (documentsWithField[field] = 0) documentsWithField[field] += 1 accumulator[field] || (accumulator[field] = 0) accumulator[field] += this.fieldLengths[fieldRef] } var fields = Object.keys(this._fields) for (var i = 0; i < fields.length; i++) { var fieldName = fields[i] accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] } this.averageFieldLength = accumulator } /** * Builds a vector space model of every document using lunr.Vector * * @private */ lunr.Builder.prototype.createFieldVectors = function () { var fieldVectors = {}, fieldRefs = Object.keys(this.fieldTermFrequencies), fieldRefsLength = fieldRefs.length, termIdfCache = Object.create(null) for (var i = 0; i < fieldRefsLength; i++) { var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), fieldName = fieldRef.fieldName, fieldLength = this.fieldLengths[fieldRef], fieldVector = new lunr.Vector, termFrequencies = this.fieldTermFrequencies[fieldRef], terms = Object.keys(termFrequencies), termsLength = terms.length var fieldBoost = this._fields[fieldName].boost || 1, docBoost = this._documents[fieldRef.docRef].boost || 1 for (var j = 0; j < termsLength; j++) { var term = terms[j], tf = termFrequencies[term], termIndex = this.invertedIndex[term]._index, idf, score, scoreWithPrecision if (termIdfCache[term] === undefined) { idf = lunr.idf(this.invertedIndex[term], this.documentCount) termIdfCache[term] = idf } else { idf = termIdfCache[term] } score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) score *= fieldBoost score *= docBoost scoreWithPrecision = Math.round(score * 1000) / 1000 // Converts 1.23456789 to 1.234. // Reducing the precision so that the vectors take up less // space when serialised. Doing it now so that they behave // the same before and after serialisation. Also, this is // the fastest approach to reducing a number's precision in // JavaScript. fieldVector.insert(termIndex, scoreWithPrecision) } fieldVectors[fieldRef] = fieldVector } this.fieldVectors = fieldVectors } /** * Creates a token set of all tokens in the index using lunr.TokenSet * * @private */ lunr.Builder.prototype.createTokenSet = function () { this.tokenSet = lunr.TokenSet.fromArray( Object.keys(this.invertedIndex).sort() ) } /** * Builds the index, creating an instance of lunr.Index. * * This completes the indexing process and should only be called * once all documents have been added to the index. * * @returns {lunr.Index} */ lunr.Builder.prototype.build = function () { this.calculateAverageFieldLengths() this.createFieldVectors() this.createTokenSet() return new lunr.Index({ invertedIndex: this.invertedIndex, fieldVectors: this.fieldVectors, tokenSet: this.tokenSet, fields: Object.keys(this._fields), pipeline: this.searchPipeline }) } /** * Applies a plugin to the index builder. * * A plugin is a function that is called with the index builder as its context. * Plugins can be used to customise or extend the behaviour of the index * in some way. A plugin is just a function, that encapsulated the custom * behaviour that should be applied when building the index. * * The plugin function will be called with the index builder as its argument, additional * arguments can also be passed when calling use. The function will be called * with the index builder as its context. * * @param {Function} plugin The plugin to apply. */ lunr.Builder.prototype.use = function (fn) { var args = Array.prototype.slice.call(arguments, 1) args.unshift(this) fn.apply(this, args) } /** * Contains and collects metadata about a matching document. * A single instance of lunr.MatchData is returned as part of every * lunr.Index~Result. * * @constructor * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field * @property {object} metadata - A cloned collection of metadata associated with this document. * @see {@link lunr.Index~Result} */ lunr.MatchData = function (term, field, metadata) { var clonedMetadata = Object.create(null), metadataKeys = Object.keys(metadata || {}) // Cloning the metadata to prevent the original // being mutated during match data combination. // Metadata is kept in an array within the inverted // index so cloning the data can be done with // Array#slice for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] clonedMetadata[key] = metadata[key].slice() } this.metadata = Object.create(null) if (term !== undefined) { this.metadata[term] = Object.create(null) this.metadata[term][field] = clonedMetadata } } /** * An instance of lunr.MatchData will be created for every term that matches a * document. However only one instance is required in a lunr.Index~Result. This * method combines metadata from another instance of lunr.MatchData with this * objects metadata. * * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. * @see {@link lunr.Index~Result} */ lunr.MatchData.prototype.combine = function (otherMatchData) { var terms = Object.keys(otherMatchData.metadata) for (var i = 0; i < terms.length; i++) { var term = terms[i], fields = Object.keys(otherMatchData.metadata[term]) if (this.metadata[term] == undefined) { this.metadata[term] = Object.create(null) } for (var j = 0; j < fields.length; j++) { var field = fields[j], keys = Object.keys(otherMatchData.metadata[term][field]) if (this.metadata[term][field] == undefined) { this.metadata[term][field] = Object.create(null) } for (var k = 0; k < keys.length; k++) { var key = keys[k] if (this.metadata[term][field][key] == undefined) { this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] } else { this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) } } } } } /** * Add metadata for a term/field pair to this instance of match data. * * @param {string} term - The term this match data is associated with * @param {string} field - The field in which the term was found * @param {object} metadata - The metadata recorded about this term in this field */ lunr.MatchData.prototype.add = function (term, field, metadata) { if (!(term in this.metadata)) { this.metadata[term] = Object.create(null) this.metadata[term][field] = metadata return } if (!(field in this.metadata[term])) { this.metadata[term][field] = metadata return } var metadataKeys = Object.keys(metadata) for (var i = 0; i < metadataKeys.length; i++) { var key = metadataKeys[i] if (key in this.metadata[term][field]) { this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) } else { this.metadata[term][field][key] = metadata[key] } } } /** * A lunr.Query provides a programmatic way of defining queries to be performed * against a {@link lunr.Index}. * * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method * so the query object is pre-initialized with the right index fields. * * @constructor * @property {lunr.Query~Clause[]} clauses - An array of query clauses. * @property {string[]} allFields - An array of all available fields in a lunr.Index. */ lunr.Query = function (allFields) { this.clauses = [] this.allFields = allFields } /** * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. * * This allows wildcards to be added to the beginning and end of a term without having to manually do any string * concatenation. * * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. * * @constant * @default * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with trailing wildcard * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) * @example query term with leading and trailing wildcard * query.term('foo', { * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING * }) */ lunr.Query.wildcard = new String ("*") lunr.Query.wildcard.NONE = 0 lunr.Query.wildcard.LEADING = 1 lunr.Query.wildcard.TRAILING = 2 /** * Constants for indicating what kind of presence a term must have in matching documents. * * @constant * @enum {number} * @see lunr.Query~Clause * @see lunr.Query#clause * @see lunr.Query#term * @example query term with required presence * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) */ lunr.Query.presence = { /** * Term's presence in a document is optional, this is the default value. */ OPTIONAL: 1, /** * Term's presence in a document is required, documents that do not contain * this term will not be returned. */ REQUIRED: 2, /** * Term's presence in a document is prohibited, documents that do contain * this term will not be returned. */ PROHIBITED: 3 } /** * A single clause in a {@link lunr.Query} contains a term and details on how to * match that term against a {@link lunr.Index}. * * @typedef {Object} lunr.Query~Clause * @property {string[]} fields - The fields in an index this clause should be matched against. * @property {number} [boost=1] - Any boost that should be applied when matching this clause. * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. */ /** * Adds a {@link lunr.Query~Clause} to this query. * * Unless the clause contains the fields to be matched all fields will be matched. In addition * a default boost of 1 is applied to the clause. * * @param {lunr.Query~Clause} clause - The clause to add to this query. * @see lunr.Query~Clause * @returns {lunr.Query} */ lunr.Query.prototype.clause = function (clause) { if (!('fields' in clause)) { clause.fields = this.allFields } if (!('boost' in clause)) { clause.boost = 1 } if (!('usePipeline' in clause)) { clause.usePipeline = true } if (!('wildcard' in clause)) { clause.wildcard = lunr.Query.wildcard.NONE } if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { clause.term = "*" + clause.term } if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { clause.term = "" + clause.term + "*" } if (!('presence' in clause)) { clause.presence = lunr.Query.presence.OPTIONAL } this.clauses.push(clause) return this } /** * A negated query is one in which every clause has a presence of * prohibited. These queries require some special processing to return * the expected results. * * @returns boolean */ lunr.Query.prototype.isNegated = function () { for (var i = 0; i < this.clauses.length; i++) { if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { return false } } return true } /** * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} * to the list of clauses that make up this query. * * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion * to a token or token-like string should be done before calling this method. * * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an * array, each term in the array will share the same options. * * @param {object|object[]} term - The term(s) to add to the query. * @param {object} [options] - Any additional properties to add to the query clause. * @returns {lunr.Query} * @see lunr.Query#clause * @see lunr.Query~Clause * @example adding a single term to a query * query.term("foo") * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard * query.term("foo", { * fields: ["title"], * boost: 10, * wildcard: lunr.Query.wildcard.TRAILING * }) * @example using lunr.tokenizer to convert a string to tokens before using them as terms * query.term(lunr.tokenizer("foo bar")) */ lunr.Query.prototype.term = function (term, options) { if (Array.isArray(term)) { term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) return this } var clause = options || {} clause.term = term.toString() this.clause(clause) return this } lunr.QueryParseError = function (message, start, end) { this.name = "QueryParseError" this.message = message this.start = start this.end = end } lunr.QueryParseError.prototype = new Error lunr.QueryLexer = function (str) { this.lexemes = [] this.str = str this.length = str.length this.pos = 0 this.start = 0 this.escapeCharPositions = [] } lunr.QueryLexer.prototype.run = function () { var state = lunr.QueryLexer.lexText while (state) { state = state(this) } } lunr.QueryLexer.prototype.sliceString = function () { var subSlices = [], sliceStart = this.start, sliceEnd = this.pos for (var i = 0; i < this.escapeCharPositions.length; i++) { sliceEnd = this.escapeCharPositions[i] subSlices.push(this.str.slice(sliceStart, sliceEnd)) sliceStart = sliceEnd + 1 } subSlices.push(this.str.slice(sliceStart, this.pos)) this.escapeCharPositions.length = 0 return subSlices.join('') } lunr.QueryLexer.prototype.emit = function (type) { this.lexemes.push({ type: type, str: this.sliceString(), start: this.start, end: this.pos }) this.start = this.pos } lunr.QueryLexer.prototype.escapeCharacter = function () { this.escapeCharPositions.push(this.pos - 1) this.pos += 1 } lunr.QueryLexer.prototype.next = function () { if (this.pos >= this.length) { return lunr.QueryLexer.EOS } var char = this.str.charAt(this.pos) this.pos += 1 return char } lunr.QueryLexer.prototype.width = function () { return this.pos - this.start } lunr.QueryLexer.prototype.ignore = function () { if (this.start == this.pos) { this.pos += 1 } this.start = this.pos } lunr.QueryLexer.prototype.backup = function () { this.pos -= 1 } lunr.QueryLexer.prototype.acceptDigitRun = function () { var char, charCode do { char = this.next() charCode = char.charCodeAt(0) } while (charCode > 47 && charCode < 58) if (char != lunr.QueryLexer.EOS) { this.backup() } } lunr.QueryLexer.prototype.more = function () { return this.pos < this.length } lunr.QueryLexer.EOS = 'EOS' lunr.QueryLexer.FIELD = 'FIELD' lunr.QueryLexer.TERM = 'TERM' lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' lunr.QueryLexer.BOOST = 'BOOST' lunr.QueryLexer.PRESENCE = 'PRESENCE' lunr.QueryLexer.lexField = function (lexer) { lexer.backup() lexer.emit(lunr.QueryLexer.FIELD) lexer.ignore() return lunr.QueryLexer.lexText } lunr.QueryLexer.lexTerm = function (lexer) { if (lexer.width() > 1) { lexer.backup() lexer.emit(lunr.QueryLexer.TERM) } lexer.ignore() if (lexer.more()) { return lunr.QueryLexer.lexText } } lunr.QueryLexer.lexEditDistance = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexBoost = function (lexer) { lexer.ignore() lexer.acceptDigitRun() lexer.emit(lunr.QueryLexer.BOOST) return lunr.QueryLexer.lexText } lunr.QueryLexer.lexEOS = function (lexer) { if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } } // This matches the separator used when tokenising fields // within a document. These should match otherwise it is // not possible to search for some tokens within a document. // // It is possible for the user to change the separator on the // tokenizer so it _might_ clash with any other of the special // characters already used within the search string, e.g. :. // // This means that it is possible to change the separator in // such a way that makes some words unsearchable using a search // string. lunr.QueryLexer.termSeparator = lunr.tokenizer.separator lunr.QueryLexer.lexText = function (lexer) { while (true) { var char = lexer.next() if (char == lunr.QueryLexer.EOS) { return lunr.QueryLexer.lexEOS } // Escape character is '\' if (char.charCodeAt(0) == 92) { lexer.escapeCharacter() continue } if (char == ":") { return lunr.QueryLexer.lexField } if (char == "~") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexEditDistance } if (char == "^") { lexer.backup() if (lexer.width() > 0) { lexer.emit(lunr.QueryLexer.TERM) } return lunr.QueryLexer.lexBoost } // "+" indicates term presence is required // checking for length to ensure that only // leading "+" are considered if (char == "+" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } // "-" indicates term presence is prohibited // checking for length to ensure that only // leading "-" are considered if (char == "-" && lexer.width() === 1) { lexer.emit(lunr.QueryLexer.PRESENCE) return lunr.QueryLexer.lexText } if (char.match(lunr.QueryLexer.termSeparator)) { return lunr.QueryLexer.lexTerm } } } lunr.QueryParser = function (str, query) { this.lexer = new lunr.QueryLexer (str) this.query = query this.currentClause = {} this.lexemeIdx = 0 } lunr.QueryParser.prototype.parse = function () { this.lexer.run() this.lexemes = this.lexer.lexemes var state = lunr.QueryParser.parseClause while (state) { state = state(this) } return this.query } lunr.QueryParser.prototype.peekLexeme = function () { return this.lexemes[this.lexemeIdx] } lunr.QueryParser.prototype.consumeLexeme = function () { var lexeme = this.peekLexeme() this.lexemeIdx += 1 return lexeme } lunr.QueryParser.prototype.nextClause = function () { var completedClause = this.currentClause this.query.clause(completedClause) this.currentClause = {} } lunr.QueryParser.parseClause = function (parser) { var lexeme = parser.peekLexeme() if (lexeme == undefined) { return } switch (lexeme.type) { case lunr.QueryLexer.PRESENCE: return lunr.QueryParser.parsePresence case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expected either a field or a term, found " + lexeme.type if (lexeme.str.length >= 1) { errorMessage += " with value '" + lexeme.str + "'" } throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } } lunr.QueryParser.parsePresence = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } switch (lexeme.str) { case "-": parser.currentClause.presence = lunr.Query.presence.PROHIBITED break case "+": parser.currentClause.presence = lunr.Query.presence.REQUIRED break default: var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term or field, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.FIELD: return lunr.QueryParser.parseField case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseField = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } if (parser.query.allFields.indexOf(lexeme.str) == -1) { var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.fields = [lexeme.str] var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { var errorMessage = "expecting term, found nothing" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: return lunr.QueryParser.parseTerm default: var errorMessage = "expecting term, found '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseTerm = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } parser.currentClause.term = lexeme.str.toLowerCase() if (lexeme.str.indexOf("*") != -1) { parser.currentClause.usePipeline = false } var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseEditDistance = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var editDistance = parseInt(lexeme.str, 10) if (isNaN(editDistance)) { var errorMessage = "edit distance must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.editDistance = editDistance var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } lunr.QueryParser.parseBoost = function (parser) { var lexeme = parser.consumeLexeme() if (lexeme == undefined) { return } var boost = parseInt(lexeme.str, 10) if (isNaN(boost)) { var errorMessage = "boost must be numeric" throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) } parser.currentClause.boost = boost var nextLexeme = parser.peekLexeme() if (nextLexeme == undefined) { parser.nextClause() return } switch (nextLexeme.type) { case lunr.QueryLexer.TERM: parser.nextClause() return lunr.QueryParser.parseTerm case lunr.QueryLexer.FIELD: parser.nextClause() return lunr.QueryParser.parseField case lunr.QueryLexer.EDIT_DISTANCE: return lunr.QueryParser.parseEditDistance case lunr.QueryLexer.BOOST: return lunr.QueryParser.parseBoost case lunr.QueryLexer.PRESENCE: parser.nextClause() return lunr.QueryParser.parsePresence default: var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) } } /** * export the module via AMD, CommonJS or as a browser global * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js */ ;(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === 'object') { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) root.lunr = factory() } }(this, function () { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return lunr })) })(); python-mkdocs-1.5.3/mkdocs/contrib/search/templates/search/main.js0000644000175000017500000000620614502137725025123 0ustar carstencarstenfunction getSearchTermFromLocation() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); } } } function joinUrl (base, path) { if (path.substring(0, 1) === "/") { // path starts with `/`. Thus it is absolute. return path; } if (base.substring(base.length-1) === "/") { // base ends with `/` return base + path; } return base + "/" + path; } function escapeHtml (value) { return value.replace(/&/g, '&') .replace(/"/g, '"') .replace(//g, '>'); } function formatResult (location, title, summary) { return ''; } function displayResults (results) { var search_results = document.getElementById("mkdocs-search-results"); while (search_results.firstChild) { search_results.removeChild(search_results.firstChild); } if (results.length > 0){ for (var i=0; i < results.length; i++){ var result = results[i]; var html = formatResult(result.location, result.title, result.summary); search_results.insertAdjacentHTML('beforeend', html); } } else { var noResultsText = search_results.getAttribute('data-no-results-text'); if (!noResultsText) { noResultsText = "No results found"; } search_results.insertAdjacentHTML('beforeend', '

' + noResultsText + '

'); } } function doSearch () { var query = document.getElementById('mkdocs-search-query').value; if (query.length > min_search_length) { if (!window.Worker) { displayResults(search(query)); } else { searchWorker.postMessage({query: query}); } } else { // Clear results for short queries displayResults([]); } } function initSearch () { var search_input = document.getElementById('mkdocs-search-query'); if (search_input) { search_input.addEventListener("keyup", doSearch); } var term = getSearchTermFromLocation(); if (term) { search_input.value = term; doSearch(); } } function onWorkerMessage (e) { if (e.data.allowSearch) { initSearch(); } else if (e.data.results) { var results = e.data.results; displayResults(results); } else if (e.data.config) { min_search_length = e.data.config.min_search_length-1; } } if (!window.Worker) { console.log('Web Worker API not supported'); // load index in main thread $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { console.log('Loaded worker'); init(); window.postMessage = function (msg) { onWorkerMessage({data: msg}); }; }).fail(function (jqxhr, settings, exception) { console.error('Could not load worker.js'); }); } else { // Wrap search in a web worker var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); searchWorker.postMessage({init: true}); searchWorker.onmessage = onWorkerMessage; } python-mkdocs-1.5.3/mkdocs/contrib/search/templates/search/worker.js0000644000175000017500000000721414502137725025510 0ustar carstencarstenvar base_path = 'function' === typeof importScripts ? '.' : '/search/'; var allowSearch = false; var index; var documents = {}; var lang = ['en']; var data; function getScript(script, callback) { console.log('Loading script: ' + script); $.getScript(base_path + script).done(function () { callback(); }).fail(function (jqxhr, settings, exception) { console.log('Error: ' + exception); }); } function getScriptsInOrder(scripts, callback) { if (scripts.length === 0) { callback(); return; } getScript(scripts[0], function() { getScriptsInOrder(scripts.slice(1), callback); }); } function loadScripts(urls, callback) { if( 'function' === typeof importScripts ) { importScripts.apply(null, urls); callback(); } else { getScriptsInOrder(urls, callback); } } function onJSONLoaded () { data = JSON.parse(this.responseText); var scriptsToLoad = ['lunr.js']; if (data.config && data.config.lang && data.config.lang.length) { lang = data.config.lang; } if (lang.length > 1 || lang[0] !== "en") { scriptsToLoad.push('lunr.stemmer.support.js'); if (lang.length > 1) { scriptsToLoad.push('lunr.multi.js'); } if (lang.includes("ja") || lang.includes("jp")) { scriptsToLoad.push('tinyseg.js'); } for (var i=0; i < lang.length; i++) { if (lang[i] != 'en') { scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); } } } loadScripts(scriptsToLoad, onScriptsLoaded); } function onScriptsLoaded () { console.log('All search scripts loaded, building Lunr index...'); if (data.config && data.config.separator && data.config.separator.length) { lunr.tokenizer.separator = new RegExp(data.config.separator); } if (data.index) { index = lunr.Index.load(data.index); data.docs.forEach(function (doc) { documents[doc.location] = doc; }); console.log('Lunr pre-built index loaded, search ready'); } else { index = lunr(function () { if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { this.use(lunr[lang[0]]); } else if (lang.length > 1) { this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility } this.field('title'); this.field('text'); this.ref('location'); for (var i=0; i < data.docs.length; i++) { var doc = data.docs[i]; this.add(doc); documents[doc.location] = doc; } }); console.log('Lunr index built, search ready'); } allowSearch = true; postMessage({config: data.config}); postMessage({allowSearch: allowSearch}); } function init () { var oReq = new XMLHttpRequest(); oReq.addEventListener("load", onJSONLoaded); var index_path = base_path + '/search_index.json'; if( 'function' === typeof importScripts ){ index_path = 'search_index.json'; } oReq.open("GET", index_path); oReq.send(); } function search (query) { if (!allowSearch) { console.error('Assets for search still loading'); return; } var resultDocuments = []; var results = index.search(query); for (var i=0; i < results.length; i++){ var result = results[i]; doc = documents[result.ref]; doc.summary = doc.text.substring(0, 200); resultDocuments.push(doc); } return resultDocuments; } if( 'function' === typeof importScripts ) { onmessage = function (e) { if (e.data.init) { init(); } else if (e.data.query) { postMessage({ results: search(e.data.query) }); } else { console.error("Worker - Unrecognized message: " + e); } }; } python-mkdocs-1.5.3/mkdocs/contrib/search/prebuild-index.js0000644000175000017500000000273014502137725023645 0ustar carstencarstenvar lunr = require('./templates/search/lunr'), stdin = process.stdin, stdout = process.stdout, buffer = []; stdin.resume(); stdin.setEncoding('utf8'); stdin.on('data', function (data) { buffer.push(data); }); stdin.on('end', function () { var data = JSON.parse(buffer.join('')), lang = ['en']; if (data.config) { if (data.config.lang && data.config.lang.length) { lang = data.config.lang; if (lang.length > 1 || lang[0] !== "en") { require('./lunr-language/lunr.stemmer.support')(lunr); if (lang.length > 1) { require('./lunr-language/lunr.multi')(lunr); } if (lang.includes("ja") || lang.includes("jp")) { require('./lunr-language/tinyseg')(lunr); } for (var i=0; i < lang.length; i++) { if (lang[i] != 'en') { require('./lunr-language/lunr.' + lang[i])(lunr); } } } } if (data.config.separator && data.config.separator.length) { lunr.tokenizer.separator = new RegExp(data.config.separator); } } var idx = lunr(function () { if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { this.use(lunr[lang[0]]); } else if (lang.length > 1) { this.use(lunr.multiLanguage.apply(null, lang)); } this.field('title'); this.field('text'); this.ref('location'); data.docs.forEach(function (doc) { this.add(doc); }, this); }); stdout.write(JSON.stringify(idx)); }); python-mkdocs-1.5.3/mkdocs/contrib/search/search_index.py0000644000175000017500000001743514502137725023412 0ustar carstencarstenfrom __future__ import annotations import json import logging import os import re import subprocess from html.parser import HTMLParser from typing import TYPE_CHECKING if TYPE_CHECKING: from mkdocs.structure.pages import Page from mkdocs.structure.toc import AnchorLink, TableOfContents try: from lunr import lunr haslunrpy = True except ImportError: haslunrpy = False log = logging.getLogger(__name__) class SearchIndex: """ Search index is a collection of pages and sections (heading tags and their following content are sections). """ def __init__(self, **config) -> None: self._entries: list[dict] = [] self.config = config def _find_toc_by_id(self, toc, id_: str | None) -> AnchorLink | None: """ Given a table of contents and HTML ID, iterate through and return the matched item in the TOC. """ for toc_item in toc: if toc_item.id == id_: return toc_item toc_item_r = self._find_toc_by_id(toc_item.children, id_) if toc_item_r is not None: return toc_item_r return None def _add_entry(self, title: str | None, text: str, loc: str) -> None: """ A simple wrapper to add an entry, dropping bad characters. """ text = text.replace('\u00a0', ' ') text = re.sub(r'[ \t\n\r\f\v]+', ' ', text.strip()) self._entries.append({'title': title, 'text': text, 'location': loc}) def add_entry_from_context(self, page: Page) -> None: """ Create a set of entries in the index for a page. One for the page itself and then one for each of its' heading tags. """ # Create the content parser and feed in the HTML for the # full page. This handles all the parsing and prepares # us to iterate through it. parser = ContentParser() assert page.content is not None parser.feed(page.content) parser.close() # Get the absolute URL for the page, this is then # prepended to the urls of the sections url = page.url # Create an entry for the full page. text = parser.stripped_html.rstrip('\n') if self.config['indexing'] == 'full' else '' self._add_entry(title=page.title, text=text, loc=url) if self.config['indexing'] in ['full', 'sections']: for section in parser.data: self.create_entry_for_section(section, page.toc, url) def create_entry_for_section( self, section: ContentSection, toc: TableOfContents, abs_url: str ) -> None: """ Given a section on the page, the table of contents and the absolute url for the page create an entry in the index """ toc_item = self._find_toc_by_id(toc, section.id) text = ' '.join(section.text) if self.config['indexing'] == 'full' else '' if toc_item is not None: self._add_entry(title=toc_item.title, text=text, loc=abs_url + toc_item.url) def generate_search_index(self) -> str: """python to json conversion""" page_dicts = {'docs': self._entries, 'config': self.config} data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':'), default=str) if self.config['prebuild_index'] in (True, 'node'): try: script_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'prebuild-index.js' ) p = subprocess.Popen( ['node', script_path], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8', ) idx, err = p.communicate(data) if not err: page_dicts['index'] = json.loads(idx) data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':')) log.debug('Pre-built search index created successfully.') else: log.warning(f'Failed to pre-build search index. Error: {err}') except (OSError, ValueError) as e: log.warning(f'Failed to pre-build search index. Error: {e}') elif self.config['prebuild_index'] == 'python': if haslunrpy: lunr_idx = lunr( ref='location', fields=('title', 'text'), documents=self._entries, languages=self.config['lang'], ) page_dicts['index'] = lunr_idx.serialize() data = json.dumps(page_dicts, sort_keys=True, separators=(',', ':')) else: log.warning( "Failed to pre-build search index. The 'python' method was specified; " "however, the 'lunr.py' library does not appear to be installed. Try " "installing it with 'pip install lunr'. If you are using any language " "other than English you will also need to install 'lunr[languages]'." ) return data class ContentSection: """ Used by the ContentParser class to capture the information we need when it is parsing the HTML. """ def __init__( self, text: list[str] | None = None, id_: str | None = None, title: str | None = None, ) -> None: self.text = text or [] self.id = id_ self.title = title def __eq__(self, other): return self.text == other.text and self.id == other.id and self.title == other.title _HEADER_TAGS = tuple(f"h{x}" for x in range(1, 7)) class ContentParser(HTMLParser): """ Given a block of HTML, group the content under the preceding heading tags which can then be used for creating an index for that section. """ def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.data: list[ContentSection] = [] self.section: ContentSection | None = None self.is_header_tag = False self._stripped_html: list[str] = [] def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: """Called at the start of every HTML tag.""" # We only care about the opening tag for headings. if tag not in _HEADER_TAGS: return # We are dealing with a new header, create a new section # for it and assign the ID if it has one. self.is_header_tag = True self.section = ContentSection() self.data.append(self.section) for attr in attrs: if attr[0] == "id": self.section.id = attr[1] def handle_endtag(self, tag: str) -> None: """Called at the end of every HTML tag.""" # We only care about the opening tag for headings. if tag not in _HEADER_TAGS: return self.is_header_tag = False def handle_data(self, data: str) -> None: """ Called for the text contents of each tag. """ self._stripped_html.append(data) if self.section is None: # This means we have some content at the start of the # HTML before we reach a heading tag. We don't actually # care about that content as it will be added to the # overall page entry in the search. So just skip it. return # If this is a header, then the data is the title. # Otherwise it is content of something under that header # section. if self.is_header_tag: self.section.title = data else: self.section.text.append(data.rstrip('\n')) @property def stripped_html(self) -> str: return '\n'.join(self._stripped_html) python-mkdocs-1.5.3/mkdocs/utils/0000755000175000017500000000000014502137725016625 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/utils/yaml.py0000644000175000017500000001161614502137725020146 0ustar carstencarstenfrom __future__ import annotations import functools import logging import os import os.path from typing import IO, TYPE_CHECKING, Any import mergedeep import yaml import yaml.constructor import yaml_env_tag from mkdocs import exceptions if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) def _construct_dir_placeholder( config: MkDocsConfig, loader: yaml.BaseLoader, node: yaml.ScalarNode ) -> _DirPlaceholder: loader.construct_scalar(node) value: str = (node and node.value) or '' prefix, _, suffix = value.partition('/') if prefix.startswith('$'): if prefix == '$config_dir': return ConfigDirPlaceholder(config, suffix) elif prefix == '$docs_dir': return DocsDirPlaceholder(config, suffix) else: raise exceptions.ConfigurationError( f"Unknown prefix {prefix!r} in {node.tag} {node.value!r}" ) else: return RelativeDirPlaceholder(config, value) class _DirPlaceholder(os.PathLike): def __init__(self, config: MkDocsConfig, suffix: str = ''): self.config = config self.suffix = suffix def value(self) -> str: raise NotImplementedError def __fspath__(self) -> str: """Can be used as a path.""" return os.path.join(self.value(), self.suffix) def __str__(self) -> str: """Can be converted to a string to obtain the current class.""" return self.__fspath__() class ConfigDirPlaceholder(_DirPlaceholder): """A placeholder object that gets resolved to the directory of the config file when used as a path. The suffix can be an additional sub-path that is always appended to this path. This is the implementation of the `!relative $config_dir/suffix` tag, but can also be passed programmatically. """ def value(self) -> str: return os.path.dirname(self.config.config_file_path) class DocsDirPlaceholder(_DirPlaceholder): """A placeholder object that gets resolved to the docs dir when used as a path. The suffix can be an additional sub-path that is always appended to this path. This is the implementation of the `!relative $docs_dir/suffix` tag, but can also be passed programmatically. """ def value(self) -> str: return self.config.docs_dir class RelativeDirPlaceholder(_DirPlaceholder): """A placeholder object that gets resolved to the directory of the Markdown file currently being rendered. This is the implementation of the `!relative` tag, but can also be passed programmatically. """ def __init__(self, config: MkDocsConfig, suffix: str = ''): if suffix: raise exceptions.ConfigurationError( f"'!relative' tag does not expect any value; received {suffix!r}" ) super().__init__(config, suffix) def value(self) -> str: if self.config._current_page is None: raise exceptions.ConfigurationError( "The current file is not set for the '!relative' tag. " "It cannot be used in this context; the intended usage is within `markdown_extensions`." ) return os.path.dirname(self.config._current_page.file.abs_src_path) def get_yaml_loader(loader=yaml.Loader, config: MkDocsConfig | None = None): """Wrap PyYaml's loader so we can extend it to suit our needs.""" class Loader(loader): """ Define a custom loader derived from the global loader to leave the global loader unaltered. """ # Attach Environment Variable constructor. # See https://github.com/waylan/pyyaml-env-tag Loader.add_constructor('!ENV', yaml_env_tag.construct_env_tag) if config is not None: Loader.add_constructor('!relative', functools.partial(_construct_dir_placeholder, config)) return Loader def yaml_load(source: IO | str, loader: type[yaml.BaseLoader] | None = None) -> dict[str, Any]: """Return dict of source YAML file using loader, recursively deep merging inherited parent.""" loader = loader or get_yaml_loader() try: result = yaml.load(source, Loader=loader) except yaml.YAMLError as e: raise exceptions.ConfigurationError( f"MkDocs encountered an error parsing the configuration file: {e}" ) if result is None: return {} if 'INHERIT' in result and not isinstance(source, str): relpath = result.pop('INHERIT') abspath = os.path.normpath(os.path.join(os.path.dirname(source.name), relpath)) if not os.path.exists(abspath): raise exceptions.ConfigurationError( f"Inherited config file '{relpath}' does not exist at '{abspath}'." ) log.debug(f"Loading inherited configuration file: {abspath}") with open(abspath, 'rb') as fd: parent = yaml_load(fd, loader) result = mergedeep.merge(parent, result) return result python-mkdocs-1.5.3/mkdocs/utils/babel_stub.py0000644000175000017500000000153414502137725021304 0ustar carstencarstenfrom __future__ import annotations from string import ascii_letters from typing import NamedTuple class UnknownLocaleError(Exception): pass class Locale(NamedTuple): language: str territory: str = '' def __str__(self): if self.territory: return f'{self.language}_{self.territory}' return self.language @classmethod def parse(cls, identifier, sep): if not isinstance(identifier, str): raise TypeError(f"Unexpected value for identifier: '{identifier}'") locale = cls(*identifier.split(sep, 1)) if not all(x in ascii_letters for x in locale.language): raise ValueError(f"expected only letters, got '{locale.language}'") if len(locale.language) != 2: raise UnknownLocaleError(f"unknown locale '{locale.language}'") return locale python-mkdocs-1.5.3/mkdocs/utils/__init__.py0000644000175000017500000003210014502137725020732 0ustar carstencarsten""" Standalone file utils. Nothing in this module should have an knowledge of config or the layout and structure of the site and pages in the site. """ from __future__ import annotations import functools import logging import os import posixpath import re import shutil import sys import warnings from collections import defaultdict from datetime import datetime, timezone from pathlib import PurePath from typing import TYPE_CHECKING, Collection, Iterable, MutableSequence, TypeVar from urllib.parse import urlsplit if sys.version_info >= (3, 10): from importlib.metadata import EntryPoint, entry_points else: from importlib_metadata import EntryPoint, entry_points from mkdocs import exceptions from mkdocs.utils.yaml import get_yaml_loader, yaml_load # noqa: F401 - legacy re-export if TYPE_CHECKING: from mkdocs.structure.pages import Page T = TypeVar('T') log = logging.getLogger(__name__) markdown_extensions = ( '.markdown', '.mdown', '.mkdn', '.mkd', '.md', ) def modified_time(file_path): warnings.warn( "modified_time is never used in MkDocs and will be removed soon.", DeprecationWarning ) if os.path.exists(file_path): return os.path.getmtime(file_path) else: return 0.0 def get_build_timestamp() -> int: """ Returns the number of seconds since the epoch. Support SOURCE_DATE_EPOCH environment variable for reproducible builds. See https://reproducible-builds.org/specs/source-date-epoch/ """ source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') if source_date_epoch is None: return int(datetime.now(timezone.utc).timestamp()) return int(source_date_epoch) def get_build_datetime() -> datetime: """ Returns an aware datetime object. Support SOURCE_DATE_EPOCH environment variable for reproducible builds. See https://reproducible-builds.org/specs/source-date-epoch/ """ source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') if source_date_epoch is None: return datetime.now(timezone.utc) return datetime.fromtimestamp(int(source_date_epoch), timezone.utc) def get_build_date() -> str: """ Returns the displayable date string. Support SOURCE_DATE_EPOCH environment variable for reproducible builds. See https://reproducible-builds.org/specs/source-date-epoch/ """ return get_build_datetime().strftime('%Y-%m-%d') if sys.version_info >= (3, 9): _removesuffix = str.removesuffix else: def _removesuffix(s: str, suffix: str) -> str: if suffix and s.endswith(suffix): return s[: -len(suffix)] return s def reduce_list(data_set: Iterable[T]) -> list[T]: """Reduce duplicate items in a list and preserve order""" return list(dict.fromkeys(data_set)) if sys.version_info >= (3, 10): from bisect import insort else: def insort(a: MutableSequence[T], x: T, *, key=lambda v: v) -> None: kx = key(x) i = len(a) while i > 0 and kx < key(a[i - 1]): i -= 1 a.insert(i, x) def copy_file(source_path: str, output_path: str) -> None: """ Copy source_path to output_path, making sure any parent directories exist. The output_path may be a directory. """ output_dir = os.path.dirname(output_path) os.makedirs(output_dir, exist_ok=True) if os.path.isdir(output_path): output_path = os.path.join(output_path, os.path.basename(source_path)) shutil.copyfile(source_path, output_path) def write_file(content: bytes, output_path: str) -> None: """ Write content to output_path, making sure any parent directories exist. """ output_dir = os.path.dirname(output_path) os.makedirs(output_dir, exist_ok=True) with open(output_path, 'wb') as f: f.write(content) def clean_directory(directory: str) -> None: """ Remove the content of a directory recursively but not the directory itself. """ if not os.path.exists(directory): return for entry in os.listdir(directory): # Don't remove hidden files from the directory. We never copy files # that are hidden, so we shouldn't delete them either. if entry.startswith('.'): continue path = os.path.join(directory, entry) if os.path.isdir(path): shutil.rmtree(path, True) else: os.unlink(path) def get_html_path(path): warnings.warn( "get_html_path is never used in MkDocs and will be removed soon.", DeprecationWarning ) path = os.path.splitext(path)[0] if os.path.basename(path) == 'index': return path + '.html' return "/".join((path, 'index.html')) def get_url_path(path, use_directory_urls=True): warnings.warn( "get_url_path is never used in MkDocs and will be removed soon.", DeprecationWarning ) path = get_html_path(path) url = '/' + path.replace(os.sep, '/') if use_directory_urls: return url[: -len('index.html')] return url def is_markdown_file(path: str) -> bool: """ Return True if the given file path is a Markdown file. https://superuser.com/questions/249436/file-extension-for-markdown-files """ return path.endswith(markdown_extensions) def is_html_file(path): warnings.warn( "is_html_file is never used in MkDocs and will be removed soon.", DeprecationWarning ) return path.lower().endswith(('.html', '.htm')) def is_template_file(path): warnings.warn( "is_template_file is never used in MkDocs and will be removed soon.", DeprecationWarning ) return path.lower().endswith(('.html', '.htm', '.xml')) _ERROR_TEMPLATE_RE = re.compile(r'^\d{3}\.html?$') def is_error_template(path: str) -> bool: """ Return True if the given file path is an HTTP error template. """ return bool(_ERROR_TEMPLATE_RE.match(path)) @functools.lru_cache(maxsize=None) def _norm_parts(path: str) -> list[str]: if not path.startswith('/'): path = '/' + path path = posixpath.normpath(path)[1:] return path.split('/') if path else [] def get_relative_url(url: str, other: str) -> str: """ Return given url relative to other. Both are operated as slash-separated paths, similarly to the 'path' part of a URL. The last component of `other` is skipped if it contains a dot (considered a file). Actual URLs (with schemas etc.) aren't supported. The leading slash is ignored. Paths are normalized ('..' works as parent directory), but going higher than the root has no effect ('foo/../../bar' ends up just as 'bar'). """ # Remove filename from other url if it has one. dirname, _, basename = other.rpartition('/') if '.' in basename: other = dirname other_parts = _norm_parts(other) dest_parts = _norm_parts(url) common = 0 for a, b in zip(other_parts, dest_parts): if a != b: break common += 1 rel_parts = ['..'] * (len(other_parts) - common) + dest_parts[common:] relurl = '/'.join(rel_parts) or '.' return relurl + '/' if url.endswith('/') else relurl def normalize_url(path: str, page: Page | None = None, base: str = '') -> str: """Return a URL relative to the given page or using the base.""" path, relative_level = _get_norm_url(path) if relative_level == -1: return path if page is not None: result = get_relative_url(path, page.url) if relative_level > 0: result = '../' * relative_level + result return result return posixpath.join(base, path) @functools.lru_cache(maxsize=None) def _get_norm_url(path: str) -> tuple[str, int]: if not path: path = '.' elif '\\' in path: log.warning( f"Path '{path}' uses OS-specific separator '\\'. " f"That will be unsupported in a future release. Please change it to '/'." ) path = path.replace('\\', '/') # Allow links to be fully qualified URLs parsed = urlsplit(path) if parsed.scheme or parsed.netloc or path.startswith(('/', '#')): return path, -1 # Relative path - preserve information about it norm = posixpath.normpath(path) + '/' relative_level = 0 while norm.startswith('../', relative_level * 3): relative_level += 1 return path, relative_level def create_media_urls( path_list: Iterable[str], page: Page | None = None, base: str = '' ) -> list[str]: """Soft-deprecated, do not use.""" return [normalize_url(path, page, base) for path in path_list] def path_to_url(path): """Soft-deprecated, do not use.""" return path.replace('\\', '/') def get_theme_dir(name: str) -> str: """Return the directory of an installed theme by name.""" theme = get_themes()[name] return os.path.dirname(os.path.abspath(theme.load().__file__)) def get_themes() -> dict[str, EntryPoint]: """Return a dict of all installed themes as {name: EntryPoint}.""" themes: dict[str, EntryPoint] = {} eps: dict[EntryPoint, None] = dict.fromkeys(entry_points(group='mkdocs.themes')) builtins = {ep.name for ep in eps if ep.dist is not None and ep.dist.name == 'mkdocs'} for theme in eps: assert theme.dist is not None if theme.name in builtins and theme.dist.name != 'mkdocs': raise exceptions.ConfigurationError( f"The theme '{theme.name}' is a builtin theme but the package '{theme.dist.name}' " "attempts to provide a theme with the same name." ) elif theme.name in themes: other_dist = themes[theme.name].dist assert other_dist is not None log.warning( f"A theme named '{theme.name}' is provided by the Python packages '{theme.dist.name}' " f"and '{other_dist.name}'. The one in '{theme.dist.name}' will be used." ) themes[theme.name] = theme return themes def get_theme_names() -> Collection[str]: """Return a list of all installed themes by name.""" return get_themes().keys() def dirname_to_title(dirname: str) -> str: """Return a page tile obtained from a directory name.""" title = dirname title = title.replace('-', ' ').replace('_', ' ') # Capitalize if the dirname was all lowercase, otherwise leave it as-is. if title.lower() == title: title = title.capitalize() return title def get_markdown_title(markdown_src: str) -> str | None: """Soft-deprecated, do not use.""" lines = markdown_src.replace('\r\n', '\n').replace('\r', '\n').split('\n') while lines: line = lines.pop(0).strip() if not line.strip(): continue if not line.startswith('# '): return None return line.lstrip('# ') return None def find_or_create_node(branch, key): """ Given a list, look for dictionary with a key matching key and return it's value. If it doesn't exist, create it with the value of an empty list and return that. """ for node in branch: if not isinstance(node, dict): continue if key in node: return node[key] new_branch = [] node = {key: new_branch} branch.append(node) return new_branch def nest_paths(paths): """ Given a list of paths, convert them into a nested structure that will match the pages config. """ nested = [] for path in paths: parts = PurePath(path).parent.parts branch = nested for part in parts: part = dirname_to_title(part) branch = find_or_create_node(branch, part) branch.append(path) return nested class DuplicateFilter: """Avoid logging duplicate messages.""" def __init__(self) -> None: self.msgs: set[str] = set() def __call__(self, record: logging.LogRecord) -> bool: rv = record.msg not in self.msgs self.msgs.add(record.msg) return rv class CountHandler(logging.NullHandler): """Counts all logged messages >= level.""" def __init__(self, **kwargs) -> None: self.counts: dict[int, int] = defaultdict(int) super().__init__(**kwargs) def handle(self, record): rv = self.filter(record) if rv: # Use levelno for keys so they can be sorted later self.counts[record.levelno] += 1 return rv def get_counts(self) -> list[tuple[str, int]]: return [(logging.getLevelName(k), v) for k, v in sorted(self.counts.items(), reverse=True)] class weak_property: """Same as a read-only property, but allows overwriting the field for good.""" def __init__(self, func): self.func = func self.__doc__ = func.__doc__ def __get__(self, instance, owner=None): if instance is None: return self return self.func(instance) def __getattr__(name: str): if name == 'warning_filter': warnings.warn( "warning_filter doesn't do anything since MkDocs 1.2 and will be removed soon. " "All messages on the `mkdocs` logger get counted automatically.", DeprecationWarning, ) return logging.Filter() raise AttributeError(f"module {__name__!r} has no attribute {name!r}") python-mkdocs-1.5.3/mkdocs/utils/cache.py0000644000175000017500000000426414502137725020250 0ustar carstencarstenimport datetime import hashlib import logging import os import urllib.parse import urllib.request import click import platformdirs log = logging.getLogger(__name__) def download_and_cache_url( url: str, cache_duration: datetime.timedelta, comment: bytes = b'# ', ) -> bytes: """ Downloads a file from the URL, stores it under ~/.cache/, and returns its content. If the URL is a local path, it is simply read and returned instead. For tracking the age of the content, a prefix is inserted into the stored file, rather than relying on mtime. Parameters: url: URL or local path of the file to use. cache_duration: how long to consider the URL content cached. comment: The appropriate comment prefix for this file format. """ if urllib.parse.urlsplit(url).scheme not in ('http', 'https'): with open(url, 'rb') as f: return f.read() directory = os.path.join(platformdirs.user_cache_dir('mkdocs'), 'mkdocs_url_cache') name_hash = hashlib.sha256(url.encode()).hexdigest()[:32] path = os.path.join(directory, name_hash + os.path.splitext(url)[1]) now = int(datetime.datetime.now(datetime.timezone.utc).timestamp()) prefix = b'%s%s downloaded at timestamp ' % (comment, url.encode()) # Check for cached file and try to return it if os.path.isfile(path): try: with open(path, 'rb') as f: line = f.readline() if line.startswith(prefix): line = line[len(prefix) :] timestamp = int(line) if datetime.timedelta(seconds=(now - timestamp)) <= cache_duration: log.debug(f"Using cached '{path}' for '{url}'") return f.read() except (OSError, ValueError) as e: log.debug(f'{type(e).__name__}: {e}') # Download and cache the file log.debug(f"Downloading '{url}' to '{path}'") with urllib.request.urlopen(url) as resp: content = resp.read() os.makedirs(directory, exist_ok=True) with click.open_file(path, 'wb', atomic=True) as f: f.write(b'%s%d\n' % (prefix, now)) f.write(content) return content python-mkdocs-1.5.3/mkdocs/utils/filters.py0000644000175000017500000000010314502137725020641 0ustar carstencarstenfrom .templates import url_filter # noqa: F401 - legacy re-export python-mkdocs-1.5.3/mkdocs/utils/meta.py0000644000175000017500000000711414502137725020130 0ustar carstencarsten""" Copyright (c) 2015, Waylan Limberg All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. 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. MultiMarkdown Meta-Data Extracts, parses and transforms MultiMarkdown style data from documents. """ from __future__ import annotations import re from typing import Any import yaml try: from yaml import CSafeLoader as SafeLoader except ImportError: # pragma: no cover from yaml import SafeLoader # type: ignore ##################################################################### # Data Parser # ##################################################################### YAML_RE = re.compile(r'^-{3}[ \t]*\n(.*?\n)(?:\.{3}|-{3})[ \t]*\n', re.UNICODE | re.DOTALL) META_RE = re.compile(r'^[ ]{0,3}(?P[A-Za-z0-9_-]+):\s*(?P.*)') META_MORE_RE = re.compile(r'^([ ]{4}|\t)(\s*)(?P.*)') def get_data(doc: str) -> tuple[str, dict[str, Any]]: """ Extract meta-data from a text document. Returns a tuple of document and a data dict. """ data = {} # First try YAML m = YAML_RE.match(doc) if m: try: data = yaml.load(m.group(1), SafeLoader) if isinstance(data, dict): doc = doc[m.end() :].lstrip('\n') else: data = {} # type: ignore[unreachable] except Exception: pass return doc, data # No YAML delimiters. Try MultiMarkdown style lines = doc.replace('\r\n', '\n').replace('\r', '\n').split('\n') key = None while lines: line = lines.pop(0) if line.strip() == '': break # blank line - done m1 = META_RE.match(line) if m1: key = m1.group('key').lower().strip() value = m1.group('value').strip() if key in data: data[key] += f' {value}' else: data[key] = value else: m2 = META_MORE_RE.match(line) if m2 and key: # Add another line to existing key data[key] += ' {}'.format(m2.group('value').strip()) else: lines.insert(0, line) break # no meta data - done return '\n'.join(lines).lstrip('\n'), data python-mkdocs-1.5.3/mkdocs/utils/templates.py0000644000175000017500000000347714502137725021210 0ustar carstencarstenfrom __future__ import annotations import sys from typing import TYPE_CHECKING, Sequence if sys.version_info >= (3, 8): from typing import TypedDict else: from typing_extensions import TypedDict if TYPE_CHECKING: import datetime from markupsafe import Markup try: from jinja2 import pass_context as contextfilter # type: ignore except ImportError: from jinja2 import contextfilter # type: ignore from mkdocs.utils import normalize_url if TYPE_CHECKING: from mkdocs.config.config_options import ExtraScriptValue from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File from mkdocs.structure.nav import Navigation from mkdocs.structure.pages import Page class TemplateContext(TypedDict): nav: Navigation pages: Sequence[File] base_url: str extra_css: Sequence[str] # Do not use, prefer `config.extra_css`. extra_javascript: Sequence[str] # Do not use, prefer `config.extra_javascript`. mkdocs_version: str build_date_utc: datetime.datetime config: MkDocsConfig page: Page | None @contextfilter def url_filter(context: TemplateContext, value: str) -> str: """A Template filter to normalize URLs.""" return normalize_url(str(value), page=context['page'], base=context['base_url']) @contextfilter def script_tag_filter(context: TemplateContext, extra_script: ExtraScriptValue) -> str: """Converts an ExtraScript value to an HTML ' return Markup(html).format(url_filter(context, str(extra_script)), extra_script) python-mkdocs-1.5.3/mkdocs/themes/0000755000175000017500000000000014502137725016752 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/0000755000175000017500000000000014502137725021237 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/footer.html0000644000175000017500000000245714502137725023433 0ustar carstencarsten
{%- block next_prev %} {%- if config.theme.prev_next_buttons_location|lower in ['bottom', 'both'] and page and (page.next_page or page.previous_page) %} {%- endif %} {%- endblock %}
{%- if config.copyright %}

{{ config.copyright }}

{%- endif %}
{% trans mkdocs_link='MkDocs', sphinx_link='theme', rtd_link='Read the Docs' %}Built with %(mkdocs_link)s using a %(sphinx_link)s provided by %(rtd_link)s.{% endtrans %}
python-mkdocs-1.5.3/mkdocs/themes/readthedocs/nav.html0000644000175000017500000000214714502137725022715 0ustar carstencarsten{{ nav_item.title }} {%- set navlevel = navlevel + 1 %} {%- if navlevel <= config.theme.navigation_depth and ((nav_item.is_page and nav_item.toc.items and (not config.theme.titles_only and (nav_item == page or not config.theme.collapse_navigation))) or (nav_item.is_section and nav_item.children)) %} {%- if nav_item.is_page %} {#- Skip first level of toc which is page title. #} {%- set toc_item = nav_item.toc.items[0] %} {%- include 'toc.html' %} {%- elif nav_item.is_section %} {%- for nav_item in nav_item.children %} {%- endfor %} {%- endif %} {%- endif %} {%- set navlevel = navlevel - 1 %} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/0000755000175000017500000000000014502137725022027 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/theme_extra.css0000644000175000017500000001076514502137725025057 0ustar carstencarsten/* * Wrap inline code samples otherwise they shoot of the side and * can't be read at all. * * https://github.com/mkdocs/mkdocs/issues/313 * https://github.com/mkdocs/mkdocs/issues/233 * https://github.com/mkdocs/mkdocs/issues/834 */ .rst-content code { white-space: pre-wrap; word-wrap: break-word; padding: 2px 5px; } /** * Make code blocks display as blocks and give them the appropriate * font size and padding. * * https://github.com/mkdocs/mkdocs/issues/855 * https://github.com/mkdocs/mkdocs/issues/834 * https://github.com/mkdocs/mkdocs/issues/233 */ .rst-content pre code { white-space: pre; word-wrap: normal; display: block; padding: 12px; font-size: 12px; } /** * Fix code colors * * https://github.com/mkdocs/mkdocs/issues/2027 */ .rst-content code { color: #E74C3C; } .rst-content pre code { color: #000; background: #f8f8f8; } /* * Fix link colors when the link text is inline code. * * https://github.com/mkdocs/mkdocs/issues/718 */ a code { color: #2980B9; } a:hover code { color: #3091d1; } a:visited code { color: #9B59B6; } /* * The CSS classes from highlight.js seem to clash with the * ReadTheDocs theme causing some code to be incorrectly made * bold and italic. * * https://github.com/mkdocs/mkdocs/issues/411 */ pre .cs, pre .c { font-weight: inherit; font-style: inherit; } /* * Fix some issues with the theme and non-highlighted code * samples. Without and highlighting styles attached the * formatting is broken. * * https://github.com/mkdocs/mkdocs/issues/319 */ .rst-content .no-highlight { display: block; padding: 0.5em; color: #333; } /* * Additions specific to the search functionality provided by MkDocs */ .search-results { margin-top: 23px; } .search-results article { border-top: 1px solid #E1E4E5; padding-top: 24px; } .search-results article:first-child { border-top: none; } form .search-query { width: 100%; border-radius: 50px; padding: 6px 12px; /* csslint allow: box-model */ border-color: #D1D4D5; } /* * Improve inline code blocks within admonitions. * * https://github.com/mkdocs/mkdocs/issues/656 */ .rst-content .admonition code { color: #404040; border: 1px solid #c7c9cb; border: 1px solid rgba(0, 0, 0, 0.2); background: #f8fbfd; background: rgba(255, 255, 255, 0.7); } /* * Account for wide tables which go off the side. * Override borders to avoid weirdness on narrow tables. * * https://github.com/mkdocs/mkdocs/issues/834 * https://github.com/mkdocs/mkdocs/pull/1034 */ .rst-content .section .docutils { width: 100%; overflow: auto; display: block; border: none; } td, th { border: 1px solid #e1e4e5 !important; /* csslint allow: important */ border-collapse: collapse; } /* * Without the following amendments, the navigation in the theme will be * slightly cut off. This is due to the fact that the .wy-nav-side has a * padding-bottom of 2em, which must not necessarily align with the font-size of * 90 % on the .rst-current-version container, combined with the padding of 12px * above and below. These amendments fix this in two steps: First, make sure the * .rst-current-version container has a fixed height of 40px, achieved using * line-height, and then applying a padding-bottom of 40px to this container. In * a second step, the items within that container are re-aligned using flexbox. * * https://github.com/mkdocs/mkdocs/issues/2012 */ .wy-nav-side { padding-bottom: 40px; } /* * The second step of above amendment: Here we make sure the items are aligned * correctly within the .rst-current-version container. Using flexbox, we * achieve it in such a way that it will look like the following: * * [No repo_name] * Next >> // On the first page * << Previous Next >> // On all subsequent pages * * [With repo_name] * Next >> // On the first page * << Previous Next >> // On all subsequent pages * * https://github.com/mkdocs/mkdocs/issues/2012 */ .rst-versions .rst-current-version { padding: 0 12px; display: flex; font-size: initial; justify-content: space-between; align-items: center; line-height: 40px; } /* * Please note that this amendment also involves removing certain inline-styles * from the file ./mkdocs/themes/readthedocs/versions.html. * * https://github.com/mkdocs/mkdocs/issues/2012 */ .rst-current-version span { flex: 1; text-align: center; } python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/0000755000175000017500000000000014502137725023160 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-normal-italic.woff0000644000175000017500000120133414502137725027537 0ustar carstencarstenwOFF GPOSscAGSUBˀ:(fZdOS/2ڼ``icmap5j&&cvt Tn:lfpgm gasplglyft2D!HWhead$66 7~hhea$$$hhmtx%/5bDZxGNa' ŵ&Qt}@1\St77|_<~vhx<]>F5]q2 ^<.qW7bDԙ::~c~aذS75ظX㿗[*@>S >0uj6f;w׿2Z mqȸ嬖.WῂVu7_cn\q7ϾyEmεtݑ Y׎ڞk{wv=هf :qn溧f6~jy<8T3[>3u=4nzAw˼7m/v}1^,xk;op,xエc^ˣz`K}o>罹NYv2:׭eEDc"b>\fY.nōh+wvL?dxR*^>*&uoW -XX[<*ҸY:#QH'.'G1fcF-QoɂrqF$}џdA9[ܽX@a dp#ahcaLI0< SQ&MQqqxJ τ`< sx<8g_W侸Wa]C|">;37YwTz2;qbC)!.du\&tǝsbMsWq(F|j+Tqs:q1Ff^y8P7218T|aL0Yl|R6΀0 f30wN㻰s߃>2X!4X685>/`d\/~7~%&7_&ȖEY *I'S~_a'&.a}A8cI0Cd)Ȃlȁ\i8ypJf*P#Jj!*htd))0A<4z^+Soo~ݢix4-MClS2&ho3 ">8%E JtQrAєNk,dxOrx_~i" wJ^2 + #e!Ez 嫆eay0U>gxD.3yWF QQd0j6G.=1o1Ɋثe0|"3`ܛ!|$&"&MV⿓_zgG0Kw0B41 ).+b>wӜGpJ*Q[peW2Z1(˔nrhFh-Wk2Q+DS$ĚLj"$Rܗ>r݌ȵY& ݭ%aic,S+X8ΨC"s9Sz :xY+~1eJ4tG #Y\2}Mk;Bݸ4g-kXӬiֱuakXֱua mM(:^0aQkK0r,0 Yd,*}h劉Jwi͸jk8 X_z 6װq7A=eL1Kl3 {`t늋=t8 fȀ|2JW8dy-6,E^Cd̀VhB3t;+tp zC n`ݍ~ `۩۩۩ééééé6 `;쀟v. {`/p!8 G(48' 2dA6E ʼn ŲX@\v(p BTCjV`AHY0@@,I 4F@SЖZ@KHDH+erֲPifh )V6NT.p'tVz@O=` R.R.R,R,eYj]J `:<xG)xG)xG)?)x2y /  ؙ)oBXx>>ᚫP P P P P6s& w ~2RtVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7o[tVy+ݼnJ7oU dR E`b(28xbr' /ASDC Ă&4 ]xz  4'B\ WxwU&Kpy;._ȀZh3SCœ&>tͧ SBt.FF!P7)xW3hҁ砸WC߇?}3uW={гYfqY3K-3~W"0޲/eofד+~O:~h=f4 )r/pEdS  $coLNg<g.}>C}>;SSSvPvPvPvPvPvPSSSSSSSSևWR?寧*z1|:ӜH?o -.z||6|aE?_L?_,n+mg0Y>Xm6g볍lc}>.ϴ91s) 0SeV0 3bFvfAE7c4"Zh.HU\7Fh+3ФC܂VCѫkJϫ*=Jϫ2~WUwU]~WUwU]~WUqUz\WH'}+g]N͗4_n#w5;#&>!.eux5I\VwU]UzWUOQ5ST?/U`g(;J?q0 0 0 R`40&$ SAx7ȭ8`56Fmd56Vrt+9Jn%G[ r4urA:Q90~(5~+j-Fj-Fj72-|V?HS;5NS;5NS;5NS;5NS;5NS;5NS;5NS;UNSRT-~KRT-~KRT-RmT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KRT-~KQTGQTGQTUipԨ[vknڭQU|/ZK#3ɮ̈U]㷥8݅^y5- a^v.ȕnG'b@<17=LVp\ /7L^L?Rb7=KcG7T5|+?;s\6jg}쒸crd6{;C>7{;#gt7{9߳^{scس,aҝ}J P*О*К;Y%% *H/߃#=g;ҷwo}f_O~}= }e`"TTav@chW5:*G #E!N ;{L֋!W/G 9J6J6J6O<g308W/CpQ8ipN@:d)ȂlȁreW+ c 3Aw<?z/TA5Qu q-8oܮ4F@Ss4ZB$B\v٫J+tǽuZNP_zB;O\!9a]>ᚫ` s_:ʱװQθTEoxla+l:e;쀟vo v `?p8 H` ȄSِ`p,C|S)s`"A1@,,b10Ľba,2tC wH1؛qM1 GxGf-7Lc `XixDQQĐX.LQ+9~,CbA'Hlgc.E 13br [tۀ{U:aJQ_{B/ Ҋ ⱾjC9+7qF0F 8`"L)+U"^ B-@ ~)JL 4FL MY8V Vľ0BY쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃쳃B,}0F0FA 10q0&D/˰HZV{>C'0FE?C1`cZŞhh{ { { { { { { { { {QsT6r222H Rq--T }^>/@/gr*J^.@/ crz*M\\\\!ݓ8i&f"idZS2+TCtvmģx1W+ NjjO&"n$n!tXNC5 YWmffsg?ٴ"'ȅ F0pM<{Hd?GLp$u/ 3~I_Rq$\* J¡p$* J‘p$) GJ‘p$) GJ‘p$Hا>4;Ҍp$' Iqp$' Iqp$' Iqp$'I$Zqu޻ \:<+OOq|Vd$t>= }[;gvә8sTgqlLwаYwfʟp8{d^CX.։:X'rub$։:ON$։:X'DbHu"N$։:X'DbHu"N$-ŇHIbHu"N$։:X'DbHu"N$։:X7Zu1u1u  ֘ZؘZؘZؘU ̮-gvO3Gɹ\,LrFn%EW3L`Ef&2,X' Z85N`X85N`mX9uN`X9uN`X9;kÝpg="w6;{;{;{;Kpgm"w&rgm!8$@CqH  !8$@CB8I f$3 3!"7g>aqL̫8/gQ3[& }[2BHOk9kf_TꦊuAzR/.:Y @<:{*hr7ÇQDt^k~҇]^C3}&s >0Is LF3}&656HՓn'0tvGM՛C{'<**Lz t>@ӟ:dxd2U)S]$Ʌdr!X@ނí:m=cȇ1Ø uxڎAScac}_ ѻd!|H&ɇd!|H&ɇd!|H&ɇd!Ya>.1o_ݯDk5~Mt ~6m@ۀot ~Aޓ̑dZ1?#EN4zVBO3&ID)rtȹf߳'链O~6/- *"]ȻN49cHG\Cnw;N{'I錄w;N{'I錄w;N{'I錄w;N{'Ie =)^G|^ x adX,=a擄 LeEw7qEN'Iw;NgF~=NJ8888888888888888888888888+erK;g~ݰ> p1Hp$!2dA6@.X4<8 P%)5ңBA7A7Eo)bSM"7Eop+|UOhVxX+< $RӻaxGxX+< kZawP'o"R¿QIunkƵ јnk7.WWJOW[UU^x&_Ņ.~L}#>Ÿ?aB굟g"3FŴ<'4~^U+7ќgg{[dF˿ǪUE~Lq;ןy&CzϮY(qTa&ȐVYwH+E+eW#uRXi9V<9XD[9*?EaKu'D 2W|arӸnmCwpB?pfӆi_/NDD%GoK޷D̛@\6Džrml\[]w"6 waq#Q妸8>O|=Lx f09,y0^yߕp/ A0C8dh[EXe)K*8ꊔ<3M= zq?=0|o !|=c2 ÈLugL#y< Rzt9`\Ӧ u6Dy{|=0 scu8`zGޓMKjz_\iJ2jZ.L[M#yδBcZ)MO!*yeL3K3e_rid+_F3ma+l`{f?/+`=~8#pAa*4qVy8 dLvgə8|\z 5,[q_DD1(y_yd|.W>+_6w3>?'2>?'2ɾLL9׸J1~*Ӎq\+_F EXRxRa+)P2̬!3kl!k}4F0FA 10q0&Da <0GaLǤ8<O O,xfb+&ɺb+&ɺb+&ɺb+&ɺb+&ɺb+&:Y"\d>2X1|S >'+u%`| alo[]v ;7a}A8ciImEOj9m8.E:OYYLSɴY"jߐ]dSW+ȦTM6ɎZayS׊kEԵ"ZuVD]+QjkEԵ"ZuVD]+Q׊k5Ե"ZuVC]+"[~1.b#SldLt!gl|%__Wm:w- _qG7w3w^̝+6|ņWȏ_){=L7D$_OYtĆ~bON' $?q'6$?Ol$dl$z?O's~bOl ?'6Ć~bOlI5~RT'I5~RT'I5~O?q'ā8~O?q'ā8~O?q'ā8~O~bOl ?'6Ć~bOl ?'6Ć~bOl ?'6Ć7~O?q'nč7~O?q'nč7~bO?'VĊX+~bO?'VĊX+~bO?)OJR?)OJR?)OJR?)OJR?)OJR?)OJR?OC nGjɰb|ZW/ƅJTU2ptfq5q3CwIq|\#5ҙ,Go7f-l8H6p 8H> v 5w 8H>ΐ~wHqt!wHqt!wH| o!-d̷2B[| o!-d̷2B[| o!-d̷2B[| o!md̷62F|o#md~9_N旓d~9_N旓d~9_N旓d~9_N旓d~9_N旓d~9_N旓d~ iMO/{GѿǢ+w춏S+}JF^/_<Qwu*\tg*.c#o%!TJURE*TQ*UTz hj4TnBC5BC51 hF^hF^h&jBFC5Pj4T hFC5Pj4T hFC5؉ib+DDqf鈿Vyu"A"|Oi",Y̋YD~FW#*kn|BCD Q?Y4 fx#-D B"o![~B-D B-D /"[-^,߳{|ςY= g,3{f|ό=3g3{f|ό=3g3{f|ό=3g3{;6 K FR;+CҵpD &%DaQyPyPyPyPyPyPyPyPyP_KV|Ɋ/Y%+dŗ_KV|Ɋ/Y%+dŗ_KV|Ɋ/Y%+dŗO:#>An[r+PV\'RC׏z2P{Q;Q;QW`/ @HԋJԉJԉ:Ӊd{7ޱpnÍwx^DiU(͉Ҝ(͉Ҝ(͉Ҝ(͉Ҝ(͉Ҝ(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(͍(UJV*QZ%JDi(ѝ{އTX>:̏(͏Q/4/J4J4J4J4J4J4J4J4J4J4J4/J4/J4/J4/J4/J4/J4/J4/J4/J4/J4/J4E1\*Vnk9ݠxmF]WUQuΤ+˙eMk֪^m?d+ň +R1}R(O'D B?!O'D B?!O'D B?!< ^(x(>83wa䠓ܻ@=:3?y"\䘋s].RR:|Gu8Yl}ArE9?9"\^ \䑋rC.rE!9"\䐋r);Ga#ahcaLI0< Sxtx m?O0fS0 kߏ6b k7NkKDO򡢳lXe(mI҆*Ѐ ????????????г;.GYx(U[=gª r'Imd;qF?nBרO2.F<*XZF5G^acPR.DQi\e?}fp,cp[(1=RzѢ9W="ꦡ4Tנ4PVJCYi(+ e4PV*CYe( e2UPV*CYe( e2UPV*CYe( e2UPV*CYe(eU U*PVʪ@Y(Zb_Kk}-%ľZb_Kk}-%ľZb_Kk}-%ľkLKEܿHkd _M!~!_~!_~!_%~!_~!_gٸ~6gٸ~6gٸ~6gٸ~6gٸ~6gٸ~6T(0,삷)KÿK0~CT*3󟉼uY6bduɋs]v@Px~ܗ\I\W_]SV\W:ĕp/ F~#swوgn=ޯ}ރ_@T@T@T@T?]xE /?1g_/gV'"?^=X00 "?t.T R\*Kp.T R\*Kp.T R\*Kp;b]츋w.vŎq;b]츋w.vŎq;b]츋wq.Ł8p]wq.Ł8p]wq.Ł8p]hx_s4JBi0xl nX¼(̋(ˋro??F:>9jd~5_r(Njr(Njr(Njr(Njr(Njr(Njr(Njr(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<(ǃr<( T*SrPNʩB9U(̯&=F~X`ݫ|fTY-| badj"*+*+*+*+*+*+*+*++++++++++++++QaFuOU::: USэjOd58V .tTêTVՑLBeT~FTNUSU>N :vb~VϊY1?+gb~VϊY1?+gb~VϊY1?+gԠSvjN کA;5h}xV-ڋUêbUGXhOVvV.$+J$+J$+JҤ. p1Hp҉^(ىNM$+5NT?KR' Oy!;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ;ѱ퉶3N vn{apa8Gq8頢hh䝞~ 8g~'ż(y\R]1UUijTXXipw4bKQf 3OaדudF 8}8 ͞f?0Ȓqr#3 +b $3b; 4u\+u mav2WQV2\(?3j݈Qa;s<(uhհAFh~r1+Qϕӌ HN} rj#)Э#cel3% V-VЅhqbXsrx+Fdt/#2b5#:#U0R)#E3Vc3mWCk,"FaETVIdEv"vV䘸xH-fla>*#mr8 5d"k +h\JX\Ü AD +&繲W67 |8x`OYg"+]E1 MG^vbaa[Y8wopp2#菬G YV3:Ȍh53ɌFk˘xf6QYc(60H(O`1f:k=*=Y}άҘxffF!f3 'sȽcJq%@=,'4pc`3^Dn 7L~ќu@K>-L|ws;;x!rsùb (*wFAT,HmiB#1YJ桒]d>*T/dgd>*/R|T2_8F B;X|\߮r}>}O8!.}aקJ2wɭ}9RN\3|kSCTE7UGUP}TEUGEQ}TD_"g}AQ|T3TPڹv!T/v>>΢#T=Bz>rC3zUOիACPA9T z%YTTTkZƧV|Y2z^*ч>*W}TF2ggȔ!3e)zFjʃЬӅP%=TIz@ Q%CTU2DQ!Ch܋CʨkLԿ1&FB!FaKmFA1|l-! T##3 ق3Z{*_Eo Y5R9Qoj/ #+PB.>dwB(JWVTU*OOQ%xQ%xQA,$JVN\e'e'NDjh""TDEF)Bc%%bVB#hF~kJkƊ$5_3!W""XYì:Vd+Y̊,fEJXVYQYUQY|%Jp׋ѧ]ws׻nw}>]KkVѤ&54IPѤ |/:~vN=x!p?qt{,S9ܕYѨWqMABTjbCl6 g(p2b0d>w;ud1wWsw]1wbNArq3/fO0̼2choS57zk 8xA1Btu6yDqa䎪*9r'%I wr"=38G,ڐ_cі;)N*D4NJ;p'PjKb}^g,k < Da($ ˍ%z; 19VRseAw#&~7A7A;a!&Uq)%.vǝq'eI1)N.KEf1[=, '#A.3zETF%YDk b{¿wU3gDr\e_p'%~T,(r1B%P,T UdUdUdUdUBPE,T UBD?B/-Nfn%h2>H4U]c7D4RK#;§#?G>QFTDOTh-%繳YH'z=>J$I;svֺh'DhZYK4f5Kq)gW#=l"j{E^-Z|s `5=韌:ID A]SO}_4ͨ#K7}yfQ7^f|l{=Bf[³<[_*]滘q%3y oёLAȎa9~VʬY뻛s?%`+2YH#1K.e F.]R4e }b!#:.('y xc#c<Ę'c͘>r+5U}=3m^a՛7FKsj$ G4(QhKpmȮWk|4>߂jɳxƕp3]-^\̣'{^{s$|<7.ro'9%ߜXASfF'Kn[V.KnU[Uy ( 48`p \q#$&%*zK5!p/ A0PHap O[0 R`40&$/W>&qo'٥"KZÿyg BAy, qwJyY,!Dߩhd:֒m.\b[!]p'"܅w"}f3da\kXRޅ%5=Q}+QOQp(3&QCz{Ԩ<~D5ǏqΥR嶨5>/`| +_C䯔D*gDӣ?EWl%F'"E}L>fgʌ,Wj+ffl7tlFM? NECѭcw=p@cOpLn+Vl) jOqqO6qr|[|mX`1 K`tmKp!83Ěu|ҿfǿd!9%K֢Aɺ{\x-nn ]t^@_w25ˍeq8TO`|*?Zuoenkqq#?T%Nz\U1A<4Jh W@3h-KID_?:*P#(A)Jn3EC BACh14K\gˊ=y /6TQ6QP\E7@V7T\"*""M7BҲZ(J)$Cdf2ӴHh$I izϽx}43d/u ^5xk]/u ^5xkRo5xG\/u ^7%:.u7Խڥ+.u׹]RwKݫ]]]]j|ns{P}b6T bCP#6TQZlņj;?φj\Ns %` UJ6TɆ*P%dCl UJ/PKlAH j̆P3jޞP[l6f׀m{l]~lC=0ϵa u PG/RE[6[ǖz̖j.tST=bOJaM]Ŧ?0מjr kOS%{W[%=UJŧ{vny\Os͞gOoOoOaOaO?SwSwS|njj쪖Z쪖gWU-vU]bW=`WU-vȿZŮjZŮU#jZŮjZŮjZŮjZŮjZŮjZŮjZŮjZ^G9ZgWUGy=9zs9sͼ;Y{ԋњh]8ƙikcӿfp1l͙-vk­X+%v>IW٭ѻ>n8ⴰkN 3-o,|g\pӋM'Dk0P8;\Ҹ_EQqD;g\|Eӏ1~DS|[hN\mҰM ]wV|E+G_Wl__j-ժ=;c؇‚< _-ugF kʘu Foi7}R}τ>>> ='D]aGpdݪ>,fa.aaO~v#»ÝAx/kCc/SX(P}]C*&[^zcPxc!SwB;-՝;/}?u.cq>W ;$>O3,>y/$"Np*4|U}WӣCWyu1.UWb^]p9w9\ }|<}QG4>?ľ@ NjX}l>yci}]͞|}Η}Iўڐ>]Րs 7|o=; чp/T6l:c_Qg5}.jk:JSc6}ñm<::#FW7.⍗Z z܀ev7afboTv/Kpom}Ђ !XGN[ц*:$юt=X^!46X ؈MxO1pgf 1y#NG0F21-`+\ƟӍSNa;sᾸg<:cfl|@|žx5^׆;^x=:orތY>/;&CGXO5} 'p<>O >|' 8 'c.S%/+*N#M_3-o,5s0< p!"|!~'ViӥӐ'kŸvj_Ne7]k=6SMׇBh1ڱn 5-n6gӭ gd{6ݎ;R܉ w܋߇֦?A,CXQ a]fZE{E_?~ڣ ݱ>v69B7~GG_X=}Bh+ӜN3yfmN eę8 8 Wg ?/pmhmXqsh~\ WDGs?%s]\\\\\\\\\\t h.Wuk00#fv)-ŷ|.=7 66C_mۗg7}\.Sl+r ͸q~qVZц 7aox+vwxލ^Cp(8kA|>-Gࣞ>cFµ 5Ep&wp60x..q1b#?%m!QQG;EpQG;Eu9Q\Gsoak㯝.MXŸd?7-n;$2222222䨲ʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʐʃ*:;;;;;;7Յzl4q4a^c/Ŏ8+팢Q3vF(E;hg팢Q3vF(E;hg팢Q3vF(E;hgC)ha148q|ӄ9x^F쀗q.sl:hMօQ2d- k1M;]hsrԪuͥ.f .+e& Ϸ%rDݻ׵O*|PR;jzsh75YMoVӛf5YMoVӛvs;ֽv;pցz/>:n?:>|>O;×~+:b#.:#?꘏swgq][gu֝{ysKϸ{YqtAC/nӗ%|m`o{\_ګ>`N/zޫ?wW_^ƫO7Wop5]KjkVk\Nr݊V_~M7.qUOܸ'o:ξ77-)u݊oںaю^hE,zߢ-ʢ޴tՋnZt,Zh̢E-~=mZ_Y|_+?#9%rA7O|| nN7ܼ歷ݲvˡs vo-(n5~^փo=Koֻn]q[>wێpѷ}n߶nG9sݿ[;sݵ][嗢2-Ѻ/tFoN {pt:.gxޡߧD/sCw3m9 =8y8Bhx`}_ }/]|\_⻽뺐6X>d{ӭpLb=d>6ԝ5L7g١ױ°N} C'!dw:TwCX% ZP$L.tyݡ7 u~=+B#v1ǼU;V;]YI=G2Ѽʺ @>H(׍z?o,+FWԍd݄eIW%l۪>mqu & k!UԿ(t?z?y |sfn tOP~#AoIlvG͒&}lޟ]C4gV͊BvlOfy):faҳ_g675:xv[tm ~yGPE:*j7;(:! uz62{K?x k7cR땵^yZoZ׍p?~?A,CXQ .?pC?Op q)2 pW\ 7܊vw` ~7]XqcA|A|AˣYZCZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z !߄G<ɸd|3*>"J(ñ4XN+U<2?36ldzs6ՅRS=ߚf s";%x)vAk7>RJ_q:o | g8+䚾q\q.w=\b?ďcM;"op~_'\kp-ׁqnį8dn-,w.,ݸ⾰hxVa#xhCaVc bhG~) !46666666&Oiz::-s />Ym6Z֐v=^WaO{yO4'OX ?a'OZ ?a'Yw}bG{uZiZkZkZewX=Rc52H^k}~|-:-n+'RK)ӏkklt^Lin*: !BBH<.CR!Q)BXR aBxL!$BR خBZ蚹7ÿLܛ)&D oouP]jKMt=zfԦGucI]<;O]jr2|mFBmta 6h&#Uae`5)(yI)@R3JD9Qzv(O%RTND|sTQ%$J۽X߅UuK;}cxVGۢ#ϑuz?{_ϩP>PYevoWM~(<RBjWH iBZSRRJ+NԣV+NS*8:_{9կRQkUZթVUQ[8] TGz^ȨRS]jkqqWܸ [\ꙹڿSvK؟KvRc 5֥ƺfՇL̊;2YJY =Pi PiYׅR0ZZK5jrRkj-j-ֺfy^[:mBvbK*OfaWnP> GC4(XDxxħi|p>1_)NWU87q3mly8|\ }|<}J>.FRe).XƕiJiJiJijL7Gommx*zUpZ6E/k(E5Lz^%ڵakgQNQMؔMؔMؔMؔMؗؔMؔMؔMؔMؔMؔMؔMؔMؔMؔMؔ-؂?b *6bS*6bS/T|_Wqt,4^k+\qn4B܄EXq;j9j9j9j9j9j9jj9j9j9j9j9j9jM-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rB-'rZNZNZNZNZNZNZNZNZ~ZNZNZNZNZNZNaP P !oě<ތ7**烔ßG*{u9|!WIͽC;/K鄚N鄚N鄚N鄚N鄚N鄚NDb?\fj:j:j:j:j:j:j:j:twߍQx{S]wNuݩ;uTםS]wNuݫ{uU׽7\}?{c% uݫ{uU׽W]^uݫ{uU׽W]^uݫ{uU׽W]^uݫ{uU]K]w.uݥuR]K]w.uݥuR]K]w.uݥ;uuݡ;uQ=G]u.!"PS۵64Scj{Lm1=XNkg]2솗M-MPqއ >#aXVU~_WU~_WU~_WU~_WU~_WU~_WU~_ת~_ת~Vݪ[wnU߭U}Vݪ[wnU߭U}Vݪ[wnU߭U}Vݪժ['U}Vݪ[wnU߭U}Vݪ[wnU߭U}TSwNUߩ;U}TSwNUߩ;U}TMկQkTUFկQkTUFկQkTUFկQkTUFկQkTUFկQkTUFէT~GUQ'T}Wӓ!ݴ3M>7ߥT~GK^'w3?S?S???Kw).ߥ*?Y1a|BߜlP)߮B'^6o|OzvToKDѾQC}ގwxލ^<_2:sqJtdtZk8=d3-o{YP=N q.E>b~4R>*]s"Gkn |'WG]rS]s?3 ~)W65s?3s`F+O͔RgO+ ʿOgä*O*O+O+iViTY߫+v_PWB~iIş~oSn{~rƗfnok?J?))WJT*OϨqߩs*?*Sg~Jw+u ?{~S= v[dR+u3GT}VէU}JgU>s>ꓪ>׫UiUS9US'oMNʴViU߭׫\߯귨S)U^կUW USkT}RկUT}N~UUU3S5׫u>s>S8S9U^կS)UVկݳOvUߥsWgTiU߭T}W9UV9U߫׫}m3-T}R'U}r竾3nR}Zѧ}JkVg}Vg}Fg}Vg}Rg}Fg}Ig}Jѧ}Ng}Fgg>賊>}A'}Jѧ}Iї}ru{kZg}vפO*ONJEgQk:5ߣUQI5Tj>{|r|Lg|Fg5?߼L5woc^&ۙPoVoR.jj~'5oѧ-J~ߢ(-J~ߢ(-J~oTJA7(%ߠo|oP JA7(%ߠ|O*O*O*O*O*O*O*O*O*O*O*O*O*ߠ)O*O*O*O*O*O*O*O*O*_J>J>J>J>J>J>J>J>߭J>J>J>J>J>J~T'|R'|R'WI%TI%z%j%˔|P{)Õ{|Nߩk %%SwPoM!J>J>J>J>J>J>J>J>J>J>J>J>J>J>J~/%TI%TI%TI%TI%TI%TI%TI%TI%TI%TI%TI%TJ>J>*>*>*>*>*~\gU;Tz^ůWUz^ůWUz^ůW9S9S9SRϩϩϩϩϩϩϩϩϩϩϩϩϩϩϩϩOOkǕ*>*>*>*>*>*>*>*>S*>*WW*_~߯U|IŗT|IŗT|YŗU|YŗU|YŗU|YŗU|YŗU|YŗU|YŗU|Yŏq?UWezݡ;wPʻCyw(ݡ;wPʻCyw(ݡ;wPʻCyw(ݡ;wQ=ʻGy(ݣ{wN+N+N+N+N+N+N+N+N+N+N+N+N+ݣ3;3;3;3Mn7+(((*.ݥwR]ʻKyw).ݥwR]ʻKyw).ݥwR]ʻKywܞAyw==;{wN+N+N+S9Ri=mITITIViViV`}~ޫwRq'w9Yq7+f}_ %9W=BގwV%ݪ[tnUҭJEI(%ݦmF$KѮ***UEV]UTtUE>ݧo]9:%~78ڭ="*۪r[m}PnUda'oЬjW֙GmUvLVE@+ڪ*VE[UUER+VZ{D[>֝*[Ue*j%CA>LnP ,兩E/o=aI?BUu1.ꢪ.ʢ,ʢ,ZEWFQATQUUЯj:BPUUuPUU˿jZ-jZU٢o-f٢o-f٢o-,f٢o-f٢o-f٢o-f٢o-f٢o-5}El7[k,f٢o-f٢o-5}El7[k,f""٢?΢?΢?j2?hp[\7F}2s\fy.q&,b܌[p+no[>Ϫ*>Ϫ*ʾV́VJ+fҊYiŬbVZ1+VJ+fҊYiŬbVZ1+VJ+fҊYiŬbVZ1+VJ+fbVLڊI[1i+&mŤS[U ˢjYT-eQ,EղZUˢjYT-eQ,EղZզªE}-~"-~"-~"-~"-~"-~&MOG1neVneVn [y#2rKt4Wٷʦ C~ ?f5 23B_pxCɞN;鹱B.:y#|GE;E;w((:Qt|GE;w((:Qt|GGtĬ:bye#垎:bT:rO׻&\{=5~ y<:v|kՠ.zKlq FFѾ,̎5E{;fћC{Ѿ^zrPD~;8 _N  ᆺGԝ/$z[]s(~;B[(5aXI| gY|'8_I8sE/T|Eon~YQSch&Y9XnW+3\:z{56+\7af.ڥq)2܍{]NWUkPZVVhxi7kΗU+|WWn.]Z;w;QUX᫰Wa _ +|V**,,,,,,,,,G+vB;t,AwAw~ج;hڿo;hںvn8h#ڈm_W{lѓBkv֠oW-U vBj]ЮZhW-R mB[j-ЖZhK-R mB[j-ЖZhK-R 흅YY6MMg4}6MMg4}6M=g3}L=g3}L=g3}L=g3}L=g1}vLg06̠ 3h .Ko.vK2h -vˠ2h -vˠ2h +ʠϠ2h +ʠ2h +ʠ2h :J *ʄ2aL*ʄ2a*Jo)vJ[ۮlspT{#^b_ Š}1h_ Š}1hS 6!~'͸q~Zj; rM4'O'j},ǎ m)_L+!K ^R8UcUrqwKڧ^r0;Dž'g?ǜ9۝3v>'hK0c>:fkj`g[ccqom,?179]kwǓ1t9Gcx}%l+\9y3K1vyן~ӏ}/!ǐ5<}b\3o{y{̹.w˝~/Lk{@1v!&;5ڡa0lx*zITǃW9tXĎ򞏏Xkc_NG^32,zəDI/KwG㱧;%S###>w#hZp-8Z8!8w!| ˨]:Nu~G]#0L q.Ŀ>E%>.C?Op ea[l lnEW{v{qӏXNN [[7'kݷdRA(lU? y֪=ֶ_9uG*WuosGgh Pqqqq/s,) hkpmH) elm RA6HHcُ,6;؈Mē،!0c Xh=k%1 lEOOxS؆x!3f,0c v3 8>ΰ3 8-0la [[ކq&N880q18+?I|p>xz#x,EP A"(X`,EP A"(X`,EP A"(X`,EP l߁%]XqtЂ !XG(Zц*:$юt z)A?a17qO`Ob30#K| EP8&0 mf[O36ldz3B.lS>۔6MlS>۔6MlS>ۚvgv./nx:l V\+Xq+0g0>xvaܲ+6r g9Ì<ÌlfaF[㽡v&ަ[|?{ގaXxXxXx'Yx'Yx'Yx'Yx'Yx'Yx'Yx'Yx2=q|>Nq"pr8e.p,\f2 Ye.p,\f2 YxXx,\fQ.  $ Op,\e* WYUp,\d#^ogxLg4qVg5q&K1f.2s:uߨݢ,]f鱙6.t,]eLo|Atong2Kgx'Yz'Yz'Yz'Yz'Yՙ6.Ϻ*LYwedI.3$SO2$SO2$S4r G Q81(q8ħi|p|]NpN\|Kuk^8Au,- aBb!lyAoY,m6 a66o)[ Bo)[ B;s)2܍{p/+߇{-xb9Va#xhCaVc bhk1jAZĨ1jA-Q ,1 b̂ F5=h EP8&Uƒ=,١-zme)70l[LWr-r-7g ,e?[e~l9Ζl l-l9ΖGG-~AW,e/Oe-KlYb[زĖ%,e-KlYb[زĖ%,e-KlYb[زĖ%,e-KlYb[زĖ%gq]Yf2[ٲ̖ |-{_Mf%e#8voETPDGT&AEjQg**ZPj@@$dhڦj7wE]ݺs\kiʻ<]@t-]tKE -t R 2H -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2D -Ct2L -t02L -t02L -t02ú2L -t02L -t02L -tZe-ݲnYK[-k閵tZn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nn[:Nen[en[en[en[en[enf2XW-ytܐ_*|ϭ O7T_3ɸp258 'd\u'd6ǿ[k8 ^T܋{Qq/*EŽ^]5܋kQq-*EõעZT\kq5?ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ|ŇkZ| עZ4\ µp-.\O.\ µp-.\ µp-.\ µp-.\ µp-.\ µp-.\ µp-*EŵעZT\kQq-*EŵעZT\kQq-*EŵTZq-ոj\K5R_5\kp-Eõh עZ4\kp-Xõh עZ4\kp-EõhZ4\kp-Eõh עZ4\kp-Eõh?ŏkZ?ŏkZ?ŏkZ?ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŅkqZ\ŏkZ?ŏkZ?ŏkZ]<=<Bq-7|\K RkZjp-5\K RkZjp-5\K RkӻײRk)µZp-E"\KJ?ą+qJ\ą+Jjp%5} O4zdQ-T])aR5_xo #kTdz̷+O;Odm]y879ܛ,*qgg-##eglӥߐ)S3#&#ne`Z?.=2j7xN2 ?1 ?1?1:>xna5|_&p2 0Y̽ D{ƙAtogixB?mF~oxH$aL7Mp3m0n;΀0 fÓ{%N>Xa>+`!<B{V;,NS'bd1u:YL,VeW5| `#|'xZցuixZցuixZցu<O:n dO:<O:<O:<ON<:N/Ë>/Ë>/ËIn/jn/Ƌn/ƋN/ċ:N*ċ:N/9N/;N/ċ:N/ċ:N/ꤏ:n/zn/Ƌn/ƋVExjh5^/ZƋVSx=?^Ϗx=?^Ϗx=?x=?^Ϗx=?^Ϗx=MJ] sa7'͉s7?͏B]TzJ f>8 wIp*N' OΗt@].8nnz5}H͝Tv7Me/S˩Ts7ռj^xJW%T]TmTmTSl1D `;|PTr*^]%TyM5wSKN/yRKe \SUJ5W*\TsjRUJ5W*\TsjRUJ5W*\TsjRUJ5Wul/Klm2! vNBAߡ?w_"%p) 0Fep9\`4\ Ws\ c:IWYyp7 YO4I$tF:I#NR@')I $t:INR@')I $t:INR@')I $t:INR@')I $t:IM'qITb7M%vSTb7M%vSTb7ϿJL%vSTb7M%vTb7M%vSݱn*Jn*Jn*Jn*q9J\N%.S˩Tr*q9J\N%.S˩Tr*c9XNe,2S˩TYRUJUV*UY*TeRUJUV*UY*TeRUJUV*UY***PK%Tr U\@}M&!@RUJUVʪ(X'՘)|V<SF{^{ϐA__& xG6+=6{&qM>H ݉Q0П c`*У@"ФaM6hSMqL4*Ш@kB4*Ш@ nfUpu:^X+v,1X$gggg'9S!p:zE^QGW+%V/=T 5O֥߭K#K#K)6]4ޱUƚ%n/oMf\auqf\auÌgeͻo.7~?'=ka+5vH.Aw=l}/05fc]@__O3ZZZZc}7{PRRRR}>} | }!]2_oaldzWGQ/l-vȄ,;adC8`7\ `?A>("8pJ08ke2zNKޥSҩwԻt]:.]>AKޥSҩwԻt]:.zNKޥSm 8Fh![3)Kv-5[;$@ ݠd\ö/km2GfBL^S/өtѣSsL7=ّꝕNj\{\3_ ^.\l%r qgd0M;L7ݦi23RjRK5 mUׅf6C20G.'f `Hs.'qx箰0߇mmgm~FQm~FQm~FQm~FQm~FQm~FQm~FQm~FQ~6Jߌ75F}SojM75F +wǾۃ+Qv.s8pO=RFGFQzd^EuQz]^EuQz]^EuQz]^EuQz]^EuNi:^4zFB_h ~/4FB_h ~/4FB_h ~/4FB_h ~/4FB_h ~/4F]PoM/gKzjv{M.SQ!f㌞'SETQ{f&`UG 2m z䊮8cL_䢟\'rBNcJb wzt#7[f֋vխknxc{7u;ѿQcu{cijd3ybu["a|z1m/#x^tg濈WDwN{a#6)ۅϞ[G\ _B;U"%p) ѕN\d( WU0p \ `<$BL0 0pL&n[6Ý пģ?4Jj4P5"TӕDf{L]7v˰&Z/@lB4P4FuШA:hTQ4w;륋d.2hT5A2hTʠWpP&{2G ~_`l-vȄ,;adC8`7\ p )J)PPŘՂ} Qhfh Z a!J tnz~*Q%5FԨURJjTIv*48Yp6ƼGQx $<OC ,gYX ^%x^Wx3^#@k5Pv T]ծj@k5P쭬{zC ״7CL\G5IW,S=|;}US9jPGޫF%ŞA .fLa,Y.Y.Y.(OZQ*8J&U,ޔS65;٨_?,JxëYTɨ0dSpC; F|TTBJʈ~ P~kzD{Z;jwW9bxH.L\X1WmQ[qV ܳl=[qϿkZqVkZqVܭwkZqVܭwkZqVܭwkKfWd>\jŵZqV\jŵZqV\jŵZqV\j}$N}!l х!Fľm@dzMYSwНq>^uu<Ӟ\'DmGw{g{{OdQ}rᬺ3l_! GRbWbW+_! WB+_! WB+N񿈑+_! WB+_! WBO!vh98KŵBbppاbpA\guqA\guqA\guqA\guqA\guqA\guqA\guqA\ggup!E_-$Sz0n1[ F 8FٌVjZmBMh 6&ڄVj}N1dhNZp{tmnǠQcPž cd2={ghOg]q<261 3缓ޑUw 05}I չݿ0/+ȶ,jOG1/8#90WKeV~^gqv~qtݍMScWl<~Mnyvu9}Ʊ;cgǎw%ߺ1OګMGkb1su|xuq4ۇ]zq@lx=W0;Fb\U6K,iׅuq] R>:N3[~TFWRs{ԎiWbgtYb{[{$J#F*Kަ[ڽ=93UT4Ž!{,|)4h_2KQ{~e7gVV1+==h46񼺾 -ƞcϻ=t<lȂ2;~ Ɣۑ/=5f4"U#3&3&sq ͋:и9gYų,i*ג{y62Cqu{#420Q9XthP~#6{=Y2R/dzC+ϋ2A2>*bg^,9r-&G>?* hQ$?(.Q9yB*\&Q#oK{WN` LGeu d ߯p bbb';+;+bJT=2_|YEd|DXVf$KB\S/*oU#wp /Ug|W BvY>K,/lxUn#ۈ6"mDtFDk6"n#ۈ6"n#ۈh-FDmDnS[kSIb ۵>t[Kzldm1'5x&['*u0Tnip#7-p+v0flw\wK}p?,,WuXo@p xޅ`%@Y|kX{| )|N::| _ | `#G ~_` a lm2! vNِ { ʣ"K8/t2 E;QzrcTUCT|_3Pu.9ރ\TU/!ף({ ~:EݯT㻞SI+,Vezp%(4.AKP.AKP.AKPh MCi(4 4BPh MCi(4 4BPh MCi(4 4BPh MC(4tBQh: MG^< "x OS4x<x^eAdd@Add@Add@Add@Adj2`5 XM&Vɀdj2`5 XM&Vɀdj2`5 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 H%RɀT2 ~H[ 1gv SPy ?QޘнQ41+1+1+1+1+1+1+1+1+1+1+oź0r1H.Fb^GWa.Dޅȷ$ɧy"BQ ),'5x&}݇}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}G}gz澞gz澞gz澞S;adC8`7\,w'9̵u s?Ϯ3"ߝ92{osQmy*SB1ˋ)pb(f 3f0 TB*c!`bY}@?b1<Y 0f1,ŀMWdY 3af1,0fbY 3af1,0fbY 3af1,0fbY 99ႎɨ&L R3uUГ^/2>+Mp'<r_}Nf{ ~0DV`{&f{+cy!p :M't" DtDt{Dt8NFa"gw:LDp0:9^husMWdW+$ӟ$\k9D$JRNFX4fD4f]h6&D4&ZBr% u2HNCd":&ZZ}vn"ڝvO+ڝv|g;-Md&\~s ǞA57yvE]_oW۳g㞗qq/}Q~:z|:EN>ɐ"AhjsdzeJޱ2 eWwE﷡+zwFh>wE3|"ODh~OBsr4砤}zf>'}2z9TŨ}P*o@˨PmTcdBqEj.T]Pd+lEQC(؂[Q` lAm(6@/ lF(،Q[Q`iЉ*M4t6.ݖTRd͒,;ulpHe7vͨ%D %؂ [Pa *lA~ GPzQ`%*,Mm Z9_ [Qa3kEy-NCuP]3kAm-(oFQ(JC=P,rjiE-VҊZZPJ JiE)(flD!QF^;: N(U֡ h4fҌZZP4  VqDHMbhcT ulc泙叨'k-?~$Kd9ȶJ핫-ubQh{q1 .?׋q H'*of"Ht#7lr Þ'H@nFh0^#fc#chgхamFۇbmhvh1ڟiOFړd}e+i7F##H0ZF W 7uٌ[c=e^#02Y_fuN#S)6V9rG=(b)ɔ$i:a2M1MEii7M7)9D!"մؔL-3-L/^M^'jL*GG3Wg5's_י' SS7o0!.50̳sp\|1Ҽ1yƜlNO$b9Kbyyќj~Kd~qCyyxʜe)]\ļ\%^01*s#Fdn_[-CWDfm%͒&,-EcZQaI|!j,_YQkEx!"NgJ7iy0.RIg{2?o e)[=7~3>wg=~pN›'(NI!);ioRARIRyR MyCִ [~c8vͺM^>{==uw z/ۂ7d-yAU 𢅗/sσ7z?S?FCOV{L+#p*;uLhF9p;ݨDuU;IE9˓ 8Jn2\ 9XwT >ᵻ;ٵ8팺 GznnnnGtwFhOm6b=}>͑r5@Tc;yzg t;=t?/@ t|XG:Ac4]σn!?OD'"#yD<|"!"!zG=t::\=֡G8,zo%ENh3CD\"z7kѡd"hYYY4(!&ɢXiKJ}BM&VEȢյ02g sgD L&s's^f/9ɜ5#HthE3.F.]60RXV'@y,WnRpe)|,E;KR,E;pc)dz3Fp\Ŋ+*V_LϜpnYJ])E[ -BTRpo)8BR,-5yz-í-@K8cKAKqi)49MCqiҾE^*zel4:NGt4:CϘyhtmzLAy8Z }7=~Wǥq),=.ye|nUY'B /3]l=3c0KbzAN+D}AwZdwlES_s7뚧>/`{a욢~Pf_ԯk|S!eH_c~nvfKss9zufu55k,k{ ~ )dztgssYׯfΥffVfdXIdȢ>R[z:96ԪԪԪdvjvjfjfjfjfja2^9n;,'ġՉEz_x|仟UXUX#y_E{:K{w?%߽~QEW|9_E|>!*Va>O37 kZE0䬗^KzW/'_g7MzY/9my_mUEjqq}v饧S)qy%䱟<~<`H3zL=}z~E QKz_?'䯗cǫfVYVY*w#9^EWUx9enwUTts\~1bwPdV3jC1 dYl9laX9/4,hΏ1GGs~4 ќCshg(7}@k *VT:LtC>tC>tC>t؈}0Jk˴I$]Хp}"f# M?"Yhޒ>}hҏ&}h҇&d#lDb#^RA/Pޖh -6؆b#ZlDh-6EZF؈}hчh1 -nA[-nA!3G~G~苹N?Z?_aYg ߭(+; [Y<"* &N8o:3Q$T0 tGP$TLASPxT0LAף)` *8tGPA؊F\;q7;Pٸ'pqO:q~8 LB-bǣ [壔I(eJRΌ]J)d*Jَ壒I*?)vRZwT=v;,j+yW:J:%uǙnBM7~*Xskͨ;ꎪ[cwfI(j[p5uF]QlcEדCw] ¦)(lRNfwfݜ9)nw>2wg$I1wW pzNNs#31*2qA:n#c'eh(?24]3tWt.CEYW7ZuQuU8#12ZfU@gUOekg(d:+C_Et*cݱ }"T}Zge5ZFKnFGEt*cݱXEE*"RJHh"SvNQGjd:D'$dL#V >ClH+UH$^%bg^/t:sRwҥd{ wOWǾm'tO*XUvrIVr;6*SQ6pme;Gy7z^8S5dv3].B9>W+{zp6W GlGy~1ށw {ia=J r#WcPl|8:^PtsŏVG+8QN>WL+F=H_ f`* f)4.XwgxcCF⩿_\V_ŋs=T(%3J zqPu)c,GL/\9J!皏ciOKߤI A=t18@ m`8㒒w"X〒G>'!8d A2C>q'!8|O9o8սa1_w)F}a at{5^ދ׏G^wj_EWUD|_ދAɳ7QgE9Z%q[fQre+GQ:P 3f BЈ^ZB!4:ZBCgp{9gs]6p?s8矙3Wr~Ϲùo754 EF~dEO89Un1{f/ua qZ,FFa#bY0f1B'Џz|j||||#{M>GX-fWBP 5@+&"n"`ᓢM:<۬8aXw7Z˳l C_ӄ8[s~Y~<Š*P9ƫz:TFaYQh?7D!{Wk(*(*3T (*(*(*(*ߣh! +Q5s͜{3̹7 yZs^y>yѻGݕO!_%)zL洁L,'˙ۆ?H9&DS@Sqj@#?CC՟)[+MѱGONӨl籽،o?b@9 ܂[P?2伂90œ_ r~AEi ~8 y|23;]D; ='/ŗK:G~m4&[+ ԁcWTqWf(aݞ/W2F%?qܛ=?qO%|(1zц" rw^<71 kУsU^zz:G@ut#3:Gr=^gYoٌ2a[v=ȶ*eN`-{fo^nFbݬFu.͜N٬T]$[,־dYaltIܯ>Smf㧒mXӆXӆXӆ8ԣztRN5;Qk2kdul5D~4MGd|(>apB)TֶUmXVнt+@ ^YG 6k?O3W,[ wQxK\Ʋ>ȃB(<J;I7, s2>_/0_3_3_[A6րQ 1PUC(sj~*@\l{x~Dnd72ō2+N$qИJf2?lk=r3\N~:]gE~H~H~#?,s9E~fW9gYM~搟9!?sbs9}}|X$jd9$',r2"',rr99EN֑d59ENHNfYd59\NN搓9}6"99gE~.'?]rfT3Lj6e2ru\]N.'WjE.'WYjC19C:A'9!sr0"r8v a0^@tYtW4>rbN5筯ۯ  {_ 0A8@W\&W&"D4*DSeT?UO?Z=b٣g|qj :p1f zsFTb,0c_]X3cuT2JSx*O%Q Q#raqjG?nv" 4^%{tE,k[: ҍhU_7zz@A\_B;\P.a0Fep9\J 0kaDH 0&u0Tnip#7-p+v1<C($sUC} 5Fpa\ct :dw%+Yen֋?}c 2>>mq,E[XYl\ 5^مcE1g&>jqm?Y'b\&ΐk!Α^qL7gͷp{LW9 <#t(kҫ xR]V>` |,mS_UQE,8.a?A_gC ۮ sہeŶ7Ţ/~Пq/8_g')p*Oc{<*9$3e8 Ζ+F':|YKe̦2fSD"%p) 0FTHAr `6́`䶓K_v9+x$޶6 [yL8zL Qʵb2N,W\%IP/(oɭJԔOd+e 碫<`Li\f{~8~> =8H_KDڙO$ OBhL8 &$HB!)VE|"QCDo>q>TčVY sY3a|̛yѾhous-ļy=Ǽ7c|̙91g>ǜ3sc|̙91_>|/(_fLFHi#-bENOGxͬ^C^CTC73>7e~LI0)0iXۥv)]j}jdR2e)LYj >P[vZ,w]ԍǬ3->g3=x3Ì0=x3S9efy6,b{,ea{"y,fv!3{'3{33{3{3{3{33{3;v1w012l73{7ìǬ>¬Ǭ`VaVfO<fqNYa{fq&,0=Tf/&+J"C{|!=D߯"C{|!=oF7![EQߜo5B"C{x!=D"Cۈx!=D"C{x!=D"C{x!=D%D| !K"C{x_r\"57#j<=# x(7 x(7VsU*`>0 O̧SA嵤KRE!EO\ A7@Mp3 !0p#a10xs1Ha.<OS4̃g`> ' b,/SoG㻣]Z_bζ۞S/WkLl`iaٓKb|"뿄?#X 2ç|n#ďֵOl*H P b:BԀx 68ԅoa|{~5p `=lTH_`#lͰp pފ~ܐ `7d^B6HU\]#&LQBCq5!8D2|(3>9J}C_#~}į>G_#~}į>G_#~}į }0Fhca p{ާqłZKL; 1TO~6}>a.<OS4̃g`>s# ^d, ;Lke"А2P)DO}/zF5Vb\E2'`s\1|s\1|s\0*ՄU~ZV>zY1?|B"O+o:!N"ۄ4!2ML"ӄ4!2MȦ #D=Bd#D1Bd#D1Bd#D1Bd#D1Bd#D1Bd#D6QKCdؾ^WUx 2 m.C2 m.C沪 >6C|hm >6C|hm >ԓ{p4p94Xt.Awul?ny[@/e 2^z@/e 2^z@/e 2^z@/e 2^z@/e 2^ˀOQr!!(RGy(1(2.)q@J+e XAP !jt.@ t wp0!Lȁ;@][* 1Yd%)҂GFDx5B5Y~oƿk KmQ(RB  ?(jY~j,^\ *)j$Dg]fэǺ-d[y>*RPE H(ω|Q6d,5M5_[%zPǓ_gF WWW.5 M^w+y@fFq^Q3eʞ,ۗq:(s%_>XD}Ȝ|Yj.8)rWY`>#K,BfZLN3-\bv(uLi`Lӿ?dO]q~Yb=*3m}+~ 0nAp نaQ0Xamp;Q5~C 3f"gQc| ++;| R5 dZ*O'Eu\!3|uԂڐm%6 3ߨ0 > (L&Ia~Dɭwe})|SJP w֚i(.7uL=hi/4^44Mk|֫E VroBCs}9>Fsmу 7k:B?7 n00#`$Z'0xr.q ?e4Qz:@hxQ5j~_ר5j~_ר5j~ }WuԨ5j{^ר5j{ a16BChcm !1.BCb] !t1d_`#lͰ A7d.B ha- t0]?B8E׼p J A(04./о@FQkFQkFQkFQkF0F#c} a0z@a= 0Z@ ha- 0Z@ ha- 0: Rk1ԘAj 5f3H Rc1Ԙl!h_ }/M*h)VDxkѳs1\>s1\>s1\>s1\>s1\>s }0Fhca pq06 & w44z:ۻ 3`&ⱇΖB\!nYbDL\xi|x< , ^{Byʺ;8;AaY5F3̖Ǣf;-ǏQOȽ8l_†7y[6-.…BP B!\( p.\[fVP u,E)\( p.e-%VΏ8;?Ώ8;?Ώ:?Ώ:?Ώ:?Ώ:?Ώ9y" xsMx ކa |G%K{@M.fYbV.fYbV.fYbV.fYbV.\Q>(W+qEJ+@[sCIet :C ݠ;0 !0Ha q0&p<NS.`.(n`.(>xށ%|Rr>8BV!wU*] qWʷ2]Yj~a k!~u6@*/6f[`;tȀL! a>cypRGP(GA 8 n B2K C9hp Nï FU@܀:o@7P yuހ:oPkȽj<ԄZPpRSOZB=uEqwG]l ,QCuMxKԱu= 6v΢Et3pwbC=Abr3 C`( 0 F `J>{e7y1zrJhw1Ya=*cf#c1cD挓޴߈7{F̕-jhlvY$AhGkƉ+dH0-;_$ʯӨS;ԨT|~*>?O+++S8ʹ9wDa L`Lf}~xf,x~xo>{^<sz^<sz^WgKWx RgXaB,'@KHV@[j tnz@OzqaLC0GQA2<s xa<YxƷ__ b9 o> o> o> o> o> o> o> o>yOVwG B `=lTH_`#lͰ A7d.ȒuF]ٽٰr R{>b^Gxp\l'28 !C9hp Nү0APG+Vw}à1uBh ZB"'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh'F}Qh' ̄Y <afTq O< P:< yx^7`1 osw` |G>e>oZKRxu:^j/ZKRxu:^j/ZKRxu:^j/ZKRxu:^j/ZKRxu:^j/NNNNNNNNNNNNNNNNNNNNNNJj:):):):):):):)8+qVR㬤YIg%5Jj8+qVRW"2l\Ũj!`#ek&yȸo ʨ~5qE%-Ì^qɎJq8q7ث~e{أ\[Yε\&r \d-Z圻s/~Kq%6=gXK~wWQrԃQv`Y_8h\ۙ`/1'UX/цNPFF8N}Q}׾i|_|'sSd Q1S8?ucםo{.ɱ'׽cw&͆3tˊ\zVx~eaB,u/x![f-*,\[<ڕ~Y(_O?82KJqEx8ٍwމ-%[-Lr ShœTob$37,ʠp3vMMŝNhj"/pP/9L!g[M>?f|̥z=#Iվ1y[jN2[O3֍ϳdEio/ùܿ@(q0.q[ǘoc̷1ٌl{SG%X/+*uvejW=Zp*.\RPaQ0XaP1z;PmaL;a LԻ`Lf}p?<f̆6YA2<s xa<YxX} "xobxނxރ~#`^2`~O~ oJT=? B `=lTH_`#lͰ  gh( Y.\`N.wkjU\pZ+k̎Q̆dl9jyrdȆ Ul>>>YT;7Ȇ-%S!}2s*Z* [&X&qbee`y)qe9qee1U1ŲȲHLayCeyfƋˬ F&bx`m+fYW9֟)"ٺޚ*ikuxzzHd=l=,^XOXu6xۖhk->Mlm y橩S#ެ^6n6¾4VDn[앱qK*40/7jdT[??t5[ռ⚞eϭj7sskZ{Az\~QTܚUz}k8gg3θfϽ5oܼq?zܪ[|x q/[ˁۂ{[k5urmŭ}?q~UmR:l5/跳[DJˏ/?0?ӭ21Gn*R#goayH$j+]DUؕn"V#)D5[쵄1 =IǷM̤7U)v(=ڻ}Hzsz\fj 67[PT.jtZA=D!;)| WWw~wGX?ZHa i lMVp6#_)Ӳ@|X5dEWJW SYc̪FS=Sq?kQ\eՏCUVTYÍꫴ_뛿Ok^vs,2q7, ȉ* Yu@JPV/WIA !RF9r"R~J!B*-!!7z`rl_9V̊$r(́2n>k]W52h.ղXYb+|)}UFvB ^B6xEBe"c2$z9>=@Чӟ KnOЧi1}ǣi#Q1uDnɬŜŬ"u>٠l+Y@jjj6?e8q];(rzE/S'|rȥS{wE[^[kOoաxzA+=V "3W6.1b'\@&3cQ o:q8G(T3Ӌ: }[@oӷπ߂HҿE~=B3u A?3wIڻzꉯ\J_߽Y1f1f fm=Y=0k& ѝHJp"X^WX^ͬI"z5CǥzW=걚r+8Vl+[r,c){VeP=/9O8pn98+/z7& {KWcqh} x}،6Hg/Ee/EG {h;Њ=$;{3Cy+5^+ o4,;aQV>6 Nٛc8jy-1qfP(h^[W'!Xu)Ѩ3KqAܧpAg6Ejgqq~If)n3<Կ7m6W6^2dzB-< 8Rܦ4ut_Pq^I)|?7o*VYS`,56; E2JO6_ms^z&v1,)2BR\@R\ KAe2BR\:X d.EVLqL!)(BS2`' J J^B6sA*@>`*p#B1ճrBTa( N+HtP cc`>R\Rr;Q6tL uWQY3J~ ~3}+uiNDG ZEʛF*N/\lDy~ nzn[=Kf=軇t|]xrk8 z8 pP>/Qp\Fz(ߘzM4P.5$ט?__7`%|-<%[3re>YϡiakmOȓ.a-`5|?hmC7d. Y<@ֳ~ȅ#28 !C9hp NïIy.@'4vr=~r3ufv A0玀\2G%X/+*uzܠ a a0FHa q0&-p+0&dTG t{aS̄Y <ax9$0')x30`a|_JWI;| ?`FVk'X )3R! ~ 6 .{r\l^_ЯX z)+4VNM5J1LZ*PD/7ȟ;jC#4u1j#gVZYזEa9c\:Jo-#)D}&o>#Met!R)ˈSD "H %DN4Q !G V C+J0Q, ˈeD2aѰhXF4,# eD2aѰhXF4,# ˈD2aѰhM4,# a"!L$0e|W߳RQ:;qJW )!OJDN"U"#XwNKh=pHoۈ0Q0(GITF?#~8FQ359^l 2"XD)D}^ P3>+,{+?Lsg!gG-f;FܫpvR@zU@T@|^wT-ţE}]|SB1P.#q{|خNls=lS'JL0_ɯxded%dDžhbjb+Ԏ|'SDe|ߞ-ُvh?*>슿\k?%RY.\He*%4éRg~f~5&fq> \^Im')xZnUY!UCJ ŜK5!Uˣ(QɱPOڡɨEȻQȹDlJ@@q'u6\|/;:";ˇL]EϢa#Ƙa>/RkdЯSk$ҝ7&?M͟  QwԇPSjCM}59ij栦9ij栦9ij栦9ij栦9ij栦9ij栦^j5uPS/jEMk-QS/5I-S5QӐ0 QS)4 5MCMP44 5MCMP44 5MCMP44 5MCMP44 5MCMPT45MEMSQT45MEMSQT45MEMSQT45MEMSQT45MEMSQT45MEMSQ-tj!(?QПQΝ({g(Rm8J6ʸGVv~c/~֕*)%f6#_~__,ݘɝU{0l}Sf{*y/w9:#wW#5ޝFށ̭vemr6hMSf ZZ;Y}֌rfPL$x9x9=Uv._`#쓳P{P͙9WXԗQ( ֕tU-Qu#*ZOP9r,nx2L3WnGQoGYYo*a1Y㈗ct8d, '}-F^FGѱб CGrCb+z x^D\ACV=MƁ&@q8P74MƁq8dh24MƁ&@qnh24u@+ʊk5f 1טk  1טk5f 1k5qA\c܎LCwƣ;уAGS@/ z)z==D@у'Ѓ;z= acQl a{g[j[)n)Gg_ MiKe2p϶ UohlqDnjq%:P7Ŏ~vs ՖW T[5%хgs3LwE>ۗ[ފ3PoƏ867r6lOLZkjS3ιnSfԻfZ\+g]69 }Ǒ^f^'o4g=ϽLk97ofondx^՛&˚{阦Sh`ӔfJ孧f6[<|Lyaƿ^L0.ᑖ[Jjumj.jE~6m.jtW|=/]fng:Dsa"uTUu~͊.q׬#.]m%]u{e{έGT[[tOG nMew*n#7_!_$'|cu6i۪ϕ'؅xt>H;H;>H;H;>>d4چ,% fSɩ5ɩWSɩ-ȩSȩMȩlrj 9FN.cɯt>F}Ʀ/Ne$Neq~E3(W=Ϩi}0 o5D7@5bM{C% ZCh WB;ܕa0 0 F( c`,0nM~Fi}4Ѵ^Ѵ>GhZ~7ձ8_M//ŗGZ܈7Mkq4-Ѵ8GhZMkZ6FhZMkim4Ѵ6FhZMkim4Ѵ6FhZMkim4ҿ@Q3^ʹvzQ e Rj&WBKffka.4:,fƵ [ TY$2b[W&+u#h)a8HmZF]XjǩOO\uWZ[qL}q ͑lma9獜svzRܞֿ޿`_pާ9=۸2;қ")X'\o.د_Idc4vooEt5ؓ"{2{rGﹾ_bgw>΋nluw=蝽n?Uס/1lpn$/:e ;l[sP5F`ocvVƊ^0f4'͉1&۷D Ġ;Mѝ D{bО'A{bО'A{bО'A{bО'A{bО'A{bО'퉩 .aZ ֝m}EC Z+TV2M٪ƪYYqY2+UfʬT*ReVN٩2;UfT*SevN٩VmQe6F٨2UflT*Qe6F٨2Ufl'zXZKkc*p7̂EG!VrJ=Wh}#oH LtXZKciu,ձg[M屴^cZ%)I:bg]AoQw=haz+ gr0VZNZ is0~9hU jEZӪ*%SOWvKkӚ& t7X:Kc`,ֶuX:Kc`,t0X:KWT^qF>y\I8#3+NzI 81 ĀpbA 81 Āpq/3D zA+qJ4R^Wxz&Q缱uZ9ZR1F+Ξs5{FsqwM#H@sԈ#5:HMWnu{ZBQOƳj{i^W:= BU 1=fW+c-Xybmrؖ=5v5ٶ&xcMU4RS2DRԧkv5_&} tk87lrU\YUmWrf8ά!gր3kș59+8+8́u;2)MKu2;C ֏̃̃̃̃yP?23e-x 5h'~PiySU;gtK>s2vNN''dq8rxH=#y㉢ 0tWN8'd|l265'cdlq26N8'cvNI;c'}줏>vq~.D=#.<_ԝ_UQ? !w%eȒ.瓇~#w>~}"[8ƻ^kFB#xe<9#Ԡ[ή73Gb\7xa?G5"̑8; vC_|Q`9DZ:gT,Y*r=IwW+=ոȞ|] J^OB_%#yyU@tW| y!^16{5{XϪr{hz+ʽrq+G^98f2^YTmʽtexvw=k^p>ryآejU;TXc>fAK-̠}ڌu}ƺ>c]8w9T Z+r^jI+----e-eeRmJ^m`[`}Z&Gj$ZD+;Z{U&-a---.&2LKoKWKoKoKoKNKNKoK2OKoKOK%Uۮ_sl 7i{cڞ@xE0Q~G?4Z 5F?\C?hC3=O-1*mLDQLZUUEc}јhL_4/Ƒ_;iL_4/7~ۘhL_4ViDM% )8 jVP@bDCeo_ zs Nלrmzzm'y6LcWc#8j"AY!ƻ.Xw`MZ۴l&- e#ؿ?^ZZՐV5U i*ʠ^_6!-m&QTYު$@š67D@DPvwEqWtQ}wwpQP5J@@d M2_;!,.KJuu]ν9OާԴPjZ@M i3m-ԶPj[@m m-gVLPKufjrYszV.5 hZ(5 hZ(5 hZ(5 h: k ab4R\B).'|;\7jmAe.G~߸e4=[" A=38W q+8yvxFzfpƎ$l̃Poܧg!i9آܭ9J6G8R,؊ҪѤ*ZUW+}k?g̞b>jԁvqϱb1jV1juVyHeҵQ>QQQ975Q5Q5Q5Q5Q>s|t_FS-9~Hz"1Z$Fh-EbH"1Z$Fh-1\@ SdJP:n|5ߊFb{]ό#q#}$>OGhm#}w~&BGh#{v=BGhRP)k>?')Tp8gxꄅe9&J(JFt(O(J(J(J(J(J(J(J(JXN&= :ZVèUE/I͢,J͢,J͢,J͢,J͢,J͢,J͢,Gp^2nUʣV1n 7q#=n5ͣy4Q`,v:7p::3t 9Éa5ͧm>ͧ6S|jOmm>ͧb+hiiGiIW1Ut_*J>O*J>O*J>O*J>-1PF±0%\H NgRN-F|3OQQRjo$8;lh~p[۩dPFDD)ZQ[;{ yӯQzJy6s=Yj~Dm/l6WQczC­$# m?O[m:o'P:.+~=γsK`^*Z]A% ?I{^-<.eғ<Ѽcَ xNKzN/կn7WO|$s= %:i_kF{`Wz֫@ f,zzF-jަsuAoUKtZ7IhޢVgIZ'OHZͶ5WͪM)T]~nN4`ۛm]-^/ߙO簢y_50mUY7~#x<Gcq]k1Qk',>Sitp8\p  DpjOK2p9\ sG18x< Og9B`}X_.<'8XebVI9W#;Ye%w(#;ObŜtϏSX0`0 p0q`48'Dp8Sitp87߁-Vpw{4^]\5k6jiE ҙz.\z׋z%2V\X +sae.5_LY`.(|ll! dl|o\ Z`:| >3L0 | >/% | J7[0y`>, "=X %%`)X2lcM~;.l^oxl!2ߎ&, 9"qZ:u ߎ:5qB +G(ю ʝm{ɔm*j:w%C!k*O)-JI"/ZG ʬB<35rwp|{57}?|N*tmd`bJρ́l3$ڽNoso18OfXk7zfWJffLry^s/gZY*P(J=I9R)<(6Ԩa]vٰwð.Ō0IF+b=8hjy(z_֧qz=s<롞0}[tWӫ8ρ00 X@ 3{zu6-kQ?_Ot7zEI?}E _r~'2DOCΐ !#*9ڷuix!vB)k>[q~a}6iƖ_0IF֏X :.H P JQŗG{Ek,ᔵZ?n  =,[Z)STJ/M Itzeq2iӒ/#}g12m%5Az+c^{^v?;R=0&3.e,\d PyA+slSaO2&^eLLcL,(}1cJRQofB)sN4כU_s٨BuDZsZC#pbGDOZcßYsօ J=[)|c /ڥ,{7at 5Tgbbkl26ẝכU鬹=IO[m_}__4 84ח-o_Uu,i_ھ}]1p{MD% >Li`Y -naՇ^ļG3˝cuR-r/3NjI;>:]NV!ev2 W*3;ĹGUS.ξ3}鎴rX茖{ry`%A;mm66۝_39LαNUiKUDMԤ9y$K Z8O&ﭕ _[BěsWs\o9G]_zU_`_|_|D?0ח2/`N X-Vۢ6S۵v[=ոKx@l[GTj]ImQ-v%DI&R-*wa```````]w:p=߹[biϾwEo:=|?^l`XOAɷ]ۡ~TNžo:9L]nWϙ#ds33b\3(Üj+__U+ԥvh~}nSW>BQѪ;= S;CaBu^/Qmԟ[OU)fUUL7=KuӰbEXfz!Ujhd#iS]w]g:0KU3Tl~XW`~=D?ƥu2B?ݪWꩾa`8FQ80ƀXDO'qp*8 g0 B0QbSƩ5XTq*8k5NbSƩ5XTq*86k껑~>-XG_]axDO1/o^Uj0\1=|<Ow?3Y3^/> xu3o;Nf/ j{^l/e`-vBabI,4):sz -jX:b<@[_oǝP8V\~|,T|Or uoә曈\0?'?ӯ%GIuL baz#@oGOT}(fc` `F`8ǃ10NN p&8 ѷbFerp]Z[ޯ Fp?{p nw;]n܋O/TԳhF_8 C=8pyo4F(pް'+aG.욬'cƸ P6esݪgԷ{YHzT_zL/p=/宗` ^4:l=}p~s﹛{|LX,0y`>S5#_7.wx>#1fYS >_9Ko`.( B|2}J PV TԂ:P6`l;`'n p^nY~Aa2A(1rA+oZ6 h'Z@G .+8OkLp?x< 3Ŭk1Z̺5LWk`z ow{z>|030|s+5(߀o\P ;,`1,K2 ?V(jTu0*P WV-`6-`+ئXI]/vN 4g  < ,`? ,=ˎ(1.=ğoG@dsA+ZzUϪWUv4xFY OV'xF|>VWpz8Y}յdup:8Y,'p4'+p,'KpNV'+dpr8Y9NV'U*dpMp 8YVobծAzk$8;G~/قf+fuinV7+*fnۻ^H'ge~%g Y~%g Y~%gri߄YW[ق%j ZsW/|-_K|-]ppj8[.w7 30|sv`fW t=A`z#@oG~( p,`w#Q|I8_Η%|I8_Η%|I8_ W+|ep28_ W+|ep28_ W+|ep28_ W+|ep8/p8o%o%o%o%o%/p8/p8/p8/p8/p8/p8/Kp/Kp/Kp/Kpo9o9o9o9o9o9o9o%o%o%o%o%o%o/pz8_=W竇|pz8_=Χ|pz8_=Wop:8_W竃|up:8_W竃|q8_|q8_|q8_|q8_|q8_|q8_|q8_|up:8_W竃|up/Kp/KpW+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W 竆U|pj8_5W 竆U|pj8_5W 竆U|p 8_W 竄U*|pJ8&8&8_W竀U*|p 8_W 竄U*|pJ8_mp80pj8`5X N%WR6+RgJ $~ ׯ/=TY|ĵl_hq},MmEknMwYOm'7ߞN5o듵ڐ:qFļcѻU{}R~H+:GL7n9k(u^1K 0gmi,;{}ggڎ& K|>&菥#=H_OeSnMNJxz}ҮfLs~C>ebX~kxߨ?lkEmZQ_,VUO@\B_$[wѢcێfzXNJ) Ss޷*}ymE\Km5_7Vߒ{^g[\L`.}OWuK=r=I-r=S>Y,O-zD/Ryc7SH8s2-hyi|RzdϤbϯ[87QAbnbη>Şgx>ԏ{m-KMOJM>魿d9U?'[nhH.҂ϥJ"%s?5MAk~匧VܕS:6іj]Ǻ.aakkvqq:Q:u:u:_u櫣++JoB UA}W}ݫ=={AMMuoKu}I_^Bs"LrMbŮ9%tLzڔHOӦSo ?e}$OaX Y9k0LSkKMY̨؇%ab,K$ V+ sU<[ c+bayy47PYPzREͧlǒXbI*X9Lǒ =KDbZc;6kBb X[!CXCXCguأzcu}ԑXQ?GsxԹu.$yż:Kԥ2uW9d^5SԵ<근:ԍXMwfu5[݃ߛ~}pyWyu0G"яԓi-O` T1188Vu1Xl0'#*l2F<8[ZcuJF5_FKFDƆKCD@DƀK@2"2:03 ή+Whddu^p&ovwVuNu7{뺗-Rm]Ucur z z5z<=U<PA;XSe{ܥz={TW\6ޙY&Zug|Fr]]5uuS|C}ǫ߉ ,Kgܶq1=2Z(((ȱdX2rB2rB2rB2r 9n92rZɔ)#c0KY.0\<),3W\sUfjs[Dn˥r-e|ĺՊeN[N**z†SuzYG=ib܎rBGk8nGk5hyИ3Uk5yI\d]i]*z;OZb,_^a*s'kWkŭ YXnܖzOcimlٖbeEw"ޥDg>j4Pʨwy37~?~_?у>g'}Mp= ƻ޽  j8HXk`p]|6d8I9XD[;t0~x密F^DDY;aqTGD /~Jӟ2.WAlu"fmu-o NTZOsOW=q-жN ouT~EJbO>RO w^mJ]*1R=.!u4TʼI'XH,9Q/k*?c q53~'- "y}5ubh/$ҚԾ~^^AlVS[GVCl'tGKI8ׁڮҿ a)zO9gM_ &H;PO ^l52{WOWKޘ~8Gs'#p6KHu˶ KX{YmkC_Ϲw҂UZej(zOE0^"tTU7'_OM78ZRM/o|jxF!3"xy3*BpI<Ƿ8͸mo3v|qیJ[[M<׀dlՋz`GI(b%u /<Vթ0u^wc㰰c[ر)Lx0bF| j^X5aaaDv7`=!8B^^u'|!|9Sr؟!%-Vhb!(Vxa>ŨbPfXf_uZ:bX_3,iubXgH/ u:bX)֙bmXKXKX[X[TXG,#^ʴlcخ) ' ., ., ;6ŎMcS;6ŎMcS;ĎMc[f w5݂݂'*d̀2e g;VNRKJ[DpECT[bF,5Nhc݉ l"}-ȀDA"EZE%KZ<E2$~̖!#$_T$ZbvfK #k5GĚb͙ϔ%џ)џK\HF" $˒ϐ/ _DyDyF ÖϐX-_b=u\>u">D|Q=l\<2rdexː(/_F]v2Z˨ H˔.[i2޲_x`݉ڲ%j3DUe剶bV{-:-\+ZIJ4["8C"8Gclq6[t[t[t[;Ct[t[t[ttnNӬdt[8[BCBCBC[["DD!%BJhI-_"DD%Bl-bkedɓY&_f|edɓY&Of /[n^_1}O,=(qD6CYLyHO8V|*QmL7}%N)\~\ئڟι;?H⻽eupzJk 觜Rk ?(ԹS#~uly%nĹZ|z.XE['1O\KLfO~[FĂ-"TZszW#1s:q(5?S9-ֿM&-\zO09oOrԦ֛˹Jޟ-[c3bap>Ow֖`_[Uuw'Gs6D} 1NTӗ9^?YX^ڶ{5sK;}מosčR9-;3(U.!\tV~>G/QMWǩNn}oj֍TTuwJzHO{֩Ro:ߢmjVERso-Ihz}>{}o3R u7di(bgO)wliK|l9Y>|#FbR'Q[ }،XxŞ7{z.$=Bs\6ẍQ9qF+yFqxk q.}Ne=Q">ltf(f.FtrZDr~ ?&te?2X 33= +b%_bc+sY/u>= ĆbC66Z׸p ){Z2ݕXUfYm`[[Yn"X؏td}{FeZ,<[,˳lX^D,/[,/"-3<"v>%sykg/P^,{%إ\v:XjaF3JeR#Xj-:5*{u2Q xU:jJ^){5F{UPj'XbC @ #F&X^G#jDYw쯃_؟_/c᥺ml(`=F??וe7*4z=``lќ9#Sќ<9Ds$ C'K22DrꞪ7o|&˷ot{v3tvfs窛 0lz[ĦuQIJ Śu/p/PK{sp`ش_l{{eW^cY77ѽIsovoV[NvUŷwz'*qLP=.q{< }z!=nkll3YoOT>|C|O8?qW ;zh?DF{GdhhhfoTMyެdwA*__"?2U_RK8a?j/1[Diwo#ޞ0;"X~Z>ĶuO˰:Dz>^~O^rz& f=A?oH'HB=@al.2~"oOaU1z9W6mMq_8μȯB6Ӓ}c\پiI;^g8u=>O8ս,$_of흇9&OM~aO"^ܴԯ?`67{<wbdc%zMԙ-su9B'[9Y$娐m3&%MkDϱ#b)YSyd"RM=q瞊!Fɓ9xE/sJYȻ)L&{_*u-TquS@gz[>ez<e>{oo^WU^cc}=~3G5UhZkS99e-jll()NYJ hM[lOrJ˟kg4GFstU+T&_:Kg{K ?%ۣ] (ν3,hL}g=H+$Q" 0,0l0Zc=sN^F%#wLѐƐ%["D4nh+uS[rENPK R $%I rUӔ\մS٦R?U2L|aȗN/ p* \0\rzKq_rFIBLr-rÒ\w:i/ܝ[K6{d/$k@r,aKCHr%Hd8Z2zJ&Pd^%f62E zOW{ڪռ KD품D$)=QwPb~KX}$ΑX: tEKXҹKKgH,+tҹE(zDm$n#QtJˑ(:W$n-QbmJ}ܱbs*6wܡbsu.6w\`\|%ő/y$r\|%Y%o ̍Qn_ S-rn,K8b1T8,vڻ_WEh/@{QF:GԁuQF:Gԁ~2|xD'@Q::0BԁQڈ:u Wԁ"QrEu Gԁ\Q:pDu W[ԁ\Q:!@QrD:FԁCDuu Wtt-h#Z@N~G!@QE$QE$ 5Vrf-l|JLŝŢ !G1 t({{jH^MPlɮ -96AK"*968t={@u||ɨɗN3IrcCCUg&:HL9ʖǙY:Eɟɗ$gə$ZFɜ$3$sfd ̙ޢt$:||Kߜfκ!y5$fD(51QI:JMLi$GuNߑ'9-#JJ%',Jd%/8~qp4rh.8k\Zmɕ+ ^T ^ ";@t\+<$ǒdvF%ϯXr\E9D2zJFPwH^PQyHvWӾȾRe<@4w 2DrNKUgQ E'hуJ6=(Wa=d"w.=_`aŢN/ьfA4.4uAG|_+e{slV X~B"uo%2_'#"_ 9;qFu v_ub;+:Ӛs4:Oq«jl-#Mdt97[:-OK9 96}{u 5?Tfcbf/T R̦hq/d֟/d}w#K羸U^IOwxZ>YKߨ8MzJ=O-3S\ R-x&=glT.kzzO-TnOfq?+\{;k#Fzʸ޹$?\fLi Ku.FK[G[k/O:W: 5"bW j9V.\9yʮ,dpVPuKWg3iߪĦ11c=<==#=O,:ͻ3z!n'#B|EK}S|}7c'|_---}[ķԷ̷W[Vr*_WK|};|?vv}iS9f;uuuuuuuu<̥KM,Em[%Ԍs%O*\wɕxSWsjLy%--_b~N[(KaSpEeJ7촓ʠ^f>a i+EkbYe4qbòَ(1%[r%We=]"Q""Q ""Q";I4v9ͱhEs,cw}D;Z+zP7@! /GVW z_D2hկ~QQ Dk-)[T?ST?~>QZd-2h4G%_hYelA_?hE/Bo.pG}ŢE;D*X*{D+Q:ETbH.;D, `;Ht.unuCD*jQ놈Z7DԺQZZW j]kQzZumD'j]umD;TԺQb.j]uYֹ[1[.$j]u}[-ryEEZgZ.KԺuF\^KA.k\S;Sf2G;܊D;Hp+XԺr[V$wZ> nDE;H+Myu*OԺnuD+9@欁=rEr\#W$=rE=rEr\#W$=rEW(=rEr\#W$:`E,Xtp}tEr]hE(`'[&I4N MhD&^4΢ , vM`{&E4.ZZZ ]ͮdKl-5RFwl!֙ /g*KhjevhDG;ZtEG,:`ц6@ta刎JtEDGk#:ZT5-j_4iYeȮ5-KԴdW%jZQӊEMk' Qк],P DGf%^0cHJy+.rT|'k)I rT^,y8`&dɣ'8OgD@?:OkL}_,|P mu\˩B^O>?AvXpv0fYFѴQ.zn -Q,D}2IEClyblycD# ~Uݧ)e,n'67+_i;yz&1|Z^>ڳyH{R} u<ZT\s|^Ε d=ܹ?Vzzӗ)*uoѓU_./E`~f~W[c>X^wbz.S e9~w 3?(;֪OwcAZ>g*uz6XN&osAtVzg%{;Ӽ+Bdy~YQia'GF9kݞ s_s@ث彶e{}wJ$ћ5W6'd`g,=єɘ'?CC4Yv pz_qb"7H>'Y@A|Al@D ۇ;a褷yy9g[|o9|`~8,m6`ep?ZY[XZY̞v8 ,ti3f f߹%5$5҉JCԪw$ QWTZ҉RQx$2%JteHteHt(C=!{BdCU&m2Xgg,'$ΰ%Klsmf'ƚc));#K[>6'܏//—”””||C||C||Cy3 K5oWW@>ZTZD0E8RT ^'!Q-,鳐E,EWޢZj-Z,zEo+ڈ^NL+ډ^⎳NW^+zELBvW^!zE'+z^INb7Q+ډ^q>+ZE-=$WpQ-zH*Š(!Q Rw:CD1h/AQ zն-m-AJ+)ZAW>bǽŎ[Jp]E%$*AJP(*AD%( ,#d<"*AJKTX;~ډJ)*A'9]D%h'*A**AoQ ytPTBQ ډJNTntksD#Dsg;:[jHƪ!:@_;HA(_}eFFrk={$x.Js+ϭd<v2ɨn'o;nqP^w 9WBB2 Y $@; e(]d.(sAG])%|גזĿ%+o)fK)oN;II"B|{IIfD<gV2$#mPmQTJф=(DʆWReذ5~e} "h nP@|` 灉20nw#)< vOo|9jY9o K`UpCp[pgH|`(jj* u :3t^hb [Bw=z*|hJhZ{C ЦPC1 [p8;:>9#37< <$<*<6|jk7o ~0XWo<\^. W[;»3<̌]2/㘌a3N8=c|d\q]gܛPfjƛfLϘ1'یK2k226dl؉3e3#2ffv<4wfA#2d<3̉eNμ!;3|$3dN|+̏3?*4sQD̚M Y,++:}VY=f 5*kl֩YggMȚuEֵY7eݖuwփYe=b+YodA֌ϳJg-*ZUU%kG'dFr".#""DEFGN rIu#G<y"lȫ7#FGfED,,#k"U mQEHUm0-zhwtPtDtLt\yщˢ7Do?H)iѷE?~*Z]]MDFk lWn>sv}d=6쳳'dOʾ"웲o˾;Dz~17 {F%geʮ̮ޒ#{w2c9XX^~cbbc'N]$vUͱc={6r؛wccbsbĖ5؆ض DrZ)shN9r<3wv7 l67flVDĈRDHbH!"R"H)RDSL)RDDRDDD#"FHy)y;b}>?s?yܹs9 5&ۦfٖVmklml[m;lmlmͶcӶV;&Q{žwٻ{ۇGG'ڧاgۗWW77۷wُ['gmCv6rIG111QXXXXhrsltlqlwrupvuwru Nt8}Έ3L9;:89{:8;9:G8G9:Ӝ3s󝋜K+5Mέ}΃f1 ig.r+J:\]\}]\]\#]]\]S\]\s] \]\+]]k]\]\;]{\]\G\-36-nc;wqwOrOupvs/t/q/wr7׹7wOzc8<>O<=]<<==}<=AO紧˼Fkoԛ𦽝u^޾aޑqމ)Y޹eޕ޵ mޝ=C#IoO}f|1_җuu &ffV||}[|}|{}|}G}}|g~?S.n>AQd4L|"R `c\@ HҁN@@@@KdL- AsCX0;{{cビS3 K˃Mu-]S!!duYB/ CPPPPPPРЈШPChrhZhfhNh~hQhihE1&>)5#;/t0:::j 1l [îp  'pp]{Wox@xpxXxdxtx\xbxJxzxVxnxAxqxYxexuxmxCxsx[xgxOxPH%|2|&E9bx"H,d"#]#="#"#C"#1Iّy%UȺȖȮȁȩ2P֡R( bjP~ ˿ψ§ 8>Qy9W9y|̳42Cjl_sg) {^9*pv/C g..4O"K`W +A E~n½tNC0 !4A&Cg+惈mp=[Bc&Zxq&sDI~&POy?|dktu@cڑ(+У--UPpWb~ D>8"hW\yV@i z M'M^+魥q-w@Q ïjV] rnR2<@J,=_W㍨>DVA},NC|0>CUsŴmOdgGqӟ׃j)S`CF~ o+ǵ2R;AРF5ܽh2W{%Y߃W.ڽj ӳpZJh![U[GSV(oAX6"]8:7S3?i?*X SS2n٣dN_Tn:D$KBVo^A~p OQF'<[w[ Se4&Fmg}tȢmRJH}9xON{pGt><w:k[ΙӞAueM@Orꜫ_.)}Z,, 9v(ѺF;p /)*i4i.D0uD2io^y `Gg3ŪMӚ\<3f"[8}K>(iyWiLk2̳ tr'GI++[G]t:_.w^Us̓r%`QzNinxoMnƮk֨lRM}ZsQy'`:Ү됇i?_4FC#\{9 ݅u}IG\Y*˱GuDzM#_ͣMsGGE(q5׆HAրvkgq4طB h{H{}d3F;B RP4Ӯ&>a?BFIZAokC h/Ґ0TjCPcHj e W:4t1\e3\mjFa9*J9%g@N^^*?!oG&lCABg?3%\4NR w #HJuTf ݄Bw寏GAث .( )Ep3~:oms_> ##Lwjma g=ֳaY{Dxb1!;)bᠤpDR J {E H.#BRH"iffῤ[[3pҷo 'OBhV̓F(=-=-KkD9SN"Y+ѕ]t:xΩsW뼺UWL쮻RENS^KG'ޚ=.[6]ozx>#7o=^^oҿ?(ޭoֿ#ޫWLO2?/~}M|A=u*>hp8paK<⋆,/ϖWƮ+[˾.o={#ﹼ?y;^a佚*k޼yo}}wB;sȌyR;Or+*URx6ThtF*M!ҵơۥw)`X/3c'77N7/ 6N2Nn5N3XϤbϥƥƥ$rJASƧ_k7tZZazziM[ƷGGKsOH'2~,iIB~Фdzn#'eiE~Bie~QUZYRS^?Fڙ?6vGJ/__Z'77k7|Uf}辚ɢ~~O꾞t7yU7@NpHAn%? ?}K&OӍ-ϔgFs9{tcUS{嵺䝺?^79kVݔMC; ^M̗Ed&.쫄JaJJC )_8pjم .)\^p]- w-AQd4L|"R Siiiiiii頩tttZĊE"k(P-J:u/UԷh@aE#F+X4hzѬE -+ZYhmцEۊv)_tHQKɢ3EmfY662Is<<<\ocodjamg^h^b^n^en23o4o1o72506572- -Ŏb_q8^*Xܥ[q>-Qo]ݼ=}C#c iޙ9EޥFz&Vn>Ao|Fg|_ԗ}|u^aѾq)Yžeվ ;m=C#I__f1ҟww'ggW[{GgB_ R.n>AQ@c`M`}`S`k`G`w`_`9p,p"p:dAc]@0LN````KdL- !sBX(ʄ:zzCcBCBSC3BCB CKBCBMu-]áSa!lw[Ž/ épppppppCxrxZxfxNx~xQxixE1&>)5#;/|0>>>n1bX#H $"HH]{Wod@dpdXdddtd\dbdJdzdVdndAdqdYdedudmdCdsd[dgdOdPH%r2r&V+e2OY,V,˔u.Z֣wYeCʆ՗)_6ljٌe-)[^l]Ʋ-ev-;PvhSegBDQ_4GSю.nў>AѡQѱцhctMt}tStktGtwt_`9z,z"z:Zʍrk|z /+_Y|mw)_~HyK3m1]Lc'bX&95#;/606$6Q}5RƔ)eMRT4HSRu^aѩq)Yũeթ ͩm=C#ԙT[F1j<5XM&SӹkM5j ^S_3f|ͤ53jf̫YXfyͪu5klU@ᚣ5kN՜M iCCڒv}H:N;{GGǦғ3sӋK+ҍ5M}tk-5֚j@m6QT[W۽WmkՎ];vb鵳j.]\veڵj7nYv#-'kԶet9c2L($3LLLLL̐L}fLf|fRfjfFfvf^fafIfyfU).1%=+7s@ϭ;>oZswEV}Cwde&o@;B348+f=8^ 1J^,K7cȃqC^#87%͈3bJwAS8ň}k`R>owyS| }v:K}xbW m\@ax7$2 óڻ/B~W #L+X}3K!_ W(.rsL u ަQ8H5{x}Z5[:h H7} gpv N<ʕ!?y ؉J; f^i7fHߦCy2JÕ0HHhҳ?9D܉#lFA<] R 1E|XqST+q34HՉ< O43*,è F|=מNT; D<GdsPJd9Z+e\ʿKr@&Ǩ_A>dZFnw!oz/۟Ⓢi ȸW %x(=F)QeУR|_|Ek"HqV %9b0P8t,,*%/P T2 Z( " U<zX6;V.'AZ4dL3 ־8 $:Ggk=BOrmUd ?P]@FB y#>J/rq&"9bn]ip2ts1+"}!,n< Fgc KH3q!bk(+)nk.a "Jm6[`t/Wki#A}1;4 \>GkC#z- с̍j,*=u ˕/^y*D{4gBµ.ZLrjN#"< k S{~N#~50F  A 4 n8Z{SŃ@Ns1YD H XcvfeT>B'b<r֬ ryFNM%bN(sd.jtڻ^dhf־ ֎HTWSo*IKM=oYxY,'qM ?jSC2lzm0g?Tk qd *2 sKv3H-YB3i^'-CkddıA? \ F= }_ZX$U.Mg].y@0Xo D0V4'd6$ks$C31}Ix *:a}ބpni~1Z G43QG?H5Bz|9N$ VgjOM"BiL%ܻ%q4Ǯi:% p7٨[qҤ!E Du[}}oiTL@ A#:y#C3dXѐU1O}0^FXd^E_t*)tUXW:.{Z{)<_ލ4j+@=62~ZJm"}Z?bթjM胫_dX6a 8%C+хwRe/rNyPi/MJbp^zǑF~X"0s`YBFs5&N}0d9?F":2Zg~I{iY91QwirTsʂv4ʜFs hfr\>ñ=3\j1Gş=Rsk'RnOsʱP c(cI'\OEӫWisOprِ1WQy=RknOQ^}C|#cyra":'s(ld>NGƎ#9hJo4ġn@8.bo\]kS/q'_r^:t׽9 J4]L2!WV)#riE-V|-FeN< q'_E.*B{?hHc r:s׸']PiΉM_j*qiNij4ޚs+=hב+rG|vVk|rK/\+!Swr 8cιJhg*if1W4@]ɹeZJw"{AQ{*<F,jNn/Y }DLi?;N-ԯ5_WӕJ\W 9 WUrz"fMn&jX;㈏=pd|-/g"<.MV?Ic(FD޲*~\Ą%g-vWWsqҧR]=K Jcfԕ;} W9#(K˥=/_yye&'TlqYe$B}Q4 \b׈~K}I>4@e kJ@e MVJ&{A.1/LrhnCoC C.k'"k{ gB(J45}UaR>gz\T.jb_Q7WH /邑]ifVIM*.J`IH pp™qf5p_'7*umpja0AN(LnR f+}ShTF +BO/ C厣1a}ٜ%jafwX^aլZ2*LVJ/JY}f~(H?~¬OY|]!Kd-j]Nw#Q|"U|"[w)W_aZfO&ٓYww-l#Kk(6XC!Ύ3cFѯ{Xfƫtku۳u/3^ۙ=3{x5guw3Wnd)9}qqqogOgO&?lhWk ?;䝆#Yņ,(X`a s(R߳0O D ˕J MJX/-JzoVzz):u:(^ؤaRfOVeaMUt1*&ĴISr# ܣ\ƶhј,-;SA,*X$<^BPX$XvEB*3y,:&oa+1R;.DM }J(!:*z*+a*aF)a0Y Ӕ0S s0_ T +Ш5JXMJتJح}J8f%S %VB J0)J*!f:)N ݕK }0@ 0L #0Z 0Q S0] 0W X y^:ysy^:ysy^:y<57_Z#vXϱ9Ҝ^g>,x,K)y*x-j\? hː9@ ¾CO22-Hi~ oӧ@ўȰ'"nAߐx?4d?di.ZA@&)X$/({??(ddT"Opܪ hhM#oQiC [x2Q#-(쯉Ui4D,G\x2?cD]{@!vY߾\nҔ#坐?'I|JX{<*YJ x 4"e)6F!?8!%5j鈯Ԓa@hh:s6FRU߬m,iqG*q#7p~:%8kF6&Z`H~v"~SZ9!SOgdZ9w#ٖ\ZzT`h?4ot/ J@$]LꎼwV44'/5KXjȆhF"cNu I/jE<܇OCdi4@UDǵc 1˕E+gp;Y3Zn՘ݵah̍8 y[Sj]VA ߇~T\?żsFdi둂K#쿸{#zS~W?fבzru3ׯ{P "Nqozo؟ hE4Wa`!ќa*RO4*LhMEExSm.#8؅>;^n S>}|YhڗxʿӧžO"D|!/{[}ѮWy 8x1^h?4=#'Ͼ][ڪYՓӷ m{B wމ8Ns5Y^9WsH1y1ZnWw8yTwT3~xoѴP݋=b_KHwB/~ktx\Wx-젥H^_/4TYz6Tw^G|Ҽ%|k7y?@d '{y6d_voIu~CMECv~!eH2NΆ.:CW/\&q9!W5rM-oAp.2IvO_7;YcUDn /XVD' V4`uM /T[>)B8_w= 龍ttSpast+qn,JŪY.c>#Xb' BVfJvD㥫kJJ=uF4@$^, KC!⟤Qi4Z%ƈHIxUA(~*5g)sI$8wEFZu1{*o NݫFߍݯߠߨ:/_doTƕf;J˞ʛSyq*o-3t7ÖgY%PJeJʍy8ֻ1FuqZ6ֻki87/{ZO|<}4˲^odOdOOdTo͞ӷT.`3?c|xݚ xU֭[!q{X,a5 d ak &AA"" 7@83l}<̈u7F?0}ﮮsN{nw@ Musz$@iY!$5B'OD _oA4ZCC\V耮d XLDfnIr_UبwǢ157nF*`NLu﬎:h_ ;Rp 0 )-Ua!G_b$BTBX)}i@Mq|6<$ 1ע9Z#nD/mtC~ّ Q5Pqn@[G'@ P xL]7rJ p :'n­00 `Ɂha0iQdapp0]8N;:0U8C8[8/} EeUµMm§3 !ħ Cp5_DJX8e* GYDxJCI|ږVF cq' M- I>4l=F8Q8Ux0W8_8{ {0_X , G%Sw-3_Ԗ1̖0JfC,a)#uppp0_X ,̞ۅƒC#’U}JCY9~-~&c*/㾇dE~m~҃<[y8Cr&;?>_5ۃ؊H>؃xN媹>ku+lI%\Snʠ?uj%zQW'!uLV/ߨߪ6&LzN=~5^n=k*s[Yeuw~kUiW߾ | uFO^TUM}>RôV.a5N}>MNw68Mfou6Va}\ЯWku>~ .n~o*Ψ}yѱ;ǡ2S}4Α⬺`ҷ@*zN5Jo{P=uu1}]}ЂNNw'7:C/قlK v&#5Gn׎/P+d3! yu0^{/ڟٟ#ch&gz@/@S 65F[]ؼd&q;՝Hs90b0W ƈc@sBN%8z vg:ENril}2OOW"㹒诼yֿXZwcsɩYa\Wj~jϾѵ{, _aqLDPMY|bg-$v ['8/ .UG(wA4W9\QrP*"L #TB:MgC:K,rJVcY ܿo]<ށ[DGbh:}Ͱ 1Ha>`_UhvrF_Ѷn5m\7vjD7ZA[]Y[C4ɽJIQ,]gf"0@HLǭ {s4nc0v 8nk5?/a ,GGdF1Н=ѓћV`v0]f7lEfk3٭ɼ>hcn֯r3~w/*PO]j@M8PG9ԏpa{knב+nm>rOxW{T{L4=.-m"}U4}MhWh7M$=ݷD{a?wG=G}ΏDE!?ao$#1%3/:k(~:eEdU+?{ڷG~}ks(?Us͹σzrcn[ǭs[+2pϱ_gdV̬$r_鯉wTiYL|vm;K5ڮ&*^{{A7uKZto]Nۃ#1q42כxoieڙon1feƙN3L7wYfoYiS`6̻͟bo[V{zzom -c6o{=+;vMctmuS [VNuGIw}*GZ}Lgkuif&t7&Ť`3Ĥf4434\3,0CfYajl0[379k>3/̗+s|mgy!o+{; R xxY&P tyPLJz  x՘gtU%464`zwLyC3!B HtB-Ѝvx>oog$i4BI&HB=O&\b[d KvdK\֒eZѲ('+9ENt_9]SzI1 "@$"HDjFEF."BD"&"%*l*%WED QJE[Qt}DwC}D'b'1Q֓d}L5YF9i 5h=m.ݡ{El1[vm/ھ6^ll(.l,k&bl#[˶bVqˆPCn[Vٝ˝r#.]bDK6[ dd1FS&z˪,)KⲄ\'9r(rh*ɚ,cq.īx oFMjJ?ŊbX+FClv[fP앇Hoyp `8&U`da/K U555 ]==#Yy3&"UDDdD#jE1'H22MdH_dȜёm";dR3EdyRQɢRGZ4HYDYd{.ΰ8w}>|H:b!`i ="’, _:QKkH_o//)=-y%=-CK͈#|ԒӒ>2IZc2ῴ,:-s]$-XXny-+muO]./reohbБzmAc Nx|R&$;?Tphp!2pQ,\67ǝDnueeUk16omDGz(yj"k]z,+zy':#Lg.^>yD͚H A9ZJIHO 8#z<H{7E멫&p` {+4^* fMsh)圊qJ1D}QSUT9U^ƯUUQQ}U%UYUQ*VUUT?U݄jmVuySQT]5XS.j&jjFf>S3T 5J}~fCPjJc[Qe=%ǶhE#mޡQ.hlE5atJTcp #@h2;qN۸ۆV5mIq(Zvo؆NRkpFS[JؙT~Mbjn1}nR;un*FUmm0.?CTƎ ZK5^MD5 xJ &Z5?Sm5^MU"QMSKRL-W+JJVkZN*Nm0F6jڪ&#OlKڡv]jڣ}j:CVVGQuLW'owuRR:Ϊs꼺.xuI%ꊺꆺn_Vw=~zֹzgz^W5&So[#a(g0̋Fp^._(o7 Xg0΋+V".`60es\ w'y;W^B0p.43k `64kh~2昷sMl~1KR,7+0ƼXP,ep*,1H岺q.+ ָ+ ;J+ʸkVrv xqQp'ZCVCGu(MqGpMĽKNCgYq6E/.فⲸ"⺸!n⎸k.";z~y;K`1̋W7rX+u]XEt>]Tt]\%t!]~鲭gjq| +ռ2q~'2x#i>g:S\(.^WP>C)tAJ$H-DI-2P2=e·dZNf`ng%ce"l2!sO)=i*Pm&IUerGtY]]5ty]SWеtE]:Vʺ[McUw41Ma\pL qp 6u73s6M ` ܆p]W;ynNxHKǰx {^x U80#;8qc8pZޝu_&?մ3w-9w/>ǁ|E~'x~ ?4i ݂9p^\.jx .H! R@JH! @ZH!dPp" A& QB69 'O 7䁼C(0P C N% aPB9CyPAE9¹ Ds ՠ:ԀP "z2: u0[yo>@=(QA}B&'y9ifMmg?ƾdi[a|o";o }͠9gZZs@h =t :C ݠ;O^/ }wVa0;7 q[0=fan-!;8: N])t\77p*W\mZ,C6'xg>:`R2[mJaRJیRPzۆ2ضaRFlwl{P9;/OkP=;Z逸Z5v9u+]I*bWS/Gc7R_Iui}@_؇4>/co&W4ɾ[bT'ͰkJNM8 nqrήź6O۱ i6ؘvaڍMi6؜a ڏs^W^C[قv(èN*bGRQ#YұKK\fop{%s!.K]:һ`fl[vkq= 6cg]vN؍;s7= wupǍ܇s,< < <$$_tx _;|o5i'گd;NSESF*ϋG'^B?ro捼7۸8\Kp.17)S5&W*9cN9mΙV< <"ˣ+Țrܡ#eΜYu64Lo5on!r#x\3[5KuQUW5GU=7jYiVfYk։:QC433|&ĿQxc` lnn֙ _d/u,,?AxjXg0u9P+j0!j2+.|d5%(ۅXa}WM2xVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMoxX[8s @Hb3 l0xx8cgWؙ]ɗiߗi+i]+ }?XWyy{ι b0qF,Hed2,ԛd@r!&5 %[-f!b1dw$N_v8 .ǂIKR)vO_QޮdMJB*z%{^J:iU-]k:47C*G'dK n d%;qf3 @&,(P*Nm?P!Yz!N.RU+ԅ.>A4 HM!t G,`v`1Jͨd5+[+6YO|u|\ q¥x@/PZxo6vsgǪ~ s?./0eXs,)S qE9B΢YmY;&ͮRe՛(CY|'G?D 1&8x׈O h+#oOV{~?_vn y?[.ccL(g xeȊ?>X$- xZS ɜ'O >I }QwS}!z~R#5d&f&V6#0!ǩNnBGOhh<@&nnX#pr"p-YZ[ HJ(^x?Tq-IBdZ NWo>8gjVTZ!r(I_6Қ\]cM*Gsmi6Y?KʷW*B#6Ww|jS_- #{0{H&^xjuꅫUȕ*Ҕ!C㡍6RNߑveHXXKdCxQ/*0 W-h \ W,/XƄ|s9,&\aϩ&0\=㱯ǩ$'83Nw]ؿ MZfrgZI"+Ee.&P19-%^޺+^gM-U¡`BpCO2lʵ3poGv:V.kEvgM篠f 1FICGIjRȐ "G1vR"'픅D:}?~a{v{$=?,& GĈ+`g>şh3CJ!C'))Bz(@X*g ?ZѺFERJa(ܙ/ -Y N@2H?IJ4* 8)f-;Jibcqq$Krn1ܣr*uqltHnW(rt?Iip!PR#ZU:ABZQE$RXn_~/*NO $r 9?;wUhӱU|~E 0dChT覇w윟,)X%>xIs4o|?=2-+&[cL2=CU SU%GZ)tCm~2~>>{qC ߞ轰!T;m7pJM*S g(ᑹA=*Bmk1{HLtwA ‡z5QeoW̡0^r') ޳ &'5ID}>)a^8Oѐ_!뎱kS`yEcIG'{.bW"b/h%ym%O^<'t\񕽹XtYUJJ(% NRx6Έq&\߇G$Χ}O<3S<]Xy3r!}P)bQ1d&l=|{F)Fc)-S^Ѥ 1[G-d2lh E!gN"=/4t`H^1a2fggJ_ >.A}+?;Ҍ.{퓍'##}YԸԸI$nB5sF`j!h*Xjwt ~|G˧S[hLIz-xI sš3ıc=[&]+~\+e+*Ccmd0X/±⨱9>:h: b3"8 Q&W2߱xD ZJ"cE{uDb[}NSh/jPsP@Eਭpm=D|Ğ0oln*1Zxѳe3i!צ8jc$| O6zb $)zo$M2/ǘ02PH6BK+cI |0 Sތ)GCz?In-Kw3Kg˾.\>;qǡC[TޔQ(Je3:{~ .󔧻b >c2$Ė./jוb1@ryzժM2&I* T/km.\Iޢs|Cyz RF|$4YT:&^Z{-qJO{KdmX?|lRX3m/[z(CF (]}zCGsZԳ4B(S$B+HT!1)mqZy {_Zx7% s->]J?o^S!=Zfo%Eyl&ZS6|3kq͞`/&Mȸ07v̂F|pJ [ wb t7szф1"|d.vh$ZnɫHD`2Ud@^YUtg*yEiUMU-.)un!6 S+JlZېfu;慆$6o W WB_Pw'+]3Кbq>B>,&ORf ^onK ua*WR _jPhEZhT& bx+ku B֥IY-*D8BnFx -R~^ᕪhɾ!ءQ)>}bF1Od-9\* b~xn :}qhz9c= W<J OIZ6c̷'FvK@saSe4x"sH2QoH*bsꝉ݋WH|6YT1tW}ko#v^ZXSX ں(uf+ۑo+&\I~`.e.L a]aﮊ0d>g"ާw$#0v cC?!&щ)hP'PS_iW[-jyQOQ} ˆl;lSƌ c.wԜmm7@pU30RVdpΠo%o)P!Kk%/LŎrZd./ˋbdԶ80 O--tNjp;Q碶dgKaS}_#J}cpF6QKTrL:X6?IA,MTJ8gyck˨K)4gւ5m_ۑR҅xloc~6>XxNB%5YKuذ?0W{R{CZv`o@˞ڀ8ۻ!R%c0V2R!#MpQ9`4;bK5o {$XQl XS5e"t["YbjnfTR|eIʓ7$ω]ޔ+TD'!9_4"M$;g;m>gݳ;;ejr}u{ 5yi]c!@i M4R%(ط8*!>/gd 8KRll^H.} ]y\ҜӺrنΨ$#aZH`qQx}kHF{Ƣkѵ.7Ĺp"aqWlﺜ/t#_M2E޼-/T5q؊)r]?5'ef~LVnFOL3\XhwLl;hGL:(ډnj wwLe/T啠B^We)5EfI9vMS¢ӴiE9-4Du̷rP&745^1A!H8b@ioI'XX+l: c +UՋCȭ9(8*F$U9=ԇ0gHzß~Z`@V.O\D$G#i|Q@$y_=p+qFOD  i ex[wR YAd2>GLl1AnbøS8M3SbY?$$m7sSzocD>J>hF_7<ȨN:IlGhXrkY'!:uvP lipk917dAOœ&l3nm3x-m e4(sBhN67 x ޸}2g?DS))m%I3aʷpPk {'hJy=5 y\Av/ͳ$(WV[(s,3VJHaW;I]e-DK!HɈ7܉dR}^\hE+9+] wS/&̚I${',yS9m* )_uBȤ2@,=n2M}7QkП"F4cJp$[m;`A*l SQ%՘Vem?'UT\7f ,p:n,SfLo@ކ;-{px2-#mqyX^OX_mn# Q.)/.Ub29TJL֢1)En%8Zx_oVK:zR** G֫Э uY;ꡬ=\:^'K%1inczݒ8ȂӒ%}RV;5G ZO,,ghQβ%x0mOC;%ch'juL$/($tҌ՜WH^11$ !#U!UQi\AMN_Ӱ`L`fb Q&#fFx<Mf P̻@I+)`J!0*}Ž'Dǵ_sپPw!tYѿ&qjWNv"y/A;NS@-Qӳ 7x~sťVśrsJ2+/Gy KV(z[ԘzF"}l| 7%X!\$f !Fd(~4_%u`$E4t8 A"Iԓ)Pkq% N4 \m\j-ʆ/?[.J;忦Q==i/vy. 2r=:l. cUE}IrCY ey;>UX =N-'"G򤠼˞A"laFH3 Lc*W^{EnS ޞ_=z% au&$0NF!a ,SƅMR4 KƏM)Pu K źuk8_1˥K%`uʆC dzw⤄V9cxѪV'1 |TGBy,*TPO@I(}1SXd{W{ K)/Teꂨ "k*_Dxjx2i8kA]3oۜga~fӓ g˲b0ҳJvi1rq{:yRtwQOƽ&S&r Cs3"\Z܂ɰ38TlK ^Dzl *zSebix4~\_^HvǫK{qcsc_{:L;|]/g_X!g$Ch%aEqt0Y` PL(jJsS*K2DbCs2]B߆hlU.Wq^4"C $:Ӿ[x{ХSBRǮ`!c IH&:`Rw^9%_ʼnu ,L.UnlLKђgXe @/Fmvr5ւ_ 8z%%vUJ7 nН"|QABiRZ ZB/ƔP+8׬H_MuZM>Gy^Zb{ q} νjoŽZdcԡ[IPX;zR۰eN7fLZ}WܞrGy' Z(V_+:jGK@me?gk.evY'SkeI g)}CyhcƙRrO[].Rh/jג+3\!U 0db]K>??f~#P脴A^xιeeF,LsYqY)n#o,?'`ll3K8כb3Q"󅦄|ԧj[֖躳yфxB"6zJR{ۗy(&>ݔⰦ5nYVu!)Ͱ[%-djq¯֍htˊs6\7i\5ˎAΞNdN {U9TL)31}{C ;sѩZ Wݾ}NB 8"YS>]D礔35lVƖZOrӺۍD,y2y)-[R"B،]0_pVڝQ|-{JfɁQ6r'sXrs"Y 9ߪoqs5`NA3,ۙ@eDG%ٞ"Ν_N,[(w$g֧q{jMBZR]MZƜ{{ |!dE$tۓS ҲStCޚ#T9QeE?Ba KPcJ1U +Űe$Z]-,kS^PV Y dPICnZۇY+\!\N_Re==f8̚ehK4^ɋ +w[ &}E8=mz~h!/EuGrjOʐw1wC¼ zө F+) *C4WȋNB̈cT2m=DVJB%$ 35DR}"\}e+"˖%d2Rn)˩r xrVR^dUot_*E WfR<\Jk%b 4zo6Ϧ 6}vBogXH$20ڳԥ'lGGO?8AmgjruzFŦH"fpe!o":zX_xdwr{~Lk@m6c374ܞsUy2;UZg[͹tЬyqcrnM̅|jN$R0zIZ{Lk3{id.YKsSގ!GgoYaj(n&g 4͵c7/L}%j`cn|\Znobxs;&I-۪2O%MOZz^8O>\)!1_ăJHБ,&Π0$ :?xzVq&BfE߽s qhXP8f )=KXXS7̣\D = >  e2\fJ1"vE0~C%Ƈd{n]6ETm]C|_X1$"q{|sbvcoEBU!8`%I`Ɠ$*J^A,ÊXS Cӎ4C|F%ɑFZ-m9O1;;)-X1g{kRlA{F | ]߳ޚזRVGٍ|b!)"[ HBc瀬Q,/pW`Χy*Z5}}\RE7݇f_TJ/%LldnYu]\.b` H8^MkB`cz/I&JOsLF)kF$'' B9D2ɵ> g5įg!~df%E#pxG{Hbצ;oXWӔJpeSik2R эFk_GẹVUE>!eG?5^`N3sz߱>S V:>iqvCG-ejU19>WnZyi ɔX ° }Lj^6)Ƃ0mI Bn7aDL ym-\^8[e¢DwMrvtܔ`_MҶ(݌cK6u#+뭗\TM`c5Ƀ6a7/,!ۙnn$cLT(RB}0zseR&f6ƃXL\,HԢD&㣘g-J1)n/U4,F"Pry)2F5eKqǀi5]g'8gA'Y&vb`j& : , F>V6Hv|!=UXUB'AGLΧ*t% !ALt@b"GK6|[0\n#H4ݐ~-& gN"P;Z9gODQPl)"6ArT":[#bwñ#[Z[B2Uh)Ktn?1I*0\^U]·e&1VUgx|61/!PJUsAF"qW1";QyBTeP nhzY IFm=wEGy*UWp-QrLjp z.A* Q Tjbr=% >?d)ɠ֡Ld1z:`A[ ԨD*LԠ/70+♪|ofVGIpfJUL~Arc 90WӔ/(L`*M#O+F> Jˤ=YWPRj16&7.&(s7r9 x?ڣr^x?mqr/9 r :&N Ӌ`TC(1H{(܎`3_1\y+>"T$Q:3C>BHz![%G& < ‘mԴS`=mP,)h:Dx+_{s-d;6l1g M#tH+uL2o 2Q\ [#^%ꄀK1>o&s/ȇp"ZdZcYctUՎp٠T3 5 ޷L.+#|JF N⍱2JS\)AlJB?(23!\S\ arGy y#|RAQR%]NT@q/6r֨L  gcn$Nzcpf!K3e fxhzAЂ 歹~,= 5'}[X\T x2Rp7w\ BJ q逸2Nw#Wyz|(("4X@Ĕ i1)4!C0KYQՊPS) g;=T ")CKeXHO7&c>CMI1dwM¬oT4ob_iϗLy¬!<#+٭wA0,HU1&IJ^VS)A"gb{RCGKva8av|27'K v~WO{O&*Āk!L<=]ƘD~J^ŀ7r@!d +bŘQI6[ Faub%S]%N8%t z? m[E0W[$jWԔnKnP #&odF!P(Ǭ)9n%ǦYc.BHqÙ[򓢢(O#>%%ޕal!<Ɨct1ύ; xLaouk\-|ͶE`[ne(B: RRkq44Ao>'CBM8N+BfWafM4;ٜm6:5#Αj󃯈7cj4`ll&536.s|دנD@QU6šƯmDOBQae!4b>4UR]|hB,mx,X##+: UbL5X0_ V#vidA3mW#!pE~R8/fe4)$ !l `nj+:gX.@x-lԔ}P'HTcmao9;իL;{b<;vi)R[nY J?4ݱOb;dA0I h2X6CȩXBh:乞Ow3X)S|jޟGLU!"gPrwgokϝ zm9s;Gq38$GB Ș&.aǏil3*v csF(K<;;J]Q0CԎF24G:j">GN<} g<= GC^c5c P;r Fo@VL,WŚ&R Z#֭ F!#Qb'p8b"Y%v.TĉR kJ0y0S+cprቍjG0ԉ"C'ᇻd,@;J 1_J:%B/W<'T>Ρ+H++lr"WWW_-7ye% ]6X[ks[ʻ͊羻c𵃕9t^e[Ѽw'w4!QeZn;]P~tWCb r^u5q`",&2&RMiQ`g^]GnjKAv+@PE#S6}\E.Uoؘܖ[ rۂ1l%V++jF\Gw9R%#geokәcLGQlCcc=yB1-f9锿pXˊ`ɪJ͟*Ii/v³e#;Wl^PG9rί'1ж85Sۜqkѩk jw=Pm"ƎAʒk;cO ƀf|c+;҉iR=ki\ٿdl/XVjL- `Kx5x_#y <;luq{sxVh;+>:oaK\2 QUZ}r$3Tbq&,z6(btukKc_ۜB=פF 怳":K{i{}‰h+2o&) 4cN+gmE`bT uq YT,~EQj\S;[1ب.[~#ʍVER`WR2K[#s_LCznyo^ip`#oYv$ԭiB"ih]*0/9:5˓cxj:hO_iJF#hЕQf(iVxq'S \_PQQLgUJ*tZ2X;@PTW'ok[G+:m(ǒг~juS eKwq.J+Uem>XI3!_- &މ~dބd5G]Ԗ@YTWf(A37)Îen"iƠ[:/?RگRgU>}# Xgsqsqs5?dqoy *:۸Vm&f-]kBbJO` kRZO~3_A8hºb#$E >$APB=,c?zsAMdivOL3K`#5j\kjʗXL9mYvi B^;`m]`yJg|̦066Z\K,,y4}>Yۣ Q|Uܕũk֫ ګ2HLt$H dT9MBG25֊;*b 'rfnL66ox)2Z/O5qve%{T8o;>Z2nueв:iwcۑ.?ė3 ֋$#5c<3AFiBʸ [t;y21b9haR[L#!.}iyVFB.7?OdQzڔٱ@GQG\ڒ߼2\i8B@ aO%!~pۤ^D`|%:BRƾ6p]}Btm+pU >^gQJKʶS4?ӥ好EGFgҗ?йGf> ny[ \NzK[,5@.#:w]U=0!2&G\Ϭ]/j30;g{ߝ驕 E^29ĢM)c{j.%KC4}2DOrq$BT_r- J4ruԂ+:%y\&Z컻0Qp%NwV |dn~?-;$3)&Tfk4]EO$lN|9-%>&=)PY2֝9c@B{I}zrh:L[:3*SIkJE'r/A\[t Jk [{(V |egp䳀'3pzdY&=by㞥MBA|5[=}`;l\$enzbuPbgvOy'sVo[qv=udeL54..*\d AB>4aée^ǗkhUkˁ@S#/35 g#KJM@@GJ=={c;'hr^LGY$%Ⱦ#nJyCfP:.g NaOuWe/QApx Go4q&2篌_}ȊR[֦ j.rCd9Q.T"H-PK-]Bܡ-'!F9=q)x @QYX~MD} G{|5K/P56&$(h"|}ҝF93pץ\eOd:ȂIboB%ʸykifع&_*W"SKkpy^tFy^\g$*.gYҡ[;>}z= =zG!GnTzo~UQ4$]qg l{ E7 9CS#o6&h>׏at OK %X "DeH HLRiK$KTbPp%0 q̬4f%1|{r=Ãs!f2v`RscdPyBQV'cuu ZDG5Ppj3/SX\)#k(%3{yB=ϴ/zumi}v%zu(Γ"CWw!=#idMo)5O]^QenyX2o.dN>@=;M9R2kungsX /xp@V [W<[I0lZ\K0jSGqM0 9ZIӉ<8>ghnr'S BBʅ+&pHҝFK t.tbv?*>8J \b;"Z(X\w[U^*̉)p%Vtqy N|HkI$5X(V٠>Ju;t9>3:~N+(Cl8ES4*_eQ"&= O<8tՑއ!9'PEX4Mjs!/P$<:v߇W Aqa){ܾy6a i?[K0 'VemuxC`8~zJwNwzjV7[-M.r )1ciƴPIH$zV;YGb{o̼y޲')ԫO'Nܻh/\}g8껛x/_ΟMp |u')Ƙ$! %~SN z_P}vxˆ[ (Ob%*,_tn]p a3,gӴB_6yb͵8A]/_S qoGPix_>5E*618zzth]Mufq֓Y”k|Zv<11C:ُ*} kz,: =H{cWS;G$-W_Dځw=0E/d$+hZ'H%$RlIiR?2_#ԛL?9]K5^%Mk6|~Î3-]pMئN&_\NSƮPd ϼ1 O0Hc$7.zg:Bu*pQ s[/m`qF1bheu%[^^7 p'\{aG z@Hf{KG/,.9h^nں-L`N;:Հ n̒P1G3 GmɺbQȜ9&GW+o1伂*7yޤ[$2ҿµ jk:upC{UrW@ ,ԗ_!9=m?$bruCmU Xu>|U}zվҢ<+8muf6F5byA V$"]e9y6WDcr%FE7^C+Fpƨ઀ԾXަ,\aBunzvoGYAjh5~b lzji <-pj8cw^[_ģxj_Xqǵ WUĹj4tQm8:zr1⧬ȚSnBd_!pg7$#QJ4db hc;h㩋,x[<BUhMr_gYĜfҥX<2F6%;+uGW,H죁J-&pk4,JT_E]Y:RF N-Ʌ7Dn:u쨔 ǭDoK_mtiN.|!z񳭅 :mSM5$IfA 1c}ߒJ&.}dlT Xlر\ Eư1֝g{m9N@!UДTUW7lWWeܞS^]#pL l&8(g%1zF1oSNF%xF1(V #EuhvʴO,Lo<#{6mSuj^VtE|U EXL *@N%jdF;'ÿE"8j>Ea@hm'63j&,+1W `&RG(-8?#l%HK.D/k:@ UvEedAeOE&KUC;ҚgŅzNr`tfk6r 8ھ,j hMßI;T%fcfC!W_%x"cZ@kL&~nt[;gS|L'հ!xyIgY~yWFIn=k&b\Ij8~&yW}D;y6U)JfOi,`0~ 2 .# ~K`dnfgaϨC9vEB;[I91q@npqJ7D9El.ONZ<9j1p?Kt3O5E-Z>;z}oȷUOѤ\a][xs4) |+"&sJC6{`/y'G/&i3R,h9sÖD}tP <@ XMiBy6gr08EE33t;\)4ĸf4=[Xq'3)E\i0+DpmG=lMc9d89+E*$paķ?a2q9bEɟÏ-8?΁r7GC!&/zm ܸ U7l9_d( hQEb83S<_mN7K ۺJpbMCά:!ow}v p BĆ`֢9x@LUaloi$fɳ^6/@xқVEZI$בN:wv f3g R9o@Qu_eݍU[{BUZT->z{#z>0w?xv%#7# 5B(8~MU2S7@OZt$̰qQ2KB kyMUsoo:nNԁ\ρ <ݘ&7%Ѧ^osY+'>ڢșaK λ|b^zAMJdyg#[gii"?yW],ϷUIU*[{1kR2v|ί[Yҟ56QJ<"ep|0 )  _KvW%rn`>}+Co}Wꁆ#Qߕ\s}sB}Y@PjB:ބn&߅_{#X7]:oKifd\1̉Lk.3ѕ6P=뱃v cm⧐A'l @coR`_4!!@GGn5ez`=1aUDpwDGǷaԧa. x+M6fTS pBp4.ƒ뱃Ca./ԧSg8n0clCߒBg4i΁RrA*2SˬOON?0Oeߓɉ&>d։3SgsL{Lx4or2cKc7}ewW`b .p%^SQaL?O<ɤۿNBV\zxUz1<{e=#9(d2U|Y_ywy=gpouU sr^USw0kJ;~? cÚْjݙs8E5LEs<nƂlU+!FE;1b PH<9N5e"rem xS7֟=p~"G''Bl (xLԹwA+R b:ge:J d3pTƸzXi`gŌm{.vΝViFDbEB OD7a$0o-ovcr ͳ[̰􎝭DRjNv+W/m+je֭ -^IG{z\dM$FB'c?v)F34a'}HbiDD}WK@ 8ff"p.Ʉ:GN0d ڬCYIl#!Y(i*k mo~r!ZFQJ7 @j8Ρ]me2PD哺)ew)dˡ ]NrqARlr%QV,0\5Tؓ&a9qf er[\GMVj`"u7:M(x)RQ&]W 7q3eS&p6x*:XavئDm^: i 7 v6 0a{}| Qg ɿ̑DPqt|هi9T@opϜ @,1sj'Vp"KgJ1aApXNN Ҳ(43s)K4響 ޟ ];p̏mY)(e`(9=M[~xΘhAcL 33+˻KdUn΋F,II=.{{p30ʩ(y.WP'66r˟=# w4Ud}%_>:t޲ORܛ_ui/\\*h%PA&UN+= #,gv1%ٹf^roNo젋^@ 9kY>m%Kg^A;FP3Y!_Zk;WAeѪ}}hj~$ܳܕ5|CgŚPaZOnJ1:R"BX+.Þ=4ٖki->!J!=n;R-H׸@ALYJ-.:P*Wz>%#$k C1Ff,p M=WQɻ#b@V h5i@U gK{i*:RO޾ћ~m_,?VH)n$sWrIR}Z GR >XJkZ(֊@Pġʓx EaX VsrL: R$ R+ ./Öa3EQ ʵ3h dl@HHMr##H)_qB DET[gT*l4bRDP*{85.Ǟn9Dg`3bø 7w3ff!mJֶkK捷7#OEĜ%mEkڂ5Ԃx*K !atN,tW<(+ʄD5h"G^c)/))ɗޘJ-Zzsf:IdS t_c5RʣiRumc]GÊҎ0kt , >6g9%%`֜P.G4:seb-ff='qv?l,jsPJg6}}kc!^\߾ktgh(wFdFw±ض-䀰!c`{i? v8k 7SS`%G"axĬ*ǬjiuE^X!H.}vM \=?pbI"9l dz^d.;dGnXuV`a|S2=DۥײXq?a OGg8tጭe[M;1Vw`GGpyrU}=6uAZ/NTflY+;fU}2? z {6=܀U-ny39@ܴBCۅ&ơT%u}n<(7U0V vfQQ*„)(<|4,Ӂ4pi b957|Ds?N 6{5NTvnS[\LLA[ZŹ0W2v˛v+8hQZeV7jI;P tA6->rp>ػ‹9f>.&Ҙd9,t لu;Xڴ=[^7l@Yp!ȵ?b7LSS!2+_q:H/̆RgQW8MHvej݊[dNJ DR_4DM Mc&{ 7Lمn??`Q[̾֊,Y*(ؤ}vo { Qv5ޒ;6#ӣHG 7nS7'@DH-^uA=_u2'kc+ /wi3,'mm6mL̶ۍR 57R.CHJBq?Φ6%EPiYs)Hg+̪`up_>2ysCqB3%z QI|z[PEBH PZXK(B|e)ziv8|;Q ~HfGͫKzoYrӤ$e<>VѶJ;^9nE1O u,j(m&+w4>7mN6S:@'%"d.ÿ{bKB[Kuo}}jp@`[x_aK1Z$aGAwV}IuW-Lb[_,Q3oDsPDb.J廙Ѳ8!-v-wjKݝ;<9EԐPCDv{p ;ӧ2-DxګGN%pA[b l~ +7C``׋릾n=Mekm*7uyM]A6=΋w}`YƆy{_ݸ]H[ + (^ .Q,+$`hyjTplm۶a]2R^,xX-V~tpQ0N^  kI3ċBnOM 7IJ%)${U+}c 齎km 9 }GN[)j`vZݲuKd\raa*qR{IF;G4ѹUU/?^>ݵvuglo59\K:c.lPC,MƒH;Uj͒m[-h__KlGjp_2Òk) ";A^#Q@۟ژW);?XN~Ls3o^^4NnkWj{A^YL<˓/ ; $i*'A /jiڒZw#Cb]ī +]5ge{Gԝ`禊UO8y2 n 6Ze236DFxj`9'5YB&oV|pqހ6XTaMehx~ą^R퍋]`{تuz:,@!#g9|R9Sm6Hmz\H5&;.^PY .U-D_ =ˮLX8&2C9ȭM fOeulҌžWZ80X܂}WŖ^ߒ>:~yqV}Pk)kgۈO@UiealFo[kT}9g惣y+ 7=is>}PβycY`tApņ*S[Qǖ67=aGQ?͇{ 6/6e[қVP!=ּv-塾]u׮/d NzDd4cL(c@NlHMlj5 %V f5YUn8*t竼,՝>|m͙E@yfy]e1Hhp6Wᤁ;隗y| C1p+h=M}L7#C{1|;}/|?7 >[K@p?@[ќ[7vhgQG%E@E{ԃo/)̓ڷ_cة5 F>c]!ԁ+,m8Kiv܉gvc֝C<.-\>sMpb?S*T-ʴֲDqzkl,{m9rh͚eẰ]kؒ7 |[ZL\sSJSS@3U>bE_|mwHTk P{YŪ:t]]0,,<^Q;&Y⬅WYDB2ս:7.۶`mPG u]y'Z~wSJ-m ñN,`Z֎:l4A>ue=zBD(J, Ⲝ A M ^Pq+2wiytm__ P;ImuY=I-T1x];F.gP[喵k(B'5#ˋy)J!N!O?9W4( 1.<$fLHpx]&P~j'* ,9; Nحp"g4mail"jzXߴ,x5# 4-+Ukn);NJ$jOJ*%ea2m`ۗx]HFmn$)+E׭JW\I!KZH,ܘey^ڮIɲEr)Kxj&ė5Xjn(^Ww+ivoiqS:#b|m[4Q(2z`Fv$HYPhU(n!eo4`a,Όx[rյiy=)^]dHְ;5KUu)HR&:iϳ2J=4R?{ ^zN8!Q1ŒϒlVub$Б\4{*r]En%C+vM:귪dLK*X2k&#5mk*O(V(.N}GjS,Cp'k,ñOY] |Sg>9M&A7x"tA- SRp$?aT8G5݈S^q;;.ĝ_PhVm" (\<_!Բzp"v6`RA0:{3AֳD@9T)؟um\\:QF$8Nۀџ7N֘2TɡY4/lOr|_^;gvY,o'N~!6'7Orygs, 2.Cqr<ݘw .'e)kB]zu3Ϥ)E.M J/fRlyJ+X6J'\L2.UŘlѶUl}^ *:u~s%+v'+RLo$K.$cʩeۤz [m>q<ĮQńVJ y{ 8N생Ե`N !%H0J 8`(e8)H 5 ~͓BoFQ!W'݋ĬzcXx:@G'3lHόP:dcoND~ž_n>e׀O%+?ً]l-8bE׼vcij @p84}4?y7%ѭsh6J"EKұIP:xK(ۘ噅x}6#/4Aza'x2a~S>Y02yhO]9BMPC~yzW6TޙWQH+G lI2 a 3Y%:u\bN䎠_&K*4_|aJRE'ПMԢjYa 7Y 4I`8K"[ /el/\aI;ݜlOJlP,8#/m-Fm1Y"* J653cRFxkxc[9^n&Frnmw^5'rFO~.56Eq2'~)pi:;e(Htl@ӧysp7J @M}f=Z?8/ ^q:13 ̗qF=@g3> Ѭ!egk驵Wʵ N+mQ(,)jǪbi_Ճ24f?{|i_=+V/MfUkcp(=ҾHK1]ԑ<;]W&x<oyfNX YX7_\~gvUH]r^UkewԿAlB *5/[\%}ހkv EolЮZgolZTyώ'^H3/'%ćm2LM<}2QD,a* 5vXpwo߃nejN`=O_/O;=j"G=Ih ^b@z ƲwSDyc'|Ne$ݚ2e&G^lQ ?~~ [Pn[-u$u)p6oU{Ė8YX~#lZѼ'Z2B? mٰe¹[ =8cg؇Ɖ`эۿezbY~`L_eʹ$_~hIޡ=bíKzzk7C'o~g5:Y9N]z3sAĥ@ DF;CFR`@jk>ו)xӺƴ\h0ڪjheJgk!\=Wܫo5 EjNK\*Էir67 FÒJu'g0og$@I@,$ p#KȅK3x~7 $╤O}pdhQ8+}z0 KYK򴢁vIf(9S]i֞k3YskW$֞sCnp mio)q2HuRyNҨBBi6X7 yF㊊4Ր.-j` ~7 17뱫Kй=iX}#fzf=܍x6Wn`8aGC+ ؾLKIbⷴkK)Bmp})YDe 'Ul9W3]gDWLw^i;d~^JZϞ-u; {s,GJBfvt`J-U:U,Ӗո 3}mnw3~*H?9s2)#k)_z{ɤ LLk"&SD2.3Tc& Hߟ%k06vT7=|H)S KPO .#iglGɜƊ:n}kd # rV6NK} 2dsn^*>{G=klp⸊n :ynqN#Y#!c& \#c9MR{]v#jl8(ex8GKr& 605a/WK E3:0vd7:C5n=uxˌO[y<)l`c4Rh S%S)Ԧ+@- cpHs N7!>qA |{v\tBy|&|C}h.ҩS@Vd2!2 lђ~e _2>%wsW[H1j麮`iss@*םkd<\ȭu*ɬIE;fJiv(Tl~8N,Wm"9o9b^}RNM#ǫ89dnzuԬMKVETXQpe3z(kS:f*zSVM=e†-5 jb܊>pI(wQ9k_[M[ܢ q*LAHɏ%S1(V"P*$ dv=P&6Fl®gs݉TMv*iڮ#C!DMė9 bo_E:/c0rDͽh.cs@ekeTzUhi[挒ꈕ7iRr9EM`J-VMp`6kxd)GȫQ o{ΑwanxyQ[~H}vhIz @ NozO>}wʎ~;4'ngCaQxC/<6C2٤@2Dl6j 8CT>N q)_#։RN,arjqY.å'}V=ܩ[.` q>{^]emY˒%Y,yoY{xI8ٛL&аihK[:h)FJ[^ Ki|?^Gн99~&މ=._5|R=;Jz'bO-uCC̅BK[BҞ"? ~^sm/9Z/I'dX<:0>yK*_w;¸7/> }*Ǧj:vʖ?%=F堿m<ثרIJBZ]з ڻhgުJAr(e"Jދ* )ۇyR'\E QF!ypGx[#`LZӄ!WB..B7^0VC0XIlҷKrKQdBlJu+s00ԻIEC: #ۀĽ]` K| N%G<؜ˤfۤ:"-6Si\ uhL*As]Rz~iːپJsocFm_7֤OHmx1g:3#]+r5Aߥe\i>` s` BK-KyRLu䀯2}Q'Yk3L]2m O`ܨTG*^Sdfzpw`o',c[x}xAGaeER1Qj=HL 2hVf/4BjLD 5q:'? lA4*/LGA];rew:-`rX*Fݷw#DkΈa Gz JC)ABe@_gxJ1w8!Ku Yej#Ax-x s$Jp No,ϧuBתU?0GHeIS9ii?K_n%RΜE5X U:z҆7L~\|9fnj_ %&-(b%::4SdEPyU"Bc[9Ai>'_g2Cd K/ |jYQ:L{(f*&?o>MO ťvfxO*1OpӸY'>§ʊH`XDz23dJPJ'e }czI'RuL #,zM*}DC$hTEO}PNN u2& 3 Et=XOBLnlwO$S^jVj3dX _:It I%J7ADb4x ۓKC${c,E6Ƹim ?k(1Qh,Po9Srdpx"\cq[r<LN133tNg2E0dZԋ9T20 apQ`hQD3(_.FCQ1љ W{lAĒb]Gv̖;|*ʘ%;E3-N3|qc V\CJe#9^Fz¥E"BPz;{w6UE#_i5OTzef}Ttdt{0 ^g5 O"&?&-p'g,N234EU L~xkΖ9<6u}Ϸ&6!=ϡƿ~t$ӑɢ >-{x2"ȯ}1 7% u{>jj]ެch<* 9j;Z2Z3+4&vH M' {F|ޠ3cut緭Sљ|ӳ`kȤ %[lS/snjzTT/oF;Qjʃc(29GgOO@{b.|JzI7 &d/vLm󮦾;6w:VFkrH%@NpνCJ\5ra]a +C&ozo}{Շ^QdJn.pV ܃ʔWQN))Tu8B:svm͖ٛg+sšC\aAvT r$(j(3Tyb=mFᗥE~q4t[^.PIdq7:|6g1y/iDeawR*>>3䯜%W 9f8'Imՙt),gl(ٙon/eUB\ĝe3 {xӐ-z TgEP_(&-{oO` Iñ"л**@?Ǫ 4 L[l0*?#3PZ9 q8ZqUl\C^@LjKsުF*"^SjkXCt  xq7SsLhS7DBYL F]}(vV>};X}YDSCx>0)vĠUΕG"=>L)PXr7Wu+L?zn)w1GePm%O@~1h]nT0dR w8yu qdӵ-sh9)62־pK㋷4Kюp6 8LD1\ ;;XF[HQ1 z3z tBu0^J@\HO=vSH_>'Ba~>%?>I2\Ȫ}/lO,Z`ݔv/zȔͨ/ 5o3H{ JUy 12 cwW:ڷJ/{Ǿc\ۧ.o)FTd5ONV[KWw:GWUftk;:\*άfh-Z T4+!< BhP&ysw^=|(1>eˡzLY,>M 9ժmLYZf 4]@b93lkl";ĝik>F ]WxQuGQDr oL[[j<2b7` LĤaCeS4<\3^@(3&`l4;C}z={?xvt3~yi_ۧ߬ R[y}=As]L"MTV|E:^mRlzv3Yj/؞CfS| l-jcob?=[ !mGpD_PPP&'h{wmdOwMJqA:/5 "\b{xTN}%boW4KWz""/HT&T@}D<i+"vA>6Ÿ54 {VG|YxG" gUpN7Gͻے$k x rn=e .SݝӾˡֱsyݑ[4Q$8j7W51H6?S#S(66pY? QM edI5V,XT~vj2o(d.:qOs-/0Ygڒ,9ϦMzpݽýυ-iEq=>#GHiH|vi\yτR3i_W38T±Kr7獿0GkN7opS-C!Ffg=Z@ s1po xg$An_ к3R((m{ \Lp(/׹?h לH%)q y?qpX_TKOl*V3o̓Jg=*Tܿ"Vw O'Ɏ(JZ&,yJԗm)E-Ub)35br49UIȸ9T<a}jPg t:Ӭ6Yd(:\D'Vqvgǯ8Jw\Q0I;q]`oP&!~9;n8bkb7],E+sXw ?[ _}.xDg.B!v;BT@40$!S@DBZwbbwr'GОC>߇HLpzDpR|:Q੎p"+zc7^zָʦJ3UQ_~vVb\pv[0RizZ}w{ e2&lA_-46]NDRҒH@nzc}EOμ@]Lv5 Y8Jw<聆7Y_ko&2lI,noI%ķ¦?w޻0ny Tg tcjIܨ _dЂ8U::%|Xt~@_lʓ_ر އDJc ^K4igk^#TmTL+sJu'/>֪rG3kc_L՚mB>֬@k>>D^ A'*p@U5; WBD*t3pe+%\Op,-8Cl5u WFcf0&G#barC#p&V|)b^!1* I&Rq-ۡ 'CNHY֬jK&ѥQU.ͣ@,Um X'O>x7$|w_-t#"WBᒱz9Y̒\cIvGX>0C 83!1jIŝ*~[A̷+?fM;\ܶ@iG^Όv֪>/68JnhյOmК̽yq,7X0"_ZkZCF'O _qPXFuj@i c zG_:ol.f1ͺpWm 슫,9#Q ]~I^XW$Bo7>AނG&kf:LJ-uY9& 5Xs -vom`Lyˍe}ِU`$rW`(̩4fe+<&RUa'RAx "l\%* c$k`! g|vG * :G>JF YfTJQL1U^BB'W<@X)va6TLĝ+i*4|`X>qqTOZ\ō.eVk[FiI)z3B* ck+XbQO㔋1o">Jkf'% 4džĜpO]^vqVLg0jWy|DD҄ PsSB1tyF̎lVb@.V {/Zw̛cqa :c[g܈qYg`/x?{oKρB v)Eq' )LE!v۸XITkwU2MCG9Y`r96TlI!˳4đ;gP8 4?4xdJ) oT  +,coWW^UA.(ژ !askn+V!7oH| \yEa=,U9S{i}Re Zs=Г2q.L=RP;2֭ Jלls&]並ʡ>cqv5:r=f*wil1l&Cb*nvX h-l% cA!z:qoBf‰e|zP U㯇d:-tv[ʷ=:yx^fk,yI[LX ;ˬ$L% Mu k [y*T1ޛFUyǺGܟ<^,i(T4ˀZ{r'+et ೏H!ژ475qR+Sg"l8yA:5C\5 1~7Ÿ́vnĊ BCPۍX:Ф7H%U:f~&AN%4=t>;.Z兴W%ag~@d4:T0ts5<1h@  vm DuE (r"M@}ENJLI(ޝe*p`3p&8eBWW]4he`-fi]&F谽A+K8:yze[LUAߛy4G0߄ 0t&v3|~ FHM_RR!\fH fyM]vJbz*^VVI/R}}twO e"(cn'd§<KkBhsHo.+"Ѡ<,cꕯ.8R7b%4g){8ّԼkۻKlt|k>jktarg4=!][# /a1{?5"Q`Ml 5}-UKsY|kR .5v yCFb}W\E#hAPT18|$D/V)/;u}^]?klNK NR̫CdgBS9Q*[8ʜPoSEmhY8*١|R̲VqVf@M}M@8}؅4KrI-q䚍y]U%)*¡rX/Ϊt& ʗ)4rhrJ'+ǓP>6jgcBSC^#.Ty<<f+m Y, Nɿsp=O"0#*[vEQfg+Z>> H,F 59͢ jmb6ؼוPrfA"ٗWґa"nTzr}P׾!UWg3b>Ev@ܧcˤ@W*+.O0ZYkzrTf{؛wkLH>5Bs8| gڹ,qK$#cTB:h ]4Ah}a~E9y32=o!b!Z*9G&E$ 5"!t6"O g=xbs u2nŪx$V{CmquNVxO϶҉r%J?d2IrrzcrST_ғ[+:W=`3^7scS)x| +)n "&AWJ537X> T|8`kv&VB?ԑ܄Q? %Iˏ#G+`7^hUE#b?K5zrZr(>L)':JNNp =]oB\3qń؂xIK|}(pXs^ižÃ 2 oGu08Ȧ.@UP`t ɐL~;KukMW@T-";. t q*tԍ߽:JV'{'o_$k*޸8׏ 8&0fj0+aY!\IbȿF~OBӘTH%xyxb&>y$ nH4z 4s 3X2&DfPMp1nz}!:e?32#\,Яlr@h #($p:`]婲x Q3ՙ< ?z#%?-$τɅFy t_VH؂IqF7X֋n' Dev§(6~-b@FD_|¦/kВS 3紬.kݝ =v'&NQƦzۂjm9zKV7[מ8{7_vjPAcUm]u _ ="f?Xvnj+qLb[VVcA Z X)) o3Od7J35"+fm5ԁUB[/^%}\mLŭT(xo8qBzЫ&2ktR Ddouu~#SHjf ס:_E ʮ]JZ@шP7aK%Ѷtm8y[c 0׾\e4 SJZPF?WIlga־=M%~d ?apsq:O{{xCۦ^De>b,O YI$;XmMK#Z p K73G4FF6J> $-|Osw0ahoz rPAB/"6q;kb |?aPp hi{I3j{ g-pa?nn+uL`scc+I:hp{UJg2Y8 X!%sp L<4m|_jn?ҩ0$w|5(/L#rtʗ7p. V=jzUyw!-L,*f"1⥲aB kX"(8Kڃdr%f AFq B^h ؇G7B1L;݇w>2*a: E6\ nB'kMV'DQɯoSwTᐷ9LcJF1N;mہo͖$M~'ߘEpGѼT b?RL_7:%5C$U4_ի\X G…)(.,;tMa8Ymsa<kr&%ZXĘ_eB(f||MA]W1;S_.Y15L;b9bBIkML_lbCܔ%o*(۰^iIH"%swgbM*T;0ڛrg^t{~|!vx(ѽpE2z>ŸH"17gIuY0kz;jύ$wijs9Gw 6nh?M qfqZ߇oiϹ|x!/" hqw㴴d*5Kptc[ $Ox$E*r]w+}L~yˤ)iJm+$p&iTPlYWf&q0 4uJ$"O#;RRI(Dbefߒ3D4kcSusv=iT# f2lN- gY{{Jc5  .dM;/ $98*pJ+8Wwؕc3ٵsmYΒUL(0b%C^V֖y~-^KQ3}jqueϜmRr 'kmK(=8- 8͇ >槥%pK IDBTҐTGaOaI(@6Kh _eg20ɕG #=J ޴|-jSz}’n.GHˍRz4pPLg<^.Z7rS+qe"PRAIA"iۍ,LD"@$. yOד)xN $ q頋 ME6͑QvU>X=\;7gOagb&w>f\M}g2fφ9F;Xf*.޻{D6e;o37E, oO{x"t7zks8kl?6LxG ڳ>Q5d v|{hWOAiyQT\§AOM=h1)baJ=}G$b`Ii("kI!6]杸md桵[~gOI쬁뤶|,$qe|m-sYrC}hSpû޺Zޑ*:حwp#Y!I9 Dԅۀ%h;;Š\1Rl$T\oz˥dO NfQLՁ6+"s[Vmȝ=74; zh*oŒ֚ێnjo8|S @DYԗB {l[< Zغ3S?o(]loۗcKVnopׯhh0b*Ĝu lh6`'Wi,sЉ$VHJֵ iY!3lEaAU6kt ʙn2e, x0 MTz'[n;|EPs<)!էc56jo;RYĒ\#]m.!?pCQYO.>V^{ DU" U,A7aM=Ȗήu,3@7QF5R-`ӖTh[f!Xin1Fi<M4+@ KZGK:xӚ3ؕ(q[RqLYwU-Xҁ+hۖRl҄D&/ѕ~%^^y@ yg5ya/_n{#\TjHg:x)P9O.~ 6rrWx_x8 5",|TviX` d_t%+ǣ4?v<%Uܘ4ވ`%$a7m71+:JY\ߒ%mnTyV^vŏ\84ӲdC |]^{6Gɀ.ΟD_<ѼOџ>؉3N \G>;~~|$HcWȋ S QQ_(_۱7}Ix_dn:k\l:]0}!סぎ`~͵CÒ]{ !xy)vEIy|hl[W+YTkՊN0l`.S46ˋxP(|xKG>n;ux+OF+iI$gqj#qҽ)11 ZP$׺/âZFf˙"eg`35| 5:;j,Tnm%RO\rt 6K?/oD ufۈ.ЙQ V|fǷLÍx́'2"Su/4u ρ!e }8A37_"8gjckVF[Ցh+ P- -0z͉N>,hLhE n{JjJ6ݿwu5W;N[JKfr?eSCg~HU]κ% TdWt<QRF4uֺ}@Q5;Te1{ulO5˲Ƣ,Ym޽29^82;Gϯjfɝ9Jg^G sr1x7-A^fO{@ж+Я 珣/.Wr/!rwxxz#E?|r<{xK6UJ:S0Fl)K%r>#Ο\ au)~@\ ?|ܾߴmJGDftզ*}E;y~Se=Pkup{i߰*޳(V ǀ| F=c.QWOs<|~_}^#A97$aC9 %J썫Ä6 QwmzWx/`/I3Z|uև[ ڢ ދ{Zŭ0W㯵WcwAo)u-`MwQ%}ȋMf%x4<=ѵmڻDZ^t-w wbO|ʍm:6C(.5&晥L ?[ B6M㪝DeAʾMxe&nh4C>APdQ Ot3uheYs0njr\mk .k>ϣ97p 庾os:6* 3Y:]m7 = &|Ѷ$ѽvz\R|I8cle>!B(ot9~Hn [nynTվL]:GGP3gzK6ʝ%& r]%i[/}Ug:o#Emfz#ec:Gсf:pн@Ӓ%PDp5>aeU }w:U,5DShUp9pg@1hٷY(%$3yT(40JC)+~A w3 ?dɏx5 J-# }0 bP9/$kQ*B1T ]: %LgCz|֕%PȁJ}mj4Z@>hv wL$"݇a@Ur×*ў߉vY$#T+`g';]>A8/:)\?%+:jOVQ>Q]V&jk !(sʉ'W%4 k6m C_(l\%6p~S;!n4bԚnd ݽ0y;eZp??>O$YqY' C%"Q,Sb4VA^J? ra1@s0Bnf<Ȁꥭ\Xbj1ODa5 '65Y /]?xog2=Hjx%; z=E y/džu:@ȳM2N<l,q!+J#^~#h&o a7ذvDՖxعR舧Pk%&j} \襒lg{ɛVg1-bkN{ȫ,__c/kғYwCBe)u9aوZ'-)ҭSG4݉`M Bi7vYA&q[4 a"7#CT&GU!/[qZxu؟^Nݕd I YqEm}SAMt.')kdQ1`82B sB+ #v$%\eL_O;h瓛- Ow tYΤY9 k"HPC^"7DڱkVzc|5_I(/ ?w]AH,:*FIS=p-{8 .MǞ,Q[_7 ޗ*+x3' TRi]mjȱ=S0ͬBk`{P}L%FLH<13Q]QM嫶_Sї忾 V\)^~һtEe냝D#\d9:buΆ D鶶]ΊDfUwɳgxCT~}ɼv˶ڛh( ^Y4J_%ŏK=GV;7794㋏R{y:wm{/.,-e)l:kR=6t44pj$t;7MJ?(J~ +j׷%-[., 5y:b|ΝqN@BbmmwMAm?6|~M^Η/ '6-Jȳ;,<3,!.3s&fj$}Vz+nN^{OE .hX.ot{b-ݱ>;) 9u{^?֘Yyfџq!&lɓZ/L$a:f+)S6@,jdԆ﫛PKу6z1Z6է)ȇjb/w{|vyEDe-܏+.ejɼӅ%h.U0ts, eF5~L):۔5(=caٲ757w9<4TᲶobjbhٚ_ߋ"oimg/op3G{ŵ1LUxjv?rU꽩]-(jV9D}XamK]xweyIoSea%qgk)}~0S;Kx3^0D+wDgiWY3l-L؋CzD#"'IJ,+flq&ޒtDre1-rRm@mZu$[vEZ%_և GiPKtT)y>5&_$F3"VVjO{Ɵg[ p29|-;p{[8oq%Sј"řUUpH֗|iۖ$KnNZ>ErT<|l=A6W|vnnpO[p߼ cliE1$a(LtʆhEdL/Y\ >&wec6Gn鎠{ N!9Z=8 Sw}N&i~QҩWkCt(RQ>? E{lc21a)8+ d~7zq-ڝ#Y6+GB]w=e>NFn}}{ldåF44YR M;3VR2v\4TQ3o@څ܉H;c4$- *,Iy6Pi[?ryCB`/o8 Dzn7Ǎ2We2GZdid}W{M2(GO7 {}NKyjÜ?`<7y 8]sCqBgPup*$X$Mc쉽O<%ڼ?ur(da 8Kŕs+w \tXvx QxQ7 FFBŖr!Aأ'8@'1Y$.J:PaW[:!/82ce# ZrjpF(X¸R>RK&L"FOR` ~E)ةtQ_ TtI7_f|&K~٪xx\NqqHYez1^QcW^;1Ďu]4IOjUZ GZq%YLwQnLlb"R^D]%Bu[3uuP֩%9ߧEL 0ǝ:^?u/5*n}'ӻ&)Twچ,и#KWɦN RaySҞxN~8Eg emu4ʵLNZ^p#Ljμ纗fgtB[6zMˋ- e"Z]ʗEe|C\2.e~IA͑ےΐ?˚d|Y >V]G?@d7 q-]w(r\?1F0jPo,rض,wՠx_Nέb`de9VԷtz a@L[2|K'ZV(J_cd"7~{\3U f%B *pY%..MS O&;hL~!im@Xl28$o'`%beK"%0˩/AOF~>" *0?B:#Upis 5muʼn6]naU]"%6ZոU3RFM]0ΛAMC:xOOaW`N2c̲ϰggr$,Dj;%o%°!K9kUBojwNWwc?V#6t59+n\-e\k,"(\~k7\jZ|t,ۅ Y3kw]OLZ2rCpLd:#d^{-p>u;} o3}_EE1.#NE7"~r#?YEs?M7{ǯ3+ &! #wWʓ}!(m~cj~Cy6#wh暁kK<XU#$SŵYqQt'?~wj Jwؑ? Кq&x Bb^Jv7je"tjPQh95S8zGl:6cEF"bdZc{Z9}+uE$9k~& 0}YS02nn|&顁b]nYS`Je<9_!wmAD0"b%Ԩ)K) {ֹ<mDΥ~0,F*#9f Gb*(&/0{#;=.ZSA+ۘFTmJal8%h_ĔQȇJdOEZ3>>Ȭ56^Pn^م2n5gוEm?~nnZk][3AR,o%ĝ(S꭪V.3g-5<* ,ڀMiZ]]Wl6+Y,<C9[*0@`X!&: Yqk~ "KqDx?ޔl՛6"F6kit"#)QeiM~x[MK2^_`p65Y&#W`̔ly'6NyӜh4BTMѴ?_߮j`d1~BZJ #:$1O;<м3 i୯5hzU)kwb+֢;x'~d MrU3xLOqk˗j~+oIxj,k <s0}O'Yp<h7i}SY[[0~uZ;0rJR9Qh{L5J Sȥ"Ufow3Ji,/oJesL>%*g SlVsU>IcKYxX\S2j !]W1WZ*e^jB5mky†IH&Fxjp h2Gǟ-Ӄī-h8lq탥jju&)!:Ś M\UE큱-=Ѩ\a-)uɸKMKȊ[HcdfMT.]+4&z$Edҕt5:'^Η HھTLr(K1ή4Kk6B9^c)lDmP""h")+U85pOC}pY8GaF*DGD: 6ŅOg֒b6k&`}*y5zԈ4F=!'!fb,tFJEoOquN NoT$b( TS$Ө!"$NުbA'w&47}Z;r1_}K"ʹwB&5U$ώrjYt["ݨr\DeAMRۮwV9j;hL[2f 5Qd ]yʛlF eJk,RK1K(W"^wN,Paj`G6"Lڐέ%\HT.cR DQ>aI1TG u#Pnx0xݽn+MxPoᖙB+bY=\j6P0T0f7w%*uv88l\4/8mA *9ẁT#.^Rt,)j~ [ĺ~vJl7X _L8`A~9ɺd*/c; LOV+LkUnޜn P?H0!R Z6P6u; ]\9>gg{&VZVe Z7q?^Gz{[X"LerAPO}k8EV v½"ޞ0SǼlUYQ2KhGKQ֛?Re8)?<5qʙ0NYV(S홪 e;%r1Ljtȍk,pxۚpW;%jݺ,N Mno1|ݷ YO~}=t2e>`ҽ [.KW5: t@hZs=RrY$[)$oݲ>o *t{Z--{ {{]o!ru͙ }t^eZLvH k3]v8GgŋdpHvE-V q-%$W%[tpלi ~Nul. ¹#MY2Tif6([,Ma -]bDb%TG7V*+2vs9dM nYp~-T=؋{≁|yTdeWTc X<]ag`*@-[3 26ԫV/Y2Q1$%Wb+j&r5^&TcV>oRǗ ғOE9:· ^A(@L=HhvUy&7>* n_5wS>/Oe WJä]WZPS)Z ek"z6a?Ǜ'7\=BOlݿo0쉜#ZaS}}8ҕtOaӎ:Zkn@"MAE—pekj:~_ 0e#};eQAOpUg{)vM'cjwֳ \7t Yu17HaE_4'Z8T؍IDk>g_|*$KI1Uun^fe8p%B=~gz2'&ҰP髏HW/qZrT<|N5~1rgmGƭϢo)ns9-WҮmc:<<6%!y.Mr{݃EKew.N-vSv[EFuf>H-4,--¢l+W͞D+:5"\U Muː3v,N<].M?^v@sEo~/IߢN]PE eѿnFiA+fheE1\qI LPgbS7]6g{gdqޚJWٽY{Y"^ۼN!_=sK5L+ J?lp.] Rp0yʙC;ƮRM<, ~\}=_?q)]YܜYS3 SC_6G3V7+39s&fWa!A墥}mR*~M}&MGu0 fc6w\2Dr4$ P]_gUU@o}ڀ/#.y(GnP>%99= G;Ci^H :gUoDi=31 I|KFQ $BeL^W ce#v~&w ȇ]rz9i\lZScM.?,*"lɍ2w5tAip FzKL]%<Zx.QTVlHT|Ut'-[l 2UBTqا $譀b~s0^Սe*5VT*tm3B #Ԍ"iY$o!#D* }A'Kyq$ 7)%vGCACBqxQOFt@GkVZ o-kġ09-/[vi9^ r!cIϓ-_..(Pц]F.?@1-'_YhHe}0nXvA3hiH"3K+[tL( sY٦)bV+HWx7c <=[:C:UAw]@xyZE,} jZI7sGފiS=9r#iP*/n(K" BvCQfш|&dd?>܆pbx.L^5d) lҒ:i !b xq.dt~ c߭-~fؓ6l6dxf}k7wPsͧMeʫ"iiaI@$ZIB-˸^ˉZzǕրNf㷛cp4&ܪ&TZFC# ܥz Ij0-4оuNڵ$4A̦Vuޓ_>61Kw|ˑ Jl8l\<1[ }L~ҍq!0RY[R 9A(9(kRm[2 .!0jZJAHxrIgm#ScjZ`r [e>iSX6K5*j/:6"ugŤ{A_KT`7s췴͛7t` X|.W$ smmp!Q6UY[oS_ZJg xuR'I`\>*a|1Yϴϓ? <{ 7M TvB&њWV$r0HYX6Y._ ,Ғg-^@Ğ! y,UB;={NxQ5?_")#bϺ eM՟X ;5. r<6.Ymg rF1n jICue]icv)6V,nsZܝZ<EɪO5cuζ߰{-@~Fx<ʤtzTlL%dv)N"+j\.T2EsXs9|!߮W2Sᩎ psHGi [2D+52)FvpdR H{vO]}u,M%8o rEAH9SF}j|Tn/$ޚ$<,s ^07%>.t4mwnK6MPF'GO5,\d,$JJJEJ Ad4 0v.U&w(l1VhV &<;eN]7 G3W$~|C5Dn]n6wkXww ^;~;y'LLw]zf4o7r9gYтhd*w0s1)1VLR9),.M0(dKY`-L/qǪ8b,uc1'KnWٮ.= /~(EZ ,cǫ8˛S@n$gvlR:O,v̯q0[ ! $yv.i)dL=2CE!IwY&IUK+:+aZi`{MsC2؊LٵT$N]W1BHR҄(H!CO[bF8+on&{IY3/Z6Ţbc$?Q,iPg Y, 5B-z!a;v\4ckkM7JxN2qNfPU$K ٟ19|HUҵbb*?E>k_[+_k@B*I(uQo'~LYٟ7RUŐkHJ11ΟOu:Y}筊2z':綗Ah,nɷMQvȢLhI m8ɖx!_W"Avcpl3I2S=#VM,zxbRits;kܰbUX4Ayۘ/ڿf6s w*1%7<ɷxL. :)c˘ss/3t^L޽xX2O#znl\:"tr1wZvv&O 2ig VTa+@, e4Rߍ0IFCX@lz4Qp>(6acd\b(A!ʜgR'ﱭ+pc3'x2ϡG}5|X)=ֲQ5l74f\of<%c5J4Nu{f"ٶ1VE _zEHmy }0FtY_cbHCE#4BH%]*8#vEO~YJufnֺbJK~@+4Jթ)D1_De·=[lMZۨB:9ᯏs-sjcs.ej 9ۉczҊnc&쳉3߯cdq{K_ZN㥓P~$ X!go<;<<{~yy vGn0i CnmX~~߲ vl瑓u$&.?{l DKk{kˉ]2EϞxⳓe 7ǯPk?%?s-sA+@X8?G0ps%-T[8wSozI<,#(\wcF?q8s˵p?C`NxΜ܎Yt~mIoWӢsk#;gF \jD%σmbMOn3?zw߃ 7zv՞wZ)>!ϑݼM <P?Ʈ:LX)v&G ʛ;'x* =̓8MJj ~ p|'kU"_E2qJMHq|ihH)@'UB_A$3o)\_ZN>.D%st Re!h@A W4Oְ!9~['<)|Qx@1,V`$Mx5{BJ/XTwx1"N[TS[}ZJcC|tӞd: q9Rᕕk+;U&nh"$~D:cZvZl:B{?u:E~!%b:bVO/6&AjHP߅哟[Lb:"357QLT5LLͱn3D#1kU Ψ~|!R/50>Qe{`jRM;6o՞rTF>%G# ȭܖB9d,fXiUvK R к 'QR1/Kp52 UFw<Uc$Ĩ0\+fC{B&5½ʟq;^)J(0Qn Hrd% m#,}W>+Pv۫-~bAJ-LMdBwYw>jþf#2u{zSERYPחk7d\'JW4x}nk3Y߽A/XO\}z-_0gѾl?.\2T;)r L̑ώҽfSw؜n4 tWyF5~%PGK[?0~˒Lǖ5GlcVڽ]{zFܕEi/?8No(){`)b_4< +v|)g6u#ڳⳒ$;;ˑIv?56 g ]ZTSIz !>3᫅澮/P(Jq7mɗqj]_QhO)P"8s~r+5)DpIzىR[*V g⚮Ɠg^+[CctX +mG_\yx8SacL= jV>c0byw7KNRߓ5Z#V-WH ^Kg>Pjq;~F4 B׈@X!=|s9bԥ=++nr E^Ȇgaͩ J&KQa:Wps{:/Ȉխr YhTk[;{jg讠nF5@QVBzcWBSl=:+hWZ9 T-dn7/9kZZ*hcJ E2 %cvA0YxωBzQBΆLcE!g>7M4C`!/Oiܴg2u>R%%1֮<^R%'"<1Hk"^=?xRQTlEIW e|7M` )WnM,%]=\rPX(ϋF2*Cg!oh/ P4[w5Rjl"8.YkBɂ*EKsZʼnTkBvp>ZO({xKpm9fH_'A(-):|JWB(DZ)1uX͞SӞL: /Ϧޢ yv?fϲpVTwf-$8˕r*`珿uD &|/_-iX{ª\zհ)dȗwP76UNk"x_k \XL ,ͬW8p즶-5Dkj}zP"^򵭫^3q+ַ~Uw=NM2<;6Fg`ZV.MR:ߐфeAO,.FNҲ`4_GaSGq$l@ó6`3)CxBuf+z'fv{`v0!s ?Gp3`g?^>{qK>Q“/b/>.{حvތ)s)kNV5lrՙIΖc= BcBtZ!Ii4t Ol=“<%]:Ҟ( B\2qtnJM>'w֏o07,cJ|c&|2{kSf,\TmZ=nFcF9ǡFu˷voq&+C,09ڈm/dO;ɕO Kv5p d $l'dƂMKg_BLJt"D7# }&[CXu̕`];w9ݐO}4 '[( sJq`RFPIn>)6ʼn0qj8x|wk25ژSH Fr ?33~eI1L%3S|S :M!6YO=By VJ(2{ըh1&>A)b*fخY8dwJە\X^j\_SGC^<"䙫'ѵCp,]>Beg7ڽ:h^Ǐw2/>A&_tZ&X- ` @Fx.l}]G)_!rAHM REwpqwt0(is?.˹h}7㠒!W#" 核jhGmN=R\@ڂ%7lLx# 5 mɷn[B} u]fm6ş>]raKayK @ī;h([c)odz$Ƙ#Ygx&k=7w/ K%ۗ-_M}Ё7(BNd׶OM>Xo% 6]V7O>;1s+L#cATOhphE$.*w4up5D7(jCZ6[><0yQ@D]T,$0\i [F+,Z\!r9W=ZְspOo27%ìC A1&2=QoΥ>0P@GgZd_dd-N0"}=NmR {-Z BeZ@XvEX{mrꯉk;ң(<9 Q%fl3}'06k&3*#vB`1x.յ;~ۏoo[սT K\зZkbu6l;ߑv_ߠxwWo*ka톧B\R!__Y`X?84W(0t j;%Yl!v^~j[ddf%TwS<պGԟ?r$_A~rge݁]}ygUM\ZЧ|{;o;Bx'i],;CrN٦ ZCLR?-\Rr)yZ>3y}?,sK*dA[Ք'in4ݿp=Õ*׌qn fhwwPQ@m>"TYiPV S? HtKM c\cx)3Էl%*k|wتF1Զ NvĉԢ}𱞵/nTbs=ʡ5d&Kdgnyq91 1idҹdmQ`>PNYIU{ǀ2{h %Z|+6Yrvez|k•Yzs@=&]2d]GӋdAZsU%ZB asMd1v!D=`o{&/Shʖx~AhKR*rm}4xzyU=TnOj$^ۂ gXtfuݶ(d浉ŽMў-5ekԩKU%UKcֲ%#W\׭dB❐bӱgd`/hmKu"[/v 1HYlxbF[d:Wܵɿᝈ3r.Lfz;]8_[gl4Ia^f~" y'[òtɠkw#67x&0}:q u֯3Um4}q.6'0 K\^B5q3m!U]"ggbZ@^*J7m·dOb>gȫV%W6xdGƋ߹AH.cB,~g>=߆-{nUyZ|>;}cWebٙade?P6ҧ8SiQ9տi E5Kyrsךsמ=spZ;|\;S}rMK?D69Zsƪ`LKTpj7/n:Wec]3\O  nD2Q=/>_gUVjrwܱR-p)ICɞ5j-$łlI"HӾZݍΠ簝 -x) yWg{oMi9bo_ a`HHL%]Lƛ)ܬ^`h#r&Q~khPzy%qMk7mV}Huk `Td&5?6 ];NË|,ר+{(=_beI1;f7Bc^ؚM]TOQ޿zgyr=E8Z]6&x=al ]qYwQ9X9w] IqZh9js:($jf.:Ý&tljEM1.f㥶gDgo4P8%6jLV8 @["TqeUAZiCTA5T24Z~M9U¤ư:K2&wJmpuYx>u7W}%7s7_TRdD~tHB5%R;**VZK֜u,t%*θz+/5FY/6ZExWx=+w: ZkG{~t{Ҳb= p[#f{DqnZdC?϶u[y %m: _G/Hdpkw_tm4o-i) J.(e,ݫ<-6Z#lz{@Gu\;l]ڦViUv]+H]2ETӋ L1pIܝ-b5I z{o|ᠷy3w{gnkq JҜ{V㫓Ô<<:.kV FAQ@Al9DdH1H)bu1č<QGE4N (KGԃA9"%߯Krg艉ct~c"D(i~ \ߪǏBpHI\da@0E,2%+\#I:Lx.1S3qcS⻅ONjz11yTD6"pË䨒8 N!NNu8gY|{{ 6vnB@ J}8: tyDQʹsnʃ N.Hcm LxQ<ܴ:vt՝Sh?]g00PeVggweGSHx6=p7Nj;7(wnvkSY $Zd,ȧ~pfL\/H&)9jJW@zP{!Ҋm˙WWզ lX%-TlN˜tJVP**"=acZt8kI˭2U\,] <w"3[jtE{tILO*'厎ֽ݉3V^$a"J83v^br~MQ*~L-'KQEQ5E֢{Wէ ;ɾ s9._U|W\HρG֮߶ql Sq}~9}t]z\~}oQ}N%ag04o?Qi$yrO7H6[*֓>wZzr),OXs'qE`BJOHW*@l8Et¾y} 9)A&i{dy]S`d72StAFѳ] ƴ!l/FΓ'Z׃.Xg%̙$'6ׯcpCrSb#΍O/UZQ$2g4G7:RZOWycWr*($rjm6`* }[:Rb ;D :=;`͊% @ʠB*V9cF) p_d@T_eN-p~ÙfﮫT(\TI33 1:LJnr.[(=JK`[*VVLgh`W 26W[L)LT#\Ԁ^ꜻ-Dh2GՁ9”A3Ͽ*Ϡ?ӄdM|X\cɔTjt@z#QmZR($l0nH畀87Ocip&3!Rߵ śWpD1W+ 8Hovs"I1i$uc`"7aqT*D>GVѯU"QML0\p=yNA#%)3&HϟH2#4,C^dZk"5| @ KRz*R`VmO |UKry5:?={kݧggSc"#}~&χ-1 &7!y⎞☺"wuVP(eԜ>Obb(ǒT״ݼWKl(I fZbҵ&-.up_R̨q{3);xH8qn /BŶtf[Jw~ϸa)cA{㳷[GvK >*gix<vzs.4G."On&QNiyyM3@ǃv}?h"|:O}!SwւcSͶ7#^?3rto^A-shloi6vE\Z dT-K4.2EWCu1T}V?~H3}drVZ2X?D8&^,TTp+v]- n !&)f\-NGRJ\.gēN;q9!*';:52WHgi[kT5th!r /W~iyrWefG) FZ62KX?Jq߻^ndIBZ-Zyv;GWI>}2[ZFϘ3Ԑoneх"[6U=*mddcی?= ƯȌ6ȱP*.$\7 UI0B?M̛fք]!-DBgO|K,b ^s&)Dw6od.mRJ0CXڢ;g,,s )M 6k *ΔK1| >%$IN:n*%*R [;}UHSV3-TFgRQ:+gf8krRG;GxTF &P +w9|6Vk9IAx ^Z#(+zT ?#yN;4KuO/~@JٖC=i '<(I)28bU&I"+O' "lW-yHo/^S{.Ϋ[d^E|䵤?/)n縱q^ѳ[.WkyQ\=r)_c*.ta0D6NOlhyZ4JMo:7A\'`=kSd,"ieoT8 (:5Kj_yU"MDbv$d T$eaY^EԋqT: g*O ջG[Oʳf5%F1ex|:CMX:l[pĂݦ}ҨX,,{CEIt7Ÿ(W| /gg%9Ô7Aic|xNYeAƭ$ؒ(Ս._?G»$HuH4_>~C' ~W<tEe&K{u_d?ʡ:lrv޹ yDR7m,Z_p=F]7?E5C+`_|X#[̦lVOy1C9BiE_3~c3BP6U3Rںx0{kIArGX^*w)wkVŰbuZ,Rwa}Yx4vEB_[Zy\aގ`a,D!jà)yeRfqBpQovQtWC=G|(1t + 璊ޞ67 3Y<6:#^BM>[hpnM&@@|%ytB1Ag3wKT!l+<^r<D}1@|KO˲טpxn 3@>gnWdlM'᣽;?q'ϋ9߃Ƀ.kj2iO NxD;S2 muv[G'б}h6UV0Id;;E~4M}=13O=]}u@U \S?&|4c"{TyŅgϗa H),}NnB$\}?d7^a\O\qbaM{w58靀2$?CPnKgTS{d e1II* =U좷!Q<Mw =|nq DO)]m^n2)V@zCqA1/W$R91MY4Vo3h<]_4ϼAP%_ǎzQ$7޵Cn6̹2(7Pǜ}-QΪ޻lxrKceiID<{-|,7}C|Rܸ.+udIGdToWE%Ipof1mHn^hN7E*bn*?5ř O Y@fnqTnZ:kos/:X==u%Y[]豲؎Y-Fۛ*-C58J"G(=JŘDS'pq_9ጅtD>+!uAq!EKوΰ p@vJĊp{{&&f&p>:x{7@3QVrLjYuM (jvMq;T\gBi E|Ald :iF.h(EnQZB]IbG2Eܕ^1\߸+qT7.\R t?iҒARݳj9O7ÙW6.Q)iBd.;i0Iu޻ҙ?e0=wD\\D;,"<ۢUE˥ UCafj=!Rrp#т<UPv4I>({NRh0u5CK<>˛'OZē֒+JYgbD^DZLYJʹE>PΌl]D]B(bt|Wd#"a}AiEVx[Oc56/W&64ջ|.!;nMI֜lPiW, 7ignSpKn0PcY}`eQ>[&E$g'UZR< 9=Sɹ3s?o>\3č9P+R^tL߭ HZ4O <]5xM 3{x&OZse;/\6xs1#+.*?Q2/gz%AT}XffZb|5OF)hC&̑ؖHdsE'¢VٲYvG$Ⱦ>1`F_-u_MXl3AH̅U[6IY%fd %#g <6g}KMvRdU=7:~ [u(1Șf2:M/y ]" _2 Ո~uxsd ,Uap18$$D i @,"vsԫs^wlS:6ԏ~ְ0 W0Y 4YK>'g VHC9rcXrc,ݚ[p;_0c;~)&$_ɘД#H<)=ͅdM2 nI& |o :Ců3%?@t-G3MP2QQ%1eh<+{|?X QkעM,# ۆϩ^= ٳ t;7P2q$ĕ˰`Q5Yդ>,hZ92n )5vB5yˢawAGEk-KS; b%CiktLsx2"/Od39JKB)WÛrW6$D/.^\jztՅ{:ⲖՁ6_=Ѱo %~\+欆PNH_,xĨjY) :(#n@*8й!mQډW)D:Hp36hqߢ8sI9E\w`vF;oY)ʥѦ7ÃĂ |g|MJsվ:QK9Br&G-1=*MdɖQc@PMTJǚk:RPLK,nOJІ@co b1՝'3|0cΞxI^>Z5֙/SRhY4V-qHnh &@'F 2%τ  GQkExolCyFhlmEiEE1aMRC͖ѐ,oKҲ?ztN#1eJNN .aԡ4}2Ui15k; AXZSiYqY^za$㞯V^\=tEfO]ǒY=OZ!IBWbh윻_|OO`g+BR5KP=iN1aҡ kؼf)U%ޮۍM`U.3WeiŮ$mџ[4:U~]Gu?=_>((/tɱdP?*pteY9cuݳA檊+9eE@FUҦ?]m{[rb~5Ig/ۼnKQkʑ@}.y*:5ˮ7'>[7%gif ҺUIT)[\XqjH.:V?bL fC JVMFA`GEs]t\lNB"T~K>pwlfmͦ~sb#V0=9|L*7V,:)(M}`Bo+CH"m$732Ptrxj@g1N||anP6c72 q+Vudcg.ݐޚ+ɘCeܤژޮdߩ "0hKFM|Ό(ӛB~6&BfL͝v=tEDL*#Էy DoH- 4gACTz31{hm*G-zx[YmZ6+_NNs'~0M8r6GH4 U|^4ZW;U*C|UD9s]KJKF;^sGBtyݎ[VpfnA)p;?@:E5lj)}KGS&tg71s{m9 =gktm_HVݫ4=<\M;g'ܺfOj4׺چ#iWV1Qpo~5\]\q->x,ѥis' (y.SJ[ڇz{WPNHsRMrm'i(rD;ٸ6EV$6[ߨ@Z'2|_Ci~$*jmg y)j3-Pn e =hWΛɍb¦o )-t3^ :PBi 2ʏ\7xbap|붢7D#z,U; p" !g$Z:Vo1Sdupo-` ‡ӭYTA*QZ ;\ k7h;ـyT, >_GUi(tq[w m*MP:jn*=^ hŃ xcO-_E,#ZáR9.-X@PG`J( :>DJ|]0X@ั]o8@yr> TNb.D ZPW yμ$ oIS/u8#z?֏h7SǶ\%|T`<Нfd Tٜ >x]B|&w^Üݞ:5-IYo[۝!c3Rɢ \2P\86&S17=:0yV( zϮz"ޱR'ƫj>WiO2\t Z o ]'N` ]hRXұlAr0͎E+{Ϯr/Sf9{V8K(2x=lYq;Y#?-GWKW;Zo[Q&GڐSħmYb\=o]ё>4}5`D3Tޙdǘ ' \w9M=L<3 M)%3>1(/&n 33(S.=g_%?U;u)wu+!S\b恻vsjI.aHkNueŘ4]O5*L_b[b]\!GŖpqg8W؍7l] m|Hֽ(cg"b^ɕQ551ɶpq5*Yx-C_חTS<χ_沉puA\˔eP@`~(: HBZOaPV>OۖRƮs</~V%YQe# j9zYKǾz|yB~l#3ɉKjrC ]_(WPN|)|[q9,N|; EƘl$I"M"-Nw醶݉kWnhۗT:jiZUr.R%U`nM'Wy&DQ8l* =kWN Ҙ<\-EFj#K,r݁p>U#SUS! MaŐvT7iCXDl*Uxgh|E8|o>@7j |ܿA038ċ[^Ʌ([nV<=~L,D (4x*GmDF XQ hlۨD⏘9rlUxiN ̑!D*xėĪO{ 8f\jȬy3F1ؘ$?h'hi"M(=v(ˠ=+ϴz3.}lݞKaJu̝2",Ƀ#:qRVÍWp\ԙ:6"C\1j-ÛB~)Z))J{W@**k })mJȷSS &vF91R [u6OԠJ6B.vFVg1$KD.9Odw/y|-.Ϟ;g'x:73<7op3id3iR:P̞+bh$5ᎶEzmԼ9ҷW/):/0"WM!euA3^R2\! #H`hs!-eK4ZswUTcߟ!&REHڵ1 ªɝ~=0#bgF( R%|̑HYW暥ʮ*' wgq(c瘕%bMҊ^SLC޿'{QQ6⫯ŧ9s`0&3?ap:D"4rOùZdjoB_ aO&ƈC1B}ESJ:UMy2 X')XzX#R"Kδ6=>"jºel'}x!FWݲ? ΧӽoYWJ%i뉣|O.Xp}=+ i؏^p(#Uivm2% iM*7h9N&ݡXfhAjN,Nn ળ>֓7˦W)V̽ b-YZے [7 eh<\ex"6/` [0C7?Mw/y4M;зo܊^s>yMGb|N>cegHAZfmrV]=2fyAZ]Rhu6Ռ)pDƖDM/.?<ӲΎË2W>E^N|wSgѩgrVLa5(9}MfRK2ԚmEnO4#u62Xr^j7\GRW![7 lE~d0@tA FQ">ץ0/5Rd׎<ƜXrZרsz>X11ԯOKb[ >c-IQHHYo+1(?`S2h.cZ[:%Rv,lk7]6)F 9f ib!,.Hȳ%虜!l̥S>rEc\VpVO˰UOͰ %ޔ ~W)uMa"W(5? sȗ~ۨB%y?;X5\/ #ajMBث,Ri,r<*|H=@rzD Aa{%j@ fݯƌhoKTf.Y˺v"88t<8q{yXςi났V6ISY—":rͽL0kus+ˈb(: +y;tQo?%5ΰE"]x1|P}drdr֫P:f"0Gm:".zcSeD"VG`XQ*7޵NޡH WYEያJW6& me{wpx󥅋?<7ƻRdnr[9y'"bKL~,CSv>ӑ>):LBk˂WԶD@ `,+i<ѻJôyxm+~ :6Ȏ /]õAtx9_!1|D]pނp יzp:RG}POH0~>M/9oARҞ SNxe?'1yz =O@b=g!^xY™qQ8fdaNuԦ?oM3-H@B壶¶1_'N?^oF^|:TES$">.Lt)s&#bLI!" |OWH<6xAGȮ]äәp0klslzo\<$L)e ^iC)Dyæn~T%3l"W|ai\[Z18^&~3y~ŭIdTdBϾD.9s2O}oɹncf\'wfִrdTAKu/K2ղnN7zJ >Zɍӕ_z_݋287Vq\9ot^''[ 'Tŀ*hd&ǫW%jTqM-#~G4>пl;4 L Xw6{'Ɉ 2ix2񐝼lw_X-PY/jaa51;sMg&{;NDcG,o!; -]xQ;>/,6T'ԦhbQbP(aEDVEzm+]Ï.KnUhZR3pCoI0з͜nYR;+poR)AZ&Vk|h\M龵#Zzy @*U=y"EӘnD0b+" 3/98ǔZ統xJͤ=2S۰+j %?3_9Q1ѥ^}C#ϵN;j 5> 1Nv+2'{n깏ʟ{;M9WOΧNIC g%No'NA#FpԲ[8o4E yEK}_xf*{[SMc;6D8g;Ex]V'FM,C;n\o4L KrDY)@̋2X 7'>"U3F1owg_EIdWP)&~!~b_j1_\X!t=ה#Z,ٿ? z`e#d}`}BNj8T~q ٕ .ECm㟒;7 ǧV: x)$vJo_\(%*fF`Jkj堙OD 6'9E n N 7>d9%g)[ѸY>B*1@g,7bt30j?!F "0 }#996ɀ ^th&&z PTxAh3(Y-3 k ЧqKA2OҺ::fV9V+#4Hj\{F#iH$6B5ͤR42I cQTp)(X6'Dx8\B`_"cųM2_FLu8se3d2#S %dwɕR# ] mXgس@̛oU~Ad`lր'yD&kb3Et󙴦<'Mf hO,dIt0mfX0 Kgt#2۸a˵&jN:UQh'xװoJYIYg %`K* U!Mv؟5~gUWٙ)U2=# "ctQ .\C}F/dB+)-ʐ+Xl(}ʧz=6RaK, ^ R4;/Kոl\'8j`9^nU=4i_V,+)aiE4H`ɣ()GԊXR-lCB3KIJwBKɣ q:kAo(.E-apkngQcq9*dB,X 0i΋B yX(3?ٓL;H˺-9ց]HlL;-u(*w0q.Z{g8hn նTՒ"PϋvXBl\>"-˗Ma!#_lUA`d`fƓ@^ET'R.ʁԄk&|b3٭QFנaz?%*d]&ǽ҈RyC![WnGąe*L w$<7N}㬻Ǥ+wbG"GQ>s'eIf>OۂimQlFc,P^O2*id6efw#b2g#1H @00@ D=(32N? %I vjp>'8"f2? |e3)yL\Y֔f@XC=6+ɖ$Z\bjy&ZYԗDd'6N^r_Tzmf BH[cRNdYYIdE4dmE&R>[j}21MLc2l1$+)S[WG#KˊaLSE۷,`)d(bO1Q v=͘==LvkFs Y(Ұ5@!9(аZABfv3Pp"T_? 8P3wB^ v6ݗ)=wr6΅};9B#A؋!YT"#b/`})>}N+!!M jh\BsԻ޽ ާʽyy*FVT0߅`(:O@؛N|;AFO)Nƞ7"P1P'1La.N"bJUO5czD܋!rBm|K9V3h{%T2RWC/!OZ])R^ )ʽ1i\;4rTnlwpBmԼ|X.?Lk'a *wwHN`Uܭdr(ؙP@-,-;}zw ,j\v;,FQ2353 !pZ3[rdBI\j`} }{F큰(ث!X#}m {* IIbl'53 KB,'jL @ -"H##ߕOBO2Ӻl4f m<2HӁIApGʟ\d!kjF3-Oi͎-{=D^־ص n%3bd[U*я.QMƜoعA"X;@F2qc-V^ڕ%?LJ|c-CȈx0dgZafQX(u)f33Ԁ2[@JAyoAOT,Nd&+_sa[eŶ s.mo[KzgG iOYE| K{)7gZ,nhW]o~F53.nvqyi&ZFj U npUMUMvt(<J6 K"y!c>*z @EeI TB֪>P^Pw2@q9 zl#b'༇1>GNkq]/1]jʇ|5^j' _'/_2IT'ӤntZ&z?%p 7̢49eήRVësKK!GGf-m<^^,[7{tf?d֛saS0?rLl"e*DqM|cZE*i~.7}hoxtJ4mPXkDA\5@om I:pQtݷ{.qho+ޮ XqlxEyu(ҭ".<# ֊^TKeO HAdZR5gOND x >H Ŭ!3pFa@]<טi8E#@QmmflMeٸPAxYFOUzE^ G6qFQӛgmў_cWU5L\^б4L]2/0r}4V:T8]>M]ÒjVY"2agG՚RC/-$nGf6R\URO5Nzя)۸hzS{F GSSG F{R'X,Ynޝe$]ZnEzq}ߦ2lS_JC@'xd>H@b@,>t WUchApy)ISO{*潓'>kT$%١T8l˴4͊]>pYe8pۖr{F*<.jreœ]eB6;Qлy:6J٤7)of hthMyQV$cDH+ c/)Jψ*HOSLͱ#%H=y(JeUYEG@V ~~qR{ݞߞT<\p?8`ɣ{qf2d$3dLkL@NB#7 (޺ˮ'+yeo]23uWUWWWwWW#r@w#-R8oV2meyUXEوs۲:k%ήЧARr]mVknUjј*C!=Q<.^ K ȁ^r(>wLcffǢ2t؇uG[m Cu*0vpOvǢ9C ~x{E6`ʁkdZ*fk^Tif̍&Z%{gAպu#ZCn =OU[q}q }>QlrfA7*c[bq3oȝ3F'D)\[Szȇ`=L>Z2=,&P¹SA\Z: ϟ;P= ^F~Ė$JfN'8B Ze1`0,Ǹ2)*ȗ3\zJi$&3͵iEҳȵit$ݬbsB*dt$(zVbIsZM7U@r8=|9D@xp|tV*\v,IʸQox5L}vч)ӚyG@:4S?Tƙ_,Nc#rJ'=ȥR&̻6ѐ2V-201) tGn1lSKo.qb7BѲi66&Elr?2'y%wRcs,m [Fҭ]4TѰ-7oNjfn[ YgJUS~Y2ϔeRǦƖ j9 N./^ʛel%qiU*ءmYL՜N4ϱ$&Z6L+MOύ[}Z8}("%cߣ(,QwAI':v Ž 1.o'5['Vs܃|6 n?,'&sC hBI"n$nCh ?*= 9=ldce~eUJGȲ|g^UUލJlŧ0^~ ++ W$:鯮_߹HOM@nWKXۉ'׉aõwЪ_xY+R/edR2d^"Z /tKpr b69(K^@VK хodXpX{*GR K^~/1fX rcY{ nϼtКGO|/e w>9[d o+^aCh9Q(OyjJɷMF>=[TWK:_A׺h_2YC '߇ZpÊ>hUk+Un8VQP?5gat綱YM֮pvej;w0H9Lw?~ǀCtgrVLI ^8jKܶYR~y?α{ w{ϕgesK{+/rRpF`QZdNK6w|ns%A5~r8嶃0Y2|YNWh}!n#9.0Vz'C NXP]I&yi+1 ^GAMNnyzCzoWGC]\⻇=a ue񞠈#` 1^fۢ?YvRRfQڍO&׫k2YY~o+b/luMj(Kj[]1wDb+EWl,K~kɭ8b/d*c7%j0kyyڔ~u?ٱLNuVJ Őbf-K۝GLhJh!M9f$I{Gb]-#G8\-}4|wU)vrM$lTD6V]}`3 \-How $f\շ~nJ3뎾d߿CשoZt}2|u}dÑc~]7eD$*lѾ{An\Lwwzq]Ege1ɇ'x?%s+i} ¯Q=3I=Q {d#t6hQ7pS d o]ۙ& ]BI"^t%ȿK/\!5[Zv߱60 !]l۹3* ܅(*WV-,_ۘWk1.ídGP2bJ\^|v4Ӱ ڬr茶$_a`:{$az[iIuT=o ۴wDq/!6.He(+-{/x0o`n1ъO6&JB78+lٍu-iȕ&/3OSVq.ưʰSbev-8,E5eZmYNљdz> #BYdhIu[]gq-)ݮ# ?bM2yʊA9`rbb\xW W0HUPr]0m1]T2A($MR,ZF|f #ް9Jp# Lx[ 'b:FYWZ?NeZI&@2uJ1%…+aA i`%Eo8O [W"Hν ޢ>hƖʖޖ6voj<+#h$ſdΡI&Bffg„b51)B}ULj-]ETc9}vAc MGn#RV1X =eݸrSe!' q##o_.䔸=/S5IЭџr&P&=>u7ǡIqBẋ*WBZ*a3#Ga;XWs_ csPP7p_$?&8}"&\_sjVA^@0tpZK1`V?pΑ}!F'YZ/sP@9Ql sȲuk4(GQzG|nLqZ_#pγGW&GS`O(J3Ukf.OM +k|9v}dvk1ch(I<0c}{sw\&߿)'ٛX5駍we2*.TF²_?۽Oy;qWO>ee^+Z}Iwcȥ#wMCdtoCjZcqBBqcZj7(')>K?=.766.-83%#&v gqWwy^iXY[@"": ϓMN.uZ<G%1"߽ z)NӥTPlӂS,/.]q'Xd8zYy0i6Gs0gv$dM٤ ͢VͬpNZSoKg2CEl4f wr$M g+7 [qp,,eΠ Y2Aqwv|,$6RހN>ùoL' f=Pljy^oR(MJuQOMAyGxYHϱC1?Md(3 }K{."|}/edO<9gLP6B>w@v$iq^N SG QL@<9(< 7%ċAKٛ Φ*G\ĭGHP{TLh{7 oB] (.6Ys񦝻;N(45+wEkY-3єBkS^ǭHh!6k$425g߯њPL"A ꉮ3o%jd'ifN>s.ovVqkܑ F đ7k.hʓB@15߮PVO\PQ4f>ޛ,WZUt[g7v *)%OX)u75Uȡ1[0fZhw[C]}2'OWHx_[:Z!י\P-dB?DA Rrqwc]mƠdBD.S \~A"0t5x8dupm'8b- \A4}Vz`F~##e 3j~~=h{tR~Yecw3fQ`ՓwRdPrO?u@QuLl|luCSTZF mBAyavb/!wP5Н͞sRք﷨0Cn)nOM򜍋WP`Nd:t.#@Z6Ɨ75ԫjEؕMy˝ QXG\.Ade/>J tiΆ!pB{d.>@+a3h̕(h,ުR5kjPc~R%ܫ;oΐR-gׁuF2wy{]Jr*ILkmߊpؾ2V_JHnP.A-"`JP⸿G I" Y'g>mE?ln{|e_(k貖hk'׀)W)o%6rn%ΆawiQV2=\>9b|''$ ܖa[b.E3h9{34 nYוs/ {H*K ^9_%0vfJkl\L5Wa Ǵ~}nh˘ZLϰ`zB -1y-/)nt ׹Z$U\.8˜t2B\IIZYrU瓀b*nT̗P7ޡRL^'lRc3L@=t#Hw(O6Z7s kH*~[ǨPNsq[ȗ$S0/?_3 _Ć)/73-O y{;bzue.o5QV1es\+VlL]4ţQ3Kꗟ˸kVZӃXSO6Rfe^W{kWd6P~&s1t&Xa’)"ȍk|K?=-+v$Uˍs/ӝCK:vj7-NkZ*%= ,11| }<&@FB hwdy9`1f, vC)hL$u7\;×x{I !4d/zf,xi-I nvr'%(f뺕 VOP" f lEc[Ie@R$aXi-,PЫ5:Ϡ!޶4)*ֵ ֜Z:it\ReVް-[<0eȋpSA\s(ZM 9hifp8#uhm'&3DF.Tl^(}U)n \?Ռ ,Hh52v5wF}H!uD,͗Bx+㩃A,\/4mR3hѥ^||5xM2ޓ 8I*Ҥh:,GM~Ѧ47*Py$UeUOגs *MJpq|rcMj>3cl*AN3Ket,VR,59ff0G&P.k&nM+˟q-SR=j1Hs8X926NDD-{fzSf֊SʨYko2bJGC&h"]=\bͼcY-i裀3h/no8T%e2Y+fL;uvq?T58S{d*xD7k 0o~,$(͠$!'2=(=k;NnQ\-cVJȠ:aXoPlVi~1nx!~_ 0 ='Y/{ mJLZÇ lC=zE{nQEX5qIh?h^06(-yT4OWc 0SQP^ `njpy缂+K] JWm:֪ Y ߁|(S}FcؔҁYi w8OF),x;I*K9wPiMحBz2 jŗك a`?U2=_$ra>]nx Ÿrs' a%l7 < oEA=D:1J"|RܛYآnVF.F`N*[_p3&'$:QOdLq ZBy@e/AxU RTD$)+cT Eu"f[,+إڹ9iL ءfYSZ6ZT=!kfY3LZ|˒a2fX>k"g:O0kZ [q;s}ov`( BN{'qPyyd-vdtX*#׮C@ &u_i`ON]Yn5fQ͖?+7Шz𚼆>nSJXfmynwQ^&K?/qb8&6zW{Q|"&~l"j꧜&igEOVu[j$| />k܏}W!!31 Fo( SypG]RLjɲolo|`^栶ޙ4d|ޢ޲d5|PFN8M%$a1|l~>.AmxV*lǍ֟}V~YɄ} uS|BB~6Ĺը#_QZ{$Fd9y(Ffsq<0d֧K l!=nOgHKړYX/Y|ƢY<%KFfLƏt`-22Q^24]EJc876*f1#Sm̮K[} [UI&-Q]u|N#^?!G^Q oxL M k{ܗ U,+"0*\ ^`K6" OrT r͸V˭厊0 }d6@I}r&k{JlGC40 Űzb {;.¢鷈\;iVm;!rψR\žaYQ& vJAd.%|>9V"C6g=+>_D ^(=-5àBSo_о[1]tǐ IEW.4i|G|?،``t,kAFVXϧte*?N&'$Eě`~JZ^^&ϠNp(r*)<˾*+t^~; ohȨm1 B'l&+=؆z}f,5RDE /嘶"#R_ܫ&zG^WS~镞SUK&=nV*7nl}F4DY~54zcBٜo0ħ /_YaYCB]x7$d^C@sD=>1u[.dJACb/,!Cѹ:̝Q'>A|4x1oHr !)371{Y," 31NChød()s *E.l]AV(%ۅ. _Y54צ,gɮGv,Fwmy너?5,{=,;*I"+]<܏=._%6kl? T:2M <71zy\3sonx} WՏChHp8꫐T}۲ o˒vq?؆peXҔǫq蹻$\EF_)'CnP'!iw-؅4Lm(j8\oŋHFtͧ%gQ X[kM+GaQs za/ߏf|`T*HG>R+MݣK2Bc6u4dV0ٙBh ?S8^wӿqw èghABf\?Uu}ְۊQ+l' H𺞩U,΄E4Ԣ@:'儺V B(SrG߿k٢iw 5[g^Vsy7F/KڰQm?KPHPp@0uÉL@%j,O#PF{s3O?rkw*G%oA-8ccwCw#6p.\لDKӦ0yI)!Q~6㛐2aOITl r#T-daξP-b[m2CERi(t-)~^ |?A<*^?nga+{RWT0k /$6~ wG6O-+Ja, .%XS.d^,C+IQv`(=UmF?J~)޶BqmOkx\ɾ|)_"oOlE[ ;rwOm](UIP}܊C#tZޕn!m #fT'uf/#}m@KS`Mp-皻о\;9S)J". x *(I\2TIƭ~33j 6zsv ?/HN_av?ZK`<&ex;Ak w DyC U^ ,l72\ qaolo/slA I62#w0v7? <_jRhiɱO2AIK!lSs ocRngA?f^$ak2 5|pu| ~ fgj8Cl<(i=jy5~Wf@=>_;y0ӍsIv-Ql)ޞ`_G`|U^*4;zn׳2m#G@6lj4  y.mNq B?ZüNEİu< x9AxYuNӐc:?tfpUBobΊg%\0-'ռn].ϹOc~H9yy!y7.?z.9w_.ȯ@*obo_ճ~t|ǿ_RJS <}L 8N?qoaF{GL8|;O9k<ÏŹ %~?A?u<?SGq֑ {83|9|7?p?zN7֏Y"OmuKn[ s,% e о ۱]b0yqoޔFv_JG^y^ :Ne xroyھeWpOp/>yk *_-ԏfw]o!8)zAq=zJv1VA"Xһ\Im,_^bEQ@#`m󒽓権h̰i(?u>tKNXњpNl]9z1dl;Wȯ ~X -?hL41Ό8p-u~iC{|h]䒅ZTsx,Oꏶj;Bn{:5U|; H #bޤAoQ /RSlpdۤMho?ĩ5,`v쥲Qq&Yn3B`B&Ģ+vahY9\Z˩)dm0Ԁns"߲l)Qy͈*ys?Ƕg<|SzL${=kxy6?4SZb)q(jmߦ;w*!ȩyz>Ol KM]<1[])~a8ٓ ?qw2KplS.9NDwX|贉W=쒣X;1ٱf{}Gn5`L(*@cC&2t-09]jCrcɔjn2]*= [DY@ ph>/YAcJ(ǂĩ};HDYE")rM wl!ȡVdj/oE$ai=>R3@(6`՚2F2צ !{mZk%/c].8eΈw#DlB;ܑL!"a/Rޟ_qɎK8;,":HFa$jne8"٨]P8q)94LU1(+?1[|˯A0|,nwQJCYP>f?q?nnZ#O kq}R(!~BӭςF C}=G<@Y^[_clV]}_e JBaQ_Hr)dD&=X QNk:IIk5d g\~wş [=(Z\M,޳={hN< MPǯs8$7$[E|KS{ۓgF7' |gArI\~Z{\ A.1aPj_ |33{?$/GZ1<ۿ9m8tւHP b7QCBzىu2>:閷nzႱkZJԸ|un̦/au #1=aOq0?KlA$Q&=Ξ"N3xߧߗݍ7"GVxLxd>,>)Uu{)!"Ef1.TtH E& 7m}nQӭov'N9>DuE ]pfs #Y<~j8%v](Oh2swwC+ C׎ڼ:`XNa'@#wQ \'r/s3#Wq}C}_$x)3PJ^#[zy¾~}$;wIc>%pOy1@8}Ù Ad{F>lHUug)ӧXwr?ʭCf]gsys[;wV/=4{k%Ah]ic =MSo$FqlSmONm6MCdIit 8:T讁:RƿF->`}r?,C~+GUUՓID8y綦N1xpc:k3(7k3o>z 2" J #RnԞr#i3aL] B=$^F2ۆpYwf:,E3AN/ɍҙgvw‰$B[ɋq[1vQx Њ^pyd68%Ӈک/t [ sv+y|>m!'ód. yKsӕ!#sC "6†P& SkNv>G;,e\2%Dos51b{vέdaoQ._ǁF#OH9:E[S_# 8\0S=6)"]H cA솰 AWr k/'EXw?'hTJו*F0.?rˈyթ/q>wrt8iν)'hi`ߨM)5*ֳM"MQT~999Pp~o$sX/ g?"ln#Q,(8.&jzC9S5Lrُ~ wV<ɚa3ۙ4+1nӥ)G]6c""YCW&$_GNiIpG3F(X0[iҞ5P2HyF"*Z a~ G?x8?N<7 ¿Dz!A}LyL*< lq J]V(܅K2j{Sh'+!qx0--; 8]X"Qb;6`Ѱ#8 2!yy0wHxl$xBR~X񀤼E%n};y:g~Z~Å}" T׎vU|=?$‹}1=^GwK׋gQ~ ַn&k%x@"g u`/#ό]rR% 1/Y1"]?w~SVPjmZBqDPݳe~ LAwB[Xg>/R9hQo O? X^G#<&#>=o)fp0ы2gOTpO޸ qӼdu,Q5˗qـ)GvInCL\OsP=15gMFعjӕCwiɉ,sLdlqFԉ埖ß!^c~CN7ȼ"41cWA/&>cf{  w' z~cϋ|gHkME`#cRBw|޸BpQ4yi@o1#󃧋z^otQs J[Od1.|n 4ѫYB_boJw&iP_=Ak3dr9}-y%6Iq,.}K+3^"&\f5ii幙6SECNcjRr3bLN>PGPtX˂ή"$7ȯY/> Ms/3ye߅{h+?"KO$p?)Q'/ ąh?Octhʁ\ȮLE_!]p.|̧%s1q{q~!u>Kȡ%Y[| 3B>MP9xǐKOy3DNOMF0SWץq8ydK957-qLQA^7WC俁xyY+!ɻ68/{Sv|OH׺+þ9*GpH!=|*nǛYv",D b8j"K [Ix@B2 >]qw+kk@Zȴ֚Q\|&68u^ #;gt{k[F5GGYf.?4|jswOf綔e:9I*?i^wV$OuRI[Вg]rxm5+˜ih}ЄC%׎Fn# 'Q!6`qܦ8z?C1LV9e\?sk ;/|^Gz-R8xx4/xYva堜,T&g]Fɬp$§zА\d9=g.pH_py~e=r*~M'N|0||~p oGQT4< `dE <@VV\dgU|3iʼ7O(pV^|K ۻ^m.JNEKuJj &_qastq.Y78vZҤp @b+B k bzaM}M $}_']"QR1¨n`>ԫ|ӧz6]Ox[7=k| ئ.u)E;Cb}`Xz%&U-ݺkBݕ ~tJAoxWM7~5yv{6)WE?4^g>|?0J# C\;wζ[Ÿΐ5{:wY9fH>P˃^M 1zւkaT͌[G&כ[KW Mpm5ޛ3q`e 6$Sz\;v`T}z,jzڴ{7tӋiY^³&g`h^gd4$"(W zE.ɝf֪'J)Vc(Pd =3,klijF=jNNfdN=#s;s3k,ܛ{GUsnK2LLڤg& 5z BAQQ]"ZXZ׺PWȝ9޹Lq:{}<99A6un{\Y8foUM\$̬cVPL\Ά`RQ͖RA4=y Eg=<b, f)` pG|ܑ9mAh;Jj>ODdqI38<>v{*6\ U q?0%|yNfX-Ek\,Un{J3|n$ZFvQD0p:"d\8Gip H)_TnQIsϻ]Z^ dDGDc$tN~dg'q~qn݌ $Huiz5olaGOXp( "hk(EO.\M*0ߌM370Lm/.;Azm̆0)QNrD Eg'skM3rjw=4TRku҆jpolCϭ6}F:SH ']x אsHlakتHu{:vf6op3ŷ?OPz9A&۟YWHE4ٗ!h9-i:Sو,o~7V^Xq/?ItO2x~#>g N 7}|X("ȧ,f'eeՆ@0߯ [ӁEΎE_v]E Q,^oR\6Mco LھkBez'h(3o^6%}\F㤼q8glQe7g7Sښ_Z[ZR]Y䩞XX94 Ԙ4۸~ǂj>(3 *eDWŲ(_86r0SMC =(kE:X ̀<_fs"Aa  u/6yM;?7viS[sV➜ c?zLy| *zKF^S۲)ͪs3•K6fpa;JqqMKIǶܽf|~]E(gxYO:8+O ?uC8Ec\fIW#u0ߣ l_Z@􄗔^J4 yYClnyθ -=c~7qB<' wb< @$,]\Mфpc$YQ/%2>.Fgze$wߦaO`yԷrݢj<ި-nɜ2nx|;v\#D/X2]ֆ 1.1^23UN /*T&܊eK>=-^XM)πg `:|$Y׃B; $x!C't/^;=!pؾqK. /'D!yҡQpYQ3Ju7[яc{(zsN@~|]L"7 *auvhl@f|'(Q;o7EڢOP-a@?EtˠSu.%_fib\pb{bׁVm ڙ)A~Cqj{'qg/ܭ2mT'9 ~bpE o o(7+$="8Jp]!@ G΋KtTc~lhNW["v'd|p"x[#P,Y;}wıݺn}ġ)ġnޞ- -8n:d$Xa Z\i{&q{8c g&% ޵.ol2ݪ]~|ninK]zҼ ԽyAcNLgBI|6#MiYV&ů0k Z4_iKʬMhFN[q"A=Zކ*zg9BsH>ݒշ|}k!NPf}Iӧ@g4ۅ5iV 2: >oT+mTSSrY[<<{ڄGK 'G, #{89x'Y&"'_ s#e='DHgNoHp]+Y-x&""R(ǾD]Xe#"+A\X_qcOb,C{5{!$Xʑ_-#")KZ OHo- $9P:|0e#P^^qH87PB?%,YbS'5Ckjtc>1/瞳+{_t]ԇAao2ma?%[%|K_9*^^K#3"/mWFѤX(OJz `B)qEy/m=H k#y1HaTX{'4Z ǗP,qnUѱ`C]SWzOK% K:|3'GwɁWG+|1_Ky3c<~Ba~CE~./{=ۺGz[.ۻҰ ,{']T"ae5M[(ߜyYj#cXśI|}^"gQę 7=_^ep4bS.= /s+=+3T7)ˀ;stN֭+r?x~+ yCZ?xI7po]0_en?<|#V4CļJ<9R#} [ e oe\lScp/H7WmM}6ېTǩz6)6X(4RypqSoPX œ o1w~Tq،To Sj5xw3ƛW7T,[xұLW*SoW.T '+`| q}|>oP^]W!=o3g@HyN>><~B#\Гep:elM'p=5K7=0y6FPU ~OvpgdzDg/藩:?N0Am(cڏ {QFD~cm-;ANDUaH =tP ۀy.wT1h"t1.8GfSϽoBWjTGx ʏa]p :dBY|nl?%>EMp mw@е-rja?PP#[Þ^K`GގZ=ԷT7:;=l$Έx^NHnoDy= m߸_vRwB: 1"n2Pw7ʢ5ch3a> 0Nm=Sa~r"]azg߿xyk$:sɒN)aSѶ>~e2rRe7"y>ǵsV]ro7GyZd),v|!!S_F|?&eN5 K_ޞì!HBmzt b"A] ,td%rRaQ@; \!E3$zFsfCrwubbإ3u=UI_P~0/ϚKB,a]b'= ql_{8 )QK>Psbb62퇈Ğw:bviDJkx}._ƙ8~,sgbhGٟ 8}p1tnc= .+!/ ,M>w{Forc5 T:c-!{6Y,t ^ogK1߼lgOX0,|oBpC9̋S%6eմ%Wu,ӴNlK ޅV&zJs4CFokLG7U:VՔsŚTzڙ5+/673dze`X<Ʋjz̊:N$,Z22떉-% 7A&my]ZLqsZ37 M1$pնx |y$b7/XV^t=&kArudڀN+>&T>i gXkƗUUť&ƪtÖ ޺% z5gHIIvA$ %c +e͙dQ `pKR7Ww1]Uť%K2 >XB+oR\WDTˠ6]Oo2F?n‡yM`UkrZ^ߕ v4]ڹvCjy7#"`VA e&˔IoJS8 T68CzCêr{ֹ `i A'5kcԱ͕鞚%y9Tug8 =ނLg we{ oMCr$a0$ey&Y\1asLe>TD|@Sr=K8(О0+t)LבoEwƻ >;?>ۆvӍϭoLA^%`J{t1G6ip͜|icMo!=A'+8(!9IHOAWùJveNL!x n~¹ X 4X:fM¢b͊5 Vr] F~^}N|ߝ^=a5,c ?p-Ƒ1y5%#?%dK1.80E׈Gl|[ 2 4{u6-lfl:9jRtqvP7IOS5"Z7@;Q|Ff%'}zfTTZ$$G5?gݭ1D{ϙ Sj8dt=)C,FIl*v`֒;0l ./L DT fXc0w]h6t:5 Il8&@36A#;(޻{710s|En5,TG~}:hNq4>< 4b 4/Z7y#IBW*D5*S{-&* ?nya'% "̻ʹJȭOShZi8v֐Bc\)rFΤj,kN-g+AWT q49Z>l(_<'+%>*A7hff1FWhUpRNOTQq*k -P W<,+xx( Qz:rP*~W@,a8Hʹdb<`HZͮjI x[侱;-PP/ {^y  KTj ރ5vwvr>@v}/yߋp×˸ ?#Aoq>G@>++Я̸Q/&oPB`<,CPZ%=?i^/}c\ 3Y~+9֓>՗.ϟ>~e~>WHCE9U?:| [1 `v>L^KåK!{anTF|rAZ2R :H+rȩ-(\쩞xÐI9a1V:cfV}ƜuX9t'f[O.ƚMTV];j.'v<{\^f2[vLiO}p;ENc&\\TX\L&art??WN; Z}j -:ԡtG_FŴFU*ZW'FшJ)AJiO'O\倡nPQE k'2 Q??r KՑݫ8Y56$^{7[<`7܊4Kb =Nʭ$gXjUAbdV t\D{w`}_6}%OfeYmgAS9Z5LtWԪ`;I ?)iDԤj)yU> p@M96O2xnG(뫗t+f C-ٵD*~gQiJc3XjR"ǟvٲ1?GxZ5ʅ ;}vU˵Zwfpom>%~œd{_#iNp%8hЖujv}x24EN2mLs=3u҆-y/PEĖrZŋ\|p;5_l|0~/^.W@b ŏtd?EX]#_zqQ^7(b]}WɅu`z{|^y+}T|VO"]~ncJ7z?s2 qƾ!6τit #9".5(j1ozZx2af x ,BQ,ڇLݖ#{_ܼnAӸ]L(5,Q.K/ 9[pxY/H|l~hgqٚr8eUEw)͆1% aˆ-÷Y9oXT-߾Nivtn[3+6 ~ ˠ瀝$ }T{jmKz$;UV;YHh^9БCco_P&H<R[a} w4.Acc :懏^>и41aU ?q ~:ӵ%Jql<^Q~E"^8^o0]G<.7qQ^7qڑ&Y;ᶖ%/r,} =Jjo9{֮݁?6~֚I4{{-ügXx=ølJOJq.J؎Py{g0ߺej?>: XX^'zz0젌>%9"dFq ?sl2 f'@ت5%f3S2kTL t-kRY)RY_6VsRH.k{S4ŷxKj90ecp iFY1F՞*j4)FZƣ{mHLݯg XlpD L-KHG :tדRIWi\|y)?t<+˫ķN_Բm+]>ijpf1hdyI&7//P4UgW-jT%ҙ*Gfxj:Qk;*xWIKfsvU%4pd'\qIXkn2LHVz!wA2J,dB)ud\۞65 T4(3CH4Fh/j8ܾ~=5?fKqIU*)' JJeB3`΄gK #tݙµ^N}`εJkVb6mJAx'~whEa%/ȉl[Kk4j7Eiw^n%6=[!-tR]&v/ w'sQ\*E㦀CH^g.ֻ/MS*}3QD[ ڮpŭoVȶ򡡬4&;E75fٞI-AƑ6[rãCgW Q(:ꑮG;Enȩ /,t䍜]yJMS5>8FOͤbfi("'>/ԇ E)G\ HO(gCB8@\.tg%#q)fn]n2ۉTZTNbSm_mZ+)~G~cs8EB+VW\9 %X@7)i/`E5ILYgfw=3!?˜~?3LF:j7^4F6$=x݄T͊k +g$3Wf*kF:W'(4r>t<}9êwdnP.C} [0ջ|qA\#BYgY xG>~$[ǯsr~\8-&ttтkKAb:z%?;Q 4t%ԎlRآI>|3C|ۧ]̱8 SbbR 6MWu|6MB8u \YTLF'8:F,)9( ˟_v\B8FqJrfQ07yܼ }?#݄ee*E%kOPwS3ʜUL3l0zDK9+Q1* :>uHX Չe$m)h/ #o21ϋ_Dӭ\8lӣaվm4sd!R6p}r2 5M23zL`3iW4֤4%9VC¿Rd>;1-&&C~E#!y.-)UW96̕2e|Ҽ]ӧni# [01hBpzM`38<7L=J #n`6t>!mI\$9 aBrtDQ{3e?2Wu4ێJ>'iC0er 3+>i0 ~ᕭ*`+ƴwCW@|4 IX-3 c(W r}hC`6oY&bB/ɠJ硬Ih-]% XZ|\X]ylˬ5Nc}}z\$N<ҕF3*м/CL|4E)C -L: N A;48h²k/ùGaq^`9DJYz@ ~3Q I}}!$THT}'`y7mp=0ro2PLP:"/?Ռ=8dyRM*T8{jkQܚ@[Ddh+)v͠ eC eͦ5ZSj;qƱ\W!.S%Ùh+%M)rS2,]⏝%gqd61eS\_J,>>Z)@Y& 9] mΔD&nie"1w?OrBPY:zٟh>SxcsBFeu1:o{Y6Z>_FKBb8 mӪ'557%'RKF>X`A-)gOcc}e ڈ]ͫ*kuS]%̟5۰oo}j5S5VUrWzװ/zn:/L{Peb7Q)] Wov3E{mt-;PUgۖ(sTg2ascp83$^ԘǸ8 E5]6_ZWa[6_z+"ݺ8xq~voâ oa+S3QDgqmb*3AK5I4+Cg 2r݁}"%Fb+s*%a}T|1̱חFӛ#Ccw_/C"4ǚ2: vy5ñLw*no6:;xRŽvwvneiOm]11?z<@n t.Ӹ vև?xFJDu:yLQQk*=d+Ɵ1x ?U ?( ?/$Ae@25P-Ɉq[&.mZ&'U6&RO>7FYV Lp5 M58b1+#OHZw± b3x ܜXqnv'$u@ `>LGcx r ԥ {Rbt Gtϥfz* Sq*_Z?^>/6_/^w 95)E.h7k\k]Le_ ހ Y0G j"XR҄2͕TE:>)oMaJUʤ$ Rm0Ӆ &2ɐ")΅&rd@?&HP痗;HU h7VelN~wiFlbY{avm,[Jr|{\(Sr ;Ғ9T3eDh uu_ %#'IJ׺U.gBhkJEZI]bp;`3-XB޳TLMHS6)ju>+-S)R>WpyX C_{3.Xf/)SxDd [cS@Kfqf@M%B]] -;LӺI6|FEv G8 qaVtf*iJBґA%c qS)D?9*- XLpJ}b9-Y^ʅ-ؤ oltzS9Wޗap}8p^xֲ6Ub0XiPvϯzL  ׾h"hѯ \'92_ ~%&XFj(uS,7(8Ѥ:sM4*zeЌ|?Q[(H tJ%R#.ДTӗkLNoݶ_h&ߜpZ'I&*4#C+U~~Pcõ1OJDnP!*hgJ|ϱ0il47>DO-'.P4AU/VR5|J?Ϳ4:c |߻ʹ yպt }N^M9mhh|wZ> 1 y)_s&ɟĔqό\Xxnӄ6[`pb$ R ]6|v >D|KW)vv4ބlA>b>j|f;}={M/F6W6~I\/N̉^yW!֑zQ<Ib[(Ms@!Y YF9Лif W.m/P5tnCo m]c0;w9ZbN6.t$?NBA;ɳ=ֲd[oۇt򲱲lY ZXNjs+8B 2RNBog9`-TFj :.Ӳ}?qfʡLPP*zcfS7ԯF(VkLIwnmu;FKc h9ʘ4ı(<P+Y|>vR( ι0(It+YD)YD8睖7$2)sb08)>o0'қf,[Sj][F_xPȅ],c#ۻqRsp.t8Wʐ&Eܧ"] k]32Y4 Rj(G7|ڍnmTXGl#뗶9}% 5|̞yXwԝ5u}y('??+\oܠQtmꍗjyz~G& mAܪָk wvR%m['MVvμmmSf//;2? /OA^J%so_֞u`c8׊9JTkZ#dB~dn- "{'i=薕&H [lx&L۾gNIɂw̜+&e-JxMNuq( [uv%$'?  }; ,[+gWܜQA7wڎv@1I**p1'3guP(aX7:қ=l\ҜҺ̼1>lLٰ5c3W%ܠj;jۥ ޶\iL_\9)q%L`0odr95Md8b:ux1[͛oւ/Wkm Ȕemۧ=7C<̗xD?YCIa>uL:/jXl0u y oWњzH()CR/Ns%8//\mOhVϫmͪB"jv炼1T"հ.5։o·# %o Id6quS;gZй'_ImigMbq1j> 7f~s$^~ {=U=&q[^G27YƟ.4n074\KU[˦ I֘S̱lF7-V7ݠLB=lyԑdzE0/ l1WmZR|[:E^ýV'qk@Uqg!|9!}|$ M8-Mxgo`$Y2J7]|S+ ֔hLTQcR+&WJk/x-7j.xsn=MDEo ѵPBzDpEGA/wՠԀx]b .-8_$C <&^X:.qkE[Q=M%`1dz}jHZ;L \|R\D|Sð&ʊqEql%i0Fc{8ZR5]2ۮ美F}k .<@<-/4oi~^C =97;>@*yȅUU*bjJ6m85U-j[UGNmq+j|(5$?3?9aʰUO,YEoIz*܈/0$߁}6g3ϭ֐I#ө]$iT5bylC^Y^cHzQ(tDNvOل .snSάfq5oT;qWsn*ZL7[]ҕ]:}Ŋ.V\pci7ˌ$DB4qWJpc}OK /shKҦ旤/۟SZ/>b6@ \]ˊC 1Ax` /gd[ZQG7#Y}ny&Sߖ7}m8a G1F+`I}Cg1ɝ#Yy(/>[hjgu]wJ>*OFְk:5y!qlTko_ *}ࣱB\\{|q[,mxl?߇ (-ku_iw~Mv]g bokS+s\[&g vr[cjs'[%dԬP 0ƯҔ6wRqz*J?m\(zkFrqSE͌'IlcĮ"{P1Ek53=Cp!}?2tW\~ Ӏڗ1xJ444.EM-@s *MR2&I>:Ҏ#HڢGc !r< Sz&bg;^ r}8sPW0ݤ/)4|manSz{_đW~w6,rKT {9NWL9>Vt;@76@q/acEK3P1FC!z#8;lRl3)0}f&eo=ۃ gT~bnmO]G v@~3FB޿Oyai$eU2Ռ{Jgb_egt;,p1ߟ# $W=ONkt7%U. -X[.rgtR 9tzgm>6_~E^GuxN!곈}6x|0Tb)N3h^1ŒKv Frػ`\6\B{ K-ӊ A,O`CL9"Y15 Јd6FԲ;H!C$jtF !=mKՌK>Zr[eӖ:m^’]e6%uL(uz*@ .n=O08WC:!aZ9)&*-UCrNZ9@/`e_ /Ģk?Qɦ=X*#M<ĮR7Z3H5}"w5GP k3pKEx-T=?0ӐY.qmSB^)8kXIri,H X Ă33 uN% & SMr}*Pl>aS@%DE#x&N$rפM`$kJ Cf=َ*rh.َ4 `4:B ucZ@Cucu=*ʞJ"iF{4:,aOkzH|FA71{$8Z=^ȓ\=G:p&ž@Mp$'Ğ>ٓ P=I홣 \!0О%ߏ8oec.4fym2f7,,/H2 _:}(!,0(L$Ҏ{')PQH=FTȡU֣(=2RDR샇%= BQQZUGc"4~-_؏5x &ûP\ ,.!L(gAe Q! ȅ0]ei ydmRƇ3q@(£XҰOy U@bye$ .ҡqA*$BQxLvpA3`u V2 LOL]JP%Ϩ>Hx1 1nACye@iDs 2$##`y4`a@qD,9 hh>z|S4$>DPOH;0J%4 g}@9D˅_:z¡~8/݅JjC ΂*Pq(H{! d ?\-v޷:Y&A*Q8ٻyIϒ.zE(z$*qP?:>t(1!:$$$xPS ,GMZf qִff q š/g 7:ր7@J7:PXuϓƓ96%_-tc)"X dO3@r@|ǠL(@AKsgCg(UfsL3DFЦ?'a<؜@qRH'@c"x;e:-k/38] kz?xP4{PS0Gm>6^^"keYV5AΉQy򳖶ڜɉ0(+E]~InLAj#;ibEof.u}K1z=“ x oQגx_ fuG?7k.~3W%=J0?H)\/6Â^=''YڽH?=Sow3FL; Yx0!K*+|ɦeAȥ/p6\<ߞLuAbdr]v3<~wOX2tReɰڠ_%C'W g\>S09f!O_0HOxyZ}D%ϕõ E1enmb;/bxjaGwEaXm.(TNi*qx,.S?mGC2ug7A)qS6hIYϏ@g>H 1]P_J {f*9a\=aYp3W3vF Y,-ѿGk H0yLUpnxT8!lbk˪jyKgޘ` Z-Up',v=ћdOI7U+F AVcС)" F|N5cʱ8Mb A~)NJfp*+n*o"Vm65-ITA"J3gu lA. !?c/ I᷆ߠio+Z)|J^e=znX5 @7@hEU1,[O!/$/Pax^d`; |#_Z mԾ[j_+MSx߁ ^snb8J rߊ:FqLH'嬗v0a^Wv }zZ >:"t>ptx{btwlVURO{XI&Z]"VJ¦P`~귿Q52|>.5<8CX:tbe͍*э*wLer,Ce bqAgO07 8݆^\#d-"4S`Ѱq^0ݡіUɣ0)F=gH {hEG/KG%|@61>ŕKnt (8"ߜТ֍ Jޣ!Ӟ{vą _fdK|Ztd]a5]dy7&=&5}9`PR 7(Q7U!ɅۯE| ULmhÔ-ΤP\llՙeۗeFeQ-完YmOռ |rk,}fͨ{Z>0,wҤnϣ}g<3??^ǚ=tN> Infr׳+V6Ycץponh(6m?Ûux7 MZpX~J׬))VZ:{ wFZvܤ*򞴏\tUݱgֵ76-6{ŹG/\.lc~0Ķ 2{z"&l!2<& 'fʡG#{wKG s'??4tJYS F=74JK]My55FhfL9@gg "|͹ޢmwDo`onUuSG>LVi]$ZVm4Xds56i!t4Txo蓓)f"tf n伕!Gʇ ںn+k@JgYl)'p'R"%A*,_F؞1~6Plߙ+& 2"\Y1jo` ^jM+3#Ǟ^mێ=t#ᮟqEv_?sw* *.vU=p+ |&spW9W=qSWNi~Į9Ȝoݽ]Ӧd9 :rBkGǠa f bYA/_< y@  k V   xݚ ڀw~{)$ClcfɰdjgȜ!2tT*ȡ4dSGDTd.Q{^~6s]}=kw]S^?o9fW:"k D2(#0Cre)P%C'umI~>x'#o[ަ7G_Jp&r]L0Ƞry.7Sdd,J(z8➁$IbJIs\#ImzPF^v'BeiJ."cᶑ0DATE TK9/.m2~`rI1SZR8T6ȍ iﭷz$ŒJ ]i);eBrC.I4d!C[&%uǣBYGRƜf4EEy\[iY+9uj+$OwJicc;OהyMFV D.d2ftf<5ԇ%D_]GikOּxjB]…W9a*!l1եi'ϒ["=H[6t7j.}GS~&2( *Aa VVv="5s%EW#<Y֛oY\{a< #ЕԐ k]-Ld L)qe w"X ajL{a:,MGAJ&[@(WFJfѶKUeQe(}Ȫ$[u.M<'^!bQ~}_Ǹx$AZ2o2el~#TgݺdIzԸ4.̵o+;v\d"wkӐ58M(tRt-6O<`#s-kgl 3=]yssXr1W7Z]`5HJ`Kѕ?ص zIɫ26IS'kyGctUZe}IWG*뽲?A^k#]"=JUp61~f*AZ:(BzczT~Ma]g*bUFfr0iHpIt& LndI1wlu=~◖2`{ob1Y;bKkQRY$Gʲ8^WkfynXΪ`ht_{KxK %Y|IPI3ow挑z]n=T4IhwdWOکjk$UF[MQ:UNvZD<y)uG ߍQo.v1K2~@/}ڝF(@w-'T]_$/&Cn0}!cnlRմfv7Z'HmbJYXE;nlƌj.-I{oeLߥ<[JMG=0ڀ~;%F2{}4q\v@PNFck=N^lNl;relӛIa] x܇{/mr"il/$Qi{ .Yq右۱i.=NU[d`HvS2n%=^>Dz ^OZ{WPQ5gWW}llNe*KmvnL9%JifYǦ-c_/TyyZ/ Q坑݃6!^a֒Eź0=;;>y:'#3݋4rb%1Rpl~9gHH=id [%6$Q/ľ܄}N*Ό-3V yeqF͓kNI%MMYm ~?].wdHyI$uN'eζ7DmH&aNZ#c\v9_&ʠvYd+o>7Y_vżu[:\f s$pKn?VJ3S1粈c?MX_Y v ]o.Aw+u ;>U_'W^؁'*[9 :<޽ ]62O'H"`_bEqaߖft;:hLt=]]z1tcޥ&`_ޝ:wMn8J,l7m }uٛԒnYt)I3 vn,EM^@=B⺲"""|ݔ0[kV~ulʟi\]e1ҁ޾ m=5b0؋19&XowVZA$l5n7Kwo\<]2v8]ݞCSI<6G21/ƫ2轚2X_FَrIjW=Jګny rfTϿEnvv t:\:ct /+?sMb0t@)I3a/h{ad~&4؃䂢+BUam~ȡ{Q\3%&)5UMIT ų=? ;o$uJz]ukTY\9Κ+%myꏀ]W)0`$lA ~gkJv~v3a!#ﱏ/~)zw:ԅN vܾ̽K۾2O֢½!c,s=g5/ !pPޑ {6{i9k_2kD?b'gͣ\.&e> @: 2> M2sRDgP `sgn^oȞp0G6zYw_YΘMѯ5+e@7^ݰWz乇v:{_7q6fZewGvH ~tH<)%)G4%nQW/1IjSFE~2&$Jȹ_f{N M(=#R^ lxa6O>gO^+4&*ȢpԆxf&FP XXBk)9X݃!NڵR.RVVX=N v;]^{/c)vo$#~s輻wf15fd7#v[`yW"v_5sJxvwY_‡Lx|7ۿX^awh zBxDli[F޶r"+r*6no6"6 >"mRNa灚swgv>cT<H9%2qml=wgxi>ʷ9~ymYۑ; $bfvӣG?eEsn_șܛ {]gj/xYw3%+bߋ dڧrŞ耏({zjjGר[_q V_lwj]6ݏJ}wOQ[w_"sEcT1⥤vK\m,$A mYp>|%gD߱:P]7n/ρin/kOkkpHSH>t.pgGcROY/ %%[!W f{;.EImi8Ō2&1o&;gbd8?;MN |rI 7\4o|^&[zGsr\|XI=6>GRZfFJJ{# }r*. ϏxE7 @քP)=Ys ^¿$_c( % j^yِ5| a";E |,=GΒg;L#IRwP;u{9 %oSg>o>C^^@~Ǒ8័O%\~ dS _Ź12Yq<yq3dK?@:_;`kшy|F3-:"YVM>#wȱ߻;}qx?J:ܽfwӲmP?mRݹ6qK±J[z/V76;*wPJAKxH$,Ifh.=N?em0?<3F*%Ύ'C@zx!߆һ!/ȋgRRԃ135<{J7*[<>Ɯ _p\ )5sn\7X]Y,j6@f2g2tٟa1 8;͸Nd4kH{x$ydey^figzFP!Fڨ4/FQdW1pfΜ8Ԩ&7E!Zme# 8{N:wz9(GŁzx`hd~p4paCp70?oq QixF]#1#G3pRs4n+kg^9 ww}xA{Cc/wc.goϰ9oG.GL1 ,@֕드yPݞx06w<6>kxtU#0r?7)4~?/!"[Ke ފ_ůmu~owkx]#?%=w=zGw| >ig?/:vxkwW`?rnx\Ȑ6D|>9'%QMk X7rLdnڋ&nS%^bӛl_-xUYoŷǼ߅x߃Xź!lb;8˸Q~oO6x7ރ}cM?"gmzŸa_ExTyt*^GO$>x'qx||3iy8g1tȫ-[C!2dZLˊiY1""xތOgy/a_ƯUކ_o76~1%4Os4Os4GOs4GOs4N4wL[?mO[[C_xrgޭOs D;߉aW8ϕo S_ȫoG8OK}}<&h|QMA/B8&Eeç eÑAOMx3~ ? xR֠i_[^ކ_o76~ߋލī #t!#p̃}5d~yOK|G;| `?2d~ ܈Ix Yd| ^oŷhU4|/*ĵi?ŏFDdHWc"C":\rd%2a#S0K<*ְ lb B*Y5dŸꑕP=#S0K<*ְ lb <ŵO _:pJYtS\)~k?ŵX:6-lc'pTߦ6շMmoS}Tߦ6շMmoS}Tߦ6շCwCP};TAtAtAtAtAT};UߩNwST};UߩNwST};Uߩ^2ׄOP723̱2oû8[C~mp?'2 s,b &KTDKTDKTDKTDKTDKTDKTDKTDKTDKTDKTTKUTKUTKUTKUTKUTKUTKUTKUTKUTKUT7 "L1 ,/˼2̻.˼2̻.ݮt+Jwݮt+Jwݮt+Jwݮt+Jwݮt+Jwݮt{TߣG=Q}{TߣG=Q}{Tߣ7TZ4n sP=zdX`_ֱMla;lec.s٘\61lec.s٘\61lec.s٘_____________________RRRRRRRRRRRRRRRRRRRRR+BmӑVd)fce] ƭs 9DaxUaO}S}Tߧ>O}S}Tߧ>O}S}TK9jE&b9X^]WyUuw]]WyUuw]]W{uw]]W{uw]]W{54^Ckhz M54ֻkZֻkZֻ zqtdxWd)fceû^8`X`s#û"L1 ,ӑ] a zItdxWd)fce_ s_xǑ/vÿ8n~w|/ց:Y? )tGn 79S{8ƊyOxVwo|~rG9G <מ|/8x=WEG#w_m[{.KsΞqu4gw {[GS{bh%^o+q=?[*ߊo÷?;.abuyh3/ ˸x~4я8ވǛ?gsy/a_ƯUކ_o7#18WnǗ聁O <<8vہ'||pÃ'/ <3 G18otˎ-^=˞W>{ "FGW<ߏuIOY=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳{V~Y=+g߳3>3/+q[ܿ93Wѿ(pm#u䣎|lp,L NXO'ۿOj>{;gOXX?{07lM,{l9Gn|(2rcAW~oowq=9r?"7`Cx=O^}d܊'>(>s>s82ް>y`|5|)>y>Ϗ +- ?lVQ~ȰBdz} ܉A QQ^=ʫGy(yqQO|#Sn3x`yϋ{»}W8r+[pg>Go|.2~wd>s1?hp{gvշ]oW}{ #oT}{>5]au]z82T?SD |rpnswExQWՁ;gtӝt9yNwӝt9yNwӝp/ ^=#\od3\zëz#o  + ]γyv9. 7d/11pKw n |_x,?a%VKۗX9/r^p^=ӫgzLW<'| ۟Kߵg/ xTq~ x{n2tP?)Yl}(>7 ŧ)fc%p|kX6mU}{U߫^WU}{U߫^WU}{U߫^=ou(>o}P|Y[oWul`[N`|~.0~3a(>L1 ,~ۯculױ:_~ۯculױ:_~ۯculy7ߐ~C y7ߐ~C y7ߐ~C y7ߐ~C y7[㳧)03̱2 ~4n?{ ~`%2>L0 s,b &wNG&b9X^Js׹\u:Wz+Ε^Jqko`%2> L0 s,b &礁ӑ9i`)fceS203̱28[ߠjFJ`%2~#%03̱85c6vk|ZƧ5>iOk|ZiuiZiuiZA{=hzZރVA{=hzZރVA{=hwxfx`+? ^_xwo,Ƕj3gx*`Gȍμ=M=}~ ?=+^+l<|/W"+k|5^KR|-_o ]2܍{0Žؓz'g~ `kX b3*5vTss8 K+7#Q~oOMqތOg9<~0ނ_/WV*~ oï77{;} n*?7N9IxlO8̓OId9G̓O ?vN:>jVgS{NvSgn??4<^;u<|<|ay5cO|Ÿc'8p_#7'88؟>ǎ W ߼a VOp1c pW7ųmOp_n8/;{_a=?+ƇQu{Qoxu7'8;ۏ#?=#c/2> oojGkOgW:zOTa^IUF~?v,>>HƵzZ=Hӟ 8H>?hs1Cd;S$N~Ig3S[O=dbYCd "xD2xd}J'~ŸHH 0CD2D2w>v5> P|"D2p8֊O$7zuS<[|"!P|"D2,{^a=z>HO$dq?|z>H|z>H'=ECVD2_ <H60CD2p75Ț?HދO$j!+/ ?7pvcI''y|8]S!KÃO9px8<'$|`D|Jr8"8Oç3:ßzU^ : eᰪ'ɇea|X&ɇe2pXg*ay{8pEael967P7B={+eᐥsKCBWC.>^U9sO䖠x*n } ۡZ1?jXK w%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%mWv%ZH́!֬5ZXNwVxt\ +?>yN}">%V~'~#p{a<9QoDŽwE^[:Ӹ^uWמ>2NO}֑/o|uEk;_ N`_8;>z-q-S0K<K'ul`[NdG"/܈p??ۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺۺwK8[.e`%2ޥ L0 s,b &x903̱c#S0/o_g/ }xT8[ +*x}d\Q#[pFÊ߅VTVT`XQ#+*ߝ g+*?S0K<WT` &ȸ+*p7F܄x4!5Y6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬ommַY6f}۬o[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-E߶}ۢo[mmѷ-6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6oc6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6o6ovv=|@+'W<Ox9<Ǒ#n؄/ o-2-2-ӑzWy^=ϫ{|zW/^x^__ y#/tHBBB;l',|6mi_4<.en܃)ud9_֛l_?5p^T<.e\2gR^2*\gw)|a_Snwߥ<.e[bo͍\2 ~o›Si ~?_CE<_ &ށ`{/~?n'^o]ߥ iw)B\.9>GW+v;|̫G2ppnBj]2$|rT3.exIT-.ek X720Aw2кdߥ ,xw)}? |cމkZߍb6y\e\KQ~oORnȳw)2!_Dߥ 18W2p'x Nߥ |GߥIa"yD&0|?^Dbx6yx>^+Ux5/%x)_7`.vux^n{4kQfh ۱wg\%\\18ވǛ7,~?_CE<_ f7'~;%pyN}">?v4> g$[OIS{'N /~'>9SۏƫN >^QvJ`?8ongS|ovJ,^ivJ+GSFoގz<&~;%'~;%pXS?aOvJoދO>z2'~;e$5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq).5ťRS\jKMq). _ |nɁwkp/fsepӁ #/j%wھ{/ )d{c^0 ~o›Si ~?_CE< ފ_6:~w;5^{?xu7`y90?(G !܀8|"> OKvl_q>o6|;{x߃Xŕ/d~?Ï'm?8R*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSR*T9)UNrJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjR8)5NqJSjRx#5HG4<>471rcTC#?f|_"Gϊ}xJ|^W۾_Z|߀؍7b)ŦcZx=7,~?_CE<_ f gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=CZz3 gh=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZzֳ,gi=KYZ7L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô04L; Nô&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&49)MNirJS&4y#MiHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#-iHGZ<x#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miHG<6y#miH69)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8)NpJS:t8e9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wlܱsf9wli=OyZz󴞧BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Jc1}>Fc1}>Fc1(S<&kd sf5;jwԸAO' }>AO'I$}>IO'I$}>IO'I$}>IOѧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ3 }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}@_/ }@_/ }@_/ E"}H_/E"}H_/E"}H_/їK%}D_/їK%}D_/їK%}L_/ӗe2}L_/ӗe2}L_/ӗ+ }B_W+ }B_W+ }B_WU*}J_WU*}J_WU}F_k5}F_k5}F_u:}N_u:}N_u:}Aߠo7 }Aߠo7 }Aߠo7=AO=AO=AO=AO=AODo0˜H4HRdu;5|C)ߒDO'ѓI$z=DO'ѓI$z=DO'ѓIdz2=LO'ӓdz2=LO'ӓdz2=LOSTz*=JOSTz*=JOSTz*=FOi4z=FOi4z=FOIpτ?PRduaکSkNZ;vjڥKk.]Zviڥ[knZvkڭ[k=Z{hڣGk^Z{jګWk^}ZiڧOk>}Z [sI|8ݏ4}<&kd^!_M|;z=Cϡs9z=Cϡs9z=Cϡs\z.=Kϥs\z.=Kϥs\z.=Gϣy=Oϧ|z>=Oϧ|z>=O/ z^@/ z^@/ CehEY)cFʺ0_zYe^zYe^:uPAZj:uH!CZi:uHaZk:uXV{Q^E{Q^E{Q^E{Q^E{Q^E{QD/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/K%z ^B/K%z ^B/K%z ^J/KRz)^J/KRz)^J/Ke2z^F/e2z^F/e2z^F/rz9^N/rz9^N/rz^AW+ z^AW+ z^AW+Jz%^IW+Jz%^IW+Jz%^EWѫU*z^EWѫU*z^EWѫUjz5^MWӫjz5^MWӫjz5^M _$ ҏzQz|GyT5Vv |Kf ^Ck5z ^Ck5z ^CkZz-^KkZz-^KkZz-^Gu:z^Gu:z^Guzz=^Ozz=^Ozz=^O7 z@o7 z@o7 zHo7Fz#Ho7Fz#Ho7''''''''''''''''''''''''''''''''''''''''''M&zDo7ћM&zDo7ћM&zD?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?M?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?K?Ko7ӛfz3Lo7ӛfz3Lo7ӛf999999999999999999999yyyyyyyyyyyyyyyyyyyyyEEEEEEEEEEEEEEEEEEEEE%%%%%%%%%%%%%%%%%%%%%eeeeeeeeeeeeeeeeeeeeez Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+~~~~~~~~~~~~~~~~~~~~~Fom6zFom6zFomvz;Novz;Novz;Now;zAw;zAw;z藊a9OR1(_*Y)cF:U|]!ߔoɷw;Nz'Iw;Nz'Iw;NC__$=ԣ,2C=ʣ򘬑N{}|U&_o7[0].zEwѻ].zEwѻ].zMwӻnz7Mwӻnz7MwӻzC{=zC{=zC{^z/K{^z/K{^z/G}>zG}>zG~z?O~z?O~z?O}>@}>@ }>HA }>HA }>HҿQ2G1Y#ke]Wj]պuUUZWi]ӺuM5kZ״i]׺u]uZ׵k]׺uC Z7nhкuSMZ7njԺuS-[ZniҺuKmZnkֺu[m<=%ya+JyT5Vօ955555555uO={ZiӺuO}Zk׺u_Zh=z@111111111Zj=zPCZi=zH#GZk=zXcZk=zD'ZOh=zTSZOj=zL3gZϴi=zLk\k\k\k\k\k\k\k\k\kBkBkBkBkBkBkBkBkBkRkRkRkRkRkRkRkRkRkJkJkJkJkJkJkJkJkJkZkZkZkZkZkZkZkZkZkFkFkFkFkFkFkFkFkFkVkVkVkVkVkVkVkVkVkNkNkNkNkNkNkNkNkNwzGwzGZϵk=z\sZѯ-=5ua+JyT5Vօ~ [QVʣ򘬑.eeeeeeeeeUUUUUUUUU555555555uuuuuuuuuwzW]wzW]wߑJ~Gf؊RduC?eʈ~QyLZ_NzF0V<&kd 3E+E+E+E+E+E+E+E+E+U+U+U+U+U+U+U+U+U+M+M+M+M+M+M+M+M+M+]+]+]+]+]+]+]+]+]+C+C+C+C+C+C+C+C+Ck-Z[hmڢEk Z/h Z/h Z[jmڪUkVZ[222222222>(V<&kd s6mZ۴imڦMk֋Z/j֋Z/j֋Z/iKZ/iKZ/imڮ]kvZ۵kmڡCkZ;vhڡ$eo}M䅹maĶ0w$~50n9ɝManx|h'T_L3{z}XtJ|,ˏ$Qį(So_yWEP>4E8Ҕ'?x7œxRNhg_sN,0˅\L| % SV=^TS6L$~-#HI̩)*5=zԌR?l #HfLy=$'|%z6{F'ߕ_M_6Ef0?̽|؛$RLW$o$܈9=W,c2[~3!c,:ѽx$FוLNIeEģw2[s7);ݤm'n~ȼ. ?ug>,?SftLxOnqjLg6'1ӈ9ӈT|*bN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&dbN&d|6lSmrVY*Ye9,g嬲|ZXrbYN,ˉe9,'IJXrbYN,ˉe9,'IJ\{krY=˵g,מڳ\{krY=˵g,מڳ]i+vٮ4ەflט]ckvٮ15flw0v]Evٮ"UdlW*]Evٮ"UdlW*3P_aįQįqį(S&~3sQfh%O 󧉟s8|mWhXbk0ljτq'򣔯EϤ|=z}J7@i9m!zA_I/?_((ʌEWy<(7oߖZo忓#PbEe,eѩf#BV*Y-$[3h',_CGM|Mv*|#SoʷkS/u%e}_A'jɸ&%o?.B~K+ow;a6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"lD`#؈F6"A/07ca27caVʣ򘬑.;ZwhѺuG;Qy<xy>~&T-)ːJ%Q"*QI`,!̐el%/Ge߷2B/8~:yHjPǵzHG8WGcz9!{j6pIi|#񡱿Z7 r:hƏfm^YƳu9gy5 o s-N+^y+r^Fkn꾈Ëxě0_2^/󰍺mF}[5mWVmgۙmfkWj^ӛ俎Mkox}ڂqzw].Ntδvޅ==꺫~7>y|{>C>>QOī'܏a|{W/zK?V>櫏Ӿ5K!dҟgi(o OO :b0nnC.TPwp#x7Oɷ<śQ<mfG6Zg~fXXZǪ?V^4yif/iSgh8Υ#P+N1 2ЋL:xL0W\缘H$'y^&{՘ o,O> f:?/},WټZQolf/ۜe_ڣ5q>ÏyqzNrjp'i?ųS;epigOw}7Osk& "5P5[Xba=Ÿ0uQZ1wbusCBq{g}qn{$ߞtFC#И?~\?6ׄޅbM=CBf7us>5׷g,,?|Z g[yK-³^ ^|>{n26>N:~Wj^_:o87ſ:Zh.;xٷǙw]yLgs^~tM{xJwX7<&nw|݃z!O?!;K#==c=ySO>c}a³}bzכO^CO_~C,Y;@B[A rv0rx=T&_ >5ާ1OhWb;ccXif)M4s÷r/{rQ[樃:7z_o oݛ}Sޔ[jE[wyG3Qwߑ{ge'='|:묧auY~]gߣ{b=g:U4u,t\tSntэ>;; vx׌PhЌ|CG{S͞fc>v;ezĜ|Lo\o5\ =^|_}+/Kk?O^f Y߈4 3x?P@~ ‹A0،7، VsLJu6ճ ?K:?GpgG9Oq=HgF:3ҙΌQjhF1Z2܎v3|>sٲ'h|2αΎXge4f=͌48pgoqg/t8n֥.]. ^fv_ߺ |3̤%ӹL=̤<ǫ3ޙ;;kMpsDNa2NOd&|bm9"o 4,yYeς,Ms*Sy?U:?ƩgSMmgri|kijNL49tNw=Ìx7Ϥw&fb/h/q,~lZgll{_kv=2le)f6:یeM\6ﹴUk.o`ͳ>--77ioo= < //xx9r`ȁ\w/ -4W ["YD"8Kw.ݹtҝKw.i]Lb3,fi1.6C-,K`-D%ֈ/UkZKZjZKq\RZ}ė2ZWK/r_nhyZnr%W?Oxzxo{ xnTcaW6i\s+?s3[=Ӿmm6=&gmM].o;vݎk;C7s;iINvҰ]< 9]}ì۟ɇvYqv^4a//9}i>G>z9`_{A{oA!!up|9wGG`yQGayQGay?11?7e98aNfO?yO':)qʜ2'sFD峖Z>k]^8D 芄]Y1DW5 Q!]5\5=]#6 |F/8C,Ct]W*m~B~!Ʃ0N7QT-/f5BTT^QyEqqvUEq:Ds+n)zOe|*SNe|S*tTUUaT[7լ%Or# Fus3ίjTq m߇SMj:_Ϛxx?`pAgtA׵\r]Z7}'}{FTum:jQ[>gߡQ}c꘡ߞQ}U84P ml>}VӋ?[[ h\ʬBfk[y~/K0_~6[[69ėvV ە#=^"z> چ)O|JS#U^*R\5PC?0}wx700?7ajwfp#G)}O(ތ2k((?sh^}f3kcQ{cy0`3Vtާ}iOv:JW7t7ηsa2+/Q p0C}GG#QɣLȔ]xx3hqjOTs\O$i,g2ϧȟb>:w,N߲̗oh*TL7 _4|+Gӝ~:^O3x: ^L}a /K\TK̂5W~uyJg-ov9ї9telڳeӚmֲmzs\y|ּ;_,u=ȡ#|ǃm-cE|Z"\s)Whz_K-R>,ygpKl9]+\f*}v7dL5|o׿|]OX:Zz3?<7dzQ/7_ӯfW^M{mff6flf=Bg[Vڶoߜ6緙;ߖvxgwށw<ߒN|wz.vکNv7d.4NzݍnGoh޾}~ӰZ|PAC}agpXp1GxwG=ucr cדq |Ow_t0N:/:Iޜ>2`69iN߼?= g0ʣ7OYg9+>c|'FSy}_?Ey=`pp/ʫQ$k(ǃDyc Ճ(?d*Y?d9d2XYD[[>õ?G=v(F}V2ʫ(g^56YY:kcGC_GCv>5̪|+!|KEBK奒٥JV}dwmjRJRSnVNک3Sy\o o6~RY9jLZ _vT_K딩^7Rjtbl6ק^h'1}vðz:&d?9:z=::5L AG'ފL^p3䦍wA&$O2QV̤G/W?WFEx'70t-'"|"Jg>UNmZT s5N-]h–h#2 ?d yULi)/]\R\r2(ODŽ] S 832O֦%Z2Ҏ?/х))5vT֥/vo&[{piRXc-PchbӸJ:iETűuk&cƒ<+*161L3Y]@RJVu* _r4q|mUK@$`.BZ5^u SIO1M)')tC '` ꦼy4o4xܼɞ2j6c)yK6\وg#X.{ V VX.αKה|o]IS󔀶a%h`-X{xsoٔr *9ؖ&!`̀PV]V EA?χn"HBG4qƅ*:PԔwQ l/c'LNa)be'Aqnϋ&_ ^Y"=S w aP%%E~5] ,\VUovo[Yϋy5Lް~uoWh'c۽kx|FjzNETez 79O&h71Ma`)h~EXǨؑCwXSdvSsŻNy8qq>;o!w1 ca*/,xm|6m%'effX.mJ)ܦ\{K23333333333o)M<Ѭl͌`4͌篕_㸞C%\,,Lpv>sq˜\ 愮DqεN|$Nԝߝ̕N*pVqVuVsVw:9)wG#ݙܙYYϝuٜQ\ν<|B"bR2r }JκnY YߍWM ݺ99ss󵳙3-UU-55ݵ܆6NgKl6ζvYnrusw7p7tGc--ݭܭmmݱNrr9 n;ѝNv{7ܝ^w;o;Sݝwr]in^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[usvfvrfupnvnqntnrtrvq.s.wfs::k:8;78!;NpprwvpF:;;;: Qssssss#ݏ܏O~~~~~~~~~~~s<<,QyIOy7---||,\,,\--\-----------ռЋKԫ{{:^66F{y{xzycͽ--mm^7M𺽉$ozS>ߛ xސ7MvvvNNNNNNNN........nnnnnnnnr.^^^^^^^^>>>>>>>>~~~~~~~MB #I 2Df&Yldv2E&y|d~Y,D&EbdqY,E&ːerdyYDV&5$!) UjduYE4I')IE&Qd]Yl@6$Fdc ٔlFƐdKٚlC%ۑX"x2tdLzȎd'K>O$CdB]ndwٓE&}~dr9D&Capr9E&ǐcqxr9DN&Sitr9E&sy|r\D.&Kerr\E&אkuzrDn&[mvrE&{}~y&Ogs|E&ߐow{D~&_owEuG QNtIg3Yt6:;Isyt>:?].H Et18].IKet9<]HW+ iDcДiFsZUt5:]Iע Aku(.]O7t#1݄nJ7ct %݊nMt,݁vqt<@D:N=/tGShSt!:Lwt7;݃I{}t??=HC0z8=IGc8z<=HO'S4z:=IϢgs^H/K2z9^IWk:z=Ho7[6z;Iw{>z?}>HG1g33;8;?89?9?:?;;I}>C E}B_M}CߥC~B?K~CGBO9e#28g)l$fal6'al [-al $[-͖a˲l"[j,dYRVgYVal &[5XkNVaغl=>ۀmFl)یa-ؖl+5ۆm˶c۳lƱlf$6NMa}Me;6Ȇ0ۅMcl'ۋav ;av$;͎aDzv";Na v&;av!].a v%]ͮaײv#nav'a {=a ${=͞aϲ"{^a &{a!}>a %};a߲#~a'[83ι>\#L|f> gs9\|n> B|a_/K%R|i _/Ǘ+J|e^!x:x _Wk5Z;xwW|m|C>o7Mf| ߜo[6|[ߞ;.>x7'ɼw| |*ߙA>ć.|ߕw{=^|oߗA`~?G#QUc#8~4?Ϗ D~?OL~?B~_/J~_ï F~oN~A?uI?ß Eyv8Wkuw{}?Ogsſow{_owWp' .Jb)f3YĬb61C)syļb>1XyyyJ,<- EĢb1XB,)KeIJb9XA(V+E$bTE&rQUĪb5XC) !Sku(XO/6b#Dl*6s&1bsRl%ۈmv γs5$+v]b/&n1QLEQ$z'TbH ]4M.{bO/q8L.Gq8N/Np>'q8M.gq8O/.:/;/:/bqT\&.W+UjqV\'7MfqU&nw;]nqW'8_;CaxT<&O'SixV<'/KecxU&^o8;:=NW)rxO/>L|._N|/~?MO.:\G;{>| ΀8??????????????_C?c?Sgo~*jZ~~_?___oooo ;C.f4? ~?џO{^S]in^>ή~A!n^ΞaQ1q I)iY9yE%eU5u M-mG]=}C#cS3s K+k[;{G'gW>ξ~7wO/o??#]I"dK!})!GʙrK9sM.sʹr9O/ :ȅr\L..Kʥr\N./W+ʕʲ&CX&2u\r\M.אkʵdCvȦs씥r9J+ד rHn,7Bn)[mr;+w]r/'n9QNeQ${'TrH]4M.{ʽrO/ʃy.Oʧ|N>/_/ʗ|M.ߐoʷ|O/?ʏL~._ʯN~/?ʟMO.ʿQQT1ŕPJ@P#Ljf5UͦfWs9\jn5WͧW BjaZT-WK%RjiZV-W+JjeUSTT ZUVWk5Z:TSuRUjmUjC5Zm6VMfj\mT[6j[^U;.5NWT&ɪGvRjSjY A5.jUvW{=^joWWA`u:TWG#Qhu:VW'Idu:UNWg3Ylu:WW EbuT].WW+UjuV]W7MfuUݦnWw;]nuWݧWCazT=WO'SizV=W/KezU^Wo7[mzWWGcT}>W_/WkV}W?OgU~W?_ H@@~ `d0S0s0K0k0[0{0G0g0W0w0O0o0_0@`PpHhXxDdTtLl\|BbRrP ҠdA*jZA#AgPUvN0*X7X/X? 0lllll 6  ;]`|0!&AOcSL `js0 CpK0-5-=#3+;'7/?8 808(888$848,8<8"828*8:8&868.8>8!818)898%858-8=8#838+8;8'878/8? 0(8$4,<"2*:&6.>!1)9%5-=#3+;'7/?x x0x(x8x$x4x,xx!x1x)x9xE ZDR_NlCθ1]#e$~>xl- u"E'[uzL&"E*.4L4,EZXc{L%(F5JQrk\5\c乡Yօn]$=㇧LޕN# k(F4ioBx۞֜ .B7u?1P~"Eaơ."]bx:$ETu]hD'=zC=ۡ0H뺳Q-tE#I~XHu?5^POg>t,3';C>kfnWJ䚊o ͣ]Sti lrP_kʸ ]ޖ=F=lӞISF{F=톍uNEǵZӱQXc46wKtOi;ݽhў^CM {D(b20 jܔ!mzdd*VgZXI-}#'tt Zt&aaQC=f9` k gWm>'_'t#Ѝ/jv+A~ԀWG]va}h'>ѹѩSt6Fbt.1:]Km;M7tO7|-=LJz)-];g=?a|wPK&a["F޶!ROja]?ԯFn3NXXXXXXXXoXXXXzZUz/6.4Fa50e9`lvtlunt"E.2](д=ePϔˮi53i0?_Nn^`0 aZ$p'dmmmm2 LB&z!^D/d2 LB&z!IѓSrXtBDt6K^DhW4+MN ͬ̊VEH.]"E jPc#G%8 5F1B3ՋLbz1S^T/f3hTTi1bkXc@I+)HFJ4>oS}ަMy6mT>oS}ަMy6M5F1a]6ՇmToT^T?O3}ΦnB#A]Ղ^%`['8xBց zӈ^hH/A.j`]Xl~elkZ*gFcr; (C3?C37 |!|":('|"{%^":* ":+*+*{. .=AE؛t[aF aFػt_0|T{ق` u 0,M@ /B /B /B kZ#?#?#7|#7|c7|c7?c?O?|M@?qfu)褠)OѿA_tot5E20?gh~OzS} 550O o~}؁quo֧;;;;|;|aD"lu)apG1ITMPjRLh׉vh׉vh %Q]v%|%4_;QiM&`Wm\NJܸq@q}U t˲Ш,m;+۵9QX?έUs(Ip$m?Εrs%yI`+'h9$ l_~HC8c4hoH0 V7`} |6}`s`!CvA{ )Hp'm?K~$ us:4.`?&$ش ve]`%Mv_ļ51oM1%E 4 30o1` 1 yiFom)}4Fg :=z*|1 b4{ikڰ~:@:*TCϻwDv v w٥o|7?<=r{I=znBx3LL_C)1}I%5}IM_R3R9O ~j P7 Gu3uýn(33f73 nfp# (75EF"#qH\d$.2EF"#qQ CpWnG FbﱙfQ0k/_东ĘFc#al06B!Fc#8`na)kjbϤNj)‘;k>ۑZ[o]U`ۊl-*}iAo};x^!ua9 a԰jWjWjߚvG )54#HnlZ8b`иv-c5W5#Sub#qm2` X/)q8^K0j kZxNKe1_֓6HCXOkmfmR `܆Ĉb?1O'F#Ĉb?1Dumm2O P P보#M&6dbC&1d\a*F%t@k9Qhe8.l..n..pQ[JY{`X6ڰ=-΅-<[wl{@~\Vz\gkxz9i2?e5O7|b 9lDY pa sLM9&sL$H1 |W:뤅l0d1XMM B\>"\u$AW԰ ᴩåU뷄C {gdhYp a|Ѹv5.e{ML^#)O ^<{`ᅫp`fh@} ѮnY>6 ([swa\~@VNLTj-MSSMiָDZpi3Mt4lj)N*=ZuffƄJ *5&T )/Jnۻt2NCi:cP5311/,a^jf֑#)n4aԇj .Ϭɔ)IJvhX&xKxKxKxKxKxKxKm-ZFmtͧB$Bħ簅!j!jC *G=u'^>9"tb:4.LhNɷ!HWR4UsFغv b%2fVM5/x٦RBʶLtl{G(W`}DK{(1%"%l㲉/y!T"W~蕈Ux^Mcxn=~=%jdӗ5]T C]~ӇS F-h XMnCcUVӟC|#t *W;Lᴬ [{tj <3jQ_Rf#FoɌM XKxC{ YA$vrVfVV=(ggD{U@*iVިuuYXtߊ(q5ujPnn'|x>䖱Eؑ)""6soa.-oh8 g$6Ԃk}n1>ڬѓ[ޮrborىZډ] ṎjDodɽ|͡JOھ$ϮHD B|F*{[oބEVm-Ìo^MfX2ՃS,2 dQ2-Jd6YH(H/a*0Ke=ӓ(lͺ v[ m:zûۼVc Dc1ږ9_d0JtqgJFHIYi@D =Ӭ[oў->Ō:A+Isrf ̛|+C/ju@dyĘ֙Q7{}ZY emdOTȖRH)%R]6J-5-2\Y$ +V]ӭ6AQ"-D:D4%J;Hs(;q|36w񰴩Ӎ9 HQBi;U;f9[]%g0ǞN栵0|غ%lf9!{-Y.MٍunC#520I|1%%elUxk#ү0mAЇU6\[h={Ua) ]k MikeL)?X*3S uC!32C!I3,ۤx14F77toӓ$Gnas 1hx[$´+aҕ6W#zvO(!XyM'+O=# 3F=8X3̪LMw5LZhмwO*vg5&| !Co%2J'l'm\'m$$0/m㪥8ouZXVX$~p7R>flZ7x"5{#mꮦ0?c//7GZczl5/uv)` X-d f3JQ0f|VHlߦfլcLAZC cJm, ?=,Q h@ ei oM aۖgHYI&]Y1636!p:TGW++ {i23enJ-ґvƷД)cS&LMip75M njpSlbF&XhdbQp 6fAQ@ii>|YiC{[}u[GKd$ {AJڲ릵im68?v"xTZU7N[faK{ Yc?,3Q+~eF6v°JUpD'>6Mi&Goöi:ؤ+yMgŧQiӇ"i#4/\:g6Ԏxb!PTSuteV^z~9TC-\A lDav`;q/**=G./\+x*x*x*|PL`U% nUek{Io Z8*K:*K/iaNT"sĶ(J{{D&Si*m yLوZEa6=U)j:MlV T̽nxyuM6ûjZ5Ch)6L͆q˅#şoٰ.hxzdhO"{"$`4ld@ ;'<͝_T$V1rSb^PGq[Bߢ!dn}$6R_Dž6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-bold-italic.woff20000644000175000017500000057143414502137725027263 0ustar carstencarstenwOF2  f`$f  @C6$< @ go 9[axt04=<& 4u"ʋbeMKKjuXA;i۶SW@DX9e1D j~)}>02V:oBH|6& U%E(&!aQ≜$KD2Jςl&-R[\R˨<*r+-TEG̋P ـ"xkɚ:ޏE(w8iRPR#I *}m::67pA;B];.RKZk{vϣzRo 0Pp{ MWi5ziqܘ?<$ɡ#0?uýkG( ,`\4EiXÐ8^^k:6"& &(::)M|\;fvFz ѬQ:9 YϢy`~D rBjAm2q%pʚKσ [|ʬD)VQ"F.,_OQVAȩR&.o\~0+IvhR+a. ^cP[&nefeMidl6 ;:5F |8^rU~v1 )Fd2Z(FJ7K3waI.RJ#0ۨc~ E)+RH8S üR̠ ylMbEatUA(v)5-,mYC@@5(E.tq7*/O⇳xv\CE F#7ʠrVl;&mpQ*uzǘ \8G>UѱE#E5kQk;5:+w]kd+1rQgJ0/Jx^殡MPfK' )t2PPC.+qOIٔ X!5E_e2$h=-Z|[ԺB  hTpzp5āXDi:S8.$:l0V %E>W> KyT 5HʘwSx͓6p]4XK`4t1UK_L/6T.1L4~# H8twv W+YLd_n2w?Ikh=4jDxor v`jF]jW_ߩ rzǼԾţ\?,s:ORA%|搢"AJn|p%Svՠ7L^.m@׬Q^nŊzl6ڑZ))Y[jDs-oaG:ojknʣZSo U*,1>'v@mȶS^Z蒏V*n)|V|U8ՁRwecdp3iTgE$' /Q}O0X"P^"sM\j*a ~jT_lůJjt.b㽨LzcX ++"F:{gKi'm"ZJHQJTԼ[ jv )C4ײG|zԛȼ-4%>l-=nլVv@΂P _uRWȧ=*-]WI~RQ6OBWʃO\qKϳu:T:p'e&~Ji('b;gќ(s4kU/`Mɼd5|ECpYtӮɣcz;| 07_y-qK#ǼF$&TWoVu),GΠ6|6qH j[W*Yxd~&.xX@:Z Ϋ4"svQFWC^kͤX6-wz,/:8&ʮ:ﮚ&xPy6mm7X_x! j”›<\|Gp?>} UP~ISz҇. @U UMOÇ~O?>b TPWK6GAA" Ua(Bd2 ĄpcyY\%܅>*1*!W?9::ڟYC?=gJoXyu A^_;g'PO'WlVAgd|JH" )o`7.tn7Vpdvu(:p[0sռL&$+R|1x<3d:(,E0t-5^P`^3=eWpuGi-'̾sk+s?h0E|;v*3^*WyGt~. ^Nl\2C2a>;Y;O?yi ^ ?S~m8UR>g:?)J(CaJ_4!n=&f|hw&P0䯓wՙjQg $U)_NoO)[?X^zW.M,/o9'vJ>E~7V+S[?R'H!??A)OKrx\޷­`>rң/x@<GScXDg? WeV YdOqp+^e=N/,, ~ 7(uFkSTmp:a4F/7A +6@.U&"XJV.+F!^m/)o̹ o?SOE3KVa Țm$P@C9W$hK)"R.QabXb>~Ʒ_wp I XC?N.k X(!؟NL>[2Ry^[)?]q<=/*^+X;iv7Ɇ]BɏY IPs|J*!r"֣[TR+zZOLD']ʂ?qQ7*߸Pϡh`1?/ $і+" N )i&](P;\NdcB$$([2_aW}خsV_Q/Kth [-Q$$cLk=Ldޞ}q !X*$4ĩ6B0+mIIq1-*&6hR<.T%g&:īUyfP23qV=d7qWn _cbcnl~{kB$ZAQ.D{8c#Q~T AVπx wμyZbL**,0.CD95jv{_BKB8AP( uG>udu>7_(o4Z2Z2?EQtEQ(.j`]h CY4!9BEZU1.r%tHDH+Rz^yBOx"x+O!Bp,\8qݧKe/;Ο˲_okXV *%TE?UJ-M=P AL 9 /4(Az_+쬈[dXCc({FF45-? vME4EQ4q~m3EQ^sg%abaMgW1\b$MɊVLa¶ TuhKGi)oL4FN57UEWw l(71l !>F8~QT.i%VXNܒɴ=_j9\rcד3Z F^]ߙ1Dclrz)IaiOe Lk3)at t!tBjoI őnIu6Ʋ`^D0؈0,@B}#~ŨWZ 3D&ĻJ阇tkmeUVA#ä0]<=s8Zg.~Ηyys8Wsxxs97K=:b+&,p#z$0r -UkAH:$,"aˆAA0h0_Lz/ Lv>- ogŔ %8`_# 'vQPҸts(i'IۅM 8힚^ (+0bEQESEQEQEQFh4FQwLLOVf`I,Q zvRO=a?)*"gKZ83&wVcH!0SW':9dR}_PHS.}rR -  K3jc+ p a~N{ 0]k8v  kID\7Uw}DRb``圳6cQ͵\?J0!,xkK򮦙hͿnvcFE~ lkY^r w|nQq5{BLS 6-#i =.M}k ܣhh/|!k !IWm,%]* Pv, ,pسv [k`abk[ĵgO ~\KL2b" IBQPMCajeHt {x06/qjSJ)d<}NTB BխD<ѐ iN!;,€j?~x%J!o̷pV2C :2JZbR4m2Ss߹^ټÎ6J#m~#ż`e/y}FԴ>Mv颽ъ\fa +\n( s^1bXC'szcg+̻aBZ@њh)WvB8x&%A*Vh%DHʗIz5_ ~wzcj4. NxAh l녍1YE3Ӹے>?Xb3>[t=~fj<ϻ끩Y^& >+?@,L޲MHk~L#43Eۧn;ϐFqdk]=kLpM_g>g=+ۥ 0 !!%uu'<\f {xrgXJ_&}2ϽmxxXo?^y]/L&/MͼC  Kb"$> >#>گ3YhH۝ ݊=#rAG?{PTae}"@XQͪ} iFtXqW=Y%*" Oz[rE&a_]SeEQmQ=}Gn58En%GZf&vmQN {< yRDx!aA؜(Ĝ5VC$Jt# YPf6R.=v~ H ڀ"WZ!"E9^v4_2c12'>2޳ J=sߜAd&8˶ØPf/cm%-y+K  t>m:ꟴ1kW:ȉ5WvaY˖ϒV٪Ki9:h }mAI%zB[W1.vW{ HJ)JIJ) dZS*t;YO׳OM&mb=VM{{|!v;͡']_]I]S ÒCB^꩸h£PyގSn$10\+ Y' $9o}PpyIvĊPWW6&PUU kRI(O+RujVwy`YKƲOtS<~W3YOw" YrT')* _ \ӟӵ1jAQ*(Gh7=ՊUJKU?+;n(̇[g,obLZ=&||c I\6!plzTi2ҏ W4Q \^:D}3WY&|mhؼq~bhôlqxxS{!UǗE9$ 5FhQ>'j *ltgOiuXieHt&|.)T(fs0f[3LՖ:bЪ+xX,y_i(\G!f%UY.*7y>4aZzz4! H:|pؗ*\`1&aB0k[!]b2)~0\B l̥AdsoPZ-UAjǟ3_kA@D0s}SY1xXN@"-C-jqW (`idm}NQ1v|@ރf}EXcOo沺O3'] d#XW*.9x;Gz"0cL0!0tg?[60UCWyt+霽"XiAEv˗|܅D':_ʿs/?SOxdHt˂~ZB+K8"hq ~1OxnCV/=!KyU0GWYKX!: 0oz>h _YW}׏dz~(?N yߟ0#s}Cq"+{T5&@`-יy^o{yG<4=>||DD};O_p.о䏗0g>T!ܶfw.J` NIJi^C#VVmfØ*M>?#.82.fuY&aKW=[5+W#@ZTUJ&v8|XQ1Zn>{_R'@=lAG(Ф<~@yT}r@kdRv&GYdZ~f|2"n Lճz((/>LyFv܏}z#'O^͓ɏbGxWUfX.vΔJPTM柂c gёzvpq36@F8Wh`4-V@U 5-q!`߄J%QR `ݿϼm=뽥}@}Cȩfny{οŞh)0{[AVN$ 2HY0[Rtޮ/I,0,εttw5Ɲ\]'2)YDO1ei''<R~ǝ 8K7;_)/zN*x_iJm8)y yT)c愤x\LC ^bD3Xj?-t[D[["g~MqTLDfrFh[ll!jXD%%d6%y֓^LO{ 4`tfw~U7~cmg#ʅL X+d|KC$b56]CP7u' q;K5TIGe!Wr$/b?!L~{V6\_n I R2ּz"neMrym?|+?:7s103b^HfX.`²jYfcOgy<2_*?ݟ~ɳoR+i-nV&l+dPmS 8Vy&xmచ7Q( q1fp" >@A8!::?X`PaĉH^%ޱw5{?C̅;FrF:/{#o/Yf ʸbphxAdey_-ѬTM7,ve4Y6=haYQ5="o? fX(ɊIaBM _p @$Si bs-,)B0$E3,'HjaZeQ/Sضe8ArD2=Lj&{-ʑ !!,̬'OFQM0 HL&/ʇ)";Y"$ fNB3FE.%^5WHynkqт*=y׭=MfG!j5sPKӒsNܼ|Ĝq,Jzc;Yr>4eԒ$ʱCL(B*@&q!iَHh*UjV7E,d Fg@LZ:e"A1 i=uzAlnt_dsGP ]=fgy֢Qi[߽ H"(H_p;̆n2[)b'#wYCFQ50-qf8AzuֈCuyôlOѧ!Q' H~ &0< N&jj0e3.DPN%YQ50yiĮ# e|JTg `cPS!$G{eZ 18r[&!k=$mRӧ/ OQ8Tŗ(O,夵Js"*BXSіMnti)gF\]bܧnmⲗ[XydTE;/Yb X Glٳm`U1)vhԶhpk ں uTΔ-щ@T59 &nyi 1eXU RnsOy a]< o41F~ޕ{dedg&XJ֙ DhYB:c:k}[b & " W/{CrGwBo~ΐYW>񈺧7E#K@Xͅ0ȭ |Nl\yZy0v3])))ꁕIIsw`)ed&섒 GB G-k2[-{qN)LE}?}74 `}63; g]-X0)j 30x:'^z9ƕt.zRДX/5~vɨvO,uV~~\w9ZUTM7L aBR h „2.2k nm9Lxq`:nҊH@d||"c1 )a֟BmyAQ6R D1 )a%R.29PEb B0b8AR4r@EtaBMf\H'&j$R\L'*QU `dN3ćE_@Ű5OV)B!`̅OxL8qLI'-!닅4LJ1A7Ojҕz4nE0nUȍ%k`|'#?L> 9A[p&-&RbtxjΨtHk5WǻG'/\2YݗH ZO],(Ʒ%R 70dE¼+ṟWijZs,'۴%TԒ]Ҽy ԋmtWH){2c'$ sdbq{<{n,p0jY>ǡqWrf\iZ%ʣA PD(Y:$Im𦆛V0] 브cY,u2jNdl=Ju{mg능ȥ\{yDBXrn>[(>`P>#4MT% e,tXetHt"[.'wg i/iziH*80YPA)װ;DZ;R0 ګpb~JɘFt}b{kr#ҸA4NgBq13 ]~LәGLQ2zTq\_f\( 5 RI" mS p(Rf,Yػ_L(10>>ȳs^44oM l];WU;ŀ]n;)ߝ=`0+9+[>ޣb )a9^n}$.N e R7Saq hbx009FM4]?(N0fxĩ7\}ާ$ ,ϗ$ xX] S59>D1S$rt!md$at㌳1 s t'|ܬYڶm۶0JilM6bma]>wfigߜ.W{tF'TNͰQU zf냺1ЭuRVCv2M@ 2y.x7\^<@ @ wO40Db B0b8AR4rR2XwgPA[VN^I\ml/JX<԰fyu ~yd8FV牍6{c ^k7l.l9ţ\S4WuTo0H$IE?uaBv\k4D$%5}91L|| 0( ZM2鞟%x<th8Xfg&J;ܾee7~0&a e0w.tW耾JF30tB 'HfX(ɊiG(ιs۠=uCN*]C;%v:?u(ؔD|]R᭡E)he!<!*0ĔXI(Qj5HjqԅN=41hi֤`mm*:ji:8]C:Ʌ^'?0@ 0$)Lw?" d8h1 %*GfҬi9aXJElpR_ݲ@D ) dJΌ5AaBXc /Gh׉.sa洜Yˆ &̾aX "xّ@(|ztw ZdB㾴0EjՖ1/U.$|l&CՊO}׮}])EyNvk/E5~)EpD0">d@qvo zlTs|Z+qDٖǚ3:<ւ(_ƊM:3XըQnmٝ)іQcOCCHF"""##UƼ;W 2 ֨:Ěu#CϠd1gK|B<#&FGXO&AG-K h$ [AmJ /f2G:7Ȇ*& ):i8vR,0Ǩs?n}^kTmTF!/ߢob 42O#/ !20/bdOW-c>r fV4g`ɠ wKFQv፛77 ]͑VlHzb|կY5=L^hNw ~;ba;ݶ':Xzf[>ّm]Ѷwqay"J~x~MZ$X9vogpMO5y8C(Iŭ+!1(A'()HTh Z:m[Zz̎9nXyY]yqX(]3 A3~w\frUkӻȀOŖE׭qV/IF 1IJ8TiDdl9,]4ܯ[yJ 0" Qd$<vg3|";8h?/zžgګ:w5auTe4)HdXKZu צ;vُwu.lݘz ?n5'H% 71F˥qBHL28 V@ZӴ $?S$n yziB;JwӃT:r,FGLYpe']=I3`Rtcm'h$J||~GZxI{c$XinFl.#S=OyKvKF & Y%4~^IrUBT*U(gGG؅pr "%00-dja*P lBgX2G- F\Py ^OGz^>Q)#P6JNƪjԼhYBq{R5vS уY6B?7VIL t߀*8$~Z tq[ \݄za]1SZM[;H7'8))ܝ @%S8 I耸pם 3zKF, òʅ`"Hᖯ.Fb 43 Qײ~pdz IUSRPT* SwE*n!\أ +شaa|PLĺfpɻμۭMhm>'wȔ#/ (3? O~")\-v~՜y9)i^󔀰pfPXawO{Ý`+W< \O*hT~̓A$JwPl$nwQ(>,PӀkőS?֧qXiGh.DiJ$9*%=%TDQaJ[ӊ+ozT*9LY屖ND|0!,멪`7_== )a9^n}!Zm[7㾹LBpApQu ?/SMw͘ 9376gvc;H}h #eCPdbI8#.9X'$p= ˈeH/앆d,Wgbc1s{;حħhSXTynq{js/^H+@#"S 9 wOVx$i8fț_:ǹ޸JƞoUW(f|o^Y KM2w8g!5WD+< $8H$IFl0w$Mw[ܑ!sxZ/+jc5ʈ +R\f:K r $}F5:NerQ Έt19-T.O$c%pG ( T)RމRJ)** }!Dg!ab/J<$I!I0$I$IT(Hp@x+A~Cf'鬭x!@HQ*έȯ{֪^\Ɔ<6R{QEFTƌuV OuF!Xfn!{hȟ}YS1Jo_  `$2zL3bwe_[9?¯e({_F7\J #\aO>\qKk35W~G5SJ*bZr (i^ u9@kB*(_]?p|*~O{/~gK ?*tʰ%FK<ڸc%|(!xy~oW}DR럟?7%/%[?VwYΔWKgCJK{:bau>wIk0yy{'w?Ѧ=12/Qٍ6xԅϗXgZA&s=to16oa`>EͰ4PհTw| un?}}se*py `H qkmv{wm߇9{JX(:tFuJU!a"1Ȭ70?68?!4|{&O;s( Qg[J =jo`ou rxʧ#Y-1 'rXI [/Cʿ}Srol?eMj^iYW50n%DCSa=SvjCSO8u tqJ9C 1#stX\ [f ffn%y J9ʹ\1j볽r7A8yKQZiOe?+Q}B0m6h컗Jbvxmq=|/(V]X%~4@FP 'ӷzd" jZ+28:3i1[=SH0 )ݕfXnzVIVF] YnzuރGOynūީ(J]6jU^cȄJx?"o9tq 0a9NͰ/f_fU ӲE8<{ͻvss`~9py|hW .JZ!Y „r Jja2q~2VZTN>nj ju`yFcշj??_+!e#Gx=]̴E #($E3, $+.3oxp (Ɋiٗ۷|h.7!1}Yc_X[L('PX0$).I@;ډuk/]a:h\`ء{SևFW@&'xWn37A&пg9_W_4F nn yv2gp؏Kݗ̆rxU.w߯S„>b _H0$S:*`vb.=}{8dF8\QIuPtMjӎbvB"nH괭-z CaX}vrPoa9+}SP}.T5Z:!ݕɲ5 BᲖWH{D>C9)R3s|T RvXds&R%iGVRk/**`'&R!bs<@K[GW]g7˪t+\*g8AF(ɊiNC`ThvB3Eok!&D]K a%D;EDdZQN{پtg }zAܿenuNtaǓnl; 4 }I9ߥT_^8oiKo~_GQnM_(A?)ςo֥\.^/sŏt~믑>'uHoTQgyRwLbf*_(\ͷFL+*r *bNMj#!*•1A%YQ5ݐirؐÇ?ӊe"wdPh~SiE+ɶzsgCvhpt9#r%cx=yd3wi2j9.dhF[(;Ȝe_*!G he10 fcQ!)[|T9j)ףVI,ؚ^%N#w&!PaD)f3.3׸9uEl'w=H|sDefw3 A%2 !TekTTJU)<4r,կJI4w&9]HrWn7ڤkU7zf#H蝎4CL`v2W2" "z 4jGPu r5H51Zm*9xBx\.RmVO)Khs&GVRk:T@n,)FvJ0*P`\H% @EtôB~\et?FP 'HfX(ɊIK&Դx\diX/?9aJ2plvWax^h Y09h֭P]QsΨ)i9Ci3`AYi@ ec'HfXD3jaZ8Nj{ū7>|=ƁyTppy|hƕC2BRkڢK@F.ih_UIьh2[6@*jZ6B:DPDIVTM7LfMٌ0F4K2"+SE 5&B0kkNA)%9AR4r %YQ50-{~xxx1* -xAtSr8b %I IIːyvk;k9vlv3<6a7 lb @&OVιbO^ E0ǿn3zȯT߻FtXYK7 x J3 &-m]weMpbVwͺ lqKXfRcARx^ A$g7. v:QU$*Ы 5qeG'c&f5ƜA2plvWaQ9h֭Zx/^POT_? 3h !8e{D+{}jǹ=<Sd|rw/ „p'HfXD3e;Njxū7>|=ف%9kpy| ".ܐ[LP.=?B02){ &jj0e3.KY@ xAdEtd֔!ceB3 ʫS(բPTDxl@k\8Ar>o'.U BPEն NͰ/ܪfxpq$E3, "QU Ӳ_8c'^zç-l ߑ8kS[[+?5,rHLPM`RQ,)̃:k>#ɱ&䒏')DHUj?ס/ڭ[&wYcPOZj)C)+RmCB'#WՍ؝};_FE$E2Y^QQEW `#ʺ]Vڪ{dܚ^K ciQ]<i}D?h1́?vXu%1M֔shfn-TZR+QU5uMB}oGj7qCN.ïnPUib:^|:pfQ֋ J0(JB$(rXjY ھrG]QFӤDNnus+I0l-жT`nFrAyMRRJ(<5MGHiZ4UBT+V-Da*.zC'fE!$BB2atxRvJp Ћ12d(T1Ylhi-(8]n "(+ ISͰDrI ;?DIVTMFt 5{PB^1@MZQ+&94jfq\%2_Q,6 P^q!\T5 ;~(B0M&s9/<Kg&U]\ȾqGqr d1ƾf##+NRT~DU #($E3, $+.0-x}9AR4r %YQ50-{@R4YH>xAtSrr_*;8<vIk!7Mpu/cX/ "4` cr9]CwM3cDaA"U%;.d f26Ήq*B\y93v9䚧ppXP}h}zssSv/OCo|y\fvo(z~^9%.-E j^=w]Y12,Xx *hJmpw( #!.Přa]纁s˦JIڰn]lM;ukOƟb"@"X'% $MU]'#߆ձ, QshDSڸ^ACcg  'HfXDIVltGNTS4S+n Q`!Ļ1]۞1ÆJ;6#;|}0l7NͰQUD*n Li%+S-y6I4r J2!67.%(URe1 wQcR+HbtO:`S8.D&,g (Ɋiَ"Ox݇O;{|)9:f9\_ ' J1Mg B0b8AR4r JrZaZ.+CI4a9^"\2;@b dXm.nn{uECwlX+ƀ#z#dc%wvqtl0=R/'Sfӏ?3W?pjۚpal `$2zL3b}'vf?үBy>14zH̰FDE MX]uʓZ8.d1Jhilۺ *cY=N0g-QX/ =y'|V4?2[cBR0 Lv\ϧ]o!CǭhXmZH6E3,ˊyeǣ9%㻃M)ffH=xm>L7i I>3?)>y r7s & ²jh Kُy HPișծ\ە#8̓S;q=`p JjaZv@`$hX IhxAde%Bmn%(URLM]f ɯ/kq_bMAR4DIVTM7Lv\ 7UYa?fs{,'rCs{+E7rPϘ'W@::o%y]v>ޝP/,Io$AЇ#h[A)9PCXkiNh`\rWv,.IeAx"pvjD$~%"Bj_385~X:HtaYnON?O%5:$vu7Rܴ^[a Jz}+^ |o)k ssoƝj(C"͝1t}<:6msoַ7~?MPgpD!\(I2J3 &k֊@ aJr zPu|N,"tu]`n[砣쯽)PRR{I,YoUܚ#+ltΥ w,XFꉶ&ƖDCfԗ $??لxn/TB!{| NiֆtljXm@텔S4rE"²jz  fX(ɊiN;ވw|_1:h2[0b8AR6a9^%YZ4S3kO$ٶm%UTRUUUUU YDUlIQH@ *]*},B*+E*jK@Fp܈ KRV7ȅςd9d;o E: APi@B̰л(+HVN "Z$GZ4D&K̋ 4W>a>͇ \C+.B#t:&DH?.q:hsw*nw"xW=!_W]u MͽR{-Ͱ\,^Gx4 fX(ɊiNxn-vC=c1!+\IhxAd%khOR5J*EUHM]<"Jc@Lh5gAM )a9AU ӲC$E3,HdEtôlCq;./'ɕ*F[h`ph`4-VU 5-q!f „r(Ɋ,-MLPUr@cccc҅lNcgAbx@3΅\P釩 3E#iq^k<&_}Gy\ꅇrl-B6It?&D"H$ɹ n 9X{VGb>!BF$+{`)HPƅT"L(B*Ӳe50K}vN'B(9 Z-:$E3l jORt:N圖eYeYeYeY$In> 0 08o9j$=ܦ*jK :!Aٓ_[Xm۶ @Wb䮚lR*o,H$Iv:}{';%+4ݙJ5i)L %ߚk@fnr*v= fX(ɊiNd_q-4I@:% %IW=YBXU8Ṅ$d$ byXkR@Fh'HN% %xH"!*1c#9qŴ樨n„2.Rt@ e\He>$cm<$I$ɲ,ɲ[XLy\Wdn H+M<̶ap JjaZv.!f+v:XL(LA($eQ@H-!2B*miَ݃laUUUUUUUUPU+q?k nwT0CDR\,)5Fg #hiZ Fs~+KUޗL9*oIpK̃1H"͈_uɣJ5eNtی=ej)irDm ZLg, Èу_rZ4k,[1}{$I$Ic1Ƙ9ΖpoWO1n?WCt Thh{1d7vY$?틾վpW:׾H}D,Rh&ݴkiiQ\gF>jKi*$\\m-8x&~ee'NͰ8!{G@f 9E5af.$I$I$x/vH8J%I$I$IXH' $jkw'Gw*%-lMmZ!dnKlIX^rKTGJ3zet %It2}PlWIu)ϯԅu*p}MiR^x&W*CMך>) J?KH,Ð}>=~ґPz^Lmw\_'da Ϗ&Nfqw@ۧzZzGH=c$HdP}`=q4瑧xb7cy@y$$E%R?U)H]Z 7CAFP}TD楝,$@:)淶qphQRZR`#鮹Ad+3\rD$^6$EyLu| Y0; ӵn¤u ׀aBR ɴl/鐠NC[RU x2J3 &-m]Crs s+j6$E3l jfmc'?dc 5a9*ʜupʸʴw!6. ̀Qѧq?D`H,@FP 'HfXNn Liٌ dQ&DIVTM7Lf9n!*wT ɹ0f" g B@g GsYC)0 fn0`+oi瓩M??$r|J.>BdEtPi"lEkIKCt~d+p}ոݡW p=y7Bn[__Z׆ A1 )a%Һԑg[(i29qqu=# @T}Ebܵ%EY2np ~ݮ"v>#nVb8AR4r<DIVT @„͸Ω0?aB9AlZja2]PN/k@ýj;Ǫ5$@BA:HƛO 2yR~Wo]![(7VB]12F:z_w;JEwtdZvޫ~ $7sS5`ލ-A=8s9s,>眿%P$+^0T%jtB0e1;]8M1 vӮʳ9qF'B,Í ?G۹4 [_K$u[B*|ㅤBpʼ.]kpQ 8jbc]~- te"\L.%-#+'_];piGY`mQ1,./0\o/*$KnWMCUӔ)~Zw~ lݠN6;V~?}ƋtJ4|*EAs``@` ΃P3\C]!ya:ă-{nN[]nU7įX,/VTM7L aBR)m „2.2BBK BPxӸGg4;>uC>m dʩDDDDD{\ܙgm#RiMv\+uYJEl@"ʢ-BeZ؆2 3'I|ߪ9ߐD7'WvxZGu%}ԋh+N%R[mBY>M1砄jyÌ(P/iEZKsw0@e<*d( BP P qHŹq"HfX(Ɋiَ/T<"!Nh/#t3aw?["sP@Wd 565u+?Ʈoj1䒤xe=#7< &*VXihevB)5(BcBj憇3R()ѸЌl> j PVNyvwNMv~l*2y>Z}kh)ekj 0ɚ<չB[RIMPBݼE覡z:gbM;@hpz()1Y9CrlF}SyEo5dsc ?"cJ&ey9ɓL`&]vrTBēVsG4e3vNQ@}ş\ p2e"[Cl>XظWYoX%$`҃E%gj6{Lh6dM!v,)H@2\l`w&j}XhZ"p@`C!X8z^%@Xa# nt8B/z{~F{y 9lg2(A/h|U(;(]rz B;2!+ΌG`=P`K[BIIr.h'ӡYDX6R`-alHǎzw0}؎Rߗ˙P05WA~Ԥhuh^R=k7۳uex-Y;dfٱƜĎ=ƘsH24l?3PD!*Z>4CB pxXS+l;DJN@-&yvz)CMTxwϳ1nKC]m&j?:Qy2(TQ[RlyvK r'7sƃu@qo\E_axafXD;%WQ!P@ez% *jCNm(xU. ju}{1ʚ..^ZǷ~O tn͢ \BiY|MznS$pv`N\1?v&)„2."!A1 )a9^%YqU-ݓ Ӳ2 (Ɋi9*hxAtSri;6./LP.@ Iьh2[6W7w?WQi"m1ΐP]tFlu1s߁  #($Um`4-V~1ߨ0mjk/vi_}H7cCY]4 >HQځp*L Q[OPæ5r(-i+*fR+$7\pݗ= !DslԠ4!:f SLX 4 KJhǠLfਊcRx#r;kƂ'TCoD:wNC938˲QcJ׀d";ކJS xI /RRs'#2r۬r?nc踵jmG9cg:劈N۶kK.Kt=5O7#jq "/'"vJr'm1q_20f17[2Y",%2#FHF@uhþHƨc^^1LQ^Rt2͕#ŋUj `5'*" cMѫ/ԁv{! ۹2;CNL9iF/c/׎.犘ru{_կ Xא▔0+SL7P}|P:9P(v b )TШTà:4xhhhhctNH99bag2 {7@uqht}0}"KvT4ژq"hSEAX?7¦R@O/5}F̡eD~D=d`xTCoD:wN<`D &vĘ"Rs_I(3Fe?@^#}  d%&X謹~{fMB{A7 <{tnoWS6ftcÒnMO>87%q||=\dcnLJT)R&TrYM3C"AR^3Jo5ϻe807 M3ئpڲ:WzzAkq b3l>3n$!2R%|naP] %/huhE3}&-nꗗr9[1H_$D-gf62^Fu< .)u3rV@~IH5d=C)tlߎƻlq.W/|CV:::z46Zs=ۈPW[nR`C`\<3`oKp0'[BO !*sDgO'>GHȕ"+IƏ!:)=֕ & A`\d޵zLV]O  ŧWDP+"SaNxYi\ 8rKIgba+Jg0q_5ڿGÅh&3緬42ԟ?96ʿ7?  8+?kѤp=ױ{ejϯvCŠlXx й`oE(tC|d`(8n2/_6g1pQ 2ʬ.S3^_\ YM5 _ 5@r{PDXc= wp4ֲWSR22 s {ȼB9j1!:Qaju̠3,2{XvσXrG>l20Md}[߾`RMH YdݛzKy2>&I;LbMYs.gA;'\%0H/,ewtɸσ.t1Is: -Pθ;^rX7GDP!%22 cSX(@mLѧIՙyIS.=tkOe!ktƂ59-զeg938VbPݐ[}IͳczleR (1}%򇃪 P_&ED5ꋌJpsWUNvJWjI`8~6SWdt%p+Rdi5yٶh͸1lw/m)O@w~py8{xVD(A| 0/"R27dLlMR$@[ Ls9hVB: *$`l]CG !"tJsToda!' Ȧ>Q{D7'z|1{/P_ ;PHNꔽsi,G/g#iu#i / F8Jiv09.Gi.3:QIdR̡PPA+*FCub… }o 0E*Qޑ,`PAnoS>eTI qA骂j eޠRa)Q\Ujko-.OS)JcU ,UtPLjь=Hv.Ku{Lk>oW` sVuTbEljwXjaП+B;o|ѥ,rƙ_[jɦ7)7`WL|,Yjm\ âQ+_%x)_4/m%` էa߃T| >~ǐXXXzr+-F !Co Bi HS٬ZS3aQM# 1u9Ǒn zi?hC.f.˕,Tѧ3xI*'~!N&5cA5@3V+^.sy;3*67#bdY9o97GH;l;_f—e eJN?,5 0y]L ANq*n )R0iDTF(cEBd-Lr 0,e?@HH@&u!C J 诃~s?Xdy`2z@rlmDLh`e V"gs 5Al}=z|yAq HTT9Mu[sJBRR4l%+I9鱠aINWϒ t ~ TFHΐMhs1<@.B5GY6))ҁθ 7b9iQcmj,i;nv|mD6>ze-AN`"Ik+I/7)JnQ*"G98f|[VзCYLUaQOQ$XMF1 "NV^tUb{J *Đ3ڢt?N(,t\Qy0dY-qܕ|s%$+&=d%>m/!W^?-$p*p"mo31 $M6c1(=܃&+؉0>,HȨ(qxukJ"桡^չ+t8m":$RJ퉘_H?yÄvHB&ʚYX9*$gȦ+\?֬ 7HGo! A"$BUw cd&t>.4i L&1 S>lr)偉 )y9wK\]=Fb^FD}73м~> Iѣak­pk3ӣ!y=:8jc5Y7cgoøS=g]XG9'./JerJѶW #d Hf FbPQ5@PӲ Y „r(Ɋچnr\$R\|Zن@F&dBp%l6x uV-Xk/^cG[C{l%/ԇZk;9ItG><\UFL%0_QQy&Ovy '?`~Ҵ'dҿ/1KYJVȯ}D?fE+9ٳ_W~xBݦVnfQm~`Sϔ:xm[ZUV"70WGJj~A[^ǓQTCH o.4_ VR&$=fdzN[ʔˆ"-2bĒ!PPh e7~&M=Bhp!²jo}YʴS47? ់|#dd.P\/zH>WiχIā<])]9KxVLsg}wAsL%הDL̒hcc*#0<> %GDDDDDDDh1LrSX++-+e4,X& T1YlT ut x`"0:XgYh,뜵Xt4tF9tuS`Th0o1l]l}Уca;ǥw*ȱF{~˕Z2< ͥ{PzGzuKqs&q8n+bʀ e;oi6390t>I!%I IBU 5-q!)fVjV@FNs74Sgd9:ּ!Ϗ2w{Rs ݭvGsgu) ΃oԻϤ9τ2+jheV+&#CIlft,x!$Iy20yЄ@ҲCpAく=t|KZ4P`*tCF!x%s 3iJRFΥ3<>Un A*ľ #; Ib#ĩ#gm{-y# cI`ЀSP~dh XĻ'6圈>qitn>_?Z OW L(B*Ӳ=HDkBӏOrzD*0b8AR4r<DIVTM0U>yw;Õ/`h1q I)iY9LVX;=*~Q2 CƄMͰHdEtôlx_drIZ7J, Nmo;]Ӧ_JR^Q2kr ˕R.u=$Iܨʘ¨^v}Da#+zC/K,sĺOzrSZ:/Ja[h @X196i!L(B*M7DPƅTz92Ee0K1 Uf(CC> 8WBWK]lavo3LгؖmpsA9|!@j,QƸ*QJg}11c8AR4^9Vp%):癍PF$Yy_Q@"L(B*Ӳmnx ;#EeEjQ bLäed>tx12Jc@Lh5gA?I IeEtôl %E3, > f@xeQ+ ߹omr! !Č`SB!B!+@|ȴMmrf~[sW~ݴXuy0o 7c_7׭4n"쬏uwѻ{CE:<<ސ= :U_TVxR݃>МT݆XG\pҎno׻hx9@@^ |rf?w L?lM`-SkYA,*綼=%}ww)A woyQ\9̏sBI ^%9fDT,n By`n"6/%4ayd|I~Sr^M4iOkO ̛Yћl9777 7<vCL\?LPxA(d? 4YYxOZd.UdB8)8?#{ }睆Sޣȯj«'Ï|8{[N[| Ǘ {l@ ]h08k`RȆP$;lYgSߘ؍#fb07|uiiRݗ֑~ k1%Svi)'㿃A!$=|%usoC#M w=7]yӊbDIsQfMѬm~'c.`P Uy jaSX ¨dr9GISX>X0H߃iaȵ%r] S7¨f&e?C:]յBDJKڸă  `$2zL3bODVڇ.n Liٌ 2sN{~KHJIcFaW!%LË 1 &92kF&v:ǮwﮤঀUrtn;ߕg7~fAO9$E3, $+.} ?ƤEaig6%Sz߾3 R?CPNkUNP}$^Ym1)Lt >wnX@r|RW'۠.?qwUO!kxe5iғ)A'`ItT:"=vE&A] 9Wo̽j=t_0Eх\%? "p>'mj)%kb2djwÅM;vowu ,Y߇H.F݃"{]P{M @&kH$9KviA>Uivt\d \)2Ht/5!1. y,g'K7FeC;\roȌr=<Ѱ/C=<~1DId ?,r4*G{΂34಻!V=*5'Fx#I=y6&?צ0"$8t /J!کUQG!d0X=zX, Ec0d I <*Xj{#$rH ˳K~-|;E~߉G,ߡz7{ SHac'&x ^F٪\b@u.Ÿ bR V [D+Cu =Qm숐o8ޒ58h!#{I(LǚnT&7vM6mڬ{r}ˏ)S^#{S"ЇĮ#[Ʋ?Q]?v+gi1 ,;#K`/ LN0FI I֐ZLlI2%,M ,Śb7NKBtau{C\jxE_Dqh3I\5r6Jvl,u` XuStIrm dd[6U¢Tp=nXlb8l+in8YeNm7j0="ۑ^UV+wvu- F4y+-VB+˔Vlϟ{S'%W:] ӥГ1lćK5Oer}ģ߸C }3;Kn{r6W9on8*׾z+DT2#kV 4&q!:9D1ڳRFlI (Ɋ˭j70 !a0ZUUJ$I4V.Gohri. HHH D_yc%{CIqһ ysỾov  a*ںw0xGD3pVN%0ᘂej~l: q\Y㸓38ԟ3 I[1|L(B:c`phxAdVt ôlLhx@$JjaZauVR#14lTz AX~P u<%x>1;c|ex|P$HerRhu`!A1 )1MfH\z~nݍH]ec+~a/?iV׽(26s\q@Ju*k :w 6c!fw*jpXMP&U$+ǚntj'.YnYUmӁi2J-znHxtDKS3Rl̼Wl=f z=p %Ppz_%V.<;~uӣ{1aqޱ3{[kH 4=!]p Yp^ E10Ix-Ѡݎ(#O@->xrpƆ + B<\[9aU`Ρ 1<\ yO~G01q:'0RQx E8EđJ鯓B'Hu4*!l8A,o`f|c0KNk]98Lba֙QS5`}!?ׄrЃĒR0>"y“~ulҳ/ie:( D_LO/SɎj;OMjGՆ ',>lH}"#ɶg$v$+##zB:Nِ՝Zg5 uYrld6)yq++{\wy_%NA=\qg@č.ƛjpI=]zj/"2w^Xmi5+V |5 a C7YAy,QڈB""""""8̲uSK^.I6)q`pj霿򘼗r> ڧjD@ϧE"G%өF2Y :O]:=pxS-!i=HB}1%q=-~ p8/"h:y.eed?X> [Jϱ!uc ,?-ad!i',!Iz7 `=HWPMb C1$PTbI 'rtMQL-rcOIx0*Tg8HYQv "8$dJUE"%5S2]kXjEzGl.n4MCz d pOu6i^9 & " -Vx1HR9Q7;sW+G$;=#.pVF>D腻ZB4p"qkro_JG~DsWߊSE1T\AfU5̭hg%=?[5-CHS8BS [:A;Swu;J./[t%0btZ vS/aɦ4ȏfK2}sXզRLթ=Rы3L8WU8 a[<ka x2ZWю${OnG!dt(Zř10 xDǪsG 0ը#0%kb0YE͚=u0Xc&+j9HzBޒޜ:7=q6ZQhk|L!yZq4M$w(vd]$s$I I$G\!$I$Ѻz[&JGd/.hKN iL\$nnBݻ`i C b qo}0 Q| }VC򮗲a`8L)FaJB7BH؆7333ZѾww!aBpDg&Cdλr &pP2W/Gϐ.(3&kfa;6yщsɀ33YK8ArR+ΐBvMx Fr=j/քjaZʸJi &q!HdEt㩼>߲2RI#6 =ѓEI [z CnQGYA>Bp!6дlBXNͰ$PQ5@PӲ NKH2b|5:!qۏDw_s#jcx ń1QSQd#O LٺP+J{{b>a÷Μ짳=^󽸼oԿ?QgDʾr*'*5 ~f_fv_wy]??u~5QFh=P0^ ],ƱӬt HؼL)[vJqkonHhi^@;.*n_LuO :T,Dz" 'OXacPYJi=֮ԟ𩎾SK}h~dܵk,I (Ɋ[NfWo;D1E3ޭpǵ kJ͋bGHzhG3/QTM7y,ż)aeUӂ%}wދCw=(}9;JӇgPH**^AVyy::\!SZr.RaÙ&K <DWou3^wyI'[kS[kyS4Ry9^SªYvwqגz!#!A@8I"#b ?=^ d`w{`(S_z3[{nDIhxAd%khO NǗIT>@ +8T$E3,HdEtôlIQ@i5,m_-@ΚT`*%F4.hDHYg'VJCłH1<8R%ԃi $NԢgŴJ`b^2(@Գ$UL̅#35w@$-Kb[({6Cvyy;G= Q~෺Rmu՜V[ PRĵ %3`ΰbAϖS{V)u +@f`Z5pF/A1FzJ +2orwg`hެ u (e2tkoY@fb~if;P{D6^=S:{pq5f.e[b끄Fg&,r;[BP6d e+_͒ߑ8{?x<9h" &9zf2N>;$Q@2f:B%]& -S}vm ~--E{_mm^ .~[l!uı`&IM.{Ii-(4KW*o!셓vj80Ai(`G5;}844jʥBiLў8C) 2]%pOkU;+:.`{MW3^Fw^p}=~Ӭڵ iv{LW&G' rFj st LpBjjm!#a:Q@`JG^Y&r_ 5U#=ĥ~%qӏ9}9ͳ8xI&LIcXޔ x:N7vz?avϱ<Cbb|n'}wKăӮ 1.Kͨmaf숞Sq$`(2Q^8цB _hԡ ~18<ID8bȒGA{"ɟBF H  |YHXF);eB(83 4+ ZpCəg‘C~`Э0 G1LP­$=X$qʜE8_aLme\2\!U~9W!!9Q!I4qFq󺎺!qJCwyLNTQؙN]_ F._A\ TRn5HO>ox$9e.499$$̏iEpp_2Gz?Ķ\$Bs3Q_s`p@CMSEw,c{"YD?WH pˎcn.{kR.Usf*j Sȴ?v8qoFv򍳹oߝIs||0GhN(PsrJL"~^H@(h]$#xaKYnZB ^.c*%<*"%+`\ŚG|@? P.R  6kTQ:]{op/+t+-g#%p;}$yk2k{V~.X/_Qof)E˗rѽsqZ>3Tld= Q M(5Rb4m^Q-&r[X:DEtwDZ9!Ɲw 6$4?LbО5#^HY<^0(Yq -$ VM8t(p6潸}^ ^3%3n̼̺{쒈`%޷ b1IûT>iL`""rLMasb)\G8ɧXVh$x=_z':a1GzVx" BJ )8Yc0m26yٰaer5@&㧔} o&[1W Ɋj2P/bTwD'۸|n꟬4r;f/ȭ;MYKuؿ vFFu@hNx`vn%4!^4okQ}^Yl6K&m kR5sZ:0Tۻ3qbӥQ[=RN.\iun!!<[n`YH4jLј!xaRRāMa=}'L8d3wļn ~?Dks6G?HyGl=VV>ܭBLmB;5V\.X5Kbsw[δSⰩlL *{3ԙӎ6am@@ , j󴺣 QEzlpFzrp$겮4u=K*=6C74&K<5ؠS >]GCDl)üYEt859 Ix:̲tGA_W}ZD.EBW{5{ͥj'o73m29VHMؤOd J7Ula6Bs$.A(># w|; WH&YLlSEWv^mZSoZʾGsλƢp$۸S{A<ܣĞ裑zO{&c:_7I VJTس%9GX{jQ[ 4W<3Di[ZlF{{?]9 gv{vywm-vjOWm44ZNXA\YDNh]A|$sX.~hrgb^_Hjb/qO (],iAUdzkVx9w~d^c@bN-`;3f#|D-"zC>e/}Z)|<ڏi9v('9Is$*ε9@'ƗCbZ-x@A{^pfۣzϛ+0X񢆮:ېJ>pDTs$F/Pއmrke i VxaCZ^"^Z|s;БΩIO(Q;{ ]0[tk&]rڅIz|ңvnBX x7intH'Zw^]GW3t N':u05PN;ckw);(%bp0aTF?n"kyL{AVwqϳN+ 4SJߖs_''ݓT)_F\Hخv,x%P|M-:=n.%Lf g@Plh` Gd3VGLyPB+K>Ir0:=ckڐ"P>E 9(Tj\Y[3qcG5m 3[@$,T{z:rOb!"?|{># @/j/RyH9𵶩nj=GJf<'"'#``0% rv")g,~Fg6L%qגe-u"v=H5eJj>_fY;1J vl.šhD =A,ɤMhr>S98HLÍiQFcqmv<̛|SoFC wTUn!NV{tBs66 =L8¯="j<~tN pb3K4p h ׮9](l>+np9]Tԡ+tL<7&=H6a"^#H*YM삽|Y[kO`a246]UCW,L r&n3m#TFAtqJJ,p$='IR-I3L`V7jC]ybq4EPiFkЉty BEEٞ^Bnޛy@.f(ijiGة (}0H^8^婨TەShQ 225!#L湐Η$TRHT,042tе[SB|C&}kи_?jnV6v&{G'gW7wO/oPƅT/ZbU'ieUB@еV8#,Ģ|rD(A1,k@cx@bQXEr$5$Vu&q!$ P.#yd58+_6c, q=GGVY={7'KFP !1X!PD~ dX9By&q$͈ T4t dsQ0T:04#͑̏xD3,Ob.O"*`I ZBQqIiY904ˋClڔRS.r]BPưqĕ@b)K+*0yWVLIRdU]"gp nyŧ|f< -j#&ۄ#EkFn뾧|$Ap$EIVTM7Lv. "c5m',oe۫_Uݴڝn_Uݴ]_m,Jŏ JJQk:HK2BR $+zUSzM-mli^m?y\S#BBCKGWOa9  „DPAe#h(5vJ J@`n S. itlaK89n"j)5Di-E$)b r hJ!eSie݌ V6valwӼqzqug͑eZaZq{>0[6re;~s(&FqfyQVuMrWjbʥ6r6.9;<||=9ʩt\|?O?hۧuk̯q}%а:ffK9~n8h)R3m؟P{.JB)Xj+VݕW'?Z_F.^7wkkX3k?fo6P+0K-p+`#ŲQikfc\ukKl;?y9D[[K"v8B|r>6!{9U76wZM(ZZm=*!N֩5ZQ+Cy"3U8?e҄XzA]s]] Sucpl}g>' rߘzD(.:*܂,<ҢI$ȖRz9sKŗHrAAf.pTHQ%I|o.rheTB%QQR c[aZlV;ccNbӮyOn)8Pat&ˇp$'tFqOtH?JiyeuMm]8˺yc>߹k~2c]r"#+'7/q=/ƲTXefh muz}};IOyCNk:9}.r;ui_׿ai)7C37۰:"MbNKq*M"\ةOa M=ޟo\/)?]_QVuiw~(WzjeU7k-Z\Dk+wC7w۰:"MbNKq*M"\ةOa ֢UE{/@9VPqZjX=} 7d*5ޠQ`Cacr 'r!ϴ{"iCk^ b+b}yܖUWTyjPs[jxR 6h*n~W )L*a&Lii?`q'xN7,1l׵[rsW_hfquy{8ͫear]J"(Bul!à垘&bQZ!fuUhLY:}4?Nh_[ VUb_ @%~B.BT/d;Cp#8($ Y6XRW`wtSbj}dt4؄J;M1H=OਠgCWr ;69~'1M'Fwb.ӊZn4cbڍV0+J`2tX%D:vC]OM%-^ qs[eqȥ«J?i*>C IOW!-)'s(#7}jxy>(&NdDxY V|AO(#j[:># :pQE-v<\$uMbGa8ɕ>MN@-]#:ˤn,ұ#t'׭xKi3 D{7,j\QJPvUȴ.T"$Oz F:huѶdr,I)-aaI[!^k]˧qNr#C%dϖ20%h'@^$EzMڛo&t$,cm4`f=\joe*Mʭ#ˌȩ|$4vv'5wB=HNM@a-S+$Ew;s¦ 14Ŝ% :!+Q=B IfEK~w8&pq&OܺF4#R,̦@"ZxXq].Sݱb$CcC({$lC -y&mŞlvÑǔ =!GplUg-fe$Рt5J| |mxT+wNHsR Za/<-a!m|S2I*FX%'_X՟pK\Rh=cJψZ V M@v=Q©hnĦh˶0ȀexGî^+ޜ#{c%#q/l[R%0>8m5ȷe\` q1 ';o?y}Yu/S얎1A}ٜ/)ջkwu c>brr?ϟ1Kdq9mSa:/LTB"XiK]גqIQb.YF[ˣ TTkő}li<ʘe\3 b{ ]Q[#%i]$IHdI3.T,`*<[^$ {\_5Wm>^rMEe |HO;h`b(/}F5ʓ߿|mN 3رPQYs6l"e~!tLW wۨ8W;/0 *}r) x)`SX^o8k2Zn'EDFh[Z#]ZHs Ж |.In5B;1J5R-yJP*o]lqS(yZ'47T/5mLLVjƅR'ȔilF'R87v}6٦ܙ4Phz )5hMCIUJgO*(m%rAԡ HLSkKQm]"t :B5Ts2T<\^C%46 -j}+餤۶3xC{00xqt6읋PfAܟf8<~@V)^{ k$ގx]ל9ubg8zо`jkk&L#5@@t1'^Ad[=H&Ks}8gR0KCe(q"xd߄GL>9FoH.ç\A) B3n-ɧ(+$B] ;3'NARcD|6%j\nM8hR ,ND)J>GiF)51+>p p0,g 9QȅsI)vW)A|%+8W׮x^ Cy8Q媚)0wiW}{?G3pZ ]}(өL m-CuP/(шHy[ϝ~Vq DT3k4GÍzD3\ F彸U4LtPJse]z:DI8T]WqOa#Li15sLBү! 1z?LzOoyL" 2MeC?AA=\2h{A~}7x/[Ya9u㙫j0П׽R:1W(+7MMNTkDϭ7 etVDѱ`%֊V,==V /ۮHT*М .*|ˎ,ޅq:q0%{cR#ՠz  e#>*r$^[L.mK{בGkso۹1T7} Dx3/qLL`Bؾ끐AQ_yNA'd@Kc҂ R\t?28YdTa︃q=J??UF5ݽ0]! wQ^_^g8b%A5H9~ ?,̊>4)^p"s|~lZDWHspZI1((O< V:!]Z#,79cA˵A*.-Z@{ΪES}q=djE ªcXmr[4?ԭ1z/*/ =C{?^q6{7>ԟwЍ31{GkFYtMtH$>`wt/Nqszu)Wŋ=lߕbb~<ԭ`´6Ń_/&H;OuSxlƭ!rz klj N$-ٽI"ʢ۱}n0ړl$˓lT䎍yN.{ϯ~X-e v & Pĉt \$*Z18'dˇs9+sZe}8"Յތ}5>o49U 'x% oa+( ICY(E6um*X)؂jiYT즐4H%Ͷ*n;Ɋ*I) t`1Btߤb'7B@G܊A`pC=}L*:%($*N՞zZ2y`7%ETZ.kuj %kUޮ%.8%(t-HI˸3r+Ǘ.2„Qi6`F*ODzqv.8FԂBH};r{t!"$6I7_x!0N3BWYͦș}RTx2=+FeA$A[ Xk9@! rd,ȶx-why9.86<_|pk6:G?-&w:ZgfFcXEΊop ht%gǒ_ OA8"kCy$VWGmMY F*4:Z5~l{qP;;Юvl95| -nK[$ьٝr W -0?#KAAe [3п۝n?a &2dSM7Lz8Gsli rؠ6o9D]zG輚96ocZѪVֵ5m(O]lE-.l-e J/+, H2aDfb382)Zu)Mm߻(37څx` 5VBig?$\yhnS4P$FR4P*JXk6ء Vn=x:=j! [v4>>BXE?#i1-Pz; 4xo28_T7hoOVmSlM, z\-F8$BI,Ut2el9rk]D>T;SBgft-# o tO/95 ]\\fV6v!B{%HJF-gu,XhŖRV1$5ϓh{oUq|UZeU^UYki]ڤs[֊VѺϧ~u-U/碶A}MMیu`+ۧ}{zz7Gwmq/U{*tw[ɪgjR5DK$ekOM0q$[ ݑHi 3+Чz '*RUsWFCO Z:jF!'x dX ^up'+wGcqib}NqEn=#JzEpH }"ݗ=_xaBE܋Q`diM,ACh6-ρSC@A ˂c(ٖ,0ͻQP2ѢېI <i$ɒcir7|VXkw.7(LyXi-v'I\v}ONWQC +|nF'WrzE͢,;q|.nd`@;b$iS@zFeg^vNӼ^_g賥uTTo(9yE@ ػ>5n'd>MG52flW^Omfi^ѯG{Vw|;ȾMBD纲SEj9Eli:26`ܼ\TovdkYBBn]݅g+6.dkZv^+[_E2YjL-J?$I*Z*{b%m-CH m=G:%Ҩf91ΓeNi";*q5V_u1m}W>VM/QWJ+ iG8JW#N::hVMS}w]SuJ/jO<&"JWgL(Ҡ )aڮߢY`ϝ#M 7͜&G) 6iW*徻m}+Y4+>v*_4,T5h~$>tC+KUҔt/ `K-7<7ug9SnͭH—6n@(,LgqSQ^]$G)QTiu*SO{M߸<  xdy$ WC@8][#x]y |4/@35!;C7C15>ڠKW7{FVnv)5սVYxELLvU_,j(foAJ4TPN%X[(&],}kN::+9nA>oSm+m!_/yG ;j8FO_Gf{dk2? ?lzGfa$YAQ*@.i{)nUOYŐmZ0o/bTo?5ܚ˺ _+=s|Dٕj?RYSQ5UK޸A;""%;̷g^+O, žxq6qswp O}^:0£q`s\wޕ[ȿjJk[;=@ k y9=^}(Gt{K> $ѿoBOy<tw_Y5|] ~[zb4 UmG.H1e&/ao'#hO 3C-BCt\ERz#_q#O Y5\#e?o@Ad &„&l$<5o(P3LHTb~= la,Kb0E)NIJ$c)OE*Su{>Εԥ> iLt5Jwz*қg Gb+x&2Lg&f.Yb?Yy/I,o!ٺlg'W(9ir^ UU[\Y5'P3Cّ G/O^/lՙ^XgnShE%UAjpj)jeY5;Zkh<' Ue֔) xz/z/ ?Gku{Sרj-\PG5B4[ (iFhCm)Gk0h{3V[vkE!N$HJ,M&8 BP4fmKҊm[֎rmiG'Yg9yWa ֛6(Ե 6zvxۿ_6\gYos(ZhVmWaWs0 tC؋͂&3b8ARtpy|OkU& 8O *΀,vs.[ 8]^)rY56ϛ_~dIYyXҼEJcbب$Q.T5Sv}o(keV+^MS+o=zR,WeY@!Rd*)RI!Sl9rWPZE2xPXa7_a=7gL6"Yj$Ų4J-^ ?H&Abw}I,E>U2r s\tp|XC ydi\V"+9C76 1|,ce ֖b#/a'{qGkc6A.qP pψH/h׎9} 9F >Q VTX]Gsi5Ftքٜ4Ӣ9k.\*= +a; Qk G .ɾw+ 2Ư 4P d$  EѱI;~܄<&E`SpШtJZŌ#zD )F$ FH֓fs.rE/bQwmn\9e˃VXuj4VV#  4@H%F/J4kbB0t*3yiSI O`RZTS1J߷@akX:i~3tÖ/fc&7MmzC9e=vA~ܷ޶ c_jVկakZsPiOe?g\ŬV%G'g6}or^8խUDC5ve {&h\ ,S܎>ФN7qޫFHpHOoȰRN"WKИ6rA4V't/(tWwG}}%\TF hE)zlýcjc,IH xޚ|3=L@`eW a&Ufq>㡱M83"OP(=eP8 P)*>uh螬 +d`k4PU/O=,x 5ڇ87O.R %٪)"-j3jog),ՙ o&a;YvQ'G_ߚԨ'D1U.4tE6\@oAs)$OR+jyI)JS<\ lzVc:QnPmKW|9Ownaoq:b(Iu O'iH9 V8$YIsvHք'+B`75!Aa3m1<rXp:|,})g<2.Zy -&q ҐzM&S*-][GzDv+rP$r յhv^ ød,İ.Y#9?; {S"} +TE.lMDA^MqnA~]Z@`'P7q'tz*iAP8ܞρ?hfP-+^ B%%6Wׄf51d+Y%dӻ(-BRPUQY6͉&!Fܞ瘕A@ */Ǵ0݂I\8&5L[f (P=b>S&{rǣhB*S;BN1EUXm 8Q&\ 5^8' cs_IeSX%oBQ DV$"`%hM:(DK]ՕYSQ@5 t< U'wbsY 4@fv^#miԏ{b,!8g L bI-6ΈKk՞Hz|%+P*fJBaSGC*ZACf5k12$\B2)f@ Ԋ]T Snv͵3"0Q;9l-_VBBmgrF%. #y&#G"6@:!fP+g@dyT+g'-YPv+b;*FƃQ߃Ei{;&I;bbɳ%:Um\^Nq;/n>'!7x/?jn\Z%CYE g-͔_}|!s7_=FUѣj.t똶Ә*IJ;g>5LX)_# e(,S$8Hd8&G*jn..ZPr8͎>6CwqYWTp69("iKd25=tF*hQ. 6'[aJ"4|7O&p[ˈ&%e}'H|y'2}@S]vJ6 ;*Ȉ/BRO|_ ᐿBR\m+wTrBo " CL8{ ` _ BS># }Rz0%b77bK6#Hkƒ8Ue WA]LtDƻ(OO9-w㑛8.ځAۍd!@n cka&>-3Bv> ;H3p'Y(n{`z|6`q0ʥ+7pR4JEdտS75ѳO"V*䕕Rk˷=d/P{yغ9Q;dI.<(i0N(zP{1֒FwalByg?O[IbV=MD&WBM֝W]@= I= (&otodWȶIKLEL$,D'"^%6e/5|Kݩ/"v5֊sXkEbs@gldŪHƨ LNER+at`y)h}qc->愜8Y1T2v]†(i]U5{Y\C09Z ؍.f$3Q?~6VBq{\'bh6:/˕ R ї}4pAZ{J;^/_HTmKu6 cH53M]rX#?nZN ix/U!2IiwBX+Fu ?Tq/RCa1B('Ϫ-Hثjbq)rS"U hv5'TQ) lvmWws`Ґ?[MPiomE:| |Z&U~p^UF A?lenEhCz5Gkf/k'bEZ M<_$m} zzIBXC <Am`ƑҤ=v_hŢij>WN_U10`>=I{'XYW!H.g ˻x]XqaĹ ®Pzffx*}t' 1YV10@gFgi=A\?#OpdJq( ,яx&/AعކIvcyD#Hm(ZM]؇yRս0`%3W ĬVՇc`{SP&GR`S.MC6vй[yeJEȢ>ۚ^ZW%2`1ez RBDf601FVq}Ah#ˠs[(5ϒiT2NuP(q}+N 梞`{,%~WUNIkAc0xξޢ@!l/~=?}Aw5 (ȼ{zJj\\8ijvg8k8~rȬ1fW?P[Jye7q\PfJ2lVܿoQ>˧iksG^?Կ *{[2wXG 1:ý[~zc:d;Dd=+F{%Y׳B(2BIcqUAkR T56qf _yÇ1Biڳ% R;.Bp˃ZyV Ibl7VWǻ6)AUtu{ۮ){X`) ng 'QL9gN~r 4EXy(#B(˻H-3R hE9XLP*WzzaUeGXyh#GDG}(is*`oaFfgiZ&:h!HY<]ZFS,M7]a3mD2F7DuZߧb ((mTX#pǚv!G L 3>f_喝ƒMstK/tp3@$v;N"/˾j/neE Ȓ zmcϠ $ϲRrG$yRxAw';1Wef8IDN&ӁkkWI:8^ͳ3}0jXI{eөagR{t2X'pڝIKU=O' !}f{;M-p#.vGh32Tn #'D8'OW:P`I,.ԪLA`SVC\X'ydܗYl76 jksݯn.cZAq[6(k*$2SRMbR㺛Қ7ۡrJ$%@h&8ۢK^# $b"T waiVoLGb蒱r]4\ 8zһ.!O,ZGPilհ! p6:n>8EN_hsc=|>"E>BîPv[Q$KzK9bGʖ@<8f :Ⱥ*]rLj!U|D'M2785'l7YIJx?1MnʳFՋ10U Zj ?=Jz >"S &BmTkNI S^aIBp!Q5W@k~c gUmɯbk)WAӵKMWT Uν}-YU6\1ʼr9yT2kUqho?ږŭ=#Sɒ*j]ߏV=5%tԪ:߶Zy#a Sb+*uhњfUS$f'Hԙd׆\܃|p)$KqL%v^1yX+6S*ߖcK. 7C "mT3G8ssfM6Buʗ:qg?wkC?E*B%zb~mpOfw9,a gRfxҸ#d^CA@7`.{^\Xް}ǒ `OB zI:%ţ[΃T^_ [ߚbu_HV•MRi~{nm{f BĐ@z1QI<{\QC| s'|U34{ M>U}u46ZQ/[CfU'yz{ðˬ%nDot9nt=mvMD1 b_XFC ǔ tʵ@:6H]B׆h'܁\Q\MY%˲I=Jo"4io+]f/Jt$S%Pe ])_ lvfHkAPW {d{vs:uղx@\2jsN8kQTW8Z A\|Nߒϡs5 R_5罹>ق,IU>`=Oսsd?q-+Ѫ]^/nsw}WV.}Gwu>ynBo"O47P_ϧȏM?y2GcΗ2/ 7ziVCL]ASD*(qص3ʑ[XzZD(Y5}"U-e]Ew:teڬC9LϨatI`b*k{FHy%\d,Ry> \GB5q낞$wqwtcS>>v^ y?h'|o01gdp GmW39f~hu4 #p~ crR$. Ĝ7sE1lkkiȂlIb!-٧h(k{BYހD_%^aH%@3`L*UV zEz ɞBj$l;mâ+( F|Hj[ `Ub#}`t5GsNݒZqOB̃T#J7T+E|NPIo&F֓y և Nd.fޙP-9/M憧p*ۻbUЍ5믋s}1hW++,@4TfJ@!7y?).p@&>)U.~fg=rQ'9+ Z=w3ET=+bKQ6alYK?.F*goZ99J-ݩ(:PvXVj!DV2!i X\ƅ(oAJp4iuA^&NCYKr(8 [B s^F)w.]^"SЕ,ɍX)BAυ_o)=^b/rLЬtAy4 1#Q}"ϡdHc7tNoǸ "o_ _3l6GԆz+MLȱ u׎` zxîDntTWLjmn`J#z]uR,jӏ],,+태*$nD9qI\f?Ţ6NM~Y\Lfce#_)k@dȦvMM#DgZ7)f8E (@D2f ~ ytjkS\!vF">R=v `ZzͦWpNF};CL&iJޅ>q(ߤB5޽VUb͸$nk7Z"D JM;e~7 !+,ˑS˄dHWoGbMch`7[MRd״ HS#y9 r緳gޟY Fb5.Jyg˟Pį[>%dzJܯS@K;PyW&NX؅"h}^~RRX;T-eQy݄xdB^Kk!e#MȹQ ![j6iմGM?/)J6tzqwyL5F\VTO;g\ I:rwA c$~}=o^R넝uS[X (Uة\À 'L44peӫagY0_/.l#45N')_8m<(Z ΃ E:E1b ybgj]p`f͖ŏժ/t2g?dmx3?/voaB_=> 5ɲ՟kZl~+<<07gdɛk/sYQCͭu*鱾FVH~+;{O]CwVO)qЪ3B%ψ=Chzt QY{&p}$= P 5y cNk# "#ކ \ԹOjBI>3xVQΒ==nv;UϫCϛ.USVtQuyRj'Z^d`YSHq!8!~QBD1MN2k*nJ7q Rӫ7)N֬#7 +[;v眿]h': ^q.J"K5 <,=>2_1śkyt22XRT.}lI"B!?iysvCO"}֨ %kY\xgcebY$sa"1_>9B7r1ݩ*eEzDEY \ r\ ˅E7}N}8&jdEru]0銟E2O2gZK\-6H(ib6UBUD TOzLuSa/$:~ ">D*P,I蝎v%GXKl%q+[垑\z+j}!WݺxtSl&ARf]!Hۤt&\'uF[QU'η\}$XB) hBr&[`4XR]# 3pAمL #Atrf~" ĉT:JѤXt( Y'VӞju.N 'kQ)k,$,$[pa>&o}I~-61ŽZ"97Ȗ\HEΠ˟1?gsJ(YA]sx$6/S_r[1i;tuYX~@OgfcŁ;GBaE=/c*`$z;?ֶ_$ 5)T\Nֶ\\2ʙϟʚ<4`~z_xgi"\FM An8dyC}P1<$ mSK 2L9})X|n.bչRvΈS\p'1U,lӡYdYizT{lg~)oJm\cN$P^~b>G`\00Dd=zFr!!l5QuMl^ E2{92&dx:P);*wK2q"27Q 긣E޹G7xWwT=>h&2~R&i1[k!Q텚 ӓCۆLJx֮>RJŮT N[{˒,KbvגȤ-uy3,5;b -Jj$l&8IIwZ.OДhusׂ2,ywV.M6.IFunꞢS$z}@yqD^ 'Y=nHI,הkPyB!!?exZ[X^`փu:}AvL*k)s"o 3<;[1hW3GZNJ nVcgH< 17`y.^9q$K0)S5CАO<</M\˘7PZJ2R/9ighYn&?m5y<"BwntBy|%4d>80A j0l .g0Jpj%aʼ&P.ʅ2e*6x^p:~29Љ̃FI'" ZsиI?vhHRߧ!sẁ)?i^Nw _ l9 HVϽYltjxS>39Z ~, 6*[^RF誠`X͢jJ6+0۔dlQCgu,PV{AKD$AViOg ~VyX"O`Oct{Vl .E*ӭ-M\[ٿumHl€>ZR5ԮzQ ]$A0,/*lpao8A{>AyjH.M^abɛK5l#7*e?M/-p)]C-]oki9{b/#RVʻM%% v۠Vކ'h.t9αMj`ifh#T+pgH$!ju`$IW$/?&H2SjrHiG[ozo{Q)t'>j}Zv?9Ց!KC/lCNXcTKC$Csl,)Qmo'7'rK>J+A`ӥJ~r:UBޫJYE/ex'ƖqGo9HkD{E"gS{_ h\kF0ܷ;X̵uh׏%\dme=q-RL/Qs`Ĕ(1ؗh)*QC,!8,ȕa"4J;Ź#T {Gj]l7n)rxdG8Xԑl<qTͷΓ"OOj1h5zϜ]nK  ~Rˈ*j[dvG1W~WyN (~| :9ʄcCm;xW+ΩT~F)@B 2Zҡk3&-aL.Sypޡ\9j#D{U^H-R}0&$A4cUkdI D{ rpr.0N: }g.$MCh?޷jx.\*U{=0fy;e4V Y ]jZ KE錴 ͇4ӏIXf)]əVZ^ ^ ~\*XM6ui:'͏ pYa1 lT-`FĆ|^'Z|uT`c+%qB*Z6!/){5 Lih.P/d0ͲZl13$=[YtْrIp gÄM tTWLCͶ[c 6'O5<35LGk2|@^?tԃPkD?Us"#Htϯ@ .M$x ]׵6k4{cFHW7[^ ,4yF}4U0gɐF)&2/ )$TJm5;6|ѳs8+̠ fB*N1vø#gowFTI\ӭ2_)3+\]]DM2-5I ({IM䐶(1+vF-n6j#%v`љz _ە/PXtGM "ǥĿEJ`Rs\1~15{`;3 ^LES:w͂w|Y9WhgYIsslҍDc JؓlQED0ky͡R8\zq3sGj> ֵR[! GB-' _B.x]08IC8m* o +Z+)6!~HIzslLUE&ɓCC?k%AP2sUdl1cE-rKڜs/u54y~1~ QwԊ jTc{J1 K0T) /m/B7ˆ]3<~!\u!|cHAWj3[ {齐3;*E(o J.qȾҴzqϒIc# wj#Юb #Bnۆ]6Ad?k濎UAd{ul<~Kgt'hM{9kJQJGKRTAUǠP#uW|.K27,S0fo`#1!ЫnM9ު fd/ 2(q7\c!G. #f(cxiřf)V?=@ wgoju*OisFo?"EEI! 0!k_="؋ !&}ɨN,Kr.=]# Dovh0"A>zM'㹅nXĔ.!]r|&?:8W xܾV>"ڹ(WñF)XGMx>ýdv]v{3 .kH׹ka!)^Mm7zN^ jZͺ&"(Scq1,,k rauy\܏W$̰̍bwMXE=X1\@rۏɜ/>B3~[HIb qe|n't;`kHp$ZߋRvtǹdP@4˓_K=vR $iMR"Zၫ%a0OB:F{bGF}K`]S_e `ɱ/}e@WwZ=oLqM>7|45=#LJ9\Bڢ\S*YS妰P3U#Yn ;M,+`k%{վM%\Br|_Tb iO2!8V_.Ҭ4[kyH'Hb]yѝݡGi:Ҽ>w49VؖsN.dl$Vvz9wPf~8z3zF:zBֳƝz ޖ)&*J}^w 0wn; vxJ|GN>7^?* .>D*&,@5boe! W:^HQ*;>)'9+8?Zv?[rcMW iy( P5Gn'J[:`IK '񕉔5jؔ{1Edb[ ?_[Ii Iӫ*9][3j]GIT | ]A%h믡>ߌu bD}P(7d* d7GfusKM`*6{qϋ*BF4k a+ r*&tg;,@13OqF?)mZ@A0̋{HNt0gPC)]!:E~ίInoiܮd=]. Y!z^f ހcW?v)K"3i_kR@Yd4m(QH}]g!4AF rKooecyUn6>B}Koh-?c@7 Wa08`գ +3Umn菢4:'IGqL}4 \F ++u{L?{DHN_ՁcvCY {":o}7bsCYS~vLg Џ;4bNA ķr&@Ur ;fT1s"o.Tg๙*eje}7GX\Obƒ.(̺܈[{MtPQFe G,fG6T/ ]iL(-t,&>)Nl$ u20K!jmsh  dC6_BU>X׍h<5fagI*ڔ$x G5DbqH,?q]"%I%N1 I PUO u\Yk.kg$dXXeܓS1kjbgV8y- c+RR`L+\B'U`EibgE/(ٕʾ%N҆PgN,ȑP% t Fl :UkX2'E 83*Ӭ_1eۜ4`IZT4Ykx`VA3&1]I8«e_uF+nJZEi >!!BMKq!z@ A2u4:NL*d}¿Y%FҧlS[iggK D<$K1&aIxx^]X{ɹwt惫ci@C~X/;o|x)nW /x{HQ4VyPM@?7j0A%"1$ďY,2hiT 9 /U*)IV\R$"[Q~'0ָjy_\0+ eb^6֔U)~qHTH 9TBCXz^e,re"TY\dWZ 8TAvQ׼ͤ߹ ;2x`w$v|D*鐻>*aJD^}wCP\pՕ*2^$bbM]著L,FK9t,!佳wW{(0۾1W4b4S 3T8ʀ+fK TXA:o;OϸRx{ol߇hzp7<H4]M>>)ۀ\I-VJs݌_,4.2"05}3, V!J^HV7k*Z_X(#} # ZعJn66j)]`$?8%mt|ލSN<&_ddҭKM`՘E/,L3M:*YwYқGB2! @RŒF(Jn{lKb'7R3ѿ(_/\ݤuv̠. sUYq(:ena-nRD\-)=j{)4gwkcD܋~/# rrLWH}`p)׈iyp\ ]E rj4Į*GC!ҿ FƑ̓UR -9o"tWsHF=g)+W$["z}N3\xO<~kV}Jb-sI嬩RbimQV,?1h=t{ݾa \)uk⓬Dê >ΡLO dM%VIiެԵz{u+|.ᯁ7K#_kY{9~UO1[V1+>A8;ffpF(MgدCiIҪU_@עa؎ f澞Ū&ҭɥ+!+^frlf]w}!eskZǕ MR@nedJ): Y-ƨ+,|hv<&R~q^Yٜ}mm.YpUN㹫kzXD|TW͗[A v"+SbbӜl\}h}y̺! {+MH9ïNzff!.j a 9im,Q(^S3+,P5a!cJ("57f'(H61YA&yLbh nAUS-'p9wY ly4:zYZy a~".ӹ0>ɧhBgПhnCl aRDXy݄Tb z?L NklŠ=Uo2M28~\W&m_bkA 5HUF.`"imYgWRt,yj6P?9|B\TO!/bp]-֪) -6eۇU:B as531t +5/ݭ W'̘rtP wЩ}:>yak*Ky }iKR~UşM3"L1ϲKYXA/A|("VcROdυ$f JN&&"AEcKRo2d,T 3mz5@hhu/Vt8cm岝O0r"'z+Xc1(antTeQsm iltr8ӶuRx m9c\UKa2`MlO{di+fG KH4CˁMD}\6~פrop_u믪s븪΂ CzEH'.=MM0nRe'VWv ~p{Rd aP{,n#)>eCR^ XsODQO}*c jHE|*\YY>RhϓoEcZElD"æQα8b~]x' hWc&@Qsi'֘`沢'rPl!?} ߃%w+_!EWwccXGO{)@޲j37b窫&[*m{q-D@}bL{a g4=i=ճ#Mݸ ױao86015t籱e$'YAڥA^ũ@x/8Ê |>cE z):?J_vω{%2l6e;殬@ ~ v)~ȼ "^/+.#-'_x Pkt T"Rmvf)Pr-)ۣR6m1ƍMճ)38c|ednNw1aLCB8 *EcKo ̡( SxЉ8bi=~L!-z}PԔh}b5^@RU=).)iJhA'e*KvBʯDX%vonrhgU}%5tDfB >d!CRC̚va_B {N7(>>Y>ਬrtũ6\3. aY+EA;4NȬd)Wsg8_0\ ZQnQvrkҿz3[8GdԄ#-֭ &1>xɂ)-97ԭa:*%NjIC-yN&(A%HAJ|t],MQǙf} UR%Rnn X -vd7k]3I !M+X{׭-JЩNjPUhޔEVDUܬA W?]*G{sP(ܲiE?V8ٰɵQJ!!GJiLi^M[Ռ ?6aCدEڇfPdg4 H7pɝ5wsѹ0v'e"]0$jN¿i o'lҥtLqpSȣ@ູ ކJ~2ǂ5męwP&?$W7!=d[6UL+){,HeXf$n*c{{.PF+z1+S@,u+VSS8e>nhpy }Y}>Utx 5Jv"ա~}R4ic<8T=n_fSx'җ1 wܱjGKF:1+5L@hNxN}u%ZK /;$aoiwb#skiD@pޞ@8p~U/K $EhXV``lt%ʿG;{^8lfOíȳ AҟF&.,$uTV<I/^c-ģ1V#5v#q[pzt`5><"I*P͵(n0p$Q6p<5f;~V&t';Ys+RI@'fì'a1!1]g y#UE e_AC8l1,ׯS繏J fN`B`wVGچcZzD !|]CCkd{>oT$KCK[o45ݏT[e$CqWGgO97]&[BTCD77is4Np-Oζo2ҨVAΏ˿دz=z0]?RMV37{5,N@3c!+cTJ45 [+!8U@D3f3uVd٤_ك75䧈%"]WR'jrEL/PAH۩w4IR;RWr:]j3֛7ke=2M8>~'vswy LJE­;ǡ`RB7W'ĭqu UZX'vWhϰ[7<Փ 2O!/.#X 1Yǝ^j(~4zV+G/<$} [0HV Ķ!$@ "o`:!1gZ>K>tUCZ װЫ/͟>K XK&`Pq)?K}+aSx?x{l~s 3 hҬ_zsP~ 0Xlinv*,&8&9]{#*;DŽ;N6dzYbilF HqZ%Y} q6TOѪO&U'YNEeu!Mj]QrȫY6 r:H(d"r}B~H?CK!I#tRir=0A5S7bVhy~|ޑmbVjļ.UMn"+Q}c->U#Pqk?,e#me 6] e&xo 2&6ls+(j#d7łndvF1:KXiМkU ⼧,5u-=!x6]d eS lBs朏h<%lP`ڶH KgzS/-K >rɆwqzT.:],\=_?Uz>ZH͢uHJT0 nnsA/Z`!KZ*} u6u_2Xٷ.hq9e{T += P4)6z]j .ؓyʯ,RPx."Ʃ[H¶`&oϗ&$[0upWRaZ`1Zx\[4Y!jz}KɟYVL^Z.v;VlH wì? UU7&@2#bwP7p&8a>H?R2)A0r0>t1s,M;T(RBZdmB?p~4pf! E>"f%hΘ}n&Շ}|AҘ7Ɨ=)CcJlxvx b7-2^C &2)іDQ=BG_rO)I\&_6hcIBlW0ٚa%FUݥbd%qo=1:Fߍ^z2u2f7W?<,`z"կ<@8Q -JÇ83JP㽆RFDQmLkSw6!*$0" *N~s Ϝ naMpK$A\f@~\I.IBPdvG΍e<@!|`-S#誃C1dH|.zR`!5hEKhes/UIstx2oS"Oa3|?^(izI&\A^<@=y7>[Ȅ$QmR-9%눨k}paָ!tK%W+{{q",)f@T6NwԒ_{@-TrC $b9oM=E$}50Dxn@EAZ<܏xԀHctT溆HDbt͖Ɛ ;ʨe ?WVo$/&Kf+R)f_ cPgRĜ`E0#V:S=dV%[?-,Ϲ BU}Nd,М@fءj89߅_Gq0, 3S_IIt 2fr ;A*sV78~]$c1?3' 6d xICBJ,I ":73j^!YX@O1q&\Yԗ`A 2TJpN(z$Bb([:&@Kz)Tb|VNN{<rMOtr~7=<9{-5e){SΗde(m{05.?wf<M&TMܾ/!n1I+aW?#g8zܺÀCw)fi@1a,e>K'p-1SXˡ6\d4О0%H?{е}C j-#@+~#{G^j qg|dD]d!i{:!c^$CiQYA챀Bv)K%-lANcۍb)!gMx;9!wEm!PHـ"1: 7 &RFkD^O=^ 吏àRŠL]ͯLi!rs\ٱh`P^7J\.^'^>_JtN(Wdۚ: _0?-G/vu=+Ψj8PYH.R vLEB<@t5[Yn[|\+? Պbd[m\?>ߦQWu\4r9d3Z*p|0`'RݐT1/BJrMU Ch8aɗ`\*=DpfxP@LdFpe 83UhW dt/Btzqo:uDFdw|i JR$H2**\Œdk0"?)VC-}/%@O*ڥ CxƓAb[o|~6q(6G\w4a]{.f;tm[~Ft״FR W'Vz»µׂTmZ(b>CA&w&nk@'wc.s>1l6g\Ѥse=O20 &prmZaW}Q0q=Yj/V볲o#1P -UT{S)KճcK@3ve؆(jq]l44c`&IlE\nZuWR eٔ6֢-)Fܧs_/#PSR|eAYӴ>xAmרTFf'&G{ꩄ ̪|$k`_`m8[zXP hs+Hd*Ͱ1g 8UQc!mVVFqڇ^ϱL" ȃ,NV>Ҫx'D ܶ^~b~W;_mO^hjS ;po"&&xS}gzsEUEĬٯO7U%vMlQ&1"-d^Lh_y(d 5^Ӎi9Y|?񉛿o F65-e: `ʮr%H6!G3O.Wk|y$N*}LVUZRwSϦ9rz8<Ϊp1yZZl/Ohas8C69hSh8_T[>F[ϕFKG$[C0U⤀kS*D/YgR019MTnÅKQcvmjEa9 LB8ye"GR'ȹ?:8l魇OTUDOҋC*T6/[mHT2 6)(B 8uس&Ic-گ,ǙZ׻2>vBNc̄'J`*PF=}%E0-wdW$R/dݩ3rFw! 5lf薈;>CKll<tGuR D/\/Wv8D׳zCV+ <)~4ۏcdi#tX#gW_LE>:X]WEi<Ny]S7buZQ>yyb^aRVו?26*r|؍(~`z)gZ^aזyK{]5WҜdhp4k[ s-h-c_,S?ڈSr|Jp^'L LY/ GY]ZK5Ǖ%2M-MSyv1faDY5P 1s \{bgT vċ[k+?sObtl0w {Avk 9ޛ_$H@y9ɾ5g8 \gm94wIe/BgËs.^(9ǔiTcv'|0cIVwA5wQuQ6V4~GC_zx9r-g3Do]m6S$N^PFSޠ2V ګC2:Ww%dUGM(DPȱ"B~D pm9G6 ?41U)$/\}v9#6lH t73WUڦ:z l+,QcPzZєcWἔ <:ΣpPh/ZM,7E-4*,BDǵ**M+n\m},si)uqQ*}.G$`s*V rC>F ^GD)Cr%Uؘtw1<ھ#9*[1Jf =Qj~5b 6o)-[]!B30~Q{ucs%u}G}yWն=Jñ aoERN&xUP:дӟ+oOyãoIğz:)ܗ`{_3>$_. , E H] }8룽oqulō ;xi.0b0p'|'c,ZvI:Xphe?m"-֚m^(+2Ŷ,B79 0㈜:A:i!U5KGY$w0 bH#K&aVj}\J MO lϠ`{(0,,+ aZxW5&ET"*GX]%}-Dͻ5%IBVW/} CK.^&<aŌ$kG53l^YlYv4_x݊hݳ/}nÊ{CnvpCnBu~k:J4^ 'u5J}q5K6wwkϾ乽z0n [:XoFhT(h퓆Y.}l4@} XDz٢X\CaU !Hhmś1'X0hh&07cv1,\#R) =A;V5Gu +5ı2zg;Q}轕s.s~-<dPQ`*Ha59LmAAR8Rp;Ȏyt*z7lW~ g7Fxe OWuT&I.q跤e|%Q6"*2?y*5v,h c7M]aD&kf'~mClu†w:i.D)_(]Z&M 'b$9O\(AD>XUe$ZinFL6HMw4KI _dQB-Oڥ3\V5#>xF˶g$ci" 7?{\`оdon|Æ颎d f]s$Q|"ԉTj~wz'X@{.NX1m d۳;'Xn22)PiHIeN)JT?YtggL"8u?G+֜jn.~,% P&OśM KG1.I9TZ4W&E(cȋhwDTKxUW_~?σg7&g+sNs xeG*k{_feV yԳqS nbh"R\фFC+aL#Q .J H-}V0ӭ!N g-̠5 'Ά91(4ߴ>;H+ IG kBȀK㐄MP D t8+Viv'y0=ց0WpҦ[Y$Em'Tmegꂆϙέh߰3tEWg_YK.qGzW̢h&㗧 n$ǭE T ĊBFraÜ[Dp%x&~ 3N7`g̒%`VxhE&*lF6`0"] OE#B !DʢO[LX8ͦ.hzyd0j 2oI2K>I#.A 7/ >ev}5OɍFf+d`uxjF;х)2HcՀN9 $vZ[ @~BEۗdk9Uj;EnhL`|&'ƥz˗!z:d~eWN}H~P %,Z[ac1!g6iUܣ[Hd[A P&Z(hU^-^)NX)7APtpJ쳣Y;Cu6N5Tf 姆ZΚK RyGbʼn(,.ŗe$hUn'Y)BN DT{%qsyDCbs%:`շc7rc cg,{)d|<5EGo6mg䨿XmW BgDfƸ?7Ee.X [wyogG*(-]0'ɳx]>g$["?=ipkkbT޼0 ;7)K (*QW bOaή Dp妑Y3gRDFta#vχ9]du3LC?EWAԟ/,΂\7x Վ$ЀjlmȚ;WZL|gNTSPԝqBzty|8GxTAT p{"gH4Bsȇ \h0H ˚X?/P6 %tsYΟDa)CT*JD2Ŀ`ZH%6)B=8rTT/̥5;5~Bˁ2zoO?خ}?TMFNĬ#@ Ay;p-K)3nUm~;;aUk6oOSQF^_zvq଑eUn孉 jXf;-<`hGSq晶 hKy^>dH5DMZs0κg33t|&)Nװ) Xg_x%hjU`xYe{3n>BǬu@܏㛂tDѵ5Bzu:@`Fps.S|QxnA]o蚀 +L5D}g-38sSh:"ʿZv\jE v~~ DlX7^B?GE\ꑧ B~B?R6F\șBaȕRՋ (gnU>-C,|C6}Hl^C17:b '2Y^M.TҮwDA!W{@YqFVT=vfF $ݿ%qZc  tNfHE)+o ؋ӟOVpܺH䶐_#8TW 2JB)H4^c`D<'RR͒LrXuKJv+~jvG[[Et&XR"n)?~pD[hV[ͷ=Yʖ>8'eTMu\Loߔazaq3'5AF*_\1`k-8Meٜ/NJ6ϺbNb;k-Dut ww5#JgEIklcAw{F7OPHieN6ǒ0QeNrtYEK4PXVcqÅ+h'e3tv}VmCԌ:jI8 *@~bŌ-l7K;vPaܧ75W.[Z!jVW J>gg(-\+&Hv8*}Z?|)zυM. 2>+$b&5}~m)9d̜Zyj*Aw$ ,?^Qq\P2()z =hkzcIn*>X.H)$-?ݸmfK%Ogh/dL[ESWҪv`Eܶw7^8˦ysi?aѽ0sM3̪ŝnto izMI`.8l4G 4!׺4zfaBε`G[B:ES:ĦbNpRO93|7s|Tt9D^p6Vl|Q-c9s n+07]0qۦX4]&t;Cnaֱ9ǻEyaq^B$0  &)צEI̍j8Jnb+3;752,$IW8#~*t9Gkq-5lF>m3./菽_TU FϘܱ^*eFt+)-7<]o/װhE#,L64^dBմ%Ӎa)66q mTiMʾ l}$A΢'@_};Ts/?&o:S(i?$=T $(oS4>w\#r;K+D)7ZM0!:`0F6U5Ve/zݐCQzT6C+ǍgZ6"&2/ &/eY}wh +/m;Er]yϊu["6޿ eEPSTe1{Q CH@!4ifNo ^);ϪŬgKQP!}ӳwU S#`jn7<a*qQ A6b[-~kÂ6~8Ż'lHtcqSh02Ia._ ns.:Y vu;ܢWo]Ňpѳ{('pcQRuy?([Mzc*gRR"C͜x?"8W=DNL]T`% U{4M'^)$؇8)*oI9PPS+>ℋ*K3]"H%#X6]2V{ Tud$-Ml^S>T]n51aܗ@3C͔( =UY:MY#pU=IFd&U@bFp- 󝎺]f=_(lmdU5\ U}SP qS) Ѫu}&1z2z{{࿂bT|c-]0 !;&b**ND[dAUC 3% F %$V,M/Yi K?~-"iv.;n #S D;g9Dž\&>b=\|M=gu5VP'|\|_dDJU,e4m_%t ؜k̢`R LqMvNۮR'B L|x!``2NccG^lX߫8>y#[RM}i^]y ٠$b:R^26Z:Ѥ,G 'oG8w]+p fP/%:͸EϤMg=sFJ0wR) =SpOAgRn;Uձ_7U"elC a84WuW{TI?mYk ]Z'L'&x&T@icޓ=.ƀD,'e  ɮ<0ϟtM%y|5Wp +)7y7E` Љ/i#Qsu}GsLZ'A 0ƛ!˼ܝ2_yzFWwQ7ޏbjл}}M57;M=̑K&8X JPBni7Q$p91̃1yJ#kz֔) ,ì@p G%kpPhwC gPYuTESާ@f#DUf%Vt%ەnmʃ&v|<wm.5(X(G1lZqNm6NSݘ N/ ,{qeVS|_~djkm| igskG-$yAۧ `W+15pCqi cR UA @N)Mrxs 8Y,7ϐ]ޚ|%h]SVX 'dϠ(= V+ X~HG].dHyPCG=qQqaBNE\*.&Ev'Ÿ׮x&x돾|`ě#HnT`5xVhVN}j]"I-mm4Y?af $/D$ù%yzs`v̏| >!O%E%VCy&f;,A ;ܼΰ&28Ѵ=BBNdE( 0?YK/$?ޔQHFX :P 3i~nQ{Kf^yϣZz.q `+6bw\\EϳytAJjgCzȥo.'X (Mq8ovJC\nVEo Y!*ocǹ 3L gz\9Wq v2F9fIv >z PcB}CܣcA#[cEc\O2w5`tzy%""y(Z=M@xn!+cj)a+umǦ<03qm.o=ڭ3(XzBaD+GOMx32a3)DG)Z &Q2ejnpbU8 HV&$J J}Ƥµy[`ٲ%\:v5esCP4RuONGTo ^}8)*n[BOckn eɟ5Np}fjjz/&!ZxZo%pW"4iR)7"J4)oE8ZfxKWHJtlĺ播 wɟrppٯ8 f(뮈 [X9ȹe,&S k &A" ^%(ԝXr) T^R^}o!ٛkqdp8x&PEM)^__RwRJZ= 6Y's*,TZD caQ2mO,@][MKz`$m.غ Z)j9G|M5c "0v׮Qɳ2z`'CXa3K46 *F!ȥgj5`oN_XF}}zhȌ?CxcFܯC"d+j>fq4ZiLcM4oBiTD$ZhQ*'wY 1l+(0'ݸW f[J809s-zcma`H@@ )0Fe5/lG2Mi?;~,ҫ 9wkG19:@(  59_MGW>.W>;ħv) mDb<tn%pV֘+G 6Ʊ~wNrW)"03B#>9ctg1 сkAy#AK ߏ#(vƃ }˂D"U4 ݊@٣GH.xiR*r= jBl߳ަ!e(#W>i=r>I,n* zkʝT(rMk\͗D(;5@U/#^EQ դIdW%ۂ?p/Ql*cp֓-wďnEV\9O>@x.%Q>?f0'}aCW=xi]]s[S5l1R _Z(ߧsݝ:P>\$|o8]VT+L $LlT(8<Csu/hoU)=j@IynמiG{=AiC!9Dw IHM2HaW+tr Э)}=vR{/Ύ[ܶeeO_F9N~%ilՑZ@K `mst_g؉<M2?)7C9ڿܓFz}uE@R%Ar*܎mN7Ra7E{@1L ;9HVH~[*i'IѼ7LMњ2^9F_y-?4wOGu ĵ-?[qV`>(PƝG(*<[rWq,qIό "aw^Ug+#4k笂Kmk L&q]d҃qØ{?~2PLmZ̘O lE25_) Psti.]*tS᧫e:Вs=%.Jo|rH|U/R(IP= +BZb] q==N+i|\[iH#4Y,.C /4;-)\P]/L@)1qChX)P+ `ǨG pIL@x"ׇOF1sr}ߢ(n--&DE"{aISY~"QI;(uQkKrx27*3 ȎJۜ>4^+Q:fޙxzdNnxB'uD]>8SAjbϐ/!¡oǰ!oie0._-$ỸbSָYO{3; ~`/YsTRUbq#!bJt HWͶD$,mܩ(YDHȮ#w$U%K'ۇ_0vGxMZ]`t{i-f8-t76Q &tJUvgӹzY_FYRx(ļ' l#>0+ycPޙpI"JP!tY^B /Iשĺii%.g`=rb* $>JLIXxm+/`dOO tAtD yB I,Jf1D| +gӁ)2A?}!Tb!;BpX:8d>!۰3 Pf텸UFĺJѐu}zW ޏ?韸`Bmž8HKݒƪf0!~/ELmʳ;$b(/נB֙jUڜ3J[j˷UEP8zd608m q@HZ<4y2!t7r'OQ: smZKj<" \lel&͎[^~W|pFۜVdLӊ5qhPާH-ʊ 2@NpMnvY^@9"kOGJE9PZ-5$#W<=>eƨu'Qw}VJ0t[=%Cbb7w|@=a/ݔ ^ CopYAOnWI7,xE95vDZA&EI;c* 0 A:>D˯} 䣓9;l8؋kZ5n3dc̖^1\L 4+S7bUa+Q+ Y=1?~KlKSdxaqnt^מR }𭈚;:WWz:ܡ\?59В ώnGG5f&~h':硋C5b(r[83uN49n7Ι8v(8(r#TPp#SX^J'&Rlb!9?:cY5S 0(4 a 1)Z]QU}1=жTixG-k~0V,ֲf<#cs 8d J05l*$*~5) O%w^~UE.Y:VgVt眘`OhiCdw.QnaS a!!8ha7\B NsZu" b󘱤#Zw;L o:vaݓug핾5ZuzLHM6#Ɲo탆|Z dd#r4b;d^sdm %N5o}]9JeB MYqW|:?p!m'Zڵ"-C!/um7:lP( ٓ(EguB+)*b^'?C,#{ ގ 1)+e$)$.UeMr".3n_N/:q:DQV'fi,1K0{TE r<_0iJyJ~^HOv[0*g | E;SܡX;Z1Vދ,xn½ҍ0Cl g6XO" VUNIn0 ~X1,! GaZfMjo~h,hG児]&NiJm|"Us^MRt-r)D)/o ڟ K(TM=!}YiKZ&qXpU0xRBnLN`ٕHt  Y`JI2JT rYX0jP>S t){}FF)x7l7{ Hi7 Qn랈ߙ(cLd_ qbY)ky#衆ߋ8͎tk i' +wq`D&L:'d[/ g`d `<߮k9Jcp+1ѥ: uǙm`E|20#OP8c:qJZfv c<\;Q Ջ R7_z;"f?AI\ `N@ωV[dR7pS I>t䆋Hp4D%lH~RP2e|O ےϟt˸= _qd^eGB2Jj#1ٷ H1`6"IS}~5 v ڦ T+qaGf,d@"ګpj|E #G$UǤf^G'Ԅ$Ra^%XրT9čr7RA xMp /{CCxV$);$Q(>. 䫑@;6~{s%VfqBhpTm1e""񗀱5n (Wr![5>|xՑ`ťu+R`F}at=Jە6.ț"ou";[.2ՠY{] -43_X!B nr:̚T$ךs .z|V\,t: -IT7' 5"l$9|>34R5'\ ?RZBR A'T%T4 1a-|oXſ5dtFvّ0v/-Sy+{p-Qލ "x\7n+^b3f<5ZyΤ/ >gݐ#&Dl~×YgĶu;)5>n6$]?"owh C7=|%dt6h<7Tvi6=퍐>f5'CҔە6ʶUJWր Al%M`sGRÝf5; QTm+&3!S5 ]%`|rb@?zax$"ŒVitx)Zԇ \ KAA)oS-@@`k)ƭD%tptoa ^βW8dYYW؍?`^ }f#U]1ƋUgk$N5 #ѿDT;T_j;[gffL_i'gªM´YPdL|zH4bisҟy&{)l3ʱY^?zM+㴍AExRfޤ4/! ד|BuI0N) 皌Ngƒ|at0A}hcf5wW@<֍Qt=ԭ5&4`;f&\4!}麟^0X8h?a)Ea @+;Y$ /6p%AH;,.ޕYWp\z ޥp?h)°V[TiYI0)5ysOLtT!ZD`#>7-7l x%x>,-̹yks-CE {<>O.'N_J`>\ X#u%Ume ㌁7O޿%/i8Wwpuaq/޻^{VYX4Ȋ?~\X}R`40¦zT,iښk1ѷU(زF>R@M0Ǖ܌wr0Vv+R ۋbN}/Xgjl#ou9]n|Q7Z}fúDѺ!=ܰѸ؛2+=xvBL=p;vBNoZ*BVlmV2 lZ,&Z4R myN͈5(( r8}MD6uLW42Њ~,̪\&q☔g>k] B?BUAšx@{.Kߑ̇.M{΍0$x{"c5rຕAT{6=2"Ms^K1s($TwP`Waƒvo.`J_IAܯȟWWz'֒ mQ>΋>+eӏ7] )Rnc%# Wv p}㯔]Td*cy!ED > ؚ:WfRgJ-+cȮQuj w /fϖ,xOʢtW5Խ9 3 LSP~o&uDA)H 丗DŽlȭܠw6%\)CN-Y%a1L21|_@#Hdh!=[zÕm^HҴ?p }by:gofC%KKGH9\h3!˛Xlʞ!B{(eLQ 4ϛ@YJ́T|gZJ H|6=WDՅ"B:wRtF PSFw&3vY(N$;,[{I-xyQ ׏wWZa \auc!]Ïtũ@j5ڀ ^7V}|- ;&(Hl`d;&QFS?_H\?VZTe%4!M?#F+j󠦂NI řu$,$+j`B~v}6F)qaWe>.Y@|t -Gq^h (zr *n"&VX]4},{~{Pt˸A8z )ËB"'e`~ݸTysGv%orR ct*HP9$sbql ey}6α>Ii:Z#L8A#_~g;Wy+䝃ъ'$9.n< pTv z5sh{⊗0KİS/aԻ.igvVvZ/k~|ĖpFOZӊ<佗nF{yie]~\GO.(Y*(qEwUێ%uzKmO~:;»S;\-^߿5\K{=5e 5kLzjT9i pKy>mcSQ~[ MM;=} }ٵ٫nЂ£@MDE6SjpRSu10eכ%5Us%7X5wKٚqa|s ;+V-B =g=c*Gk1YYOH73sC9sy| K$v3+ (BkcۇrΕmօa\j&k# `]%zyL[!)lߗJ$B_/=)qfA(z>Цy`Yk O.,i:^v@ u >(C6joJ+?u1>v²!vSU%oӲ"'s`bN VoH,u;3:Zbom'abmXFKXubm]:&pމ JqgfG@\ }[X7)kהm30,iEG@o키Q4}pRc#1JtQPvDlۢ/wmՊoRP1۞YJ %pZWY$&yxjyNx`Lc,#{^JhPpWl\ɬ-WƲÌ̔4RßxxZJ`;M'6ޤ8ea}X>)C@KyE{R)K h-ʤqvhSg2?Ad^LMd,CZYK D_F,E2!Q 3ޕ.+s(\fͅcQ0 MP))Y(96Jy^0&0lT^+Å"~ _KQ*^Q`H~2EVqi۲+-QtU"*k̘jYPygX{Ƀ!x]*-LShY9YlfQg I..MPgp?Av.G [AO߫ f֤֔5^g0е4%g1",~,Wxb +M`y1Q9L̽85n@1N/1I9`-.lmو\[-2ᄀ e"o-KnSghɲfy ,қbMlҠH T{r7CK:5\+$k bۣY@mE\cVP6=qaI~\{i4k/ 1Q7 GlϪ6,OaoN DL~K(UXQ 賗?!92}*#*%\~OLyIá0%hag4*c/IRi wt_' ͊pf$P@2Ԧ ;6w-}Qp~󆸺2:ɢ|}J .OѦHړ,`4z4t!&RZİ4J DDMmy$zz9DRV62 )߸&q\~70#S-^}-Qe"Pɮ8v/ \ okxx»x`.,gEBC 9eLc}/Y: 5'< ~wFMx(grMk%fX(eMq8v۵:w"Bq( xa|v%V`bH*SO\ReYD"g iK kJ nbcrpˠftD*s/bp `9XZ)_;"$A䤸M쿡 H*^sػRp{B H×` TgcWcHe^?Խd L2ʶ.6y[~M D\>n]Śa|<T+Y=A-6-*'[r;19\}Y]^8Jf%6c{@prj+U~3#iCYVmSl %6*jTVc;[B1z{dsʍ`FZwP&mP_{dH1~ zt 0@V_Pz.]r3X C JmL_Ϫ Ʈ -*';h"Π%W^hyd~`0z5޹\3 f(W\+2&{\͵b J +I9'.߾McGY8 _@4e:>F%pE]?gY4cPSGvLdt}s$v7pKUCS4swCMHo^95QU$jY (Q᥻Y [!jl WJ>z+[ŜH!A7?1phTjsK\).#0k,r]j"L41 V$O2: n7сl-T Blύ飪 >ORl=yN `B0qc}lmNk77Xb !a}|ě qb V6hrIҭf54wz ,DhT5z /fv2xm}oB!=Cw5xi4 `|D@Éȼ Xє2}>jT H.vEl mHyKB$X"N::B=,I ᰽&vDo43CoC\._Qf#'HMr}YE?RBӺԦUOYPGVē er0/~OwJNܺhE!߀.:4ol%ϻM(ï˾U׫9L n1K mS] yf,iǡ Xj{{0ZcB75j#>4SQ+?I|##6vcx]4mT OR$S`(31|򠛚c$^TLC_Q;dGIq$[CXc ƆAH w[{Ǝۜn!65MF 4׹ 8&#(v3b}!U i) P'P#ׄf+PeM=!P(icQz̪JB +2eY$57g Yo fÈ9Քɵ ͨ4L;- M g7N"WbUb]mi_$ Akqei>bj"(p5ꬍ1D!][afBS(d0k\C s3)2J=7m%^$-B?:uѶ*PH1*STtA9GDQ _)Ede3 VD(_' Y:KtZJsM.LYNLWezv~ p,H\Dz/j><8'7MezQ23[AAq+./(- /F1szCQCEi dzVy^ôlL>l,̛ŕBtrn#V~JږCg>lC˟h#I7 @7݈-hJҙs(e pC`&Z {IQr)!ɚ5՗~4I*#BDm?3¡zwȼ֚$VeL[ D{4ED *3 3zLH+IJl|^P}Ĥ$~&8 X5?.fO.r6#@g"T HM7PFCFC=Lh z^73E 5-z_ ~?_9&YHc˜T/ bgj5P(T~w1";Kòq_SHM6mqtZt\ =q) @Um6a./kiqe&FݚODzHkCCj̤Phj/5ړ\`lgb֘I2Vmw@ GB8#0Zfc)E ~Y8DSǵHǫ19eݣ~*ʴow_-y.⮑?|O:HqD3 .y4Ç猗9Zs~kYN 6?+A$* y#m;#ǭ ZvkXCt=d} 1iEp"Fkô~0/􎛮1Ezfޕ'Ӑ m4>Y7df} !`ۥ(kZk>˿xD>/. /l/eҨrͯ ]7:T^+{~}cvTp38i0yӘ5GZrQqp Hŋ8gig@Lш )c^nJ^f7SG45P.}j+s@Z˜i,#y:#IZ}ZpW!_` ^-1IVVS4+Bf+ K@G B y,0Yq+25a:,dwql!ߑL wjV:m,~x'RmʼYThA9V IIKIi\#J ]u98ZV0Ŷ$[pn(5` ߕpe&UU[/LWH=kzf[YqTʪ,Ja\,e،Ra+tB ʤ 3b79ֽ?>/DVwRRv[*_2}ZV(?;-/.u3pwZW5]0rer`~%08~[m49 N2^UӹD!Qd567rNv ˂4+ZW9vݷ7H |WkZD>d/^yQUkȜ^ƭPXZs~k"+Py+' W/%&߷1ۉDΤ꡷O+A;)/|~\Lz8l{j'GG46F5ԔD )5n6(SK%CN*OJ8=.ie6eE2I$/˨!K/<҉ 06Z2h$"%h}3k)bmTT>l:g)tНb9(z"菰K;ǃ7E,FWy93Ivj~;~~.@2́޽]يenV4pCƸ )?"dR2l'kÄ2uKV*R&;TU52xs{vg{O89ڍ0vR"K '_!FG`Ҧz)]aR!HSQ԰L6}w t `I:R7#bo}ZQ0J5sZC4/."eXAfX6nm@uYџ>O +XK4Q4WZNk%0Mw2kC+M$W"0:Wˆ#KUoBhfb[Za?ZVH-C3dft< :(:0@ S(ϦO?4DY1xt=sBb8>f(6."Mk{7IE-_睏OLnW~I M&~SW\ܤ?v> $]!AF\J߱ۂfɮ}Fʺg%Շ:zrUbV&ҋ8CO_4SQSɤ;aJ/7RNt޿'azEZQ?BY_e^ZQP}V}j &Ӱ!n:*}?qMmJ)+%G](jI_ QV yjLŎ_kVn7>Tiw-eMΔ<؊+{ɵ>qTUu< 1~c*?[emPU̸M@n`FLRf)^!H<8r\J=eU>Ȑ~}kC)Z}Hۃ+/2ۑ@K]/-wd/sV T]O2.~|⢬_u_}T޾2[ڔvv9OCN;00d( SLc_7%CS4ztD\EWpC͒[^SY vcN 6Hթ\@E'=y #qfyfn!s qR>;3ZUޒ:E"^0*=Lhhdz;_;2Q h[yKMۊn&'OD>iۺzs]3^\;JkXi-I5P[ǸX\Nz/vn8Tvy9B'Z1o.fԸSl.afF;AZ>@2,-ǡc5-r9)4ɹh !ڣ{;AhwՌ2梲sZwk2l*[d֒uU"vkuޖ H<kd}ҾmjmHFy.~8B-Ђub7zԃO8|L6fkP K׈r{T=^ՍU+X ʶ#xoAߒrTd nLg}:IX>7ΐSNuzMk_#,?NdMVv46!}B9)w82GƼxGjԢ%&* ۃs3΂蜅 0%lNFWP#]~zrMasy2?QzXX`ߐ@cޤhg6\0 |l;O%1Zlt0ͮ 3/GFf "؀W7[L26PD:4.lkBR ژ[-ȉr$gn%9:SvWXYTY\qh'&+GbQ=mfr y9Y8ӑu:OK:<^N5qtN͏]4UPΎd1A@id_{{+_rxDX zcJE`.h/ѫ2*:Ȝ0Td#< hYc-A>'Ua >gySp}X2~?hӟU,#7E^S7f\,w \^Xcg @ HQ,衢ZIyӬ[rSsy/OcWrvVږ& +{IY*,7W,~\UHrq&Ljȍ&Mt}ge0'ˠE5ɱkr.>*yN~ $~(W"J@wBaB'տŒZKn c0&u=RH(*7"kNg@1U Kĵ䯷{dV-0 ƀvS!T}1ȔHߜGyxho0CTONv=mAGZUKMmfpȖ,j١ kYz@NoE\CnȻN9-RITlWkbs-V2kj%oY׆-Z#RÊ^4_GDtAn#vcr4:B$SWU@}67EYׅj1>-7P?OL}RXܠutyZlTxE Ip'T+W qbns.}(w)jH{h~,v@mQ#VM 9$'^L7!/e!MUˤ|#$,7zq\+:zyBYcMye[;rdeNoueWˬU2ކ EDРkm, S€%y=9Uv?c0^wݗ(f}n jU h8Iiy; ,ZMF䥚 ѽ|:gMb=|mņ.h+@Rt޺?O Xe&QLy xw$L`a%& #(!)Ύρ%6JD{{eSTtEaCU>^ܷ!EO'_u^xviЪ.^{2~_-L"7C칖ac1G6z $X9c:n4Z?p5|ZNZ  qf-gC8G\۠{V{H)@K~Iq+9&gh@p3qGZǬF~GѶ$*K桒5خIriIxOy4\ai`IQ"[-h[ƒ{oP@i Yնz \o*)5'.X^'|) =ADa5R#]zy1jxTQ$~x@flռG 7wL=[֚mU)0 O9tӯ;-gWC:*3B+,FYeL6vrLfc&eSO=TDr|  :Kǭh=WV7z)eJmo!#2/q}IVd:T-LM563EY&%JnO(cf_Ȩ$Q: Ss&h+Nvc[*zJE5e9v9O-8h _y*b8`/QuyfHlǟ Q ɑœEJu[|CX?犕t(-#W3#|ИWs0B$ lH.jdԙ-G]a7e'׵OƝ)"$|REg*3NpL?>8_to{w>9ۗ5:%%4|nazl l0Ԇ>5kElID$J/,7GFxkcSra $uD3zlͷ_A#WB H.UE1E%vul@͞cV'(fA@vڀ 3nީSȹZ' JPbeѢ4c=zB땙:ƾư<*D L0:;ሟKw ΨorXz*׆S\O}ѠT![|Ade˃!OKy*\c\AP/w![2gDAݐ+gͺ?29G%OI/<NzyST.NgiBtߟK}E+ZuӨXlwFbMDM;PvH&)*-u jav2^V9nvw1/&24v=iR'@|;,,_Nl,{qsQv]e  m4Fn(uMN0ݒOG7hK%'0ym'.ބxBz6!ZGo _mJ8ijz%WZ4 d5O+}/vZ*˟H{b!4_1αrܕWjK\G˲0S XheY6ndRcA=.s-, 5-<+Z*'3 Iȹҟ:ԂW(vS98%|*MM{OTwjDsOx Xsoߴ7ͯS/뵄Kφ,o- +V k5rx$Bx.#sư|[Vօm(kXPF IfR|)NV67()/8y_ro2ņmYOY?>&;Ȯa6J'/f̐Dn'|Ff)QxJQf_ny%.q$S؍?A<\^@\@_ 7W2>6dwE=zՁ?)Eـ!]B$__/^cJ_ߠ hG a݄?%=vRo+zReqG Ar/;dxcߧKaMTL9Z?&#ju>n. `j?b;,$Y YF k ώ G6K,vQ.}m1ziKsSO:Wc5 }fqbg@ׄ?t,kkġqQZ$pa_F5O+%Rpp]`Ij]LrRUy%bQYo[BQڳ[gec>`EZ˟kBVazn[%tT7ǁc/P ECH0kD|7"em hFQۑrRGdiؖ(o*6%b.txXYp$e Y[x3ݘIV'>[(̄-Gƛ~ׅ>O:\w8z&mZnaARexC{oF89g&9>Z!u*OڠRL#8d/09?\`5qYOz ّF[4_|y]nx_]?K,J2VҴArE620d;5MJ *-X*Aؒ3ZW>!3I@d]26iT*R{:2Ox#rGy3-hIZ\'c[ZNq">ƮZ)[1ܾqv ' 4Q_QFow?j'"Rr.v&_~S 5i[gcA'CڱtX@i;)yydU B&$GDŽEԍ$Z NrR 4sg2cJGJ8fٵЋqNoe}hgW=Nd” "6ailZ0FհՃ2x AL||lY E+JgPՆZӔ"2OMyYdAuHK(5%e VG!N]ABa(TuoeLE8w~{#HVUe'ȌcE>6a|UU XJ4-':Yd=!!F۹ "!ֻ:hxqW|kYʑ[w/<9 Z懧! %t;GtS7!  8p Ⱥ y p{?JEDPŭRt*JqF00Lb_X(wfO g@T\8 fE~nBMYn>HA&-̑',XQ)fP9PYhRt e?Lpj\ʭt^_ˡsUqE}[E蕈.{=k3^!`#@@#yrt&]Q^]S'p)\dTP$B& IqHQ˼~g&tm44{]46M ( .뉤+Co<h C#h4 @m`~8\i, $py0QzƉD ܆xN;u\1ـoGOJ܌x51}CQG,@$W,LK[l&/?Pe(;Z 9;q03ݶj~yaRraMCA!hwf4 }>U1_PhT2-w̱ⷰ YW5{lAd)'lJдLslؤhMrPx&ڹ$;aNJ "0 i9 Fg;iz0 jvdz?Grٴ-wX䂣6L2PS׮N::l_AO3w @kͯo_ebap"pz- ܓOUdG-+j9;(vUy]Vkcš`ڌ+6HV\&^q]$X|Yhf&5DTe:h\kPK\ l+5o&S-:w}]L=#8)V-?k,,ןj}njɼ^%hjY܂!;՛mwfyU\x7'-niŸKyjqzފ45/q733b i ^4ϋq^d0IbGe~<(Sz8 99gX33otJA?Suf}?#vzGNJtr@p̽O~+GvP=VN/8{i1]ߕ5.%%eo~Q"+$< ؜[v,lQmWAY⤶#2֘r։ybU:`VK(@U/M;qN0"3"PEd~}^֜aԤ{B:Ha4@w?lfӳ8>jDX~)1cnT7%I@Tna?H=^&b|uh(I,8{wg׃f2L Bet2ATEa1 ruW󘂍 $WA#EfIP˾^.o廟}IvV Hi%oK|1lų4LPceoRQylD(~?Ryթ럁Լ4]tln}V`#_R+sŸ!Mk|^5'8' OV]<.P2tA҇C'y8|`rh:?妶Ȫp=0㙹sb^)9^@bE_)&54MC]3[oeoe*/  aDmoDDQ31$if )-lD9b/UP7kqm)Wlk}(Ep5D w叇yCid=<軲(_T^Īr7*|",=^+9Jy3֒M]uN]Z)^mG12~9}d:NJȃ eOFK.]@ܞ}I[Մ@mPkoN~]G{'߷9~, +_0 L:oF=rgo.#̲/6]Z7Tc56ܘ:ɱ'̱Nf85ʸňg_`X,vF8I02̟sR-1 Jui^^uuϠ+#6bi9 078yo R 6цֻdl3ZKiO{q7#J ';vĦ03M#d QJD1LwX̎ i=_y\G)1v69'UlD D˜_Z^>m2c( }N&? iq9w ^ZFb)bSe \y?z}"K? 0}/0UW>WaU8FL.vCXݽF놙e'ؖ yz1SrB6k7UծDx2i\ cT RngE5J%`/YNұ`suvybԡ}­1Wo* h#;:&T"s*͑c:;>asH/lӂB*f?2{%L9_>ݍkٮL,䣏뽷Ԥ7.9K|yi <ԒnvH5*K(cjB9 /%J͝| tCٟ|kY^ JXD,;DpAEy`Pkl8٥2Twy0b;&:CB'.'a}}Syۅi aTjvcB:1q9qyMu]JfM7֮muZ]W'rG.LcN,M=?^H-N)<{Ia&ZO;..X+߿}DLxqcࠏ8U@M|r|8#޾[+j<$ 4HTpxL<80l?f,Yn1-E8Z9XtnvL$иQYF21`LXaJi%Z=#,:+[s~tl}h/-tnߡbL;o/;ag <4ۉ\{L朞!*;K|3A@P ]5M=GpAbyٟ=9zlK{%EyW܏؃WCxdlVt헛 ?NZY(cr`_T"S).G >]O r#N"[kĪ-lύvȼZjOm*>~oa:ҾE}%JŨ9W{@Y/ H ΀;[wlnԿrocL2  zθx5\BS2zjsp׆"L^49JSkY^^Ꮃ2^3Xql44OqӅׯ1MYV<iJ9Y90M1Y_זР2M 3\. @dfL!8기|'%''Q)TU]Zy'`qoYKM /dfCXTCg2s pb2IJ[Ӡ3‚Ak 9 ds횢D? G;}>6$AS.Z}J.< _! ~͸\92' C @%}6eNb,qޭ$ ogHXsܝw`r̤Yy׵zi j5~fBiyIOtuj_0*9V`%7URN lV5,ޏ.u9WQ`)Kv gtcD\~[I'j0GJƿɕ֥('zCVu]@ 9 RmO%j{G9ibl7`"'R` 500]u6{TDZmd+:\+y4b+^h&u,D4DUp0|cY~SdY'b:-O( K6ht7'i0Gʭ^fAOdp98$l.wu\d GI4悬yՙ΀_4 1GFƞjzgua:m}02yPK9P yU;1$`Tj 83okI>sL)G*:̦)i<@wޛ>fSNg<>n$$Z; i I.wL{R+map}OQ2,*_Kb7 :"P /j.nY# 8OOd߄9a.N?tzq NLE%f3@l掏םI_ՋT]-x H\xMAraAfYk5\pk |2$\=Q> ߽[&mP7ܲ~JT7U7s @ԝ~SN6 ij̝IHG^r}m|4rp+ىGbYOU}g`sdVF쇲{Aa ; N[&ɝglT`?wR)q.m Tv P,}F׏ւvґv ͿUξ"y?2|/} {3+,2q&K$r M#&[TE>q+,  DZ}q:3HƖ r#(A~ø4O(݇Q>*ǟS3_=4/jɘ"\>"՞ˀ=(l۶8~#ŵy+_/SDX3Hj`LV3g}I&ReњX+:ʟCrr7"}, xú V-^2 ]۷o#J~bw7BKj,Lo@CHd["8DTu2i[?Gwo9SQx w,d*ſ4myCw+8sqJWy͢~n't:aG~~Z܍o^(Յر?^=ͼED%L~?3vkSMc]\SfSE\AhzE=I9``؟!ߔ1Ϯzۏ)<:,8G7NǬsҏno{#;p/<KI7U,WŽ?MI̾TDj)4;bxDʝT}_^Od&M)aQӺ"j?2;^36`X%yPq&Fɛ nGJ"D9]|?dC scI.Kn4+;AzmF;Q: Lɠ hlʗRy]մL[!QE?=Ϣɿ^TKkp f"^׉|(.܈;JHqQW7*u ϩdq%P#Y ]9@33! 2@:=نTj8"h:Leэ(BBrE5֣kMxmգL'N$RuwsQR;( IԠx^ `jL_Tyf&p;d_9(rCoN Ċ%6}S"MZflg׾3q^nRiDENu-Ꭷ(&wJRէ%"їk~%r0oUQN&Qp*lװ 49Jk_Üym昮H"g;Pd!'?t1ٵӟh`Y8jږ)*Tr-뙬y_͊ Ej<vL"VbmK1˻q1 "{RQ"5VW. ni+"Yʼ䄲.S<|q!<U-HV*n*ňr+Wyq5 ~Vu_ z@L,KNf.0AyR9(\EV_T~>ysHrT1fA`j{#&C!z'P]^{+_GZ%;~;]Ca<+J$7z 0'~3y!a;+/`~}v4u.6H9;ED]I,Q+EԐ?=OZF_%"!K6 EШ6s@Řb㴛aurI봩BqpWC9Vi/f(ڋ3|hh7$j<P3SN K3DBHӠ9Ȣ;?虡4[TQ_2W%{x_\Вѽ&sS &!Gd9Z6R -9=qDEKj㩍T: e'g*7GU9aANݡOiɑ/OfǺLVr9#eW:C(PO=_ɉI/:w.!Bȃ+/Bn P'u <1vuco'ñ(hi1Zh7y O+sj: j\,LP~m3%yHxpF+@|*-7ՊR iݝy26q S:i'0x-Wȏ+ůbh7*j̜ASa3f(=;ySnP/dmXbBEfGkzy 1NqX[D/mYAS,Fʜ{Z\q,Xzz{4yp MoS}B Ā2;XR|V o٥Ԋ&ғNӏ]gUpiVg>}OBĕ[nFHKM]O){Lnһ8Rs-8B=dp>PcHǼq4>pĝɊ')&0%T^F {fΥt?tɉx4Zu+LTuxɼjtF'un0Q\>9oߴyCÑ], (.Dq]K:ѫUCCM /^_MYMdbiZ]` Ա3N2܋vy1%'g9QL`ʺ.eTY F1&GX w?u1:2Ч곷Z%<ӷL;@ };ax+qڅ.=R=O*[n-=2v6W~7Jh7C,4[o~t^MY韖9# 0]k _F?8bcƷ@ g}J5/df,80? v#B%\z+\/4C#\΋IVO ?}Zqċy cOނؔ4V80/n*BCU _ xhr;T7vRvvR<72WصJ J+7[)ӊilMZrV|ws#hr3/$GSv: F ׇʱDknKU,-LmIv\{PVSj=up} G#M4q@QBf7;.Ygm> ϨoN{˚3O푩i_af5HK /?zY9I/M ]}Σz$:!KPG@O`y=T}#<&]g'Cz1OƜQZB1I(Y؞tQ퇟6'b[c¤p9ߓY:4ӪT DEԄ'8c@xUo(fu1f"SV*as#g #犢wv&-brїi5Ebx%ksjG='d'ɡ)͌MlSXe"m8jo1ca*5l!sJRd0ʟ+)g!"eL ࣂcm Ɩ ??,‰`2]q6pɀaXܳ"w+3,E#scUJ `w H^.Ʊr%lN{DVH(#_vQq6botqOFpFpF&"߂Og&o(ћ.5+5/Cwheݪ"r20_t!썎v`$HW0_XڜY哪 TKbv>n]"q ϙQVμ]`Di aVo9y$˜\Bq)cK$rŒ4w),Eɹ!Z(%F3Bz[5iQr].眞]A|f$14 WPsCQg֫IE=m)r-bEM.x@HvvC&"xA$$z{l`.E`(fτy{,ZӶ&=%Ni^XkP9R=~ڤV 2*o" BY OdO3U]5,p'H}8%_9,,@Ю|2qf! EX|uqmE!pۊBʼn;l@{$e?ɍtG~F.!' :]BYqZ_/JNJdC(YFXFD)!3_(+G>C["q¡{dvdEM ]h.g[ߗ 7Ff'zV(=2.x!(#+ DLjX|W?u!(m]Uj"v|or"~. "^QDATЮY.H8#P+5@v~zwH2iT(pL woFATƬޑH0P!J `WP ʹ2>:?VSAxZG2ꕹ#bR11?\EWFCMԧ8״%oD'ϯMxX->6L@!mYv  ")!2K#"&⇹`L'3eO3M_ 9"J#!* c650g*Q\KEҏأ?'B&ʾ-9sC.B;3΢&aq`] @]H\w=֌ߗ֯yNm(=KK|Ĺ* 5RI i'Nc n8oi`[xYZj[a+*'LI<͕Y\ l=6%>{xQSMK~— wJy.4ZWdqHndQ *H2d+ ?Ll~$PlUˆ>) ́v }+s.Gi/taI w'ۉv?G ;OBsKצd=v7;M0n祝/#9L¦r#\9.zTkJ2tԱgn1g|ˆe=Uat/}ooLmxoV5 dJSbP5^-gaI?5\K 9CWaʠbsY[u:n-&eA=h|A^okAus7\,_7nUۻ66&G d!27{cojE9|=qB1{=JSt奈,H~icKYT$U?r3C~aNȆXt,^g%B{f~/ir>t=jvl@dMt/5˘Ho}"B*U/pU|~jU;[>6fP *~)V-j>}7n;~JVz7nA|޶64^=wNIwnvEդj=`fQ3WI *]S_͗cq7;(yf2~[y+l[wm/=_)@dr:'DDV^F/_nW<jWzEg QNtTP$k0gDGkqް{ʛ1fpWdbp9WWbL<t\ckϧW+rٝ5o/wiyn}Au0*eb%qY+X..R/w *)޼C{:]-׏.<֫ׯmfna;SbǗֽ2]S쐄)ty!aH呔H:L&3_QSWB+GސX;qF7 |A8d 3꭬H yhItt3ci[sL۶{X,wxf;\gGQЁG!"~y#ݟqI?$5'M^ZjONfϤ? OadxJTXr 2=GW+V;m>SEs$umȰl;hK\ZeVM| ԕ>2K>_̀U!3 v[`:e:Q@bUTY ;>$`Nj%;nHS)=2 QuW?  =JtID=p~=$֛SwrB]^;gÖS1QWa_vGD2oVkݼEI?H's'FLF,"nhuSB҉]yTe= V%|"׍H2}Losg}} =i T*D;&5C3ge{S@S*8$ә nH|4Rƥ%Xrju ҚU|rY$Wq.ÃEph 'EfytW\C#ӫqdqCSTV@ɶgs4պMMړ { &2{c:ky)uB5R K?"}JMkVl7TP27' kFy\5P0b5B-Xd3XLYSg_VQHWEe#ˉ3J=;Ukƣy\9Ҧ>t Hp-ߧL O(HlpD:1Enya{?L_Z\'|egǏ'*_7 f$KT('BQz.qδ'w/qor-nb ҕXY#r)^ѵkIo OH|Оx[HX m<3%(@19'MM'[}k#[L5L` AnH`$|qz*uZ<peNFG+Y>R&)H"g5ы&ujwpU1XXeK"evf%\:X5OsFzYe\jSgɩiDR^ r MKܫ|˓Ca%PKx׀^zac26zz-4Yg Te{3FZd)I5`aбwgEr-8zsF`X",8R&Xh}wXtOX//aGḣLCqbV}4g'Ae)V"q֓S+*P<G8,*KʫmɛSl\jVq]7-&KbSkLv:~|nx#:k0H[ ";8jp@w E%ᰲ bQ=aܾ"ߝE]x?ꁽI]CUX!5<)ቪBfV~(RsdwC6fzЌB,yϪ ΨBKE/[jmɽիyv#'zdiQ gTwte蔌[3VYZ;=̊9g,tį̎> Xcٺ//?@%Nb=[nl'{륈`3wdX-)hFO=X[PM;' 23NwOqK!8WuOk 05+ቝnE,T:3X9}TL=& ɨab=I6S62Jȳdy,"Pnu1o9LF.{QBi)5G⽙>=.zbK`j_jv*sg_G'(xVAp;e+k(bqϲUT sS#H]l\+3Deʂ'dÔKe0hՎn#FRrxx:P;)e3ҥ ˯:ZHG*稊Ya);[Kv̿y-pɓR F .hix~P޶_  AGH qod _^` 6RI2(MxYy8cY"',jUNЖbdxhbɁ N::(Z2hVjƎ!ZC&o$t?2z&ViҴQ=U@ySoMZ13oS!wz, %2f] :𵴌Qk"g <##کNWI{4Ԃi! ʰnr1" Mع&;Oj0NX.z`z ­4˷[ޢz̭٢/$}Q5)Տo5^bqS!|s@kg(^8Hj[|, Ե 1&N8fO [t"[^kCgX!3XBV{ItdMrx* ̈ ޣJ?#\ (AgR7"^D4leFBkDn6vl>VNc m˰G@m O7K^80elѳ>iA5r5OL䮛ހ8ʚ%$yfǶZX*UGxg|?%V:%-z/ pk۬i#%-igwxqR*;<(~| k(g]馆Dpc C8\`r Տ9dX%LV8+L!e}붿.,y|ϧX*+dz^Q#`,–Q,w6֩y/bEza8Sۚd"#u&G7rDV.'˘L|^G()`';(#bjI/%-##Z3_xh,{=o#lgTLFm+*_ AΫb$Ƙ"٧xƛY<c,a!jbsb"#VeH?I%4>RC]rjAͪ buu1F}Is-hKy7#B#ҩmt1Ƃ6?ڃ=IP=SI2EFkeKC14vc-31nʳߪz*uT.|)E_"5-@T4ISK *ƚZO{skm}m|G*`[cpVi:cA;Trt}1FVas=GEWx92~'\M\ȉ_9~GI-(ZWHwڵvAzT+j5+sN:?CE.bيn1h^ R :9OYf9ZA,׳qFd4@Pf<,@-r4TJ;ijȭձcu?.'enud3F ?  Κ^ofZhNuiYm: X0T2XYmژ vRj0x%xV 84j"Hadh-Kl{}1p_^OLf6é'LEHak&hu !}lW0C aPjpD=Nc0kHiƿ)(KCq\I`2PmqK7isO.xYa+G RBEES%ʆE%kĊĤzU:.et|EC;.s~KFQW@)ICaHԙ/2BQ4ävB zcqPa("òj=ESW׻{>*]/K ,pyR3dh i+6d3n)7N^>  QڕiA99A}%FL򍱱hH,R" hy-]0k~SGOx}|P nYhڥ)k*AN'5!OF<\B]լւQm;j-iR1dGr!QeF%PTD+-IoZ u3>˒TSo| @O逷-wGֹIFĐTP o()pn  Ï 9X0~0i>n1 '&X8xJ7&0nTޚpr%\Ax x~>ȳwbe+4gI>7zrAkVh8W<-뉘SE&pfa:<>mݝ_I^r aML )?|)-zHp.O`kPhYShzԷg= ɲ( q\M npq˞2ڳFCxG4@apйDS<Ny'dȟ)i_"q^6 )CVQqzD`iED}>i'A'^~$M3t3*&Fj7KC@As@XuXV={~G=ڐ`I擬Q WO@gU\(Lb8pbR2O,*t7低H@o엑}2lP<7m<xo_7kЯ <8w~73ea? .>7;Gߥ2Q2Oz1_?_Y5^FR`?K (omR:ɾ`P-<YXޠ{+a{ xYEsqA=gwFƦ!z0!",&q} X2ۻ߅ + ر6uJ @)slк*H ȾK_ j,&c 1J8j/B#,Q]kJ$ LP;,0"Y@K, }5aOEBYsQ`z\OH i8rX>PjlC1c-le>߹Ի贰h`Ș+!nˊe6Z>c:=41^ Gd/ XI2b dr*ofXNۺE@+˙5Ӊ >( cԔT/ c4h2܇ ^Up+qQ׸]7Պ|o*{Sۛ .59]tpk1홹Vs:QC5Eb;XC<' (en)CQ㊖ GEa%U%Ē?M.G׌.FSרLzs!1LKu^mn9ǓJ!wRKޚt|jf{ӶZzFP 'Hay $$eM7:˝/L3[QT14r(ʪit{eAŘ"IV40-q=r É )nkSIEzG#v(kaBjR7Lkύy;2T &!uôާt"4WSh &4R7LkF)|s%$I$IxRxsKája2mPF[/Ls5R LhV#nS@$I$It[=TU ҤEk&!uôAp[ @|m 4     Y~J  v ҪFe(²j7b @U8`h?:Lv$Iffffր<IT@RDDDa Rw sS\:˴%2]]p>lA@} 0fnFhCWIk\\Zg+4_spTkZ؏?&0Yęi FG(A h3ƦE~]bRrJܩi!Vwi8̏|hx@$JjaZ)VtԻ(/,}Eս/N&jsquvx};㏻Kd(6eSfQeX[-7F Mb3ʹEm=mڥ9n1/iyv歶͎\L)!cob)Bej_>T,)41jN/?/YM#v9I)~ǞاCþvDU]bK?Ah.|Z`^aYךSf0 U_ zMzgtvV1z-Q'0瑛u$H3}^5H= 'dma#&M(@ I55:dT١ \'aMT֟FWc-/^Z &Xb-?Q/gxO7Pr#RߪtR_Jv"D:YztYCSRRFi1ԧbK{xP<˟?3HIp5A׽lu'Zo˃4E„f9Bieg]qҥK.#ΰBm QI5 RaB!uôd2bX,bX,bӽ_z9:, OXXY+2$@gџ:B>ϵ;fn m7GoKo6 &LG(B8Ɯ-B0b8AR4r Jr:xS'4P4r :D)"mMذGiFG 8Om␳8bԥI=~f9?˲,Zr0٨hj|fy3|eE3~'|I%X+! ۜۈ <yX>۩uzo_VA)BDgF"U8VC %PzAQr~[O]o3M,%Pn1)(cFJzVm3Gpe 9DE56PGo5I-Btrb @o`k֚fs]r9|>.L&CWǓjB 0?R7Lkq#pTUUUUUU+<-U:Rj돧X,֛GENWr\ݎm۶vqc1$]?s . x{r]H\p|a/?yIS{XL>>VCM<!_fKMQh4{f'ou9.@AL(Bq #($E3, $+.aѽ2ӭx|7˲Qd0I @%YQ50c>c. \Hut@1(!KPe ^>T0Rғ/ނ5 3]Jk>pmpvIxXWÎLsV, n-[ Zxu"=3*h{BFYPm1 dE Ӳ#0B*ּ+x3>|$$ @O>X($I$I$I$I$I$I$I$I$I$I$I$I$I$IB$IHb6&V?哸}&\k:2lPƅ\il NZzQ[ЪlͱW1ԬM UA($E3,AdEtWff@8CPC0f3 9}@x@(%徥jƏU١QgGO8[?Z|0>9Ts.m>GXb鈱Q/` t>x<-Q'a^r!0YmaZc7 U~4]bF  LhV#nؽZ*(((((`@bF @0&׶K _ DDDDDDDDDDliiiiiAdh{diiiioJ VUUUUTH$I$I& x I$I$IJ$I$Il۶m۶mvfffffffffߐPj0fȇ I'bUI$I> l۶p3^IG 0m5vV@UUUUURJ)RJ)R $I$I$4c1c18>$I$I$ٶm۶m۶$I$I$ UUUUU+>B@41Vb AkۅJH0EP x _V :>$I$I$%I$I$IffffffAAXVT9s9R]maYQRԠ ,+VeEJ?"""""eEJR6ZjjFU+533333K ²j$I$I$ٶm۶m۶}kO$I$Im۶m۶mC>!MQD+@Ь6GH0M*I$I$I$I$I!9O(X&!uô@@`O$I$Il۶m۶mxo*U$II$c1kZs9FMb* JK+QZLHQZNHQZMHQZ!b J+) B&"AVȦX$ DE(@X$ +oUU$I!9;T@RUUUM3E1AV1 @ |!Ç>|k011111111`jjjjjjjj\=[."""{1v{?CLZUwkb7K xH YDԀ@ 5sm˕:,Pe}kgN\3֜A< ]o&h2wK爱Q/ON I^mTV.ً=ZJOjq觬p{"r0wTʂFXI2AIf`}"%}b>PD+m$d^o~Y S)}{/~3`Mj@ނ'D2̀lN^К߄B[v2{^3WL8ǜp >.sq-Svk|E?n#K\VTM7Lv<@$JjaZzVA3, dHV40׺m]d &86g/.x]x\@n+wkZ&E'CPt>/0!E3yf/dAYP髎F{߿y;f C'/VjE@%Z̊s I (Ɋ˭j Lv<^_)@P4r :D)",q,H, JIьh2[6Wz%(TUUUU-C2 vn?sCMb#VVM8>O_$ @OaDf,ufI"v+!MU![9WŴ4@`I#콌L9!"ɸPZQŠ]-ekރcv>:ij}׃e2s&|}.hKX~劉ibCXQڝ(Z١=VHOpa1-lfOed,$}y=a@+I]ʗBvڻ~dϗ߯#|?TX thLj*,bW$S|{5e[KhunJR ٭gi|e]M.lORa!D!rE柞(Ƚs&E+yYQmV3" ʇ?j[CH/Kֻ NwMXD|fԦ$=b_UO }1*{SVlOM=nj=hϡwfmog3#kBKy}q̃™߼ѥ1n^Cpڕm(9Z%`NZX^2yfWtq<_^.M25u >͔8g !$b-W*A#4ptq; Dzk|@Na['X͝"\]TfW"r_ЎWcɆUr=&V_dCXQz)}+o}ٞY_]P|/o߶hB -zb8Y{s^fˣvvɜPX'H:!lY ^ f'^i-NdJ@3 ,")6MÈrG4qĶ*>Ҏ;&f #Q4靠abA-#^+TLu"#|Nƨr}k õiۤ0 }W,S0l[ m^oEMXIt,YݗmRu;4€i8sXθ͕0+yJ)隋LU\#jlJɸ!ӟ馁)=2G6{_o8Ot!(̬u֐ġ*0"\pXb+NAbxH,E4 r:'@^"D+H ,Д.,F|ykHB  C0$Dshjhh.FT0y'\^E<fo!Եb##1hܪl-duJhvDĞ8+yq'_V ,MX̝EU|)It"IWUqӝѴHwg⼝U-ηnͶnÎ{N;뼋.꺛n뾇{hCaX*UФY05& ror(xáZ- R8-·-nC An;z'W^{wl$EDE%5-} DHAd rDLB!J},a f>&&Tٱ*%G$G]D1X DBpy|!K+K, 0 ]D. yK[DPitpy|P$HerRhuzəRtD'Nr)3gY!_rku)["6-bK:Zn;9xFw/s|!dqՐ4SCɓ J*3L=R9Fi*]#U5xѯziA`G QOt>LBX"%.F&j;]\ܥwKWPTRVQ_[>}ן M-m]=}C#cS3s K+k[;=:9{\t&La9ʲlYTpt2, /n Ӳ5 Wl'Hn+( @,O *`.L*K^kgEqrv#ׂ4r4UשVdKh++-Zkh2['gh[;֭nj`ݨu^neo|2 (A!P4pk?iEF[,[ %,֝2. ӲR(N,/ʪn|"Ui^m?~ެ/fceoIfXDIVTM7Lv\(N`! 8 !A1 )a9^%YQ50-q=?97i4 ;~ΗXYeh#Y((6-7ҤTkZ2v tiµ(媍u>Ĕ/1v4ˮj!˜ KpeU4h<κ^q -,|B=~  $ "L & Vn&R\To C08Bc8qߤB*H"SCF,6I0%R\T5Z`4 a*km@$%7S ce5-U|Db}CDIgMVy}ӄaͣK#Ƈ•/D^@d(>D"qmG`ԐK0}Ke݅gpϥ~Iia{T]~U^Nx×T{DUx!3NyIj=¹G-z"ڈ uaBq!)D)@Bк"""""z,'DBL\u]RUi0 B|t&   !LJ)RJRJa~Y4/}ҫf(gOj{M;,&X` )7wE`R[ETUUջsqX u߽5z;d:7+&y\{#JVqHt a˗ܠhtuTD]+G00 [ˇ.t]Lq}.LV\w-ƒ?h ۄ;2A8t7QO8Kl%z^t1B U='#E4 !otgKR, RJ)O[#R4&YStdA)å'(#TY[~jy=B֣hS17@PkUN%o"܊YSi=ɻEj{1TUћ:ܯ^q[n` 7Pkra 41uL&OA"dCo(.Va ~}];z/0 >c+k"5"zD1%,kp6<#(V|pA:"V={o|2&#'dЏf,}:bNi96<3mYO‚Eq*OWAYP'{~܇3f_H h2D$KY+՝!-1ٯa,?>߿uj%$8).;#qԲ2Ӛx9}ҽo)=X^i}[zRH+OM"c%y5ÙC1OW/U/qi SV8Pr_qV7;7C=*\O8x? }qy^H#rͧ~OZ]:T _s7V4~3W7]@+9/pRJN\Z~p8Tz0.=贉aX{z?b+{CSR>g.. ־ Ν?:?Ο%ԋveWhUlWG}OM 6ô YGu1[&v8iƈ>Hc< E[XRJ<$dmF!SXi'&ə<oc&=0x/X j@ѧ,wbjIA . FgWlcv*iߧ,}+cCճf_cY:u&%w2}җ佳ztcL䎩Ɣ13c-n2Q~_tdu.;N D/^-g|F9ʞO=ֆZy0&B+S,Z?SGhzB2 *ܔ!tH\ B0&]mxT D#qe4qd#BG,*FBK+qZzv`4TOc7oc&lnd0Y{e׶ WȨ ƅ\f1cq9)rX_rp B*vvFˍ&<}88AMG9>^v/ƚ V1 o*eI[fZ#5j$uKp_BÆpo uڐCSi VZ`︕LoNZxoy6{Oh.3LC-JLMOE'z| jxC$ZbJ&DLC@]|c&8y+ 8@L}BzD}yoj~xuip4GZb <Xg<=%61 Ks /44H{s 7/vG;y 8>rHYȶλ:~wcU˱QStT6dY L1.\}_.tW!.jҮ+ǀXK}>Mfi6gŽ+ƽ:v,^i_ |q Xдp#*4S_۽xJ.tbl[NIM+]F㭓{TM; {.Lnw](];XC*0 S| 6 )#hT| jLj">µ)+2;B"bjw/ҾլАAe0̊UsՆ=KUw2b"t!VZ-̃М%En-q$5rbo$S#\xW gq JJ1 j4 p &``s^Il(V@BF G'q,7%l} A.aqE^dBhB.UaLB<V1 M'?حt9tdwpy<m1d\yR =]d;KY*$ nz_R~vW ',0oål!B.IzRJ)1cq9s.B!RJ)J)R*Y$ c1B!B)RJ)c1c/t~&+F,lϨI B~*GI%(#͂i[5[qw*2K'>NcSpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff0000644000175000017500000027735014502137725030052 0ustar carstencarstenwOFF~ FFTM0kGGDEFL OS/2l>`2z@cmapi :gaspglyf _yLMheadb36-hheab$ hmtxb Eylocae \maxpl ,namemD㗋posto`u=O<01hxc`d``b `b`d`d:$Y< xc`fdbʢb l |6F0#Fnx͒Jqgje>"D>{EO >,"u^[[[jos_M%:0g80B.Lszðפ 1YlKWvest)Mk^Zֵ֪m׉Θbk̳26>'YҖjukZۺgm2 (4-iEkЖv}XB Y``c9ZJV5eY߆6G ΂`3| 6[uIpn-[pL0Lp;׸%8o>F8 G8`Wί"E^_=(K,FK+ybx TՕ0o}{uuuwUWիnnjmz-nvEEAAJ!*(hD2c%FʦEbb6$&7߹UUW7 tw{98m8bI ڃ݌7 SEG!3j㔐=w;P^IA;RRnkLS.)o8G([)9O,,AtS h yujZupPGxN on{ho2AD-r]u5e^dMX8=r5ͻ^Q\~2V0 o0kC qA跍 G< 9v`|NXWI:"'aW޺O=}k#"7e %Vs~-y$ŵXw&'q.n.EK#JDڝn봽7=|wL:Ӎ2vmrRv:=0P@DۓVZ7eOd7HMSY|[of'BL}ƷҗV^+{W=uҤ֦='j,| ;vAo=0q8"I³8yZ6Ǵo9q< i3k1%& uk {H}@΁W—^qԷ4;gg7Ny/ qPOЌL4q,ԇ"Sv=jL /UjC-woȍnj̮{j\ vEk z>pn=^=ajID(෠quF;э5֮s7 ;QC7U[׈yZIۘػ*!$ dⵄŖ-ˇ?{mf6po~mԽwoG6Moza--m#]?]?Vkzܥܵ.>)9NH%&T/ _IAxOB]8(.v)G=HPSUP>fFE-GGs|'?~zI*R|[` -V'ݙGP3b'\RI̞#n;W ٟDTѹb80^s6,rȥ ism15kk,}qWȝ;tseYqqC/0q|> 3W/ըsF"sIoAHI 8C„ w~@ _(]h=r9p! ;H-[Ifw;%=d꯵bmH)k=o\hEi 7i:-!mn:`[G]GE,;syH62ƈs՗:I@^\wOVõ<g?]Y{?qKgH[X&tdn[,Z!H6#=nݳ;OWUG4]]6ٰp7[aM5PB]?4P呂7o\!׺ߜؤ 2>8/p2h@k~ھB~a[r=Pr8SescF ӗ S#P|0z'zS)8aFBFE VrJ(EfDpU\'h4P jd3}CvfM}Zlf,.pj1tYj2lƗ,U<:zt[%Y!1vMfrc:_n"7zwvm zuidtO.3Ku =.#Cjn(,THu_Z 6qhhP4#JH%jt3M)#zzdt1Dn~9/ȋB@NV?p'r f: ;bBQHb$h3CG|#v2ydm)esvw~٬fp~DG r 0^XzˣՇcl& \`\8HHa IC?6:5H;lވ4C&\FjԬ,|MCݔ/f8ܮ2 .ҍl _/AkTVΝg ~T΂<`2Q&;XAW@@gj{j, suuE ֟:A 8,&ռ }|b0lFQ$px=4ddm7nru"N:O u^x@񝂍CG*%F>Tm?2.opˮ1r\T١K+L؜cn:8qyN\Dvj[ܦDy/*=H [0l8=`Dd&76tOd٧,崅v2+׷ TU[NHN8W|fG{ܘlT_Z1 8j `Ar㼌` h *b #ռBj0s$n^7w $Gɡ;N .A>3;My?zpͥΙ4aqp҃GFw|]֯!ؾbvq8e+)h.,U~4]h.P4s)+kqD2uϸuE3 V⭯ҟfS8/D]5ޖ*xWGj}l&klnçiPv'6#(%)>qEo6U+6ŋ8ۢlޏ> `Mn''zB-t/ꬱ3ik3 55Z 1ao|+ őm 0$YəOa1ag9up9Gת+b=H߀Q1hT]ҒQ^?s9ػ lB|4TNYBL, g#5A㉐=!7~=/X]WuwZW避[ꞞWd==Bm®ҏ΋v?$ E# L!7ط!TRRI4)H#l*:#H.)pӇ źRMB=ƅ(ǂ͵˥>A,_2%5pyn6/Mbt,L֮l+9QGb]*D; {PZ!*U1|s{"3\gGχyG:-nQg7`ԏ3xAx%ÏUXMZ&HX9>osGa '!lü|EW-ebbxsY06E>)VH ߰}V=G~Ykh/;ۇ0{4.c\h`5 FA5Tg[4#So3yuy=<'j{ hNk6 @1c/5 -T:`YX]g~ilp!e>1x06?eoAsb̪fyb3@B߂Yq?;m)h4skP UfW62c>8F(t*GC ym srp? ICY:ϻ&͜99TY-k%)@|FFh9*(RtKǻTXM-IP.%C"?,+ˆ= >tUgQWw#Υ7 ݋[P ޮ'j7 7̗9ZI SO4YkDE͂B~`Ig;mu֢zSg)rE܉=mK9ZD]4~7߉R6Hۂ(ji!BldpӜ^zz拾gF:qꢝkWl/СuX2rTsBנͫڂt}}ƶ_5 k4 A;oHLϹ)z.quAzyxjk5F-@lҙcڗҗ\6= O]9/5ڔ볝\tOCT3f(i ]w PiQwγ=JߌvGޮy[[,Et&QocÂyb66kMK|֋$Yz%P(^87DrK`%5.: Ďx=mnًm]Ю&2G(-@Q7xu3%@p~нt S]=)AG AVg; *=$mz -|_EZˢk<5U5fFIj`=H})0~F,"N6k"}ṒkT"$mZPc',ϛtzՅ];+j +NG>K#h-zp6\;yb~9.m \=qrqü=fS 6u(؍3#0  :Nz{SM]"`R .Cr`-U{낍znq tx ic+Ԛ:3Y㳙N*aVP `1Qb@fc^X9̼ܶjtҜY ӂhھ3 ijs+\8Tvi|Q< v߹c81-t\16GInJ:̇hX Gr+4Hjv4l!,cC54{ٱ4dR~p*;9nC%d}dA 4Q8iOi TgdulUSAq$.j6U;MǶۏێۏj9JDvAFbmLOI=`jf:>IǁJ! 6Txưqn̓S9ĀM|!ґ8X)hͅͳ(,ӌ2+lD3Qɕp$`Pt[ DV2opo%xZ)n:p4N)F ՆtT7Mu`8P*r >(O^tXi(M4! t(>hcU<@ܦç$M'(J׳Q܃<8Vjj7P?Ͼ;_!Q.h|:B)Ӓxܘs_d9aN=.WO.\|_O&tk.".Dp53͓ 6`8IuKjk/wiUSusUlr ̥;ѠMe`TB&n¦\ g2pd[0Ovz I'm%41}@€:įZ/r @1m8_.WRlv(F5Aս~]*@Qؿ VgM܊:MʞQZ㖵. HfJwKIA\f7zl}5VzG Ɛ u̻vߋaɰZ(S6W z7ek[j #6[6iSڣn@d`[}i]<{bN&kG[Q`Ek$|'GOR4: yX1dhz3TʷL-3DG%Z b锥3I陌R^cy,3P!@ieNq좀FS'}@4шÏ~*T(PY+=!?}>Ю+w*3Usƽ i[9a\uWeY5 +,iK\ʚe<zKC&Hdbktݩ7!;BTR@J vKU8bUH^Q;Okb%[QHO 9谉0r0}U>ʔV5^ܵ}ecFmۈrqLEl "I5ڦfU2cW+O, MJ񝁧6y?*0&Nݚxq?)>e( @qTVx>sjAi2W@WU{LГK^ A'96&E[ h8J*X>wyW+Vc*YP!3 ^ %"`ɒRcD@2ܵG5gL6}*Xl틵\"*p9B4MzA65L.2k,0^>G@@Hty Z4iepWtAh,8<{9ȽǷƶwZOYE< Z)t#/崐\F7ʔB>(&6ldit/=n>?&s]@Ν0Z.3Ĥ9MG6XIJHXa:C}3 6~>D3UO>[vZ_}סqN!ʃ -W S Ha)Y'lg8=`z(bwvi:2E!`;x,Y ߩ =Іj^ǻQ^_Yy`Q[&aYQ us0{&m胑*j)TC$ YQ>*P}H˥_7!n?Vا(sOGRBXbG/*󨴉bE("lrʔ$ΫdJwGp6 P/#j mtCR0}Bj̣RXvI>(j=:ECtV:O[h[5"uE3W. f[eܫ8P)e 0Rԁd.ُ:~}t<)/Q cOBGGp<"-G-b΢y3b#5RPCk{d˚ ح6d]LdLu鋶 LCzӮIYs;A@*nyڢKˏɩEWeMâx[*u -zҗrizH> 2$ =_j7{!h7Ύ|pfs%9LAQ,2WH(EEug&/ $̃cm$0^(K_ C]Di+/TRhOJ?Nޛ j; 쁳#ISm0Q4WՏ5_fd "0ԏ ~D}R'k GK1(_/TFȤ8>Q8m.mstÁ-`wZaxx";ͯ2o2:h*4X-hW3snP,ɞ "ޗ`7Nw8ɐD\ (,f鄝 IM|؟նkÿl5nv xL/LM}ݻ/Еum.umd>Nh&kԵ-h# +qs}v.L8c|P=/2,T,\fxP!:*}uLvyj{C [ ^܋lV͛CZk9~_+2_ʗ7%\~NVw|:$^fH-œl6[DniD>=}4b=U{xCu:6ݨ18=Z%ܓ&?i*V߻"z,K=,5keb PÒ}aM)dŐ".Aǝ2AnK% %7; QΤx9: J's9:(w̿sltWN~+lAڏm[w77n\W<9-N߹ti?";iw[;LvP2zrgkcl;#E*b8*<~h!:Q@qӼek/#@wꪫ' r*2_2mppm"Oގ:wFgRۜ{zh?U_3m3ؾ)[_./d jG̨.+{7g|6w6؟>d5;{O"-<+jaW22pWagy6&BhI2%1S*[ϤF۷%nwT QĶ!=00!dP$Oj!%l6bd[6,6`^Hfɖ3V ߶[8|\MQ lƜYxj?KO3ٲ%))JrGƼQ̼)2c"^–;@Y5u!'hVGTi M9#(ן<4s{@efQ`Gy 8L"KB3+fOx_c`= C@d-TOj+Jw]f1򉠦J -L[,Əvu&}z)AԫyzX߶"MWwP-蒺Mrk 44LZvɎiZcKU/Nja,a !"Y<]K-{S &,- l5V(DSJZU+6UԤ)jȀMXju5xkOxkCf>v;oĂu)O[H%rJrZNCQn?|x_B*kgYn3:B4WͤuQ.RMF2>8G3J<ZŠrVŗY~P9w;< +iչ+5DDhp,;ʹjfƼ=䵫9 3Ƒ,@('h:Ƌ&mTkPq8󨴱!ä.#Q{== 4V#mx _)IfC#yFN uQRPQyQ u:]g*OU֧c'PfՅԭںo>x,uP^"yXdci+Y_'z6~(+q$U;{S<^xGn}ouvXt%&3`.:gA'%O0j@Ew:мjdqge4c&ūY3]*tI* r6% &AR^3$p,a2GÇ}O>W476Ոn7[YNqOecu/=cm:&4Co<}iAO6ăNYm:̲f3J"MK:Ek:e-O7 6;kh}x?1/\g^y}7|4q'7o^ o.Uξ&d5v 3_P MpĹVjlU  a^vqǹ܈\?虽쪰:Oob2AL29zXvQ VUq^k%@$Ǡ#o}TscFW}$yF$y^2:l4/maԽ&oL3ѤNIq!#ĺ~N>0=ٞbDAw Oh CTѡ ֩FI.M#Œ3ze{EvceR] ecsERn`{ahZ]'3W0vIxV[mQ8f64Sc%WrF.aR6aLv0n=,L ZBU\]aJXL7e銛 ljQƀcHj\}MGޛ [X@"WdNS<+#(;<"w~omyL'DpEbY?~{{,o,RD(JbC>ܶ_dՇwffsܦk3ގ&~L =$&Cyd"le؄ tQRʉ@*΋7JՄpC#5-Vgo !Gi 4&NpOo޴խ9k'y=JS4/;٬vY3MiB< (Yuv<9_m@|zU _<';^;#b})Kywno%6,i7-+v(k6ic"Ym=t#WRTmR[nafʭklW޼(IdrUU5=^Dfj}-:$rp( %\x+>wW؄ Ou gq/,W:˺/Ɏ+ y+&Lo) @[@exbiu;:Ykw[50x:rsS&_Xxf[bT:7ak}Yx<5r'(>q-proɴ2HU&I-Kmhɠ\YFY`|fM0]63Bw5%#'iH(8[*k.Etc&aNmVJQKTMbX4?#4c왓Q,<v5?J [Js'ڛiӒӇC>䶵hMz__m27b2HC' j ,JN؋ LuqMZW7'./^L^DL%S n4:OW^of߷Rпlq{\PȖ叙y4*xBav kx@͗qY’.3HQF|:rƔ9`P_SRL 6b|jAn~<DN"u0Q\ Wuާfn6oH玤N N'S;)̓vGvejOXJUPsps<׷4}am}SjTYCheubm20~t'r3:_H7M笜YrN:1!-z\MaP}l&pq6*_UYIG~O_KU8FT{t( av"CBf_F;QnqӳB$MU*rg,^GD,IH:7FD Jlk6c']u;& FbFiB"&͙MykUP\M]J~qZ JP$5K?1/,# K:I)DoY:Mg!'S$M }ÊN~$Ū3wm6]r׊sO^ ll 6H{RvBoLg(iZhVd˂]w!r<3H/7CyYN9Y@LceY֖Y $rz2dk`8v1gI1"0k~,c$ tyh2 ^/sv骩m{ TUM~{WÏɿmkUٹ?΅s4a:ZDg;@Vם4`gلw]x/goLvw'vڟڔyK<+Ǟ~NF=ΐ7.'hٖ}t)vSK4Yԉs]kWN-ЯK`~kR-^"9BF%`%5S'$^\o;NKM#_5yr֖ jKgMdn7Y n NlݮmGYN̂09E&WKbK|ĸJﱵWr{ݷkQcZ\2R؛Oۡ_h]Ըy&܈V;~M/׭n߮>_[./m2A qJ{ >L M8Af]'vHTUOμŃ̚u\eAb~u:ynwݥIٸ$j[QV*b 聇nEC*ZɭEo?҃&k=t#=KTrfWQjJN^yٔQW/Oo^rrj;NM4I`0wϚ _ߜ !Iouz#3tzi kjmfL'k ^9uDћVnǼ^߲rn_CSC "6Gi1#W0=p']@8z}Q/ F"̒ &=lFwdF3v1FuDFYV'F`.bNu䡁 Vl|I׀ɷ*~)Z*!+uQvCM/vԂ.qcYs, wDiN6 YrLU߲[crcq5)V!c031;B0ތeG͝UaVNUe (;;|d;_TA"?/}Mi ;]wt7WY㰛nNgh7EB7_RE=SxV5P sm`ržYazRat k_F= dVٿgCj߇%T}[n.Z$Uq:ۛ*<ggnGh (U?.b=Ђ z3ek 4 v^QVJRT+N1Ey D;YC+dNA݇n$9MAyhpJ=^蹭%[ҫ{\r8L^Rڠg8ޥ~ad8U=gP'1.#l =ΑѬzR6np~[EfnG+y|:fE˻~E׶Mʟ]f}jE3qMOϚ{d?]uU?#/;s~򹃫ؚǀK-6B'闘̵Lgcg&=G' }S唩VCIsyRCM)rd7&UC͝w4Nsca7fl]tTwݵFè4ou֍2B>#o7(J~jE(EM-P3/rQQ@Wヌ(QUm)!sG7ꜜZ4 …U lڟpd:Cce's2E;u*'$]" c4} vzyDzɨn4bTF.b4R#P*~6tjtŋdۥy1 W!ןD}glْW_A4R/u|]P Ǯ~:t[94{-.ǀyA0 x6-NMvM$c50ghQ61BnW_us;BEg}\"\aQ=#ͧվv1ŊSY(R.i[9 JdQӜ< 0@BNya)j0Vh2쬄sOeP5>I~1!-A8agjNq^76e/쾇ݳRuԢZ&UEJlpYo<2"_:979f阎.! hI4 RkCjGBu +btQPu/ А1TZ5V:+zp8jy\ST!zru8Y۸$ՅFuFY Tj +[kj`GŦ+yl֦Y닍4R,+h")=U>yV˕!V]Z8G_ jW pH ֬Q6P8=wQ9]W809{z$5p+҃D%ꔒ-R`5CbJihEI@xQ@-Jhnא!7#םY ѣX2MnƔi&#ix2nB~#}2n)Ͱ.woB( Yk"5nG PTF;NQ@(奣$%l7Q?lRPfB!wҤJƝaîGٍJ vKgWOӬL_$ta[!i&M>JLBfR% ۣ6!o "$,J{l2"Qo#BQ'!"# H:. o <9*a$ <1ʔ/- ᪠(J&$ f^o ћ}6,+7 g2.;H\Ұf,-JǒEw\Bwjǎ>fM..klDj.Xv}mW\:5֔jKضV3BS$l&ijDYdIO~q!rW)\3 H.iT2R ˔D'i>-(*Qoc$`g#Aꆘ0ߨn7.>x;w,yc?Ơ36I61q ($,Njwܴtr(yh2l{s\p@ 5H?]JHʽgIhhh{ ef zUs|+DWxst -}"<;p> #?X;$}upȖow/&ν'dޒM-3g֛떤$yIEuR ;5ItБfb{g-:6ާ>k0ڹQs.A,1xBU\tBBA= )~3.{ҍPa~OBP:sQS=:Ufs1KɗM @PsygQ')_@\l`|N16fpp3,Y,wZ1~טOnoy'ǗlfCW?Ot=Kz (UQCdPn.<=y]Sd2KZu{d^&P^ qhEAakFQ7><~̈^=QbyAsX Gr9Aժ` ΕMʆ돱, ,)4KݑYZ?0Jd\;|h~ki?ev宰Kv2)i9Jcj~Uivo V޴ʍX~eCkˆƆKڰZn߹ZXkon퀭:h7ΤG+Ș}I]Sfn"u!`*ئ(E3 M N4jnRXMGs/MtbRS{i+-v aJu3Z/WS9ZK]>Ɵյ68N^~i>v$$&x;ό/nTu _pdR7#ƌ]Kqk^:J1)Ǥ5$2 ;ʗ$X[Z(ޜhJ7*%2E叙#zg{hLK,M#ǤOkdւ nnVZĦپ[ȷkV%ʂ:@S>Զ}S~.vm[kl&żVLsHuvM[2/z9ն.S<#y\6 nGfmȬ@xʃEӻeiwXDv [#:bL_hkm[-NٌEZ~emM%Y뛮%Zbth%:9}6xn.^%,uXF>.1^xoUQO7}\1B,53V̒ׄ'Ōzw67Oi6o_rUqp,1qOi#*n;6F(Ny'+ܣcTq333~xh4[ A=,Oc⋢rx{+=.zfGA=SMϒk߉kѥ1|ug\==j=$rR3, xٰU`B!"LQ Jc@({˯F/43ibM6A >A 0Z( zcdI Q&Z+8LTW& aQ<a"*FS)1^T}uМ5`-q'6nh־ ڻO׬%3<h%rܿe :b VY zlN]6p/oyiOc5xrM{>_ؾv5>9Xruʓ3r0rdet|¶Ld_*5hct,g}Wi\<csp=iv6l۽N8E߹ٿ}aq̈́s+Wߚ DٶD^؉>[DPjq\j3th d[)7rhUW]jiK97 X|/>g],pK4YW_ځ/&-.S0+0:AH4bc7o|~۶FyWub^yV{1 o8S8#(緥~w޹jҢ6ĉ"h0PT u) $`]+E:Eq؎W7jD-7(3uŲ{Ql`Y$OCoɊ= ;h>E3g^tPeNB*ʘ!x % ֙Y}IK %epH ZR ́H+!)ʵ * 1B1ˬB`> &)ç & ),~)|H}ؚ"odA[aO:)禓GwLr(yļCgQ#[UN84~c!yzݰҔZ3;zss.FMؾ1 FSI`A 4QByE軼a"OiPSbnByḰXKG`SVЍC/|WM߫ʪkjv! :|uQ(UϜe׷]N#h<;vU{}fjH%X&? Vu~V~j6A'MYvM!GP۹re紳 Dk/s)kq8vI8#x G,c?;_?!syٯ3ηw>w`||tuP~IhhnE/&jy+ٸuTS6ooOoh-Np8ޗU2$u]v$0$ c ߂ST6hBڭw.ci[ҙ-: g*Khq{FA lW?}'MR~<3.([v 'Tgx4JA]ԧ?21:yAc4Qd8`b4Dlu*l.]&' NY ?_EJOG#yn ^TA/UB {dȎU}xX1r_i}~8b*=^]W*s->KdfgQU(s,ZeM\]2)1 $l!?OnG'o~P]h꙾V'E6Fo/q+Zj z*S`OƁ| MUa{o03g}(骪5J8+5OOWU$# +Z J,2Yin>ŖXp 'E!4l񺻜i S(߁TR_ʠ̈́$^ŊMOwޯ,cӊф惞\I`T)&IX3W Sv$Fݸ{e1fHțaw(Q \9u\Ox7NЍ%hۑ\WTT۪˻UmʂjrS-kU-nE*+g]4u,}뮻mfmsMX9UuuUNGQ>+UUG7O(YA!9ې#I%y\gf6)+{?DC<Ukmb~c|T`ᾮ& >E7"B1;/ ʤA$vBfYtجG_))P@ p7:z3hfa2 :v(^&m胍ɛ7Mi(&+;vv&1S {\ر%W[7mnYm}5qoqQˊc^nBq]dZCG6\i9I/`b}ޥ75!parHٰ) |\n@s؇Ӂfs޿jZV+m#~xd Iq|Y;$`kG^i[يFTX *QlN+xDՑ -ML[J ϧ},i.F,2"BGщ0~IeOÖ[咛o}Ta>ľ/oz>E}ʋ `vz%5QlҥH++l6gSÔ|Bh8ڱt}C_Ꮐ֣*=d[™M{WJfw.a44D o*VVA8sP-Ҟ}A" @"Ȥt0+||E4N Łݓ1 9)*YѶQoP@ J2::b?2Hϴ3Y_nx[b¼Y1-Mҧi.#?\!Бck3Fʷ׌8'חed($lٷYS hC:Sli,ɯ䝂Fi$柌tn_=PpT ;(3V{ID{iEZLI sҢc"3[*8#^NG#c`4cCf4q&E:r@B$=DMRI'04 'yP^?RxS^3Ԡj"!psmhg8G41$G>LxNy8.'RԇG@"LC8S1I.uߣBG?> sj6خ0FƆ{17qDXSJRʳR%FL!sM(~l^0av$.XV]Υt:Jt1"GЏeC7aR.#*fE|[rX\pM[\c3`Z*؇qfPW3f!u61SJrmoXQN[1c_.ʁ 6a<K#QGRs7gc7P߀sޝtos02zr {V{n͕{6>]yTЊX(|'׵h%" ׫{i`./Md!]Ђ[x C9w<XcpKCabP#lmПur8/^W`Mfs (=TA{r \X݃f?8:4gdYc O*EuDmO[, fs 6W X6 b%֢Bۇߕ"l?YkZ&|l !\I8 |`&11P/ IK)){@'ZYhv&g @6` wE&yIIJ9DI=Ab̚|/HuD@& 찇NQz^~y @^,, Q `qq__X(.l{^//T8 c#*bi&OaS l"y$&̲Ds7Pu =j\.Qܑ?҆|rz4ʻ}ǃ ufůsfBQBEv^M94$?8<"<.L3jL(L5FVw߽wpf.p©Mnc^8(Uν>n.Key@{SF׆{`| 737KݒpȕHdQ"p(@dY T cTYK KJ+VOwdC$ZѧtHοn w? &iG, 蛙|шD>yA-@K#Lҗ|sĩi@3@gM/<X6t\_ey̺q*+j/2+&Z=9s{] FlƎp7@Ŭ7G/Ð"^9M4%?}e %Ci*fFii&8{L?pG[mXګ`dl'k&cb5ncd`A0g -X RY< zŽU-̞w' v8 jBXV>גk5`Y TTj,OƧ. fء6;*;ZdNywM" 0ԈKՒ4D=#eLpEH6_-8(uwʫ%S$#0zޓd%NQoc[:@~ƹOqS>P 䬕}Ǐ{"f+wm3;a8Zx 9a>n  f|}XϓѸ?Gc"[yggYQ@z䛒K="aU5v:t op I+' /NAO٠#HzK/ ]^z 1Q80)]h" +_TaU8icm<ǥe}d@ųAc`h9NQS&ݫMXKX~ JЃ͠X)=PԯuM7:u&eVb{u+9denWjdSX 6>A8ozt+$5Fv_iN&,>V2 7>#_f 0ZҬ`>&$+H кeH!oڇևhN+?]¿0Ck~\,?0evgφ cuH`s$%C_V@DbQRUͫYA$|E{Z|uaޡU_CSnn "k ǥESʇ8A 2}桫j >M_dd2/?(Jt5XOwNn r>-|<+> z?=y W~><W䯀\0gj[yc~޷CՀCC<9OE2VnK+gj2*j~y\'oޱL+0+1{iuW7*voܨUjFc=|LƦ~߮e˴P9i̫ˉ~d 9yr }uf**?8?'a"U[/͑zyU@ʙpy=K.۳H+9ې3۽RNgQ l]}g+Dd3E d٠C|="猖D$1K/%cio&5OpFrrre+9Sn*YLID##@ fq 패a#'b}=I\̮' Zh|,=:=(T")F`EEVj,Q|FQ_/a| 2rKbIxX^bI&$Jt2(i]NEWؗ,ޥxVcmpF&+a) z؇d=>>1F_9=!~S`;{L|cpn|U^;-.߄m";aX(Ȑ1|YYz_-^U{3u!C+Hn9d>)Ȯ˵UIͧ@E$*}*~ V9_XAW6Я5DT@BlEM+Քd0X v mRfFu%Tc^*-q)tS9岠G)AojYJ}A8I}JJer(Z`Y~IrXimf)~U(0$(@z)p_\zvOw^9;]WU 5c(? z?ܶg'hNrG]ua!z"!`4yp A72E{\ G9 T2 ftBIQ WsxnRP> #G\(:4QSR 7~F9r@ :bQ&eP3RNZD%&J ~2{@1HrX/SV18cYϷw5m4y /T4"9 |O"u(M(֍nb.e1"r% ӆڠgt }*ݶ7DHBlg]rt9m72Z.T 6kuuN^=ŒBaF_lcY@2n6J Ea (z6id0[\IoھfЅ<jW}qG9aM\WWr!(^k=sF-멜 jH NQkpè],/?nMb=Zdy׻pQ/{B5T)~ +0cы[pkM[J%~uD.7Jwuw:l{ٻp=[amEeĉuB=\,UX簙ŀb\CӴq 倢#ҤZa͍ta[;OgxlLl {]WlwGO܏z a5xsbV3wgug=N~%8wo%q1c>(G3J&iJtX2E4} {ѯDVV"oN`4~[b1BM%CvL|"0-m}Fq$Y";(:jш-P=4]W im+wԀvZ9Zی|d涋]v8Uzxc]NnSz묝-'<ShC5j<Ҕ {=.t(F~>WZYfu3 i7QKT h2 SF}R&U*0, 61*ap2Հ::A/J\``AI _/qZΤoޒWz]aГ2KV@o/,hZ[8FCwЗ<O~pz7Q3;{aN jiZC1jvWqӰ^@ub w+#!δƮ2_Y~t$ّI)s";gZA IeߔZ=FaV;vkuvfe[ϳ}{XOV `^B5 5յvvNNyJ>)M`h3ͮsw׈sR7mKWlXu8wNYok׬?޲<;Y(6.x&U8ǹՓ9G̯/!?C#Fl ndB]]yu? y;x m/1HB D_A//Q!;tB!Ll 1q]ee%]/+ 8{k:|KVUY3i$ambAl]Vjoinݮr.xIA->9XhJf3UVa1s8ٗ7RmDC1/Th&Dc5[O`LoFE &_ugKy%:jz%!W`׌Ot\hԆMKMgZ" H{<ܲh䂥3BNOsimM6W˂͢oab x+@] &m 6bZؑʩ;G_^W"Z-FE/.[XGe#^eY3,1h@$NE `u:i4jAy : ~% |8@0mLtJ<,a ZZQ x7YfK'_6=iV;h vo8?i;ZWdu.;9 _H@X~w+*&V݄0ƳG3y&|fsGjlO8vN_Z?dy1BK:87+UZf{R[$Ґ&w(T5!=.MdnEk2M =2Mt,uEFq7-_ h᢯!ZESQ=w"6xoגyyQ;aZ@dԋc?ڭ% <%]C^%=Dhtw 2}Og+a9g5ԸA~ij]iXcǴXmŕc- kU¢HQ .aQiӍ.nz ~LC}SPaa#Tf-V5K-=?QUqxl#_X ,U{/~|ijQ?iځuo'?<]~dlp@`KysMI8pj 22 A8_;ͪKpAu|Q__nNg)!(NiU~[^T VmCg-V祯̌$eEz h΁v@bap([Ӣ~^՘)8oy#km>-<n~"5 > `,g0}`O1k(O1FN/2+lESs_*3 - D[H |$>h^zN R % xN!+ސ_SRCAp4Xetf+XO\7뮋/FähZ, :oEJRb[ hX`l @6)?llGz0=,El#;BcY[7?6s>9=1, ?䟃"zs`<h\Ȥ?,/gyLIhkh6ҋ;^ ׮}|GioH'anCҧvѻKNuu9/ mBrhSڱtb9y97e4O1 ĺb.yp vY&k[j_8ӟ籺\$%i2NC;q*O<$~J>oIzwm"8#e"L :R4pE\t#)_/9^\-}\_r9*GBpH~}>jƊOf/aAl}ع03wWrKDoSB﹄E;N#iQ"H܅ :33#^bZ=.* t7 /lN3/]#ԊYod/2'a-ra|ƙpg+}C2ٌ,KKK<]`mfkẔ&ˆ-NZhn;]-_TDךNjڢnNO]eOȽP4]}iCS]I_%VuY[ 4doD:9a*XP} 3FU. !nS`9^ik3XWG sJAyx4͢}}4WNIk{+B6c[z=kKLw|c\k)[#^ '?'xP:̚wkyݺ^tZ&gX^Z<4\kr|UrH`4͇ >pklw*iBU ~u㪗K:_m-\bl@jGC1`Y*IbQԟ X=G,=i[:[Y3 fȏgY\.۸EC铞|; FS[Z|QЁ> Y`-tSkESI]Sq ` k:/mդ7);psk~&*.(O^ްoPTQ1j}l~e6w댂NèZU@NfIbb0SB4TVq5H `9;Xed$i8p3!3@7f%St3w(7f*ojB(%&4H x*LTB<qJ7;xĒB1u9hԏ0P7@š!Ov)c?pY"h#^ކV!ю@JI+h Xjȏ3n AVpZC/LU:4qaEaa. `M18@ a)p#`DIqhފո>IP!`6N$Or[FY-aMz-JRƤsjh642@ =?4 yioO.6&@ƪ8 g/"*,vh_.@ku-X+v& N8,s{YkUCӂv#tᬘVf(:fi 46/9-ehtGS&T#h*zDlB J@]BZGzղ2Q\g9Fc6i, 2FV;䝎+ ( S@VL)ݛ%NV :aE(B?M'8iѪp|GA5A{z```]wxBaU&$nunw/E!ltg6tF^`r ΀vMs²=j_/ʷNS\ֶBrgUX49m_C{3 SjҚ=&@ h(6UCZEJ`pj&=`ZJBsŌ aL fɤee2[4_6{A\qڊ % k ^qTUJjZlpUHݖymĠWOY\jY`B xqz0 `4 ?1FQKnEF6Ȏz2zKg,zBy|Dk`t鳲T9 vCh hnBӺi~l/tkck6x֮r(rXc7L)D ElP{W(@*M1G3Q_\UܶeIsP( p[Ym\zipG>6o|vݫȃxHwxIJQ$*c|ZBSʳr_ tB[Q́F&FDǦ ݵ>FF^n4ĻHdZg03LE-6tmYQy[n[uZ]k]O-\JXwP4Qg8vi"3bN ~S QK.B.S(Wb d'~LYR4@lm$/kmȕX_51 isQ u Pf`>yIt/&NK4GK at=K2A≫ l6QK'? ݛR:!+ t³BGw$Iz508;6 ob-b!B6 uٳϢ) )egKY@\͍4VB}f$9zx+C#…{ i<AǜJ=żTgյ4kB(gjt7Lp:d<ÈSo^,齺S v5ku&sQ9QcsFlǜ- EЈ`s5DrYuo{wigamj `Ihf܄vSWzM?6YNB&Cm @SY:hk]һ 0b_c␾_]|Ik:dMZ#kv:##^55ZO]ƬNgcD#5XJxb[ZBPCcHTT 9FXe*:~gbmQ(-D6n]]}o #˧QA?W&Md8qWаcۼIS@.js1 /1 Ņ9l\>$6eb/_SfŲ'{n,8>;lO00-q`@6m5 zԡwգ2ӝX㬞VKuycRT9|b $OmkǤ%̣bgDܣ/</_ʷ_}~PDx5(߿|omC٫gߤ俾 F~VYCN$mk/4U9'(h, 6qpiĢU,i8hxk#9dwz-]|VٲY>rI@ڒ\0׷˷D]}JNJ9 W.h,cи H%,g5Px j̭fvU\hH[m\h5՘;;9i6_Q}֢c&;ڢ19-}>WAb .c)In%UD>,/h021:AJ1{+[{q`)~jocGj1iL b*idS!2}5ca2Zldiˊ9KqsTɴ; ;afTU>%+kbGYjQ,VCj)[eP G<\x՞[]jt=~'} 6*#A8ϭT 2 XbKpDZ(׷e!?x2K-_ȥ 5‚Ap ~Uj,{??Z/go~ڒ[ "m'N:La: hx>,jQ 8;Ѡ;_+BU۴}KPkj6uO{{iI= ?s~^X@,h**#Q԰Q3aXHp)Brk$,1J=$_ߥ9$t0us0(LL>(U3')˲X|bk{.$#{b*M 3R*V.+r?Q~{3FO]j\x _b}*JpPh=->"WT>#БZ: a^a"/9$3yɘHy❕;/)aPp-YVtEzk;KKCm?9 iN_u"iS"bPɦ˿ w:W(x 7(cغDdb Q"!24: nH%Ux;R<4~:wCr\32;^q]9;ʉ4q6{;-g*{tGwGUe{{7f'3Nzhw ahb(Qv,(YZPς sLt??0}s9eqr>rtA/;wS@ʇ*]Nr J=RҵԞguH(-]RR$l^ }{n"<̩'T] Gh=:6'cğ0J1HC1TOk0q)}F?H}wÊہ 4i؟qOm'ێj%#=k3:)%ї¾袺sql&{dܑxMJfW8O  %ET O'%_IhN$tϚ"58>sdO2~$3џ~烌VJLLLdRJjˡ\䰼N1=f21]8GЋARyã[f jSGZ3GZ ] &D g`6Ko$XL ZU}xRy$fsw,J6ؐR( K |FKdUX:4ri8Je~YhO!y΢R>zVtUGVw<0v&7TG8VlƢ!;^8OW/&H#LD90((ѓ? a)Am!L<| ئ%\ÌL4⏕`n?`VWkhb+iŚb%8ti5@/th$pK套sGXh%bɻb/u5K:`Ěcbֈ^:Mžrݹ׶gY5e\pA:K#xs"Nt;f dBC 3vDk/U1ղ9GsX-BC<27ǽ M.EguL͋\yY6{ZbuyE5%.wAP3}Snc ez52QYͫx`բ*'/ΗCi~E'`ciE*&9ҞKA# \:+/c)q!r^={pn7\ݱdq;zkڗ,\Ր9N.N[EZ4w^/<4z29愘+GU=0R= 9#}^)trgrt:".^Q~;3ʪrmNEE@~}Pf\tzMբI`/81iSNMPVv<_aO6)hNv9dyXOJA1`SNF 0d 7`z$ 8g0: aї Z\f0< \oqg~1?8`|l"[nb1 MysB'F~ZbvGN u_f͉kE/˚>6D٘HN T1P>GO6g\=WNeqot#uz:JO')%A]4QWCMR& $%j¢ 7Hl%GmPPF @9sBM\+,u`4cNZ#,U̥.aLQ<4I&ũ1@aWN]P9h^^=T0}\$y'ѾY!aED*nĈ\nE*eS4OpD1Kr2B}qj1Ʀ/T 78KYY&駵lWSJ9=4OG:ٝf+\*Z8Nʢ g^@$|%-ϦWHM VLR:/QJh{8s*dXJ5`j[pk&UYbd`l&LSTr@ tڞ){iEڲZw:0Th &!̀\V`);^L1C|]ߢr.-8eu J|W>RNr 8xA#b+<SfLM6e- !d#_ԚQ&qqPBkA(#ZqƗ!Jpl"1ײkIZVp@?-=6Ss,e:3eZ5R9+7N9InۇםXgCSٮ嫳lmu ,3m9zOPEǰB^rF&B^mc r4sͅj\g1H9T1rFBCZ0JPhwan]bյP5ނGnWgkuʥC?■ͮ |@-^%;x>@5eyAU954mƄWbp\!,GhD" 3! 鄛HT\6H8`9LE5tV\){`{ ꔻ@`N{9瞞ݷv5ٛ:WnYu?={%14*v e\{z?gme&b+hP9B{ OQ,mճU[`l\5zHṽu=`zrX ~UӚ gv^5y#Q(2'}CWKs륊O67Րo6kCD&PS㯳XNoQ5\8<On}թNh f ft+x2mS48vו2 )ѻ$:(Z1FbpB2kYcÐQ+Ꮏn#4wݩ/+kOT=#ʶN= ;33Q @&.֯ɗ/oD{ L=aMM=I;eχ,'d(E5^BK1gՀbAtp7oC/Ҳj8QQޢ>”YnPj.$Qlw[Dž@>|rFR=v?$ksH Lk꿿 N \|D gC ]ݭ~wS$cwT<б|"QDRMcjId*Y N5~wQHպAk3`$0 t1B(_%ZUh*\TzR׋PyRя9h`AsdӬb ဟRX| NjhZ; 'h0{*AZ+ehȦ`<r^PHm˄V}TWkO' #gmkOW.QZQ {p=4A6 Ҙ‹B3?#9Db%>OCxu'@<>W8-{j>9أW9.Yz&omC}s1e5\Z|犩] C-`.* 45K}_.]|[NIwzd 6?rp%K끼5kqAgZ 3g!BE RǕ>Cl)I]{km;sZ=-Cs[֯{l|~󪧭[OVƀ#@Ik<I{wKk[V?ZE?oxtϥA E?PR> Tk lR"7(/CmUe@$8} , a[ҳxq^Q:ZRPjVu t%n2f9ر]7~,Un6c6:gѫ +-.?M&fv߱s#zVwq:꙱m۫۷c$_g)O&&\@bd34n'BX̡1R;q"LN,`/mO䔰m8F0V\6&yhM&t3J0`g@5zzX—#Ն1oԠRڮT}V*yp-"D$ן2pԓ1 8G07Oy#xh(> MswLiw:&mH)yi*F)I$qKwN^~2I6JU`>u0P5mh9vyռ%M|Vεz0cQ[} Уcvg-3 盲^Y)Vؿ娢VԳVBa\Α.ї-&<_60¡0z̈B@} 0gI=FS]+(]` \x\J KRqbN38ʔʗ5 f jA3]֚@ZOjM$%RN Y[wzterZlJYV9q* N&[5L[2<2?Kl*}*g?je܏Id?r `^1}/U߃wyE|k4~ NT~WrZ@ څ _(Z VT%ZZ#X>u㲻^Eo2˽T'v <Ր*`cN-FK+P WAv4?JScF'c73 SRӀ\Q>j2;ⱳIܯ3s:,([.edW=s ~=; !FKl*`DǯP 1I𿐁I Ș,a8pc3X)WW`:5KQy7j$uE|pM5* `lh $J6R/#4*8BݺؖWX.m)R3fa-v4+JP%Fvځ'C78-6F @6aY9_,GoЧͳ%{#QkA6>ohͻ㥌d͟_G蓌/tk `RӍ) |:2r ⯿s<ʖ5E躉]]Zm/xƜO XR\roytX Q]$^Ӎiܠ*nR gf5/C7A5 (1Gu@|,J$4 DIIDmx8=9="zcq2wНvȅ GZ55!_u*ZmߴN3^#7$QLZu%!^A I1)91C|GDM߰A7Y݌:֨n;VBNRSq%yo|&5زgt1cL0o1Cٍe^w>½!6jf4K Gzi dߴL]/y rEF~ӛUQ@߉`1qUwb\L(bY%) ZRlҿ˪0-WiUФIS+_!y]+r=`'tv7{}1{\ǃ$ cϜZ; ;usg,kv۸U߻|ozrPQwGb "]lɵ\{h7{‡{8ֻo=`#vN_2}N$sSz̙Z 6t6@fn:6i!T$" W8=(}mZx}}5hKż{8P޾7yƾ7^:8,B7l{8O<Ĥlt jC`)7a9Jl6C/?4gZ+q+IaɅq&g w.yEZEW~q7 K&*/: ;,woܳeCk57nug͵&շ7ڱf}?uP;o>r;N}ztPu]C<֘јsUۧ. o bo?7gW ,I$Z* !N|˲f<s&|헪m:?^KgzQtc+kx>7n鸧H1L"bN65|#.hd `/0뉚]R>[K R;tHdNkVrh*<;?Gj3 d4 ьi1;^Cg&cP SV9y8xqcn蒳ѡϷ]j^ 閪8w<:ml튵ݳGVt*魏7Ϛq0Jg!=B_Sb>7LS*J&o#'q&]+F.O s!qLCDktK||4cLzbU[)3K!wY޶oXq¾é [?b(\5La乖/{s atq/RˀƓ/=V!疕 rR|BDPxt|߳eg)VA"#^A qF$ڻ"db&B%+ձa6U{nm0YoM}4Ғ|y|*I{6b =} 6d1yݰ=s/}qU|gFOS1 j~;q/^u 5eZXnKDkc`LSUxM֔v)#(&:!P UԤ:ˮ>eKqGe6(ABO3cC~QgTh&*F&ak[:V#UJ5.Ugp+* ¢*f=c(ךW1^4٠.QK wƐetC<(a,zB0V<[M>CwUc:y'܃i9}^< C08C\OPE^1sZR5Hvn}}n6mpb1, P ؊ A1eWv5wǽ# h#/_]ps3:u8ifٟ>0[v۶DY4ag "DR 9KvHR]SPŷzJƛ3в ?X§)VF 1Io0O%eœhyw xA;2ބI>gvz _ap^i5ҕp}ϛwJ9ˉlԔV4W5qH >.{C[|_B>N=^[r9^5bUΙvJڂk|߰8NgNJhJ,JA9*rDx0s{P6_WFjpm8Ϛl#)ku?!ḰГ V{=ӓi3a3 `F`vin`n7< 2n7unhC"$T/^BdG#yYl޼rU 5) 嘭C/YZ,[, rͱZhXqE~Djŗ=kqW[Y$9.v1rqj3܈m7%q\br2:.G!D8<%rըרi^`:X+r:]<cr6 yi䜂?DE;x6@KIhu϶aںqV-6 uU;V3 VZG>E ;B41zb_h {b#g¼ p9t(J8!RY'%saX{D_!"8dr50.&ʷӾ6ې9p:X qw3Ϡhu8eD07D{ s&Byfth sȤ'7VT lL./!”.75^FV= .H*^WR֮,_0.iW]ee+ܸ&wo]MP{(aW80=p\qZkք΁w3V]"Kf EJne*kT7*>q{-ȕ*LnwWXr. ҫ.z=b69bX`-Q @w?qmEp_|#KWW%eB3µ{ҷe(K@ږ ˃K{[@ Ǹys0df Q9)8{!p笯k.U }>}kk׳v@՗.q٥W&oE3C^?C?G[۷={b<}aA uip(uiW2JM_+X  ^]"~ǡ@)<MN=BóM-L!mL!]}c@ж\%:%Ko`**|3*]I˰@uXK {(|I|~_ hq% A_&A%D̠ڍޠ-hCxB>Y3=8:Y7bzS8?%,S/ҋ^$(3HݝH $#BL*f@pO UFٳ \@ݟ e EHquAo=SgDQ.b&.{f׋w Z%0.7s??~u?sȊ 'D;FFEl188:UgFͯ_6m 0cYV7wU֜'706L6rh+FZ|T~8155ipMVOKZ۲s6žbD K읁;!f I5k%fpoZNK$p܉7&x8"~}3c@qL4GK2m L5 TNy#4I <1BD,5X ay$yRcTPYLєP ZWfjzA3*SUs(go.KZ!Jڊ&A 0%Έ-B:)NゝKg u\6߸~-o_wSg+ggC.f$]Hx Ghc n@dV`2]zuܸVJ hsUW+w,WD}nOӤ тf}́Rj5NͧyO8<lH.6N;@{ È^x]8!Dh"=eN 23x,> I$,>扵pB]41+RKH)'!G,~%!z}< A &d!t2B &Jd41Q4yAI@6d=c2/c~{V̢4 WwvÑ@|']_41zJqKOtT)j$4+ӎ0KQ1sm|~2k5oZDnHg 1,:/X9c^k4yUzKqjNo6yu4vg(tN')&]tjJC!SF4!H!C3Ą'$O={bj6iA9CN@qz|jP8uMn˦{n2z$aF/K17~;D1cA2=|ɪx\T>m:Vb̗o}Yn[7}_Yj/c 7N\vu؆-5\ƭI~ĩ /,H]>|xq"vJϠ | .(D߼*+੧R\N?hp;$OUUӁzY&7uj^c`+)4U3ұsX&:tq{,8qd>IML]Z EM1V C9eV H꙾rJ XEE ֣o_rUxv|0'5#GTO|x\.PިDK8ćGKgd,Xo3.A 5 $@k37_ c%ByN;IpMhZUTM6 ;$==<RIR5cX6IQ!3;*j n^JCCYzAHElEz@.Y!ᩡlI%Y@Գ2+^D*ԿV" h2-0e򽻴2.tKUr]Uт@@]bҿk5ԥ-:TB nz҈܄ n"(E.VX䫋\I^X+PM2q2$ E)2(O\"DO}Q :Z B"g[?kDQ3[]Ь,eR*7j w킗ƤwFFP^A}AA=pQdrעļڲ33)wgys&p߷W7z0 D{satD ]3jA%S VW-80{WtNBD[|D`- BU0?1DɠXTFvKR8|dO2iMA9 6ز4OIwI~y~4=:"`h0* 64` F)br#!f"G#jS1s2_F8tr}]Fsu9bW&Se!n%~g!a?FD[&NתM8! !P+:lbmVֶ̯sYD󂼊%tH@`u* za-N2T_⾗+ZR>Y-{=MA<ɭ;S;xށ>\23 ['4'͝y6dF[Ha,rTH*OQW/JUZ<֋puBL!LHQXPu%!]Dkաm[")\0$R.w`бsZ"ebEVŸ]ӭ(8&t{+s^7{lyENK5c5*.J`sZϙmW'|/w;.Ѯx`mi3._#,9bnVw~6(b#0֟dD0Tپ0)H -^L*KlD?t0̹Ep|e ,uO =kv g8b#+6B'G|bLzpӓ ʜ%?ϔO31d~rQ|ϻ~!*LGZ<C-%< 2ɴxXnW<{;dmKQU&!h9W!sDߣ7#w_@ '|Ļ_oPF>K *5D"ђb2x8@ Yx ">!~S&JZ4O>ˑ!ټ;֗ eMkd#+MO#@ *)T=/9NW 1ńA)_$7">sZ̔JSrmXē`;o]5'\G] O3`TD.ķҕ'130#nCXoa.& aH% & )!i-{`D6 P fӌxI;RRw%cÆŒN^^n[^Y օ+p [0-XE=J0#,!1@Q8T #~!?؄~<!vCq_&`f} 󆂭t~5d&{ZpNMWd]iV\WBQFID$#N$5L ]qPXTMjVDIh>d]2tx9>>]rհ"0|fڜ ; ۬n-{w*EXP*sǎpj9V8jhJG;H[K·%';VW9hJ wTOoϢ1Ҿvire/g}}?\cS[ڲڧѭ5^sZ18x3N]3L5i'O݅$ #럍 8\|Տ,t' z"`Հ4,{K};?}͍^ge5r[<4LLuB Н/8ԭkGV$ʗ͒<pX֢c \?SP{zmZhH Zx*RkjJZ;oR%UYOVV*__?M̺vvqRc =80jY3}B-Ӎa{- VTD8h{} e9$![N;#gV[eɲ$WȒle٘blf馛N$@BO@R)0KB A84\KliJl}̛7oDNOŦt^'`HT.MҀF -' =I$ݨPWشY0V3V"ར4h=sF1\U l?|U'EX^*ՓbhV |(S16mZy|^v'`K€ ,,,/_>_G_?)egΌ1(; xϯMϯ}Bh* !(0zOެGvJJ<{cy K1qA| ^t@K9 #72e|:?\}c` G0%S вO?\0=C}%76 OuL:{gp1`]LKXcr,w'cAL /?d${mX3x9OC&~ϜbϞ/N W {C{m߾7[5ƼsO?ӧ,\x]!.gRښY:*doarrs3[{VEy>v[ˡoXM@Z! +VxV4Fxanwud<,>8d7[1j:pBZ~f3B5S~VrnV n# ~0,/x聞?^ԙ3e /]wuow$3gbj4ר7!*FyjgQ;9 ?2~~hўtO:)t='݃==CuY4$[:, tBoEԘLoHMe@-5 ,Bo;{q^̍,f4&vphȻv)"< '*|0Nز0[JnEE.W :LD.D8ߵ?ODPI1Wes烏8bavzigk6~[~΍qD >MfU^OM8Ru6.x~jTAkMgzև:j崉aU3iPRtLUxY`(@|R* EDzgcg@ 'uA`2+,vЋć/ DtUwmKbI"et'&d{bDrRINf$U`>[2ThӌNՅk-z*FO<(:sXv7b2uTt\k.7ǻt(?GC߱7N95Ct%igC̉gS`/@χU0>`;lc(|0v0:Җi#!5a *:0,O <R|MYJ)llj*SnE뇀`ODokͨCb +z%089fx1ÆiaPp_?=/!Uz2,lOZt9@`~mnCNNPf.l/IMlLX\ܗKj)Eu%u*bN c 7kg1(  ;p{1-g1@\2t 7D P4-oo')%z29L5)2<:B&):O¤T]EݶK~M [uN9\[F_)6TVpHtKu4ӬV6_WʧU;(+4%ɤfei^oH$S;C!; 竭>N5)D{ʎ! K} rљyVЌw1Hde;N \DFChWvπw;ty9rӹp \;>#~`)ahZbizYjq;~\lЛS +rjBkoPl )^NA]'ޮh}f"c.!ok岭o<PB{?L'Eԗ D =]*.gJŶ}Bot&& e\E^׭{/NK޽DX9#^4xC_ jK"wCjM{.(,ր+MsQD QcTP^/4y5@^+/'w4} Zsũ"`W% yGIpC0:E?kݺYɎ+ U"5U@SxW.0pKaX}:]zInN6C̦߾uQ'|䘔UVєN=?v7 9l&mONb{#pG^]/ SJVN\*T-@vfVO!h4RhtLaH\d,Ӏ"F'aKDPo(z p=cwd7b]Z8p`"2X:"ŋ׃'H-2s֯{/Ǿh{ThrĐ!CT0b/b  Ԝ[9>(^0atvav؀ńQ1So4Vx E Nln=˜zxϒŒ;ؼѤ$. )_$1(}5$ӊEP۔&~F̩8ޫ`(1E(ѻ&G"T¹|b,i((18W0w#BSGXK{_gS.ф6g?{i֛뷛⥶v=vlTRa dځӖȔ \v힁UU7V͋ *5}$2uC0w҇AåήCvELSY>{4&~MjF %ۇt_O\',}%l)h z%ۺZyIF]݂Շ_'7~U) <2N(;h-Pq]aV%?yyNM َy[{[h1r#}B+:>̮ׅ N " ܖ7Aq0t#I$O*}~TwDE 7^ ٝ#D(%M*6X>$@p^ ") zAG% b>>T^}; OǘQ;c-/ ^#7wVt s&G'*-#צQ%^M'pc"-W+*m9zLԎp힒{ɑ]}}(b0};ax]t[)Q@]gД vÉ7g㮆'fToJfȬ"Rۚ˫DŽ* S?u=95jU!9F9j.4p|P{wΔ"Nz(mW`yخ`ŰKf?~Fm(ȑX0sr6D#P2 ='HBL"-0j0dNG̏rF=/tu?"Ju*/^]2Q.Uԩ\|OYw/^p9ߡ%Ԟv%( -FʋkBeNk=vuP37g, }QįK L Z>:MN⏆/"[I}II}{R…wu R_KnxRFmX`HS]}Gŝ-g(KqAM"qpn 8o|5Rg1:?M N 1a%O0<;,A[w* X '!(=i}&?#^$ ^2)m4sDE|gPb2Dq>n.*?W̸x(Ļ8sDSD<\"53PsA907@R Fq 1xodYХ&]bnʁdbzya(rj~}@8  >>4J.]RRŨ 2*F A6r]eH}KK۔JҡObƆL G hN'%+Sx̒jU,V/}2D5NwY8G,JeAh*c幔‚wޡ.0{DxSfѢ2w$F-:WY\D,oIyךnNI ,i)m#YǪjU-3Y$v%%3ZpV򒲗.#cNf.5 d$C},KSצIX$fX͊DM^uVJ0Rs0=t@kToRZ$bX*eVEWϕ5T0Tnkޑ 7&$2iyThF7ubqey#lR*[)IMk\a#u[N^3VqאnL(v\fTGQI7p=3?קw(snYISMg''gaFmL*1JJ2U,O}}]&k9-Di-%}jS*0XXWb%cRLR)$MNK,NcإUdfI$DĢ*$R fLMMuLձK7)lJehZ%V1՛ ڒS.u4elJ=RSj>rlڮb4%ǎ-Y ]#,EJ ؈]?Sgz-K=:b+ 4A|hFCR("F'ch)= EjjR7﫧W*JoJL2lXBa ar:ZcůM?'-V xn ]mPQY 5eS0 Ư_?^:w.rMP ToܞL"ʛ_b^GS7eZUd lX>ͧAGM1 0Bǖc(B0lEguK Ppl G»vh[!A9v qo9b\#}v@04> B4ZQ)?ݘ:>uX vn(zHE~Jńs(7Pz Xx@?n;E)҃4EJACuJyc>,FuUiZ: ^{P?cYոOBk3Xt5PTErׁn*~)pD M0;bMA폨p[인ւ 4]Lvky4a.YB\UE/5lbK2#M%PJvWθnpk'`@ɴ`iʌPW8Ġl%t %ʌSQ~Vpj*$w^#G1i6}"vw"bzrMZښ]].?+;z##Jz~:vvۻ$31~eݹ+tJG;I mWyؤqk*dƜ^VX_<:7''wtq}aYa#TH 3:#CyVZWjU֕?;AY|.d7R]&ODh<*z@ i݉AwNA%L @vI0c*T.39R[VJЩ,՜bM1WR ߫>EƉN, `õ>U8z/{23Yh확b^āpQ{/RX_߲d8Ȭ6e;зk }B rfq HˠfŬD ζ%,Ĭm ?sx\j\WWUqCS~mlY3M>qs3`ػoSL4.\剶jlu[I77쵥S4m323ȧꑳlg@ ͢؏1W%`T;ω ExCt#8*g30Gx{!w>滢xi$plɣ` ;f7kAfyh3>>GU4VO-HM֌oK<')m? %{[2p;>κK>e}}ڸ0D2`TIHnP(A!6Ƣ2hk}U3Yެșt#d}s|'s|\P_ξGփ$į8;BhQ",Ƙ{ 5k'ZUָߚ8~)A^R--.fGWԋZGE*.FzӘP.$-J}&\VTTnv?a/'n-{4yʐ`ʡ5e9<4eU斕dT U6?AX&튨Řf5?MA6eb$d`t%Qp3`sb3NnMSpU5G [6CnqҀ 0y"U(tK\SR*1S$AW~gSvtQR[ %ZԛgXo3c(|:c(sVl` nHz*_~uzP5X"ݫ~P]#jDy%Kj $-v!F~32ܪQ5`.|ap>nw/y#?X##Jw5( Nx4슩qV^=~R'Ҫe,ҧXM}jJ-)T:אw3rT'x}scFy7k V0\SM(2@u:-YzǮS8W[4;0qƷr6SBIXqLt&t&#M G#&t ڠ470݆IpX2M LuwDo2` %\7߳g ^mlmW)sX7ao`BfbnQ1J)?FT7ѣ;C6XV}EBq:ٗzhW*S/'W I~F,앀 Ud A:ɫ+z:b4'Ŵ؉szkܮ.08q/8kYHE>QvŋgO~aժ bx.쨽'TY&7(w^;[Ս$\0w/6p'">@'w.XHZɋ(jXyc\X{'Dy>z-zxy>xm˔ۜS^O]Ђ{E&``w)+ySL>cua=$+h)V,7RH֯a=U<35@fF9Ni@6݅LDQs-cr졂 z W^׏~чS25$Z}݊#q~d{VF^ުԚYl&'Jk~O V{W|šG&$d]8/vDj&7xҤU떦ʐ3 {W(1O-T}2k@NH:e i|},Nj$}^\X,_+Vr{-sv7d/zkuxC499/%Vϕ4] j3=/#TQcϱͫHBw _Ee^f[џ3 76N3w\"R1v/}}"O{?1 E>9|.mV 40 lK҇k|2A?g`f.}WF\[XQ:J1D~NN*(|C^&@Gj1:;kN\ 0ƅfӨp?$0oGG߽0Cは/zF4X~dIE[.9љwI` 샧'ab$~+/m`.- Qb'͛"+6XJ̓n+fA0H+l_sʴ!-TdؿOdɜiLjNqJɘeO;;%G'o;"),=K ][ g|Mo<< 4/c遷xj~ܱja>txkla^3qniiЗ1MɎH͌و KQj1$ag2g#K|!yeDQLxX{i4{{VNl Ѩr|_IG$iu,N?TW߂bt*xAutAՏ7Ѐ \84dه&I~Xsul0eZ~rsUJkG )2S~mVyn#~chVA+c%YY Z!W1tA1y51+AE8ICo.V3[ '1;Sv2Q:pؽ{/fb/vܽ1l^:fy%6?a2Gy8rmngô0.ׂ~XnjcpD1N70%p{ UWܥ҄oS(آ  v-6=C=s"n"^D͐8'ݿ ڊEBTPAEU!DwUIOep$FZo|놪'܈s!}q"TPd(le+ VW^DlYs:ahI`XkUq&HIR& 5 R r#F-M>/?}DLeJ{L':y!=lgwKsC83jwV˩}. 'v cU Q)I{W-Ly}0W_훰S%  YIV١gD7;;ZX4vhH;n}5>J13U!P3xd}?1mډwER`*A 36?M~hIxY= 28Lq,6h=΅Pt{k0f7?rFR8`vG<ؔk TzgL+VaLwp # &ɼS,Y~>o~3b!wcE. k,)O>e 1z<gT%5" V*1'_nFBQX !I'P!q`3QltStb‚ /<;ɖ?&%yD,eOp8jb> @Tᄊcη歿Zyw~?zEgZsq snݴŖ'2;͹Gz,>#QQ?_bNɆӍivnjj~w`GS^`=O3cM#!ȧtxۄ~.k:D!,茮?:At$6p9*> bi([nϠA#鰺Ih*~[Dqt珓j`my. 7e5/6u_T BXa ?-t :Ufr4RJJoE--j#髳,*v>&$Q?㰗.;Q ]'׬=f͚S' 3rxW˯f8{)VLo0床|`;& ޱ~Riqì^OMNTuG:I.AR(_Mo=pNtMj7#~s&#K( =q0:]pN8DG^>HY4׻]F# ÷,FhLuO'zܴ%*cvvd Elg:1hr35kgFatu~ˆm>џz9qLI)U<gx _ifmљ `.l8 sdg鶍yXWx6ݴ e}ư_("/[0:ӻއ6: l6%P,4 P8u,:N/6Ƿ7.Aߎgd 6{r0x؋LF"\b6(%D"`Fvpg!b` _ J*eK83|q(ԦJ>WR!&)A|r*2H8%ݠJe[|MojP?C[8ra93{cbqo5&0 4%eٳw<<` [S7߇?CӞ̶{"yPn)hAcWzZ*yb.urܚ[%XqᏣ605n'Ny'ND~ ^%s%藂]ML cBuJDO_D~_8;U\W#'soMgC=P9NWǐu0-ת׶Nnk9tz9MF̍("QIS?E@!&O">H@!}Z%? ? qx6rD.L0"*r 8"GO5E7 9?Е)Aֆu)~Q}@l Lrz\'I,\zӷyMڞ0`V+έxFGO_C?ҭm 2h0~|lClq槇L?dnOuD`mptGDVf롷G3H >F`h㖋mpM6\.f/ђE8 :|12ؑ92^ ԍ5k F?pA Иwd< w=6J@l^}SCGmr f%[ϧgi\ [x,ރ u *Ժ0: |WlrJi6}w ,i2ִi& ׈y|[I0C^ymr򑯎i&"Hm$ۖOvyxt)^F( buroQ i7c#RsMav))fDjL(sb&[sdTb1s_7牀:U_UX /ϭXqX@ Й[FAQJq#?)ߺ|V}+-H6aGtSxYq~ㅰVjhW#r#1!w48Q{n/i=( U-zFnU5˖gRqw`c4gej+6C9 ein33Ѭ1[wc⭽ҿˏ^.L\xK1ms\rGU5^4Z!Oѷzh3Φwyeƹ;R=}&z(6It} |ZieݲNˇdKۊ8'slj 9I!R jp%p%HZ޶(hʎҾ~ߗX;;<<4kA`6KTV2^4"?K/AnyܵE!JbG*/JZX?3ҹO;OCBp`D8or[Lf5~V;>QqJD>C\K7]A-aoy@] " ;vsHH'&!zXX5gԞNpCMN14^4xF~Fe21)^p?#fJZRԙ1]顕j3R%i5!̐?B{WJ-sva{> Zi9O?W'+ӼQ J0]zLBVQ= > J}FS*)ƉFZ5˨Vj p4]!n sDs43Q:pӞ# 'N%;g_= .2I_Y-,VH>{LBg6ep;kJW"u.#| ]H(PڰFtoQ,VXSTfAápuN\[;olBMEhZة>g 6 %ؑY$h0ggyX$^TDVÅ b$RrIh;,J>`i9 P*NJ}׌.GBei:㳙CB01Z[-OL|9uG̘1G\~;]kLCSYbz ɪ:QRnNH_X>҇BB),l}U1ƙ[ jV]Ҥ]/?ϝ8i ~%I7モl4Ub5˨5Q7Sߣ;{ȅ0N|v4-]$eq2\Ni%bd.3]@8m@n|7\9+إ29e9?G-n@@RHTlI[RV w=bCA9MVꐗ#bPƝ &bf.A@c5Iؚ =>,/eM|ဌb7dI~ЌӦ^@5p|n`LZAŦ*C}d.y<5PU=kR,5D«2 +g/ G32 S}r .qnƬ(^*pٍ9=\<,Q?"|p)+Fkrxo>.|4߅Ad )S:ƦI|*Έ qGs6;^O~+r.uD 뻐%WCAQTیuրW3egչ+HD))0:&p L Nt~NmyFyOs[ `\ky;h_e0@.ӿx9? f`/Z^}WBHRo7z`@Q4ΆбLwl_7^=t=SUZ7HGqgEGJ}9RcjB=)Ĝl #=v~xqvwoDk(k. @@ºk!}!HZ;wg_8}Vܯpt>׵>x4G;r>p<8"d4\:~FB/PGbfUޓJi8ۆݹuM5|35.axnoX0f1K4?szRG|{GgjCB*:m6H}Wu{ˁ6֒B-yC=Jۼ;&[8ի4|rq^9pH/U`mP<=cxOAX^kC]MIh'P?LqAC`S6ħR_h fA tL2jXBZ`͘piDlJALxfˮѺԘUА1 3CO9Ka|{۾Tz%E"˫T*7Cxvi2Vd9'a=zˣVIxF:x- i !p;m/Yp|x(~B%W~FA)1S~?E4=KR0j*^FR0*9GHg PR ArX㲁xk ҽ쯎[q-E%C!P L4"zڲ\̛_L#e"քDWTSҁP)ǥ `Uo~گ9,O`g ^O&WK50<0Ħ]oGp + *HEL b5pdL_RӥJ`wDcCl  n%-u'w8_iJqXl0kD>%K>gg^Қ(a 󬬔H΂l#*~)e,3L],.p`v:W62|]ţ^J+qXrJŰ/ab `ݰZ|tyֵB׭Tupm_%mzcNE(OD}˹ 8%ٛ /VaMr8NJ ,3R,w_V^Xk a'VZ,CL{TpU"2vh{^scS*1b#OQCmxf.{@(*Fz孷A6/Vfp'wG`)gI %[ ?hN}Do.ۇ̡cܴm}J'cy *2u=/6uX8hk lleTŏP7h:xXhxQƯKh :a׈~RF% 6.x0Fsu.VltOa.`Epv:VvqdE&;HpYs`Pk3$7LXʎ&x9ݾJR35\zMphg>0[Ġ[JNMyFYԏO fNȼ믨Zwb!;;kԜ9_]Բ?RpD,V]Zn 6yA;SkWi` @]!teKm&N̈ tpT ڄ?D!~mR+u& Z9"O "FBM&A J&PDzP_N"ce`:PK'  `. c YDDg:1JjrQU yH"6_zH7c aO2is+szDm^uK~ I\J lذSG8ӧQW}{Jޠ9Q-ry!pF}FKA P}%#2mW2cMK~??X͈gf63F{/CxU~hx_D0 D/(g[~=jGօFtZ.;NX8)˞93DkkpHα6A #}w{{Nޚ@gDvYv,[a%ģ5 ;nPs;sZ(xpѐ+ uG4߇s>=%s8Vo~Q:Ot?5'f=tgt%_4-9 \GpOϒE7s0HuLcW@BT]nyKfm-1V|u+fÏ'76g#wv7 /F)ˇ/Nw'gH\Ǩ^_9]>3OPh4\JnxIA4]:2p97i4TzYSFMa,qXKAJ9%+dDFرDBFt(LF_2du"ၝE9*D\5A5ЌoaZwmۛF^wLꛆScX6K+5gffgUߛvKsn1Qδƚ*L'S]+ ~)WOK%W '-3 YP- VhU<įV-"aO_*}3nȽ]\g=tr ?|[s*Z9 7ݶwͥp|xbhd}-P*vsӋ+I4dʢ|ciS;<|ʊ}帤F9}4d^v dy֨A2 -d8ߒS80DeDo[Ā=9io4gpìi5߾L^d)LX&s7tsX5KIՃ<7seajEo9'F^1# L9>kGYܝf^LMR_gSduvmySgOOgr[SFL8JFQx u6ʆez>z7Ʊ1ɰ]5CքяҡLؤMf)7&\ Cʓ'kyD=X!.MXuutpsر^oS*qT8l{%zT TOmػj:D.[>*VRnBU~Q{ڞy&W(Z ɮvk: (R,P( 5\T:%E5 k2U::fgR޳!Гd8m/St=Z `I;BVUafte 0)/p!cUJƧ7ŀ=d!]3iu+*4ƀ3s$\(Rg EmpX7yLCZQgin^Rvzi{U{|*͖::+wiEHaWq9UuOQQ=>mLi\@WicUu`̶V^eL?UITch|58rTVRmSTQ+Ř~cՎ%p"覫!VS`D/\d߄[ Vy!UEd…[[Fص¨ACV<4m,i)C;wf\Nr+K\ ֊lmN}W͠޸0Ӯra#2uSǼT!z؊?n+ks~WV_Ww>ҁɅRSI?;|Tɢqj5"#k U++A14rFty+INy0MYcXpdW>q++Zbmbilˊ]m`A Z^Lޒ|Xb"ku~pt8Bfx>[&cf0{ ]3 ̟y~&H3P|m][`7TGYrfn,kfx/oK_ *{t@2#g=/{Lg5S?(lK?òc!_03 γ%  ɰRO׎- Sm r;< ɪ)1Xɫl ̊%"a  ΘG՞v'bXZȝ܉l fm"&}GPX9{ΰ&ߐRasfW1^|q4t؍Dӻ'w'wTREdji}GU7c..}!.zsEmj1ݐ=0Z,SqK+J,q&ʹV )A{07Ы.B,=1ydq޼΅mIƣ*? 2|*0VB'G!$hBVa{(HeRzq#.Ob{o2E+RGqaaalZRJ-[~[ٗV-Tl"C",zw0gѬJƩ7+fg<Džo*pRGoҟ&%c^~[$[⑩.wػ<Gwąu  aDZ.n&EuFC~L_3ϐv5䙾/\! ̫zBkhy8! GJR^ό*_4>Sk6 A \6nLz#UCر-Wwa HII? 2Pj&%v sh1[M ћr%݈$wHd~A7ś? WaºG~*|M^nYRo^zzj=#[ۀC^WbHRo0 sdy46~ZC7{Ɨsݳǟn 8d]IU֝{6NJgnys]7,m9F7 |s湟3i/峹7fe 6ʏz&1>+aK;i c*kپm۞Ρѕs0HzBτ =gWVOR>#9~Vs#y nIUMR<}H$ո6K.^P}M̓XO__ ,!0rI]^H@Ld\LӤ)5mbIV-ZP+B35p%oNਟqoD 6q+uVhYᔅёBVӊ*b Kh.8̲6_^ddyԠԘ]B"ђ),i37ܿM:_i~X@,-Ѭ,}pa<2 8<|{ޝʰ~Ő;,j^-@d.=4cj u V%]8})Ϸ$'*K X1l8HH̛J41E!gy,U=U=M5账zGV!=G?l^3B_nevMIYdkۖg5:ñlfpl\C l;>mJ_$\?7wj=zŊq }Lx {oFQ.j.ZM]ImnvQ{eW`el|cΑJJbLsIR0)- ;UM*C*.T]< z]ʗu@VޗSޕ53J'Grd ),ꁪaWwiְ] "Fs-aאbJ:Dr1I'.J ]-[|:j6"yFvju/cYx|P/Aޡ\(.]VH!O6qrqGvX?$K q3̘&丣߹|d:dnI&.BZzb@ &[1㹞~_OG>բh^Q|w4]`]w`増s^toǿLψu)VBlNux$V 6}yqc<$^GVM)$Ue_y[ń$`xK)J_Sn@6zD霘1-=F]` P{7>0!Mzm)?7?yi XyUUêVl9U5Qy,4(/5\}?o&,{w)3]:~@}.m@k&^I'%ŏqi%O(5LA١zjq ~q U@JX g[_REJrbrֿ|v e4LECލf ?_^r9-R7~'rfna@S4S`@4z9 Me`(x$ [vrQ p AW_v.L1@!Cd/;)̡X?x{;T?Vvavՠ8mrqFߦt>_A?P5(~N{'\:o_\zʬc<% }[J5<< _yR6$kj~FLtɦqNDrÄ{ x!E:0r D8ҡhWaY[pq.pQrFv: :&!=QΊPXǠ&e":آ}0hԺA oU{6:+D޷32-my,ͿH[>`PPtQZ8f :gA QV*)Bȃ&1^o)* kVy,Z/XV˸EJ?mN+gjGlч| }kC_s&`4l-B!W;ZmH5ƿ+qJ(l9@ gQY9O2]:jXڠUPRbTyq[T|,1%g2WZBbhuaI,{bA1٪DP놜z|$X>tBwʞNjaNn6~, KڠuXh}y=HЂh$ATgwLa엪͏1axr Jt<&5Q)`6/4M%gooj, Z cMZpLh֩gGdWa75Ł"֨VFm :jYhڴi6͛q4eMݰn1Bt\T1Ux;$1HkhbĄЏH 1S[.s Kګd:IJ, ~~=8pӬٻddx &%b(Ns ZFsE=Xx-9FTx ʡ6usJnԬ xO*(^Ffа4JH۷}wI@-mR硢',(1&^D +1/J_i^F"5P0c#ۜzw/]=s@+ܳ<4-#Hw4fEEixk!+T- m5_Vq&[A)fӆ5,(>,_mW` Ђv9t͛ Eos84*O{lӧo LjF/x^ý^&SP8>A&::ف V7C3!D6d!X|y:E_%7gk]&TmcVO#P_3k*"_/o>| 1r'X>ҧ/%Hyӳ>Zj4һT@hnu/~LyCaaU4Wi@~dyGZqi$ݥ9pC@&sr<>K1ѿK;JD,~t&@84 -9Z.n}:Εz#dh! ǥkO[:!]Y) tdOrrvP2+2*TEڄUjPBwKΘ =|Ǥ<3n魠*ڿfMhsX>WgON'$u7tAұAqh͌̇D0'*&40< BXFFV}oq|߻Gg^äkשGNrJws`ϏUL:J^ ck@ }ߓM$?t^"YSN[yļ+]p}LFY>HCAqpyM?x MzA >Dm7r)y蒾V͍l1ύ"wm_\s ɬ?=OMfR5UC ԫ{GeHa[y =sD RUW%Rd1'=uR(/_ 9ַܺI "%;0ݎb+MG`p\ {?sX΁RKV7M3y> sh)wdc yt\̌m7x5~ngl4mp‰Ѩ!k ԣIdBG4CBs5COYbjo۰8=vMa./lnMqfJ,ias2`0:{Y),fs~vAt T12?+E1VhcO=B@U Xy$c9h hׂU ׇL_CAkHq> yJ--?I'<TJ#2v$d1h0 Y!}=nbJ0dN݊Tl_9V9Jkm{\n.ӡ>AB0fsfX |,c:k;u>CvFގsZLWT xc`d```a<=|EdՓg_(ETu=O'{?Law]+tw^nD.}kzՇ 쯍U}ɩo9:΋;FШO;XSB[xe#2UoاC??✼ 9Xz{w> O3E*De[=픖wE:seI5oÞR݇G=SBPs|W+Ⱥ }[0l]1V~ٴFoMr;'O^gLyhol7/ӌrq3}=vCCHF=ǡv @ilr.r4CүVldV¬L[eN0WԿoϓiosWwz:zQYY3RyK >?+#B|Jzj6]@UD-Pv>n໌u;WOMeFYг\l@*!u?'m '18 >wCÚ\fMc}~5lmo,.}Yr[Kf\yBGyoC[ |EE@ \}d<z/ |x{TgN.iBdb!3iMe$׹4M='4ri!e}Nҿ1H6dHAT8T* HGJ%K^ 2 RYHYRyr*УBTq"(*ѯTDSTuT-Iz jpE/N:R]ɕW gKnl7wSGG{oxDJ=é =Ż7,5w0@N386C&9^5;J-H~i >j^+zOPu//wR+=q v@GSLLgr _:KຈLzK[w˘Yu:sGXK˟Qt8;*3 s3=6(T~G77L4YCٜ9񜋮z]%q  ϖ1TeWe}(=drwsoWse \迎$H} nEc2pϘoKS }woZ{/o?9w*z % އaa/G|wywᘋɀu}є<m󐼇O~p)>kyg{ü,Ǜuβ(MxjAƿݤMk`RADݴ7?MhbW6;I&avk_@+@Uo'cBMH7g<dE ,p?-QvZ^SJr /gp}oyw/xGY:wLƜle>[.1[.bq- uyזK輵mwfyx~bbЇ1BL IvQ K^Ik&LŽD0fb`0(JfRMdDI/DK1Z`*tMƬ d.do<UڨUڴMr;gzpXmk'F}FUF]=j;௲Ki"bD.xB$dy&_jQ>º\ՒO-9"ZmWj\DI滎SidIΩ+Щ})dG»2']ZJZrl$;2VznM"L4R+_ ek=~^^8D9yWy1E& ϋx}WtȲuUb'X̔ؖ,O`ݶ5- 0̏1}̰Ls~N$ݾ}oW))L?nJ].ucԭRn4d 90 X ư l l [ְ `{v`gv`w`o1P `8`8VL ¡pGp p'p pgp Pzj4Fj-hClX ]p}p5C!D0· B.KR .+J kZF n[V n;N {^AxGQx 'Ix gYxEx ^WUx3 o;.x7 !0 $| > "_/W5:| ߂ow=>~?O39~ _o~?Ÿ+ ¿/0bp XaQ\qčpc7psĭpk߄v=;N3n;{^7c XAMN~?Ax0p qgP< #H< cX<D<):xgxX:6 [ڸ`袇kCpqq-x^x^Wx^x^7xތxގwxލxޏ>>O>>/f| ߆ow;]n|߇Ca| ?ŏI~? E|_ƯWku~w{}?ƟOgso ?/W?_JQ2i TaQZFihcڄ6hsڂhkچDv=@;N3Bn;A{^7CST!LM~?@At0BhifP:#H:cX:D:NST:N3L:Φs\ydQ$E-jSlZM]rG}rɣ5S@!E4G@Χ B.KR.+JkZFn[Vn;N{^AzGQz'IzgYzEz^WcAv#(ot?StZ~Ayb: nN/vj DUϝS۫|\QHn vr3ot<ϦjCҾk5| lIuw9ba G10竖N^O踍nXouܾ sTSM!ˮnSV\ShKѳn~mX=[ڡ؍bZGNXv3Y_sT+N _L:>WGAhӲo{ NwG[VCɩrs#_e=oNgy5YVS&ufLD T^n5iY|^~Hˡgs;'MI#I3>+7A:p}=[|y-N*y.orJqQYX;(Ck8>koqDWpd5E=qunk 6t$z"cÎ|١(S cJ)0.Geɔq:-# $ Y=f f-YVtyXKhQ]ԗH e_`~(5TAFֱQijhr&|`DC {nA9YH61G&Ύm/% iźAJcO wtCŗ^l4b&ψ8WV/g|%%Y]%Ԯ{M>ɏ63Y 8Tcx7V.M\7r8G 6CpWlЋcS\Ha /r6z#^`ޑ5,Q!^ߴ]&h#*ZL>K,GҧK\w>5]-2䖠qRs#?Xb9Vq-ˎJK! <= "4sύ=qWv/TKkXedI$9GM7\@&SJ5H⁚+C%)RVU)&E}Uc|8L h,]M hR@dVui(KQIf)EU )4>&<и+RRb\kӵJ+ $J+ $0, ʂ( gu!в1tmZ&akEX+V4tV !6dZC@ 2dȐ0a zhL@fϻ?PUTTPUT*4US^nHKhĄ EE|Q_TEE|QĤ &!L bnb܊BLa)$EYU)&)K2!0XKb C,a IIHJ3bC` 1!f0 3bC` _FYeA!0ʂ" DzC7DzC7DzC7*0!!!!!!! LA)S,z.sK"!UAT!"!"!"!"!"!"!"!"1)DC"JU۴41kƙ")қ:& ]2XbB 3Kooooooooof)Uzu]uYzRWzB׃VzJӺlROi);y4ҼSwJNi);y4ҼSWҴּӚwZNki;y5ּӚwZNkiͫckIҌѼ3WGؒ;yg4Ѽ3wFhY;yg5ռwVΊS&5&դtVj python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff20000644000175000017500000054466414502137725026375 0ustar carstencarstenwOF2ɴ ENf`$f  `w6$< @ =o 9[wuA΅/H"tvؾ%I?mSV@%%)yP)խގ! מʇc4+;g䋸gKNPqWmuD "炐{bJ$SaZ}& C @ J.t%}rEW15V5Z\]@0]F}C)5*oJFZf.,ЄOxJx %< r/cʦ@]{0+0;8h:TZ^]:狎jP) BVrcšQ6FI5zX7>P#810dj8ƹX_=F0n+P&`b{C Cn#ƴIziܔmFǡ͋n,rHM(6EJxGh[fa"BsHM"iٔB*qáp9R4nǢڎhBt(6, jv4jnֲ0;R$@IR~l(n Z??*!mΒ`&%}V1;`~A_Y M6Zt3 HI"1HɡVzx8VTy;qC)<"Vۗ Sz 4h9#/o܆PVYVt 'LLiJfFyu{g~ (T~2ʱSxKMJ*)fJ=̔mT:F?4)p䐺SB'DTIi|`>6=8~H)o¬/ T3R;PLyZh3zӳX{<}x|wyb7Zh2@-g;p^pT+ !](_ExKNL4D .TLKyF,[^{%gt}xV]AWLioc %l7a,UUW܆,md/ZO.jXQLj-t[ V;Bv}YϮhEH7w6JNp N`)ngIp%y^}|)y) Cjrz2k4 A`kt5rظh5_->ԟ oUq TrW6"E;]D|&b̮>EhzHa+2{[8H<"ȓ Qh%uǨɠ57lxʎ;!3RpGHLZӽ8?[μ$(@hSgolm1?aav8'>oβ }Y 0kp4=POȧ33)@Oר4/_aARzF@z|YنUsO<ﮥ=2R -hvtfM/;D㰔8r\U>?!ƅJ9ZLOZ瞾iJ`^c $ x2-;=K O߈KomM^4pớ _xV,n+%nI݂ݥȧ"jeMkVڟ _Ӷ8Dm&5X%Ȯr2g롍$KVNĜ|B)>g^]̧ _w!g(M7Eतwц[)R)0 ) PBG(A1ż{P&%=JKS<3wLڻnMX^)oS/7?ol}I,vVw{l= NJ@׾ǜ5l@ΚmN?9x yG_ *\V,6Rخ֎Ke<3}=W\%(~Vp:@MrkZ@jr0R5|{E%w#z| #rѭ_]tPRZ*G. ] ^9X4X)}+sffL >hR6a5v+ѐc*c M}=9)sú-k-Ƣ"#i}zfyVM54T)4 1203PMӽcfgL o)b *hRz&m\3%w@!XZvw0'Kv71Zݥ_$~tVd>TP<agٍxN'!cAMtK-!Us#_4\0W2mKOx&i0X&쁨f`DW]q\sqGDE1tߕ?(܁L/6k:) 䎅 ϗ* Lj2]f 5{@A8 =8(J`E`A&㏆1hf#z p(((t:NEQEQEQEQEQnp`MQMӴBEQE `? R!л~`MǘWmQlBEtَ7KGal۷ ,,fGa҄e1J$Ɨa6lo{a{!b0u76tņʌ@ZQ@$[ o0Z(7po}B$[QU ͔#lٝYJ`kp : ZxȞ5zMuZ,'8O," @(rp32Jp(_ұm]H:=`sTJE^&0vAn3O.\U0_GS* l\ ܝ9|?}퓼Lr骺.$RC28;lB1([*[?e=yF^#JFҮ|ش>s&EK!޳ r b V@ɵL8[ tj l((((((Fh4FGGGGGGѣ!kGT\(c+0o HĕI$I/SB#  p?;:=?3ĊR*b*T&~AP-&+Q ]8ijqM,֜E MJ Pl6a`bc~%&EJS:(%ns\@_mw̮,0uhA Wk}wd~8t̸:}fв. %@9X^:g..4*wk T(b=8hkoÖrFia o -1vFƍpmgM:NbD cV/YHoF%f՜b;|O%kD2e(mά#L)OxU?G(9" OYQSU㝢صnT E/ ,R]t3CsɝOS*%@$jKj :Pa'a4/Hhw{?gh-6zR /2W\r2l;,䷵O94GLޝM+T+t(ryD1)rYmOlA84#CKN_CuVU{F0@@cYS{}^iC.,|DF[T𰅃TBRJ@Q?M:P} ;%*]_Ke %kڥ@TW|?FC^mi qډhm$ϋUp-9IyIO{0A!I$WC!E9ɴYSW[#JW7G` l?_3S;It퀮q󆎖=<<.i+?X h/ھo-$pIsq9|I=&F AP~E=CGGdSK%JpQkޜ7EMiGYҫlfhE=y!%ĦM_BuPN_( B񋟪귪jR fc%)76!٬kMn8X,f(j ɣ7~pm$,Pijv^$y- SHS& ;J&FD*f -hiȺ1bWW׮&rߢ($ۍ>&Q$=W)Rz"F,>r>F9}T4 !SP`/]e^M͝2 2HY7t-MJ_G3&bd"Mw&,R0eN[߲zyД,Bd ی(Ck7wnTBge,[I>"ful߮%bkg섫TiS&P2qNVVO֙eLqY$VeY}>^#MPž_l `-`.SuYC2gPDN}I~UcF:bٶY&$%𣩟.X_ifVZ}41 k'7o {[Xs QpȂJM}ݸk2a8X;P&[%K16KT$?S{iޞ  l Gފ'([pC zR$'."w]gjE<7Eܕ/7&7n) j=*\-o@l?ZG恄TTϛa\UVP,Ʀۗ*ZkjڒKVT2ÝD>̡{ "11+ʪW~S=c1 ѡ6wG Yb#Ez!RIZck1uϔ ݴDDx1aK+~@Dp AD_)uwco_OV| !"!̉^MIWҿaga+[!zDwNtsJ&c0+Bӽ2D3Gn?^_uKYBUakB!Si(t3W&yY|Ϣ^rQ5ַcTDӹoZ#"FkZkG) }ߙ{߳ڈF(eԘ R=*bmx F<4)UBa1f1ssi^ɿ9ZkEĈwSK$.+1CPd+(or7/]`a61={ؤw1伾*f{(@7tx~mE N+ XdWu,TToeJxTa hN6e.Yν{1BLQ!KPa+>!>vA]'gSPBQ1ƥrq# OEiIZ(fܱ٣` 8+uAJT[ІA"Hf2'{U3&qXRȦ*老zaټ;V92LѶg l\M~j7%ڮ+-%f񓏑A^or`];P{f>_?MfJ-*:t*[ҊL|bbqERsC燻ǟc_s~3kJsRGO;g?wƹci~l_k7}3Xy*xmc}Xڙ`4KYĂw –^7)E=Tll8/f/E>[vWAQU+BuB!fmЎ`_ >SpJ1b$H!=]لMoe?lo׳#ٙ5n)36%ÕCkڵա#DUsRics9Va .O04QUӍٞN2JU)n.{[_+ೈro:9+ 1E5$@$)TQf|2 dTv2νV }-& '&*lWZxWkzsM*sd ( B%HerRhuz%rBU #(Ͱ/U Ӳ!70 !2ÆxAI Fj;+(:ira $+Uk:{i+:AG 'o) /d\ Fgmcx~8:9Rf / /JjC&q!6q2 ` #( /Jjt #($E3, teE<^n- :@0b8#)a9^opJ,jlm]DX'ful%Dԡ4 QĒ(:#L1_ 9V<ᐴpނ%a Ja',uSwdYZP, Lt. R.Ŋ_VJqk/Ƿ3VN7stx&GAcTPN[ FV100dew5v0b3. |OA(h*5,YMD yXv<\S= .` ?2Tn-G)y%{`];"~Y-ԇP; o7Wei h4jJ!@bI4syz:Ӫԏm}A2_W|V{կD 5?8ڵv) A1p8]Ͱ/n-aU8B30IP$ "J, J q  MYFŪe \( b^#Ic WlvSsv6rh;& Je؈8CfԕrFΙXҭHjph7b=97O%ͺX\8rTX*A6iMzD)Z/$I|2)HֈYI (9]nYQ5קeB^@0b8#)a9^oKG$+z-" 3]z81U%#rQS 51ɪ0݇E$LBwNYnz`mAY Zٓ)[BH5bo-42vz=8fDʸg<"v(`bu&Z6I6ǭ)nQB{s7]eg&muxŋEEd> GFCG@`bi{7Zϊdm#2PJb `خjb詃*riS\" 'f( u^fP N ~Ѻ?|wl`#~n'S4ƌ֏-+HU4;V,X~4 VmC+W?yϐ˳pQƆ.qEIS%Bt(6ȨwkMWhr $?{'ڿej1LkdPjQG&2y7}V>doVeWaYF6iw!{b/KfyKF9ΛM7ɶ)N'cXiDvn9l|fSSt42&mGSȅ;`地u%Ij|ϋ9G5*tmEG&e图m gK˵ /Aᕝ&ѯC_;$]77hKQ)Q8n"o%!?iJJ^XCT(.&X@Lb=P\@6ФUG轠Znh R (>2I% I@PwJgҴ%rzM?L!YU>fJ'%vER) p+,tà2ydC`V"Pp -VT>bwar@DBL,/n흇qI %<0~hYO %9XE2 Ƒ:L:73–2^emldP'r'FK6V<#2*/T $ lpʄ^!mѮCGpb4[qWf/`X0DIʅ4̺EЋY0B@½\HBI Wq fbomdyRy+@G bbQ `zY6V[[v* @%]yD_2*VXE-alKo PiJqȗǕX) OeU(XEwTU4[6F QUӍ3QJ6DIVT-w} 7^TBZ`@ "L `py|ڵ)O[mvD(JU5Z`/3гnYQ5w?oo6-+tôl~b_!)JjfmaPf sAV AV;inl#&꼀΀r mo 9"G\H((K -+WፓRXU.AK[s3#29, e'r*g,RMY9NQQqҨ2#x?; ZIN(3α2+}|njˀA*maNȞ02y#+hV%ay"956O{P3JIE ٸTͦC7 +om4+ 53?9ҁ@YɮPഗ2|@ =Pb'/5!p(r+Twդ^X}ie+tpGm3 gS~W rxu$3MnSPq5ΗDF߲cRU+AEW ' Jr,iShyY]_˶-hD@) rq~ %\uzc`Qolbj9Yf}@Ñ %/'SWUNc,^s "ӤLܱ/R/Iͼ-9$E3, $+ev`9oݳk$vY6.hϯnO_Gg!Hfr> YQBn Y@ ev\s3ރOmΖn$ص:kL`2 '\*Fˑm^jWku73iX՝t#`Y0lrx/_2Ӳ6mQ)yUB}0O#?_EG0? zt}P$HerH2o-V#vGr 'Hf\(ɊKʸU'[~ FbNxb8AR4r JH(Ɋ ,0ێa:V;N{X9" y"cY yH?_~a_aMg+YQDC,q()T3*]^SvOmB/t{h':3|ZNNPC4Ix2oq]G0aM!:gmO |3,7R27< 0Md$̔>@B!B!D"IEI$H$I$I`[hO($I2yƊXDX g-up~5vD[}3׮,ԓt4rvZDoi~+P\ O$2ryE\B*a5;@7/̴ LnBa1qc PRNMC/a^EdBYV..<\QV|U$׹n<{W>8#[?YT%9;K^m|@)}#~]\8@'d Fg0YlEbI@0 )as $+NC/"L(Bf131ᔁC6pOQ" AGNͰ/5 Jja "L(zY=*]$rrA y Bj\Lxz:vz!S܀1c&*gşR:, jH(w 1,R{Vx}p5BRk $qaqɸD0PUUUU_곶V MH߿lL.Lgy|HXLlNXy VK Q9Rswn%DJ EnRx+s$OY;肢=XH!8DIN: =#rAe͓bSg'gW71ѱg#3s K~NPitpy|P$TO&W(UjVSav}axo Mgbm,Ɖ.(`raD($E3, $+jp%YQ50&qq=o1KjcIKT@&)?,@*ģ$^Ͱ芮0ՙ~e#w}:$,>nW{UQ']ۓ]\܇*d Fg0YlEbIvdrRhDw~xOp QZVQU XaBW\MiOr Vpȑ}2%he/r9 -yYY=SFKG]޽"#& zﶥ,ڒʔWKa\p0@hw7I+(p_•E]QӞ*nLݷv:mQ+uy(iTigFDIVTM7L`A ev\XXW;p}i"nK Z*5i MffhD0Q8Xנ8Ae6ERic1R[smai9FS"H(2=k -Wa5t8l`xIL5'Jz©\ گ6q^dzfB wl/?!^$I)gu&p )a9^%YQ50-}7 gq-ϜRRqz QWNͰ/DQU XaBw V)BTbP`@  $JTG.m+kux<.U<0CK}r.: r1CX3k, [-})Av QYv)%&T-b% ]@HB46ulI 6葸ת(\T|0#g obZM<<<<<<<)N "hxAdEtô RfYeYeYeYeYeY1eևz%ְ},GB>,q_^zz[^ ?]4-1$rV*RTf 45巶0s,f-5P~P(AB^o+/BVjP3Q~-ikwQ7 X(ǣp)ja]sěWs _3IuJ{yFx7=#MWEIVTM7LEaBwx5 zuAxerQ P);lʅKi5_i=#7RvrO9|/IxEZ/Y}S7w?Y9L(q~~WWɁ)%:8 ┒pNzҭ`c?w`QU XaBb|YU KJ;O_&_ U"),0fΠ+L0uɛQ9`O-{,N$S|JBrP o9p]M:z1NY3kG<9  4K(e?sG-&yI} _JrG_aNUy FbNj#($E3, $+jM p%YQ50&qq=1ħSj)}+ 𚂨qDfXIN쓃\C-Ʋ0! Gs[3.7+t}9JW 8h(e ưdEDH0P+4ЛɜE͏ㆧ#DXLL,nQP33=&HGE@%FHA'!MBj}g0Z͢ɡȧ.(eJe6TR6[ۇs ,\Hc`VEOYЧMQQ.B#t3Os2Zb00;_`D^)z222Rю2̑y_AEkH@/t BِH-M.0w{w{v.Pκ݅p4.HR ~(`{[>^ٞ{Lxn&})ܑ߸y ϊ׻1!ofӃmʣ}.VowѓYY7곢{`a߇7!ujG|R-릾_>0_c hyɑA  w6*&\mf"m?U|3]ljbjNW]>WjJN[5v@wQ|DʃpξJvZQR< 9O9!p]]_+#*Gw(1Xfɠs9+z"F مh~渃ܲz Y Ծq N~[xY,WYP4Yvb ~\mGOa,TKRFb7$3]_(b2ĈO=Y ` {Tg<'=  Ot7nx0s5. +y3(?%?`qz◎nڂ=a+øqyA^q+#FFG.N鐻w e *Kgw稫Gq]w9̎oi`9{0؍O96<4ect ^>@U!pjiٖ($4qxq(""kD BLIB"AJ J.F2WcwY8XC ]I%_ѹ1d -XkDž=!}!$aK8b$#B5Rʔoa7YhQ6`l%=YV'V ᔂ5}W5ÜwZfnO߸s hl.WΒ4f &J1ەvYe̳B?uˬ~z׹!T3x-m8s>348T B (Gckg=ܔ,= QHhe24 1B YNシ'T7Tȱݥ~FL| ΍qwtS -)l؉=PHGAuiDȾS¤2+BAI9s+Ai<*voh81RK:^MLF̙_ /ʴ5)˥szeT*kim=zs{}XNIq1U3O(Wk.܌'}Vsb؀ߠtXk NuZ2 0o0w-pһtpT&UfdxeN1LaYRח U= 2jɩSS5 .#OR2J }4'Es[6`yBғ^L =-zć!W=P 5˩F}Pn.a%BtQl),< \  - $r6H}УGjz ' ]:!d6H)( -('30E ۼ}X{+_*Cd[%Mr+XJvAIa ?xEV,XsRz4EP[u"Y$xE>Q G^Ƣ`Dդqn臓(\S'wĭn3IPRr<""WN*#:2R{ >[p[gCvZ_vv/-?? VAdx("#430NLfu.6Y3Gsc3Qǂ?jN8Źxd08R?̌Iol^740333<[>^5 h(*MFk`G9;)sź}>[>QAimdrKv=0)Y|}C4!uh%_XJSYY~P/ў5ȟvp`L l.M8e/]N )ttF; ɑ<*F3(>,;C[9$Їѐ_UfZز8rjZUBb"N @$2Phfd[[NgQ-`Bl:*E2㦮f3c 8\_ QbT&W(UjV72h7tI r ɊZp0 ]fX  eIV7?3Q5ZB(ɊDuBa)1! ¬u!Zwzq̾c=ߋK lfnҷxk߱p3FK@4mS5Q`h|0\1X&^P2/٤3t\jZI[ĂCaK$YQO?\6Pyݗj>N'蕳a @FĤdy7_< Pw?T&ƼGlM fekhx$+EpJ) x'"/ _ܝuY^^ުWH} =/\ih1LbT꾟6yyz} Ew!B~~I/;A8 ް~L3mL,nƌ֦Mm>j>, sNfƹq^B!B!B!еsEQޢ(^ zJJ)e12p|{R؉₆ꬦ-VSu9,trC)KKo-ߖycN8mS>G@O.n 8zSlwu+%6Gu뮷#Ec~V5 S!$+5;mw=. ,CotM0.Ne.dyP/e:ʩ**j78+F>Lh$?4+L]^Q!Qd Z4 fq 7<%q$JJEv\Rr6&UPuڰhQ*jw'ë߯\AVW vK~_8b7݃%ϥnU&¿ojh r\d=1a9+s(xjD?JCVB$+`b&d @S( dsI*HI9P"4><eAlϡ}(#PE=3:חshz=}N~Hd{YCe=ڜvxvSߡJTGB;ƣ\UrLɟKY:rS͗x\g`+6}9D`8Gz x,@FP 'Hn(U^OTA سD%#Q.Ɋ16M[`)^%YF M}Q8mBs}bx˴l‚ܨ~nJA P(Ɋϥ5g+ E3,yAdfw)KiNqB(NPsr JV3NͰ/Ux}aZ2GrI$I$I#F`4b4\ S߲m qn^Qif0rlAQi(^czGK-0k_;#lȷ-{/~ES#7jz O1`#s.{L>XE-~5jAxkbA0bwNͰ/nHB_aDIVTM7~PюB; .RK;gh'kW+j2 go`efʫ;-7 )SFJk٦Y8|*pivIZgw~T׊e XaBY̽\ W"MLY1gA`-mآpfG]q2 :c9lB'hNKRސ\vxX Ð_4}zWqaAT\"„O]'HK2BRk:hkr0[RyIVZp:0 ~0yxA n@-TZ2$+j7_m;VSrYmvD(CoF?GHfXDrˊy>0-۟>)wWZQDQ'& Q}W2IW*w &mo x#* +BRQڑՊ^uw yM R_oPL[B0##r7Ƿ"f})ʋWo@n=|M;vdawT;4y L0C)d't2ө)um]uDžT4`fp,;2vޢ`i,뤉BT,&wXYh{sOLxѺm?v`\i:9#9j0 T&m[[Cy+I\QPY iF —ۯ(OΖ+؊H!++G**ʩF5ƅx o6'jfSZ4-f}b PZZ€8Rl֌~kz1 FoM&8&tpmSYۉ6yu8\kqn'g7T׼1G$<( BMN'=yC$r2d+u֒8i%{|qr*/ʏC-GjH—oec`:@c&xXsҬ0k̴n'lTK%ܲ͢Od;@Zgr>|r༬B +$RXb%$+Rr`Ļ& 4[6F QUӍ+I^Ve+")3+Zd0쪟# Jj!e3p$a @ $WZ0#ȯ*Ī\X:F5RJl #ITA FL,lŘؔӫ0Z3dhgyј yb8/*,ȷ 39,1 %S}틟n(b QuD$+& „2n;Ezּ"F#숓 mN{=h 8bh<Ex $}JJOO bd|N !|ȶJqȩ Ȭq)+XXb%$+CS.gH^MMhXm($E3, $+%^_ߐڨ(`h5s52[5j1 JjQy٬3#R_i9$K+%%] ǘR8E)W)g9uU 5jUzy /Ay'|%*DDB0b-F& Td  A$Tt(8xAY*iSp{|g'bV V!$&Q\#„2~ q=^NWՄ{3nw?LekX`l OPD%R\T5Z`l f+@Yj, J]!p –^-m$dEunѐ`p6b,\<(9]nYQ uO ? TC)Zp^e4 ]{ 3a7m -k!eL[J-(2]"Sj9^l"d#fG0shdNͰ_zQU ࠧj,V"fX(ɊS: =P~P0hkQgvF=G 'HfXDrˊy>0-[/ #(w AR4r ꏆY=(%YQZ= :00,&ҿYg@ߒA3̨7615 ˬYc-2"`@0b8BLBXR)&0 'HfrQU &q!_zx`4-Vt03A1 )a9^%YQW?6:AdEtDPmn_vuL7k⭥؏qm^}#6l 8`d*܂P~Mxo+fAuNZqHR܇LxbX+6su'{a1 Sʺʽțl ;P 'HfXDIVTM7G8gيm`h٪MaW`(ɊFڝ_iN?2(XTwR7Y9 g(ۧ* $FY3*rqX&e|GI_"1J *B )º{V`ޚ^(馊uњvwAy-nL^{ ~s^G,ǯ+ʮ$61aՖdtQ4r Jja}Pˁ` tΰ/:IVTh2[mvS]3 ztiƑY8iAR4#np/p={)YQFk3n&rq?jNe;_Fb gňEO%Q΁2vA,?/&ߓQk(y tD鈈`i24mtC.q\Hv*#jpAe6_ "V Ў3-, %!*&.(yŹB80H*\L{` +Hy .6GNp3&?ع\t8HunܥJUuQ nڅ=8Sƕ6r]U_ BpWo) 1[:Zby|{+/{K1?<Iʏ&7L BfDbƮȅTJkbA0bwNͰ/n\c+a躮inhai2 0uXgCc*KGW>jۅGʴK~XqH|,WKuO8CcيBV^")Tq̳2vd(qy|"<. S̮fw-+ [ŵ4i#(QU *M&s~԰#0dEa~pQrܲjfeqE3, NUo0V\Ig6;`X"LxAd*yV7_} 睪AO LPkt6v&ٕ_&4[2I W/JjC&q!6qoswPi/JVHB0b8AR4r JN[VTirPFP 't$E3, "5vRTPU0DZQ 5A Qt< {rQSXYF %$+TYU@*x*@j`@1 )a$++.{D2.ַusoLfaqj{~ޕ|%A d$=`U_mb9 UE'1fn|`"L+<[Q8)p)BcIop2YOxx h2:/A&' @FP ')a9^%-+eC@B01r $YQlNua90Q[ՠ T=ݤ* Ųr@H%R\mLf+MhX!A1 )aBdQU0 1@`p3IEIVJk`pBGR4r I0fP%YQ  eYD*!((!bC3 3ǒDbV1 ﶄ&0ԑA6@.Ҕ] phxAdEtctO(\!LYDַs 7(uDDDDD{}n0j-)\P@a$J)6߹R暹Ƕm*^u7ܯ"|ptH6f.Sk^̜k D*W(rAIfXDrˊi $!#(Ͱ/:IVTh2[mvSsE6;`X"LxAdFz3>qC LPkt6vJ/o-PzA1 )aBrQU0 E!A1/mffffff63)o eqh$I?6ҟ{͞ PJ)RJ).%____q{P{ƿt 3ϫX뺎?_q]ǎwU[ktMuBչw{segfoO%~<P JH$D"H$D"H$0ђZ[A3DX'fݿ</;:Ր`N/v\"a *GzIHWҠP(J!"3uLu͇2az͈CnRY90qYfoL3뻉(((ݺw0\e1n_ .`A$I$I$IA`ff@@$^{֗b-E%"I$n@wI$Ezhۧ[~hN$/[  P6#mrKVugrMFBd-˅l8 ,?a'->r@ZJV܁ %wnZ Q+0\c288vK$IcJ4k ™9® =Ceya6 p41o00 (b㡆9ZcWy)mjb/_Y0i4`\,ehYfFQ5m`5Sj#D" )MiNJ^Gg`3Jp>L$)8Dv\99{Xr{00l/On8%$+\lK*ܫR5A9f92ʼ>=q fV[f+5HeTr !]W_9@aɟLEbTR@ e\Hus{'_PH~}>y2Y^]HNb\ő ReUURZkxRe7A R9rsAVZ [.2/K tVמNNy7"r<@v 9E"G*jR E ez/HIqIθ½ڮ& -'`ptQ4r JjaޯX+G-U,˲f|fdYey|qČB05.H4pJwQ'Ɋ7MfpjU;yyH˳38AN^)D*+9[])m@FP 'HfXе(Ɋn DPƅTX!A18篅Q# #(:H-%Q;Kl@|(;)%!K>Ji Jb;g($;CBdĭĉD\>DzO*XwOff 5!j"Uk, PsGYY1$1a#9pޕ):JßDX-"9E]@"-ѝ,8oiJ9ER;vlde~ҍ8]YC}S E1c1c1j5&\Hu`( !A*+*F,%^cTP5# Fg=$$H eUB #(  JN[VTM7Lˮ_5|隰#ANyA .%5V2n}"Z])m@ZhdA1 )ayY@FP '(t #($E3, teE<^n-g pᄎhxA1M$+V딭  eYuYTBD zAF Kk9P|kEV|M -S 񸱳+ ۅpRt,yGO=tzs 3Ec[dٮ&{K5~x[U4Hl,@Hj4gbfaecq 1 kU-o"b-3~ش&'Se+-eetkPue* R -kCg-"u^G)fbbXTAf׭HTy_|ИQU};MKO1|V u:\;a⒑/rq4]Iza6f0Z|7R. _;xY ȱs1z)F0B0b8AR4r0;qeE<^nϾZ"XA%f=7P;ߣ҂<8hZ޿aiRlT&3TRW5*9]owϾX(z6i¿X_]HI@h4 = *z񂨓dE&fw85W=l̝{%CAR4#FIAtôl懳귽k;0㹣cAFL(owUaU`r>j +HiwNB$H?4X!N ƸxF\%QA ճL[' 4N0WfFIiZV\5?O[3$eHL憌L=ɒ5wbRU2m۔%:O!ä)ꩋ+* lm = Z<}#|s]$9N Oa;o4m`*[!J4Պ)4⫽,!;V^ S2WZ^G h1f=ߌqhA#x3!e){d+ .0:5# ಈo07bh{-nr3Pt-()E7XF mo{ԅKh<7k  SΥ͞khg!k886<[[ru]8qe*nD he!N$h&qk0ш"VAKQjኵ\X{-:o^2X3xvˎ4iD.8?q3uO'?^=_,ʏ=:4ڔ}XֈȊ"bDINQ9u2y%U/K 0̨7615 ˬYc-]"Xګf(8|u)WPW醠 ;0ט88zo$ޭD)Mv!3,17p̍-* Ɏqx3uwbݱXww,OSMs< ӘfBj﵂t'9*qr}O!A1L &H,)5)+*F[l =( '($E3, $+jMp%YQ50&qq4_f}놈QM,w|oHGhBˀ]d,w(t fd* sݯ ;YUv~x[^֨ɟhkVIM_BX"!ʼMhXmph͵\%YQ5pz aBXl =@FP 'HfXDIVԚ(Ɋ ,0ێek;a\@3ht'KKɞM;'m/J@FP 'S4:x&4[6F1 )a,cD~[tҎ9/eͥKN)oGAR&@כ,?6ѯ7 8xFcʥ>&,$5>?)kPˑԏi oђY%H^fl%a8ax1$,jz381)(nxl'+qJ Onkl,KCy,s\.s8--˲,k$.D42_5aqq)R2rf4Ӗp:qJM>y(7x?z5{J֚X@f*8_ޔÔ;ff X9 ?dX?Îmȇy.lPnQ@zFGTfB,m=8̽lB<#'_~H%Tk]:xÑקE; !MF՗wܪʀ#`Ͷ^c\YuF OFә\ ; |]갗PQ븙|Ae!t딹zRRL*EÊ}ܜ>(Dx, y9rٜ9*6gDz%{Fo#~A?㘟 G.//=$G_ +˴?0ьx2ھg;sy4wQo,fՒ}| ]ٵ,۬݇uxx7^RÀm\SwP8թ8CtLN5񰖨Q d,vShe ,{$4GῊ2'0!>[(gvɄ: !r]%a5K&'E>RB9P5R1Ĵ&duDƩ.[;*WդWɣU+iQË!Q}:_iR\cLGdYr /|eKQ\0$F]mom![e.?8B\tq1&$?%ea"]t2$9 9R4>6fS_=hXv_CZRz& wpjcvTNǷyrUX.k-)|>G}W/iQ|J"U{je'(e >NM ]h&Eg^ɵY1vf:.s L *J(X\קc l;xO&ȧF3Ð˕ʏlt`k]IGݟ{n$蠑xh`(, 3DmkNz%%K 6$HUB"H! t ڛJc'-pk RJhJ>*rKc/ޏ#ߍB+)+9DE_p1_ oKN*pF=ba.faͶeکwY/ULYXt^,s2 T71<\gn=6ar.d.4S 2 v: I6^j0YGMYmqa8ꭷ*4sH Sig0Y|sŰÝYnB:hz!3,y1h@`25C/ e9ձUv&z (T E-3:es^ϟP5[{~dgG1{8(yY̹i!R}Y?SyZLԐ@醶Lm!R hG3|p7<5"DDLK}+W4m5N7֪+X9̤bKːys9=#bgTL}4 $3D"(01 8b52$)E*Eʤ2oa#*#sL>E}ơztOgtY^?ekB V}e&yidjɒYJ_rD` 0عZf2ϗ[5lRud\}K6ĕ#Zhm[Sms{h҉‹}c،p'ea0 XP05,c/Ш>&M (XXދ`0XPQ,#>Q\M~aˀLhe1?I4jDrjc":bFe8JJ{u~~QTCaԯ.e1 > ";H; @sY!F6bYvbUDf```xl(QOC P,׉SpЮ58PsMkwzC/m8!c EAn*t)]q]W_G11@Ͳf9: WY!;;8h0cCgd("δ*0"Hglp8"h/ILLLE{솯i,wq>.~ +202 Q?D*Kg]Dy4:\GR,9A h` КVJg_GĚ\LB-AvViaϭ//ӯM22}.iafs|Bk_U,̻SHI3iNqcu1cƌ %gW%acx6 //9tjRll$7ŹwNG:g+qG9Km*!Iȍg@jۜNR峖cloϫ#w(]nT4| z?CYTbHԀ~zNa p1Bޞ:EbnIȨxPy9R!6Cf(e1$j@^=WZQ\a]/x)=$t_C$ aN|pDńYhD3F`O'ݛGbm|O=UJbeR,&] ~5{a~\v0 UgCt>bУˠrй& Dxבv >[ܣW!Y79}IcO/蘒jB+tXPxN*wՒlVPzBYskAtɜjיxA ބIVO,S@* GE@GVC+KFl)GR~]ܱ<^cW]b6Dg&-FAC|<`7 r+Lp:SU6mϴm'~׾AטTRW%ϗ"+7f~[ž~_3Q' jBڑ K4l8H9buj`uF dW z7mPOߡB7%ߑp; KWBύ4 wjSzi.Ǿ& CTN8.fXDIVTM7q.}s,s $%:l9"07x hxAdŧU1 YQ5@ ' wU40,Wa ) \ х˺tq|PD%R\T5Z`>44[6.@q2 Z cʸJ_$Yrʓ;f_@ 7aҔzi uB5`pQrܲvc:bnLJނd"B*B-Gx9$I$ TUoRg; QrܲjO7LVw|ٗ3_r Ce'y԰jՈĒaʳˈ3426ސ>gͦک䩧LVWw]a:۩<-g \<+8{KMȊҥJ $_)]*5 q +S34YtTO+%}ln~YTO$U=n{w@r#}`'w5ȸ~s|s\!$^s+?mB§S`ǠBյMuKyS +(!8xA*4 '4q_BYChZ# D*RW (=⸔a`*껀gf !7ɌIb-?>v:u 63p~8(Lp{M#'MZCmڑt$ 塋i&!1It?!3xQ AUu4TC_ (" !A1L & thXmNͰ/n8]n>7{lǶڞD K u4pnQ_k۞ZثK[&vN]-n8]nDPƅTXųd%($oQO e 2[:L͹Ka;g>נii{ol{ت7Q{qoGSlIL^I}n Kr%cqǝVLN,,9C%0'ܚrJ3XBL)ر9,|߷GM R*"lF$YQvpr'x%O&e>,yG ~.NQQ QDH2Ի챵jObmgĕYe?KnM*G;hXm($5ð/nH"_XQU32|T uHǚ Qs^AQ)1fV,l#TGH_r<"Peʕ'_BEC:sBQ/fӄ W5Z)#`f A /< ݘ`phxa}:qeE<^n Qx҄@0! ˙JuKmvR#(B6Y/J1R`j}Y!%l(#######MI$D i0P(dάnL4F:dooR0#####㨔"70va|P0y݇Ð(g`dbfar3^-MG,aB/TQa3'| q 2fheUU """""rgtxs-p ) W_ TU" Cۜ 70[o!հ? g2< #(Ͱ/U Ӳr[w[6;`X"LxAdYq|6֯*G~12``V$r9${-W2ܻ@wdd@SAix(1$+ח,w.n"""""ύpUd\?2e6c]*%[]u68SBd:/f+$dTKF3!2X&l:k $#+gɍ&d8 >S7EdFXݩa"$Fr"?^ ;㴝G&*i?mK;;3rdhΜ2y_en[_p ̮͈ZP5lU>}b)HpA?^2!'Rm&Z qC i%kF7i'45芆 b7s2O6,z5Gdri13NUɄ5ɬϊ [w8(s(p(%G?p;>nB\+w u#p(~ 4qb)O3’X`YQq_~#'NGkx/$6l1O)~'έepv~FtoI5)/lI(!.'~EF:)4kօt35%hz{xt S g e](:|[{l?OY3цuۀ67Zfe;(i?g?%Rq/GD]1()TgDNݻ|3uvjt"g\j5{>TM6bm۱*`./ĒJ JN/Me{X=xpٱ8'#oC#($E3, $+j-(Ɋ ,0ێ:\upD~Dą_b^sq$Fx2B !8^R?ngQ$9aYC8! t J0:.I :<6&դ@`s Rmy6f֜-o>XxFbˑoJs8Iqm56brQw3>ƱJeļ pn4oB]hGU< <^H@.1 FUi\ 6upY>B?-o3g٘(wYS#ȴ\XjJN+0̢ J+jpGYcҮG~dj%ԅ<Qѭ/7f# fB]mkJPEEՍ/ٷH>U4IͬúWJ;}}˷.wP{\,iҜ%<(*>fX2V7`BbUN$RjA'Dl7w, vBSF dR>Ic n_ύ gTӸ`0e@2+p(v1#QV@&#P>yd1O=H$"NK!-`Ok9`1FTMZY.u %YQ5α5c?gm/k9VŘ:DZJޖJ yg$0-[.JUձ I $} 'PeG#8|##hV`R5fEӳ̭5m>TsmVZU:\U>씰3w `8=B}V:0tYj3_ RUiH՛m`;O> J!V0b8ARPO[_ %RR()m@j`xb}6&. Jjt= „2.$2vX"Kmx(gʂT1; NͰ/5zAdEtDPm7hhE;OSG]Z:Ľ%PYeOa[(;dZZ-Z"){`!it-(YR(wW_{d^rv߽k{$qJldM|$r=1s=xctG7ÕwVRl/+.T wrTbV!I.F:E:)y=s uʓjRNC)k5UzT}1R5ld*QS!jCI=J$|26@iR%`>A$~\ཥ +SPJsr/QݙXx@?ࣥXk̦ϱ&?Au{!)7ɟNېQgYҦ2B͉k+](ީ2zx!zjOB Ϭ;]~Hp|¤QOaOT]䉩 ӠuLj1&(GUcm./v2g񰧗qowony"pz㓑tn9l}qdg.tr L{@.PӍd1)((vKi3 "hxAdEtô:VNΖ$ ܢ@$+& „2n;er,Xk{u%{`r:.ݐ9Er4:j>s7[ܪ!hy:h7}Q=zyAxWжEo)@3KO32+bj"HF&fV6"iAFP 'S4:bs<@(Kli'DI (Ɋic7w@}O(}c1DAkgyO.cRTs_k݅Ou5pܗ (#sMT+v}̽w;Up? 1"v"+t9ÌzcS̱56ٲu BZFa <רAش9 $oO^E |~?~R\"eZ.sg+ ޕ-Uyu{?_ir[X 1c9ے׋q;oc+_w/ bt+6o=_͇ Ttꊍ'ow1ǿ3h6 gUrL-@CzwIv33Û>gjLdئ 6Z!yxR#A>n7@C7S#<>d ~_JHZ9ɮLQk,SNC2.`Py9~0p]6E_gS P|#f86WN]୶8p\o6`#=>LG}}z;,˓˓G-2LI߾mt#F|JoS=CNWDѤ4Z_Q cAfXAz) ft)t|6H"]ExYJ[K/M FA?[ߜ6gi}^I[,ĸ[J9! b[ eDȄyi?vVr3ԣYII|J %'qsa?<=3O'(y'U,2&KY9`98G5 ؈ %>CXS6٠!قzn"A aHwSa{[^~γ Z^ֱO"41U;&OBk܇̑_r:M w?c97~'P9o/LQfgVJ'YK#/oi 2ksUB 8tUSz/xȬt9īU!fd'i:E- Y5Xf d p(d6ƆLSD%""EBaB!BE=e؀q5M~N3gzd:grkRj_n jv/?UcvT33͔峀–ԱjFCrxl{27'NȖSI?mi{GCpxRь3g/l2 u"72(L1ŮW|u'`YʈGkݩ&2.Tdp 'U$'ʯy4G~m6HHOkxqriC}V2/r5q6as!*ö {l&`ۆd2Qy'H_?Dri!pl/{#ZQm=sSf/AQZ;0+S,2e7Rfm,͖6Qպ.@:n._ UL&fOFt^<5zwdj~1 y#ǃ\DKKwg|3}Ls#PwAJlTGV'_?D"˪2˭ 2)RO3AEQyN]x§q&xN/VA6 HNQ#?q3w3]kÐs C" >_KĻ^۲Uu<`S/7!\㾌8%XΙs\Ɲir$͖lS ⇙ٙ]!mx CN\0h3 ¿eʫl[e`3%󸔻2 wc/h iwOpΎG.,#S{2^#Gar&{_ÜI6oo.ޠ"l {#VnG}QAY;]<ﭻ6Yflӷ;%p!E43,OHw0kI3b;K%j-zcM/sT'";K_U#=͡z$>l 2uLE1E}˟]8b8!.0W8n2Pd!٠(Tn#<>yKI;(IT~ouڨ%Ef݁b8AR4r Jj1QP~w RȒ*Ofzrm2W* o.@g/b XaBÅPO;t>d:sλ0{$Du%o\o/OUob- ((I1gʍ0aGI$IS^PegK²,"R["-HI f5l$~SB{H7?{2 La+QESdwOж,i=!4>//xAwì x_d# Z7ԯԬcV=B &QGj/Ԫ+ܲ/ܙbHK09:ぶ՞ܾ`aө0}1"0~Fn&U7G2Y#_'9f2r=;L-;qkzu; nU=BXݡ3沘-OiRҶvy7wcJ:7+nU]~>=SսBq?^ g4%x9#dWn!ݚ88jh];h=EwVK-hk\rp &g* 4,z;R,2k>$92=ޛ>mRjW<,y+&`ʾ0Vqǚz<{; Hƃ "GFWM.3s k c{d^p$`Ś+ J3b‚"hXmXHQ,q()T3*r<\/|.B$YQ+dw齃cA#"lul 97!*z_؄/]7}' chEyD*Wy@j`@1 )a9^%YQ5X>y5)zsbVOjvՇCDIVTM7j֬%[%̂N6(-/ѫ,fbLbKs0Bx-X@ 9UE?iv Ga$2J3nVM߶qwH\Tv"?## #(Ͱ/mȊi! DW1wQ'Ɋ7Ϗ|=j „DIV5Z`LMN}PRFP 'HfXpǢ$+=4aBRic+c`p3OZ%YQkF: QrܲjO7L˖RUi A1БͰ/@7_%YQO6b3Gl(11Yј0k6 DJ1y4 }>YB1# ko2sՑ*j1 BP.TáA$R&p8/޸=v"TQ ]T<μu;Ri` ݂s}-B'Lj C.ۑ{w5@4.~V,/hxAdEtü ZFg-Iy&V` #(Ͱ/U Ӳ_H" 'Er $YQlN@:ꇑByl4"#&|S6|ϞG$IZ*I˟12\?; i=5CIpJ})`d0/nj--?#) [\)'Ր3q03ҁ̈́=H`# Jԛ?8Pg@[$lp$)疹egl~oz9 J7 AfI )$fۿ%Xԯ 8ifnkhܲ&? 6N, gL~֍,,eO#`Ds6b35704(4fxAm^/~tx!XU.^X\ga9qVd T\`{f}F(`hR-"x:zA+ L Պ<1`S(N:zO^x`Spf(gg,;X/m >UEMuZFpjD`)"l[0Ow3+&vďymZu nؽ\2.eѴ !E3qu`ݩ.BHNdSu7(ke21huїf[̜ģ'j7ۼkx87ߟ j5zg0[t`%J f|#V:Ⱥ%'9a/<#@G$*s=(UO{o6230U`W•܈jcWP{~4TJYn/^l*Oz-NiE\ )cCX$Ei ҏ!#ʆcwHxN1KSDw:TAz%R5i.2lF.%k E:\)F't1k C #/GZQh aQJ]_5r:S:A9O `J6txH4JS@ cKM8pK葭 ѣm r}nL!.O:ߨb,2UdQe>΂F[2eZF|B~LrV:Gj`QmpxMI3ZAm;tW#YP_]PWC9KE1as pC+2 'i1BdH+"ņHK@"h|H|9",Wu'N>^y:" HnC:dZW"ǵJ3inp״bw=v1׋ y|: w?le=>Eg4}RHrC4y(O%#cHYfH l $2SOӢ~ 4Olu9f?4`iug- w OR7I<ʍĝM_M۳>{sth ~?_^e־?> dnϙ e3̀[Y !z4, DHh]{lKLc J)ƾpH{eI:I1+t|ZD? }[:!ҧ}RurUR2it!8Ib1{CEn+0X؊Z_(cCXHSAG|obW7"m)ZXیyy,EJk V99e L3sP4u̍GVV ""gʖ=hT'Ò]wcaGwRyC]̸UxPPJ"jˮe-໢'W ~HaґSeTjsA3>Q,Z6Ji z+z/8.xU褋ߖF'5>) +#X,_$a~C]wrAGz/l|ޔ$N!ZVr(,"#jO1i'h%H<EM%4En|$l[B._{: )cOh$Gz9puMwZZw:Ҷ ;Kx+]T Mmqb9^T=_=!_?XMKuA ^k_]~z{,#fwnMl%XHJ(AҤT3)C f&hِye=h0` -kpROZ`?~3[v%i75){ )tCqdE3BMhcD'8G??ta[$$e+R`a⒝b?ܝQ8+ThR "#K^irSeEtݸgyw+mb33 |+zNx 6+n6tn3 :pejYZ^۱ VNNdafx[G#5wTu>i!ѼwiC!ws>٭?g|ljF!+#ڠ|ԚCW20D%џsϊci~D_ 6s i:iWWa0ft]d Jp$JS 8X7glBl7 3FAHD~MHdy{ rQ.8˽R'f%"ojc4Ж{nA "o6Zdžąa*#Vphk\ u!#V:hDf+5сXp'Q\Z/3Ͷ]p%` c`t /| # K moP2b{H E:-RLw(j%LpcSdD"8DW329Z帤+:8Hܐv{(lT0+}ݲ~FGԆnqUwmz(j Am\cp8WAWEE#!AlT,y# #PV`AJ_kۀ۷ )AAzF? 5)"DOAI E2pӸ·t`( 6KTT6 ,X jQph-p^CBl%5 /HCF0>ybb-&'!d>8D^P {E7KpLavp^_5c teKmiG_{tÎIu;h iWc֌'n­v:ugn*`@"Q^܊8,+'Hnmڕ,.u懱crɡؗQc=xz -uEl*WAMPࡰȲZ1nVS5BP8g̊/}u>sֱ őܛgWn( .(=íN?+޲翩RkK[δ{)|]kjVnLFl DDSD-Dp@?`U?-42o7%c҆B57!>ϕ$eTSySZ!۶Ԓ4 7x! fiAyVMR2?\TʉO.sd0~}4!sE. 1gw3v%oQO+^gp&W#L3@"(TiC ϱpx8t`4k1P ?27 >nx K[# j5+V*pzAҪvlz(& 6Z_?o*Lc0NdtCt&Ĥ=d(Y(iCJi\N-4 w4H!)}%^ @va߲fnYh`01!,674™NړH$6$m,bL€H$(Q#ͻޙgca# QT@`nڦV% _@B r'.#mHs [턹`;vbੌE>Q:!g;ZbҶft<1,S#Xȉ~ ' 蘆@jS i 6 Cj!a(8DJQ^(5{z*Qv\5rPodДJ`Q$[(}.IB$95 8fn۴KWV˯_?awǗ~/!!$iCs[-ges;pr@;J }MOON>e4alKI|wn #J>OTdM<TA7XkҖˋ⦳|c~^9Cg4þ_Kgs(H &l2)E@ZBPx%=P Y/t~j*Umq֛x'M&BcCȘמ c?܃WAЅ(ǰyj 3V'? (Z\s> }Ţt#WW욘#l!2 $)zP{X2CUP$yHTIhf%@Oa0*Et(*AB||[1>9#@`HdeRǔ!-#ҔЯm݅ڋZ=;^PpH㺞5%ydElBZ 6bԘq65g%{rGl$#37(XL\BRJZFVN^Ut1Wвd޺IM|4BgFX (iF"IG a DlA 2pP* xVbt i Ӏ*@`~`  HX0,23{wN>O_n9:P3v?RT3uF1O @Q&=#5;qvv/ |>ťrDRHj(@ ^ R-BgP" mDcN)"W@^[mmH\\\.)MpNұ`@Ux5LƐũGL<4*ӡهk}{NQ" Zwѵ]&0 ޕ4Kgߓ]:1' (UHVW"~Tt%X伶 +~ЏTn9sۅ8GKe7P}_zKeaqO@ky(JtOn?L?A{4YANXidMW*YiIvS{Tԫpž'j۞'ҫrܯ~wO0_FTDTLjl-˗$,D(p]\׌ vz`1Ma,N͞%I.JSVb@1!CkĻ{1z 4OՎ%Y}뾺nEKY-ejwY]mr34YUkkw*\hMrSϵ_m/T_UrEW`ֺK$7rNz0Nw]3 a_"h"Z_0&"1FbeM^?o7~Nk#>]3V5״w]X-x:l]QW>aM~TKہSX".JZcI K+kmljY6U4ų+3;ܽ.^NMH(CqYT5NͰ/34V2@2G36tO,jjރr_;Xe?ڍtZo(i~ﻸ|" 0Ex`p  (308d:j=i^6~yYwDolnEQ 1H@ 2҅TRk1 )a9^`k_PD.krd*'7 M `NK#py|FP Ix&/2Qq )iY9 0 #$ G Qh '0cvq2`a^H-8 $+%BQ5ݰ-I^FP Ix& DP GX> #Rc8AR4rH,jMSUP,ԖTڲz JjaZ,U sIT"+N/Ɋ 0-[H[i㸞/:߼Xgjnaemkg_$HerT J!6y.nHEåySҴ]QY^U$dh5kծSO Ӳ6b\=j,S&0aD+kd*lm`ѹ˚^mrU $򢬢8$i咮ظ(N,EY!)S.G2,G3Xl.?ڍtZo(i~ V/܌V\~0Nnq^8I|W<)k8;^!P QlftCr%;m`je˾{5y ؛>% ^gH:\ƀ 5x/i  (44;!֍fł'Rr,I͒ˑVb?)ɬyRy.)lF$V-\3ދXEll/(Y njzh Sc`w Z?2~ |k@UrDE} K,E ?fOÃԤ<4i0ډSTùέ¶~)X4/@}힅^ &6!)4䜣k +HȣXY:tf_%Z}IX PQ t8u/!FW† Z(Lf@A^j0^ߩBwYq&6Xq$ -;jj7fC]& sY.n?HhՎy.~X^b!I, NUS!؄3lJW`H?Hi4q4І@B[e'N:=.MuhG\nUMas8EͽA&:jjjb\uUf*}b{$9cRr=}\\(kSuvi|r1wrvIF봜#Tp6uYϙ7V|Ӆ!Vlwgpe/]ֱP$e:ktL]лa #mG5쾮ϲA R=~v/w G#p"Dp[rufx#4]"#B.4ujoΆgWjʌIÚ&:Hb\#,-M?u>ZA3]q"uRۥư >WZ1t?N!uc wօ.I.5'6—yLSkοNߖuؼ|Wa{vH4hiϪE0ȡ҉Cdd?Y6Ml;곬[s߶Ehk;pSVD;7w7Stտ3q xI7<_^I>3YH*BDDG8 ER^*N F^[mo~æNRlfoH9b@ՠ;Nُz\g ozWLSNL:AƁs1} ZOk9vCU?S=>탹:;2_lrØwtǷsknw u,ᄍSp:x57y &hMP Cd:v}~M?>չ%4/PWJxIT0|ioj~,:vޗ}F8lg<!/B3/Q9Qpo6n(_->V5gꢄo-|5T"8)3Z=h6*"(jp5x+0; Fp~н--{,GEsrј!ǃdBPR-!?%8L&iAjii؎Dz9r{鴛Z$2t\>^dEnǁr(s2S iLSwpn6G}#lde'Q/`\ 9L U.+^ u!U2a`ZylYVnV .yc$;N-1&&prg* u:HF|U.p1gL=OAp'|lJ=DJf/9Lg%G]_T^q |t"2w|6߮_N%{2\K^7Q,BTהJEmǕ``T/#1*]q3Q´̄j]@^r@R*[z.V5DVV`Cfɟ& s[teeaZ~Ak-̣ +㛖F])6]YG2I&#)OFdf.a̫΍I^KDuC^b\,q^N^F6GBՎz7MAΩ/)\#F NĦjw'NJE"'>@-yՒ盂y$6S e|v)_|sr>A+lqr9ڣ-D+zӶn|n 출GhvX R$5g"̾C2eKҀ54 4NXc"̄lRu4j١p(+ڳ.EeWuQC2H> mkaw1 Q)蛩!  4=PQPm22X[ϖ{'#M69Ї=;5RuEh !Yk-l) {'~Qc fDYXP#6^xU߆^,Hj zXV60?Ѫdl ;sVfQm}^j';u./v< :kMsI{ni}hy0ye) CΖVt9`mfK3_9%LG-ג֜C>-qsY :>YxYc8K+a'^w>CgHw#Zg`X!@/o`VNZ)~0F6 mOaP-~86a)~t3bQP%2tq x=zzƒa><'gzS%-10܉[ [ OgV~M=Ykuߒj cbg۟(Wt}fwuD= uywE`(όu/sZT6bZ A$.u8=p!~99ZiP,0FEaE!ʆDl6wZHd_ݒXL.FmHL zӠf̅fP~>VliBfL힛2[|{,4?Ֆ#^<_Sm"rMbua~7KgZW'#+$ ~06b Y!\!Lg?o,$O]"0%ZR%?K-ipʣtXc$)%_*~_¨۝ز/U 3$EcN=]ZVQ| 9ʰn!dFmr͗@38@xHȸp!*!0bM DL(N" !2QK#v`2\<&YXBdYT5oMwM}~f/5;Ln(z:Ė5tf>4߻mOc2rY*z*1'qܕЖ8YѓA]bE%&(I'8ދ'zqZ|;&g&?iXe&['Q|JUY {E\%f{R>ueu{W&='^T{r#}$鬞m4̳͚6[7DŽhA* Ui1j3p HYB<5̀ɀ|>K_ 7}wAkOGm}h}/}?4vT$Her #Rc8AR4rڧWbaiemckg „2.huzqaшƩUS+ F+<9cx_λ]Z~t༮:﷒,~Bz*Z `?P5eZ9 6 5[WG_+o^Kq<`~ZP GʆaFz2l̉L˿+rE`~Nԁ%PsvUL!Ho@/ &>'_C`GoοbjI!k`:wߚBwL'c{ z~dg?rvߏ P񈮙N ~ jȽ^0ZXۣw65Ë' %-4nH}lnnh((6VR,yOg)D_HKf s{xn?\Le?&c~oAyUN535z[IFm dnm.h гP.{|?ݱ/tXncFo/lAU*ih /{G- FΗĶ2~er m#5lE`#?5-lfMce=ҥ&>Ht):PF'G0RdRP,NWb1/ +LS`̼s-ԅGcJC$'S0?m- `tLz=[Wq`/#q)n*V|0du9oݦF6nw# 816O2Ic%WE)Ր.u{6ps+q/WG7-UTWس+&lagN.` I7QFJ*[V/pAQ +_IP[1+| fm-\;/O{%X#D!]V8iӦϘ9{B-VD5%K.Sm~)ͅQ\*WVEuj70tSԨY)^~05 wxG+gdf%%c`fDXdJG5u;g<>+/ *G\ i{Q# ?\ơ9ŏ|aS}ˊOzv~W!S*9+)|zKGifڥ{}%Ojd20Vo lb`GkkeAY造W[|iUZV`A((Q!;6z-5kUĒBV' uyi:Y,:a:B֍A! SV9RˬTBL8`aXpeʻ6U4 bevw{CőH9QJ #D# 1'lnԉ,E* W Z y*"\Q-9 *z0HK%G7\kB-4]0ʇfecwhJ|Ol^ca{,_yp:[)A"}!Vs)EtYv{Y\1 ?ƾ1#P$#=@)AHJʠA?Dl;1P, XzEF\C""I1,uh/cTx=Bgʒ- <|ύp;]}cWo hs2|jsV^ _5,Uu k֡R6izY> X't_juJ) ul񸣨%|#U>F!ʂʋF{y=l!1yh]%̆IKG  .E EXzzm5H>Dd60$m)p/{5\uiw#S`++veTfũ*:[EuΙm'<)OEs͓czR4'+z`i=Έ!"m&)6JUժSRRst2b*:m&mcmfjiR[t(lt9A+5Yu0B2T_,bHG'ʘ@aj#UC0`z s=dm#Eg)_5$c,Ī|ࡸxqf8Qő_|΃I`c$ɫTx@'4deo7lőaL"|j^55K53p2!\%]u׊@'(,*.)-#߽ $^'=h=卪1cPѲHHbߐ-v-_eߒSR2srQO3A5&82ܣz> h__ v p6[m&"K:tT&W(Xj)RoݤlQPC$2dzm,$?ou5jdVI :exDJ(N>1GϏ]%Jt(i(nD17?-o{ǻ|x%M9t%Pc4-+=JxUGFŵ[CgRdO217*wW4.mQVm.kwU׎?.Rnl-oe4$2Fg0YlE>dُi^mVg_T ' V!E ? ?o)K_2.o0X;ȟOvqM wwwߨ.8@A`jV9 u0+ !kxj~8y@#-,%;麴هwmquM+ܶ 9m~N%\Ku~s`2X_=\k.+p>8=)Y\"C0}EgGGRk\&L)84Må!xyCD2`^b'XeKVw|dl;wi\uiwJ8ueJؑ@ݍ*)42kEtFҭwUh'{t$  wץ.tRnwߕZt*T/GGRIF :Ř0F cq0X] a 4Xt,HO%ka]gܹL&.`v ϪXp [ 't\` kInHTV za%T'oH ekz^ɊJh *&g 9$^}6{9uI!GiU;6!\s|sza^x$zID^9 h@ȣ(`TQHlN'(+-% = )!yNw;?S&);T<02D4$`* u~ykLFir[ܜr C_ԛ(IҤː)KP?\6Ӯ9{Ҽ:h`;ym~Tѭ%O1'jxAI+$FF&-u5`43͵"Eق]Z(-'ޑ3^׏[N!eC?'_^~b( \FӶF%kөG!fc>F W#<7?@x@8@(7 yX3\6I5hW GJ0 tj^c&IZ>,*@ hm[иE׈J0 Lb2u;5^zqEf1XB(fr¼V`\,[bvE^Z^/]'bOi xYdouiKj"<C2_J &-FtV@#hw~fu&w8ۗĢuurɨ~[RDկBB_U[g ~}~{&]qj]_r]y]ʃ-G u l/ڽ𡠑9IYH3x]zCOkvY ߕ>CsR(^Igjq- pr?8gKg{,"u.F0 @xl!-P 8`^%B9ݑBt_fL+aKad.Avȵ􅆕)NQy1.%W ΂XM\>|ĮMeקZ:9䎅Vx\P(>L_Qu%()g` {*,#956 2`$a֧ݔsńiXK׼4_s;"uRϪr:7pDk: g:4#hhh8x$r "E#hǨ&1q bRzr kgIT_kW1\k:!e(҆ɶlj0LKlT49W1:00*_!% <|Y)Dң٣YrA0 B:LrS}`Mx=ʿr:y4mJ֛1ܹC|?%KblIq^`Jw_\߳=Bǘ?r(k,b m;:g Bhn:mFjbqv=gB [,PRwbV{塞닝d'/7/Jyn5p]/%dZ._R mjoqS+ ʔC|nqTA;FE>A#s%, L,lvsˇhN(XL\BRJZFVNo3D7Ϗ':A /3ݽ#7t-wuGwT4Ovlz'nge:N&> Oɝq$%5w;툰">Fwzg43۸-3URBO*ڔ3PBMIJS!O}=U9g9:6:JD$#  {*N` \ȲEBqpvm!2E~|e"W:ThЕRkrnu:t1U[d;qy\t\~S;_q|?/߃}r}1YE,')I̪֒gies,Her]]L.I:}YE ,w#뇚ㅌ3qWq}{?e_&Ϭ\q?7_W=}|}&y]A8xo) \_ qODSEѐPHOO+W񐅼7?+Fzx#JЇg1Xtiê":K->Ӫ>ۓ.SwRùo/ h?'Sy>agYkJr22LkHp943LR,26YEi\ @%.enN=t?Շީ7l}XG d+1Vǭzc3ll(4".SmjuD0 `CA# "!c1qv IH)(ihYXsWg rTIЭ*zUӅn `!O@)Jd w^ʂS B(H;Ls<\s ެ5iI?i?sV,mcSZoHB"Z[;SPRQ3021֣WI pܱtϭ 0"{ybKü5o}y~,O^_1^gff7`n6 Lb+O|I|\Wq7Vn-o;xٶ};ȽÖ@W$&A@DS(rjFpE1(=(Y)Qifm8ve/y&5ڥ!NʪOvrװF4Jڄ&յmųp_z! vO x"NiC>PhhMld-FjlmnbW2ZO8=9^8K0zWen|M2׎浗_w_q^lGWտ8!dF}TE% 5mfG5Yatf%}nQJJȷFЁUbѕ/RT B(FaT L M-| W*;Plyx|ؒGrUuM5@ &ZlH G)%b8*R ȩ8beΔ>l_jRF|%,p?q,{; d':2Yv>)O{ӟg:7T6ɐk.ժڴ 5Zj]{*T}c#_7t<A͜;yCg3ulb`/+oǮ`MyֿuKݭѝ}42ֳH{+\'2yw<dž#\6_H/oScut ~iD`\KRp%gFD;BpZu1I'ف, TN]J) W)yBe)(DsĪe}U3p,ȝJ`?5ķNSR`"Cy(`tgz!| _7&0e8-U%F\:S5%ApBFx3 쩬$!-vGʣa]a.V^L);V'=N#5%HXR "GQ k:H[}ikG gC^ z͎#ň+FkbVӱ4_hr(hK7n^@VXMZh"bfVz{)(ݹUmڋ`nw2O.4^ )Ͼ.'{K2NW1b `]j)EUXm֮8(}eAT;0uؾu<Ҧ Ho\ *s!oBԫxgxuAK䮪jWX{B G쳔vkfnXD?aqBHNQ"R`&n\Yb#6~[聛[t`1绫vD[2{VgD#[PU+jafG> SNh~ۙw#;\ aΫLIjz^![YipN\qD-ͅ-_4dquQ S ~+GT;T0Iր%ÔQ{&@/}ݭ.Jsŀ ƷL @LoI|ca)NL0@bd%X2-B3qMMcqkcGn$Lf7{l)Caاig hqd<0k+U p5h0Ψ@J`\JAZ⺵[67aYϒplbQ1ͽetVe[ܦқRU$pz+6|kac,e0$wuw3oXs;mK}nb,yM fLwuMźU!kSYT.69 c{_u#f[SFo{7ϙ6m5o'AXވ7҈oskzb i44hS7 D]o/դEߘn a"pc5ʶ& a\zn-G647Nenxk WeAFy k! 31rKL@^{{  hKu4c PHg.Y}-ָE!%j5Mhݾlzo?|^pgn>Q}0ɜo򘬚[*–{- ,~Zb bۂ#LF:!1^I0y7+lu,mo9JJ,pct0m;m ;[@2p+Gl?[^L!q8aGͣpҸ6.>g ܚ#kmW||QOP.rVGbH9 vxw8t02Lf,4#=ѯ*ncܠ.Z:Ql,*lC~ GLq.F+ngH"dk\sdFuqꠦǑm._2Z* H}!!Ĝ妴~/jʐ-Kь='ju\څHmT [Gi)N2aV$g4!d:AP:+6Ifm:kPؑxmJ 9nEZ kHr\ h{7\V~F FS U24f`iHGu<(!.!Q,^]Ϲ;K jbT`ԌEwġ'J?p~P!BmCxGi t&nPbL3X=Vec םIeLL|ya`{ZaI+ (̳x.KܨMϧ(!n1~Nj'VoklR"lNANWQmJpA.ݡ[?c<>2ȱ;raϯԞ'ۚsU ǶgSAWja/>M"v;=SZI u`i`yVdǥzuJi8I\4|2Io d8vV\"$%*܆t^/O)㸉$A4"s$/^ǎ]7  a+RvCThn8B=.uҡhk]\q(z>uE𨂲lܔ M۪@h\sox!+*NrOC8К:S(m9J|ǰa3&hAK4~8I d{>϶9UԠ+QhG,bNذ>EEJ[pMVs)L3i{ nQ+0OBY1@z`'c ޔ+˚ ĦZF :u\ ϊ,ja;НSŮZU( ܙŐNgk TsY=AߘZ}ZnUS95sTeB4gp[}4v<_$Ěll>rCdRWp #\&Ł;*}_@;J8\uXwwwƮQd;Sa3Xr6ՁN7ws *\28OοD!!wtDf'~Y;&Ǭ-m8^\:cOddGK9U|>xɿ-J6X!k/ m,1nXdU4IS⑰Z5w(=n]?؊WJs;[TY+7Sƚ1,=UPdV*}HDTaδhbKF l5wna3\ؚqV幾8^$vrPOPE->G@_51I P {3f)XBjf2m[G}j0?T~+J{?m+oR7MtϼK"cNxm2< '1<%lwg3R/tw .'͍xGNlvҨ>d7/ dKB nP1J2xۋHrD X&ܤS N]/BJd<Ӫud!O` p;(p.4+ݔ.s.Y/: 9g!8uT9bRLٙbċN&/G&`D\(B>1bZ3Ф[v෨z;J&ncC-zb,"9V t9=)LPgP*`LɃ^6_¦ndhx0 ol>Y&wJ]zXT!>"Vhy#GKE4~.f"n[Gl٩zKqϰacg*A5> @]`bU%b)9d)OA;uw>{a7NGMQ0Ai|m<>yNC &?MphOynF9uBy6Y6-W CE]|=72l`:Z+n$VL8sJ$#y9`v5:̺C7T4bj2S[##8eU6sE~ o~RN[ʸ5L0bgu~J+̯yb̻wKK| n imwlB"b40_5 7r es `3WN}2\_f'kv'dQw㥢 ,B?q|XpɋL]TF٦&3耒Kd4&mh#'BڹI3&)ӗ!ioކs*:&[7S?eɞ5N4*t蹻0[,c}q;B,N s`$^ eUXP$ZO ٹO@Y>uu@+{ʫ#ޒ̗SCHqU~kºYWWX c m*!J''ws Mzr#u?gz79L) ? ?I/%a0V!)5}ǫ&ç XoG^`oeL/b]{k0Hovl; ]==;1T]LƅPeY% 2LaDh+v* t9-FdXZ vb(p@Sv'wqÔm>^Ђ.j3%UZ ȊS8#Zv64f9xa+&:Ed[8>E"M$2̌ؼw<-]kya)o2%%Ϝvp$1vA42.m9kUܫ|x{qt&hW*0SO g`瘥;nlХWRpsuNn[S~vEI f m &Oyb:БwB&\iy'E{`Q;]TM"Qi\ $8Sq!ln |SAY(HOfAW}Q݉{} )Rt@sJ+K+2gSS*S*.8Ty uwsK36m-"MY.zm|GϨ9سIJiIe1asō$RkUZ <䩁 /|"mۙN&CيM@#prH) l=q0o CKa~MdY^x !xP˄cp wLԦA+cn{@^CUGOXγCw!XLykGwHy E uMۑz<D[&]$IgyI]('-+vpiHQtXg 4x{d*ɢ1vRɶAF0?͋DxٚuX12c0 ALFΙx :rWYE4C$$y 6߄9(a>;) >ADtmx06P}3xz~N69pI3KLh&Ԭ @~~[K*Bb"BG۸wa.usiDiTr6ò#lvT Oe8jя<89WDLϵPu}҉,EWb~=Ն,,7 ڕ]t"@K:*#EHρY{66.ZZpyGJD<e>,$}cKSԔ-,nUM_m,ƖlNZdF$gw}=ȩ4oP}7b7Ff3Z)YJa+?8(weFnDܝqv^BRlDep1E,FǠ8zQF !qƘ$0a"l莴cz(t&Ni!T2LvcKu j_yA0McXa-rFyQnCp~i;E3 \,9 P8\/+Fpj>q*pbՄ@UۼGybtPa | 8c8y"9Ӥ 3cT㎜<n?ofDw&qU}gL !lPLh<{ 'Տ_~6=BBl՘˜_.)N$ʚfp\cZVU‹k3 q(1t1>b 0 Q,p]BLZpf5]bm s,V.עhw~B<'7Β 's 4,5qTQ \pN cqyr.0Ma>Ka2|Q8[[ Ѵ#ϖNt>gi=nyꃎksx1#_g8[%5? MdR#MMIpdć('w`"1 8 B5+(i4hS)&wc>heI%K*ʡl6@V3S h+@=gBPaV%ً&=_u O"U@tXrkAW >l%cHqLxڸ >@cX) G\C1ܤ(}pFƺ:7QźiSK.i^RHXRus?t HCOš}|v֏bP&eVZ2Bo+cԐWXKuZoKsXfBށ=UrKGwkdQP Ef0B1uk@kk7N&DY=19ߑ"g2I>W=ԕF.ޱ'2,WyeE<%Ums5?R[K{*OEB`U>V LvmgM=tOG"6@Fl]IVu;BL~]_4OOWHDjONAGܺFRT Jl'q fX5:}ڎ 4HmūN^5R]A /1+ kf +Ʋ&܈ zDb[/YoxW{ͧ(S vS$A(Est,\=Fւ :_ 9B F7WU;@Ex6 +89 _w.vv2qf#fJ*jvϕ>,vh :vt]X{73k-f#9+HVk,#{";؁3m6﷏ L!eZ;.*A&Jjodk\\N6dl^TV]Aj:nO_JT ME=*YH @Meknnrn 9 ɇ0~hWNt=@o֒m_ Fwc.VH\„Gh/Iml?f&@󙃋6IjEܞ>9'ߔ㣛PSu^(WO{^܅ˬ(b_t*ΰhM7Ԧ[l*Z%m/ 7 Ec3^!0ģ-[2Vd{hhrյ`mq*W^} X)' My}Rq':)_Fc H'r8[#3h({%ӐA}'6P@h PHu5#3)mXa+6,P8B+YSXdh,|m vȈ.#/NR]ɔ"X2$FrXiƇ4hwe$r!S͔G3M)E1nP쯾)غ~#wÒFtAH5Ra2D֪̎ZpEFߐ9͂Ő*rEP-%n $7*Xi$%tz-}B`GMTfb&LM6%gE˕O~}>TQ'U{5=RvS[B ++A\,£X^Q)brе-߬}7-Ʈ̹khX&p]z@S"'6ympzҹnrn򹦋6]w9de-QcHMv1'w~%-́wχNgPZ]6=SAٙ+ZS"p-/ ƂUm/)}:IPyMuJ.t>!( r|ۉ!\|O'EE"{f1AQM`MvJA'N98$Fh1_CH;eoL}waQ聯m@ ~r?'y0 켗cW穹GTEQ뀜ZOֶPTM0O6%Tke]ˆ`nQWI*A3ld.etW;J_9.\AHoe8Ua5[P@3?M~7ڞǹ$q(Uز~A{f e[4SͶ0j).FU7ꢮ)8Vؒ2>*vݑ]8?brhig:inmF`<(&ƼͦLWB f7Pey)?Wm1FSB2P^oX64 CNث+%ܽelZR~$be X0-VHQ-4arzaم4;y#s`Md*[ӏ!GLzvj:2,̆ՙ3䘔l,1?u JR !"kuÜ2ـ!&D-$zT-E:yA|xS&O͐s戕UQʸDṽl_ͺ v "b=b;7S<ޛ*[i7jxg24h9PgɌ'IN ƂlNIqHo]@R&+AJZ f`SAmHkeGoȹݶҁn^  `L0^[ˢqjé^}vp S1vӯ~zM$xu| FAç XtBh4͐1x wZ$p=5#Igq3@ʖ6ƂP<8r g7!0PդW<vOaHf|教Yi Ikܥ?Htߦ4dS VƼoًƖ{%T ګO9ICK"{YiA H<ƽu p(t6 ͉lj5DmԽtP5ɔyږ"yfLWB~~xxq찎1 _kBXnoV74H/,x57 u2X@Ot\q_$r]Ki!w̥/8|F5TqZޭ0/ rNL Aӭir:PU:eQT&®u]"Kmj'6&H߿O/4R?+>7,hjݷ< JE61{j pOP~5!=hs7Mx;9V-Я|sM2܄E 29BIAws@KJZ :"p.N.gXs}`Bn#+;BMIi,ڝt<b3\Sy3h7}Ĥ0}Q-RV=RۂR}{@-1 d REŨ2;e؃"$~t Z]E4€otVaò!QPz|՟j,`]GB ﮭ;+^I^*VSWn3R\`+Q| k0k !Dkùkm*+MtDənrrPc+UDsPD-H9@WHx()g޵^ޜFpMqpg|S<6LļjqƲOQk_*l?KxRl}JnUkT.kL}2X5 ČAhlܸBA܏s(pw`XsiY.3l7\ۄ9uzxԝm'jwŬB4=5IZs\ptԝ5{I9PY.gF`|* P-$:\.7Z^dl9Q ^gr=Iϱnn})|0#*?*x!! M\c6r8THv d 33_z[%v]*r#npڂxW„9cWPY{3pb7ncМm*m鉝>Oc%2RURwx`Q6A{LOP&9&uxcoA71%.{Hʳ+[c4n[,2n/+2:DkL YdN;|㊑.h%QoNbzKѾ5;kI[hvt~&Ӈ9U3>X9ܼfwJ-qom0 az$:Gdj9{AmЦb9eiM#A[Hq`! IĠFQAfl to),jzRkvr[]y5D<;/X֢vPeu3 N]ݤrGocIDkxj6BJO+y1TmMـ-V({*X :*¡xe!"ׅ'GjÚa\&T4Hk3G<9̷&aLY"1Guס͹rz!){ht;;|{u8χv3B+3(k)꿗O\ ?`Gfӈi`rS/u<,wu9N*{튘[ZdxN:`H~,.Pmt/}Q].iI መGZSp{JuAqm &p>TI+4ĶTjaSP6?qR!_WH$Ӑaߴ[Ҷ)8!$o\vW`x+066ax~U1>ט RM7~8 `{ k[ ӥ]0Ao$$}%I-w*>` )M)B5G~ /GEXE\}UT\%HE$anD߶D9W(o"!_7U b e}?d>2I٩'I| ;ô{pkXA HdhZ˄&[ {3nK)(%6޸yB PZ_]c850(@*ﮰoHP.SK *h T@'kb  * f(Ivx%@)?tyCjF_꽟|vGT˯M>3wlڤaΞ+9gf2Z;̍X>:RW%lC4"WqtXԽj?u+ۅ^"<)ᑧRZd0 35nIj hń R"$pWPML  7hf[h"JzG '?)M 0];+=Ѿ.xB1<pvPU +EǾNtWS>{VC(5؁2X,H6_« eWH+Ew/¸+\P%Yl#^! uܢ$b* >^O@DLS1Wя]m]R~!Yyq[jE`Ů E\`˟f ([6bh0^6Б̢ɓTN$ 0JKQg.gwR+S?SZ>3>%][B:BnZ ڔLdoj'ieX/"K1áuaˋW|'z+(`p:YLcq ~QZjN{5600ɬ7bi_>ҝ-;&6L @B f b9Jk,IO"B 4ԋ`3(01K_-H=Ƞ>'b5@=5rh_NG^TP=y\oDM\^Pjhɇ3rʉРFZ4 ڎ-/9$`BJ1Nƌہ-)~iv%CCzK./bkI.ջ_f}]Ȋ"buƶA28C*LѥAI"ؤ(\2%$/\*ȎײFH2t5Z.IGy[pKtJGkW,gxŌ8Gn!׬kR_Oxt? j77Pl[oy/#Wwc.Lx]Ff~zld]~ߴ~&-QC9uKX;v~ ͮ/>[1n, ;fr\|b@aTb0+ל۞"_ðjV0{/짊:ej= nI`02,Xf*3}$=3P +a3z>S#5JOr̚ԧ ߤ8H*#|:h#˸ 5Y+-O?iyc Pf!r0sbN%Fmc͛[$~k<`QcZyФ+ XBcٛjj7a081}Յ} ]pMwٟw3~gBm׌|*QOJ|(UotW2kF|'-ըwex}2D84Laex?>suPt޾8ǭ:t 3WS&ܩ/2CI*RϭEk4D85g6Ae'[c0!\7ը nvZ2։(+^0v#5|4X{%W8TF\c16\U8'Rcy=}} eY1"bNQ4mU  &qPK4i̳xZuG<=" F*RbF| 'm>$kj;YE *f+D:@y,xix0K尺̭](17S6M -l";f`D'ʁܣ.R+xRNhps!/{y6N]m{V5I7/摅8pG凤Ey\jvgSeDxL&OdOdKYUxB~Ct >WATnxb:ͤ-t3V~iB̢3c% 7I%e6c^؍Sv;gE*ֶOirKc` S#A*l1vŰ:!$YfpoȈ#: 2yx^daEJzXo\ϔ=fjRDн \"vo1=8oCWOG5Du.oIz`Dg N29G&9-`] ;+KTُS8ͤ<#Nge4-;(;O)v^zf)|QC yU8ixCݼdq Ӹ1(mG|s/fQDŽ?`*_{˪Q_%<_tq#g)68Օb]^nig/҈(ZL*VPeG_Oc` U$-c1YkfC_ŀpWd (7);m-`3aܵ"Ӌb~䏿SS7 ([~jgLI`~ _BND ~CA4mRm9?/ՀCRO'"+$~;o ]a:"L ^l1ae9@!ܯ!Q?AKv9Tv|`7HgB 5{QUyr^Z 7NĢ 7]WQGxmhtQCH{X(X*hۅ=T )6-Tr=ʰYUL?@uѺ'"2|:M7$ S'T8Pw܉hPJ՗)op:bcH}}i t)ۇ?r (c]/sT:y. K=|ROFʝz_(ϋVsN f8=)f 7b *%htDg?X';FY%+V @HЅan7Sylǁ{][rBI 6+ ^ (`n2OcMW4o{{0$ - .;I"c 7aw=@O! }P䬋pZ,@k`!+ݧ_FnIf52D pwl[=$bmYl?w1Y1\K78`6]bEHV#!hhOqr= &u7OhNƗI"JGd N]cG=4XxF]kQ}t&cOHb5G` ;ϴ=[Y:`8)'s:i&*Ѝ!lxuqWiV|w^,PנmCMCDWEO>xP9ԣPU<}:Q\`X29/'//dK$DGJ棳Tm^˭~&Iy8(CG4VQ^BXvϯ'V}M=KH'ۼ $5y&Vk{rG ;E\ُg{Z7-BUosY`@k>ci@^98f"Aanrs )-vb8g:TM[ޫ^ң^,w)f$Hw\ADG5S ye$2Ҕȧy#ţa EyJ󳐡0OVȭ]+؍!` pKm{iH[ru0q]~؁1J6^"X4<|z7YF F3WܥhvÞ\IrOqOhN dDW+]T\^,n`L[ P8Ph-VHa 7BIp$zyQ^.mea<*M"S-&ҢШPn|.("F *oU1!N%{R"H!}"@ Zovޗ`*dLa3))2įK&fخ:k$#e4e-c!#Iku@,"p3BRBIi=螥PHJ-KlG`Mc]\A Kr ?v(M^?h%]Kr%#P:єA3jBLmw0Q]b1ہ|&Ki*ÞCI$D[ YBy3bc'BŚ>_W?zLjb5`X+ac7G/GP7ea~BD dp?U4R.(OM\(1Gȹ Zw&zX%4n$y1i^lӫf؛?לEq;AgW,8,r**57\'sx3+صNiƦ\n<\adž0s9R #xe/G< ef{]T2sqLOgn>/.lPsh7tyQ4~4*%b\PZoR?/^h@4le%&9ߛOmMnw@so/򋶍JXF`H,-I{}M6&e۵B ~FGO\N)(աiykI@5h[YGз=uOĀ/Dvv:} jgkz]fF?03|BQڰ֔s¿a xDZ}3ys\ ;_Fx:F.)o9.'vnUry;=5?P* s7ՐpCͼ[% }QF'rS5ϳn :W';!v8ՌUm86K%s j83HP'} 4Q$ 4@?q-) vܡmw_Wj>+Ln gF5۱OIژ^U~g)\73mH >w/WZ]V;Vi<tu4&貭'3Zs̻Bs ,Fv'ʀ&.UWK+_U1$tqTOLv3,ض2)G]ru!5 9 >?}VګZs/.xR *cǷ 8᫚QU8OvK;׾lX\ x`Uho/~ĺ1Xo}tA8~ ='*\jWP6FAh.欸miVTJ2ꜼeqB˛n5dذ4OD&c3"hBsȤ?,eX,IiA2soJx|H|1K?_y̒ |=%#NpJt^5S䒄[ v 3o.g=rgš7  R4T ')ر -8+L2vb4vvtw;wBN\oЀF~'.' Ť+E!cߐ-ajsjF{aK?߿9Rp.w_yXG,0&W5oyґn>~o8uJ*?ĻDm/Dbg2[|K- 3DELWM<'ia ,8ͺ fk=B{&_)Vcp-,/FiV{!,"g-Z4,Ge%aY/ [@ܷK:s|vg%a1) vAz'tS)3ϖGNXŴj"32zE~`h/nnvMagNYlɗXO9"i+yu _Uf@#ihҿ`.p"=4BVAX<0ITJCtt󶓹2W5vdqo%ſg瀂ZAmG_`7ܴ$d%;o8=1(MTs;j1Xj.J,Xlw1Jh\ˤn2EX"-uS euGqR4̓\ZVsD 'li_k [n⬎wT LP?gu7 c[նE.P9>ѻvnl;\xS/pkktJ >*(yݎ=ˆ-}(bGc{WY؄#[ [/$xEjkTpԶàQl կrIMxj;z<뫴/~ xQ;Ƭ+eE!<.,^"F;ՁŌ%I벒|Lx(1Ä@L0?8%ۭ)E#_V pRM0re`tR cdy/`cQH}qe`jjRi%Pic(0 fsݵNJ298)@@s4=F&K7պDDg&n6'*a)j[?5u1d"[tٷ:ɗVEQJC%1j.dWSd~E",)j) OTJT+rT 2,z丒^f>I*%+9CGPiK8P}V;r;̃gE귭wyNu;Wp}+XGªz g Mw EThFώ&7n[G:eA'/,hZ,J5eܵu#ZVz6f3-cRd-ōTpuf0k+ eql}O|A&|R$?~|wPuOIW9b(A/j;+ f)O1S 9Ȯ=މ]Gha]}agFPs~>s"_>j,ːGV4jٜou;'b:ep3] &ֵƝ z/\ʈu@'Z[0&]ϤdrSV of]f…^TwzOhp$da/{ZDzzOŚUuD;vkMTy_)BvubSI^6ԇ32ʧz|ŒX!:?y MY3ezNŠ}.}/L X9u;HB̓"JfcZynC nDV~hʎo}oDIhY(k;z>fS@Bdv: OgE7bCj(m cbhL!Zz]oiCNۓ$HqRQ'W^E&1͞w$)-n%odGf0J]c\xSC wtE 7XqF;-W_c$ʖZ:4}Y jNS\!v|o+ȤVS}Ϛd!TyILCVm?cgTmEnβJzǟ;rO(b,}vTH~Ȯi-mȡ0U;q~QNul;>_fAG+-䛢Nny3mҦ5_tkw1>_i3jPǎulی(K_l$/Lذ7{6 ^jxܜܼY\wKMT|߀v׮>݁7xqvk{`_s+4AڬMgmЅc&O_ m H.(ۙY'UL]Xue3ydbo3f\g=!{M1* HMH] U铣"1}9R@嗡*:€g,4 )QSJ&:g\\U_S|`Vx|zB;eоcV ǒH"LIi2i Zԡ!Dn.]Ev>D^Iq;FYNR~?fdZr@kƨXQde[gvhp4Euqvbs Bm&7.ׁ, qiO}hxW;j$~'ķ7wVj;/ǃ2v9mrEF-trqa\2AL嚰;:[%Ȍ=6/Y[]263p\'B|?vV(;_)"( *f(Lǝp9P_%N'W܁:U[5Wa)0#z~PDuQ)ʅJ|nj^SȾHDžP{AA@B ,uNqwYZU6$}?xc/ Gݢ́Lal;"N uIy\D'؝ts2jeEa䰕 @kA+pPvDǥY ),8RrD;3ſ`2;UL-g PX~m]_IaÛ?i׎*O@U%[>'&TGor~%|ֿWvyzr)`_M< aS]0<H <=}UUٹ!U+%zt#^1׆9 ;/YQ΄BQ<6wMMΧa@S!_ ^@k+F4C+'X5kWk]qutp4!}W Lvo铃~ ۶;yovͻjCNz5A4҈^7!zY'Kg) \SZ_aᰩbm@CRaA$hE|S:48Y,j CNB 8# CiDŲ.%.rQW$패fL2'S #n]gv4󫋀UX;a I!.?g] (Ւt|yBgr9)u,iZnեy,z"t軧-5xU {'pY۴ ;HPauIkX#pkN \#!o@pQR%!1]k VZ#(&m^oA 7 P`,^ȷWS'E*:i⬼{Rv%[.Uy^[bZZ OukNELnDGye^[a}Ng$4AQ(wc aBM ː=ZQ2WEx6NQ_fRG3O8^knkv>,Op!/46d˵Q-u7_X>"XݡBOB9mFrޡ77Q-]ܴ&>\x'˅(q9Ѯ Ȓr?V,C9v;/Q ')MObTGBdO#6m}q=wj4]#ſYK.O#枻bϋ~rO2<qҕxI Ԡɢ؞Q~pBNo Lj̈ oʡ()th[:P.Y0ҷ_is pqZ[iBF xݼLTi|lB_DX.x';oCy4 zY\ÄϭY!<"UYI$up{Yy켞;D>]S$m C碂aփ*;7 }7ѐxb5ēKix8N; m:5?ʲͷ3SiEToioVK9uLvExtZ+ΔY)ud?ܧL)dKpP?MH'|FZX^Z+:ldl'2aU]TְXH- s\xSiC-klȣȊBam?&rt/5MIބpK !Aə})5"SB`H:j/7LϳMP|m`yZ@#-I]y ͦ~ZU7)\Ғzsx|HfGLgl\ױLedvufY}x 'RSzu7Te@U_ǃ)@ ~┠$p.uD_GvпvEPcG~rq/o=3{ϗhWKb+ Ԭ&ǘ6CN(5 8 R9lHW]=Kս*cduevؼ X_3cd!3f(,̽Bٮj+#V#ݳĤIώᙥ9 {zgO˧Wc546E6Tz>\4[Ȣ2Y\'%M6 ͬH'CD3w[늩!j'4HO3@>DNN݌}s&~YgEM Ɏ:>,u P\=vQp1(Lw+"c uR;.eHSaY5K) #:2NY+hAblJưi?0:Z^:ZB&{ J'idLo#.NM*ۚqUx .ܽh` Qc]4p'L?|ƛXe"Ѝ{,;Onj<,kNrбefiЅ$ʏ^-Pu!QcmΫ :!v2_St?Z5-7t"Y_2b&4|I_7忟 #Rg>xT2ȲvN1eGXԐɯy'& _v>šf152#?bUd{>;|I=W0Ahy}"@xݲAm<,W߈Fn 3EF7lMmZjV#yU z?~8 dDGm%+x΍HV~F+Ix`ovoH~Vyiv/L\aW7"A/[Sp?Hf\0_hT4RR̍8P]t]R.H\騘Jۺ;O$ńyQMӷ5kMN/OxdoN*fw uFv)MAA5D{Gn%iMžQEҳg=( ]fN&e^&Bw ϸ&N^>y,I2i!-bՋR !j,cX`)}ִ3n)c*ZIt엚X{f10/~~hRqla$0Y7@r^$R-)-)E|Ud5!I50<&,7a,k+Nlͬ o0k tA\ sјou=0s)F _`kd_kki2 "̦B$0y5iW,Te ƟA/^ⳗ˻AWH&,2dzOI鏎 sشe\sw4˗e;hF/͝OWy\O߷Z֌|횷#gOё/{^؎ȎXRlu #x: $|)O;+}ٸf6ucy FlPh@12 (ORȣ]jHޒuFrϋWoK&fF4WJ) tqUw Z- T:|(kמ&Y!2:ĶmbB[+6؄BkVPizzEv)o$`-\YY: u-x/ձᙖ桙f8c\bwR]jCa O2 P]⿦f@ s–׻bLl?OK)猰% ;``^Fp}}6bujJVݲ=A@gE-{]zG, гu!2'%E2d8Jzи-dU\z:GQpCc\^6tyIC-%$ÓM Cv=s}vauAâ >0ID5}cfVAA0"R6ފ޸#5I\=L{CS.<|whQԝ"&2*y GL(L $˕PGFqʿ3S||U%W+(~[3<\ȟz`)6|BoEBt釉~PFܳ+G8%Ggzt6/p^f፸.ߌ}5b[_0# ,[bX?nR*"Uӭ@VđZށpzsOH| ) +HqJfɶ3 +d 'E0DQVvc_,+OĔ8>n!$=Zί^X6"[kɛ%%ϼ?ƭ;{d y FFT܉m rM4BTeŌ.c8gZ`,4,вԆ=RY71*ۙ2) CI،Y #}w\K zKr41ᙴ(k#owR"prx4kGEҴHekqKBfK*VRJ;3a>@^7 TٴhY (%K{aGHIR૥$WA!g U*Z^ c1_}-q4@ UN{@a=[J(dyҹZqQ'Wqߐ{!U9ee~QPi_{3EQJ %Aa82xj ՇSrz!i |`OG<^e"TGع!2;h%vDۃݷu?<_? EGTQ|Y@07^ڇ@J>(ؕuA^ }Jsg-yAӆ:S+XOφ]NX~1YTa#ƑVrKsk#F$as9Fê^,WiE]QO&FKаJ v4DH HNAvZ:̜lDv71 }gM YF}g>?_bq]_@s}&MƳJ8yV>=XABɲ ~dqj4([s!d8c Zw7,U#́gI{.}_S f==xwߛ5P/vﯭk{`GP*KFyAiDct熲jf27}/tYTnsP+&Ɏkz݂sKG5LV] I70}3R؇E28ÇǾfö^636%<%D:;ftXK)UiUOlMPI1d ť`Yޓi8x¨bbP < N{5|^i@W}r](ɛD{NGZq5K@aò_}xHn%> {9R'$O/7S֊M4x^'BW+*V(ŒA-k!/gm."vʐ! Ez"C9c[^P9J u! 8WqİnHquPA2QAĵ>nKfN|/B ytPZ~ܐCBw{X2ph>|(~UEJv.+ݻrl bZD&ԃqTAkwfWTHT1Iiθ,Wl`4jv'Yu4!G31ਂoC[ QQ?up1GP'=VdIa;.6)q\%]tCNOU*R4ӁrՐF'DpL[;1< s)At,zl@n7&?Vw,z3OY zImu"Z=Խz/?%դE/r414bRY  *As2!d3ssmwwR<ml2r;_c.y70}W}k))Om<|=Os7l^ۘ7#yN_ m#} 'fF k8+їGZ˅G1N'%N2Ol˼:0zӸ ? ( 3sO}yHUS!g02I{?[[a-vGq鼍sޕwxX&z")$ {|=۵#Ozi\, Ӫ(q-/?^w폘1?ayW\Kh] e/q Lzp*ffY?wV>l2G)UԂA-Y;~R9qfm,IWMLnEh(}B9@?SK8g݁k BA}!)8m1ch-XУA;<~g Ke:ɂV4' '9=LakHhg+]csfȐr1z%JB^ bE!}h`9LRlI )@oxCa EPX<98C \c w}=BGv:\@9AuQ؟m 81ŗbƧj ~k_J>zJ2ͽ4Єtl@kO}*&@(''dfك(*@ۗ<^K?ͨڐeW=\RPP( |ɾT[9PUYi 5lzIk/bTm2gI|EQ`$8)ʫks Q,Z3UC=C2hV0CY󘕙 f4f}+y ߏSN~4foLvZ{ MQiVg@Ob&!5j~ L>BaJG1c+;3Nmk$_>vűq0Mf%hN䵷v]]i|#(C:&F>qXΩ]D[zk%TlJ*_lVyʶR2=+LDK`w6;9C-vbE/&Zd(l̰m~Ϩ)I N*V15A'%$C~?ׇi١֥)O4g >tA]t(-) |:Qd9M \BD.6 "SOI&׸7T<#n͔)hw(>Bp}\Bo{ j6E7P}Җ$%r[;N`nuJJ_9lA۬%UGW.fY6Ly)RV.Xot7BTV06Dk{uΖ1w7XbDCҞZ96]>^eSp/ n'v'oRΩ.r=IW!ha'ŧZ;0[la-ZkΠRq6gXLY2og55۸.o.#'+O*TdQ_eL2{Hb&IݼVb'K&ItԳ~78zG "Y^Ҥ,I@ vb6o{ N Dr#a<1Y>ϙ hw!RAF$H" 5!;yZFGd=MSBaFHƞ)f.,^$d(G\Y~kn:fG܄,+Sv |{W~}* "?W[*M%YjtUf\6hQ"-LښW9.S*K ubf˷: q5I۝ j*0PVNS-P1""2ȪYʅɶv~F j_%N˰I/5&I_۟|4 ݜ* m-&\Hq5RM;]gxBv`TYá\w5Z`n%z8TI= k;jqm Cg$]6wqݥ28wX} @oNbd_I4jFŎ(&ѯޚ\*F⨦ άg||==̨3gXޓvfbwɢ' b=Hb4_ oV|tnT  Dmpqc#A_ガcֿ1NFf32YڝoJ*/:89?s-ɝ<'!nM[ɉ?/_\>]cv+]yY+,15O4tv0]w6?Oؓ ??F H3`G5Wוu)]5 X 4$ekJc|`Oeu +s4#5],N'10K(.)5@-0}`k@+&zJˍ"0Dy~KKLq$"Au rr#6Xt&MJJD:*#sOR'O~qSF V AJWeNcL\OT¸ӻV;&UqK*UM/zh99' K@HM-4fSaG@>aF5?Uڮ8g`cm)%-<*}a!n*#2xuq ri!MKi mAGJܕex捠4PAK͠& *⿺$r22ns[͚Y-pƳRjv+(,aؘFBlaڒė}jfڗڕֿauFwmO:oA1x!yEۦM-BB­v,fK$֯2lǚ A\olZX 645Vb6"d1愓I #qK=[,ERlrHqiwo\/v{r rFrᇃ**}OA'x|$ݘW "Sftic ,hL{'ekEo ~4A]L;PiUP&+8!bXMƿݕ_;J~Tu,H#<ʫDhfܡ~@:cCrgOS#=W?v\S %,Rm5Ak'd  Sy,ɗWa]$FpYT(lJ2(,ߋ#>IlmYLOhց+Kˋ[m<Ζf,f}F(Ă[m$ĬA*5|H8iOg}SMOń?@!%͚S`bE^7*=d95/gmޝKVSH"}eJ{ʊQCA;9?U`v!Mݫ\S~О8kUc܋m{JLއe<*(alX}7m Q~ `mȪm]@G0YoB}c!񾟒qerEU~Ѵ4TqʀX.{ @yϭmZ89bͳ} oݷ[,vr{c+J_`V'՜ڄ9AUb;{dفLj% :t|vz-POaQLa`NuTEXpR=&LOM (0TMY e::ɉJ붶I.H6ӗ[z]r1YmRQ)]@k̎>VO\DUL岶L:hR$|l>g=Kj%I&54@!sZ4W-(Ugps>s.N|̏z\Ў=)Fyo8gF!._0~(PgroyxpWi|c{/DO!EdYc;,rŜZ,g:iT|rKl#4@/㲦jWru̺ӫv@#+3MJ<<{8>h{m.g#z#w@'cjhC%)#VK;Q.С1jpo:jʲ4VTGSc(ҁF*b`&9vLqNխ$x;T Nbod1mp2f> 5@4H Mf ;v6 _N1t}WcY 73P&u%"n[Ӂjvjۼt4l*oEsZ-p3 ߋ[KSo6a0ja܋DQS̨l+㖁YAQ+sSWCΤxzĞ9, 3`0\8%|| pOQ(&HAmgp˲D0XPkO-Ь^dD_lIBBsTMt$qX۱1TcR6`JkCT->EUov̖hgb$.y J Ux|,eTּ2Ɂ螀6I$JQyl{6\Eiw 9th6+)1G8{чlQǟzcc;S 2b" /*PyZI\Dm\=pS5ݹp[0zR ,RxqSfg7]+l*5=P=b wQN#ʗZ0rZJe2Ũ2ʡB.|R񳞷AbceN08^a0 *Wҵ;i#Kz&c2Dx_S} &C,w'XbiԽ}&ĠoWW.Ͽjhz/Sv g`<x$0*GX4 8&[ZT3V+[B]LM,kޯ:)".IRgf#pDUJ@|Y0OE:Zu[2qz݀Mڵx `IU˿70~ v*%qfunq< w!C)mɤ|ϟN<-߀dTOvɴ9Ï9ukբ#8ٳ7Ɵ 0AFikS$ J1ǕIC 9iJmz)XS.%"#,no"$F,nج9A3dS{![?[l*ǹVFK'B [?(os"%&xVrIV~qK_>m'o",=(x ,d(Qr?aWɥLR()K͗ejQ0@I6JG= LhOP,9)V Kq>R}P':;7L&H@j0GI5 [әÁ@NVM7yc{}JC;-|8k"mX9Jn|) +ϫAGu`62`7/ ^$m75xZ VC dYd>5VBj ﭶNmKhHm◥% ?*(9D5+OmPN&l9}'ߓa_`YvVfٓ|6|dL@eg,IZa 3(!Χ$P};Ckx.ը+'>`YT`2~xilTpKG[I] 4+tC} d0 Ft2YNvOVM %J!BnM9͖E^Eتnȏ蠢*ʞp&Xz'fpMm>6ݾDg#c3xq~KhʨSlJƀ4?FẎ*CJ^Ǐ72No_yܾMrA1ޤM=^KaIHZ}{N.> $'ItG^i&7Kp[lBq5wۡ5|NR3/o@v;bny}u߻@%-͚X` {|={?QNrqd_cp) J [S.Qv>'4Ч lӛ;bhYjpJ<@,gNƬ9w/Ec[?rm)Z[;ge6ndU)>֞ V֛׮V Pş+mʁ~e[gB/++mhγ- _ p."7D]n,5IFN< [|l~Ip:YagSuT@m\VPaC7@Ҙw&"hF _{y2Yr1iH;fjӳ7Q`+#_3?A@K {c prkdJO);e32%x'WK]*YL@Ҁ,}rW'Wcϗ1sZZ'8]E}V:K"fZ pV/q-:1fZWFs_M:Iz9}ZJ򜘛!:#zݥX`F%c;/4`qL\%f+ O:WФ 5`lWwsb6;Q2kk۸=v"L3]նT;^: 4iP٢zWt"Qc "E Xf,9l/E _Spef^9Ȳ>d)p6a +/sMI҄a2 +&r -$૕{@ &+h{ro,=r@8fmHKr&t:Jj<'lC_Qv_cEh6mBW%Hq o?>#ە~g8~d5^YR-~GkVͪ![տNF-%q&t RyE=ǺPa .k"ΒLlz&6C–yhu˯"lRH tѿXv^5L <56-+. 9\)L)!njY(z'D}57_+۵ðЗq #mXG~'g扞[VW%~yD]=6 #V_$54*Nk ) vɚltU"(I{o!~|VYzkXFP9s/Q/W;yae4/tJB'Hf 28 PN;o4zղYdQ,Cf2bc̳1PUEQ[#}s@$"/}GYa E#[l3NM8]3u% #r#t.BmW? L:(\CUL{H)`/oo},/YZ2I{`8x)M  L+\ي=b7bR*_7y{CZ`7gO{_:ū\5)h!TzUƄ` EG W*jiAr[}q_3.D|ϐ'V6??-ߜjU*|՝"Cvd.mݭ74h<*AO@AOY"&10g;^5BT0PHCa kDe̝o-> |*ԚS"&@Za ,ă8p& pJ:-xym|qsb^T9bUl%Ns/ rM_dgp5SdɄ89vPP$>qm1ΦZxSC#:vR#qn[Igk#7Y-iQjsp9Nӆ'}KO]{xSq ̐& a֟/] +F ʕ#rX*=l4VM ʦ>B۷$*eXCc.(e_8HS~CxA*(Ze^m-/ʼnpuؾ_"4g@\V8ux9Jtqs([y¶|#vGlchh/䚦a|N2"7cū dd'Ŷ5$g')]ψȔ: 9$(vd\=PD_zКx!g~,nX͍ґ'fbTFǒG7rkȏ̟rDy:}82TemVLώu|ݢɲ&lD)<{mjR*M{Ȱ 2B[nӂ*p0vq īc(W1ZYC'ELﲦ?jUZd_1u9CbsiS(RKDh A4F)&i6pF)OaShVx'<%v|70`P]^ $Iw8'ZԥIbSehx-œ2 tuXas4,T~i,"J'e_O #OG3E Ruix%r޵uGR*LI M{7"ѻ=JF`zKKpjPU- KNE | Goo(+9bvY#V2Tx='jX鑑pMH%c$9ǀM([#v4)Н씭\ +WS[;ٖ$_! dP1%)߬^'U𶌆d]vSx}~fPߩlVPqiZ:,Y_3C}P 3wHf |=.͐=ofi+%sO/" :O{Ƀiۑ-a(ikZo3HS>C,*; j3LWK2pʢP_ E7?*!])1g;G h9v%1 -oA!XFݚt~׮?UL~" D>7d ,ss0mZ}"RL]skbq4BeY J`y<ˡK1y*@ƃtz YRm*F<ؒ9D=ʀ*R^h.B€0F  0m;Mo S{\59<t )!D*nkuQ5Cn(vp19-{mv;e{L"q<#O&_˯e{CKTsl*+3޹4(*UYw>Ûյ[@i,l$Ul utl J38m @HKꃓ(3BFUɂ>AV#D2a#4SC.#+V.X" OXqtdB;{o׌əeɬy=RuߧdgJ$-PbǪY٬UI.O}'mUMM+1++WtƆLkF&[ =av(zvKLߓ6VFRnM&m>YNV.bbRn})?x_(DnhUV(A1FמR[Cm ۹Q464~}dv釳u,ekwYBC.z@~?~eښFF1)[7%(<" kVxx;)%j;naլ~ Wja+*-0Mb%&8GF׳7geH}@h4r*%d^ii ~<^0 GiQ .&eW`6l<Ŗ+=YK3Sh4)R]{8bٙ} /*sh9oUEyd24Vm;y>Dw@WvY`OĿӱWu)+ӫ,V([po~W)X0D%R]P"Yb#I#ֳlWC-LT%}EHi pkF8 |;v}{.%4,jUW*B%~0?*l T*0j. `N!O'ſK$4~ᆰ:!~eBk\߼0huV0)̃ w\K8݅4uYx _͌V8pҶLdgJnF:hn\p{ @*jM,s8-DZyjLƩ梙Zf7ޛI[qͷs>.0vȁP}sΕX꺒 M ,ۦ4|גrmN\,9<>xLC4R"4f9F4UGc qd}7R]5u*x;`LFT0{дlgY9tuhpmZAJA )*i} nj+x+7 %Vp`؀5[jO% TX}^6SߪgŐr}__Y-&Y`W2f~DJ_Xrp]~rQQcPF..p#Vv}.)n|Too,u9,a>2]`x )U1Mr<.AxNP-|Ɯ)UE"VM>U^7T?X5cldcmJ\ cxR'J$ fǍ_a!yRL[H[[k3y4$)&j #ҳ鰓=:iUҞ&͒熈KK?ٽYЌk>FW$ri6NXm]0 hRH !OF%FALivKАC&a149J53XI7Q}}O!x  jDI yV[ڀPk%k4"B>pHMA. #4 K2`!Q~wQm2漡s흒ߜ3륞AK?SolrcՔxvq0H=ft}kf_c̊ =DOnDWpg`A: 1|;l9h9, c_| 43ѹ>G#).`9/Z?c=^k={ z"V^b[mDPZS?gLMeb{~u{r&,zj<N;{A<@MfN *if,\iꆉQ㬫Y%'ְWQ[cWGʹyM7\&2aU;XEǗ+lxz>kvk:.:v5 (ܕOy*rSXbEp/z~-z ~du#˘[ i$Q)ۃ9GM vwUO46llʌd=7e CGU)Bt!,HBYd[˂ń?GGo)e 5E!J/X?}}ʩń—%>Hǿ1m]i} {R4Lb#9flvzkj{L5[G}br+eRx6M/9OCp%LEeRWp˿a7X/,L{܂Xs'pț*ܳ/p}sG@#%i@ 8w_F>0<~z8'ÉdɎ;hֻ_σ pLASn?$$ċ *ړ]^@j@/ \ 8V"7 )Hף+ X1|E/_Գ:j>ןWJ;?}3wL[ȕB'BE{ߣњzTg8{{/TΰEݛ+V?87lF2qS{5Xr3 j4^Y X*|v%ӣ\<]en?_;Mve+FY2Y1SΟR5 pz6f|-{XS3Vlvoq~:n|>M ]gP̋hӳ(YxBoV +$Z~ʭ. m=QЋN_gN}:y(LAR7NG(ghǤ~T\?nΝ((律LlI h,񴜃9+ t3h#'}3iivc0JO2נ'1 ]X:{6N蔕qfϡ8gIQ1ᷣ->;b/Xyz8{ 9UQS 7n3$gVf&LwZ^v;>jԘ&:L.o2KH _=1PX$e"Q(nj1/Y1 v7/ k&0'F>*5V4\=$ _;Eq7XҚ+51Ac3 >~6w 챡WF@է gD }ۆ%<ԀiLqK, i{|qqdo55+]8'Qڟ1xho/ :,ij]Dom@ ;ܯ1Orʳ{K"cOBZZo ߵ{*[3hd9 y8L7>.^JD-WYtĜ1H}wDBa۸3S/"E&텓jwL/6B̀d7NR9U.)5rb iYlӜ(7 "))?*JIt+K68~of[B\n_#`@d̚nbr7:P]}{EwX06^\sxi-U_KA 8i;XM =w3i1|iO -1/0%AR ) yWxX3SX)%UCAM ReK`.GQodʂ3a0-eO(%{ޤHRM2RF0{9Qo"gx*<,AjBJ5WMHnԇ6Aʆpϒ`-K^蚥%Zsg*=҇x2#®`/Z =oeNe-!/87)i{~XWq%NL$s+nFYVg8?0k?v |KC %mw[@aG</-651)}_|s,TLd9'N\! 4Msr]Bsg4Y>ysR'%C6#KPZ;M_ƿnK`OCˠgUMQEoCk1MG4AXxeac]FU %U[6 %'wg}2pm5rZX^2ŴZ!- >vYH (g%=FW`ςPt p\"RJnzw਒N{hڲjc- 3\7{[pAvE6WJO |ЀJ.ܴ>`̑ws/uS{cdH\.CI0XI—K)AJR&"^㻃&[94fAtXo1Rv/eze#?vJɒszQ5䭂zS#0_yΙjYJJOrp{);*3iSfSy[sV9#!ŝM~~U{ہ3% q4Z !LvASؘWXd/LIoENxa`͸P>F /vXC^u&O-SA' XMԶY=;K hx:4ftIk焼ƠƯ6~[Ӷ1~h2;2\R /Z]?A c»s*/mpl)NцI6&8޵q[&l3'S[ 8##в7ղHzb jDzՋůt,},\ pS@t^Vby$TnJ 14VwJ%.i;h?Mj7!aژڒabze15]}8qsl Ai43rQye/A{d%A|MZa[|fqmvR ٹ'JͶެ0ݞD6iZ$_:45kF;w Gڿl"pUW9:v][cAo9!NoAz.*!,D~2]90T~hmRtwEUC%J)ůy_%g~ھ.i·Kƥ{Ī҉Bvq*%WtaXMGOm[A$QV/uW>)o>ґ1C}WY:nRd64ba o{6LJ0l>~;Y$M2u3zzF,iЉGiNT—l޼fCAQf嵾1ZH4C] QTT ):XLV <@f`=.^Թ=`=>S_i"QzBczq:h?p485ۑ0Q<_"Ʊh=6Y m)eʡo6\[( "(V!ԗ>g EHn ܆I=xԊxlryc;.U<&-+(o?a(kk023 H)CP\PؙLawe%9*RB hwhcox7)LqbHԂ+/V Q7K琳 rEWx+-O댾 [ ms=荈\AXA[SE hVv7&^FݗE% k #GJ~+9E/9F%MR1 `UpvbYv"מڹ `Stytc,a)$:Wk]BQ/Uc"bW \yE1Ϧ3d},{`OjW^0-JWl#%GdrD0^O/r{WmY]X6s 㼜 3x(;x_z_Y޵bqua=_"A<&F9RAQΉ߼TԬ4=a&2B@>|d[u^3% ɪe[NZ!3>N7ǫŒ7gq}LcGL-Q_*C#G'y $÷ց9҆R3CVP+$>ą:;'H4U/9 3lJp[;-ĸrsAk:zT8"NIbF4ڢz]廬YGs "lT~p||@$8-NR{zK۰ͧy^0*|DJieqZ4%ye:4WG{kK-"~vtL;}o &:5?DZ=ilx\0z> |Hy '/NVۄ9W(-INO7zhx@2_@k#4A,@.M 4S}T>>M' #z1ݔcWrxׯ) 0[UENuq'00;wj|bVr]($Z`Mf^% ʅ$%WGܦN%CYw3)Na9>WgGjaz'" 2qQ=ܘeQt-*^ǫ"$p&5F.@S1IZ >N*L > BS<-)ַ( S羖mF&h^&H}RBgx}#)`eE,[N#Ai΢5֜LH1F0EvvtB[Ba<\W'!{gtk7kUJG){a\d\LyOXFr FYY=j5N{kB$&m/,raq!;7Dلf;7*[\29G,QG5."vòB>!ڃw_wNp,vbigc usQԕ2]zvÆ.T]5͋=z6EAza9R1>`)O8uDWw(ܠ(Y{?ݪ.%3yt_χYؒi /5=RcNTǻ4YU>y}{/;w o{ЪhTP^ͳڹuƺ WFQW!Sd=xx ؎?FYt`iآ)I;͛#Mi< $ԃre UcqNzWYrO<;+-!w X0?, ȁD2fZiK9 ԏr瞅mktPKG_V寇Fge" YkO&qnzT:P~RP i3AX+!r-뇃Y+V1;Bl胂 L1VW>_OOGm kg1R*Ag`c47*΀\\^hś:cf`G+2/N[, 5ԝ N%NEFCYեUI_?NAJZD\qk󬢒fR^z+aP8sr7 994CCXLQ,,,UO'@Zu \+ꢴV*/LU+rVu4򯽂$q:׊bDI+` :,V~h(PÜ?5޶}ṫqoLpPL| 2@X^$~<Zp 9,\ZXr#9֗txh?WGS.>!lgW#]W7[cPΤoYlEƫ.}y&^_Ԇ$KӰ۪q<"Da._C1RH6 W)֠!K>2:FcnkTӁ mܾ> hW|ԑSOG vכ˝,@iW4+'='6͐ax lxҿ !f=/'6fyKmaf v5v=Qu>`ta;Z`6;YN?k6c!zjU)*9'uf<]MWYNčbCfM>L[ܐp@l\`@Ͱf|NVVǠ+ڎ0;k;b'uR)Uͺ/gwF;_CrI K ΅ s ߌZFD zV(ɳRi68\yeGٞwz/#_YT 1_LqJ7rx sbDza_0@آ. IkYh[ۂŒxT9lS{ܘM/oRRЌLQ3*8#YvuX\8tkruP_5O#gjA6CD0e Z9YU:i`.!o+*]]Q%{\pj̇ݫRUotM/>==%va/W_Q8 :\ƚGpXpY;ll(|<̛E`Lo(2YiTv6mik5܎\0N԰[Ŝ%!,akh[x%N c2(>iQ*$/PbWE[תQjLqrm qKYCU6|̤u}ZARi|IY^Y.SG$JKVAS["UWή8zx*H*=5MƲ)`n4ݐ/9P~*S'_EռC[#&IA_K LAi#WY8n~ `dz)HZVP2K/7qʶH` )+M:\֯=W_N%W[F2۵z{ITo e>LVU]-2H=/g*ٞ7$i6,y9e>4H,%E ެ LʄÆq>ͬ<}70cF[tgfdte+lW٫%`~@] >䋩7dͱ<'3dBI)'m1;E|5}OّׯC=?O,JoqaqX6|sN:6u.lMvsGY7O\e?7Lnմvn;ًW=4W,1?ɨ[рϜ)pV/jb(#YyØën8:3cEvkG enO?,a]*NHMN˾:"8gɊ<+}gC'Fi*U=Aһַ#~}hzxٚa!;kU,k`pPMԐ(Ѐj( s_n;pdÏĦ 2,7>JvjK ,T,STF2_,s1ӑ!i1g᫼fNn'|ҭ 2* B0(f"_!ḵ SqF@p]hrFv }5/cGÐHMl˭'ʥz-RP4yMLfgI0ZFZqt¤.C KY;G1@p ַn /O zi6I%X5r"E-_/ BeEWJƒ8DgSBqo8?';V O ! Q @AZ qxTJp=ML]QVIv%@Q.}(O-& 8RM63ȏoX|6'M4|ߩdXNDQFk '+Hgu >]`WP;yxa;͈Ud?Eܩ{Hff5K8S"װVg9I u BP3:mLa>0u>bj5{hiE=Q5teY/%~6Ӫx!p 5rSΒ1,8:pR&TdTIwvoߤd'~CԓF3J'E[[maEfQB}-2C|nxdJ=W@杔 ev ,jJ>|OOCFeL36ceᬶ|=GәO/ϼyΐOmYiu튪+ -fJ71|튃S#G*?y0שhtgf 9ci:`6ԩ5Mf![[Df{*nbJ7G 85Pn%ԁFQC{ew%\7R9çK{ Ep}^O~JRe330rtUA "p F3!cnh^hiA2r~iۅ$0y$Xo暲4}*w"{KۿGlD^ ԐuZv>C=|:t4FKoW@qy !] i /lђNn13o/G)zsd+J=Y5!liM\^FR5AvH7Nr05a$(ѐAE2{(l:ZmZZf?ϲl>|=ݞƛM^slKZPuSo/6ORfڅY{ZOtf>OӈI*!/l͟n{SLm5Z˖ͻɊۃf,K\o0Ϯm] wi'<}-7Ur&:NL^$ 2[Jy0#kz#L#:ԏ:0*⓾>T +Jj6p-.6®PFc ,)V3TzuA*dk@q1ִsd"OՍق.?&-S8|=#{˅󣺏e*l!*»qXНƀ*O|R,,pnՠPgr$<U

ZO.s bqlp|xB@ڻS^>AwueƢcbMh׈|E{CzTLiFxa o}݇. Dm鞸hzuEcx7sG0%lq!s$H[u\$O?̑^컉bmK;W0,܌V(X=Ayxy8ȫCTq{?wOzZ*d\ i"m=_GAEj̯pMTFR*7֊ (nWlvwsFuL&վ9(w!.XaN5Vobrɇ/6U*eol$zZ8'EA!-֣ ^֑x`sݥڇǗ^맠E_`J }t0.[+2Ɉ5sx:/"Z$ R}c #fU8bƐ=1E[r ׸[P# ul&%_ޙ'U@%{NlD`tSXer$e}5Vo~TgK[N7x=kC}]9ێOʦKMuYurSJyeAAj7bڥ #ЍRw yK5} GlLWFsCtCgnSI0WQ1OܵQCM:i?q z*F]>a2fRD3цQϗ Ò#wlT`&O[] {CM'C^ێfB|XtS1YTa-ämwS,;6NT,pm_TK wSb%˵"v|e$%5Yk,"hLOYWvsބ '1<nbq;F=dq,v#caJ0i }c)cWu4f4n r:.&/7E YB.9Ť(ҧO$9P<i"Umb\$.|nN& Z'=-deKaĸ]A #+t~^6NFlE6 FcX(6Fam޲ߎT*bxY1s0 Y 6l* 񉖻W&,b{ķ"_U$x2-p4k Ywc$QycmncK ^uq1fBI LgVO Y1;q^tg'F)JkٿM&AE P ?}-^0WÍ*%Q% TK鉼nliMdf۲D(HKH„,NTe妊^ȋ *ǥ kT$Ng;ܒn ' #^hkD[f?*K`DAMdE粣|FA. ILad'oTlZ1{I9[ܳ7XqUov~/)A/@}JjHn#!1&+"ݺ'\.5[y_ZES]EuV+x"oɌuvxWPṾv EϝY׳]Ix}DYFOb EXq=A1dt__me x@F'Sbm!lTξV`G{e"SF&r>9qWEW`_Kyxޚ%dkf oC/qâHeʲxfjtC# Adj[&):Y!~n1\Md<6\0J.pNɟֈ5C|S}?0wS.׋Laq@SJ.MxQ{d85B }6Ƶ&n`o6sK}?^4Նmn'7\aޙ;i(Vu ^ $o[ +y f+.TCH@L6 ,zWN ⑂zK6>[!Lֆbs3 9njOAŽU: ./7e 9T9$PV`O ۦNr|x~=5-C.=udO22-(Q]cc!${5g(@9![0Q4~#m/ )\,@7yEGFd] ;6׼>:|?D6{l_Ӻ7f!g|zeg6|OeވUDbĐxodk5ۅIU 铋pdd;5)8cMˤ3k5QKG9)K=aS)9>bי' elԞcE- 7nY)u6W |3k 8VaٷzL`b3ʲWnrF(bqϋ*꥽u]>M;Q(LAyRDY߮OQ4H[)#ANS-rZ#[6pb@i[&==?}Uߧ(#I=Q8"$ެaxq.+ *!PSǓmj6Y@D_6}W,ޢ47W8[ys &pC)xrr<<{BE88QH[;I,e 'gm[\*M!MͮC?ߔyN;ۙ#cҳ!#~s5یCR%_V}qΏ*@Rs7EpFdY`o;0 1/M6l⭩ej00XiC ^M KkWT8øXDtߤ JQY7b+djoJ&'O?yVJ[&f#]2se@<:<@nUἁI[ Nx: XQ9~ݯafVSr7Ř @I2a7Iץcΰ}ON҄& ϭ#C~5FiN.:M ޺Z%nN>O@Owֱ9[|փ939:s!a*Ф*CZɩ˩n3/l{]z쎖J V_B4d8e~_DL;gl?7B?>J+rPw?*@*4-AGU.3r疶?-ij Sʮq3s'sizn(}@ojƷ鎖 Ǝ)лi>wx)Nv k#?:Rn<M-}|ĘMaJ)kXuP|`t]f,"=Vz"LA`zH'.6cG=mp !Qarxs7Wh_m(fǂ;]w0wu&.ȷrd+3iyYD$gߝ߰M>&|qL˟?$K^4 28ާC\_̪aiI34!Ks&]Fط1wdsiW <ŮmF-YrE2n󢫜J9;8'1{XCq`ffK [ وyQ)  8ChaaHFX7g`A8MzN91[h>)gH^v =W!(] ((n>A7n6$E3PEO?g,0l.,43 bJۼQy7LLץȠh@"~yٰaJ7hU|i.ēXa>y=6dxeeLĬ4YQXVvggqՉu)U7̯s`#z@\V4CO;dqlZC.O,`Sx@- ?'R5 ǁ`v'ş)7rڼJ2W^ӳlN8&j x'=* U+O*]6ǁGYI0tװFɖHHY6r f4pO;F5m^ݒʛQgU_j VsҰo[=z| i+[VB*duCmLՌqGQ9*k` Zɺffpd6,qqNÞGOݧgE4ǑmO$w'ߥGnĤ+DŪaF/:uG:*608!JiQDq# (Ea9;e͠ wᅴ($dy_|ogV'Ј?roT+V%sʧ& Xhu% նy.kYYM\rA6NB`\$ҫ8ez0pW)HM aF3"P` I<[m;ng@⇥h/LJj:jGθZ-e-MϛB @r@Nl8{ɕFb~@3!SOuK d5x/\c*7i̛c߳:.8W˹tʹd( N\|RH-I3{y< ؤ!I:$M2ǸAwfv]-? _"VC##I]vuL^vM➾6fʧN%FjS eM1j޽%õiZ X5S29Lgýuc穝S'iTsh>[w D xps @&[6@:HcRqn#ݽ;b*ⷌ-T&2wM,hs9 ,`{ nRv_XLPq[=bcrnl5ào?L M_s< n$mpv>°nh 6 rf+&\7 }n?B#βQ 'HED%$iFܑkf_Qh}˭/ J!ͮmHlyv$~i|*xJIf?撖6]RtWݎ]bOAW/ܢ-L\#EN)U=N)ҌM͗{9ӒlWX%3gc vgsÛŘ c5i$q{ ;3uZq,ijU\Re˸c&7 RA"ڒQB}1*E/So(i]w7u?%=Rlc8Caޞ5P". |h%v64+\'}En~ذэ/݉òi u>4P7{HH7碦xFGrJ5Cľ҈[%do$KKr}Dh*tѿ<1sNw֞,(?$[ ?؝J.Qd׿1^rfZDfEejN0ZnS#cmPB~ %QF0HSڍ6{{]ܶj/ٷ݁P7ql#F/CV@oyK@\L-ob]ӗmJYT6V1ᯕiUYv];'`SN@=F41x\ݼ#$V%rE%:衞!-$uhiu$9ŧ#L);\SeJ*`0''ѯ ~hFPv̱Ev39$tsp5)/I >== E6G /]17]r.0Ik͛)q(͐9:Q`U8f7:0SdBsjiOS3vd7d\a6-Ks2@<-}xV)}@0x˭M[[#ۨ_JyC۳3Oaf.=:^a 192͂Kw$8Ȼ8cOjW܏nrg}:ֹi 8F6KF6vO+R艬6BZ9p-Nr ìn8AQxFqb? FCp w:Dy𭀹~L,l4$ AJR-^hl/s^H13@ͭ)Ο$txY2u}R/&lrYK?X}D)O *?YCQ;>]z.ڤe7焔]IF<sn \Nݘ\N>cd7|$* :9G6|gøwsPWh_B?`*mLO+ '0yg86-zZL jYxx|d.t`|+q_†*v /';ROqp@<:n ` ߽4[c`#p[@G_jt×}nM |#/3?`8Tao*tf|[3߮Į?,k/M]#M? c>nA~^9ߝx/J3ƥy.PokK8%c"Oj W@MZK%320\+X3ߚk5 Lz>IjQF4/KdzlqvG@h{ {шӯƻTCs'T>Gո:]y }JKͥCMEe@>\yx+Y*>''9]: [ W^r0BNdIJ A30K9ݎ@iREDtm1 z 3DjuKgmQ}_`׬S' Tmq%ִNǧ푣ueICsGXŪ1.Ĺ'Bl[So-Ͳj@I)oVLIb)3Rj`c=L|rKm)bCNEb#xAЖu^m[tVi~$ CĶvl?[4[p^^qfG%mnm2ox oX1{G\9N½;/Ty=uwxA`T 3徐klm࿐+o٩.ҟ‰[C$se.2eŞNqr?#\'Ґ8%m_/{Gf=S;> ѮoGv]ܓNotFَ9*Η&#r}xI~Rȑw%OX `9X9Nİ} (Ƥx>TQ.P)bPDP$#X -gQF}ȩW&f m.: mA/ysqb5h܂Vs\ys\@Rr&4]ʱ;~Ak,x]xR|\jrNga̧sLZ*\) \4Sa*f]5lL2PPcGMtֽ[?aQ԰фٖNRbj8 PzURqR)|x6Dk3p8sOr:u-gaĴ(oն6JJ=5~6'r/b`I}ӌDO t_Ӟ+/EV#^1ߤv-Hj0/q7t7&_Hi)rכA'v*I;vOFNϧ*jԥHe 9}qt=a S<(m$7s9Մ"2S6;cgƺV]|C(}!N,"Gm%v p<8ljXh2zv(J 3܉} , ubvgFsG{]r֬9r.dU&W85Zf: M˭0bր^V"0G58G3?7P/ Pkh1^Mar)]G ejV'fy:c G ޭ1)ƊXJRhiuF(5Dp ¾ܩaJ{mҳX &S(أh7L;K&q°@<$s㳣4kMG^Y}y pB]o=' 2 H_: :JmooIT SI}>r>rJ j%nsd,eX!r̈W I~0Tr셯at+Eid !d:#DZ)aA*Q8XpaSCs t A<:g4 )jXչ;uDNi= [eL3uL7ӼtCԷjI kWG>!6,kB'yUz *|:t|X'dQp#!pt*¯B7N+p=I53Hrz-N@*v_ ͞mO" { I ÜYbpT38{0D*6rs6F[xmP`jkRخfQĿ6<7x\{ hA0Pz(>IP&+@F'הvtWi(!6oSm Ӂ(C PBF)1Y _!ʏ+{[r/T@I0ľi9 NJĨWFC CR ie/+mc(7k!)I)c.X +zWS=ʐmNXGKfrF;(avu+ k4rL˅XF$"-c0vC)3=`PPU `O=`PQP!EK e0+(\R۫eUyJ ) iu[Z5x!I"vǰDvԣ8d6=zZ.u?#kk}[1m7qa,L5c9SF;@>61, hAΣѻP7TM-3$сrΊUj 6$~eX_eUur9jnt&l9?Թ =;^xNn0?ZOg=J;RЌA֐kIw=/WFgsd<#SO2 SaRȢHF+˰ B^ #Qq%ծӅYEԄ2*>#NN+sv^d8.|r# G@ 2UDU!Z7 **H|tiQhw:3(֏]JS0Mg0?L!8i*X[d< T-,sH2½"`S*;hǺX(R' @O{K:(Aް6x_ ɪ@jy|TAJ!nz 3Gtj(n: |hZZBZr "VQYa;H`Ǹ#&R;[%6MP0ub HlZ4%ƮIi?WFX$yx^ڵom5Y}2i6Zkv:Uφwnӷy e3:[B>[Kpw08c9\Jh tJlMh!3('vx`u=SQ[r &n7s(g~A(lR"Z5z_R:0ެ' 7o)Cl"{h2%m|21$,QU֚6 M>0ϋShLL葕~vYV3zḯ΁w`)p6rDpa4x aQ6CA1xP-12SYy (H*d\u[[+q+AӐ;rJ,pq2q ~ oQQZ! ^B4K!_ f%唂gC UF^ UZ:ZY8G6T^Fh52-1He Pk(-2 _ϠU}ў M4ͥTDR6xU~ Pb9 s5ke$bMHCi^V%JQmDCYHB*rnMÁ!((OEIԞ(ah MrWwWe2lH@P?_D>ayQ]g՛MƎȑT _&;pwg NBѪc}*'zkKyJ&wJRT5s\~K({:eg?s:-Wn،rQ$?"Ԑ4v9Mb mvw$NG˖],Ap0}!UiskRq )xGuRy[uPAl>}sbՖ+vnٻKa6pf[fI>1e~HG -IJJtrԩI d[똬=,5{{&n z8'p^8ju6 y;uJ|вk]%%wm9}s `8Y;j 菁qE *R% }^u Oҩp~ިꐲ2k)`KDm)3s Қ O-2V}ns.ٌ d<5DDi۬'5bĵWSh/KBDIտQ${o01@yN|W Y#v~a1ҎAuG+?簀9FBWo̭5?bp ӠnA۞XNܲNGx#k?R|H}4֟vQ ”4_N5~Jsnv{ u'oȹ۔ۮ)ErgV1)`FZ1ZG׀3JS{w>;6Ƹd{onC /c}%Wm%:+ ,*o«y+!ɤ垵 ΪH|[]kS-(& U-|&'0Xā4Wp կ_U-<'v!j l!^eNw EZv~H;xHٸ'#y=`Gyd6Cu*m$8J0soo"ⁱi%嫴eb2Fk= p=?$lifZ |O ]à87˦rrbnw aT̞D? dZf6A]GzR_+qk)E>7}H8O\ ZaH~Vָvpm.ŧr [{Q{ycĪm+( >EUS?7NUÖ` 뭈@q-xe zy>EV`yZUɐ2g]voJ 2rͷc[NQc%5dM%MA(,r{ٗGshrv 5j@ 1YǍaaB[e\z 3 mY>mnkКt 3PCU՜K w?~F^rr^$\iXz(~} 6 ~1+uT`gEuz[sѣ1)kJ0rogg~Gr|NXo#ɄY|aqt@ 9**oFgQGKeȼiyx'Q1zuto1ɟ)\^}Ex ~6YQ njiXR~icm?|J23c(E?c:懇'9#`~Gʗޗr;<ۤge Е*vRx˸T j1ئP8t N&Y{LB 0׃R)!Fbm2ia쥳Z`-~0kyepU_R0wHoЇψ;'=h;3'3Tlfy.Q:Qe{<3Gm&:&1^"iwdrL 4p .d$ki.?V d""$sO sc;dЊνdji4 lX07~ 5BQ*ɰ)Yz̧=EEWvl6QoijP3M" LLY"2N<>26H d7#k' w A=+*3 x)ܦ$s}^ЊL*@yFz1uQ@j`ρأɪḳY& !@UWl"n)Hj1I;daZ+= TPzPTU_F (w5--rn&}={uՓ~ h4P <טpmk?!oj?X Q(g&@ C4 /x(+ Q~ܧ91P dbط~G{s\iu''=>c>+;wvH߶QѴ>ziR͝'*;)IЂϟ5>~Y,6ԃgWZ|Ϋ^wٓ\Nun7{-LӺB;QM:F&Q]m`EȔ8v[Q92cN]"-].GQDf(m8"u q{ǫfޮi/ZbKwTe*眹<ZM>5NlDaq-*l%[8?*:=D =2pJϙ)iQD?h;'w&fdz"w%sV Ni(C08BcxePkQ7( q !!Ļ@aQv[O=[3p7HsS4~}:y`aY18tA 7R_Casd Fg0Yl!C R_ҟU/ѕ)TF&fV6vNѸJ?j:zΛjލ#NͰ.ψº-jW4x`sM̪r{z0m-6< {ܹJKaBgͶfǺj$fsιGm~ffffffffff$I$I$a?pcMyVA dl0%V^:k=-6z;]I$I$ J\"Lfaafߒ|;;̶$I$I$zZ%k Dl6'l;3`\GUUUUCW$I$I4a25qKTH0]c9aK8 ܷmB!!B2T۶@XViizk@@BԔ2eS0v`)q%[Yq-<Y8kg 7Xs& }_n03B!e/34 \vCRT B]r# !*)p5y2j#j4ʌdQv^.>!1ɤ5cs,HTT$il9@D1X@$)Td=y/ˌB!) yE_Bv_A$2J3BZB0b8<-ySyl,Z/Uă@ ZWgEPLbQ)3 fآp۽5DJWM}O owP!f`7 !Ld'BkX9<90ҽɜr | rT+G٫z7+/=5ݶx1}h[D]\KwRI-8o} _L3?}xUoZہs_]_3‹<9 ރ$EEOy\D&\sN>wߡ"iw9dމ!q X7@wdx4gh|P d=K/"zhv@)ג&(jWX*7 ?ë{ No`ٯ~>E4M4MӿtDXa+3o-`%I$]L] q<]琪05utfkKcH(#Uo xdsL.T%لdM-Ŵhcxނj-6t'JRU%IDQm"oHi߭@FX%I$I$!  c::::::::q^2zTD̹B؃1Dжv–Jq᛽R*"L쇖\ ;H%V^6NRi3 0~Z Hrn0lNRi3N#|u]u] 0 0 @//rTfP(*1VM] jiYBlocvUg($:s@(K29Pd9\_ %ZoBRkG'7`4-VtȁFP 'HfXDIVԣ9I (9]XSerp)t:3蔰Iu)3_vUŚkhvl|#RHRT*JODDROu_9ƮLʶJrTw+=5ݶx1}h[yRO8dT)5ŧ4})'=e""雂֘;ezH>b33ys|`9, \rg8>0tYd%_d bП p_lHk5fAkmOꀝzʛHͭ]Nϣ/pCOc+L[hᅰ[ťs2bJ)s(B3soj2{Uߛu4gmn/^> l-E/N/ #^ymݙs>雂kbG}fOgn7(ZT]x9B%do`˛sqk %`xjj}ʼUl<%x\X[™OiuIR۠1i9עZf{\y'*MJo6tտꔲMZY a"-uBșLwgL3_*e*zەnoxn>6zHn7JQdTڀ%Y"e t%TFn7f$SAB-1,ۡ7pWqۏ~a033S[.z XOZ.uG-t/l(&Y_i7襏=k}˩܏GE2)fpMR4c #^y eb;\"f Eg-.W „ͶTڌola2t=,,* ~d1#OJaBf [*m2$D/z1)VI"Lhl;aKMܭ\H@ɜ_߲fW)Ňr&ϿX7Q ]Vu -YBN(3% 66vUUUUUUUUUUUUUըh42"rKtcp"HL D"dUpz>ajBOҾ$S9֪7akX"8v#.   `2P}ZƊpj3Mh`z:~* 51Z\iڧE\A,( ;^MQ L|fIރ&LBrC 8S45-\o81T( @.}8ւDŌ#%!R +{#\<|B"bIieIIC;__?R( Jja "L(޽ڞ<4^jd0ab&G&DZZ @6:(  =5b`}CYG>f~ZCx꯯2ύJvfy&cU RD̒ikV`zAwr- ha_x} >jWo „f9aK83t^t=K&4 [*m" """"""""""`}Xܳ$̎–Jq >H (:.B!B!B" H=a2t}JT &tl{[*m{H@ I2Pܐ$IJ(jn$Il57m(jnH 57$I$I$#"" 57DDDD́憙YDD$P܈UUUU33@Qscfff@);OAUUUUUUUUUU Ș eA0cr5)ɜɜɜ5I]k/<0 `0 ;W3333$Iw{}uz7&mfrvv@J "DDDDQJ!""" 3ffffɈHJ[Zn _""""3333I^4mI3m۶m۶m6$I$I$I3333333333$I$I$;H$I$Il۶m۶m@g G^ tu 5M4Mf[z>~]@QsD 57!@QsCDDDf57̒@Qs#"""U 57E͍{9FE͍$I(jn,k,Pܘy6x}R:qaK1aB'.l3c6f"Lą-6ce @ f0T d &t80Tڌq7&t–J2^ „N\Ri3 „N\Ri3ADADDD  „g9&t%#"0#"""U @ UUUU]Z% "Lh6TڌhMTUkcXeYS@ fs–Jqz L?dH$I$I I$I$IJ$I$I+wmY)RJiZkc1cZk!7>Ʋ@Q뎦@'P@QAEmP 0,P@Q Emt:] I6E4(j0L ˲6<(j#B(6@QIEmz}!Eֲ$I[J$Im۶$IҶmm۶-"P쯀RUUUE*K.8 TUy~ut}nx Q~+jFB)paLBk,Yz-zF~mzgR/Cp];\ ),w۽_KJV1x8(\fU okb{譇Wγ ЇeT~'>|U3e &Co( ߒ& dٖPÆփOD9KA'Px-poG\oJ&B>z{jo/s}gx<]erO%ty8@PI+VBчp}Wיղ6u=zw6^ Ɇ+& ;+)Vv?/~ {)`IX\fƆҷ/۟GG?Ɵozs=eA9"4ɞ 8wӬjDO_PNy]m{U?)'ߣ_it#VRC ,Ű,[4w*CCF>`R^g%Y)SAgAФNP _O& h;xf‹H49I' A:a ꤅6K+(M.%E|\,0x&V@dhʳDaq; k8,a*JPtbđԅH)A~cScNR@?n<4 [GJY ޙ:+G{p&n>BH 9jazJ#$1J"|xOPU*k[IJYND $?i[GCȍ/Kֻ\PɫU9q -噛s}xVЋ[8J.MrSAԤv˙@y.]-@l[RBVҋ:t6*goC^Vsyhz{mҮ~m~D&Ԋ$u)DNk~tͬ(E+ҁctɔOĽ{S8L91 h ~%餃Ltzr[Ɨ] G_&&o~y-{pm'ݪw=8NZZvY,rCu|!q<_ݤ#ɆU}64ڊdRXrEwvld ' zH{ a^EX F5+}Ͻ84\E0BAg K,}WEc@|B3`KLMIE]Kiy'ئT"YKݕ˲K9NJUdJz3M{d3 5MIaG@jF1ܒs! 5Ķ">f.ƯE;A$ڭ(V oztL)Ҋ od4װ^i!t+Z+cj(wx&E ~$.󱨺 -VWhL5<;vB*ݒ,.ޑփ8뚋DUR",/ոLc6e$$eTj?tN\=_ Ȥ"،q)HwZ]N_)2hK V3.U^E5>#QY3uDQ?ʹE,Õ\&-&M Jx|qm WiQ*H/v)tHkY:vRG 颉Y`A!mTzR\xU})W+ȷ&+'1<@qtK],àE|7<=scVRi=?ʚxPM/Zo(z|;m,W[lOɖc6.>p!Oc_A:L#7@+n׿ Aeηk@ NjGXAֲqk&;{~^0A 8I`\HǓ)e42B$B#/#'r_LK/[؊)*+*FvƏN  B(4$2WLbs<@(K^d╳T$ TCEÓ$0DmLg2h9L`xtg v~qyu8͒a__) #X\d_ֳZ7v1BNwSfɗquD&g[Iu>D~rt6_,W6`Cb!\ Lv\%ϯfB!z+"LhIB*=L+J/yhƭöҫK0<:NNN/.ohCU>z>C\g>zO?-$UAΗ39N"'{BOyb^kǘ5]ROt_'۬t/_.,/Zt4 i\,=(\~T@H@& พ4nڮfa^t{-,U55Lgr6fyQVuvBs !A1 )a9^%YQ50-q=1Ur޺~yY7L(YHm"R?и#,<=;d#&a:/fw{0!S./OuW"ūk5:s!q=?#'ieU7mzüO6t40/Wv?ON QU Ӳp?OI (ɊiَAIEYM{\o]?Ӽ&VtRicFG'g?bZoyvΘ6qr,ing9] 9pr!   _:4jҬE6@;2:&6.>4vSPRQ30218oYLoznv 2<>5hԤYVmuԥ[^} Em~Ҕ-fyLɜy-X$z9yNGglQPl&98|Q=^>cw@ap`qxQQD(義_ݾ>}|א??xzt/ &^BXK 139Ы!;9(\ժS_W(XL\BRJZol< #(43g߫?X"LxAdEOoI-è;-@'H`v:72BRk:hmckgor0[x9bT_(4:d`,C6 Ffo3$ lEbIF J惂Fs%cg( @,O *`H, J:ɬ L,lvN W7<| ~A!aQĔ_jK•Jpg- L,}f9-qZ]7#CP7hM1_,W"כn8ΗBӍ0tdR|)8mN08Bc ,O *`./ !A1 )a9^%YQ5A z)Sn֧r˭quõhxAF`<~hDczz}~KFWvcp;138#_~[,90 _g_*B?\ k"J)D&. )BN0-[SǸtQ1p&fjh`잕@ҋ)r!U+klo$bx3IgG}-6&4|"2#YeYe#T-]fYs!U;ʌ1c| MRBҋ.!8s΅B!rpRqItMu BYvJ0PH+{* T e&F 뤅{pi >T+Rr^,-QfOs亦NUڂBI/-+pV(=nS3*VjJf~cZחlJ:#P& J.Jg gf Jɲa\H˞2v٩0-IM/"J)Z*_:T8ed?..҆i;'52@.҆iRJ)9Imc1VV14:DbZ)ٮrmX,ք(bv (vR0LIj/)27wKH,Q,G&G#Ϯ&-J,iKbh"2iA > #nٱ.5>-X#.}wчS}W/߯IߨMB iݝ7J+yW[ *6=&*{4)NOC ĥ6NRy! k b eXѥCkb44ʸ[qDciaSTR^}SrԦVE]Mb5K>Sz:Skv2( 2ScP2^K=D߂~O֢V”<%ybLΑZ@ ReBldI&IQ0m 3ZĴeWS5С!a$DJ ΚrK;oRJRJ)Zk{_k*;~O}?8S Шw)_\N.uJ#Rp)X*-7°{{jWRpvl~4q*wQ9܂$T?z-”7Sܢ>,j U&` N}2ĈLP|2Y<1M.6ܾo?hcMņIrlf0YlLuElT&$P\?4ڐS"P,7OX"""""""{J7<7DlQ!E?}C2H1(9ۋj% B3!ynlg&I@bgh\^Y6<q21ůt]kЉy c{B"}h83`;" ܵvwsv4E=ӡƳޫ5a톬m-su1kMb7[,z;xSqZ-k6yb=J49o\#ߗ {XDY3y}8 ˰9ӥ.x. @A H"Ď%hPn'`輻]Z-)ByL{Z6\+iu?Fņ}׃v17z&A֯Wk?M_ppRGNF}z3[CE%s/QlY"i!g9#dbRn̻ QNMճޙNJݒC'* z\d(ȢڋGR8$ْ s3o |Sz_/4G&AwUoB`2mƭ$l2͌mҭ"B,+=Zkr]yw^ eit!Ղw (3\K ܾYEd z>gL/.Xcg=i'rǬ|~U{T#ˮeGYRdi9 *I(;[i >ǐy=T\|T{KKk<ýMOAۗ\̚S2ވ]Xi5'FkZt5.j\yQM-kήHbW3k9Ξby W썛ekSK(.U-FwY\=){mS/qe}>Y6DAfg>Rd teu=]h5~9{Iȿ*Ne\HMO)RJ) O8x6 ^c@@lpqPeGtg0;QQ2Hw}JjAm- sҜ=qk֨VJ(.PZ) nuz u br.WЫL|t%[PZDG·vLن[;Qm"RQVu9)Jn̷72h#Ad0RWQ?\1A.Uf JbPP`݌?\GMŸ́ F8¥/7Z1:2֛+~+^|ϢUQu g}0Hp;'wl]_sǛP\P%`ړKd@KTY%@@qЮHL\ǵt) ̜rNesLj+t|X'm?ݨ&to&ݤЙ8 ᕮRm5ẑ-^LTN<"W hE{kx3`ZP)Snfj@0dEƎ+2R5[+zlxIȸK!z/`хg1Y\sd<-g>G{Wjٮ4e 'J ŬVfd">oDEwwfyitW!^MT\vݓCŠK"f13w )w]>{8D!fךH{t/ :9yn!8`6#P"jPφbĠQ?niX'9^bHhLr Y)hL£5J*,kQaW *XmNe\HR BlV-X烶[~RPz;KKQ?%V 5jCe6oɣhM!sj3:s0KUxr)L$&G߯7C'gP hsnqᒰ)Jzi^#'>Z}D2?$ ӿ ND]ޕaK'tb>vhOYooa񒴀Yyۜy;<python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Bold.woff0000644000175000017500000025311014502137725027046 0ustar carstencarstenwOFFVHxGDEF:@ > ?GPOS/2ZYGSUB0t9A"=OS/22R`*cmap3,j|cvt 9 /8*fpgm9< zAgasp> glyf>( /head356mhhea4$ $ hmtx4Dn7Rloca< :i~maxpE  nameE ;&!postG $F[2prepUxc`d``a&@Ȩ$#Sd%c%c@r*t y #ƻxڔQny3{ 9d8a`A@$9,2bp$ Y5dN7ξo !bt=?GϞwBզkř]4|n2ڥL+}{JƝh*Oli3:+RKTȗf#_15nasjƭMƹ2y*d#Oy.Fףh?zD'Q}}+VƧnoo$>5IK5J*jf2n&r\PoU>NK}C{~~?p-Mvl6ZSf朱 6m6{ `K:4K0EjiIᷯǶL+|}s֭Cſ6lQS̅y9%̂Z ˖ُ[ 0ضm۶m۶m۶mm;]a4BA"jPH40!;" : 2! jSN0%>RaL0 b a2cW0@00rX07N4R& v,>!"%M&>3j.~714C 12&c2=Z233 2+ڲ ˠ۰-ڳ=;#pp%W+p qס;7s zp;ww %_b0?`?)&+a+*b+;(rbr+7)b*㔪*Ϊj&Ϋj..ZZzzk8jFFk4kk见c:&:2;>;1:#:3039 8s3: 3KS0˹ӹ+3631s2[󺍻2{'KzyGx+zgkqO*I[;)~ᷜO/¹?!!\"T0\"B\"RHh9FIQ8rN^۶zm۶m[cOՙmsب{s*;5d7"očW˽"" ~x6p?jYP1!:t% rP 0aݥ;VޒNmT͓tu:SiiegH*fV{T VˮTna2HSޔj nւubUL 604x;P%erBzsr3FZba=_ơךXpX""9 x:d3AY] @ai#sA6dAX @P @F|ՆPT|DZ'fϩz?}Bt.v|y0>"?T ^|r2'gX'OL;B O!fuAiֺrKҁExN/;}lJ;;mf,#5osY\XKN.m!ė]Z&t- Э8jhQK2~Gb`]-AԲn%Γ1Um 3mY COl~ފW< aUA+ĝp0+YYp2\8:^[A]0k7؈!E tpV;YmgN|%پ.ŗKN#I[Ym5znGi Nr4mmcWx'? sI ~_m)"a?~&>'rΤr$pö-Zߘ#q=&StnYu|< *PN Dw&ƫ[ Z(`[ l%J@N-5'h:x:x|6H-F=b硧zѯ{9̇3j~!,8`t7C_!CK}rґTkw|88&Y(6XվJ% L?=ت \*| 5?DLj_h1܊ ({ M֣#(JoTĹK0kNUчH6Wȉ'u.)fqO=Srå.epI6Dz+ƪ[>Y(?~6h钇=Եhq9Źp.FP@Ih  5h %ZDJ<܃@ApsǍ"-ƢEloFY fwYWEZx@r " T`Q )[Kdl)O9xCl$ v?f&suXå՚?SOY(O,woϦVOϖsC$Mm͡N'P/~*֏B!M8-e+:-Wq5תu>F*ӌϔlۗx/eƖCU:ZۋH*~ܐ#wh7 -CT;{> 26XR?sQQqU89dǯ9JmNui@Cq&gq6p.Ž iO77/>%l鸗z]+Zme;^v3]J7ۻ%{>!H}S%cqg9Nb SL"Wg I yZ,NǽIC8~D;W[$M~hmE_'l@':{MMcϵjcogvQ~wʻ=~Fa9F#rMb x\}\>!r\(OEiGX>'/T$_vWy7X[{4JɏT~& ZN~.zA~!3r$7-r9Nvb5Cpf8'>R|(U#QQqCh%Tć fw2Ǚd,yY긹m&;BX:ůB~`=-eMV*=Fc_צ­Wû'xPAV*MN:ڥZNLSjt&[?ջa^cOr3>&4k2=wgY~nso>w8šgk07Sx%^|YVÚPօCQm.;î;|}$xXD*Rt*71[A/fXƇ@criOo0Q=Ӏ4RZӖt3]JwzқNPnep3Ye^u`oﱞ/Vŧvݝj1e|J 4&t=Ӏ4RZӖt3]Jwz|}i]ʭ ~2yy;z`#[}*hgrgs2; iB X|gs6ۼٜùNے4c>396bؐǦQ͟ vvf^Ԡ&7(cLcϗ|g,rpCXΰ>y~3s3N7cN<43G8'@ngB19ymJKZ1d)k͠ uh@#N DT$NҒVA/0;EDA Zq-q;8VXç"6a[~BSZҊLe&KYwP4tЎAT]*ɜBUZҊ6=EFrww%5hA+6ng4cJVkBQ2lbzqG^K_"Gv/NrrO_$s RO-s⨤lF`<9\<=9ڏ3<"Y t3.5miOG:Ӆ˸t'1)Le:3t8n@X K;cl&?ޛ ` CbV9|{}X&f̫-=W ߱fs?bg3V8cTT:+_G~կuTTKUTKU@ TTJUTJUTJU@JU@JUT T@ T Q:S*P PD>QOTD>QOTD wVW}ζ!.ki~oqg[>P߼ ;/Ƴ8s8mQNfN^y/Md;l&џ d[/wwڿ{{ Mb Y|gs~{GY,9\7a(q 0Od&"C^q(Y%d2W W CtS1'\糰Ht|~9ILa~~9UքE~kMq\jYCr m/"cVY{l(Ձ(^Od9E>Kfg}zm}r,d9q`\~*6Sx*~/*v%yBŲP$3٢UE {)  /P'W2gY*`dl Ua3l̍/$lr|;זuc3י1^#+}?6K0AnxAgpyk!^cqg2 ˒G Ql%"2I69̙x!3ؙhL,p&p&v&;Õ ĺoBFkzbR!81Nx^™XjA^!{Fbga{z gc83>s>YX,lw9 6wD'ٕ' c7rs"ɳmUM!d}pxp=8+۝+&k$s]wս\CXG{?%CqcߥҸQwS;+d]:1L;`L|7=1fX&;YO+ݴ1HFnj?ILa~Qo$g"ϧ5nɨNFu2gdTe>X%*>KU)JUʨRF2Q*eT)J)UڥJUڥJUXU*BʨPF2*Kv.kqZm-XU-c-.kqeT.c-\F2nU˨Z{mJ5_*fT1cX%_Jf5_mVьfTt+W+UJgT:cc9zMiI+3FOe&KT$ m_NH{-r 9*ª:ӄJ >"((8TI)Tgts.VA/0;183e U/x6vvmoEm`c߬<㣌h17I2~1>9<<$xgYRVzU|>u ^G M7S< 9Yⳅ~AXB+|,MuY8qg\u8bmyg7<9\}"_y}%{1T^X߅BwzЋp6=) a2L9Kζ}2PdƏhǧSw:ԍ;}nJ5nDcNMn'a`wKvJ=\8SJ=8i@Cqfܙ>9s9/I\HӸ)݌Ri%[6l'ˎt q9]f{wCdoG#(ǽC)w =)Le:3c.۪~NךMMse [>uEvh*oӿaq??}ȱ#7)LO'l{Wy7X[{]%WˏrD~*?r\'?Ero_Ȍ(7Ͷo[;W{O'g8s8SQ^{'wՕO& ;. 5}b}GiuV1k>ެivxr^~Nz=ڳXr@ܨQlW? 5S g#CtJp*9:ԥ^|?]4b-ԾiK{:ҙ.\t;=M_~??~v+K|y;_L0kk[`9|;=q?{g̵ۘg!O4?/x^u`ozۿ`# hH#.5miOG:Ӆ˸t'KhG'0[=eky嫼-=Jz*\!,ܧMinLgя[gTZ,s ק+/X̧RH/` ԶmQmqꨊkAm۶mחd'yfvsmROO8/gu))EE$ jb^`ŽMxA$.9h#<jbf{+*a,^&]cI,17-~13N13QRH`5uӐ{%@/IlV VG[L ʃMQ\Dw+gE7,8 70y~ O7l3/T'a8z<,DnY3ĻM㈼ %FlHJpEGz+EC<8{U+1'Yn=AH# 88hyRV DkkϢ^Z8t \wkr(FL<;j>y+ks|Vn[YY|J^MVCE%vI^W#>3bT!xIS$Iyy\u fNJhyԬ;kQ̌ت^sm۶mfoi0ٶ1aȳw:sZ܉mĈ\{f‘Y D4!](AP+O?ZY0:Љta؍(aq8q% D\eɸRp w,Yl}k ڷulv!ZEFvgH&ψ&AF,X a0bSciԇ4ٌ [؁,;ك{ه8>8:Q"1N31OpLN61p|G<".pi.rѼ%2+\1rռ5:0r>G08 (( ( ( ( (#A|)Og<7_%/׼6|[-|L>X&,2qX)kFNZ1[VG~4;{N`1WsXPm[@'r_4,gvJw> #@>T)$!R5*R1*U\*T2UT*U15UZTof79ٛV"RYd{vRխnG=UPπٰàF4ٳ6=M@gJSӴ֬f=9!yͣ^ Z<,j Z4-kԦoi ղ]kx)v{ [AM&Nzީkۈj?6&1"r ,nUX =ݜ*o̱ɦg}pzgSrsռRp-j y'|^y'7~yaž'H$N^ DIV5٠![dѓrHN)Sk(wCwx긻1[ߗ&<3dtΑy@A)%]+TtQuAC7i]vݟ}m[iݥ{t0CzH =eg>Sogas+kw}˭Nsx !n)>  !D#a#j xYYr`77m۶*c1kfm[Qmǵ:̍9O~f?})!gGH.OPlXR@-+A K}249BZm,E[˧޲`Etr:Y݅@/K۠o0? ;zY8,bK0`0&LLV),[,dE`%BV[V:6MJN`E6c{J ǀ )+4g9 9oEWV5n7Mܲnsk<2xlybgynżk7⼳OgwIŊ)F\Y @BBe+TE!K.W@ %TR;42xWQPUUjD wjVjM\mN^AWGR/~ ג " 0p GQM1C$5S3A.-ҢB.-ol3M5\G[ݞf[Z 333ۡ!233y<-23c2=;KVfro+[]-muDW*1@C]*+űޥ^O'z&a ra0q:5kXcƊ5kXcƊ5kyqr/ ƅ"qD}i\,n,ѸEB^h {eۋWh{eۋ1_B,RײX&-B2VW*X^kkcz]SjĦrzKlVYo-뭲Z[ezkYoֲ*7m%0o8/JKߤ:Xu٪k&f?U=+k[rK\CBnVk֨8a#gp`%rT=1T9 oϣ<>C< UݶUݶUݶo-jҋ=?G]_0Wo;]"MR*67RoUKԯHIIx; HiGh/QxڝlP{qζm۶`f8ۮճmln) ⨆`N=( (0P ȌǢƌY guꢕz蠽>io>(a;{Pp*ǖ&;f73xBWѝC_џ d_1P1dO~r7s74/65? bfae'줝v&]_rA.e"W\rSnm+jc0By#k!=5@kl]غ`a6{l-U8ik Nx_=eZ駡0Jrܦ(]r)9S4'kJ<ʠh2BETECGG UBLb2DTSxc`fŴu1TS7Nh&䉘"(6b(HRar"Gər\+7˽<&O*ʫZCr3"dd7'ƫ8EuHYt ZgYtFws|(e3,aZa% X5q=F<N[=Rj連qU!݆\տxj[ȸEHƣ4Lj [ dRB{ d~|N+Y3>)^A?zӶ0SQ\LMEhʄT q8 Lxc\6>.I@ ]IV3ˠټp' Tۇ))Eݟ3i0O/= 3~ Q-JjߴEY-*j砪y[]ŨE[}jXc}׸mVz}վj zzeVdi75)EeR nK wuJGΖv΂o3G}[ K{h|kܯҕk~2jmrpʂu`@\\D'xB3yQ| ,7g~]YK7h=GWא E9ދ,QK$ԓ=Qνl`#Li*E)K9Nwc,2~iԹu:@ӫҠk-"j-q\jݍ=bCT>O5 b]b?Ӹ"+ 1qsQ|5>Z&h*=tC_X43~y޽^9+VYtc?Gc_@ԑv9rbAu&EAY]gk7KH6妲x@o0z8fbq@&c J?&RmP:9P ڶΕDp˜u8?zk, 8, w'r5HVoMJXeՓT0*a:h`2M m $!b)J 1C1bcDy0IVJj͝ael&[zO)=MO 'JRzğ^Jo;ؽ'ahxڌZ\TW>7 exS0 baG( "`$DT[%buLz٬&Z{ښ {3l-`sOwbV !;XI1u3{Zz7q8hC</rLhePrRCMK,#x ZIXޝJu:ҔV^{/@5,1! C_C^؁ lŇD*No s!ډڽ +"Cμl aY#0No@jSG(sY9 Yy`qIi0LMX7zΩo3Y &\+:W~1䳗LSqeyM ?μCa| I zCy/ 퉚rM251K P U(MU̟8W$P9y=4W9GWwwݽyWOP޽ᏛIЖ]{ݧp!װ{e벑K祽F5WeeCKue޺g~#{VVy8q8PO@g CPܗSYHֆH(T!ckRQȷbKe`II0 /\_E%hԮRyc]Z^vM֢#7dD:rsW? N+k 6{k{G=udGXyuiG<3'%uZ}]ZPS#wD`J516-TI *gLYHUt?O|}2r6tH&rވ0 u,O7S4҈L,<Ы-g(oz1B5C<%FN][Irv[_icN8:60,^Mi t2G٥,}%.CzG*GS֌%6rHÐ YĄvq$Pr>[(hVOh{Ձ{~z>ֈMs?]9 a=s |@H@ `5pN*p2ЬW*=N.jqL܍I;z|W wă5(1_&de@=uN>Z1I'MLQ 9p$ Bzn<+#ob,Pe-dZxG)"u99t@LD./v'j]^ze!XXEq#9̮ۛM(g,Gpĩ) W_U@J.a]5CaoFCΓxyf(|ko/%H+Yk[ ƪϓ>bSЇⱆqSj^#>$><"Bp^ˬNu^/s#N3S,'_ '"A'Zu n,\k  ijV9YynזA ũz1+ƫbhh{<&ͽԅ)N0sn1z+'Lж>~ }c{g\_wt@`#\CPM'8c[F2XFQmv,8K?zУ-ybcɤ"kpFֺܻkҽ-/CPEVd2&1@:k(5א(V"0fD;8=щAVʧ^y|w2#T]FpFTJNw8T!Z<6[GW+՗,>H9;ҚpqvD|)wމIux/ʤ߼o.B7lpZׂ+:kXCc{M6׌̜:SlQ= M55__[sCN+Gհ36w+|ak'N6ngzݖggϮꦙL>d[>,4؍r, ]H  5yNw۞xi})*DF9Uq󗦦%7 ք?ZWx[3*^n垲Ep}݄림쳩cg@v *'wFhm\zB˔yr)'ih1vZֶ.0ޟ%{BY~CyPsO|!cQVITtf˷={ hj u IQZKxV| Fݚ#h3= , A;RU!EE 6,Ki(LЇ-mVNӑ-L0&lo@4 }B= {NCʁ6sV %r5exm[*KX`Dc8jM"=zqUj{jRㄱڎ7.^||h+D c譽W@Pe}{ihd@;FکHIJxd [YbI(z9 rԈ NyT PMe\ <k|EtqIn7mw_Tܘyӿ2sXN7KGNqTc`,|#SLQ$ފqch3ԣ&;]7Ig¨1c#EvO|IǕb_<  ŧq+Ai^<8t0XEnI!ĨN b @ QsunӜ X-zc# F25$CSE IǴ&+9d;pDQ{p`, edDn %]SmE!D@yg;.gRѦJ6B"1blG/G"6l\L9zqY/:Oݔokr3;4u^4.qs2GCPI{DnCF()iDc0v(1^}^dx*Lm*n$iӘ &9b.v`yCo2n}bjx_߂)tﮂ"iq`8p3ލb_wT3;=/ z BxD1 }?{jEY]8Y0IS)1EشNcNO"73UFyt_>@?v|/t^8$d$nXų]ѕw(QZN2L"BB ѪY6P9lGM;=jNa?iևB3z9q $!E)gQ)M9%851\n i)j8! ۊw_>v;GL(Ƞp%)xZO܎REI?e+?e''Y84Þbc =Ĉ)n΀]@AӢ{ +mRٸ7JI-o$|-o?SL)**\dĕCYr׸ [eq: 10![j'in#Ȑ#A5%q.  )5&tE/U Ge[8~?b7/ޒ,'umm q;Z~ǵY8vqͽIY+TNd!X(i7RX qfYGo4I՝1mׯl(>}ΈjS=pȉLojJ ٱZlPaxFF ̄VtO X#{EFƆ31EqMԖZrCiؕAz#;+=-1!(*BA򜲈~nN{a P 51oXeɀQHM&}XF~n25a :I:9Ia& р.H98$4-n8yN%#h4;k JKg\ 51 Kzq\p1^}_|W!CLG0cbEcô'q)_萡W6|39PPaRqit:hj彿/5/~E818oy?ʦzM!sNW_s@S ܔ'7+79[|gg>KGeľ);7}(~1wvFz27Hp{C(J[!=WR .R֡~ƌ7.!s=kgpW1Ͼ6oͳ>Ra݃W5f*\rY3uD$-gbHYFwj˙bg#Fymʡ9T3w훿E);S;w᜻DD/lFdz@Zî}ߎ_{%v?ۭ~ ]~sa, ^FM m]$uѼRt4P;0]l~c䱍324<, G/ԙi.,zh(KQ&[OQwT`Amo U4jUĭ[۸A:ꞩ F|Vn4œFغes~ F;Gݒ41OTwĘr :4SL9%4&R4S(ʚ=e Xjז Fͱ9$'5ԏ]{V`mҝ-7pr-Hݮ^ (dHQє3ܐ*cոEbod)7T>ts,R8O܎/yYMiE$&鑟">{Xh\>*8Ό}STC#@Ifl=Kc9M LŏA9xZ8dp#0 9$HyEp2Pz)9ȘKIئ2ĉSOe~ٜH)6NmIBיT^߼+,Y>چJB81$8P* 3-uB^-F|/{[>3>'u9]u={ГH8ÿ^ Kv(Z BRy=f׮MgDڵچǵ&. YPT \cb1^Z <Y r,@:^/;\iD[nk^yŴb>|0~%m/WVK>_,a"ӌyrYx+ p!a~,9  -5%UM8N )?+x+s}5Ә|hwc8">2`33ྫnpf>Þ'UsdDΎĦ= ߷2zQk8%rD$  i\$Y$Ct}1J v{!k{̅fbcqŪΖ 򱇏SחO̼b [qz[06E{EiQxQ߭)aCN9|6F(H kjTKWSRAP"=`{WL8߿b/ˏd_tO u\0ckWX\1XbOn|=( JC4$&;@<ʹGGtkbL1$8sW“Ju+i >perP]%1W!47{ ÿ>n5=w 3+eGJĄj 2êfbMs9>.Ko*(n:%7}C-ã7^b#qg\dĨw@a; @MNe @. PQ"R4PD)kVv&iR򓬹f@%ۥ348?6Ȯi]܃;:M:4 N0bC:9Yl(PQ\52T=$|1Rb@Ӊ!E9k99X فw;_y`͊B}6楊A*Og0eYYO!ok.Cnﲙ՚G {%2:dfY1I$P*$+0`fw^wĤh2NrL 9;WEZT=oME$[(U>Ík:G^0iQ&+|bѨ p@BBkbAOcUd7>->\x'w>wF ϥ =ŚlH # N!0b -9}9rܡ'eJkv,MNٻ)ێşѴqNw_3I2LOs:$ e쒠&@Akhjy}ıd7׉>O,_-s*[S]MM0g/|oiz^a0mKz+UQcdT5 īE]tz:d5&+M3'N9}i>"qFv%uۉ1n@:̓w?֯Fo78kxc#Aw! |ɹ֙9QԱmPoʠpiAgf,̪ܗ'%hL4DGtX}co:{5K5j33k˧Mh_d.VR$vb$*25䐝E"eIR#TQG1rnTm)&WNp[+1Nalғkd6tŐe~bIi}[W<׽xf>^s6SB$"K6TcCHkDZQ~nU=f=xd ?ҢoU|=F/o_~3{ڻkJGNC ߬ogL,hG }a`qa yhwS2rέü \JU<XPmC5"pYKM e=NB'07estr۶.Yu=yt&^&~:9ѯko[OfՑ!nGfItUC wܳ_xOﶞځxnnWý1:-=^W| nj؎M)$ )Xf-zWL'LWp~bо@e" Ύ6YAc vAy÷2vOr{5o{'ofQp|q7} ]e$ IY7,E! +(WE-'ׇA8`ref!) IXKrxqUtPƻuroדּt9DLCF E.SwWNuҾӕO4'| vfD(Qì>=0+Z MGV@``F1\dqbqH4T>ɟJ=_P*ַN<+\|wM,}N}&*$xс/kݔc[&#r?Fߏ4@`ETFMɳK/E_?/a;d(7Y@E^[6p[܊qlffVe,AEÙ͡N"/Nj< smrs稱A4gsInqc| K?#(ϙ}bD߾P9,o|rJӳeuyVWl+0k\y>em͓au1}=?CNaqdm5#kV?a3VS^ij1ފ( 8@ u/1NI54˭juXw /3Ce+UeAccl.GM4`tf$k| {oo UUNPU鋆1 c.XBx6Q#>ɴBy˻ >m7F]p٢k6?N t_% P(=/cCQ|  c C( "`Z$vegd˨Uv} QsǓY˜sK7U]p7\{-Q⊂9+w_1k:T'orx`lnvymb6]XdÒNK`J fdT{ l0a[ RB|x݉xa:%Y%{rXtSp?R^s/$+YZhF5NkBZM,aqK3n[0vصKaAbVN{D1VK96ispΛǟXtZ:靐%ZXr'~|^A CrMɘ:q/[%uJqM?V"6Y.za0a nULfCNY/w-vN/4?;\r˭ +*4, ϊ&^O(oPMD2#|ZQt+O6 ϰ3b==}9N~B1T'rq p[i71J;@TЅ}~qWm^5Bkا[{u֎ KG1^5|ّt+VrHpiu!**¶4RnV vRh Ʌ\+"=Z0y ڹsAT{}M۟V:뽀/o]&]yIKZPmߡMǢMz[tD h˜4V eU4/5TVH¬ I|m'buơ]u0wl F`c]" +LM1bjix1Hn]\H;Jtl, ^#p#N3̨GGGFڳ2%]lÀb'bfZ!|X_.Md+)dx]3g.\D% A) I9WbQlh9)яߧtKW1{ֹc~N7r+$܅:~#Mtm ibR$rg0&}03{Qܧoӷva쨑c++78pÒ|Q3fZR^[[np=d'=F\<lX VB0#ׅʨ~*)3AdX,Q(9hqjJ|%([g|$?/%s !#C4 4%'QrU9m4Vk'!bv/L'Dc||!6]}BP &9 )LSzGOpH3#>aR-y QWs {"اG:furjr!R-aA.0jR R(OvPǕ\1v(/`pۉƹF{䞒DZ!_%&H$Q4%4W,pfi'`lx"t ]jǫs(GJzdxשbdyC9:&( q{u3Rj7m ;jh. 7~IYGd(HC8 tPd +tK]P$M/$L۩BӁ+VPE18q>N7s& 3*mc ZuPF1A/zBub"! a?q5s n|WimV\.Nth3{=/=ӥ‡qo_۶T٧9ݮW /$s]I@p9 C 1w-=Sg7Neژb1F IYQC̴CgryR℄³'V?~DïYN Ƹ}SGof:םFȩ'L#8e;WГy_~8FwQnCFw 7dY;s^(,i'Cz-Us}> lV#Hқ,Kg݁ynf0J,4[QoUGSƔr0_e )HԵC{ ={ڻ}]Z{\i2%)AG 70';m  ZjnGy-!u~w-|ժq ^c]#疳̉4 F9ʆV=]Wn{Sb[rZ?asٵ/}tL%u|cuyU$Qz.?(BK v:xl.x6c‡7ƾ?ۅcv[&^.D|5ʎh>E||D\k$ 8;b(r[=pkCG4]'QCk߃i%j ANh$&@[mDD'C X(^YzV?P^_8?Ywղ&vy_֒($y!b(1GYwrF|S6z$}f=}Fӷ6%TIXt`@1%KK"cVRq 0gR2S[jXw& n~Cq}ϢCT-}1dQ箋p}& 5,:ȯ!Vm_,{ϛqүMG&@֘ q#J(0 4?@Gx:ոc~Qa~],KT"-%~p2N?#%buޤuG~o㒃}zX ,0V 3~X 0$BLX+63j[bǵiT 9̌fHӄeXj8\#WS[R// lL}{1ij[ bJ,D*Yeā*.lzGހ#ɊvtL>!)}`sg#1^k~2Ƣ)Q;ݜ秵Q<>} $ 'Gya7vDʆ_0aҧwE#J?w`gf-Yxɓ}< eAzCZ0fCG)ʻą8gFbBMbc T1P9%,黁n%&CU͸WPu=qR< [nF f_% |{qJkhfE5tU 7,'m5 ^}N2NsuʸA*︍c<3©Riq'> P2 E!5ԣ81a $?>91 ;ޭ#G0Q7|8 m59-ظzt%y<}duX2P+Jf 6&#ۇu7 ]C5 Fw-ߣOq/Z[3ïfaрR{u3N,J,&T*nM^.ؿT٫ݽ{Z2dg9O7 /#iZKR钕Uc/[bQ֝:Ė/\X^1gN<tە#‡c* ViD* qi%0S԰}5&OɋlOZ8m5E:T"vA`4Lv^+ l)S#IrHA,ϕV)+Ҫ·: jӫmkxϩRHUr*py3ݠILGhT@Ql'j{q pvl6=v 2lœ„ƍic0?O+_bkѽ#sa#ٳ*+1iw+]y]s(0{VȦ1R/4A#9F ȹ0y d-ruF Z0\~2Lǰ&8&c$ͬCzkO4'biNwƦjk/#F(x7ٍ"Hד=#9{C73 tз?R_+Uy( b.Xt@z>~4t :| >}9,$I:ooS'2i#(.DR = HI_F~ᇥzD@S??cJb;l4ߒ=ȷ#?]%x{IyQ Dfr e j9U'Rę:nF>4#DNf<;]Yj8OJ].UɑŔJԊYy_n^V>OwwʷأN%툒5b._&9b]F=b!Z%P{IwdGn|*IYCeX NYbQoꊳo 8'?jTϜ>Ӗ-^v=/٢X?|;fN>Қi'Yɽ$F%%FT4S)M22݄b}xJ)}YvPh [.P?DXYBRůaj䚹-]e!(' KCpabK=q"NҞ$]&? 8BCȖIlh|<=coB`o?w ygOMцރG{?n䕓]`U-x /I{s͸ě븻~ osmlɫsk*gqwD+PTĩP7= ^_Y,IGY g '\P࠽jfԎ0"<{B|1s`=( _M^Y9n8[<|PzǞUYjwP6 aY;-CʨeLY-՚)^$1hglbq9P%l{CvPc.5*{wQn/t?6!~ߎ 񁟕Sz_7 1NbG@v8A4P@11r {q}={ͥ['8>rD,mZV^VWRpyg%r?Mw+lNsiR|psv1U\[RcT;8:$G!;RJKǎ #cĎ9cGmӾUffZ[Yիv\ c}8q"# Z)UPXnu*PvQM7.=M~^VaV'N4۶tmG\/Úq&GiZ׮Ʉ;_ZCjϸm;oZG?SP'>K9t]  s(t.6Nx1&|py"ٴn¹s-޹;7ΟtV6mg.+1#z8aԅIY=m^QYm_xg_9a$SX+IA0T*7sOEFc~߉u!^uUȈN%> }Zc=gQK嚌& B$ uaMDlk Gxqh~㯌AϿ8/O9q<@ʸٓI汻[=q 4#-DrÄ gתxƁM$B) x Po rg$29AI+1>"oZzgNcOt})j߶S?;yH5k6\i?qq gyFvЌ#4mm w{;O:VB*Cgi3gN2kL6) ;־<)^!膫\B qLQM79.>.MV &/9K|9 2!fg8~K*^y]%:"S-5\HfC fq`s]C'!ae׻̖-1sTG[6.eܺ};WVlL1t-R5G^~HfBD-@vO9QrHNRy 31L|fN!75T3&Yr䬠c`̀xX~̼{=c#Ky!z( c^gϘ1zBMx7 p%TpKJ xCZ.p+I$UY}cܲ%vc SE{<,~TC0'{룾{hƓ'><" K"~}v?_b0W>^#V%-)@A1 e83Y-/{%%Rrqkx(96lt8|h_p-pB̛5kNѷ x8ovkW8vlU:?鱶,2ۏBӒWZ%G1-YLN3WDVVNE9b\6=܄A]n.ר*B&ý]Ol"MuK\mٺOymbsL1 3^ M޹|.]Z<<̨PtP Ф&t;:vEgt_a;ˢ_e|'Z!eZ)p 42.V3ܙJHjV藯MvlY8]T G/N*8gs}Ixr#)A8+R:̬R=>@nbE_]7GFKaRo4bӏv0]L'$•zU'Y쬡SB AFyGzZ%%F@kʺwYs aʰDD8flSLY_ݼѵ(ޭuh-3B ]`=4nT?h;T=/7.sـ;%~'}/۩*[b FSzZ!748h9)'N\..MU'&|h} pX=~J%%]X' YbP3Ɣ \!p>$Dn ci4Ǻw@(D}Tz[vfoݡMǝ?+3Bf$i'i.v7c7P[&iFe6+?29:7޼wiH 'K㎴a?Joz w3u[ka! ¬?O`qЯn+`فZ|r| SB qi.fRݵH<ϙ0㔌cqJD2J:YolS]Rc};_ǽz zZǖ9x? 12K '0x@C@{sJze5kDz; 6}W'Uuˬ_gnhw5]K z"ipfcMf ESi3ɤLawڭ8As-)O|ƴX l4I$JI"Fa4qEez SLJ!$)5)5&1&n3bm-Sj?dh777{/Dn*Qs W8Ux+.ovt"dz v5WJy">y@XaZֱw>M~ꍹi/ų91gtx.'ʓt{p{7E`(;T% 1ARkt@CGb7{q~ =4\>.'5 #k^jeT ۹Y:^ e$.k1һH=$W/%u4z&ԽR pO5rwJ1sG͍5f42KNOD9>PXPDg,mvWv\KvϾj|%W%^\:9Ḧˋ;?# !~g>hARI.29@Δ^Rjp? MˍYT"!7S؏W A!)n_9POq''?Sl.\&W'_S5rL7)>ezї߳{ce OKMPvSPdV9OƯ\{* j#7tݼd׎!K7UTo|W}ѥsn@H7B؏X҄k cX"*=`eأG1K:8i'swaVsMC|բ0!2B9*f[%MHNNf}vlڏӛSĉ}$R&?]SžnGݿ QH FnI.[o~o.\4gH1H7;jCżkEو]: k完v=a]z5K|;cP7Fx,Pu)vp} 5qI"ڵ]Hr:9&7X^x~~hrNe⮖Qq阠xnmx!3GxӢ$^{z1|O׳۹^$5|쁄p\sGGqf W[Cc  .O1 -^4};1[=5/M83ԛxQAGJkSjH~!YFf\,[Bt9Q1ƼKڙ-t8Tի[ E Н9dXc (~!{5&O.n8jXCOE<{z\gĞ$j:5dN7rQdUIrMuDQ8w(JY 2 hf5PNB=J;vk-ds35ͥk zyxf=[ܽM-գUcT[`޴/uk. 㹡{R$٤;̝$7BPD7\Ʉ]əV)i)uZG{vj%|h|N}4ǎ{[jDݐբ7C۬aJ-6_i@4f 4Z#CA^j)Ijݬ 0{ OVbu6߱Ĺ6I^PiPfmJQ}FΦ(^?q:ecbv_YT\1Mg`1ILev0n4q1 Է4?MM/dV9"$#~\[QZ80Tw'@;c9p91΃Z}n߼e:.nj8ȪŦ3mn|NFv.~9[jsu,8y+bT"F\(I6RGW&1л_ΐ'I@ʱƥscxo91H65*53{~1鎻^찞B/?`BA6rV\oxki;|]ZZuZQ)Rx@s𸾠6Q]?YǂHJ`#8'9q*v춺>r9[t˕쀌i`A0&Yst2; # b&BHp'D:"AdN_F t74s/F k~"@}CMx/43¨i8Wr!X,KAdf?}<.]H5!{ F_G 6OF۪WMkRKnSedZ)t*=)2dȱ>bP^[~~wK/d)t!4Tc OI ;%jT WprhԂ!}L g9%.@GpyRS\?RV[ɿT|A>YytkNM<`1MigW D'X(HP+r%3=\. "@ ߾m2o"/ X렼_bS˫AygĖ-~D}$ާOCBk;!7 `i_bmdwb2bPhJSԢXw0ħhj5ԊFt,a`8,ʒ.W;#F+vFB!tNYOL?N ^t$鲷@1Og)*.7%?J:{;I0A6 r%* *\ &_w 7] \Wp Z= CUjC4|TtC 4^6HD+U.mbBߚXie 1ǥVHiRY8"zST!ǯ(qcT|sK%6B,NC4N <3Bba:.‰\zdQ9P M !ڜ5U;C;Ω|a?./f'<S/׆h@9Rd?,̖$pVhL3rV=K 4%Wi* v67k>9O0|l`4:#8>.[^cJdf*{Q_Xja@-l'[@wBJX,F >bN!CsLk>Yn||Sߠo~,󰲲A4ҸY׍ZGIAۯC /&o8]\+Ue^!jO^F"GPf3XwN:TQDՈZnti_@r[nJrL‰<&[H.*fzsbfc .{X1ym{oY*'Gٮ4#B޼^bGV<|;Ƽ!Τ+уTIr8pEw¬54I,L%t.$wN}X*0+l>R]&ƿer驭qpH)⸆~5&$b%Ǻ+ch6r0[ ab;}tWst bw%mΰ9/2 -=ȭ-Üxge9[}hWy[]\?{gk+ z] E3p2{4 bh7!$ra:$ Ry9hЎ1ܟhТfhP E?Ι9g|`[6oݗ]Uty}=g+^+ڱ#g(IA=g6UG>+hmPY6o~y f7<R|zL\?w??}G 6yr\eII> .ߧ‘n<}ɥ̪;gQoH]g7X\V~;n=z.}J1nvsϷFϹU2UxR(|? |a?zWfJ5ZyekVmYLap;ΜX3J$j2T_1GQ\ᛰqHueqvԚGc`i P 126ƪw ؜#Gbjp[ˆѯy;5NԵ# H590˼E65f\K*X"όqF|->]A6v,,NK `]|AS'})֨Gu. S 46PDC:K ˂h]~t"}ៅx&lWy)Mۏxl^D[ ElCR!P.l_[wTw=ÓނsoFʻ׷Z>iGNׇk^ וb*$EEUGCd8XIDEEAЕ(J׾}={ עctbY2$"="h蔕U;Sӥ%yx=rK)~pξ{ga"jum-F.gM^:h|*+ǔ(oJ3 xj ߸~j9^~#4n\ =w2Q^pcTeKAO/0~hvM 1D~4o.՝ ]UmOׯun5]ʾED_-XgU4J-_ )>bj1;+=PPT4">'|!ߋb↼-ovUf$e+ְ0kDm]>6;x<`:, G<:"@֢˙(ǓD? 1!# .XzeK̯?wiSFL1q|uQCзOzv'KFmZ(&=FrdnJ)d7+J{/b`RBNk;vl_ReaM%Pб]xٯ1^%7ٓ7{_:|ƌj^IIVV+"[}G](>hzVE$!3WZR ̓*й$qmWHfUvA8jL 摻+Puĝ*)7b;$5W+hZ$ _)*VOW[45Bų}!;vCY/u$~GP[Ī7x8҄}[l7=L?ЯogTyQrv1,Nh)IϤx]D%ꬋ? DSOkQJf"2qd 4jbE4mc)'H7⸏BCp9/&J*Z;85) 9P7M VyehLbӘqpj<Mo%AkӌWI{~5F "xOѸ^7Q8TH3 SZ.@`4}/{f:}Q.Jjx`~C.,{e ?߬eH!,c "&!hG:Y'g _yьۅvFI Q2b|7fAO$% ӏKhHxiq9T!bT/9!z!5~提ITa>. Ux  3[ @<N\~MWa1!ze}WR`zf)| 2xp5=“ WXPJ6TׅK] !TSuR(^4x+-z }םbxG|vNZF_}OyF.x/ 3eysLq0ʧ86 n{HcWE*Q,llk!w5<󚾖O5TjCbEjSV&5-f\0$m"^g{ n{)LՙK^E:f9RymFR^˜)W⩧H.nkE/"9FqoQ^O/>{wn%]u8. =vO}I4|kW=, WA*q0r]t>4AhQjBe  вձx~xL/sW&󸘑!]Cp%[7<3ԀgW8SB,T(FqU';qri,BI~(jb'[T\+9Ouh5h\6g^jŢ%[7d\*oP\JH6S)?ƃσB0%Q5TAgA!ܢ`P &b7sMŋ\=ӝu<==YltqgT,<4tϊn"3)? Uhv!ǪqqAQ)ׇl]qcjN[6W*^Vgrm|}Y'UG~d-*R6(eᴷ/*D $696a~SRǙI0)\Hmfi :<ϣ+* _qJ&Ϻg^ef bfQ)m4?q LZB-ZA@ErWjhl)2̢\9"v&9a=çxH4}.y_E䄘J )Q\倚(g,Bf9mܨ)q6ZA7kЫxٞ4h\~\?O>yuigO8[U{q;'j8f_[gX qmɱvmlxtFMW&$"<(oC aT =**L7 &bWo*9Ҕ}z\%')' a?Oas'c9 \L|o˵:23'-fjNɲ3v:~o-'uϪ=]fE*:v>"K4V&acjtB|J@PSU+zFf9nl%N_M]3ޠOKUR2tqú&zӄҾNJߨ#o}^QV;ҳ{\Ydm|ၛ*Vy.6\< ŷ)/ %BҀju2^lx)d}yy ͛ס= ¡5Qx뾥ڷoJ9lϏW.ʼnwb* f#݆x1벓ei7xH,4]mUD_e28a(5E Tc[2Xx< Z\jSQK+lr^i6XpӡkDlpZ7Q{m=chQ0lG]:XW8jvհ]}3y몡ua9klą%Qx^3=*paxY+]e]*3pOh\b$T| |*`L#β琛?aq2:`4Gg'xFpp W; r<~㑋\=ǰ]y%D[lSm848`pL )QA2R?22M KSh )!Yli&0Bhz\Q@%gx"`B6o8]{ V1D/@ތtڒ ;;Ԡ6A`a0. 拌_>y^ğom׮,^o1ciRvrOC+xjځչ랂o3uH?D@o0@8F+Y*w3ns%fk7 Y3ҙY ?77+3'2/*z!HEߍ~{:h%_={0ؔ?Z3<,R#ؓ"#-,:>귳\q9OsRH6PªzTVtjM۷ߵқ!e8x"J_\7{ WL^Td({꡼L=Ց3WL~׻VӬ;x/VO_wTNx!2}nž!` ͌̈́ɸxc0>x%Ŷяݣ"9gHm!-TVqAB 2%pMoAP !U&w%v=PY0l|<KYsG<<(ex͟1Mi+G8d~?0S~^/pD[~ɧ}Wꟽ &$Ƃz &:e#uzyF 8;5#Ԇ=!ed+ p4R6N&aD!aJ5A!T- 73zztyDx`hKUf5?XC[-О/ﮫٳَ{uv^?:?ۭ۫k?nlikꜟC)uJc>кkYxKCuxD,>dhIYY &Nhb{S9# {vb.(8hXr/&u);T;8eg@!Q9p,{L 3d."8J 'XܝB΃0JHҳ5fUc_1fT١QQ8" f0yEw?=~.{VCKŻY)c[ǀ_U\r__e׋|KL 2Z{=S^fgNAmxoU+ѱiaAUHPcaarbIhC$ y~!w NZ@y5 RMʂ"N6uhwOGSٸ~Gp&vs#tĶSWJ{f՚ꥳgi/zڌ-vD6!܃ARjw$N‘oB@Ã#ŪR*-M1c~oZɉqF2&P#-‡ݶGWTt ?g땐tFNn1@Vvv.lՕWr}Μs3gΜ.4 +UhP`Ç˞v>ξv6Y⦳W{|BD0 e(Am=\YΓȂ:7O+A#URTyɈ[1ryБ`ȷ-[y˲[ >PZ}r m"DEx61y))w$*$e(S҇^i=Nw`<n.&yz #A_Y5bP⛰* O{fٷ7SbWWY]czzPuձU^ Əe>a=3]؃Ґ7whU?JCJCkoA -b~SUGQjWWժ5_ޫwwV[&\% .,AK[2r#Kv٭Dw3{7q$4 .H՗i|y7K5qPe0yha̗ᤅ02(Q=8kFP$r4oo-&q:%Xf&ݝճ2f*:>. L9/L ]܇4|>zE.:A^j d }4S.g(=#^Wje`^vg8*}OJ7HVa{˗{Srtx;W4cxK9D` MCH7}5Q#]$^C.oF-{bv/1ĭHWDx+29(\#krbB\-; MS_O~Y-jʐR]~xf# R+#VgOcՔq~Οy_r,:S:}9 $8 1T5]BU?qHPUL`>^T΢UdE7{ ~說4~Ơ9[T)pR; gހV+Pg+/f^$g-> ; !VrMJemU]MyUbŽ_'|sT٤MF[& ~Lja[6N,Z;gn < ~ mwΘ_~:gtoUVn{ݹۓyi-NBG_ƑjJׄ`mp vfbhu$;{/NɞߞWp . dqK;~S~,6-lYgC>~ =bˣb{d'DY~?져TprwI q}oҺg͌.]w xOډ:DF>m=X;eh)<wFe֟|1萮Lkv/WAuHL! QL藠jprs 4|yBքGi91!1eE9jx`CB/Du,}Vj~p1NF)Ge nthFNhg}`Ps>sxcuuhm>D) onra -~8պwSyuOAU+ڴt.-GֶYeתr=V9A;#cqY,0b,tw;dŢ#۵+aw :?(tfֲ*yC!i;s7E5!|R#TG&x1R3,3ńW`039| ftsgϜ>uQÇ .-),?of2DŽurw3CքY7xdƙyX8 YorAR r gQ"kɈ-f%B]+ܨ?[l#[٬&O׬`O$F$&FE%GC<3PGYOeA'\xSV@*X* ,??!PMUrǏ%&Dx$%n?$.--'طJqҠCO:Fl6?xu&޵zxz.kxhBFHuMgne~^Í? 9z,O҂aEs18<>"߅G?Yiq:˺ GvCYϔp5]/ 2PO^Ά(BUy-]aRN+kPèQ@aaa;[@tX$c j>](=5$iyަ^h^/LD\Q,t.șQb!2|b`z|\|~ݤ]6n$HMv2q6᥽"Fx5~Ϝ&,W>x`1|Eg9'o'e?F`(?ɴeଝﳱ t d~2.Go}GG[`69Ͽr/hn}{+3+ أr &Ϛuq95F!g}ʯ)d$D?Cd…RVCB#M%W*2'u3a8^Ou{B5],jkM9ZM:!X{RWPg!8~x@؃g1{={˨mUb/"֪EUlD]D=Jw4ŽB&DR7O~9o^̓SCW`A1ss50nпzUC Z׬׿uKDǣ#.j#H9N_i =0{1WktV,Z[II#q41Hr70L%!8a?ubJe_b"4Ҩ=~Mo^#|838wTx0[u[Sz|JF2u:4Gtl^$jgT)iߊE_ ddX![@[w?~>v9qC' }3R֎{ؔngx'C"?? .0-WpEj dYM @q|*?1G:efIӫ\|\S]£cڅFC&) x h% 2 ᛏeJ]JeJ39< C-/loDXKehXT4cnZel3WՂkki֩OX`PLCWC$Rahsz'_^E=8q$Kf}>/~F*9*)+Neŧ]0{ߑ$pظ@pԵCC&LhաxpݾBn^~m_Xˡ&xrExk םY4L+#74}pd”NNK& 7ʔff͌9!s`p?@ޟZ2pb?Y]w%%6&%9.6_Ew/^v3-eXhZ+ZZ-oe#aZӖq"boiˊ O:a8~#c#*<<a'QjIIjׂ4BuWN8Z(X[s@7*( ?L%͂p+}^<2\ziSuL/Y!Dq}d(GO0xTfI~~qIA^1 w5 thp_|u޽v-YvtKZ-F&6 .H4n{}p tèFE4:/=/F,ڂU} F9{PfώOsR Bd;j%QH.bycKM[<1YF6cP^%Žۿw_N/'qF~L8B'!:4ˆ򏜺5L@-W}yf.q $d b>yqֶc`n W}{Uһnma4`씘$vW`U9u™׎>&3*u~}D[e90I۵m/sуĻz{wF|SUcCU i rO@X [8#Ov} 4wۮg_J2IbGssg{Qi <ʄOܯliOeOpX1m@kg)Gh%%3w^ZD>wdXMVH)nźK^VyiV1M"Ðz;<]66[[9-d: Ty)kj@6jA@Ƹ[e܀wytekq;]]ɣ 2x>|~E#st^Ǵ̫_[ڍHmƍ^U/x|h渑go}%^Mc&@yFo}4')sbo;k-aej]?y[op-@}ْM.ۊ? M hv]KC+d-&#r-Zs~Q:[ p_3c!._ud)]-,eZ'וxJ3MiiK)fl(Z_0ffu1;-^X`.ڽl&=>7 9ݻhb\:y]|; UfǚQw:9 o.WlY7*_U[s龘3ܧo#ҁYW{5w6¿+ܥDA氶|WE м+zF<& ^}ͥK-N" @$翵vGhUs΅;3w,YFmYcYȲLXzQ_q,Fd8heȲ,㐃N=gfdܢ.qOfj}hߍ{8T06ZLh L8x 80fqֱħp'bc)ܿlIyh> :u$2A1,$  eM'A?[FAdO[ѸɵONgԽ< b_#,3x#iv삾 LgP!n;ꑽ>+i \ɋpx#x?}\ I_ReRkq1n.Ayڎʦ~4S9640X~tl]u-xѽ s~v U=֏.wBҷ̄=y;.W=0D:wLZ,\8ȼC{⣯oUߪRM4_MLj*9&9F\6H*SPs׹b z-|&_ w'o8%};ۚO:a]X B$YHp,3p;H-5GKK58ݹ71 w¬0V|Lw`ιr6`#{#XXj4g!Xs_`6Xt{^FʍDF]ail E-3sp?,G;jiX?Z3骩xV3 Y*9\#YNuPV@NvF8hz jmVlO^Ww5AxWw:f!`}y 4tTÏt@. q,ZWY=p4W7q䇳A64L՗y 7 .TrF*Koop c d!B’#>5a}Ϝ#kc&O`seC[+ 8h jwh*c'Yvsq|f'wڥ02 $Ä.Ѹ]l H]jOfNCoO @VkEGQ@:5t2'$ip]ox^0].sH/@9*exc@Fe}mC֮^͕+qPq`p8OJH1 ԱۦAwhB p~\_;Q9+ׯ >]>3O"БKAc׬()$/t+Y9 fn 5rr { 5 \Z>|z0fQVѿYT%VGRz4laĢ4=<?J-DX2am\rq-? v嚖\]ϟ|A`9'GaΧ6-4B!X8$. " 'BީuW1W?Q8e?p!p´ |$L1`ԁ6ǥ\{ޡ0UeHCW,fzEw5֓o1_8>&tX14DԞrCS(lElkeu۠oOa k5jm=Ԕ `^ +S#}t#ΤB+q&FK'6\ p@;\W;SI^@0gVTk>Wo I8}OּKc˳hPY[d?_$8$p=݆:̈́3+9S Yba<&d85弖rcϊ$)A>A:h5OИ1s_B%I{Uc((Pq~xa1GLAU}T ypѰ*2e((Z7Rլ6»'S̜s BGm40 bX_`5W. r Hs \b=f,%Dށry lSBXxf:`EeBƭY>B~F}p Ե蹔چ1I4 h\(KH~т{ oLR???{@QVOZΤDP j2)oh cH NvPdצ\!ζ I؆(^Ov= Q7[=!%2ɯIAƂm#6 J7 h^'ôR I|S>fQ'C/%qV#V<cbqk>J$|iXw=\ S\?rO1c 7 [s<d4 W5'${5bV:;L̛ն#j*QDz/sZpۛ[v1ZaOȎf)@b&fIiNzk-\̰,h΅#H6 64#,i|};<ЫE|q3c1Lg«W5l. qc5zXƾBk8п^m5 i LB*1g\%0O*kf7tZ?%#LTL3aM6^V/OejwgHΎƒϖW‡op愢lu"͸(7CS/I h9M|dIH$H³qo~2>[>z?w98?kS'NrsW kfw/lssP35 . >lx>q Q0\1y;QJ,qaqŲA[9g?4τkxb&pa]I|t*5w]=ۜ.ay9I k ]x]WvG $c, 0=H T/ LvMtg%Yx7^znzzakkKͣ$J LJV; n% }_er屠8 Mw?G/^nn l~P]69H׮Z(M!&d+rQB#s䤋Oy MJ!EJοF=@Zw we4>\e;6.H$"灁5ka8:]Y8z׭`9R&/˷.ߺeSp(| V[2x;aWZImJbT2i~ţ5.LdVP_h5.5"Zy8x_-okh0l%#ܵs&彵8fZ\j;{1{I2A{vyH"tuW:ܩIB##i6GF=Ac c?SG6f. F2\3(ad@x2SCƞ(ucqjno" sX*߂O"3NۚN2/(,7d^o˖-xޙ8G 㷄08N6{``r K˝ ˟ZۅOnL)( pPF1֏>swbBp杧, N=ܠw4לmng?wP!N򾚦&5Fnr78(Z9B'qgB32lA9DhX"c,[ya tov c+Y#GJo(5"}؈p!$dB/V}1O+|q/8 `<Ъ xO8WKPz/5nP]W7Ǽ\߅0R !+h_P&ϫΣӌ[uP ) ž>TR]N#;Pg ~rQ*mr\]ҙhF 2<B7c9:Nj3ewSvnh$o9#sJN"3Jj]}ofc&g4ysL=a-̿T)Yr;׾#J7w-%DmaMxU:IwW'+~DXt':pNb}p?oYt3 GFdӽ{%Y<ž6Gpz8,zYt,}Hu,sh f4msb۰ 4HiF!IN_Xm9ŹVQ^dn)zYߥz>I^~Ϣ4rI}[Jq$p|&y]]]˺딠{}sfy9wPg :I> Eil49Œ,$Ǵz+azε3 `Q.<#f5]WVv2 ׃&߭i„NWXl"m- 8)8rl1[* a }F2!L8tY*5iq8[ ߪ޽/W#5ܨZn6ōx96~eX҂JG{p umFDZYW*Q+9#>) u%%J$]-؊Hz5|Iud+u/.`q쑛d7݅$bDQFovy4q|qܼΧŗb׆88YGaiY $lx9g2zk]b‘n- f}c5|I8^ll*\)fl\[BHt]I]x\T ./ @m4xgoNLLlآ \_ظ_?Dv ]#TL |xO1XrT9 s2\cfnkPW/7/ -(߃t$="ha'LJb#ӥbI%f_ުm7l>kGaaxcCpq`Q,(joHG`ըA[kNGzJ b]`EqZ6 8t MY5HRH<,2i2דL8QXnۅA!5VQ(4LGN=^cG;W-ZJ#^g l84YM[4tBMg$ \qp2#񺴥 |p?Ao"vj2)V*  ow[=ߑd)4JkkW/ZHDx0YfNHМ[ji$/q4;YJt8833ɍ(7] @?e5(z%OwRCcVp(wSHTUo T@sUywE+9t9jTԙ*$Sn ?ɍbH\p;Aÿ́ĭQ|,>f]f,V hnI5n }FzgA4钱w8bkd~6bcC}Xj |Ϙ kɗ,j\*W6.LoIRgZ84:4Ѧ-R1J\V6Ng\F4EgU[`ȅq&eI`{i2HC_)X_NU|JY_Xs. wBz!MM VfN sdp`Jf6-fP?LJ~x;tRBgqkmoWӷn=HJ.2 gFow黷uV٪M9f헬oбYK6VZߞwAv{>V :i:zG[K@p>{E@WKukǏs_+ .ME3>󑹹`f|26󟌌wwoeH0Yb/Yۡ#Ǭ^YMRݿ#Y]hKivH߽Ԯ'QW_p3'xocc쫆>|w!7UCL=5@64L'-^Z:У.g3x}ǡ+ޮ֒Sַи߷=ZyzSJh߮F6s""g3G|;c/B~ ײdecxtf|3ZV^G;]ywfNoZxs[*}/«k-n}{>9ڗxI:GRߚr%ZiSٻw;b0Y=dj“wTLs+#xf]NDgٕ͚s'{O=~tkhKHpCpO wՃ4$ Πxҷ7@swf]J | owR^x&lwf=-z &ߝ9xkwCwf]}{ w&ws朂; :zgônw&v`d֭.w❇Y u-g{`Gs^$~3=! ݭf(.}E[|8ӫo$E|"{N(T]8kcIOz8wAst/Y1lwN,Ou4<[fwW}n'N6|Gz.%4[ex|=f9Bޯ6 {H_#؃z}h^q[5k%ҵˠIb"O'vǺ<#/OkOZ5N_Eaͻ݅le- GZjx1nd$6g}{> t 4$z0IcF$>QG€5G.=mQ(oˑtw;GC.0W%2rW&)#Sp}#ZQ`oږåqT{hJ+6RAGhz*u &*7ԁpmOѱXJOJ\ @]Z[úeߺ@;a!m'x,x)Eh&ʒ*5/[aҮWkjv]L"!-i@3$>AT @t0h+7Ґl`%qN@\Y'-$Xʊx҇Uq-PxGDerKt\Q;XO4"-o?ʓ~˺Ecޫo!ƞ};=CD":!8q R:{=Ψ/7ee؅]CC~ ~|L'<y~}Se7 YFPyD,IG:5/ F ' WR^ Ys+qMPq6Ÿ7O |j9j5;|Q[! ;LmM{5ò6o9zя)oFr3zyo!DO`56[;V~Nt5tv|S\^Z.a@;N38Zю@C-%>s7EǜF%3<}lCDGxv?˜-/ѮQ͋/Y7ƨlCn|=5G@]!MOz Q|+fBu7LRD$5k9jr5׏8OZ?s?&#lCGpuMD!Sgh ok' HdAԚ;c867m}a;'Nxz~_ kkX2MxH'E`u*Z/HCڬqi#-ьi3Wm# j:L׎\^T ңoۻ!1h[8}_dxgM:JNYi%nQ7IԯxtҤZ+[ӣML{E1!My h_x^h3x#6O!5cF\EOqsM[IۖdJdj>eIx'4f􍏛-,7GjJ Vʈ&@z*U2v誴k#+ß7w8[K0o'x;^*<$nHCGn*K'ܕ HID2l%z"]|_jxv$JQp@Ԇ?꧰2q?1]ܯ2k&aF{jxo<5h%]s\:; @w٩gu=5EۭEѴ>쁿|?􌦹˂'-V?$r!Blr8"Cf2`)7/|pYAssVݯUm I[#9n;kA| 7rPSyE]]e҂Ơȴ࿹?e\)~@}&&7öW.ܺa}wWH*#2J8DE5T 46XFJ6 級xm\XdMXTSw7-mW@?Cqؑ5~5c1?TOOq^ڢRD'cIqtm4<㻪r] :0 H"aHFZZEOb7 {^kl& +P(P=u8"6őm 6=5Ke`7`^j-0i3DqG P|n#i!z/06M%B.HQ8f䳍ģLn(FDy.x:/ tR(e]|F-c}nbc='%sUxkX@tQAJL! '%3ryuJ0bQXyϤ Мz0\o=mA>+q[zLV_|?% nȇ9ydXFD>|!7Q }i93 i9Oa(&̿7(d,Jc;`JD_u5ۥNJ̽_0((%԰2 E~X?$ UVY3 co^po8?z0/ۊȑI:="YuP Y[d}553(8</>nlL|l }X b婕>evmm6篵ra ΏQ-~ ? wʑɭd*ߴqbŲD# }>^(ui/Y4dc4./K.Q[VӨ9_/41탗J_?#8$#buW\S{Kj͙pVkҕŰҸ4^ʸ?bv}[ ʯE^Kq=YetȘtN8q6%qY:į"I{N$ۻ ( IQ ԑ'ox| xRa)֝4p?͎[:F"Y!?Ex%;/12C?;hc`I]?|aͣo­XN}ba.3rm8ڋgՉAΐεlζ:OԤj'*C)[`kCm[1˿? o?>pmMoTaF5]J\4;Әb>>`1#=!Ե8l)nG6o2=o uf&Rl M<`kÌÄc^ idEQ &s655ֵԷhaJMns^I&g`T :aghU^ԧB~Hl. QK-kNks"İ$e#Mp>ɋ1p$_J}wdzsvED ED%`e84mۧEMJtl'&YW6 f*7C%L؃WPtTb8Us^9NGR>91OGfsv!sf@h5v>;Ӽu*A0)楪JAHkɟ>סR:,gF[f[nz}w[%i]LHwM/Ӵ}Ȣ>i֝ݯ+_TWCon}3(A`}FLB8aM*z}:Ʊ5y,ZSOOwp18{A_yoO'i{%i]ԏ};Dy? N478a}z3Ÿn2ߧ6:28U<`t@|,<e.vj숉ޞR[:} uzhݔoiW@>NDt=#5=4O z:,O4Z-D۩ C( yaE{AN< )5{O< µb=O\u珋ll.6Hy-5Jq*-7ZE:Տ4_tC1iLޓX9𽜯wm; ^ѽ.ޞXy$Pwn'-9uw*B_k+  +i:9^*a۫)%@Vu6o&im޵yo.ؒD 2%XQvc>7?׊ҍ%'&Wc'=WΐByP@;b:YzXno_|%X,\~5Fj ,T-Lc89u.S$uWE^w%a|iAd;vY͈P{'OKދ$~ ;E|C=[֮r,IyRB@sRSE7$Eސn[b [~ߡs)7ٌ>䔟 _zo1Ċ,=zY.\]\ނx7:gw]up/\a҂墄%<LWǧQaOH8lvZysn1֡LIU2_W(z\I?ժ&|=ʇ?6~h=##$0C>-3f쁣*w8 OE/& ONw{|ޮ|kXc]C{^@_sJ@+#U.u٥I[鈷jtے l|^!,W[ʯ;1 b{~jOZ_&=mhF jg,x/MWx9 X뤚܋J,:{u%mCo-yW“ gcOgo0bެ&gE߮skk7:߱aޱ3{6BǹwLf>~KMnSkգG`5o;͡>4n"Yp~,b^V1&<:6]v鍡!mgJ+ѓ%̣XqbY,9 4cEACLr;HFtZhW@?G}jeeNT㈱T:t+F(wo4 _.kͪ;NK;koa8T|~h0y0a Ï:RJC 1V&_%hOjKsERP8%\" D:>Jҗ(4s/q ɣ \UM;r`6>N2ݗMdS}J~?wދzX\~\~"E9 Z&h%Q_\LV饦1958ə%Ǔ}8ymzZtAn$M9y!* K:7ߛN`B~@.hi1-G]/qWt_SIKq#3eߗ={\$-/g6 ԑnScIŒ13m٤6GLnc܇ mЁ-L &Q$BЩےf(R-3Ϙ *45v\Қsvc{c)/v =7Oj3)];=9%8 ~+wp]Jxþ{~kJ)c0ڂ{^&/쩁x$W39FN8N8]\M-2_4+,:)>| tg'_QK?[pp5|i~+ܠ`K!pq5Sk-jybF"I]¼OhiWi<\RaphYDd)zg]|N[Y,HpGn})iƟg4<Uܕ(䓛ѫT\@Ȥb)@t&ie?:k~9 ޳kvFZg6ڐ}xYt۞;\b48l2iGUiG3LjKZ]uK ϛO,#':FoqQ|#%cq;ʩ:+T!Ih#(PDH JIȉAww2hHC'{آ{WAn3 I8 }6,> ~L芈vg26 C w&FFF6lKxc^-^sU7%\?N~k&P=4g=BDR49smٳӝ9{g9@WأgK [!dGykQ֡'m>)#>podF^?zl,OaDVrW MU}虨o d?Wҵ?:xK=wJa܊5].}mJw310EaBh,Ŝy+*>j!<7GV(拪 $q ~%p\Rّ4k׏=06o:aC!.Z] ΀smVCsb^Q7Ffk[g| +d vm?AKKp˰>ɉr\wZ|kՖ#m4-Wה)߂J!qxl~EYu?M?usӣij:*í8 xBsG]q`hLāqOV ml`/C,\N %2t>!U{*sW P7+mCR1lj\~`#Jkr6Q%͐ͭmV#'_UzMrmGny+q2ntg?k޲n5~`濽?1G-(Gx?oOs?{113lSPL!^Lj7}.Ytd.VTڡ UrDCo&\Q|wMTWyķue? yyQQ#J86lw|UaWp0 A:$.č姉0ncp~8G'Y} g/jBƏ U&\&k}ϗnpizhOH6P1De"8 @ƥ'E(> G==!,D:iDdN^=O?S?1=~AA},*%+Vu*YUcu!u5kzTuwY9 @9 s2k5k8 [A%3Eb)~yչKNɟh+^p쁟vg>{Wlvp@d56еLȝQҚ$VA+ ݖi%"m`$61_򫾘N'νn,U[}]luaAwkC5VtOHN3 rJSk6\1UY!b׈-e-H b_e{blmzsͷܻzgu=۽ouxoَjh{$="MAAE l@ 'e0rw5䟰j~܇_gf/բlu{g?>m6_PEMq3*h2ԻXQ/ \\;x|ß7!e[U=a'ziz/՛9uy(YBSQ=y׭^bAoQ]M2yAkj6n-s;ۚJܑΤvm 9ʥ=3qҲÉ߿yE|H׸ϟm+hW{1 P\IHZ[&PmN6&B?Oo@kYa#FD < %;$H2hVTYeq~iƣlȤxT`\= $>TECimEFIP3kPcHaǮ^hyAҵɹĢ(>*w_Tkff#/?տx>PKg6w5:cDcxpR\0DRpZGHBs9\HfiyK ݀~tc@k'h q -k78kW ~x$?1;-mӃw\sڗ=37e*Yvhsٳs|@3|&Ņ]%ER.#cuzZwh}x;5FȻ_S/=Ow<ǫ_V/V?#Dp=gᶳg Y]mUJ+gD }E[/BHy7Pvxc`d`|e`#@9rHd`S xc`d`H{Oqix4c/32f{j8cڶm۶m{Տ8|yЬ-;2Q2afyRWrm6MK֛~m)dFKΗ1_|rGK/#25_yߊMq0`y gEkC+{"RB9BBN~!cH] Tו Q3;]SUHU n졟oT_5{JsnUl2;hҩ6٠Ә斓jț̔/vDw7(1,1Mz7mRtӝZQi fNrS(ד&KneK%\'_Rg0AaPs4?VGP § +ɰ}_(s7 t 4G%ET̳6ep|") %˴gi{_M5k+$;atT^I%n[~d8'&gP>d1 r/KZ\e"l /$8O"B\r4NlLo-tm+Z7>j\-G? 2w$+1 #u-P裤EjÌ;W G%dDGSgtxP邏[B\2̗B]\Rd(qn8hG\MI"=a;TTn˴%ajtM&UgVX kUoN{#Ρ_\RR"Mi?#i/)InH雔$,)E.l@Gۥ% z+-ϓ&Q~O$/tbr&9>$.fFA~d2#ˈ5LSs]꽷-R.CHwKE4QM0-X6S sm8Ech49v|%U4e o"?H<20O,f+T73=p`Z3vHp\DfQUHVL1jl6O3L2%l דcr0b2ި|ܢwod_CEG~ rgd':<MX&CD_Fzڿ3R? E/^J=ׯEIMW;C7o"ksqX%=?ax+ߞeOX7FhՃ[n ZIj=y(]3J*ױL[zz.jbS5 eH|0{*yUFk8tiD޹9Wӣ3\grN[5peJwr'^0#~0,S€3PHHӵ9t6%lgpjEkl +(?M>Eľą$)FHzKvS(T;u5=桍W*FQVB)Y,b sfY}z%bfmfe ?{/''Yȩಸky!k~?Q2E>nBVW"\~cBƓ5!yKh~Sy) :A9\yPY:&k2ڀvNkۭ'`aQbih ߖ尕dmnl-}{Koq'YptVRn'x->o_\uP<":YEda&Y'XCF7b4@Jw%-]TO$-IҵtIZZ뺤uiI$I03{ol<03̬?-I}XO7k}7Hpl@9@ RkؠG<>҆C֡8?/sWADGG8#u$(L2B"2GFQX{{:6^6:nhZ rO|(&l1[,&3&+&&f (LN5N) )K%5HiɴcΔϴ΀3,IFe2T>[0}g 3EΕ5|SѪP+y|<W~RҕJ@+?J*YUjSTŲŖEբWMQnPK՞%RP4 MF -3%`5XvbPZ@ߵ<-C[ӶjZ֨ukImJrbZ(S\ `>,1 p HR.ҁ%bDpDu:Z[צ:L8ft@.TQ3YZ^Q+ u` קY= CPch1|5iliU\ӌcQmč5gM5}6M &5}WwIsff[2ڨސm,92 X\Ϳ6K79MfZ`e[5b˴1mv̆-kk˱flm#ۤ=β7څv=S`9r.kW}w;۝3װ\E.˷k_q8̃]q7yq<'<D1hMV3{ !wlCH|& DNXuK+9}O;lQŒ0Od'x!j%+ۖL5nuT3>Z.7f]I3T+Sf]eq)mۿ6T( pJm)48B98Q:=aQ(f!G#{ X8Z R\ +vVeF6^>Huau㴪u4S˰p^~wIcAu6~Vޑ1ep+x)r5ɒ59QL!E4_%7 +2+3;z`9?XjH3f$viw^cڡKҜF$LJSO8g޳'?WFZe*ĹTj(cŝA \y%ZI`54[p*=G!oZL8+~{]B[FqxlCby?ԶmǨmjwծkԶm dFhfN$W IRJ.C,rʓ@"J*SB*jԪSA.ꦻzꥷ>꧿d!fFe1g &d)ffe9gZd%ZfVZe5Zg 6䲝vyov;쀳nb$&9co${sniբ%Gso\=O##-v'2\Ȋȉ{/;Ͻ((((ʨꨉڨhF;`-m۶.MD%$ed#H<9,m۶=k?~WPTRVQUS70426153wptrvqus2Lb@.׶m۶m_ Qd)RI!Sl9rWPb%J)WRj5jթנQf-ZiסSn=z#? EqD(hQO DF4GuDAC5fD4iʴ5Ƿ؉x?#%eּ,[jͺ l۱kϾ;q̹ \ x<(zm۶]dn1CCs(18M0$M140,1<-"-2˭*:m&m6.>p+&q#0ɔL < 17|r3 +7/G302P ,lgVN.{2 ;|}5&fV6vN.n^>~B`dbfaec7h? )8mbX|%Ya R)V*3+RmU\ ]h)s5Dh|*}Y8YO24'67YFPɖvJ×4(4GOBoLeFь09>QX=o >VȊ(ܾqT2Wg}` c8NS Lm,ӹJ͒Z@\W5pZ^UF' B+uVlmj=CmID>X9o\l})kc4\%x,] aN4Jvj3ER?GI4AȟpYpE9nB3FF2}S1jLd_0oU  i6#b$Z^aYe'/Mu^" u%$<\GAu7Jv/3(ʢt6Qd Eci=94E%c DdS(ydPRX?ޤw|i *yz`qfwE3oa9b2A\ O}'O\,OjJ֠Qh"˴XƲ[9b}c<9bVEcV,؎#-bW\y *,,llU[`e&TEݯ!x݈NC*Vb- k&Gzycdc}J&!YrjűX0o'[o+@vݤʹ3>Bm0nMۤ tTLP?ĀygQI3wJnz_N/Ӏ64Үn x.7w<:6_4W%nҥLfw񺕘7%Uc Wkǚr;"SSK5҇Tth#U.pp[\boR8c|/dP"j3hb=˪P:"MY>$%E3QwL/IDo>E.;'q@@Mo_qH#&t.K$o.K\_NAI=qexp$?YԮK^{ZK/2J~rj9岼2B|pG6ѵ;F%(@7-V':(,ihߵk<x+021MݝeaMI 11wL|cc湎̇/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.nȇ/ +?!w]i:3 u):y8߼ƶy_m\|YlףB^IIWmxp"(b##c_Nd . 6*(xo DzFdBBWh& I]6q3ima"@"rk&vl.U;#68tDyj 7v0oһX+python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.svg0000644000175000017500000154373314502137725027712 0ustar carstencarsten Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 By ,,, Copyright Dave Gandy 2016. All rights reserved. python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff0000644000175000017500000025042014502137725027570 0ustar carstencarstenwOFFQhGDEF:@ > ?GPOS+UrsGSUB-t9A"=OS/2/T`*cmap/j|cvt 5.8)fpgm5 zAgasp:glyf:J )head.46Vhhea/ $$ hmtx/(wnloca7:%fmaxp?  name?plpostB $F[2prepPxc`d``a&@Ȩ$#Sd%c%c@r*t y #ƻxڔPڶm۶mo2ڶm ֶmD33"FzEjMaB8'ԧןl@J:J9V΢>QBH1Qbw67֋B',zJs/'˕rWߪXlߖd-Aeo Hkd6Z퍮S1]ll7*([cwY5͎P'+be[YVEz*MwBjI1;sl͵[kS+VvQnmjt=oYLqй>A}J" H/ó?]-'K__ dfLP#R}/rO +,-;)݃p0\$i!vWy1I4Jeo+Û^k8 {r_Fb;/Q?{\92ϋVo;SNDFC#!,ȉȍ"d+H*ԨHDzGcd@S"+ZmCzl([(D' %pPg8[(;D-OP 񖈧 j۶m۶m۶m۶m۶mC*#> ;'~&I2(1C>#3*09S12-1=ӣ9Z%[5Zss1sWp:r-ס7rp+w1%_?` ?)2)b`*V(c2*#+2c*+v*crvʫ꧁O##;2C83c:&C90;8S18;2;82 1KS2+*ӹk0k3 s3;3 {{Kzy x'yᒿ@.A! yu1V@%AΚgV ζm۾m=kiku/ެCկ*U9Mw=oa9Oe goxIeHzŮu!4A HxiZ"4FdNeJ]R`L֠ަSMJI35"m~еxu3Amҵ7}e u5YI"֋ށuk;L,iY`r⸉"F-X$:s`+S4mvR;n W¯C#h>BΩȱ25>dEF#+Z:ͩ/fD:$H!ݏt` 0qV8s < fMfM@ +t6]&MZOבo*ֻtaJ*d.qhnE@C B*VPЏ0{%]%W'If0ɬ,\MZF$S#쫉s|H¼,aA!bUU:b${-hkk! aA m,BĴت bl5X@h)D4UVCqUKNz"%:}}#7S j27 l),IɼX"N2A{:w,Ix˻:J*NK#t2=_l4J!~[^ W҉BCl[gXv6l7a MK'j4dLquN3įo!QH,o&%\ƍs3k@~!hNsI gX~!<**Ckׅ?ߟHo6ےҗM΅|_Q~cc+L5L"M<3ߵ|{a|}|T8[\du𲎳 Y* cx>8u|'s[8s]a"r3}  h|ȧ:fH*GA?%d z,{7.eKhD\>ӱA.v3{ so| oP8 [T͠o 0ѹ[8L;eci5` Y1YDƠL=k',5[:\Xlj{x6e XփK#_07`qj𧢮mb/vpVqtr4QVɕp<_}[ލVep[ϐڨϒƨ]dA4 &q஁F>̏}:}ܧ} ~:}ܧ NlkF#[oGCp pꫩPAd#2Va.Va!Q\3Qe)K 0b1y+H!2.f'Йe*DD+ZRH$dpdz})9sǨMTRt0 I bEWvb*jB4MB!dpX97Cٓz+|ׄ d0#ͥe8f꿐EڗeնF}|^ۋ%׳2lys% 4ocElSRDg.+ݔ{v\<|!r(cSz8AqXlBSx?MfpmhK;!V&3ɢ#89S93ɎMv+g9\y<_ S^̕yBrӏ 9XCe7(Ot9C͚\9,`!YrǼJFcY*cEl+Sq:Qr7yƏo;_Fr-ϧ+aTگvFZ&(hT:7p#3EΒyg,`r뮰JyG+?U/A|X>"IZkS / Qnow=@rP˭#Y!r)wg|WQTSKIDXZ׳QO8!'gqHf,SrVrxyy5-v3.ȏUO$wp}!cEu$9Ka.bUTۊI*NrbEj@J bEڮ_~!V::{_g:{^@:{'9Ka.{'H 9q]H^)~!{BF8]&7$ӂrnvN$֤c>f+ `Fe<[Ε4Йn18d$J$&dLH'. Q@!}1"߰҇!d3W3븁2^^ Rvv[/ }0fxXOU3cC{ՁLH'. Q@!}1"߿҇j&p7p#YS`3֛36fS6[kiAKZq9q;wp'Xbg1Z7N'j֤ jںjN[Liu[۞{3w4sJ֛~|R]LJl06Mn0= Þ7|PH"$%Cٞf\jtLK$&Hvgy!ՙB3 3G*1TRM}Mz2,e AڑE'Е\HД8f'ȥ?P&3":OO.e&z66>elv_7dӃd!KYf&#Nt+1M6)q Xb<~xmP/+5Q~J7p#m> X/o Og|WQir|f\m(U~QnT68$J$&g;$;nHvg|,eyl},O(T0H gW0,? b߰J˫u̾He+ˑۋ7{Zۣ8M%LdCuw繓9S9"ٝ)1,-:zU>P[__-_7kq|]2,nw{蘣.Ua\E 2Oy> X^)o{74V{w 0Q\:0Nȫ/gzӵO{~ղoiH%rb)X&yny.;yg"%WjղF7b<~]SMk܊tƶ>E /R^_wk=d~|Mvg<_O *J|PI54~&i+gݞk?ut`HΑ%0RT 6L9K/ ]]I1MvYަ~K/վ_*jhi?_S]f38;Goaf/d)]#27+oQ.W%bBl&ysNvЖ%;хЖ+(z8AqFW&48gɳmv)?D|%} :%0RLt^䙮9ԋԯr,;X~WOZȈi 8}AO\2"Fz5Jv{q̴Bi_*R(?>ʛ-'[{ /Ke1qߑ:Qr7y>=/O=_{^o_{~WK3޲?*_jk]mg,9[y<糀/.)9^%^5`7X$ߖw{},,[vC|ܭ/=|>*k5^Oc?BZЊt6;MOO BGֶ2-6ƫZΐ9ui9ᐞl[u<=4TצdSmڎޏɱWb&j>ovNgqatO~,g%pyGy'YhD ö^ZepBHOs\gPyʔ(mr]j=%ms>#gkgR"! {l#]Rԋԋ|Yv;wD.J=ק{0I dpBܟfdG#wr,.~:DD>#9̍_2r/įJ.JWjϜUZ betLG{[>,9p ӆ[-짊beގ7R(.wzURZ-= 1M% 2Jqz=yp{e?G&iYRd=qw"~B"=jN>X_SOvg;xg 0~5^<泀Jb!l6׳c4w6Z{Xϱk&_:ɼɜ©wku1#~ptJr#2/gngUgf6跉wẋrVknNgUh%j9@32n ?(/y^T_/kZgz]"km?w#! e,šULbrhLw2863IIq[dNTN9@zG".b{ӘOA|r~\m}dvŜPpFw輐@TӹNnۛ-oVצV7r?_xGx'XZ3< +lM{|f>dlgn9%͵<clG\AN-2,b YN6ZbVFC`^LH'. Q@!}1"svmɥ}L:nFf0H-!+|xxxT4ZHHW0bi#R/R~rD9E}7)/.+xU<<<V99qxjAmuԨa_4Vնmk۶g}f{.r6KH*!5%Ay)5Eol%4c59gy5TRLlhpH Cs^ݻ(f/gI BTlLdG 2fwi"M9"M3Н~.Жs䰉xT҄[0\jIFH \3ї]c36:::sf0#Ϥ7Q+X&:P<@(3ޯG륃WQ퇍_NPҥ?V%ͤ~4Ip8'e4@VwqTمrÿwU n 9b0UªdWޫ'7EQx'UI`Z'bb~Mȍ/ao4zfV8JjkUC<)H&ݮg_|s*Uޞm϶mֶڶcQSmTvڝ? s!D iB& !=4hcp`)=(=d4t8rp.#WYnB] !+cVY޲j|b5jP'1 1$1,1"1.1ObYh3c(1V]K[ҽ[{wJ+ݻOwtރҽ]ҽҽ=ҽҽ}ҽ{H=&{\tISҽ{H='{w.H^xxxxx 卖卑卥kKHIfIHJHIN";[w\)yRKxJ.].ŻRw:)ލRx74*g0'˜@ B* y#Y0͂|(`@2 `T0TTPTp4H4h($F?Os8 eUXf8̮DYx(V/֋\z3q3qEW~eW.ʥ_W6*Zr'sֻzFA/`#2md57?_$4crczEǑ= 7Qso^j۶mcPvWSw7s8W+_$ eCJTVJX*2&TڨVVmj:;5hаQg'4YMjCMi4=zVy ZkIKhYQЫZ״FkMzK[tèӑhaEAXTTB! ,': TQ3:/tA_ꊾuX7zꖾ}{A4E0 "' b1Š(bA,wzc4IOB/zf~wC#я~C_2g'8\T8!G ]D8DK]9ÖߐT"J4,K5K5O5l0ĝ=!7>NQArN< fc!] ({Kqzu- @DRUU (Pw?݃}{ܒ)$v,(24u.)۫[SY$z.,ʪƦΡUm߇IM .3d8DDضmFSAm׏<'3ɧe!!bclM26G(%[bT]5׳N]7h&Mݢ۴u=zO_!C=bnj2uOGFQ*ם!DX?F\"Q%rȕ*[;[kvr \}>eWEa?ٷ۶mc &cm-rl;;<:94(*Ski".BE]|%ڕdN"x@L"Iiɑzd%'Mf@ 5F~/t3E<]@)SZzK>d')K I#Eh1L`9T)2MB ̐*3fI0G`1OK,g KeY.!+X j Y#VcQlfɳ. -Gts$ig%9Es+UrM1nIJ{<JG'OyFx+x#!o;=(Og)Ew0!4 uVcNyKXABQ:J`%+leU~0YAWnƵ۞cmی3{`xSj8c;=GbQcTYO3zx~!^`@ R˱XΚq=TL9үkx=ޤߊ6WLoƷ4f2ӲL4f7f)-~_ՃQjSS~S~jO|P KQ#(Kc' WѸJM6W5mj\|9_htE+]FW4赹VMux9AO$=StN39CRIk(?Rj,6K5eyh,Ec)K[rwU{'bͽG<@̃QMJrMIpJTxNxn!l7Z7Zt'^ͤ$н^}~=avpyC!<Qqq&XSe%e4֤&5iI_EKZ),Yn&+T۬SnZϚ!+W~Ǭ_iyZ_%+Z~׬km޲eu[D-[VnYݲeu-[VnYݲĺ Z7kYײe]˺u-ZֵkYײe]˳Ye>^"/e?3+`WoޫaE#??+YjVy-kuofnvYU`W=QլYUߪ/j:ښ rGΞqk('94|3U]Ow=di}U{y 6#m6Zk6ަ}i35u z[xڝlP{qζm۶`f8ۮճmln) ⨆`N=( (0P ȌǢƌY guꢕz蠽>io>(a;{Pp*ǖ&;f73xBWѝC_џ d_1P1dO~r7s74/65? bfae'줝v&]_rA.e"W\rSnm+jc0By#k!=5@kl]غ`a6{l-U8ik Nx_=eZ駡0Jrܦ(]r)9S4'kJ<ʠh2BETECGG UBLb2DTSxc`f8u1TS7Nh&䉘"(6b(HRar"Gər\+7˽<&O*ʫZCr3"dd7'ƫ8EuHYt ZgYtFws|(e3,aZa% X5q=F< xڜUG{F nQRb34kg9\w[[ң}d*v=ǜk@E-ۀ{+X:%}W*/2sdw7d;qI[Nvv*GHG1Sg$qބz/{i$?IXn|$,NB5ڍʡpz^"NH2iQ=Iw.&RÃQN9|/Nwl?9A 臭X S2QRŒC&1f1IȈ%ETj>N[=Rj連qU!݆\տxj[ȸEHƣ4Lj [ dRB{ d~|N+Y3>)^A?zӶ0SQ\LMEhʄT q8 Lxc\6>.I@ ]IV3ˠټp' Tۇ))Eݟ3i0O/= 3~ Q-JjߴEY-*j砪y[]ŨE[}jXc}׸mVz}վj zzeVdi75)EeR nK wuJGΖv΂o3G}[ K{h|kܯҕk~2jmrpʂu`@\\D'xB3yQ| ,7g~]YK7h=GWא E9ދ,QK$ԓ=Qνl`#Li*E)K9Nwc,2~iԹu:@ӫҠk-"j-q\jݍ=bCT>O5 b]b?Ӹ"+ 1qsQ|5>Z&h*=tC_X43~y޽^9+VYtc?Gc_@ԑv9rbAu&EAY]gk7KH6妲x@o0z8fbq@&c J?&RmP:9P ڶΕDp˜u8?zk, 8, w'r5HVoMJXeՓT0*a:h`2M m $!b)J 1C1bcDy0IVJj͝ael&[zO)=MO 'JRzğ^Jo;ؽ'ahxڌZxTW>ʛx&DH'I3$@ N%;) xq'T Nz۰xٺ- .Re}/tېwNf!38`Ix`o1P`Y̞&gfqk@.C$CIh!JPӢ1;D87G#b4$MJLu:r)b@7=YnG}!brQJp7ҟG!s /rL(yd#qx)28'pN{Xgb#^sf`fZzZZVfvNdyR4#%84ӓsg&uGN]?g;vċ<5#on4o5h'|wecΫ1[o>;++8tɫ!ZZ>@khoݺ!e Hr*#84fB8Axp^'%̕a5uJȞ,nVttu߾dKXۻk} {&zYTK$Ǒc<={੧#Jv/5x3Oz}꩹]Gڣp|Pxܧ[z%t7P<ge 02C[C$E אǤ";_dW{Q>SR>2avvO>pt[MtU_K/''<^iE&Yʷ>k+Eufd慡 LÀrƩt4TS"Nwi7ҎkxlivvN 4[L`*ѽII/p_8y~9.:*n{1Ez҈뙯įGצ/ؿe ;[i8]_])(');%RdPPmw҂;!=1i7Gia l28]@aלͅ뚦5yKkm{'Wz̝x N_Jpe>8+a6&ptpBiG >aM?NqP$]>5.EzT\&L ᘧJ7D9ߋTiPOuSݫaz|aM?5=wf޲=r˜Aˎ|ɑ67rfYXIƮ\:i¢ErX'}^g C@R`yA")'DW6*zB2e]YAmzNl]\z|+^?&qRs Lu+mZ<3y=,}夺!]*yq;xXz i`@kC9NV?nY#KOa Y aQ0Brv̲ZiRscC02tq'fKԜMIM?epa}7OW@n]PE(*vpS-*R?I͛4Oќ׷czFPbճ9Ys5{HbZ=hX?ètuU "#5(/8ghV&xɖBb/VؤI^/VbjK;~+N4diO{yN7PT&A>ِvaA=4i.QAhH H հ" GƠT&SSAEv75cOMM㝦iTQM\ %]] ӲszqvM1櫇Yfs}}T;|m}e¬-8*m []zbݎp*# s4D$M[&Y~*uHef6 2ܳXDsB,]3WpX Lj!_ታZ{c./c^N|'1!0PHh ī0<F1<Á$'9 .gt$Ѧ RH,66"M#=XY|,+%zoE>=[YbFsVҙOSe$CKv2ڐ "Б@ RR (PC-czÓզ"H6k*tBtc6]>ϗ?[Cù5;yK1egM.zIJ/ktB{p;s ܭs_0B8"!yH#9*.bٌ`3lYc0ZUQ]Vr&p!S~#|xR\,UX'P߻_^ 8ɣHr{eI\FY *BʹL&n;$.kSIvbCXFHn5{S[R$`A`E!L 3َ*G^^fZݖ  r{"V92N( A&a @Fl5Lh`,CX*RL޻Z\mzp)\!Xɶ_5moŌ͍/;g`%v."z q3^o6L [/?+)&:(!$&Ĺv92c=TE)Rɞvn 5"HdyWSU4XUD% UǍKݳ2WG[⊄d5nx䍥s-‘| >9-^O x\;Zsb"#`B :N2߬kߎF Ç==)w 7KE>~TLbTۅuw)/!\ˈ 0%*"e 1l@$Bv} `ڳUFf#Auoa4)CWrؘh"Iu"La@" SQ z[Z0=h^WĖ>S.W! I ?'`+$y|A H,7; 47qL¦y Q.:"݉Lw:XxZm\aIjZ(kWQ/]z&ѩPJxN|+O0Wg'.\8r\+Tw="x3 -#N4^q~A&#R 4#9l29XѢ}쵔&/"h0kuQ)llYtxi;?M!7SSr7 z//5_x3t,@RAKcup%%#RcCȨjk5C Mʆ!E).ɥQᦏ1*%)×MKwl\I\~Mϛ״yOL4cں<8|֔Ez@vWĐ;{۪G=`&tO>6490>=hř7Ok Oo|oэih?_5iS>ōs>ݶܨFSz}TB@0aмBQ*lJ VnxCQGGo 1 y{DSQ'bj uQW)H-IHZ^odnO>3DQҩmeըG*>Āz`걱&|^M}dyhϒd!|9 Q(۽n͍*4GMcǔ)G `~-k&TU?x61چ0R;INJ4[)VowrЧPo\\ AKǨg0`xo8_?+ޛ'x3Wͷ/+՚W `-VQQS̊3xo?z E֦nX̮FZM.c+ih4BGSćoDZy,)$mch_b_-/Ʒ?a5u,f|$$*THƣ =?^Jgϼ= c5gENtӨٮ1I2hHtEʆ%X΍S+ZmƉW; u͉- ?1{JkY̎>H6VC(eo+#O$1(jzUNVu_kRfg1\BZSJ+++Qb\1LJ?>^~i@`Ix1ws!ahV U & MCӭK,Ea Р^jcoccz#4CaEN_rmde2U'(O#H}㋣3N87~Xy$ܷvtccܓ?lg99"W{~bN}hq:'D# ~ZәEF )b E&>jcjp9S=L^Y}d[nmq"kU=?B #g9BiHswRl<9,FuM %ISRZJ6AA.\pVmyޔ5 QjiXHU9 ֏:q(2gsr+5W2j0LUqBrLcLN1'ˈ]ppiem{ӂzzيV,'-W3[/QXuw!^t`?kqFA AYc5CŃ6NcTZCbϼ9erD}NN~Y,=/XJS8D:(fAQ"e\ GVWKq)[K,=˺芻OTjFIT ѯu@. ܣVr5Ԗ{2c˅]/oXn{\;rm4E 9VK2vK̝V62tÑ,3tYgKf&֕SxJtSHKoG(;jW8 {kUۋˌq%M AF {,R4T5 Q4qoR=0WS]z|K{qtcvO)#cG̉P '05Y>0"bE4yaW ׌`<޼0?8K$+z77HoA$T#9?6lQLvgM[~ ݓ4xYϏU3t .hB\ztЈ[;1kUIIkI?}lSSgDMU׮]r5I9kf]}b=X\^ch0HK(gv$P!Kd2FxT/zV*Y8T޶4=ujKteo-=|tm+gz3]ZJd {wul#Éw9VK^(q;QCIq:juyKNeP^Fv6<CCgZ*fxT}ObQ;̸7qLvGv|P>z?IP2r #[5*OJS("{EO1:I'G+Z:ѸeO(;Q/Bwji L7'u\Q?tzoʴfܿЙoORP{aRMϷmMrb틓3֗/~ .aQH Pm4C5 pXN{U5]F/n5݊?>6!ql̕\qcmpBv|͵f+Y9 4hL`"XA":1T52Z+tbiDO8Tvl@Ba i JPCUJ{;PB0aWo'| o|9}' Ͽ#wk/;?0PjLQ~TVWCR0, ,\ $b/־< {{w7MfH!NЃTЋ "DX)A|ޕ3wn6~$)gfΜ!R 0Ym+MLgq[6X ,%T<T<\n]ȵ*0dMO?f0|\`uYH~SjWȇ~ӕ' *:yȪ~~֝ܗ/ѯui'j W\>1>:3p'EGn1J=,ʁ.+'ԤQNVlL:fF +.#EqD`b+Ec'>Ƶkny^wh]t~ i(КxX|#,m\TN푾%Gǵ)N#b0x #̡I\_n=M3kpF HW,ZqQ K GN"_4̊h]dg;s XfGcF]JM&6}/;[7 }_SYfa]:CG_٩=6o_>~д4gկsmpt5<:ݸzAYĎ얆׍^P6aB%F8:qRۨkMS㱍z6 Qٯ 4\o=.]./~iU\;ORHCRH|Q<Ie nʈa(‚eآ9.4)) gܴT:2xQxSQīGR~t]OߵF4iȑ0/0\oޅr vqxK;vvt}oުv܅J.tSh Q-΋~p\TӤ]<\a1hh:![C?KDioƏttקe(],N0 nwڶm:U"Ě7ܖ>jaԙ [tҲY> 7 soh1IDb[ې3ی6I=0`>t}8(,0ug3ZBdx;ɐҾËc30~j$إ }C08+dw+uJHsOt0l *bPr!^Fl!`p[,oۺ y|3{ ؒh. .0Qja][!~ۑ%mv޹mFlWЮ'gVT8w\Q-{t:vh شn8Ӽefs?\EZ5?na nM限:wL)ߺ|7,lѽ{žԝ;NߺuzQEE{՛hH[]D0!\bQ*mqA%]Ďb%,=jNK{CL];`8̡;3S$@5 a%*$+d]+ 2fO&]Zv7eSBwzy;7'_6o)ul~] dpPI2OF'\d C0bt0Nm)3Fr!׎PfzO!۹GVR`vнC+ѡJK{\nѨu}3tt,IM;0u ??<8?ā>۴ 1_S"xX8`4Q' t O3c? X+[hYi9竪Ϝ4aq*Fő%nhuĘ=ӵua5tPnhGAN06_ K8``AþfCgD埸qxx2Y=GN .?$KoƳMb: }cXai-B ;wFfMվ9a\qGkBŀg]ĉgM_>xu %޵yv¥æK*_[8t|W@7H 4.M4DQ6 @bClv>p:^0ܦ*+T(m\[X{Jx },D6kt8I*b<&$KIկDT@ Fb>boE$r~k`Dt1Q!Na ~A[!G;s͋Nzso vץTM>>Yxӵlܵ ]Fv2u~ڇ]*j>]PTqC[={`kX;̳ϖr}xsB0J1x#$Dܔ5V)#Km%9[u7J cQr~1%Vb _'>|b^/ڂ n+~kFv״sw[ꠦ/==Wq_[h:윴>.3j_lUj xiʋޯy7U!FGOaO\5^WН'ś$Ĝ rgk賦m]dשFD y57&F4K}#m+w㞤EHo5ܠг!eI䢉=+3-F\>ql$dȄr[%q߬˱-b&-#noJr||h(HP=g#O`2(̢88+O;gɴs]!8wV|7m" eYg;O7֬?M_;Ƭ3 !9l}CMu4Β$!w200T2LB)TI^#РsU+VDw]ej' }֚R֋صw.ӟI\ ye|H(kƚf?FO'q:`<&h W;|ɷbr TQ!Aj_>8PB9” Sp }c'"9VeTE>0 xtPw!U;vȁך%}~nK2l3MPOPlI>~C+_ 0s֭86eSZo}CEs[HwEFT$XI #btm ], \O_ j:葳#;R[H\G.&ܹhnmFm|8 ,!%#Ofz(;Wf-(Np3D#4]&˖F2wY>3:`o`+ҌٸS[oϸ)[1J3R< < ډ0Kla g}DYR@Mx yx Ιyn<~nOydY.ɲKϮ uٟN/lP|lsOBCS'^z!-p]3>y]Ƨ)}$r>ISF+1 N(!X|.r7kYجu֙)#bc~K9nX\ azZD=zsO-P"6memn}Su͜0~Vvںq=z d? =7&N\6&X\T5L| K#lպJL!jD[5VJ]%6 b;cDn?.A`%zYWzyrstۮ=g^/Eu|C/g.XMs"C7Q۩.,0cyduw ^*u;_dָȯګ#%_+2ehA "\:Cuhk=YWu+SpZav! pRb NBFh::ɅXh^- ˀr_kS䫊 ܡX ) [?27Y()ux?>V 9M$\bE0ӵv(R>ll4k\ѸNrF7QCc`({¸ھ=wXrRjkkDox@a2ݑAVY @E#l Wɵ߰y _H=5A w`8.ʜ()Ƭķ'o3;XWox@o͖[j0cOĆ ¤(vv`J%;>mMز%[7bi4t"۠y{a[9c!G_D!΍ĴI_48Ѣh"{o^WwգvLyfkc1I]4l…C-!/]Fs :}мm7AIkĬT9))@k_̤<]N n$5Itg k7zѢcZ6 ]L9aVH%~&N/#B(DYhV'a$Ý@x!uun`dm/kuoWGxM&hKHYS1Ϯ'٬ yOx0*a.j44qڈ`dpE paɥ  V. 3\Oɦ@.( 1$4D]ciB[#@a}ZJHAw$U'm6c~(F@ˉ%_38҄CW*fڱ8~~F$1V* N`g/lm;h\Ԛ,/҄MYG <SYb.cL^ ӖJgCfX (D؉͎ڣ0 96lHy] @EA (7i`,ktVt@F-^~ەvTĆ*Fh]hV# ؕ?P`YԔi7ig ύ,Uh,ڎ18Pb,t̂ΈkT#iZQHỳ$G=g׵m+zi#f4UpR>hC=l`J4aa䤥i0+#5;-[Ɨ] 14KC.(4}fào_23\ qw3F\6T:Cډ'qdmNR w|-u[6ܾoxzg6iVD9.@F! A`2;XIVÄxz,wLGU>|6S[[*<P+QYx3yl +,^fwkY5 .:Pj}:i>,G\"ZY6K rЏ|vNI:W ":ܗ[[׈w~AĻEvXI&xNex(#lЊ>bpaDekN;e1BahK$;[TgN͡7h}pg9u^sa s e5oSbn=_ۿ*5+)uoyهŽtY*hz$1kL7d KTyH)ejd2:76Wn$buPb,I k j'0lJ3C0cڭn|Yw/֤/ۨh;Yqj ܵlH˳y702 y>"׈PF&u611N!+E&CũjQmk?GdjdDl*kGxo׊K[civg"830:G r69 2HbwD| \~>}֔IG뮝hupϾq{24+[Y󎪣nt5!z^;}YwXPōw@!rəRiL L1te8 ]B8|N~Ϥs:7kcëm0/KDOn7ոںxߞ 4vx#!@YbR E ـ48Ծ0svc/7jX^8ڈ{&3{*Zܹ07/:˷=}ݏFa{K#064F}ܑ&ryc}:%bZ=r{Τ=Օ< l$Zi1Pkg2S*C})HdXNgv\ S V{scȒQiݰo^?zuj%gV(ޫYa9S ǕAϽ2Ӟ4lQvV\4|%<㗃l*)z.7tH H< ts:5|9_#`z1KЉ3ϻp݄x>‚} ^y5{B#ѽߞvTQV<`u GNS4xTFVUj`*(5dѠ,^4ۣ}J2Cm >Y{<+cRG"iŦnw="^[Vßܾ\٭o_]>y@+;BSa ws çϘ1݌I!H-17D w9&>vgX񨼀ĘS:U#YtWxzKxx-;{.iq\2KC"1.%tuGc"Bʗ]\]o!m,4"C@7D'^NcJxob({!I_b@cRLfȨ+#:FCG& U).*X񞌞nxGoN{ѻ갽&a9^~y@6>fm6ޑXGNK@`$Z?`rV1닍KtSb Y? 's8Gs5ArՆ≪*TH0@F\OPWYH_0))ɓr{X6Y^Q*u*$ ϫ_ k9*D>] i.bظR7uʈR%1+I;fiTiӹb}v F ܄f:%YjlklR5V/"2`zrE@+:]-])qto-F\SG%5s\~qrmRv4Z*/{!!ژ'#G648=;;&9YYR4 @JpK``M Rb jq~RN?_|崔i~ώٱ7~5[>:wk5hKX? [% gܽ̓C UtRv[Z>\uOmagOqَ4ԓxX*٩R#k30┌)2D ($_8vk0בR_$9tQ%`2 L$ (@'NPIdYEzAlUq룷}SEC+s[~Mm<,ȀBLFXD9cr%i474yr#k9Ӊh=0z(=pbUkD*g&oo>ŬaXu(mfrloXG rbb1 XaP0C^2WlA/akA6564utL8i#F8FNHHAAv2[l&D0w2 ;G}(ͣ-339̜̜dY+)Q.HuAoYFd.t4X=fٟr"G_/ԁj}W&}W$$Ia]aM(3)` %HH"$!9!9*>*0c{A}?WnV n} )IГ@3bw:VN(GiS#` oK-Mپ]YV}h E,5=5 }5fwB GC>ze̵Xq%Ί1{qHXۡ} 忀_1_V).jX S>R[eq%nfyʗVF$\ሧR?ŁRUra\ j5Dp򌴪CKTgE `ZÜ,DO􉆐obH/j+Ε+c>OifŀO-]"`Ga?e͎;4[ Mm{ު4ic_̷$ڈCFJ˥U헗W$xS\w Uĝ@h"0BK4Pe+-“*ӓ Wbu ɪL E,JP| ?1qŜm9yby߲IUX/[z({fߣuܦت^tmkFtxJ^30kAA^3кbfs{;Sܙgo|vCeey[,HMy;M!c]Liջo?\=a'e"4UQ5Xզo'X&Z(u+M[!I%55h朗'Sj熪^C} TEݦ1_p:}\rQ:ruQ:<2dTU)oNx-t`1W1巼[\9A<oQCbQل7 VL @c833yɕq3!]ewmvk3VXpl: AyBN. O.PNnۤ}FR^xLnIIpmW,"BT^Sj7T M+ 䗎ɠMO~Q]jsH!į s5lPv\b"B4|Ĥk*NRcg޿lgjiOq.߻uGؓV9jۑ{>'6.W)/1d7m9m9Ļ\rAA/NEUuI F(#hn8Z%$V[iopGp QgZӸ~Cߐh]0rTl.+YIfa:yJm^cR1dx\276AYD'ܕvDrH8^x9X=@U(8XéUNs(n8'^^ `́d?~KWJNM.7~eM9 t+YF=xB+ݱ:ݚևֈ}P?C7CסfdlFSS4/XW]NDq`HC.[ Om8֙=4;c^/~,q\+ Zr&)΍u"&f=ҌSUB "G8ڎ~!+{ sǎ&~B9ɕ?*FN-&msWFd_d6e.iҪI.ĝpmK?ͻ&¼BtG 逦a'Ãh4@ ;ճʦznk.yaC{"ox͊+*͟++xCUE6V{+Go9nou^#g_P:P y9ۣ{gYg͞ij>GL;E=4av 6ɪLrRˍ@!v`}v\B:~287k;%!wQc5#Wպvqţs3) 2pИA,Zz*չ(3p;e# 4ԪM@97j( nQ+2]D+~Q >Tɼտ}֏3N'`4J! !?Ծ/Zusr|5å=7L>P<03(eQ@ -73F,ju=C5lH8 \PP>[il.[9rNjVt5 -x(j4S'ތc\l\z7}A_Z'gSk@,*03V~%: :V!K:w]NL]\Ort/\.FϙsxLvh%$\\<3h?+܅Lpb[U[W]1#m 4x 6y5Ys {%!"Z,q *њhes1zM)P.tB3덢F(k]62̮t!b#bF }CwAU>47s5D!w+?^d{i9;7 /I$Tʎ!@xw۽'6k]9C?#5jxOvҠ2߬˶.XuNT3crD>S񁦽/EySe(N6#_. *:'ω!B.`שqy-6ENlִ'Xiں}yBnSuD"-- TgHKʰ~>rݺlּ]XxPLf15-bw\GVsCy_4À+6 KLjAi\_F2Զ6\9(yB6\U<<VEaq C"`ZܚfeXBzҦrR%:X &s:FXZz`|,{"Ic ֖W՘`՟`eƌeoެigM?1F|y\C)j#wY+S*ehn5[yVRBzf g8SbfrCʒ!H^ZDxi ~٩)H-\2{ر7mIٕ+oXh;kƴ)' 3`5e#)-_ܿo=vnڱimqgOOoPnQQ* Rͪ?^Xf;f͛gT3v\N4-hd S/^ ;,!ς>}zɓym 隔ǍZcuS}I֍DW>!6LL0ڌvA$4 5ݱO8 ;1$XvVJ2G-|T:.',osQ46`N5J`B|_ ۍ_k%NyZ*m^Ů[.nt~&-Cy_.vS(! 9jP Eb ͈n'JXauU-EAq;,($=EQK $!ϟUG ϝ}UD >噘E5 3]ޑ+UFZ_ULgۡ}x)T($q,Rg ϦG/3'Kc%Z:ggu'mv!ƅ$N 4I63 D>6brqw"c*hwlKG4R:kCůpi~%ЬSA4Pe0X7Jl:陼ksF=+@y}hE){!~Ah:`lʫ1H*gŋVb_󕍷/sfe* ?j hsF-m3:&iߍ/&\ iUܯR4b[dy с5XQ:0(',Ri:EQ&t:=գ#Z]BQg\)!hs u DhdfB4NY$L16g1nbM:dvzUί!ܲ9c(+A֌_CGng y:$ݵs]so/3M;<Џ-$F N`@83x 1ʢP_W-T -1_mˬv5D|/_aOθ;.^飏~:gr܎g&]7ainL6 U߈ c|[h+1ot{lU?^ɜo8)1"a%.Iֺld /JB~b>R=O)BM!D3U0@'!(kʲ7⫪p6g#j-5;1zTebhk g/|][߱aZR,qKIńd#wx徎`д2xJ0m<tdxű'\@>\i8̡%.ݙ|3WH:xm;yZVJkۓqLVڈ:)!`+p u)=I!1OfFXOT%z;IrT˼tySED;f{R*fq`NKyHUasma.(Fb_JG`qu`e±pG#>&Z J3GtM=KQ +#Mlr[~P=<힅Kۦ3kJr\!9h@44oda-5HjvjVzZ|\tTYI,h6@ YR=uϕ!S;򟎉T=;zL> ss[ddJh %^+ܖQg f.ѲoîŮo[aXkUUpӪ[fLi|xĸg'ӣoS:a#X½2G߶W']{vtGxUrZE $KR (:L tc"Z`Qf\;Q> ,g0q5X q&)|nae #vC׾YחÀSa#MO`a&79K1ڣWv w uXihxIYsFY3qtt e~2NaâNGepUf5LUuA]V2U)_3q$d57B?{wG'n+N^2OncܑM"* %I?=z>x%;e7 f'oyԷ5͗oV}sٿw͚yqѓG?3uLY-H|µ++Qw7*leU|LxVgC4YJOnԥܽ.jk)^9\Llz1BP1',Y~}j|z>sn݂[ieUUAYxX_Ԟml7z{8qى-j^__f%ᴜ&~pD:6NxP7"TcNe:ݺ.0 ` rZ'nU'ᮓg𧚙-rfF<{9'o \"fIkn /x󤜟\Kќdcr_/W aZ[]7Vt:Nq!S.%@S-9⛥ЪIgGpc(&>Δsxpu",?l/K͍.~VԊ3P0x7 9G圄 EWgJ;R08o#~%.`چy x?LFJJ]o T5/v֭c1 =~ ]+ܽZ1ޖqB+]Y7}Te, MImf^J-I\vH×QR|US2\St&ݣ4#UܫX5;eX0K9)1Fdb8??Unn?a=y4c#.wf ud+MOnYoi/&(kJ+%d̿ԑ̐JXG2-cՋnBs N=y9?zNQ.N},xn/=zc f_n5WOT ` o| IiA?k|o(4__XBθԝN`zh 0ovj`G$8 ]QjtD;xvj~dz:'G%ve:u|JgS^{]{u:$#^gv>33oz:~\x;L%bbIH$sl=_Iʡ+҈D0%$Ǵ i~>q)6_@F9#9Sw:=W(~sކ ngc}g3g1Yٳ1c̈́0y ,Ū ]-v2uoC_GhBHbq(GO#:S1NaI!, LCBu0H N!  hh(!]:u?6uJ28 he߂ϙ q5gfu}kz_9}}k۷l޽ k<=w]壁oΠO͐~wlٲ}i_T2Q!D'-\ ᶟCx{a)ب/d5r݁]k;%iS_@D̅n0HYvqD[˳`'w62}|#5;lKoEs;]b͵oe%_*wq*Qh1uTvxaq;ޙT2{)2>6BM iϡ[9p0t1"HFCCnd7jz X yoQXV w!z򊖍_QbC~SA͎:P,Q>?O߽Mrzry#jN;s}[Wmaܳ $dVH6j@6 fF !p fum` F4 :&4 HR͚7kUVTQn\Vl3mJ}em˖v]?߱Ebؤ-n8|X;gS!S*/9+.ou'u3#1C,V ،lxQvL=rzC1jҬ@oLRj~MNbtԖ0@7HjAnnɔ삘VK.>,@mi0|-\5%]Qe=7D=Q8nxCeRHiMړm d0#D6/ck҅^|e8]۵SnK:vkWۿ} k}|>zOӧzo[&Mշ-k~_vȲ~W>&f;_`/6u/$ClgFRlB[*|UI~M,(ɞu|i%_GRN=o?̑Mn^nԧߌb??fb{P;GqTRcIK )1gI4e9lms/|Ɠw:kϩ##9x_]tKO䔎)[N2[M:lCG_KkZY˻(bgw2U"N]l DmȿeN4ԯw^5sGoe*Dwn~O Q 'ƪ4Gu; 8~kSc.!Kn;abS[F_| 3 [r;_Cߙ^>H;tBiNo?'`] hɵk M8L4topeU(a??%?5^ ɐreO3daf`!nQ;gAqZ0J!t" u,!!4B Gwˉq{X esQ*R8)P-ܦkc:ѣ4On]ڴHGPTаG"5Fv? j|3Ǘ;Oex(t v"Gm[[7]#йnr:c&@7^apE)?oQ8I޵SǶCa㈎trչXNñ|ƲVQhqrpf4BT@9YX^|Ş‘VacGcxK{CroKrNN/&c+N|lY|%_hb=e#kVӾ/!/!M ?߶wuΕMPmcu Ϊ* <:TWie)/ԣ*~Gf|]87w Ll4g#シ #)B;yiEm2y{{k{,pP{4L}ګs@uP?Msu'l}g .-@%1/4C<,דI|p[*-F*̢8n3\J~8{ ߽/i sN DI 0 DLlU޵^] ]C=޼9sέsO]].m~a˅ R3ӿ)Ϟ[}S_fVBP]]|]ȵ"ОbeuzU z} ;۪FdGÈ:(01TQq౯Z' 8~2{NAjPcz3ijUNlZՕ촴Z,q=rw{&x8KWq.=; rvi~'COrX 1LǺO'.4s'g |aZ;S.ΎPh5 d~,Pd$m}bͦJMǬzBҥo* _ը'ɉ9ذnӢvByQè*GES1T5Pt*ZLQHƄ˗-H[0/5yFB|ɓ& C]57QQZXQZXY);&Uݢc}&+T obqaFdl2ZsWiy'XaHf⚎7~ܹ!v,cUn:xe;EM ^WZl߁]l]ض-i0ДPrC4|_ ctOJ 9{vmߡ=U- ޻1׽ڮ{n_/S ՠj$%ge asneD llaiARנ]"CvMyt` ZvSYlM6jiy#xK;kZ|V>t PSS3a p#z7|uеX37|NldgrPF)!0\ʘ e~\;@2׀6KO'G+n7kZL[$0\=@]i8z,:hY{h`HlIQ&Ct*sPVӧc,tX͡p\2; UYʍYEǹ[wvfdhTQR{^Vz3b A3UW7(HeuJ2tl2M4blaE A^+¼%w5=ʸ7s%&s6.b~Ȥ!6]48 iq} NCBkrz#}\mȱ >1ΎHvZdrr7+|ޞ!kI..(>>;9'0sz(w n1<} @wLl衰6qF6an] ܺuܻa^tEc=c05)EͦdjUU7!$kh_A4F׸qh`g“˥a0-,/}#G #nCVHK@!KGIĎ >6@e &_ >cxd" 4M0_0.2ct35,w5p!p `-mM!=>};/XuW^t3\b@?Cq>6f3+5֜娎u+ahTLZCF䁩Q)vf0qB&JWi:P8|#bd5 {⧻N?`Ɂ3/V~~O97nHc6z4u4ٓ g7脁 >;AO Bc7iʩzh2+(hEN|Uqs3/#!9]?iMg9ADZy;cD~mMg ɗMwŸ1.bf]{L>)P"P16euXV[MMQMzLiZ!bѣ/C`%0ޙ_#?;H*hHO>?JӍIxD@Ky*^sl зk i)B^$mN^](5b!}UDup^y>c-0}~mCvllPoǠ&?k3%=/6޹qhKA/@+W-q I3x_k)-?M*B=UmkRUD Gu2}25-g%4wL !Qq٢RRz,.&$] ꧒&ײ|}a,"u,^c@44 *LjQjZZxpX! lRu4$,|\H41@g1 #Z$j94c,P

|7.A\@ XgyyiCR^vD DJw}78مLvhE](y ";SѲNR9ȇ5߲Dq~Ae شXo J󷬲kE': V8m~c|S0 $?9,䧞h9, J>t+}Zᰂ*Wm#R]<)gJ`!)h Nt w1J ؂sob; L?8};p-FRh‚7~$B^l0aBOQ/L|~-l^~^>?mS zߦhUbRhqj̹;=5ھy?/5r%{gW;knKnm_}(X}Ϣqsv{=vC|B|T\8 QV (U1jTAƹT N<̙3HX_dڮ䨆| #ya=wB:)JKR: F8eupGஜ\ԒimBF˖(c"&%ЗDx8⮵o6y|apgQ Z8K&diHfῐ1H?AķhuKo 1 EEW9fa^XSI}`N *oM}']stQHj*YqGt'-:fbǜ=ck9Qq }׏$ 1U<*pw}7Gw8t0Xybc~K`l aʓ&xÅIKC\P uڡu]6YSN^9gۨ(#K.)~=W9|͜Ho{SѝJ[DTzV S|qYAO_2=h),վC %|)P,/ OSaQcr ȾMkesW<$<'I7Y*9ҠV`-(lJA/@ ?qw>`D#|of$ ň|-4^}\G^ f5REqw:Dѿ?HyS-7*_NC^Jۂy3o.&͛iZY&P1sD* TNM\Uf$`3vW=[GÁ SYU|wp'6ĔZ_;ڸӯ6cr_gg,7+=kZLNѱ t\&(Bx,ܐ4 % nL|”%M+M_ot͉ϒeo<e9|OG+eߒok~jT4.;3szb[X(XU k{ =ƒE$>E@˞k[(" `kceY#aLĉ&m_4zזeu"˳ Uf&˭RcEFN/9FGn~r-Bb<Ey iJ^Rܽ_D ./Sc׃Ybk=F<~A}湢<Ǟ2ͥSVG?"?uAf$b7=a i R}J-^WeE"jjRJl>\ԕ.CC8LotXQ8bPV뜬hk`q1D Dmq&D@,u%YeC%&EF]jﵮݬפ,$ QIr(mIrr4wp;䇄 7ƀ*H~=S ?uJ'is6ҿppޢ@g\Pm(Zd+bi -x(.H% | @"::šAكthdQg٥lj.͋Ks 99 3 /y"`/WK ef܏P'Uk?+gl͖l!P,J?H:`Ti+g ?R3q&DLt%ZDV9*:ƨװ8Ud)nT68mbsIm66SleUhݽ` :zb_%A䩨LM7 #S,eYf_X[0(4-?("S:B:ܦmhp>@>kQq?CsU_QN/=$~3,+܀&)jF~a1v];mwfF(Ti;D6ZKjskOJ=T\T3jr&%H%&B~NG)E~>ˢ㠼`7Ff LYĿ"2{]'R#y+aHJfvHN; S j֛ұ+n.G1%RCbq-Kn<̗rDG]D-u wRsb2E K l e{ەy{&9.R$$wQՄ5`oC'3ΦY,,CI΢Ƴ-,Ega=2)()/!JT!j+[k* zQ*ѴJT:-rD#_'o5O<jBu)` jх e{LbT|8 wȭTEB ~rEQ_8~4[/ZG;2ڳ4ns_t| Ɗ=_Ie;A.F"C{; 碼)\q?nߑVAyoxj]Cݎ?7P|k+Ի= D'eZFŜCM#P^Fx44CBw/K亘2)qRQc̑1:pgdj掁K,b[?vYK :ΕVC}}lH??Y5G6.rk{eko_|bƊM+ʅ۞b-מ"oEgxz,g+ _doԠmұ7 : {{`FtP&ع9TlP},7{ٷQ><&t03'iTQ n<Я1cq.DTooJGܭ^K +?fM:C ~S?>I=SMv{U,&S'`_&ȧs7i:,p4{wtuڥN1%mOڀ$n98tQgkK81bGwn' #hI>gzQon^bm9<8V=Tƾt0ԴkTDjl55W"7|#6t2JlG_@ AqTb@II xv&zM?>W׿Bw4|-](_un9z*[iCjlا~;tH* ʐG} z(BLHuXt_5d3~{|8i9"qۍ(: 4Y1T,>x\冬/^Ʋu F`0m9)QΑLG'οB}"g!sW`[`Yr.hXg3yx9ˊTRQ^cT$ROJF$]s=%qH@ʨ~KL! Ph F 0՟!.FDB|/I1cQTM?lί.%ͯ%׎~v=D'26w9L4AJNi$vg%PaOsf6%ś IT8e԰(Wu~̥@56<0SIg<&Bզy8우~$@ ѩ jCC~h;±):nWF)X7'BLJJ֍^XB^.ghL/ JN&Uƺ|Lps \z?;.d1V214ATc4&bʴΒ~b&b(}:cӰ ="WSmÊ(IOL*)IY/cZD=TX nbJ60n0Z*T" 0Çl<χPRl8? 1йdo\X;J)_&a%0kT#Z͆M iX$U4ctTiZОcڨSBVTH4|JםTd\GVܻm'32E`otaM-A{GuQY03\J䎾- S̳cxpѦ&e,.ƒ]({U B@eK2=jx/D/ "oTfZ /h-;'sM' wwa ̌WMJ! Qt\B_@DnOfl)R922}qdU&NHCϪsS9 oydBf\zig2TvZ7a17{;On c7+̚/J nCOO7۲K~,HEF_/,ϝUa%qa{QnR^DOJMslݐa< 6oJS>:)t^ 'E81<8>>P21l|# y=[,H0ZRv Ӟ RgQa4Dv:p ɾx*<5g 8?>XM{9U.)JL gM/>-Qj^QRIϳ>Ԙg2e\j@Fz _}2/_sO҇xlLu~`xC9rx,qu]1;Kt3f9U5d9MAq_ʇ9-{?;/H]FqMM00P&"Y0$uBV̌[͢]>qk<[%|;jZ;>_6SXTZi~>w9m/% :M%֖9" D޸L<[<>S<`҈ʊ9i .;a8~'Ny3:խ F"^rO)+O ͞bݢL8%Y$W gV: gV8=0ϭܒQ Cp\ucʊ':7@IKW ŖjnVJ1fCժ0NۯD"@:zvld sEKc' ,;f⣲(#L.PHUJNi J8!IJoF Gː/,m"״2xdm^CsԸ/|[.d㦽^a!?][̍ lḚ]%o_%cbo~&t Sdu.^/_ݕ\61_C=]dn` bbw`YYI12 Yӎ"d<{*5`ں{)OX2\azIi%?M+XkK9_C#K4vz"m _h_[C Mgގ9e N`#xұD(@1uM'4}!%D4H)_!P|jSH'%}UYua=[$s H5,rzSD:k*wy\phj32d7CțCB ̴X~`@犌ƨu@peZX!RTcjj\:U (5y T,Cнg쭴wLIva{-u^8aU?޷f߲J]mtƾr}{iS{dyt)(>}Si?r {J|/IpHkRuyEi2@.gn<鬞[b*)̒stmpyeNG̢҅&"H"rU:SəYm4:\t;J(e\8բyS$th fvT|G,LWua]~XcT)bV3bħ%x?׉TwZr=A?K:0'W}b؆!gxzi6gIBp8̓_J(JsB<'J !=}Ü9fF@<KGCe`.H' 4Jvd.@?ߓysGwep ;f1 s})vYy3~I>N5Uȿ^)+1u -i]5fU؍KkLJIvUsLֱ+̚K[JteoouOv-' P1jaoLGQ+S SvYNҙ3~BnO%ACu.-`j!Ô vS0JXl哵v 'vbEl1>5hײ]K(L ATj J bӑkؑ1 Prmh 1D(J؂:_xuB% ZE[[0$GRfa{aj@G_g1nJRZMs p"[M9#aSv>!ӮWZJz&TcM9N%;k9v53}#>VfcF{}#$޿~ ]YH3r]*≙a}rX5Jh[0eIvqA=v pp&1ן'Gς!:L0"<A;$_>y5|?Ԟ!%3^m@Y&r3,l3 %7jE,[xv]( k/%UeG]p/TJ\UpeZ,$_ 52WfKI(0rV%RqKw}rz+Rx fduRNR r+71 [';1ˤ"\ro~+堧QEO#<+sZ|M%G@ʕrLO}l@:~4˯R:ys4/i+0@cV"&GO*nW8|Y/ kGAQ+=EƬ?Uv(@ͶE]܊iRJl,ļ)} jl\'(H#b2|x١C}C{l6#G&5Dfh R,Î"RyJ;oE6_mxa`u߁ ykugF4DPuڜV8Z );A9d,2;aaOg1\S?7clх&)p9n}vPNvVMC3$\ǏgX%M&:^܌DR~E11qȤv:Z'e!r)\# .K: …WKg#cL Y SHt̳r `6MalrN{t"gi:j>؋;+::VrX85 ye !64aWs[ㆌP(@X%HO^/26dHq4pq+Wpnfvu]]gtaRP@]TdzMo&q<#@ֺ&~z<0948nډwؿ><39r-']+1u +ϒf`~r޽|v;nF= GL8ie6flSҞ2p%H@#`wjo'/:%\fS()Jg 6ʛCP7E:uf8/pqXp8iJ65ibMC0.:!_uU2vrrS=ZF[r['\/+ V'V!keeP˓5i3+<\1QId)>&\"`;jtV Vc㪎uvmM[Vzz-wncpclcz'B1Z $Z ABt{wWZ"~Ul;g̜9S~C6j$i_ h͍ŎRw\'ްI'UE\!ݬ 2dBPԗ`f2XlV}/qjµ( $Z霹9ԵQ9*H($FV3Nģ%hGhGx8fO58ZQpLԹĂOz_F+{%3q:2HH<,VDLq]edh?|ઌb+;ȝn?N? xgJ8&F!3(x5ΪR阙("Ls1:SoBdHq?~@t29=LF$*B3^ݎ![CZğ? )wr ̀RVsS8:hŹ ͇vN8Gsj ^[//*\YL>=@@fC62* m߲ $g@bu*b y)vg3H{S=X焖ԫXcФ=8,`Ja&}\ n# |D ;ER)(gIe*HtQX)|JKnLW"UV\oⶨa5VHS\a永lՀwD|6çM*(૕z2QA+C1:K-81 A|  t=ƞ"]O8DkP6gӱ}kA ۩2gd}wH7\ ^ߑ){B=6|x/g|瓾i:bM .]q4s5;wСDU C+NvP(ֈxG3ٔ!K̔MRPq PPaЪwdlB|iW^F>1 I+oK_e5hٴyoƪ}U;Cwm)G V:+席nNKCH{KO|k%{n\Q ]wpաWvM};&D }˼X<ָWM7B23}n# 7lr璛WdGwrSk/@f).teiuStu!a"fcb%\$"r#JU砓\{L=3cppf̌cck/[\)U66_ΛXOe#GY[n-FC;K:[8GO,ɮ:Ϊ-cgNcRg`NsP1Py*HW_Y8_yy{Ŧ&Cȓ8jzr+']ܐߓ,K8[y=,^Wu^%UXO+a rSnO">נ8 򴆦!Z#{(,3 KIr!&;SVR9cEHQ*lb<c{(ǰEՄZFu`l# JX@XV4[.m^Xo_S, "~[6uwOy2['6lR@wkU<ج𲱛WEujHN=Z_wקB6+9zLi '[<*( L@z&Z2)B4"lh硎@5J yjw384sG)xJDŽ/545c5h2jz-uB~ a1mب%+f)ZN[9ݡdgW:`SYQI^;I <=e /z.Xlנ~EJ}=PKL!HDMddC%3!]<4խ bj;Xv< {Ț(Ų.Ts7%.-db5e.YyS)XKŒ@d.aj8[*ǰ[.F?]7QP\w 7L\,a1w-߼ ɉ b-6&oqx…dP߷Wk#@,V}G>,.|\,;HE'q3O(aڷ(-p ݺ|53-{u;4UM'zsgkQ׽FsH ,~l]?lWQ _BNFW8Te9KOeK(󢉸 y&qtZ'szMkuknZ># [j7=l+*oGŔ{ C}vr sWe3VݿᏏ_4ʗ>)2$a#m*uμ`sO8t66]UB`r]n dgt&Ŧ`ykn[}4$ɨ\41'h.$RX8>J¢ SzM"٢ *Vܼ$k\ew~0_HR_nMiMޘZ?6OsLGc(3~-}Mv[(fH&yf@MPIBa0Wq@fR |܋x< D>q+&OzC{okl!/uB Q>AOA5Jhǚ/{T*._ɺ`3ݍfhdrtbr_ӊK93}VTCVAvYF-r-kl~㮝n]^:d\s͹Etw5R 0 }s׌Oie%z@ۚ@WV߻>/wxwלof4"Di6zý6qRW*PQj FC ai˻U-hGYd@艕zuqh8'qjunoen@̭B-5qpӒcw&߀_B4Vdv_xf>hk\XE|SIK`eCɨFQrQ_؝ǎ[Mӓ !E=|6uc:z)C0vsq +!RxoI4S7u=H( M<@#o][cE޾N;L+=okCB}8UZrlҖ?"ؘ5%;.]}M׼{kP_חvV 7 8 7P~$ꚕSl/V?LeT>|_ \WrUmꩿ7oGWXh`HKO|ڟ|%OOaD =u8GOL\v2 0ˠxG8bFc*?K z,$)?@jkK2 3Rj诐2ZtœI\湗pQ-8lbQxEIg~(nuj"7#,#β W&#e:LfgU G/JhYXxn!o\u*˘!nPgY?$<>G[¯A;Sg1OƄKtƟр}x|ӌJS~yWD<xA9}jOۦA$%O_rx4:{Q,N*Kh {86e"|}J4BHп*W_P tJNzJKu 7S8fW+iؽ9թS5t#2;lvolb3v/VR`l{/s 4ŗ7kwBﮆy{~|kw0?l0 **n h2CusjԀkB4/Ƕ;:n3(Eҩ@`t̏%'뮾23q 93Wܱr8O Җ–bd8`KQ׊Yz`{j؁s%4؏cTܜ|$e9}Gw4JcpU׻l=gRLUCWXw52dsqCqtř-(U;S,`Uz|\V=E͠曛'DdrTʄ͑c %XKW8_99J(kNX) 6YO3zb._Dbh5s^Q^W>r*zM:dg׾66piWY-Kv7 ˮn%]L)s8il>3~kaOX3\|삡ux("5C;'V&}Fe*0CGg8FjJj9ܞe:ُLX͎1#cb_ ^Cu`cRr.4q)*JR,wa49oP!UD0. n??qƻMoburLReF: w0[ğF NnRsT {ҡ#nBt]-R~T?4;VKWA>&|aS8ˡ}8!^vG vOC_!?' 3 'DF؃8ҡN#6Ebt; П?Kn} VK]qXz:M94:7a+Ey&/_0~ TlE"[1 O) 5Ra}Qpc ڋc%ko^ Hl~,| ڒ X6[8#շ붒nҔsٟoWT3vpXtѕ!d\%O"{<q(|xD6~O 'B?^߻8vcS7W)ʳb굵6OUp_oZ|%An,Sy bk@NuF{ʔ($AKV'r2`5:RN) q{Ga,ކKe;HN:6mm1J1oC؆8_#SM4tw@fT-0ΪeUfiJŃuKbsT 9Ш% >lEtŒ>π gv8iS,uT) C ?YYN4jY#Y+1,$uq erKu959l6{ۓ,--r/zȃ)5ΙBӒ鄟r3MSiNk<_Qa[L"XX(m?T@U!*ﱛ'_QYa I)DH7JBo@S2.$N)K(<}Bb'N"=C !XƇ8J{*"Y{IYCTFSA?*p*4֘[XjV^YT9ZKG(@(0bx4n!p ^w[W>z"!հ6i1gӐ4;q} iz*-d@#2cM.NV3O:'u =#pMȅ-ʏv9268B9sox JF! !B-ϣ:e΀Ojh*ǢS/,Ag}6q[gs5}pcyyRսGC,=Kޣpb'h+0A[+3;bQUzkUE6 xf߱gƠ-\]c}Ol4hGCki4rEnEw*ב `ajR5F/ IAA(ΪUG:D]>&mc3VSG e܇1#<)oELHM9hK6 'aH_j \\RC%VM2g-6͸$膼<9G(6X*dJ3,1}v/awYzdoK]R IÖJ5)'74`[JDҬo6+a 8 P4%5Fˬ\m8sp{V$/cv:q"2d.߸{pKg]O29$lǦ)RTB&G,G8'[M =S0-a+YR^%Aا5R1 =i[y tQ/6+G4^29Zj4169l _hޔA2Gsg&]g{d(n#Ckf TrFĭ~5+l-?th4$^[+#W8\/ 18RtCopӲJͽ鬅w.H2r;AJ'Y麬kw(ohRIf`8TNLfp.!+VUe:ϖ&oYל9ڙQ˖05!SǸu^u4Vfxn7@$e+ԦH]VɎ` nK!bYTQ˖r3rAv<ɵFuܟ;X_;8~l Z,A}|˛ג{ `Qïqa\8ul<u),<#ޖ5\fP*|r/G B"(LFbYBƾs["}k眵ۻ=ͅ~.yF疪T8A-t*yqp~*+!I,u2!}UpxTn#o Sa'w KJ[P熒+SkwuM L[+qZ-:U*0Hf2&N]YSF0qN׳З[%vE}o_,~U¼ez*PO<5 \S_Ŀ}NbogiLn-Nk = 1̀s˲#{*VUiY{8b'TDC$f؉'TiXKjw}]{j#`Ά@fw=P 9ivy#i O˧FA) 6`mnBsGp=O'%9[}Eӟ!8Tw O8N$f!͐Yk/Xu+0WjdPS6i89"pl}'1sh[Qy2{UX,CmH=zn?B́3Ȝ D+!NpxUyUߵׂ§~xj|o?H<K܆VH EcъSslw^vYyz+\ JB0ݦ)dzq9?y7VͱYɻF:$t6#^NQdqa\50EN"A>w7$c (qrI$ Oʧ|< * Ʉ_'oUUbNc30HDzC Cns19|LWS3ݸC 5~? =bu\.Da3"o_Uw[=0+gÜ\!䶩32hx(Yy: s~ Nۚ=˄"EL6&-Rr->7o"cbԍSv۬)n'M|0p}-/-֝'Çc]NmEIlz1s}.ò}$~%ѻɟz~Ҋo3咳U=݈ oYjhh2\,[2 !pɹH !kԕG Gh: uւ*{QbKPr& P떦pJzpۏm"ip0lx}H .P"ғd1'rZ$718Y:}.,Ȭ)qس]P=SFEe"x\d6/V䥔P,.;reҠ]f45Gb_Aw. : \4%(2T)@'$J%AC,swOC)_,b\AɒVJ"rm-5֪ZJ%wDdrJSO)kOS #bo:[}xD_e,TqF=0Vk 2b d'V-mDХi!)L"3Y1|sL |5TxjjXKyQG076/A4fx"b,6d+\՜ao:b޵RLx8[!^+0)/4NZ9eU4zx4Tw(("Ikqܩ>E+Nf=ʥ%-jh F0. E,MjL~pBX xr%˿촵}uю=VRZ,0JdhZ!q/mܡ/|{7U?*-Vrjx- Ex _]D :0fJʙ'?ld?)}RiV&GӬqO@ k2i7Liֹ^:pbi{n{U*Tv&W%:5j-;gP:g_"׋]COwdVWkacgQ\ muqZ'RL/#>cv{Nmpe2;/#܊C{ ɈϞ˄@6nf⼑Ǐ U'Ui^sJE-|{RA΄Ⱦ3--Bsf|}eՅѳh`TƩk2WFai!9X1>uݖKȭ%dV֓_9VQ546O-VgFٍ? XЋ~2{{!ѴT ҙQ?@F5-/wI5'㔱M+[*x\s%FU _nju"E[.9`_-?8Sէ5 ]3۵͹vΉdyZ|Y&0|}F<13<9㾦p`Y[2$~Ui"kH\tIA0CxpMu)%4q/ʥCp%ŴLX;FUO<5Qxj@3 sZZ$q''E|k3AwtIWcJkP_Eߖ|WĆ51k3_&>Q^:i;𴍸 f;'q_n4$f!'jfeFz62z>ۘ[_ײ:AXo0PڳˣьٍAcFA 4`HjdI,}/e)vj5W>r)?/ÉH@hd85QΩFZ#3E0%!4ZWr@M^I[F2w{.YL{ :L kZ:WLxh d}ۛAYp#N L$ M7CP`xKM6_mXr3=E m֥|czE<{]U]uPk4iY璜o(\qvXnr-ڻ45Km]*`LȓBbŭm-̃\ Y*hT>pVs2 C4( */ǚ\\'VYB5[ -Ϲ1oץmk k ,J{dXglߋ{=l L=qCx=*u_3o )%(Q%4|^9=֏)%l  .|O lB([-͌? d:}, "Y&=Dw⚺jX%p]8 ַ k$].^YzQ¶b f ٿİTPSJ6H}dy.Q3Js_@7/tfOBױK ^x'~oj%2>g6 ۫Sx"2g : QU25 ~ӘjѤM_ye kUި^5JVrppݭ#{>T:TYT*{Yk(+AF/ `$##ώ~0i0@a ] k~d 錹P.bYiȴ8c/DSu wza]wm& |4JC A?CpW $?.ҟFߚ~8R-CyJr~!QjcW%}xurt$FNl L.[* 6 B቉2h]ʡ/rb=΃ޞaޅ87 oħ~?B%>/aO e9*auۥexҳW[ ixTŅeBM޽ VYM{~< >$d,YֵPޏ$T^ac!6_yʋHY],ec ÈEv;ٙ Gy97ҪO>0i(ط"zN?M=/no]S[ Fӹmj3pʾZʛ Ud+(oi+?ȇ9jֹ"!N/ pRSnUĘi`H~)@i_j)gi a^_:ۋk̮6߱w ٩@VhP.pPV]r*# Ía5|%z֚U htNޜ9",$N`v?&isPuȕ,ꁓɡB(f_htP#AgKױQZҼ,QHvM+w'~pٝ햲 )"EόYȶ~S;`χfB&8J"l y晹\쇊Rb_&E}|`Hg3(J%4bN2Njw{9]6q0|g/ th}J+FV[2@<L N0j)E6B=tP_opHuRy-mFy=cwm&qR/(+- u,qZI[& it+Yk^>Cq͙+t@6]Yn(B,c{,鸿=MAmZznaOVZXI*Fjd!45ΆvO`"?s]mu[¦zH9BlXuX5{'*0k-0[>UƇɘ_b'n$eY%EeXbsɫL:`}Iĕ '"Y˺# Esɿұ_a2:ĕZ&y0MNJwƅw)'u|W͇QdW+9߰ZGb!0/Y'ubBlhu`2ldG?$ռkN&.6 8lƮ*ܥꍧ{bmHL0.-\ ~rL(B7E'V(F]vMyvpg٪C;:7V^XװޣXMהB9C&;*[D>pf\aޮnBg 67zȉ%sfD*Cjobvj1H\9gA֞k>VoZcfzB/0A^U8&@7zpQu˛2AxݢˋT)@ZUs#7]uw7 ?TܬK#JQt9ywW1p&?g!/Q͖PP!ttUi_'53CU7$tzamGf[$#XM]WϹ ?:ɽD{OǗ n'Ezg y2/;R躦3jjrTOU꫐_xᙧF)z^OnW-_⪌5$xϵ,%~m {vUæ[g4GtD ƘK"akȼUs!S^g,BT)eq],w\3ӰaigZShb}iKEji0޿lM t٫^xO/{O{}M/il&^TB\c_]2~j/bW)ݍ_|#;%;hI0: T֭p?8pU+6vrrPI#4&кX y/Ԭ%]?7z2>Uikt8:̦rZ:(1'5Z tT$"o!s|9L^%Mͺp\Dxe5MTw\iz|%GSa5Ut FfU*v-X'RHȏH^-V<r ZFT |VI)(d9FeT˜ywdV14KKQ0 OP;'wj\xҡb,%ܾ] ʼnH蠣n,G[z-CЯPPUl,)R-sw \1.P!R1>J 7|x;f;9vHw.L~3ޤ;pBlZnJI\B'K4;$߷i~/سf t6n$=7lR;ZIF؛[]A۵`:4c( :s?EU}Q*4>$ q%>a'!Nڂ~45V֦4,͜\ G8B7N=gc)G79~Cn9(G'@όl[ x* 艉iKUQD#7CFI5Q(\=z4N|~DL8<~v@j"eu&AL Gv/tP.S(>)H2h%bԅ| ijw0d. 7~QQ]B5SJe%lꈓPJrתT o Ջ ~]+5֧ mikeff6wcA1m+S%5Rm 3bXb#WQ9'4ʜ'@DT:G։Kv[&4Ocef }YNXׂ> mg`ʻ]6 'd)ӋKo~߲$ӰoBB'Ƨy6sCsrТB;/435-XW*N lPO#vٔSZE(zőa=f~͎Y>n!ZSX }7.)g%|>:`&W؞މ{YT{8_Cao2H$}R5;*\XT\jF֢ϒ%Džj~=zB˿04cŒR>J[' 3} ;SҾh[ΧD:BP,{ HNnAL$absx$n{;T7@y%+/:-g(ѩC"Ec8=y%宦5Mft)3l] C:HE/ -FBqs~K 'igÓFk-`{iuk:yi]YS*n&W[1$t]to*\A2v}5@|h+ߏ̹Q n#4J x ~wCC2Y- 71i_c%Kr2Pߙ Y}*LoDTd%|CKrrCwz+#T$Ǥxgwͪ@zszcepEuՅsf" 8 _s`ZYB-Acv,%t:,""s*3s ܜtFP|`Jw'Q vy'# ,=0kJ ;'OI'$jR\(#qG2CWף=LK9 lMAm\)׷4[ x¾M5}ï5CaG0=Bt?"\X ߤe*LRߢ,B$h ZBe:5f+,PWDq+P՛RNkUpy"*'n)ujDc/3)z 稥*gpMlzY>eB yj'\[W5Tjpl7~o_,Jǚf-,hv0=gHn,M"1R}{7a`WdrNaI8~cӾ5(-B$ piسYz{ O+izn<#ٻP^SԻvIx")| fMW0صAϻ.=>K}ʑ'|T\96BZHqeE([Ȳ1G^,v}<h~X(R-Bd`DM\CxSq3p UodiujV+XDl]&Xg bvG]^^7/W%6E| ZbP$P%j)E7*qe q3{4*3F+qR.R=T\O KKM  K[szVbUwsnŎ#;/8F?̽m^PT4D74eFjڑ 5dv2>Wd'<\T_k x\xfPCCvhi9Պ2:,]$SAyW aǔEf.O[⌶NN)zUGOeu/YO KGE@nB+|@9ayxq` 7Ti,!W569QPsVC\sH$g^A ɰ!0ܰAC[-5tG9]IXRcRJթ:T%,Hsá6$|FgADơΦ #ڕbrfIŶ _/M$DJkp}NRXy@Ecx8(Bw:KNԻR> ݉@,0D ՐbL^>Qe'2q~3e;/R1&hFÓ_+J~h^Z-d%a b;PJ:|Q`-Li.VTr1J4:g@|,CuijB޲tn\Wp0Er6Rl|Sh5R _"V*mJ6XcTI&y:ܡfB)/1 CSw΋EgR]'qij~iZJJTB_2,eP&#"/m\s~/Wt&?\˓|7{Σ1hOtg_jUo{./*Q^,jl\NBOR;LHɲ/jZ*5SlK@{'֍Ffom_m&̂@=$oBN˂|)[7E876h̯!A͂`1SV5xT~h_h_OO06|F6Rqhm@t9D7AdWL'j#0oiI{ 9:zr m2C.ڎY|{# T:cym ݲ(zSk:J/ܹo_:S]KR}l/YtFvdtz9=5]݋ӮT: m%Zt$A(_V;Dީ8Ɋ(i꫈I&sU0:!P!@Yt.O$ 9KVy~J@(Z g# "e[ex_l݋ S׵]]b~yvE?aJjRr7WiTXE٧lt-nQ+|qX-Lfa#FBY.cXwҗ|60 \e`0wM!SsZ @ c]4Kd3(cr 6j뎴;WJ+?(vt6brx'WE# vcmcEisUiNN -WQr Ӧ?p;mv/*>8/ԹKeߺV&OWC&r6ti`F vY\4 !h0S~ٞW: ⯴`owU@f坺 Ԣ~džc)΄X_F. B7rPE3*^Q\kHT4Ra g"Ӥ0H(+@T@ !6v&VX&]h4؂6,Ŵ)"4{j4Z9j`c e`IH Qmhl#b=" WYCeϰym73c_Ж"2 Æb)X4 >;C/ZEL};Y.K&-j]#Qe.rlYDz4d<\ZIlV#O\CV e6"|iD* 1y\ ouvs4_IB6&t6Xh3B"q[6Y3rw![0N,7dFvB{ m]Fj-?WjeYi 6Pgq= c2fG5ePLD&5)NO4uKi(u=ֵ `5\;) YΝ<}ʇTQuְguL'pږy?=uý8wpl>,a mHҝЅ3($|WN|:-v 5S")f+Jm_MZL#> d=Mi\iI rP*XRJE!?dp&R[d*Az ְ/T"e,o]n u>s.Ȼ~«Vr|+a芹0^Ke'Vqހ{^< xXBRq,iBڬ]i1Y_OU̺fR/7zV(Q@y |ވ,ܤƆyO{pNle]H43"?S^$A.;lck ]i_eB9֪pH$7T8BDpZPEN3 aYf``YE~4ZwSLT\?; Mx>T: ^!˞c6N@"|kI{)': 7!s:*H_l UYU-#Ut+dPOOl W!}/|-W*ͳ1N"P!/3luKb%8zM&՛HgtD_|v@TJ㑾p189s57Ȁ4n,|*8P~h]ؿJ~D^4X*P9q/3 |k9NSD6Y>/(ه_db9wk] R(|J+z_ԧ7gTKj>0}! q\# ɮl\>W!$rckHqA !\XaI@+$Rs㮋\Xi:Fae(J *HifP1M2WFICP`2-5V`b0pj9S [0JI{hc-&ȫ8L ^f[3pV %i!4)[lbAZ@]Bf:XRQŻeRzfKprXN#HjVfU\]UbO~O yB!9Bi+|RAE}M G֭СXJ?ڂ(,A/VvGQÈx|N[;уOqܭf^$Sx٥ %^(zYMnF;cȚ7핪P ,?3qHoK7Ry q13l$usME112ܝ?WŐϹHKV"1'q(oWZu<HYy䗥>ڂ&k!\KlӼ;y@+J6T:UtjBH*  S]}|Pe]-)-l 8*WmFzvJFtu[ }RdC3T08mC:K^H uB]wjaG+;AV޿.j^YTk}cLaZ2 ~I%Z .Rp*& )dnE scQJ b7ZBm)ȼ||UGS6 #)''U,HTWjJl%N%S\Avjҁ28uDϱ`f>oh1ԖA.X:cbיR sy P@۽+Q IIY)pQy9/$9U.ri6L k3*?ŢNU>V~e i}ZQUhBpWе'O1T~&U  *c!Fg5ˌ.)lHC|]# 7Vs`+@:/A$U.;|Lԧ>CE]jK.=r6f-?=!w޺{2^[i7 /0SvZ Dawǽe^17Ƙhz -l^)USt*4ư{QOfЊ\PE@OSZ5,jY  gwMtw /I+c񨲈Z?0ڶdyD-S!ݠ9RZ1iL=Ow?_M [ 67|'TXf&לC)Eͬ{ lxr* +@TW@՟#n&YEZBmW`5; \{UeaKq`]ݽnGL>imI!#w} „ sⲞ8a6!cn~ruz=cp=B&7$ , X9 *OGȯBnDႥf/jFeTdKMC'&蔐 xL=ϗ1X PRԷ{jYX4Z;~ JdT$E 8EŚxߣ:dGJcc9#t eCppؓz4|xhnz #Y+sF8|jKuxRkC7_yQḡUyK6gw`.\忋kYN߅ Fg6פjj]T>S+|Sqp{W'ZBjΘco5xڅիUۺ$n z~]qZªKd o45T;ǥͣ™Jx`B'huKkSCfUx1ALk % B)+]sztNø"wb(5u+#*y:rԶͭ:2"D{@?c5/wta|iyUvJuR79;qwiq&?˜|^T <{Tt< C?H 7Fyʠ1)C%CݬVgaµiu =|קgF7Keʢt[G7Ζ>==FP,Zp쏷{v zuw3i.t8UYXW%-R-:}ЯDkS<6 9pB#j*{H,9OM&_خG]꨾r -5 ܮywul |H˳}[˲wSA b(351S*lC ymޖ3#@a,ݸ5[5L4zW5,EX(Fjym+9xw-M<—qc^`;#پ3{Zx r0ValH͆r3r2)M8t&Hxz8zIꬆGAȗ~s\ 1*ȿOrU[S:n`L<˩JFpOvUInE!]T*8~8t|sO6f-uv*vͩϺ=5 zplu j{S\w-guG>>H+3e~eCyYB>r(I|$iYF *VNMh {d ,< Yn3Zj''rZJ' o,$ԚZ0pCBށr%sRHh}*PRx PXIザ < #sGoXqaڇ6٧62q8Y,]..8x}[RaF [7к-c?zW[UV\S9&{Gso-z1UWF<\UZGdqKe \}짤}a/x瘸#0(]'He#~=2:qR [fߖV䊉]S>,G!F^1A:g_ 9K鷿=P7f QIw{GߟZi9 +D:L/7{Vbe;*P0muZ`Jj,)ѥΤ,=pǎ,9?iǢ.Sb-`:JۤX|p۪z%SH$J_o~KE9Vhw?چCqHaI1/[^"4Ͼ.LgLR[ĀŻz_\ :Ŝ otUH%s1"4 SA>25iCnj<&q$n-0'BRϓׁWn8K 2x^ȗ Fc r d َz=Z[.#$V=.`B IEHT<{őb))'%Z!Xsf, 0:uZK-J$v4!A| qX<, i{MUT }On#[8zr xZYw!wӄ F,~A3ubmIun{r faQ͵WFg&oB69 o+5UbV wp {'ڈ2O <œWDFw,\C:{VA'S<2g>TKZɧrY0v32ņNokݝ:Si+2*{G7;|gn2hH+n8tK횗Eaajs UwTɷqPVh[;'+ʗkں|^}]ި0\՟P5ZEtV&-0ɮI+/+X{x/$,)(uyKy1o,A ec*7;1t␳ik4ڹ=tkVE#BթԊk2c0|T1Gpj.,I(ޞ6ȒU)/}~J)P=G"F}RnVQ8uӌ^`jNnwZ>,:Xȑq(rv8ӂt;V]HW6҄f3!8xj]BK$M/bSZs?M/$'h1岧  x\қrbSgKbϢ kZ;w/iT\͇jxλ~ljt -7RgTb>z֩o_ӇNj/,oҘb ,Mi*H?|~֡nҤő3@x=G6v/#:gZ߭yHg|x߃{|0|'h%KoB6?}%>?%hs$W^}6+ĢJeJ.N;"c[[ɧ,_&on_cӆ\mPcʜ$+/ʗJevsM8k]aZF.@_tfO7Sx/T)`&wC,~4TL,l4c-jL" WU#{&OOy7]1yYP~w{IѤ*gZ;9!}7?J6lytu乣3#Phg{ہf}@;±ɯ} ⾂ֱ<:6{B0z ꘦Sy3L ]۹tҳ`Ex_ߵ[9ҥH'3Ol bрdJ. w%Kn 2ݪM2E {Dw66bHoK}POCyA3PRVSSu z[6 Dr^ -_М+^dܹZ>4%U8#k5,o]ihb/W5 &bsM{t e]z|jQ4霉rg,b)vϛA8:+~ M 9+u)GUK%z<ˬPlo]ѸbҊwh9 -L< (r~cV&kunf,N9} FRGVr( ߼D-^I (>794M7}2ul9 iG9 T SYpI(OO@V?aR :'?!ߏUo3zQM2T{ //}p퀣[Ql4,}[}QE~֠2'R,=_DVmӇƊLzRP!we{եܥW޴w ϬM49m?_\DI>&:r܆ ~\=cǠ~ 13Ѕd M_@Cm|Kʢ>yWl2eSD _–yie'l22UQ%PE0Xm]'OV68#iLjAd6_ǬisFT*tč:R,R,U-,PV qČB{E" 婹11 J-2sQaX%Gq9D5(1ۄKn75>~U "^ZS*:-h(]TtqQ$m֤Al \=6秣*j9-M׎U[Vpq=709trڎVʇjݯ 뷘`M%˦);P4K5XyD6]-aF{FܕQEїN1H "LIͥ.ڡ_$z1x穕9BOg]{y5ŹTh<5SuM!5Үx:S 7Y= feݳ$U -!߂ZֶvHu6"BH>q&NK6^iP ):՜v@ G4lR1I2W2YX5Vb؟iV=6<6jJA/OrJG-av+yd X!)ل!d t9!lA::$1 %(ewW8~= ?l4BtRhPXڜ,L9΀c俾 k9S+\%p94NIP5kiV">C$W?{*N,+YTZOuQxR7 MY+ɖdWKVdY{qæ4;j@HBz )n I6nvI`_+6y>y랙;Μsf9KQb`v;=.0>Ҥ{g|XQ_ᆾ(# _xOV<vT@a9O[Ї?Mt/x:# G~ l !,q ͙,j3|T! OЪEw{3%LEUq;QПˀ<)G$S駸WWC>woLf])D{iW1ܟ{! 0t!C`ڵ+C=KDqxjO;mְxMjC2ð:Js *F lM-gē"v@z-/6#[jA39 ewmn$"TfEU *sѩ5Rwgc:  0QF61!w<Ƙl*~ħKW6ǛڇʔpCI(? Z`oj.[tRH7P.uHrOZ<6$Fϖ=QeU[ZcCB2-" ^ 3ďE]W<JX(sSD),P~wR< :B[&C]oݻo#%"Y4ex b`:RxbaT;gr k{Ɗm@ؔ6Ruc ;L-~h$iw$;J@?_j6cL&#RE{ [efǪX<:Z5>,uEd!؊,)k]Gw!1:#UV8r2 _)d(ȺQwWW4 #|#m\K \_wR\9ʎ7zP|HrxP&}QaR N;/OUO6dP\rc޼P4rxTN5QhHAA=A&1Vo- ""Gv#41#%NzCV:Zt5hDZ5y|ɦۆ4Ҵ(O1uc֒/3v ܍_$c᧐~=گzf SQ°k62{mmt{Q3V aE5ֲ:GƑ\"wtkYNj Ӻ9ׄw]R'Ɣ3_88m jO~O$5dty%!czӎj9Tc2VwN^Fy,]po0Dĸ9/>3Nz 7* b ޕfΙWir`!Da_,?յұE#dIGfTߣ_Smix;fп03%V pǜN~ E/ qVGłX9F_956$=ů U-nkϸUigHg-a7ADVK&&ص{0:5Z4{{lDTlMtߜ1p'ou>Z>J@ﮦ|#RQ'4|Z4*(k<K((U'03#!KH %b>L2 xQ;׉, 1a)EΖc-e/a &OM)_nn: >%Hm" {A8aÃRJy{i9i(6`8@nn) 5:-CIR?Rp aiO)S^Ӂ}fcR"CBTfKL_ b67w{-璄7"+jo,ELo5]rJo\űT,¡_m]LV';8_u&Oh:M,^ |πf#AĜ?J8i8 a ^hFL]KHT0hԢnsj<9ڰvv?>]X}y&<+YjXQ.Œ4 BMt1lx/RKTvUS؃uqhhS"!u>V7Bx;醤UqC#>WӚj׹1XOoay8C \YPjPw9UP[5]oD~ pr׶v߲97A5ExW!x~r0UjwqjZ_i7B/5zS>ڕc$"\1"rf"9Ei:e襂NM38?|g]$< 7߉:a#, ?k{{1!8 P6k"z&9ߍz[_q J6D1O{KHXkڼsSUʎ?SwN}w=; 'BߦR3c ;L'oKNΔ41%3BJ[BG:a.I,~r ;kcd$h])q*&>ئz%uwٰWew g?Cs-Qb <:'vcԎ=ulr/48 L g¿ o[Z-(,}LQ:ݮب_6Y)i3 qE·[tiTk.4,~g0 { N;K<\(suq0j{KX?p߲M,D^BsL߈hy!qxP-N\ (t<ڪtqNUwmv"!X疻ĆE99Iq,~ܽ aކݹ eyVtgxKтK2gsHo4ؚ~wm?gka v!ga?0$y9h< &JB2a jAl?;SH [_lYwzռ55Vw@j&HVv_6_+uII&Ny\D֠5!+I=UZҹ.q^ NʔRUbUQᱵ;2k~LIRI+(Ln[߶)Q7iy+DrOqcrW Y+ӻ"Md/rޤO͛}t$袬=ඞIsX @kM]rejR 4.rm|υ%|G߶`ʆ:Tg# FiUZ(rdKW|4t55):1WiYP7kkqSef&<퍣+͹\! 2F*GnEV9R/MGc:GaR>/h05^_V<)W)I о:b4ME?pOpzj4Z4" :>͸}_EA{n"Վ[ȿ),[~2ѧ9!ɐ>Ob%Yh ('HP%6t 5.T&Jc3Z+M'B E |Ic ."ŒUZ="JHߖDŽ8듯# .rijt /09sL=d&h]{~:J##c@d .t=bG׉CyH2X„]G2a1w|]ȩؑqjY ߍɸꜣDȧa~{;9c$eL!̩P0{`MK7m{XBo<0bYvaFSHݤ.ps-Weۨ/S TY1b&N_H?KOObEE YzS**:JUTpґPԓ_/tP놺} {*׵&ڃNadauB6 #U%;cZE8yK3m٪em)mˡܚ֜#eR v%0 R1:j\7_;th$՟?+vJ^zvS(hO/Y|XT-Rp.sLrg"` qi*_ˣ>ȗ/YbYۺ{)P_\\Xt lr[df{2 IL+,O4 " 0x1nFrOֆmI撡5 !obZեҥ$/Y–?Y;~yD]QWwgEoמٹsK9_4Re;ㅙm8CWV>׷{jn 0%J:!+*Bv1a/^/ԺB@ 7j 5gb-Y~ mkFaez&& %$&BB:rEE_E͞n5b)Uw%f5EqsUb׳a}J|~_CGl* 2;th+JGsc\&,b5٭F,}i\:71Mi..81^)CGzLwҥuvgmqn"Y[#X_ED"~k纗ӱ"Y =к$Eg'8&qH LMpb Øl r`6ՐrV$]m+sd"N#cx }h 蝳6Wo9*h#T\ʒr)VUrjmK4g9U;/EN~ _Aױ W {Wd[۔_`tu;=7V,QLzCdd\go-usg%F[JST~ J( t&ZL,pQB c\|g&|r)0nt%Qo.?ir ti.TpٞO#_eg9_BOfd;LA{vWP yh 9 #ZΓ%ʵ+}5Ai|cyUCn؞[vڒ餟XsOe,'e^95qˬ{W&|n q=S#DlYȆv@"C/.ܤD+j}} -: XAR퓁sx-g &8MIb`/||/'BMܷW^~`w_2WȎcc=|4=ˇ_~S|e[!#DLk1D~a:E=kxޑ.G]}ɣͯ.dU g%iLS̄:%pE 0RmÅG^8]\p`J- !p:ԝ%ћ_p5R{]ircZܪι!hOç6wn ؤq5<%:}##VyW,2 "t{;r?slg)]Y&GܱnO~# #J K!#AS\`9t A5-{z q+wuYiR9~7;-~obk:nkR<* ;XUeT5 oe$Vk 9]%y>Xy7P~xĚ?>C+k3Wc42 ҚI@E"#VSbV;֖o^S\(zbB7ѣe(rG|ݻϩwUn wSz_f,$ZrrVoi ~$*Jvd=֒@!${z ):Jp\ȻRw[EE:[1umYYȲj%A➁'v831 OC #3Q7BcHH3~$ҊҸC( ]$1 @@r|0L[D-Tke 8x{ PK>7u{6~~J - ~֡mguREio6u` {jfJOYI#$/%c$X-n+ b?t683]& ohҝ|_&"i^ui4KC^{oVTh1rCU1zO?WboikqNq>)o/OMgVdeB!sK' ;XVSHTQ-~ _]< YGMRrɺxD]:֕zGMKmjWQW+< wLEʦ F6z(^AV6Tx)8.L2򚞂u}{tlSʴܪD#l;_ӥT^2lGvCd % /3V&g9 Jc8 h$'5`:p/Psv6>v8р>H%Z, l ݄gW>)9DjWb܍[RzV}"o-8Kg>h f ,`N!V VJE^TZjknH0aٖWj5Ҥ,ypbw6*C2R /r +-MjGs WEizE6% ƔB SHOϞf#fOpc{XelB͘2׎ bp̧d. }GiI;M-z=,nê9RZY]SU+j=p)=m-\Z&P@`QkCYZp{ٕV-yyB[R;o֒7:N^^nB촥|fWR0~ERr<ƜNrc=SJ̊߿0,^iP++ʛFjRߌԭf2lm+ʫ\ 7F,J%>u^itFXTH y W"^-͆5N'wqtZؠpXq~?k=OΘwK~먐pS;=ZTZZ{dd!$!Q*o:nή$C^DzQ2@i S\ 5jFk*zFG;kXT**jȇ:!EgmNQ0uD'%"$Hy ی0N_R> )g>5bN|U)=&Qf X+1zUjI,6y*Q8qUXl^"W}3-Ԇ%og$c_l$SkzqdOkr(>>hϴ]ۘ Y6 Z4MMZ-#?kxv:;P*~ c`穸B{ֲc݅юU+Ww:öPfDnLM۫N6\deZL2w5~L+с,8<@uuњs=ۻ}c;sKm%~ h)Y ,z+r}[4o=EKGL^_?L=IeLїi1dgOsw;7Ls꒭R${ƸsWGFŃgzf.*M%^a;nbZX~x(V=RTWvZR |eF(~YD6{#Civ"[!@MwT ISW`4AK\I~`pIq̒MN o;Z\rLS RiB䏝Fc> I"t%rI;EcCIp~%^܏;z<FHxjBy<"o62N92O /T؃7~9 0- T.=@(vti%TyvޥM<Fj>rE/AP:[5RY(M 8 $l ̘}>fhό"*"MqjI^t&jE!]==a/7 E-GXfRtLPzkUw,qj.&`x6,e6K$9⒫)ʱRKZϦ>wFH91(v X⍢~};؆]󂉍&w킠!ۈ3oMw gVlM@54 E} eb6#KɢiieBڗ$-f `>4|0? ͂i"2-5"-4҆Wp YȿA-R l䚅98` s&`}!4ȗ\TbSF$_f#iUL?tYC[#nzޒ$v M;ֲ̲gК,U`'HcBP:99ͤ|gZɤ9˨Ur"CA>Wy7\K>[Z"}N ~P♳&?VBe;D5&(Ly9zt >3P{9-tܑ`3x^k_,e6QLp#GO WxXĩߴGڰmWϩݾ@I#[N`(cLܯ"آψ ?/Fa: (rx<(<e}S N֭1(((L; }ANJjkd}lhbu&=_࿓,p&B 20 w2`k[dM0: '+@??n)KP ǭ{<{~6ތ8SkֹPl)'kvinw_??V`Fo@~()Z r1|Hx|!-P*;8 ֮ۂ;*j-i?,+߿(u1rlɂ]GHoM9ڈq?B a_)e{U6~Iê!8U,kԃ!^bQ _E# >>#ǩ*bM˷xjM 0 ߎ޹ w#W&3ĝ9^,1dM[ln&E]⊍45˔p e ?4|0dȜd́*[X8lPď691Ȉ1 5<ٝpYd3MCGM&v&r#lR b?+ҏ ܆?g9œJEz9B9ƅN h'' H!4zDH: =kYpglme8k5,s{{ocl/3es\e=$CcOR۽J<698+rP^;s2Db&.$q?]d["LEɒI2vkB*$/%E rxjO2X27rW;r>Բղ7)Q)7Q!sEbFLp1ysomoQklqn&N3Da++d a΄Výj˸@",quFjSVl!H)](޺K - Dsxph_ܸ~zb_ y;PlZ V &,;;҃|-GO>t ֢rOu 0Ãx#0sŬþeadWȋ\:jSdαKZGz㐚y+bH<ouw/gz`8 g}I~LYqz}Rd}Cwx<,.ft7_@Ȕҙp&&*}f`SNB/H'[?'EV 6 Nc~jpĵ2FbLjbbY4U1/aD9dT :'0P,oO'~,og<&PQ@4j:UF([l`!H&ʐrDqO|Jۭo\ruM+:ViJ* Q%S~Orj?t +sG95*bqsf))ȷ@iLR+ew+$(!W };1 <3@B EvڭO?t* n~+ŒkGKkAR*T$rVQx3 .u/ H+ji^uJ\rOR[lS (Wb$*2ק&זآx^嵥,6UYOƀ!u[/,-:FinŤ)kҠfv\Km)(Ei2,M&SHd*J *aԝ#\Nn)Tl'hZ%7%$`;,6gd=-V{vY&#"A$m3Xo6JAzzP19T!J] KBT'YbTEѵv2ѓy(sjbQAʎ3Иa;PQlb[yģQP)15B& [QO#.lMGy r41YđbFBZ6n1;sG( ]QsT\@=n*7qlmsAmܓX6.U`(3F$;A^YJHyJ8&"*[cɩ6#ڌ @N9xbEm?/*"56nP|gZ# &*pЋn<], qpEgy{ew8qxd%^;L&, :72 E ۻ8+P4mCdCBfs:6~Oʪ%m;6y݄Y$=|6 ~4@[@G$O0^4(ecbbZeZtD!tD)93)DܨhFu]QV{PDg0Ǚ=Tw6ps \ek7 f-^J<8c V8E]HIpYBn*MH_ZZQjMͮ>oW=ZM.-| I0l{'l>-WKbSe `td(Y}pgJM= m>ݎ~ .hg3ҞЎcAH{.BF.7Pyڂm ]H :V3PpOٰ-wR#0)v&FH67MȟH}wג:FOEB R$_F^` i;i Hc {({9BiW1}6-K$Hkڲ w1o]|F{=o9w -,`\7N~2A@|/&w[h'' !I I{!Ɯ$ +!6 nc)C1$!*n,I1b"u\!XE!ml+ i$cH+$}-.id|!d'?FC.gp7"QwJ mWba6t+!xV؀ %xS։< T$Hy%bh !Zr~|'a>"5q@2߽l~v*Row'yp:EDhcvH}|0߭dg#U0Av.B[Xr̈́iH rE0mmk&<Lj VCW7z%n;=K^*!)צi.Fhȫd#n$ k&Ls `k&L#Jxlo @9W5YG2 KP ؋RhcБmHIq\C7nQHf mϲܿ JS9sȜR+/mɋm?0 IoLv'8[66CWR64s8;0* p|MKI顾dn&5 -VH$OI?EP@ Z@oҡjo/ FRC[{bk!gւk1w;jvETw-نu)pj]5ֳ MZWR#9c]Iɺd'n"_JV&=6weײYѥy@u)`_>L lJNPRKb Ѯkp@ F)L}iCQj 70i$^ƛo6%iP4e8^ f;"`>oa\}>Pv:[^99ϫV{ayDy7K+KC/O| >coS4DŌ|X1u־݉31TyJ34,SS˓TtE9IcGߖҺ.S~gz]1X/cwbPzu/&h`$uAD觇?% *m?U>ޯ.m,ݿQ)p%y؇.nLdEx3P4_=r#C*^rX䎉lm \J>ӥ r|P{:geyu_5KY @71;߁:!!wᮂO ,>xgr//7Ģ "KzQѯ=~o#15|Ap>3lMe25]fڄ3RQ;}knf u^![0spk=&WH4V"Nn[+d}9XрR3s\-Fh =KMk nZA+ǰx2u1ՏkcimzlWd%6q5jȸ/ v+Zs:Fi8r#D:Z&A52W@CոE:h!դ]3E05T1>L@MGD OOL|11V_#dXs;J|DQ0Vmnf)/Ц; x~RϾvB,HdC':RWR)% fqt(Sĺ̡jPT}\0# n-7ngʹ3,h$<76Vȼ GռZsƃXc4R*])}NF7dMpWu{cg/8PcQ\M?Ѿ"?!Em\Vm-t] }zGU MeQR7G: o5xkۦ:&'6pn{#E J.Or~y)ೄ\1G؁M(7Qjœ?M(`/6ZZs('ghgiùRWJ$U*Y [auF _XΥYbqNW"ZJ"&S pG)L,A?Cʕu x*Oȷgx9!?*b P殔I 8$"Z񴮩^;NH^+HgY5])͕U{AلuXpb MfwKV!5"4%/2&ӛOs{=トiZYVjFrrԸjm@zz8L3+pTl 򍹩.Ap_ZoZқy%lhD t@!.#|͐&D~GmEq,{=;cY6fN/V4kLK{RjtV efՖOpXZ8VoDpL/36  'd._jNj[_m.R !1ǟp_|;y9;szP";͗'#bǥ?cJqGbRNBcj\Io._l,ʫ(խ.[*o2B̙]rkyhRGlOB1!{a;>oNKWJAlEt)i6Q c()a(I£Rne3 $'\)){=*;He˒%[V%&[rv9Nz! IH%I$ RҖ KIXJ`!$;3J}}~;sΙ33g9c$r&=/kdKne}TAݺ]3hYiuqIY9^f/pA_:Q;ZJvrEJBEІ.% J1#]74Nx*.}q:…D r 0xMCM_ٯ'Aʩg٨N+Mb]{'dI>+V9,eej%DD>`pշ_\6z#UKק@}3w.rmB!<ؿ9KGg[ u:8$-0*Z9<$˼)H,7A)ý ~ g+9Π{p5 &C)R[gU{Ϳs> A#=M2# O`[½loGȊw:SS*edcMLJzu\DfsP]m(KSln2)Ӂ @J)Zk LʱId5Ɠ@Rٖӳƭq&.az# omGI췸>P.OG8jpIjnə\{@J}Mp똸yfUܘffś&Ij bz2U;L#~I_Xֹd9@L,`- rh \jX'!?1e7(3ŁR #,/V* V6MḶX,9=.uSD ;NO3D[:W*5&jtHjFֻ[(!I6&GKPLe2ĈteE{#]"H9*DHw.o בJ1AP*H/V5JM͑NC ,Qkq4a\{M D-ǜ3!6Yu`etME\&SE~7єeǁ1 <ڍ;pB|u=kPWH'y= fԍ4''5T/PfW@]ќ#!eKWv ;) 3<0F}2ÑoX7z=@gЊp %~=H)K3dGEI6΢gN.mɭY0);Ϡ3zt^u>F4$gZIt 5i*l^ y)˦if̘~0ӻFlyd-n}c z 9D܌_d䒔3KGoՖ_?P5ٜ6yfόb[?UG)|b)Ke?=Mm w~;gg_~=͂ T{_٧V~׏ }G ǯe[$5r1FFlE3h:i szrZԢ"Q{_4vtՎ,OyDO_]=58kGE#ktg+Yl,~&V_wI;wtvl"Ζ߈`-lѡK6e{Їθ]j'r:宠 bGӥ1 4|v@S|E P]hC<7r/XQ9H\_+lC/KJd&:.#Jgh j&A4h+2TnMKJ`6%e3M:-$ T*.}Rzrq1RP-NH4J{=7^`WyFKA4:>)ijGn=!]& z*42^kH';|aRM¯jUK-F{S(ڞ"s}ޮ^c{5>q2>}?jt(#1fp,J'=4e^}=4W$SM0_Qk/ਅvoLĆ\5;TDWaשUqz im2Lx^1 ![&\bZ&Wh뽦CL)Jy uq[wCi;5$׿WoPe;E60E.hSY;ȃn<~XܨʺdMc4jx7.ab)O'GqlGNTkr觗?pmvLemI;Ff7c%,]w ܪB__#[G#ۋgŭs&qP1ktokS>goA $ch4Kg{ f/{ImUYX4ҫaR86K{apg{ 2g[ {{[wNanݷzэBݷ瓼薡7H  jvlH?l|Χ-dw.g Ku&]jjbKW-MESr G_$Rugi rFCY+.2,͐QuՎז7TրN{qGFxˣ7'XGxmiP*XРbL;UOKfwu)CZᛗg#hڮڸA!V!%=AЭN{݉wE9<+߬9rf=!,"M;CU**3Ѷ]ŝMh[η8)|l#؍sz/xgfd=|.vȲ*ߢ>䶌KgldYyYIquogAC6-eF-^oltA^oo4ʇ5#c~c79S3q[n3׆nzBDfvϊ^1WeStk`ߴ(D(!:'M $qҢY!%JDfJu_tؒtתIݳq )NB ]CnlM'l8DG6:OL5ܘ7 #WM?faur߄>G/MK-v>w{Fνi om# Z Zvnl}-acw_Z-h?Ch7yA4yK諠un?L'QgVm9uw僞Y@ 7(n`H,hO :uINzǩINk%'O:u >>6ƓSΌ 17߬Ymm*f˽O$yЂ'??UꟋU쟓fu) i}/좮ȫ*; [˓l0uMx${iJds>dMPZUrO0oPeSƟ vʍ-;׾ZFvYmÏ<2;|9_1nwSHZVn0}JeNVդ&<љݒ3TAZ|=*gJN {]Ɍu Egf+>0nߞ7h3SZqrIc) GQKvNuAQ%7Ksjݙ?UQ@PHo)HXʼ=2WH:;KrOl%!3Ғ|@rүdf7 >{x_D.GwRl۸)v8|1;me(ћvNC\N ;4ƛ*١D{LU.XT?IUʮ܂T$w}VYyLHMYɕΊqgE̙E$%`GC! a1Hc!j|]Ab,Q)391Eq?quT?Ft.J 7Y7%*(2ʔIJ`0d|[pIs5\993UG =u"IV!P?b7ZgTb'ќcSRtbۜPJ "!уv#g颸z݃ Gl [ѪH|TDQHfBz"N|ykr+А.yJ)#W,=A!btxE 4v6x4)"Af6Z +?@em)M ^JRn]lJV]ZP~H4#>s?H6Q2'?Pz&I56VIu69@;X g=7]MkO#4Ԧv6Iu9OMsxv%aZ&6'h~%rþ) V Ա~"]KAZ, fܙ>A2ߝehJ[-pLQ- mv1 eGפ;7^FgP%# yNK. 3rz&XٗWY|CD=[% 2!YE/x3ܘYbMNd{CTsub}Tڷ><({?ևTK:܏h C6ݗ~c⑏-(?JAIDiS)P7na]X{ ߏI axw"nI~}ߎÞ<qosGx{:!sg~{'( [Cϋϛ%_ Ͻ sw]ȇ1Yc7en n8Gl<ωn+KMe=ީE lGccsŞk{͊hjՐVI hq6O*5gs z`3Cs9]hd̄ꊾtrd]Piٺ\?ޮd$!ˉ+[7ƍhE ln[3Y\4 ̄Lͮ7"o4d TtM15cA[Mc +2UfSqM($ԋT.sODmĀAl*"ͤw1o9!sF%ћgC(01Y(1j-=Az M=&oW`=om+f9M^(DYaNwQ<Y_Яt74eq'g:LLq!yYUܿ3DOg3V%Xt }IcShy+N<^.4HiMc6 N|̪޲h>Ɯ4L(p_ZYսl1:iee־CEI<40zz -A?HH朧#u3f:ή팙}5,|]VwmmZAwb-ySu, /HyBwz$<;w3j1}m.Eexפ|X3̓r`ih|JH&R ^O%1Z~Ybu㒥jՃ*J-sue[@Q_o}<5f͏9߹>F1Ik\Md9g+LeQkގ5Ȳ !\Z,, zIJOhig i-)1/]j-87Ͱ g※z?S|eic{'Ɓ=롫irV?ͩ'Qd=i^JOc^cLK,R&3ćq8Y܏y΋ uPB$QYesanbVӒǷ/MЬIP šM-]xXNJ")a"Y y=fl`Gd~V1bGO"1ͣ4 1!5Q1u>T&Hpq&ea#|0M3PI8A3 O34xI成4&FiV\bywjw* s\B Х"ԃa kۦ[VO ^Ν m< 7्gb٤*x\8v{4v}y}]bSg|=Wk}]ӊ~/یrKrh%W'YćT4 KYjy)r VۿϐϮT+W_Ox?)CV5k:8,<)%=_"}ﭸ[K`w<bYN|:Ur )8Q>@f_i{7uMy4gۮVb2suk@G=:K+|Q.E~i_< #wϐ[g`>mv'VȧݤЈׅӂ 3ʴZCZc3׵.MɓSnHJs]1ZәySx'J1[@ rFn3 rT;l>ґ^<6e[,|Hb1ͨz\h3`86#[ %Q&1=U9 Df[.zoq1ZL8F]"DZ;.v#pdpts9j7-H հ.~gZ.O#%{r*bh`l*n;ݸM]^{RR=>RRUWK+IN"7K{*r*:;i9eu LaȭwŔArkI,ZjL3d H*tRe'(53xn##]6Dq?@|ԖƂc\Xdq%YvYp%g ‘B"NS!%JYnqgZM91qjXGcp`<^ǺqA2y~sMfm)ԕf?SgN@:Df`L ك+Wo \Wb t*EhH "c6+o{H!] |Մ3Kn{tC;RWbrJeOͫ^wl9eMѨ QLbC67kӰVU:H61>}B㓯[3 ϙJ $͜YDo8I߃˞I>BSOHh߅`HP W0b 0à]dWQ >8;sf>aבQ$h'3, M[2k7mbpG@El~6լܯ|+?7%?돢EPV<@8D\osK[4~cb 2z-pf[UytLvbj-cȾSe`Dc { swV$&g(4{e%pj <\on}CGjdY!,!Z)^̉M)JYk{gyUu.f_SCʯ=3aX2WSD||R՘ }4y Wzs xt^Ecu"[/>v%S&-[laxO`Q pRFoe*vBJ\}pzV;:I)q ُ}m $)#;+g򜇀=ʞ*hMi9o бxKN XIPNאYeS65W+ *9urtrwS9 ɩCE#p9)1!XwG4˜ҹ’XVk/ a%L2zR*f-}so. O2|b[h3 Rq_КЎPd20A*Jk-x4g/ɓFi թW&6Ew 4)iD ~tMrQ`s廅cN”y՜BEBR*ڨWQGU!O t*lTSOI{5;v=G<-qwՀ<$ii}O6+2 {oPsy>'`(W/ |J?go#IXmcg`OQ\:hBG چ$E+y'HB283!+S֫ I" +T&fH*j!Z{Xٖ88UH0#gZ1,$ FȃȇhRS4.pb*odXNW;I X B>ѰG E0XvD<% [ c3blUcl%guĠn~Oo!;Jt/%$+)8 X|p~Oǣ?ѝ]Tc?;R Qɩ{ƘFF,&(~HrfzL pt`>'#qT'}u;s@<ݕkRIR#>ޑT2<#g"\cJfKSKS f4?pȞO+$+7AB ƌiF+k,%y{ :1ћ,%B&}jQm% PM,|- hSLaqZ3P"]MzKfn`F4J;U;6)HP m٬vbt1D TN H9P~O@.}fr$@sD4<&cMf3r>潏pr| x[NVO<տ}}I q}%!%P+O  as%4P}2f޾=冖^gU5J0,eO99pm(T^t^9LEtoɯ}eG rpʵHS kP z~qgWwX'z`}PtG$ޅ}+cp ['Bq=!䧅tDŽtW}PA'ʏ" vBTZb*sAI7Kӝʐ)˔؉ h=8-`zz=ш;#`NI4IjS֟lXX~ X$4a~,`[7LSH(ei9 '{Q^f߿p:1B}fsf!lYߠnъ,$xD(p:Gn Qܦj%j+Q4θ)2߿oπ.U%%$уݾH+>p}f3l>90In*Kc@S&yRDDpC4(Y">Ss(-a\z2)tEg 0e^;2O@9xDŗj|7,]_~\ F8sQ^? nBCR.ZJ>ow^7ך㻧8v[Z!i4[4c[xenJ Xc{n:HKJtPdLH^7!c"A a+^@t_nJyaZ '˨bɍL2]cȺnWy2xȽ$glW B#jWB?Zv3=iW ifsSw{ז|X ? }yY|L "!xp,@}| 1q~NǀEѢ翀64jLj`nHc'R;~:8`S!o\-jKfƷ_c瀊xJI%\J/")Z?C;jhw:΅ 4U a8';"io m;/;E\p/?79܏ >a:ɿ2$_8A'Br8̇gU} |(:\8'ifW^<>w<͎+;lP9 wŝ*@g(~ 착Q&pE4ðJrɢM-g;ǔ5le+5g٣[I?|[XfsP/ޱ|3r~]+*Qs$ 9CqDDٌIypZ67Ypf 91"9jw)-z !W-cNO;w~+ƙψ=Xϸ ϯ8ʝ+N :D^hOt$;f`StܮN0!țU~{y&&3=oca8F]>ᜋb1Z]đc/x7{}gt@׫#I\2Pȫ'hō a?om .ATYO +Ǔa-1\K0qG8ɬ+{_ob;q%w"G+`s?7euV]+iض{Opsm|yell }q䁯8^VrM|݄[9~tG0\z+D+}-Yo~Iٔߡ;/=Gu 2ڬ D5aEί ply!Qz? Ynbփ<Îg{WDNVx؝OqGX?: 볜o/ϋ Q.9pξa&Iv.tO ^x:%0vӑ߁s\~IJ)lX鎰\\x,psuG/ ?#E/->愱yp ?+M+ y;pb[؇|p_gܦ#2xmKbI'V,ŶF# n8=ӧe%yzNOըS,|~9I@mPo]|6 7QK,Ķl_v)SϾrK+Joclc;OmLfx-l] sޓb'4Bi ҳyx/,.R#_XX "T?XqpOo3 /\0Է2B|^ˋk]3p; oi[q!C8e0? /fwXnLp|989{Þcyo{^ܟ wpϥsANNN}yP^(@'7\|,.ʯ .#帽8[F ;>E76@?qvKDZyöFc}rVq p_" 2.1~A>O1W.߮= ټuFJQ}I7s?H};z#_{Zo;23ƭ &}yvvyg5=chR; i@~1t)+F,P1`~#`~t.Vc%/R +#qO_ Z' -`r7~~)ӗyS+ȿ?F#ʝOHd.Fw$] L%SfKoIb2zf'uiCRקTcB\ ƪcHY绝ywX>tPï}!Z7Gu1 g>B2ݏ$&a#7sw)vco^/x\ezFh s%vp @=3bc`$Q^ΗQr!PSxhba;Z'RUr+Н?Yܭl#^tSr/r)r[-Y{ɿ(kV_c kc2k ?(8*JJ7cJbUQN7$Gnx;/HĴ8+ϋGGfyUloH%gy2c ]ifZK{I(;l2M2l$ؘiDTXz^-C2t,a#&anՕ@QD(ğn2d q-9Z8vgn~A7 ?  U+L-{zV F+5-l0x "qNa׳ϩWl}G~\:uy/ot̗'K,Bz|d0&@I1m(md{1Ԃ3`Z/*' G Zݿ.^ݿ.@eq2:)SzLC,]ZGsI>| Jȸ2H>lR"j\SVh?>OQ)ikw@{YNl|l!U,Rz5g#' n=KxYv)u񗪸50iPa{y7[g/jȞ}{< <H"-"]/=M8#tٲi(;bWA;! uA,dNr=.rK5"R FeòwsMt"}z}ݛOޏНo{0' ṔwDDžplUC-+*p;A~WZY%:{A2m0WkdV]e?uZɭwwUg y9ögpq*l"5σm Z q%"~hs0yz 5?I"^0pqT@OSN~o|d@OWO"s:4 џ~ߊw׏)d;q:O?ɯ`N~E,OS V3ɯ#Ĉ N9ȮLUe9ޟrv`m c7x0q ]о$'h_8o8ш汻8ԻvQӅ|V<= Y9gh(e8T|Y!okD(zV"@M@!⟔;K0%!T2vҷ߽aOS kR=/^\^Lx}, q K_`)\w^O_"r{b'~?Eм17>m 58ynS,TFS62# 3@e~\oA7T8lqIvTCKvW#D8q.=,,C9}Y"8?_8?Dh{x]H 3\H*@}i]! hqzZ!gdm1Iui{O(М=`џXdU @GM_" 8#9!*EΟF=|Ɵ1ܸ:qV;fayNxHWZPWz@.뒽^^E:/oOFVo2BE!!f-IM\dv3}n_kE Q'χ)rT8&־ c4T[\A} ]Cc ӑL3'N힌ɵ{9\_ ~ p"0#9-Ah' w_\S <=p-+ zՓ}lo+ď UER ,-h`}IywdӥǙؚ&Osi^!)6SnKxdJ-}N->v`E^b> ֧'Lh8{fzJ|C [ &zZծRǤMhO4۷_c>i=G{Rs)ՎtG ᷣ席pT؟qؿ%x[1|pޟEɸqJ wwV'ѣnY,w@c[?ȧXo0GFX9GwsJ_J˻JS*C1}SE-j[u<" HwN79)C-f/8>,ZAuQDnN%;s3 F.A$'V.7䋼c{.މ:voTO?g3Q-QƀMQqQSsWcF'O ~$ڏ_ɥ])t@O=ofD_#@uEVcƖHӠM1uX˵4hb@g5+ơMwq؊Kc`\0tUw!~C*NÂ|rG0cLYĈWBC|wDrEA) % b DCRwNH5([b](]=TkO#c Q 0'v6 4!DvX[zw?s9}ou4]‰S1Q37ջgɕiMUi9^Kըb+ *& 3M f7ͨ3ZM19Ql#a~%ur.Ԩ93H!/ ][i%[dt!"G ~@,~4(_󑀟!?>@9 \U^[L 9bGDPOv>\\ nt|%iU.`2b\QιiA[Vh6 }Csz'2z1 ӷ @}λ .J r'xy.D#O}1T'bFFm3Nɪ UCVѢaɷ; 5,)spqmGβR,Fpp?""~A!/4Cr i!8"N0"D!H%BcZrpgaApIf Iy..zferi$5T;[~f{_iSY9dJ[V<)s u.9F#I.Ud6qUej}rfM![\LӲ~RaTqtQ`Jpom:dEyyxUS >reb? o ?pXq ?*A1!UꓫJ7WsALUVNPk'u)%C*pN]\Ӻ0]Φ>+0=jM?j{1{VisU*CU;}p✜QG=}*oIhgb1;aɠ;ܔ*r`+N&;r. ]\zs:YwtZ#9O HH{.x\gxO|Ək8F. kh'a>2yT5w1>_WG`=बO齷;[fwf{/eKa齩"MUP[P@-Q1Xb,$ 6TgٙYags={&jHۿ"+hk0ԗfl,} 9ji['u/#n>64tqsǙ k0T}JAJEksggP:FhUkfoIõCg۬dN! >&'?U}cW+A%n̹1,dE,d-s:+B?Hp1Mȋ/8=1܍Lk=7*ʞM?g.ߡ_سGmKЅ$!Gأs;y|c֧c:"Oy9/}4`W5aY5O 8ebK|cI+S? 51OOA,oLq<Ώ;Z ǚ ewĂK>MP}v\^r~"?_{cI;A7|ЀEhQFp/-pvm&B_W7'<)t_W tOSq}mZ  |#LYtc]5r.Gd)f 6%P|?s<N@Ր%phr$VYXosK5R3FɴQ>EC9̬Z*>ƭ  3kxN0k5b%Cv5=OU; s -X}_qˉ y=,Ȱ4=}>FO5g4G)q C,Gb,8Zr( jٲ?߲Pwא ұDM⊽ Xd|!7愘'őQJL5|=pŃD#'F/ 7ULntQߤu&c( qK}K̝E'z rov]rq-N~lA~~?߯{Dfc~k*hDc؎805dH 6HKLBeG\+`9oOa,3E?ߓM&] iZOL?43Gzpʕ"#x類̭ g/Lo]32jM'ul>h]~+.iY~+.y|)sGIR/5loDGlo'W/ >:>' o_d[)$+u.NdcDz)QmFΧ+OCr~G[ܽI 1 ԤGHFR#@х~0EMWO,IH^@ph'n?;2Ur.> 윒.6HސQ(s7˄Xb o8nx=~y0hJN3IzWc.IRzYIIiWgīI<^#ץO:){~"< OiNIV][O_c/8wOmߞ=>ϩeQn=I!WEW#W1NN!n=—\Ky*yyy$~wKRipC [y )+/^* :#TۿL -\f;d}Wu?LIIuR)eÈ{;}de̠_4Vy/ʆ;Ntun1qjac\saqhnKxxkx4>|E)3#?.xQڶZG=<ܪќӈb,i;^u.[\e$64~<͉;1}>pN"v$ħxѱ3Y$cn|ϛL;?mJ)tC*LD>0>xlA|>"'`R=x=!% |4+Q4dFSF$.1KJ:wWV.5pCĮGy[sJtQgW5+eZ4XWN8eJmvbkNdĆ7VXBH2y~<| ,Q^Ss/'&Y^lǹD =4xֆ"?ka;T4m 韧̹omEn%EC1=Q# 8~K0r˝*w9sM^aRpLoBWO;>LřO57b!j&"!Xeo$Knl me7t|g[ C5MrD:cZn7;7D*juڞJX.W,S>Um$GVݺwc4CzstvZ,ҥ*v jՅZ=\}"!|yD"Yg "ޠc^?/>.{yj_)s|Cu||5g4gy=Aěðf@F u(Lugh%fBs徺o^a:l)" 4)0[#^J4t^*t"-ӣ]l֜}ȣm-1k̽ 0ⴂsZ^~္1y꺊iv{Q+7%8r~y ;',IJܟb\tA$pzf ~$v!–'9OI"/GO0&^C7!|Š, rs>CJT?uA G7-XM!5ҮQU>@U6{Wݏb2]dfX$}eQ8uo ܰ }U86 z~)CkqxˢDez ʸWB_HmakdM++s.\o5 Vu! Dav$_r{5~,PFVRC鏦$~3/<~{7<'K:\ǨIv\y:$as1B^ǒD< XYl:AR~drn.X5ia!_Uxkj/5mݢXDOz/=t {m|'ˀ~OJɐfb⫊>/Z3O}2^U?ھ? h~>[۱|;>?i{_mq 8[ߓLhYj4K'&[(H4l*R|?Yz8\Ïg;*KȃC`1MdxoMK'UWe]ޠ}4Sǥ L6cF,k%}=ry,'Ցgܦ\÷)MF(?a>E8hh@rPη;A7J^^Xa .7d˪ؽȧUƎ =1zzIR7p\;A^4a{R ㏧/65-F\$WWR=w#u ' tHP'2̬=^COb&U&ShBNLe[pLQx<׏ n9Eal%a~JqHͰJՊpJLM?ovP٤=M^[avxJN£5#jE"밟}BPߓH ޕ4ds(*gUx0ԑ5E3q`7ķCMzFFuT|E HuoTV"Q^eh.`yJ9>w%p_o<. *kп@CE3zW.]YĸoQF@k*~O?Tw%p]PQ⋔%/Y~b̦%iwOK?|`6-D"戙jM}eIc^"\ORv,g&ON!{|fMD~@fޝ|QLD}*aT|im~Kfг k[̍L6NY1sβ! wRQiTe>B„<D-}rBͯ.n{@(<6b .H<&rI]~s!tzAc]bt 4N}Q8/!$! u7$ eaK,R&,mUYMzNnoɯo 5 W,|TIeE:Rsٌcf{}2=XY}wՋG@vej_+C4:SmxϭRv"l(z][E h*!U9 tjG\ 9b )>6xŠ13,l H!5`~^fNJz1{, r&nXI!}إ9BP7]~lOפ{`nq=C 6*qw nbŶpX?M{W +fP{n]7Fsm_?g *^7_^n='ES@f 3Qo[Q ?e|VEoU]UK,K)֒|N=|Ohq NG=D#&cUYVv )utܵ혭T@).+i/ ˇ7Cr9.h!_Pv|hd5BjNgYo4;r UY'*w7~]EB%;iX!hf` OV )`3r#6kldYtʒdi5JRc/F*N"ʤfJT9#6N/#7J|qO\S.&,K` v >FTNddYR6Fn=P*Ur)tb>}wn8b~lt4*<2>7k<Vm O%!Y@jLPڼ3ƒVܠ2&aEH WQz@!l>?jE] ʂOW); xԲfu*#JfeH!w2bګ -Cl.RkYK̦Ek> (jH| ,Tb.Y}JTP,7?J:M-Y`K@ϒܔɞcNB /σoL5mPm^( a6 ԑ7z_߲ϵ?ne^xe Yp|Wsy8$Z]<[z7_ӉӟHe\{b- /F 8 ~4';yes>sL*z Ӟ~8~d9S =rC}%uI׋m:}o}_c_!J_NttUfU8iO&X?x͕~צ/_'I" s, '?eX<75y֫vU'y~u?¿6#e?<}('K+7ߥ n RʼI}ũO&5hm8^ڋTDN|o2kw~kO9XOiw}wy:KdXF=k>O$Ӊ$]>|&c<>'[ŭ?8 q"#hlU|+8˺@٘,ksRݡ&Y7lA 7%FQ)$++ (Z[J:lV쿫Y\יxq"oĜR]IP|!\<^C?cBz'L+RgSyRN_Ӊ'tƷ@\|8])tS,%}Y<7E\ҙm+F}1/1~p_ D)wBh~]*z8s~rPS樗\>h%̭g0-s}ό [*->aTčMu~`..˿|K*~2zȧķOUxWR/'p)3^ٜJqYxuZI<^Ӓ~m < oNc<=I" 4$g;BwR* z>Z_̠ע+?)d:6L.VKgqgD yeScD+?4n/h^)ayoŷM&8#Z.?cћzlf=}f}|։PpΌI|Q MXAhA/ްkd/VU,QZ}fL>M6QJ{G @d_.$TJK 6=u4G7[!|(?E_m3N7xpio*6iO&X?xpjoitN$~4|oHpwVB׃'sXOy^y2_n^o}?|Xy^#k3?|^#3>ߛ|^6vR8E%=kvp[ɖu} E-?m WqyG-&b-7Yh+,zdc8)l!㏉D93B8(&Rpi%0aKJGx>=)xs/la& G`: á-$"= q]0* y &N\1#4~G "֍{t>?Q:톃;XR]tݺbĊn[[y3m^9q|4:8@kQy=UtwGpgR `@HB7D3ȾD*jp}?E݅{7&C|>O )Hꔱ$YAs7itZX m)l*m&idX[?%#;jKuѶiQ;^yv{8X&#G\2_~ /ls*wM^9L| HfL*S4!?-}i/t)N[~$Kcf.X5o(Y5vrlɁK; eJ}0:2:̪Vx^RbYbjU6̧TUR>4&PUjuԮYW5`Tkv U&ec)(2 V 5daB<.kJ|RYB_.Qlѐ`۴B,q;2Rm r]Q;`UX~\u4&IKR)8ewMJ_4xa =x@ ~ ESAȏ `7L9ALRq"+BJ2|2%$- l4_ ;ϱs~x/>@48~D \PZCl y5}xv7~Fؐ{ K3uň \vF[O/{a4=7ElHsf44O-_dONxׄ>D-~ǡmFD1+tafceأ#uMBm k?tvg%8+Ϯߺ`zC:2*\cm:o+j;y5 vtȼZ .RbW+ ?VjɝCi:2Zi5Tf)G→q5?_6xTyjըNos'$?~;Ͱzm bgzh,w[ԒZ1\fx\= nolZy1ߋg`Mae,ݯW:\amq\LFu-h >`(~?&pp2-8-g0dj_ ӿ$UdMK8䛚^LP|_|?gQ7p1oeKNedqAz=>=~|3զ iL`1Oq9Uħ"[M՟!.:qS8WI>rˌ~!p~_>\# LGþ;Y`c"+)@|2kC摚v؝}AiCtEMğ=(bp0CNK#Zis4ZF3m}O{UWݪXFZ[:rHWBasQW7;;SHK0b5;$i [,a]pV\.;m%hVb~LcBK@J,ȁ"͈CS 6ح ƋWwqsrͨ1]3Yư-jQaD!:t{;B-bcYɫ*faE裙:qL>_V@:P+vgW(瞅 zh>pnik+r;E !}x|$Nt !U]CTKPmcv+x/rrWAB#l10툔m^+ HWHD"0U۶mۆ!OkyL׎2bb'BjOfbr? &}Q׷Mz}cY^\v!޽Z0\ pW`{`GN.2f s@{Jw@mٺf#<r#.?mM#nG+E9iC:!I@ z%EƖ|^P܆1 Gk=ye?n9!hGlBcT!ڐ [3yD +'5b 6'F,7Q}{>@go'O,旸qݽf`q ʭ3]$g[z_10謶͙>5K%iZ6ޭHӹG#Uh):B±ICpmͪ*giِwvl8UoB|?W">h;aūv^X-WrRޔqIr v !b5gXleܗvG?6@݊&7h2~#rlnƍ $Nx#ֵbid8,jqv.ErM.έb_B>]1 bVRG˜4s2GňHdxʂBRۈ~%~n}GU~'qEAQQOަG^bJoI/4[/o։Ѳ@SѴ-qb*^lACZ Jm&^6}j%G0w%! ķ '.o֋1쭈/C|1q,~$S1=Q|m+%:po|1e󖋸ٛ6]N7WNl/v|,B!̥at1JGHdDv?u3 þ?l-10t.6Zu u3q?~o8_~/l|h|_h B˘,C|XPhDZ!Fe,YɭHDˊi,mUW2+%&69[) Jð>DiI@+3[O#,U>>zwwoʁۂaUZtoX,:ͬwԫ5U aw̧U( ܷΔCh){lv!u["v͆ 0~,KE2NS @ }gQ*icvN0AQH!{4|ۗ$mC轻{wD4n_ ^c(IxE9 lČg^>.xٳGOJHD^,]c`,S/I,X zE\D_Ļ}Aٕex01{^ϊ.xcB=xO;ƭ]skk]Y'a'w. ;FN# ;FMp:(B/ҥGG}G`QI0Im'p8yl8,ϘBucg;X2`=q.Ԃ&'[ %: VO/S~Ymb)( *I"2Iψc 4ӬҌ&X3o$ h`5U Vr*i ʹOQVBseKDR/Sɔj,5Xʴ>MJ^$_ra!9eRr2!^a'>HRf:%?KK#AQb&[9- vrA T3Ҳ󦍵{LP*0Xnk7mC[D $r!/7RbW$"рGUVRYjw{[(NǬr| fNq :w!:t~&y^zc/ZGlO|,X{a~{~箵k\MNW 4a:g3W$?bH B*& f/3A ΣKQ;hBb3).V娂L5KuF,^SHKLjˤʠ)z:F-SH[_hiRm-YYْa RTVfFmAbV[hC2_ۇ/}"K(,ʥ[\1sH#>&,+ +Y 1pVjQ]&Ikvʕ5mnzDؙ :T5{Bⰹ-u i!PϏ/\/k%mnkZ~EbZҔ8GB4eyݓUv;낼Uz"`8/˛\`s=q Hb~ ǎXY8|ZZכʜ6U-Y&ܽbAE?0I -k pт?/x}pr`PU`JuU@/`LN)e {X" YL^(xEAYʲ{k0p,;z 2~Ap." GE#rU{ɰmгPmiRk͌A?p= J>;xӴ_nQˈF 0yڗ4?NO}b?Ł7Th4Vu?ğ/vJOٴ ƿIUox<8r#qnQ!װ q-`OAPpXhYU6NLڒM0z=m@y:O}-zE/8s%U,աA1"mP  e r7Rj|R.$( bɹQ|]Bu_JAFp&yAA[8+!ZR3cS7a4m﹢ԻmW >O oL6mI-cEVDN\XzJi΄h\jPsZS'5VYEۯ^rW̺\ajfiя1zݳ׾w&C ptxBPK_C7?IEƉCr}Jn7]OK*A-/6{P̳ZuvF7˦SoWĩs-B|eK($Fq^܁}bc庤Oz] оnJiRB D^CFSq92YbYsg'ZR}-99xn"MBgU9NzENEQYiUc䣂|hB ^C]\,B ug͙]T]\J Fht?xp?FAyޠ'"-$B2y6:gM,O25TeӅʇ6t Z6ҹR2_] ޷[u׷uP*gq MNx 5BCZNz?2gߢ]IdOZ9{ o[ݱyN%:AD\^,ڄ+#{-eFF|Y: Ǩ-wuGT\0 HH7B~~jD s 5`ݧʴƠ] 'WZj-}4rf׽{X]h ZrfD51s&mI8zϟ% GI[㸯'):Ac Zq;Y>p4HKU*rs=qLؽ28JH_Ԋ3yRnT Y:[1 "܋ć@,'w{LZ?6TYE ?lb0~qqJHiJeuwͬAZlY: ꑱC1\ItJ ?WT6n|,V}vx kG'*\ E_^!/0}:\6&Mxhs˄49_IV>QPۏ'-"hc1O~) ;&\o4$l(w;|>0Es.mցN8ZL< APM֛%g* tI} pۉCHfuxcq) u/Thw/ \8| j_џ,WE{~SP}<_6R&h[uy~Q4:lʖ}]Ȩ56dlz_aY6wj r)].Dz@Ϲ94,,}Jtt:0P@qhT\6撖MCQq ><ĵ5/\֌^O.. ,~nzekwWAK{^~J$!Vem3SG ͛aUJaćz5[o2itɠv !5ľq)>8OhNKIJ b` qj;cHB/ѧK! DSY~¬<,io@11t=P,E2տN.ؖ:ȹ~  ͭEJue:4E9e{sxXV)da~^֢.܇{hQ ?НR%ħ1Ƹs2G1j[ӟHeݷb^`yP,A8$L<&~!c{1i@Ab"sT-0g 9#f6o"1کhfDGԡe7۹f@>l,S[Z!561Zě6)˜!՗XaBd@<(xyww0M}l r+ %@HRew))/W$U0eY[\E.Oĥ`|-=GNA3bIO}USF nU| ^Zf3]zϩ߮w]-2r]E'bzh ΘJ/"Y]yCF7O,UfA,~ڐ s} C?lWgؑX67)AVN+Fihq{CY C(.&v8M~xF _.1ׁV֍LtLԊjD7VB] j4B퐰 @¸\c~xngž&')`:qs%_ 5#vPY}H)S0 -HbȜͤv+dCˎ m֍!.7 כBrRfg 9T n6 >yPj (>E=F!b`.6ޛKP)nI3ӹ9:(H R;Z$V!/߮RcСV;^^L]-Vk-ߝt:zdJ;65ku2p MB4̑GȈ9_E"\ }NU]9DWM%K px CrwU8i/XJ#p[~ Zdt<ېmv->Q'a2ыi)g~nW|_6qم&2KnSbг-۾}ە-MKYVJ6~{wK|wg{ci3bJ~=l`bܯp~nGeIgAl{7s=Σbڒ+_B蘈nv#" 98=~5>݋+nC52~\]Y$k-TGw|[Kfn&QdMmΦI짥ܫԤp$2ꔍNFj>e]Ӎґh%po2,C 2Sw7t=졯cF6P90-C3઩X[V~kLQ,BXpƩR^vr? K`nS Ay?ƚ/Lme*Of˴k+S|TF\LmSB=Rb>R swCxlI I:۔1FvKYO[q ߴSx׳cw {B 6O(E-Y`Q| / yc-4p)@*xNm@"< P7pI!T`e;bB[ϓuUkbTq5O(['^3 ¦ qwۖԘ8,Fu&iIJHfq!bvKw:4ܸR`2>p)>>">#>|2'/<)>}F>a `L46s?2%o q :1=Wn?|r:v)#ExvhNK6 Om5}!1gxŇrL}h|N|h3} u^^$1#pi"dba n͠:A`<6NXHMcN)=>`Vl̯@)%QIՒYg8X瀠$B73RIz@I JW@d  6K$lEN¤4O m:ɠ2)=QC.o)b4;HB)aVV AۨU;PQ'H; i>lzPxC33ŘDMB$Jb?([6Qf>(d~vO NaK84!`ooaOtRj@1D2Cv$n$p(ُʢb=2| aQyTRxv1Ro2LߌzRϥWp+ET.Ƀ̏]^O%r3_TI&XJ,^aAR& R`+qc&|7D}ęBą.7KNP@k|'D@A0Vd %%#R0qUGhHиAuDw8"4UE S7#vPAi9e6S"P4@vhST& Y )"D|h|B,̤#!/QGP>'HGlIaSDS"p<hD-%|J%kB(l +rpd'cFdN3QCX#EܝJKP@Z}']xk 1/E&05qI}r $A)%JmS098,Xj L^A|wkTcokI{6IC^8陸gD4DG.ԅƤr?cRto2DQIH(HY*v[{n+ѨARUO!COht j(:)kEcKݠ臕f 0~8|@tZz?@$}JYEZ?̶@b+7g~0Ô@eaacU5 x ,6D"h.p;ْCj 1h}&.F\xxDNn쭝ԁR hL1 4!6DʯOʨSO~ SuIX_}O<%0IIOsݙJ+P!%?Z@9\t GODOZxQIt> ʠ s,!![+>NMTeЕ9Q|R3M54xe/VdM>P{WāƠ>.>t8%>0<~Ch2G|J|I|Խkanu|C)@VJm [jNdgmUpT0K4+>g$9/Sl{lSăB9p>t0: Kĉ32Qv!i@n%~Qz;LT$$8Ы2IяņD %vF+v`RCXa3udЖ 0܏"NV8ٟ t8ׯdt d80Vl[S4h ~qg`@!5hRH>fAš ixA]G3>Q'P hN5f@at嘁"^?E(w&p#mǯFcH\3dCj-)[_&}ܖl!M#3ht'JW{͠r`RlSaSe~$=B beKB$dZM;k/WC"k/#+,]d'w9sm rmq>?+rr`~~`{~ B509F9[GTK +YW{vGma\|)>|~/_/ӥjği g+0WXP]G]Mk5c^9Zh]4GFCaq܌hƚPX6_T=i_WR=iѴz_~/5ݺNC?$~b jɾ=hԣ*!L<ˮp0`}{UJ kp Z[8|aGq%8aIjYʕŰ7$IWՇ 61< b΢;ax]ѯ9\Ai7ʳ2?"ֺI|P8sܸzyУ\X"ћ+C ګA@mO;zib&88r|z֞OTqd)!эlZи{wsG.gGF=7GPMZ>yQ(t;kKN{ b=?9TGC[\ya~`͎2F^C,*;qdi kD%6XYPP 7VT5-\}Yu+}[h V_  s摷$)vMf#}12,gs_oL.Lu;0^ m|ƙoB.a n[N 5,<ҷS/Ceҳ~dsJ)+,H8m?*p&:r8ڳb7 _PU)֕<д%K^wP@R6 N#3Bp>rNz+\hYNZRS)7GO]kIJ% e\ͫp;w بUgJIqժSBq<֪Ou*yUo[R^DЋj4^!tȉ)Rw=Q^'9'm0NJ{'52|7Y/E{z*?Jͨ|EOSHjS6j j jnT@͏WMRpY`^5u&RGy;sh// Z~qjh׿GI0nmӪAkTzs*(墦M95̓A$m%tE]17J.cٷ4C/R7G~*>O\NTWO2/ҼnIB$G}*Kp_^Q+V\OOYY 7y>OSf$fAꠖgk`^B[QCy&iWW鈼R]0!M@)+NN~ O [E݊>9{`VC7$Ƀwִ|pkLJ"so֎+WMo[Y9[:tFt̆u챿Don蹶H3Zxa}kGOq[Χ#/k$0.ʐݦȖ6ƅAc ިmBV_άgZ_[i\&{Ma+cs;ÊBcYvtu߸mo<r:͢p[?bXrcmI@yvIihfȔCws,tE=T?o?@TibZ`Zev-s51o 9&S97v U@y?_Dʏ]+.8k-s+.e^oYq]-{">ې㚿8%/ںRt98zݽG-{ kfΞ_>_5o|g[U7M.3zC4P9++>p>t%T݄*ysmͿ{=m+gWWH߳5zgz.l =3n_VӲpnO n@_< yA d V  xݚwEOWW;Q$H CPCD  &P@e] (ALp%;0DX@ zݧǻNUuu N9$?g̷1Ւ3'++Sf)C)Ӑ󤥪*骪9V1+J8h~2:k{v J9cezG2%C}Hd4Ew3[u)J)oh]Mʹ$Kb(ğ#^ʺkI eHU>Nz{H*e#5G:5اχ<ԸLI%z*}tM)TqV42~)IygUſ'^ׂR^7B)WJDsR SP[anx_znx{J],5ϥOSs!Q'AU@Z&9-T)댕GTc$p-d m)}x*MTM~ [+i2pur+%tO;MðZtH/m ~fF 6^]< ma L;0+I:y1<h\r7V ^GiaͼKq[MqiRI+ܵ]YM}Ty(? ~z1K*zH%3[&ml3S&80ofH{2i 0fm%ᥰ?X{hrK)ulΔȏ) *-ûX_1{Ni˚~!n%sMT ef?wNHYdJ&5$ˢe۹잕do=ku?ۤz "@ԥOK;Y٭n9fg҉}},]ݑfTit^~IQFF*6SVJ1_EXs$'=:/[jՐڔ,=|y{L&51yb'8s Hw|Hԉ{ږKn=]iAa9.6#2}]nZ[!YD(qwd3], K`~IR\ dZa,r. 愚NL7p'i)f( }=4q`gQ}6M&Y7TSN-3H?wÎ:# ܬr7Eܓ0{u}~wgjHcwԽ_*{}(7+&=`VE Vq!{R[7Yln]3)ۆnr߼m[ٻyl<6 oa8Yn"hG=gm'aļ+0vwo>5ZVOwfǎ|Nif[poכ=j7K!uAA-8,>vNH!FqdA;s6>(Ǯ&I@Ut!=Wc>hmN4jio6ӷWTyvm%UYfFnlJذoT¾E?khN&hÉ؂}wF5TY#xBȞNk`?`"aN'i<ͳZAKȬmD3苝ȩhv#iHu6Vާqj6{; .E)ξj8_S ViY Kd2r6:q'33AuXf>dQ^%}طҼD錾>ԄtcnT_賻$.4[S<­!Y&S$b>KC.wMk>?`呾QtxGYg]2ثhfVpv>X.iY>unm}`3!m t ӔwB^=3۫i6 x7AfI<_xV#5޼L)kmh]:IMPnՃћ]eSά);tfw:5u }ɻ/bo_v}Z!5mht%z.V\cgɹ:YןSaog`ǽW3Im5ޞN3-XKJZݛ!]5 ;t9h{wK]#mC%^&9!Ϲrn-s/S%6k‡d8iGyT9)-C7Ku:m\tpKbx4 o{BV/iAF`0 ꌆ`"E򌇠 \ӔmAAf Fd x^< p?Y$h_ChzmGÓʞ1ZP"+Tc>,rv`HՁ3-%f݂mW62I\Vꌽ0ZRHwZnIwG2=W0O0ggI0{߆ b{cWݯ+I;t]mƩ/(lr-[L{ѫa0= oJN P{֤dmp0_;ruAfv!f1Üϝjvym|w,\HKQ9Q_fWO᫶<)lF4/o}{N6bs/>t_΋}2w_~ F9ʢu |wTE9L{UTI g٣ f0~FאR^Q>T DgL/ּeYنTX qTS)ƨ/R%>tUp~,.!$Yv^.كҿ1ʬ1&=9p& RGm6?iacα gYXwF* ttz,wiT>:zvt3.:Ϗo'gD,Me3Q^uK+(/"6N$K+Vluu c> ocU=r8V= ?DtqАE^k&Yd!%ɏy\ǚcfX?X܍ &;y}?A osG_iN8Xqrbhrbcjb46VƏyٜr3KPJ TIg=חS6B&M gs1-d`9mKa` 6!'~BNlB(j'+YMME!7$6>Ʌ5_+|e%iݰg:7φuKq@_ddDcRxNa1`Qg q@^CQ<1=6;gwQ^)#+8 e6^c&bmQ }l<U+o&k>6c-biw<8w5}}lL҇|l?n@ ljݻxO~'6rQKd4P'FuP?}r[K(mi~Qʔ}"u >-ZOhop>7o9;1,Rޏy, ғlI$(k&/AED#S,Y(XGE#C" oa `FpuX:#/&ȋ<ym/.KGrr9`0wf@>g>?\iC>|jklbn7 ."͞Y`?e`'ruu&XOٹBff$=nr&'U[x${\u};a'޿BۚxJ0X5VlAi$+뀤(bkfƽzF<*v/9h2yzǚ5u볲f;RiT- b曥ү9\PҎGJs^wy. |cX[m-l/ owa.~?)7vqhxG g>?}eW_xg0x xSO~ xAh F ^/ xCk~ ,__i\A\`2lD3-ȱb >df܄Ə-(~ ?_1Omx;ށwq+V / 6qi.Xy~/E.\_2<ű-|my[nޖfiYZntY/w嗻]E5_*|5"p^MJWٿgF)fxܿ$pSdȨЫ!»B"EކwcBw+s]ඐ+E!»B #U =''x/އ_*~ > \gUwaWG8܅{BD>>oH}ُ0x I< ~dHy8/uCD/ė"CDxSɋBod?Ï~o{?[3q E||-p rvE7å=g>O<\#e3ߞ?p_ÿkX[xy5Ї9404[gbšYW?D?JsED +7`1 s ?7D"V_pm ?? /ٞ{?eϿF.|GTaγ^yڳ]n|ٓ|?9{8_?u?;s ,;_ƩXW ` +,pCe`bFL-̱Cx3n¿aނGcq;܂Omx;ށ8? [qIiY,~>N/"ރ_{/U~? >owa.~?"wO,Z:Xx? \, wxA_,g?xb|\h] ݋=9)ۧcWolE[K > ϛ mxyo}y:ǿw^aJ ]?Ϲ2휿xkե_; s2f᧱'^CWn{[jA-hqO *,|Z /< gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gz{gzO !\#wA'濮IOXXϙ0Ͽ _Kan \dיq;z.9̛ p^iUxu<ϼk~ºvf ?q,، y0o^Nυ8"8|´GυÞ-nϷ?s}^$ԚyN9?Bէ&!r3[d:ZxUF#FAs?s?_5 Wq+W۾{>r;ȡǑ<;u^ν ?)=H\;,b;m+=xt)ۧK~JN mWo, |;|k. }?o?)4sݶnX{Ksl.$_9Co81KBo;>%V+I`+]JW~+ҕ_|82\G+Õ_:ҕ_ʯtW+]JW~+ҕ_ʯtW+]JW~+ҕ_>\V+]JW~epW !8!8Mo a;4« \<#sn[#{vι9W;eys^朗9eys^朗9eys^UrpëG82\pL=y`q5γy8YXdށ o`2hd`$xLGK_|ܫ;{s-syjSϖ e |@#.V~{ҁR 'N3-%\'޲pU[g[f́oh;UY.8- ?J{֚f~_kךf~_kךf~_kךf~_kt6kZ3̯5kڠtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtNWtuEPdj2l2lj}x갽g+ oX2;ί3Kr\ 5$7?wzgwzgwzgeWW%/UYq&1)f*}s7E*3oe~"wy37Wx~+x?>_ů7p;'~ć[m>C>?.S $>>3~<>cxOI< ~ xAk Eb| ^/E 辠Cx3nG?Ï~Mт{?[qLNLYw<~"/~[Kx~Q7 A鋁W>7ywmk]/ * 4pek4y/ |__/&p%^_g3yn_)2~i=^_ ކwcп.p[uཡ/2xKdR62ދW~|_ov&>ovUwaWG8 />>oR>CxQ<$xb?2~)pq bRcR`7 od?Ï~o{?[3q?_/=|f}Ͼgo7}>f}Ͼgo7}>f}Ͼg~з-o} ?[A~з-o} ?[A~з;.;V03̱W/rd]M`L1 *ְ lb D ^ &b9wwwwwwwwww_.Nj4xWUF`92 anu|kX6mޭݪ߭jݭjݭjݭ֧/G_ V03̱߉.Nj߉#+`XVWul`[N`:uԩSN:uԩSN:6sn36sn36sn36sn36sn3_ _M/W> |_Ug#ghdh<9'rXeѸ=Ɗ ??]/x7~ 5r;gYxīj]n|1  x#?exm5~+7`UZOx3 ލOVb QlF]1 )"ރ_{,U~? >owa.~?ߘߘ..p>Xֿ6 ^/v1y.R+~o -߶wk/rW:_ف+ /;pMОx'xSCbWgpx0V:d <_xS}W`l5[W~ ų͛ gxmy:ǿw}^WG]]-}_;\>fx؋n]U4sl>ϿI]-<τϲ= 0Nv= #_O^/<{6E_<~)ƉE['t= 9+⳻tm7]Mvӵtm"|SdAc'3 I?iA = p?+^m"EE0n7rWG|c 9šʃKZ{^W_x0$ÃaKB/*a _}\3 {\Za x󄉊'd'L>´yZ0'VȨ "9mn 1WձEa;(lzp8n?EȠ7ۮ*Aυ~0h4 >Շ S1?E.Ux+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ܿͅ,0N\WO^\= KB/8s!.M-|m6:̹ _8ϙ939f2f2pdɸ4>{qL^939f2f22\xxLx1kb&;000a&#{uA<[p39g&LL΅ƙ 3ޫ0;0A5wts&p.d``98+wts͙9wtsfonA\8{saBfo.^\aL9L]~tԅmS7g 䵁p5^ ;1;1;1;1;1;33Wȡ  ?~OJ? |;ka{>V^\)ۧK}<&*p]<['^77Qo,=Vo@y[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tEW[tuHyļO+šKr\W//?+-_xWd[:kW۾;WKcDƿXO=W:ÇuX:6-lc'p>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>ws>wYr#ӳ &b9Ua/> \mV03̱_~ο焁#s &b9߈ߤ^Eu:wEFu:wq2AN`P'z ~ 2XƠphxoT''XֱMla:\}sy>yyyypETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETdHETAETAETAETAETAETAETAETAETAE/=U`? h}iOwǬ/=}UD<~h&94sxOx,7E^7Ox3 ލ\+x%^W5x-^w{Ox= os ,_YVl ? Llofn [xo ï~_ovO&>|T} \:} |~mpG!~xb|3\hm߾^WqoO=۷_~}x[ <߾bo۷ ۷X+~ } |[۾tUxu*~6!~x no߆7o?xL-} lo?&gC-X+~?ibN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'ڝXkwbN݉;v'T 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4HA* RiJT 4 4 4 4 4 4 4 4 4 ! IeH*CRʐTr#HF*7RʍTnr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F&72ɍLndr#F#sɐLd2$! dH&C2ɐL2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.Crː\2$! eH.CrRȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB2! )dH!C RȐB|(C! 5/ |__/&p%^_g3yn_)2ᭃ^"x" WW,"W,^U:~7A|ek+^~?#So>?K+p>?]+OE>CxQ<$xb?2y8/u_q |1^/E:ƿqXM!Uƿqxśl?Gcq܂Omx;ށwq+Vq&NQ+./RdKx~dUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;Q*wTUrG;QwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;jQwԸ5qG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹusG;Q:wԹ3Gg:gJOp_WgLB}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}#tG>B}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(G>JQ}t(Gppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhrG;&w4MhqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;Zw-hqG;ZwmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;6wmhsG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtpG;:wtcƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1cƌy3i̘1t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>Nq}t8>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t'>A O}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>IIO}t$'>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}Stݧ>E)O}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>MiO}t4ݧ>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}3t g>C}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,g>KY}t,gفE. sϩ>sϩ>sϩ>sϩ>sO!EO!ˑ `)fc[_ֱMla;ꏪꏪꏪꏪꏪꏪꏪꏪꏪꏪꏩꏩꏩꏩꏩꏩꏩꏩꏩꏩ 4p9^ ,G 4 anu|kX6mP};TߡwCP};TߡwCP};TߡwST};UߩNwST};UߩNwST}Tߥ.wK]R}Tߥ.wK]R}Tߥ.wK=Q}{TߣG=Q}{TߣG=Q}{Tߣ3.g> aE^WFQ{e^WFQ{e^WFQ{e^WFQ{e^WFQ{e^O}S}Tߧ>O}S}Tߧ>O}S}T߯~_W}U߯~_W}U߯~_PT?~@PT?~@PT?~PTU?A~PTU?A~PTT?!~HCRT?!~HCRT?!~HgUVgUVgUVgUVgUVgUVgUVgUVgUVgUVgU?a~XêVU?a~XêVU?a~XêQGT?Տ~D#QGT?Տ~D#QGT?Տ~TUGU?QՏ~TUGU?QՏ~TUT?1Տ~LcST?1Տ~LcST?1Տ~LWU?qՏ~\WU?qՏ~\WU? O~BP'T? O~BP'T? O~BP'U?IO~RT'U?IO~RT'U?IO~JSRT?)O~JSRT?)O~JSRT?iO~ZӪVU?iO~ZӪVU?iO~ZӪQgT?Ϩ~F3QgT?Ϩ~F3QgT?Ϫ~VUgU?Y<>aދǞM$MN)$@S!IJ7ZYTX{ey I3jg 4ARg΅p:+ $L_}yF=g/ӗe2}L_/ӗe2@/ @/ @/ @/ @/ +r=m2Lgِgg*wݲCv.9 E|Y"_^D/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/KRz)^J/KRz)^J/KRz)^F/e2z^F/e2z^F/o+pߑYn3ln!;eW6hmڠAk Z6jmڨQkFZ6jmڤIk&MZ6imڬYkfZ6kmڬEk-Z[hmڢEkVZ[jmڪUkֻ;&+ ?V~ yf'|}%w)䨯/Ke|Ue%^IW+Jz%^IW+Jz%^IWҫU*z^EWѫU*z^EWѫU*z^MWӫjz5^MWӫjz5^MWӫz ^Ck5z ^Ck5z ^CkZz-^KkZz-^KkZz-}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'}'^Gu:z^Gu:z^Gzz=^Ozz=^Ozz=^Oo7 z@o7 z@o7 z#Ho7Fz#Ho7Fz#Ho7қM&zDo7ћM&zDo7ћM&zLo7ӛfz3Lo7ӛfz3Lo7ӛz Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+Fom6zFom6zFovz;Novz;Novz;NߝݯYnw,,[.[vN%G}|A(_/W,;zAw;zAw;zIw;Nz'Iw;Nz'Iw;.zEwѻ].zEwѻ].zEwӻnz7Mwӻnz7Mwӻnz7C{=zC{=zC{^z/K{^z/K{^z/K}>zG}>zG}>z?O~z?O~z?O}>@}>@}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>HA }>HA }>H#####################ccccccccccccccccccccc!}>DчC!}>DчC!}>DӇa0}>LӇa0}>LӇa0888888888888888888888}>BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Jc1}>Fc1}>Fc1r,d˲!e*wݲCv.9 E|Y"_e9Nq8}>Nq8}>N/g&+ )rِggAO' }>AO'I$}>IO'I$}>IO'I$}>IOѧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ3 }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}L>myfVr-;d Z'Nh:uBIZ'Nj:uRISZNi:uJ)SZNk:uZiZh:uF3Zgh:uVYZgj:uN9sZi:uO?-l\q?l\qEZ.j]ԺuQEKZ.i]ҺuI%KZ.k]ֺuYeZh]ѺuE+ZWh]պuUUZWj]պuM5kZ״i]Ӻu]uZ׵k]׺u] Z7nhкuCMZ7njԺuSM[ZniҺuK-[Znkֺu[mZhѺuG;ZwhպuW]ZwjպuO={ZiӺu_}Zk׺u_Zh=z@CZj=zPCGZi=zH#GZk=zXcZzC 7zC 7zD'ZOh=zᏕ~8ˬg%w)|SM7zSM7*?E+++~w{/ȁBME,,,3[I\^R3gʿ /ɯJ\E_W_oŵBuy+oUܖw=q vk(ɾEk_,!7d?mO89|%;Wc+ϔ,?3S|q<ߥx}dooK׬%?#,x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/z/z/z/z/z/z/z/z/z/z/z/z/z/z/z/y/y/y/y/y/y/y/y/y/y/y/y/y/y/y/yy=[2?e9{;RVm]gr3dk\Wq9{<Ȭ^~/{e/7+/%_X+neQ[+?JͿ/}*/=SVOxW|/U.՚ՅrY7}OOl.|26.w_5enJ{ :˾#X|S~O~_{, yEX2WQnU97:Y/dl~97V駮O]7fOQ.-{d{d+>_!9(K?G19$q9"G|k|MM[OI9%匜sr>o^f7Z+v]}cWǮ>vO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}W'>qO\}=${ eH,CbːX2$! eH,CbːX2$! .zOYYO3Y~@~L?-?,?g[YՊoʲV=Y~CY.B,>BQ Y^)b7 fygʻw/)r*>9gم\){3x<!Y+W_ϳ_KOgsy 忓^Y~J_e)A6濷MYV&.Kr(]"?+Uu9"G|A(KxExM7o/ 9)W䴜rNߖ'򟜊<-ȳ?(H˿)&.g]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"uHE.Rw]"b? BCk->\]_O,YF' ^={BmAd (BZAT x.q&:/3]Y D%AIJzRS fiK/ƫ,*[1s_^^ x_Yg/ }Vr^+ BM$YUK./e~̇W<{gu5hϚw>yTԆW̲O}8kȃ(gQ7ҧ1M fAМhW-]4Vj[{5x}뼢G16jx-8?ڙ[{_ 7yNxHG"Zh4GyG8Nw>v֯fYn8b^o&o{Goe6q| *+Nv3nzC;wdz|ywixOaOy/׽py {>}`=>m81@ <l/:!p>la?C:\8#܏0ߑhQkg1jȬ?cK8y~ =ގM9ާ&D;w3s${0YdSx4xS|NtN5ϩfBޗiitO~L5,g靛,ng59|b\Ǫw,Xx5 Ξ3N8qǗ9>͵Os\i:|+_]ox37xCEt%^,Yl)h^崮J:V9[~5$_C7v$ڒhH+ $}C9$ORău漎Z~ fy2alIQ6Emܔ;yB&jpKi']n:龻3aN(/3ˠ? ^gϰgx6;ߌ[V6^lMj37,Y4lg|o7;j'viW^pwѽ.\v;mG؏=vc9gܽ|wO^؏64e?z!2Cj0|rGi<Ϗ: o<6fs[?A(, B">#ũ kx+H B]A=ű }A(!A"'%.Z 8U׃P>y~pryA#P|bz(TPB]УEꉤ xKq3= +ߓ Pv@zXvP1})+p)gqKQrt*Ň)]sz?w9Wm_u9\@9Мhy 3L2Ά5t_f>C?!gP3Gi#(G5JhV;Z3y [BcqK8S1-{?7'yNq3pd='˙v Ϧ\ 3Ɨ򦩟Ft0w3cwo+Ypg˟lȟ~/bz'艛& ͵sy8w|c> |~W5/}!̅z{7v/@K x&xXb}۱%<\Bh>Ki[RXʃ8,SL2,98,c}Y{+Xf%+iY*pWK37]kg-;'2p۳ ldѬ6ҵѽ0MM>SqM54xi8^ffl;U6<ћw&ޙpeѽvNw:Vo;Ͼ7b>V;}퓻~f3<( ̃z:azϱC9tDQGaߎqqO9$'yqRI)?y~Zi=~gxvl{γs}z'wgq_ebWU{/w_w^:-?xO5}4߀y݀My7oo}hKq??ǂp0U ¡!A8.#A%A8뻣ŀ |O G޽r u;ĥ 7>?O}uF>x/+bWwj!- \00 QPNA} ^ …r^y!&GK Hz<>\8r Oϟt_$Hu"g' <$>u@)Oi~>,].*] f1 Ϥg{zǫKxV%ݗTX!16xzFۻ7vvyaͻ#;3-B˛jr>wDw3aߥ={ '{p%߷7|w_ڋЏ~ >קjۇ54h(g 0dփx6H`,w ;x6;1PCP;9Tpڱ yp{yޏF9Q5wh-gѸq=F1;X{=VXskKXX}l>Ǵ}'o'obͱspc樟Cw؍3CC )Fbp!7| /^,Xx~Ocyw1Gwq3>Ϲ3Wyp7ϳyl\`'W8mg_Ӷ/!. }-.,o t!k_"E/#%/$I0X K/ Y̗ż[ oR[jv)~ׇѷLrVګW]˕ޮrε9V洚y'/D8~$ITv k>5$I8$Xzuש_~=[z^`l0 f{lNt&KV.Y]ȋ7pRIBo]LW)b)b)osmmI&{ VT"ՙO©zg9 gګ,eU2,3>d_ߎvlvw;y#Gwe#; 룮t#i13|1{tf{lq=Nq=·|8;;aNػ>n $ 'aRsJ)5;6|J)5Ԝ)yDODOi4i;uln?3?{Yq?˳fq9ؿ/qyi]_TQEٟ7󛾿qyx8]wų+;;|ų+wqWytGWytο|^3k4\ hqq0üu?x'?a ㆹ{=|nݰ[nߔ{SM7y4[fq[mhEq۾n۟t6NG?ϩ WPY4]ť W.DC?G|9_;WL<ʗ,A< .b??0ȏ#\p_F ^EBt]zTͣjQ1q^?QM~">UY4Iڊ/⬈"Ί8+"0Ox? h^!+&ߊC1\Lbz?C3{ Ź~%̣y0v+q=UvIK^rKVz_ ~)(Gi=J ^S>]ve`]֬ʚUY*x59zn-\Z³rW}Kͩ j  Vq3nOC\qC3nh F9>E=ʻeQfݏ2('Qfe6 ؍lg#<x6ơ1lgc6ƣ1 MۄMio6oSϚԾ4gO3`3O3D3{ڌf44 ihWsyoNs9qo[8oἅh|iɗkiN-ͩY44һVzһޭංۊ'x|*ޯƯ5~kMKZkݿ--/ۙA;3hvoǷvr۩oc{y|󫽾յ Xo@_p6h}Fv͛hFs4tQv#iHKGZ:_'p$.pDs'Ag;3]⬋7Ms~oo68tűj6̥nfMnrM.;{Þz]=ߕwq{?ٿx4/ վy[noÇ>>0g}ͯg^?wߝgӿ?_]0cs!uCa(oƃa޵pg#4͑F`0ўw` >kGpg>;?9^f>ޜ&4'2\&<^}3虤d>Lg )<s|?7qj'<_]pK|I4ϧ{wcO|t̠q.3`͐;Cf˙8}Y̒?K, g6Naus+51rbp{]uG[8[qͥg.w?1O||x/_ٙe/i;'{HE4/2Eє`ghH;^.b-e]Zb~KfRxQM"$ҹޯc oZk]Zk/}D:Z~z3[Oz od>'Ӗ&dz7z/6;c#@=N%&~lMTWL54}ӼirpK7t0ۉ }2xAo͸ou=Lz[oc+?m٦6muLgҒ{,}cY8fٻζӾ]vϷa;ao[gߺ֬w.vw#oy>~wg˖mqexA}Ȼw9s(ߎ1܎{NurC P`wxWOoMY4@"!$!ZjW:]۰Z,9А Y] g {+zWz{o\ˊ^>rcA,y.oQ~%/Q^c:( E ^Dy?c7ٽWQZsmo6|}>;엷~ 6!^Dy667776㛝[tQ^gl-ʷ6 6m7Y(om|F?{f݉:ß}st!|ɜ3E\ BB|𾾿߶m5)%)wy|K'Lf<"Jɷτ7 ?S5U&-/NZVA;*OuT|]jU]N>>?B !c<Q89ʎ_>?& 9:7F޳/pp1Uj :*0R9."L3U ۓLe+lf҂OԹ>-l @* ]˩H%R9ϤSy]PUhAS (vD.^B^s~NÉFF_2KBy)! |lK(W:w"%SaѐD3@@*^ @UAON+*.ýX3kͭwhP4]bFyueJU Ch/8"|9h?1K@n`)BZ5^?u SIO1m* !SZ|:uS^z\i?ֹ=dl,S,g]g#x6]Zs ,5b<9c ;;.|+&)Dbgi铐)mJ Z`se3cЫ('`[Sζ! H e%hP3Z`SuW=OsCc4~M9A WOs8 QΠʐg!y½N8"Rg3\Xm=;f/C;$? ;=8+bZm?1=}u5^e 8a,\%\-3ul_";9t<3Y +0rYgēzGa"ԢjNR"#pf3 *΂.2F쨗d_.6gT;fB']𲚗A?b4p^dqNi='6`Rc 1cdz'ϊEJFz"'}KĐ>eogMCDHw>g`XosĻ"nfo~C'YC׶3#jvRuvh/,]՝T4+C8X,.>Ԧ*G)42aM3:R D)N)6_/8.n:ʘK#{I[kg wy䯤ȇe'"׺n#HB;GqDž*N(jʻ()i& 熣)P7,EZn$#/wѭyY$्Eo{*jCO9p Uq닋ZXWX Udⶪz[EvH]_s /U"{lc u'.T)WMo"vө7_atU䜋 ڎq0),h0n1ud_ٟ@$!Pr9A$G1Xr9@N$')Tr9A$g9\r9\@.$%Rr\A$W5Zr@n$7-VrA$w=^r<@$#Qy$'S|A$_7[@~$?/WA$C]QB)eSA}*AGҙt:+Nsҹt:/O ҅t(].NKҥt,].OW+ҕʴFCј&4uќt*]Nנkҵhv&%t:Kף t4݈nL79݂nI[mt;=Kw]tO'n:Ni ݑD{GT3t]4+ݍN{ҽt/ݏO҃z(=NGңz,=OO'ғz*=NϠgҳz.=O/ҋz)^NWҫz-^Oo7қz+Nwһz/O҇(}wOΏq}>Egsy}D_Wku}Eߦw{}~D?Ogs~Eow{D_owEfs1dlfb3Yجl66;bsyؼl>6?[-b Eآl18[-ɖbKeزl9<[Vb+ YbYrVUتl5:[b bku(.[6`l#1ۄm6ccl %ۊmͶa۲l,ہuql].bKإ2v9]ɮbWkص:v=nb7[ح6v;bw{ؽ>v?{=bGأ18{=ɞbOgس9<{^b/Wث5:{bowػ=>}>bOا39}ɾb_oط;=~b?_د7?;b)=N8s.%W<#H>g|N>|A_/|I_/× |E_x#󄧼3W|Mo䝼_Guz|}ߐ&|S7[-V|k ߖoǷc'I|2;x/x?w|agA w|Oߛ@~?H~sss3͏qcqx~?OSit~?sy|~_/Ker~_ůkuz~o[mv~{}~?8Gcq?şgsy_vpG+Uo;]?'S_7[?/W#\ "` !|!!Fb1M.sb1O/pqt :ObXL,.KbXN,/V+ʢ&BX$"u\bXM.kDCtb1J+ ĆbHl,6͜b\l![6b[s3Il/ƊD'Ƌ [Ld#v;^1E~1U,Ġb1M*v=Ğb/G+ā q8D*#đ(q8F+Njʼn$q8E*N3ę,q8G+ ą΋K"gX\".JqZ\#׉ FqY"nNq[#AxX<"IxZ<#ω ExX"^ΎN3o>xG+ć#D|*>/ė+F|+ߋď'E*~?ğ_/O|3}+ggg3Π?////////////////ЏOԯ;~77G:ΐ3ooooooooowqxO'G'ןTga?wO/oHWzH*RH_Jd Gȑr&9R.g9r.9G+'r!\D.*%r)\F.+r%PF2Le]f2\E*W5r-ِ#;e)+\Gr-7Mr39Fn.[ʭrNn/d' [Nd#w;^9E~9U,r9M*w=r/G+ y*')|F>+%|E*_7-|G+ߓ#D~*?/+F~+'E*?/rUKZ}UߩGY~UO;p7Ѐ<@A0",,,,,,,,,,,,,,,,Ԃ08H4YEJjZzFfV:fA 66 Fc̓--mm탱AW0.L`rS? P0L v v v         NN N NN N N N  .. . .. . . .  nn n nn n n n         ^^ ^ ^^}=?׽(ې3k@jWH7nA.4[KC]Du Duݨc'.uQ M0m3M0Kt3ӅF4JQrk\%sM?yn(~u[I0y|){w{lZh(;M3礻5'cèMjO+:"gujqH+u"E]=FO5Pvg;L5F1ҺlT*]HFkFҳ5R]#uFA 3$$ġO敦k*8,B(2vה)]mZE6=2nBeQ۴gҔ.`Oa`]S'wqtl$MMS{ZNwo%lh2eEohz}ޮ- Lg!7eHp:YC2ՙ3?{Rz_ =݃=&%ImXPO`hZYUFId!l;'t#J@Ы5Qײe|lIA4F'ct.Fbt*ѹK~%k#R|M'M,_K^ zŵD./ΙvO7Ԓ qHrxml`Xk'cQc'c[c'ceLj2j2j2;7j2j26j2֛7j2;8;8;8.4ƱV˭ Q`Xy 0c0x`X6;%hD."]ĺHtꢮL. 94hr6Ɣ%:>zMfW4+M&zEB3+4,t"ED.tBc#5F1j NCjPcLbz1S^T/f3ՋL9s4պ&hkXc#P*qRFJ4RT>oS}ަMy6mT>oS}ަMSj }ئzצMa6՛8Շm?OzlgHPa{W3`` I!u ^zmn&`' 4"@5@?ku|;R@uoKЯ@j`n%6a>0f=,% cÙ昷s7Gs;Ov\v @Kth}::X,A=(:`XV?7gaXyA;M;9`mC^Vu ZFP׺ua]z]k]XR9u=\܎RA9H!c)F"J1sOT:>uCFW0Ž`Es"eC= |37_|d3_{ "(_:)^W":*|"{,Ί ŞâˢaOFifAEثQGػn5 ޾E`&)`0 ``B /B /B /Bk,?#?#?|#7|#7|c7|c7Ƹc?c?O7|O@?}Y) :)g :)S/tп:W:[:aM 2Og~S^h_}h`| k`| S47~vv`\ہ_lgz'hdya htLh&4U&4S'u]'u]'4Z'u~ R:7njx_l&:Dz,+4KveNs+yJp$8w3Ias%\Ip$8GIFN ' lq/xׄҐ41&M/[`=M`k'X'mc-&u~]H 8+IaҀ ws;yNp.' a?&$؏ " l6m]`W&}Iݗ41oM[aL | vQ;ML**[ f``' tLCx^[rJ_k7 솧BΧvޢ _L|1 ^ښ6~:Ѓ~:J:Udѣ`z{v&vޥR޾!O:!*Gm;*!/ƮKJh2qiUTRJpkHpKHp;Hꐦ: $z=> eu$m$uH]ݺjm? ո-$%$$yƶ47e˰fJ}~zFNcxcCj15f'QAk Hnl$76۳<.1=4n9xB U 0Tou8l-yf9`lv86qKJ%+ZxpV8ޫ~Yi Ѐ8VSG,eۃԂ!`a 1:81:81:81O'F#Ĉb?1O'F'Q}Cc[k>SChhhh$6TbC%6T, ؐI uQ PZnT!ZaY: [D[ E \ԖFޢ-6lO sa пտW>zqZiYS !1GCb#bC(>ffh,Cm71Db9&sL$_i.:i![/i4OC̆9NĞ]aа5bO Vu!WiI5,*.C+a8mpi;-l+^an9Z\gvyn *¦uxe803g8P3xx_:uv4;$]~~ק_(1`KԔuSڨ5.5DgLi3M(ZSc@ƀJaOıV''1RcBƄJ bBJ˴.P%9{)Dq͌-ϤmqI6uOlﴰtL KajZY*zu$q[n5 o3kd2eҷF Fs6zh,mm j9l!Dl"DP纂'g'QmsɁO%&--c:Skm9EAM՜~m;h94b0% i*jUS ^-S?(3|1X^b=JB ۸lb*Kx#x`#x`#E0"z%"yWXoD+D*D&[g_kϰDk{Z7YhM1zՂu"P?C` ZVSXG Bx8-+]*(Ϩ>AtTԅQ9[2cS93^GV1 <-}A Y!Yz':FJ7j`ݷ"m\guMŀA!["[ _=%"el1vd`2iKo$N|D5I !niZbCƪ6>r140V YkT!0*Y5kwSP֐˜RKOKT|F3P`GAY4[B%0RVҭ!IeWsLLE$.UJmZEqLRt24edؔ)SS&71M njpS75F?GF?GF?XhdbF&Xh{?68<&gPT-;sZZ_tZp_vY%.?kfim;qZ[:`'N^3GlMenEֶw}35dHVKm&m _(i;u0Ra0 Mn,l/| 6۰mZ+6~`YiFTarڈ ! .*s NCMXi&h9]2+v*~*z* 6lo@~٪axlӹ\+8_XY!9[`Vn+ ρ_~2U9r~p1W#?dX]/XN\K { caw W  T0*mUdg q٬Ϩ`CW+Uݪ@; {*,7-]53c}lFgl=t2 C@dSUAT*X5Ui!SB_o  PRY, Ic6 4AUZ Jsl^Aa)&@BRJ`!T *.`'ŪWgNNHNvKvհxoBgU-6^Bd'rt@iR[[LXQCBE to챕~Hf e -^F*#=61o::CS'w&tt^Gd23 j"a N2?ӥ{*aN"{Q'23ľixKkZX,d*\*-Jli*TDJ[inCf:e6"ij)mش45MfkyalEæ:UsouDbcӪijV Z>y SmrCxs'-b|G6 6Ӄ0y=/I667M+45PΉc=us''f2)[_54q!SKn)t fƛS,{|SfEi\o4\csC#侵jg6Bnd߈V̊ ;M0olb{a㉪7z3#`]t&ol;LnJpij8+4:M- +L/MS*i&k+P.V) =il~oya.vol״ag3s~}632lf83I}63g3#g3t~krܙb?kvu}TmQ%Lݹ:_|Кog fZ4F3̦;XL?/9QKδrgbv1O1bw|:31ʍ΍:IUZ%7@n4ĦLLizNl͍ vnc#'[<6^76 O?Mn4ɹq<΍\Fs#׹un:7r΍\Fs#׹ir sɍ̍ˍˍˍNˍˍʍʍ͍=7"g73 Ѷyfp3kFF s#wHXn.7Z67B^\csc'5Җ0F_IDѮJUFM25eݔ)sS\#YHVa$0U*dF}Z*\F #WUa0rU*\F #WUa0rU*\F #WUa0rU*\F #WUa0rU*\F #WUa0rUZw&[3<ֲ3ߒh`ظzy2W+F⊬'#s\ad02W+F #sZQ2rrN]m`]6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-normal-italic.woff20000644000175000017500000057617014502137725027635 0ustar carstencarstenwOF2x ^f`$f  Pg6$< @ 1o 9[D)(#FdGu]K&VC"'+I$ݶ]vA7QHuu@:AZKP2ȖbUv /OU]Ad.M|@n.oR"x`R X@Q%ȧdJ4RQM(_T+)++TTVUׄT+%GM7T/jl 9MZ2%mE6 %@WRkaYf÷줢]=a!qGҔ#G~a%t|oq7S2lU*곖㖲h 4yjyi` ,tҢ|.StF|H)QK1Z U7uɄ8_ͫz @%'H-TR`-㑮SZOCz$YdiCW-0vȑYo܈6mě im^tu딹E.2AUa_>j 2WM\fQ@[z(6UE'o=Z&ķ Y-MQKŴi`䛎"uAhVRɎFV^J̒x8Ij>OxEȓjQ: v^y MސvcnؖGɣ i4 S1ۇ,,b|QD~WRƋ B tTC 0ȧ@!8E#)TG>;81;8V(w1GVHM*F+)@[*U%;cn|`AB >v7`%zskI=*5lқqms aD h Yr~*܏'!sAI=Œ6i _ٶA̳g PQŞ8g~ f>B>"*eiW\|>=wOBt)O}'א#V3>Kjn޼9AEgY6!4LXZ2Lp?|+JkvbPatnjv pNjjN"U6`h>z9W ٽ a{ިn"(eFe7BqeTa%GQE,8y^y5N ([IU .y Yx0ڋ% .xa7?; =\­:Ոl~Z2FLj\")R4(#R&!|VzoTZtF)kjmPM/~`|vDBLbJURs?J邮L$>CIh\L$E}O`:n2E;ib].0 0dQc BUBd2IaaTPճy9s잹PBU"F9s,\ U*Tnbx( @edQeMePY1"`%|—쨌a>C'Ԝs1Ous`ҔVwg* [2{ hvlSS)G{Rsр>c-O)"NBuq2t4@5lٓ,`.YB^ &򷍋hOsY֭7X +VlwC2q}qP![)j\8iwwU7Is%#i"/`4;fs;q]J5=\q7d^}F7LF=WX4J/4ek.O-; yEWoy0':Yo?=WW⿗[l<9j;V]>$"+:,f2bQP2yA\bWӡZ6O?|lY|/)>/N3 E1Lo C?L_R+6|7s_ Go?V~9/?Z%@ Y@H/GSW_D*MKc\-qycw^20~+Oɑ^/fCp-Ydi7vͯ,[k/hU)Ko7B4)Oxs`:X<4HGКx%UG1nnT$deեm0L],Yd*]M grԍSI7ˇo1zL6YDeԩI$zc0`Ā*Q #,i;.O#IS~unwݢ`Ȑh D o_{~~\'B!4iD.)E"lr` : <6KV-wUyŋf ل4\ڒU=3S'(HPA@9usSn#bn"sʕbjk{tfQ%V"׾!͒6SJ I42JF+gWdG{AHM .g|a*m}u Ԉ a.=V?Og///3_8e['SlnL)0 f--RJ1yyI^<yb\q`rO-LN$k)z~ Wd*uЭ/iwၨ AfݕU`l9*!00"99 @q*+@&PHHA[ #NQ8}zLH2F MWÞ ~so_vnvjN%,5%9h?$fŀVVtfvh"D(S#5O OX!5!Ss[jP1e0EEB~5 B`B/aKj]Z٨z0MDsF%E/ɠAP)¼s288T0EoѡiDH4(ZrƊ@흘~[>LEQ%6D)UL]p be<-AU/6.CӦqF)=OX%nNUYilʛMO.C.csxK'"bC0'!  b㘮3BB[[~ *q3b8WWuBPNED<0CD96۸uEOOOOOOh4Fh4zzzz(((Phm=>9$dQs%AKO9]fU|HP/97~*ʗ-qp8qL2[]#SΊ?CcsUZ).tF:L)64`fաf⥝`wK"Mb{ sc47"""&X᪦KRecD"S<)|۽8\\&l1 A8GH&+׉bmp5Y% D 2 DQ|E\ ܒ[T7sSb_H3@yq{oà$* f`,)Ce>ԃ->;M+) fcZZ@tG~]Y@^Uݥ]Pą;|?'i 5M$fdLghzx>܀EXʑA'[gFc,|"ͬe=C$mETɀP@ǣ?TjӋF0D©(T+2AM/SaA i6>+"Vl"6=S:{cǺD VJ$"=ھ伣~>'>, t"VKQibV>s,w{ ߪLĆhtL) pezbm}4"9JFb$F鄌*ѧ46owo){rn[ 4m凋'-i)hE(Qr5&_wzR|6f(E6z6~wf 6{Z$u+ B/kon o>,MN-k{lGt-LKoV7]O_)jz]F%w5:<6֫;ftF|;0Hl+JӒMx;K9(h4FQ !݇$d߭o(+.0YͲ^7" KޖaJ{^fv l}M"6b7_4`SIK(5I PR4 mhʙMz Z4irsN@DhUsC~< ?t5SU1!ai@@7-޹>܁u j]".%͗\4mo_\J'u&]4xJ$eVܘa;Is@ kI=&1<>o](`r4~Z p.EttwI] g\Hc4{WXlebV4P7` IEa,Q'm(84,A|V+˾b_)))" l0T zKxtYt"wvSLjZ!QiH|_o>OpFF(?n+\qJ\i;S QUm{}ʥD Y,|NaUFf~}q4Ȼ%}N-o ICiː&O{R8Xx ai,G"XD@ަnOH4ƀud(//\їTU4_Ř(B"/+˪*io=C4t?0կ8F5eԜ#`Zq!j}m{AC)V4KrIF6f)'xo}oޝ݈)BBa#8w,+|ogb!k+lgey!H )h$ o(%[- ""!k߉MC {*VUTUT1qE_ Ǎ:ABi7$O gcu^?z otFLD{sN%/,!EDDSgRyOǪFW*|9>[UUmUKeX[>zx A,HJyϜ}[ {kB0F!1aL>S8'cLLGM/L"RD1~xs(7+9WBoل$lGG;2,4sp31;zmoIA@.9uHZ:ư`L/_߲z[PbI%2p?E@M]Mtfscty$@`5pԻB!UJTtLr6P_B0>d~1aF ,on MP!<5-=*FaYF"@M%}2Zп=ޑX#ovJDžW+ ;~{$? OcwN\Dhg Ff3^'bjfnait0>?xYl}̀[?A5{"zJqygWV)^Jx.a ;B?ϪduO/Mha(#0A qⓐZMNZjUKz`SO3E! %GM9ǏG )XtX\0}X9L5lVN) DmO٭eb2o ^lxs6&G,OM0^ۜW/=r]d]j#bAb/:t 9.{<.EFjGܦ|ʰf9.Zohx48dʟTЛ8i5;e{#iڇj~ʱm:3P;D{^?5txRo%g-O*-WkߨԾgO:`oQc0 …otdWm#lW˯Ew A%h5bҭn7ny_?aM< *NT;nO8Cl `Hk0Cdi S ?e\Hbʥ>q3K~Z53m;8NpyAY/, 9~~EJ&+US׎U7Qf XoICTxu͘>3cd4oW_?ñ5Nx:]6|~.s^g"(̙lNy\**S3RIvɾqI1,'MךQTMB]]فi_$P֑{Wi9F=2Lxf Ytz`I"`phxA4[lS핿$ d]zle{q bXfi2:qW7hYt ~qy ]n!\*y} N8& n|% ,X\Q3Z!{Djq 34 ㇸ%ǾM90[~m̽ڪ{1*-ףz._̦2Q%D>Ӣ( gUϚH 'f@gla >:!%s^)#(+ "6...X.R3N–B|R[f x?7N|6 4+h(j5zqcL9c}A,&ajz&aZ͇O_ԫ5ZAFP 'HfXDI)7]pp+A, "1!$Ͱ%YQ5ݰ*V4 $TAD&Ir~zU4ts_V+C;v3F;菧:jʦ4f2زMRd%|2hn}[C5yx!kk[_|y R)~8dti#]ךo[B9ڡA*VKHMﶲ_ Owu|Όz|<8vxlzth)ji:6ch[1]i.#l6ȍ}-"> iX|%~qzxN[sQCqIކe>֧$I)2ԥJ01_qg*6$CBf䨶׃ߏ^3-+z&q[V!Fun'5 >#=Qh 6Gv@+=6<:f|ٰ~uMA[N(MGmgԁwz1Gg+I̕ZY紊|VH mEqZ]1yhً4> !R3M@"rjƦxޫ4=\hʥ:ΙG|*ƽ6eoH+vpC1bbfyڳv7ndڶ -г!wZ]oJw68͊NytB$2ڎ˃g`DEe}l;,(/8׾ Q11wt.w.o.:ޟ153aLo'~;zK\6ZO Sc %,.p>;=/{Ѻ/Mߝ6hgc51Zjޫ1M,>ЙbQ+H#\VvxX­W +[hI@KLMC$Oo)cv*3j$k@h?K3@h.'7ߜyc"Sצ\[ky. ;.BXCR~nN^i Z 6U'laz5m$`N"y%GϘNYN-@$/X(k=ѮzaSy3jW]xx[21( Y,}0aؐ'<琇j(U aCbIsHjV:tfӃ^ւkS&(h ЋɺR(@LY2*Wks 7r{&F:4kѪ' kp\ȡxp=&7<|䏇'#($E3,xAdEtï(Tiu|)D{_𡏤%=]P4  P0 )l QP1k-AR4r T=bqzU"# vi# hBMKNÖ́zn HۚQ۶x_1ڸ Q"r/(Tzs sL彊 ~oBOE(ywd@$UdέM4[+HQ25 l4?PQdsw:xjfQsEjj1}v#]n^d̪ZAMQ e=C\W6}#;Ub ʪ*([?i e0|ƞaO4ܭޯĈ$szHajhxjG5 mD2T)K n9UGh5qz-xZwA!&e2 6D"K C mkYSi0e) T*?Y!Ubg .࿵QVN lٵII3VjQP3KB2ڮ S&(i cHE%}ԗ&W!;ϑ5kqHHԳ=%& ($,dr=1>GmcBAͮTcES>v$VZ0ۏ'#($E3,xAdEtL1daBR7pȯ.|QkԗT@FoIQf%;Hya( 'HftD`bE%`p@Ͱ/B CV7FI hX%٦N+]9dDP0S,J%mo bX{eAp=|Y_$>bjr<♏KϫIJݢY,4"9@~C(4/] ߖ)hy`̷?G͏XFC ƺ+v={g.\O^nI Q,LUtQ]rQT"RXA\!i}Cu%h8AќfOR3іt9uv':ſf?z^dX0-Ll)@ e\H-/(C_j8]r@sTYU@KOY'M;ɼ_3К&HerR%Uo%88bWAR4r|:8bኂhx JjaZ6ew?6qtxq#@)}貏;_J>'lsLKy qA{+;VUUU@p۶%IK$0ov`i+Hb*NbLx*[n+N:{ )9ٟd1Q'l~cXK^/R$&qr!!NͰ/hDQDn&z „2.ҖAmwAh WDJUʣ>q7z[3L$d&J\ Ӳ. »X )a9@$nM7-ثJ4`ZPT֖muA.[H巤<0^p%<_s/J')j` ~!}a,.4B2Y 9 Fέ~WG ?Z2 R|^C r?=GH0,I%YQ50-q ɿ7ؑ 5Dbx*Mmh:2H "n"vY\JH:Xʷ |aOF܇-5cD.*#:NJ)Y|"C)Srr"V\U_c /6́g®k D0[aphxAdEE3,'P RB0b8Aㅤ\50-r{"݇OG,$HfX $+k{)3 P_ֆ>Q%@X=$O tr636Ε <& p.S]%<_cm9%+^FUÉph9jy^eEGt.}S@bQ5`z5~7g|e,; QK%(&;xyH~} \F̗>w0ҤP%.f „2.|z!iUJ]4iab;G"L(B*mus>̟et ն3+-׶Ҭ2үB  Nչ 8љ,mARۑS] g~\>8"L(bV+W0b8AR4r JREI)jaZ؎ʸJ[k#.O$K)TeDQK4;tVn6^kNr#qIVT-]q,(HfX $+es}lm)p U KT21? /~q4ǘ{摻=誀]UH'H‘s^7O?ϖZm zqLqrw:>oY*$SO^yZ%4%HY=1-+7glΤRO I #*栃BBvp 6C7C-gz|<ኌb#($E3, $+0EJP%YQ50-qE4 $E3,QU Ӳ7Ф%oO =u[ƫNyp^Wh @A$IG)8*\-݄Į*ڊoaKІ82F<O<ms Io8ȅZ+:NMjWgC% o ),ƏЅ"x Ŏ3Ҥc0 `0  PU:J2HQ#.qhx JjaZ4wJk*-[j.q=" @>{|Jel;'8Hhӻ+;3QK2;D E9\\5~? 8Hl&GMݤy؊L ݜJ(BBJ ́xCW_2Zw5|w}q'1b~%΃1ew JUƱdL<8JeLlhl 5} -= qlBӎ#l:[=e/X?l| xH;e<#|< yHMDmHC̤fI9.Q1IygQp2R)Ef5)ihY5F*blGZl$&jҁ.̹aI:<'jxqZ`ka*PӒ%;sRgS j"[|1iOPpGhq"%[VC^pBg`h \9wpVZ򿲯#oSK6ϴ~NM]#<5 MJßHC}8ۄxSd3P|,y-K(5笓 9:eJgX#{QY37.nh]+j{J"{|Cdi&20ySnYM]C:=*d2Leaf7X~hDO)1q|&AuYK%Eg/?/ c#hϢi~AC;Z՝[|5^q.!%޸uG7ӭάivwr>O`~5mFRNmm&SUmgW{ީ ) `߲]d%S"l'^,GaM7ep/>~|O=jȜF :=XL2@?|Nrqnv/1»_-sy4E!F:]ҊAW%֯funn= !X_s5s .$Y/e֔#$OU׵f+[de褲k8P:#w:ԣ>=NG2G8|ι) @.*H1)cۖhU\vv-N2|TjׯF||A&=Tŏ܎ eȊ^ePX[`IxL"=!2"-2+76ʞ 1HW;XdŬJ EdH%KM2X׳IӳDYG[ŝ zoی0Z4ׁ3MIQyl3y!|!~dO77:gU$XR"DK%Xj:ʈ~1ĶxE[fS5J13nM5)&PL"<ߔ.0'&6V,C7bbW@u+HyP'8>ܨZ,ClvP$!~^=k-7X8 }D$dUz"r nl;( wDycq]5 Rx"Kgʢ\]Ƭ)|*ȞYpDbjl5h!\#2j9GcaHc˜qF W8)KIW*S67*16+{wwȉe;==Ͼ(?C3WV#oã=9=c?+cG p7RE{,j?OUI)< c ,`}Ã^yW8$|R`0>4G | {€gϬ%{/|e>Q>>V' 9/#FF)iQc Lb4rGE@5֘7ry=܃R&cb>P̓5$9pXgM6nM )$4HU^" n""߿g3 s9sI$IfEepU u`?t#""""""{`x<ɽ7'؃ CzD$dz~`r(,_#/߮\'CsO:ϓǷ~1evqX?h;~󩒳:!G|x㽷 n̈eAt#繅In9FvʾR}>:hߌn$5;9TEK^O\|eU~+G=/nuг⼟FbBMI;'rY~޲Ѫcʲ:8v7/c|.fL4{q<*|7Y +֣?{/'L0A s]7 ےA)ut -a{ )εm|vzm1SI_t:LqD&ʢŴKe+6,>'N#Ϛs yaE6`08 m>%].#{rkt~֤p(>/6>gZ?uzY *>77[RHgH@m^q[~ 0D@ A#L"}HR>2Cm\1 JTn + K3j8Ԋ:fI\:;6Mo%( 7xZ 02i%_\5x| va$Iubj-]aeLfw F)7nرGyҋ^讬o傁}TWʮ +3CkrRnգCb59..i @Ab!#9f L00 2"!pK@Vzˆ7Mg(| #jjAD k\8ǿog~m; _;{Цg[%!Cg 8߀(Ɋiَ}Ӄ"f%c'=uq '8ׅm;x3U#sYTV*]Unj$Pu6~8 Mt12g8Ll f3̼sCءFGלUN9y~B˝+ֈؚ%I 9ҙVYVDԭ-J5h&J-hզ]]uC;ԙ|y<(?K%KNo& 1 J r ZlS쎸Ք+iKY|ͫI6;|!@)1SeFQ5=6Lˮα씜 /؛yg7t3٧)!$H9p2ϱC<mx6jT(MhhAۍCGfxZhC(W`3ydTe/'_݃.XlOlm؞[N'(qQ7UИUЂB:M\Qwvu;tWք__eś-5 q^1\-w7XΎ*UBVL(MUrI8_$2J3kwY @@ A#L"ab$!' C3cv J(, 0Sa%aQֈZꘗb,Y t<@F ="H|,M$m:n!ك]lɞ^2W0ԘbfN33 pĥuX#b`jޭ!зk+‚"ZiNqRRzyJkXvp Hh&ARFN7jNbhHzά ORRY _+䏊/}c6« %,+*jk:0@FP 'HfXqR"6ۑgh u)FLLP 'H8z0B^aN N *M5_0kI$I|@QcѢPb cMC B0b8AemOEE'u#^%cE (m )@İ/%I\TV$+]ә4 2 ^%YQ50-ۡxE3,G/J2HQ v\DPƅT2v9jlF|!b8AR4rEjaZx ?mPjBm[~sy+E|8+ &hy[^C#g/ o.OVGЀ2F1xH\w-Shքڑ8 <:6xOߎ#̧}NHd@A$IR Cz=DU H,Q1NQ+zg>p D$/Ա}." g %{e&. {a42;  g3'0pIpb`i6%XDL99$Dnx/&$!a> Q?FgI0$rsyJ]b4BX1w04ؠ>0)ZŠ7X4$ :B(?@7\Z1L`:foF+X2"y0ĘU>Yv$j5@rA"k{6®~}f@b +zirv\:ݧڧGY܃fDJzW|JU^uôgXxeDPڀg/5ZM BJ'HfXqrɕ$3UjV 2iQ4yBF ٥\eD oG(ﵟ@#V&N\S 68AiQx $I$I H08Qϐ)40-q=04ZLGb#($E3, bdbw8]n,xhu`4AFP 'Ȳ؊Ф9 Q_:VEX@ bXĒHwQ&W(U.8v1a~1,xAdEtôlͰA("E=0 eNJ {0w;KځǓSx@ ejaZOGքӍa9 $+e;h$.PșH0b8AR4r($E3,QU Ӳ)Ȑ(Yo?|4ÀvF(M:VRaW|B!\&I_EflzC7^A8;j$k5Nrsxv1F᭐FH! T^p vfܭv 0-Ll>;_ q!ܞ9+s˷E"rRվ&I{|p`$*8 )S:hVs}`!gĎ,D\"Ӡ,uVƒ"UR } K4޺dPsQi{9> h]^ԥSq@{f&ɓ>2S/>啵QH%Z|{-bbejYN>l}'d8hMin+N+w˷ B[N0+ 3%փ.K.]ducU "*VyNE]dHEEe, X D$dh1|\&q!5jBj޼+V7FI hX%٦N+k'/i答y%ni77f9/kpPc8AR4^yrJgmB,esj;<} :r9]S1 [""cؑMc?*ຮ\I$I*I$I$I$I$I$I$I/kxLZcҸ񡤤mh2NV[(A:,Q!1 t `=wٰ]֖J~xSjd $kLOT^,y\%V/KhZ(6L^;KYI븚Xmq !P+!5$E3액Uݟ%D͑WfN(\$*qA1$E3, -7iSdhi葉]e^w-CG5J͗3H\-ϓ2Y\Ϥ̊=rʲA|e1U_z) 2WltX" dWD ٥?كBP ߨj$Ҋo?d􎰼i{3Ic0|k*s?dA/1׈m $ۈllhӪt$F_rr#o2%m[$5.Ћ6e鲙ʳ,%1Z5 lS/HOsb'9 KTE獆  $.!I3id茰ǑWx}1ғJ$+ ޡ8Aç*xxOFP 'HfX(ɊF7kCs &L(B*îf~҅@@&H"!L(B){ǀ\n;%d Q~+ú $P NͰ[gsֶJ,CqQbIX,rPr*Chuz`4NͰ/fUmtyx/>LΎ|4c`V7lF%1xtǍiӨl:fr^ν "%c̾X Μx鬗$IL20}9(O2]6|O}$ݎC> xCך_9r!EBAaN'vFsnߴԭW)zf޼ URnX!wfn#Cɪ)QqdaEM0!*qPN-|*.YrνoL5 ܲyK(nR楜3ؤ9-|Tʴ? PEP:i۳Q'~Ğe wdgQTcnpʿ;!muP$'*b˔`[blNӒ$aekq p4]r(`i1 ie_=vS;zM͈mTUzbs'9%?KrR!k";Z%:g\7 =/<yTį|)rUmX"˔Ӝ)r۸EW9ռ췼Yyi].x%ڥ3(bVBj /쇅[G֏v_N'ċDۓ}4jsT]tes,`x L --6WJ9vGusYHs:ZBB!{,Pit#n gH?yzON"&!)VܱA ^ޘO=ٜ/BUhb1~xyw\6o#{C0p|Ύ1* &)Mz97.'y>2i&TUUWNrww).->ӱS&IOܴfl.w%8VA{"V-6o5_#""EjBӺf&׹q-|NF|G\~r1߯B?wosN e/|_vS5Tss/ħE:7,o[?_˽ Җ?ZQ*z'I3*f+ڎ1O\sI-' @߻'#Rdӂc9j5VD۞vSvXP,d3}]a˨7[kyd .'Ҿ'd?u:zlLDe7"" y5ψ! ƔhF7$jY USM@xh5d+eeI3kyxW|UONoԸˈ! r7O8,F +{Oi=E8JnݤȼY@ZDIU Vr(M|NS]R͉yj()! #RXhZ+m ڸH֬ "G39"OV(?gMIII\3xnIBBƗ/fjQZ"o_+|K]?\ A:fMBlj.;N٥4۫:N_tBb}g:>NJIqNדʦP e@q6K%(4dlYgjLfRL9#|xC3y4)7E/^Y:?B)fȁ>>8֚?oFic֮LЍME.,2=jE,2#?J.\Utsկv; qP9`򿾂]O\>$%'5>MPvk6n?w=i|xDGxH6q-78x̜?aMJ% qj>gϲg{x%58}bOCunr2JĻFX>>CrMY施s+\ Wpg~]:~a9 BYX`/a/'l GF&|GR0K4t;V*+g *8G67{!C9Л',֎ {*6V r@),^Gŋ-X#ң0;\E͐Idž5L6)h[s*Amwc GFl/Ĝf)Y\c]}Yw,ʢ\xhK=i}lfro>皱Heݒ2o;%^&q*w{1@c:9c c"+ ȹ" 8Qjmiiߛ*@kA "#99/MΣǮ/nxZ{xvAPi>rL;uW:n.p,YNjX>i_Bϡ'ꈭo8=``ACMpzr((20Bovsc*(M!6Fp"j-rwta 'QeYs.N57&>σ~3SjZq\Qb2l]ڝv @|G[V}u갹G&khR@h,{., ._: K9Z--`5ŀ͎M{L6{F Pc5.̑磊ryE/",n[Cְ5p[\# ~XL|FWAa5aN_Ek4 DGIY:NVzAϳC`Uzz5a{v>eH;aiTn1);rq$4LY( ^t\R|oC]+5y"36jL+}Cj3RKC,(L}4y/G*vr PW`@ӱb3.傴ENdj5bDk5J(@lulYFHV0md*jg. sE?qqc^Y,ѥSH-: +ԪGaw 3=yspRC(5V>k]Y}K|jÕYeD>;הvxw!~ۥ%BJYZo,Q*8hdH*Vb4s*$ 6׽ q3:rtfZ:ni V1/IJl w$NVtz U@5ćnsS:d2 бnR[3My*o\8eGeȊ^f%OO0O43>\d  Yf|E$^G!Ib!oDZ=đ&qtw$b4u "UdLZhVMBbpF'9&Oz5/WT\._.(JO4\b8st^zwm(4b5/BA9ȻX\$Swi{3۾{MLЌ0ʷiCs"tV4] f) 8s YȥX*e]SnT ƌ<C'V2Z9VP+#h?mBi:cpe a hb >Ҡ,V f<3"j>YMK M˓K.%?2yxٲ[u&p? B_$Q  И|%9ETSmS{e$yJ>jКG׷z. va0H;vfmt]-GoX~v{>p=w+b38eZʌɂG^g$YZ"Ve]6$s7] O[|p!<튔Π2>/PyG_<74`y('hժU6mڴi6[izv?g7ׄT"}f¦8W %8%!mÿd*RxmatQ1۶lMa-1 s|pm1$lDW'wa"Z-}i&:ykNn'#38A z#Al[g%I]byGpY 4O߰J <|fb&FͰ/@uvMgFP 'HfX(ɊF,^X݆"JI8I嶲(/Ӹ)&7 2fZwNi$Iĕ0 bA4[~yRk:0NͰ/lSn|Wu `phxAU^+pRƓN"JL3" +E]iuzuM7L DPƅT2r{W p\%wX{c`vz٧]nqrw?o4KW|nVϚ,ZeP c$tVTMp6L3y>~:JE!hPǘ@Q&'@0.*D'#$ԯ`v Vب}Haiѡf' }s{fX,bGj!_?Z}~~XSMۢ ͘O(|R?b8A 9^B*.!)%-u@UqqANIUrpPĒNo0,V6vqp8lAP )a9^dEmN5IpBѲPQ50-;Hp J,(ndb;G"L(B*m;9#ȊWO|"I ĜV^(FTd< լmj$ 0׬D$?s03si_ dffffjq(HH{P( Bh'$ޙ: +ЄHP`X8xćRqcPp0ATGC YanY|1@_{~~9tEUkkPzC9JW m;B-Wb!/Y'j~&w~P`^x[<$]B/O8.+Y9^垙0š2KiA$ɳH`c׬Ew[±kf ,-Gق>kͰ/J5]^yr{KBv&EBvwJV\e8$%Z9RzKH٧瞴'b/˿'S|+UrsM:mU˖ݧ0=1O3-< B"qb I< S SL!vQiAOΥ}bRo-+ x,G@xewNKq/n4lMQDiab;qe?jU"7)ڷ'&$OsuXyda5rHI[R \MS`f C)HA3*`RV{wśi „KjlJӆ_3| ~Em8dɼ}rWWt_*/`StvuOc4\̅LI*HY'.Oeh%Lv{V 5=zV/tnKn$q=}H`HY;@OgzN# W0p4e HfXD%YQGOy.W1$ҏ=,W%I^ ?ݷ{auZ 0Ղ\iD"H6H@VflE,i|`ph/n&q!<:.-xIg( L>>El)BCWPjVƗC, b8ARQU Ӳzx&T"e;tG6zt/tİ/%R\TU2o{ >}/Al uի!Hŋ1ș=Trτ; Abnmg;]݊uXO?ilnɌƛ|獖z& j-6[:3eC&adɿ5leW ch87m/o #L' wÇwňD?ĒV!7C,. a H9p2Xʎgdɵ< ?[\Mn6%rȨXēO|^y&3Y^ok CyƓ9FBޑLp`zԪ1Y]rp>!2B%Aˬƒ=Z RL}k~- 5/c73+/6'q(JjU_8d (FͰ/J6{mCM7Xp؎=!{ģ!PDcfV3yB1*JF#I (6~aXxw.("Qx 8|n:HB1<AR1,wk+֛>X8 L !(g^B֫ݫ)jnr1S:te !vbEr]j^˧od|O\g QT}o\~^wBxR2(=hyK"G4O ދ\Ӆ K^C)}ep=aȓ#RdԌLŽWWW 'JthQQ?>a,]~𹟪ݼzpz/~_8kU8s{jgx^{w6իWիWo{+7 æ;rMaHO"ͣyo9 x>ɐݴiC.:Okehx"#.B+V}&ܷSt=-׸= m!lZYV5%]< n&\ximC֣Ƥ x! dT+;\.wD&Pz%GWQ8KqxWYFPEGBU= 4-{Z<˳#k>ٴ"sbM.)hĄba˸8?xCNv\vT1[O͘HE V|?E{RW4ut/cծ_˶t?^*JL< eR s\xFsp 7}N yA|j1#$3*Nfŀf,{\.%'\LeyVTp5SO&pPD ]TrMo1+ WbѯgQ kK Ht2^yVn3uW-+{3UŁsx^ُ.l'H'{k,Cj7P:ÞF8N۲'~n0hȰz'Ƽg_LWLǚy cq>"D-F$&y ǬF&:[{8 _NKW+&Ȣ&qr:Ղ$+]ә4 2~a9 $+e;hfQDt Qp>4 ;i'ȦR!qIVTM7Lv\Yhx JjaZvMO?o)ФaTBD5h}GE}/d֤^FXDŽ.={>/SW h1  6Z=99H $+rیxo<}ZrTIY(aq;@:=HQNd&EqF _k!<9 %i"M2"<3@fZV1АMjx3a*1@cc6w=Ley9d"*>fnQ|-?Kr>7GQ._>ٷQT@oA.e𷠑4Jcړ~^y>_ZPQY=JDhc6ޡ=4P:,j$ 3QdFl4 40֣P gVĤ|  Jj7bh@$e)@O! L(Bhk:~;3A$yQ2: Hx,!N* 'HfpF=;t _׌Y.L~Ne k$0@(ɊU9,9b2[#HfXD%YQ횮*ªVIWtFôAİ/%R\Tbߝ9;A^4`x ,E("U@ e0:0@FP 'HfXD*6p<<^U+Bd!A1 =aN2rj&^R_=K\;.#\xS7 ^JLNlTú8x.'smbTBVr J*M.5"9.S]sa=U{Kuia 9E>nPm)}7rws 6UUĘ>)ifXHJM#6a}ZD&qQ3aza9 $+e;hТ$5Rô0ף&q!t- @Ak pItl?]^#2 @(P%YQ50-qE n@Ͱ DIVTM7LVq\`sSA1:$Pf*$2x4Q'y 5-*JƘTnS"^;`>ŧNc:w/qH=UӍs nsɡ.;8ETU:C貎ډ'vIlq~x꯼BzNB¯BE|l,E_%Sᓢ+vQIdUH*sDXi̵q8A.bD0ɏoڹ zUxY ؃qhi aC&UܭVKr:/ Q8ey}qҶm۞іqR6LqtąP2Ϝzz۱ZL(43erwUxsU%}==}[pIo9d_O6ûHv&׃g(YHUrEB!,gfvGuBf_Vdr<5333s0sE\('C^~3ܡ1&q/ЁN(f2p2ۺ#^uCL\[J|W ZpO,׻϶c1ƘcZWA[HlvS77FpZ$0xPq(ᒢD(Ɋi+H/4-7) !}xg&ؕ$P4A`)3>Ȯ3L,'Rܙ+O7_]+R͊]l /'.3 0eȩfOw Mk2Л8̵sR+fԟ8܈8Df8rI[fuEPELZHiab;GO"L(B*mηIX\LQ%8XIuEc@2V`>PZ<(>BLZRHܲ>m'ݔetbVd?9]ÿ6lP嶰3funJ՟w {>3=7͵?qS_+}f4wլ-BdUlG#zI(C%f$˿BYN{e :>Z.p(L]O*ޞ9AlYY+Y G=(3(52&^ηn1 .e;w{)j6o_?>Q}Z}+k=$,ҭk+BC_2;QU #b|hy3cW3T;>I0R0+"I$eXQ1qֹғ`jq dj ;澴[otQ}_P̚`6k&ͥ)WGj4`j>GHE;Z$\v*_dՖ=uq|Arj"<\UlW4vBEm11e܈jw )⑰{iCëPHqtQ#~XbpE[a#,ך[0-ceseEI\kSآxАV n93/h&@;R4igZ&EUK*uKQrnYC x _M4_`%&aVÛ9l|כPbgH@PHXDT&Cg9r8Z+I9]fFyI[KR锤+ln=ڕ˔v.C%&J~ 3>!b넸g?l>b&l"68^r{*ty\_[u)I!%ITIF6 $Iq!Qj#ӁQ~?jxrg׹bBO,ċ^0#gjJY߹< $&9AB_^s#՚n```aLȊתĠ'ڻdVWW y o VD<ث\U=ѤFC`sdߍFE-"Ūb &qsI=Jy:\?hW萘ҮxZPP roh4j V*![M!N#H'lB Q%!nC<$4 3%VSZpȣ VmKg.pE(VŒRPFQ,Qb=J ԭpXC <1X~t-m䞜 9 #ɓ2t#+'"pXX!ބ;P<#: tg0 pV"p'2JN!3r-4i4 oophH& 39O 1U3Mߢ7˨:Fuj$dv^:2"ISѡkuv:}sNhֆfpy PtLh^&IJLoijj1ޕ_R%\T/Y!чcս:zOg؆:gO6 .X^@k=J'iɊm `;%U?DLq{f_=+ڼ5R˿xF'i]!,}Ɩ*ɉb +0>qS5 Cl{p\60_ꍈ咂hx JjaZvF~zϗ =MAQ%.7ߗ3O&` ='vv&M0rM+XQEǝ4B]"stΜVS1!.Y[ *G@/ j uhttËwݙp&do?ֆ}1#ԯ^@}$+<$\,遵i?V^[~~uk{ *8 | jj @~Ǟζ&ǜ ,w sC4@Oh!jmlb:6j ei@mK=+S?^?Oz." I:1Od-@kI1$IJȹtf ɵ:mI8 '<$z%˞ԥÂㇰ+QbڎxHCy"ΐCY !$I%$)T}ri\wM^w[M0nZu5i֢uwA/o_.G[XSkStOf>LW^t[{*&?حhM_'Ж{@L6aNI8CX$# [TYf nۤF +pTl$o ;u4g%A@]\(Z@:PW AP>Ӊ(:oq G*(nfRMujkuս|Qm0r~X,eY]d{.ƘmY!\FXK>#KP<$m\#'%IAI$I$+$IM']2iT$I$I HnZ"rAffr@dEtJ?=6{7hPt$I#xM 1D%|+>0 |)}Bo mI 'ShB'\D.]z+#Ufq"u H 7ą)4/Rl{a9 `!iGywPsx FLPwv[ oX԰HDٜ-EEײi'Б| ɦPlN9;!F 3tuv 2jnHlO.8bL0uea[B B-d\]o{\;h+&O<Q-؊d &u<'&83s~B2fomdIaӿxe Vd~WRutCIm'ǹK^F]ʗjV5iu;ւz|O{o :b\) i8:_evN+odzA6b1UnY__mh;]Mynͬ g (t"Qmq8pAwvjjnphflQjFQ50-ۡ8Ex Rs 2fߌ18Ea$?7wWy]Ӳ`  0nzsؑ{Z;dxr>/:qw< ?$0DIBΤWfTYkaV14b,5vEy1~bʹ2٤ks1>B3i̟Ӡޢyݨx?ג`}+fAe5+fm̕um3}hV e}Z4(wգ+tJ \oh%NͰ/ %ajϥ!vN/ RiY7L DPƅT2r{&DP&QV5ݴlWUBd0= `-l O,VyKeYK<+Ua]LȧLMC:2fΔ*jik4CotHfªt $+]ӥQ#($E3,ЫDIVTM7ҳZDE 0~nLwk\ߺ^4İ%HV~۔i pux-αl'!/2+ą$I]9HNIs{_8x?3Tƀ@0-yW鈳&w(Z׫# )a9^OQl8^UB?s3 ]u= &q!}:q9]wѥ8PP Ra3_}3{4/EBAakric`b >vfhc`NA0Us"lIQCө/!#-ZnNOO>=KrC)l}IlXxddEHiU_ m!qr_/3eiWڳV/1¾3ֽK=;t~m7՛Ͻg2xt?a3I)7y{ xO | ߗ"7ifl=+Yx "J^Ft^l${L,p ˕yP9Vh4xNPT31[W^JT}9 E/@di4$]]EmwHߗ%#Ym=Q\; x߂KK~6sp`()!-5*eHHVi,L\,.+.WʙX*_r%1S 'Pm4d Iq!o7ݹD!ɧ}_xghݲ?:B}FhAĵEzkO==ml#F.i,Uß9Ȫ9z-< 2(D@n *-tJ|3fZ5vd*GD ^KD"gQ78^--W -u dL6|eGsxw= w-&ap::srvj gca:*T%hrE/j~/9;x >|x_l&o=gdKhH\Iy>*h+'ļ.ͥ0r-ÍكL-,X:WWכ%8TV ti|eyݩt8h-wOM^8e9dh`0R(p]8ΰ][џ RNSO[s LJZP,uRf6n&Myp ys~M#j /||s͚/:X9S|p )ӧvza*qxf،Tj2OZ,E'茍dw,#m_7cMn/JXhZH#JS&5(7g$`BN #a&Vi1eDl1&fBIZ T:?gcߎK_agej;E] 5vC͆-nR:g+~bgPL· nMe0_BE(ŔJnGWaPuUT[Z$@tя8CΌBB5Ǽ$6z ^:ŲD9IM@2cd$3LGrJ*տ)S&˱OWCǰ aPaS(S$4:f68N.u`/28Ѵh@T+d4zb3@`0L`TF3&+Q'&Mj2R( 2+bR걤$$Eik@M0hгO='^z!y z.4i郣"餃>3[nM*Apdfs7([H`+]D"-sbp'+ )⏓G6hJȝ*E'gɕ_]ID%@Fk|*%V-)_>Y=k6QfBU:_6pܑ# `[2G 26݋dZ~T.Pxu2nKOovsCx}vM*5-dZzF5Sx&ՑQ6u+44d}3]=ubIs) ^e60v!>gDURB4K/$.>GCR$G i] RmA2M7!x}ߗbs=<)2^>;s;h}G2g-K +͌)H*|f+6EDѰ B62d1cQ(G>UUȫQҰ^15?_um^]렮fWcxDK?s4eƬMnpMüixђ;ZF˛WU1hSB8 ;֯]=vװQ= />]9rh𱍸r rRۧk!Z,SԂ7!&AP߇_ȧ^J yaHGaN}9?&ǹŰɘw3{^0a؇<~y)=<g/sfe@Q/8G SL,k}k@1ge xb JEC,zK9sz 6 E^Gda?7o4:2#( 4h<2Gt r$:M[. WEf8$|aOWW+<Д&61,"}ZudӮ1NUZxҬ ,KҎi+rm5M+T"j*w[sxU,޴j-|Ka.`xफ़v!4"~z.F~_ɢesoðVA8D15T"N Hv bM -|7Ϩf8VA(!ckB(G nRޟ~ZrJhxYd͓33m/}!Pn~"y"XjvwF[MG2Z fEq{Aa╋1"$CYg5Xwк̊uuLWP9y?KBJ``d8 `"C6NuWf]i#Sy8r֡UVKuJRXy8H u@­)RGoh1HFͩȌ&2%pg;Nt@0$7H<]thZlK+f<:5SiM;dЌdL$,fdg#- U(CY?r~>PM;ĘP$r`ȴJ*\*gTUb/[<ؤyyX]7#hn,6eYVf嵹~kx-[?nPu '.Z]G['IBmOcz`DBxMpCx-G/&g 3 qff$/42_YTNU7}[f2 !rԙcku"ߏOns֎ҮIOդzEoCQIZgw*5~ZX|VQժs| P(X'm=+ㇲ"v]kܡ(uߊ\zVʋV(<$B%k-5J =8H:- GNG_F*Q0]kh:aKzx i#tl\\hZ1!odDFSDJyx%iʯ$-RDlQ9 SWr}?&<첫dYկ!1$TZrIi;_!1 :-.;F*F?]Uv鮺Wxoj}ACnY︾x\=G]XӍv.ؔʟHyz/9{U ;(!NЪ\7-n2[o}V%6xNkP~ۦeS˕q=asO;vx>f>ztq ^XW[jܳlm O¶WM.w(vMGp8 [= 7a-D3rhdj5YT 3DrAi7D'& ?wP'#pf;ۛ d>d(hPҁK|*OC_~ [u h=ggk@xq86;-52qy?1G׀H1ŀHdo[tc%!c|&2W6ȿ?h'J* =fA,iyO5۬vO:Dgڭp۳_lu`w:—mԺe<֕ hD=wE<2ʔo,4/ 998Dl4/-9B2Ixj$5%AR5%MRC6,an2RfJJq(sR|o5t)=ADKT&-OCOyL٘ڦtX-W5?6@ENj *"x bPsQwlrs=w@GlKrW"d/y P10P1bIsNRD[wξsTt$| /r5,1]Vgs :sX)eN+=WJA>(5_4g?Wj8#awK:/3^ْJ:$w}5Ê.H<(;z1 MYn# ;'6ٵ2a}Ki#lV ;/je5JƁ&Y:1? qN:(xQBɾӸ` Q2tsl7>]#|l_r+I"æ!:\S!i(YT ; R#ܜIGKQDD rȩBrМ9821)!"8NubTXI%8 JHJTKb~!VGcd dT3Ί Q:tU x U!?swFVe+Wy8 x2=#v2Etôl ,}'u>Ĵ.L|5 44)wfv[rbo  [ o|mAtIrέu] f(6$Dex0;lJnEWWƦc]n{nq*5=7h[dHp0I3Nv(д-zG]hj_{3ûOɀ3 ̆I_īO6 0MiNK39? dxg&tƊQRR1bsDbT&rUdN4#C.89^%Y`pϿSbxfՎekrMXd \ i7֨0&rasl=P V¢EOÜ hDh|v.y ǪpjsWߚm'4nse,ɒl֋@ڽxX6ʸ Pi2ֱ>sFI1E1Wtò]yd=@9ݽ#k:׏HVϞ FzXB3!.ĔKm}vz"gk0'|Oۮyd=@9ݽ;RP10qr3`9A*DM" 8QѡD,SXc}csK,i-V(AP$#35Oej#} P)LmNlͅ1O Ga$*Qh&E2'W =I,UuJbh]fR-v!`85>76Ēb2I646[#T&_6RLJ rW)iC'iebr_BLs[:"YWOӧ_P(EZI **I:AdEt::QY^UU%ĔKm=U IY9y$+%loTX=G+T:N"8FAFc,D2 :HJQcΖ3O{GgRjY6JGgDMV4Iu )iY9IEYiܗS.܉yrq9n_?0Liَ)-aZv\ 3WVDIVTM7LKHVi#:<>U4,&q! )mc/Ģlnd(&X۰ixtbznaymŪgf,.MWև @Ќ̱qCCbX6JȌgQ<@Tʾ.FZh'$rVo b\vLRZk*NHґ.'^54tPUTElKKb#Cc7Ӽ~ט׽g̵}bTJ/rmBp%5 08,<*:S\BJЬ k&Yfǁ37{xO|X+5Zyv}O1zyUJy 9 ?YZ]jBLwSirwNӟl@>#ÚgkIm{`%qzX\|y$<|WO|`~: #"y. >,:Sq%lЌ$`=,:~me<򆈽y+3ʜ {$F(@)0mo3KdSRb~5pf%|KNdd@pHO() K" 0nxy*&oJ`_+0Tt|d#{"N@E)Tj *i{6+[bDB΅ yp"2,B4 %mvhø6=Y 5Gȼ@J-ɦU99CjmȽj8AjЂA0?# Hx!ɗL\KHv^^'y&U>Vʹ=ozgQx^~%*H0パa5 ̏= l9͎\(Υ .Smꖓ[\+6y V8UL=:Sj^;cF]f,|:g `Jdj-¬-:]UhGd$Η24/yf";#|Ӣ6jJ/lGuUU].3i+婀5+6ǘݛygN準ͶG?o]F5uTDKgNHC\: bo6q0@%Ngajʸ?6d^d|3wT|v/kM[gb3BN m %hV51=[F36kh G\\P#1X"9 rJ=,K ʴfj\zFfJQ4HFf<+IT@%A5p7$$rVo b\vLRZk0ۜu4Zt`KD:W(*"ՉLX%\Rˑ (N,/*ĪNMbʥ!(4N<aBǜTZWO R4rHs"L(!@QPR0 &c 9yt! RV_2-Uox(4@"X̓ 9rspKjlX+5ZYtF]4''ą$$dd Ta9LDP=65*?ƓlXqZ7ݼ_qum88k.Ͱ$h8N%T/_y.8I(:5mK)z>84EB5t0ՁMs Kӳ kAf` 8኎ Eq2 B`Yd)tL*ji6.2hqImzW\ћec(:i;y] S|cT)W(El\kt1 o8,0NxmaZz>><|SJ#fEvQo4[0-ePh 3gEp% N[σh2_m@(Uj'4]Dd9!0dsQd*Jgq.8I\Ne|?oyY81{=ϘkǦ$S3srq^q^~ҢJJeCQƪn.Ju.ĔKm]}. : (>c8F30H(PĀ3)5#JU6}%K˴O.(,*)oj-(,.+TTZQ]Ywi^z?ڏ~_aڊU#'nY\-G _Ae5ekW5j"&)UQEJ!Q54j*)I:?궇7SC#s+[{'WCc3s+kOvN;j)M>1oo4LMΛ9y}m]=}"L(B*@XH,jNu<2>15=;7?yY81u?3羿Ҿmg̻{޷X,zM0.iλafwPMB," Ss2YŽ~N[o0ɸAdY1ujZ()ect(T~}wmgܮ}5O&S{شYЩt*7dg(f;b ԕ yGrh;IWG.,7L̴e,ֵƤEؓzM(=Z2%Ly`{\ᚨr0(A [$krYɔr2Eޯ[6y`Bu_!0\3ɔ%[8/cM4e&k7ʝM0 =.ʈ7T jj%[+ *4I: *+T"2OgPZ$Inp@#yNj~%~cW苮1%5%ܐHjcflZ'hpm405M <~h /-;W:XP(zن[ }qFl?0YTR$^I{Ƶl% T,&ZJy @rqW(22zcwδ&Sae{PB@ 舯J+̈Eee;> -;Ob怅p @9Ĉvo2-Qyn'LH =gӵJAbboi1Y926h4~ϳ27rzDl>b#ز p{Q?HP}4i>dZ4BlQƆ1C wE+".ED(>'GԈLX |}^g7lKtD1;{(D4%ִF)` 4k* xJbS "5$zpfKFdhR3I@q'8iƈlg{ǐ]I؂5Z.*$CHW~zǢr1 /8AO%܇@0,Xy*#o6[W*JtYN0\Fe~B: !N`zlaOKR~J'Iő)~)s7Ң:[E}|)\a@`Z8Kˑf u% OSm) UYpGbBJ&ZD10:cy݈]f$;x_[ج;Ryr9sqZNgxY;W'C7H@,⑦2  .STx:-Ь(M <Tx <].ayՏ͇鍇d^0;1D,iA;KMwp.s$㧀•HR]D ieFFs]Qoo_/1" ~)Pd] 0w " bϫvcnSFгY[מ-VC[ѦĮF^yc-ymUELIk+\ b&Yi>'x$疓1) 2/trW{CõH#OY3j\yfn]6nz:ǟM \{6R{?(ݟ7c6μ)&;4?I?t OWHF׈/p=)v8i^>3 Hq=<~>88.S녖R<n6fe~w |OJ=x*yt(=#JbfENg ]Y aT(i ƹzi%%i[==)!yC71P0*Pqh,Yu<1f 0B%JܺTl9fvنc7HBŃa<-L`)gDc.H氌y?.!JL%+W[+G=ʠaxF%y)cο{Vz(rwE A4x+0oJxKfoFS,Bx/`rXeM*H[YMr>"4J7 YxW6YA槯8%lpD@Պ4ƠM Ug %⼆ݔN&a.9 T"%;̧'(Zɘ_yzHFL"HXѴU_sB˜"/g 5beodY9)ءD_6u)2P1azs-6U&]խ hjˆعkas<>ʆoa=!5އrzV`ۍ2ӂݦ[i?p~ 3h&!!ɻfd%L̝řK%_DÅ޼ƶR/̕TwspQ6Дo n{D,nz}oMnS\,Zp-Tb*IA_Z}w꿨^kcGui_W69|MT[-!qg|<4$0>_ u~]A}_x8v6˅]'"ޗs/ޑڊ<|ǁ_ |)k߁h!XEZ&M !+*7_3bAWljI1 :jzN>᙮KJHM,W/wuv (vv ;}zT2TnSw~s0%]7{4s. E`rZ`l"L(B*buptrvqus+d-m]=}C# K@PƅT^>?dǟ|xv={ߕiSUăy(%rSV_PY?8šTv9Obb 2=֤V:y(eӫ|tvr"Uu҇ (tLB18P[~M+*݋1$yf,Ոz Hh {deirx?8LDpyyYDU ]T$#)wnіkgS$l5nЇFC;(ޭ ͸8Zb Zf4`B )Iy*gݢ{u|lTPbkӜhJF+-C#)1adFO~Ԑ&V"d2 cK}*mKbc(mvHg|[ Vkm hdJVΈ*yY*Ȩ4,SkP[ S0lX''*JR5r" @K~>aM@>;m]hy='U`%Փ.),NnH)z.>.ذ_6K<ݡ3CmS۠fqC]j]T*;d\T;3 Qˡc+JU1/*՛5-EQ(8aFw8LLbHDA|lht(rmKU55D^'.ۙ];1*fvlNȆfw }\wErPȎ+K2raB'{Dqr&v/hޚ*w00dfG}5,9>DmY4+De |y{t;|'1;N?I08[wX@d ˕܉Lmp8=@Z1_'-_^kDžxΝ=6D>:ˍ\7܉w(,tzs_\YHn6l?>׻ǦG}sȆP;"6kDA_s 2ec0חrx=kcLBwL&op'E|J 2^HŚ- .07A8aUW{i k:Iy8hbqq&+N,/SMwbҞa USWC)TmƖ3tkǠOWKY#Gv%+O\S!Zm1  6SPCquF_&5e`CAXC;Eȃڵ <Hkq@w$:"_.\1 ƛDr7kȃ3LV|X@WZwHcYj/zˋޓԕ}EӠt[ @n=NPPp)9%Uաۀf!Uګ"``Q2 ) 4}aS suX|BioԸ˕"X6\R*UkgȄ尊|}ՋaPw^#*F#|@ȬIԢ;נY1KJH8(wW+"BvM3-i?tzt?S4qwL0q?8_Ȑp,qx$i^^W>5$J3D+RVkcҜevE"Exzqwǿ$倠J+&7ɯ6p%JlכߤɄV|utY;=&%v 01sz"!QJucdhDM =mT\Fzo($,۰({~/X\ *F d=gD:;c:.eL譖SȝY\݉&N=ϓsʄ%Pb|&[rxZT~!J)J2,s#P0RZ(6 оˌ~}3K%X?ȕCɵ8fY[Gq:ψ<|[n7_<>wr3Asy,7'y܍q*m+A| .A~ǫՇI277t6P69psC+Xp8ru1 _̸a.|Iy|6,ɿ'Lيܰ&zMDir5 Eq+([bRպijMg L̘pyB-i%]ϗxGs[ j[>+Ocs{?36a? eh 'OLT `bۓ.Ryō6nҽQ(PHi&z՛[I&@7 Wꛓ>=džp˺~BFW>Io-i3ŜeMbUd׍Gt 1ʮ2=v* ɡw8(|y |P[0?v-l˗M|9.S`c25`)<$K*eS'־#k q ta4  YJcYKDF*@QŕTZYM9 3:1хĴ[8 l$Im Hts-hO`ߧk*MNUyh:Ӆ4^ CPʮޡF|{uÒsܣg%r+QE|\qThajY{UsZ7|f;x//N-U!n1B~X޶V&s?<-+F2y؅z ̀pCԆE&guxxNtmZv%nhG2=r/=Wt5] 9=bp Maܣ)_F?nؙz-&i>z>I>!bsڌEF7MovXU1ֻo`Zf Xu (=E *RJB@S贊ILG-LLdqll`e!uAy`Ro;6d:;EMj#溕3έנӔ41-ٲ#+tw*UF&' 6O~+eG Ͱ/CfG,¾h*&Ń5#{{I$/o8B@y3{?1v,S/~UKF'AħWxɁsYJ{2!>ʕ˿TJ˭>z9>HժP˔YH[Jґ8-,pufJ>HCq͉9>'yde[kʵl>} Ǚ-s4G\ihFfkr)-X]C$Vj qn޿Gɱ*xpdד%dVjhU*+_-{;(xRη,<?P}ROc.pk,e@xJL~z՘{ge{Nr3@O~@KAӤ6CaEyJ2Y.:Y +ըM iL c^JSp}]ܽb{Պ{BeIw TO8eW$2ߠd$KV+" pϵliU`ώ  !yS5TKrQv/@j)X)!GxԿb9/;֣me׉I<$X>==x?Wv١Q>e)lxSm?&FP#SwkJ~Ϣ|7sg:fw~2NOV3tɯo]3 ֧/9z4txۻqw4,kٖ/'=V+ee0Vt;/6,.Ca( $_,Ty&uRhy]7Mcn39)hwf}͟sbNΩ9=?O0c3f)"`eFX,dfv/r2T=sOM3|gû|Fog6<[}w㼹ckϭý > ﳕ+/W-}uǠ/,?݆³ <ׯ!haa?UT]jȚ m E9=tO̚8%9gJ]6U=qFMX8\̄<mD $=Fd:)tlNCN=cF3[b3^E~eo`nk*pm7igU4+ӠyMz_$ֵ**e Qf]ae#˷c#nכxSvб͛tۮmEvo-ɭkx)7Fsc|4}Ӈd[pdQg9V{uUdeo5`C 7I}TB&dSM?\l/+w-R˵K[놟6jvk;긓N;iR{/*Pÿ_oŊ(y]Uh ;~XGY9|ɒЄmȉD ʼnܣqfEY狂bQLړvKBox|_zhѓI!ƌ4FpHte;kt >g*lu '7bwGuǯHa(>fi7Ae<|@ŇԨBQ:n*Tl|"-*z^T/MxM͏i]ۦ^;6p:q{ t}Vݝ'Oޞ٫;(hJjZzFf?,,*)*fh{״/BujB-*O]9:Ath:auNb?{sz*ً _Cn-L}/3jٚ|}_n8y W}7? :QQg4,{V햘(6⣄(1JR!5hԤ89yW5]_-TԿ/W}<m y[wi+}+z^?=o2XkbcPƩ\J.nUըU^FMhiuX|J7}#+ƅ4դǧķ͕Оp* kd@94b99&;? va}<N ''!- 2 )(Pt8F3Iӱ4]27&2!k[{o[6gkG.j_nޅڪvvh8.I}qz(1GԱcGEMa/;B^uAvQ'/ƝbiYuHHc0:;C:7g>~a596\5n"Qjnwk~~/P&3,l=-Yco/Mgafeji..KF XDt6h\;lyoZC, RPګs*`ֽY 5U6S}OOΏ(Pۘ9cs!_/ܼ_*/ 9o;}r!!Bѹqܐ~NH+^ʺ&A=[,ujUc=#=٣=S=݃C]T4^OjS4ԢSe t+7.n^>mYH6ڤVzYn['NKq]NGFt` ճv$v{ׯrx1Z_3myzw?^dhg<F k#>,u{Z//uOs@^eۿfsҗz2C=[4!&GК"q!о-4 %%#my[.fF1M'dzz/YL炂u f 3X{)SH \^0[J( "epሒ9+9իX*T a :c 8ܽ^-Ǒ:i.0_Dhot& h+-8zS9O6W.< (Y#mN^aN$>9"u:,A%AKWcYmUSR2!RC r=mVLUzºopL}I޾7 l?ʨf}!8̷jJRWLKD Fv91HW2{u%gpOi…WZ.rBK% }zN1z^AG>]rcbnՕ֋%$2:ZcȚǟdD ZMGt|` @R,Tb&Ij\&R}1<\t0G_"0Jw2'X!MĜ#\i[d،h,nvZ G#ցa /X `d  @^*&)$Qz@>fקg(e;X[oGW~rq\ g]=p!H#gS7~#Yvt?(ZՖ'*%G$=×GI@3M43ϾmjW4*ܠ^xio/N,HY-dZ&;yρiԙZ #Z^HJJ E =k" @|-ܷДxF(*G[ \=(ع0OBs>-yٕs d"WF I ^*a15s)fi1U *//ig1J\P;%LPR0P=n>GP54^0"/\4j(R`nqLogÕ Dmƹ#ؒ >w5B$obb D$gXy+zQa kSJDX#PC O1@ԛZIDx ݁4ƿ0zs!4/Hiiq/ƍcI Ө"VjCıb dNOW=\bƯCF^.i&__GH|}90h*&"#ص4Y V\'OI1BV!J%('Ѐ8.=uRiO'aEF ?1`O Yh, u3# !h ÓGQu>EG'p{9]y=1{bi*P?SO2кDѩ̖f2y{[a "h]kN 0uf,Ta(2FdĪ@y툤liͧ.v8*z+1=#0cZƳ8D4qS"&Dr˙Z@1pA0QO(VVlZ,4 ^S| t_ֿTPh>E9"h/T˞TMed(R3˴ю$$Jp2Ck$8Q"ƈ(N/`SJU .R}NlK0۹NM(}Av)LE$R*I0"m *SPWֿ~ZPJ[\7u1 ô{t%NOq#Z$73wJm/ yߝ(\d8/˫qsҚD#N~gkzq@ũǛjlrn6/, F'.V^^aXuٜ "{5kf|fNyM+&Wz #bc+ ZaKn -Hjy08Ma8r)YZp7P^}S0'(T6%Oc?ȝsfRV:μf:A@_(kiuo0]ՠSd:Rmz&:U~{pEV]oQkQ|_]^LhG¼{7j`_=ddC11s)k9h7'-Oc^ȟrlh\-0} 7Ď,m^̲ASyz6}ډyYC`h6}0l 7waJ_]SFDH(M䀌jb4j5Fj "&D^W7l?Oؙp+=v&sbEL@2lXbU/ \]k,ڑ$J7(JzTC 0VX/ rַeD dVCnRXA7G-ܥ[9"SCO"ʭi*H Յ+{7挊ՙDHX_ȑk{&l)ۄFW/ѪURz8gx0?~=#N54b]nl.&XO*QXmmUhY%4(NčYPVjp-OhP0"7Â-@hAh[[RpVed;bJg"/[Q"=T&oB1R Gp0C`pU4^pajs:uӓ#x$|`{p/o&!%RaR7d| hh,E_|J:lK_;)&Br)k|9FIB]^)s5UZD/S+WmrG$S-vMIJsfSWtӑEE2|f%O0Ϧ^6=z;":XnKRԦE}"~ OXYS2ŁI(@@pEłDxJ/v8~WıaԔBTI^'VܛPEXE-OéP~WDey{]DpsKReB,YYl*DLq7}ߓQ4Om ^i#B5lJmzuS/`϶ ;H*HB}?\Uf X.׭tE-#z+G/"1ɃU /"ޥ`ČO ؗ46bD JpiIsf 豄e'evj&\rv@anCAA[y7n_Gs$D ) ΨSPPwc3˂L@B&SG۫$v Y<"} w߈/)dDdDL:-jYl]aBb4vw>;FOj*m. kn)%Q9hZ0v5n ;;+E8Ց^dVV TЇzM)Lb"cLj5q1]qrAɷȝ'm5tkZ rxӽZX*V.AM'˗Uq'΃d;jBy/5stHXCPeZcvv)گHAuHkSxg䔪 . H~mMzZSyshd|j䚇"9Gv ><þ^8n ٧g$qB{MP,5 , 4녡ƶ~~B!1Q1%>0> σwMDP}پ|3L/θ u>ZkEqf)42JVbigqmڅoFP46Yv6h;Ihی3Ç.rFTȝ~L|*FZmLW{YX=RFKwh%{qP)RB`)ɗSXU}1@On$_O<u{Ay}ݠN6Fw@+Xߖ[i̊ p]iǥ铀6# (kq#i91PR"&;8 ޳w8U.6,|k Vv8N;Ý{l M!L5{lbvA-O w$jң^Z+ѾW b'Xނo"pb ފq `Yz SKoY6%;6Dhf'<.`Ǖn;ρe;_U5s!՟;l v)5dMDO6!贤7N-δ9HKU6)%"l ܳi1ٕXl%L4DM2Jw.n6rvgFlZ @Bс8;6ꀱwzAB#q 3 r#hNjvȃX \qz`ޗǾ %#,ϗ0ʫ0MQ]Uvw==oҊvSbf,tGQܠ^ciI X(uEBz ̨e{܎0 s\G`ѕL2T%|5:Z9)J0P$Xsݎ=/3mTOD=4Qd*$;յ _93oрdD ΒPgW(4+E %֌(iA fd’/?FLB:m_  zW@>'C&a ۉ"q͠'nGԨG"gXKg?ISɟjE~Rk[avL J]NY}^5>f6_Y5JQ# (L2n)f=UUlvq@)n1kX"O_-f.eu4mڳg0|F P0󝋳8&aߴŖ倘QC7ۢ`/ LVMOIS F_Hv97ExN) Srr~6 h# %I;Ⱦ DGSW`|a4ۢ2)j`@ f6'#+{X1pdQuǡ\H'fS=co&l+ѢFx;=v uVq̶,rQ%#c{j[9Ou=fp)x1ѓnm ,=e'XyH+<ꥏ')89zl#7q1U:\r ?"M 2"oR-jnrBhvL;>m'$A#rZ",pTU,(٥)i*g d^~KW,_ {[(@d-VD,$Qut8˻`-#yiv?'YUhݖ o@VJˈQr[c~V"2tê\DQ̥M.2$8ƋEI3\h"GrWW2γiϑkG  e@E0cs* yh:ۿa8HAOnBEKA&E_oU~M޳-Ru@ lP縷fa.ӥfWjA Z2C[k>fA 8u0qE^DkW5*>g򭿎W(B"W#@0w*d6W_^T3BZ }*0\p͎WF41,dҹ ݥϊ+@gHյΚy)+`dz03tg~>yuq2Q/B S23T[_Sf .tEI6XkSRִ{Bb,)I!oۈ;`MۊGz8)Jj*1/ 'IïދpCFmhCa^'!}@c)}pTysCtjX("%nz8OU IW:-nkjVf䮭֧o֨砳j-X Hk<Mh^ug  sviAΗ4 MH^Py_B MGbk&n{zwͻAɼCo?a[ߴ_._}m($ J4LtknY>xũ&Oy`8H2"|=|)P{#NB%Ee\!=F=gmYZ*Se=ܚx{r𧛽kd,tf:+sv:@땒uMJ/Vf6܃5BhHvT2_X7̋ZS~8'8[p`UB̗Z-|lj`u5Υ~UA3G~ a>od>{#i xE75߫i͐p`@2GF诖GhĶ uE6;ZԿ$mӁr[nzKu xGgˮLakWFdhUgC*B\+p:n=71ǔS iJDI廡鐵D!:nF$'6yB#规(VuPqr/*"냃xv  K4 grcrad|R7 \BQwS YM>]~GH("ƕzb7|,H3A UzW:Iv,t! ^DSJ _^zA ,t6/CV]VHmt)KGscGX;/Ns1DH>J¬$3i705Ƨ+7&աcS+V76pÚ4vP!/]'BLu(シ#S-ZŠ}'~)YH"fR{]j*N* SH.ݩipJ#@oHkSfۢ,cΞ+igzjDxQ3vAߧ~B1X3jOѬ]P4߻l8Mry_M޿wΥ1=v:dw I^0nW'B*osm_*`Y6J^盠hvrBFXuqT֩u/bўh?+%cۆjB ANy'S;[i\JBg˕>3e:p2B{F R镵SʢX=ɖwz nj%aTDMqⷍW,}uSf—mxA}hn6=Y?F)ڷyNNр, \ ?iaϐTrlm2 !u;aeTKpnI+*N 4@='qvi tr\UǦ[FBi4ek`{&~: >p:({GoUk)-0* OvaX#*e@! ^pg 'y!mM&pyO@:HN4C`TPr%NIiCk;~b$}'"n+תi&RfgE (YjKޖ1>-u2ɃƸW zB~@CH5vpwq)=!)eyyDHogwSA_v?QLƞ߿/66q%u,5ͥnwӜCFWfYm3Q3pڻ㚃IKüP` v[:P28zT,k zr0bث?K%D*1O )Ѹ7Np,A+ g{Dۋ##fH!ìq$9hK0XGh"mэ ƌENԭ X wZvv-^&ex kmXY}~]Z{)TruI |`k 8@CzL4wCUbh]ZK{JQjK5cVɁƆ UD7[^e"\Μ`Ȩ캯$LؚT>tu|@QT;-NvvIW`=oKfɢ$h}[7Wh-^1BϘLL>\Jjs mnh&\c^x ͦ2 }bK c JžDZ:"]ZA<$Rdeɣ Tk*ˀՔ]-m9Z9UvA@$F|^%˫íVYS_%Bg)MggwFh!ȳg*SEY"|̤?S:sy1dzٷ-vBv-w`imLp<|k4eIdHQѬ8S5HQ)3C"Ms. Ty8K;5w,p[ -w5uS[j9XӎD^5w@q8 I5.3eև 8aVc\(kh l@4mb?p\v(Q0dn=c5ʹ@iB8n#k<=B'A}&PTrݬ"jw)U3_I2|BV s̊QxqF\R QwC:ۂ/ Lx5Km]hʉsyI!ėwxعm{`+*sHb7 *V&is"*Py I#k4s 'Ae⧸+y:(A#q iN{/zT?pOx>>"/| '0喗0[`h?cǏr]=؛EH ~JkTڍs K{EZYqeyd=:a^G kа1ֱ!@E1ƹ~_5?7ݨ{e;r!xQM~՚ O,aMrZ؅_w]q5fr rM rLcnMm[vгK8@TA w>ۯhKkW)mg}GC戙\U$ZXf[;/h\Le4BCq^ {9~EI48+1N$IU;uR^:eYOAE)J%i3@۟ ]_ :SI-1KK_ KT,M!򁛱e5̳۪XKH/,>xȝ# iM( XCBﲷPmu'`(\q ‡9W1#Gl^2X>'Rm~z%OmS*[bVP;\{rN]ٯgg@ uyP]CTE*or/q RO"kL:(?["ϳZ)^>4BK䌬bl!(*zjЇpSz:(N:~#PWUHU,g{Z( WudG*@L\ T&zei?}Xxd8Ҵ9aj 1؇-i|b?&#$ˀ# r%Hʾ`?FOmJn`d Hȶ.#@0`1E0{I,}l~Ţ&tIE3ԥ *!PVũ܌&(tVNzdHRP> SycȥK;;nETHJ$[]]X|#?Uߙd~KO"Z`4Xtyřu]^x w'VGߕ։@~=f7)<.Qt}"#fȠ%+i(l&J%k?'nSQbi(k wV1oPMZ?]0g! ko8-f }nTG0m,@(8 4^# wBsHgds_'e ɜPs=ə*P5af32=%Z  #xBw&2T>(f Bn!-̅ʍܻcf{<TihJO( :[x+QGH&@k9y"jm݉)*gdӔ; Fsii~rCˌ'1 ʢRXlzHOgpSʛ #E%@J6fKt-^>t0G*٪k%T6h :'Nʊϣ )ƉSJ ^I~rm4r<`(֧Cag.r0)&~nا#g'3:>-4qtuLrMLJVy}2΋.sݢټT 2ձ_T6A25ai>f{Ovh?DnÑ54m-cb^@O4znp0O _CEp'tz5njkֽ%OT ,+QtN+$O#[׍Ӧи$Z;i'{(WKVK7Ɓ}UFX6K.҉Wa"1/2M uMH`Yd=4g56:B[ Na j1?qlj?~)ƁnwK8w0/HڈYf8n43kk/C@-d,6/_0V3~p}X>5 3.Xi'``7'0vx#, ۇK|sm"P7EzSO.m­q!? utpnVdzI>|Hƚ/T^ze'wc ,1(TgXŇq.k;>?bN093ԧ.@rc o 3J1 bDC+Td:Vլorcy nVkAzأ$A' %DT@cNn!~K>t*j%*iG/q3W:N D.J=CoBy{^KʥEfbqE__S$ර# !Sڄbj 67^gcT ɥC.Iܸ lD_A/:Csj;r5`fuYOO0~ '"|X h1犊c@Pr`,P/8pͫ'Fڄ֧- r-҉{< [B@lGTqw{h[. iI4swg`|ھ_JVȆ``>f*ip~&C6 ;KxZAlG-2QE]6#Mm̆Ů׾&XhyG}+Է˨A#/BQaZy?(pUzbGCsݽwԇ({Fagv5U+B1/*0t$ܘlPq!MNvMHtmeiaBfD=29'˨p ҍt@4TJC|"eU"a-ʷ,/`71(;D!sb>^y>Ї0݂X>)RR!48#'0G x 90Hia5dN)#MS\s+P:+`+o 64!*_BrjS8-mS+^ovg/ןql&^A$_7 sZ*P*\}Vy"~!S,y#:?IV=^>Q."Xs*%Rh]rZ%6n=Q8e5 MM~=O5JZ׹zg?wTXXEɒ-Zt8Xط'%2v#&{kh$kb\(:J3"I$+}A+A{߯EmWyK"H~f궇s_<:oL'eX Hn״5 ԿRcT8q_ʿF\lb$Z4 X@:F<4ZXwY^ܧ0t)]ݿx4@ c*bA;X6rҠnej0U}pWk(r!"a MC8[&b< 7%e4TkK y=C+`v|!\ʳq@}B0 ^ Cr!J7&b "nOJldF%3/?/6 5i 5pkMY g> W+(aGq-F-ivGe0WDzE}J j!.PU^*]>UD nNkxP80fJ4Kշ[as:*~A  tz뿵 _B2A bHc˝1AP _X *2ҷh#4X|ϋO1uLke|NJҬXw͈2d0$b@هXLFs -90$hSԣ]<<`t jIРE#X]}pba 遼Mn09341QǒxPMD(?9 j}` ui<ۦu)]kRXA9&b( j*۹ȓi>@;mIM(-6@X1㻈-FbG5sVHf˰AZ QjiM]4OXxXz_. 4PxkdXV]|8ot*dx15NgK8cZ A1Ȉ)拝h1YxX硛L* b(|E ?,6z.Tu8Ef1`` ~B=9eF>FAzu+ jHP:H  uS@s$c%YPv&HlUŸyט 7.X }HtNg g]g* >YZٚ[f}f(eNqA_[Çfo_EV=gveA'#3YrFASB3&{n+T_$ g p3EqVGʢ,fQcFcf$a4p1SNlҢޣ%EЬbcmЦ^yy-+;O7 tgLRlVP^2x tØb)[1K`4:4qdTbًJr W&製;l0"Q% oeB^Ҫ .=4+4p8ĩY#fJ픜нD: "5ރZT-,Ϫm$OتD澊&=WY~OG"djVF$b@CPjp)]Eov@jh+1w!+wmy0d<\P@ōcأAQt;a uxoW(6&?m߃mk\%Հ~A:ox!]"񵶙Iv 0a'N*BgU+ޝ銚$s{U-yn+ur!mBS1cT5%;0Q:*f|yqDG>ebTa&[ uDۗR?:'<)7`5Y`/΁uV޶[׿XtИחj\hX':k+kKMe ~fs.Qu-2kChܕkMH`3ˋ7bFy^O n 8>a_2)& U `!p*b)vTxo/Gqu0a*AF2>.RL'fm l ! 1zzjoFQՌ$Pf#mֹ80uk2dY~q` ٟd2`uMv`uH`e;hf۝nzX.6bx4}+\p{@g$pa^AK\6c ,j`Լ]he1c(b{BH5 ¢,q? ЩIVBX}F<n|8/|倰>gu+K'J ;i'XT9wRFaY=1~r';ˈ| ${GhsWh;֥4L'{?BG* g|3IQ& ʸ~ }6%vOot& n fes yKI^X(pY4L1Ekm`b:L;*ȣ9_ WeIq(_ )f"%`4jpVߗ~5_}><DuL{K"f'R[A;"Nnc(ʵuIվJ *+Zf+; a {=k|%WԯR .঱wz\80hZv157M^x-P*׆2zfS@unnQL 7=-#M-ĄG_QWOJMR)Da`W|38[뭕8,/ < xsYE||F)Po<28}M%Mf/RPXH&ȧv^lږ6BNz- yo!ۂ]Qɼ_wDA b!X!iN ^heQfQ+@x~񺎃bdc[fEjX#íPS~j1WZDQyV)nJXٹ铄y*9RV{זVWqԧ 2wJJ[FяVҒ"g-I߂yV ĸ:a֑Ԋmdb:75)Ih\ ;&}#*Dblv絫7؎5t\2#D(ҽe z;ESVԹmooQKyQFSMU]uvCl$nСR.fZ޿ D;}䅅ȁrȘS@/*WTn^t2t*>HeJ% &'w&3Sul3g(F_uV9WoIaV=y}`J?fF9Q,Pk}֫=܄1jv[J(v hNؑO6^(hwB=Q(9,c, +A3jF.'%f_l3}f%rOr?li_*(}(ƣ ?l67TNeɂ2E<(=|EG_<#Mթr],rISR/~9~ȁҐ=ƽOSbrgȴW04Kn`63|6C BKdMbrٷ؈W%8$K3z`vE6J /wG)|/fA]u/&wB݅%=)Z8:4"g+n3"9 2/H̐|Ҏ|W5"$-QCz!jKR/U$^eQ湐S,~Rd3+XF3[G˧p  !r)qIΟѹJŌ-MՇ#aIWyXVh TZ }SHKpJ׭DD̴j0g `mP|jaE0]:uM.B2X 0}995a*YʇK V.4}hxz@@m5 >CgO@$HpNն-Z% ղ(TAD9UDp'+bڱX G`0`ju{R&sӿJcXx-F5LmU_G1{lC2BS%,>If.8UePڨ ]{/D7bFL`ұWТ;iurݜ=q=}Osvs%( m 2_{\t{vg~EHb [j`k$wٺpCx7Crp/Iǡ z GE3nJĎ17o4bFRA_…ԣ1L ʧ=c&hғV}W>G,at%P'G nǚg豞VzS1U&s^2>NW%;"SJ^2~}:Q * .L ܻY3"ЂKB84ts1V9IΓMC.q2ZH" DN:LÐQ`EXRA&ka`7\ҳӌiAlUDߣ. bk~gThY=/@h3BT;h*XS˘˖;Sb M]\2YDAYwxѨSG/zFOV{E=e oDtfh-.'\5ZS3}n7y6 DF8³`j̶%gUsb,5g-YbD^(DshBRw0p 9羰xx7!.pDÞ)ONy2Dz(Z>}Wv{ZOv:I\*qOf;t?{&d |/8|F=%TWpI yA,§nbˎ2r`CSnՎɒl!Kzx !/,?2NYx'_ZɰW]ퟻO:ocS(WUwCÖF/Ԯ4BGT2Y#țv" .4]g;@HA2?m ZGGnkH z*_qݨ,hB==(p$<,?L+U^wۧro %wĶ?U>=LߵA⼬$+=[1x Lǰy]@~߷dOc Fwv`=4MǺ׺::?D: 3y`vj|5u4ܲX]j> c "|:60s6Lu]" VAIjPI~r kk! e<|}X u_(lPWh}誫'C^t+ȪeB^s9^Pt=7~sK~EE=!wyo[[QNTGm%[mq5).4Սk7 ^zXmv>x=M~MX D6]ii"=ks:zdg1X[%G?+vdbhN=Q;2nƜ*Ս F?"s/55eҗ1oMխ-Ee/R`" ^:( U񔩦>+o 7uc[eVQ~aX謲+qesFل\@7jHHBN)Mum(mH.ۜ-Бс ;[+{Eα*HI2)JH\# 41bMZzyeґgo09cATB:n39(5/ eէcs9W9WqdTf\5g4"t4bwٯS6V _!M2g[us'$-*ou9pR5,T_+.T]+DiܙpcU073Ғ3 ۯ-Ѻ["Q{-퇛IGY(:].Cr8fd\(GJKNO/.}ubH7'z&E"_qE7tS X67AC'&lm[ 8$g;oL(72[w$ڵW=NO5+ίÍ=TT't>V;g, iZjz-F2ljI |":w2btnn^|2z==N4| Ev]=pzWa;p2<%Be*nlVʳN|x3ۮϰaR"7kdQ}`H-Dg~V[2zӹ^XvNAxĮ}*0?+@ѳl#ˠP9!YٝגWv;SMTd5Cc }a|4 E-"ǶC^WSƒ 8XspFQx:l/:Q (T֤5jܑ]Pfe F i"1Ng 3NNNˬŷ(!B~x4³%[E{le*Z;\f_*/UJ3:Ф9 څfXQjBIZBhy.Ҋ/%1=~3`['?i>4k3i[t%}Uv%;k%獁܀Oќ74]1]c[iod5pGee{:XgsF jS(^ö@]fQ/ 4ЎeűFc]FfƸn5ĵeSap'VV Y4k".݇uXi?l~:If顮*CJֽ+:s:Y  ")_xDgV(YLt"֒in顬^߽lMXi$M^‹x,hd q nN$.j@ $qbDw,\=?N钝.U$ `g*lrlJ"-́Cޔ8(6Lh,?l,],ޕ T?aZXT5+WA 0 ?I&"@BRXWrC6\UO蚒@ 'R 4Bt;L^-zͶ>4#DX,8nv.TT˖6 wv.;Obh_}"&a ,zfƒ=e":"I8rgatyL%5iv#R,Dא1`6+IgE%X~Z[Dߊ Vj0v^ j &(>6s?#AbŸ1~XK@9b h#.Pc f`٥TĬb ~6h2NK1?'JR&48 W%]{ :u{~S)y4Q!Ֆu M]cܮO ڜm0tTU/r,YFub,-Ӂ*1%GcyR_%m0oG_7Y>x\OI We?}#Y5[̖,[nAԖb"gJXUԓl$N֟ꕻI5HޒٔS ,Ο&9NF\=R.#R1xIH.]7ܤzJ}2տ#,!JgC%à`ғdI3K(KU͢2 #"I V)ቧ#y@xP (1V_+`M,V D6fչ;|) ? 0]/ˢ im͌&&[j*$:9?_?ѻAł Jtk \ۘЉa31a{Djj}TIhhI) r:M ȫ3om9v1PXx!F )JN`͍5_I!ZGv)qb~/.rz%#-&t!6K*&#'q!~";m+|ewOAs+@&a)xŴ"{q.UDW ƱϥLEPA# s|ЭhńҐi v1ĩRs?!8& wt &Gm[U0N$=tdI,l]>ѡi^KS2s󒮇ZzOJ[.ZP,e%}:@t~k'HvF<ƐSgkّ+ .pZiKWv!mXN󞼔}x hVQʇQdRRvLTB +xFܥ3O~P tIws_Xb/sWZCٓM yũյP pVS'2 G|WG\όS3 )ytXu?ې [HpU@K5麐NqpNU,5 4]?m 6PT^ѷEiXlg9+er7RkBG ,Z#/҆c!f'0؝ k\_u}F>3Gs,\ꢥ=+Rlp8;eav#-vgrSQ<S%Jb?^dSKŢ1{'=iT@X֐9pfFhJ*o$IﭐDJQUϛV5<6.*c w6CVg F׌Y];򋙚xJH*x*Ltlw o8#ݰF8;ҪNqQP.+&S9l}7cbhHh xI,l$$JvLRbl.DJnuMJl'ZC{+ϤNE|λCٮEV?#'QG3F+ސvW~Te ,VFmHܔc$x.w6"@o=/1%'hIf0S>: KP<&:<~[NV2 xjRЪGE%弬,/bBi(/!JE=]gMzovTg=Kh?\j~@ӭTmu5Ei_JRk瞓*A> :峸,$+veaUekא+[5P/ύΤD L$_ m|%[!ꥬ9jc ; pSlӋZ@|ԅ+?[u6@lqCT]Z~m_ZNMŦF9ʞb؄ , x_!*?d7O0[7!"v ؐp CWlى;?5f?I; oN am'eI;2'hc>n x&tYy?nQ 78q ؕƩl\Qލqu{ڛ$ćK\"A+\.ͰCދ+(d}Nf<*,wx`iЌG' 3J"aU5g7-'jIbv1a.(E-d5WhdFg8jɳRbtSqѦz!ķ0+Dpt7älk%22M!Yyb'RKo j/߅Gv$U^kPlj<-7 -Ac 0E$}R kX5àI^Jet$$uy-6" +a8k\>!c.OPam}uFN"L/#nhoA̫FI89;%vFNH0*&JEԍ/#sJNUDH?rLA&mXG)pDD]jxxVz}}+6!uH'ҩh>5wz 3 *`:J 'ظ3SF__#0AD)V|9<9bi0%nA/1`\;#U9f1]!-]8A@;Y/_`AQ*&9Copv98@ w*+-@D$ElI"ClG'{<` * ̰H7.+T0o06biIJ+4J֞qAUa)I1++;&.]߄iA ^ԘwV!MOk*78*:#鉺/c,50RToSW:!״W) ZJA=Io@?{c':Koho? ]p*YI_ekP &Q3=O$D7=WҿQk iD;Q2&MBmGyw(GP8%&;`AK^;6ncV M[5Cdm-?ꉩCϰ8T P ל/S x)Xce\OYDRDʙJfo(}?51}@t|*pC  $Or \Y674gnEMq}b.i:@nDư$N_! cr2Y>Q؄RR& HeO[x@ [ŝ̌4/e64_E򐼔) G7XyZ&c?>XdImFh+֒oZVLoS*T,Zc'M߆S[-ϟk.b5K[ }?M?fG~BgVۋG>8 ~3B[F3xK_sx-̪Xn#mU"V؛!zrq"ShC*mCZֳ V~? ԰NX^p4Uh݀l>U4P?`WUXb9>k-tUpux`ل)WfR]9_1KGZp ;@&CYC@y"+j07'J. Jƶ)rL6't](jzv~R[7uC` y`hHGշvȞDCTZ_z.fI} jW9GVJH֌Q^OԺ+n j~UupH8{09I97= {_ Wp߲̋RbW؉5irNK{/  nU z(S%L(4xXꇈc#e\TQ8NR]b`EW)x[wsz#SKI3)y@"dvr}U^"Bؼ^[Nd˷ɹ\~2Ԭi+Ŏ9YZ@ˆ@cU?4"F\mVfﷺ׽w%33w bECikrZ 󨣨Lay .i6Z[b6kTv嗛9|I֪hUv7fBc,v䑳Nwn6b&GVty7nxY4JCOECph$Emspx4$%}G`Ս:g5;B!~9RzC<K".1h1џ`(`?#"9g]JTOm=XW8̹Pңärn#UO9peةHrC !##u=rmqlGw9 lQ{6CQ Kg.VLIeS8,;U S8Q#DtBIܾv\ΓvSIBw"iZOWT9)m7??[]]CŴW?7OK6wGGX(BymUOK*#? !d![]t݂SgwJ@>, !A '{j@eZ_cI;GgK%$..< *|k.n܄RW E9 &S3xG a} @>58nL`iJsBgB1̠ ˍ\#8*W7qޖ=p))4 :gp1r;Gj$Ms'.23gcӁޔ|lSZqiU)eFe.e{4obm։7G8[3{ß1UZ`mĬ˱4*zb2]|;@0 cv٫[,{ Px{PMV.kSyD#QnQҼҎDCɞT)+*Oj0j 038:h]F!J)bqA:[1S>~` "d\tZI(%gS؝S<&A… ,K2MRU1ӜULj3v@z2Uc{fvwlN􌍌 KE6V쓟/Za|i)ݕ:m mcojKv@,Dn?P~J KkI_p(ffG2hU o4o79Z̪m=(/-i9bHqhV(Wo_$@B};|q\1>+[:צ'&$Ƥ}Z# H^rS7f€GR2'ju+W'n^k&v0?8Y[q89u)cٖh4XaDأA'K=!#bdwLC{x4CJ;*/:[)8Vq{r~d$]n (M#w %imϔ^7G>CW ]=ySeǁ,/WZ=* E(9)o?}uP)'a zhȲG'$IôhN.a ~KV폌eM9n`fgҙm?fWRL^DZ>k m|e?m!R^Ԫ`&Y7x{iq}B-㖱Uw#7H9~ÌHX+†6/+]a ֤IXLp^&+Wr4 Y.TfOT%=* {/7y_!6!|cU^lS9bþ el@7# 81 أd2*1M;S՛ٻ0x̓뒋 րb;x+6Kw{X'p0d·EJAZ{K}Zqӑ^7.־հg v_XHB~Vʜ)+^% O9vNRW*(?eMf D{3/+h*z=5oD4zm fY<%)w :&b3q*ݩDՍ=kLְ`9mGXH)M'+/&ڗe}HlH M'$L8W!jLҪqYeť@D@tboE]:΃we@h@, -xuFyذ 7SgP}:ZQ,Q_?46^ 9cs*jtRЯ7yί&T~}uXB Njc#x|BkW$pd`ZEdݟԿk:K?03Dj`'okUB`U͜bK[\& Vnt",jNhAyTiR 1uM|iJϸͲ椴#Q@§gTޞ&>ݥgO,4)/GEOvu%\o#FWRj:IjdglG?jq*lg|ߡ>aZ(3ukWMx)5=ef5.mrW%uɌ|ݸKۓQ,yn}/sXf_^ˀ/B}`hJAYcB\*MDFaG:r?7 Rs4?m\=c3vD7VutkH8%l*bgеfBO&>qsxv&if5'D6΃Q/;TMLY&RE{%@Via;0CpQt8)249&d$XxQ⢺vס}V$>mLC7tER lsPXi&`RC Pi.!)Kv5nv0{zs%}CVm*.w%g{\u"n1P=7q—p <4d^Xo9xE $dɕ|(OP>q˳%V^&V;@/T -g orKLh_TMߟxt* E3!_\9YO<;r8j}ثNyME ٵt|,K' 0+.^0t>xlWҶw({te Ur9.VA!HW0}0HlhoY2j?&*G%x`q,50?ӭW*YDzgB>C'dìP\p:z+b"lqGYe+ \1nQwW\Jsq%3N?4}HKa YIVϱy_* >zs{ڻY(p3dײ2t;<p#=iSty1MY_ԦPdx4U|_6998Q@y &V'{ynvcOLNv~0s;.ӮO17>^w?x԰Zr+¿e O\QKv zIr'`ԆEu[H:lh[oYu?eZn/h@oI92+ G8`Z¬Y:n}|:M!15\qcEZl-!%@=B7xI&0tҾ$,I30ZjUoj4:0'MQCꙻ^F՟( *#X؋;,jc.sZϠ3 5LBr\VzL9\f {R#BS*ӧ,a͔p?Hyg% fk_gJ`PwxS:)GҪUou9PZ K6ZBwT$YXH(5 :ãVf k09ڬJ/W8>&*¨ª@sRXxr:10ui鶤ΆZzjjE7,dwі?r9b;SϚJP1ݤdu瓗yO-Θ5{+BcsF˭בVy!]㦥BA>Dko˭(j#αZHTGU ={4޳^6;Z?\dW*HTVʼnͩØFfT Ε C^iW--[[!6b6!-{ˍe |ÕU=בr^Eoʱ71񋃉s1[ 7H*gSb$ӫ  2:/gx^`Y3af%.B)YiSFԪfsZ`Ʒ؋Mm1bf)}m̬Q2i'TBCgc֨z ڿP?7P=GlT+G;tj` //>KiGU3#49 c+pᴨ   CHqeuW4{:xثRkf$l9]/D#>>P~nʶkm5P\b "haѺ53kɥut&[Tݻ2ϔ]HiH*,]ԃn PފpR+kAF v ɢ4J.eYC!Rɲ皟-{_a 7|-o&jAQ>(^RY3v7bȊq,#3(7!IaN͢Rqځ`[/{+%'+SV*j$\Fpp;$ u,FvrꖵguZU*:Auڛ`-<gj9Kd*UCD\[-^z=FGLL !1gG6?$W&5.NBevBeX&5y]n[D?/^C.2Wb1Ͷ5=F$ ,xUe r"ib(2Uaa׊/†=;$PSfM+yfAW m7$щQTЦ&P:4U*&Q{c y$BdpF kϘPL]%T](񃎏Y c4X ׾Һ `IȶJJg@D(X(`'Z0E 9XC*mXY suV8&eѽ ,b+Na-}3ˮ[5EޫcV#ăJԢ|/RNt2TJpiɊrEIZ@PV%=92QS+~=[Ԭ e-zH$\Ϗg= 6爞O$Lm]MHkZOplD2o s/ td_ InLQ NZhIu7W]Jh.ﶿDq01ț_T׍).9_*Cz= ?a#q+L}p$*llփѧ) 7]|hwNwUx|(*hc @doo9!R%FEY䇂ΉJHme{Zi؜l^g4OE/\V O>g8 _Š̟Xw^H\$wE^s6uûZf 9x{ٝ^-K4+C >yRH S$ѩP xE*!i*Q&(*Aw[-LRo-)˯6 NOKlrIVR*W@.Ny7{mW;%Xc, @,-ib-ʰ}}:(b;uJO~q![ >pq,{Ku~8 oMec'O)p*/M}8u>_4(t,;.`kFxkŘ8ڏV{=Êi e/[.j7xPdi|}tGCQyg99/ϥ@b\k{T޴9?,I=O2ӲwI'{uq$H8\'rFD$Md,$_.UfSlH VF7dC.sȏ  ˆ'&Rmh'Ƙ5GgMY ráTψVU l^< UTe2E+_QwEK,LyA9<0ʶl/e lt naQzJ R)3🜁OzŸ޿yMV#' z޵2HD{r/mE}iv>sx! ܲ=g;tBA 8e5IoOּcn4f~ dOtGfK~x2ՠsv̪ TE*w3Vۦ$kWD =3GE\a'&ͻ gjvSj筆64R>v v'-;vtś&;"" Z"1mqul@׺c#ىi`B#ǍE9jOVh5C/,<ϭڤriO^0c(_4˶wP[L`\"533oZ:k ݊?tEVc,J$qWrQ+@VCV?}.$˶nl]d?IU v<AB>ߒh 8˧Yhl3gQdi}"̽na5Q&v"B98Py'ƹ-r"UcrQ;4WQyhU"chjoT;gò,Ҍ/xMkbs+ر`e~:Kkk6B%+b tfKs?Dg{8 [.AHJ :6jBW2:ɿC9TmZ},Zk xS&Cqr&^-|'@ 2Ncv#%^![LĖn ,zaybφ0 2*QA*RAJ*iR vHy<^~ɒ+՚K|Hn.3O׾uyGٷ;";a@=/ˆ4*P1ik*ѣ cx=cS ۝O('z`=c xpz nmuomqtIΕUan`a#FPV!od5W^@!f),6u8bQ_t_buyvW1Ëʕ"c:́_cV:p,;+qqEb席 MnJ:E}̆mSaZg3t=ogpeâ3G;;x[ՙ.f2'{YWDn V}=嫚уi*o RGd΢.g OW #mOxb~U.<Y>(jܙԟ'?q"s"y/£#V*&r{Z_} u[ۋ08eGԙ64{w,g֝?=~Hj*Y<.@rsI3.Ec)@lDJ6NΒ8K>'tՈ= j%h?T=Gj{3)~m'~-kX6.WښH$P\`w{98h>iT) WCذR*8q0[0(R2~ y*DJoVD~2~= T/ڜ9ila)R5Uv|PW *z&V]x y2U/v-"`b>gO#V kp7,d 77)j(_k\q}#F &sdI1%LGP8cԫmdl0|:TbzquyDZgCm<=K/w" =#,;xڴOPa8}7-QN۬Ѣbcq?2jj3{AV2]ƴP|96ƚU\gI3I-M>Yj5VT$)-p=5Dڲ_XX⡱5U\ýrhW!6_W&|'O |Q7ϬJ{>h9&p37W= ?G&}YY8i%r 9vT774"#hA6P &A_jLc*"gMJ:EpZp^bMF7OM1w#l>V2dv[ބ Iu4fy/f`X -JZG&r!w(1[o(<Ҍ}x[+? WUfqsL)1Cjl ! MjMNizXC/aSn/Bc5]ݠGptFu99?\ {r};*Wi7iʂntmZ,_^KK؎-ri~yszs(wHOᬪ OԈu&t#iQٵX'RXDJ݆MDgpR**T}q5-ꄙ.7!=rpAڭ"дJg+Sgga{A7m=d^2ے/?-/j%V泲杲 u8`.y]U}i!ދ@c!H!CH}ꜧ }k ?rڞ. =o_1ަ2받~N4f)aT2(И5P/O{ eO(bZA$b{ӎO6]/pD?t]$*LՕp0H[oy9Ln 4I >`c /Zs[0XS#AF{S^_A~i鬟v+%r;ӳ@SYM z$-Q?r<'LkG& ynK[ˀj!Glj4|u^K R=ʯdd"gKcoo5+_o;e ux.wv:»ϰpFv%8sPGTj8>Y դ0)JU{En$* rj߮{;KJ>nUpx~A:8 fkM k)>SC8UAgZZћL[`a1APGaKDUR7hFdur{ܧY_4 ~=*˲rҥ @MvYlwO~ o)xcZ@x!= !_X8p,?>2,ҁN7=gjGj:Kkd}+{by,[֭/7]lmeK-B<($ӓ%b5 )_@"XMbdƤ*q妹e<jj494;&b:NU@w B]ah 䰞Fi.LM -٧;V/4p5nqd52ty)FZBDdUxPdD%e%x[ eb'tߓD&l:ץ2/P\J Љjrq YY&hr9sS0 +' ik%<\*Jݖ/RIU/LeU*In@' _U/ >Oؠ.a qB<-Ζ(Dr8JtS+IQwnVE}T#&Iv*3rCq*zţts 1]+[S2(&@Y$!iaj!qYODwCF4J>K]_7<ա״Әr|Rs/C2GvV'Ā@:baNH4䑿b4<2"bmӳb#]BDlP'W#O75X7Ļ+t&< :iUWƭlygVez`*@sa$'&p}YHǕz?bI]*oWD.u?uwpfveBL' 5‚Y+:-K&Fԗ~C8xM\EPa9Vӧ"./Ș*<`ϏOMm~;G m|&F29HG[31/h[Q,?xj=kba2n&9ܱx-:qW"zmQ7}4yW]p%\5ҵjSjBzҖ|TUWJʈyzATUr Z#%RϔW1_"7\|t4wj G7KuL)+a Tpx@ m6n]e/F@E\GGs\%G*v[JjD'8<*xt?Z8]LuK/@ҥ9@+bL "sXubuL)S;F>@|{/ B:PiqFE]RLhtbpBrEsܲlϝBR d{3`j'J5rHΆk*)+,]s}#T<C ÐJTEھ8nPH g Ȏ.*ބ@QORec1fMc,Q aؠ{dhC@npWBsd<x"v[ W 7ᚁ3QVSk}q.Q !"YRˉ֏uilߍ?bCWvYkӍepZ#qMf-ne=CtKb5j[>DkB-4|tԖw9PTv$j~Yw?^`ö1TL7W=at5gykn 3 l#y-P2(qv<#2N| o٨V>@PhzA*~j2^H6U+mf2}V6b*MMn$" mMI JbXWxܯ Iu{VF1ݎV Ԋ;W1MFM B/( 107 !!7Lɓ:j7±\8fHM6HMb}:^΅/Plp-I6|,!^/߽gTuqTp\K'P0&Nk,"ۺO \F[ Հn jϳߖV]v1lB̋2 p5 "άo7.*|3DPx G?hyĞ64@nDhjm!S7_y>1mK&XM@ϭ+ 䕄nLkX>6zOD/j+/ ^ ݐ˖JS2.PaBQɞOe}A7z!85c54iɣ~eA~ԠFb2?^a[>MkhZf*kLeRFmve~U #O"iXQ 2D] P4򐀹%U$)1ŒJX͸l-pBț-Mӱp$YA%(AK[-,9]?`݌ ly0o_RWcD|DjaK,˺ٚZD&yj0lPՆ劻{c;[_:jX.8jߘހE;% )?to?­?nPJ*w"V&9Ka7Hx6Q3QI4"m~tw{~CwcG_<s4MhXyi[idtWD%N"]ڦk&a`n_J:py 7_gvjyDhOWIAEdPHwHkh:hUWiIXi])`~[e;u6"URUM^, D'ng림17!ZQY{3oXq`gPIJ9%/*a}5SK{%n -QΦu9bA֡hdz#@ރUh&,룐S$q@zLlf3>74"V3}r؅Ev@ܞL{OzmTDPTk]UvrZ4>N=,@h|p_ǫ[k13뭀uo?6U>ZQKOJ&nEyTRiQz;M,iY5/X4Z- !ƫf!xaT $ōmߖlPި۷oL,Υ%\OfB1Yj#l< c-~qcEx as.D- W놳NVwgLZ1De89 pFwCVU ޮvBO}7vhFt^SnYO #'pFf#܀\yZp0i6cru5'5kJ<)=R#Ld NVDfBP%&gsO Ww}؁Qs}RZyS~STz#ũ)AА9\AG' v-QJ' м Lc?%/"2QbPA%˷ue&Ȭ?e_']YdeB7*{2)zNtqiW]qn4`jɤRD:k ^/`q|Hֻm+Bz= S=hs[鲲>+E勡yӴF dZX4{.lXV{+|]UU\Or GߣjE;LM(Ȁ^7-` 0tj݋3ZBi4(b13U<LOWc)m5b%]?M⦿ P gWNmMnyfMϡ ̈́:%)O (q^fW%u2VS|O^<<&0B xK^:!5pu%&D0.M /ٔj"{`"E 0q"Fh+^j`*ώW|3-pm>5ul5Zj^OR(+b+36]6rzf OkwUjH[/>nUj3V-*Nmر#U<;>te-dcߣ7ПCҏ+Hv1ڐL7`Z,OcΟmu'>pV ^O:*vF=I_ŠFD8Rtc  =: PjFEde{J{Wy٢MJ/n5,HE-+\$ sE|p +d@<^EߘMT zn'*$m݃bVri2 Z˜'aBO)N#0ϫ )Q)NM~$Ʒ @ ci|"wSdPվqIrĈW_AU>3joHōf|'DyEig{hfECZG`R2p8}E Wv F7JâU%Wf59pzSJ{ěXD<5Sh%4o"7i}Kc@Ý*X^esSM3}KVC%,26_-fQFE-; *k Zv/԰|ƀK YY1+|bȏrKٷO6 2'E5Yhy\Ś#]Ynv3rӟeh֥e{]Uf&L]X ݖl>q-uѐlJRV\z3̗otj9deXϏVXEcnFh=XʉOJpAx0 c`V؄7RWfϞXcR81ެ}/nT)rT3P+5˦)gYNx<@DGQ\;[J'[!;Vϟḧ́=~u)e[\6?^Knv_af&)U"<& kQ[P}QV7^0)2JKA| 6g8W.y!8 DWRBu3*(pa7g~R7#~!hZ('Pґ7IU1a )?c)`R{Xt:Sc3?w HX/iJ!rJ.pKT֤J2VLFEEq#,&O|F~(ÐWm@zYZ+kZc%;jaoO+\]nƔS0lw bf-$e0tCHS`Z D5exS3blG M0jLQWZ|},KQELlF#5U4wwpPuԑrI73-ōۖ d/g.Z]cb&'ZlgLSZt0Pi`kDcv]"N?ԆHkTl&N޿1)57F}U1jT+H#n {$^Eh % <!}/t6]g~a>m-#dM>ta%o=;F"ѼFŤ.MpΊO9tRT r'!P/Or0=FYR !?`ִ< hk#<$"j:2`ްqD\tV\ ͜'[UEm#Z[T,2ol㞣D@4Tãjce 9'M$@Ӭ\ h(׉*{s.BakT #ɃI] c귊Pb1ЅʪHv;ͽ$E2&Oݠ Ӡ8 0YZ=nCT~/dbǴV0ݒ`9{czlb.M vOpLP3 gԽP9[Ԇsqc֕pR KHppH%U( Ƌ+tJlǜZ94=Wރx>uh́ k&T5@9G5d?* J7킇^ESRBn"qcy].aRY_)Ie"A\LJ {ӭZo4TX'Vɺ8XUReVZsFx# pW6gǠpi^E".U%]~ S h-K/L)wj&P@\Q/Q@]p*j%˾}qv- K}/S)p'u>1oGr:hAתT>U2_cmr\Q<ӛ+3hF]BrmQֱzbCg3e>޺XմŒzGr,C a>mB  %r136P@d bo(,z) ]C\Ak ڗw*( H PLpQn@\JYbpD7C2TPSpr֥ހhKaHgRNQ\\9(rO+*/N*zkb>_Oc`dD$BSI=_:E#&ü)8Hn[LĆG8 MRn +Pz%@$(MCol!/v QEQҬ`XN@[}Z2^5J8}d\&-ô.lau 1~o&"((@pRPAY͛xL'AXjұ9-W7c7# f< Er8ezrAP d.V]Cɍ[?)X&Uh|ؼ4B۟*w,P}$Qb"}(^&I𫫸=A&Z8on!dn/#N}fѣP~h +q[ g g&r8!-S$íB u":r={N0[4>~Rn^uUG-vm$L9ٷ+fTcL\|hGIiOUxy, [tkɖҞJ폈'ihlK=leyÕrtcŶ}u15R4RQG{,+2 K¤A 2Jxf[p4z{eaJ2YiOiVB.po82(63XDCXYC ¿t[7gr@NOjSlN~c7 \!EIR6@ I1 97A0xEO4ffrA$VJ+vr L-wY цaf"FA?7<59_j,+inx0cKqU6@/:ՅcBzgV*dlAHy\бc(eXV-MM1IYIY7$ɚ-)/Vs *A۠W !!@eO>| ͡^̙z e 7]+]<1Ӵr˦51DJR)-M( l|wP:88r$wE"zK[bnX7$Å@lN 0Um],#EK:˾d < g?T$OjFїޣW U}Q3ieD`4{||!Z NئyYcŐףk\KN`*qQ3|" GV%2})]ϜOrϯ}jU'j$dz)~ױ3Ijxsr=\cjgQ"Ѿh8Dn֙rʾ2amFAhHh< !*raǜ\ryY R!oDvXks4msVh쐍#wfmJl;~<r!mdeDV >ڷˀ&ٕbl,XrioWU㻝ПfUF,?޷JlLMdB  @T&WUk:A"y!l慇ŴrLOxѵ?$f`B '[@5}SuL7jOyGS[W]鸶SRbr()eS]MNնg_xS>(IV(cz Ŗ WkRگjT9h*bứrR~+%_mYٍ?XL{(0#3>FO7H+Ma? f'H}US ع̺mY\t+>8tB%Kѯ.?M\8UՑ &;lU?v^eH{ ;+:' Օ]yq=zXEdc *'ҭf`X_Δd >Ѥ/CvNp>&E|_ I ~_ 㳡O)K-F~irƇZ0Mz|.`LN:Ԯ q ֫db]96B M.xkҬ[|2"\D&(ŵX_aNf ]yPLr\u2s }n-QfڌrDtqmB!y >;y1#8yVgK" rIc:"Ujo{5vRDQ2T '#H(99@$0v"N-˞X}К1(w||C0>%IPD|0@@t- M1 e7?p6y7vĘdF6zGϏ7NzZ?8G;U'!UCæwbCZ*o kz);P^!.=g1女MYJא<,VaR-!Jt;,Zm=&d>xAǧ8M̥Pa*upA0o5NYJ# AE-JC+%9f2BN꯱>&6`w1_(Elf(n6O*)*$=>POu*;tX}ro/}MÓ.kV[͑1לs$|pjZ߸̠]wtnB|&L xΡ}'K};Ldͪրއ ô X_ 2~Yf1sb *mj0\u0t.JKq/һ7W)n_O;*D]S\iYUh<9.Դki2SֳH~S ߲:mHh/M* zH4njROy_'(U^죉s + J_Dplk*qց\C av?UаRG,ig_UH6PK4!id?JU"cm.Y׽ HFxmƻ!IDG= $LFGs҉& A>L<+jmW&k0g>_ajq-1%e&yӾ1gz "/A|&RUM8͏ah _m?pgGMjZ)K(^BV<ھMQ+2->*\FV<66+ʨMCy.boJT] e1z8򾠬Aa1'=OhGM"uQxeϤV+wܾh7lXSc/ٜ v.`^6隯)e^Td6V#4BK{洂pG[N:]t+jc+zGFJ\ɒz`p骧\U6a!կ%vb ?N뗻wP;k2E'G{ۢO<:ТáwXkEufQ3OX vKNx>Kf޾e{/: {_g3fjݶ)!_޵{EU}k#KYx`gvcUҨv`;aiH U|ߋ'!k@<´|%ҒJ)v -Yϡ'14vf5+O)7*_I(/#3gV E!kkA@:<Ѐ"O QN{[?TzRܬe5PE@ t̜~=f_AKP!Jr@R8I/W+^vC$5=V3*j>}M2O*:E2ԛ/S.qg. UȥmyEW]9Aysj9f#IS Yݺ\p79z0 ?tL 04sƽ+?v7B4x /Y!ԊpF @nbVc68Zi!'p1.'(#cA} pMRnjDmO0޻͡˴K//@p \|qAXey'X$N0 HdCB[@- e$֯X& 9_d]EJOWoC:Fjs2T>=`-8G TY/y X%T:4\=k{.u"-=#64/iFH0.D; TC$k }\'L !gەPDў7?UV]Z.3a'w]Ih‘8QrRziIgw(ou 5caj'JEMANl JmL+eqcT:"VuŹ{Pt3>ŦT݉ܣY2ܱRT6Q}/m+ϑft d)^45%C-}&SڠQ-e{xhzɷOzf!6X N"t hס*5|܋Xvv6?E4 қk |YBz9l/7NK87=ib^n_Nh.-/@=HT,;I@t$rd_;jCo,K˚_ Pr1<p%/(WMO(|sK$5*IH5< H)lJ*{W2YxQ$Bol.Raqhs@D*gȄt1ZKX<$PIi JJ˕/1eޯgfb>$Y㧤,TFPY$ȧPrx0^F0ps]~+ZN"jEӸH4[/PmGXE&:֙BK9 `bwxD~y]P -ݔ\t뀍>g)3,62AWh5@x]VQUwAaRK vrҨ:;ZkU&D꭫Z ؗ(V~ƎFF4!h>mGPClR=?򖅠Kr-Prp8٢< J5y};Nʋ7¸Yr c(W/;h_=YS. 9us%IWl1a쮯f034&b\I=d Yvv~Ok7|f(V8iFZ|+8&@14h1,dmCz02A,տbTv?+ mpm O-_l~4 uԇ-jV&c*L}y_oe[UkTnr9I!\} ^(C2rWvs=J Iv/*rO)LU;K-rA#r3)'oAr:(k:ͯ%LXjK0P*wa9.oIm#Mvb c{;/maQR2"k%.왉t DY>LZe5&{˱NHG\}bH g(D%e6'FiSPIvORp↤D/6QzW4J$R_ͨ1Nd$M {&C+_iE[.5Jqams h+;+"ySq܇V4]rZI >MxTd@¾>A^=hj~g($? > )l<"ߪ;aΩ `}}K"_S%dBAcD %QJSqXk`[ϿDmL&d>YDHђq~o=Ģ;4e(֣bM$!&6R$]#"We=6gΩ*iOi,rf;1< ,ZeKogh'eWp#㓖JL2q.T@hzyND3  Z'Mwv`V}yIq<%krj4F]A28p3[T s}8)csj~ :TE, I3sr$M>Le&·'-ܐ$ @&u c#3.;==XŚp`Iۦ)YѨHv{ z[( 2U&YJ=Ӑ݅>Ve]10r|*(4zҏ^S =g2hG5A9461"ꇩy !X[r/#q鲏ʾ`똎%)ƌ?9) *h0cHB j"  jt PX{ f* A5 ѝpܯ]Z矐*;Q\d}7Lyey $`ؗi'ˬ?6۽{ۼ57Bס߄W~“TSD_" U#Ld ˻&u ?gD @Bi+裆C(GW y•; I1E$c! ]0GFRIq`5'06(Qll〸v;}*lhٶ;E]5K5 /;hw[`d0{Q6>`leأ+[W^;6z1cN~Y#JdhZPLt±06c@\-{AQI! +EE#kR^QKՐ"76 >/D8(-=iV¹cٰ3v.]=R\ms48ǰw6qqbx+=mzVĸNbՂ{ZO4O5 9-Qm\zrMsbAѳ ^ _KZ驛#M}}yađ~j=fۨ{qˤ5}{粪 0C` fzI7guFb~[zϲuҪXYwp7J"Y>-F }֟s0b9F4+;а 2Yr;]k^Ⱦs٠7".7JҚf "} @zSA L? Zo"].薉GqrVR겶{ۧ1j$>}-%g4tR+{zW-?ASFȩȞ5P_A9m>}+e^7 vlG6qNy6=_˻5dhlkW֩7%yWW=%TLk{02N!pVVn?O~g0{?0G-X&yNT2_I \Xk=qx Z)按8JR\URu>טf(_(ya$G76]"bFRnR:J:i[VY"]5 ܸ X1V0?(~̬YG@wU~|@ 3e~Z /!iotb?q`Yؤ9 eHy*۾>P.{Rf٬<^LnUB2;jE~;Ńufiq( 3qVumSNˑ_~ŧS>Eqɢj.ڤBtcHҡE٪gd'*DU>Hr3|V(}+ic>+DDe$HDQ}Զő_,½!N8Z؋Y;m=QeWS:ڭ663mx)lx]A7Z31 t?]J#4~)HJ$Qdn5.W7|)> sP4)b {fazXGVzHaƑe.HL4u~mnM}0G'S!!^}Ӌ7R5BYTK_PUe1F jf*kUmh'9)DhųFc|9b=ʊ'n7%(W` f"Fܝ W}ԛY PlͥҚʹB*T`oY"WӚN[a^OcGA8;eєo8\{*/,댈aԃ~.88e~^"a7tj╀?f4~;!&i 7򽡅޾~Eyڡ+ڵjToaH3nEnO}K(}}2šY7l#o<,9BUN?}Bk0}c x9uKK;mbjFɃY-lNKMMC \x:PI^:/ Z afZAѷ0]Mȍ%M* 8cGjclڴ,g+ ReqВdŐ͌zԢ^X)qʙW8R#DIBU?@U;9 ~A7enD-"#VT˺ڠ˗7#km.LS MWdMr]wm_H2A} \YkO!eGv~ ­Z;7ٚZxL\}+G8[ڔD!&J-2,FKnVA5Z$ _Z)eZ |9S-rJ:0m$W|3)NzBPmfO6Lfi,xV4xݘZ"kpE/5>Ab*%c.%/95$.is~Fs-=1 bCŲ>k^aB|.%.a?>I/?H=@?h`Oܵo4,$ۑmD`$JV/%BUĺ/0/k`~}䳵AK,G'Iƛs`X^x YZb}ݝΥ9(Fx-C:씤7\̱`RS@T -ÜהL[isх:Ɇ @ \rPw{~ }JIoREPȭ&D)4 CTp ײܼnon*d~/ٽY='c{6i@8D5LEup%l7r%cj/Zf)e2wٌlg/o),Pun<1+_WlmH/bgjujLrgq NǬ~ rx9Bl͹[Ņ39g@%5kC3\Il (EKloBVz g'!3}_-G&xlΞ:"c~_B>pY#4TP O\Bwa>wݨ1 Wf̚XsCֶEau5"0M^j9mCS!@Z%䱭ḺymNT}ILM c-h1Ƕat1LmXerꦋ)ɏ g so. 1f7mJ½+=4=iF,V>#WӋHo&Hp/!11WܩQ|/ ƫjr|(ՂC~U!X[:'tG~xs-ˡ(G6֭=$. ]Wl4.\f&~ޱ3 4x>*C_-C+_mn^-Cyq GT6{QmpnШax\cf#<|۔ئ}{<:ToXq$lN\v|OMn:fq;=Z CLWE_/\w|lJ^ 2WQGK׹-QF;榮XU#. m,܅1a+.u.DƠvn1>PTjn_RR)n;| R^dX/b.?@+\_ͪ0o}⻋&c gL_/:WU oEƕ+aR[nYIO k h]x#׃#ŏ(3)*B :syRËh|(G1p:xn| Ԇ~/Z[5nV^CO=0 `[ /?sDr4? G3jcFLSp9)mDIb#NЙt* ) eFLLۈ$UDX"(Xašb^–&5h:IUҌYU9m#M' *j0*=FQ#t g%8u5|zG!vv0H(ByDQ:)͹J[߫;SquS1{ /kjpEy€z0LO` /`)Aj|g>u6AJ)8 {FpHnywiVwavcPGEOA| ЌUmDu15vs7 r* U[ ʲqORP+kr3lku+ AF@e-xWI#T}}h&6|+ "oך` m`iVK;˚SɌlkmT"zWf 2K<+8|`{K ؚZpyzRp Ԁӌ7o2uٖ޿%}|^^:KuSHwJGqR).\iMĞZ_\BELng;͖)z&_t>aS[ÆCuȇb[0Kbc=_tч{$eRh [2 ja^%=g\J5Pa8a&!m>Ϊ40t T/\9}$ oA*qTAYB^TH SWYCڹ{ǔkϿ>njv|Oy!@ $WR Ǯ[q&9o[TJՃm"@<;oa?/?kG~# JXϖK'8|bXCoǝY?qWw=?ЇWgP ZϮbڪei|$[pE/CO\P5iCm|ő.I(r\R)FdGRKvyjrDQr|{ux#%f/˩$Ӵ kjq*5J[~ہ L>[*>,֑͙$8wđ5^ʐYz)R O.m3Q( AB4gkÆF׸ʅ޺ fSc$\W&=LVs_0)|+se~Tl8JV[[*F]bi)|-"d?FS,*L"F^`#}vdC>h{S0u4.yXw=BΔΧ2FK IlWTV4Ejcvt\9?MaI_sæ8@a1g EVƸz(a-R?@:7g+g]C䶠NjlGCk`X$hk`<ڧnfaA{ɩn*Um](vVqMn2FL '95VZ)Nr|JiQPZFI,>\J&DwvfՌ|[/:TQꭒBn n\9ȥn#=ڊ|[8n@t]#b. 0qp8ldN ]g~8SサCr[B'g+;eO7$~M:!hځؒ5QS$ˌWon dTg| X]G̜e/_CVrG',7p\PP ;w\ rb~jOS7tIAejum^kwExa*b=[҆c W6ՊKn[ɖvڝtke(}5HRt{Z+.k-oBtDHkWt@ϓ)3ѿ,hpjnWfQ\T[k Ig!0'ۄ q &">|Q\Gy<׃bq/W>X=]Pwi E[^aF|jLn'|"[l#l~nz| 74uKuFGb:6< UmPsRղ7-jG#I@Wzs " ۝y0iy[˾@7 WQXM1΁}p5ڲXN0 NQ"=H "&%pK 35p%*_.15h=`3mcWZO~ 85h-Qhɍk,5Ҍ9>r-0W#pGT_cY]bAD4+pEq3ʧ#7EA?koHexMuxePn"6uQ|1}'::$%-q!L}N؍ [ Y 73=zv/kwv7ָuzΔ{xxޱQ%KYChw-/VFO;d#c6ތ,/{̥\⟗Q=e`6,_,֬`vATD[_!>Uex{^_M[{ .! 9Qp_3k,o.5ε{kbz, vx;j+ʻ|lY|$hČ|gqO/ʻdRp4}0x#Ń+5L+ 3GZ /ƞb IA+GG\>:GCe u\TQio`mBR|nA}Uz虝NHp CunE{f Dx8NfOcG璊$GHf% G舃bA)O$ f+#i4a&d}eRyVzYRrBT8:0{kߝƣ #)]Uaf9ʦx7=e4D'Ωw= )q 'dq^f'l `ׯo_g4vzM[%(ʩG5o0/Wq˅B^Ϻ z<% GM$jC)h'!םX*HPwҋ/1cY/*yӲxX|Z';^e1*DF:Qi&E$ cIꑕu]eU| r]   !U$%\q"&Ń ƧQ\A0؍ 0_DЭOp>< o)CU>\KΚ?p= UQk+qrb}8tJ&*{e܌B]hxO Ce&ewW$י2ʏ5D doƀoDv9&@y~xX$iL{'x1 qhȭh`kƁQ1o6xy\I׍tW얢d~ya70@EP{0* 5\[=mN!KN >< =Kj~b@!Gm L#0.Kx~n7 ib!yjWM5Zd3O+drk ;zYCR*ׯ+ BU?-M7{u@(nզ!gQIi(T~dU xB$ւs^`꠳ %`tAwcB|X\f47QJ#QG+>֝`]uk| V@'}֡l/T?ؘWK>>b|.fbC>B{Q.{f倁u$<]so{= MO8|"eVr?F6Pk/iF^\Уf-B4Z4F!AYl.E&?*>W~gd. SAZ`cF:i@ 햝O>PN-]PktڲTr\kXӌ6,Ԓ}s*~OξС<`]vwdGϪi熍&v7fLe*XD2PVI |>?UiY|s&-QP߸q^Isuf擰y2h4UfEtEt !C k*/5zɘ2#=~"+|4ZVSXI>nv Go8F\\7&-̩uYpIr!?(BB_br 7b\@ -|I-x+卪 E$3o74(q f3d%Cti1(;T$+c]4K5'Gr'@n.dMV˒^rFvsڻК(MI\Yh_K0}*(HB[$DƜi.Œ唝:P߾)?A]HCJgfeܪ20vi˜52y{،F)JlE2gb؁"v9geA?kףCKӢa3I:U2CqڬuYZ9Z1'I7{\Zp'm\e|301zBh[3]}h⭗RH@)} x\ 0~X}ayL̖wf{:* kv%: /S?M Q# w1:aɕ &=D*)Hl8dԎ00--7yh#g= 7GI50Xf3J[99X&Gsq+ +*&ǯftWĵ#whා+MT'oH3(s5I'~ⴷ,\=M8.2'uỳ0~(RMG˕pIX>.F8_y'w1葑AֽcDkv:1;rY%{܍Jz;Ctm20&BBƎ(K/3#xTpٓ4l<6R@Əq*&W$}v`=&A4{hw0j2?[P^ujlWUv=ڇy=PHCRkZoIԐcv2}.=h\4|أ>m?.XJ,H\jeX #qNrYґŦU؍ C}=6yjB4RkR(@491g*F_ζՕe@Fsc"W]1CmFonZ,ՀG5oc6߰CL'xjc 84ۯr oܬE(,(W#7 ؗfژ&BD3 =R:c^Z/~5; cqyB9ŗF>Y?>5k8^9a;!DxU~] ӷsr]Þ^B>C3<\#{L kzxN)YxrrM]a2n65Wy l}KoO05abb]ղ~okh/?\I(IUi#=~9y TvQ;"q>m} "Koh?Y· lgUϑ4LЧYt 'l#/5mm 2?×p_ r΁?K 2 Xxog367w OM2 *y j M[=4&󆐘yfwGw&yQIh.Fqؾ-;NvUb O(r֝{ np?tz `wA5pDdՠ[nxx2K^ #n49`*lTVNR5lS=Nv` 빠% \0[N nXj) -u\[zxE@ihimdX4Eٿ>n"&aD*8Y}b䁙}+t]2(o3" 1x'?ꭙ Xͳ9h֧pLq~:oOLEEy.S <uaU?*}Yak$>_/rl|l4L)I' z׬&#%RK-(-w@oJe "PoU6|ǨQm;`]*ʛ݃l.XV.ve.1f+2GH؊`xg B?)j-"` 0ia0ؖttwl/A,cjg@t\/Ԙ5x@lqÉ!ȫZy $Y^(bx XwV^6!g̬Ju /d*1Mֳ̎ :K)Ǿ7LP06"u^/4ot/xन聥:ٖ $nb!33*Nv*直wgXMXM e@X+ hҦ@s?ut tz#ȮQzH]Jk! K/96Us隠Iv5rs+wtp.s.VdOrl34A%y;(j*BP̢maE5Xèe $Bݞ(6C~c_(]op.k%ިå vh ޗ0q``!L&|pf8Aef˚A}zp}z]hƟlvӿv@0Z O7dexke`Kݵڡӄ߆(זl~7{-RLi5 %O\"1vᄦ%yОgdJ@Eh!Z 4]>=C1DzIM8hޯCJRP.+ђao6N;!!&Iу'u]3=ב52NC)gHy^"fĚފ~5YժEޅ}aOQcQ pYl?5<#`16bxM?/J"Ciw?N3S_5ISboJ eZvcf\&lr!wѸR'+maޭzۇ@㝏d̓NPsEU> WNzͤ&U{ 2N3wP܆/QH-1RB" LUk5# ]ݏl`n8?~5^Dq]-܁O)\{Nz 7owr fbK pmK v2ȩ Go^%&05 y agY?['Ρu(o*fKs Nh?,\X#Uq58g8xn@aECy$?:Xw؊?b?3Kh˘o0AE/H O-$ȍQ!n>i}gy9N̐I͞uO=,/36vIk DGɮYng-(܀::G͙%LԖ96 S%9KBK#_j?5H-AVUAp靈iȏĝm9Ε Uo m-Z+)O~a"͡I|EcE6.D>;VtWd1f ZIjc {iU'OX4,dmM CKĘd{19߇vavވ;9m4݀pGߡ+9͟?zj/x[b}JZGqZ>)BBɛ HD ATȦ& H}k6o@Y'I 9R(EG `1=i2dAoǟQ V 1 @#aC_(vltKjn@$a"46Bg jjL]J;q&^pS#Y!rKZ "N .+u)q ?R$oчROgWƎls(nֆ"˜o޳kv_܇!-]Auq 0maB߀8 IoS\3 eP:^i>^o!@$`-`# ۵ }H I=nVdtc3vX,L 'Wjv6]uC|:133 p)ĖnǛOa..I*@H_&rљ)קerA>A s !s܀Gb}[w6$QY~J}qJNﬕR .a P+@? {Ym:kGńO9sj:˅`Vyda苷BLj}*\U_7"=Mڪb1!n=-P6mSR' h ϕېjgD';*7qH:KY&[I2:س.@i ՗&Iy(9\+t&BW)PEKZrgyc"B#Q -yOcEE!p{T\_u{̩ )ެI$?ͬ841Tp(lp+1LDod ^}]_]R\KBDrE+ЮD^D.^(#Jf|k2,GZqSW$ r*R [;οN IpU@+=ScMTQo[!S 3s0er3- 嘘PebOCP2]kJ uRIF?,NdBkNk>Rv*Y^_7M23hL7T=:Nd/mrDH?u,4?-hGv<݃. _oFw{xq"VG'm(5:њQ:Y}uh"Ќפ Cm [qx!خ؂\i($M$87D%=9G/3ܧb{W ^: ԁ9|B螡^B1' (E4F[aepՒxT5A/:QDK OX@&2 >45 0rͻԀ?H-:$Us8"1c lStu/N#jخ=R 3TpȅMPh|Ś>Ngٶ0d# `kڲKI^dg>o3ΛI[kGŗ VqPZ6%nY1}Kedz×Gj ae#_z#2r| PK/Um~_ )(De.XSUdVo-otXj7>[9+E_X?Ϭ};qb$&'g_Q%?18_^7xsOS۴xpJ M#?\)׋O#A/cpM 鳣m/mF59glE L{?CŲ⠜Ir|7|7;r̉o7oɤG8<@vqL]`w3O?]L;#Q]uaU~.PWJi!U:镔] Jf7+ȝÖ~ί'*SĨ&+"D[6a*&UߵD!QU q),(ɀ!Rq Ig 2-oh%/1h"N7D_ncisfuIޛ QoqOPBZ 1m; ѝG z;Q[CT [g@`@KS uU)y4_g陲XG|}bYE 颊.5T "wI=m!m*,Utlgf],Yt#~E$-VX.HJEk">5I\ }/> Q"!jz?TƆo* - {RNp᥂ܔ~ 2;KP越>cCiNިک_ÕYi󖨡GC%E $SgI~QjEo EgnjNxI?}b Y4>Ra 2aEfSۂt$ 2S*i C)jx>O"q`׆{"}vbLЈCg9XBd쇇fbU`3oUI1*dd=*Z֩υ7]O$/}k O`׺ _EѠ "|Q`ӘvtWZNsVaNPF$^*'xr |[ g9XE' SKzxn[TTaJDM͚Wc{Xu#W??EW8f3cw['DopJfZ:%K;Ti⟏:)d%M[~Ò@r"q7M ,^|ӥ2m/zic3;qXnRa8a5(xG?P aїƙX%_dz=B7Đ. yM]jo$u`н蝩w؋BXKEx`H[ϣѓz]VaHO!3b <x:=xbzQ/D`=^2$\35;jtJ1<q*mӵLTD* .ӝI{dL8iiԶ :y˪P& Wx2GN!}ɫj  B^!԰ ۶?$듑_f Pj*ӠP_"(vrHFaNܡ `*j5^ :eҊ_2= O-O*|aܮw@#'{*d[Ǟ0aR0 rw~gt/Kkx"?捷]+C;v7LO88& N'12߂]H4J WL~n(oe e$'?ܱ;+7: $ΖظD3f\.t@;$PHJ OySR#[6j %B^-2ir|G3sx5$dչb=ܯ|>ګ[c0U.Jj uASS6)i}=zgAmA"$n-h4%ʹIZxpyRLf6%໴ywGu^m. adabEͤd8)qa^ BCdq zp/؀+0NysyEAgM.,m0}@煴mau@#ĂogڀHqݔڋ 93>BW.㷛' P QQ,|)"l ³j[?Y_՝̨Xf.`5L]Ċ3,RS{!.n˜Q@-Oysˈm/"P[ָ 4;!p'wESJ>J\6)P W_%O'e Vff,ȉj#:a [ĉ+G7aGLGo$Gq 沴X8ɞ%'~ =Sgs،uD'?@пC/@}O!k$wwk=g;!fYCϢX lW&q2 zUduIx?}Yd0}Xa"zV-`q͢1oǦѹRtmafjk{~-\Y+U8s1pp4fx; hN(o'Nۉe'P"RUKYP GyPwP0) hwvQn͔^ega3\(Os|2t3I:"'HGQN4BhiskRE 2B0P\Gl~ B?2C)"PPHYifJlnfUKpH3Xn5GH'ڰ{Nq ۯX'7kte!ɬg讻<ȓz+o*4{-N/|uJ:GRH|ÛT'#C|^!ն^q)NQA0@VrsƞFb%S7\~ǟy[b*ыw|$S!Ko\4 c"AA9<^B. LA)(p.iҟ<9H?kBE~PS@gBf+01/X̴@ Z <1N|J$[Ji_U}NG7X @M|xA~T2p &f^4#w߾wktT% ="$4fƙ7QLIdj6>dx*),2jOHE%De /}]GďyKy=؟4jџ$@{j$Bϰ[W`*y/CxAS3ʴo@>ae7Dw`p&7ƶ'9O2 YWCm4T',t,g=c,7gCbUYY7a6Hv+0R9ٙv.G-y[molz_g][Cm81x-Zp! uHYR3-A=m;8|?%c 6.P&43-a>~@#|;~[l5؉5Eue? UX[XLFv5nYHᅹ^bB)WsN-ʊΩ`a%W+%bg$y(,ۍ}   5!.-E|Ua̒y1sl&J%.;㫲*߫2MT2P)l6Aٞ %q RO0UE(*0TLUTX5l(Q7[rRqCxHvempzkՁVi.`:jf4'nV ggNL&VQ0]`.bnᨖd>)4 3CD/k0J6;RekU$1<3`J, @,dnsu&Y]Tv'F-Zzqa&0#N%Mݮs7z)V0Idڹ|^)_H=I<9lp3N*0L[:9vCӫ8?(LX!N JT:ogٰSs_d;,,})k"p'ͫvJ{ OC kV-+Mrj5ޮ7>ig8J):5!_QWx=.Jcְ5S0>\BpQ Z ź"75X>*.δ$~St2e%Jޥ*ˬO`I >M0Z׌۝kw,\73=4ٶFvEp2og-=StE ¿h ^fY5հ6 O1+9)up|Mwb1R_bud-yN{CrQ񀬮ۚWG(dv3:dg Վ_ǜ4<XEZ[KVSȷB5UKX&3|1qBNKdS)BSs=#lՁaY6 },|Ff=0mA}Q*sBܹ}]݄90|a ?pa"P~_XwۖH27ۘ_zJt;7qm7pj0~J5 Gvq|Jhq咽RS "Bq^TAM^b; ;nHӥV2K}{)/2t7-c`asq4;&h\vCRNk|["|QzE5Jd&=u4aa#L,-NBb)"g+X0"8ހ9,p?^Ƹ]@o}^cS,ۏ_UOcJ9MK"پŦӛZvJDR>0 ܶ oj94rkk? 'fRyWV֛R*9~)T,m;\g8]kfbE˄Ͽ"lܙEpo@"evh|gš,)& wz2,Z$63#0_ E`k~b0]f2[UM?ƪ䨅 [{y֯ Ԧjd9d rEZ6]sZ2WtSR 穲@3hgm2VNRq/[+>~7F%6$uHp7.= A5c>t9sT ai/{jd I5|-Cm5 ߝ.acرOHnPj=gq/UG\r\ \Pt^`os~|1q/f,IbƳ9'ωaIs%rf:\0Ulj*CxMä555߃qK*TGf] F ZuF3 0@ΑgDZ,WC~8ds9ҝ2K3df#*IMYb=/ 玏S-}FF̋ Oɹ2VX72ˆpWO=JLc{yoKO#WHzn9V"^u|-71 viRGV e?swe1*Oxω۶_}Aq8/<׻ ԓNnDA'ca' GxV߽IHG7l\H~ݝSrCC7AovWM~_ٝ^|}mUo@:C1]ZyXz*8VWTg!>ΖjUl2ew됬@nCҭ&,΋+en#Ļڮm!ʠu';2s[ZTod>ɮ>{4$ܽmAh G"L dlݸuEyjdDy3gy%uT zt -I=̔/ߊ;y}XrE XOa  zrV3޼ѲNq +%q_KdY.h_?:5h=ɡ\w!d_ {;ާZ[ WG:oVo}Q;XZbּ/S 4g)PGX?e~Z*mݳղ4qy?XKly^lXW%oP2}2fFiyZ}w|6mRn/tKfIvn{ZcUs5U9[Y|4Rq۫k-m@!aɄ<./o3 4z0QckͨX)Žb-_<:g8OͷxsLۮg܅!3|~._!܊S}2;`Ox*puZf%'\9 믯lGsbZibͷMnIGjTZWW25TSNvsaVΦםEP"xc2 I.ñhH$&  s(b یЧd2׹Zgd aDW4Ud@ APM=0J 5@Ke4JoBF[늝5w\f߈Is_m?KРy˗; OA2hIϦ@9N ˙\&1iꝎ67 Qsb(;)+eN2 7I f]Մ0+tQu;`=^5sdSKg}*19lgK2>  e{(ys4Kx MՃN5?74HwaŔf=7!HT&߅_E`/XEK7Vׄ>$~舮)May5lB}yKLt?YL R9XnIɶΤ*Zi܁0|)&+ZVNvO[čf+crl)pѯI+@,v+z:Z(zⒹHBVB.r+ĉToF:fmh\CB.AAxKP߭h"V+.W[Oi+-WLLRg"MrHla;ڳQ2 GUD mR1/{%>td`k-TlU.߻f"Yױc <&Rj-d|=8 5Dp1ϸ:̀}Zv碎9jչR7BXHhF ]MU^DX?FS/n̍luQL(RaoPX3/ELx BW=u~ƽ#x=Z/ \ESޔgIЁn %pU J$yjsy߫@+.jIᑍkhIn@myL>L9-j.d:,m%/&?iH?,/?e`p;%jU0u: &ƈ;ѡib/2.~'U&Z$y):\$,bA"q(SZdId%Y A"z -iwb*rO1tРZa[(F{[_~#dt# 0cw&A2`NGHP"ncKmW n\m" `V3? H%IUGSnL oWEuJ;[LMyr 4]WsWٌE*S0K∳dy8J t`\l]!YTYE^杣q/-J<ۓԸ5?^?ạCHi<$ =;ȉ.@L)ȗoq-1'>!Ks>/}cz!JLI2EA'9{f=)[#0n= n H6Fݱ{|P/’Gu9 IR02VΏ,ىCYr0H] |<$, &d !DJ<\a !WjļX*Se>RoUz9T70{Nhc-pa)^X4yQÃhs:C{r^["11_J5浖7>/hnDL:d%}H^&x<||Dnb׃ IS$/R`>hh,9Mg\$UR2+a V.tg~(qq4{EK*=BIێt"C `׀B2ߨNdLjgB1p8 rp${:b bb4&X;AXmڱNZ#S2z1טn$Rҹ* f"Dd#-'=Mf' ic(5}kaqgƹ, _"ޫk 4)(QJU|y7k|oN%L#Y )YgI6DТ }@[G|V)%$-f#cF7`G7 03Sڳ;*%Q6PˉHZ<V;-H_Ͼ Gm}QF%)wA5[ 9CEƀx#R;2Jj"c$ӟn侩BLW$?j{cWE(ŲhL3h@*biY"\h| Z8$8K"Y,:`&\ԣyvfJκNF$L̘#bEYOU36!&T0H-Z EX~{xY%uRU[ HZbko=o5Z(s \rPy8IӔP#C?ОdO: !U5=GgƈRI ~6|t9 E棟L;ݕ֍CE$S.xpnM`]0Ҏ>#] M<3qwTov2tmFQ^j{uc@'z2]dQpjex7DQYǝ3rL 2Gi߆~- }ou蟳G7Z!B >PDgQK.O.H|j31&~ B(c52S`UCuH- KI|x>(ZP=W`lktLu,q~Uђ٪cm|7OdĥLT1/54X<[@"i]-oR %wϦ3bVG `{a݁#]l7twg n],tE!Џ+7.18z A^TfH+,5FlwR po*vcW$ӓ:BҮq?u y` 1/cKi3.R+|i ٨Fm =$?o4AgE!j}ty# xMsxpE ҈kT'oxs2I. 3ƜTMGG8|I B RB@ϣ:D1XΙNrnJS# |dHFf jXjuo %p g1JP\IOGQ(+^: qϑ'7xK $7vnxx_z]G)Qm%,e)8*TF ,<'h+.'#.IT,GnDV./^ӧۡ`SBIf'*H11BC}IYXPa-IBe?\Te&jgYH &C=8pOy.2b Lcq߄AJ@l[ JOz5IJ~aigSNw/i)"[@Ղр,feݡ787ebX|Ѡ1*r9)c.5OtL)CC`nzٸJJVVc/wyKgXҘ?XM"Y,m<tqU3mfOPo tJ>{WWã\ԝ0%,ګcXͽubbZ?3u,?DZ7IY-9u#sQ=EBdF,#ȁņv$'B`ƅcl$~tqm(& AmiaU~br[ Ф_y&G5q jm,j`!v 9CTX^\=B# kM{x\„k*La's_8xʦĎ#rp"ҢB$€$kepG<\'0zA)HT TB%Q)hA}`%~'J&>i}@AL[Ep+"-HfÂ-mY^q~yJb#ٿT^ŵ͍^i3ר[ѼKQ7NQ k]E{Rd@f.DD$dm)%$~%]*ڰ7rAz\/!t#DF/K&G$PRPdE+dēV8<3^!Ȱd&y},ĬwA1 .iJ[, UmɿjAQ[^'5K@rS nǺ1bSk%bgd+HS4"_0%+dd(baAT y0ΏER 1C& 3ERn 5tAóM(Yf]@Gkwn+"HtQ&Ӟ|%[{rBsКzZϨZЦEŹGu8o܉^3o|5:aG6ײB+EؼZO-+Uy Վ֤w{lxc}znR¤wmdMz5k3=_Z!e(0nJ,u.xvyzaIi\Ef=>Vg$k60ǖ$jfM9(0P"{ծmu9Fc UtOhт#|fc $ S]Ȋ%{6xgyA)cw* _]za.& sĊ%Z1vsadҠ$F<@⹂1x9;$'NlVyKER|A#Lآ NBbjН5SViv Tci<_6yZtӷdRkw?u)y[Ησs}K?h.$̯ǝyjw#`Ԩt?P~% XމmZXg%v&4Z&<` dwoiJ6zH8 Ϝt̜ZY*=_3Ȉי%Pn»UPNK=zhMd(f,9jTʙ؜ uBiL|O#;(-S!/ien ?GCfC0OQ){H[b,ޣ1wib;QR9{et%OəOG+@Ֆ]OTw\FE%MPFLƧƾ9dyr\0Qgyf%` K&f-y#1h^mn=3cFQL9N\~rOb:t)5>>>XNR|s+5&Xk^cG|%ʼOq`ԷcZmLR4d^X8y|"өqi{<*(ESuR^-:̘v}hXt4f&jF96S6wR-- ?wT F)\`# L$t)"QbibZaZFrMV߿VuKC]¬z֒rI<ΫDxxI(Rx#1KwZhas02E|F9$1.{dxRY.lv˥,ī·"D<+:+I */Vڡy9v1TCMth_DcO<nWN fTWr WLgs')kA[1.@e1ATkxa4`<>0~sl^~+Ϣw1fqg@t#0 9q|q0Q?Y y/G'jQ0K~n {vx0j]<g"YUf=`NtIP`.A_$/_s/FEh0dǖ7++6 LtZ1m}q$uU%zv'd.6T#'.o1Hs0ȧXZ`Ui,l-朻1&Y92~Lm~H^^^F-1s^8)?j4&^DbʉfV"(T z֜0(of &H\ɺ R1}*gرC1-QUFkގC|K$0B)B*m!y=0F=UqFBi<[qhg Ae+y &}#@ѽ,Vթm+PB" ~fyZa4J`Jw!(KqIH+mq=0܋Eiَ=Zxhuh2N%Vް oaO݁`qDR>2Uv{a~0ۺ4}8@0״]?"LRic150;lȜY1c}'䆶7 %@Ed1IRrVά"KK9lJU9*{\_˒wWueTfM%@-` ,X` ,X>,X,X` ,aMju,vգ~+H FƳyIԪ Ͱ JxeqvtN " elxDxAsQ_j"E=a(myu"Henhh*ZւaX!>"kOm33dϺFC0-;= r*_ߣ$I$IVpq,EOH" (aX!ΈPƯecBZv{d$I$I$I$I$|ڋ"BY!It{$I$I$ e|bތ Xq"eZ:)eǹA@\|{[|c+6VeEkElC:7L+Du SHˎsÚLDLDDD3{_eB0 p!Iߟ+Qj N;{pZVD-~㋛Sfb̲tQf8猠h4 )F诧N? i__XBP792|Zkֺ jjӌkc* 2Ie,)kԖӠ@Bc8E3/WA%7*6k$5^6HI=')TژqL~P!6y@ 1R[sQz'SE^W<]Q KQT=֏YW5VdQev{Rz6A/1}=k9Υ5qf%%J^ife<]*TaVf#LQD͒,JUFmfս`lI?/k,Mo7ZhlQq 0pйR]6pwp{J[cpw1og%-pyB hWg]s[D k[ء[ r Vl|'bǖT# 6,td~g-9@AI/+Z3g \S-OB4bʎ^FWNG >`PJf<'@b<|r_\[5{nM9xQɬUTӲydn :yw ~<8B%__]ω ҫ} iW D0`i3ԑTY,:fΪc9tPsU.Q>/-}wh'%سy@*֝(YQ8888i d$h-$n;!$g,Uo~Bwć @p=Y%T"Q7deQ)=$_<#xH$DfSn >ŴRߗyeHQ3͌s2dc9\JQQIHbNxR9L!VNe.=Kߟʜ}lh#^=٨7#^e9r*704261ihnBw@$QUꊝqI}[T S _bT-S%!r-ʛ~ 4E{IVrȦ3ӕ*M q.c}ˈ}w>af +Z Z_ۻ3c$3`\>a 33fFM]Snݘ3r^s~Ə2Kw;ҚEx"kx2c1c1ZI?Xi08$"BYRUUUUUUUUUUUUUU}y.$i6@D(+e[Wso +B_^08_T "ߵr\.Wف9ڐzFPƯecBZv}_R "R "oqmHhjA2^1L!-{ Q'@w\UUUUUUUUU]3.M5ERx4?1JZk;Ŗgrw|mu:/7gh8;D e\ܷ-P[taX(Ɋi+a9~ ;ZH2HQڏ'Id @LyT 0KjaZ8ֹ D(Ɋi؛7%~r] *$p ֱ#37$iϘ.A9Z%v.WŮo;776QUUUU^U߽aK*Kjwƃw3!0[B$j ڕ%蹀 P^'eq#ъ|V!v:M2m>듯ak˟mvܙ!JuB7LޟKx0EF _ @tj(P vԯ8JHJSj5q?rci&a(ƈfn 0؆tn camRuk/<BP 6(`$]5"@*aYמI$IO$I$I$I$I$mx|eKD2ޚnBZvWOP-9e"|5ZT& sA$0 BRJ({_*_Zr bXnRI$UUUU2aڌYs^>l:$I$I$I$I$I$I$%I$I$I$I$I$I$GAY˚yUt4A3F.)`wYfhhz zN6\m IW"HPeMhvzFqIVTʹls"HfX $+?@)d9y4h4h- xUVt:`'Mg_,-,Ui~{ 2Ѝ'ёwz C? ;h,X`@*Vkji'Toaegq |$ @i@gP Hn1 f7#b5< "G֢Nqo/ͩ $0ѵ&Q;#',ۡE3,`5#¹L.)hx JjaZη& &$tĮ* `[9ll : 0&ʳ<}SzzڤE-cfx|';;_$fͶ4><Ï M0\&esJ_]'>g|vx#_VڭB\i!5ecBZ8m'?!18C2^1L!-{ޙ I$I$I抭Q>K#733+e08mwm۶m۶m}p|[)o۵R> 222L!-{8:z` !B!B!ԃ:W5$I$I$yfffffffffffH$I$If3333333333#I$I$IJ$I$I {Gw kAsy.4K DI$`S* $IVy\Qp| gK*"weZ:)eǹ/@L;I$I$Im۶m۶m6,n. I$I,|c I$I5Y$I$I` I$I$IJ$I$Il۶m۶mP*@""""""""""FP> ^"2VjBZ8x_$I$I$ɶm۶m۶+PDDDDDDDDDDpS13333333333@DDDDDߚSDaRJ)RJM_ZkZk=J:c1c*QeZkSDas9sM_{{?J0l (ujm۶m۶mUUUUU\SUUUU>(TCPk:)ea2)6$^"2)e۠ @$I$I$I$I$ٶm۶m۶Z }s>serG@Z.U:( G( g( W(Nꟴ_9 'jA( p6U‰p\9 'jI( p6pp6p6p6x*GDmV‰_9 'jCrNԆ`( Q8Q:#TUZk~8Q{gNԪHI$ضmUU ^'j姮24 m6DB'aabVp8!B*%۠P2Rn "!I$)I$k$Ilpo\u?0 @i` "c9 `nx4bʎ^FWNc<__|/P Wކ~ ZH6#;@p{41W@!@,@>X,/dca+D"T&펆B=J@btKכR^#RN/2j8s**`\_SK[G--#וa5/}hEZ9~xiKu890q+l`+*-8NvAo7f!r!?١ߊ4ZMn9w9mp4HDyul67ƨޔ_A ޛNjWiŻ8(j%\\k|emYr/>x!z"ݸ2cqp(Y>`ژrC Jt{VD0tYV>o:$[Op鴔9lA5VQi]E1"|-zϹ6Ϸv)vNT)FC J>ĹK3 v:(rSKs+ pPu҂gq5ґALj*;v6ĸ* pa"AHU\G#%jma8!O}a:gi/ĩXIDWՊ1cW=I5[]`#Xj"5vN.ZBhkjj עV,3;e;a'ieU7m4/apti JTM74 첞IE yF2RiFS+j54#6+GDD6 j8xZ !%#B -=EʂLl]vY/ $ o" 2YlEbTSrTUo4[N Gt6_,Ww3P8I޿(L3x6' R*4r J˺)$zw1G>kt ]V01(>P$HerRhuzw}v Ͼ]\=<}$2J3,6O H,錵>]zO@m:OBЯ , ɻ.=TYGsg𣣫o Ү̧niܮ<{ڎ'L"W(;]S(rE%eʺǦ1X^!n]:jSg9#xdwݎˊiَM_a')eU7mrI\v<_(ɊiَAʼn1i7 FP 'HfXDIViَA)Hs IUd:/+e"KJ6Wj.=d3GYZjmvr-릴·cƇb98{5#! KDG@61,l\<̘ѻV~Y=$d&\HQň'^D J*IHfɮnfWPb%Jr*ApTk$XPaE%Z3js>N }W'lTrRᆛ՛_l9rAWVb%JIn^FMhՆy%֣W-\9ϋDve+VYg}d6mٶcׂEKq{'"/>"b="L(1BLJ俻Vb8e/LPNoptrvqu3c`b1KVDDLzd ihDmooiΡS \ܪTQNQ2ū[^H DKG4:8nf-nw[.4W54Ҋ<4/݉K 0Pt#y`=7뢱x!Ad*Eq`eدI Jc-\d ˌ"g{UltL~b/{/.moo(*S BR(mθU Z g7Oer`~7#Q #0MW[V,<ѭɷ|F35^cXr!U+RJ)ZcVRD*mَ k0߄41(Bԅ+٤3^T> k?֣ƻ~g~(;阮6a-w8BB )r!U+>(|}J$ 8 )]}F~N,dZ藒y)d@.*`B REmCJA9.179s΅B!2uNqϮK+5~/uGsj!-یu(D/(ڽ\ͳ܈[x=]:Zq$3h.i-SgV;.{bZ4y#j;sF\69Re?-r!3(1=UUUUU`-C`Lv=뉘'^+$UXep*psLQ ȅTQYJ)+ RERJ)RZkVi{&a+ `ىO6@΅3܊=Њ@:gl52s;Nx4m6sM/=-xt[1 ަklkFFCKy4uIæ5e}Mh#ԻJ.0TD!]S?ude9}GN{׃z^D篻ϟOTta}×|eOO:C:k͒yhOgn'hͧO.ݻF wY޴49)C x˳{Cl?>H[Qb-C!8} ̏T 90P8Y='O[sjB9N }kN"?RڛTH!FHJ}Hɓ c;W}r-j)_gFN{NU auL;=ոՏ(M?l܇F Y]VcWh`$KAa#W]rk-˓b14_%(pXU\19^"?M}^~k8-Dp'+M_-eˢkݰf0q(f4L>ӿOǀ;)w~I9~֦fԬ\e O_n&ڄ_Y7Ѯ!R,խd>Ƣy =5}}zsBC5.LoG~VtΓmW;$w+pB\vG"2ѻ(DCs>AɃ[aމk:WsIԮw)RfkbV\zInp?޷UTK$m&}W߇z'C:]ƟapOo[_F??9f?k1PI8DfuW4<=ő, T|t}|DP48R>AXѤGeI{gr ބLj+,#i|3Ϯu_8)p̅:x?T~^l6~:,DgmC/x01^O@1z_C['M,/Ye'#w-Q&K IkvT*8eX#i'#L}u×aJ.wc2szUzjKř7o'L_TӅ؃%E~/$+9_ȸw,&$unX*S)?27MWhNdr2W7^T'c)~}V}?Q:)KrnZ#]>7*[9xT\s.U˵nxn@2?˚mai#ldN -w6y'V*kQ齖{/bh.;2їE48jv x"bCX d% bP\`6O aqx0(pGō$LL:2'Ohu<A@qs|g2O!q@qA@ÆH7m y@ F8>0BGhԱMNbL.ӣT(mNM12s@/ry{y<ʹ#ti0(VU^]jf옳bef{e5okc3|ZfQ.tO?DFg)<_|i)x*ftbYz;ՇRPIy{n9N`ֺgqrMO.=J5Ѳ2TBuBUJQ뒜q8ç;/@^FAKJEk^-eR7K-GF2SEk$m4zuIdti۔) 쏅?K$K+>ʅ(Ql[')TŌntiSz2׫&nj&nj}L t"d'$'K+!gd4S7|oяVܘ kM1!R+:+]r!Y- X<۴oEgf.&F4 rOX/|VYr>3+sH? 烌7OTzW՝o{=r!Oac V$I="""""3333sBKo1 J)RJc1@DDDDs9|0Vbx>K, .? Pve:,¦֯u)B*`5SF~p72c͜ӜMb1Xʿ !D2@.`RJ)OM+\4n=&X[ slnǰ¨@Q-"9hh$.v^NZB/^|/ޫf5U%ſNYg&<& P5I9>Y$x dR$߯uGuwjAoiYpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.eot0000644000175000017500000050355614502137725027700 0ustar carstencarstennLPYxϐFontAwesomeRegular$Version 4.7.0 2016FontAwesome PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-bold.woff20000644000175000017500000055112014502137725026006 0ustar carstencarstenwOF2P +~f`$f  D>6$< @ o 9[_zwjz2%$d':R9!*z]Ep{ *j6n=2dvdA:nei_ ;$u)m8Nβkx[/*D@M'zDEHd YryE|]Fm,]s6p(5 A*cUA kj}cuyo6Eł45r iu̒dg!W+$#+:"Dg~uM)or: jxC7Y{)M hM3qTd 2HHX`*)́ AwZ[rv&Br֔fIY<¶-_uvEZ=N$A1Uځ2dvDZNybѩp$ !$̒P0'`(cƠ%@Ba.l9ؽ$`1IU vYbjP jV\kOW( tIL{FZ8Upld (mxhg(g-6L}= wB]gaQK#H":L"WCbqҷ$a@FIeQ-Y&85R*Y4] lM5)Љ$HQ0uY3BGQJcPqlhc*c*!]a'%'-ɡnG;މS+@PZ:j*(5ᨃ'ta>^iJ?⍪lNe:L9r)홣HcvֳEB!V7rrnRZz9= r] s 2E$| \ѱ4-T>|iCx]ҞT!^%N#qTM ktEpߋ78,j(0A.!'SoZa2mwAB$d9~Y._/یU$HHt(^Zȯ,p-"g3eX-ƈGdh]kk\oeC&qح K*cnd [1rݷ0;vyjaoeGA6 GՃZ`;u&OD5J]mF,BLֵR._=-6j^r?sQYrdߡ^)/VZ!f'#98K(sj W9ރyɚJ4ya1+ :d e.tߜҾR+*68:_u#|*X0r•fEfdwVZCmmNVy/%:^w7q6M /+sWvϸE#PV:1^׭o{;@m^Fao}7fzVrc)1|<)xEuqr?﹍خ;o Yt:ˁ~wwayFKy oo Eun{&=`HបfŹ|+*b1,}}^Eq-y7yH(ESnQ Cyy݃"P81l.>V-Xvaa]6k:&VDd>'y7L H2b4P+ mlM=)` ne<#ktyGt;?tLv #W-.EhC,9h>b1nB?aYzB9);?hL(TĂr ?C%$lڏ[.\p,ҙ  vo 46 */@ `#"Uε>lh*J[(تۣ]p]]_Ȉ+QhݓrԄ#$U+}: k &jy[Q_G+jHuM;~(:?? tu8F4 &i^>/7L37)Lrx׆D(2tA+]k*i*Dԍm ?^l Ed6q-[EA6ӁZ̡aٴO}v.I.XJMOE(5$;)TbA)倰p@@+F.H@D00Db$FkEc."zpZP"_Nj2z'jg|j!^ճ^Y!p[VjqXD5Pkd,W̴6mZVV}}{X߂pp),58n41#vqalBBk{AsV:)L&s`;rW+ IGi,>W:WL)Jf0fT?/B{^g!!)pdmJI 'l Yfٲض$6[BW҅s_vssY*5Qq}J*13p"v7ih'0OĞ1g&ﺽTO?{O˕b$.%Oz, οB]H?%Wy[]5AROeEF`OGŬ40C0n^E3+FHD QPQ0 ^}}+mrֲΑfM=^0XXRWt@!JUa NJRnpEQE4ClXJ<8DNN8iJ$"*7TnQ`&-ebI $d(NW10K#z}P&Ԅ$P5p36k5 M|nT5/ 3qUYR,_ :ZL?^.s+_DSvYC D7d.. , 1bzWŭ&FQ#["-T(F`fRjrJ!;в0?PEQ?EFFh4(?j.%9{-X\.E?]@Vk)p[YYᗅP L?/H4`?',D*%AMvS?mo+_~a s)⬝QƂ0pXk\/Dd5^hxRE ]&q0Z Zc`1.vREh4F((:((( .FA(KpQnJ}g?-"w_\b\JT;jYoNNe_`T!@(*NAƁ~n&kچx\{X(h%*4x'͕ R 6+Q` M'tk6t"] m!H%˶e2N}🨵Ԟ?5 oEꅤY-Wup> $HyO,P% ^:Ϛm0޲ZI;CD^ZmIrK.!U_3HŒtOE[h\̰X$0IDӰo޼ƏJD3HT~?'G9d, ,"x:*g숗;$PH3!4aX‰( t&:&0>_-~KH씈L&leKe %v&>˻H _'=h\Fse'uIA+l.?1? |`}h0i2uCRDXS'F^P{ >J <Fwdx fRnhSqikp%i?<ӳjJ$׋)zliݽ F7 =x~?Z{~x#/XFŁG%>wOeDz^$TJZjbU:uYw$p%ne]$&C7NJt=u}6H  Z2 F!Z3~n8eXb$`x1v h63 W "}#^ADžeH%fþ׼D;`ik~簆 2Շbim1~/_.!GDk523EQMDZ8f>? 22]q `wShEQEQ~(nae?X*ɠ;0ˑn_lrHs2GX(W)O(r&HM,g r)P.TDeEÁQ=PZSUsF(ƅl"ίWzJ!(8'O$|4+]5%0%e@"؊oO: -t#$W8T7:/ƂЀ}$;Ugsccw8{W; 6 -@ZUJ?Nuˌ*_iA?]T&hWxw? W >K @U{/t?ؠTzf'U]=ػw!fqa{恌KQi˘,k$L)жzZig26 twګ +Ԙ0Ev*=ww*THTh RʶWZaK`tR#ԟ`2K 44ٜH‘Qik,Z Pnuƚ tE& @ CPII$EiHiLP$1:5YJc֛hM.. o .5dS{򝠧.*3A. z,65mчg]HDDAdXC(ԝU[IM(|ݑr!~;"K;u'xܘfB!e\C[7b. Hb+UAizGCk~Z0-"" E ۪N^D$quK$xRam(̅ k3d0!F3νXL! 2HY,-,R-˴`v5 8]՞_l3~R !'E>V-HU<](\SPX[޽g3̜Y5~&]t=NrfN{}jjoypu ]o{pQ(ۻS0y n}`|X]1Ypq)V3-Zv 츶qt7CQ~;DE"6L.3Qe&/rWN@66AϪ&+ˁl?!}8̵]?Ӽ`? „2.:C@v@9F!zLrDIN)^^ rlҹsyz04S]oIsխVX']L&*&HHJI2W[pӦ[w[СG=Oyi~6j}mq[ؾj翝cs9/\Zb N}x92M?>&{H}ISr1~Z/І?~^+ ?5NVo0"(V_DIVzS WKw}BD%I"eOXG@BkQ,S;ܕZܳ2*@ ltn0QLr"qy-i fRIpE-b&Zpܑ3_]+A]=o,X*w.71hQ\& %tlB8&b$(E*4H_< b~ώ~|x&w1%u|ڔ4@ yV\A*kH1q}JJf 4ΐ3 St&ҵEQVI]YCE1/LJS5zM|TWC'EwWlyEq ( .wVCP.ZN̤pAiܺ)?ԩ9LGe$R, ([*&@qwbNY`(yhHRRm/BfXf#},ǩ(u=?8I(i!„2.R6$ ]ЄiKvserUJZS-X^ݩb8ARty~}h}o\<ջaDJ|%a<VVnUGۏ޷!Ys1Nut&|<˦i/ڡժ=@Yvh\;/BE:.Io 컫͟.H"&6&$2B0boJq`pa}DU Ӳ;`R$E3, d4-V]VTM QZ(Ipi^$HPTAjA1\CQь`4/-Vk] C0xk.Kb#S㜥TNV΀LRmg@rj@FP 'HaQrC !PD1X@$)Td9q=@(KrEJJqus> I (Mffw8]j7=EPr!6X,y|**(u8($L8˜p#(r`,-Zac7X߯Oke2{q+:D&2Vy{'O B8Uu5OE'G5]->$ߛ8CpF< )dڑK`P?4rI$YEFtҳfW HCd23Xe_2վr%"*ԴHr)L\ԓ^{%dȺPF*nx|6 qf֕nBO;pُ7@U޸DQF\N,+Tl i'Zu) 转^ZwV޲>XG { gl~"k#!xQ} yq?EMZܔ{Zt{K]T~_#1g#jAgYjzĘC WfAtfz9!?ĊY1KexG+ Jd%zO66P^=z9P 8^VMU\]7y} gG.=CQz$ҧ}x͗:5N\Uʉ((˜`ܽy', b8ARtxyjg}慵^Z`~ۋZ=v'6ԏa6 ֜J,u0"ss*v9Lo~}Էfk]m/z߆UՖtFB-HaQ[kgx餡$$NVwޣm@"+v$H9e`IL[)'SNoMqNo0̀B0b8AR4rgɹ%R!A1fXDIVTM7Lv\oxJFAR?cbe6lvYQ5E ZT94.n[{A^ܕ󿟒P8#$P9鼘6mxedKp~r J*/:--J qdR7ދrD||HwK\=}C#cS3^oa14F?%oI J3,6\q 3Ēz$W tJI+p =< `phxA&j;.YQ5M豀 /„2 aĒR **ڻNf+j=ȥf;JH!}ﷄogA34$@{"RQV"-^ /BB5[xFQ]#ޝa{إ gF9)bɃbw&|ϚZdy/3!B/1ou; [[e[E%JGv@g'mِg"7ݬӕO4?t-S3݃Ko<{zrF̲i N14fq @VFiDاAv~;n솯#>qTH1,.P'pw7݃ru-lpE O^ؠi^fEuaCfR4eFӈ6&ŝ9! dBVijƈ'`Z$<\ӧ=)FTt5̋RY]F+\Mttk]d1d!Q~sGG[bO-5}t|v:> Us'}|}X1ԑst#g:ə-iϸߘSק殇-|j 'ydf^|?.ճݞћqZ'Q1j95yz;Uj(O%voh-Y`/M0;*gndxE3&Pv1Nvi﫾LOBwqA3Ò" ˸ s؁[com!(b"f,3- 6b+ld_42S7K!LבJ=iU+䇊O褖\ o ҩ[DVlYʢ%;|rs>>Uq0YZ~4']ˠA]:`NJ2y LUj4Z0A1 )a[@VTŖ*Q\EUQmZ&8tflw)LeזlN۳6ƘYqٹS~{_^桱c eTXk:V6`M+O/ǰqor ?Ӹ>9"G%~퍷.} /+``v:EPP1 +.}6E^{FE{VNћA#HfV6vQqu;7[ @R"m ђ̻a2YXyXJCO?YW\+3mG9.wtLPQVuB e\H5M&$:I`Y7eefdDAMaEՔSAH_jqCeԘM>ᤫYΌhb9^0[6cSʖU1Ihe9^ ̂#+is21a;x gbc|Gu;4brץqd&%Q2?csS$eOiO-xԻ͘'Z:MCN16 o`3D-7-FX=Ey N4/ޏ(JQ4Il!;^| ֥ZKLY:訓κ誛z0g-000+M'MNSN oS[w))iRR5oOX^m]AG&fBs_g6@k #(䛨qvm$qcGTV[ M '<Nx_397=̲@vر Č* Ac[0%](Ӎ̕+fGX"7`k޲ڢv[n3Eð/K°D'w;d~TVhh[_zB0b8AR4r .=pdEtwRL<@Rpt4cwnm!%u[3XeYL7+ϭH(ro3!PxjA0c24CP(ZJK1ڥib 9H}@OTAVrHwJ*K},pe\Hu>ĔK= "L(B*mlpnv@ޮ p\h7౾GKmשvk^6ђ| aBndjYL=\+j 8/߯&{ABOV/PG>h,OZ̥@1QKR?J4#SfژO\ u%^pt*Wʯ!5~Y/uz:<} ]Mm[| B%UmqEl')A,8_`:0IWEnlCe]Y` 7XϬ1E^z#aBA*b%>QSRʢ9`w6 ,FxFpݽqfxta_J%Ӄ5Hz0A'&D8=ME G!¸AXa26f+IYfXp#c""SUJk/`  #($E3, $+v^G6{X\#BI`Lq07>)Zv+CU]Ym HBVTM7jz>&Q.xAdE@#tôlloq.Yu9uLT[2K2\RD%GvlcObS1j'3dhnokgf6^ kxQj"^D\)j,݇|&=W~PlQr~tK<Ȋb~.׹%^u76pQ$"^R(Uj$ !A1 )a9>QQr硴 @FP 'HfXDIVT-1lv%3g! $+ „fDIVT @ eaZA}Y]=)!.J8װ\'V8=&z0COםX2ֽ<[L{غ=g)aVgwu_YCgJ@e2[V]ME!AC^y7|tX.^w"^%Yo0rr{f%YQ50-&^I<ֆ)ՄTT uTj] @qF<)AfՎyv>z^7^7wq"Q\Dsi<!Hv(PYh4`LeZkO&䓀B$ ]1(){NCψL=X&XX0D J#Y^"Hf8^h2[6!A1 )a9>(ɊtǟXVQʙĈ:kݵjᮞKYG JjaZ"LhZ;^%YQ5&iَk%]Z1["'pE@qLХ= |)k^=RLeFp>'h{;Y-t%DnI$[ZW;@<ٰTZ Oy׽P0E{8xA|G!HJTi`ph 􊒬Ngivi^%YQ50-&o"(Ɋ0L7LvU 2bTwCP qn᪁9. ^LNR%fC(-8NEs|j*,Ch\FE_:Zہ^#`=bdȦITl nf̶bVATVIlD ER,/^[# )R@j +`7J:]zo_NͰ/43ZxDnO#=0̬Uwe~JVE7L/ɲ WQtݦ=!bF!„2.:bʥ6zSOQ%(U^kIuf0O6\Z9 V%9?WKit9TZ˕RIHؚ).ZN]Ǐ 3>ʌKۆv_y>>dNͰ/gjj1DTT_ѥ*U+Bj!nZA;^%YQ5&iَ{q7-E!x*)s2y/V@Nd咚L F1ƷIte"c$I1'fTIPr74(U&p|_pX &`cş FV(/2TۧF+ͳ|blʹz*yؽ{=Faaޯ!A1 )a9^%YQk420חX{@ȗqyFD\5ɤ-3jg+遰ՃR4kP$IJٝ1T$I$I$IA/j/+e 5fݤխL:xFoT AðomM;C̪+}H2&{7r񘜅VX.8/-8 ) d/ǟ"xN(soiO`4(j;H H+!9ΠzIY51 DG:?na]p׏A$uHif y&4j4=,/7fW/ „20-qa+^󏇸^ L` xnhʈI[DdHs*t|+ E AWI))0U:i> uC*bͻt'09ekכ"`3;5{#EO/΅ +YS>Ԃz810A6:J% xWj3ڳJM ^яfAƀWy'}jH5yo̡Bz:Pڶ-&pK5.4ߔB;GbgDS5`k\x\D^@fV׆.3wiONn:&rbYV1*4%(hi]P- *@zJE ^"K&6A&cl\*:Mxh:x}0l:aOKxYOUoNiS>Z fXJ, cv5#AEo4; xH&ĮxחB~yy <h|ZG3*:kκ~a_aݶu8e[4w;OU̷eY P9eͣovOWKU_+n絀r( 4AuS4銣j2p-UAC nDh;@n3ȸ&-վq9^;1\5 do ]5QO(pڷXeDH4fL*bT9Sa="ErE-A+AWczpēgcggfυ}q~`fVOmnwQg8 ?͊¬5`{^6jpەёiH.4ˤm  ÁY!m| &{k'<>nxCbȲD(DhBQ|y~^˫&U$Hi,dB1-#tyl& do 0 oĸeנ0FL+Ê9=M. "inn;NMNpԾXǡ"@J^A -Lؾʨ SEeTOLĶ7Jn4yu5yz;Fny@߫5t1Ģ]%8JVI\2(34Ō>F޹YjRC4*DiW\ccПkfƑmd{Fu(˒%4Ω*mKy[maFґ@+Ho {x%͢hӡNOHu~7^iN+])$*.* "V;L Q {|C߽ yOIyFiԋ1G0ai8hDɌCeU V؎CNShY96i@4QED3Uj9E+J7BXb ~oUAGwz:cD,f2MS {գ)9ĥ yFϢ>ka0)ywH*dF/ӃY7n^#˰#f&ĴrSpJO բ Slٻm.Ϗ;څLp4araSN !| .i|xxzы4 LZ' KiC›“{S'|+s4hQS  2N~WG 3gs1W%JL ʈYpgNcȶV]%K6X8/ uN\ R-R"t5IT1^!q`(R(<W%Iܿy't--'iQ vi8ڈm?~T 3"Aa6s[y['@zI-B& VóZՓQnwHq~H̶:12WnZ]T}% 0@7b7냔M<|VHնq(y<69v%j߅p }<ˏ3!|NQ>DP\I%6߁w FP KR·n/yk=Oz^`cJY) QU Ӳkϧݞ~;B1g9^dEM "a9^%YY޻5tôڲ/LZffX vZܗeoz?(mYrQT(UPϢ$a "%Y @\2nx4>B$,\y40-jkg*7:Gn%N_nƭ;m=Aa~p ^%Fa&Ej;B4|1'Ǘ'=4t`Pڮp/J4}W82#(_rr,{2>_nD:rzgu= x˸zŽ= v<|xmB-6kZjn!!+e"V> sLWW{{[[{|N.?9Kdf` a޽B$I2{ BOO;=\f6UPY(t뻟jplwc̄#đAFTB xDVSE FiJ?OzZyΟS>Dnk`>ȸ'"izN;1!S_q$5jL*}f <#&> 4ӟ[nM[ew VO4uq{ qAb#GmvEDq(bdMu9QH||pvlVet]caկ<]lhyKïh`ݖwm<=+"cjkJ̒y'16rOꕱ_R1|:GxDM\$'pЬ{T/s9 >+Ot4ɑg)X}󓃿;d'dđ-ySxLLZg1-Jjc֮#XXm:ؕri "D*+*F B0b8AR4342p&0),E LE2?8.tmCtOZ=~vhJfg_1\3b?]JG `9j~KokzxbTȬDg a}QT$&ɏW#EFRBAE 03Y!ZV1mQ1M;.@{Q劊hs?NƋʚӲX'CEl#Bnvq2(22b?{ "dI$y:&#MXq2m+V_U}jǩX/)'5lm?B ($E3,?3>TZ^f _԰wZ }?Ǖv+b3ArAO$)TzZ20]~U 4*7O{| VBG$ە\n7|ᾏ0~~2<ϛM)B0b8/4r$+e;y-iDC9΢lF9Ҹ~c42˭ҪhXcug"3jK}oP㬇(=|#"`pd8^2-V钻U4?` *,N"eJڰ3X"P* rF #(kĦ(d47M, ffwԵ\@a"HдUGxiq 3 p ^>_={MoX7042615$@apҋ i= H"S4:iiemckgjáOX.;syy>6z2X }1zh Fv|R)yS,T{f'jxܐb\H;vw;BX"JZ!A1 )a==3Ͻ++NY]BvJx BԌhh2 mOZ!$e Y ˲W/anVhDFfꖻPLtc 祸xٌ>;T?R) <|HKd1,C={z1 e| $ )c|=ʾ+<5gCesxf52ަWS"#A*ì<4'" dDHB@FPlM͒py$EC@(KLL0UBom'%$-o|+4r JjaZm}?./$lR?}*z@Ͱ/#骟l@^I(>$E3, d4-VtɊn7걥~ e5Zt47WVNͰ/T q'1$S)8~ RS kOGuT7KTCM%b&+s|0UD*oU2g.[*қ}٢hU ^-+@[ٻTD)wWn ,FF#gZHs"{۫֬#c1eu~5FgV1cČ+6D@ *ޥ@6f)q?:=FoU617iIq/G_rIgw|!qxV:9&N?z`phS QU j;=<.rS.7r J3nBaZ"L7Z{ +i&$E3, d4-VtɊn7_뱀 T2E˫d2~g)X#b

APYԚj2i0g/XVl͓ " pmuW{O  >oq_2R9[@%kW _-?2Q(ɒY3f֖#>_5Ϡ]&VH ֖X`-O-sId}q/GӮCXm7D[c6t %H*#cȵ~K~_cu,Evx,_]nn.uC,Q&϶ppbU HMƭBCx|!_UM-޳EZ &A$)T` E%P54! cV)`p%, $+e;GK9 j $+ f,"zGO?NݦO%lƽS.r*-~dpC[(&j;fFX ,C8#&;ާ6DZ2QM Zi=Ǐ:υ~w=}C#cS3 u0 #^-PhLus"B"S4:iiemckgjءO 7~!"qE%VZv?< MͰ/dXmv%+=fH6tL0 ߶t(d''BT 2lK%HJG3zfxq'1/hf4Sod<~m|q&Ӣ^!&j +%YQ.w= !A1 )a9^%YQsqV38=<.t8]nO9<^%YQ50-&tU1DQUaBnj{ +mvǩr;|n[J`CTT%Y|8STR^*<&$<)wnPʆ͟U ,ep &_pQQV.<+TT@Yz}si9(UjM:t4a)I ($EcO;mP+ٽjO8??Y Ԇ0_YF)U|korhR5_?[>gY#<JXҀ)|T/GC3jѨl椑"LB(Bf=GLi)c1cn TsV<3>"ebT`  &k]xr+[~wQOŝyhzUiO{6W誔UU/ƳgbkXsgJd}{ND NHoT49 ۋ˂ qxzf;\ʽVUw`GGfG*{E9&ln B/ n. N6/=<ŎJTeOi,¢ZJ|pMѶ` |k'`iP3EDH%ZegꭠJT X?}DmE[i {yzp D2Q#/xB asTsu,TIDIp3&+HDQEQbQredYed:JD8 Ix | _u]|><<<B 1c f$I$I$ >ё@BR !PJ)%\` $9kyOodHDi- 7Z:zaDhm牓?x\f4q͇=Oh9\p߹S Q; ܥ?5 y>s=_nWvĮTeLnڲXo) Ǐ+DmdgB#O=Pݷ*[:m->Wg|Ӥ^)+I6B~'U]?-o* Uj>y1ֱW ~=F9k `phxA&j;]j;?dܧKEU@UX_( šD+m}C&| *Hkg8֐PFE IWP˙B  QU j;=<.?KNODWxz 2 ;@FP 'HfXO$J:]5o~/{QUaBnd7UvEypow^߷#P8 ~A*q)Y>lUߞ=e=u9Y'mɉ;B 7C+AFD ."~f!StҔK1t޶}uNkz]1L 'b0 +m־w*U_ԣ;41n<0yX @biִ!OT:Svƪv.gxIH|`vr[{\K}p5̧ $No0̀B0b8AR4rgK Z/ܨ66[6{=!„2M;s#`tRjRgzr/?:sr ~C]DrexAj`&„2mTČ`l=(AXe&0e1c*]2_?.pQk  #($E3,{+p?TKkD҆#b ˙%D9 ffGDE0MQ ixAdEtô:]~Jzkoy3 4sA\'G8^. S@0e[#0"Kb4aH԰&Ycr T5*!H'mTܬ.6kzE^#)By Cuec>,MJ% @ y2z *D_CrlKEem&Ԣ:_u(}:vhA#Yh)4ocv}Z_tii,gEP au8&=j>R1K/e EwtFp{aCMb?¹MmW޻İ+,%+fz^݉#!(aTj93J o8'3  9w2PYAp<9zѡy?Գ XR)I;OEtLg^ج[s؆(Ym22jv Ϧ5qדo +$~w:h2vI ^L- $gD5\C eB0b8I (MffU༾t & a`N4r&A&C2wPJ%*I P$I$I$I$`y2` N8RIjR0 )dRY|v\sjcINHmv #Ѷ%նAXHE$YDP 'HfXDIVT'9NͰWw);oPЄ"D&WR֤5ƞVlaq A1 ) bxp^)Ǻw;=,WҒ a=n}C$@ eqo6y68*k`6Q:~ n @yApdXmDP@FP ')a9^%l첢jz7 e"Qڀ%RT(UFP $E3zr`\.42,")W!Ojb;v@R(ݶm{Pm۶m۶m۶۶m,PvȰaT(UP>Ih&Әxk'Nv/`͆}9vߪx>bb> >?|],`%D!Rt0w4@A XNd Qn&8'PTꭱe;|v Fllij hZo&TmI{3j0>ۿ? ^ZRJ)_' !A1hxA&jˊ\@(-SLEf:f?9,|$PhTI*^ٻ|2w{ ^^S J}onaًIfl$IȌd'usMg'r%cnX:5z'U{\h++m%>aa,I;P oelꆮ;0-$E3, d4-V]VTMϳ*dϾNԱm}Zz_ZKmV!$ I$I$I$ $Iznw@4 I$I(vY P~ )Ih&SxaW8Q/2+68nWC?(jZhjx0]~.&SL+8P&j3Y6pK%hkh$Q_/E{9n 808K X0%o۶m۶m3Vm4DD\,r퇫T `fxlJ[@j YR@vqJ 0IU[\UY=N=l9qb z7*<8uι,lw @?PiHQDSm3XY;,E@ YCINGJ\:G߀䥱IFh#\ R0*6qr{`]&N6߾P}"L(F?a*VS,}/dqstMژękMmvW_DžI3g$n;;w|տH/l`,d0krue[L4_8-i-Tׅae{Tξ&/Ӛ `pQ2.+声-k(?RUU/Ɲ# $I4 }؋otc1dz11բfؾtH"h]’5#9aXQsx{sz6Mɦ1$`h?ʐO#]ICt|tP"q8S$1o)No9K`G3-j9&3X~P>?͏QMi!ݢXoN턔15ml~W6Ϊsjڸ6.%G#I~$9?IdSRŶ|߷l2!NˑI4`3Qpw"rH$Q@ P$ `(R*##SSQ'Yݚ5Q5h ۓ:`KunQRH؀ytL &*KV!S<}xR`R㱞w X =_?[kuzd =o0tGaBt:]W@uX$f[d6DaRL$J @I3, ^2' !H"N2Las4^>~A0S5Z1_6`pDIVT a0 $ "L &͉BX"+RjԚka3z,`CNj0B*mo}_>cK:f3b]F^}Տ7?Q3>> .!oqfkjh0qNKH (8|pl'BX"JZ!A1 )a laE,*Ƃ 3%"5Clfrn ,p2l;<1BpPGwURM ]m*v(+FaMhOh 1ľDP5Ԑ%nO6*NH7o%$n#s4-e^K>yF(pNͰ$!x$2B0b;Lۿ #( |#nZx`DdT4d:ʒM&'yiGm $Et(MffU(z}=n HfXwŪ0(a wQX>`phxA&j;.YQ5A "L(sJv:$Ֆ%gBR!($Lq1o"XY2>o:$:玝Pe+VY!;r! +8\_ %R\T5Z rT_ʀQ,1t)4,d~y ,iugU}Z&fVh mz?_E/"B_ V)0X`;p:ѢlOz ooVqxv(4z3|+&Ҧ'1(o5Q "3g00-x"=E~X6\^D^g$fU  {a̐ eb/7R ǵKI3@({Dα{4ڌ`4/-V:o"VʗӒ`Bmbd22615YÂ!@-x%ZHBKp /^ERdQ4:bsvs 3ĒKzy騴KSOp wcsdι- ;\.*@R"P 'HJG3{\#,|$I/ aK;D@+HB š,Z+%)ZQDruImuv0b]dcӏ9Q5V޳n&3[fJF(f@Mn?mBmqR#,0@!r(i^Di|*yBzH<¥s_˦A&Siܜ ֕=QFm@|HDcNmFʯMD~3)'$m HX!DDDօWiwpfW3Бx5-7؝I rm1-VtɊnC {$3кйhQ-ji[>}<߮^Th)c H*.݌*3Z,eݥ3 \q@jڲ^fI/'uMy9-$9e`T@ wzцixAdEtô:]庽 K-< ] iHh)f O˾zVk$C -špކ3P~F V HUR!9g:\Q!Y%Vzk68,ƒʕW9\>sL(·\+pnL|C*|-omcsX1e4xӵͽr7'W`N U&4]׋i;m fP-A};z| ɠr &f:?OVi,xDv#G.j;>N6-ChόyXIu& 1xA;,ca$S3}e P<$'r<5GCaRM% 5,*hƤCT"H~A"X_>+SBLPR0 A"H܋67(}% XfLA+Lח##RqeU-\Ӫ p=m;Y4aHc֓RMRz1y/G:5E @ 8:7f7TuU?\fL#MPC!8J"3FIXlظv?[s:9!(\QDC,q(){gT,v*2*Z+z V=.~Eu( ~]2:[Ǖ}TH±ס;O+Ujkdeh|lsR);ߴMZwݸzCg]>,i\xܟ תUPU@_2Z`h#qv BX"JZᙏoxAdEDPe;;o<քS-w?a+5QSRiG|E\3z14kmX(DZOIړ&o):!J\`ȨUpp9S,q/ HJTi4`phNφ2!A1 )a9^%YQyfw{xzy;]\pܞ SQU aB"/tôl5WE'bhIy<t"9Qy@hua p29?DD ʸJ|i@|\I"q ₋zNRel>{9t[NP ^$Ih+qi$Y*~'UpRw9T,!&`i0Gw]^3,˃\Y=Tr10¤5hpA'F0XMϣS?9ÝR Yx9Rv=!J DWh1hcK3P UǦ֣F FK)I}QPv.p2/i v;hV%a $&0Vm0BqrL100001*$lm8ji@Df;Y%ʋ#aR>mџRQM+Zs7h͗pZlx+zvr212cͣ_߿T.usNsBU$J 4JƉ$()T%TDfԍГ6za6\A0 0vtB09tǑt kb~Ed1dJ3%Sœ*v \*rZp:kՕMWs-:i:!LAf|>3KdzB].ەc=s#ɀI8;}>y3XE.j_ªZbT`Ml_ ^=ݳV\x&E&ù)<<y d`фc{$ډS$/̗|,((չQ@LJ'^ϣgxY;c=c\#/]ĄS/1:ZO{bS3stzP1؛>tgp^o9٣S5ULӦSi4jco:d:M9G s]dE*-_،#1dk*kԼJ׾P$(Oi@:p0W g g(1Y|)(jũR޺lX dp2cd֯T2 5<<o5}?>S?rm!z7YۀPpmytnucot땿#?E_)Lƕ5*l*ȊYf ŠVg5/'iul`r&f"\^[+B~AZ{pjwK {2;<|q-3`gſҏ}18*jUx#KYVv[pSʮXtTύ܄:$")&)aHt^1k{[Q:9ʱO%2Z缙Kѫ"\vG"}Tt"H I4f3NY$$)%7h="EKYeDQ>xILǰͷu]m~ᳫ'Qe!/#iecԊef\ocOY,Ar"Ϧњk+Xp[<\o˲P\CM暜Yj: ;HMM8h'444/Eٞ^[3fCq>a9G&,tnqM pp.EEL XQLʰ~\}P? 3Safa!|ʑ\e|V*x\3Tn,))LY!4m%؉#$ o!.)5HZRt6NN}b!H%J-B4LƬ Rn"5zl ,k)2xIaO Ƙ4 4opEiXB5ց3 =8A†l/ivH-%иd3|CP`[tqroΊ=݇csV꣢qcQ@՟8SPrvŬa -e=s%xDіR&ekSLf.Y*=thFȲ3&h Bd{%EEªRd0$xbŒ9ST3Y,洄li/3>IsVj&a$c4G3䧇f/?_G[N.P 0{ubg}wmwwk0̫k,N@<6v`R?fM>vrf죉&/j8^/0_oݘF 17JS]pлXػnhM/0(ϰGXk˗Z'f,Xq5 Aq B+Aj1Vl0u߲^o.)@wu^N9Va 9X@?J0Zqm\*?T.nEk7:'1RLw̜/}Q{Ox=7#o*ׅ萔S?i")Iwה&+ON:}-vw8MLeXg╩IT{c%]X8o{Bp0t 5,vaF!"LzRL 6%hʹ'Hؐ0aƒp"T1, *K,UW3J 0b3]-p-XXXB` Dla\0@t(g'Vytz|m0RGߠJuSPꯍ͛;o$BoQp & G[zrr[}ދ"I#GD" Y|h kҋ+u,Vo[W\$KJT]fуj0͊\.h+kӑ=u08NT^D .,P- ](ю# *{%Vڲ-˲DYJZň%ʩ $w檤!Y #aO\pRo>B2 }G\(G"XZr%a $\ T` (:bb9CwI:'@=\ZS՘ZPFf5]투JāY{:< F=[42jE=3wތDW]wݍ4 X@tpo3nxbn7rG|ٙ]+%8|S8,F < <`tW8G@∛5s+s5[ *^b&k}q5 smb1kjU8(ZqcԋA?!9x=pjC  79J};N Д_4fTbU9U#S˃ިRl=@6,gӳM4Yz Oyf!h5k1E+GCT2ED.c ꒰p˵ż{Y7xD_>b3, eRa*bJr>{l; Pc1 $h^ bXmaBW>}QB'{yP- 69'p4??8"9jy>7>' 077 _e~v "VD+R2? %4fqHK @#orw($E3, $+@FP 'Hf`K %HI-|4o TԚ>qGENN^!= b8ARt ?s S-o\~EN!]V]mnMSkNo_uɔP󜰈9(A_󖑶FGkȒKiSW;?d)HsH4V!#oON1 />xX\U3x4$]ȕfSW]ɵ:h2vI yŠpyqb8u]צdfw'I01,ǫn/:r bTjspqWB!@Iaqxid '8Fm3"bR2uP `pa9^%YQ50-q9}0s  "kz3KdEMc%D4r JjaZm V}ͤuXm7栴ϩS8aDGшU.dVnP^MӜqA)'y0o,+Jp„Mx"ly! ?!H "3]4^8\}M16E}١߬ #,7% HM7' ˁ'IlT3׆C" !J^ >"daW+ M|#g@a˟t MM%XByoo߃h;+tQ[z,}C R:h2[6!A1 )a9^dEuBn@FP 'Hf k506΂vƷva{pxˣC ]F8ruVBQU jn*;m}$$i:O|33>zQ! (OęxG0(RaMwILV)V8H r*As\Y . UM(XBF0X+FySn3SPhmepYkfpQ#my_,t&=p\*jhӖ/q =5IokT 3 ?(e}il۶m۶mLoDmVpSncWfaTDiB(۴ղҫ/W c^vLrP#$aB6w"_DVX sy|P$HerRhAFP 'HfX=O= /\B:@wq9){u3A?I@Dk2 ׋.W(H9Wd2[$ „20,ggRtL˥/^qAR4r .r1 #(>#&j;.YQ5vbx!# fIpVwTX yKG!d#K$*8VQj_?09aJӈ~<-wӃjB$Ec]sˠn.TFҗ7f +.t'O!!H 8%H6i4F[2peVWmx3Xi!(Zr-Xc5KكPOU ^4k/t ه9b Xp)apJ12dfaec5sMsw ƴQrEݰX2Na 6vQ\ܢň "L (ɊƱ ڰ`Mj{ 8 L I$8] [֠l?%7ޖ^ObP Pu/zC?n]WkH&3`wNͰpE3NI㾞?$ &iz>`IfXDh2[60hxAweM6X^^׀IB$J{! *"""""""""/Ch0ZkZk BNaμ0m sBV!lv?"9h$>;KV~< .a *>c.a #(^9_b]mg%M>BsnGa.x_cǧqEzA>T!?&=%L nޔпJ bC>;hC|fps{W%wڻ]_ƾ[wr7߃%n >@٣Nc/<%L, <^FȞ; zZGk_j# xS"&S{㛣&G&p [2c>$H.G:xgM{-"Zs 2H j؅,2!ffH4I~FrIHJ 7 ElrVH[ݫs2Opwgt+l(z&$r}eQwS l & XHp5o<倀8'Y.l S (EsO )ixAdEtôlVp J53U̚-V={0Lӳ*iA M?K @ Qɚ1@+ie˧U *"b8AR:z1J[(P-><2냱,רIb&+L+`\2)+t`'FOҝ\)QQbn6{@'U3"vy[Ex>TUf aC%K]c! *U4@8=*sĦwI:釡jphxA zq-42XX[Bl)b=OV<lU@-WA? ^*@Vj_0ÀD)ҼaY؃}ac<:F"MX_ [9BȽ qghЫ=G엢r#r[i>h:iw"}L} 9t}7qH\ \ƥ\k%*6~U{-eOՁ˙T</4Zb$J:͡0,g&aV&]:xG58Pr~d %\Xp[5x`T*Vs'./,+os&eY*=*Kt,C{?6)nV,ϱaj΅)\B{Æc-~qqYɌ kv1oڞ=*"m.Ct,;?|t#N܏kpпoD#"P$B>(J]>Me$hэ|i dw#"5_K Z)'Dh(U eX# Ō;̉#3BYsAОPNWWpj`-do46~@@ rMrͳ]Ysz8JH"Ie+*3CJB$2dj(͐DVn5Bs]Z#B$wUFMW>ȣXxy֐NͰ/ڟh;mr2ln^%YQ50-&J9nSjt5ëKFUH<Pkau6"JuU'.( )6 P1E`XKPcZF,r1/Bb+tB5 /)I+/5D*c)'Oy[qˆy m7/K"E0G]P3~0+s*Q"Y-R2K[ɲ#z x`VH߂1tm*L`ʉ?'.0S?.U<}(*O!@J(4k9&5q=>s2$Cxfu]zt2(Kze"h=(P2qhZԄZ2\a@qI=MU%;#Ɠuy1SWz^iJ@dF?H7Fؑɮ[ҜgqSlTאPՀ  8ㅐ8PD  k>t41ߺl$NuilR4;$lcˉCwJSoT8aA tt$j$2Ki47/*J!V~$&\ @][nR^fiv:v3|CPX0[tJ pA lvJp+T0 ^ E=iY&"vqod\S%B59߻\]i5'GD-O '$V^6<(Y.6 =ICr…[ E;]d~6b(s# ,oYD1Xtp߯nWt]uolH\c  #($E3,{>b" }PRJ{;~'yT7.\!7=͔I~:kޞ_$r+XοOPxnVB0b8AF[x $+6mxQjE`phxA&j;.YQ5+^z,`CNj0B*mX$yvX#IeZNJ)~ZC*Е0S%&J%dR>OJym !.?B l&sQ ĪD|fDyRDЖ$ />P4j' .dIavk<"K,*R@ $7J:]o#^ q ٴ@? VߦPzNOR[XSEk@)jeE=2- ި|nnF X&A&h4(DpEM $쥒QzI136aݻi2YPRJ& /Db~m`94- óWը?e:?(ᄂ%ַD6$z>e¤QxZN.!2||yn3Y\:_|M@*ŤyQDcu]#1r"FBXdj<=͋b*9+Yu`a aCp+40&bP bZa?& W}Rfl g*=[j֪FtUJuՌdzUw;ͳoXnk#$-E"H(Dѝ'O$+Te+*digxLd.Fh!&^xjbR8իWϛ@lze0Ĵ Qy;^{PW)%/,]lXdwEYڨ!4L!hDLW)NfC|P B0b8AR4r Jj~'\ZeV㸪8Tq\(Ɋ0L7Lv\U&?|s,B] peSϓ+HxT%0ES$)%~HJyymʡr=vk88E8BlZfkzg- $Kwu>DEBCm[-UU@Q `phxAdET;%6K|X%WTI:2GΑx~ m.{u90"nz%no?JoScK-D'XHOә"c௧ߞOʽؿCeTTDZwB)ȼI7}Z_TW4AtHu>QFeP,BK@t?f> ,`Ir' B2,Ѵ{;Y_(AN#NwG0^[Ll2;#GE}2$/66]~> X9ƙ; %?1% /vIKI?LnX_XZq@q[T5nmXsY3?fF?̟ޯ_0huW& ek2_m*vZG 4Fgu+3j2$g8Loޕc M>TNzp ap88UA(1  jքhb8ҋ.khb@1@݉MQ-؉We;?qQ -X8x:zaL"YXEYq$, }'C/RN6CuZk} y0Kٸ乣b:ުN|i/=8O 泼TJ7 ; ȝR>xG:8<|xLJO;VVnD`Z#lzHC9b5x#Zfb˚ضHJ/|~ Υ+}FBӃwpqnl@!ih_`D~}>RJg,tD/*W찇TGk;pPG$@pj2fBE*M$- ׭[7Xj$oV39 4 3N33%BB1ܺ>*!B!̈"=ՊH_Pk yuBVOS7z*O q]j\W^`F'+JhF1 ;NQF3}]泹EM (JN-u)3n$ c8)1O\Sҵ:tY^dw> çۇ9b Xpw Zk-:kZtim;.-rIDnh6FٰĽtˍ2 ץB)Н3&h"}%!u/M:5 AR*R Ej5"Нz.,Z ʏ)ˣ+?RŴLa9TU28wo;$T&ڜ,ԝwÉ!o' Tr BҝޱٮAҒ %~>qEDiH! 38 gq$rӆV,pY[! &Md!+N۴:4tC0H!;nco @6g*c,$3ym/Y)Ah״å䀧x+Mt!ր̿K"TSJ96"kkzzD{J 2S߹Gp10Ig&ǭ hpKiF Y BbF%a84ޭ^7_,$N}IFA&-/-Hxr=K`2M)>3i :D,001eMW#$]doi+ _!3X}'lT]ږBE*UV낢[~, ae>k1#ZzI V?2_m ~ 1sa͞%^7@-BZݕkQu%du0*x/.oERo=j:(`"D J )R@  NIn;^%YQ5&iَˌnP?6OKe-]DpL22U.|q+^m_o-i[3'2賫hQ-YKYDrV9 9葌X̽N"V^mo6H j||0[}lUYOfB.X0ksMW@N;J$=Zw覡G6Nlؿ(ojQlݦuY>RN\|c)M~\+'IЄB1 ,EaO#TǠ~Pȸ)`r=_Yrwmu89VI"^-ǜ^0Tb!VIM%q46u"ّnCۚ^u(QKnE?*T*IgҒ{Qh>ۻ4Cxr?uJXK{qJH|'q ڐN4Z-fc-ZX JтNͰ*ZR,[R*605#$j3T6;X`yt mAzJ(Jdv1I-ZUϓ]V8B 3*rk<+~51G&FJޒF2!mAXi<3mhh=n HfXđΘQ>8$C]1gɖNJM: #($E3, Sh߈lKVTMw{4%PTAj8$A1 )mknk1z!t'о君ɌBqq `zd9uf^'HI,|npxFQCa}|x AFLDbƂvpovvQ(Yql$`h# P uH 0aUY`<ŁsK:iq?)8Gg&mWX B+XE x=Q|rʕ +@jĆKn{IUEuTv@U)>l]4S]ns38n lU$*mڙ d BB@!B.GI]xԯV!B64I!r%)a ){2Hs;sS>ݾ+~w뢀B}?"^->+lJSBmF캐Bo?:Ʉ Awj,[}cP%/piN`(;Z"c00x;EػȔ /=)є *%K~PyMSO3Ew>Q4骀$3TLŪiZ~Ú@T1(:+[5fYaÕ@ҵtnɊJo7"a^< ꅛœAiVx2 Q`@ %R_>DvJǿz[ngE8kD5f\Qs* kFNѾl7ļ:mCQg#H _T@%.0^A~m$Itp l1łt}UFz@K7DQn|?޺C@1 hoXA'{ټXd/H֕=xTvsKFLӣ"|x7"LA*Y!Ͽ|gϜ*tv/B~F^G8^('] uݍ./LP-I K޼dUMVDhrH^X7O:FP 'H/{}<G\3 9VoXTyc3".*~T?L:uhqYQYl-yd „2ݸ7[3?̓&I^Ruh~tSCY=vQ-]M1 #(Ͱ/dXmvYQ5=$! ;$H,B;!(p47M, ffwZ I C0x+6Z:zF&f@`G Qh 'Id Fg0YlN\_ %R"Jqus> I (Mffw8]j5P"1A"4w8'^!F@JLE g32&d9?*[jJ%2+5튘; Aۑ+H$I$I$I::\\93b%y4䞿;~yz% Xԩ/6I_@N/AA䣏G~*yXio0 6je\0/ F;@FP 'HfX@cZ#DP78c_L$<(ܻ*s1 -^z>ɄQUAEv3%sܜ 1$1 n]9`9zF(+FI6A2+x`h̶CBC! & 宽r"Ź JFH- c0;V0^ U?}׆G,-3vu$a:JXҮI .X;;isRbu SDt$F7Om6.)E} |mWH k#6Ll7q/͵gv֙m_VjvD)i;1Vx.B2-6@MNݤ$ē@7{w)`gB`5"88 `$ , 'p| <Ή"yh^a0 D$%Q$S \@0 _d2 vr3Bhue*m&6a3XffvjiQZQ:1Tጥu  8\<}`ǂʲUĪVWn_] IPI%`xnߤÆDlHigL3 ʠ xgw\>"?{#r#CFU< cҊ[?mFFۤЀdbAhcb+o1(o{C(Dcz%E];Y_qCDei~~H\7u=DEI$lJРPmY˛.0}qQ9(\FW6fi 鰗U1cO,* sZ%2Ad+KCXk `^=Kk,1Mndumk;!ny̴ۛ0uԑ3$TSn[6C Rev+1Y(iF…"bUu}N~` [>WJD6.+>?ԀE.6Q BU'&{,2av-s. H,j0,j6i_Hn[YlC{_0w)~j'x0;o(X;\T܅0,hV墝k0,%㳍VP<㮸 qge-6۩3QG֠$a` \΋ON.n&ԙ\_GTX7(8Ind\Eh}[>gN^+:/i#NQBsHRq0Pn"Y>ބS 0̏%SN4F4G W#a9?%˂oGs.I~ȦRf\1OE DV5nEhm .nQLs؞oKP71n_@05OD3@f"?ŕ^;(o։^, нWø$m:[2BѥMs2'ŔW-bĈ,c5yic}t"n,n9QY ] A*%cn,W6Vʁ:W0/ьM&m!)[ڏ5:?/Y 4V Ϸc~3у!8t==hs₟TK`? R "rEbSѠP/ 2E~ ~ʿX@?QBqL,!DB]W#@R𫏇`Hfdic$S `i=E$+9L!F0VKͤZcqkT8*.sD\D$9 yBh2YT-8ya1tSE$+zig]y:ՆM0L`Ϟ |8]CkK*V c 6Íg{L(϶`Pú8#V2Ů X)1z0ިS<]բx,X*!h(,&iv:dr[FVQXG96P]A( \f:G/)J,޾y0X0xcmmmxxzA]Z)/-8I!?goGzkDaڙK%UN4l4_lΫʵ9W5532ߤ1mv ^cjA*b˒<յsFsYҦe;uNsnȕQ0 欚6:9jCN06AeP9t O-1WqWOʉB)5XߵXǬ08 sKP/M瓢,iK]=ESL]\YZBSj8yQ|ka"6}x#+ZM!]ڧ6oi;*{`AAON<פ!R@by@ڒ\RX^Gx"\8"+!"+1Y_LK!H;/k:[0'mV~ǀ}2p ?`a4伯` ;? /zΏ R1eFUU~⍎^`7s6ph.y#^Uy0T:j6uV 5490ZnaAA* 0 $)<K)H`SPeu(+̮H1!X,tjCԽ@Wl=lh}` D;õgm(/9\® *®!:Ppqmd*by+3j)$"D @=X^Q5PZ ^NdUkP:XG0u, {)i6TP^g.8H8En^\@K,3\RP2ƞ sPtI!I`,g^?P$,s! ;C$aBRH˜:F"X"=R@Pv(XQ O v":J>ZSV"4?|ЙvV>.H0+k\`۝e.ma@ [ 7q|;]d^uto_!MipB,?$C"+#11 DwŮh6P"= b>bM%F"j_yO9筚LHi ]zL 3.$k,Do7 r\PBV7BdZhdr! h'd"Gd}Ԁ`eT{8iYVzT,Ěמ9WuBs躑͝>Vhu7mIj# = vl^^CvyOlQCcaӱIa?·Xuf@K/sglq^ZaweY/s.Iu[@7Z5}Rtq,'Fe)Sx<9 ZmsqKX^eSf$j,ةfΙ,s qk}?=4kck`)k 'KPDbq;-3m*;7U: rrb(n1LvXqh!| 42*YȆmnZ[<>;Sl9>}3%~kϰYu{!6/ fTv"իrir)) ԯp.jCЈ|6˰ѿ%>?fWKf [I obs۵~ U V?`GR"polPVcfg:?(RxQ%g+Q@k'{mHN`@@InVK 7ytG'7M P'HT#fhh4qg!} qg"`Rm $D8K`.`4uuӑp%{l~~A% ZH$[H$]ZD35tubi7 erZ+u; L>~[tfyP{ڠ`2v֓z||V3|q-?ǟkU龘FWG+C!W>msbi$bi#(JJi.mK(4Ab+DF^H JVW!0gEKQ4! ,@#ZHS ߔQMkƳmc%~)=6Oc1v{xnc&5[2Bط’ӗ/r8Oi=qvsHxX6C>[N>Kb1;zezݹ/ \4p& œуŞo̷"R Fti(yC&BA3>EGF"fzxc*z*IWN ]f/WA|[.E>G͠TBܪވ# lϋI7z+4,<"&.!1)MаoF 1%7Y|0HXmvG'gW7w+k[;{O/A1 )a PuMdQDS=?EYVm#/3ރMm[FrI,TZ~EmiV#FBbBC Ou@ B^UnDYDrҴ/E}~ZEk4gzk-v4`Ѳgr /SG<}o !x'bhT(itZG)/LH!ۑbD&)|b1ջW^:Z^\ŽCPӄnqi_wC!1!Plp1D<> ˀAxØr,J&YS_Su^L4C =}?,,,no'ACAl6xI jrܥ &EmFe9<'v׎a0{F&eP*6R%igKFU?꘧4vv:y5'Y@TOxʅEђ,bb)i[H<PU,tCڨn)!;@,p7_ K#=فJ! Uo!"CY]sıu`׍Oxh {}s$KZUlT5yco,nH󀜶s?nT K(T~c*"VDz~XY5M)4RĔ "4mE69$"AO_.?h@]l_?AyRvF&fVʸ1 =-Zإ+nDPƅTnݹQߓg/^yӗo?~Af-۴/Z) =N>  @@bQs=1߈"L(B*@bQc$5 1oʙ> ·rRv'z}Ģ恬Tރr+mgY1I1s&[w/Xh r<@V@#+:tYA` DGX@D18Hc{,2b%8 rFay01GrNbBA<#|&ʷZU!tRqpŧ%pX8xC  $ !A1ЃY9y| A1$E0hx&qK$+LPQUQUӕ`@b(!p'AP`qx`"W4Lw| L-vZNnbsGΕj;=du{tr3tM5UrW!)32*&CȚ+INOKQv c8=E%5 EeںƪꚺrcK{mI&ֶ;{QY^CLTuv})ںvu-`iemcQY^U)ڴ]bʥ^i1gx>o0p Ӳm\_SzkׯKORE.ʪnZN/ʪnڮxQ@ICʩSøpX8 LX0 X@y|{c;NǻA}>Ki^m?k̵}ss߿.!g0YlRi㸞QU Ric@|mIyEum|zu? F_3i#'Ϗ, '":*,;}V\/oXd6=GPp=5i3#\`Ohg7< #ij`7d8ѱH^*Jm;c3~hGюꈗ[p=ỾG|WA &GQfk8te\F@0F;}qV*,+)/?2,M`G: r,lJ_>$Yo 0ܞvtgj[#+ݡKRPC"!'xq.|; By!퐛j.(V<ǵÚS1XQzOd]'!cmIPl]U (㳁tj-$2f-"`/Gޢ4JO4\ y4MnG(DQ_~_?t-#KkT"Uf/K5cjʱ?I2#.-EAr,$BHj4cDW vM@%nqфW>0< )MЉ OZ?]h}h!ZϠ2~\:L-`xlc^q'x/KZnx$v3HBO-xZNj 5A71knSȶw w[;5;s\џ ,91`fyI_cɌ3yA)QAS1jjL4'mӑrvfz~_*8M;xפkx\?/zi{#ϊ@+]iAW:[EN^cIf& )tkŔIH0a"a%Z~[9e/БPp 3X VQ(Z@F +l޻lq-.m/)qo:Sdr˯ 2__gcrژ޶(Re `@4w {8k?^Q{h,t/O,N{y{pb6}sJk܉3Nv)f$9'\OdY4v:O}'tE)j88N;$)u[i>yB¼/) J4zbh=Rؼ5M<`evӑL)8"g{cat2{w.?~UTϼJ:K z純8ȹ-hS0ť7}˂gcB(& 04e{]|CL\ճY={{Xͭ=Pe\u>DPNwܱb^|OȍY^p$'d*Qҙl.QY.=3M1o 95+NjBɄ% O #d2U9kyW$j`Ier FZ@Ϙ4$Դ:zʸ4 (mĢX_@IEMC Nʰ „2N*!Gp?Of8bj}}Gvjmw29Y.oy #X1=384:6>1_X/f9q.s|ʣw>y{tot󓧯~;]tQ|8y?8y{Ji}ή޾.$rZ76[h,B~xQY^CLTuv})ںw>W}}fг'XļNK^Ѷ0$P Ocy)̐&yH(aީTN%W峉mT`4GQΓtnE| x`kzT5&i pԋ735PL#4Sxc>f>c[4JʨEVQ <Thk$Z}j6ĢyrV]EEư {ˀv-Zbt# ܈`ceQV]?G*{`j&on*nrV|OӀwii:?G}jWBk=F oC̨`mኛRjpǞ%6E5C-iVIGw: U2 $iELl Z`}ҙ.43xUi.O2>`olóM!^ BY̕" wz F&- uN)~7vQBX AҾBy) WP*8GӒ 5z;EmP;!\}m$n`9Fu}[Qkʟz(X0ESkA/t/gfQq}0}iz*kdގNO]Ngƿj="qkY mli-I+hOT -01,t5#<繘>Mcs+ :}NZOZ%EYrѐ|&ޝB.%SRxMǽ݌BN}ve%r&M*"-#];o@83klk]A4Gi(Dq84"nљ'h' $d3pQVRsI'Zh@*G"x)-]Ô#/y/?l'ƧTRa3-"eoH$G3tkt4L;6'D !EC6 08yƄAgCz:|ŨQ1NQf|!Ej" 򅋖x[w MDP y#\~#@:'Tuq !v$9ָ6S-~fӪg($' 7bWħDŽ-!|Rt>'_8*Ġ 4)Qd14@6`C5=r}.E7 O[93V]DW?^Cx?1SZŽ7%ėF%&/͓fTc7FH#E}&/jlPnZdݗ{/$TYT-v_^>BפW Z|\6**+=Sw6 d5[ZL XZ-}PjTq\gkjoVZҪַp'{X}gk rx{`XN0XXcUFd?Q'^8g0x !؊E6W8$bZ8:bq݇WB9(&d Jwy/{?`}{D͜Wg'g6ts^H.˔vwG<9=~OGohjiXb՚u;p@ e\Hɳ޼0قF&fVʸ<\FJF9XknO68Ymx tϵ8389[?@k0f#nP?zH=Cu?=ZiS3O6*zۛks>Y\=L*.RLk/Nv9uEaڎ{ZM0uf [`zQ>uҬ׮³_N XF-*\ΤܻcY݁sɩ`\k5I9D4J>~EMA%dΐ~<NJG͆_#}B)s!fjL;X9e|b[}VBUS{1m/wV:-c;,Ʈ5TY=G Z 5E 'Ula!(Q* RC4L4ͱBI8:u~A+&R8+`q V·ǭ+C ['6YH%?&cRڞ2:@?"q%S3nL5+WTb^>m+p4[^*I Vd-lVSp.s"_ LvaIO;n菙EdUAg4=P[\*͑ 4o3ؖas]c:;?; x>56ptqn3>eĦH ~wyҸP?Gݹ`C˜! JvaxrkP:TzAोŁ‘_`!"2*:&6.>!)T&W(UjV7_ICSgǵrS7J+߄q[իіUr=qm.wZZ޽o$(r VsAñu"Vado'J@r]_Ru tn4,J#}Bꋴj~RQFGA'I$`8F;qΟx Jp} l_ r*Cp$F}32s!PPg꾌 ? 2,+sb0ǂGH+V<L>8&O8gpƟĝo87= ).1?.,ߊfz '\r\&WqW52`t}+&ͼVm}wQbƉ/}w$yG_Ϙƒ=6pf8y\&5nr*>K^;?{߿Pآ.)-o̯kBreA5uב7 ~׬qJ܁{;ǻ=Bj +kZVD @)K+r-eT FTi+QLYȕ'0 YfY[c: hӮS~mB(!D&%L\y(TXRĉ QR˿n՗p?;a!҆jFo͹ _o>W+p7G-(cKPD= SĂX?j$[JMKj0r=G5{E = ^BgcN,nx$ZZu5zPDQ428,-w,[_O%ui箸W:gpABExReUtIת7 *NIU)οwjW42Dg_I[U멳:=Vd 58ћZ$I01m 4 uܫc'64li#M]1=ެ^Ww(_ZY}Q8*A@$m+橫]~a&Uʣ7| asxg_||HH,j}_k0"(ȗ\Ǧ{ 8Ols5(v.n׮ LQ$K.C:e&jYoE^U7d-f.ީ!#%P@6, +nyYmٗc$̛4S0K_PE$^x/ܗ_h2(W-ֲ%.oIGʚ7l=yᕬ2^\ a CӘE`J_?EWHZKȲ n }bYL{@ʋ}}|o{SpPXIS_]e_^%U-dTcS4鈊FD >IZ?yaC!H-@vv#{5a)5Bכ.Nq%n}lA4G+g)Prg-lB?cAKwx~Xss,3dX&w9WSo, ȱtkPp洨mS`Sն EB:C8lR-f u+dYiX< } /m,O~dCCR%H_dH)Id|r_ wEcCllR>6nd"qJ|^B&.<'|%,< TנbC傾)b5GDc= lC>֢?1+DΫ r4UȈSijy͜#])hf9ŦZbZZ:7F7ڨMF.3wʝs#7*<$+#Qa% -Y;gKtLک /)S~E5?a3##G'NΟ] 8q  /NPSNlkta2G5 ӲxB6 wzot[yNmmo;]'A% Fp4{r]?E@p#L c9ѥn0JwFXуH(hX8xD>r2Hk(t-6ɛYR*2{0J',6){7zlY9*QRzMZuF$i8ּw%G1jiTwS$,uiK_2ʛ~OzJXhDh] ;b*TӨE.DTC*uN=؀4@jcRZF2<~MD@rµd_sXu )0]6S7|"G=G8T3.pW4yK5i wPnbR1ENeeɢlk7mhSPH1)U:r1R"]l 7LٞŪnUr_+}_Nf1Vo0./iZGx%*h cd˜;;UR7nJn"wa a%DKOKsCWE!`Ӓ)>)$M1 7fo/,r, Bn)u߬7l4LX.veadppr%GID8M\(r \*ŕpeXn!7[C8ZSpZk[WO@Vz)7R7rS"K{'k~~`جX%&Z:u?_#Zv zv3{LWMp8s  Xg "[@!E.y@|%yGX]g} ~So\ŪC?4/e[ޅǔ^ڽ?" xm8 υͯ0eo*_Б8>O?}YEmUǾyo7sBCLK)J1| )~=b򁮦r$iFpl[SJ[A]OНHrkڼN\[I]֓{JO=;1.g^'>9ygJRgPo]2>k ;K?f_=n56Vr\ۇESB䷉? kB Kp.xeF֦iibp~! T/6_85gwTيSг S0$f%DDE"pwgdB>m gjӋ j`3-4f5%XRe%ҜRMlm,li†5EW ]VK~?ۈr[{-Cy-o|quje q3~F(S,5刽Y/q˜ q^-f&Lsέ^`+GnGc"!ư =s06̘[{T.MC؀@[uz$+&ﵬ-nm﷮-eU[Mmz32եsvnڜ/l+sZ/+ݎ6M}]BskkJlmM;zPP{۾w;BW,XV[^Tx_sEWRie'QC߳WSmuPc%jEDwl畴p=Q{=iY[O;OČ:]<>w՜tOdTM>i{ dp.L:'qy=prm0ꨧFx P{)Jutz Wt6,;حvQ s6.;>#XX$_6㞯QȐ]CC m1Ɇ5ћ;ڳ܇. So>X\7OJdk{nrgSQ嬼Y&n\WtאG4 m1&|*cUJ55tmw_"+m{྇)VL{jQIbݚraO' hS)B//\>!m_2Ui_T.zA1r΢?Bs(L'NWTQX1Gb6aњ L(ӀY(ØN $sR4[_}GKwaɧu1{^=z@p#]th[x70=o"[A v0.඗ #^yo8~G^ D   xApL"Y~~eV[9*XC-4b:w^289L+ͱp|,,K’.Ձgݻdu 5k{޲1,;# %m;dN9^zwwy{+b{5Ro G]*D A E c ñ+G`HM_-v>'oލYJOv2m9f^i޲҄ <%*$źwI0 HL B`k+,X=#&Fgwyq _'޸fGTNe՝,WX6F9K.Vb1Sn `kX17U4R(盽}R NovΟK2VA0K `96`Jpѵ%|]B7_^ɎW^B46G ә@Z^E-ȳH` r]Jmr!w%٠N y)&b!*6uš4⿨#Y}hyk!$͏ԁYGѣiQ}0]x̾ޙ+U9:#`VXl䚽1;]Hm(bVꮬo@װd=PX럟40SVE>0:*P?@'#U{MV 3%+K*gF,N]Ӹ퀅@-,=I֤a Yl%QMSn~dS1I.mYJE h`L㲊O^OjĖc^Y- , l .y6:8j3 XFRd__@+__ j| 4{?ei4 ~%G5b59_;T @x!YZgP'F|4KE^كp7 jro5hw _j6lx1%!vj"`ԵI3>k:(ar';-xЃxއS| Yٱxk$"^LVRƛP #'XaOc}\~A\ 7 /F%LCU@l7c9I@7<_C *GklKUX a6ger -U%Av|U~_v:e"yX9ֳQê\$NB*o׎V\/=@l`N[RE}Sxti#ՠY4mKѽT= ?-z&=M{o#;s=W''`sK{Z}o{z]׭ۥٿ4j#pTP/KSe]tV&Za`祡8U)zoBl7ScxZ(rNz2n/),A|l{I~ GX4"8-ջ@Mv(ǿ5b5>3|7O7ɲYّՀ m?c)ahlXeM`8Br{_ $9`.[ H8Tr1K3 =9쳛>gfN5V\߻㯧U.rxi[bdc[x2o6֧{iGwΐU ?^^Ѓu\2NI #7 OEt7)vL!"dvJl$q3"W禽}f<8*Αߩ7u:_Y3foL)E'ղ 4 /V6u\5v sR7lħ\N^Wp،5rs9`vǾ"7-8 iaTlruW0_x)#O|BflGs F /q! sF9o.Wq{-oJ1IRKz;K6bגU^.4X@'c :_vsjaY|+}v'ԎPd6lEpTuv?%_=l eԗ+K-bN,ڄ:yV3=贃YL-Byᦕ kroy ?P}ݘKΧuW vggv7rZĦù4?|! xr%^x8u1h̢?o;hdE!~Wo|le_Mza%b)F_NBlْF`Tx aHXhLy!J,AN^Q@8ABDrA:y*u,%{d #nA0NnL^YP A3օ~+k19}Qu^Fh gHBl]x9m4+%|O2Jl7+{K㈎6Gwb O:tp['l㓷\.u2]?~VЎ&ќK2V~+$mWQR>L kb՟Wu6Ԃ[_TÛ0fhEzs7mSmELRA`ݥr/ 2GpfߚJ%/"ed'Փh ;M$ ^60xm:*F(EZuJ5 !Q@G^?VenJ_>epk ( "P"eU@N+ctc(.P%5"։ R'y8r ?.f௷I;@ •f7psDc:%y5^R27*!el Yc8P? *b57\#.cI^䯨3pJأRA 7D?Ouާ٨ mfq#Ijk,:[Ϧn ~.!{t*wOODxEbYVH Ss|Bd+s@珄Uߋjs ż;Yž:~8[!^yhr|_)#*\uұz5 5KqpvZxR6ֹ(Qy4٠G$P ͭ@%\TR)ngHg@qcWL)wtGiiKR,;<:n.*Q9Ye w'% ñlD"!% O/L99=M0}fQBJ3} 0e_QP&t{{N݇3//22tDү:cRbYu)#a$ ̯RG'jH NE\f_h+HǗk - 60qL7psm-ͷTsidB"o"Uty/_WI!%+2ԇK r]HjN'QMd<1z޻%~T[6Pa멀& g# A;ou*+ "0~;u‘ vB4 T (ιx(ɓP#ANNJ^р-]FPrx)tdj[2T618jCsDПCY?9iDa{z}\-#q/v0;/cM潝P$erI /A7: 6ÉW^"w W̉g͑8.,ӛ}f\^~v }fh1NX nlxnԷ6|FIٱN!fZ@3 6f|38.2c=cÝ,t\û^:$21zHD9ɜA; r\KNiBxx(U];GK F<˟"ŘSj oEzQ[F=H?U$vΩv^D\BBj}p*6QT6i-đR9 CUlY3PjY@(D2̇%xLN30S"!xB% 1]*MЅw1zv ,p}5E! E'5o˹18EǦ$T=D%6f-#xG3ج++mŊmSbHm4&piK %̥dV+',N׋}w${ Kg磠9آQ̌7Hw#IQ[EL*Iy\jHU1J= |̔UVTYRd_L[J]q&1T}Ѿ^/H4McTiA~-}ZR)}|-$rJyziꥬ'uӂn~Άv2%ȑP6BkC+Ŋ>ցG+k=;.̍OJ"ݞҰ, s Y-c IUNIEPɼAœϚ7@.1 !:%jVLud1 S=Ѿ (TG# %I*Q\BQE̍ӢvIZ0`x"VZh^Ԕ(o^iqq6@/~-'̑b*߲f^T/6qb"pI`7N4ߦ1%0Ot=REƜg~[,v _˜K9K 6~JV-/ÓOZ]=d:“ ρJibgH2*d#X!F5/K"k훴+rL(LqFq*/HJIj [J2߻Gor'˻A+ yC3L3/|XW{hhr @*lcCSr8c&d%@qYBj|z.یoPȥq@xfUQR|OWwҴo^Kǂ v; 5SBEEd=aGxX-H囜 =^Ex#d|\tkRvil 7ZֆSO8XB#+Ʃ1&%+. |X 4I  PŸ/:: e$/hU16r#N'*j5L*FM^Z Qa!b8TMY 5c324+͂GFV u\ @|E,fEy#aN|3Uq v+eS.xyfm=zsLhH!mY.tGQfjEC ڼ-Nppm$Dڃv1΢S~sdX~('cV?#MiR.]PsR y#=eӤ&kyK4:Bp~[rLt6qVPR@3dY_r^jV=alE4K5G4~4ړF,!Kw9n* 鰐HZylݺ Β$ndiKV l;(;57;2Dr$$r?)Eb.̚, e4nxod@ChQKut466,א:B풴w5Œ\ dgU+Ѥu*/{DڴQ.o*>9@]evHokVYӱN8g`Ytһg"[v1;:^퀋 W5ה˯7 P>B|RVYLV \oKeDBe{bk[1*\[7H &DkG`a/3vb7zS-.PG}Vk3ZRj:%a U%!\Ab8%UkV)Z*uW'HaToK.0f+2PpZ7lN JT*F/Jm,ʳK{-Rp=)pҜeIg]k( 4 Nee[_U0y/riѱ ]hXGlBۊjuDm gi0(HkKx97:V]ܐm: i>VDNlo X \m/"؜?{*+Eq/WzhTUXMPԎY mR9j} VTHsdě32-9@hjkf[TS IR-52t==4i8ĐT{tGRc*HV]SҠ7RO2ӒCUnV]IMb] D>bvPfUpƢ_.!IaOHg!$cfNJ^*r=;ב ϹLug=~mna`#@}Y&ANܾF>\^9Kj̿mz C*ǒ#jYR^=p`n]v eWuſm]J]ԟtt] CĚZx3,]eb@ F7jv+q:/&(wLJ!7ew{貱oŲ[DRNtM5Plk@'bVx0ߜsydu9SNUA-31w+}ۂX60=[bl;2^mќ1v/gjBA75N0a&QM3 恞}hЪyjY3FLVN!pxZD^ȩq\X!3#U'kl6_۵4X1/Ҥkƅ zD܌‘q w1-o[W ) xѣ\gP]*By{.zZuޓDk.Fh c]|=xc4d+Ѱ 3*N/3Yi-{ tnn@Xn=p3HTwdoVHU ?2,;ÆX jr/"1TUٕZT\9/+ÅVaёN*x0e=Bp‡Wiy + ֊Dhh؀@%Q&kq&}?h<}Iq#v Yk e=r|]zqdn^.X{,)d }'@_ӞAavI%кg7t*j$̢^"MCv~‡D =}+wI U;F̰Ǐ5CTj( I9`ۻ2ǭ8-:[P O%.9D7i}l+0SbS>F` 2}KPV&,Vzd*N(EE%U y߇}[,j]+|NZ+S!fߓrCS}Qw K/ecH387qAC"pkC v4׶x׮/1WL`M{uD1LG%6{yAp$YxaӈN/z`G [ٶ^)!YtyQe5fA]"" ˳ F3UW7]{Lb,C ?=ۄp_CmnbQmv:}n-x~Bq31Եfg"J*Wf 0n}}Mqq9/$53"s^{w^1_a6aeqǞ F6tL R#2z8{~Ǔ"uJdE\ctcQPQ*L Lj8F_ N4ّ|6ʅyy JyTw1 }&ZYxP\GH|%^)CE8íЇ9tۧ'F8'M^!aVX&{"%x쮠k9M7coաb>#E٢'}rZ3 ֳ,΢lhqÇQ\mrU*?>UqXi5^| P|jƭU-O#_k(McrkZ{PDn(eUc49Dr5Wg /r<˟2dt/n7fpdw ,=F!FN^fǷn*?n0Lp˔FY"`]}$ YK* p]!*z l v i iԕtSM Pt1MNޡ[$ RloPy2Fz˩aN\>xW$r>1lq)A6L׮_OHqHL_Nr]R=S"cs+((o„Q2ʸ'W&B l)PHNIu^T(#>IӾꍬ"RA`OJ Vj+B T@Op^&=}iaSӔfo u#9zxJW;S.>B B⭗Ըu1:7@J/~*U<!QeԽ̍g^`C8S"&~ D5F㊵yϾ{ӏ!z\![5x\0oSx\}2j[z" #2[D>`}]e4Dt>$1Fg~憈T\ ŀplI(Ro0{NXacX"Pex><wr5i'$ u:2߼ea yfj,a<|.P*%9[n?3!Kȡ#1⋼s F?rylin3]mP,mF 1`G;LR#yzGM۫er@>5޸3;ho\*ÔjJL q &yFwWwX5ejѻc{84qcy\3?@$fpc4'[aX}%Q a$N;c0@$TN`_)bt?[﫩ą3 ͱsX zC kC WE*/PI.MvbcmVS?)78b!̲a ?󄸻R.@`J^_%!1 wjAXQIS|90]Vb>ɰ7iO\;s_<2%0$xV dLţVsnoB|VPվ>\bG !nZ2n8ڄLyd yJg'b.ds{yE:{hpg {;71ObDD7L3[Yj/U#$ ȯnCZŮca`ʍ-q!xVV$\*&4©gc}=BqŊ1llL&×L&٧GPZAA@\MA- BT #Jն@z`g5qhNW0?Qs=3j1ǟ䜎[ GUh#ۣL>kܒf-(CVQօRoSZ1%9FA%R6cG:FM˹ |BM`n ԋ#ALGR!JL,ٿA,KxSfU~^Z|IeZE\vA^s Ɋ-xcO, *! Nb&)-ӳ2CoWQZ:$0;ѯP\_Er(]^UwP7Tw?H]ͼ~LF8Cl*WKr y2I&vt@2wț6K1`j%i5#ߙ&N]Tt C&2R;+ !z>Wv8,6xQQEw1%*e< W=5N`U˓ݼmd@a b*ҥ?Pm{Ǜ=A7m3;Lnذՙ6 K1S׷}X:d{6&>otPwD {=)Z\\dk}$tVCqn]0zƥyٌrV/"ĕ0][3ue7ЬGQUl^i؎\ǫ1s +܌,*;:D!@DpN+^+HC(KCQ0ܝH1Lka"\fq)frzvMpjHihio Cwi@s"L&:1@%waU!SdQÊԅk}LdN$A_!mG$<[|ȁJJ,+&$OVd.vI鳖0i7uFTi(3.CScs;:eC?;3h=g,gAkObb:_PoQ'שd=>nO^~ϊmܰzM,ui jpЊCC@zsῲB"z\7DdPz/ O <JyttnTwD4OX4Uzs:bTO#Eyj :4C52RvVE!Fx蔲҂&jWV%cY)Jx#6'r" $9Obnk`)d ZlҶSJ iMa99Ѵ3_zHJڅgûvaG=@&1zfry-p9]",ټn 3XB/ycSH\j NY V?f -P2\ls }޻ -/_6"z^X8Ǎ~n4h_Mbh+2rEf;wM]D  C^h;E(%7lmבSOqZX@Db"cp4 ˲#a Kظ,. `R7o:"M )d6 Tخ1aDGЧ[63k'ߨL"-'EM hRhGj ANYfu\feS1'.T]**>I:j`#f* tXr#g'"Xoh:,ij3qtMn646q^P(Sgb^/<.v ̻24$㘇NJ!Ê,έ~;:8=T*;Q/N; sUe׎kޔ5zhQs0MbBCaקjzbw_Eaݗp% =`ވ1@hwk;0w_"CD>鉳;7a{tQV8U>iZ_əT !~hpgsB !ijs@Kj+B4%xNj&EIP30Fy%ϫaڍr-MֿFra #IHz?:w{SN"uR[[zȓCϭIj ;WuEcfFIAwOMzWi<L;;G Ger2kMvDzn¾ |R5Q0履HٷPSЭqq'R'*-wG+-A[q1tO t{ȫ5)H0Zrj?pDtu;{ 2e=eݢt0ڒ/y@bEG,!Í[0wĬdZCsy0ojYwU9')QvTgmc[ѼHmb%ndI?)YX*Hʊ^2 |X=M= ٚ!Mw*x< l=rNnB Uq[GzZ1EXnV8 DV/A@FzLJΓsB)P,R0uy7~$ҁ룹2;3TGG싶e2]Th9~cHZ^]5vDnuK"'E_AFp怬wdgz;<7xEiiM->˺ DVMJ_1}7AߠcU]2 UY^[p%R=̧%V1+4+l>s@jOXlV(F1lKp#n:&aXD hGFY#u$:O c%]}Iȳs_0K7T"\>H+Tx*Z,ѶRB79e#Ԟ)6wr4D&*F |`Jizu T^Jse߬!j,>!mZsc}bS3ӭPN!K3ᶆE&nTqZn}/,ҵ5K faݺ#js;'kFCwA q6}+AJօ>d\Cͅ+# ;S G{ogٞz\alӏxDhxvU[1 TLw)'1~ nYsUR$?.G2;)ѕiȢ$`a#gs7W҅G."+C豢aU2ե&'G|Sz\jc׈^ƯZJL0b~+`s< EpcM9w^߿} ,\S92S(+@ؔBBJ4PP[. l8| V!s>iYb -.5CR>JUu7}T͖cc%=sW5yf} E.C'0.tt7I !eiOh&+І2Z:(4YQ _BYSlqhD#Ń@qnE׉Ipj{uAYu UVqd@7hNĎSH¶ <\1& C&ܴnw;$ ]'M/m=j(PڡgEZV^R224m"w5,z ^^2pgCSdSGc"x=zz*í6utn4gƃ>~}^'0sw^pK /դm՟[eWR |O5A3ZV bT(9EuHť2;Ѥ|&W5/sQ`  $TIjd˸0V/5%/wĹoͽ GUҢ^Q޽$/)ۡ-'HD7-0@jaK.cZk< | :űkR SU.6øU7AURBQž,m;v6Ns•π_{EV KYz !aHۖ]0*tYO fʫJfvŭYLM6(U 2~`%cu8e6S 7VA"/Ae7noH:pyA2C_ȟcˣ6CnLKǖ.KpIU%f8=N0>̓Lu2{p7>Ng;G~V.>ꟅmmMՉ 1GYi۽y?>i#\6H"V9͇4{4EN#;E&J_'"wUGz5jOPݰݿqE|~ƠnV(Ґ썒=o͑xyϙ2E0uȟ*V f3׷QDEl>;%όs^~8.|erӘ X|q\DEc[YkίA%?xB^KS';j&}nBO"o6"v׀{HsQ7Q_Ob^Tn*58o͙lܱrPjy| h,H`Fآ\ї`$sIiDoHh2"C&n>te=Xυ˸Yyޏm $劤}N6@ FҒص1՜d0$ =*ƣ%{H>͂Q>˙2 f3QB]Ljxq#,A||$Ө5X.a_6+ 4U_HtIį$p+  zB:@0?{Gsث9ݪL1-H,X+xA->Hb,gC΁UpHm1j/],0މo3]vڰ5uwG`Do$Ֆo{6z+IU5J8LUQ^ϑ fSf z<^ [6chbbY&pJ yҢumҒ-Jrz|F+3:F 3j(ʛ5kL\0GnT E:2 ?|etS!*rR7Ck#Nh9Tѫa Rd3ky7_xodЍ0QWDOg f722ZOC6986ľ-&1ܨQƨ p hDs@D@0̙6X)im9gx_}=/t%bUHԭ].aV`R邚u-?Zrc8Zb6$} tD}'ҍ3rq;+vS% #THnxBj쪼6+MW)$(ՈeR4npLfzNR15irݮjCJZ2.}jY[ i E?p> k-JBwBj Ė"/p? IfCVҫB]لϿ4Vr򨈄sR{#O"2:׏};5!Xd%L1qW&b.g&6\LJ<;^<(+O6|Eg t^-qm $vļk1%InNzыhPmd,}DF{ _C?]ZeKqQ]sMP^y()4s3:$P#}}@p$ ~iOtRRVȋoceC<\j,\D6m1}/]5e+P 7c-0Z_P6g; p`LPT<#(XI SΈY\)a3`0An&¥h6dRBaЫ .0T]X NHzW|;4:GERO9k$)ic fFV^9 5=J2 w~biRɶ ݨ사_+]!˷I#i0<z;xLԣjcEgjfQ)aw' |79|sWbe|kqDyh؊ѕRݴ}@\Yq&RNlBybQI䴂4}r>,G0/>{+3-PW5",WHG2G?g !ǥ|/q>KoiVcU7޴t]!R"r<(tB*U("y7p #LL=8aHtJ&˃2h֐?, yEo n29RB$Z1 "J!@#ߖ~aA@RW ε -QiL JeB[(丬iLcLvP)׮#9 YLr'naqݕ #G"JwGIp:)*ſ3َ/~':r#mL4 (Fh',ONWB0HET! ! 3LV}"~dIax+ȏFD+4N#[dF;N!HZ.c"e 8Y$%ЂH.߃єM0@ LD~@rñׄII*^B]u~,ӗGB`>G\ᵋYesdόQduDãqfNBH LF:7$IA+ V_bIoKY'- ^QTVZc@Dk ͎xE%*nL덩4-[С ExBNQ0ag¡wi<-E@y $P#$A y96@D˂/|aGS0JK:@+#*EӖӐZiFExj!*XouNr rSf6.&@e֏>dMȲfg%,Cex4v%JYlʎm7Z`Z!k~2AP2}A#uqr< Z+;/^Ϳmd;%ì\Wu`MZ ?uQ}E 'Z}GI`)ٜ첃_CSUhmM^Pzd#1)5_;p oEhһG.̬O I%~ۧ9>_H2g}=46 "T?~MB.Jx{Iըw:0dhMt b~qDSVTV6͢Kj+Nd12Nv@'U(Ji荌.7_t+4E $\eb[Ub@qBĊg`O5P:F-F S=6)y/q}0&3W].ۉrV(8Hw)_O~޳Ol`Vxkŝ 7RDmJfTOoV *D(I<#|<(1E~pw c)&d=[zBg1uw.7̖rKW[)qm,3o(r U&5i.-1Լrgq0A",(۠1I%*0@UG0G 57Kgnıs+n^+AnU}m'uc*T16ҥrM`eoc. 9̈́UqX_(%4"K4 ts({K'Go+>՗BmkmDܻgnVT;}xm!0]vj ?j`z{5 Mc_ { FmEͶ 4-58MA\uDx: nKR}A5 sVuy c E7.ʃYDɦB|&cG)*đieS!1ؽ!$A %MP #kyv#õ*l[E$1ZƬ I}!*V{2Z q.5]Dܼ"PiaBzH?J+MwJđK!Zx"d[xPU:Y ~zy!'uѣ|D-F^&@!U ,cc8k/5|&3Db zwq/rCT&ĤLJf_.9j?U${o*|OQHMd&ۭlGJ7o vlµG?k-j},i&5QQoiBGbv8CMa$~U/3~ #aP4/%^2GA|KP*%M5K:~!w3q+@@3]HYݱ@U(rSiQ˶n)o k!Ͳq;*o1=|۷{c<_ (1xm8+Q)3` r=*~L3/P)_Vų򓊲nҙ(پkU E]')͏flƌl1+IyяI=h}xzs[ّRtvM֨5D"7HX -q셞stiqvHgk>דPCH vTT p\swo_5͙8 a3B{sc^5 [U&j y"PTv|J)8Y+DYCUQm7\zgZXi_s?Zʁ^1 '^eK %eXw,I&Mo!7E|Yڰ.YR W4 gA͟l>- kFJ<=Pf\"Gd>y5S2멽fDH&0o9{"6CͫR .JBOJ~{ee|R KBjW|V2i!)Ijn1`F~DY'P3UxB;ȼ—Z~w+d |+6Yg|3k_}rߠML®rQst32w,M}o 8AVπ37<,o#5"8'xS'B3/ɫ꺡)&Kk|Q_9XʔStI Xo}fɅ5{*(;0y=10~p4e.Im[(dћҹs0.<ҵ^I}NHeeL6IYNņR=lt fT [cc*iŨoN?FL s|+K<%N)F%UلIvG3[cg,F27:k.qb8ivW{,^r:݌Jfqh~Znʹcɇ0)VlVA9i6S1qo |8X]e-XvIZa!w8-ry/[uQGF0O ue*o]y1׻rƞhKYCH7 cCMg3UeY:&ҖzD!O)Ͼ/ F\k٥Q[`2ӓ=L^avI$I /́Г?⇝dQCVZb}j>3AJYDQc}UYOÞ ؘ[Z[7l'0ǼyOGoӹ?ECcy-|eCObg{kRSGx8'!~@RSJK.7 ${]ɔfҚPNz cNOV8E96o88Z?%lϼ χekaV*utz63^֘YtB393:ΎK7\f`Э[fPf"Kcc-Z<[bDH] $bѵ_}1*\vXP3KIdkԊju_Ƣb/Gpe` 6mBi-\xJu@RԿOI\|;'¤0Dn2r:QYub{JܽI[rZxOMa(^m=#r"㵨R5;fq60 Ыx{iH }-(u lD1sEL➁NI8? r2Xb 1j~F:b2 *dK$ge?b5 Ƶ?\, dڶ~[b,* ?a]H . aӎ8)•Z/)'dֿ8ťXո;I!Lg?P<+DKѱ\fj-k6$FS.[bbKb5%( ѓQ^Nb+P:\rC/vnz 5?o[S{!+@"q8**s*p =w|ѻٌ3t =?lT0C>.xc*h +~31< F@T.+ZʙSr t$T,~C;)^2c04^ocS} SL2wp\,+X_0IF Gl^y=b8`ϙQwfc!wxBa_'cSո^gIs33W}?6͎ׄ@Q\Ɔx̍8nЪ ߀cCJǦrKw|q2{e@^8^lSW\^|p%HxߨT[Y@Y$/(fn%nﺊ\ X4{.j_m<<HnH #⭨ZwUemˋI  .TWNUB wymDU9xC/:^*a{->ԖL- gd|2V3(*]x!Igy@`v❓XKk Fz9TC74uPEtxcrR#*g:JE\hI%4. s^Gn/Afd%i em1"6fQmn" pR}z,Zd+veI` %/4ARqJ2G,OyB[`dV= /qeD%H.fE%s1hJ%cY|_U>l?-;݆wNeʹ5_+=qBujj{Y C{4 i(e# sTӑ5LFxMBf_j g7-t+om:qߛ0r]!Ca!jv~B3쀭K.6aM`v]~-< >u\p@+g?UOi9eX K*~INVc4y6OcNzN-kS3{ 7d$ $V:ONh8GO|<&ؽ!#Z ܽ7/ *n$!4$&Pckw)(sMd.7٨N_ϟ&,ܤLtrр-PdPQb JKn]`6boAGiUz;eg"^_Px(UUnR%FnR-wWc%-igR*l_KP,cGI]g"yg/ߨl)1S}6eNh29ͻ)6MEˏEf2,φrV:c2ސ׌Bwpn:Ó0ґͧ ڴ|a䢌Já}G yyak\kQQjTi ʬỀɥx0A] l9y9P_, ^hi~8zLkef[ubmlk6kIŒ׋oZ[[ ""y:_O 0x$]8;qV ...ܭRIU?g~JbdOp,Au/ 厮T\tr2M${06h*ݤ!%ˆ=ToF~ZJ2C Xߍ1Y/"ӵg*c3[Jff.^xA4 ۲40ר?LE;:B }y,RN䲍lA4YC~Q۴r@|.7t?:u9R)% bdi?BnWD i/V^ba#,V4şX[fi_%Vq M O;P?[R~\Tl/rOSO}_eqdGI>S+f/% 'Ocy H+jyahV#8i9lf7'"_/jHMm4cxRYKRGjI8sX j|rm O g?" ۚyQ*_2ِIn7!4jm|lF>.ɯqڜlep/B =XKo|_2ΑO3wq8q2Ѓ& XV> j L^&!( [8k;@eb&%~V}ų鿗 WY!pZzXm~,1K;.Z'e'3Zt 85ɥˆlF;3y[ƍߧ)KsQgT֣k;q f@䁃euqGmWGڹhxUi{u%#j)1H0|Adط2>`ݰýOTmj)zr7uiWIwwHP&ց |RUa#]SoVfr|S,$@e BW#"\I`yC?U^x]: ( `Qhׯw!;\6@Gv01Ȯ/lX?,( mP\n sw-3dg()7H7mylkVv7 lۀL=]„`m$CxH, Al&K晦nX+[jV5k݄\#X9jC[rjɨθeRh[E!NF #N[03\u9>\ԕ翠C}1س+V]A <\9 f]@f֊=9IAqj8Xt14|[(ļreP8lm5QDC3{R U b2u5S6;%跭+A?H W; u /$ÐWH@UahkN4&N< .'bH?D'X4fдz7-m(2h jGl߉-wnj{vNܸ R;[c|,6F| 6໢[e”@}CWYbF|#W숚5G蔽)% O} ۅܮU?f+wEtVȈ3z "UfPlۘwmh`)zfLyb;rB]%T~iKT^7 qG>;5qdy2%q5%X%٣^u d.eF}{cq܎a^"F!<4v֖\o fqpE[XxqB`‘ɨ5#F?0UiH뎂#N23ԬKg7N$_,i:p;}z#LΟ$#u4BQQD 4^'͚KM*>$-م$ XaNR뱦hlAqrU~D85~x`zHpURzuXP]-v=&!KC?;zZ\hpAkM5=AǪ%O`JO\t]:"񚝞 ڀZSt6.ehCW~:uʷ4=dFtwmJ*S0H$ aƕ11nC|r^ C9Gii˔s[ujWc rZ0<^-իPY)KDɋ =l!Z )ǷV GFxexJ.ɝ,n_ڠm҆c̼*υ']AR/_vq/7.N9Q|e պJ3V;pny3Q#x9oz6-* qKcY#DZ'_#!~McO-x+\I-Kk4/&hu @ZXqs=` |?AepRf Yer[*3 |*J\/vZ㰷 J} : ݩֲ*zv@Ѭ*Yڐ[Lt`h[4JɴQuk.06_j@~ONAقLsL:Ytx#"i^H/Un)&SwˎWŘ_cpqwtUKQ&㑁9Kn~EdI#4jMK}e9;UC[%?Z$nCH:[k qBkb} 7du !|hsU4VAjbh RXuoG8 ˁx'wD0->*[WUБsHW jdeuU>+қ aΰeΘ8aWK/h.Wiry!ȁ@LځH6YD%C@-|p6={:,]$d>Oj|C1.;HW$hlN1AFg.F6#3Po Ւez={lF0;NJ񋡥|3Hgw`eďK C ic,#iy^Fh-]l{douH~~l.zNa$FPxN"LZoz 5dV#woaZkrCy<-F(|WKZstrҩ|/%-eGNW/WB7eJG? _L@r̈́SJ,Pnb^5A$=YcXgoĘGq]^E$&XY0B"%ө9 ldq8H/ڹb:o7|3CO ؘFSJj-P(l_=O ov_]UG򁹈2]rhHX4:`67z C/E05`Y^Yv6.eqPwKi r6gaN#; ozfmIBT(^$ |/%# W;> ,m"8ދ `l\ Mq9ׄ>{Ĕʁ>e8nnAg0z]vUσ/Cf?Zm)g=?K5_-M:%¯B-ˑmt:9RQ=}%JޮQ[6fmD{xtB35I+d Bwx$zTCct5ڀ.i`tA5.FB8LLJGY6Pe c'Dc]_K9{4IVM., =_mAcG>؍AG@"0]VyBxVDUAg xX\.G q^!LHdFd5 E#hg1(,hLo;9mJnZI0jfZ8BpkUwtMk$zĞ M2RgnRiYN JsS\}ȭXE"y  $vK-yg̡GĂ.i'^8JZno|tPq7-gi-]]&j.}r.yXKZzm¸>s ?[oQ AAuȖn|ʗՐڔ0 /O%U*O=בt||yk u &k5 Ư渲7>NJ*C[b6= )9Nƾ#u:=9b[7 fOTxρ*7mdm)T..}vؚA|8ޙW5'[j~/[Z-Y!@F#bᙒ Ƣ cpSY?^(Ì,4j:\Lg̭M h*bBc;>y eOa0?o>XEEnAvx&wmF3<L SVmid8G4Z;?&Ĕ^?;1P`]"bT]GՒ "*r(sTaο_I.Qr~>#~p%.M5 }Pd+|L(i@)z\&ވwq&Bw>w;G1gtMQut֏r 0Qohh 6Ԍ SqC=ަq󈭺ey`0!j!++)wqM?h5eA9}0NFSj oH8r#H"]`c2vzn mґ%Zt j2[Ye>O3$P2`~P`$UǿώYi\BdBrfԸ OE*sݸtyX\5Ly T76Z}'PZbXAIp ".zg<@kգ%^coZ,ŷ6q0/D84,#uI.EY Yֵ՝,=bKV˗3W[/̍;O("-QTtƉ97K˖,6SVݢN?c0tth Ye|^_̼ R19~D 8Gёrr泠~zl' cwCAjDOK9MCӫD76@?+9@B2lSg}egЊ_pGxW+靮C"8!Z])X*,9 }m1)nִ7uu6؁Mv+)m?RmԩQL %Y/ tz&|>])ѓ !#6f]PfAD& 4([yy"XqwkyD?%Ҫ(xIXFcQYFճq%1EwIjutcG f)|+ϰX37B,`37@pUb :,yDB% CC)Q\w~5oKtDBdё?u VhmRF'3/Ji*Fx땩5?h c0QscW'[!ՋtƁHU@NmĿi ̟3 4dtllV-$F~;0M62݇bAWl|fw0eIf6tC`h:$q1u$ESe @[uLfǴVuFq5q$gJ.mW Y ca[cXcE`5uqvn}#w/9sYP>l p,";svWõ;;WWf6z>jXD¦ ,N7}hEIbiBvg4=m65!ؑPVS[cж EA:^ƈswMA63鰨:3'nf)m8ikKegL[_p+]m))=V3&2C)veN;G~8&мܡŇ2X,CęH۫d!ŗ Ȣ?wTਞα'c$kMMbP4 $t%5=v( 8SԝW ~Ű7el8eƸHMqWXCkluH!?0rnmn2fCe(=otpRf .6ř|6]eweX>=^yk9ks@9|oMOXM_LuI1!kelZ;xi$^3RFBr'"&1r~BNh#7fЕb)l; ne$(˧G!)ڲ}:8,bM܃ ٶPpFGfCDyqp9 39j??8x"䏹~RvUt|" 4 fW42Yvr*!sl,ObF2fE6Z!@݁X̝U&$]F^DQr"8\܋&^ѓҴ'89cݒH^(<C^!-GeD^ \Yzů= s'ɺ|ss=iCS8Ƕ@`5*1gb HN7jX]Z oj2WCZ>By[3jySq;xP7#`X_#u GZ67]7(!T_)%~[`^ݧ:ޙ',-?1!.g&MCπ^hAej~0Oqf|q,^% J}]}0όG'+dֲ7$1SiݷblPQ 0XF<"k}RȻ:k~?m ?|/>P#+e ז$2:WVcK[V@(D#\w%.N(|MGo&lȟ:}]B2[p|2tݱIv6=|ӞW닪Rڃmvͺ Vku'J2ISܤCONkj ܊eb=YڬQ+[STV)Zs~'qD0 RN=q?]*/R,v_ ˃~Hh hFr|jar 9 oɝĥƾp-qbZx.me䀐15P{qs4ziLBqX ڕF^Wf6cl>`[Va/׮卥yAu_T-Ơ?/_>[/kyΓqޥ6ڶ03BKZ'燙)Anj1.:R Z*h#=:8BeàJB(NTDʛ[[_t҇/JK38MMm#8|A,DC32N0ڒ~196Ѧی3t-|,1@_4"qk JNtD2X/xe?s|Ȟ6 (pP2|::sș #fny=[}T*Hk_(e(Qj() LP(fR~^).(^(GE}wC;P^Ne$2eR\;gy @Wh q~ngk8y[[`%R(8i%c@2\:n=7Eݕ⽥?Ɩ%\Ox'>x@)[^;w&zp ^\t=nt.hl le';IW@.J ogqmbQrj_@{փ CƵL59B̯]i-ā j ppR fnNHo]E715TΑۆXVQx#U}\V!="?J@H 'c=siP9ޟ8WYhEP7~uʐU pt9b;&*h!m-{C X*l;,Ls'̿~OANja'rJ\/e~0c] askxt$@Eۄ5 ꑪ~]Gx+4WdV5)4ɸ_]S&P Dƶ57 ?ôfy9GGD;9H{'=ca>'۫_jf޼.b*Fjʸӏ,qNw dF|#$(Zh|ox3X]a^$yS"&,'ؼ_?Di5,{;z9lůvLr@쐣 U8檐f%g- .:h_!_^8$鯳v]%':;3OWEGuk<0݁ưj갈[|O-ѥYrYUdA}5xPjY=bAB{F^G)hH|tMJ!qKc9W3{_b<)1Ib܉Hp_\XnOѰJ=oL>}|3WSכf@b4ꣿTE@syV-yuNEڲ2уSA+ G1(a[i/({(*?e,9eA%VFqAdΟcoeK3kkB%ds ?@En<^]EԦDYC:UA:5cGHQVs9[Ne|3J!'u % t|: r,rpo *sG] Ֆ$L3YnD~˳~(Ig4b%`lh"W ZN!\®_:~-R$\8]_]OH`oI X3=Vc~'>: 0~e}X~zM"E .-te6nh> (<4YU]i7f!L%3ҘU&#yݽ>r"1}TRHJk@\73߃~Uڎs'% 3ꙫ*TR*ph)e &I<NS 6hNigcʜ;lc9q%<8g%|}蹤cvrԺ*^IuiŲVmW`wtldP1P'?ZnwxC)א0)0ȶKСI6wp䏭aFbcGlp>0K{0ziVb)O`.`6$Rݾ VZ-,SΠyE>*_v`MXVEhxDH *Hy ʋf> Ё7̳ y\3B3]kHxVd9P]y(֝KJ,tr͋SJ eUݽmCDHR/'o'b86hD~BuHU;_M)(FI{WKOHO ;\@hlxDh0HVffdwa+8NpQI@ޑ nҙRDlF=Q#NY! ԸRR輓Aw H<׷ZYfAkytShSviH',l;_vu1R96OD3rsFh/`=@5tVʙEc,P:Ԍ5ܷ0z X{Dz*>í?;Kwp٧?8XjFXttO{ZJU-]<#`8ԕ$4nG_h2fB^O@=w ձ ȝNXA('on,ST¤M~tMFATht!?dƊBbo"ȧ< 'yCߥ b>E ^Â=0y4 lM%p!olK\L T0aCzsNmZrj \QN08:d2\jdUAnԉ+jhY6.)yfB%k x/BnJM\͚2va ڥﲡ?JsRg'+7(Ox<`סDF2hIztS>a>` ^ B&xO,Ϝ1f h#}EI)}Su N*J ?ٓd0\>/V67ǔ*Lghxσa /Oo"ǙX1^ܜsrQF'.%/$ p9Tp (m֪N>`RT0I[h4^oL=OmeQ粷wpb+)\F겸 3$j Ŀvl=pYY 6bRLjrn"4=+gr )kg=Zh6qb+BTNK}Q~ WOc+3[R7?ҖR` ~“oYN1SUjZD[01!58dža<}!$qi1}KGv ~,0vIzf<<&ܶɌ~/~~9p`bqMU[g%/!ve )]_Ro J r u/_ (paŋ\b uB<Z7%A?Ѡ^QЏ9/Dt(fQ3RNk/zBG/,'#vC]³5+(GU!O#G=ww mI6jEh'ɋ+U7 ^wދ8ZRfs1b[1\WdFI3/1ެw;]tt&"鸥:QmX cgOɴB'ل `u2~tXM&MEz::DB-֜7=:6*r$:FyU \*o_gz F3#;2`\4S#2 $$M^^%WpmzF˪nT|gyk=sNGpsuTrPe%u"ea|nNAp02 Y g-k\H|->Y L8rj@\AI~Z5?hZk1.A>y]$`yz%q xCdx6W7m 줗KU|-H ԥ0k.hgZhs !W4m:*yz,_2&>ZOrf,8YR)/.$jY3rqØ1'WOJZ"2/$1N{M)OTdr&dp2ϝ 1dbic>J?= |Yo]nGVgunZcG$a6C1641c[vCby$f}9&sǪ %Ƅdz3(^x)3^sYQy> W!A>戼լkw/@<& h5)[ӂ-# T&v1V*5"ř(VsUlRgmA;)F#s`wRS[r5q tځryڟi }#] ;7M5>7nR\䤈-M4ٕ9t^Ơe=zcd+=QM6ڤoa9 7Mj\"^Iš7>%)I*4~6=ѻGE_%skFCQ\7i2si1?h0:4Ig #*A:ܔ]Ptw k|.[̿>3VD%&Z:"LԀ!$d$ wŇ>]-t<ۤGk$G߾f@ꪑנD-pK|U&N9]DUYւ2lJպG0rRTfebo%"3rG$M*T}"gy}qs?9:.Yb-R2GE_/yYs(ͤ# timdD+퓝JU1tbϻwuPB. h/q 'kN-H Arj@.IUec=8xfWZW]X_=f,Y_8Fy'-15ö@zOd5{^ϴyɷAdl\Z ^khh@lŒ c%pK7 k9.lbiM&3xFVbOu]gɀ. { ӎY+-%؎ GO"D2-GZQNT\"#JBsn  aP+uPr R`+b_@G"?c817+j xXYK8jr`^y>EtO\D~jB+:'v9p+A3Ƈc~&.f}orQ$bH}evh[(c+G]d #& S-t+6T;lQ E UQFIEAGAbE+вO~OfYa8-kkOO#o^ˢIH}. Ǩ0;D=$<ԍOL hɬL}nB11.'Z rE9.;HM\@WFN0S6XwF! ?tiŴUoyƸ[X߿usx(oaXY"Q  6y|&@P>vqnB|]!Id Q1Y&{jE:%(UPu,͛"x ~-lނ'Hۦk$W88"!rБ)ҢVsF+V<#-NX(,TǦ u">"=*b y"^2JF KH-eUe '³)lSGq)2wm))ȈgJ|2:U@ 9M ]k#ȄꝒ߿"VZeˮ݅ZQԟu:&tg!ZYg26awL0mws7IHo0oס'i S{n~ĚMSNjs.cwj,}ơv=\CEQPZs'2{Iz⬤`UÒj<^BĈ˹*cS٥$̤Zh*a|v,YAЖj(̫dHy d)+eqsVe%cpɋ%-zT^pgΝE<#,9O+9j痕|)u QyVHfI.#-G!1Č#Ahӓ QsQ0! Pl7HV}!NazCIr!SPmѷLXf.<ߏދWGx+}3ڶy_bHtU͊kz2ڦA&+7)J2|mó9䍽{zmͺe^ˤ`6H\8[9iF$1m 3̇/4ϞOX.kX.2> b>% I[Yj?rGIɑv06ILmAEN ְc1a6i9PǞj\a*RQY-6sV^(ʜ(Z:nM Mx`<}61i cȏFoIf `7h gON뾮Š!h6,z  |^;g'v>܈g:F c*$\y'vFm:1v!]#{z]Iad^UˎK,|I*.MMPȈ+,۽@73u;3{@{p&!g~~Ŭ-T3A-̟hK%ߊ7T³1.MrCvv~CQ[xj;n3kZW=U<= p¢ ^{>89n Dvc*uy > X((˺.sVe ͣct7f3q!1;C5Ν`lRR}[jg$t8?+!9| kѮ/xcmFr}Ds-"N)ĵsO圭GZožfY0p -Ãh,zwE>^ } ]^.͉OskRg#e[lKqQYT ]j:kltȔ^<=\\Vڝ1?97q=Cs,dMПghNj^eSǶ|xY!br$]cci,% ,]ssfT(5sX{Eʜ}̡oxX<F(^(ioQG-aĎ :sKG^p+LB+1;ϪAY=֍ YebPV`Cʦ]VMPd~:[qQ)?QUdte-VW.97.9ݔd|[}o;U=^$JQۈff:v2W')PiC鎾CE B ؓUt}~qnָ~hة++qG"ԙĖ g< j;&lF9ITטmkT$*nxW/ aWZHblS@2/T</]áwH(k&iAz(Z .>8oX,һFپY_SWz+dQKfn)Nm. 3 .|!|PR Ѳo/Go:K Wj|B? 618б/ݎp"\fd_20RiA4`E%%_˃2YVxlcM\8rW8nR-s,-7c' y|X/„7HAih`dQ5Ap:s{S8@Xhz%¢wepk68FM?}v#r: q2rL&~Bѹghob~j Y%X"6A_MɬL@d/P.?tQ ,,fP1NMy2*pMag(x _ru+Q)n>-s}KHO-86+ӉQZw[ݬRm֪Zw<1]1?# i"_ 9Y zz;UwpQLv=F #E݈8Yё FbV#' K̮F DCp EImEu'6m_<&(''D#ak |Ueo}_ 1u{j[kgp0(=TAbBr>4t&HD#vc9ׂ+q'o,tb:Z~KQUGQߋ"PYtĿK ߘ, 7h@{@Hks>AXRة GC({4AI q^'i\. lШG׶ߵo޸vxiors~t $^Wh\~wDy>֗/%kyң*9ox[n1`zDЩ7#_4O5V7-wuFE<ߎZds2KA-DPA*^ViΙ ?ׄҫZ/NIyN\0$# Y+!ϊ%x F|>oɧcҽd D'x׹4~chi> 9ƴ-O"n|S@8tó3uޠ*Cz >}P6h/%gzO}ٷ7Byӎ x| C=(N0w\OM+Wt9ɫ'Lԍ.Z[N3R'3t\ƾ(<ǧTU>jaa ӝ}sA_AŻPfdy_car Ne&QInqt̶qWoZIv9wXrb3W fF󝂇Owe$$Nwk+'mim}1RRXszc:L$4b`gqWP›^ͨ/͠T(8?ahܾG*3 `^ bdi.}Xv#GoWs'?(A_obWzzx9$CHx>[eekv~YXIA?[ә2w җT}uu`8U#JB'8$JE S\X)V122GzW 6-^/z}Cei4nS B,{EMlv*eG_io?} z*+5> rގ F'y>COY~үY+b-6 ubm=.}˃͙ZtsPb\'  f%`y{9%sHy33mp88f*9ƧlF&(>:0E<7t/WK)#]^KQa&#UxD^tq"*M//MHv&3<٦ʰ19`Aa[3O =tBVitpflKI?'.U5=N[AR]p? :!&st yNsq<=[;߂ajS=An&N"/{{Bo>s7h\0>=3] $n^ uvzieAoA+UV, m8?[Qg\׫􏙀Y(! |=0Z:%ܚBؙ *}0J opxC{2 JkCJ%c/?2. yU7Vo%caW[$+]whVz텵%oxqJr`6޼␜~@WWAiPgȑWE吩 ]ꇐ'`f bk/ $݊'chG6oFdj#?{j:K'~#uFf z{֔" }][)pZQ/>'xl ~ّm-d'WPM@PpY/Ew2@\?h-:K5F02O֑ŷ]zBZUzqYޜru 5Ν^Q=c37v쓈1k_zgnQ#TqdߦCoI @=A!ׂȏ0?\pnhK#R*g owl=C'̹YY~H6Q rns5z ZA\GƠ|yqq?O71f3sxGKqSn n cGȴz׃vAXf%zl^ћEP:o,^x;~6W3UXdbϧ,!; Y=*#ƴAqһ=3)0JZI !dƺ^\竴ٓt^јv6QVƘoTg'P1ʋ천1ҕsݴ/Ԛ9BfydݻQ%A#\Z1P^[ufuޒnnaUJ1nx2h{O @Gl4oϽ'A_P->#}5[qppx,,TJl$nC/>Lܝ30mPk䞑êF,14-6m>ķ(`=Cѯͺ o(3^DZIh"NU>Gba1Hd ,q2(ɹNU~M=wC̐b3 05ns I2>3pwzۇFs}|Gs||Fil B IyǷѓX|{Htz#;腌J&,TOu9JIh&_p^,;'$n]0S2ac\ mㄍ}NUq~Ͽ(LDng^aۃ,Ӓs5-p3/>:8Ρ=sX:g-F<04z~]^yѡɜD&`^]_?IVMg֘ExI(a3Zn ړ){RH"3j1\Q3S"o(mJgQ^ hf9bjQhk}ϝw(}<^o_cw]$&{Tsb*;?SۭJ7?O57Q GInKwm9,t#;({59G69$BVuY_O֚}Eٓ2{V(7!+ 1 ZsGvt+@\༶qys^އJU9ksN _{u4kaSQXv뛾ڡ:M9>ht zSsusKHr%2Ԩ+ӯRBݏ󴯟&c cWݎ_1 6RĀ^nFRb`N*" )hp*3aN/́CL: E0wr#\*iFaGbK`e-3AKyK;_ȕ KoϟՓ] AIY<;c~r7;)ns/+p_<_*{04Ο1LN FE0D~tĔN.\:uz7~ 2K\EdLSj8J3='-"@4/GiR, Jp@x%2h^+me&QC9+b- ܐb"ozs 'R*M%"$˝Iڻ]^A7%Lbح Ejnsyp2VqxMuZV]&RXFjT~ZGhǍ]<2ܟ+XJD{,DN$GAxEds Lf%2д >nX'Oz ̤(*S>8A{2Jq)M↵հZ%#DV bji+QR_YtezۡhQ`>_{"QPᐌy W5j# qo/oUrGgm,STN#LpL1hOh4t6vpt!bqL|ÆcO.f:w|z,8:j閽)5z4ˆd^Hx , b"dO1⦽̩k6-;:yfN/St5ƹoWl%m~U"O߿cӺnUc{Ahơ<ݳw-ːŢ'ҟ|͝u{-@m#z6V*iKc:Vi(!w{o#2ߖv?qkvg lI9 y!wŽ՞UIn<}uE53oƜ=9uqXӡq{4P@(v0>z0|fF[1L^!;3i-ݜF׮sQQgZO5jDho<Wk$20i`$Ƥ =Z8\oR%~j#xys ]L=Jv W ~B={%CBkm9#;ے^3|׎#۠dh܎x'po^[ yTpH$2exT(zC3*垀[|'y+rC$1`}8p~>_ H]J $omIzc%8@< 5w.ǔRN4ʭ$bُ3v $.ދ'H#+@[M?v6q?μʂ姃cw]EJS7ƈc6;gxzL!=QPmBct%EۑS1L[&"eP2QR]]R/Ecp7&ϑViHˋJO]a|[ enc{ɃV4Cr@S 8N>aICUyژ$m;x[) haaEؙqyn޲I\9r\`oY8}qB5qdt֫%vˣZێZ6=jA.ɶE?i?Z-T j\AQߙ3Ⱥi({; $ɪ%<ܝ3wRҮ'a@~ ,>ӝHⰚ]:.(Q2bsiK2٪hSxcTySVgU8 74CI-=䮋"|WOrjs=t-&ABw!Y(>(-ڥӭ XtY#ݙK5Ƙ00BOR ;.U=hϱ]U-֟8Fl>/i8ezHa?-6ʗԪBP*5(O/#@9#hjs0׏%V.G'fؠvHdf؈\=ϊTa]tbM4a@!az!a[{f:X1T1 - R B(g 2y } 4>u0tN/H3u*(e4 x35YjY.'\9N1VF7YHȔG2R2!L#v j>Ekf!`\VYa\5t팡Bn0dh$kPRΰUls1n_?G> h`֞4 AU%#Faj?m#{IDwfθqfYu"[(Ay".Y5 t` v(ê$QY䰜{Q sMvVv;ֶ*vZ4UaKU@ 4d D6|IWL1DC)IZKcz]6~)!Jg]p9&ȋ>sWnS b:TWrR|t][&bj5)SoQ24y;)zHUǔ#H7nTTZ,6 5#dch:$. BZck=w3?ԇ /|g0p0Ǎ{jiM >VY-YNqg(vAiX1V l8NM} oI>1cݘA.r 2[]'a/K7f9 8+6T?%VCʬ)̟DhxD,L4FoJe#7Uq6,m\*ul(|-8+:*8X<[L|92J5VNVl6uTSeV&2R A%v9cc ~eϴ~@hGGu+u6yz]A0;RB%BP`2dzʭ}wk*u˚Ck{m.9sɇ>|f,#)9楁j+KۈowQ2蘆ܫB{}dJ^H:T Aeŏ@ܖnM|^+'xCC_oS|"qގH(#s.I [!]iW4zUV2 ɏ o.:;%F͓>ҷ CI})Dz,b)HzgIfO5%oM#IEuJzI2!L*Hr wp%x~kЗ0u#jNqjv8pnh6:]FNƚnCo:fFZ@Q;M7mJ 땅 "ϘLa{"81h@|in!9i}ſCV8Pe6#y5FGRU3\2)wCcrt*d(~Vh n ƬG着]SP<үs| #X)Y޼'|Ŗ'qoh[buƣjSE)V36iֳsὁ,[%c.<! miqHg_1`8E^2\G9I]qUZ,- >FߒR"e`vK˦UFg[[\bcFM!Fol¨K+"Lо &.PݪݡST 6’VcyKiA6ຨ 7oUt/a`}! /qӪ1c2L_"֥9?gb|LGڇ5j1ߨslp6vv4 v6ҡjǷW<d5xr~' i`NzQh=vrNsxU6L<>"hL%\W?y[apDxmT$j>c,q0aˇ`6'0ږ+KB.ˑh8)nrR]8ٔ(Kq:l-,v n?H5kz3;d`kK\+LA,*(`E,^'J3l KbѤmK\_7:UNB2dJzڕV籬&]Eщ JxM߬}̡o+uxޞ&uc/;Q8i12- %׷Vr zf`Mrd\ьh0cjfOǦ1&/{ at2rV*,cd|JS"|ޟeԐzT^Vs %n9jU"lJ~I2Ȥ;є܆ c')$~F~4R Od|d}TF jjIM96c%v)8<I| E@sR[V(!QW!W:iR(K9GB.|lY@ZfT5 Rԉ_N.LѲQ̋iKoä.Ro}윀RreiͫWoQqV-Ȼ [ I(#`qogIKJg^Xr 2x˪/ΜI5wyoq #>qbV5 =h/_+v^,%.1:RHzr<"< mxrL>O(NOd=Ǿ)Ehicy@21ze EW| yh]1Z#lׁ0_:# !}k"7i,(2G'Q1tzһ{G–HYYf^E0xH\_1yޢ]f۲M/ Oz<`Jd f1ߴrˆ4KЪoK\\-E rI'^`"[!=89cf};IecN'^!T 9+IԂw\>=ole(陬P%+ Ѓ2AD+LԺ|>Wˣ~ZT۠9$t`l im#mAoj{"hqDxx珐j3]MWEQ׻˕=!d>6^8!Ks[CRCLĦDԂBm(1*sՅtTP?NP>PW̗@0AXxn&Q{?Iܡ++3>H?³kϢ8cu:9TJeZ:LVK[e67nNӯr4^]_AhkR6 1ԧHm YJms+yS7ujfbFJ=&xj/Z@RF,Bv ϦkYigC5"@bgLCWz ֺ+9* /vo f9B"x '|I'&S4MX g;{ AN-  C9Ph :EAm'?x)SC, %bJƬsÆd61r hɖQ=̋$K2WnI&͸h^#o~*ő_A9Hc5B +n'OUNzVaQ4@{,H(KF'C +7AKM)]ɬ8[xR>MerܥI~oa>0hZi,_n|՜'$Ҭ *+t ƞơS6 024AG1k0,6͡m̀yjN!QX=(=M[aw]u 丣Pu( Gr565_PΡ'=ug[wh•7P 3x>B=G+\=[4Z|" R(#?z~g_'{igrQqpm{(/eW< jMg70qⓅ4*2}#Vܹa!RÎIe Gys'*η4+gǜF_hi#%آ{eߝs qb]M4줫Sz&y O[9{1pm 8y?m=Cfd#?MQ@6Ƀ/,`ߏ@.-e(tGT.,sttiH#9 eKr@vWTa4t|Azhs|7:6s\\Bܬ s қIpsZ{; {n_.ξ #XEo"kb/C+ʞiR%XnvOFR,s7=ٱeg|S> MD*4ʘG|lD}\/-MUL,$9VJƏqs@N׈|vKH" i> fҕD%Yܺ9Z΂vRԿY^2Vžf΂h&^t@N =h*XOgsKѳȌw-@s ScLQU|_!KR`')]4lK~IT hHkTܾ<؇]7VtcT|p\lPF {ٳ&Y6r sn5-]f>0ФI`޳l~rg,0UG5> TJkEPr¹LDuY(> g+ZR6&x 'Orf`LK)껒"l 5ENH M=ƅR꺝Šp}nyW>}ޤHje<3n "dr2𐨷ð(\5}&I[Qq=wvR~_G-zI@;ӊ)F?-Cys4BypКڨrJs6:T+ycHC.Du'z n硤5nq{^TôGN_ )d!Q`Ӈ[_> Iw嗿:D;GXsm{8ኇ"`ZCS]=ɀ>?4΁=XHV'+ԱBS54wϳifV⓶ҩmu3EBwЇ]zuj&/VH|7Οm0$>r}K){%o^FkP2FawJ]+_Vң !sUʓqHK:<(F n1+7{*I;8~1Јfr55CսR{'\H0yqϙNz5LNִro Z߽q%9ԡIޕ,.T7[sшINA˟W"aҹ˟Wfp-{vD2g CVWx08He79FGS94CS!v3eƄIzL˘3oS34X,aܑAr{0t8򻰨*,׮TV\m؍])ۚb]zz><8D@~O1Pa[^ ={gg_0 /T„8DL*6"`k @K5bqQYQñs);;^vY䯄 ̀Ckks(b2)t5e`^E&i8Xq̮Fp> -tܥj{ؗ${'GouP kOX~F63j%qi?aZ; 7T󑌇S2/ɫDq4-q K JZ>uH jnK_Zihkh>\,('P~*6tG>IjRjO -R-J6={e`c p6߲%a9ۑ\"m~/kvKJB >Kـާo(OԽ. %0`Y38 }OkZ *2߹I/2;Tda0+vwn0t](9 Qw=a\]&ql*@ %_~S8=d;Xb~n9\@ܻ(cV|6z(BNBAn={4W7l9οDˉu,`m{u^ըw%N}if}QV'ĄEHte@;8'cqfgб6Cdv Mo69th'|QkeP~xFZG帽F0PҘQmOslf΃OMuE~b{!0H2!8ԗ6^27ڎv2k,ݻ%{r`2ǟC͆"HT 04Fr|gf iAHR6_C;F阼m }>$ZC&Yqaϙ8Tm Ull^6寲];oOܮ`$eH[9Y:(^k^d<})Xx)spm|kn#n>!dɉ7<'s ٩Xm^éDQ5зF=d@$3voqoQ^n 9U:Ann)SSren[(zu!-x}6^!ɗ(mtH xC4/{U59,s gJB-ݿWaW?)*hpȒRhb:AdΡ7 .\d;Q}' zQ:S_~#dYxv9K3Ԗ7I5RaMs \شUՋ-ʡMlTvו.Xb ͽ~yyv:sA  _7'؊ mc.NfnZb4NvnUCӒKS.I1>.2 ay>q8[7gJ룴VskCP3 gG,b&5EμJwxcW5]uHv\fXoۃxz1()R :wBtB4?k֒.@mQ_TlJu/S`z;,kH\j,IIcy_gIK+0 'gX9]js|}57xn@,=ef.`#u2OtǔR\>]~VmlD1/M=57mކij$}]ϭ+X% H;-PŃm*p˷UÇ] =doB;!\mbU5eQ6]bWcۀ9+]Qp~'cر̱y yp 9o~ lMZTW4r-kg2Q4F^j~2Le0 g X ~c4aKBIb$5a-zQcXd(dl1Mh<-0=hslڬYêF|TmrLPLR\ޱ"V^>.mu+tmEyaK&s2&S\?aPaǂ5mR [4mp3UyH:Mm  n3tXNXr`RI~ܤF53_4!}c;ȋ_Uৎ_c'Ϥ{fTQtgDE=þMt\q.F1EYTAm:tuN{D n!aN:i#ipdS>JR`2:kXNkTXe/!bY9Ld)ws'FdHިl_QNaU @ð NϺof2kg:؁f0rB -|Ƙ)r@BX] gO!%p&3,S) ]jͥ:o{ۥz7!_jK~b`4O4Ĝ#g 7! 쌙 *rKBͳ{|n3AgK4>hRиox>YCk u`~L&mh .<ҟmceר+IP^1fqDPȇ+\|j?yzP_G8q)t{:,T# repSDx:NjP ^81<_WG}H 5C5IWwҺ9? 9 A q*ycmٶj05%ޒǚ6[em㛖S}6~sv2w,YVI8.4_|h|$vMsBvH~e|EMqJ[V¤ؿ(pbO:lX4 m̱u5_ƂNTG ջe뼿|;cqBt*^>id{+z5qC$S4{LB+|A-jS; Hv4FIr}Kn*5e>I=QC߯Aκ)H1U+j=ApÒolnFlj- C~Z$:jE`r6!S.͓N>%=bmhR [TP QW8QoI0,'wŨu#,>kڜ.ONר/q.xP79;/!R@E3jd-)]kq\-'yPCWT9(7vvp`Vd5M%ZQPxY.hg4؟*qaHXO8ְ4b@+%J ̒h@Sn$"E]Q3?)9{N;('(ׄ}v5xjly zSQ:4t!3 嗨`gsy8(^Ng3NuD |T5FG8uZ/oBB18D^m&~Õ*SGvyb`fm$krG0 N+zQVEK~&ZyN9(;*0wc7\f9sh6nrhV>]̇2|ӄuTĤچk> l7pYY:&[z-Oi4"JlL-73/njqPvM>a&`M6dmt н]N_.wqјP'ϧ\jNS-TwF> u,oz[h['xtj57ÏI{SA 69vpq&6碶&GvΝuy 8pQ(s*2pEB mt`ky?±O}O~_GVrd9t}-Gz^l~&T1$+WY~ xL^WQ@L_/0oa"I!/3]R@sGhܭ?Hc>7lMֳ|̰)y]TwtXbckHJ}*)]0[ǿ񂘊@k|`Oc*]"\wkD`K{&zm"&9z/7ܼy}Xk:gYݴ#Pb~'I4)AyNDb ڻItJ8_hz"C%{GJjj{i㙾XTO b_Or jȮIz=(5]MfKYidj"dS2pnZqܷ io9,ѝ'kVa"d`%CWiTUa{r4tO}U[z:ݗSԟ5Ĥ4NuǑS锅U#nL_+2ޟQNVX]I ɬ*jOm̨>nw5U5ˇwթmKT4^Z=>4,9Lq,\sTlDt؊}"}0{d|zEJ7uݟ಻Z)9ȟ 0͖(%Bjڦ͈ڮ!.;^<%ݹp=plCQmOSavPI@6=gaK22QSIŠXj!ϝKq?AMvYa|ɝ`"=bw(Р6+$q͝_ۺZ-2Ӝ{\rgHp&ޖ-S7/Eg{ViNM뗦n5k&Y)Tʾ"jb՚iI}WTa8 Z -PR8&:\JciBqQE C9(ūf)%]ݝpݭpla=xi7ۆ_SX?{ɿk|}KZ~d㝄~OzQ}Uz~=Dm "U:+̼e؟L w mM(*zл"B录(Ow)NDD^ g_&i:נB-.pV2goN\ 7~Mun# K[V*F޾jJV˕jRҘm;i5]u['j/kFtV})XNef91d i$ޖ#U]qNkV %z+-KG{Dlx-%MwjH6xf} ʈ_ FPLrlG m҄} Tha+3Kmŝb5s~#v"ߊ R.LB)m(',1\"MOh*qԔJBf- FQȴΏTl8fei[2\8Mi"գB$L®kUwk:Bӈ/J4~K2߲{((ux3^򚷼pAg{+fX5 y\]%𿮹ү;IGWgX1*s\_,`  #gb. CW[RHxu؁=%"Ś}H!G=Mڒ9Ls} cj-ȹC$ewG,pT`@=r$eBƶd^]>dy1Ҷϲڇ奲N|(0Hq-[|/9թh /޴Z$0ʊ(KBc!Ԑb ]>.E|PNMTHOvV"HK]{:u?a5M"Òe9J1Q־8E2;]2Kw-1q7LFSE=FMoٓX/qեs^HH׏Ѐa^hxHioILߤ̞7+~5 /J_I= >dw١0wזtxƓ \˲0w?I["yܵa0eʌ>c=<۽o}Dxΐc^$j{?F%JJD4eh+:k(N莍΍Lz#z #axʴF%>x03kq0hHͪ1q/K Կn?hf5Lc@!1Q8!C},q0hHLtNx p[83\%ܟ6iP h=)T"#;Ed`C=*:8JtGi'*`^sawu~lx]E|F]sFh[kG)uUfԵH=#dW"?+s_^6$I+g? MNm- &CFA~Kb ,]DҋY%Sod>ʂ#_Vfjn=ۺ}kɦxDQƹC9; #U5eF>B^N@R/Q'Vn46Aݔы6`| g%s\J4׍A|_Flౖ?e}Ȧ/RGTg=q0}ۦֺ|6o)(+ӦnV?@}>~v#??0MyOs 7a˰Y .M@?ٝ4 *h X6VU+ 3Gm\ήCCe}>ygeET)gJvnj;(sg;IarWݒǑ/;M{Ȑz j+7x'ύ6s NnZ `pNL܃N hQ*^iz8'7-aY?nfԙ?;u3vM#<^!ihT<1xM;J}=gA.4x^σ;mpBG G8GpsgLpCVϴU% y9>c:X_L?ZZon(q<@l[M{喂A=3l/w.qxs;~ԿM ;ĆY^?̐ttk$`<&_t㑸~B:>R^ki"1T j{8ΖZ)l D=\~/Bh蜟RߘYf (k~XrZ*D7{aAg%~iys &$ɿ yn͖%nJS|tO{%?„GqDolG!$l4GS-e-R&_l '>a J fb.ԳKMVuuj.=bа9#DƏ_AZ0_Nr:tdth̚!KϜa;9J=-Bag 3­hk̿%笞9MfG;+oEesLm 㚥aGC4=ؽ`VmWϝ$&ɚg,S)gU,1mωp6hL2[ݼǀAS`Nˁ/,_LQ:17Ky5xyo\tas{O =9e;}|h{ebw$geq;s:$v\[<,g`=w6[ T3f,V64$KG7=o|$Y}kj:zB]RqF8IR.Mtȟ;61eePOQ}15ҹ;*'=﫧{wxTdr|e \T\JxamԼL'z4OsH7Zۚ]yĨ+V/3O\+0dE}б\6m$k~jU}ZVEg%M'B[ıGEk|K`1tyK@-e ;׿9*Hf%Nhiz~lƾeѹ-{ۣ]lQUyt =8ʧ^Df5!s$_tjjiFR)w.GW與xŎKnrQ!z09|4T ͢kFAluvקPZƍF2*kҹܑYDЈEp%?ė~- F`>'@-+}Akz)*㈊71 )[d H>A&Rr13 LL 6".>4l饏5/t ,DGhAkGJ}FX* ($vu,}e]Tл*$g_UR~ڀi*|k+5%A׵ͅn"ePzX0Ri f5!$.RpF"1GЫg/6VRfىޡtwJC#@RdTffH|kR20ba!93kyEM;g̥ 57/ fhWVg{kF#+Q]]#O+rj-{[cw /%6Z#7XN~xCxXшK{= DW+0o8k9S#nc+!%vQ!v蠰x+`$R=1 eR Y٤BCHZ%NlDؽ`}4p(8JGkwP[SF=-Tŝ(VtX*ϙiZZ.K'~Er}])q4O8ņR n$R:"9\L$ИHU$(LdRgGڃޢ^7jR!jYS"X3LoRR ء=f qK,:5rx1eю ܋#b  Zb =䍇EZj.h^P#,_rR rʠP#u1) L_Xm^Zֳ4N(!ݖHs,$)RO5uWjF* oo^CL5D`dQcXk %q9E$'n#HepѰ.U0*q FU;s^f {LE^1Kj=^BeMB#4{G;EO+a!J7^Q>ZZRp.t¸N(f/qbP+@ĘW_ q"|T|L1D,K&'RVp ʭ`5A+Nk;7-1֪D֠zJ(0\AF ۀZ\f"?x#L?HPI֞`(Oc3d3tSLىf|)2`&n myC/Y+G{5vţxLFnҖYDyd 8"/VA,Z auեDud+1;p<fS/;K#4IzE).CnIb)咆@񪕒+I)h m([ B"iz)Ġ|*`b+r7`tNe8&2Muɦ& aOXsF0!] P^JjH#A*L>@)c\,OX5PX@ٝ@ԣG" $ʀpq/YjLtΚ|W ֽPm9;W0?]qLy.]\o盧W fko,*9vgx}'/a@2ဆ7Lf׮] T$WŒu:3ޙI^r6IiUH'ƥw05x\2*JET/"2Ƀb[\¾ǻĖxfM|H$M*Fo|G'XPoaډ2 r#ᦺ"M+K; ˩@#tص*b2A&^NrVhAl_I nq!=5z8 5bL(OѫszT4ᵠDžpZ1:,cpٹ9[,׻(_%c}eNH&*zJk 6nsiC#o)m$ 2Bl U#VX5!)w&` ;gTmPEgZFVffdK"czZy O BA V&z.+۲׺rTfG[$eTȜYkZ>I7v'ڔ7j-@`7a 8Ek@%T[OJ}6̠ETEW*x4O! sEAJYCdğY5Yk$Q}DMkXa"0<=KϵJR zedL9VYq;CyM)ێg}r\a唕[Kqh5a8t.ʬ =Cٍr[ԻYr .Sh"ޣg&xTx?:&9lsWPh3B!.̮I9mǰ4irIf47# ֠j\B%.>uԺZ CyS zv;Y%|7N 7訕c%U]`zMStK58!Zɻ]E߾|Nn3fBkb`4xX5|mj^Y3uQY(Ȩ1)| q=A&i"9v}g"/WENFZK0aoj!v(Q̎BqmUqS3]UAVG`aK]y%ҙ\yπӽ]>\WY?Kĩ /N-Bs(1'y9,MVJ&4M&Hlh4HˁQÑvJaTbKK&H(iߝC˪ GAڭȖ@BE-R~v+3QDTVFcR"s7*CYK0 'GG&j|FSpbtNjR)Agv:b ɕҲs֞nz* 4 K'aI"LkEFH8fXޝr?z+%u'yZz5YS*N{~B5FRQkO NL9=B-\,RqRs M q:#j*k> n (DQLwPu7D6u+c]tmWpA_}ȑ=uM.u\ 䔳Sҗ!JFr%GwsX:Ax$NӦY/2xfkB$ǘ?n#tQJiwk2d5]ElW&DWh$.ko_ [~A,(Է~͝|90Z:x^1}lL?^]61 "ye" {ӁU{Ţj'zqlj9n1!%Z:z + x3ؚ0=1b)S,F=*șO[L,1ya\jΆXhCɅd^̐m>q#{:=!"N{!AhIfNZ_Oˀ ڞ:a@_aL{MH5[:w d!Iwz I7(茌ŗΜl43AK! ,()4B ,̴ٴj@ދ>=`k :X5D)R@; ŧ1 0S<apF)9EԳ8mxtdw`->.b}t FVp:Iw6fGg꡼M l=X '-e eV衡QMa_nf|Ԙ%ߌ{&Od7O^s8Y!v6-Gp7Yσ,$o=*ih /Tg!؝-$IF. [O~.Hʼn݃w@e֭E^Jf'ZK9b1j$V̭l X~Dĕ ڿЖ|5ݭ O uĝbm<{>&TA+1 2~Ǔ O~=>wJ=rЁ64 `#ʴRۙ"?K>b5l6ֺzE˻fj˴ (Gߩ@+[@pT ̈́I9JȩFN0d %Ѱ"R@\d1s"~[Ό@^w*zg0!o"$|DHx9:/ T|rQN0r$4T9Tyjg|rZZۉT_%ցLgerq \kŮe3?TuE:1~y|r8FږКl>Pې5/e\G-݊hvͺ)Π_m-lk;#Ёt|4m =[ԉ x2K1KS ޜRt yD09kfKF;}y#3>VM|_q)9w:K>SK]dM{1+o>\iV4×~Y}-ºY,#1܊ oGM셅\Of#jڧ*E0Lv.B.*9cB8j]|qP+2]LN$Ƹ< {t̹.,qڡ1P1 :E^ӗ55Dfx؈TG~)NZ ,Ia[fn)|x5r1ZLeh< cwT^@s((~^< g qI'3֜;Y E[f+缆n iU/J]sy'%Vݥ)zs+F@{5@{@f5 S+J@[[$z4V՛ ̐d[đp&<Mߝ$5Ĕ<< %6.1y 3~II)  1beSGcjT "߆HC%tCƙLCX: aϮ1.w/f=K3ݶQ,O|</xF_@D(#F +~D( -zI|kT*8'8I wSʃ4H_Qʌf){40ẆXIMqpSaYPF/9`ig@]Џe-nyLo]b 1 @$ @ A1mIT 'HJG@$:Χ3iDDDDq8h m%7֛bFnS޷Ш'baBUA2,lf(T'mH:IAVQ%x9#!Sxr2[4%937Iem:3`Ȉ1YgE= <8xBʌ/A1`؜k["DXd@lx&\H +-K_ϐ+㪕 '| E)<+ss83Sq : 7jZ"+ &eH3g(;:6:v Vg&f1×Ĥe@(-n<J,Z=É 2lj^oђ(zȿ_1כXk+ݚrh.d": r)XmvYQ5}a yGLib1O& 0P0b 놛ns}8@/:d(AcpxL &YUHC{gK;+Pb3諒ac $J L(F"*,J+/( 0L<=^Rjv/ L(F"xuwwwwwwwww?zLifN`W7y6I$I$I*\=,ˀ#?f8E+=+y JrP0LK`g4)%RJ)ZkTzc5>K|8ڮϴg۶m۶mvXt$I$Id_iGM`؝DIAPgT)RJ)RJ)cch $I$I$T$I$I{N/ 4o_wufR{DIAPg pܕ1_s0xao/w9V}rgcsD"}߾}u~<`0XR`0{K̗pTPPdP:`)ucyy 'bх+Q$ifp$Dj )uxĔKm#u`0 `0DOD8$2J$3,7-6֫?ΈT]:#5 pmdGNcp$&R2 9%QLb_XGJl[x8bjuc>D/pI!QԈ"-0<̈́D^s\E*-kV٭U;oZ%onsFʴ}VL$"fI2P'huKzKX h c6qnbKrmkwIJf B+Ħ.ǻUeqe lk09chXnp> }=ȟ_ξ=ЎFC_cCvz{s_B$E}}}Nz355.8Έ{Ç ŎA]u3+ }56?1sO}цV)06}ܢ=ZK2Xύձ)kg>:[sk ӽ VȞ 9)N뎟ub=zmq^vBƾD9>{u*_ۓ:SN;ƬRp^v/|f~wCD$2?ޡiKu^B&L 0)`bbbbm5R )R8p^Q?-3㇙/}ZAW1ϵ~c2\}矻~ʹ|4BOVֺJirdtǫԂ۸e|-ZZ:rKPY&e,.("nW/`0ZbR2u_ϭo"&BW_fM;:a f4%c#O!q|!5hs@@~s჋&Cҝ6I$I$vFW$54LJ]ֶPRg/n:_ //Gh^~0pE>+ &LUdN<-DhKqzzFg֍4/#2ŭ~Z P4`pQ2.+5z{2̧І#b8A ˙gӗB7@0b8Ͱ/nV;=V0-09bMln衷7#5ؾ;>uo|;P^¸E!4ǀ%1QҸ MMYÉ\G%YQ50-&tm`phxA&ڏQsYLAIyH ҡ 2 F]x#HX &x)Imܲ{Cl݋BB{$403z{ \fU!ͬ,V{D͵nD""#dDf3? fڜ=u3NUկXjO,vPL)k73g{_ٞZ ̣mZXV6`d+0$+lB7k?Mҡ2XBc)IT-8Q`ab,׭@ ʿVLٚ2KS8^%9PaBVLQ?֔Y(Ɂ ʴ/1Q<Շ(̫ڼ)D(@r Jr)aBV oP=_=3UUUUUUUUUUU7[9( 3q#$I)PE4MӖ0  >VP(i8 0gj&WU!(~-RRN~G\Q?L˺۷#l``[2sb踪(&JK?qo5Ws}n_PQy}W")^I]ZOjy%Q{v^1Ioh1C8s)$d\z `Ϫ?҂iH"):y;`q k3jYj yYXtEzW%YQ5aBv Jj"L( Ӳsқ~"s`.LOd.. \4h Gn4Bbh!C8]Ut 2*g*_JbBTJ ^R{4[6tk̯̮^հpUUUUUUUUUUUUUUUUUUUUUUUUU 0C~\mp-#P$m9<ܴFUPo*o`Ԗ^} Ӛ[ OVס/$zdϵ]+On"+)@r@4cT1c NPaN{SX9'2\FcgZY ƁDIJC&iΈM!)أJ/ L(F]H$I$I 8~mRj([aB6zk0#G̱O}ExHDDDDDDDDDDDUUUUUUUUUU @ I$I$IJ$I$Il۶m۶mƁ OAO$I$Im۶m۶mVs9s9s3333333333#I$I$IJ$I$IZk~Che Ja @tG%Te+\TiRt |ƮgӟYyLdM^+5\L%26IDlYk`~K&8  IO:R:{3ƪaFV:vlL̀e[J=%(e4ɐ~zz՗f0%oRxVt&k#'{՚S/NYod]r8rb3 Җ+] SUWk}Gz:B#f.%)Ujټh-+gjpkgO F=…`vS ĆT\"3Yi=#$t ׇ?-S=fJ[80~1BKwO &C9J-:v~XA|}g'K .%v{mq{{x8 #;,/əA$olfY_# @5;*C:5!ֶlXÓsu.)?\9 ҂y% Ak17ͭ|ċ\mm"mv-wN-}OVOIXcC q+ ՌRLעfֳNs;|NgN# p.iUaz[4{y(-pr {˭fLNVҧJh3'BYZOXcvfA_Nzm6"*Ji؜Jxk'eí{ S/SK@Lңh⿀x7'E+fd_bᬇjt4\S~MuI eD9tCNz"eËVYԥsc{M>:ٍIl&X!>X%)^j`hEКzrId}#.d\AF؟r0f520!K23/8^s YCEoMV.-.8oXI1 p7XPT9&9ĵf[LT#> t&29i GFLYZTRy qsmSË^eRHՉ=azEB-|I`AmJ,BXlU;rWM|+W 4%˸4*)O%}oXγǽوBEQ #A\BM:9RR=rM!d]wY?Бew~sEmȧmӛOSABDr-ʣhF/ N=00 L"YZz"@L)a<[O] v\Gm1cAġ?2ʝH!.&.zZ1H]BlqdxRCҤ]Lf)1:knԲ5LV6]z5eܾ9v/ )Y쾇s+OUT^uW5Нj뻇ap__mk{;کo#5ho{>O}n?ǟ/M6t36|_B-=(0k8崣l O٠._!mNj!JPgftCSQ+jZZcv7GZ@ga'ieU7m4/fz?@FP 'HfXDIVTM7Lv\(N,/ʪnڮi^m?Ov֛n8Ηx"ܴ]?2.ƺɇrzB7X2zo/lŷM,z=tA1 )aIn::OfyQVuv0NZ7ԕ6+ w*xx$ "L cT&W(Uj2qy5dfy̼uzvqus'5Z^DIVTxAdEʕn5| lxe Fg0YlȂs_ UV+x[;{u:# $i%H DB;8:9PZtpy|P$HerRhu4aNRnGXH"S4:ÕH, e-RNo0̊,]"=0M`v勅O@"2r J05 -=f-L, oصjЮS.0! )a9^%0e& (4` &  Hˮ0JZ5ә[-ml vN._WٕroPD1X@$)T"i\\[~g3,vHw%Rv;h2[}(N\Ģצҏ!A )a9U&j;.YQ5w/+KW6vN.naM/o`V7 wZ%YQ ^n{KR4r J¿Ocv8>~# "!ApL"YX!PD1X@$)Td9\_ %R\T5Z`4-V6vN.nM>( XH DBLBX"JZ Fb]\=(a9^%YQ50-q=?8I(i~yY8{d(J·g}M-fע /L~eMn5W @ NzKdy,z=t=Z`ǣtN/E3, $+rlwѲ_@FP 'HfXDIVTM7LˆNfyQV L p:a=Kr9DzF|t~8  W[JwUW 寂Wƞ,cҾJ-ʫ̘לa1RM T!S#EݖTlsܤ'^ B*kC:QDNe;^«#IӁaޗUhJ.Hv<9"ǁoۢb+iB&B:Rs:c1 7|$U R.s9B!BH9܃Ԩ|rN z ˓mu P I .UJoyf;҈<̿گE?٭'(".(QT3׽%rR m%Wo+kp JbvB[י#I9Aݛ 7'ϨYe cKrȅTڲSB:n Bjv\J)V!RERJ)9vuTQ=}1ie8n[.Җ_2@.ҖRJ)Ǥ5c1kkc "MA.Wj7!&J"ؓJMjODg(dtF꘴MphV9^ysFirZf0\E.dLr fdha/{z'OsIx= 3~ slxq8?=żZoh M߮Byj?O}~TW6Hl{6UvM\(Ttf  e^7yLBXv0rKnƺipizgqOvc۶mpo)YT py)lb\jۍΨ".^ǐ7fC~`ߦo}9Gk5띥!JKC.XgϘ8zuIBEE-Bdy7\ h D2LBܩ\jM:zjz MlF̂}W\jRU Η*葠gyǔkLhcr!.&I\ m@%;iY'TfQ,'sR.!}?HZ;`I~>>_;0؏B1PT@Å\Hui'H)J)RJiZks~{O{VecEФ*ySxl8[ΓVؼHj VbQ\ns4-^vno_@FNH0OW)]բB* _ @8B/QPj ~NӻCYc 0 c/,ll5i2ӹۜC<e3~I3(S9fJEP[֖X"""""""!v[!OEH,,%_1e4AHf ,dބ{]I& V΃vdUv"C}o#匃!m3ytHAX)֑ы/ 'br7mW%*G<Қg79__o&+IWmvgk~ vOGDg]xK:h23`q^8tx*}mNvѴaɌ}'KҦG_Uڞp]5H*1+Ml%l$._A>dwJ1KpC+t7<˅gPgǺΘ\"lC(1PA4];ĨS5 !6BKs9s!B!RJ)TJ)RJkZJ"J)RJc1@DDDDs9\!_D 맜wHo@aB+b=R/5FScG#V2ge#+;qEg}!w\&EYt__}jS.ę>|묒WǏJdwUYG!S)&Q0 Ak+dz{aMB3?l?H̓J+&mu`Ζ}u:\UY[ǥp󳠴ܙEZ 1Rk96[AM#emcISaFzi*& %[F}ټ"~,6=OyxFT|4| UӺ~>nk1NF,Iw4Hۛ)t8^ LuLi M6Id0 V4D ٌeTZU  |^ӧKʞ)s5Hp_Ld_OұtOY0h\9G4ѺX4.iC>:G zZ)? /8j }-0ctEI~+O:"1"}}^Laܞ7y4c3Ksqwy3|xg}Q@K]"`fQU8 a_Ca&.9Jt/ёѸaO˼L)7_1Q(DlZZ%e=9ʏ]TXfH,|\?:wT\8LSbWdٵ^Z,a&zɇ1'/%6f侣@ylhI2 g=e/ݮiPma*is7SCEL}偸]ͺyoQD}Sgps8'SC{zl;kpŎaTgYk1,ΐh; `7lz5U\KATaFq,;Qf(\V>-_0YLظ`^}tW<qݧm {ZR`cc z󰩓hl_F*u{!X~rDv*j ~{)!UK@il75|z_ @z>9d` 3Yd7Dh?:ˮ7zduޘ~voҫSeo},3OPOxSwk<ýM' ʀ_GuZ-&J H l:@J)k~Nx~qjyowvE0pbNi,@!a W썗i\ϥԳGP8Uequ ީu~Ɲ}.l} y"2"݀_T;@TANo;2U[xQXFzk11Kd5CB.{y'" a-*,:SB5($ްoWTe?`ۥYcBP)ģ}T1Mfwxt8_k=|-Y54adrXy\ +م.@dٳ}NY9P7t V{su?T drw G`xt?xi*sǂQp8iS,Oj aL sFcTZq" _5&vWNw^/ujdfVz6Qսϣfd4]AQ0(KU,L e/avIT8Pu'L@(h!nR= Y4<o/.vG=1)C|ڈ(p(yQ®ͱk|Zhՙ;rبYl%+I6F_n} hעg=27Z_N.v܊{I!7PYTt-8~rS=ϸI4Q)tX OR?N5b=l C"NWЗ8WޏZ, HE1b!7hZǞkT j5TZH>Esw1]f{.d49<+`oUjUcZ~^OW&|iw5d\qE~[23K.\a3ԩSaΐXD/#Zߩ2BYvnGL?C-'qX-Jt^nyηP%N '|cm`?DYERR(zQ,`^ Ya#3ie#)i etu1bS׬Bjp׀>䶂gzޞ⸹,EzD%}1yJȇd|{3RT _|QdYP<.̭[1`k5BZm0"E$/ZrMHꑲ07h}Vd5ՃE"VłƀQ%J` &33ϼh/ڿ󟪏>ndh#'RJٔPQA:A"&BEu=A  #K&&J_0g˚e˚aZOʊ1”z5pFSO߄Z'6K͆#?14dwWӬ*TRL$X$ܶ@;$ >@av=!k"C|tzJIIDSv_gZea3e,&SA\9o ~ZA=دj&X;k6D??UL(RdI~AJ$ E'|;s߽Jv.69`'6I߮1a53SI򆀪Ade w&C8̆C<}jk]&!&@ fo֩SG[.ؼtS̾"T&Ihv-{U>龇$H!R)[I=j&!bb[ "A~ߛ-[Jڿ@1'h@4)f/tڙ0~w:8bHh!bm.FCZƲT4 ᩄw;eB*!R|1MR]˫BǃbSlD{Om< fBKE=#ñJqC궨;CdO!.gnb=*ح,s5MivfR :t$(:/Td@ E4uq,cnG*TQc0%0^;O <`8@|ҫju3TcaR O5m9 DTN:;*\PH!@:ѬNs墍D{~2NZC l 8M,񻯁f4 ?Ny` qk5%PNP(\Fo`6 ӈbp`.~YfLǫmEk%JRZ}ymZ,CƋC~],rQ}!c?g;ТksR IHv@j}٪Ǎ{_W`@J&-* aA%ٛLָ|i]Kmc̤kyznM8h<&%3{@қdt;/nJIA^:8POz  H@OzˡM;>6CިypL/ JiYw/?NYTmq\9|hBQ!u 3 _ﶽEFhK9 ;R*3dNqiRkI ZXJR5"KYU,={>())8ib&k:Ʃ+Z#ڹ kM)~!%.2`:ʴbFo ͷt{pO4Im!MTPAb>8zcVI벭ǫfmtT?"&2TUH}$7:f.Z=ҵv+#Xh4 ON艂{\9UѼ: ֨ d&YgFIt?Z`2Dlؒw+Q.7-i+SI xs%F%ƪ }a{L:Zq5alEn1"; ؕ@*cwbH$̶܎Q#=~LJ_4j/ 8uSR''Q>j/rD<(?](BP5jP 5T\J+Vj -UUjUWjQSM:[]umm6ZO=T-jɮSi5L'kokZﺖ[VXV,& @T΋W٣0=4Yn,+[= 15%y|mT5xSA>=d_0PJ-[ ǖw2nZݜx5_V#Qk_:ЁwC\N' Sn_3BJr3J)eΌңC3ku$nPƻ̍ 9lj5f]XK8 1LvF tʐ؉}Y $O' *!, M%Ef  Cɓ "HP2DP.P2:dA$f,rIE8g !$˟43 0?$pJŹs{H!_}'AsqdK1 ܒj#yXprϊv?_é޺.«^W^]`} 00yot̔sjr-Krr%LiPr<_/jK;2 ˪m $aVҝfiq!_WTu#:سqG%w^Q̃QI⫞nY%l@еMsRqji ;91ϵ 0\L cOSP_UY3Z``&}40ѐ&ʙzY4idW`'}<#{`jZme->9^|;׽7F[Ht`'7ٝ= IkZ`Zr)w3YK9+++7XL 5+7)deNcᡌG8E Y.&Zv/s`˫dMgjL@e%qf9z8dQ2mb KWWp+d= X-eH.A ñA[tOol#w.Z՝J69- SSO߻;2JEi L6H Ǩ1$ 0ˤxӼ6O r _EbtL ^eef sED ^*Sջ&hc!p RDP!C 'p !{QQ=Qd ;EC0Fv1Gџ<@.ꢦe`ڵq8cgi\7<S~YeWًt A` l"ıwȍ"ZDBČ98xpٕ?" f݆&2&$ɆőG@DjdE)SAJzPpMZM[NSݣzO3 -{(`PNJBC ź> AjÎMZmjU-x7J0@KJRJy@BxCvA<"F֧~A1T- q5ZJ_e iyd4gQ_;)H+QL TQN4k:n= 22qcƪA:4jҬE6:t/zӏ;ƨq6\ !xxCZnlVu3(6o+tJcO;q(D FkXo =w6[@ 2;0Wdb6gbNP?k,g#[3i{1x^@ S-vy:+hK1U4)dI,U̒]e GS˙0c#IQ 5nC{{%m㝧7DBޢf5=BNhn:e[ޭLݚΊ̷Jh7+_Uo½C*kԬU;ҧ,Nu筴gm~]u[Qu$ HK  N VԢ aUP1hc9N9< ܲi F*7j\Iq۰Q&M531u^:3 eX-Hp :%Fc͎ss1/W9]FixH~Ҏ~>7[u 7^|Tؖ?U$*hQD>CL ѓoR2dĘ SfYdٛu *hQD>C3" Yi7躡uZnlL'u7aNM]>5lù.|**F w+uC=Qnb[wAs&m"h*\BQ}=DY)e@EM˴-L83dno,ٵTL;MKږ 6iQ[.+/Ab-GnoeR $4 ,6wԸIMZMm%2 2xj DcQlKx0=48S8G>Cm 5nҴ3BYȧڠpe4X>4 .!PsMZM[:IRR&Clђb;87ʕGNװ$EZTkبq͆eHfu]ՅiـK!)p[s4 lAK7v`CEA:TQoڀP].j(bf >vP6A$C`]4gfI $=S&)I=74m4 .!W6eաŊ/a/6ЍdR!c]^r83\t<)uz_l0l'hiʵ\Fdٽ#dDn#Ӿ:reO|\w#UdlDA1Z F@ ӘI3&gE%UG4Wgh?MbM8o-Hp 9#nTYFk{5;pg'MJK!ƖK?؆r|59A\U"5JFH7S֞n f Zܺ9˖x:. ؎{7‹0n$4u/EYˠ>d-r;H!T9.uS?В1V,M,ۂ3bu*Kxa b-1^B8ZNcu&Ocdy%]jEF,ЈPvlPɠP3xf>AX( |: rF5AR wfP&' f݆&A.FK33aƎ}I0ZG܂r!qğ jaW=1f0$b)l: M8E"ɘ$+tJcO)orժרYvtěx+PV>:ƕ՟Ë TC?@Ɣi2F2CYx1ֽdf$S{5;p҈ 8%V&\u$#5پ6>Ỳ? BIo)iASb8i$_'-dw>ΞrpWġk9r$3C>N[IR%E*dCcH*0WۿT?@ hq%Hl`nt2[m-O3Բ5М`P)BB G]6ppra0njSc掾Z(8ΔK-)I@ S*@ 7R*jXS'%6 -<=>^2@3k' ctr1'rƹߩImSA&ZjӮCs56n=z Q&MmBA6hV}eŮG@hͺy41nF_kQE` 3թPNhrH]kr4+tJcO)_23,\*œe`]v:-t,OJgf .;YF3݌GB8PnPSgsڿ+=͑y[M6u%{( h A0QNcЫt^t2v3^©83Ւ! fX$h*I<'ɮcp3ߕ.Mǟ!P vP L5u0B-͢Pn_!vAL8)}\2M#6ępj/ Ř`<4B/:I0I/YH%UG6h`)Ue؂JpĜ+h?lㅀ,Z"HSdCE?$"Cr0     rAT}u,lAKHͅ+<Ƽ /8%8-;#/tTQ,.*ڑ(iYdB87 ]V'_(7[^TfРI6_}Z'!wmp9 q~JO~"lXHoֺXq"D 3%HFO|g )P0p*P0p9f632l^f3^> ;A`~ZGflVe;~B?<3BrOo3rS+۱INPɄyx}q(=pi @ZR.j8$*SU8(HXT ,FӴu8S8GՃѻm˞@fƉ~rMoĚg%I3LQŻKyAThp_8p[Y %BP(  C-(صdT96"Z}+ۀ@  `09_Q;?^ G U×vjkGd"b'yiq"7|Fmeocmz*y59ȞYZƐMO_u>}wKk˶pCBfڽ~x;UBg6R3L&W||G_MŊW_/Sֆ';WDAJ&/{lTM)o8r"‘J_FLMYƯm5۝JrVqZh Yb* I^Կ z-.rv5;}'?>-J zS Ʈ4U,g~%#7'@L!ռw#1s^.s+|.TFL=IO+YUT^W}{?f~^Z+dOz '`6Y~;% ,bK \JߝɌ,TSjW2قF hc=YMb`MtA 'mI#'({@3$L"m2SX˜k:Y6l!G8)\pGċh|DRn0>)H];A}oQPǩblzNK}nOObjbA&@.y@J> 3UHFrc;rd^UV(6$)x q eZ=[ 4Ƃ'ْ5i&͢5C@(eRa&T0Ԅ S5\MlJ[VBRe"'CDDDDTCІf$UJԮuH{ SB0A~5KI}ʢ]irjBneȫU+˽ZrˆyŵALbfX6 E,[T|I p@ ܆5:Yo#cl#B fvf{ |RaG*{G`#}LI*dBxS pH1s Ph\\X\8Tܥy7C1N( AITMfAT6&;I E-:熚ZZ[hVX6hFMcqŔnms;9n7}-rkCBP`B=B/р0a4"%d\71x A&dR㖴nTIR&EP:vaOC/!I t$MdHɞ([qYc*}eBueVlT7 dN8}" 8,}!6༂0p~LM4)dLg݇ meA+$zp^~V`ypCR6 2p&I('ςp$ʒ x^8ܪ v88^>-Co=#@1qՈj|jJyE Kށ._hsksFX_n45-`mdLQ,MF " +߭ÆM(AC u |@`JV &;/ߣ 2j"|(2qBGtM'D<%tfHE v/RsW֫!^חnۺJ >}`j5!]|4G0W g2@2fi22~L6&~.'RB@:IkᲷ< @O!ҝ? d&;m./% #^7> o02d40j`*ZU*j L&[#TC{*5Ka!Lvd *'U^'=-Aeapt` wS:iOjˁZQP|uoShD3{♓ LD"Tf9ܘͱiY-I°0&5Y-ieKvݺ ۫{c[gGWpAzқsF Ng!`(Ɓ)`7<+$@)ȖVIB 1 '3u?~ `/Л*ܻr_i7m88II.)%bjY*1zwCr u=Րj,cnW̳͵@;O?>/8^v9W; gW!> 9rV 9 '@vqq=w@~dA*u6{^۷N||Bsff ]Q􋈑?~5m5&<-݄GiPGHzH}}# ;ϋ!ܢ/;+/Ԓ_=w ;_A_mMsW[f-s\"pr\c+S1Aq"Dݤ[I!YȕbGRN$q$;-=#sefaec6]ZnPj5ppruygy[ҵezzJVyE*G#AyQ0IP*E{.ǂ_-K*R٬|iluJUTXVAuqj_#Hp K@XPF3IMaIՌ456Ut[Q5JY3b}H-h9uTKLO,zoT#NYv<O o5;{/2 ;B0 f_Gk-r׍vϿ vfTD  ]TZ[u_bob@;ψ˙4=rQ#^ I_k䛽I \ \Ppxbi)TT^7u H(ȣQH2tԨӰ&-`Mo^=*&L1˹~t`8\ aH !+ǝ?A*W.]7˸\bn펿h&Eh i]:s`%KJM?ص$\|DZo-V׏>Z/m"5*נ /DIx^?m֢jݵps֎D3–{衛+X$g̅jVѤ:H l'a>I i$ : *-(^ _8®bpgI8rV6`!BZqWs]vL%~[l[h;Έ]ۛu8?x/t`x( Hp5݄!߸\((ې;GH0х\*ieC],Y8TLT`'XUfN/-V@JZML?H8+#!].b?a_|:^r !!B=a'|=[*?IZOi9T$άsXT!xt[$+fhK֩}"9AEJjITs¤&ZcQ- H7qևmݴ?-4WbՃT"vآHC $P!9k5ROR=uSΰ"/L<)Ż͂G3 =;X:Vddє- $ZfWc.ID1fF}[12>*,-beuhf4*̆r!*zqo) b5_u[8wS픵tLӄٓKIF}#d؈dC2mDC2a!Y6"`!Yl{HxpC"!Cr؈#/; ̄9dQ%&yɭȻy_#rcC|˓uy.9>@>ϛVq W"{{r#O&Z= a{NP%_eZTCB\xʒK+*1a6"REG`bo "/gxАVt;3Qv HȧQ\!8nz{tK"A\Y%p, cRh[Yt}h)"BouL] ]JaVPZW%qK1E6I+6ţDcjr7.z;T",tn;WuD {J)  ZD*)8$Ue۶ <: 0Ofn ̌B)`H0t~Ӕh+a­{'_+d\IDkTHuꫡ"%:[,/Y.A|Yd6^b[;Zht<\[FjO v2zDRHd -tZho[bǠ(Bhy׍MM#}iVRI=tmHϲ‚i <{I ө91gg72FfQu^K R٨< \q7}xm̼J*VgI8ّfV)xw I&;}FNTǣu{jldOF5k[lQN8 J#'qχ %-[K,BLG2B)5^9;&1#D)!"@!;`s }B^/߰>JBRAĚ0ƷuIYɎht^vqv_s̔B^/9{ޏNv%^TWlpJ6ꦑZA %j[#cNȳ3t)g4 \BK9AUgm"d>]ю^^ ף;{3$z=aOު%s # -XTӗ?@n>+_zIaX=;cz"5}"CrsPj/ JObQ!p ! 7 I7g8._R'dٛ$` B*hzcyeBuSfkZR~_{[r<*sE =4>W _c1 )xk!Gq^ܹYpۤWK%AwBA"OtrQ=`D,-f0 6(3VBۤ-V{;oJJ1:ayKs TZZ=@Z hV-9l+9i> B@7 4ja@HN^YpK¶Q("AQF&O^=>D[ ymqnwЪgЖFjbiWYzh%蕡SΠf#{łx?KXԭڳF{Ř И-FO8N!oQ5%QOȫL}2OaF^'i^Q'hԏRYCǛ 9z;G8&BB!V#0P@N4x \X:Mى$ D#h "bDBy-Y[p4@4Av/ SA?BFOȏé\OjtC<&aK_C|@& $`(ciy* US(fO-yz&vJpW^UL޶0첔-5K )XGSvEYu^U>'uĭcpY=41dGL*>#Za)}O,MGQ+3 @xts2?-#ńnjDr[M\!єiSEЪ]sK@;0nX'++ !$viNP_]|ٮ^ԅ 9) RKyquA :b!qb^EG͞@7>>{[/ŗM,=p𭠢胹 t4G0Ƒ\*G͆TGj̒/@aks4nMGǛ0Si~CZNFiꅵ6UR~[=xp@ Z/ue(B١ 9!S e ]z]%}1.7BBFcTjFخ3i}5@ luȶ{!:v&@4.5_@ށ|,]M/8sZZvEX"tLXyy΂\n* I_/*D$O rxZYew?୏shxEÙ+Yg N2hm譌]R{ȁ܊ eZ6=%ڬ. |+)Js1lPْ2CAy-Pߋ9(}qy9:x+)%!QI Jt#3 NS;jB>P5TV<$׳DMC D'N#02CTiqwdzy^S`pag&ȑ+ʢ2go2_338srMg\m!]h:]y8{9Ѝ-#s)bOJr!!Vf \Ǚ{l.$%$d5j5YK'{j">1xhOd on{-]5B.j } v/E[Q j۪xWO*.j)VbOǎ:o֠YM~:&|َ A-۪*ƨt'PE2PfCdc$c@ o³x`C&Us̙) Wo_4Y|5̎,̙PK+ٹU.B!j2r䦎aZoE^<#g }I?Nr /J<{: Db$[wuYGA )oIZU5lQ&*rc,tcs2ZTX/-8‹s7 y1{1'5RW %#CB\~lQg[j_Rxr-Nm?nug[/THGSzrk\DzGhJX='x AoׂH1ْ#{,g?tH`SCCN#r,XI0,lc"nZzڔUK67jE['NCs'pB?e2Y+l B)`iOɞ`VZ $DM![rH wc0'v̱ '$H:rN:fD]4ס"]sxx"oYj@Fɕ\|@SS9!.'Mszn'+oxW…1GqŽW`V0&_iy $)א_q_ewZ2^s*S) U/zz=yB|YIP88HŻ.um%LrgTf_MO TW6I[Ԏ.zݜx jȉIczlf\rʃmn@2H[(Ws)\-Vrc.ϙjW6{jjZ T'd[!4Ǽ]q3vd`A쐵\0cahn:DT,7-}'8Ÿ S:һ"*2kAr<B| GxfLSBRƮcVSj\U5YkN-/_RiʪfdXR|N>36l%]& S&VJKx>F~T5< q\+|;J^aS>!yE>e{NW0^x>ণBmx52CjÄJkl/M;o2V>cEKP ZQap,E 6Ԩ?UIZG'dkgVzpT.W.e5$a)fi7\s*^eզ]>!BVhGi)%By L<42ӉxA u} &ϡrLA픃5Ik:Q޼tɺͻ4#q3-,c4==:Puʻ]o5uoL@{_3z0>>@]+Vé(+}K<.c8\f^#|`"6լeYG5y>h]v "gfY^Š}\'Ǹmyo퉲9_qR~!nqhۮ'~W5q/^wpemf )59KETx ,^e֭W_KO%XSЖEGt͸ђ<(++¸尶fPyA"IWOK?PoKH- N-*1)W S}ey.go@滼KOX@vfFʯ7'1PD-E|12 ?''Hv;R,o 97,0vUpQ:aJUBX 9]J9RT2\-Sʃe]]PW˪vCS*\IFj_ђ3a_f$2p.޶jCW3zSě}ǜI- BQHWrJZ;1TvaLpySOQ7G9f0,ǂEYuw wit`ɽ]Z=tG> FօXoVGXL>u6V+\1Kq;iy[Mpnt[P&>X2ڴ-/)ƯecrgJ>k'@UIeGR2t.cq 4c@LMH~qXX$ceut1,Ӕ_k9̦')g0k/hkAj*weE\U+AmSAeb}^žjnoWY0O dgZ;_UQ;Z7&|`i]Y  /9)ۡ~xBfq]nSq#d+:˛M7 bw%}ɹ틱S0nK*wYז-Y+ ~a`rsj 2P=d&;|Yֺ7ԋ@Pfw8Zw[ctuJ'DP XՇ {gHyPS <E௼<x̤ @I^ o1<Ƕl@dVY&cHީU]WxQW1)rNgom*lN= pެ u9-L1&ta76^nKxQŶo-Wjz~YT~d!=TgoYo/vv20 054':nnTڝ{9K]X z }? r`lfg0P)<ꢷl0b)o8 /_2AL ADXgU uEsb$z`n%ƭ ^ksڋ $bP \ J]$pA qSLEɍ9Gй)!3;G̿[NJ?,ͷ t>?5$޿Ƃ;K{$o Drmhj$Z_U'bZ-|G[ê OIZ ;>}\d9H(vtEfT!܄f.1ZyӶJEuq*JSR 2 s ,'8$B*|KeQ><ZSECaKzBhV3%~TzgD` N(6O —V|$x!&=?+Eo{tCrPt| ^Â>|%2"_oF7ý"Pl'W:c"r&jB?M r';]^̆4Η%kd2̕_]ڸu/ B@8)yxsbG-A ;lԋC+r=A P'wgxH)@O\uZVO-bjjkśr g2=Mda@-%A`SmeŠq<~S4"dQcu?D﷽;\QKVA.Cpb,Lbe5"ž۟214:Pe*W|eѡoWASS 'HL2UMG<ld},\݃!4|WxoEPŌI!dWd.F`IbQfJe[ێ2DZ|-Bz71Wت«FD/֔^<ї+lVfMU-iPBQZ;:@'3n e92/ 53Pkj0xPmԮZea;l0Tk]K(vܸN8ąc{t%h (em@/zl-AY|kgџݨi[|4pT5 ^qNErX?&_qiK]#tJ3)T#!jjgYҴلWY(};+r^rs$jI]cht5a%tаa_9QMGI>*)W5' r ev }׆0VK >B7b?:&QGaޏ ax$){r=~f3t-Bo7~j[j#뭖5/ȏN( BwD1tz+4*}w˟7VF%(*HXt#慛[5y-=-;V*hahZ2KDnͺ]}[]!a5`s櫈mrcEc[S":Qº k3, iV:\IJ^ÅC@<ay_d)ܖX 4;&~ 0s@S#M':&m[M! ̩ loL#nZ#L57WC‹ Z}CJ zKۈmjzq_嘤] ϽP*?qU)1s%0#e9uWL<^TȟI"#:+vYY ,J˽xQ?X.@;Сjr|mV1V"JY+6/ڞ;f-3fA6}༻K;4*`F/3tF G6zF q8ő:99dņM+>mRֽx } K!E bǵy0܍:e"ɜWqAnzMد,: zY'2 򏤾8+v}ẓkmTz8%Izcud/ClPB#EKpk<8}vyK_# 7bBh`Ch͝|AX_YBi˦Ї\k+ MAg0$L2#u/ ^.-6-[5^1s2(ZmVw[-dLTt- MVEJ$2ZXgYP7'y4ԷG _tw7QNa'9$*e"mo:o"7fDIԓ x#2V9 Xk0(ǀY;E2UuXR6]M&hJtI"Zq6RPc5/IdΕ}XnսĢp%&Zl&d2WFA@W*0L(e߿;q=kN旱N2 6!7l6x,A|F% sSF{V /9Q##A//qs˛eB)xDB϶5u]6Nfa3f'N 6K<5U9?QP$)Ҥ@E>frXOOO]m^yeLh{uQRɗHE]C # jǢ,JϦrP@ͩ2XڜtPzYe1+| jSIgC>J5@Q菼3^|=^dש򓧫rzk'.n*~,.΂{% `x=T*H6fkQB\҉nn ik K؂!rFT%mz1LP=w:{JGn_imJ[B-%]z7,|">?e?rPKDlvRQ^iv޳COu1k{$B ]-K^_fX4; B#vlಡ, BIwXУ߀*Ÿ)ea76FOooyzc71H >gڤLĢڇѯL 2rwvJ+ĪRi¶SLڄuI^*6"cןݨ^^ww^n@?K?k*sxC3TZ|Uol-MmCW99 x1s꓇4؟; Th龍`xN˘tUNq^[/"oCeᘠ BW*/68sDG׻']SZce"crn/qvzcz?"B|y ޓ,H,Ht@G}.fJ(L\pN HPga`!ꞴocHz<84|GS_XLuR#hQ>oh'Z9W~M:6.%ܸ»z2 9ԉtGFR"SݗY^t ~#i}G+aYcm;c: \ &c^|d0啋("L6- U±?aRN=s[K'I2#(~ҵ-JƔ,GV1n+:Cke+"*DKI:OԥsjH)-2k]腥Ջ~ >97/)5:Θ˱1'w%1SPF"C>0+6ں̑' B#(0 TZ '(i]ȥݛu[mvDޞ{a5_iIL%m0&ݰV.v_Rn(Y1a(_ڰy@Cwg39;H0GM }f~;ֺ+<|蓑L"P{eD-Pt72D8@@ޟn^[_=0C-'ˬ7nFDQg&I5t~zJocX?.V%PTSsHFmTӛgHؚe5DD_C)5 ^~!l}ޱt~=n.\R#8{(XWeu{Ն)ޓ[ 桝DdiTh~,PQs_C(0p{pnldy5u0y,^ltZL;Qd[ J+e`:xH oKe}e~ëlưyY[;)hxÍunec3|?ZrU5K$1`c[T+N%9þuPLA8G,B*RHĔߖCPCÈH:GCR ${+Y~۟VVõ{:҂H%f6FCQp>˪Ξ,cmgO2 2[QGX8 5Y.6- r2o;bS{\?`(y okS4ϴȚas :0]'u`VHkŸ] sƸĊKZ1Fan'6gW/oMxr*(~ҋt]z3D0Ir}¢[3}xVHG3 x3oƶ/7]J1V(~b``éܬ2Btm%kbW7ԇ}Q%dg=SBK $<?ϣmȇ3iߋ}u xǨ|tz ݔ檈{R($rk L\Ue=\Ӻm$9䙙T)mq] ArAМBhX/P(VognAǂ3A|;UUgZUɆ tQ"J*\#=t5Na!X't~|XKv܇5 i0ꉟn܎yx܆42~R Z7J,0u~0Ń"MhΡ?WzTMjgmZ$)h tfb4UT>+d]H;۠TO@HEdŁ IW&wOB}XP&iʃsV;wt8.Z3A%@ y 1q_apW~H?]%(qk8.q1k{2Cj :X=÷(ܟЅPzKa G׹J.̋U(eZZgEb,ʞ߼ e_F%K=EB]J~().-2'ucdŝŖ5q=nuG!1rvvʡS俫sYKf0s@R yVjmc@¥Ó},U,;Tլ)j6buGl …O4`S@g46t4iXӡN,#T/OT2v$ gIE]EaIm-M^Q鬱T5KnE)^F9}ވ]ub٭qvߩipb -ئ^XV{-? \OUUQ 8'pޛuu/ rmZECsE)M)'O+Wvf~ Q=龡4iϱ~aн|Aodo^, M\]Wފ C`cd;ŶlҒOwDQ\AnP5KSdVsY቞?_] h%<. v=IH眗/y)kհ>nȈV,4\dٟҋoMK`.޾=uClCͣWXz*꾹͑W*F<5+;ٗD!w>Oe5B++.~vz|cJl$Qy1-\jluSȿyv1TN`o*Z@wz`>=QţQ[;~~,{tB1\ YJс >ܝL8Ye(+=)bCǼ:mT8JD5^= ?m&)ޱflKBʋxȪ "ɗq{wh^9<#f؝S h57Ϩ7B\iW^# ^, Xܪ Ŷ05uY+XVJZo׳{aUjrDw.w2e6o"ZsTZւyo$RsEs' 26z"a\3 {fff>`//n̂ȸ\%fϢE:ηePGՂ~4k7io? d+x#^uE|"[@,싡(#.^wt=]=:вWx3&5G^zflUv_Vh9n5Tʐ]Ͱ:پL'~R:uϮ¥s:v2XJ,8])<~VZ:jt +z9Х}XdwM'mpT<&*m 6gy40yTA{LFڋ (4үElj oOIu*HCd]IZj(.Y_<4dp6uěfr7b(آ{DIn+?gNzELg?[9K,ט,`q&sB>D!M1w8>NӆծL//v]][BNy;+c3/>>W}J?}V*(OlU·mčB&w&-W F 9gm>3Jۄ^vl%⯃v>sy06דH gsʍ~`Bx:|8F}^ѦFI!/XsVR@uř&A@laΚlQ󿋏g:Y f,1*\ͩQcV.@KBAVBo}X^&/kezAҁ,$+e%yY[8 )lޡ1͛YmhUd<߮:~,gNb#&%璙%Z_hKn* e`'dS'd?׽9k@^.ӆs7@ݹuq\ ۘh}Ā],(sn:S<:᥅u2ymmlSS_wbm'lSfW+3!fs'95O IG> }S/%s 5&Fһ-2,vQ8ڍϺ{Gw4-#/4tD>OJVF~UdFw5.ӹ}"@] bU׼4AǪw!愑5W@fџ1Uxe4C`R; V_7+u6dLSPNq` 0c-]MupQyJe_)Vl@L[(" =P垏7{4w-u82+Lt ?zLMt\lP\%lZ `ܻD5rN| s]>i/>ަ}bpXEEȢWnUgD7-\U*EQ ki,Q+f͜ϡbuT1W~]Q蚼 I3*k<yo{YqQ؉~2x6@4*r9e짰N 2 ڍЇ]3tBK5zZ&HsOWyq=2*o rs5y>H;n)km.cV?)iEwu(-(phchm ^jd\ Ҿг?Bow9~ HKߔz)Du5;I x# }EűvR=54K=mvh=ޔ6J<@3\IaҞ#:O|Z5ߨh(MC4?ڧwOQyUinBm cZ36, ...xa}fNPs.r)uMɛr?;M_l(/$W.6ZQHssf6=]-镓GƩ9YG ]*][eV{z͑^&.ЈdM?Ho5u#Fc|[{Gw$w݆D:'f_KkX' :R?yqks~挣?65W.0z@xb뷄| ( AcuMWWKIy~b˂ qX(|=%@izPC^=_\^ZGZA^[`@œ>X!v ծ^M8x|.'1T#X< vY+LU,3(6%MeH#Pze"ۊHݗZϷDyvsYe]{Lܱ9w{ u9chgА|BD}ޥ"\}2CXO/0CZmY[lugOqAdx2~~OByAI3C`UלNZ78Vs쳋OZF͸_$b,eBT,:| X9Kbi[|*Q-WM>k=])JټUlHHK+ C^$-[zQ9#AV2۩a0fjS:ILa$$kXX1uymb#2 MH@21eCܲ'x-gR!+J. [RwuUɣZjlI!=3f^ZC=`*2so [0D/H''4mjzEo<KJ&d.I3ѰgFUehk 樟X3g釉E̋8w=H}sq]Wכ{}ˏ@2T.Xr~Ƞ1?f#Q8Gc1v/_!j+N*[Öo6YY/J =[XXx99xr56p$mPP Ejqϼ>IuX]q$g[>;K$7`kqKX>aZRiqTt 4N( c0±~,x &I$Q GW@mI: t3wW_"|E&LD~a;t$R9 QypRn'K. 踟=dgÓww2-;7/X'o&&B$|tS$Fo|ڦzG;ڂ_?׿ W#9y4yYb\Ab#C )HMv ޝƝ$_Bfhr"ۙwRȼ߸y%?xuJt9 ؛~mA=^83lBAMFS0tG=yވ `,;ɍ著SۂXRx^}{ֺX_T~%]%JE'VNʏd|(:ՔSaiξpj󁛴0yEƕ[H-q?!| uYgϾ0LJZ֛s." s+R<0\)@Eg"{H*`(oub}Ay:5J2N7PYgS_W}C'|MjKЭq0^qNUh.gR#qȤ#D{2C@Ab@K4{ÎhOn Kmb-Hn-mꜥL]u`^u6׻-,w dm\8Ov'n򎶦0l ?xNX1\C<݃(Z[V V[67>6;Y"be" @TTZԈm]{;z '/,b g3NaJYvh"/0ޜ*RmdY"L+ǡyvj;"ri|4бbST@P8<IRa:@AA A2xP66d*r>QP^PƕԓRSNQ4$EgbB’Z p f6aKbrNe}۔5kj殾/K96,'T2)r|6_$GbPp}ΧK z@^o y:0ЌB!H2[?J ƨ0h`e? |i˨î4ƫ^?'?oD6 $otW"o;[qz3rsd}7qUZ}1qGX,)0C2fg4S}"4xB=#&ms : s =@6h H nm,3V'ir7ƱAm5|}E`7Wv=ʹB5 D!s_g^Zrc"STv]?E`dV }yɜ!g=_)G|Pвx(̫o`d޸#2'kL#߂i%@-LU.V)R',:wBk(88ϲ Y@AW&5%7oRl*56AҪ:aDvh#'Vޅ0Ѯt@C8Є}UUȲ7`YQix'ڎK>=sw9"H;5PL#YHIێRpHAקc{kt0 N[IaW`E8` P`IHGIMZKGw"|HbZ.p۲NSu`/7~|yh[^fm ZG2ymԁ-lz ӹPᐈqFr(pT<vg\"i(e#`ZsW)n%2a z$$lDrZ P^|h}nb?P}*V6&uoR(; ZmThme꨷Z:mp@n[4h #dH4l%dD63N)HC9Zi~K="a*7vb\fe;`oiAC Kb5(BߦtYM?F-H(JX \džxU*[ )B|< . i"Kv(3k+W&`8Q*ɡt2IC1$9J89cw`q:8v(wf"VNOI6FՎdvPqUкRŦ$1ZCߴA]cB -t?`9(Dpx:q:k)XFI)4|"鬐ܘ~(Jnt,z.0N7 n=3a#mJ*6.*L8@}B*WgDQxm7?K@ĕl /F[¶}kOm6EQtiH~ZClbSwmKo/ K e[S?/1 7@T囦*$ = U挘f __%%+)H'o#b7iJ=ruAA3  fp d C"k<句^ߝ/PjQ:YMK>֮?9 u'ϊ{. )HNTl Xy USxE*L?E` zjɌ6#cF҄/2YO(35&un: {^c)'o˻7P\DN(3f3>{DQۢwJ#O_3bGg0NԚdBCbԄ%/kHw|ݥ,i`vS^m~t~m}Y%Ŗ+&Yfx|jy3^ײ;/ RB[hpC 8?TP$]Njx}6J*NQ,84,tq:Jį<+4QI.=>0eB\(PcV|N?P4g@vVbM`:vplRr\'&냩Q=5d?3M$;>KZL}|Qלj\uv sI[LuKŧezEܘܫe9JPUR%7B-Kݿvg^k(˔"Bz2ᓿ1L 3_#;qG):Ms h^n/ @;NQg;︊񫤉Pe=Tu\ -vuN9MjM4H/?j܌wz&8 ][X{vs sδ'g#!TjLّ%k0K+9vE5J E5CB /ɿ3npЬxV:s R3z=e iԱ$s%m1Ιo -%ΐJK#M\qB*`-]qĹ=yRjUz&rZ(Z"i9ھ1̗.,'%NZ3GFȌ MFgǦ*ˮe/SDD[spbs[:GWHv׳py[qD}O+p*//pt]̅,gOymmnzHQKvKמI؜Ppo|ګkoYHţ})$dn2UKgRTDԛF.Lpt碲V95E#TFlT勄l3^ˉNIk;X)>W%Kak2)X9+ps`S*xwDLp*oH71(0R07>2H650̬y/?Hoa$jqGqe0Mb`֡3,"p2fL:2i u3(ppl_E$>Fuxz>B\x "@qvmC%-_uftZJ޵p5D-7#_W;4$ DۓH;7";x09NZsn4w8z!QFsȰ=-Wv%uKLZ7YPfXI'4 ,Ck` pB\!A9=G+ٮ(7do&}G(Ib7:wG?*KliɾЦ54/eީN{Y0p/,`qcQ5F> P9O=C0WxO zY]ͷm|c]:ј%U&thq>D *֞|6eRiۃ d!{)6ZЍ 2m)>֎4p Eΐ(8H,GjᵴDyDТo:=t)'9;һ& gSؒԼ[MLX/&5Zi)Ión :B;l߻ )-6Cr\I^}u+74*"Y)C[Y#& O. ?.(QbIS$ٷ60I~Yv7˾T='P)DvhS7DCڹ@yFicTy05l*-[5< @˟dYeiQ 88z!Z]E=dE#- AMy\8O ,RV/_:9i]S6c^j˙LJ][)(%kmpL ؉p895ԝtY4/EXA)D7XE3 \x\(LAI"npQM( ȪI@8Ĭe&$]xDKۡq0(RP\-n|Ndž^qhЭ cGYs( GRJoh}ܻJS4FLn\[bKz`c6~{~I#+Q2CG,pu! r ")+Qt*5 Zo~!l0Q.~6dsoyv>,Zn7:-[8-5+bzc7yF/?BTr|QNb+~$wn\Ec{7if9U?|TS? ǽRΦE՗qّ m5PH*rH],|"S۱â'Nx~1@.|yں-m84;YI0>9LCzd!q(vM̬o< 9FlBU>ߺ,0234vFr{٬ =c~N{][&&}X'46GxxA,.:驠ѭ`cI1U5' E Lc+H0 'NDbW1Th_ս7+t4eR/ڞ7q$ŗzp&\Mw{b_~x{}[=}6X-V/P0/,mZ5ȓy`)xCh7%&USM3I_#%R340sp0C~!aM/_XaxPɬ4V\kN:[5&- d'k6uq"q_`no-ͬTYlj  ׾>~ 7:O*VQ DMS7mw* m+=_t`bxbnJC,eh18RQ)\Qato#m.xrCΌECj?H&f'O"0ժ(1W ogyT3B!58^89 7cd,I(L ed M#<NaQߺp Dup CB8^G0||g&]ƪFR]>$C5bYtc0٣!QyIYǃt^҅0(@ =+W:bXj٭aOm#j As1-+lN.#wk@UPWtLbJr^;=KϓOݓ۱0 GDǥ;vE!kaS|#a)<ӂh #)ADRtxDղ|'un167ɫT(YE4Q_mN|u1s3BT]w|ӍvMiV(6U_!_ft^$ Z25(XbvyGk ,Yd40YsBly$J`g!LH)gv$MWLޖs<ӚRvzˌlob y1ťYxX[q>:1KQ1}5X+ V&^>5Cl.tTj@؁GRY5_Ŭ~e5RZhkLdyf /"vFF U6CcODeJXYFͮ3hjK,Z̷5_tD/,ܷ^kL]lRDX| 6Ձ!'Kfٱ u.+!]dCA(D|-yysjN!i=DM55epjaOkIOQc#h4ѹ;w)ѹT,\-T81,sHGAA5 IH-Ŭ-$3ZY}npM3cjgfi ql$ߏ;ΨK4  J/yLitl%fj)t"|GpDϑaVj; Ӡ+˱0f"r.WJ0՞j<(c:x 2{^+*]_g?vҒop)sLd>@(V"EvvLњ6qYCQ>qI #-;zcɒO_4(NNZ9Kr{iHGpC+.7tV HK!%X:ltB:Xx3&L s&nn%ÇՈ1aC0S],Z@+MRePϷO\z`aG)XPC aݚǧ^mXaw| $tgFpE5$t/+Ak9{E<ϏK#.na;d r4o.QlBT܃feluCiʤMEKnȦo7x6\Je6g|/+_KͫOK{)}3!2y-Ě$0rf"ϯ:,ƞm<}cA Q7'p Yb$aUg "K(v-Ѡό䥴 >Д48%ژذWbenޖ~!QE*0)&]Y!s_ CP"&N>d<H뉀ۦfE`6ُٝzְCr{ZT `&Ԟo3cƞJ"?~j+Ц&xher c@d;(`XALȌipB{΀ԕ?[:2m=7K5qYG r6epNNw L/˪O'4qMW2g9L>8_Nc,ryt2ެE#ȶeԓ!D;E ,&l-RG 9I% JAO-ղb!fKrtB{=-ij5,WWcrjJ*&㲙 *7˱}; .rEy䲚m]I8a9+W2%rPOhn}U&I b.6~ wx@tmq1 F\_ `Tk a .RE3|d6PRNiH]uq쫀ŭ33#$81dwna*jhrl[R̺?A02NJB7s:ksqDf!IMi ȚOkx ̌ #emC ϛ捴lBPn,򛳜E H(q;r6~*ͯP$]-j[nw(qKI!_`vIw}V|Ɉ uעZξࠏ%tmcihd4?AHƘ[iAX}ng8%Q߸4ĞBxP7-N|JXioFln~/B,L-#%2=^o<i; +T$X ڜV]<eRSOMZԤYuePv_޻<,$%^t2Xp-MjfBӵ`, 1A ή\]ǑԱ:)W`EpU0R=ڂ7Ug ''=m 8;B:B^ԭqt@Ԛ- P3+tETWPU>Ҥ7G1eqq?kɧoر Tk4tlLqqIixcw/Ŵm_q|K.x֩`ƈA&a0W&!-F!<4xCɩV"uVON1 AͿoP=`'-&slqP` ?a'x@)=/Od܁6dPhYs#HxIҷcqjYIJ89u }FvHGj5%^}lӎp)6Aeދ ֓Lzr6`xW7JѬ<#`?fxtp>ÀbO;Ær G,T-eǓẔ=k4}JIi<)uO-+ݐla񬹙1E[ax ok9q0ČDHg&$Cdy|֧]ybt'Gyy^r>cfÞF @Pq1 ZJ~²xƒ0X}tU4|h?y><Ὰ&y™L<bK.Ӆx?xfJߦR vKċ^,?ޠhZ4 GarX1bI kmb{/ '9R#yݢQb=;z..Vb vw,R8cV潉k8 R>/iToɋܬs9ޜB%ɼvM5z, O<Ǭh1M:S͵"Ke%3?PvzB{תta':˃,Qq3.}tDxӅ6aAk.lz92>C/YނxeQ(B>'rPҖ@fh }.A2E_켇 M@ 7QTj#Yr%H<}=3reu{K¤Y ( IcZ|f_ #?`I)b_u4t_E|-Gov>Eh  I odч${gl 7-۰6\`Y#u"m?v,Xc+2FŶ+l$h249Ď}uUR$5^ 1Y/g\-m}~;;ZL~BKU+w$IѤ9R{v)FĚXܱ?qO}\K~4 f2u__t(?Gg. R&aUb\C0aYw8l4WVcBSJެU;'{jG^g4է,IW)|SR$͍+F ]Tӽ*oƀFtЈ321~ m,0lu1JpԢgf:5"52M`1{ޅHxLJjD yrM+S9Y Ld]}nj5ފdQ+ĞuYފǯruOtK3(% YN ``AšS"GŐx ;Σ.u2/ Q0$N^0HsEV)bTL̦־D0=*~dhRcwj!nD;WdVI[fvSr|Ɲs$gx=>B䢲ՎD;_2vKkEwnK u@ײUH ~4FG TeZλ7Btd73M>}Ŕn:=r|~d$y]_y,Op_O߼OY`9N v@9|h:h5Ai{nkX_iEuӝZH웩ۤy{}6)$UnK)tF>yY!MiCR)nxp܄Kp9ed= onQ.ٷEx,cؔ?h}2D"_ZΡ g;y]͸зm"mY Ne1by0u**INGOI7X1 mx@';KlF-J^We 4Ծ},ǡ'o\1댢I(ejٛ2r7缺g2DD)SDZUa]|==^Fr7ثrLyW/\(,g7,] ; )磽wfttQaFdvtGR>x|2Qr$^ȏM RG{?|*7@|:شAb4nM󆴴mP]뙂qEЧ6\͆ Q~lҥXjZ~:3WyKB=.*V7e=t08%ǘ%$   $`PRg5bH*D3oW,-}MS:Ke]5wi:fx]>&/]o -yv2?ixRl[dBg}oOʌ,ȖKǥjwp@Ζq&uEE XٞU(73<4YՐYn /-GB7كS':W1 (/z. in-ߑ<_.2)$_lvB%I\D  $km6%AN  n3ۦe3>NcAݮ-:VM+w40f%=t GF嘲 Z"FNMJzXw/&L&qպ oj9`TpF{N"$ QNF:F$pWo4TMcy'CZ:DyN@gtcsEH)kJW@Tq_^"F2[h>q+JSa eMl3aTs6ϔP8:%+ZK<Q4.Cs}`n8ިWA_̇GgmZr/#X5ܣIi)?5OXaE}uׄ-א"sI۠> ϸ J$ afPt),s]ɶcq m 0y5ρ~/ OFq'|-vkЈDSB?~:^紁"qP/#Gq25xp ήdb"MH(E?YZ[^`:YuaSpH.UI0~F_y'`ߞ|iVoNJ.vjN>"q]aK2Sb=~\hdےcs8MfpOXe~x觬uOrm9fQ"XԨ@0?4P9VhXYڈ n _Qn .O6T8#x~U7d Ȫ7$Qgy*-;%b͛MFj V*娔Ԕ̆ acxGb(AD`0f]uEUvݮJVq( əW_& >1=H`,ZNi %1^ J@XO@3 a+o2UxאW<1sMfW\hp7Ok汭Dd).,5=G/^ ;&ȕ 0D3:*PSbUW!(:\f]a>en&O3!I`.Rh/4@}Mud/Jm35!0Ja|ja  kCep;4qҐ 9'*jUy &&F/jo/ v lE@{dj%>z :7*gFA-b1Lu#.lʓNyִKƿ>NC9DGMqihQ&O񺢟{KƤlKc7ɤ3za03bPhYw*i23{/lAPN(\{)|[Už ׼uuu"6Mǂѹjq8}\*azځz6fI*1d]lRUN1C/^@^- S%HFnf:-|7*yq'W?xڽJ`G~x˾%Wk;O '&slb thp@7ue]VZ>U\Szcd5 w,=H1Ho>vJi2E3in[^|//@;r>dcW{]JXPuv҆m->R=L;DtSmhwZWr WDMuvh ܜa8{pΝ#XW;Nԃ_Xh(b;Cr(Bpʲ; $؊޻.;fX;Z~q(nqU;6DxH䘎q)Xsd߇2)Ǣ# :Y%sδB?wό˃=՝Gr^`DrjtǯoWG z"JGu1wxy#&ʘI$ۆm+h igNܠ5Skm0( F /i_AnޝIy5lƦwQ\'lHIS[D:7YQjd!L Ͻn,Q ƚ#똩7ޏoC9rr7tN#- ,6Ͷ{~]o/KI)ݶB26#D!DBel1\Ya)՚aL\||Q&!W mBM^7벤I1?N 8wd&xu ʘ_5=e~<{_&P)ٳ^sϩ|yr{̰>pՓ.q-iGaFO+v]Oxqw߬8*]11a"ʢղ4fߚꮡe;cL˟w<Ʌ-'*\zʠbb>%62h q e\p-Sjiפ4;OZdlc*ǚKba{Qۢ@kw$zmܽX ~=SYTi o#)8)PCCs 6(^&XZL;_phݸn7*ЭS:y2(_kZ|݄ߺ\>nsrU/| 5v6mlCFmAs,F=( Ɖz+<2 NOVbJ; 7`jBe īyMBW ԝuE|5u0"`h eo똙&<+6%&2z4y*T_T& Z$ȿac„1ȶ'ɪd-i[.\KXZ|c/LXnwB}C -G+uvO'E*mS\pBnKjn "czɀIO,Nvh!?KyоF{4%GWU> :ZGʂԹ28i뾞Sg^ lv:m^Eoư܆h8o雫h6lW19{ڨw39a$:;{ ]vKL.&ckn\+̚N C2Tf,^J:4jWUliOơ3 'nFFhp^y 'h^um?ohrU2feN|ځn%tP߸IomW0z[nE|\%d*ъ3()TPMv~ߢnO]ǜwnRrD+}]j8]>]Qb6q#8\a?1hݕuUfUjZ]K-%{{F5>(M>!LWь_rb+oĴnSHQ6>].A}5AzJrMrd4rVB2h?h׹UQsd6Ia+x ~>%L4*m6wnp*J㕘u Nq8Eq1!e嬰$)Q}wXQ#QQ+ǖ9*߭[G] +H2VA]aa $bf+ 7ض@"_`v1F ;fʑ}p|Qu(x za^M^alKo;Eeo^ўO v|s{v͇Ȓ6-|4^BK|E+K6[ edA1;SN#C[5H-w v$+k:nP3DQq~L}NBazMaE9kCT+38ԷV~ |J7J{}Q"`_Ke\FOC6> #!T]@]@pS5I #Z;=L&90 :_qFfo9ŊO0YϏ8LlsQr']'p.;2dj|ϠbUwE)Rkh|j krn2ɾ:%InČq' r1eȴG'Ѥ'M ҿm$-.m1"ڌUG,6 {5Fh[1|ըdTgroZߧ9jx@i9'=5l)^3CJy_q`^{ =yh6|Nq:31|A4s&0$ ɡQU&MZ1kWN ]JI$< z9u,+r%}MY,yړusUS✰&̡ska W! "  %a} 9PBQMsS:R$*A& TĈ>iЅwKp pɡb;o[i$nsoޛ+\XaMc9Q1V"И5aX$.`l,c~Dr~ȲDi)8B@O(6T\09Sí3q<\iO}lBSYKdPgq<~z"Pt2nƬ-$-5>M /*>GPCf5GӡW0è2RoJpϔ.$pF񝍟Pxdx#@  (Y-2|ƟH\H[4y5!jݓI \jW#qU@z%eWqߛpLYAg64|7T;rR-w,K)Гr1k7Ic?vhwj|'WLv"BY&sktQ^l[)Ӝ;?Iv&Kf6ޒwes[h Uï4#$ِB2L3_lPǸH<_1 jozP]ˉS"3.Au"ǥʶ/8Ɏ4CBF븱#"aW67a?8kҹΈ,_O4B# s]$Ǣ!lHZ:$NTۦL=\䄯P/3\bcLSA4=h P1yw+nõ0/v^^;W IwK"zoQJ<2" BnfR) _Wv6S<ڽ{ڝ<:=>C\_ Bٹd+^iJ(71M΢m ;}U3Ýr#yGx)He.0hL)) wT#g8̫*7Vfa%`+a ;Cn2yߝ|Ŀ-+?ɇsFs)-0P!Wԯ=hV'7AQ\9|.ӦWH16lutm'B\V1ԫckWCmDpNLق;nM8Χl}ݮ"_{J@px Z<@#0+%m%K6l9Eq]dk:iANǼ續㹓R"Zdn ddT+0+If7j_6#b@q1v[.1k_>+N1w;cV6ZyU \+ N3hQ`ϱ}FwzV5G.^D[ͪݚP%uBOF kE ߃^?RL>d Ǩ^ \o+E* HJ9z}=B5*OEAw9D heU!M+#4^,6Io,@͸f_FOfoWx+~YIihx*j D)K֒\VzsmhvD (xs.?9>3hOŵocr>=V ]]g>49\ceOiiaOU E-'I2 ma>1/ 펳.4XUPShQ:P;];O-ݑj\9k e 0ߙ#eUvnO}Rb90b%p=\FAv [%@(d#pR/(^Jjn;uZm r΂C =z:>9%RYs'adz獜py=O^URڪh?8m{imD[`8cEHA*_Ya*wR#Fޗ\ZOMXt ZeW9)isB.LUs/QN}fЂV՜ԧ=jc湵g]460dCL4{|Zq V"u1 1ʣc}=rZ7dIջr=r`PC퉡RaėYDc_xU2G,ThPg?V1xb\ n {}n+|o׆%F8h$so| )VT(8$4L;~dGy84i1n^>~, i ,"jOV HH~"E-V8$EϓR2 *z0\<|B"bR2[_5rkҬG6:t"7V$Qd)RsZiҫg])Kp+P-qTOMܭ90 @H즈l1df N GVpUzGTZmP .>!1FMJpNZzFFs fʾ?Ƥi'IʪH*u`Pʔm&kȑ3W}\S璉.z@y@1X͝@$)Td9\_ %R\T5Z`4-V,X98yx "Pqi8Bcd8ѯy@s[RHdĄqOH͕a¸'6 =!66W%"ڭ^ bBT\0Rics}&y\ &Tg eKzBL BZ(„2 3Kʸ'$Ul L (mb*Dnˏ| S#uV m,~48+{\Vc"m=tyNIe _PsޟD/\qމ˵a}/#^;8֚xnW&Z{}~+Ok2.y5aσT Hnd/-=r +!!"Hpe#ҲYEŰL{ܱF(Ϯ],ǣ6,Iz$6+F $t+C3A>9ќkp.̳9eFPUsD^I%"A xLt:6 }7 z(RNW8k؀-]`by =ͥzMx/XW8huYkOZ(QU *uKd;}VoͺUMͺ|Fn^R*ks xvA>n'ucBJ躒!E8)BZ鄑C{Z YC I0WL⏪ 7>Ic7>"McHb-t)%˃djZq}^.f/fnP4p"B[˄QOl|EEڲ+1e>D*P /BZ$2Hݥ[z 2L=Dxhĭf^@1l)Wo` dW^$2BzX+Ga޻Bu@~]<)h r 0$7G؜B)sD EKFf@Փ2B#L IV%hj}èB(1BfM[IYByU_3WxQl4ꫀhDiMzZ9s,:;~1*1\2EAȔ0Lv?g1 B nǛ"~$w7bdD|uiʤijjjx.hwq y"/9I$!ˉe%~g_e>iMN*eh.jQ#TC10mz:SO)#L WG+WX`ʸE@ mlniwQ Td+q2@=o?_kMj;޺/qd:'i+ɺ`'>xb8dW$qwf*kD@ e\ ݥ&qOH"L'4Y3ݸkB &qOH͵"L(㞐JkDP=!660{B*ml aBT\ {5oACkdZ`ЙaoWz\F$6q;.Hc2ppB%L?_wۂvرh(UZֻ-UB/iQL}{;GO^ݻXw{X)Vo;ϴ<*&Z ?],python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.ttf0000644000175000017500000050325414502137725027701 0ustar carstencarsten PFFTMkGGDEFp OS/22z@X`cmap : gasphglyfMLhead-6hhea $hmtxEy loca\ maxp,8 name㗋ghpostkuːxY_< 3232  '@i33spyrs@  pU]yn2@ zZ@55 zZZ@,_@s@ @(@@@- MM- MM@@@ -`b $ 648""""""@ D@ ,,@  m)@@   ' D9>dY* '    T     @ f %RE    $!k(D'  % %  0%/&p@0 !"""`>N^n~.>N^n~>N^n~ !"""`!@P`p 0@P`p!@P`p\XSB1ݬ        ,,,,,,,,,,,,,tLT$l x T ( dl,4dpH$d,t( !"0# $,$&D'()T**,,-.@./`/00123d4445 556 6\67H78 8`89L9:h:;<>?h?@H@A0ABXBCdCDLDEFG0GHIJ8KLMdN,NNOP`PQ4QR RlS,ST`U0WXZ[@[\<\]^(^_`pb,bddePefg`giLijDk klm@n,oLpqrsxttuD{`||}}~Hl@lH T H`@$\XDTXDP,8d\Hx tXpdxt@ Œ\ ļŸƔ0dʨˀ͔xϰЌ,ш҈ ӌ8,՜`lHش`Tڸ۔@lބ߬lp 4X$l( ` d      ,,8(Xx|T@| !"x##l$$'h(*L,T.L1t1230345t6T7$8 9H::;<<?X@ABCDEHFHGpHHIxJ JKLMN@P@QRSDT ULV`VWXX4XZZ[d[\|]^`aHabcXdetfhghi\jxnp@svwxyz{h|}}\lt4t88LT|| 4xLX(  @lt$xLL HĠT(  ʈˠϔldPՄxpڬTT ވL <H$l4 Pl ,xp,xt d 44,hP 4   4<,,408$8T |!h"$L%0&H'()*0*+,.$.012@234t5$69 ::; ;<(<=4?@ACDFH`HILLLLLLLLLLLLLLLLp7!!!@pp p]!2#!"&463!&54>3!2+@&&&&@+$(($F#+&4&&4&x+#+".4>32".4>32467632DhgZghDDhg-iWDhgZghDDhg-iW&@ (8 2N++NdN+';2N++NdN+'3 8!  #"'#"$&6$ rL46$܏ooo|W%r4L&V|oooܳ%=M%+".'&%&'3!26<.#!";2>767>7#!"&5463!2 %3@m00m@3%    @ :"7..7":6]^B@B^^BB^ $΄+0110+$ (   t1%%1+`B^^B@B^^"'.54632>324 #LoP$$Po>Z$_dC+I@$$@I+"#"'%#"&547&547%62V??V8<8y   b% I))9I  + % %#"'%#"&547&547%62q2ZZ2IzyV)??V8<8)>~>[   2 b% I))9I %#!"&54>3 72 &6 }XX}.GuLlLuG.>mmUmEEm> /?O_o54&+";2654&+";2654&+";264&#!"3!2654&+";2654&+";264&#!"3!2654&+";2654&+";2654&+";267#!"&5463!2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&^BB^^B@B^@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B^^B@B^^/?#!"&5463!2#!"&5463!2#!"&5463!2#!"&5463!2L44LL44LL44LL44LL44LL44LL44LL44L4LL44LL4LL44LL4LL44LL4LL44LL /?O_o#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(88((88(@(8 (88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88(88((88/?O_#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!28((88(@(88((88(@(88(@(88((88((88(@(88(@(88((88(@(88((8 (88((88(88((88(88((88(88((88(88((88(88((88y"/&4?62 62,PP&PP,jPn#$"' "/&47 &4?62 62 PP&P&&P&P&P&&P&P#+D++"&=#"&=46;546;232  #"'#"$&6$   @    @  rK56$܏ooo|W@    @   rjK&V|oooܳ0#!"&=463!2  #"'#"$&6$   @ rK56$܏ooo|W@  @ rjK&V|oooܳ)5 $&54762>54&'.7>"&5462zz+i *bkQнQkb* j*LhLLhLzzBm +*i JyhQQhyJ i*+ mJ4LL44LL/?O%+"&=46;2%+"&546;2%+"&546;2+"&546;2+"&546;2`r@@r@@n4&"2#"/+"&/&'#"'&'&547>7&/.=46?67&'&547>3267676;27632Ԗ #H  ,/ 1)  ~'H  (C  ,/ 1)  $H ԖԖm 6%2X  % l2 k r6 [21 ..9Q $ k2 k w3 [20/;Cg+"&546;2+"&546;2+"&546;2!3!2>!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@@`0 o`^BB^`5FN(@(NF5 @@@L%%Ju  @LSyuS@%44%f5#!!!"&5465 7#"' '&/&6762546;2&&??>  LL >  X   &&&AJ A J Wh##!"&5463!2!&'&!"&5!(8((88((`x c`(8`((88(@(8(D 9 8( ,#!"&=46;46;2.  6 $$ @(r^aa@@`(_^aa2NC5.+";26#!26'.#!"3!"547>3!";26/.#!2W  .@   @.$S   S$@   9I   I6>  >%=$4&"2$4&"2#!"&5463!2?!2"'&763!463!2!2&4&&4&&4&&48(@(88(ч::(8@6@*&&*4&&4&&4&&4& (88(@(8888)@)'&&@$0"'&76;46;232  >& $$ `  (r^aa` @`2(^aa$0++"&5#"&54762  >& $$ ^ ?  @(r^aa` ? (^aa #!.'!!!%#!"&547>3!2<<<_@`&& 5@5 @  &&>=(""='#"'&5476.  6 $$   ! (r^aaJ %%(_^aa3#!"'&?&#"3267672#"$&6$3276&@*hQQhwI mʬzzk)'@&('QнQh_   z8zoe$G!"$'"&5463!23267676;2#!"&4?&#"+"&=!2762@hk4&&&GaF * &@&ɆF * Ak4&nf&&&4BHrd@&&4rd  Moe&/?O_o+"&=46;25+"&=46;25+"&=46;2#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!26#!"&5463!2 @  @  @  @  @  @  @    @    @    @   ^B@B^^BB^`@  @ @  @ @  @ @  @ @  @ @  @ 3@  MB^^B@B^^!54&"#!"&546;54 32@Ԗ@8(@(88( p (8jj(88(@(88@7+"&5&5462#".#"#"&5476763232>32@@ @ @KjKך=}\I&:k~&26]S &H&  &H5KKut,4, & x:;*4*&K#+"&546;227654$ >3546;2+"&="&/&546$ <X@@Gv"DװD"vG@@X<4L41!Sk @ G< _bb_ 4.54632&4&&M4&UF &""""& F&M&&M&%/B/%G-Ik"'!"&5463!62#"&54>4.54632#"&54767>4&'&'&54632#"&547>7676'&'.'&54632&4&&M4&UF &""""& FU &'8JSSJ8'&  &'.${{$.'& &M&&M&%/B/%7;&'66'&;4[&$ [2[ $&[  #/37#5#5!#5!!!!!!!#5!#5!5##!35!!! #'+/37;?3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3???? ^>>~??????~??~??^??^^? ^??4&"2#"'.5463!2KjKKjv%'45%5&5L45&% jKKjK@5%%%%54L5&6'k54&"2#"'.5463!2#"&'654'.#32KjKKjv%'45%5&5L45&%%'4$.%%5&55&% jKKjK@5%%%%54L5&6'45%%%54'&55&6' yTdt#!"&'&74676&7>7>76&7>7>76&7>7>76&7>7>63!2#!"3!2676'3!26?6&#!"3!26?6&#!"g(sAeM ,*$/ !'& JP$G] x6,& `   h `   "9Hv@WkNC<.  &k& ( "$p" . #u&#  %!' pJvwEF#  @   @  2#"' #"'.546763!''!0#GG$/!''! 8""8  X! 8" "8  <)!!#"&=!4&"27+#!"&=#"&546;463!232(8&4&&4 8(@(8 qO@8((`(@Oq8(&4&&4&@` (88( Oq (8(`(q!)2"&42#!"&546;7>3!2  Ijjjj3e55e3gr`Ijjjj1GG1rP2327&7>7;"&#"4?2>54.'%3"&#"#ժ!9&WB03& K5!)V?@L' >R>e;&L::%P>vO 'h N_":- &+# : ' +a%3 4'.#"32>54.#"7>7><5'./6$3232#"&#"+JBx)EB_I:I*CRzb3:dtB2P$ $5.3bZF|\8!-T>5Fu\,,jn OrB,7676'5.'732>7"#"&#&#"OA zj=N!}:0e%  y + tD3~U#B4 # g  '2 %/!: T bRU,7}%2"/&6;#"&?62+326323!2>?23&'.'.#"&"$#"#&=>764=464.'&#"&'!~:~!PP!~:~!P6 ,,$$% *'  c2N  ($"LA23Yl !x!*%%%% pP,T NE Q7^oH!+( 3  *Ueeu  wga32632$?23&'.5&'&#"&"5$#"#&=>7>4&54&54>.'&#"&'2#".465!#".'&47>32!4&4>Q6 ,,Faw!*' =~Pl*  ($"LA23Yl  )!* <7@@7<  <7@@7<  pP,T MF Q747ƢHoH!+( 3  tJHQ6  wh',686,'$##$',686,'$##$/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?%#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&f&&&&f&&&&f&&&&/?O_o%+"&=46;2+"&=46;2+"&=46;2#!"&=463!2+"&=46;2#!"&=463!2#!"&=463!2#!"&=463!2        @     @   @   @   s  s    s    s  s  /?O#"'&47632#!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2     @     @   @  @          s  s  s  /?O#"&54632 #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2`      @     @   @  @     @   s  s  s  #"'#!"&5463!2632' mw@www '*wwww."&462!5 !"3!2654&#!"&5463!2pppp@  @ ^BB^^B@B^ppp@@  @    @B^^BB^^k%!7'34#"3276' !7632k[[v  6`%`$65&%[[k `5%&&'4&"2"&'&54 Ԗ!?H?!,,ԖԖmF!&&!Fm,%" $$ ^aa`@^aa-4'.'&"26% 547>7>2"KjKXQqYn 243nYqQ$!+!77!+!$5KK,ԑ ]""]ً 9>H7'3&7#!"&5463!2'&#!"3!26=4?6 !762xtt`  ^Qwww@?6 1B^^B@B^ @(` `\\\P`tt8`  ^Ͼww@w 1^BB^^B~ @` \ \P+Z#!"&5463!12+"3!26=47676#"'&=# #"'.54>;547632www M8 pB^^B@B^ 'sw- 9*##;Noj' #ww@w "^BB^^B  *  "g`81T`PSA:'*4/D#!"&5463!2#"'&#!"3!26=4?632"'&4?62 62www@?6 1 B^^B@B^ @ BRnBBn^ww@w 1 ^BB^^B @ BnnBC"&=!32"'&46;!"'&4762!#"&4762+!54624&&4&&44&&4&&44&&44&&4&&44&&6'&'+"&546;267: &&&& s @  Z&&&&Z +6'&''&'+"&546;267667: : &&&&  s @  :  Z&&&&Z  : z6'&''&47667S: : s @  : 4 : | &546h!!0a   $#!"&5463!2#!"&5463!2&&&&&&&&@&&&&&&&&#!"&5463!2&&&&@&&&&&54646&5- : s  :  :4:  +&5464646;2+"&5&5-  &&&& : s  :  : &&&& :  &54646;2+"&5- &&&& s  : &&&&  62#!"&!"&5463!24 @ &&&&-:&&&& "'&476244444Zf "/&47 &4?62S44444#/54&#!4&+"!"3!;265!26 $$ &&&&&&&&@^aa@&&&&&&&&+^aa54&#!"3!26 $$ &&&&@^aa@&&&&+^aa+74/7654/&#"'&#"32?32?6 $$ }ZZZZ^aaZZZZ^aa#4/&"'&"327> $$ [4h4[j^aa"ZiZJ^aa:F%54&+";264.#"32767632;265467>$ $$ oW  5!"40K(0?i+! ":^aaXRd D4!&.uC$=1/J=^aa.:%54&+4&#!";#"3!2654&+";26 $$ ```^aa^aa/_#"&=46;.'+"&=32+546;2>++"&=.'#"&=46;>7546;232m&&m l&&l m&&m l&&ls&%&&%&&%&&%&&&l m&&m l&&l m&&m ,&%&&%&&%&&%&#/;"/"/&4?'&4?627626.  6 $$ I     ͒(r^aaɒ    (_^aa , "'&4?6262.  6 $$ Z4f44fz(r^aaZ&4ff4(_^aa "4'32>&#" $&6$  WoɒV󇥔 zzz8YW˼[?zz:zz@5K #!#"'&547632!2A4@%&&K%54'u%%&54&K&&4A5K$l$L%%%54'&&J&j&K5K #"/&47!"&=463!&4?632%u'43'K&&%@4AA4&&K&45&%@6%u%%K&j&%K55K&$l$K&&u#5K@!#"'+"&5"/&547632K%K&56$K55K$l$K&&#76%%53'K&&%@4AA4&&K&45&%%u'5K"#"'&54?63246;2632K%u'45%u&&J'45%&L44L&%54'K%5%t%%$65&K%%4LL4@&%%K',"&5#"#"'.'547!34624&bqb>#  5&44& 6Uue7D#  "dž&/#!"&546262"/"/&47'&463!2 &@&&4L  r&4  r L&& 4&&&L rI@& r  L4&& s/"/"/&47'&463!2#!"&546262&4  r L&& &@&&4L  r@@& r  L4&& 4&&&L r##!+"&5!"&=463!46;2!28(`8((8`(88(8((8(8 (8`(88(8((8(88(`8#!"&=463!28(@(88((8 (88((88z5'%+"&5&/&67-.?>46;2%6.@g.L44L.g@. .@g. L44L .g@.g.n.4LL43.n.gg.n.34LL4͙.n.g -  $54&+";264'&+";26/a^    ^aa fm  @ J%55!;263'&#"$4&#"32+#!"&5#"&5463!"&46327632#!2$$8~+(888(+}(`8((8`]]k==k]]8,8e8P88P8`(88(@MMN4&#"327>76$32#"'.#"#"&'.54>54&'&54>7>7>32&z&^&./+>+)>J> Wm7' '"''? &4&c&^|h_bml/J@L@#* #M6:D 35sҟw$ '% ' \t3#!"&=463!2'.54>54''  @ 1O``O1CZZ71O``O1BZZ7@  @ N]SHH[3`)TtbN]SHH[3^)Tt!1&' 547 $4&#"2654632 '&476 ==嘅}(zVl''ٌ@uhyyhu9(}VzD##D# =CU%7.5474&#"2654632%#"'&547.'&476!27632#76$7&'7+NWb=嘧}(zVj\i1  z,X Y[6 $!%'FuJiys?_9ɍ?kyhun(}Vz YF  KA؉La  02-F"@Qsp@_!3%54&+";264'&+";26#!"&'&7>2    #%;"";%#`,@L 5 `   `  L`4LH` `   a 5 L@ #37;?Os!!!!%!!!!%!!!!!!!!%!!4&+";26!!%!!!!74&+";26%#!"&546;546;2!546;232 `@ `@ @@ @ @  @  @  @  @ L44LL4^B@B^^B@B^4L  @@@@    @@   @@    M4LL44L`B^^B``B^^B`L7q.+"&=46;2#"&=".'673!54632#"&=!"+"&=46;2>767>3!546327>7&54>$32dFK1A  0) L.٫C58.H(Ye#3C $=463!22>=463!2#!"&5463!2#!"&5463!2H&&/7#"&463!2!2LhLLhLhLLh! &&&&& &4hLLhLLhLLhL%z< 0&4&& )17&4& &&#!"&5463!2!2\@\\@\\@\\\\ W*#!"&547>3!2!"4&5463!2!2W+B"5P+B@"5^=\@\ \H#t3G#3G:_Ht\\ @+32"'&46;#"&4762&&4&&44&&44&&4@"&=!"'&4762!54624&&44&&44&&4&& !!!3!!0@67&#".'&'#"'#"'32>54'6#!"&5463!28ADAE=\W{O[/5dI kDtpČe1?*w@www (M& B{Wta28r=Ku?RZ^GwT -@www$2+37#546375&#"#3!"&5463ww/Dz?swww@wS88 ww#'.>4&#"26546326"&462!5!&  !5!!=!!%#!"&5463!2B^8(Ԗ>@|K55KK55K^B(8ԖԖ€>v5KK55KKHG4&"&#"2654'32#".'#"'#"&54$327.54632@pp)*Pppp)*Pb '"+`N*(a;2̓c`." b PTY9ppP*)pppP*)b ".`(*Nͣ2ͣ`+"' b MRZB4&"24&"264&"26#"/+"&/&'#"'&547>7&/.=46?67&'&547>3267676;27632#"&'"'#"'&547&'&=4767&547>32626?2#"&'"'#"'&547&'&=4767&547>32626?2ԖLhLKjKLhLKjK "8w s%(  ")v  >  "8x s"+  ")v  <  3zLLz3 3>8L3)x3 3zLLz3 3>8L3)x3 ԖԖ4LL45KK54LL45KK #)0C wZ l/ Y N,& #)0C vZl. Y L0"qG^^Gqq$ ]G)FqqG^^Gqq$ ]G)Fq%O#"'#"&'&4>7>7.546$ '&'&'# '32$7>54'VZ|$2 $ |E~E<| $ 2$|ZV:(t}X(  &%(Hw쉉xH(%& (XZT\MKG<m$4&"24&#!4654&#+32;254'>4'654&'>7+"&'&#!"&5463!6767>763232&4&&4N2`@`%)7&,$)' %/0Ӄy#5 +1 &<$]`{t5KK5$e:1&+'3TF0h4&&4&3M:;b^v+D2 5#$IIJ 2E=\$YJ!$MCeM-+(K55KK5y*%Au]c>q4&"24&'>54'654&'654&+"+322654&5!267+#"'.'&'&'!"&5463!27>;2&4&&4+ 5#bW0/% ')$,&7)%`@``2Nh0##T3'"( 0;e$5KK5 tip<& 1&4&&4&#\=E2&%IURI$#5 2D+v^b;:M2gc]vDEA%!bSV2MK55K(,,MeCM$!I@#"&547&547%6@?V8 b% I)94.""'." 67"'.54632>32+C`\hxeH>Hexh\`C+ED4 #LoP$$Po>Q|I.3MCCM3.I|Q/Z$_dC+I@$$@I+ (@%#!"&5463!2#!"3!:"&5!"&5463!462 ww@  B^^B  4&@&&&4 `  ww   ^B@B^ 24& && &%573#7.";2634&#"35#347>32#!"&5463!2FtIG9;HIxI<,tԩw@wwwz4DD43EEueB&#1s@www .4&"26#!+"'!"&5463"&463!2#2&S3 Ll&c4LL44LL4c@& &{LhLLhL'?#!"&5463!2#!"3!26546;2"/"/&47'&463!2www@B^^B@B^@&4t  r &&`ww@w@^BB^^B@R&t r  4&&@"&5!"&5463!462 #!"&54&>3!2654&#!*.54&>3!24&@&&&4 sw  @B^^B  @w4& && &3@w   ^BB^    I&5!%5!>732#!"&=4632654&'&'.=463!5463!2!2JJSq*5&=CKuuKC=&5*q͍S8( ^B@B^ (8`N`Ѣ΀GtO6)"M36J[E@@E[J63M")6OtG(8`B^^B`8 ',26'&'&76'6'&6&'&6'&4#"7&64 654'.'&'.63226767.547&7662>76#!"&5463!2  /[  . =XĚ4,+"  * +, 1JH'5G:: #L5+@=&#w@wwwP.1GE,ԧ4 4+ ; /5cFO:>JJ>:O9W5$@(b 4 @www'?$4&"2$4&"2#!"&5463!3!267!2#!#!"&5!"'&762&4&&4&&4&&48(@(88(c==c(8*&&*6&4&&4&&4&&4& (88(@(88HH88`(@&&('@1c4&'.54654'&#"#"&#"32632327>7#"&#"#"&54654&54>76763232632   N<;+gC8A`1a99gw|98aIe$IVNz<:LQJ  ,-[% 061I()W,$-7,oIX()oζA;=N0 eTZ  (O#".'&'&'&'.54767>3232>32 e^\4?P bMO0# 382W# & 9C9 Lĉ" 82<*9FF(W283 #0OMb P?4\^e FF9*<28 "L 9C9 & #!"3!2654&#!"&5463!2`B^^B@B^^ީwww@w^BB^^B@B^ww@w#!72#"' #"'.546763YY !''!0#GG$/!''!&UUjZ 8""8  X! 8" "8 GW4.'.#"#".'.'.54>54.'.#"32676#!"&5463!2 1.- +$)  c8 )1)  05.D <90)$9w@wwwW  )1) 7c  )$+ -.1 9$)0< D.59@www,T1# '327.'327.=.547&54632676TC_LҬ#+i!+*pDNBN,y[`m`%i]hbEm}a u&,SXK &$f9s? _#"!#!#!54632V<%'ЭHH (ںT\dksz &54654'>54'6'&&"."&'./"?'&546'&6'&6'&6'&6'&74"727&6/a49[aA)O%-j'&]]5r-%O)@a[9' 0BA; + >HCU  #  $  2  AC: oM=a-6OUwW[q ( - q[WwUP6$C +) (  8&/ &eMa  & $      %+"&54&"32#!"&5463!54 &@&Ԗ`(88(@(88(r&&jj8((88(@(8#'+2#!"&5463"!54&#265!375!35!B^^BB^^B   `^B@B^^BB^  ` !="&462+"&'&'.=476;+"&'&$'.=476; pppp$!$qr % }#ߺppp!E$ rqܢ# % ֻ!)?"&462"&4624&#!"3!26!.#!"#!"&547>3!2/B//B//B//B @   2^B@B^\77\aB//B//B//B/@    ~B^^B@2^5BB52.42##%&'.67#"&=463! 25KK5L4_u:B&1/&.- zB^^B4LvyKjK4L[!^k'!A3;):2*547&5462;U gIv0ZZ0L4@Ԗ@4L2RX='8P8'=XR U;Ig0,3lb??bl34LjjL4*\(88(\}I/#"/'&/'&?'&'&?'&76?'&7676767676` (5 )0 ) *) 0) 5(  (5 )0 )))) 0) 5( *) 0) 5(  )5 )0 )**) 0) 5)  )5 )0 )*5h$4&"24&#!4>54&#"+323254'>4'654&'!267+#"'&#!"&5463!2>767>32!2&4&&4N2$YGB (HGEG HQ#5K4Li!<;5KK5 A# ("/?&}vh4&&4&3M95S+C=,@QQ9@@IJ 2E=L5i>9eME;K55K J7R>@#zD<5=q%3#".'&'&'&'.#"!"3!32>$4&"2#!"#"&?&547&'#"&5463!&546323!2` #A<(H(GY$2NL4K5#aWTƾh&4&&4K5;=!ihv}&?/"( #A  5K2*! Q@.'!&=C+S59M34L=E2 JI UR@@&4&&4&5K;ELf9>igR7J K5h4&"24#"."&#"4&#"".#"!54>7#!"&54.'&'.5463246326326&4&&4IJ 2E=L43M95S+C=,@QQ9@@E;K55K J7R>@#zD9eMZ4&&4&<#5K4LN2$YGB (HGEG HV;5KK5 A# ("/?&}vhi!<4<p4.=!32>332653272673264&"2/#"'#"&5#"&54>767>5463!2@@2*! Q@.'!&=C+S59M34L.9E2 JI UR&4&&4&Lf6Aig6Jy#@>R7J K55K;E@TƾH #A<(H(GY$2NL4K#5#a=4&&4&D=ihv}&?/"( #A  5KK5;+54&#!764/&"2?64/!26 $$ & [6[[j6[&^aa@&4[[6[[6&+^aa+4/&"!"3!277$ $$ [6[ &&[6j[ ^aae6[j[6&&4[j[^aa+4''&"2?;2652?$ $$ [6[[6&&4[^aaf6j[[6[ &&[^aa+4/&"4&+"'&"2? $$ [6&&4[j[6[j^aad6[&& [6[[j^aa   $2>767676&67>?&'4&'.'.'."#&6'&6&'3.'.&'&'&&'&6'&>567>#7>7636''&'&&'.'"6&'6'..'/"&'&76.'7>767&.'"76.7"7"#76'&'.'2#22676767765'4.6326&'.'&'"'>7>&&'.54>'>7>67&'&#674&7767>&/45'.67>76'27".#6'>776'>7647>?6#76'6&'676'&67.'&'6.'.#&'.&6'&.5/a^D&"      4   $!   #          .0"Y +  !       $     "  +       Α      ^aa                        P   ' -( # * $  "  !     * !   (         $      2 ~/$4&"2 #"/&547#"32>32&4&&4V%54'j&&'/덹:,{ &4&&4&V%%l$65&b'Cr! " k[G +;%!5!!5!!5!#!"&5463!2#!"&5463!2#!"&5463!2&&&&&&&&&&&&@&&&&&&&&&&&&{#"'&5&763!2{' **)*)'/!5!#!"&5!3!26=#!5!463!5463!2!2^B@B^&@&`^B`8(@(8`B^ B^^B&&B^(88(^G 76#!"'&? #!"&5476 #"'&5463!2 '&763!2#"'c)'&@**@&('c (&*cc*&' *@&('c'(&*cc*&('c'(&@*19AS[#"&532327#!"&54>322>32"&462 &6 +&'654'32>32"&462QgRp|Kx;CByy 6Fe= BPPB =eF6 ԖV>!pRgQBC;xK|Ԗ{QNa*+%xx5eud_C(+5++5+(C_due2ԖԖ>NQ{u%+*jԖԖp!Ci4/&#"#".'32?64/&#"327.546326#"/&547'#"/&4?632632(* 8( !)(A(')* 8( !USxySSXXVzxTTUSxySSXXVzxT@(  (8 *(('( (8 SSUSx{VXXTTSSUSx{VXXT#!"5467&5432632t,Ԟ;F`j)6,>jK?s !%#!"&7#"&463!2+!'5#8EjjE8@&&&&@XYY&4&&4&qDS%q%N\jx2"&4#"'#"'&7>76326?'&'#"'.'&676326326&'&#"32>'&#"3254?''74&&4&l NnbSVZ bRSD zz DSRb)+USbn \.2Q\dJ'.2Q\dJ.Q2.'Jd\Q2.'Jd`!O` ` &4&&4r$#@B10M5TNT{L5T II T5L;l'OT4M01B@#$*3;$*3;;3*$;3*$: $/ @@Qq`@"%3<2#!"&5!"&5467>3!263! !!#!!46!#!(88(@(8(8(`((8D<++<8(`(8(`8(@(88( 8((`(8((<`(8(``(8||?%#"'&54632#"'&#"32654'&#"#"'&54632|udqܟs] = OfjL?R@T?"& > f?rRX=Edudsq = _MjiL?T@R?E& f > =XRr?b!1E)!34&'.##!"&5#3463!24&+";26#!"&5463!2 08((88(@(8  8((88((`(1  `(88((88(@  `(88(@(8(`#!"&5463!2w@www`@www/%#!"&=463!2#!"&=463!2#!"&=463!2&&&&&&&&&&&&&&&&&&&&&&&&@'7G$"&462"&462#!"&=463!2"&462#!"&=463!2#!"&=463!2ppppppp @   ppp @    @   Рpppppp  ppp    <L\l|#"'732654'>75"##5!!&54>54&#"'>3235#!"&=463!2!5346=#'73#!"&=463!2#!"&=463!2}mQjB919+i1$AjM_3</BB/.#U_:IdDRE @  k*Gj @   @   TP\BX-@8 C)5Xs J@$3T4+,:;39SG2S.7<  vcc)) %Ll}    5e2#!"&=463%&'&5476!2/&'&#"!#"/&'&=4'&?5732767654'&@02uBo  T25XzrDCBBEh:%)0%HPIP{rQ9f#-+>;I@KM-/Q"@@@#-bZ $&P{<8[;:XICC>.'5oe80#.0(  l0&%,"J&9%$<=DTIcs&/6323276727#"327676767654./&'&'737#"'&'&'&54'&54&#!"3!260% <4"VRt8<@< -#=XYhW8+0$"+dTLx-'I&JKkmuw<=V@!X@ v '|N;!/!$8:IObV;C#V  &   ( mL.A:9 !./KLwPM$@@ /?O_o%54&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!2654&#!"3!26#!"&5463!2@@@@@@@@@^BB^^B@B^NB^^B@B^^#+3 '$"/&4762%/?/?/?/?%k*66bbbb|<<<bbbbbbbb%k66Ƒbbb<<<<^bbbbbb@M$4&"2!#"4&"2&#"&5!"&5#".54634&>?>;5463!2LhLLh LhLLhL! 'ԖԖ@' !&  ?&&LhLLhL hLLhL jjjj &@6/" &&J#"'676732>54.#"7>76'&54632#"&7>54&#"&54$ ok; -j=yhwi[+PM 3ѩk=J%62>VcaaQ^ ]G"'9r~:`}Ch 0=Z٤W=#uY2BrUI1^Fk[|aL2#!67673254.#"67676'&54632#"&7>54&#"#"&5463ww+U ,iXբW<"uW1AqSH1bdww'74'!3#"&46327&#"326%35#5##33#!"&5463!20U6cc\=hlࠥYmmnnnnw@wwww&46#Ȏ;edwnnnnn@www ]#/#"$&6$3 &#"32>7!5!%##5#5353Еttu{zz{SZC` cot*tq||.EXN#?? ,<!5##673#$".4>2"&5!#2!46#!"&5463!2rM* *M~~M**M~~M*jjj&&&&`P%挐|NN||NN|*jjjj@&&&&@ "'&463!2@4@&Z4@4&@ #!"&4762&&4Z4&&4@@ "'&4762&4@4&@&4&@ "&5462@@4&&44@&&@ 3!!%!!26#!"&5463!2`m` ^BB^^B@B^  `@B^^BB^^@ "'&463!2#!"&4762@4@&&&&44@4&Z4&&4@ "'&463!2@4@&4@4&@ #!"&4762&&4Z4&&4@:#!"&5;2>76%6+".'&$'.5463!2^B@B^,9j9Gv33vG9H9+bI\ A+=66=+A [">nSMA_:B^^B1&c*/11/*{'VO3@/$$/@*?Nh^l+!+"&5462!4&#"!/!#>32]_gTRdgdQV?U I*Gg?!2IbbIJaaiwE3300 084#"$'&6?6332>4.#"#!"&54766$32z䜬m IwhQQhbF*@&('kz   _hQнQGB'(&*eoz(q!#"'&547"'#"'&54>7632&4762.547>32#".'632%k'45%&+~(  (h  &  \(  (  &  ~+54'k%5%l%%l$65+~  &  (  (\  &  h(  (~+%'!)19K4&"24&"26.676&$4&"24&"24&"2#!"'&46$ KjKKj KjKKje2.e<^P,bKjKKjKjKKj KjKKj##LlLKjKKjK jKKjK~-M7>7&54$ LhяW.{+9E=cQdFK1A  0) pJ2`[Q?l&٫C58.H(Y':d 6?32$64&$ #"'#"&'&4>7>7.546'&'&'# '32$7>54'Yj`a#",5NK ~EVZ|$2 $ |: $ 2$|ZV:(t}hfR88T h̲X(  &%(Hw(%& (XZT\MKG{x|!#"'.7#"'&7>3!2%632u  j H{(e 9 1bU#!"&546;5!32#!"&546;5!32#!"&546;5463!5#"&5463!2+!2328((88(``(88((88(``(88((88(`L4`(88(@(88(`4L`(8 (88(@(88((88(@(88((88(@(84L8(@(88((8L48OY"&546226562#"'.#"#"'.'."#"'.'.#"#"&5476$32&"5462И&4&NdN!>! 1X:Dx+  +ww+  +xD:X1 -U !*,*&4&hh&&2NN2D &  ..J< $$ 767#"&'"&547&547&547.'&54>2l4  2cKEooED ) ) Dg-;</- ?.P^P.? -/<;-gYY  .2 L4H|O--O|HeO , , Oeq1Ls26%%4.2,44,2.4%%62sL1qcqAAq4#!#"'&547632!2#"&=!"&=463!54632  @  `     ` ?`   @  @  !    54&+4&+"#"276#!"5467&5432632   `  _ v,Ԝ;G_j)``    _ ԟ7 ,>jL>54'&";;265326#!"5467&5432632    v,Ԝ;G_j) `   `7 ,>jL>X`$"&462#!"&54>72654&'547 7"2654'54622654'54&'46.' &6 &4&&4&yy %:hD:FppG9Fj 8P8 LhL 8P8 E; Dh:% >4&&4&}yyD~s[4Dd=PppP=d>hh>@jY*(88(*Y4LL4Y*(88(*YDw" A4*[s~>M4&"27 $=.54632>32#"' 65#"&4632632 65.5462&4&&4G9& <#5KK5!!5KK5#< &ܤ9Gpp&4&&4&@>buោؐ&$KjKnjjKjK$&jjb>Ppp %!5!#"&5463!!35463!2+32@\\8(@(8\@@\\@\(88(\@ 34#"&54"3#!"&5!"&5>547&5462;U gI@L4@Ԗ@4L2RX='8P8'=XR U;Ig04LjjL4*\(88(\@"4&+32!#!"&+#!"&5463!2pP@@Pjj@@\@\&0pj \\&-B+"&5.5462265462265462+"&5#"&5463!2G9L44L9G&4&&4&&4&&4&&4&L44L &=d4LL4 d=&&`&&&&`&&&&4LL4  &#3CS#!"&5463!2!&'&!"&5!463!2#!"&52#!"&=4632#!"&=463(8((88((`x c`(8@@@`((88(@(8(D 9 8(`@@@@@/?O_o-=%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!!5463!2#!"&5463!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ &&&&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @   `&&&& /?O_o%+"&=46;25+"&=46;2+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2%+"&=46;2+"&=46;2%+"&=46;2+"&=46;2!!#!"&=!!5463!24&+"#54&+";26=3;26%#!"&5463!463!2!2 @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @  @ 8(@(8 @  @  @  @  @ &&&@8((8@&@  @ @  @  @  @ @  @ @  @ @  @ @  @ @  @ @  @  @  @  (88(  @  ``   `` -&&& (88(&@<c$4&"2!#4&"254&+54&+"#";;26=326+"&5!"&5#"&46346?>;463!2KjKKjKjKKj&ԖԖ&&@&&KjKKjK jKKjK .&jjjj&4&@@&&#'1?I54&+54&+"#";;26=326!5!#"&5463!!35463!2+32 \\8(@(8\ \\@\(88(\: #32+53##'53535'575#5#5733#5;2+3@E&&`@@` `@@`&&E%@`@ @ @      @ 0 @!3!57#"&5'7!7!K5@   @5K@@@ #3%4&+"!4&+";265!;26#!"&5463!2&&&&&&&&w@www&&@&&&&@&&@www#354&#!4&+"!"3!;265!26#!"&5463!2&&&&&@&&@&w@www@&@&&&&&&@&:@www-M3)$"'&4762 "'&4762 s 2  .   2 w 2  .   2 w 2    2  ww  2    2  ww M3)"/&47 &4?62"/&47 &4?62S .  2 w 2   .  2 w 2  M . 2    2 .  . 2    2 .M3S)$"' "/&4762"' "/&47623 2  ww  2    2  ww  2    2 w 2   .v 2 w 2   .M3s)"'&4?62 62"'&4?62 623 .  . 2    2 .  . 2    2 .   2 w 2v .   2 w 2-Ms3 "'&4762s w 2  .   2 ww  2    2 MS3"/&47 &4?62S .  2 w 2  M . 2    2 .M 3S"' "/&47623 2  ww  2   m 2 w 2   .M-3s"'&4?62 623 .  . 2    2- .   2 w 2/4&#!"3!26#!#!"&54>5!"&5463!2  @ ^B && B^^B@B^ @  MB^%Q= &&& $$ (r^aa(^aa!C#!"&54>;2+";2#!"&54>;2+";2pPPpQh@&&@j8(PppPPpQh@&&@j8(Pp@PppPhQ&&j (8pPPppPhQ&&j (8p!C+"&=46;26=4&+"&5463!2+"&=46;26=4&+"&5463!2Qh@&&@j8(PppPPpQh@&&@j8(PppPPp@hQ&&j (8pPPppP@hQ&&j (8pPPpp@@ #+3;G$#"&5462"&462"&462#"&462"&462"&462"&462#"&54632K54LKj=KjKKjKjKKjL45KKjK<^^^KjKKjppp\]]\jKL45KjKKjKujKKjK4LKjKK^^^jKKjKpppr]]\  $$ ^aaQ^aa,#"&5465654.+"'&47623   #>bqb&44&ɢ5"  #D7euU6 &4&m 1X".4>2".4>24&#""'&#";2>#".'&547&5472632>3=T==T==T==T=v)GG+v@bRRb@=&\Nj!>3lkik3hPTDDTPTDDTPTDDTPTDD|x xXK--K|Mp<# )>dA{RXtfOT# RNftWQ,%4&#!"&=4&#!"3!26#!"&5463!2!28(@(88((88((8\@\\@\\(88(@(88(@(88@\\\\ u'E4#!"3!2676%!54&#!"&=4&#!">#!"&5463!2!2325([5@(\&8((88((8,9.+C\\@\ \6Z]#+#,k(88(@(88(;5E>:5E\\\ \1. $4@"&'&676267>"&462"&462.  > $$ n%%/02 KjKKjKKjKKjKfff^aayy/PccP/jKKjKKjKKjKffff@^aa$4@&'."'.7>2"&462"&462.  > $$ n20/%7KjKKjKKjKKjKfff^aa3/PccP/y jKKjKKjKKjKffff@^aa +7#!"&463!2"&462"&462.  > $$ &&&&KjKKjKKjKKjKfff^aa4&&4&jKKjKKjKKjKffff@^aa#+3C54&+54&+"#";;26=3264&"24&"2$#"'##"3!2@@KjKKjKKjKKjKܒ,gjKKjKKjKKjKXԀ,, #/;GS_kw+"=4;27+"=4;2'+"=4;2#!"=43!2%+"=4;2'+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;54;2!#!"&5463!2`````````````````````p`K55KK55Kp`````````````````````````5KK55KK@*V#"'.#"63232+"&5.5462#"/.#"#"'&547>32327676R?d^7ac77,9xm#@#KjK# ڗXF@Fp:f_ #WIpp&3z h[ 17q%q#::#5KKu't#!X: %#+=&>7p @ *2Fr56565'5&'. #"32325#"'+"&5.5462#"/.#"#"'&547>32327676@ͳ8 2.,#,fk*1x-!#@#KjK# ڗXF@Fp:f_ #WIpp&3z e`vo8t-  :5 [*#::#5KKu't#!X: %#+=&>7p  3$ "/&47 &4?62#!"&=463!2I.  2 w 2   -@). 2    2 . -@@-S$9%"'&4762  /.7> "/&47 &4?62i2  .   2 w E > u > .  2 w 2   2    2  ww !   h. 2    2 . ;#"'&476#"'&7'.'#"'&476' )'s "+5+@ա' )'F*4*Er4M:}}8 GO *4*~ (-/' #"'%#"&7&67%632B;>< V??V --C4 <B=cB5 !% %!b 7I))9I7 #"'.5!".67632y( #  ##@,( )8! !++"&=!"&5#"&=46;546;2!76232-SSS  SS``  K$4&"24&"24&"27"&5467.546267>5.5462 8P88P88P88P8P88P4,CS,4pp4,,4pp4,6d7AL*',4ppP88P8P88P8HP88P8`4Y&+(>EY4PppP4Y4Y4PppP4Y%*54&#"#"/.7!2<'G,')7N;2]=A+#H  0PRH6^;<T%-S#:/*@Z}   >h.%#!"&=46;#"&=463!232#!"&=463!2&&&@@&&&@&&&&&&&&&&&&f&&&&b#!"&=463!2#!"&'&63!2&&&&''%@% &&&&&&&&k%J%#/&'#!53#5!36?!#!'&54>54&#"'6763235 Ź}4NZN4;)3.i%Sin1KXL7觧*  #& *@jC?.>!&1' \%Awc8^;:+54&#"'6763235 Ź}4NZN4;)3.i%PlnEcdJ觧*  #& *-@jC?.>!&1' \%AwcBiC:D'P%! #!"&'&6763!2P &:&? &:&?5"K,)""K,)h#".#""#"&54>54&#"#"'./"'"5327654.54632326732>32YO)I-D%n  "h.=T#)#lQTv%.%P_ % %_P%.%vUPl#)#T=@/#,-91P+R[Ql#)#|'' 59%D-I)OY[R+P19-,##,-91P+R[YO)I-D%95%_P%.%v'3!2#!"&463!5&=462 =462 &546 &&&&&4&r&4&@&4&&4&G݀&&&&f s CK&=462 #"'32=462!2#!"&463!5&'"/&4762%4632e*&4&i76`al&4&&&&&}n  R   R zfOego&&5`3&&&4&&4& D R   R zv"!676"'.5463!2@@w^Cct~5  5~tcC&&@?JV|RIIR|V&&#G!!%4&+";26%4&+";26%#!"&546;546;2!546;232@@@@L44LL4^B@B^^B@B^4L  N4LL44L`B^^B``B^^B`LL4&"2%#"'%.5!#!"&54675#"#"'.7>7&5462!467%632&4&&4  @ o&&}c ;pG=(  8Ai8^^.   &4&&4&` ` fs&& jo/;J!# 2 KAE*,B^^B! ` $ -4&"2#"/&7#"/&767%676$!28P88PQr @ U @ {`PTP88P8P`  @U @rQ!6'&+!!!!2Ѥ 8̙e;<*@8 !GGGQII %764' 64/&"2 $$ f3f4:4^aaf4334f:4:^aa %64'&" 2 $$ :4f3f4F^aa4f44f^aa 764'&"27 2 $$ f:4:f4334^aaf4:4f3^aa %64/&" &"2 $$ -f44f4^aa4f3f4:w^aa@7!!/#35%!'!%j/d jg2|855dc b @! !%!!7!FG)DH:&H dS)U4&"2#"/ $'#"'&5463!2#"&=46;5.546232+>7'&763!2&4&&4f ]wq4qw] `dC&&:FԖF:&&Cd`4&&4& ]] `d[}&&"uFjjFu"&&y}[d#2#!"&546;4 +"&54&" (88(@(88( r&@&Ԗ8((88(@(8@&&jj'3"&462&    .  > $$ Ԗ>aX,fff^aaԖԖa>TX,,~ffff@^aa/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88((88((88((88((88/+"&=46;2+"&=46;2+"&=46;28((88((88((88((88((88((8 (88((88(88((88(88((885E$4&"2%&'&;26%&.$'&;276#!"&5463!2KjKKj   f  \ w@wwwjKKjK"G   ܚ  f   @www   $64'&327/a^ ! ^aaJ@%% 65/ 64'&"2 "/64&"'&476227<ij6j6u%k%~8p8}%%%k%}8p8~%<@% %% !232"'&76;!"/&76  ($>( J &% $%64/&"'&"2#!"&5463!2ff4-4ff4fw@wwwf4f-f4@www/#5#5'&76 764/&"%#!"&5463!248` # \P\w@www4`8  #@  `\P\`@www)4&#!"273276#!"&5463!2& *f4 'w@www`&')4f*@www%5 64'&"3276'7>332#!"&5463!2`'(wƒa8! ,j.( &w@www`4`*'?_`ze<  bw4/*@www-.  6 $$  (r^aaO(_^aa -"'&763!24&#!"3!26#!"&5463!2yB(( @   w@www]#@##   @ @www -#!"'&7624&#!"3!26#!"&5463!2y((@B@u @   w@www###@  @ @www -'&54764&#!"3!26#!"&5463!2@@####@w@wwwB((@@www`%#"'#"&=46;&7#"&=46;632/.#"!2#!!2#!32>?6#  !"'?_  BCbCaf\ + ~2   }0$  q 90r p r%D p u?#!"&=46;#"&=46;54632'.#"!2#!!546;2D a__ g *`-Uh1    ߫}   $^L  4b+"&=.'&?676032654.'.5467546;2'.#"ǟ B{PDg q%%Q{%P46'-N/B).ĝ 9kC< Q 7>W*_x*%K./58`7E%_ ,-3  cVO2")#,)9;J) "!* #VD,'#/&>AX>++"''&=46;267!"&=463!&+"&=463!2+32Ԫ$   pU9ӑ @/*f o  VRfq f=SE!#"&5!"&=463!5!"&=46;&76;2>76;232#!!2#![       % )   "  Jg Uh BW&WX hU g 84&#!!2#!!2#!+"&=#"&=46;5#"&=46;463!2j@jo g|@~vv u n#467!!3'##467!++"'#+"&'#"&=46;'#"&=46;&76;2!6;2!6;232+32QKt# #FNQo!"դѧ !mY Zga~bm] [o"U+, @h h@@X hh @83H\#5"'#"&+73273&#&+5275363534."#22>4.#2>ut 3NtRP*Ho2 Lo@!R(Ozh=,GID2F 8PuE>.'%&TeQ,jm{+>R{?jJrL6V @`7>wmR1q uWei/rr :Vr" $7V4&#"326#"'&76;46;232!5346=#'73#"'&'73267##"&54632BX;4>ID2F +>R{8PuE>.'%&TeQ,jm{?jJrL6 @`rr :Vr3>wmR1q uWei@ \%4&#"326#!"&5463!2+".'&'.5467>767>7>7632!2&%%&&&& &7.' :@$LBWM{#&$h1D!  .I/! Nr&&%%&&&&V?, L=8=9%pEL+%%r@W!<%*',<2(<&L,"r@ \#"&546324&#!"3!26%#!#"'.'.'&'.'.546767>;&%%&&&& &i7qN !/I.  !D1h$&#{MWBL$@: '.&&%%&&&&=XNr%(M&<(2<,'*%<!W@r%%+LEp%9=8=L  +=\d%54#"327354"%###5#5#"'&53327#"'#3632#"'&=4762#3274645"=424'.'&!  7>76#'#3%54'&#"32763##"'&5#327#!"&5463!2BBPJNC'%! B? )#!CC $)  54f"@@ B+,A  A+&+A  ZK35N # J!1331CCC $)w@www2"33FYF~(-%"o4*)$(* (&;;&&9LA3  8334S,;;,WT+<<+T;(\g7x:&&::&&<r%-@www  +=[c}#"'632#542%35!33!3##"'&5#327%54'&#"5#353276%5##"=354'&#"32767654"2 '.'&547>76 3#&'&'3#"'&=47632%#5#"'&53327''RZZ:kid YYY .06 62+YY-06 R[!.'CD''EH$VVX::Y X;:Y fyd/%jG&DC&&CD&O[52. [$C-D..D^^* ly1%=^I86i077S 3 $EWgO%33%OO%35 EEFWt;PP;pt;PP;pqJgTFQ%33&PP%33%R 7>%3!+}{'+"&72'&76;2+"'66;2U &  ( P *'eJ."-dZ-n -'74'&+";27&+";276'56#!"&5463!2~} 7e  ۩w@www"  $Q #'!# @www I-22#!&$/.'.'.'=&7>?>369II ! ' $ !01$$%A' $ ! g  \7@)(7Y   \7@)(7Y @ '5557 ,VWQV.RW=?l%l`~0  !#!#%777 5! R!!XCCfff݀# `,{{{`Og4&"2 &6 $"&462$"&62>7>7>&46.'.'. '.'&7>76 Ԗ HR6L66LGHyU2L  L2UyHHyU2L  L2UyHn X6X  XX ԖԖH6L66L6 L2UyHHyU2L  L2UyHHyU2L n6X  XX  2#!"&54634&"2$4&"2ww@ww||||||w@www||||||| !3 37! $$ n6^55^h ^aaM1^aaP *Cg'.676.7>.'$7>&'.'&'? 7%&'.'.'>767$/u5'&$I7ob?K\[zH,1+.@\7':Yi4&67&'&676'.'>7646&' '7>6'&'&7>7#!"&5463!2PR$++'TJXj7-FC',,&C ."!$28 h /" +p^&+3$ i0(w@www+.i6=Bn \C1XR:#"'jj 8Q.cAj57!? "0D$4" P[ & 2@wwwD"%.5#5>7>;!!76PYhpN!HrD0M C0N#>8\xx: W]oW-X45/%'#.5!5!#"37>#!"&5463!2p>,;$4 5eD+WcEw@wwwK()F ,VhV^9tjA0/@www@#"'&76;46;23   &  ++"&5#"&7632  ^  c  & @#!'&5476!2 &  ^  b '&=!"&=463!546  &    q&8#"'&#"#"5476323276326767q'T1[VA=QQ3qqHih"-bfGw^44O#A?66%CKJA}} !"䒐""A$@C3^q|z=KK?6 lk)  %!%!VVuuu^-m5w}n~7M[264&"264&"2"&546+"&=##"&5'#"&5!467'&766276#"&54632    *<;V<<O@-K<&4'>&4.'.'.'.'.'&6&'.'.6767645.'#.'6&'&7676"&'&627>76'&7>'&'&'&'&766'.7>7676>76&6763>6&'&232.'.6'4."7674.'&#>7626'.'&#"'.'.'&676.67>7>5'&7>.'&'&'&7>7>767&'&67636'.'&67>7>.'.67 \  U7  J#!W! '  " ';%  k )"    '   /7*   I ,6 *&"!   O6* O $.( *.'  .x,  $CN      * 6   7%&&_f& ",VL,G$3@@$+ "  V5 3"  ""#dA++ y0D- %&n 4P'A5j$9E#"c7Y 6" & 8Z(;=I50 ' !!e  R   "+0n?t(-z.'< >R$A"24B@( ~ 9B9, *$        < > ?0D9f?Ae  .(;1.D 4H&.Ct iY% *  7      J  <    W 0%$  ""I! *  D  ,4A'4J" .0f6D4pZ{+*D_wqi;W1G("% %T7F}AG!1#%  JG 3  '.2>Vb%&#'32&'!>?>'&' &>"6&#">&'>26 $$ *b6~#= XP2{&%gx| .W)oOLOsEzG< CK}E $MFD<5+ z^aa$MWM 1>]|YY^D եA<KmE6<" @9I5*^aa>^4./.543232654.#"#".#"32>#"'#"$&547&54632632':XM1h*+D($,/9p`DoC&JV;267676&#!"&=463!267 #!"'&5463!26%8#! &&Z"M>2! ^I 7LRx_@>MN""`=&&*%I},  L7_jj9/%4&#!"3!264&#!"3!26#!"&5463!2  &&&&&&&&19#"'#++"&5#"&5475##"&54763!2"&4628(3- &B..B& -3(8IggI`(8+Ue&.BB.&+8(kk`%-"&5#"&5#"&5#"&5463!2"&4628P8@B\B@B\B@8P8pPPp@`(88(`p.BB.0.BB.(88(Pppͺ!%>&'&#"'.$ $$ ^/(V=$<;$=V).X^aaJ`"(("`J^aa,I4."2>%'%"/'&5%&'&?'&767%476762%6[՛[[՛o ܴ   $ $ " $ $  ՛[[՛[[5` ^ ^ 2` `2 ^ ^ ` 1%#"$54732$%#"$&546$76327668ʴhf킐&^zs,!V[vn) 6<ׂf{z}))Ns3(@ +4&#!"3!2#!"&5463!2#!"&5463!2@&&&f&&&&@&&&&4&&4&@&&&&&&&& `BH+"/##"./#"'.?&5#"&46;'&462!76232!46 `&C6@Bb03eI;:&&&4L4&F Z4&w4) '' 5r&4&&4&&4}G#&/.#./.'&4?63%27>'./&'&7676>767>?>%6})(."2*&@P9A #sGq] #lh<* 46+(  < 5R5"*>%"/ +[>hy  K !/Ui%6&'&676&'&6'.7>%.$76$% $.5476$6?62'.76&&'&676%.76&'..676#"NDQt -okQ//jo_  %&JՂYJA-.-- 9\DtT+X?*<UW3' 26$>>W0 {"F!"E    ^f`$"_]\<`F`FDh>CwlsJ@ ;=?s  :i_^{8+?` ) O`s2RDE58/Kr #"'>7&4$&5mī"#̵$5$"^^W=acE*czk./"&4636$7.'>67.'>65.67>&/>z X^hc^O<q+f$H^XbVS!rȇr?5GD_RV@-FbV=3! G84&3Im<$/6X_D'=NUTL;2KPwtPt=  &ռ ,J~S/#NL,8JsF);??1zIEJpqDIPZXSF6\?5:NR=;.&1 +!"&=!!%!5463!2sQ9Qs***sQNQsBUw wUBFHCCTww%1#"&=!"&=463!54632.  6 $$     ` ?(r^aa    (_^aa%1#!#"'&47632!2.  6 $$   @  ` (r^aa  ?  @  (_^aa/#"'&476324&#!"3!26#!"&5463!2&@& @   w@www& @B@ &  @ @www"&462  >& $$ Ԗ*(r^aaԖԖ (^aa]6#"$54732>%#"'!"&'&7>32'!!!2f:лѪz~u: ((%`V6B^hD%i(]̳ޛ *>6߅r#! 3?^BEa߀#9#36'&632#"'&'&63232#!"&5463!2 Q,&U #+' ;il4L 92<D`w@www`9ܩ6ɽ ]`C477&@wwwD+"&5#"'&=4?5#"'&=4?546;2%6%66546;2  wwwwcB G]B Gty]ty #3C#!+"&5!"&=463!46;2!24&#!"3!26#!"&5463!2@`@`^BB^^B@B^www@w@`@`2@B^^BB^^ww@w'/?P+5#"&547.467&546;532!764'!"+32#323!&ln@ :MM: @nY*Yz--zY*55QDDU9pY-`]]`.X /2I$ t@@/!!/@@3,$,3$p$00&*0&& !P@RV2#"&/#"&/#"&546?#"&546?'&54632%'&54632763276%>S]8T;/M77T7%>ww@ww!"5bBBb// * 8(@(87)(8=%/' #?w@www#~$EE y &L(88e):8(%O r    O?GQaq47&67>&&'&67>&"$32#"#"'654  $&6 $6&$ CoL.*K  Px.* iSƓ i 7J ?~pi{_Я;lLUZ=刈刈_t'<Z :!   @! j`Q7  $ky, Rfk*4LlL=Z=刈&$&546$7%7&'5>]5%w&P?zrSF!| &0 ##!"&5#5!3!3!3!32!546;2!5463) );));;))&&&@@&&&  6 $&727"'%+"'&7&54767%&4762֬>4P t+8?::  ::A W` `EvEEvE<."e$IE&O &EI&{h.`m"&#"&'327>73271[ >+)@ (]:2,C?*%Zx/658:@#N C= E(oE=W'c:#!#"$&6$3 &#"32>7! ڝyy,{ۀہW^F!LC=y:yw߂0H\R%"N^ '&76232762$"&5462"&46274&"&'264&#"'&&#"32$54'>$ $&6$ G>>0yx14J55J5J44J5Fd$?4J55%6E#42F%$fLlLq>>11J44%&4Z%44J54R1F$Z-%45J521Z%F1#:ʎ 9LlL#Qa"'&7622762%"&5462"&546274&#"&'73264&#"'&&#"32654'>#!"&5463!2 55 **.>.-@-R.>.-@-<+*q6- -- 0OpoOxzRrqP6z~{{Prr^aa]054&"#"&5!2654632!#"&57265&'&#".'&'#"&5467%&4>7>3263232654.547'654'63277.'.*#">7?67>?>32#"'7'>3'>3235?KcgA+![,7*  2(-#=  /~[(D?G  |,)"# +)O8,+'6 y{=@0mI#938OAE` -  )y_/FwaH8j7=7?%a % %!?)L J 9=5]~pj  %(1$",I  $@((  +!.S -L__$'-9L 5V+ 6 T+6.8- $ 0 + t |S 16]&#"'&#"67>76'&'&#"67>32764.#"#.32>67>7 $&54>7>7>7rJ@ "kb2)W+ ,5/1   #   Z -!$IOXp7sLCF9vz NAG#/ 5|Հ';RKR/J#=$,9,+$UCS7'2"1  ! / ,   /--ST(::(ep4AM@=I>".)xΤlsY|qK@ %(YQ&N EHv~<Zx'#"&5467&6?2?'&"/.7.546326#"&'&/7264/7'764&"'?>>32.AUpIUxYE.A %%%h% %hJ%D,FZxULs TgxUJrVD %hJ%@/LefL.C %Jh%CV sNUxϠ@.FZyUHpVA %h&%% %Ji%CWpIUybJ/Uy^G,D %Jh%@U sMt UC %hJ%C-KfyEX[_gj&/&'.''67>7>7&'&'&'>76763>7>#&'&'767672'%'7'+"&'&546323267>7%#"'4'6767672,32,+DCCQLDf' % :/d B 4@ }  &!0$?Jfdf-.=6(:!TO? !IG_U% . k*.=; 5gN_X "  ##  292Q41   *6nA;| BS N.  %1$ 6 $nk^ '7GWgw2+"&5463#!"&5463!254&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26#"&=! B^^BB^^B:FjB^8((`( `(8^BB^^B@B^"vEj^B(8(`(8(/?O_o/?2#!"&5463;26=4&+";26=4&+";26=4&+";26=4&+"54&+";2654&+";2654&+";2654&+";2654&+";2654&#!"3!2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";2654&+";26@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`' "&5#"&5&4762!762$"&462B\B@B\BOpP.BB..BB.8$PO広3CQ#".54>32#".546322#"&#"#"54>%".54>32%2#"&54> &X=L|<&X=M{2r_-$$-_rUU%&&5%ő'- "'.546762@FF$@B@$.&,&.]]|q#<<#(BB B%'-%'-'%'-"'%&'"'%.5467%467%62@ll@ll,@GG&!@@@@@@!&+#+#6#+$*`:p:px p=`$>>$&@&@ @&p@ &.A!!"!&2673!"5432!%!254#!5!2654#!%!2#!8Zp?vdΊens6(N[RWu?rt1SrF|iZ@7މoy2IMC~[R yK{T:%,AGK2#!"&5463!!2654'654.#532#532"&5!654&#"327#2#>!!ww@ww~uk'JTMwa| DH> I1q Fj?w@wwwsq*4p9O*¸Z^qh LE "(nz8B M'?"&4624&#"'.'324&#"3267##"&/632632.ʏhhMALR vGhг~~K „yO^   ʏʏВ*LM@!שwwȍde)qrOPqȦs:03=7'.?67'67%'>&%'7%7./6D\$>  "N,?a0#O 1G9'/P(1#00  ($=!F "9|]"RE<6 'o9%8J$\ :\HiTe<?}V#oj? d,6%N#" HlSVY]C =@C4&"2!.#!"4&"2+"&=!"&=#"&546;>3!232^^^Y ^^^`pppp`]ibbi]~^^^e^^^PppPPppP]^^]3;EM2+"&=!"&=#"&546;>;5463!232264&"!.#!"264&" ]`pppp`]ibbi^^^dY !^^^]@PppP@@PppP@]^^] ^^^e^^^ 3$#!#!"&5467!"&47#"&47#"&4762++&2 $$ 2&&&4&&Z4&&##&&4&4&44&m4&m+DP4'&#"32763232674'&!"32763 3264'&$#"32763232> $$ g* o`#ə0#z#l(~̠) -g+^aaF s" +g (* 3#!| #/IK/%*%D= )[^aa !!!'!!77!,/,-a/G t%/;<HTbcq%7.#"32%74'&"32765"/7627#"5'7432#"/7632#"5'7432#"&5'74632 #"/6327#"/6327#"/46329"&/462"&/>21"&/567632#!.547632632  *     X    ^  `    ^  b  c   fu U`59u  4J   l~ ~ F 2    m | O,           ru| u  " )9 $7 $&= $7 $&= $7 $&=  $&=46w`ww`ww`wb`VTEvEEvETVTEvEEvET*VTEvEEvET*EvEEvEEvEEv#^ct#!"&5463!2!&'&!"&5!632#"&'#"/&'&7>766767.76;267674767&5&5&'67.'&'&#3274(8((88((`x c`(8!3;:A0?ݫY   ^U 47D$    74U3I  |L38wtL0`((88(@(8(D 9 8(Q1&(!;  (g- Up~R2(/{E(Xz*Z%(i6CmVo8 #T#!"&5463!2!&'&!"&5!3367653335!3#4.5.'##'&'35(8((88((`x c`(8iFFZcrcZ`((88(@(8(D 9 8(kk" kkJ  ! k#S#!"&5463!2!&'&!"&5!%!5#7>;#!5#35!3#&'&/35!3(8((88((`x c`(8-Kg kL#DCJg  jLD`((88(@(8(D 9 8(jj jjkk kk#8C#!"&5463!2!&'&!"&5!%!5#5327>54&'&#!3#32(8((88((`x c`(8 G]L*COJ?0R\wx48>`((88(@(8(D 9 8(jjRQxk !RY#*2#!"&5463!2!&'&!"&5!!57"&462(8((88((`x c`(8Pppp`((88(@(8(D 9 8(ppp  #*7JR5#5#5#5##!"&5463!2!&'&!"&5##5!"&54765332264&"<(8((88((`x c`(8kޑcO"jKKjK`((88(@(8(D 9 8(SmmS?M&4&&4#9L^#!"&5463!2!&'&!"&5!#"/#"&=46;76276'.'2764'.(8((88((`x c`(8 6ddWW6&44`((88(@(8(D 9 8(. G5{{5]]$5995#3C#!"&5463!2!&'&!"&5!2#!"&5463#"'5632(8((88((`x c`(84LL44LL4l  `((88(@(8(D 9 8(L44LL44L  Z #7K[#!"&5463!2!&'&!"&5!>&'&7!/.?'&6?6.7>'(8((88((`x c`(8` 3  3  3  3 v  ?  `((88(@(8(D 9 8( & & - & &  ?   '6#'. '!67&54632".'654&#"32eaAɢ/PRAids`WXyzOvд:C;A:25@Ң>-05rn`H( ' gQWZc[ -%7' %'-'% %"'&54762[3[MN 3",""3,3"ong$߆]gn$+) ")")" x#W#"&#!+.5467&546326$32327.'#"&5463232654&#"632#".#"oGn\ u_MK'̨|g? CM7MM5,QAAIQqAy{b]BL4PJ9+OABIRo?z.z n6'+s:zcIAC65D*DRRD*wyal@B39E*DRRD*'/7  $&6$ 6277&47' 7'"' 6& 6'lLRRZB|RR>dZZLlLZRR«Z&>«|R ! $&54$7 >54'5PffP牉@s-ff`-c6721>?>././76&/7>?>?>./&31#"$&(@8!IH2hM>'  )-* h'N'!'Og,R"/!YQG54'63&547#5#"=3235#47##6323#324&"26%#!"&5463!2F]kbf$JMM$&N92Z2&`9UW=N9:PO;:dhe\=R +)&')-S99kJ<)UmQ/-Ya^"![Y'(<`X;_L6#)|tWW:;X  #'#3#!"&5463!2) p*xeשw@www0,\8@www9I#"'#"&'&>767&5462#"'.7>32>4."&'&54>32JrO<3>5-&FD(=Gq@C$39aLL²L4 &) @]v q#CO!~󿵂72765'./"#"&'&5 }1R<2" 7MW'$  ;IS7@5sQ@@)R#DvTA ; 0x I)!:> +)C 6.> !-I[4&#"324&#"3264&#"324&#"326&#"#".'7$4$32'#"$&6$32D2)+BB+)3(--(31)+BB+)4'--'4'#!0>R HMŰ9ou7ǖD䣣 R23('3_,--,R23('3_,--,NJ ?uWm%#"'%#"'.5 %&'&7632! ; `u%"(!]#c)(  #"'%#"'.5%&'&76 !  (%##fP_"(!)'+ʼn4I#"$'&6?6332>4.#"#!"&54766$32#!"&=46;46;2z䜬m IwhQQhbF*@&('k@z   _hQнQGB'(&*eozΘ@@`  >. $$ ffff^aafff^aa>"&#"#"&54>7654'&#!"#"&#"#"&54>765'46.'."&54632326323!27654'.5463232632,-,,",:! %]& %@2(/.+*)6! <.$..**"+8#  #Q3,,++#-:#"$$ /:yuxv)%$ /?CG%!5%2#!"&5463!5#5!52#!"&54632#!"&5463#5!5`&&&& &&&&&&&&@&&&&&&&&&&&&%2 &547%#"&632%&546 #"'6\~~\h ~\h\ V V VV%5$4&#"'64'73264&"&#"3272#!"&5463!2}XT==TX}}~>SX}}XS>~}w@www~:xx:~}}Xx9}}9xX}@www/>LXds.327>76 $&6$32762#"/&4762"/&47626+"&46;2'"&=462#"'&4?62E0l,  *"T.D@Yooo@5D [  Z  Z  [ ``[ Z  2 ,l0 (T" .D5@oooY@D, Z  [  [  Z ``EZ  [ 5%!  $&66='&'%77'727'%amlLmf?55>fFtuutFLlLHYC L||L Y˄(E''E*( /?IYiy%+"&=46;2+"&=46;2+"&=46;2+"&=46;2%"&=!#+"&=46;2+"&=46;2+"&=46;2+"&=46;2!54!54>$ +"&=46;2#!"&=@&&@3P > P3&&rrr&&rrr he 4LKM:%%:MKL4WT&&%/9##!"&563!!#!"&5"&5!2!5463!2!5463!2&&&&&&  &&&i@&&@&7'#5&?6262%%o;j|/&jJ%p&j;&i&p/|jţ%Jk%o%  :g"&5462#"&546324&#!"263662>7'&75.''&'&&'&6463!276i~ZYYZ~@OS;+[G[3YUD#o?D&G3I=JyTkBuhNV!WOhuAiSy*'^CC^'*SwwSTvvTSwwSTvvWID\_"[ gq# /3qFr2/ $rg%4 HffHJ4d#!#7!!7!#5!VFNrmNNN N!Y+?Ne%&'&'&7>727>'#&'&'&>2'&'&676'&76$7&'&767>76 '6# <;11x# *# G,T93%/#0vNZ;:8)M:( &C.J}2 %0  ^*  JF &7'X"2LDM" +6 M2+'BQfXV#+] #' L/(eB9  #,8!!!5!!5!5!5!5#26%!!26#!"&5!5&4& &pPPp@@&&@!&@PppP@*  9Q$"&54627"."#"&547>2"'.#"#"&5476$ "'&$ #"&5476$ (}R}hLK NN Ud: xx 8    ,, |2222 MXXM ic,>>,   ̺  '/7?KSck{4&"2$4&"24&"24&"24&"24&"24&"24&"24&"264&"24&#!"3!264&"2#!"&5463!2KjKKjKjKKjKjKKjKKjKKjKjKKjKjKKjKKjKKjKjKKjKLhLLhLKjKKj&&&&KjKKjL44LL44L5jKKjKKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjKjKKjK4LL44LLjKKjK&&&&jKKjK4LL44LL 'E!#"+"&7>76;7676767>'#'"#!"&7>3!2W",&7' #$ &gpf5 O.PqZZdS -V"0kqzTxD!!8p8%'i_F?;kR(` !&)' (2!&6367! &63!2! `B 1LO(+#=)heCQg#s`f4#6q'X|0 -g >IY#6?>7&#!%'.'33#&#"#"/3674'.54636%#"3733#!"&5463!24  : @7vH%hEP{0&<'VFJo1,1.F6A#L44LL44L"% 7x'6 O\JYFw~v^fH$ ! "xdjD"!6`J4LL44LL +3@GXcgqz -<JX{&#"327&76'32>54.#"35#3;5#'#3537+5;3'23764/"+353$4632#"$2#462#"6462""'"&5&5474761256321##%354&'"&#"5#35432354323=#&#"32?4/&54327&#"#"'326'#"=35#5##3327"327'#"'354&3"5#354327&327''"&46327&#"3=#&#"32?"5#354327&3=#&"32?"#3274?67654'&'4/"&#!"&5463!2_gQQh^_~\[[\]_^hQQge<F$$$ !!&&/ !/  !! 00/e&'!"e$   '!!''   8''NgL44LL44LUQghQUk=("  ! =))=2( '! 'L#(>( & DC(>(zL#DzG)<)4LL44LL  BWbjq}+532%+5324&+32763#4&'.546327&#"#"'3265#"&546325&#"32 !264&"2%#'#735#535#535#3'654&+353#!"&5463!29$<=$@?SdO__J-<AA@)7")9,<$.%0*,G3@%)1??.+&((JgfJ*A!&jjjGZYGиwsswPiL>8aA !M77MM77M3! 4erJ]&3YM(, ,%7(#)  ,(@=)M%A20C&Mee(X0&ĖjjjV 8Z8J9N/4$ 8NN88NN  #&:O[ $?b3'7'#3#%54+32%4+324+323'%#5#'#'##337"&##'!!732%#3#3##!"&53733537!572!56373353#'#'#"5#&#!'#'#463!2#"5#"5!&+&+'!!7353273532!2732%#54&+#32#46.+#2#3#3##+53254&".546;#"67+53254&.546;#"#'#'##"54;"&;7335wY-AJF=c(TS)!*RQ+*RQ+Y,B^9^Ft`njUM ') ~PSPRm٘M77Mo7q @)U 8"E(1++NM77Mx378D62W74;9<-A"EA0:A F@1:ؗBf~~""12"4(w$#11#@}}!%+%5(v$:O\zK?* $\amcrVlOO176Nn23266&+"&#"3267;24&+"'&+";27%4&+";2?>23266&+"&#"3267;254+";27#76;2#!"&5463!23%#2%%,,  _3$$2%%M>AL Vb5)LDHeE:< EM j,K'-R M ~M>AR  Vb5)LEHeE:< E J ABI*'! ($rL44LL44Lv%1 %3!x*k $2 %3!;5h n a !(lI;F   rp p8;5h t a !(lI;F ` #k 4LL44LL  2HW[lt#"'5632#6324&'.54327&#"#"&'32767#533275#"=5&#"'#36323#4'&#"'#7532764&"24'&#"327'#"'&'36#!"&5463!2=!9n23BD$ &:BCRM.0AC'0RH`Q03'`.>,&I / * / 8/n-(G@5$ S3=,.B..B02^`o?7je;9G+L44LL44LyE%# Vb;A !p &'F:Aq)%)#orgT$ v2 8)2z948/{ 8AB..B/q?@r<7(g/4LL44LL ?#!"&'24#"&54"&/&6?&5>547&54626=L4@ԕ;U g3 T 2RX='8P8|5 4Ljj U;Ig@   `  "*\(88(]k  &N4#"&54"3 .#"#!"&'7!&7&/&6?&5>547&54626;U gIm*]Z0L4@ԕ=o=CT T 2RX='8P8|5  U;IgXu?bl3@4Ljja`   `  "*\(88(]k/7[%4&+";26%4&+";26%4&+";26!'&'!+#!"&5#"&=463!7>3!2!2@@@@@@0 o`^BB^`5FN(@(NF5@@@u  @LSyuS@%44%,<H#"5432+"=4&#"326=46;2  >. $$ ~Isy9"SgR8vHD w ffff^aam2N+ )H-mF+10*F +fff^aab4&#"32>"#"'&'#"&54632?>;23>5!"3276#"$&6$3 k^?zb=ka`U4J{K_/4^W&  vx :XB0܂ff ) fzzXlz=lapzob35!2BX G@8  ' '=vN$\ff  1 SZz8zX#("/+'547'&4?6276 'D^h  i%5@%[i  h]@]h  i%@5%[i  h^@@)2#"&5476#".5327>OFi-ay~\~;'S{s:D8>)AJfh]F?X{[TC6LlG]v2'"%B];$-o%!2>7>3232>7>322>7>32".'.#"#"&'.#"#"&'.#"#546;!!!!!32#"&54>52#"&54>52#"&54>52-P&+#($P.-P$'#+&PZP&+#"+&P-($P-.P$(#+$P.-P$'#+&P-.P$+#pP@@PpH85K"&ZH85K"&ZH85K"&Z@Pp@@@pMSK5, :&LMSK5, :&LMSK5, :& !!3 ! @@@  #"$$3!!2"jaѻxlalxaaj!!3/"/'62'&63!2'y  `I  yMy `I y'W`#".'.#"32767!"&54>3232654.'&546#&'5&#" 4$%Eӕ;iNL291 ;XxR`f՝Q8TWiWgW:;*:`Qs&?RWXJ8 oNU0 J1F@#) [%6_POQiX(o`_?5"$iʗ\&>bds6aP*< -;iFn* -c1BWg4'.'4.54632#7&'.#"#"'.#"32767'#"&54632326#!"&5463!2#$( 1$6]' !E3P|ad(2S;aF9'EOSej]m] <*rYshpt.#)$78L*khw@wwwB % $/$G6 sP`X):F/fwH1pdlqnmPHuikw_:[9D'@www34."2>$4.#!!2>#!".>3!2QнQQнQQh~wwhfffнQQнQQнQZZQffff#>3!2#!".2>4."fffнQQнQQffffQнQQн ,\!"&?&#"326'3&'!&#"#"'  5467'+#"327#"&463!!'#"&463!2632(#AHs9q ci<= #]$ KjKKjKKjKKjH#j#H&&&KjKKjKg V i jKKjKKjKKjK ..n(([5KK55KK5[poNv<+#"'#"&546;&546$32322$B$22$$*$22$Xڭӯ$22$tX'hs2$ϧkc$22$1c$2F33F3VVT2#$2ԱVT2#$2g#2UU݃ 2$#2UU1݃2 ,u54#"67.632&#"32654'.#"32764.'&$#"7232&'##"&54732654&#"467&5463254632>32#"'&ru&9%" *#͟ O%GR=O&^opC8pP*bY _#$N Pb@6)?+0L15 "4$.Es  5IQ"!@ h "Y7e|J>ziPeneHbIlF>^]@n*9 6[_3#"&54632#.#"32%3#"&54632#.#"326%4&'.'&! ! 7>7>! =39? 6'_ >29? 5'17m-VU--,bW.뮠@Fyu0HC$뮠@Fyu0HC$L= ?? <=! A <`;+"&54&#!+"&5463!2#!"&546;2!26546;2pЇ0pp@Ipp>Sc+"&=46;254&+"&+";2=46;2;2=46;2;2%54&#!";2=;26#!"&5463!2A5DD5A7^6a7MB55B7?5B~```0`rr5A44A5v5AA5f*A``0` !!!! #!"&5463!2ړ7H7jv@vvv':@vvvMUahmrx#"'!"'!#"&547.547.54674&547&54632!62!632!#!627'!%!"67'#77!63!!7357/7'%# %'3/&=&' 5#?&547 6!p4q"""6" 'h*[ |*,@?wAUMpV@˝)Ϳw7({*U%K6=0(M "! O dX$k !! ! b [TDOi @6bxBAݽ5  ɝ:J +3,p x1Fi (R 463!#!"&5%'4&#!"3`а@..@A-XfB$.BB..C} )&54$32&'%&&'67"w`Rd]G{o]>p6sc(@wgmJPAjyYWa͊AZq{HZ:<dv\gx>2ATKn+;"'&#"&#"+6!263 2&#"&#">3267&#">326e~└Ȁ|隚Ν|ū|iyZʬ7Ӕްr|uѥx9[[9jj9ANN+,#ll"BS32fk[/?\%4&+";26%4&+";26%4&+";26%4&+";26%#!"&5467&546326$32]]eeeeee$~i qfN-*#Sjt2"'qCB8!'> !%)-159=AEIMQUY]agkosw{! %! 5!#5#5#5#5#57777????#5!#5!#5!#5!#5!#5!#5!#5#537#5!#5!#5!#5!#5!#55#535353535353%"&546326#"'#32>54.&54>3237.#"Q%%%%%%%%%?iiihOiixiiyiixiiArssrrssr%sssrrssNs%%%%%%%%%%'32#".543232654&#"#"&54654&#"#"&547>326ڞUzrhgrxSПdU 7#"&463!2!2&&4&&&&4&KjKKjKjKKj &&&%&& &&4&&&&4&&&5jKKjKKjKKjK%z 0&4&&3D7&4& %&'S4&"4&"'&"27"&462"&462!2#!"&54>7#"&463!2!2&4&4&4&4KjKKjKjKKj &&&%&& &&4&%&&ے&4"jKKjKKjKKjK%z 0&4&&3D7&4& %& & !'! !%!!!!%"'.763!2o]FooZY@:@!!gf//I62'"/"/"/"/"/"/"/7762762762762762762%"/77627&6?35!5!!3762762'"/"/"/"/"/"/%5#5!4ZSS6SS4SS4SS4SS4SS4SS4ZSS4SS4SS4SS4SS4SS4S-4ZSS4S@4SS4ZSS6SS4SS4SS4SS4SS4S@ZSSSSSSSSSSSSSSZSSSSSSSSSSSSSyZRRR@%:= :+: =RRZSSSSSSSSSSSSSCv!/&'&#""'&#" 32>;232>7>76#!"&54>7'3&547&547>763226323@``` VFaaFV      $. .$     yy .Q5ZE$ ,l*%>>%*>*98(QO!L\p'.'&67'#!##"327&+"&46;2!3'#"&7>;276;2+6267!"'&7&#"(6&#"#"' Dg OOG`n%ELL{@&&Nc,sU&&!Fre&&ss#/,<= #]gL oGkP'r-n&4&2-ir&&?o  4 _5OW! .54>762>7.'.7>+#!"&5#"&5463!2"&462{{BtxG,:`9(0bԿb0(9`:,GxtB&@&&@&K55K`?e==e?1O6# ,  #$  , #6OO&&&&5KK?!"'&'!2673267!'. ."!&54632>321 4q#F""8'go#- #,"tYg>oP$$Po> Zep#)R0+I@$$@I++332++"&=#"&=46;.7>76$  @ ᅪ*r@@r'/2+"&5".4>32!"&=463  &@~[՛[[u˜~gr&`u՛[[՛[~~@r=E32++"&=#"&=46;5&547&'&6;22676;2  >``@``ٱ?E,,=?rH@``@GݧH`jjrBJ463!2+"&=32++"&=#"&=46;5.7676%#"&5   &@~``@``  vXr&@``@+BF`rks463!2+"&=32++"&=#"&=46;5&547'/.?'+"&5463!2+7>6 %#"&5   &@~``@``~4e  0  io@& jV  0  Z9r&@``@Gɞ5o , sp &@k^ , c8~~`r8>KR_32++"&=!+"&=#"&=46;.767666'27&547&#"&'2#" @@ 'Ϋ'sggsww@sgg@@-ssʃl99OOr99FP^l463!2+"&=$'.7>76%#"&=463!2+"&=%#"&54'>%&547.#"254&' &@L?CuГP vY &@;"ޥ5݇ޥ5`&_ڿgwBF@&J_ s&&?%x%xJP\h463!2+"&='32++"&=#"&=46;5.7676632%#"&56'327&7&#"2#" &@L? ߺu``@``} ຒɞueeu9uee&_"|N@``@""|a~lo99r9@9;C2+"&5"/".4>327'&4?627!"&=463  &@Ռ .  N~[՛[[u˜N .  gr&`֌  . Ou՛[[՛[~N  . @r9A'.'&675#"&=46;5"/&4?62"/32+  '֪ \  . 4 .  \r|ݧ憛@\ .    . \@r~9A"/&4?!+"&=##"$7>763546;2!'&4?62  m  - @ݧ憛@& -  @rm4 -  ٮ*   - r+"&5&54>2  @[՛[rdGu՛[[r  ".4>2r[՛[[՛r5՛[[՛[[$2#!37#546375&#"#3!"&5463#22#y/Dz?s!#22#2##2S88 2#V#2L4>32#"&''&5467&5463232>54&#"#"'.Kg&RvgD $ *2% +Z hP=DXZ@7^?1 ۰3O+lh4`M@8'+c+RI2 \ZAhSQ>B>?S2Vhui/,R0+ ZRkmz+>Q2#"'.'&756763232322>4."7 #"'&546n/9bLHG2E"D8_ pdddxO"2xxê_lx2X  !+'5>-pkW[C I I@50Oddd˥Mhfxx^ә #'+/7!5!!5!4&"2!5!4&"24&"2!!! 8P88P 8P88P88P88PP88P8 P88P88P88P8 +N &6 !2#!+"&5!"&=463!46;23!#!"&54>32267632#"_>@`     `  L4Dgy 6Fe=OOU4L>   ` `  4L2y5eud_C(====`L43V &6 #"/#"/&54?'&54?6327632#!"&54>32 7632_>     %%Sy 6Fe=J%>     %65%Sy5eud_C(zz.!6%$!2!!!46;24&"2!54&#!"&&&@ԖV@&&@&&ԖԖ@&3!!! !5!'!53!! #7IeeI7CzCl@@@#2#!"&?.54$3264&"!@մppp((ppp#+/2#!"&?.54$3264&"!264&"!@մ^^^@^^^@((^^^^^^v(#"'%.54632 "'% 632U/@k0G,zD# [k# /tg F Gz  #'#3!) p*xe0,\8T #/DM%2<GQ^lw &'&676676&'&7654&'&&546763"#"'3264&7.>&'%'.767&7667&766747665"'.'&767>3>7&'&'47.'.7676767&76767.'$73>?>67673>#6766666&'&6767.'"'276&67&54&&671&'6757>7&"2654&57>&>&'5#%67>76$7&74>=.''&'&'#'#''&'&'&'65.'&6767.'#%&''&'#2%676765&'&'&7&5&'6.7>&5R4&5S9 W"-J0(/r V"-J0(.)#"6&4pOPppc|o}vQ[60XQW1V  # 5X N"& . ) D>q J:102(z/=f*4!> S5b!%  (!$p8~5..:5I  ~T 4~9p# ! ) & ?()5F 1   d%{v*: @e s|D1d {:*dAA|oYk'&<tuut&v HCXXTR;w 71™ Z*&' 1  9? . $Gv 5k65P.$.`aasa``Z9k'9؋ӗa-*Gl|Me_]`F& OܽsDD!/+``aa``a154&'"&#!!26#!"&5463!2    iLCly5)*Hcelzzlec0hb,,beIVB9@RB9J_L44LL44L44%2"4:I;p!q4bb3p (P`t`P(6EC.7BI64LL44LL  .>$4&'6#".54$ 4.#!"3!2>#!"&5463!2Zjbjj[wٝ]>oӰٯ*-oXL44LL44L')꽽)J)]wL`ֺ۪e4LL44LL;4&#!"3!26#!"&5463!2#54&#!";#"&5463!2  @ ^BB^^B@B^  B^^B@B^`@  MB^^B@B^^>  ^B@B^^5=Um ! !!2#!"&=463!.'!"&=463!>2!2#264&"".54>762".54>762?(``(?b|b?B//B/]]FrdhLhdrF]]FrdhLhdrF@@@(?@@ ?(@9GG9@/B//BaItB!!BtI Ѷ!!ь ItB!!BtI Ѷ!!ь-M32#!"&=46;7&#"&=463!2#>5!!4.'.46ՠ`@`ՠ`MsFFsMMsFFsMojjo@@jj@@<!(!!(!-3?32#!"&=46;7&#"&=463!2+!!64.'#ՠ`@`ՠ`  DqLLqDojjo@@jj@@B>=C-3;32#!"&=46;7&#"&=463!2+!!6.'#ՠ`@`ՠ`UVU96gg6ojjo@@jj@@β**ɍ-G32#!"&=46;7&#"&=463!2#>5!!&'.46ՠ`@`ՠ`MsFFsMkkojjo@@jj@@<!(!33!(!9I2#!"&=4637>7.'!2#!"&=463@b":1P4Y,++,Y4P1:"":1P4Y,++,Y4P1:"b@@@7hVX@K-AA-K@XVh77hVX@K-AA-K@XVh7Aj"#54&#"'54&#"3!26=476=4&#"#54&'&#"#54&'&'2632632#!"&5&=4632>3265K @0.B @0.B#6'&& l @0.B 2' .B A2TA9B;h" d mpPTlLc _4.HK5]0CB.S0CB./#'?&&)$$)0CB. }(AB.z3M2"61d39L/PpuT(Ifc_E`1X"#4&"'&#"3!267654&"#4&"#4&26326#!"&'&5463246326\B B\B&@5K&@"6LB\B B\B sciL}QP%&#"!"3!754?27%>54&#!26=31?>Ijjq,J[j.-tjlV\$B.R1?@B.+?2`$v5K-%5KK5.olRIS+6K5̈$B\B 94E.&ʀ15uE& ԖPjjdXUGJ7!.B P2.B %2@ 7K5(B@KjKj?+fU E,5K~!1.>F.F,Q5*H$b2#!"&=%!"&=463!7!"&'&=4634'&#!">3!!"3!32#!"3!23!26=n$32>32>32#"#.#"#.#"3!27654&#"547654&#"#654&Mye t|]WSSgSY\x{ 70"1i92DU1&=  =&0@c >&/Btd4!*"8K4+"@H@/'= t?_K93-] UlgQQgsW ]#+ i>p&30&VZ&0B/ %3B. "to ){+C4I (  /D0&p0D3[_cg"'&#"3!2676=4&"#54&#"#54&#"#4&'2632632632#!"&'&5463246#!#!#5K)B4J&@#\8P8 @0.B J65K J6k cJ/4qG^\hB2.1!~K5y?^\Vljt-.j[J,qjjI7$?1R.B+.B$`2?gvEo.5KK5%-K6+SIR[&.E49 B\B$5KG#!+"&5!"&=463!2+"&' +"' +"'&5>;2>76;2Y    M .x - N     u  , u ?  LW   #  *:J4'&+326+"'#+"&5463!2  $6& $&6$ UbUI-uu,uuڎLlLAX!Jmf\$ 6uuu,KLlL-[k{276/&'&#"&5463276?6'.#"!276/&'&#"&5463276?6'.#"  $6&  $&6]h - %Lb`J%E 5 ,5R- h - %Lb`J%E 5 ,5R-'uu,uulL/hR    dMLc  NhR   dMLc  N1uuu,LlL@  ' 7 '7 ``H ``H !``H ```H` '%  7' 7'7 ' $&6$ X`(W:,:X`(WLLlLX`(W:BX`(XLlL $ %/9ES[#"&54632$"&4624&"26$4&#"2%#"&462$#"&4632#"32&! 24>  !#"&'.'#"$547.'!6$327&'77'&77N77N'qqqqqPOrqEsttsst}||}uԙ[WQ~,> nP/R U P酛n >,m'77'&77N77N6^Orqqqqqqt棣棣(~|| on[usј^~33pc8{y%cq33dqpf L 54 "2654"'&'"/&477&'.67>326?>< x ,  (-'sI  VCV  Hr'-(  $0@!BHp9[%&!@0$u  ]\\]-$)!IHV D V HI!)$-#36>N"&462."&/.2?2?64/67>&  #!"&5463!2]]]3 $; &|v;$ (CS31 =rM= 4TC(G zw@www]]]($-;,540= sL =45,; @www(2#"$&546327654&#" &#"AZ\@/#%E1/##.1E$![A懇@@\!#21E!6!E13"|! gL&5&'.#4&5!67&'&'5676&'6452>3.'5A5RV[t,G'Q4}-&r! G;>!g12sV&2:#;d=*'5E2/..FD֕71$1>2F!&12,@K r#"&5462>%.#"'&#"#"'>54#".'7654&&5473254&/>7326/632327?&$  $6 $&6$ !&"2&^ u_x^h ;J݃HJǭ qE Dm! M G?̯' %o8 9U(F(ߎLlL&!&!SEm|[n{[<ɪ "p C Di% (K HCέ  pC B m8 @Kނ  HF(LlL "*6%&6$ 7&$5%%6'$2"&4}x3nQH:dΏX e8z' li=! 7So?vM '&7>>7'7>''>76.'6'El:Fg r *t6K3U Z83P)3^I%=9 )<}Jk+C-Wd &U-TE+]Qr-< Q#0 C+M8 3':$ _Q =+If5[ˮ&&SGZoMkܬc#7&#"327#"'&$&546$;#"'654'632ե›fKYYKf¥yͩ䆎L1hvvƚwwkn]*]nlxDLw~?T8bb9SA}+5?F!3267!#"'#"4767%!2$324&#"6327.'!.#"۔c28Ψ-\?@hU0KeFjTlyE3aVsz.b؏W80]TSts<hO_u7bBtSbF/o|V]SHކJ34&#!"3!26#!!2#!"&=463!5!"&5463!2  @ ^B `` B^^B@B^   @ @B^@@^BB^^>3!"&546)2+6'.'.67>76%&F8$.39_0DD40DD0+*M7{L *="# U<-M93#D@U8vk_Y [hD00DD00Dce-JF1 BDN&)@ /1 dy%F#"'&'&'&'&763276?6#"/#"/&54?'&763276"&'&'&5#&763567632#"'&7632654'&#"32>54'&#"'.5463!2#!3>7632#"'&'&#"'&767632yqoq>* 432fba  $B? >B BB AA.-QPPR+ 42 %<ciђ:6& hHGhkG@n`IȌ5 !m(|.mzyPQ-.  je  q>@@?ppgVZE|fb6887a %RB? =B ABBAJvniQP\\PRh!cDS`gΒ 23geFGPHXcCI_ƍ5" n*T.\PQip [*81 / 9@:>t%6#".'.>%6%&7>'.#*.'&676./&'.54>754'&#"%4>327676= >vwd" l "3 /!,+ j2.|%& (N &wh>8X}xc2"W<4<,Z~fdaA`FBIT;hmA<7QC1>[u])  u1V(k1S) - 0 B2* %M ;W(0S[T]I) A 5%R7&&T,Xq&&1X,LΒw%%;#!"&5463!546;2!2!+"&52#!"/&4?63!5! (&&@&&(&&@&&( (  &&@&&@&&&&  #''%#"'&54676%6%% hh @` !   !    #52#"&5476!2#"&5476!2#"'&546        @  @  @    84&"2$4&"2$4&"2#"'&'&7>7.54$ KjKKjKjKKjKjKKjdne4" %!KjKKjKKjKKjKKjKKjK.٫8  !%00C'Z'.W"&462"&462"&462 6?32$6&#"'#"&'5&6&>7>7&54>$ KjKKjKjKKjKjKKjhяW.{+9E=cQdFK1A  0) LlLjKKjKKjKKjKKjKKjKpJ2`[Q?l&٫C58.H(Yee    Y'w(O'R@$#"&#"'>7676327676#" b,XHUmM.U_t,7A3ge z9@xSaQBLb( VU  !!!==w)AU!!77'7'#'#274.#"#32!5'.>537#"76=4>5'.465! KkkK _5 5 #BH1`L I& v6S F!Sr99rS!`` /7K%s}H XV P V  e  Vd/9Q[ $547.546326%>>32"&5%632264&#"64'&""&'&"2>&2654&#";2 P 3>tSU<)tqH+>XX|Wh,:UStW|XX>=X*  ))  +^X^|WX=>X:_.2//a:Ru?  Q%-W|XW>J( =u>XX|WX`  *((*  +2 2X>=XW|E03>$32!>7 '&'&7!6./EUnohiI\0<{ >ORDƚ~˕VƻoR C37J6I`Tb<^M~M8O  5!#!"&!5!!52!5463 ^B@B^`B^^B `B^^"^BB^0;%'#".54>327&$#"32$ !"$&6$3 ##320JUnLnʡ~~&q@tKL}'` - -oxnǑUyl}~~FڎLlLt`(88(   7!' !\W\ d;tZ`_O; }54+";2%54+";2!4&"!4;234;2354;2354>3&546263232632#"&#"26354;2354;2354;2````pp```  !,! -&M<FI(2 ```@PppPpppppp# #   ppppp j#"'&=!;5463!2#!"&=#".'.#!#"&463232>7>;>32#"&'#"!546 %. `@` :,.',-XjjXh-,'.,: kb>PppP>bk .%Z & :k%$> $``6&L')59I"TlԖlT"I95)'L&69GppG9$ >$%k: !+32&#!332 $&6$ ~O88OLlL>pN  iLlL '':Ma4&'#"'.7654.#""'&#"3!267#!"&54676$32#"'.76'&>$#"'.7654'&676mD5)  z{6lP,@KijjOoɎȕ>>[ta) GG 4?a) ll >;_-/ 9GH{zyN@,KԕoN繁y! ?hh>$ D" >â? $ n"&5462'#".54>22654.'&'.54>32#"#*.5./"~~s!m{b6# -SjR,l'(s-6^]Itg))[zxȁZ&+6,4$.X%%Dc* &D~WL}]I0"  YYZvJ@N*CVTR3/A3$#/;'"/fR-,&2-" 7Zr^Na94Rji3.I+ &6W6>N%&60;96@7F6I3+4&#!"3!26%4&#!"3!26 $$ ^aa`@@^aa '7  $ >. %"&546;2#!"&546;2#/a^(^aa(N@@4&#!"3!26 $$ @@^aa`@^aa '  $ >. 7"&5463!2#/a^(n@^aa(N@ %=%#!"'&7!>3!26=!26=!2%"&54&""&546 ##]VTV$KjKKjK$&4&Ԗ&4&>9G!5KK55KK5!&&jj&&#/;Im2+#!"&'#"&463>'.3%4&"26%4&"26%6.326#>;463!232#.+#!"&5#"5KK5sH..Hs5KK5e# )4# %&4&&4&&4&&4&` #4) #%~]eZ&&Ze] E-&&-EKjKj.<<.KjK)#)`"@&&`&&&&`&&)#`)"dXo&&oXG,8&&8!O##!!2#!+"'&7#+"'&7!"'&?63!!"'&?63!6;236;2!2@@8@7 8Q NQ N 8G@ 8GQ NQ N7   8 8  H H  k%  ".>2I20]@]@oo@@oo㔕a22]]p^|11|99|11|(%7'7' ' 7T dltl)qnluul)1$4&"24&"2 &6 +"&5476;2 &6 LhLLhLLhLLhL>  &   &`>hLLhLLhLLhL>&&>G  .7)1!62 1!62he220e22> v +4 [d+ d 135#5&'72!5!#"&'"'#"$547&54$ Eh`X(cYz:L:zYc\$_K`Pa}fiXXiޝfa  (+.>#5#5!5!5!54&+'#"3!267!7!#!"&5463!2U``'    jjV>(>VV>>Vq  ( ^(>VV>>VV=&'&'&'&76'&'&.' #.h8"$Y ''>eX5, ,PtsK25MRLqS;:.K'5R ChhRt(+e^TTu B"$:2~<2HpwTT V/7GWg. %&32?673327>/.'676$4&"2 $&6$   $6& $&6$ d -- m  ,6*6,  mKjKKjoooKzz8zzȎLlLU4>>4-. YG0 )xx) 0GYޞ .jKKjKqoooolzzz80LlLD/7H#"'.7'654&#"'67'.6?>%"&46227#".547|D,=),9#7[͑fx!X: D$ +s)hhijZt<F/*8C,q؜e\r,WBX/C2hhh=tXm>NZ+"&=46;2+"&=4>7>54&#"#"/.7632  >. $$ p=+& 35,W48'3  l zffff^aaP2P: D#;$# $*;? R Cfff^aa'Y >O`"&5462&'.'.76.5632.'#&'.'&6?65\\[( | r [A@[[@A#2#  7* <Y$  +}"(  q87] F  _1 )    #1Ke34&+326+"&=!#!"&763!2#!"&5463!2#>?4.'3#>?4.'3#>?4.'3Xe`64[l7  , L; =+3&98&+)>>+3&98&+)>=+3&88&+)> Wj|r >Q$~d $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgY $kaw+-wi[[\;/xgYJ\m4.'.'&#"#"'.'&47>7632327>7>54&'&#"327>"&47654'&462"'&476'&462"'&47>&'&462i$ $^"  %%  "^$ $W "@9O?1&&18?t@" W&%%&4KK6pp&46ZaaZ&4mttm ^x -  - x^ = /U7C kkz'[$ =&5%54'4&KK4r7>54 "&54>2"&462%"&54&#""&546 %#"&'&'.7>#"'&'.7>&4&&4&4&&4SZ&4&&44$#&&&j3$"('$&4&[՛[&4&&4F&4&]\&4&$  !D4%  ,\44&&4&4&&4&-Z4&&4&;cX/)#&>B)&4&j9aU0'.4a7&&u՛[[4&&4&@&&]]&&Ώ0 u40 )4#g&'.#"32676%4/&#"326'&#"2632#2+&'%#"'&6?676676632%#"'&6767#"&'&6767#"'.7>327"#"&'&6763"'.7>;7632;>%5K$ "0%>s$ "0%>;;>%5KVL#>H30 \($$(\( єyO2F/{(?0(TK.5sg$ єy#-F/{$70(TK.5sg$L#>H30 \($$(\#(@5"'K58!'"58!'"55"'K#dS$K K$Sdx#@1 w d>N;ET0((? - 2K|1 wd#N;ET0$(? - 2K$#dS$K K$SdxDN\2654& 265462"2654 #"32654>7>54."/&47&'?62 &4&&4&h՛[&4&r$'("$3j&&&#$4[ " @ GB[ "&&Β&&][u&&7a4.'0Ua9j&4&)B>&#)/Xc;u՛ "  " Gi[ Xh#"&54676324&'&#"'>54#"32#"54>54'.#"32>7>767632326#!"&5463!2b )   :4FDN  [1,^JK-*E#9gWRY vm0O w@wwwC22 c@X&!9{MA_"S4b// DR"XljPY < @www%e4.#"32>7676#'.#"#"&54>3232>754&*#"&54>763 >32 ''il$E/  @P@ ^`'W6&!.. ! -P5+ E{n46vLeVz:,SN/ M5M[  ]$[^5iC'2H&!(?]v`* l b$9> =R2 #"&5467%!"&7>3-.7>;%.7>322326/.76/.'&6766/&/&#"&676 &676&6766/&672? =1( H/ '96&@)9<')29% &06##$ J 0 7j)5@"*3%"!M %#K"%Ne 8)'8_(9./=*%8!Q #P"\Q#N&a)<9bR]mp%"'.'&54>76%&54763263 #"/7#"'#"&/%$%322654&#"%'OV9  nt  |\d ϓ[nt  |@D:) ;98'+| j," 41CH^nVz(~R 9\'  r  @L@  @w46HI(+C ,55, f[op@\j;(zV~i/5O#"'&54>32&#" 654'67'"'>54''&'"'6767&546767>7蒓`V BMR B9)̟!SH-77IXmSMH*k#".o;^J qןד>@YM $bKd ү[E";Kx%^6;%T,U:im=Mk).DT4'"&5463267&#" 6;64'.'4'>732676%#!"&5463!2),蛜s5-54&#"#"'654'.#"#"&#"3263232>3232>76 $$ Cf'/'% ( $UL ( #'/'@ 3#@,G)+H+@#3 ^aaX@ _O#NW#O_ .* ##(^aaq[632632#"&#"#".'&#"#".'&54767>7654.54632327&547>P9 B6?K? %O4T% >6>Z64Y=6>%S4N$ ?L?4B @{:y/$ ,'R! F! 8% #)(()#%: !F Q'+%0z:zO_4'.'&54>54&#"#"'654'.#"#"&#"3263232>3232>76#!"&5463!2Cf'.'% ( $VM  ) #'.'@ 3 #A,G)+H+A# 4 w@wwwXA  ?4N$NW&M&L  /* ## + @www O$>?>762'&#"./454327327>7> EpB5 3FAP/h\/NGSL  RP* m95F84f&3Ga4B|wB.\FI*/.?&,5~K % & Y."7n< "-I.M`{ARwJ!FX^dj''''"'7&'7&'7&'7&547'67'67'67'63277774$#"32$   *'ֱ,?g=OO&L&NJBg;1''ֱ.=gCIM $'&&NJBg=.%w؝\\w Ioo<<-NIDg=/%(ײ+AhEHO*"#*OICh=/'(ֲ/=h>ON.]xwڝ]7e[@)6!!"3#"&546%3567654'3!67!4&'7Sgny]K-#75LSl>9V%cPe}&Hn_HȌ=UoLQ1!45647UC" !-9[nx"&46254&"326754&"326754&"26754&"26#".547632632626326'4#"#"54732764&"264.#"327632>#"'"'#"'#"&5#"'67&'327&'&54>3267>7>7>32632632T"8""8)<())(<))))<))<))<))<) Tد{ՐRhx=8 78 n 81 pH_6Soc F@b@?d?uKbM70[f5Y$35KUC<:[;+8 n 87 8/8Zlv]64qE 'YK0-AlB; W#;WS9 &(#-7Z://:/Tr++r,,r++r,,r++r,,r++r,,ʠgxXVעe9222222^KVvF02OO23OO`lF;mhj84DroB@r+@222222C0DP`.r8h9~T4.&o@9 1P%14'!3#"&46327&#"326%35#5##33 $$  }Pcc]321IUΠ?LL?cc4MX &04;0XpD[[DpD,)&&Q 9V\26&".'&'&6?.#"#26327677>'32>&3#'&+"?626&"#!'.'!"&5463!>;26;2!2P P  92#.}SP9::%L \B )spN/9oJ5  !+D`]BgY9+,9% Pk 4P P &NnF!_7*}B<{o0&&B;*<@$ucRRc#@16#37c&@@@ J"@*4^`ED B o/8927 *@OLC!T!323X$BJ@@@&AS 0C 59" 'D/&&D4 88 $5A&%O#!"&547>7>2$7>/.".'&'&2>^B@B^ >FFzn_0P:P2\nzFF> R & p^1P:P1^ & R P2NMJMQ0Rr.B^^B 7:5]yPH!%%"FPy]5:7 = 4 QH!%%!Ht 4 =<"-/ ?1Pp+".'.'.?>;2>7$76&'&%.+"3!26#!"&54767>;2' +~'*OJ%%JN,&x' % ^M,EE,M7 ZE[P*FF*P:5  ^B@B^){$.MK%%KM.$+X)o3 "a 22!] 4  I>"">,&S8JB##B12 ` `B^^B8&ra#11#$R&  "&.2v%/%''%/%7%7'%7'/#&5'&&?&'&?&'&7%27674?6J" 0<=_gNU?DfuYGb7=^H^` =v~yT3GDPO 4Fѭqi_w\ހ!1uS%V_-d 1=U{J8n~r'U4.#".'"3!264&"26+#!"&5463!232+32+32 0P373/./373P0 T=@=T֙֙|`^B@B^^BB^`````*9deG-! !-Ged9IaallkOB^^BB^^B +Yi"&54622#!"&54>;2>+32+32+#!"&5463!2324&#!"3!26֙֙0.I/ OBBO -Q52-)&)-2 ``  ``  `^B@B^^BB^`  @   |kkl"=IYL)CggC0[jM4      B^^BB^^B @  @ !1AQu4.#".'"3!24&"254&#!"3!2654&#!"3!2654&#!"3!26#!54&+"!54&+"!"&5463!2)P90,***,09P)J66S"@8@^B@@B^^BB^Ukc9 9ckU?@@88 @@N@B^````^BB^^!1AQu#!"&4>32>72"&462#!"&=463!25#!"&=463!25#!"&=463!24&#!"3!546;2!546;2!26#!"&5463!2J66J)P90,***,09P)"@8@ @  `@@` ^B@B^^BB^ՀUUkc9 9c`@@88@@2  @ ````@B^^BB^^(%.'"&' $&  #"$&6$ wCιCwjJ~J>LlLśJSSJ͛>6LlL$,  $&6654&$ 3 72&&  lLmzzBl>KlLGzzG>'7#!"&54>7&54>2  62654' '3/U]B,ȍ,B]U/OQнQ>+X}}X0bӃۚӅb0}hQQh>ff#=#!"&4>3272"&462!3!26#!"&5463!;26=!2J66J)Q8PP8Q)  ^B@B^^B``B^VVVld9KK9d` @B^^BB^``^+;K[eu4.#"'"3!264&"254&#!"3!2654&#!"3!26%54&+";2654&#!"3!26!54&#!"!#!"&5463!2"D/@@/D"?,,?pppp@@@@^B@B^^BB^D6]W2@@2W]67MMppp@@@@@@@@n`@B^^BB^^+;K[eu#!"&54>3272"&462#!"&=463!2%#!"&=463!2+"&=46;25#!"&=463!2!3!26#!"&5463!2?,V,?"D/@@/D"pppp@@@  ^B@B^^BB^D7MM76]W2@@2W]֠ppp@@@@@@@@` @B^^BB^^A#"327.#"'63263#".'#"$&546$32326J9"65I).!1iCCu +I\Gw\B!al݇yǙV/]:=B>9+32%#!"&5463!2#"&54>54'&#"#"54654'.#"#"'.54>54'&'&543232654&432#"&54>764&'&'.54632  ?c'p& ?b1w{2V ?#&#9&CY' &.&#+B : &65&*2w1GF1)2<)<'  ( BH=ӊ:NT :O )4:i   F~b` e!}U3i?fRUX|'&'&Ic&Q  *2U.L6* / L:90%>..>%b>+ +z7ymlw45)0 33J@0!! TFL P]=GS -kwm  !*(%6&692? $&6$  '   al@lLlL,& EC h$LlL /37;%"&546734&'4&" 67 54746 #5#5#5ppF::FDFNV^fnv~"/&4?.7&#"!4>3267622"&4"&46262"&42"&4462"$2"&42"&4"&46262"&4"&46262"&42"&4$2"&42"&42"&4  R ,H8JfjQhjG^R,  !4&&4&Z4&&4&4&&4&4&&4&&4&&44&&4&4&&4&Z4&&4&4&&4&4&&4&4&&4&4&&4&&4&&4&Z4&&4&Z4&&4&  R  ,[cGjhQRJ'A, &4&&4Z&4&&4Z&4&&4Z&4&&444&&4&&4&&4Z&4&&4Z&4&&4Z&4&&4&4&&4Z&4&&4Z&4&&4&&4&&4Z&4&&4Z&4&&4%-5=EM}+"&=#!"'+"&=&="&4626"&462&"&462"&462&"&462&"&462#!"&=46;4632676/&?.7&#"!2"&462&"&462&"&462"&462&"&462&"&462"&462&"&462"&462@?AA? @ @R...R@`jlL.h) * * $ %35K.....uvnu....@@jN  * * .t2#K5..R..R. @Hq '&'&54 &7676767654$'.766$76"&462&'&'&7>54.'.7>76ȵ|_ğyv/ۃ⃺k] :Buq CA _kނXVobZZbnW|V 0  Q2- l}O  / :1z q%zG 4( 6Roa ą\< )4 J}%!!#!"&5463!2^B@B^^BB^`@B^^BB^^%#!"&=463!2^B@B^^BB^B^^BB^^ &))!32#!#!"&5463!463!2`B^^B^B@B^^B`^BB^^B@B^B^^BB^`B^^#3%764/764/&"'&"2?2#!"&5463!2    s^B@B^^BB^ג     @B^^BB^^#'7"/"/&4?'&4?62762!!%#!"&5463!2     ^B@B^^BB^    `@B^^BB^^ ! $&6$ .2r`LlLf4LlL#.C&>"'&4762"/&4?62'"'&4762%'.>6.'.>6'>/>76&'&.'&7&'">?4'.677>7.>37654'&'67>776 $&6$  ( 4Z# # & # # & y"6&.JM@& "(XE* $+8 jT?3#'.'&!3!2>?3.'#!57>7'./5!27#'.#!"g%%D-!gg<6WWZe#1=/2*]Y3-,C1 /Dx] VFIq-HD2NK '>*%R= f 07=. f D]\|yu,0>Seu#2#"'&5<>323#3#&'#334'."#"+236'&54.#"5#37326#!"&5463!2 <  zzj k-L+ )[$8=".un/2 ^B@B^^BB^5cy    (ݔI(8?C (3> #"($=@B^^BB^^0K S&'.'&'./674&$#">&>?>'76'# "&#./.'7676767>76$w .~kuBR] T%z+",|ޟj<)(!( ~ˣzF8"{%%#5)}''xJF0"H[$%EJ#% .Gk29(B13"?@ S)5" #9dmW";L65RA0@T.$}i`:f3A%% BM<$q:)BD aa%`]A &c| Ms!  Z 2}i[ F&** < ʣsc"J<&NsF% 0@Wm6&'.6$.7>7 $76".4>2., &>6'"'&7>=GV:e #:$?+% q4g &3hT`ZtQмQQмpAP1LK!:< }҈`dlb,9'  %%($! a3)W)x  оQQоQQcQǡ-җe)Us2XD\ϼYd /?O_o#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543#"=#"=4;543%#!"&5463!2++532325++532325++532325++532325++53232p00pp00pp00pp00pp008((88(@(80pp00pp00pp00pp00pp0     @(88((88     /Q/&'%&/"&=.6?&?&'&6?'.>-#".6?'.>'&6'.>54627>%>76#"'% %6 27 2G f!)p&4&p)!f G2 72  *6 " 47 2G f!)p&4&p)!f G2 72 " 6* !k 3 j&3 %,*&&ր*9% 3&j 3 k!./!>>$,*!k 3.j&3 %Ԝ9*&&ր*ǜ,% 3&j 3 k!*,$>>!/.&6.'&$ &76$76$PutۥiPuGxy Զ[xy -_v١eNuv١e =uʦ[t78X &6# #'7-'%'&$  $6 $&6$ 31NE0gR=|||">"LlL^v!1f2iЂwgfZQQ^>"||||wLlL &ZXblw.'&>'&'&".'.'&&'&'&7>767>67>7626&'&>&'&>'.7>.676'&'&'&'.67.>7>6&'&676&'&676.676&'&>&'&676'.>6/4-LJg-   $  6)j2%+QF)b3FSP 21DK2AW ") ")$? ? 8A& AE5lZm= gG2Sw*&>$5jD GHyX/4F r 1  1""!l=6> 6 ,5./'e    .*|Ed! u & &%& &5d ))66 @ C& 8B @qL?P^7 G-hI[q:"T6 ,6 &/`  L wQ'   A ^   "  $& _  y  * <Copyright Dave Gandy 2016. All rights reserved.Copyright Dave Gandy 2016. All rights reserved.FontAwesomeFontAwesomeRegularRegularFONTLAB:OTFEXPORTFONTLAB:OTFEXPORTFontAwesomeFontAwesomeVersion 4.7.0 2016Version 4.7.0 2016FontAwesomeFontAwesomePlease refer to the Copyright section for the font trademark attribution notices.Please refer to the Copyright section for the font trademark attribution notices.Fort AwesomeFort AwesomeDave GandyDave Gandyhttp://fontawesome.iohttp://fontawesome.iohttp://fontawesome.io/license/http://fontawesome.io/license/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~glassmusicsearchenvelopeheartstar star_emptyuserfilmth_largethth_listokremovezoom_inzoom_outoffsignalcogtrashhomefile_alttimeroad download_altdownloaduploadinbox play_circlerepeatrefreshlist_altlockflag headphones volume_off volume_down volume_upqrcodebarcodetagtagsbookbookmarkprintcamerafontbolditalic text_height text_width align_left align_center align_right align_justifylist indent_left indent_rightfacetime_videopicturepencil map_markeradjusttinteditsharecheckmove step_backward fast_backwardbackwardplaypausestopforward fast_forward step_forwardeject chevron_left chevron_right plus_sign minus_sign remove_signok_sign question_sign info_sign screenshot remove_circle ok_circle ban_circle arrow_left arrow_rightarrow_up arrow_down share_alt resize_full resize_smallexclamation_signgiftleaffireeye_open eye_close warning_signplanecalendarrandomcommentmagnet chevron_up chevron_downretweet shopping_cart folder_close folder_openresize_verticalresize_horizontal bar_chart twitter_sign facebook_sign camera_retrokeycogscomments thumbs_up_altthumbs_down_alt star_half heart_emptysignout linkedin_signpushpin external_linksignintrophy github_sign upload_altlemonphone check_emptybookmark_empty phone_signtwitterfacebookgithubunlock credit_cardrsshddbullhornbell certificate hand_right hand_lefthand_up hand_downcircle_arrow_leftcircle_arrow_rightcircle_arrow_upcircle_arrow_downglobewrenchtasksfilter briefcase fullscreengrouplinkcloudbeakercutcopy paper_clipsave sign_blankreorderulol strikethrough underlinetablemagictruck pinterestpinterest_signgoogle_plus_sign google_plusmoney caret_downcaret_up caret_left caret_rightcolumnssort sort_downsort_up envelope_altlinkedinundolegal dashboard comment_alt comments_altboltsitemapumbrellapaste light_bulbexchangecloud_download cloud_uploaduser_md stethoscopesuitcasebell_altcoffeefood file_text_altbuildinghospital ambulancemedkit fighter_jetbeerh_signf0fedouble_angle_leftdouble_angle_rightdouble_angle_updouble_angle_down angle_left angle_rightangle_up angle_downdesktoplaptoptablet mobile_phone circle_blank quote_left quote_rightspinnercirclereply github_altfolder_close_altfolder_open_alt expand_alt collapse_altsmilefrownmehgamepadkeyboardflag_altflag_checkeredterminalcode reply_allstar_half_emptylocation_arrowcrop code_forkunlink_279 exclamation superscript subscript_283 puzzle_piece microphonemicrophone_offshieldcalendar_emptyfire_extinguisherrocketmaxcdnchevron_sign_leftchevron_sign_rightchevron_sign_upchevron_sign_downhtml5css3anchor unlock_altbullseyeellipsis_horizontalellipsis_vertical_303 play_signticketminus_sign_alt check_minuslevel_up level_down check_sign edit_sign_312 share_signcompasscollapse collapse_top_317eurgbpusdinrjpyrubkrwbtcfile file_textsort_by_alphabet_329sort_by_attributessort_by_attributes_alt sort_by_ordersort_by_order_alt_334_335 youtube_signyoutubexing xing_sign youtube_playdropbox stackexchange instagramflickradnf171bitbucket_signtumblr tumblr_signlong_arrow_down long_arrow_uplong_arrow_leftlong_arrow_rightwindowsandroidlinuxdribbleskype foursquaretrellofemalemalegittipsun_366archivebugvkweiborenren_372stack_exchange_374arrow_circle_alt_left_376dot_circle_alt_378 vimeo_square_380 plus_square_o_382_383_384_385_386_387_388_389uniF1A0f1a1_392_393f1a4_395_396_397_398_399_400f1ab_402_403_404uniF1B1_406_407_408_409_410_411_412_413_414_415_416_417_418_419uniF1C0uniF1C1_422_423_424_425_426_427_428_429_430_431_432_433_434uniF1D0uniF1D1uniF1D2_438_439uniF1D5uniF1D6uniF1D7_443_444_445_446_447_448_449uniF1E0_451_452_453_454_455_456_457_458_459_460_461_462_463_464uniF1F0_466_467f1f3_469_470_471_472_473_474_475_476f1fc_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494f210_496f212_498_499_500_501_502_503_504_505_506_507_508_509venus_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569f260f261_572f263_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598f27euniF280uniF281_602_603_604uniF285uniF286_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629uniF2A0uniF2A1uniF2A2uniF2A3uniF2A4uniF2A5uniF2A6uniF2A7uniF2A8uniF2A9uniF2AAuniF2ABuniF2ACuniF2ADuniF2AEuniF2B0uniF2B1uniF2B2uniF2B3uniF2B4uniF2B5uniF2B6uniF2B7uniF2B8uniF2B9uniF2BAuniF2BBuniF2BCuniF2BDuniF2BEuniF2C0uniF2C1uniF2C2uniF2C3uniF2C4uniF2C5uniF2C6uniF2C7uniF2C8uniF2C9uniF2CAuniF2CBuniF2CCuniF2CDuniF2CEuniF2D0uniF2D1uniF2D2uniF2D3uniF2D4uniF2D5uniF2D6uniF2D7uniF2D8uniF2D9uniF2DAuniF2DBuniF2DCuniF2DDuniF2DEuniF2E0uniF2E1uniF2E2uniF2E3uniF2E4uniF2E5uniF2E6uniF2E7_698uniF2E9uniF2EAuniF2EBuniF2ECuniF2EDuniF2EE=O<01hpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff0000644000175000017500000113371014502137725026276 0ustar carstencarstenwOFF EGPOSŴQ&QGSUB44(fS|-OS/2h``icmapAHcvt  o:(fpgm| gasp$glyf, ]z^head<667Uhheat!$ hmtx٘/<+kernpkӿlocaZ /@maxpx namex4]=Ipost6joXprep$o i:x xSU۶q'EdZ * ʬPQD(  "(L-- m(M4m)N|߃d'mku}$tBxT\a #n~Eۧf?6}@k"CDg!Gaq'^nq@L=LD7G qbb˵ǣGԍ׎!M\;>tq׎otvܸ۵㡢ksW DH=Ant! {#VEE̿1c"VETnRV*E kQÏ5#kܨqU_my7eFw7gVp[A-okjvmnn3Ѷ >Ϳmm+noɿnOi@Mm9ڡk;>c;>?Nٝtw.Owz㵏tܶmEׇ>sn>-[k٨ L鿻ݝާ-e>]:v3on{ou;C /|c;gٜ]3q<}nyΛ6Ҭ#/V-ؑ7 #Opw"eEl}fg.~z^w+;o^5tՃV|lxwW#B!rh,Oeh)Vh+K_b,[, %V4qZ(R8?]Cc!h/ & Y&C^w䛡.K'E;txN].=' 7{/0½0}0 CAH`40Gxx`"q2<.F>KȍB8I,G/ND~ L[#C)#o|~ky~:?#G^wuy ^w\?OF1,)0F^Ebx,Gȓrמw<-݆l-j̉LE}.D}WWbqעa^<>-[DrTdSē|_or4պ2O7V:ux<0E{R~sIBB!O!D"kg>Y\VDBk@~TViLc4h) Ѣn,oaY5f&b,b6X /Q8älo*nJ7oDUIKYM;YTF3QFu2KM>g9dq#Quㄢ"8 gU+Fےo7qzyh* Z4 t?122s<%$0|›pIVGYլEhu5CNL?3FjX!#ƈUJ9ͥdp@[W^^7^}'Jd1b]V;؝]t93 ]+td=@|}0A0!0paQ0j!x0dI,c0% )ixó^f,90{}</>ĵx,  Ka,rTSdސEbY$ HHD,#sBK| kp͐%"+ukyk7{|| !|[alvǰ?X߰~G,є4HsDenᥲ8G2/FD>COg9 `;쀝 >Du~WQB#h M&+h\A 4 A h 5p;.0[V+dJz%YRY/ ރMއ` |[alv*>s[~8]9Q~p Ni Ȅ`\3BC\K)P(+UP*K' PPP~jARABC :CUCh}o}4 M!4GlnVB{:Ωq@WwAOzAo@_a d9 `80FY?F8xG`*3Rw{]N ['TwQwaVq[iԮP)m_M]x /g3L7QMff5^ l<n6;iIѓN'FO:t=z5ddddddkIГ']C>t }5kw_zwܵ.V%T9ԦiTYQgX_zL"zrG(*j %i\ }"W zV?3Ѽ[E40h,?Ih-ZA[y,wnў*:B;d x %R2Hp a0A!C?C꿀/_KP /A% n`7Q(M& vDn- k.RST?OST?OST?TT?OST?OST?OST?OST?OST%zI^RT%zI^RTj"H&RTj"H&RTj"VoH&RTj"HUj"H&RT2JMRD*5JMRD*5JMRD*5JMRD*5JMRD*5JMRD*5JMRD*uJR)*uJR)*uJRyyG}yyG}yyG}yyG}yyG}yyާ,kPITUJ?Y1]yGw}]h]/]_?榅D7nZLԖc75\+p \W#3%h<%k:-:\] 5dlRUjJ W*5\Ԡ?00U-ߩ8xK{,  _R__Wut=们+81,z,zBѹ;rVW!Ws\%WmBy~t1bb>b:XmMv#6Y`bs0y9؜BlN!6݈ͱYgKGjC՚zT0Z3gjI?KC/,&V{wǴiMӁGNj*Bs#OY/z&ͨRoJߔ?b#q 5xIU?M&L&&H@} r0o0o$p't c/->p~q!b0C@axFHa h*!xa'@%&~D@6N ' 9flϕ3 b ^">Ę {b,  KaL$'rX!gr~tPQ>]n^jPY7~Sw9.Xlr8?wJ(CHH9rx\/ !7R |uB`t#CHnql[BvNn~0:iR#l65y8l9A?"0ir!ˀ|~Z 2#!|/FHHHHHHHHHHHHHHHHHHHHHHHHHHHH|FGNg9 `;쀝 >2_zh 4&pD@)ĘB)͠9kʭp@^PZCh C;{m>[# }翀/+w9W;Sp@ i9us\3߹e!+ PоR([~rRP5W 53 Nbp0!8QCx=(nnnnnnnnnnnn>V8C5x ?A"< tx",J*J*!1^*,ee_r¯d [6w`|O6Fx6fx>-!|[alvǀ> a/|>!8,B}%z3BC\r }\@1XP eTZƦMU9r4UhCL&7JdPNõ oxP#@@@@Q0X';^&;rdL-N.~!Xi\Dv|(\x?`\[2wH+"]adHqnh+N~"oi?ӴjTY`3w#D{}{I. l ~?ۂmģ^Ƈf?2|>8^DnMX={KJ\G Oo%Ɗ牏,b` 1p9&sjJjJVUX*XςuVmVJ8Y+ܹvu.Y]gqYuwRWSW;d%;XVb;wsrwsYq4w(X7swpXV{7;<,bowSA#wd سVui`z#0,f|Y \7W/㪍jC!rG4]&F_^ݻ\!X}7(JE}nevǘV̲٭gvØM{$3ͣ"YOEuM'vBacȪQD2i_.b}XE(m"k<=Ditwqg0Qc2H_7!ACVq+qoPuO%% ܇=Y(p,r}Y7pl1wȿLu~V#d c)3ۘY% g ̮ 3B3ˢx5E7yN7D~JOwnni]וCWL e0j\/nSE0eF-Gmh-sFdchvF378iF;֊s#GNFͨ' `3zQ/1Q9Z7 #d藺3j1qF,`ēʈXhՌVg~CBj2.c.e[gD #p3}#RfА-=hN>}$]D ^_])u5BQQPC}[@x %K:9b-} ? p/?}0asa b10C0<a< t1 0S0? XI\+D3h.VVM^JLuu],]7񊮗-p`7Z'&EI0E=)]ɐbF,xB6p[č!G⺐v >ׅ3›@(+ n ?"v(<x b{A0' p*@5 ^|k fB#h MK<)Ăo[6h(=5Uu)N]=n}#gAh7C.A>E, H[P(2p P*5DvFv:wED;QǸ&zS]{/0½0UCa xFHa q< xB,WX) *LJ.kHrq%:C-xlmvNK58p2J*}J*}J*}J*}JUWկP_VVVVVVVVVVV"WQWQWQWQWKL~-]!ڣv"b}W}ye^) 6w Q~[x0 = Bh"] Ɨ?\wWe'gxuS^90o:e먥E,. 38O 9z(8b,#↱a,.\FQŹbqXEH\'׉ubqX\'׉e2lFquw]GpqwGpq>FQTV@ t`OKX$|6} D{jtIɊD"H+D"H+D"H+D"E*bL~\4b%Wu;kČ1F̸38f<?3q̸3nq1 \1jk;=6QFJf2#%8р3Ùrfkμ3D|ΙXVa^?AƠTFq"?("EĠ"bPD A 1u("EĠ"bPD A1("^1GǸufacv<acv<acv<ac6@ (ܝ) |` (;Vc/b@XXXA)k;Vc;Vc;Vc;Vc;VPT=UEc' **x2z(^PQҾ +" +" +" +" +" +" +" h**139Ό#Hsi#MS8C ̉ن3Gr惜93sfwی3BUI6+`q%+9 |Oy y?zHV~>mZI6w4M4 DE JhAoӂަM4M zhzhMoMoMoMoMoMoMoMoMoMoMoMoMoMoM%oI\*桲yha胒$b?)y0/N@>D?Ԃ~PsC-臢釢釢釢釢Cvs'!o$Qy^A_Ԃ(://///$E( IgQ"(((Q G-ZEEEEEEEEEYIxVg%YIxV0#/K | ;{8=\<=\<=\;zvpõkG׎..=\'zNp:uD׉=\'zytU29qu9'SpݓZPm- y B»ûqYa-8 ڨڋڼe$W*J;uɑͨ)tJF wB{_)3ry^]•zc*kظa0r;QncL[ fyY^OgY~A?렟u:gY~A?렟u:gY~A?렟u:gY~A?렟u:gby/|x1:BX%H%2RX./~M?\ h?SZpn2 YCO,u:}z_Au:Bv'Av;z`=#t;`}>Av;`}>Av;^@(A8O~ބU߂a-C6Fx6fx>]Ͻw=ܻ{sz]Ͻw=g9|_W5o[~8A8ezY7C.A>E,njlj'ZMqh\;׎Ƶ mړpi#~\;׎Ƶqh\;׎ƵPCic?=Uz>j"-erzkrCr+~vKjxE Ca(r8A<a q<<x"L,_n8h/)8vxNnr3`fQڟyݵvC/e=/qw/`λԦ0j.<~P61\(08xG` O3^}ϗ c[WO8@!I˭"C:~?_@K";*hϡ4"OKNqEn"+6YBğ#Cz_!r-T?Q:& 1t+YJ4dW;` dMUYJiDZ!VHi"Hi"H+TFdD(/s\ xV|5!G9N0flsy'K 3 ]cwAw=n}0A0!R5 a0A#a=VJX+c%zD=VJX+c%zD=VJX+c%zD!zjLa̅aEXIbx>x2W"j* j* j* j* װ6Fx6fx>-!|[alvǰ>=)|e!i"%EODB*LT~.E,-Dp.rH gPfQni +%aS\ =+8'0fY_;N`f'0f<(/"Ӊt<(O'Ӊt<(O'Ӊt<($3L<($3L<($3L<($3L<($3L<($3L<($-D(B[r Qn!-D(6FۈrQn#mD(6FۈrQn#mD(6FۈrQn#mDyhNGyע\THWC3[J't*wrQ!|(CMM]RȦRȮS)dS)dS)dS)dS)dS)dS)dשT T Gȋ_9֭V|5#sJAAAAAA>P/  CA><#OP>#OP PPPPPPPPPPvv8G-'ea7F^_Fv@ދP})j<Ԝ/ m|rDNBN_KQ;^g /CΠ½(܍(܉(x:}tԫ(ՉR(ՉR(ՉR(ՉR(ՉR(э(э(э(э(э(э(э(э(э(э(э(э(э(ы(ы(ы(ы(_W~NzKe@.B.B.B.B.B.B.B.B.FnFnFnFnFnFnFnFnFnFnFnFn|'ԖC}) P'2eWKhBA~@ShU&/qf!.L3dJ;T蔃ܜUlDt{m #ձ6FdӜl=g;9ۇ* J`'rxd<5ˉ_#1Tfddw Y{)^Wཪ>;л;л;л;л;л;л;л;л;л;л;л;л;{z@W ^+{:-A%hKE[*RіT-mhKE[*RіT-mhKE[*RіT-m"UPev"G_rzb=;Y}g+'vtvBGE$2Ms콕ZCPk{=jmZCPk{=jmZCPk{=jm'Nh{ m+QF߫w4]+ZT⻞@DFFMa/"uF5|?=|Q Q)T{ WCagEftX8HeVSˬ֍Q\5ʟS=E %S( >OS( >OS( >O`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6`# 6` v` v` v` v`_װ5 _װ5 _װ5 _װ5 _װ5 _װ5 Cm21 p21MF<&ʗP"CFP 6Am LG&# yd<2A LG&# yd<2A LG&#ZDh5fLV3j&ZDh5fLV3j&ZDh5fLV3ѪW*ͨρ⊉PWg2?K5N^({\GJݒ^uh&n+ paً(R:m(چm(ق=:i|4.Eե\ivx O'_F6TmC6mC6mC6mC6mC6mC6mC6mEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEVmEɗ첇]v.{ea=첇]v.{ea=첇]v.{ea=Gf %5-]/`܁il|!?/.=R)(!o*R){ϳFQ|Wߣ>= Ѐ h}}z]BoZjDe~aÝN0so%֐%0]Z | / T*g_eE~qоg5~VjY ?g5~VjY ?g5~VjY ?g5~VjY ?g5Ǔۓۓ{Ǔ ;#+MVBV$* ׾ya5cGOh򫞴ɽT9Sޤ]b\rZ.VjX-b\rZ.VjX-b\rZ.VjX-B;>C;>C;>C;>C;>Vt +ښgE[X12Vt+ڕ~utal`lGv;a| g䣱W:u'~_O\ J:ց0DU䊪{@?wU4i w䐅SsӇD=΢+~'jY߆k~G_2ɣANeA.óNI;NQ-jaW4F^1-&.`M찉6&va;lbM찉6&vaה<{dIA~V gYO{7y2\os샜}ۑO@(?2~FQRj;}ՓNmJ9UP |wG.9*7nF9& դQGj+ }'_W(~rp/(B+8 դq(& Ť4T~' `6́<̓i111110f, s`.</Hj! kVހ7a5 kX'Qq>*G8|TQq>*G8|TQq>*G8|T+D5yI_վ=zУGN(z<rP}:uF0RN}v*{]҃)uFg*VT2ZY铯ǧ0Ach"n n$S7A4qr3)B3kr4ny V(56c;yw:q'q777`PG;CZʱ P7+J^_stV5OWրc9 |^Jg0 0cictNa`8yap|P8RkG2n42)2GA T> |ǥOI, pQ[rx<Iue^a*D:}PYÊ fE*9լ;?o)_uWךqMf?ec7yEu9] Ŭ$RrsBCp\/1]dN8&rbMZ!Z抇 ōDѷ2g3ZFΈ*#k=s1w#3qF\Ӵ'e%=fcJ'F#jC\5HѦ,(a2F&_XbV A)3pqbVՊ)HEy3Y(#Fs?o!BPF :ʝ?͝{١Ōc32F$~u}/lvk P?s$kwY G⁉vAVYt1X*ne3̤Yx'\G_uLyy1 ;a/.1lfI P"`?1̤\t`/)$,>!)f25h txJeftCyGƺFXј59L^b&Wyvz@ne=cp\"}zǩr/H'}*Cy~- n%P e${YX.2L.Er\d 2T%Er,( UIz 9>|d*j@r d*zp*T袊L)4mBMd-Y2"sR\hfYf*YKd"4TbE; S! rN&{Bsd1YU\d1W)*b4WeRn5|_ #8ɏ2" Ш"h.2"ЮVJ2Om:ʫFq(Ύn5" D@sfbn%zݥ q:zr9Z]Ι~tG~tG>tZNԏNӏ>ӏ6TN+ѦmjЧ}4GF:j׬EMׇ=ƝqD>> @GrmS8i8Y|,H?M?BG~Z>ӏ>TY+gJG~tG~*G~4G9h4mѢѠikKKfGg^tEg^mЊщ}ч]Pݜ9Aus tRN*.4 B# eG}ч}ч}ч:5ey?ʎbv{q:;\Ugwv t~;[cwCܯv;v;vv1;]]̮Ujn~'7a'7*v/vw+g{{حٙ--u:nd[٥Qv(t]vw*3נ_ė)_t7-[myFe<_A LΨ}XT>n!n!=c%R+Nz=^|ӂg^//4j;.QQ!w]pW9h̄L2K53.`iʌ-ŒfjiݓYeY~,Әe<,^fgfkaV03 ;03.٥1;A&L/*zyS{_by/Y\MJZUΚT&Zm2YB֥Jm"_eD/nf6Bˢk0e*e>h;ݐh"wa v3v:3cѧjf ߋ7J3 xeUPpJ*U'1s|?d#7FR ӘփzUV{x{x fF43b5#^O2b9# #^f+ F̈}!Pquّ]1ojAp}"34Q/XWh߅WVREέ!JlDI5q :@SKsD+h-ϋ6V&;"N&rX!3J8kO"]>(r0F2!1ID~;[ܝ2l6'(q<.gzz?9gP#s=[[vYl Yl wCڂΝa2}oǾjs%q0Gx(lj<Lg9`6l5fEm|~;쀝 >ݰGE~~Co;}T1GE抶uvyN4򊈊,(T)Ch14Fp3O}*Si*mZB+h m- w+JXtsF9H~n4q< xy^D L OTx Sg`:< )Y0[́<̃`LPbx ax2x |~}Lr!.BFob P(2p P߂_[;+߀dEQeF@QdAeQAAEZFI2]ZҔR@ P Ns{99w眵\/n49 N2d;4vi Sf~",^CQ& :fq學>t;1jGssq pˑ{Vk9ZH#^9R(>ksdϭʞ[=*{nMܪu;ww`ޙ޹*{_ {}URufﻛ*{_ {}URuf{}dzֿ-[boײeK_˖-}-[ZlkײE_O[d-2` Ee-r/[^Țl{"Ee-r/[SlE>![dȇ"Ee3-f[LU)l1bLaS-f [>?ȥNs\4(js9"W"/WC*}2ɵN2IБsZ<>nm':]prG#uGβy0xXsV9+xaY Q  M4lh.D M$L),?fvr3yf3|٘0 hd ,eˑ+C2&۩x3<9Z؄C$xFYDp"__h2s?/܆uRy'ekY'n"?;lRklAnӽy}2t?9GMӸr9`p9o]!ϙB `v0;!Bcn( LRxze&x#et)Aeܩ,K:Fo|HD )؎\ Ủ9I&)2=vrn Η%s,0?Kp9˸ps}^D޳,K@i!dd)|Y,1yn#G̷YSN0Ry02L1u be)G Y儘8N&= Ӌ_C<:ؗb?֗>%6Kcgϱ Y6Xm"6Wc#m2`CG_S_#ML˼Ri$ޒ *lsU;U2P[1)9ZYD+Z.crY\F з}+@ з}+@ 0o[Vo[Vo[Vo[Vo[VPj#4+X65ѷL-Em!ӷ:Q$: sq\ |,B,2YnK֗+.{HqZ>zlFl·،-[$QOMf )؎; ~ObbtYALR"`~Qq92Q=|XP; qEp ΢[uw2M T|2SR5 !8MB' )wj&(0#"5 Th$n^D>9TNk|bP{X7{6R^9ZgtAWtGSUpLz1ت x0oa;m$QxGc&Ԧ`*>4L't,?,̕,a>`!cxL_aAj˱+ _KC[o b3;lE"mHv9.?g_{q4"1D8\Dq 6(,.2n&nICMXֺ1SGk=S_?!Ymypކ|myT&Z9ZYD+3 o}/-^B;GtD'肮W]d큞Wzlxa0`(0 [Fbh1c̥o?ދ(Ƞu֏Yyןʳ֙uxx:i<`޷2[a1K,WXx$`9V`%Vku-:l&|؂HB2!۱c'va7Ȁ˚4#SX1L qyGۜe!/~0Z(E7d&|f0?mpG-vKOq? Ȋդc ĥɃq2)|qbxn^n$k^բX ,꡻zO4쥂B<|N4^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:N꥓z^:NS.:NS.:Nu_tI=-Ni+ލ2!#Dy\\W蒞_zq~͇"7brtmWו)tCt=䷦&7c4NH0E>*qKґYz.,{t3̣!r<̣+/)>s\,WUKt0/Kt0/K\t0}7mM3Yfɥl&st96OG_ŒBJCC?ПџѝѝѕёЁ8|\$Lߩa cLL9^9fcea>`!lu)2Gˌe2cz1̘^fL/3ˌe2cz1̘^fL/3ˌeq1ϸg\3.󌋣գ3.y;@7xw0ysbñ xmڡ=:#:qyEX1J1Z,#qX"&ݦL/(3u7ԋLS="KM<66_Kڏn?nv:Ы3;laws\ؤ+tLxM1VL}Cl_vmOOl3=9c KĒ זgL^+r5 Yjͨ53,]{M n֮;֏[?cuk7(jmh񁍝6Pkc&uSM8֦ݛ6雊7]2nˌ-K[cߒ%ckV['Ě-;%8!qf ;'f$N2#іh$$=(uR~o&H43iMRbI'IO$Jq W%۲491ywrZRדu֋H|mgu֙mmնmϾͿRjL2!e]ʑ\^c{}>})n?vv3wّviO4T}meaN`w0;|s9!EC4% -,ZZ9f/|"KIp'}Ip'}Ip'}Ip'}Ip'}Ip'}Ip'}Ip.4:8c511r'b&T4L'? sXt!I;,Op/@f/ZyqQLo#Qs.#WepG+]J8RzG*>yt?`ze L<em,B"Γ SV\%y8:N8:N8:%te'km(/(?2[~veW()e?;9(JPҸL,VB(⺎ŋJyrIyLJ<"bH9+(\5ܞRn7yq:)cyM<%T7BMYffA,sf K Vi7yy|ϲkuMn[laf/|O2] i1bca=e7頯:諎^|%Y[KcH[c2;̌}\kZgl%jmt['Iumt[GQ;̊u^Q/֐9~y:T^ pz9eX:ibzEbf#/WU*Ul;Թ,<,2#n,Q:l&|؂HbBOf )/*u'va7~ ?33"Ϫ{O, RqDfGLd!Ǒ#'#'y)6BF8(o8,"U Q9^Dwz'Iwz'Iwz'Iwz'IwZ,P*8wn܃{QMXFiukZ=xE>@+HԚzZSQMkβ YvFtE7tG*ߵ`c}_70qN71 FmTR6 b40|1h'dLǘ3)fa6`.<,b, /oR|e- *ײDc_4Ec6h/hI`_4Ec_4Ec_4EEc_}`_4EKC:aQd dv veN@G.N"8 `G,N,Cڵ3(f<7y\_m^R5p]5ECkSmmhgy xmڡ=:#:etFtE7z^k>~?u x0oa;Qx~8Q:[?d90a cLt|31 a,~yXEX%K! XXUX-Z>7X؀؄o["IH5۱c'va7HϚ4#C^f";̔V8<l(z,#T,\~"2z`BXƟ wxB[)ŭ㾎^*mqiHYqdO\,y]i81Xh~*AuZ#,k6=4hLih.Si4Te*2fJLY,h4Te*F,m4KF,m4KF,m4KF,m4KF,m4KF,m4KF,m4KF,m4KҠYFG4R]Kv.SiTڥNL],e2vE.si\e.2vK̥].sile62v/D*P5Z Ny>i6f!seK<,H73,ZqZg.33ROKͶ.v86fkhH+n* 7M*\{rsi|BZ"ηqfvh򤲞Nzm^Fzm^Fzm\Zo.7֛NՕd)7{JMf|3hiii Oͣf+>f1Zn6{v\o.;<6ۣr휷4lᱴY6\cwNgъ+NEⲿӺ/Gr-+{_y\T6tКsiͩ4Zs*9|֜KkΥ5+͹7͹7+ij+ :KΥAgӠ/UVyhihYLZt&--:k~h5XI3}Di9iQZyyV} {{,sZ7˽2NΧaҰSiY4Tv* ;OöuyƜUϧmivڶNi:m;vNi:[q4nƭӸSi:[qhihh:;֝N#h:[yy4L4TNcbeQLX8*i:-<O ϧpSiᩴTZA ώY'}4@lm駍gSiii6ڸ6ޅ6^6nh6ڸ6nGn6JOiji4Xw|x*m<6~6~6>6~6~6Mϣڸ6ji(Z1)9ZYDZK9ϣ ^h /3+@O^e5f1c ?CX7Yᬿrfg}-o1 $$cR;K,hiu-'Ńj)`iY񐥄?U[꽨p?<ꢡ kTFeQGTQsq<'QO3hFҭ6aٔe34gEKt~;z'zUޘ(S'a&f3|٘#sY~yXeGuX ؈Ma+$z,9F)؎; ~OY"3_Y߃'YALU"B6#G'#'9-biC(i38s8 dy쳪 +\J^ͅM}A\CQr[6_M" 2Ucy=D&M:¢5Z=Q_{\ў-X\jxZkYv^:guFtE7tGIUpz丩 x0oa;Im$Qxf`Xc&9HcFӦcLt|"s,?1i0s0Wi_XXcҖ+,C~2: ` Pa0o(xc y<7,'pI0STiO0b&f3̕/0Aߴ7Mb,X HrJjy5i-:l&|؂HB2!۱c'va7~׬")" 8" k͔5O7#'|O6cV;_rbyjp>Q֛(œ6_#ej 5nZԊ[#}q*g&?.5Йq霏\˓~,}"&,4| 4GXڨz8{DC47AS4hVh1<9-^gD;GtD'肮W@=*^CoA_C 701C&K!zѢxcd1 z *ˏ 1 >fb>瘍9/0@担X$b.KyV,e=<:|6yM,Q( i"#p)q+'oG>'#p]ƪP+|*ܬ{aa\ߪ;WVt3d~TCߗ4=z *ZGe˺TYOI|5tss|-ArfX̉\.Ifq,wԜŬRs.2h>igesLGf#3QLGftdf:23\5N :ʤ|M~r0oq¸zoO w7ߗ06$Qdf m mLU~DfoO cɢW5~DfL1pu2[K^}-Édfl=<{X=2<z>NEDK\- 1cKU$BaYTZU1^pJYPcT'9O}YZ%,3- M Ϣ%Z'>h"%C{t@Gt.nx=ߞ,=Y?u oO|oO|i(i| ,0!&a2dlC cvw,'D .[rEmIq&&Y X/Do9+YJX7dz,R+{Q~TxE!50jCeP?GQ!cxx 4AC0MX6e Yog]e ;z'zUޘ(Q'a&f3|٘#~V0 ׀䪴A6UڠA6UڠJTi*m7)*mP A6UڠJTi*mP ߤ䪴A6IUi*mP GdzDq9z:rq)6BF8(o8sdy쿪 (\3J^T !( D9-q/VE5 ThL-]^TIhjoRjTDMKZ,5&T<5gنAhם]MhY@Op^M78vj}яg91T701C&a8w#Y»>`,>80j̽s6AL`.Ӧk3X~c.fa6 yXET[r _a- *9`c6&b3;lE"mHv0_iWNn~/{pH|E2C3 I!`C(qVe3vm(}%;.˳\;il?J@~_iW~ZSԲxuPxi~?u x0oa;Qx'Xdz@{DLd|)1 fS,|0 K%+,C<+P:ֵ-6c V$" ؆l|؅ݨMJߚ47)L8g˓O:rqy)P v7b}%7QfC-e6}̏q+D⽸բvZ`yPőqid\:#Y&"bM\EKBk<'3h "0exf!_OĤ:21#W -pqFy^p粗GG>Q%▌a_i[ie4$}m>ڈk#{(255hٺ2Q)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)~%SJLZ |<gLS0mOa4a,f,f,f,f,f,f,f,f,f,f,f,f,VmHv؉]؍#~{p8"uL)Sgԙ2uL)Sg````ԙ030u&L Sgԙ0u&L Sgԙ0u&L Sgԙ0u&L]'. Sgԙ0u&L Sgԙ0u&L SWth&(0#BZBn^TieJϔX).L[kvL3Lr:$3Lr:$3Lr:$3LrFbh1ca<&c$3Lr:$3Lr:^9W2t sHR;!sHR;!sHR;!sHR;!sHR;!sHR;!sHR.!KHR.!KHR4}:[ZLsd)s4I4I4IKN*dn9͑+X$q=Αw1GQ#Un2%ϙ>LǦ22#赘o#^Sx-+-Ni 8pHϑ#MGx4i{s)HS&#MۊLJ!5U۫w`~={8{$}!>D҇HI"C{t!!=DH"C{t!=DH"C$wqD H!)D"HItIV;?iycN.SM} Sy4\0syNqD>-!WW9^J6^lRk㻧9p)0p$:ⓔ\:&I>QSJ+=\>#%}brKO+~~P*?$zb_g擕(9rLP9+|#+dE/;,⢟_e{^z^"`E/[xne<2G1\n_xDE"ιs.~Vy'2r!QE(<5繍6*wAau:F|wWg/4@a<#1J4Y.Y".BڎbxUfsoG!b[q+\U9Wu\G(Ty'GrR8&9&9&H2rltЗ}e}'1 4@ZZg#(fp3Kڣ:^FgtAWt+^x7/?u xä+wo>oĨm=1cY~} O$L돢`,|S̔,|1s0_`cB,/Y.ez.}gϘyg_cLGLe *5{)ܞ2G.P I ]|HD `;vpYOa_318L!`C.I2bwVyB^R_^'fd9UNjZV9UNjZV9UNjZV9UNjZV9UNjZV9UNjZV9UNjZUiUF Y$d}A>@bʘbʘbʘbʘbʘbҫ~,`p0 8fYA}}}G}}}G}t}]G}t}]G}t}]G}t}]G}t|_tݏ84yMM!llllllllllllllllΆy~?% !( D9-q/ߐҥ ߾._[U^_AGHw#}t>GHI/YF^n=D$zDnKI0&}$DWHt/"$Da=LHtD7HtD7HtD7HtD7HtD7Ht#=$z)naR R R ݤaRGI i$Mi4 h>)O擢h>)O擢~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'Eäh nRMIQ7)&E^RKIQ7)&EݤunRMIQ7)&EݤunRMIQ7)&EݤunRMAAAAAAAAA^!EWH+R )zRCzHQ)!E=h aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh aR4LI0)&Eäh nRMIQ7)&EݤunRMIQ7)&EݤunRMIQ7)&EݤunRMI0)&Eäh aR4LI0)&Eä~ROIQ?)'E>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}>RGHQ)#E}h !R4DH)"ECh !R4DH)"ECh !R4DH)$EY*0 2n aMIV7&Y$kd !5DF~Uh7=M.&e+{ z-l夭6HI[|2{KBk</-^C{t@Gt.nx= 5FE?x0C0obHږA6HIi mm A6@I i mm~OH i'mNem6i{M&moIۤm6i#m}ti7iiK{I SGT_Ici\ %EH")dAO2I$$m6'/~_ٵ$_$sd~d.#H2d.#H2d.#o̷IR9HVv )$H2R:@Jet)]FJ~ROJH)$o~knknknknknknknv1]:uLי3\g:O] L7n0ܠk."""""""""u9 +k5JӃaz0=x9O}hDdzYϡ}3gsCyQ/DB <'Q/zIK^D$%Q/zIK^D$%Q/O^z!ꅨ^z!P/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/z9ˡ^rCP/?|9z9ˡ^rCP/BrF4Q/ziK^ҨFvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvkGvˢ^E,eQ/zYˢ^E,eQ/zYˢ^E,eQY{Vܩg3w;̝zN=s'">)YKq ".A% D\K1:gE,"f1ab1"f1jOB"1)DL!b/""b/"1-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂-؂U=qG<"=q~xחSBT'A "f1S[[[[[["S؁x N'FOVh :BRqsBkkέZWޝ[TEǷ܂-؂-؂-؂-؂-؊ P[P1-؂-؂-B*SA *fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *fP1T̠bU` SB*P{Q{QSB*P1)TLb SB*P1)TLb SB*P1)TLb [P[P[P[P[P[P[P[P[PWjT\Qq5*Fը؋؋؋yṬbG<*Q1yṬbG<*Q1F/*P1)TLb SB*P1)TLb SB*P1)TLb SB*P1_|=6T̠b3A *fP1Z؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊؊*>؁؁؁؋8*>8*>8*>qtk)TLb Sz*V~TGjzgsCVg]=S>SOUW)U*T\Pe>q>%}s6dBU[O ^OlAnD!bKpm'Om'.G[1:D g؏؏؏؏؏؏؏؏؏؏؏؏؏؏؏>Ύ19D!b)"v#b7"v#b7"v#b7"v'ώW[gG[W!*D\q"BU"2D\q".Ce !2D\-؂-؂-R3``FX3{k.575~_--k & H\yJ[`b{Wb-dj>beDmV_G42VE#g4L^zu aС@pA3Jg$NM|7;D⢠` {Q%Fݭ-us; 8{܁(ZSi}et]Mߠoҵm W0nl+=8W&~grcشtet|$ݔtSnzGnz&-ݤt#;ݦtSnMQ)J7xtSnM(tJ7tJ7=Mt#݄MQIK7t AHMN)VɮCn:Cn:CnRMJyMv&GjII-E(H-i%ZRK(tH->-䤕$:$IeRT)_ۣVG=JZBII(RP:$ $$RPJJIB)I(% $$RPJJIB)I(% $$RPJJIB)I(% Tf!3-Ѩ(%#H(=J#%PJZBPz$ GBPz$ GBPz$ GBPz$ GBPz$ GBPz$ ;uk$5 eFBY#PJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (%RPJQB)J(E (J(J(J(J(J(J(J#H(=J#H(=J#H(=J#H(=J#H(=J#H(=J#H(J(J(J(J(J(PrJNBI(9 %'$P:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBP:$ CBII() %%$PRJJBII() %%$PRJJBII() %%$PPOmgm$4I&MId$4I&MId$4I #H =HOCܫˋT25JI `&jƟXj #ONKBEw'՜ #xVʹeeꨏϹOvW/PyTǡv މo5{!T!&!&!!!.!Xs.2n!"3×##M_U:MMtCԯv#{7齞ġtzg|gwl.F7!!~: FG~~ި깶5F8߁Х[|FV6u Ojlz+{jԐ=?#G`u&G^R lj=yc^lnvkm>v]pgƳnJ ?E!G#ȟſ'NN o=}WFi#HG?Z=>Y{\hcI?Eϣ,t<?YѬHOOOf3l\4]Z|V+g+i9[-w$$n9?9r~%w]r~en|/Xojj;8χV>%euy +E?R?,wiyQ+6˕Ӳ~gV/uyCO𽜜fy=-wiN?=^z4:Ct}#H:cXG tG_^J9Nd:өa:-?΢t}.z/ˣ+KeIWעNWE1s9f.嘹3cr\oAҭ4~L?Ff}LJlnR7c1fv>ݬi4cVfxU*lo4c1f}L>YӬi4c>&mIZyV'iIZyJ\Aږ©Npj-NũՒKbZJaU'V*UXՉUԉO)lĢycAߤYt }out}V7Fay&;Ӣ~oŰV%z Xd:fD#5tyӥQ RՉ[)ꬱ/5:aQV RQ(WsIn~Mo>̗%KԸ'ܸ'h6VVЬt=1q.WEcg4,eRr)xz GGGGGGGGGV9?;>w:#(:cCtO'ЉtLt:>LtIgGl(Cٝs]pKa}3>n/t]]Ό;CwF|s07`ns3 f07̝s17bs)8>B;,qaԜ(GNphq߆o3Õ3S7Mnǽ8wpwpwpwpwpgp8 \OD]XU9۵ewp^t^tp8R9#v[t .g~g;)>KvL=.M5?Ѓ g؞vDKizizizizio/] m> 2B+)>;r9n========L¤.L¤.L¤.L¤.L¤.L¤.L¤.L¤.L>\9#pYC:h`z-韝5<6 WnÕpYē]BT0FәeH4E4E4rc.㳎3\~Χ (> yˋbH~g9>ON_WkvV9yout=g6&,]W3Mg7s\28 ep.s\28 ep.s\28 ep.s\28 ep.s\28 e*gf\ssqn.Ź87V>9zQ3%jVzکC~xV:ezVRuWߋӋs8׋s8׋s8׋s8׋s8@|p{nUgSSSn.źX7orysǤZ=*]!tqܒ%YU^os=+FO'ٷĉ}+h#3uX뢴|-83.Oѧ3~9?pkM% `.py|I ~A_Š/'M|"q<(7qqp=5W6=lݗ MHOg flOG1z<荴#DMKp]i7L'Eoi_ڏAӻ=>j;ЁtMCat8AGQttpQ]0]|*`'Fe 7mԚ6,4$7 MCrШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*ArШ4*Ao:)z1cY$ípkI:gyⰨ7h(q#\F|SsgG?ҝQ;.RT)棬1FeQcT1FeQcT1Feѭ);*KrĨ1*G0$/ C0$/ C0$/ CV!yaH^!yaH^!yaH^!yaH^!yaH^QQQQQQQQQ!eu[kmZfkm&֪nPK|^iNyƆ෕omݻ8gyh"ۏW~ 'kk#)................qF2\+e j׫z/ׁX?i}ۧE+^ؠ_ؠOؠ 귨~귨~귨~귨~귨~CQEvjvj(6ٻ {d] {A {o wA.ٻ {d] wA..ٻ {d] wA.ٻ {tQMtQMtQMtQMtQMtQMtQMtQMtQMzDGzD pA.Y d,\ pA.Y d,\ pA.Y d,\ pA)X[[[[[֖lm)[[֖lM)XS ֔5`M)XS ֔5`M)XS ++ߝP 2ZAF+hylC|>Y MWq Ty۩ /U%[?ks_NjGɨuGvyw%ޔ828.qw'ZKNOOﱥ5ޖ"D?/]{o^ܻǽ{*(k+T{4%_[I=yw{ɨ:rujcI:5j5*os7[ӽ:euwyV\͕5msd` C6Ȑ 2by19Ak9AkAkAkYRD9n9\;L潒vAnkAnkAnk䶆 5{qDGtzg۳3 {OѭjOoάUQ#VoF<7 +lʖlʖlʖl-e^ e0DT|b_Jї*嵑*Cy9.B9._s=zd<ğLB9,M<|$rX(rX(尼rX^ P P P P P orX(rX(rX(rX(rX(rXXE %jI<5,[U([U([U([U([UX9Ws!]Dӧ,}.ӿ+9W<7O#4O#4O#4O#4O#4";S(;S(;şW<'b3{;/[T|u:_etBgƺ-g ,%~dOXBޭՔ0Mp(}6M$vq9[[+^UX}i=}˽۲o*ewB^|#{sO/T T?W1yo[t喱>wg˖\)5ţ}cjsqn}r#–{UݲGil.2cRM̫uEknŏywv)C)s }w7v=%OV-kݦ9_zcxrS[fcQl}J16Ò[ֺ9Qo')_\ZdmDt]ݳ?-7-ޜ2_xvϰ3^UWdDzI-ϲ,/Tzq?TNV\͕{=^Ϲsڬ#g|FtOfM=馊gtqT-NǷm^7 ->h_jznsUW{=^ny|e->>wKEBgG 럠/ֿ6a2'[]Mo}ޗ;.5qOFA#2?Z4*)oD^:nT>r}ﻣ.#ed A*Yuk.l_r YӢ/wGݵE{\W7n46|9h4+|9h4+|9h7|9h7+J9h7+J9(SYѲkow{}@?ZD?E. }fF V6G里tH4:Ct}#H:cXG tbpLt:>LtIy"]Jt}L3J }F_j͊o7\KߦznM4Kߣf~Hҏ'چmt;i~IwН+{t/|Z 7[gZw[81,:PTwqtGqt3GY\=gq=g9})q,nfΞٳ8{Vݵ/뮋~ 9|ָh˸M3MFq^zYߢhI4+\9+gq,ŕrWY\9+gql͕r6W\9+gsl͕r6W\9+gsl͕r6W\9+gsl͕r>W\9+s|ϕΈ"th8>J\AOyI:. ">EgstIrB_ ~!/\rB_ ~!/\r}37s<~y\?q<~y\?q<~9\?ps~9\?ps~9\?psFVF Kꗸzm)}FZٔ^3b1166x16y[à:ȫ|;h zAsޜi}8*>\.EDjRz)M}~ k.s4@yZgTaGhTVז]6yKkRѸ(U huD?;>ם@')nOV֝R՝(SwIgEkt2~ DƍDER M;HGh^.h d'C~%}Yḧ́%UR^_1!Ch QGÏކbX7.Ǽƍ91rDO8>C..zʹz]Q":V덼Gz#덼덼>^oF^oo )Z'y<󍵥?Fo|c]qO],7}#g&g f8~ohfFsmw&YFȆߨ>zo71kF'ԟ߱1;q}l2zVDGybB섷N's0^o ?x$^4I\ύ|?ϟT~ύ's#?~retE'>M|psƬ#|Nloa*swqWjƸiƸi̊Y1nÊY1n㦵4Mct7qӘղIcâBpG<;Zۊk=M%.H+ ƸiƸi8i8N1Nj8Nz;h-墱 V1*^F36uAT%N1+g{8gk8fX:%([KgF6]jWڕ%]j7cV8`3?d2YنlCV!+ېm8c0c0cY/[JAMp`iA8#qFH8+I8;M|"q~P8>qE⪠!qC`R;oJ&2[D!س樚}kP_ 59Ԡ洚ӃԜYsfsjfd'j. Vsa5|Kk. 15W|-8檚jQkj \WsSpZ57gZ5?Ij༚'jKS5j߬iY̪I֬ nI䂟׬)w Ռ)Qg~$X^ڏ/Aw/jUյ6]P A탵 0H<; +fnNqC> &5&nvgaNޤ9nhIwm'ohwh߼כOzW\|sq׽vԮswoOvnu{_!I4y/yEfWߩ{|fwt;8u>ۧ);c[æ|]ǚߴˏ.So}9}GN?cE?73_5[o?>oO:{۳ g>9;x3 Ͽ碳.z/o]C>C>Z@}t#-@>C -@>IfiUJRF5O-Y%4}HӇ4}HӇ4}HӇ4}Hs#!M!i~4?BjiaaF>Y. Х]eOOO M!M,@H@&yA&yA&Y(,aY ?!?!?!?!ǹ$'o$ZH i"-@F&41Q*-@ԇJ}fTnE[QVTxpjA&>L\e'i "-Uxo_fOcs|jOUC; Lgl^[_JH+lqEuG |j(QTGiGȾf [3 :+ŀQ^(_29A>h%8#=h.QGt#J:#J9Q%UܙX*:(t:ʇCiG|HwUpFfT퀪P*5R3*5*3r@UU9`T.QQ1Q}՗1jvQߨo7jg3FQKTWQu zՕ8wQ{sr F+FĤh{1n^̹smcν֑ǹZ9pνs;sUh&;/p5{Q|չM{G^n~Q)Zl3#x>Dh03`fbWw>v=0f LD LD3a&@Fʷ4lH;~˽1~˽}/q|R4=$NΔ?ŵˢb$I]h&DL4&3d&DH2f5v rDh_3y1=fh_ɋyq1/.F2Af 33E'vv.Pnx1/FӸ4.8 ]N<=gp-\1gXwG=;f Ld!?Er;D2Afr52=p^5>ȑvfF=QϦ|V+>{T]WYٮkU;riלwW=k-Yov/k'o 5gYε❋uszZVYVYsZVY$,8.~8 =Y/RT|fjIѓV'FOO;?`z{?NoGtn!m|*6!ߙJ?lT{pu*?3*?x;.Biw`ϩʏIϨLt. ߻]oUVUQUMGTjFfTj¾YUk*1܌ͨڌGTmFծS9UQ:S  a;r3*7rs9Syu3:UjVê1^1s1s1sQ1ir131& x/kyyJ3 u i)=<͘GTl:?`aN] *2iȳ,帜gYks%3xƑkۢյˣ#}+ꎍV-WvooMx!{x= C+b^9y)z]]ߍUW[:\=\uuGՇǢ 3( ־rG?**s9NUAn٭\>JI8??r0(EFn9~9~9~x+sVrC4?OsW69Q}o\0SQuO利1U7U_;}ɕ.⣊_#&$w 5[puk%A㝾kk0x 5fud6yE"^XT1]eVFy#KT^|`nSK?GNDKѩ 7<Q񫑕Go,شջRǧd߶ ~ҽ_=~?iXw x:NGZwVZ'U/>sOo-|ͬQ1x+ߌH?B[)y9'/圼J99''#)Yx,GR<Hj'q}Ϝ4g+JsҜl`/5Uv.5>Te[ &=pェbJT-ѭUä;17ٝɝŝ\ɥ\ɥ\ɥ\ɝTE[gU_ &lMZy?g}kX f,$gڌp`8EVj £7l:iאOq%p '\ Wr<p}>}7~?qcl(^̵(V\[kmuꈭƩh=lkö=lkiS?y!#o= 鞃{+<^'Y3ll_@oriVme4cq-nYՙEzyǯnL\l&.2oo3ح6f¹f\vq˸e2nwf`ծ͟KuEzY6rxE奶Աī1 E7FSYsl~W~UۈjQm#mD6FTۈj򎨶6FGqGqGqįڎIj=~Qg}o?{OZJ9ugYm]/* i1S1ů>8΂,8ݕx x x x x x x x ⟭A*D[.\oʏ{޴?MR蓌)ܰy+y}}5ΠoAUY%zgp<:dzs<:dz{]5VHx,vϰğy]o>3שqV̉~{ M7 %tO[Y%s&2?k'ovϟu?ZϵAG.9g'my ;]ыtn՝;}Uiڝ*>z4UwJgӤt]hӴ8.q^ݝ;ͽ;-X3rEM]Е[7ڣrz*~n^|noU(Z/ BhTGՑ++ӑ{Z[G&6wWyWy׍Ӎkx8hxhSwڣg3tJ}]A*;`8K0(mn׵]/EHDROlr<ի V'rWvdZZߦQ`_kq(=FQO|BOYmWGT^zϞe.B/_z}JrXwT_w }z@'.@ffyY^`T/_FP+QQl(GZh}oFnF@?'2 ƢX}f>3}_1hx2j Z5Sf,gV=nRM,U;WMI]ߥRMI]7uR7&uݤun.ES'gjlJ QqQ-Qs7bFU\;Ƽcw1;~5F=?[b\Wq-ŵQkKW嵀]s7+Zkx o]m}[k:ZIٿT|~vϵs\k?ϵ~vUuEJ(]}L3J*j}out=;$kHPqfgz:]nKo|{;]H;E$o`o]i7zLi\Ks4"3owD?02wﲂN. - = =$Ѵ`: >glp8AGQt4C҇8:N$:Nt*? |U}&LZvU웬"신[E *(XqCDEeQT X -$B! ]ҴMH@ ޏ̂')n_hxғ0َ=L1^%X a bU2g{fl&p|+k)FJpRA/}.}?@yI?äB?ylWS=fܺ[gGQxeiϖyY엞/𞯊*xnskgc֥s >/` u`~Y33EIqt!IipB)bgmyrKZBIghc٩ ݦ%b-@W=>~p0te!@ۛ) igYxf\^<|x^`,E:,7MX -a9 Xvu`|δH)dr QyԔpN.irJ{S)&\ӄk*2n> ~G2BFWZ|(*sUUAu5Ԇ*h*QV!4B3np;tμg*J=J? +0 w0#hk45{ƽF^2YI0TāxAy '`| W| W\+kqŵZeQyr8 w;gᎳpY,q+xއ3%[a%|c>9|k`-%|kl,Q ?6Hkgۭ쁽@ܫ8G 1 IȂl8! PP.*(7A9T΃G^\_7gaǼdп?㘨v݌cy]`Cna0FV8 `:̀< 0\"x^*K yH}2շa92S]JVǢ Oa5|:X_Wwx | ;{~` la$v;a!^H}~d8)p@*A:+LW3q Niȁ?Μw|Ny(ϙG,s3;e\P %P*n(rm>^'-f?\𫴐[*sÖDž1 "I;oE,+d(W쓟dJ,3u0DT7 uMws} mQ0X3Lp'\)OVr#ifpSG-ܿU3mN)vs_"9{/vŔ-~0ɦb)gDH1ٹ5ME]x]i%V(mXƈQMe<,)]} 򦨪,Fs}g DusC7/s67۹ޒ뭸Qߤ۬k0mGc8q49"aP׏FUNZ??JD;rR~01YyCbeK5"9v)2cYֲ͚uam9&8 g34D\ù>Fr}10x'D q}L|m[\@dKʖZRn ȇІ2LԧasmTl'NP*fzHHo9[-Cz!吲HYY()Fl()Fl(^*^&i T~v²ԇh8GhJi2ԑVPQ:uU? HkNfeRHt*y,95-Rem"dZH=y(mi}M<2A B, 9Vพjtj< >i 5|&+uJd5=OS:X_WMtHD kJ1L'E$Jm`6RX Vjr H`NR'X V+u:J`NR'X V+u:J`NR'XВКe1Ж=tb6oVstsV|ΊY9+>g @wY" `.zbX!_, =BF<14nq+,+HуREQJON( =ʢ˗n|)=B/0 =~8=nJ/,R=7Q,ܾ?0}atg=zFOL'iƟ鍿荇iF qq%]! X62FLw+ʔCOCOR B/K-RvZ'SϘh?SKh @[htN@W=>~p0 w0#`$088%(a JXTӥ4Cjp1-F h0b4ZFha4ZFh ֌NFcha4Ƙ2D<(=)bFQiaTZFQiaTU%0*-J ¨0*-J ¨0*-J ¨0*-J ¨0*-J ¨z๯ =tڞjjjDKKKKKTnr7UMU*wSTnr7UMU*wSTnr7UMU/J(/J%X V) Y.X k&,eRDCC@͍577Œ^op; Z)A KC,bTBZwݤu7iMZwliap\*uqusnnԭ:sm(['p<T4?^Q2kPJQllX+b~JM8šg`ziuGRP(Wʕre\(WuڃrF\Pt+岡\Q#(qJG2Ps(WʕrYQ>6璃QҠDN^GzEzl.F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍrQ.7F(r\nˍr\9g9>jr\\PV(WCeBZ<~p0`CnaQ0X^y/,^W`7eX&=Tb/;5nr;!su=]דe/出>?-&Δ'hBڧP7Sz[@VGZ^:X_W}-/;?alL THty9eJ eP p|Kp~eyI]JV | 35zAeo[& #[`+  gOCP=pp.r ChJ3ο zqA/.8^ќ5٢5rhKotNMY=c{B/ }/ .` 00  `40=0&½pLfSaLv3ZZ8\P %P ҁ:pTQ8Ü) I^R%uzIڼ4 p|2Kp~ TG7}G=gL$<.td }M'2ia]^9Rck휰ǣD-p8Vߊ[Eg]ѝI8dZqR+Njq<( sLO몓9km:,#w@vѵྖ,I#2en'&tC,uCa ɧifo*տx;,ֵxjxjSPJ{I~M`3 a,o$ /b1R~Vjxjxjxjxjxjxjxjxjxjԫ˩WSS^E:q"p8ͅp6\8 gsl.M6 wsn.ͥUp7\ wsn.ͅp7\ ws)?Oϰ `;$RGH(!Leplp2,ȆSpe,+h8VЊZq@RԒUT師:C2g2qL,[&eD}5Jjo{h&nR[XkXq +a5װV\êN)0tTg˙p?<C0<c s0\X"oPPөKahorxޕd1S2EhV͊YQ4k0Ԣ>jQZ4G-?jS U$3"Eqaay8TdPz\-N" )nx65b:f:ȓ0Hi(a0#`$Gh~9x'D q}L'Q2Q-* d K]c-1f14xGi KE5]QEQ:V;D ]Zדe/P`~$$qBM10S nOV qfcm ;GT m"nVvN%nVC 7A}.tnzAo}gﺷIT$|Ҕ_F\^si04O' I|`>I0$O' I$|`>I0$O' I$|`>I0$O'Mڈ= O 9(2OS ",Wa,#=He2c鱌XFz,#9HeZXK 6 | ;{[g ĸvK&D(Q2J%D(Q2J%D(Q2J%D(Q2J%DɤsssssssjuRk@Ms&YH >DAB3 ZB+hm=tnzAo},V0 w0#`$Ƃ:BX/+^a ! H$b鰀tX@:,  au|+#X')sZXK S*cJl=?Oϰ `;쀝ta$H0XBQ-0Nq8S)N'p8 ܡ!qD#H1qD#H1qDB8^e9S}Kp~E;4#I$H$HIҌ$iF^#IHRb$)1IJ$F*+E0tI:$F#IHa$0RO%֫ |8JmV|Mj$5F#IHRc$1Ij$5F#IHRchjDO1]o=۩b.*GXEC&:7H ){=<c+KjS\~W܆e[_,CjNQ :6jh.@5QTUN^PMDM5_tcw &/hE`'O&ޥw9WĻ.v9y-bѲ5ǧ>hOam78>ǃsKɡ>w~s1[@`ԵkG0Qo)PnzP>ͨn$?#1"-!!3ԙNL'u:I,,,tRg:IvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'MIvҴ4m'M۩3_I~Ҵ4'MI~Ҵ4'MI~Ҵ4'MI~ҴIFu$k?j1OiiAviiAviiAvS$$zg[Ե]OX{ILz.zj.z:IwdžH(觰&#S$t?5'I~..&'$t?N:s;N:s;N:sugL =+=+IvҺvҺn'Iv)y[x1]';B}_h_4=8<k`-%|ū}[աԄZP" _+% @i14 n۠9`10=0jg>:ZDPG+ u1Sh:Z) uBPG+0K~Fe.*]T,vQY좲EE1b*9Ts(PQ̡CE1T'I~%Q:=HAHCpR? (+8,ȆSpr p;8vV"pI;ՅNuaS]ة.Tv ;ՅNuaS]ة.Tv ;Յ] %@@UOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?ՅOu᧺S].T~ ?Յ¯Nu,pLp/L0  <#(<8̆90 *?JO%㧒SdT2~*?*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*AJqP8RT)U*IJqR8RT)N'U*IJqR8RT)N'U*IJqR8RT)RSJ9Er*U)ST)NNNNNNNNNNB䗳fh.C h" If휅Ny&U*I㤊~)[L\y4xƟ rFE?\bYkҙ,hvթέiСYF å0203-3T *A}_CߨzF zV(^E"JTWx>8Ew+aؾ*}!;!S]n|Pl^i`hd'GL3e6Wߒ3k8w=8sa^ԵySVG x&+gΕxL^&a]T&Q~M'E$Ri_` !ş oe'yKY{2{w($͟UZ s]y\C4hh14 n۠9-%ּgHpwhͭn2Qr['u%{;9;Wr;yGmPyd/HI0׾)MNq=%Wՙ^ s6Th;w5ߛkF>U1;]o߲Vćs3Z5TPb>4Okk' SƆYc3c1Q,22&WI5Ř.02)]LF 籖FQ¦i7y5Jܢ6hh$BfV4jTMUKeZVZ8rJ97ZpnF8.Fr}1x'D q}L.T̮̖E(v~R(JVd(Q(JV9Q2 %+CP2 %+CP2Umd9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd(Y9JVd%(Y JVd%(Y JVd>̇P2JC|(%d>̇P2JC|(%d>̇P2JC|(%dE(%+BɊP"%+BɊP"%g6(E%+B.dE(Y%y,.ͅP4B\( Esh.ͅP4B\( Esh.ͅPrE+GQrE+GQrE+GQrE+GQrE+GQrE+GfdκX$~&Q<v]} 5PPKS:yHwSfnGs]8u>DIm=.Z5 LטM)m<۹,o򨮥~}p> dQ.iI}2SCr3 evHBpB<bY %P*΄1ˡ{}^xB`!>s|ΐ_ iRsi0QfB%5 ]i+]er206#ea-UeDj(MEҭF z4 dHm޽2QnY:&,[Ý\x<_d&\j,PRi/Y=$ {d9)pl~HiN`#Ps1yla;;eYATZ_A='CW[i,t>&h!=S\^U3syf NBm("pp^Y?̀Hrb&$%.qJ!a#a00*h jpnḙ9nI9vU_E$:z-I"L$q Ig86}Qcñ9ϱϱM2`?D`<-"8Ve2XQ\8'sDy0^ "DDiWZZDotB}8>a aiӴ'*Z鴲VN~QR<%JoRKڊ[icB0OC5h"alk-PH/7іeTG[fі94v$LaZx̧= iӴe^ aCӴ]mB[u^FjѢn^y owD{3v{d>5Ϭ{Mx׽O}^ՁWWE:׽ ɫ]v}ۻ]FǠڮ9J{ƫIۥϼvi&}qUhQW{uU^ΫL^Agyy^+#<,㫀W6Ozq^ lG-皵-z؎vm&3" 烟& my d[IeJ3%,;8Y, df +46wfvp_CobES7 >Y*,VA +#\ RX!)ld f#+ Α yeWErI^ 7,tMr/K"x^h٫Z:UWZA;f+5/̈́Klpz_hYI6ppu@fIژ ~ntS!PZ3 ZCCg]t;^@_]@wLNi5A` 2a0B8xt.yrxރX!ӕa%|c>9|kUֱ\_Wo[&  ?6Hkg+{`/P*@*A:c`p NCb<оBWgk(P#.ԃӀe4Pj+;l Cv]`Cn a 2x&DTāxxXxf u>,^W`1 @!`| > Xka/+@[TEl=?Oϰ `;쀝KRwC"쁽`?pR THt8 Vq,N\'! 8KC:s"pA1@)~_|_# p|2@qTǩ}^X@͗'Q-TmMGan(¨ZRŖqqPn6X˝s 8z@Ld9O˕my{8'!`| > Xka/+_7-lmr<_\n$WD8ECj}:Ln,nHXJZ `}r_1y6$+کǖaiM=w8} AMWѦhc1tm6=FMWѦhU*tm6]EMѦhU1m̧=Ӟ~t m Z0-a'n2ϧ#i&ՠоhd]Q=wў^=؟vц{GMs&c1|1c1|$aaׯ9uo_->>{'O16цe6t'Nt7I'N]]'F\M{+}ڔk|t2pKHdŸ?Q]Ҏ>Q򇸹BxXV$'H?}gQc-`>3NHHHh67u)0%e3Y?v}`ߔͤlңOi*W4@V eP.?᱙C<_|“0):;勢|E f9&o?"?uStSZ tħ)))oѿппj@7>1/S ԅ Rv&DM،5j jԀRΤI 8p&5`'jsͩZPB ׄVjfk7Q5&a~@֘z1ZD~c P UlVHǶ2N0NoeuP5O=k<5O=jznd/wL.b X...NbV\j҃\\;vj\ ۄ6b_.mp4)w ҍ3qM8&iΔ3L;q.uqMq8c1rq8F.c1ۄcl16pM8&c ؄cl1|8>Çcp 1|8>Çcp 1|8>#H1p#H1p#H1p#H1p#H1p#H1p#H12p #12p #12p +a18ǰVÊcXq +a18ǰVÊcXq +a18ǰVÊcXqtj8F:a1j8F:a1n1ҩ8+7!cq 7؍c1vq8nc7؍c1vq8nc7؍c1q8vc;؎cl1q8vc;؎cl1q8vc;؎cl1iq.*Db#. H*.17xOP 3 _u/G?nAu~BqP܉{Pt4zQW@Y(J<ʒ$Q(De2@Zrtj۹rOFyѺ *y]?E&u[ѺкXT_N7}_uIlݾ꿅-c+ٺlN{?fSaX8 LBgSqT^ZX3LE#窪;tෟ i0C,cR%Ĩe7Zh?.1LB;%zAn ax av:؄nFS?GS_BSo#t*@: } | ^nB/W-nDnNښhcz =RBO! =R)S桭yhk܌F桑yhdC#<4r3܌FnF#<42܌F桑yhdm&vAmD7 Dڠqиm&8݉@wZ;;;;-ННvt+845ѝD4d Yq3iw幌$>˭eG6,TG:GGգC{dו1}qk? "t !LOkwDk{JwM題gq;'t} o+ =]Lty?rG <<&pha#akv]r o>P{^ 1_JܟrЪU]^-.x-O|Zj\svެF\J5áN͡?֬soJͯO"/2nI~KA_zVoQ@ Qͺ+_ʣc,ΎnXG!8yW/^QFk-ܨ'/&-eM5n״vvYlDGk?or-k}[yU'K~LrL^O*myڷЯ;>=in;+_:Wov=\j <'Y\s9s^K_.~u.W/]kv[nkΥLjeɟ.=~G35>mhU֥[ߡ}7{H326<H33l<|#w;>&$;$rC*4rx~#9<WDr& rx~HOO>& i4rxEv1Miw;CJ9xD)QJ!琿w;FN#i4w;l#/`#/676򲍼l'l me~a/leyنo yF^mxG^KK:9-$mִ5ztKfΰ}l_~p'uk6F,Rg9#V:-\Yu{|WQzefY2+s7~|U|OnMs>;uíT:WJ\_eloͱqGg:1.ԃq^,Ό[1F1Fz$j0SDWc*]?F4T7snGսb/2=gϪP=͞bس0_KK׌c7KYԏD֪\ek2<֒<%p~Wex^ <#ϋg gW[⋭.zMtB`gr_¿mŤ#/B?DO'Q'QugȎGq8Q(o7c(k5qFq\8Q(>a{W:;qGqܣ8Q({=qGqܣ8Q(u!mT4P= 4Jz:kλ-ѴE4mM[D-oѴE4mM[DѴE4mM[Df"-ih"-ih"z={Zeز>lYlB{DѴG4M{DѴG4M{DѴG4M{DѴGڣ1Qck~]z H z~sK%4Nt.?8m;,JZ|0͟+B #gp3~ݑ| ⵕז«v]~zXm"=yڥCtI#*>s۔F )HHo"k{{[ݵ..5 M^@J *s'1DP~~s'sgΜ{93h"Zpۻ e"k,"o`7F~#^aW`Uwc߃5Ryýw*#`?G>\B~DA~DA~iN#{{`=G#{{` -)^F`F`F`F`}Zr$d}@_3C`&fL&dxHa$FH7R+ER+ER+ER+ae dJJJJJ5aV`V`V`V`V`V`VݕL8r /itp8s$p K\w0S3`&f"03X +}K_))a'܄vq`ǁvq`t༐;Ӂvq`ǁvq`DZs9  yvrǷ[ڂve3.zQNoA`8 `0 eՆUVmXa5Vs`5Vs`5VmXaՆUVmXm`+a5 V{7K`-&ڰjê 6ڰjê =`{UVmXaՆUVmXaՆUVmX́XY Xuejxxjڰjê 6ڰjê 6ڰjê 6ڰjGDdva'va'vRaD` lK[7fot5DstఇBЖ=!=`%3{:\܃эhu QzKJϠISzBJϦlJPZ^9j,;[`wUSU5#So {h%3(5G* kf kf kk. AҩQOjlϯSjKFSF~ebk. k. Flq ,. ,. ,¢-,¢-,¢-,,¢-,}YYE[Xt]E`Xt]E`Xt]E`Xt]k0fl;mwӴhn-Nt䝁V{ 춂fv{`w=70<p;Nwv0ݱ` v8mA;]8N2wH!Ns𕟌 ?pVrn&-v4Jr(!^_6k?84$Q|3Z>UQB9V?y8&GkyvGkyԿ?OK>7Σhx c0<1 n}r0<1 ax c19s<{q8IU?x c0<1 ax c0N>N>N>N>N>N>aeJXZ\K-#Y-Ƴu&8–]ز-O/;ԗ5^VgBŤW)TFe?{/{F{=|B];F<l4q#FCq#q!886^=vل8GCq#q!8,3 ̒s{>sat>UgY}f #! n/FB0`=3mQK&]Ngˮ-xѢ))ǣ>xтG -xтG SтG -xtֿ+>=7;L}l `<8r-p՛\~<Y?f=[S{0Kϵ% \=o+w]0ywTTovo@` OsճTR;0_oT ^k"Z2_μ<>zZ|5$֫ՠRoPk^v!z%]Yoo)]{v:ROݨߑwg8W> \.%Rp\wNw@o?8 ` `F` cvg,ppS [60wp/{<O'SiO x</Ke xmS؟M+/մtZit;;\&2٭*j;9s{+y~sZژjE'z']5RJ\xKbxQFmzREilW*m<_Fg(,Ea) KQXR(,Ec8p(8 #S &p,8 N'k0vn7-Vp#[i4vzq c߃:'o}{Xa >5|Xka >.mW)?0|JvzU7Zl$@`'v~DoIx<ρ Ex^1o7xS{}|>O4XO;w `)Xz]*P ցP փ ku2~'VX} v̻}r>ArL[ݙaX~UUTUR}!F_FE&DTcje Q݌TGdձ~oXry#C)P|PM~ZШ^RS(q7g 9OE ޥVV3g+ ~_fVFɥs5ԉjqw}H~GC%xa<>iHysCB =z.Ѻϙ}9?Q s>1ﶘbO~J~Sp58"r1{1xs9TIJ_2m AuF7otGc Í5F}=Vsza{ &[uNbE-%JC;S +lSnqg8X,(t3ŸNi{6LiHS)siHQv { "M>{*\J^xFPo_iQ}+Hw밫 w nĚ7p7 $qWp܋䍁r•vj}~+5Xx{a9Jx>M_hr;9zR m= gc}ϳa}4͒{O飰y"o|{wf N?oaqZYZkx>*2Q!{= {a7`+J{=#MMMMn֟rv~1Є<-ܢW4j w>j1:LK{YnN}~@i~ OS,:_ Y%|19R\N4jB6W*6W+=duVOY]ԻV7]lT!O9?ͳnR>ni 2VwZ(˺NivZ"5mԃNwf ˻"Z`\x -#qp]u}_*#~?8 ` `F` c8//4/4///4/4/4/4/4/4/4///4/4///4<_8!Z_>׬WXGp$ǀcqOJ޺ \ YuzpܤZ7} &vW;{]|>gzs^G/3?xjoSNW*BxCq׷u~ፀ$sT|it{fHW)fآ'Ը,[>sϹouXZnTR-\?&k.t=e'z>/OQ` !`(`$FC0xp88LG(p48 ǃ$}:Y_Sչ

].2/w+*p e\˙:p=n7[60Ynؐ8.ۻfl]`  '#(}1V6Ek2JD_棾+Tߵz&owNC?gt,x<^/*x^G[P6Pu<8̑ƃ߁y`>X/ ѧkjׄvˬGpIp,O x<^p6 ^/W5:x$<}x#13L0S7[0|y`>XE{`X~U ցփ `#6-`+H: l;N ?=@[l ~A& 'p7i`j=xp88LQ2hp 8'S/4p:+p}&8 

\ر} ndp;w{};#z(x <O,x<^//e xlxLo;]/0Gc LW~/ 0_٠| ߂20߁y`>Xb^z]b e`9XWլW*P ցP փ ` lzTv˜vCn4L?3*PTꀶ=@@MBMaj0;A zޠ :L^/$2xRL)^/S)˔*!#(0ƀ`8ƃ`8LG7Z: ǃ$ /SNO3,9|O28\q\.%~)e^TW+U{-:p=n7[60ow͝!ii^%WAE]Ee|W|S:r髬 BӽWL5B+7ysZo]^Er={ԏB=[8cT<_~qhטľ&9$LyJDI?Li=mM0Q&zDO( $p2-][N~){3&zi ځ`wfY>4yNqST(E8z,BEcQX=EEcQX =Cϣ[&ɢh,&bh,&bh,&bh,&bh,&bh,&bh,&bh,&bh%hr4Y MV&FUɪ_3>oI]V.jˢ(,*tYeqtY]GeU,.8,.8,.*e貵貍貕FCEfhq`8\\hѪ<GhhK|:m5:-NVӪiU:-Nb:-Nb:-NޛjWkU*Z CUgh-fbhXp)zmbJOU趨9Iיbx^WkhZg+dL<l-lj Zlj ڀ(mA;t7XoAmAmAmAmA׹ʊh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z VVBEjQZEEj1Z Cj1ZEEjQZEEjQZEEjQZEEjQZEEjQZEEjQZ Cj1Z Cj1Z Cj1Z Cj1Z C-A-A-A-A-A-A-AjhrZ9ZVVBUժjUh*ZZVVFUժjjhjZ5ZVVFUժjhjnZZ VVBUժjUh*ZZ VVBUժVբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh(Z-Vբh迩h8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-Vh8Z-V*jhJZ%ZVVDU*jhJZ%ZVVDU*jhJZ%ZVV[V[V[V[V[V[V[V[V[VۈVۈV[V[V[V[V[V[V[V[V[V[V[V[V[V[V[V[-ZZ9@ VEEoQ[EU*oJ[%-&z*=UjBj^lu֛4hetAg#Go'c>>8ESEkߥek7?|qvWAs:T{I ߯ M =FKs1g>Y> [*GuV?No ޤFbi55`ޢk&om"g1.|o R2dݝ{v*woUt~˫|o֋diz[#kgԭVo-k~gSޠ??Rj^SC:"_w}&ƒ2@/\G!s[sn}|*o~zr]~Ub>F/0-嘷3]Vܺ;Yc[}<ǾȚ;׳W$[c%5ְJon-$i֮G^涱݃^ﭳ^/u536[FQg=WR﷯{1ڰ6X6 p]_#}]C# z>ї5lJ.O6JLu-`;ae^![km[o6)s׎;7~VH ,O2=ѵ0Xk dΤ/Jڜԣy>kM {aVcF;no=}tV1Ճxh)ߩ6=Qt=LO&}Ṡ@uӗ\ʛL'mc҇GڬL'd?vF_37NыƙA5Pq~\? RӅv<>H}'TJ>Ǖ<=o^zrސJ?_Ϋ]{~zMC_A5QooIS2?K!={n/Z_S۲lˊ5اyr{Pi}>Vxh/} ulb? n/'(~ε7nO w9fK 3OuSAZZ1977T T|Q|c}Tgxxwo蛨zzNzNU;W TKKՠjp2Xڄڨa_pL|5ҼؼRf^mޢ24R'7Sgϛͷ+\u,WUf۬1kսscV Tzʳ:Vo5gW5gMPT:ƺBŭv#`=h=d߭G7ot9v(w|LOFUX>#,ՉOsZʖv2h*|_,LUA8Z.$-grG(7 K~ǫhlix:-i3U,Ysl;%|(\Z:[ZڔKK;~iiSZ:@K s/fzyWٴ5_b,y4_0_S!uk0LSjb66sr̝؇%ab0VbJb%adJFa+ͰÙŤŤa1bzuJ..RP&6tʲŒKRٮ%lגZvS_b3n˻T,-v-Sy&kk5YCX_B/nR=T_쭟ꏭ P3?PħH'N_ēwŒs$\u>(b>>YR>e|R*J]'K]'Uql|ԝ|ZVw=|"A''|ھB"fnKlȝ=ݙٰݘwdT=RT{=Q *>>LcML$ OS쇙>bOS%l{ELKT {jm(ˮ70boWSڗDU٢Vgwvǧ Ò_p#ud9G[Q%%}лzj.DENE Я[P?-r ߒ^hu>ʐUD)uΛ,l~6OK9;bTl5jcɓXaDXwʔe;}}]_Rw篒=@/f힎u5Z;%ޜ]Q1=VxC}P[># k헏ːMphe>N%2G/kF&m9KhZ:je1mv{&{ڳW=N'a6UCvJ EϢGzFܹR;!~n<:Vg.v?mٺwfilTdf7l٘}ֿ2=Nv%pQbWk9dD }|߆TZ ܶ۫$7~@ʘ%t;,h͝nϐW49H^|,~n(zZE*3IɱʱTYXon %#SkG6^wS,OA{:u ٪z*TߵhPA\UrD(dTdu(SE%: +uuKEw\&:rW#樫PWVtu#GGDA$ f**uܥnRu{x;cߍVݏ^/x5uOj VᙳO^(>{q'/B|Jɫa⓫'OP {\ol4szc# o|a?Qx%Ɵ]k^c{\k\^ ]ˌiinxXW,Qتv} Z}CP徏i:},`c'CMh{K.YzB">4%4)+PWbIͰ'nT7Q|[խ|Kt~t3Ego.hZZEbXd3梓âCb.SE!B:9D'7KRbX%jZbRb~4Q)xfbabث%{5^}0}0f@l7 ĂwPNk'fKfHԦ)je[bٖX%me[bٖX%mebٖX#ڴDmžâ6â6 Q)6SDmLʟRќh4ќi9Ds͙)3K4gh9]Uޔ7G2(Ľ~1o7KĒ89fDʭwaH,FQq2G"Q-Qq3CIT\(pүr%6JOh!1mkf f3žSž}bžM,c[I86 qlX؀ı-%͓6Ob|]%v J5]b\Wű$^Kǒ,%_֐Di}NW7vMkű$ 5dq&čcӤOJl!0SaFj Yol!є%!jb7/_Joϼ%cdI̕%=Ep]p$dI̔>+QhD9Hnɒ(/Q߼ļ%nFђ|%$KIĨ~'YO$dI>2*n-ld,4&3Id9$D~lC$dIH'MR$ʵ%m&QnHܐDiI[(QnDrɕO}Z٧}r+g\9ǐh@rvȕC Z˹DS7>oJ7gI/_"t0s%fI̒8eagg*?kUά{ [)v^zW~z?We~lO-:~Ǫzמk,"n`}VuDz^JB>js`b!If{yr<,K#zFiRb{mQWqw`}vͱ& f&o_B}+Q@k/n޷?Y{{eWc_I=^&qY廚K>HߋejU d}$Gg-O"R~Tˤw핑ڽhSMLFÿssXmJd.h#xn/k5}߱ZoKk_ ~7 b$ַ_y~^~!~s/7Yfܒ'ݜ>U+Œ~uG-q֋XC,Zs[d>T{j>"ʵ*ǧu|j"Uf(TmD3a# fF3Uhd93T7UQdFZ3"FDu0FGdt6ٌFwC??]/UsA`UCjתQj?ww?Rux#CCՑCee`mVLs9Ek.05Zu:NrrUg:8׫G)mCzB}tT:NęU:Ej,&¬O7av3nR[*Ru|l 6O|´B{(2 FP!#Jj&eKkZeEh2l#v͡ӤsshbhM[fK[fЖvEsEsEsEӢ+ Һ+ mƟ1 A{6󥴺Ma~.c~󱆐XCPV6MQXFiFekb%J2J2J2J2JJ䊕JJ,[+Jld2#rIX_,/bVA]e:rCl!`IT {ŞRSL4,lɰcUj5vSRkĪbIŒzb;;T'E즳MgTW2,C#H1R؄#Z(ieb޵6b6FG5r&h8}i'Jҍ.Ft3a1n>%,O1$Q)S%qiUɸ4ɭ%JE L0}.S?P)R_Tݰ¯X2+$X,տ@BRRYĦ]+lV3+lg~6Za&fҿſE`[Yשߡww2Zj n,a^Ng|VڮB$`L8Ga QсCTJ`L` cc֝xG`zd`"%8;⠕8h%#Ɉ qLFdH)WOzu*%-Mۃ̾f_cb*ʵrz1hMTXWYWnʷZ1,kJR!k5%Q+ʴʪRc;LskٜQ]b0t=%''}}2_`__c_ï772Qk*hoV͝n!ޛnNҟ{JLLuuzHO"=ّZzr Kώ3ߙ"g [ ?GT^*%iSåR:*R>H$9OGL"qg!1t=%׳l:{'2w&JJDug{ߍt]ޒӺ\M9Hg.XH\F~X_j_$ |a~Rgv\Zykw5?ҧ'R=C%r=E%%O`'s7R>ѽ ݴ}.QdCX۫ Տj_'G0K};^{ \NtM^1l}snDD O~e)q$3$ eϚ{zύd˽cAs3}l11Mf359:FZ,i>p9:ٛ_Q '6:J%D7?}gQ28Է(gԟ=M,(gW9=Jm/J-ww0%i}ih;cwV#VS~&~'3{--V^tǮz߹ԯo\HMo~klwr}祽~E.w(42 Y;٥m"yO7g۰~2'K s$5A+Yve[y@7./4H8|n,BFq%q-qcTOB׻Bh h`sDɽ-S.‹q~n|% Ht& { ^א\96ʱ%WmH=RG#ULku\Z-AYZWo&r>Wҷm|7&]kmrM\ 3䚼#S䚼#G5y\X2je\wdhJ"UF˵zKՏkeD0b^w+}b?H}ͧADŽ$sc|8!uDc%Α:["$K,SbEwK_?9O?gJ<^3%r/s_K<^"b3%r/s+KeR&Ԇ(a2bX$e`G8=dJ1,$ nH2I0*C!yɖAGG}ZHާzKzZJgzKzKXF͍\ $4$V-54^}n&d%)lRh2ʦ4cQ?oDz_ެWOjr<]%WjV֫ނ\&#]ͩQ]ѓFYHL?i_Aڼ {_=9 ZݫQ*dKmSWN]C>5c܆1+{|O].}jVI "+Zc}<Y+ܧO|Kwq㖩Fܨc:_I/Ue!a1qÈ'6bۉ ~XkGp'qy:QEmdq I)i3sT=}C#cSs9œa4g__ߙf̌KerGs\e6+Jst,VnVw7 {=|. -'qϔ#4%wq~2>rMpYܣV~m5{*2Br)%%-#-? #ezW(453SeHh3 oul0S]<'Y~ygY7w|1nsJ S7 ̀L}p3Tcdȕ^CψHd=6gKDbEb۵{l%{{l{l"絔|^ZH>Pyk#i$6@ri%vI.`ɥ \`ɥ\`ɥ \ZNɔZdr%>W˓)aɮJvd,ɮ]˖%ٵf]$fKv͒ZHF-96Krl9c$fI-Krl,ɱɱ%[Prl~ɱ0ɮ \Oriɥ%s"?;@),ZD)|%Qk#ɨEnbɫH^-_)Zɮ>Œc+W{~$ٯ"ٯ,ٯJWs~Jy1j.ٯ<~WddlL'ɁJ,Ur`]%!90Kr`,Ɂ$fI̖XHr`=$XHr`9$[r`I̒X,Ɂu-90Kr`Ɂْk&90K#$+gn˕HgɊY$+fIV̖-.rN"r6.w@˽OŒH,\bXw*Xl9̄J&ld†9 3X_L&ٯr>JWk~O*WPI,"J˽RrT+U,JK,"J˽RrT+U,JKZɽRrT+U,JK^-"g:?;ۙc("**"""*^"""*"""UQUQ?QQU""[QXA}?/yx{ĨnD 1* ͥī!^e||: l}3i! Z}u}Kc픿g^dVi40_ ۾ˬK|Q|>Zs;i>|WL1>M$?C}CSYqb)m*m^!cg, o}mX&iA$ԃ??cVV8SӳM]n+V%^dPKk[0?k/߲;~^h J\r]O1 >}_Ӭ^Ma|}5U;9"uYM5_/nmk1<:bww"c 56I?ǚf6bwq<27\QT4}|ٗ{?;n.J@%XӟU{6)iwBU]y+_n|-ӯþ\ܔ_hT <5-G(Bӟy2yqv|ގz(Wx/k3VpZJ [2`*"d>[T+.̓Xaf|2g1/f}mbVכzYV7l&f1 70giinzKrv>0Y@י%Nέi  / a1X0 "= {oagagwzqv#Xaaɛ`[X zBYMflEخDj)9U<~sv)k]-R3,R [T)ڴڴڴڴڴڴڴttҳ®FN_矅_ ϿA9<xnx^xixVx|"i.:|~|~=|~fE >>J"> > AԬHq/o_%|z-{Wཚ8< W{5!WB,:xYxax%saxax-E ߻732n/nnn$nfEJ^w ^w^w-n} nn=nZx. Y(֬Hv뮂ם]; ە";H^wRxׂf]uc21Y: IbϜϜ`663ö1lЬf _jBv.vve.fMKXŅh/hwb;[[V·l߲|R%-}-[t÷·«,W)tUUU«tA׈*Sx"S11 jֽT{4!gsEXJCy1eV2Zh=M2b֏y7}]`f2aT$xDd=#NF^FFcRaԁQgFdԇQF̣2h &1h#3-drF[h3mv2bVef O3:$(Ȉ8 #Y2Ȩ z1be#kX1h, &3bޞeZh)V3Zh#-3ňY5fa$#fE[sS%#!YhY%hX▌eeeeeeeeeeeeeeeeeeeee匥*YVc[C֨5aZ[[[;YZ{X{[YZXGXG[Y'ZX[gYZX[YWZX[7YZwXw[YZZgmĦYlNm1[Vokc`lficodjicodjamg[h[b[n[e[k`lfico;d;f;a;m;gvfw}=b3.^aQ i9Eu-]3F0;9#hhXXXXXX88hpr- K[( Rm :t.VгOAAC F)_0`j ,)X^`m v)_pXitڜntFqg99999999999߹ȹԹ¹ڹιѹŹݹ˹yyyyy\fq]!Wԕpe]]]\]]=\]\]C\#\]\]S\]\s] \]\+]k\]\[];\]\]G] Snֻ-n;wqwpwvwstqwrutqwOrOupvs/t/q/wruopovostqwrspv+B[W, 3- v,RؽWa *[8pr™s .*\Zpu[ *[xp“g =qx<'zggggggggggggggggggggg稧ss,E"oQ(\+J)PԹ[QϢ>E -Y4h|ѤE3f+ZXhyѪE6m+YhѡcE'NRk>oƽoKo[oGoowo/o_`0(Xd4L|"R j:Fv.^aqIocTl.v{šhq8[ܺ}q={+X#>s/Rz___g_7_O__ PHx$T l|rs/*_Z|u[ʷ*[~pgCRr+U Y1b|Ť3*fW̫XXbyŪ*6WlYbšc'*NW Ӱ1l þp0 ÙppppppppcTitTz*he2[ٺ}eʮ=*{WX9rDq+TNU9rAe++TTrG}+V6T<!}qF@$ERHHHHHHHȠȘx"43|Pw?"igx]U×闀﹨ȯjq q!fAx*w]g\>wT+y*bȓ.C1 A pn#k@qX4 D@z\W4r X܄G5 v̴C>2)87)>ދ4_Gׁ Qނg5"T2o܏k݉qK%]x )KKJӟQGwh-Փ"=.|tU}Ui5eګ)zG@^{h0C-"Rs&| l cٚ?BC:'Ƒ8ͨs{\D^3j9>Dk w)ڲ|PP\K5w :A|VE~y8#j9iZ4u f.EM (G<R |:H\CNTCI oq]+gj[zi+:`UrCn|&V8  V#\B_% {H&zvT./jsK(hZ5#pFB^E=󹉏wT_*=& # g i#B4_{] jrλ8*}IԴo>B3oB_i͠bMjFޘ'e#kE6jPlTyK.CUbϭ_>؅EW4BlUl@)VG \eJs(>?CTkxM܋T|+@3G9vӠVr籼44G@D3SpoҨXVfK}p܏P!O r[B@́f5^v"b).Ң⑽ I+g;;LI.`r_'?ڋ ã1T/#9x\vfPpU$.ܫ"%j$_(9(?hz 'Rl`-$!B[]aX_aڱ0# 5|sGje]yo9"5X' 6Nj1b,^xARQЃv"]1+EcCgy,Zz3?#X cc -=JEbW`3a$mѷ@N'dNҧd=1K~G%KK"/ӵ7;2ylvE -(}n@țz졧iMmMԉ:rX4Fr5ݢb| 09%FPS%~|$+"gprV_|,>$>DΉψ'ss.W++WQ\-U0ފ,Eh)HNT( KEWh#H%B[L tp5Ej/uJ]7ROo]:,b]pTW.U*{uwdzz;uutXwD{Ww\PwZ*0&)aަ  a}Dx(=apnaafël8gi[8v37.?3@b\eozEzʸ2u nlc|Klh32M,45/LXjrb)d YS[vB[⦴Tgj)36unh bw-nM;L}LLw27 Ɗ1'1=l(5=jzTgzii844K|44[lc)ML[LOd)>me-mq;Osߛ7'.4kzW\lzt\|`s"s9in-n01ۚ{{Cij<T}Ds13l1w "x,kk[[[[[;;;;;kj5O&TIdkZ״TӵGM~5kԌ]3fb͔5j,Y\fe͚5j]`њS5g$[θ7x*^o_____?????WKkZw6Xfj[ֶXۥ{mھjU;vBi3kί]TvEuknU@'k6&9HxD(M$DDDDDDDĐĈĸĔĬĂIJĚĦĎľDCTl$IKҙ&p2L%mݒ=}C#c㓓S3 K˓kے;{ǒ'R4eLR/LERT&261%=+75 585,5*565!595-535'5?(4":.1%=+7u u8u3\"M@ q-ȅbi3Z9(C97s(Ư  <gǁNùqDʷ 0G<|؂@p qz)O#\^#91w|呾)B+=<)qpN|r^#F>ý 7ړ#Βpԉ 8>#346(ԺRzE1Lk HQ$ ,$ijQwqճ^Z g#Y.W7$;hhp:Ҡ{m@pEjɅi5]$5Q H4]۸#*ҁ.2MXoTVf4%C#2~w!9R g=y"8u\y[OiJx UG+]%[\[u22Ӥ(<7qB;RF5-CyAӉ@5~]7 p<>~9[p-+Jy68Aӓ?~7i4?=U#@ WH,BwQ3Usx (?yOKB %~yH}rh-|kgU(tSlԆ֕:$IMP/E<> }K!=ܪ[^Ay</>鼠֏r.fzqnZDQQ} \&% .QN%La!sK#ɯϵAsk?W?4 )"P W38 +E+.ԌBM>`\NF}<4R?'5=ϧKpgbboEC kjMYO[H)3aSH*GCzkk:P~ls'zbc'4[nbxkbF (>֜&gZKÀsqI62@`WsDӣ标`֠rQX}<rآ,˃RӔyJ!x'k5%^2viRs/+Ԛ!{z0o v&џ;N>H0qlQQi) ;A@>S(^J5,Zx r>#<-ط=n5> 6^X:K ܢ94-8jqEط"(4)AkwR+~T%WR!g珹]L@+\WxG 5 WkU ~ &x^F170 X;*r.  !V><0Lm>s9w$֪HH?@3=fG>MHN6]"ghfn+2 TQu%o;M pozuT[,EQ+Fo!%D>XPo:Œ̃>IefGEX:$oa 079{\̼Ej}* 49GzOǑ|n/VV,xJdy!Ӛۗۥܲ9Qnq ne)|,TU̼/k\@X/ 8?Jy=={UP/<^:e 4u (RG:9p/7_(OQW7t$%+D{JßWR"G y)_v7Ie7g[5Zse>ؘە6as9yWT{8Hg~vE {! EI!^VpkM5Qw;D؄b#C4|rѤ)~~,k*kӌ"pdsr r<6^$? È6({ y4q՝䝫$#|qI K4jct>yxV+89/JJM\r\k4%G9#+Qbć{)UyNc+'AQ[s/Gn*hCB$[˹."^HYNZJ4>xhV.rSP#ɨ6`wiˑ\UP[ԣAdGdY}Oʯz;OkO3EŃ|l_N>4WuK.1u@h+QSBk%l U<9U xlѫ*Σ)K FER7- #c "BDL_.*͌SM߲RY}nO|9l*v:wO23DAxzH0)o|KH{{1/I<;/KATQyw?_syTȟu,'S,>!>IR'->#>K U4 4[AI'Ki-}Lj/AέVJe:B 7u/Vչ5tmn$m;ݻU,ݡknK驪!}7uPc|dI+M"hrBoruҟL1SLڙ[(n3$eFӫ7t7413[[~n~tnu<O?ҏ./?*B1y[Ty~=YKX{7\!QQQQQkFubԕQFc4F#f4DFSMg4\F -fJFkgVF;fAFG50:,aQQQ 0a0V L 39|aTX! -vaW8 &B4|yR~rH`m3giqU92rr&''gr2}aq1rSpdJg_v6oQӓyg琏Rb*}6w / ae~$$,b:N&vRwrWhqe#O>wfhHO\O.j$"~WQ8 >o-<4gt{j=D r/e-Jx'M[oSHG|J@ K@LJ<ս$wBw|P)jnG9i^f0>{Ϸ KwA]_ {(AV;zN ܢ7VwZ \;Zi?Cr3^'5*"rq4XRRSF~ =Z*=_ WKSWp ~廨 .jZ32P!ʎj vWy [PVƵ ߓ".C |@VJj45zittFAy>\o4W45PGr5^s\ir=*:";UQ+sG ֩cY锪?ݱ܁:wV ۳NyrzWk!껰DPڽ7p.s,w̧5쏇O]N=DK[DnEHMxT6 h$aS%jÀ?}rRר p=WγjEU0)޳8עN AX sVWԣ2"0 m| (>Gׁ\>;0%~u/|'FHoUߛQX>ooFy{3B r2illlvF>6/cFVtv/G+^"M[N̹!kpZT!R ɵ]"ymkD^%.vKU #Fk~FΰdJ)|'I<^ᮒ*v3ɣ$rJRy4y#hEHixv旿Sj7]_qfvxgC_T_(ğ xenfQyХwh,F>"lDrJ_NBz};}{[o߮奔CKM}o1qI?O?ҟo7A0Ph z`4 flGnRC!h(7 1TjCLN6F,[eݲGk夜rR^n+]"OSezyPV$mփzлȣ)ҏ>k hnXKZҥtp=]F mQ1"/ (.v^oo~'&6žfO_/l+^G#?#őN1a8V'!>#V;~ ֏aR@KR#*skIZґuXz:Nۺ0 skIZҧi"}Gդդsj}5ln_Mqj|_եw&6#au=X]:KұX] V>եsKL)#.bNwZv9T/Tw"TAnGݹ*R]E^76xݚ xUյ}>n$ILID@d& "20L0dgn:[|FT|X iK] il ;#Ú#Yg9ngo!U]w|Pa*k؂m؎}8C^W3j*KSo-@f:͠7(f,f4fc3gMv`7b?0]jNOS jIm-KH3%QΝn=})g$Wh4*k4&DDi g4F v@ivi{vQ;h]P]S7md[vVcC}BvamۚvȬ:J,D4^\NKoS6ݴHH5Jesz*uU{\A|neSĪԧ/֩/E7uI]V-Ŵi%մF]QV<`V=KExzj!AzNC֩j Sk﨤UEO z:jگ:Cڨ6\iO UEmUTνTn+ȶrR4/ǻ96fc_l8lqD1/ jZJ|^CjZ{RR7MܢE4Ƞ֪\㋗;gՒ<YC{ita:BG#[|S⧰n)0.+XYYTElM y)ݹr=¾w?K4-z E"Bbɶog/>;f]1,5r¬4j.iU0f6җtMͫB^E ˰+xU]+:^6`#6? U5FUQUSs=q?RTS?o<+ $Q(uaI$ex~- QUP8 zERxMP uwFr=対3WU31K|\Yy?#d_Yuk^*v;:IwT/+Jʍvjn [˭Nrpܙ,w?Onz[תަ}z>>zg?`\0>X:X&X6X\ߛ;34<`;2O$ntd_MC1XB4{j}q}}{ZF-[ jעԭƓnC!MBkw;ϲc9K V VG/crn/PGd3 h}zbkp@T/뗑jbS 6<6N?ӟ}C@/vm(EחUb`C$7 /HMP{]b:b6[+?R?<\)YQfcnCUbx$goeøԐ}k,mFHNp v&|ı (W_ ylJu[9?"K&@&5fԚ+ԗRb<Y\7di5)rf8D'$3ty@*ݰ,˵ YQV`Uߺh."@Wd b%:Z+]FO_v{Wh ڋƺ_ơh<:zt-ծeMܯE+_V6&ZD5c6Sц9mL39fsKx9wٗ<,EX<`ʌA f7fZ2ъY0КY2˺U fEk-9{YZLV3?cra6?`6O3ܸ.wǡO gP}jL9:PW"LaocV}i_wW;mvy;E=] n2^Ѳ> ъAJaDh5L-'hoo'k!oooox{6\[G[GGBf^uVPDWBm4f#Bɪ~oV֫~ɫѷߧ7Gw'̟+~4n5I63 7fk^3349bqNQSѩTu95ZNi4wZ:mvN{tv.NWy<|\Ӟ. ⺄.ct)t<\&z%9ko5ASD(mJiijZ6lk3ؤa&Ì4c83L6L9a~lN?IsSxxY&P tyPLJz  x՘gtU%g4tϱM{ `JNz !$ޫB woZ^[{FYKF#lB+d)Nd!Z]@Fd}DEe YBVST9MN3L_lY\A < 'R*R4"H'EFYD1"Vċl"!r\.ʖX$r|"(*JҢh#ډ'DOG1LGbXLdUX#p84>O3G_t:f#mA[6l6&"ʎ.:"˶X,VɵˆUnM.S\$13r QIV%œD-kZ,+KrmoHLvdEQQ4d]YNף07\8 n܃pPIO)%C-DDk:Elf],gP{(j aL%L)"F͋ڊI>6o/Tۨ!bϭئɲzO\>q$}]GOԔI0J%Wj̡4\s}Y>i'6§ZQ§m#M|6E/k&>Zn+v-؃{b8Dtߧ)D)IGzZY Emq ~lH-Ao x肿ĖD7sפEW:i[E&уRƶeMeTƾOUTNY@f'Q# EA=jcRFmvjgwCg{F4;ͰOi}"^'|u>_ (mi ]:ڽv?uXDK2-^Q{ 2e Nnn LUjKiuT*jFwq:S67(; T~D] fSu;9n0NWGgAW(LK](vqXMTD'5YM؋vSjinԻgUgjdǨjZ~RKRLjZV5SULZoڠ6_&Yj"=ËS[VMmW;NKV{^OY:::N:Ϊs꼺.DuI]VWUuM]W7MuKVw]ު|X=PoꑛfwD=UsBTx!zd #0FhNn3^:‡0om&q2Xxius\5vӼw)0ul#0LiO0fl\Kk[Yh7?xk7s˼2̏f,1K2/ [Wˏ+r;#.%.XU*pe6܏.\Ey2.Żl^Wͅzս|z/ ^*w-v]vWץz]VE]aWDEb+r*cJWUs5\-Ww ]c5s-\+ڻz>솹xhiy'=q u?a͙;w.L\,!| k2b8@ h8H!qscqT'IqJg9[\EhqM\ qSw]s?}B~,c9 `)|?.낺.Kº.K뢺 |h[J GGɼ48^eR e-/m9|c+[[Bhٺdm=b[nv=a{PQ;TvURe/ մSFtcgP];ع~JYͶi}ay6>tl,J_a17XŒX2EX~+O t?8.$)%J6#6&P&ۖ2vaS@Q]O.?{s~/En~/7+~̯wkCc=cr>.\b ĺXs ͵.:) s#nM7ܔ[J\q=u7pO˽?~܇9L x%WlOl/ۗrRM(8y"}̟g)sy>/81,\q}ǭC۟Tp\+cSlͱ6O-5'pn-nmw௸Nx?BrNι9KqIʥ jaClMLS3Lem3%._p#n2eLiSGpyxUS3y& N }Rw|9G~"OU<>W_r¬4jQ.)_'jfm7/B7xc` lnn֙ _d/u,?AxjXg2**@uꚀ0!j2+.|d5%(ۅ3MjxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox \W8,IHȾ$$! %;(((nhmjj-}Q;efL;igmyq*y}~"OBr{ι{,`kQf2Y,YJc ͚ESf3lOo%F/YVP]wxfB>8ΨԘH:3˩I$3:1wMRZusάTouFբZ䊋IHqJrZbDR%ę=d< cY,a)X,'H 7B xJB?#(l2&fh m53A u4pIW Sf-l % SYMitϭW1 $3)$ϲd-J=H Bǐ>qxEӵc#C_7ebiJeOm/Ă2Xt/-o lN[? m墨$c@Y8^Z]( 7\*RX IkmTZ3 aKbAa=}Ϳ@D\-RNǤxa+^]ӳ"@: ǔ 716͘L(~?C];:gR<\u4=7XunhSoZ~T l>aYƠ0 F @(|fK}WB&#ṗGNz!ApbFcƎqA!6q`d_5O'N)4uȄ߱c<]#g!!bC`D> XlՉI4&3*×5'>l|oH֠b1Y|\<^ d#| _nXĪ#խ{ywiŁ?l꺫c {AegBubI c,CooϷW:b@R4@; O\vN"G[M_'΂Gb| >:>r '3ԥ3GW+3&C2BK+΁?'}"'%c`,ݗuGІo,a"n /cK:16)Ҍ伞"%E"% iLd"_Y @ʡU^GbkK 2<>#EW`ʴr.^-pD#5r^9LE<,M/sˢ@?ykw@)߆x<|Ӡ!t zdÁ>#T##RZwޫ諊 446h>PnsUe ;% \<pHU;#𮽦IR1&'LR?Y/c+qؖhwKdJ{pMϠ?lA;d!? j9T@+^\AOE.S@pyԏt[em|ކc6zJV*FSS-ŠwrDf H1qq5;܈(+ěӤ.zK|qy?MjQQ]A^+!ny]yĝz5 :@0MgVȬ}n<-3g\-=*wp 9&'gٞg=K#gS~pg\p;:~vvXec=}t<^Fe xnScهbkEP|Ҽ]Cؗ}guݿ6N 5%ԋ`ȣUwWz!['i!KPFѩk+OREZ6кk;j NRy{s"kLC9Mc0(U->.[Mb]ݖ,mu-YlYOX#z{*\P*S>,o;_v`~S$"艀@p8L!$-7e?7#xkR*h6y doؼ=#Ek[F<-bMf_M*56[EfQ(=#.뙹eNy ]4-Sz*&]ڤSF1;>ռ5ܱR;EP誻1ːg8< FHFb3H%OxOܖ8?' F^E3@1-ׯ>OF߽o[N?r-̤ ̣>i;uл蚻o{wjj Xˑřu O8a?RfEcbxZǜi0d1$sCx+!)Ʌ~@OCKLmKZCz6l%IG90[Xiu`KB&+)S;;sURMx0$c-Ytr:kDnI)y }fz댱F9 It>&iMcfB?|6 81[ĕ+dUTCFJ$Sd|Rr `3NJ`͆fX %m6qGzQMB;lËj:Kp]{蹰vO&*δvsaS3(\Q;*!wYHX]SS=i~GZniqua̘ /)Um.ZX뛝A$0`c}?|"+=`#qfC9Iy-ޜS t} ZW;ܜa9ұŘǐ0Ɠi(_Lg=]!~x]êEy|oFt\LUܶ2C/-?ߏm_<ׯ${b- EmXiJ4Ex~y:”dh:bL߁n\Ȳ@"a˟2(ĀqPiklZhs_Ҹ[~z~wlY-[/ ,&;KE8ajZ^9Y=4-ɴĸnۥpP@aDUT_Co=/=۹{}meCU{ _]}}HCp<&#ׄW1dجl`%lzUJ6XYeYe+m 9ÚڎY}{,G7)c8WݼB)?Qsϕl,=,&ےܸfLQᮧ̼m 64|>wg/rYL4zuh\ȥeICäG홛obg/X]ؖ.uWoTퟅ'-J(ñYeRORb{$TDC4:`QJGH61H9Wƨf^6MG_H%Y P< E)md+[:W",X0 P{K9^0€w}sB{2i4KM(o yIG-Nysim2rO7ȿ#o2t4M%SV<9}}gm/_ZlB4a[ý}u-ǖes8Bpjin$y, =^jdnq=C18LeGz Z"9f8'pM'f"17%?u~z@ڧwI >:B~}@c2-s<|]$"MaRZ7~Y3THCǖ9Ӓ>8i^\613 ghmi"?(:F&y{Rs2jFIkPz,î3q0Ul=Z 9]^PI~TRFIA߉EHuac_R]5ϟL"+4_Ox(!>87֩i*|b]%2<^C't13}5cz2zL#+& EpJj Ĝ27tS€#:Ah 1YӷBw}|Uqnd;äa MĆa*kjy#@ޖB#mÜ8&ɬ_r0Mgؓ9a$Ǧ4OnBuHhIJso5\/#V KQ")M/5&cL$V/yi>;O@sgrv%8Mq&߿^oJ>LeK /%FԲʼw3T:x0 ӾsƯ뉻)8)1Uu3UI,޸~7MHktB[F7lmoiG#ee7 L7<ؗuɺ fXw81ϒح{xX~n&<l=7ϓN@",ٺFyTBk'FDXSK ) [l↧ bD cɨ[i;Ϊ_I/N`lUXmWpE&ʫ.]73A"w-b"LT~NZ|\wYALL{fkHE,u/dN蒡E9iq4g6ng}da_,W%}9%J-ه{}wvYq2{ixf{u)H˲K<a)^6߷ʚnoyagwUeWY>y-0EB9). !Pۢ7l*XpdUx*1|'yаya}R>y4LF8 uST윓!cdžyfoŖT't@.&ɖ UaNh&h 4\n߃Q)IBx2&t߄"O!Ĉx"sl5a\WP0݋Q:췓id\O-)0Ρ Ɗw?"q>o@I#}+5٥ b/;T kԌ4a-@t]ޡyvׯu~a65c]?QEKʣ<(H=Ȁ&!ʵ&LDJFxeSac2Ѐ+7R@΍EfqAz?¯P 4ኃFR ~44%@kR{j !yFhEX::M}kW~T\hC]0i[d =Spꍍ =U>pG[Di\ouJl||i~އQwDKV rSMtvg`<>ptV-q)Q2M*gvt= -'Y,PqeCC˖ˏ>|r;AfK;KJvvŝ#k_{S:<=ve^1A*d jhaʪe}U1X[V|+ߖW%@j46?twh}f붖s /$J/^GtZͳ">((KêQ$l(4%MX n#d FԖˡ4)4jGłTbڐ^/:*'gQȫ۝!V7"Q1=r#)XڏE2׷fyP떤4L6:K \aVlׁڕ7< [R- l~=ZQWJy2N8'b̹wAa۠kx8Ҧmitٔ㲳;A[7L#: sY7> <.pͱ~~|S:+n^] Έ@{=r><ν2Tvcre$ʆnY%mWGzkR+J-GPQtɞܽ-\-zS.ԑܱuC>;W)ƤfTs::w'T**U`K1̢5Ʌ:&LvM5+7}Q3KHE87z}SWMl9^Bn25j,Fd/)~혇7/27-uuC۝TivwL犹r;GGo Fuz8YNOď|wD1yU<6PZK@cCLuH)ˉsWV:wVνT)%kR;SUujsN긡͏|K]yNW-őX4r}c\r,E.{z]*M1G'=15.<EYTtLQ- %"5W"hZڒ{L,:4"r\o.遽rQEOI* M.5hj Xȗ= bj? `~Bhyz>DQ@+;Yeb%P&`q~D1sb|oXvq'BroGl@ ]]$O;F]v<9N7N`S RV1 齽6i:cqp!.T~zVN{똺j2z9YA-׋n1GpC `GBLkuҟv0g#|=u4&şIKNg0fa oK\dc6udžM8gSgPcČ'zŠBg6F=O#I0ꩽ yI Br 6_%Ea#L#D*1_kb)1[Erȿ\`4Gcx#52BoyJ5w/O%tR+r%)Dg*!'* %P:-JHGs@zal=E3V׬Q_WWT[K^9&.x8AWWOOW /sv6H"@"63]#9ҐQErD2U%\БYQy!\Tأw-AL%F38ԧ7bn"%5]i-rg'O*AVV OTe袞(_S))˂kYw)!Mʈ-{Nӌp? SPb>ĤΪњ6,^E ]z'tHp8OdԂH)iɥMɦV_̴HU2oY1CMqD[9@)beˊ1D. HUJ97٠$iB~N,Q9GL=?~()pSg/NˍWmJU suf8z$"+? iHމS8(PbB P$r%ߝR'' ##+ddoIm &= dVAR/ 79!x)ӡ؆5 6K/(R%Ė <p~AL$F[QJ foW#V*!r8ؿz6nKpl۴,'֤KIII7[1vM|"MS]64sWbZEjz 񨄸pO!MAud usGP+-boKO~IߘEuffuY,EYEl]CCYz 5B >uR]ATͫGզѮ̈ -Ih4GUX=V]NuouuopPb"̞ډ3r5$GM# MY6Ak6122"0v``ٛzO0Eb^hO Lw%d-IQ\GS<6a Ye@Y ݠ'Er%a·IG&x!Bɍ)vkCcL"EMQqY&H6'-&MA(ݦa-(I k*w\)qTR{΢#P5Mc 5Uū㢼jgK)oj5k<+qHSH\)X=gO|N76A}IH!_HB[tA8q&5!6y'n+#80ev=#$\@ "Ca+GE"jDBa$*V^„"J`"21gV0>h7щp3̴N(!9DBg3}gC°'CaB v~bƘm&Wl/>!pa\e" &E, O.z |,Q?ku"A+ FJz)oH!0|=M+Ƞ(,E?b6W0J83H/%f#G}*dGF܆]@d>^}L'ӛh94V=mhRGfҠCꚍRdo&Zr%`vD"Wos7p bKJHٴ\ `cFdk)iSg:t2o^^Ƨ=W(#4 ֊)-..$]@+ 1iFoGI  ɇみ'vKYfsbIQԔnMUbL~²z"^(oqLlIjTTjIlL7˓zl/Hj NYHMEDUrj (`H)Y \fwzاly MB͖~N{c lz^ŢF#9VV4F q3n ?7]Rn%/YKγD&RO#|K}Wc"$DfF3J%ۀ8)aFf _U<]X+=Y-)t=ʦXou^< }yUc%T,jlC:.4{fN`!Ó(Gc~I4GߪH-CsDR"<.OS~'؁ ɓtߦY?1t1v.*+"_u _I h .+wFu4'EkD}NS91M͉O̸9 _>3-4d(.HS l6TWm(>jtbǵ7ko^3gNveB[!s60+0 @[f uS9}!T1* V{v$09KE=UXrt߯(OH$,G2RGcŊhj& ;Kqb, EGx`s̡YWlfd1epf7s̃^:4PP00eò_}Åm{ P5ؼǶWbrc] GڶK ضGӴ:}"?#j`铤x\_y/Wm29O.TdkԽ]M˦ ڏ,H'#d#9p&&$Dw-h NrFtN2ZZ;f]]IS㿪 9K9p`%9g[+OwE?= ;4W9K֜~}ő<xez- =FC Bg)%%g,qڋRg'qڜ4[IVBxTe םS! ^"Ҍs]Ď#z7*Qt'( >zk#[`4'&>3F iKFX:T\ܮȅM, 39YPgȎ[Rq5ˌIk/lΈ~VuU۳Nw5r _t/ϭXTߧ]8 0Ho(Xq,)l_?ՅTxS/1kUSi8 lc>,a];6rNk tMopRh =D{ؼ25ég;F/Ձ|ԷO= $SsX|M:DN>qtw!A7sng-DiKO7ܲD ot&fe5>cdZpe'v}z)P_8cDm;O}SsAu>2>g㪭RWi-,< юc P0㎡ڈX!5; *J优,z|Gh  wP "1ppϽ֪5b 㪋R`2;تK3V4Z?*T>Vͧ}ؖ|یfY>ȇ5:'ƣ:jH| NWd'|˖Y9d5vhY6l wKaoMwь*3Q'ʹy҅@Q/^JuTPR r ¿9X8ϠfY ^/J.&DLiځlS±xMSC{--6TmH;{|cFbŁ-Mƴ P/j3ag(klQmojm[JJ͵oNjSXz2m{kvڼ0#M ,QWAQM8şL1RP.iڋ:2W޿`(^3cQf_ 3"r`avWblp-^t*q'=g#*FA4F6L(Rg#q@;0("*Fmwe4<N#b[F%R¤j 0u$9*(b귷: 1!ŭF"L,_.l:-SLG!BJk!qN}wƖtgu e=`֑!-g0V(UvK. *-ƿSp,)zN:uCʸ|+R h0|}o'[;@>L&>ٝeϯ]o:YR}ʊ]{eHg,Pg<${Pȱ)gtlOթSs-śUŤF|dlHf -fD(ϙ0Fu1CR?c0S^e<,Refmw_qpZz\y\VfixMٍ$7+{eo_ww;7Lcܓkmk9r9lY95bt5(&WΎ]%{ܓ+sjymrnv⎞ߒmUOY>xOo\wP- 3+9kvk!]{n&qC.W=\]}ӵ@oׁ]e;_Z[JJoyivpQ &.Gc*tRd)T9b24/C=D!5M7Hkٌ y.ժMԳh>.EI8ACWq}&6j>U nTnz 3Pf;tf<荥HPyȚp;|cwQ?R3)D?nRҍ`j"O9*6H8\ZlDVȓPP)X0DzIs'h6TһyS⦔镾Ma*&uشhGArX(pDW;64+FY׾xKƙ݀*LWF7ƖdcvOi`oonR/CP؀eFgAs2:K&l'rosVg-axK@HcMHcke2Z$Rdh|Sn֊DZ|kCЈ jȯ e߲X=x4:A (ǖYՆhyW#*UPr+Ͼh~$?ޣ 񱃾L7vE-֔eն3 b~1k4_k"#i;Y#rBP$>);|:Rӵ/Ubd`r =3:42˕k(!fPx_iF!+-9V$zPL 5QE ˿ycan8ĕ6^磷"*! m  =Յ`Ş%n>O]e E%"9w\bm(LGA"}vgy% -ح;EDY%)Y"ǎe(^Z#g@p֒r&B&n/0s-DW_v.{lCޖ\3:OM"eKkG\җ\PSfEeT,#e垎Ջ8T]޶3;T'7-r>ޓTe5 šL-+xgU#XvaVla'395Q12՝PGe/0ݤ2.VJmRxvGNSUIA ltїod,aj8wGL_0ZtiHe&7TXyxɂB'z2Yԥs 6Iؼ<4TcD?NM_p+i%aϜk0W]vx cu5oV>NUc ʭ^dx[ n W5l-(̚Cˇssc;q'޹);g}salfhA:ggN8nsk ?21 _ܿzFItq4[Bk{ {s ]Ԅvxn'>_NY >;G*_v_[Y*.ʄ -.2:V7S_4箥>һ<5Sͧ>nr;EXS㱕zjl:W[~sn~oի޼=1-g :k;.a|'ϡO%tq=1c7I.ߤ7gw1;pߗMB x>7RHտ3ߞ6:UFs(ozn)Mvs! 7/IXb tx]F '7@rIg<c\CUGC#dž5U%KY·k͛=P"ď.Q?{/E+ D(Q$Pc6 u#z"G͹ZO|"uhs[ tG09c$_M<{g/|k|>K ÅühCo _#Pi=5?D܏7GUՍ3ܵ|x61>^IC`f{gׂq [|s# ,"6*".xE裁;1y}u}L3ZN T1/$FB1vtB dO8uz.ddބCor:%)]"Cy/̱n#s_3 /M~̬٣z&y%BY%=&✱KWFG:4cEUlف;򎕹N 7/?,}<<°Ňο9P3.7$ n'>'A v 0FGislB]PPsd/K,Yo*^SMm3]{a1sC1j4h6\_@șp`N*oh7aY7]_ki!“WNl.EjCg쇹1jB|@(VfxKu]/4m"o {w~ckMtF|΢.Hwz5)Xu.)F'1X)0vdP,$3ķtń1nS;[j}gZ/Tia`u21J¥0gP/ ljC*r0'-ölž<1$Ud/(qD:e opou,'ZT+Pa2-h%ms~+r9O紺Uս{{,{ qiRWUn3OT*x5J6JN{U^2oRp'gv ʭQj3{o&kRfjTHjlH8"~iFʺ)V Jׄ63˴)$~:aS'\RHhe.v*PC$E9U]#A?>)0;WLCa[iXG O! )e4 >v.Xp}^L3p]vI'O>5w={x}Qa}x< c =3;P!В4,W)Ms3i7;eŧ7ORhDz_ re|[dʹָBk%J˦6It^B{t HмSVͻZ[wݲ> No|uoYW7>8H=qOW'2k̙; 6ʕRIRjjg% n|Ոh~8f::v_{:R|@+ƿଁYˬar50k?;3VPE>JǞ$h?f8C0}ك>E>vۓYf؆6}&H۔nZy9cM5ٶ꧞LnKA3\Jl*E׿.8qhhjW`s'ic@>!ࡌ}p> n|H@p~}fʡuمkOYD8Zs{*l* |$>#c \|Kva垗z7\^TV!E7O ,'KsSfYM/Kz*SV&rGTYٓ[f,! IƤK-; |!tof=0~m{JX{:_\ϼS}+ш?krσ0g͹ET}]scZNǴVڲ+L|O{ϥU&s$)qFgT,ǶEFWM|X- '2cf|JO^{z{ox-Zmo-ڕvZޛ-˒,rp 0bZi!$$@x $@$@(^3Jl|޹Μ9sf9yL9ƱGCOoԯAؓ?à+jo<(/tG(3F#=o=ëa xH&wT.,*ZXˆĖ 3YRc{z}+7{BIh{ F e*O6sT}VC"Y18B, ^ǧt2"aS::y̠Į]'؍RGǤ__a8 ON~ 3kַ}rj}^ 23>j4-s涶8ָSM9Yʦ!mPbv7TfpחX"cάuf[c2a ոL2RKs\M++5gYT>Arl"i~t@:Wk٫|jT#8* \Z; #=3tU[) 4cw&%\U^a+sꓹr9 bQ&QnaM =;ފkIϥ%ITg/בDb(#ԗ` GT|.`Zl18O+(]:' Y&Pwv569 ތe 2Yj0}tzIbDk0}҂< f5Z4`{r 2 :.40_⏃ {΅YD?qUy~Xc_?^z뉛21:cxq„X A{k>+7}n V43Ȧ:mȻA{iZh1e]31إN Xx:q-0la=kx?ΌJ2r2㜐LOxJTׂm*MOTQW|Ac-uTYƬqdpS(KL֠,+cX@ =0/3t,N/ Q:y/dd KUb*Lk4>F 0/X۳ ws~a"p{w&>>kvyo2-2b핺X݌-XXl3ꟷbw2{׏b-l_٣qlfFL@>=Q9Rs{l3dr SԦftX,VÕ"xx ϲի>/1&}Ζ|4#K R`lw:gMpE*LGZ_C $q*lݑffl^!#RuNOp%rD+zDχO OW%r-//ۦGtq8ODׄud$tfp*M(*&S Q /jZDT\ 5~m,s%ck-Hx iVooPFkT^n/NG򽽽iMZ5iU^C+mysɼtBL9M/|4X>RׇpɥQxapg-M/u󝸟7kqYR 2kƞyj/' 5,zl 5n~bd۫*J3/iSȡV20[Ce%JXݐ jSpO-"O{eyE=tb,]\\5V<ֽSOޕֵO֝6Rl鶶;oZӭm,Ogέ*,(`A tի*-5{O?}eߵolwWp5.wEL{HpdFl$9Yز}KsRR˶ou`jvmi2Kw͚._%W d׺k|LȎkŰLV 'zJf@GH026G\e˅,$zwk}5#AJή[ݹ5SK N?1rJq4[K Aj"g22t&$Ǐ{(X [  8\<>L'hV j+CXW@ˬI6•F:yFOtD|#uxǑSЦW{=)ęFۑS=is x"EOp zcTtKbEASlyĒt}%Ó%Π \ΤKEuu.UjՑbv܎<\vqm[^\k[Q\ͻ^/OJ*룿PVuyaVj0!P nXfSf"b{(` T9*gɭwsr\ Vr,e038|l{4e(38?XQ?G׻ Kn%?Ƽx,e(||1EÁ̼:U9Zw2[[C)C}&8jݢ)f@ΪC򮛞XXˑ%ʃ%^M;B_}!;٨r+K;Ԯ|_xJRxRܡEk)V-XZ{w[byC &QnkgU xm#/;Z819kO :%u2%})2zq}^99YUƗ ꛶[zS(^h79LBaz}{Z!ZI)e65gl#6CdYG͈1 1K vDeEk)R+iiIlIx}*J c12$eI^h+Pܰ5 cμ,/%`߮;.bKiR?ұwu8NM,<#:'cd |ZIEDf!ob}m# cm/sQ2S.KL+tuE(k^mJ'y @v޽^4'% T.74~sGjz׶5.B竭dO}YT4?llٛiHzsјݜ>\+a@e2}vғ 8(pz S\8߫2'}pnwU-nw*j^ 2"'p@~߿gtwQoҒUh]URջaǤC›h|D1Ph[zY5.>^1(> ߂նGS@)bߖ]Z5O+oju&_L=~Y2%XVPZ J*tZ0_oFP6u+CɯcF"njitFᬾ Ezz6n\;:X]};:T]}zX/x>u2~ut>t2_OW' To}UU[G~BK]%7RϾߣﻖWa_Bg t*;-%4r Ȟ[b4 ) @1]!<퇥iq:DqGu9SQjɱ29)`n}VKin IMdZv`޹+sM:L_FSa6%Td0Kljb ni~Ɗs7Pєd-.ipYʚٜP/$oMLwo=ڶ{اQ-f=f:glAcy6ge?i+ fms7pg_ 6 jo?49Z(r{VΒSt >:}~g췎Vl 6VފڧE/ñGB\U (Dz2.L_bus!{N5yV pgoUrzC4K)t,rtcztIA T\_O~Xx sqxc}؜9^屹WVnC's*+da~ǣmm3cmmQ_? 0~p@1p4VeBA |r LC=O@A;?#dCTxSUsg>wcyC@ djb0~C] h22{`Ν)$˩K~NX? zΠ{́96~Og(KGq?QꉉM֯91x0Mmw4Ι̑cyy]cmQޣ;v]M =-} =/O4웅ukn{b,R^\{p}JaMV{<]` DOZƢ i[Nejkkʼ5&` udvd#5A//H+do o)j5ppXITYb va?kXs}˲j<37>bB޲ʕ-.{Z 9aT.6.4~jҋ[JI~}`3 paUTnNP8$$F0r8.Fl@+%x9EtQc%NdU: }w)ߏl ^>\P6VH -I+m J?4xNzɹvNpuH]3?P8Z\4).λV>?;6223NL*.0xL1?@.HZL+;"i%": D{}[v~&^NwVO7m+I0m|.o{ytɵ,x~EJź06oTZu7:aڛS`N$`;L~ua4J>f_08PEiGV*ƹN ỏa~ ‚}{Q'uد|!r!O"?/lnnS98%2~^MeRHc8}"(7hr-T?Ow0F)DQo3έXW' y}OTH.XWŹLbȯBXvƌ1m(NJAS!˸|{R\O)'YPڹX4F^n-x1J &HW贮4u2w'1rCO [Av7 Ԟhޅqda mzD.xI۸zM&c@ᡞ(|PoQ^ڞ;,Ju1fٮv7)`[>?x&j.cǪ,i`xc IW5◊b9͒s`ďPDwX,[xM#gʕh̶{-,"-ɓb2+Zԕ5/diMP-+xy% '>KQ)5oNn- /T@6ABj J?3Tb5g:˗a K"-`bѲ*(/"^]vn,6C5A=' 3~67g-Dy!sNהmN򙜺X a6*Vlfp߮t'iI3e#&fgqA2˒gՌBGyWlZATuQ೥~_11_~zĊ4 C$GqKrY҇R3|‘Zv&B;K5%0uTG43֟;-atfx^hrpI.b91?ш7:!c=xVlv+»?"F9>;'c/WP651El1jw:(/ö!,s(-iQ6F Fl'2 VR;dI=0 _L@'ZOv4wIۼ$7cnUNWP], t0)s8w}:ҋh:&Nm[[UcΪJJ2oK3Ry55isӔݼ^Qsx(XqO[ eVzf I.H Kћ[ X⓴Š_*wGu-{pK[sBHjy,ŦNdwyHx4ጙ> mTcpܨjIni*4Qٚc?錕T X|ЕqLPOB} j]ZGDeӁk8ýDPҒ7$炇HuQSbP)L!s|@G21VKs)1C)iz"ſ4=ޯG֫h:&~?yǖw$+:^ .BO~2Qc_u+>|)PH`\O-kg1.ˠ҅?_ dxΌK YE9ij88c"PaӇ"̑$ԇnw,TY֘ך LR,یeGn={'PH|&RN?U t28"~?2*䰌>#Y8}M)X GlzxRO&ci&t\ "p A& xtli&3+=v, R5C%(slPdئjZGBK&O"GGI($#" `9٤/rQƕex&&kI9]A*ۣ iITy4UѸkCTu !v" C3e0 ҶGѤ21`AMf`eDhĄ&+Xn™M!({)P}AnL7QI,"(e2=8;-ytJ!+=Jf^f:l7ie0& D]fz[w&+C>IarqR[/3SK [9v‹0/پ *MrZ2e/3\\:6G'qt6 jGtW(dv5Dq@t?xM(0b9`31Wſ/OeHxPfJjdFLZ?27(b92~*:(̢9Y.V@]f8x1`;ln ȟѸIћDTjLDl+>x֙Aڻs]7 v УiF{_^+0? 2 )"up9i}zkַ^~cگJ#l+$rU_Xɶo'N90'{9ov&X٘f@^L;>,GTZo]UN_/Dy4IZ9ӵKO-;6i^3-QJf 4uC`Đp԰z-FkAㆩD4>XtHc@aN/Jڃn%x%FmBwt( "aϥ;{M(;b㉋i?YzyӾꑭKC{B]9%WvY7voxln w5HI=GXϡ=Fy=[O&g\[_Ϥ4,8 xa6Ë[? MI^{q*|2`mk~2C\ Fo>$2 XNn܃//Ɣ-߼m5+c_|zlJ|IM6i7YQQוc@`:;5 Ο/Zӕe/ <=I1XXFxC9wNʿ㑸KOPggbGC|8~ Lkį%7v?™'Dm{% 99cci䦗ZrܭR6ѓuonE m6zHۃ,}W)8M4ړjRJ=gV2>?Ӳ)Z Y&AܵԮgZ9?~9T3{PNѲ)hSD[ a7L%_&_eLFϼYUHKYrkw +UծӺ1xZaLҹ'U̲Ԉb`,_ Qyl HK5u\ĿA<Ѹ b2:.":6h:t0aԟQ|%3=q:OZQq`a>Bw%Ԣ/w_-c CVs L[MJ9{;%cr@.YFl]21α_SLLN+hqL?S^zOIMR2ddx+*MIR~[0Wv9slb8aj5oK5-S qUuTg&8 !ށg SN9K(:c8|PpX]B)yξn]Byg㇄<L`ry2N`72 +CDLPZ".R%YMK} %_JLfS7 B>S 沩`E-aZv.˥pyX5{?~~8qe>{?:u1~;۸]EUq 롟EmL6El#b62c}jm^4cwW(txd="~ESLDm{혊 ,SWCxYSnA=GRU wz!auG׮2cr* -TqFu ou42Z;;XrV_d䬙Um(뉓i,GPj@^h&'ڂ!lrEtEz*hH"1lX&jMaD?OHƲyZ+3.62*HR8a#A*83~wt)Lu z xnYvŴ]˛P9`K"yv> <0>*fba&s΁7Qe3i0tf߃ =軙|׊"ZCoRƙgK:]geeU,16O4\Īz# T ͑|<|Zbk2,-G 4W%{@&2nk̑Xa4f':>8=~ꫤbo|8))JLHvD`qIAKԃmy[؄j[Vy~'a*^OR~§EqĢ VeCٚPHUMW(P$@SAswBYg+ٳWQYIQT& z?1] :iG mQTeu|s,]+.UUV֛*&)v'JD7ó;UX;HˡU@~}ϑ 615,2)l֙u`;%]dԺIdϱCYT#Ҍ&y{{7s 9g}?ËO' Kӧ>#{61oRwyX%qnD,'*Ȏ* qN< f7m42,qPv@ ]m].6{qi˚Z:֟^^f]C|8iJ @R3,O˝#5)0L>K (α_AHp|vFt?E돱T0|PY5$A3;y{E0#G|@]E\54ߘ+=:*įFĻT0Ϗ*aj1x<3\ !7eōqj!Solx\(zQD2UieBd,l0>Ǎ0.ϝɅZSWX+HÀԙ"]&5J̀#]A7}Tha̸Fo n2l_XٰѓB,e'T6OH&+>6`~NlJV;F:9 0Ym7 [^McӴEFSc nhr[GT@JJ&O2mL؄ɘ`q"Po_$ԛo)kw>R&%hiYD~dAR=0GiILݶJj2j;̹]#5~6N?Gc]tDZM\>|w]9y@ɗݩOIK7ϝ`Aq?OLEPq\n3 '{1٪LK\ۼ24q\6H~-{+WK~[C߳]}lH`( 6e6ʵ :G}ib c.pUh5fRȗKZU 4|;`U{59V+`G!-߰,6="*Qaesz\OXu k98wCE%á&FLpdz=šX?Ir s] dacG?}!(Z4ʏnJ뒓ud%% II3"SAe Zx2/bBȫØ5e;M9-~kɔ䘨mȏm=W$7>e V[QSY̳=Y-%QkoCZmiwze0bmv*&]FWm pb15E%Ub4dfxN|yK#lM`UXjx˖4<0Sԓ~v)!jÀ'љ!>}OaszgE2c2A$Y'Ԙ6mn*1)$%*eX.F1vf2h˹$ J%l63xY0 Sh0 2s3my\)'?',#Y+V(1˜ňrEQw.Jٍ _($dsZs!oP.%؍#aGԒ (یIH ʏ:mc9m ?M/Ɗy$84*;n9O2tNJxroJϥ7}7"8p;HRt ešJ-jTcȻR;UDwDWuVu5t]6 *0 _~)..R5sfUA^e qa|xow[/LGRX'ޤmv]*y|(he L8tMȍvȫ[j^Yk E6v;4y4WB9&33zH$;$z5'G%3N`d#Ljƌ{*lظ:ۨ_VZ۱۷>&T8PxE^Iڍ1$b"?t+8)UB\Ӻ4*wo{da럫I$"Zfhڑ79{κ[孡ЖK(m{: קa_sn=kJvW6y@qnSLWǙF%W5rm.EW~hAǯ:[{_>;%3NuO^fgdf䢛q+8U ŋ2[\q@"SeyXּcⶊ T$b.?|NL/ 20v` r~n/׬ #Tqu tSO[uAL >K}ww 5XiJf„Q`{J&ĕl*Z-@yB1`J?ؙ%ȃ畉Pw3\/;~ )+ ?5BhWہ,kHGmeWO߸dݡ?oomsB;^Pz J{o_>lwVSz\_/LQ?[|tV%on*QBJM)2מ; *ɣbaҭk?Q Tғ_SK kԎW[=-?Ҿ59sgKT!W ~lHGYYU9v 崖V*&ɚ7zCU&g r̆d ?b]QoLs\TԔˈ+Tֆ~'kyv)vJt#=.  $rW5zqwEK=-Ue*p?X-3Ã? -z؁u.H0p M2u/:ConXAE?32,1 5YƇpK Ps8_9<`Ѫ$>c:ʄwqwO+|Dax$$րj=ÿ&zmZdM?Bymk\rp~qyіQu/fe19>2馢.{Vۼ*svIVAx'+*,sj *uV/q(=_ot x_D lګc4BRhaf ґ}.fv,t/6'wB{o? d>Y1`u{Ѿ@$QD/`li]fkW B!]ڣ=~dk?:w>1i'HOfЄA)fਰM)gϾޗn]Η7zniXLbPºDg<4zpo@5˰ͲfƝ^+g3xy3zn^ۓudkx_.fƥzL]y=NX#eU o4'i -[;EE'絭iNu6s,DH!a) 5DBSKOG7^ϕ?P#[ ,=u9Ϭk$Mǖ4x笯Rnz${{NzOp2 N{]gR0HQ}׎|tvuqǾG : K̬h3c\}[eOOȲ_ݹB'| =̂Ϯ[}aWeG}x~_d54y<(UF_z{bewOoэ[xcMYny I3Nn2FoATd;}hH2&>~;,9zC>S: NINMDBKPPw*:]y+'àjc"7멸CTX+$oOE6_Yi&u3:t,t|5m~rK*vWH|D*h>h;x:V vr9/װ}'Bֶ [ 6Se+cCiehg2ER"z탫vW,yX[ny xǞnwޒ?\!HlI̯|uA}K*);E4$ ;\R!Ci 0p'W- @ c'=Aeh|iS~ާ]-q%~Qٜ-wMoBv~R;T2>P爄dC`¡2Lf]=aɥg9Gdju4QG#?=Z|pBչmh-Ɵg6W>Z#<{{jUR.L9lRH0\2О]}:r=gsxN)g\uہz gO\yy|(\97=RmB~Fڢhs 18y< 0ڷ3#OPgI+yKD'0k<\P>l/-X>қg.Y*4Pws Y_Vjv[OUE}ԯXֳMm9Z$Kֲ,Key[{v{I-{RP@[Zhou-D=G%z?_8N}RRyHD>YZM/l)Y ?~w73'w%M;?7>EuWok@y{0(dg-.ý(pi\M{t#-i$OvKn1iLNI4Z죝6@tuJ)D~-L+2%Im-_Bo~=mϑ=w}}* Z仑kwςeCI<~Rg ukCj6 JKi'u _ 才Hi֚KpHs֎f1[.^/0v\{t7x!^gt&5Eo"C-Z%#H zT7yٓ4o'?_a\X]w+72R_orX}y-B2P8QO1Դ`i{a3S=GKyWt~fP`5(kŒy55yv!]q Uv(ʑks7xf-,8R6H\4O bo+&IU֠ Z~C3g^&Ǽ -3i.?*صs-EWzc;;" FK@4$4Z`Y_[6]jZI%}VGEټssO MO*s֒\Kۡ>CW_- 3mm2(H(q=.?Re0TXͥesȘ5iO^,rg$X)!"EoB6gy; 0%lѵQ`sE1LF]?z|4Û\ݒCjGN Ignz>8GxK Ky~DS|C)\}~ɉIZbw|D$[ԗ%$W_l 9׉}v3EeP؄F:CzJHt[:%g5D&X97C#nwxv7?M|6%-3ּ(,:EJ.hgZGjg>r] t0G+s"1WQC|7Y4$3[vSX r hY.#Rz'ry%Ka*4Vg+FkC_Ԙ\[]l5'r]k++5V9#xžWB^9q*#2YHZ3C_`En-藩gK'mŔݵENW9"ވ l2sU E{'SI-ؿl AYxoq|z<4Wv>8yV/|Re%.d-] ##N'-AsňJ1 i|{<#:ig 6!ĄSRjL<;77r5 vv9E # w~pvR dMZ!h 0cUf̹g)UG)U.cm2KLq|zI$CcK9N ,,]`n$lBO/3fQ[Hߠ?ſqm!5{YBo1S5M%LtqoLStj}~Hk*Twn{vOi=bYG Z BYᯬ`ɱbrg_Ĕ?.tFz"А2a)?ڞ ~C Ӂ "XmŻ/=pӁM#=&rpnmd) ]2 4-mdQwo:in) YRg/\}4_Pm_Tu~"d|TVwF֝k^B2Y%-`GjkOVe* ÇnMb{\-E,JEylو |QP25G>2.UOV0N#*CӇjvuMQ}sm)r,\DzQy!G=w!jA6W+P)4u h = ^')~7#dDz`?GzZ]9(jtYfo-RmB&jz{KS{]OI,kmv!"VCplkuYh`cetDct$b0qO?uwe]JޭTb,nnWok\zYt |W~k:IOt3v<Bk5R9Pi9ҁgoȏW(5nX>r^j"h끎Ʀw$4H-$KOk'z/S=ԣEU%u3s,o+Eq_q8j_Qs٬#3i|VAγ~K[h Z,!SWdH|SA6jZRx ͇(([{+Ɛ' wtq^tSSn/l))jq+4%<&G_;wwFM|.ۭ/vk*'* 4kasOV_s!XN[;%074ֲ286p 4i"6ÃsUVK99hlVӟlnGG9oِ0::.qon yO,[{kkaE[h~]*_:bg]gg=`0H<-nmzm3ilX) үlFR]SEԵGG0LxOE@DFG_6vu/ArA2`- 9bRp;mqX3#i)/ n|S=M [Xk% oqV•Aݜ|[r? )"/̇ []M\5[2meULy6(J < ˍ+i>@#2 H>8n*FZ?I5пoǗ֪" }W_O XWȟB,Hh$<DZ]t-X Ő${&u:z @f^{jZ%E>Ɣy@xrGPs9:jhFOnR]8U-3uOKw p7aѓŇN0{C^7Ltin/'ۼ5ny n[>!۹䵺ԫ*m4}FG(ņ?@{O'dr1YH,>@,vA+f+-|;S:zt]Rm 9݀WiG3@R{ЧzȻ!?),e- 2q,O[[[Пܝ[&c;kjvv9l y2OUnj;:6}]7a.c@,)Ecx1-]o^g6=^k=DG(Ou-bU͵ӫW/Bv$LJY%ޢkT. z;uڂhy@+)EzyCƣ>5/[;트 &2 P]/H<҇~壹D#ze9DbÁ;xZiWK ӽxoS "Jc^N>O*[͵Za{/g:.dz`>R{D͛V"U90nbOLkC]}ms `xpsagSX[0++]T{ A> 5>v(9BH_: TH{F3KV]O(r: )C,trSnJY$XF }2q 9 E"$}ЖJCav "?Ľ5|B' ,ь,xT1CGe-8`xfMtd1L-MgcS=Gk.}J3.Ҟó蒇 :2-i+1?O9jEu:.Y +QDa&7ގ Od3ǯk 2`5fl>_t)a4 `eHd%e$hCoɑ66ҤPgނ0>s\cБKDÚLOR"27(_0*r6]b+6Wv"8h C6 *qlߑIYb_ >g_V篲1`7+P ZE ( 5W$2X_eL*Oe*>RWbSï*~/1N+E}NbE,e#r8oH KI ^SΓ^U<N%cEI7S2^֐vusױr9ߥq:/*ql3E#׃[o@ׄ}4mo3*Ye\u2Rxmr/Ǹdd8DcZ(Df,uI Gz 5S6Thp.2jj +ly&X7ةE`ss\'zR 6-b}lgJ{WbRV) *LB^#30-ui_o*dJ niqTzs&a ?DG`[Kj}>)?=he f[ b{U-^ٸM{M5D;7ꡠ ?`׀H"ċ%]H 3_,H-Dƒ$&Bl[0@؆Y8O.e"l:rѦXub^K~a-+*TbB(j݇Q$į25r%  C~)I d&F$I3ڈ"X&LbqY畉ŮjCFoj̨ԅE!N_-.k4 C]!׵.%qY\9![aG1q"\i\*uz%9?^LT4+{=3ȻKu  ވy 7_ELzIGr=@{R>~3gP/2$knIt=6(ejT0sWUMa,trj; 6jy,QYXPB|y<4RijmehW=P(Wh8*E"(K(| z4$a:dΫX2FrZq .H< .fYZa^-R)__>~Dq< i|hOuϔ߼:)J֫7\EY9j#i;-J΁pצ%}COeH r]H opC.<\f-VZDI1am|sp@{.mSzۜǮIw&g2՛ ! ~\W}rU +TTi8 @2 *¤G/OO:HL g62w$dAģ]~.VY.#K82h߹A/FʂvߌHǮוM]Ҋ 2Tň2؏t;ߺܭR(ry%@?|+]*[aiS)=qk𺊗o Gʵ}%̚g~OS'0Ԭ)QYYVU6ӹb݀v4Zyr~cf6MR4u&O Ѣ+b`$G_є2+1V14b&E:WEȈ?r,f'$.D<(rH_:ⱜ$ޝ*OgLح˰W(hY^Z*j2w(5 "gIuԟ{?ΟE]pi}n&^"g uLMؽRmTسkOa :W;:<"K$hb˨s9sw|XOG6F4WmՏd; wFٝ[$*#`2l:]%<|^ =c6Mm<1i_HQ'gr]- $$a`qѳb5,)d'M.l)hoe tNwh*1fN; K}n+\l4*rIZ fK*s' .!-NN>J@<`d8l]?Tʣߐrv˖8Ӵb)o`$.U*8 꾌|T=,)|\Bې9tRVjd+ObSdŢ\Y/ QG]2@zVO9  hhZ cyK&㒋?Y /e~<)enRaP5J:kI;S$M:cm2.Ќ';?aGEϫ߰" sXφXZRRH. 򸖤 #&WgT\͡0'Zm? ]nL2g:X4->-4vΰܣ%Gc*:Xwd*>\>XZ O+}jpo[G\c5n$F Oo9nDGwrc HtئP(2埝5xr$|wXyݶk+ȯbT*s[ѵķI^M2@A>"'~AhLjoOd5&4Y[AäLل߃= tqPX`' i"6moZŃ\O/Է &[?+#?GBZ6I?_Gzq2Q :tŃmyM "`, O,Ox7c}lJluSw<zPoÌb̼?嶟O}M 0M,|H.NMZY/`W kXڏ ;މʪo|ݮX1| 5Y\ ;muy'Hy<J5Fy@OxToia0J$z$;&"p ^y'DjmCӥ?=y%2ɴl\m"2*٩#GGt˙Tze-i ڗEtY>f^2;{}*פJ˪‰Y={R#YF:#ųv< Jܲ 'iS)P&zF"[j*PhAB=q D{$!DX[W螫t݌o #KmC&e"LMV7Ӿl ,"k[B%fB![\730ژ,̬jTҹ}h4*1roJmڳz%,<bЉcBqړɪ[|Lls׵^ @J'Cby~XyoA -:~59 1eDf7y$Gr KH`Zd-,F9 @}nm-iڃK~ƃ!2t$EoƨHY{c+5bٔ K ;Ֆ@ۚlub щ1@(K'6U(?O^%?=',N9BͿ h14< \0Z cNޢ,AG<*3,=WS~%WQ}FϢj1"y#|sZvCR[}8S27-xK+M#9$ b ~'~T/20 PNY00C%7VJXҜ"S3L0s=&0? a~g| ^״Fe6zEn3T;]A]ɪIi_up3-:ۚ$M;Ol 6a]?bsum/);w*:bzlamX5K3غrk7]~oruODw=Ѫ;kW47m-(U5-!*X,qpfSd79JK-IH6ŁK<8^獡5#gzl]C?+8م#JG.޹u/#æ@~ VE {J!^6p6JX7d~3*j>7HD1*Va-+*qȪ@gK-LB(<}z0K,ƛY`rdd,NKͪ=f rp krv=]NMî~cɡ„p$"0&+T"j;.t:ֿ863`.8.1?up8!1I(&0&8=3wIp);M/ZZiPgl?hN"Gmr4eˁ}eYg"Gu ."A2-D*og3!k`; /|77 ѩ;)W8b|ߑ;%'-J]%a ,U_lm[jP Ǣ٥5'= %Ћ=vjɟp/ Mb]f?˗ #s/6v oeub>irr0 'mK[ n"G1ZH䣛oFwHȇx!;XVX.P}cuuǾy7rOCtK{G k bm]%#ã#>w3)`1Ge:5X^1'vCKE9PdԵo*]+zʛR4–jDbswr}D̂k|KSݷǷ߉\%{I.I-;̡2Z+w*[?8*o}[+.#=e޲[<g5_(\`)Y`PH.I>N$`lH9f|؇EP}pS;GȢQ6HNۢߨW\X5Npnr:XJy¥pâ- Q ؓ˔l쫶X4sYt?Jé3' ׏jÝ4MlwٸՓmFw?{n̋Ry Bظ\ *0Yd@7c=_Džn-1Zb.{cnC6D`Cy`qo^ |b757 \VOOlryE",]ec; FOsiXZT;RZ9۔4[Y_HϛV3}.\ [s3 a/ɓDT-_1<|L𲾤j$$4[Z:{94ZeRO.D <Ƨ'͢>PX31is7:ho<35xmzڻxL pUV%&ݍrL%E6Mp} URqa#Bb_ڨCԧ n2XL'}\7g^m$ .U]`fJXg&3X{d,= 1. {wkO guZ!요حͭPa`R*UACHWhL*A$оNch9̟KPdȡӲh_] }&$K UB +4(n1;*{dO;lfO&PYA=Q3rY"cL ~bũ4MbK?ݘiJI,KqY=zYkx v/\`,Q+`57bv6rIz d4[4'3S>i™) ?@c\*<~n- D-䖠E3q#`Me P}r^XqPÙdI ~&` *y?Li ,]r.P50O=1=LOsM<Đv >=X[0'Cl)2,bV;6mcewn(0)AVH>1pW݀5'X= JÕd@z|VDKG .%/8+X<9K:')>~7h.]^wL`B,\=V(疩h[zq ]nOˇJ *]~'!i}׈=Wٹ%u>WU؆ڞ*~ ۈaЫ>hXE22wq8t 4_Jo24>ѧp?#D1vI%6F'\2%#6J_{AZP'ͨH02O_ЫMNʆ @10v6жLiP1_L!-wHf99]YY[.+Ƣ_&O"o:.[]sĐEA8An4)An7yl0`JbDZkbc~cu*?I?IxyCu ;gBM!̄7z Dvr7{ԅ~x88qX002H ${`gϖϲBF ,>/!?.̾>,3DeJۇ}GCμ, BDolYesi(s)0vhgrl!,.)789LҜtB+O#mBCHb(p4|I$vMa͖$=٦ U>5JEQ'K%NSoUiLQeT WS"pܩ7# L)]N(.[%T'[.AB-;co9z Naᯠ 7qgqJ߂^MI;voj !,j vaB(kR 1){FOh|/|o4 sM<:~7 A߬Y@_Gv,d/±9ȻpZ*kF2Ox/@-?w(%>3ndCo9L3T~smTו ^#Ӆ;|[;9 ln>5^T4~ 8cl0,3'ް I@mvz] O/֩CH#i!\E+\r,ŧY [qԎ\ 69ndAG.rkw=.֊V2ؔ|m_ğ6V[=^S2kOQHq#%_OԈo>b!L"wc>' ooKza2B5|c|_/4kEUs9@,PkjvtS_D9b%OT^9<;ڪّj?dWW. x7 Wi rFo.Ti[=2!¶^{U#3OvchiXURH̍h!ψ j;"I-f -YVЩ-c H8T'RwEZq0+|26CZ.bFqYJ<-4n lj ޠZTSYQ:u![68k&"YFr)J/b2(.h rH^9\&Wj "fndo*O*Rk2dwKI%mZ2^myc_P4Zao)u =N2`Oj|,m/\\X_-+EtMh׮m_*v|%Rz464JXeg&&p”Tm'LKլS$*\j׋P./hwt*WUKzfn  ݞB1~<[ofMZUL{r .-5oK 0:JM!؋B/pR+j ']TQa+[EJ6?Pͳd.2;zZ?ݦUbpZ*щZ r}j44phҖ -!ldB-P IER\%ef=n}p@uZV3>RB%)֫&5bCzߕh!B&eTҠ,qEz {*,PUm=ue>`VFY[X@ kP>%qHG>"aAOtt[$V& X> kdneT(Oc5UN1Y>pmבerbྐ :E;1X%/##[jߍ&w)#<ҤbIBƉ}&} &J|Owm^JvB|{Ⱦ]}-D̏ѣlž Kl>e J&NGѻyRg_|ֲ G̵<`QT `9`^eü$Xi!hh‘}%nn :9c)\R-ъl tg1Lǭ/%<&B-1xXd..F1P.s:!) }?\S4i. tʴnTi. Vkln 3mեC{Ce}dC`ݺx;Ѩj =NNg(|P\]o.k=yM=M``+Ƿ:-N^3x^)x-n7eVr1uڇo 9si:fsl776=AعIbUE㰨"Eo" C:V{)wEwv+89 ."R} }/IMWnd~^293GNRl;I0[io,:Pٴ>R)⡃4G|MIn'0hhMZ<_ɦ|۝RطՋ}[cb㽖 -K+K"Pl'9%=s9uVNCrD[C5ntLƘ:^c~.K@a&pB]j@ Ӂ3_jqPj3g~xo_k3+cb(鸰$댥uu&R4P׾1xK'r'`9| =vx '@7Dأ㎷Pe\6/om>>Ĩzb>g}nkD><_6#QG{"=#Z4 НVAE p<>wcdU>(};G|pMzF(.K>^px` j]" Xy-mpHZ\QVUUVPTVV;+j-.Rs%A8沇YTT_uؕ(=## X@d;6!&h0I6OȋV+52oqiz͗+ ,Sa'ZUjLhJOТ0 ef/k %Kxe;Z,Nֹ5"ÑGYc΢d_[`ir<&EQ\"9U sz_Mv, 팮L1lRVIE>h |1K0ݔ,ƪ,F+ڡySQ= 畀A]tgqd4CHo۹/}!ދs4|i8ؐE6σK1 Td\a Mv쉎R: 18 L \R$_beBrR-JfNDJI\٪(w {GB:BuW93'oFDIS^*9 X+1 zs$)_/9OBȋEt]_ 2 VQZf! X*2B❵kϙ{Zw6lxv4lPw<+8n?ŧ2}AiVRL#T݆ |B"G2a÷icz1 0\.b.QH * !]s <Lj"*'#.SeDN)8l|r\g i5QTĔ|KH T'VPAJNGRBUO\zvD ؋ߴ̮jE*9͡Xϱ41&+Ex!$zPI6ʓ-$CĖ?>/ndY4Vmfl8_,3"CsApc`ErU*c<;Yby1)/09q]E؟nO qL)eb[˙Z: u] weuwE~y5JK.wztԼ6b->K[›M(S{|.Ei~ˬKX,6e5gWy>Il'3\$ 9!Bss.hS)^E,'JqF)ܥuMQ޼,SG+b2=f6K+{ xΐKj2}N(e,| (m=(PC[G>/cs's J+92i0ebs"94Xxy*)+<=4Ī$+3%$&rrg @c,*<5Sq 9{- Z؆ ӔŊA(Oi/–btf*-%uOn,K>Y'G $3fso?s ?[M׬0:zIwOlb{c<*P^푟.wFtӽeIO O\3o<, 6/x8r?`V 2IB{肌G;W7p˷U{:޶{禜8xc`[GO?;EtmEH@!"~^/k`NHk4kˌ>UNJFU}q/sL)2X*S9gF#{BrD"(f6;$2eioJXwxB6N&A"hУg* 9Fj: zB 'TH+.}yq=3+3*]<50zi bZ{$bݨ%|ˆ"+.ggJJ +n.H5f(V-K`ǂsFA1V(D'?^P$Tf=Yg6IVEjmO2Ff+)fu ;el{]*,U~=b<1B=nUZ7jݻO KgzϮiT"7mWOgD+轹nuFl쌶N:3yV6OԶ0}֫+GWUr\:rSQu(x1LI" ٻtaT]f*w%+08 L^kRo։8 ul;e/^YTFyb@)J.sv yCKs 7tU;j3<uwdLn-uQ֓]p1{Ig7J;~Ci 㥡}ZK>J @y1JuY/NpiZy}]*)l @=&JI^_{iKDV)M?5U&--6 EGTfP@`vفPsSVZ~IT|[AοND^kԒS=_[j-ArNv|*X#F y<;&RWm0`ɷDf,"bsN>Ո8QZ-Uu54׺VۭJj(P~[d } SoN J}53jI|K7v_91mTe f ߭jgs ˓ VmBS~C]#.՚+?'HScVk. —2T]U6 K xގ u2sFbktm JQmZ׾9VץTɩyPOe =e14'RR-5~J=L>2CrwZY* @r9u͌ܓsgյk9jPFTFF_} hЕŃ)'o5! A5T#̗GHg!0%}Ҹp6['HX)*l tىtK>DQ]T(3'._2_OR4"cC?iJSe/~^SkczT%Miq*2 l>Yk%KtR!0z^,e 7· A-2˜te)}L~tr%H/yɖӰ:|ma'kVЬ`Lٓ'y;FA+}BUmGn ~w(#lXXy</Q`7-X*M#T:Q0 @Q[A{Zfkdbzvu?0<nSqpUMY(,"0 ^K`#&aqM}GTʍ  V_puϴ]/.횋0Ld&n QXU\ۃ8bC8=]oH5HEOX{vS ۈ#G!u3E ȂDþR,d$@, R/΍ϖuE.?(ґL=~oW zܻ/q@gH 4 E|JMy Ԉ T@it&1 ')kL|1Gb]BQf*#t6CiO^5qCn ?cn’yAyMEaɇ9oNZq gjM_3678--KGvX+a[ׯ#vQb~F?xUa`uې9n1ƿ' ~/WqesԯB!8֟AuTb3e bdeb@lk>A70!->YkE#.o @(E5ڑjnl9rݱ. D܂5Bw׳@hƬ1_9euMsk4 ;u;2k4&购ݙ)Z"DYl׀) 6_ DMTsӖ7Uu[Q[-Q|H?C#yn*HK)'߁d"S!`~}4=ӟ ?,Tc\#_i(< 5ob |`4Z  KU&<1ePHr CDEA92[#Nyy-xZw:\sRo!.HB oJHb8B捣7YyU<=vQD0YvÍa^bO{[f>Txُv&mm^63 b5'ݿ~)4ɡJgQ%Nvsgvp yeg2 2BxL9IE1?V-#C?,`l!9 ;aAEPҖi1OxΒnQWI\W"l$ivkg8?|/R6 MYr߬W h+?ߴ5, 0?@t/([(WwYBZ/6QbA%y\O;Wh G~L68>A4Jp| w.fL_ YH[,2'Fe갘1mFQ5q%j=ܒWƔ( Erl$R;I20|;/! whvv?mX>r,!%~ɏ)W%U$^%PxJ!X`V4(<].|uCOu{ڧ¤IR<ѸzFtlLa|{? =Yj6zn(, / ^\mYpV'7 SIylX, VH+|a~J%%xOމps7v?Ϟ]Gm?ӣD=CŖnj xgKaۡ#G8>=Hbi@5'sղ你>FEW)zpFl1REͼ| (AsP if8Oȶm?ۜW Zݵ =9K5~_ñTAd ;G$& fBal*Q0wV;?yzSkgZMp}jUkŊ>wO[TTW}J'^Z;3w鮞GWb[?^2Ϝw1ԹC>zE l>uΜ68O욱vMm~[ss*T'Kbnﻰ`~JG"bfnw7hOvY1.TaqK+][,8rq2{OÄ|C mg 'F؈(Gi7yrvd&N6Df_-!KNUGv~K}wBB>M5Oc]C74buc]յܞT*Y=q=9at]5'Ҫ+4{律@f] _Rڢ)"Ԩ٥w7D>"T(F)%OwA^HٽX-D-\PosL+*Y`悿c#1)iFh$c<2Y|zh>)w1`؀"sdfv:!._ޡ#b(Kc1`tgJom7wO6D^Aou}%кuCY_d1^|ׇm xa} S|XH$.,-)k:[0Th7zX,)95mظ[\P!Wd|nj&DC:4XG[F*pXiPOZgPVxZf*S 6cowjSf8__;Av'ok/m%i hd*x5Fd2΀Hht* 횉dml{wCJaWHÚa/b8ɋpZcGnTXc]'3/T!'i+pMm(;D Ѝ .ged%qESSWw=,g|3W "=}U.+_ otzҵfA_wkm|3贆p_f?swC˾~&ի9=3V^+1!d7 O>kPFA-m̔gR8[nC t\_c E@t|p (%1c݄cAσKO`m~x2.@1tдIC.Ϣg-"j8%d!n?O|ۍ2@M;sH*ΐ?tU"KCNJ> MIH=Iib~6>N>s'C󇇃zK1!1`f2z`>:=Q1%yYI? 94:;?!J-_Zj}wneI#+jѠ 9 W~6% 9}82C6-&//EI!d>;? ïilfsPJUNV8|l W 6uKJ :%JAe”Wi+i86_ceCp@X_Whψ࿧gSϵƒ:} >x.5F G,R!&mlL4d\;ښˣC:V@8stN %b:O tib`%_xxe`ZsS\-[mϽF~`Z7.| hA@ݏ!t7-3?$wl/_L1z D{x4"9_3<3Qf"\yg<+T$u 4OFp?5ώ1?+m?D-e,{/=~"OpD!{dBJT Nꋌ{(lDlǿ~'&Voxj&/q\Gp7\p˔, *X vҼUO܁='N[JqXi^o>(%ïmwykUG/iC ]>^ n~ϳ+ %9x== 1қKX(4EKU-ߩQe5*wO&J'k֍ưf] }bƂazP d_|g,21/xc<1q:7k 10F`"4Ck'ƻpկQґY $O<0pkZ9<xs^[Q{ڟK#צ756F5VXڄgxñMxh# kٚ6)wѢԆl21--V(R,j՞$/Lmp5Kʓ e41V0q&*M.|_5"3؜ ʶ߭}5c2UdSUzyB.Zt?39"΢d T@2 wl0UnK- Ĕ4Ǻ* Ԫ[޾E'{#ZW~eij6(|jS CbʣQiDwA;Zycw{Y;4{(^C)!P>)A~'2o~m#'zף^sm88,T:`{2p٠"פ% ؃|^z;3&c~A'{zUkDWNG \>6VvH-xfn{p^s *"+< M0_RU\hʨY啡זD`QHx W1MڙJhÙ&T0wW?I`e ՚ê(r/^4h ,?4؉y *X5WsT|CLOz8OxOl`x1y/}Ag!m,̜4\jv.zh.z83sYۖC10ֈ~DFAvz_ 琏dEm&YR B^f1SN̙7^ЃI&vpd> J5w 9×<3ʩJ1""%~ke6Q`z04衏ޢr,]ؾ 3jkYKC8/I8/ J Baڡ™ OPM@ QKF~tGɿI7J%n&k Kp6el>1ǢsT$61VQc”l5_\ܠvbK 2U&%sA=9Y-8xuo7cogΖE+6 /v'w$oSv>c"_PPl4ľBBȕ`CW^4~DKlʋ0z^v ol|rϘ}xE$s_V%d%.\ {B[r @`6]4h{ jg;NCP'g)uhj*AAc_z `'(K뭩(yA(5g+ =CoWWaEn3~p_cP*b.;Di _Ay25k[Si0Y教&zB>ǕqO;yP|9tQSʋ/&KWm^#\ZOi`/Ճ/lӶS۠W`Ȉr7*6Y<=K(?žb=yS͹9EEn^Xy dm#mu `d%Tm]:5 8Ss`ƕ5Hw5œ|tKlKn|eVfZ^ߖqȚV(sg(~Y{ jo["NORg&sX xZ:Ag Y @kV$A6rg_c"VLے3*ņE?"qU}U.,dƗekݺ/ʔCLz&BrBv4qġEs&DO^o?gnVx!"'c0,@K!%& -k;óng7ߎCO j-Xm@&gSN|LCkimɖ #M,ӣV?)+By(r>xaYǎ +3fod&-5ү>R d4 r~X"AJXaY`#wPC&e3XP([7c[bnec>CwRv, fR,Ccc,a1M5 ̭˘zϒW ?ՏݝKƃ@L:=*t-IDS$+);>{*npxG/^iv.\W]h4sQ~etg][A#߿}xNg\e'Q\n5um 4?]d)ɏ.¶I{35fCM a҉!A@ egXf;uhRD)H-LyۘcVrr.…+A<% W]V|h@1D1N0V>46=Vo-z(G{נ>>hӤ689`{y& jESs(dP({70~7#(isfXOwN㧽Nh<;Y/KچF Fo2ӈ_1$nQ_G3Lhe2`3J+EU[IksZOW\^X}Kޑͮc55뛓r_~ƅ\hKS׾clyWV%7;Y}k)%RK?._S#iaehÛoU3/riOwHSdu_3tTgZ"Ý"IU$ƈY _}ww_$gޞчE}φ_339A<|Ijc47R8б3_V60V C롡7T ^h%Ba(GH?~N'{B pk]&/:}Upn,\1OW&?!/& 41QthP>ͅ);]=vJљ\ OOws=$M]qj.Ԭ>Ӛ9Ԃn9^·z}|{}]7xa \;ȓP/pm) Tl0n)&Yp24T3smϞVܞP2, *꿰`^[)ǒ=%P (Vx }t9_oUYg[Fj/nKlϏ[ne9]RDN%9 1sgyc:PAV&%#ˆcGF D4Zj@U}}}:E]#0ğenw|LJ'N}C^rɡq˯iEF ^_[wWWN5jOWG:WoC ?3(L/PPQ4~Re]KqdN|z`@~=uSwQ&S p<wǯw}SX Y;͡ o솂mw7!AKJ:9l󧓋(Ag-qePc6'ֆah;7͒M,j_s ?PڝZM _Y{C[*+-Od9as_;oZc)_05lt UO5AYc TQ_<7J&_j%yU yez_rV\5i_Zk3wh#mkc<0۸ߕ0wHKNk3Ju"~D4 C*?N 3[9̊2Ϋ_yө :=svu2HlMO-˗}/Zl2>4$s*5j*7T,ϕG+.$ڶUp_TF8OꜨFN'vb NeP_WՐ8Ő੫Pdkú1Rى=4s-0-͸f)T cmJf8ѻK[̌Zk[Xr{Z7f'C֞:3dSM<]bmRV'}#J$ 1M+:q  =<ĜAY.Ha}D/](HU$yCmGLvhnj꜃mrOb%m^=v5=1ѦvU#9T^\+96# F6A 6_mrP:}?cYTE5Ү GڵԮS)*2̘@䉣kBGԮ8߬2373װkJ##&eݷ|e\fßy|1D` BZmĘ^ڼS;xc[iNFFNsqR+O?_U\\W:4>ga՛cO(Yya9(cU:,4HYUW*Eҝj0[P H0 ;GQN#ILz@P)㢥8a5hJ0JFo4x^'88*}:^5=hYL Y4"=SBPu_!"h(Y9\.g=[_A#18j9g;%눽WI^!)!Yc6VhEmP[ ]#`c+{^Kʝw~pez83S8q;q;a`<Ύg&8A8ɍ&' T[ݯ8ULzƱ9Lw;qv 7JS&ȃhc&' ҧlod 9㰤pVJ.qt.WyRwy<<|ճdaK~G )&'P"c5N_skJҋ "=*a$ٲ%EdْdYq:S餐F'J- HB BQb=}Ksw/`Ioμٝ}3JVw,64FT{m£3c ­xD$sXx|uXx,gXx2xXx< h/5Yͱ VH_G/Jpw2upN'K=~D;wgΝt\^,EƿAOMYe)*-(_[n7崨 ࡝@<(@E)/^jOj\<&~4&FU46 ioj_zv7oS#O~uR'FL=30Cf@sK#k燨Ł:q20@#Ow%@Izl]!2)^裌9ًN3+`p$\t*:(Em:/XhKl_R!!פ4WTZTZys^Y8̕oߐ4n~ur~Mcdͻcƴ+<6{WP.#qbˇr􏲃JXON뫄tLom\j#~=ۘW;pj)"ژ1#LESw\twcn[(S\h|ZnUʭQKq[Zimk&5gm--:#;{ֺanss_qeߎ딄o.*,YܜҼtqKֈ☘”˜10\dzE%KSE))E8]дqBJʄM-}SR&O ˙X\4!+44kXf6Z6ႛZ'eeO*. Gz=n p2c9ZN 暈e~Oe ETQp[=։[mO1J¥REm /2S72;F)vֆi}9TE^K2QzL:_GR~*/f$e2Hwy:$.GX$+>xߋHiKS-$!*6mVn]_gN+SrZb‚JSR/mRO&[Z]3&#%tqeahŊa<@g /6wf"ZRRZPbHR5_βH/͐T$ȏK̓$d/x_LIH296˕ǛO,qS" eM9<.|li[ZZҲmpӪBqlX5da c+;33UWN쬌u%%%K0n~ ΄ݐ@P%w躚\了\8O~S,do;^ 6Q&n5^3i^ҳ=ʂYi&'S"&%Ce<X똀o52!U^,&o_+2^$ꛀNob*j}8).mRExHp1U0ŎZm\ƹtp&j9.]wSPZ~=0S)i'}1ὁO"S ̞L#$يNŦ;KfoKfP*׫"38nn3;A5>:#LׁV%c{9'3rsx{o{XHTK_@ƧCʫ wo[l^r;2E]xdkqa]'agLCsvK#i6~\$e)=,iP:]cBjio[R%?ޑi?j?ܖPiv8zk|A)<43=.5N,qXPw;g !qXQ[*Ik0~T,So'N<>8)A}S=LguaQϲIq5}H%/| e U_E D VwM|Tچ.~ARAE/\rz%q+}o)n\y f~=I=l?  2e5ɚpL[ޑ*)H5 TגtRvuwZX. J+M6FG[ƒ`i6Ro-6ĂAĈ@r|M߯מq?A栓?3hl'gb]kLN&OpG;vX~ X .\.v7?i*M$T=ovjL׀Ï" &q';sx}zQ7+H7=mR 1!2:2XKMd Vi`DrdNSWIBdv&4ﴋjx=zA^+;7g'7'7}&nK^2j4PG  ?2Dy( ,Qz"PAu065A݃0V%t*v Tn QlPxQ'7'@f0?L+<É&:d٢3\ݔ3 ̝%JH=&X3h5}}t rMA3yP]5= &ɻdA F=$a†|u;9RBm&d K4)_Z[~vpP]ߘD~cs蘅Jr`ˌW4U-gɑL=ʴd䌰#ph*2Ӓ3TM"5o SmrwNu7VLp|f /rml0 ix-;:H]{{_ ?/} O4& .…BQXV3FkjX)Ta&H4c WOAEo3m6VfD8'?1C-GQuE FgbF Pױ۠0HFru fXĭW+V8ǐVՉ:$S`BѬ*;T$5ᡵ5aڂt&\A`k5ÞX[P. -BoYVR10]Rs-^]r׽$]40>;?$"FfJ d%TK&SJ쌲4pa4a䀴ʰHD"k aNʠ *Jf&ʴB+,R LʑT*[IZlMv4RMKR%i{7̃+o-?fDMK02'B,) i*'*08 DcTpRX[1VAnQ|,jlj(*,1D+f2Y`'ΕM0Fht4%@*"Μ?bU Z̵` HL1èuҬ4 2׋c6  ^$Z7-"Pr].|ݡXo߾-oώ,eZ,fn[a#_f o %G~zCj[oN9wٹ3sq8'cD 'TGL&U+Zpz`IAI,.#cOP]ZfÎ W|m1dT_pLiX]p +_JTrMpڼ_+y̝Iby  3QZ*\kK GAaUudc %ʈxSq (߂KJm$Ha^TQ9&!3*Iv4)M u"!Q=)ٱU s 2~75U`%i2@a) 1}"-I"dVVgIik+m*ȼk^%V^AtO'bdpD$l&t |tjqԢ׬jYUW'v ' (df5$‘!o D yg~[S  By}GEGL.-SvGQJ[߱vkY!\)Ť$s.]ߚo_\6r+=aI*M - 1à+W'g=+}Ҳ||YTPb~~E d~cAD+D dhN9ȪZI36`ךc"+ZP"ϛBl3ATSW?jgg?}\gfw?5S;s$؏f+`Ww7gQ%E{in[/tаlg3TOftDK\/`Fw@_Xl&#0))hѤ_XuK(YiV1NJ\uFF:76SU+NFNJvlg =m (r~1Sf3Y<fN`rk>pk.^5޽s*o˃7?ɦ7gb|ƲkOR]%uz!Ăo/s?9*j+|; P&J;#m3vܪJ&88:t_y;2۾q\_C Κsu E_'1ޜ^FYKyn?3l_I8&t-e~lڀn&FL6 <0{3nǸ[z gO.Uv9X&9՘9no\p*S^kFakNb@U< VӺҨն2rDQa0eiNGZ.*SjR!MX}!]uٹlZYn]Y`xǗXۗ/iO0)C`VM|$eNΨӀ&(kXVŔ#u m髞qrU<ȽDPPtR&-x٘>wMpҡD} iɉzLj(O-mhfmu ;)fN('ͺ,< o(/8#H{iLL`Ĕ#Wk]ٵfm4Fmw].߶ZuU";9hSvk)RrϘfm\):'VKT褉eUK%f>nS]KrZ:V"+ړWSgɮ>o* 'KqY^Nj<:rVAƱyzPxdP >NdUKn̼J} [CY.C.7fX0k k~BN"&-Y3CiB5Z[Q\tN.|`]"#{`F|-V'ŗHJYW:,44/]iU1Y1NkQԊ{Fl^m蜶y I,sP68>W@MEAQ^$$Roԁ>^A|s+3_=o1[uwIiQ1 Ya0g%E_( - [MpZDSꔪZ-gpzІ_D4xRIhϭWT>#Earv\GSgNafAh2T:_+Zag6)IXK {/l!Q]PoL s0eh+`oXJNflu(}[J]&~"3Y2;>φ*Nܬ3^Hx'*g|7k^*wgHfn؁YKf=9N=P[c6z\eԛIt'ڣ %%ʒk̢$V+ o7xCt/ת]C*Jx9xك!o", 5/,yZgGͻ``Ʌ[$}#N >ilQ/dX4/ȩ;rGN i-^ x4 f0 ^3m 7$Pa ҕp^XRq97#US {’ѹ)'.W:H#~,߀1{.]Bû1M͵"VK#f*;,plYɿ.-'﮵#77OkgJ sZ+vƆ#+Wr*YT{9mHʒT7*x}t|pxlx|!W%=WDCt6YEIi#U- 5u{Js&8._Iet(kf6*6JuU\vtЖYA#U  Z S`Qٍm`P,l`v vf# bp Ăq0+fCP.ht V vYj 3&ո(]Aצ}zJN{auZ~AjCn{΀+WL-(H]ei6UinNopyHwãZּ(aU/Wkݡ6_Xv)A.4 v $5/H)A#!-H(-eft ttȌDilrxHY2uAdd9NQtF ~ԈTSaGO /őDY&A" G'{zpYO& bibFvB4G6G[ SfgJAA$TERh 2q-#QQ`~ hZI Mfl5$G3P$f Pɹ 2} ! HA݊Kє/2PFarfDNɁq!HPHvEH d b"&a&hbF,yD.+[g+sy90Iƴ0Yy9I`SaJb*:%Iq_~P N(Rf?p_0"0C<3 A6G/AJ5&+NɝD@.RmbQE~U|]URBԠ&yE 06.kW%(Ūꄙ2,>Q(Jn_D̒kKQ[#xӭ/R4 cjf9Jbuxb. ۍjoCWW.|S 2L%Knt3D8G߇p:ul0 gZc Z˖2igǦFԦើ <Mii76+٧iuoaK{gs^*<$hԊL$XήdM`x줼GmɃ)MI>[%GŸJy?:u#U R>0oN3G/uC$yE5`SwƇ⃵AA欎2KRü9ގIX"T ^LÚ&Xxn7ŒPW0^ ?IM/f' 4*2 w]=c5H>yj4f\lQ!T*lA?LF%w)]szs7^ËDuiFۏso& rxbF5reG ^A|<kQJF7We$$zRRZ5ĭ/uKv3Ͻѵm{낽qT^膾F㲹F;1s8>Qzג(ޚQȶ/r!#tkMIL& nY3N$e4>bIד[:$}J*9χeGڴfE>"Ơlp뱐({ԟ+ݘOoܕͼʝ\>EF2 HIvqD~% W#5UNnYe7 T%H;yTݯ>^i֬ K.MeDhAI"7C\C* M uy&I֓xo'g[_;O` ᳬ;$ݴă\B):NPnrkfLړCpBSђ|[xdV&c_ \o5;F "ͳퟋUI-x nC1\Kqu\|79X^6Z̃ =Q'ZDp€kb Z+Y5]7EMeO"TkDTeC5~ ED%>0Atl2 |2 C)\*3Im@|FĠqgo"_82 Ϯ·!){j`ݽd Z<t޿Q( } !2%xA2dJC)M8wpP&Q2@(e;BT" > f@"RSl\5x=[xw#͑N\h &XeڝF%8sbQtDz>)2#TR$-B-f^~ X8ރNo ywIoݷ̇9MK/U]P:\K6qY_Y/ -?(ӷC;ñVN8 ʀc\ORa۷ɉx|Udk ?E #:D-'tN_\ ]䟛/Y4v߈O x&ou0T_oLG{ZT׿1˟PE* Ӫ? }6BmHN07c杷mlEkbj5+fM?.\qõw#5qf0ә&3Gx(9om6jj\)'ܱ8o ;p\#SwΏ?ܿO><|XW ɋha|>\'?\, t?KʐpWC%+>k|K:?:tj߾*llwƝi

\y8Š{F5{~#G4P?_}:2 'Nm&%_n_:J"}ڤZ PwlD B7ɒ\w-WNN~2d'?23 IjA[(2zRvO#Kx v4Y-o0?_"LYPnD(>IzBz+|yk)0_|PL6;bC6z/^4ygrpz?=ڡi6籱uӤxh/cqzdocV6q<}rI]{x_/iwElyXe{-wFwWbwO{`[<Ӎ}bA*礎94p8$u;Qƭ{rqFWZh-7!ھs=@)&:oֶq N(Q&5eM)3ѫ sBh0C|Ip%m{9]t [[@\}wW=01 Gp}rj3 >m1咏>Vݘ z0=.vP׏P?Pw31s˶ͻӬMtf꾅u͝BϬAL cJ)dý2E4;ȧ7GOݺIHҲ od|&. Ԟ덒;N7Id?5.VRYYfLܼkI3B|؃kZ4T#GB$89jZev؁Sp b*Iak7^7g, ~0V2@$Q[bDA 9F*qv2_?M5ppv%-f<]ɔ1|g!t&tN8Nlw}|| _F>/CBr~0[$̸ͯa<@A2UÖ9YL* Ari)*/S*9!2Q|ɤI9̢a˜|+E<(ž?Y`c>% ?(~[ii,*.Z|vCEņXߍho*8pL猧}yzFK۔2-NkP3Rݵڰc~68cr {o? /̝{^s7$1:K(@#&F J177˝>70B)GпǎW\//"!&aɰ,V9 ߩk UC"F:I%?v UؔҐeyebI->(\LP;B`$\S=fߞ=jWǀ~${[WY>{fUI[&(FUj$xNҪ 7?n[u V&GAZ__BVEI  VD4>ܚ:%FǮ" tk2R4Ny/YVء1PgU5eF+jVC͘>1m"10"t|GUXko)k At7 2|u֗f05.:CKjȅ/g>#NѮumEֱ/y,; WE$a'x =@9).oՌ4'~%G=Smqܹ5z`43.<%L\X%՚?.&(a2ChVCFmJ Ῡ`9!Ni۪!`AH&Jڐm-)@pu;-lIva5n- 1v\;j aKx)إ0!Xs!!G>g 9J㽠p9Y]JhfCHa_%LjF"ZI)ӌeb:Y@) RBfHC@SMQp]&[2ۓI r8e0D&v:('/Fnxiqjl5Hp?_? %F8.v0m0]3HaDp{ۙ_f#v?|};RY?Ù |_!cʰ'_L A D5{>>8!㈏P<>DSrz2 vCz "d8aLxZybBUq VD+l EyXg㎩l7-x$CXN3b'r;En=Pn*6*vZ,_頃no2 m̽ \_ћwp=I W?v&&XNu?H!׏}#,;8}4 h~ 9ߞ#\f 72䕐sÝ8Iա4ΘUW)ʅ!Hu|Br_o3vj czR.u*D0Kdk\x s/@撐`P5&O 5Te7,|(omldȬMOupkd$tHBW)%v|@k=;=|J}#w]mSp+H膢\;遱澕{[{T'RA/,<入rBa=%{=ѧ-x%K{ +`VyaB!e{ kp"qڅ&6V{X$Gnw!x ;\v'!Y/0MMw [/ ޜ罰쿙 ?a$H`/xaoy, ^; y^X!} W ygS}0B6s2.+w}{&GsOw qd>`.r ց*OAm fN[wqݏ`Mj_G7~H9ܻz(s[)=y2`vz[<ߎ{LgXPdr] v7MM4}sP>ɞ W@H }!nNQ84XIg`KF_.<‹}ZN}(c°8SCg_ X"yNNSF,+>pEbwtC>sts 3aL`"!v)yE/a! OX=be"S cD45qyqb \ "ƥpAC:qFͤNL*պ9XJ9{Y E6c92,Ee^~!hU@vj`Zt9iH}IUu8Oh-ÿp'iyچ`۹ᑧ [8̃pP<$xZqx= ¨kަ#}k%#fҕ|' /[6y:󩮻|j6!'yu:"BM)52 ?1ZF.0;Wh?e~4m#yx uHlX)i9[0l~&/0'QorM$1V7erV ?Oo9@QLT#FLlxX,lSMFso'5vh?ץۉQ TDRp;q4n³~4vr i'B1or? E ٓk%ǜ#F"χ"+o`<7 Xrt' qc^fv@@C?BlG#=c{p.BJ-mϤkڞ5=lϿV|*fd8O(= &-2 bx\}GZ+?!d ;y~V(!Z:>Kr:S4cs<52^s4~4fNG\oفX|%h^B14&LHME :g( Bu!zz~ ȾpUo|>6p}ͩ_/ >>F=)OK,vb< J(]c 8m'5Id<T,Y#98kD&?Dd0xA>:F9  cYK 9sĭ%c{ g\i`.Ξ2Bz [FL=]16 l0=-~!Si^Cϡءء7wO꼦,g& k`+:5 ޶ ,Gk=Vr R C+A~&'k꿕 {E?e/p|\΃C}M?#4x3c09>˓3ݗ} ]%pC?={ 2sD9o֔͢@X!{]@ǀ B Q 3@ȏp}'u,ke@49!›4Țs Isl$3ɴLI23=$H(!@BA@4jBA\ յ꺻(!{oޛoWM{ιsz7>ςB52 ,|_Uj-4y~!Xc8ޟeSp?!֟zZ0VC˅? PCn@Z IMt 7H<[_\qv0qC]գ/ o zt6ݍ'mSʥ΅t;ҿk$T iAkzTVU%_ kv،8\INeо;B>}'W_3K! 5l$D_r/4D_CpYLC5cHh}Lk}A۩ȷ? *ȷK}͗}w^#׻ #M*ׄq\h҂A- ׌kFs5;46DD_Ӄ_cDk:>#5,;A5*p鯧Rl.q[*mFjxwsMchhl7)ϹS+Fa~Ճ/D0 %KT~҈&ׁkqLCգo1rO(m5dF`-!})Y"Z x~v@cŸ[}46r|s͠l5^UO\> .l5u60 n P A~=K< @s"|nٔs#N){Rnx{RK,Lޜ^49Jل-R3Kɬ:P|N+A9W-;jxVEpK|{Mnπ:+LI'!ϨeuPO@w$pv,wM?9ٻ#G?I<%&No΁e0E.&p~!ݵFW޼ڕ{l_Ͻß6;|TSw} (-wzQt^!H;>>;ڠpk9{}tr5N1m>?s~s{GMm>-E.>`Uܧru8NmGdp9T.lΡqj,j/1# F`> ÊYM-6=9 @4?CKw(># O!^('-̏?d6~ uR^NIXuFjQjЦ U<9z./ǙVc y%!DDG,k,?^]$6Owt8>30?c&+.=0tg-3վG-Wm@1x}bl;j|۔)Ж;-ß܅zE%WR۫AN%9N7f5`| 9|#YB1:nކIm֛}SP+fV&3 J ,Ĝc A&:x# iB d'NTmm3oN?^K~1ٌcui;ivDIDFG1Ä<9ķ'AygŸ Bs77A"n:$O]:qMKg_ƙHL(=",xC==mr偋 F#ՇW" B?jGE?/u2z~o2\'p!L7 U>O<"~ Q,=.dq]voh{eQFFe|-J$PT7H6Û ;Dդz-aH3kFDmΠ#sr+)>.}ՕGQ5$fY0xC2GEǙRZne .EOMH H H?Ey]DA龑u7P~}@Sr(Cͷ?_pؾvUHH~}+gXg~ć^)4[?Y34Vq"pk: [Iy/VQz&-n3=>Ig\κ6= sY⛧.r#1=+@1Ai;zfI=Zqn5EOԍ-]vS{qҷLa W$*!  &P$^XA7yYR @uu%NأN1~c]8.KqO}j|d\s1+$~BLjy@9>QF]9"h igv݃ceO3#cOģ|61΀9 @<ΰ}:l f}CːeD2M[߬M+I4(Dm3 {(iF#D]Nvaof# SG d!]̻xxtqUM0q*ĕ%̮n"팽{?~K?`/*i-8K}Ϥ8{oGmD)s8P8 xwYG{ E(Wq?mi}޼ʾ쪒_&rinQj4(I??i⎋LsNOmٸ$AE( 1W!R #OD p&_=TCm`AFzwzja'c`%ŞT&:)~%nuJvòEmб;K|.y\.1"$<#RݪEGR>:uێˉcCvۅNW(aouPQ/ύ: \'5GA^mf.9G}G 8`xo'$ݵ9Z伾3{;GWkmsn=-$zq*>lE"R 2sv~"q!=E{فޅLb$◂%UU}M33j*NeXn]?C5B瓎iQ5^xw 1~N9Wu<3x(b?*I1'3.p;cX9{a\ǯǢpsW)#'pK^8._%OTQ}K usЗy7$yID |qMϐ{_E+/`?َq_p0S)O NeNe8o&\3"^K/N%+%+ЯR2t+IF=`\EOzc}Hk7tя|91\U Ho@[}#c}(U%Հ ?c] 5S?? ܂ϯ ʢ8$ lnvHg"Ə)}:G/Al v/E @o'xy'z`THEf~A^⿳bN A;Gq^Ix /C8'z/a89/'8txC<WxV^5\}8@?cx ̞r=(%azTHkĢ;^`0d c ڊu(=CQMQQ7Q|TܼƘrLp.'aS$HHْLa'C~'M߿Z]K|LAK'A/ 7joҫS^~iyFSNCޏM\P6w.tV*!qy۵9?8gڠg/NǧuB%/(C$g$n'|MX8@khA\p܆"8jK[E߱tz5*hv@v'&pV?~E^&Bڛ=L. i0;1%\,[uliL`KJԟ;Ș;ӁŌ  %QC4ř VNAk7غҫJr|¶k]bKbyVD^밝{";x8TI\,J/oo"~,Dqml|^($8ZIMD8ܞdMw=GQjct:5]MH FV`*q'bYID<6 a ,=B70)Z8B;Tq#zܷ'&?*m"~ 41)~Iğ{DI)gex?pFp6ILIpďh7.b7A|IvB5N~_ 4HCXrDz庆WC_7"(eɌh6GRJƧzRvrܳ 4QL+z(Ef}27N+ȚNz+_}GνHqj)=5-~6wBhI}}p{9-~=*Sj/~Ö7DcBn\^i x:0~T+C?G~t .'j45a貑9k^^UV:3Ɔ;'j>tG~$b }>rY8$<2>\矗ps?w)C `6l\"xH"GD|4IVU3@64"5]i7@߲p9B}||(RMn^)p4Ѵ\auNp(X7(<5/X^s' s<rs+ 8Wȏq1"1>|+ }|Kewp|'/I ncs!fĿ9q}5CKߕOރ(s-f!iRS^IKV,TYcO:#iiVʶۖVY9ᙋ^Ϝ띙NWAe9aGOxxqo<99-ٜVY?,=tĊ-nlh+-F)8.ޤZ.g7Iu֋=s~:"}'×Yu떼mj9ަc]<}1+̏W4̏- su?sQ0[I,Wr z_o3{3@esNnZ'w7r H7 y-\D_o,eN\Ht ۉR؎*O,~ETgWdׯ|f{5]?ڂ2&@4~//2|?)q?Ə?K8VǕqXixr$]ߑuBVGV~%IkieQt1Dt|p\ROp\(TnEo} _w6z$wZΖAI@Y5k5jԮwnmV+y^ Zq[ *yYw2x\<-yk)IPm6257$~TDďc%RL~=$qU?c~2Ÿ3qJ&JY"eg 2]ZljnZíXMNI nV$EK1:+7N=oQQ:U"cgP?*m"~?'qL?PnYչJ@uݡH7&122D$SJz}UTr p wD,Kvo|>c\|K}I=b'ecDHܫsΖ{:/>}9o9N6.'t30QGx gzc>z3ojGZ\Pk5[)$MO(>1"~^χC7oRi#4LY`zv$]ٸ%:Aܼ'DYDŽ,6y~pֆxA8,(BmiH:Zxÿ>䒣 r]j<|՘Aq jSF˰6liF[c"5ߌg2*R Ɣdjֲ{lmfGuMUsFxA7tu`YEy׊vDOF?-E Xğ#Uz aQa=_RY&r5rC6n#1z!5M3Y,/7r&_#>>[Rm m!lPEhh {1.wrACTUFP):WH./Mlרh%WNnS;0Gα΃[Moz}G#ƞ݊5_YC PLz^*7'xef&$fZYI~{@/639&&9_)׿HrU'O'%ǜ_,;.u3#C.ihPƳ"=0L'͠*ZZČ.o3x\urȓP%ׂ4ٻ"j֦sߎa*%_itf_1P",ݦsjс)NR4'cGV4QgG"Vz9BœW>k|pkQWfƇ|k= g-q59dηF9Ȼ6=cpWSdyQZB@U8Ex|< |VH~}߰q|9 v.-Qآ!WEۼ똼3UG |)7tYT6۰Y+Ӛ9pn9/kdkJƌVLS4㼅5l7Z8)y+˅rP/}H_G"|B~,|b?Ǎ\;ƣй} a$rs8zJX*%u7{]\7cSK&MoF26R)N[Ё clո{i[3`kǴz"7K,a.G:pŞ>IB}1aޫ/r tG}RϬHh@*K(q$U)ߍ9W+U 3hs_ .5Ax%"-^J:p˦AnĐ!hjGהoA%QQ?)͐E&9)Y#D.sicN/@F뎘mWd2jlf!>6n7o v1n?,a= QaIs"6z)kE:X~̽Jo/}b-\zY:3 \`|o!yy}j kH%nË 3f;5gyԨԭ@QY d,~umkk%ϙm?N؟kJ%Kx_d C> P E~˳ ="@Br Fg ^T,.wVe=egqgX厮7@lr@):x<6RWc68oکchք:ʎ6YjYdoCTaf^R;H.$<5pr>-U?~7]>7kᬤw/ _aw/2?A?Ah,8I`IYDa}(ܡL:JsNεXxt~Z]^jj{{G;U r|5FQS`77t7tr3^dž"uٟD.?\y;\((20Bm_i䥩NQ;9n^AR.zm!|1TN?`f |)xW 6n*}Ua @#`%vrPձ6Qf2ՔP'a,q] #uJdN3SxݳNBW`w UhBRˢl.>1ZA[b?Ymw+nGqC@z\٤*Ƚ ɲTw.R0oy!>f**;AY8˧nҧ6YٶdŒ'yFτ!%юʧm0?Z׉sxR"JUܠge-ipDZog0ZSRKѨ'4O*?=ԫܒ~\ ) :sWIЎMRw"ME o7 kYw0 n_Dٙ*8Zed"X7ݴV=OGcsoT[ 1YU#iNu4.yjiS֕DEAl|uZgzmSۯVL?ꦴtc[<멵zJ\Dܝ$&((>~6~*=^[1CfAS$Gb)g;Ǘ.(+n^ޠ;|y 7*$lq/(UYGNJ6YwL淣;ΐa7a]vTR,-#\AIDZ=SAn_7ǚ }@zxAG|Q^8B܄? IW!!$vG͔xqo/-?֯z,sml4*?h=w.P<,\#u55PGwșܺR&h{<@ۻQVt9u{n6>= -$xm3lxgj/W10Wi3u:B)qlyBG]AhWC;vŜ 8JEScPSAM[jJtuO9PheTp  6 NMď+ʗpg<ˏoNjHFE w ito$!?v+\_m;0k:[;uBԔMxAm@'k7-ؖTa~ļ'VR,#isEs{ǤrYb-{f+T.2lJUȓʞ4W](+ufuiIXS b `->op!#-'-jM?ggqD꘏ kz7^+%Mh<׍x2o㨋THpKjRgA|wl:na7wڢ<[V x gE^;y^oKy}8G#ܩ8mS1σv<90/ TД(HNpTKFy}C6^>,ug|vec?^'-j GaCV8o Rѫixv!h2G; ohe(ge2%HLiUGe)gMo>O=?S'Ͷ7jg)7w:xw!pSxVEp&j;cqܽb*,׳+"N\1'?duApD|=X@xz$wx KdȲ؏OKdu-"cCbug$tb%q鸠nx@˧HqHύgwP_܂$ɐ0~->c4uH39a #3}P2ȑ]bꈢ%vspI{翓 u]0/ uBkPvѓµc'9Mm֌^S閕\f8UǖV2y:Q]U_W[p":-m}]u ]o?#Npo:9úzQ^#)оTE;\"KRg-}u5ip+Gܺ枫o=T+lBkBRU˯,\Yі6C[r/p:W2{BGm!ě( &pz A-~4.M5::hM# o;͑|(exS= _LOu|g5W$9[B_q)}^_ߓ8l?6+KKn c^ ~Ѻ/>!;3q|wM/?k{L"'n`gC~8K~Kq{KNIE|+q+[v1бBe gj,x:\D+nʽ:F eq]Az.WTjCP(a-3*k ~P[o"kyWfgQa) 8Ե) g ]_BYPv\_IVCsbwKF1iY")?񧮊NB3<^ ']Xc?+d]Eȯ+&,mFz?lT+uUi4hi뛵hmG_\H_]b.+8q*sN l^(f:9!!I,ij ޽y]3̏/| ?ga)9!:9>>x;g;}xv ;: z=U\Bg!c=v-sP^,KNH.i}԰ef2fLsbҘtWuSf%4yg>I濸:cPXb3F)Y3=kS+GL:J5fА]T~+qjm>i),64\PP^,.hSx%$UqgWŲ&qvjh-Ns5N/3ΊTQWQȦZ 0t %jZ\EFSeҝ* V9 *}aFFuJ2FM|dz.q*ܢDt's KlF+b\?P"c1t/T n6rrTPjA7QTۤixTrsrrssdTwleuKr5IآQEκU#LdWzn<>Ĩcȡ2 ,ʈXLZꋒ"]dZd.@YtcTlfÄ oaV}uivvrm2vi/͝ 6n=<(Ю!QBg=c=>51:njhG!{ 9mh{!Ѣ%./ h'Hօ}/߯4+ijm&)BJCoiZmnܿb㢣jhc7iC,Pl*UrKIVFr=6{ٚȰyE6p3n] EÊ)_Nɲ)}W[t:LY_V hd]*AV]jњi6eYANOd(_y+t4J g:>[CEEe-E7A;[u:v6hDi!z.I9B"#hV c}ɔ!lw uZ!y}zLh!V3!a.鑩UP&O1f⤷ lVMLФU.tUa{N|vIU/qM䥟ZvJB,uTO1P^R07둸d57SarN۽Tcq&;gkvvK߹oA#PH]+>*(?Kh0yiY b:;ѕ7zgBVRYn[Jf9/Lײ̎~hjLkGO2\eQwGO0%R(Fg z;Jv<݃V$; ;8vN-Ô܃`rؖחQt;ضmFKV<,SΛ^|~{2_ 9[,yjv<@+Tu *=5uʩ+0Sb HL6nʹYuvKjoIݰZm+aMe+tO濲$٣[glx77_a?C8~{589/'857_? _ WZ n@ߏ_qA.у?!I+ & 3."NL/s[Cr|-9Jp, ^|0x]! zYprW"^%E:expn$tz HzP\DAߟ{H!C~TL!2d 4=x%s"^ 7p|Wx w'_ qâ!zWnjk;,>1]ԅZ?]{/V{v>Jr}?^oүЛWo|W;_Do~Iz&}rނ?',ߟMz ztԠ4qзk*rBL_2>8ħWVp~41R%'ѫO6YT=62h7i26o6q NW]hQ*\w_oX$qrXe{ۛW𻠾5<1S ^Kωx9Oy~}wtI7 D_B|W|`|W;1(s_xq؆>m?vuEmQ ZmEր˂ld_"d" ?- Wk849/ׅЯ?*a4_kEJ7z>-E C\q0S]ťlLAբTV`>z{{']P7x۟V=zۛњ3g}YH*w'X^ M=xR$OHq.=q*^9"Ka`u ?_Cߝ:N'rP\ER NGn6>@5Tr6؄Ka#̘ -EC>|.i``9;a V^nS*sbc;o˭MK(ɴ-JUP7:yvs xHDr@ nG8)3q!~Kw&%1~&7}/.TE /ab1w9uXx]pGQ%&jdgdU,I T -Oj zciCnDwbCUq}eŤWdҒ O,͈MD+0\;]ߴta$jO" wTBW@gZH&˨^kk4G̯9׍p}zz=ſ3/zzU<% Q #CG@hfuӗN2tDF:L:H &{}ZVCGGۥ<5eDO#('iH ۙ+fjxZS{̏TJn:`2īz-TbRS11zjfbDgM$˥ǩ䣙 ;F[pC/²fg 9$[!uP{38}[ֳ»".4%[ȨQF*#tљ/uv#F-.;rD.UuOqy(5ܰ5ܷ`%,DTQ:~Ld+}וhD(V՚Gi>+#Mjlef4~}k%?,qgbfs!*r}܉ƗیexrGq\g| ݉/w$Sp9Csޖę7B~n;s_x/8ԱC M!~!1p_`p6l'jjZtb2M )#{i{;Ъ47U/4دU/so*[i!-wTF9Y8V@(#&aPAb,='zj&uK]o>3j]iGxe\Pj@F+nGnpsY3m$/8S_{+zS^|rŹԒ\\ܜgYlY4&gZP,klv } =f%IYg6g WT@ W/8xԭ 'N>qar%ep3L4 'q)cU)$9.li!yjiBtUJvI~A&&Rf {t:Y+V MajhB AfFɪmq*V,vW =BF yִ @h2(fTDS_Dv O닄fm1aBUYlHZkrKOҠ;3y7b\Y'l8ROuZPb'IzV*qS3q!\#  @Le#QzI}oHPyKt7+ҙ|o~ q#OmBj:[p!ϝ [T.;:=ZHe1IٍP)~a'wME NB6@y|_;Xp.{y"LDi+1P01ep2 ^ΛVSѿ#J\&*bX~+쫗6ypKf/=WA=F3 <'W\/3oi҂\'T_ԔX_И]Vqo3 P8 \7PЂԛrSW-'͙x0,t _7 3 f6/KIu8SS%6W=l-,9 s͸^X@3508)M:  sP|tH{zwJsR/١y =F'B(k6:g2*%N}<p֕eILcp7~Gj lVU*Xۛmm[ۚ mތan(|};Ɏ&{4f5P׳l.`iO*~)X J] qs@ZXZhȋ ҉McM)Ug]99 eMv;3j-迕}j1>W+TCѲЙU{?3{%O6һ q Fu&:W:P)%Yv#r'woSGH] |յͷ̾/$gf23Idf/d%$!h@lT"h TO'vkyU+ Z{dhe={wƏg9yY$2'ڋ:ZpANYtRo,kee .o˳d[zzv0Z8mzg2q6;dEսɎ<$GN}D1 VR"BѣE54`b#Gj>-kN2=q-^nili)\Y6-( pYrJ|rYrdj̗QB 4s)0AL,l{c!gN(8'0s7@6TfI?1W45 nRG&~Kn'oq?y`znaƋ* ɃWa1ٴ2¹f#=ьtyu& JdDt^[Tv/JNjL_$~<)?U7Qhuhƻ*r|0Ne0(D 2$ ee#8:;U-+ t&ˏ"3sB,zELdeۇT y Lj@Qv ==/̛iOH6 Ze9GTTO#\.rxzo3L.g2[Nlf-t76XR~E,gCHlXfZ] S$`^.G%?0,zngN7ЩZ\a,@Y%eV́/`_yںֹ=:fH^'`ՙ7uD!Fwsi[F tyO#'Q X)nnh|?csfESgkh@tGBGH '{أ'w2Tfhǔ0"K~C >7ldD)'9B{a{wpc`\43~Է7.>+pΔ3W_}ӊq~L@="mwo 4:;vz < \c8 (( єh2Q()W\\&ٖMBJ@^YbfKQ!۝L$JdF8Y(DYJ\e1J)'W]Z,ט'x4}YJrFXXվ̦B)1ôHA=}fv֬"XiWgT2y´`dF k MxBbΨ.'ֻ:ϻ&Xm )nvM^f/;<}o zҊi~=lO!-@-`(7`N7vB3R,)e>GK3H2'ؙb5Ŗ+v+{M҂J/Vi)4 1_-lOs IN6kb9mu,ԅP3(rD.y3b8Hx¶-ԑǓzqT.{2,Sx~҇@qp3v8@""ٹa V׼B[r[xQO*:#&"b8Ύᕘ9bÄTߩT0JhgtMacjPhM OK %S.aѸ rBRH#1%`9F!]!S)ٿB*5ByJo䃪su:~vBRY8&7O"< b: 3)~G'~2{t{*hisl mV1NvGW>ݤT7ǤNRHv}!rP݂_$ #(Gd183/%؃I mtފ_@g6ǩgx + ťqVd[J?Y`Ȝ+YݒUzhE}DbM{-r![qyVAy/rVLg} e ОP 99|]=yt0P8^m!Yϯ uziu>l𜥥m:xD#b ,Y`4 ILOOɹcmi^OIaU{V:4mjߟW4sǙF~B;oM@hCJ*J}jEA`-O_ºȁ8r wh,㘀17W Vł^2DAB.sk]+K[rTzqvٙwX?xóC_{Xl0{;fUI]/nZ*9ِw-^~xGw}]N<=mE莊ӛegiTu><5kڵ0T륲l{}=a _~!zo+Zh TAnUdYs+Ӵ%QN{ldM7f~"7H!Wv[:Z=59?@OfFښE3: E;Յxx|k' Kv64oi7>B>6O ؎}u9d)ul+jGmwdCt '?vX?8qЮ7#. ,g HtʬEw5fdXo߳Ǐo{cjg~zminع\ʲ3n_ 0: ޑ:VY/7Z# 3Gx mY{"vAdО>Ŀ)Qz9'M]V6Y \nh+t}%D&)i/wd R62"QAB)x|V $Ҍ.;&iA}J* +WQ)]|gg2|Vm+:{!˅s1],cϞdt!b4Խkh -8ꨱ_H9șd ?,)!*XظI5rwv.>o?]y;j+ڋsyR9ET2zJdH--Y]nWvqyr&ƚggOfzy ٟ\Ύ.]e~ux)LϿw I20U?L,\4I 4^XT4ѸlBZ=E!=|z5>`W-jTdwn@$/J%VIHdb}K%b[w19=o-\R"ߺªĆ*uQ^hT Ϛl +-2v|g*{:M T<^b_hc х*V CZMhdMDXʮx1^ ]h٫{wlU +Em`GmL2NO]xWKXQ_]SdWj5y/}T/ )UU(v{eDs+  %A>w`3w1QB}9B,ybmJwFb:NnOU $݌".V6|+Oc@N'ZB>c^M HRD% tڋHɻ,K$z5e.֥'%jmV84: +I^: 5IEWCfYDGՉ%ӕlUvҩw#x~6n?+rׄ-p/חۂz*F*[?@!&f<~_eH3hra.s;OAgERV[g+Ȳ2h4 _1W"'砿C(?~aD8TIą>),bK'G<=N.Q&ɓ6.{NpXJ M4%bKr/l=5vb?_ 6/smb< _ĺX\k">KLǷP l~$LH޵wn;ݱΣKT1~f]ݕ 8`\*32ǣE}uvFZ }rǗ{R> zE|j{/Q,׫8$K-pW{"ŕCq2Oӥض٣P_c(cF7~-7OM`w|`l)Fc xĽC[KrS"*{h&CfkߤgQD/\S`<_8ER7=y kΠǀ@=&F&F z,Z4Gl 5"GR 64 rrMC:7ڣGz8\9YxjּpOh@] ïn呑Kj% ᶍ/>-lХOn'IiiI>!obmFh7='8fӳqv햮`kK=sv;|cy]݅K̯z/YQѕɭdJ_<y? Dm xc`d``/k߯r2EykxݚyxU5ǿ$ "e,TZ-PEBi -Eq.U(CEeFGEP(Vee ¸"=MNn\u>y$''7y&ye4:?8:{rGqڵ bTkⳍ(t~dv<ahtsA\@?BE (O0c:m>H܃9tv^ Kh"O;)HE-GvD גyQ-a$۔_@\=Bs9×0|5H=4a5p4|XoW@#k ߵFH*@,&[PNXqk{NnNWe 31}r< kfb)D4Y:`oCWtAgbȝuF!6p#&p%XHڈO)HT1&(PfG#ƞvCtfEWk .{#ڞ,+ VK;sd*cg}- /A=bEN"jK1\HXqe&m<$L$l"Y_cҔ' w$)r PTcBwƱ R0-wJ}|,Q.20B,Ah1w+(wF#&)a8rGZL,r^FZweưE:r7mp@s}#шdR?Ωj n+ s1ӜD:e_F@@g3Iq1;λd=zo|/X7 +w b']h>YL\Tr\fɫH&lw؃2{[?'[``jP`mUvTZ0sً2QsZP\`wDry'H~FQa zʽ Jcxy/$C:I#{晭as dz2 r7ĭ ·uv}0䏔hDYLxґ$0=]`;L.:d9 +8b Lc`Cryd2KxRg}І:&S^Gߛ!=ztSd )$t[+1L#чL%ɕ=&#h2d\2Cae/eN!IƔ4RͶ㼉\G*1$Dl &ϳ r; S市c~\9=\ΏN\I8yRgO#9~L$*(s'8!;N&/ާNW5r1 ϵr99O~.E9r.>EqĪ0{Lc(G9r=haWyGNpX=/muޓ!吏bH`UN_.kIT$jوcL axp;:T܍lgDtR1v/9or$+h3Do料JZD'ݜ+P]WGvxc*o߮'r:?z^ |Ѻ8vSe|ME.ۿ='%vvڐԽ̗D<[nhQ=3͹.RqK5]Wq}|ONّ]ב+qhrGq'X*|Xf,פ1ط{~>g|Mԁw"ξ^ eh&"هhͱ5gG!Aӆ\FNGlI VXqxܒe'#moLj Y$YW{{t|m{h; 'z<շsYjk#MkK{kdcʹQc-g?5Ѧn-$Rlw@"5mmج\ r ݇}F+){8#U;eC/S?݋hWIޗ^0-X'wr| )a/sk)^u2o3Dve/=^ #)+>X*ngD7ǹ{mi_+R=BXĵo%D+{/j!!l}?:PvJ֝J}R)7?Z`};#Uu {+)ױ"<;rໝpyċ1;6Qk."A_A7ǩ:feEw~rV<{~I"kԺO4eUM{Ԝ< P3O!Qd Jvip/UYI{9h5Vgzs3׃Qc|~Ë얹>.}&?Ug _sw"Zڍ9hWn=![qOLQRgj^0>Uy9҉il"{661rs7^^Xe/Hل1owe)Ol/ID!l1͵T%Vڝ8iR6g*ۂmnJ1es\;ydfRx*vɟ˕( B23dy2Uwֈ as2p*5#/^{9p.~?wVaOy5g.Eŵi qɤa<{aެixΏi Yxe2ǽv2.)O{{Lza~^̋kKHQI+O%1!V8/Zݭk ;3!Vp T~9{_Jb=9U|oۯv`x8ep9yRTl[~|v 3է#_!iu mQ>gBM}(3j'^!o0K'{s?|2FW䗗Ag䠟Hཁw SRwd/#sO^rw~+W?4BSE68K u(&HP`&-m?K>j~^}@ժ~rηje|^mо2}e>3ޫ@+TY1d_K(Xw]4e$︟sy_t%=yY#3S~wXNkYdE3F1S.w{?}~uHӾFh:5~GAىXvt U8Ǹw2_! qN'J3^~2_әwg~6 _4Ά "STX[߫󡾻;ツZȷ|w\luCRZgZCBS=Qg+g}03BwDM +) 7zww7h?8NPcvcq;r!`#_L9ǙWΚHb%lw.SLE-ߚW5 )SB۫-}o0mWC}ؔ_[;}uƏ- )5*/0wsd5כu(G)M8w\jMEOBuCQJaar%x^Qʯ(C:(i"i+?#u֮PFwDd?6GӘPdڦ>IJpɧQ>JO*QjR](`e(p/u Y*eR(5*DQ}TGaR܃Q 2oxh*Q>#S~g0 |$I=W<" {tE{n/n^h7HCi= sMhX{_ul~uvNWt7V2Rx$yee}BwssqQ*F[@PPFٰ\lx(`7[MゥSqDpGMN0(n_ba(mc|?k]^k=kWkk GF###xl8Ƒ {|5~&7ی1w|+x/#? 3rȆ-'|!/GΌ9#?g _1|^p'7 ;_}U1#'_ǿ^>|~pjs g_C+5> JJJJJJJJJJJJJJJJJJJJJJJJJJJ *vb' *vBTslk;U섨XN9AMNP&O :Op'\ y!x2[4xEđ+'«|=Amq!O pzX _3r迧3>>p]<ޔγ0N=7tO vF_Oߚ#7cor-Gt}6*OMZ?-]z[nNr໇/ g|}ޏn(~ ?[?şs'_o.2j/a۱TmKIm˶WpO<>9e\~G~(x2FG~&gYwaJHȴ}&F#߀)xXyZRk!!i;exdHھ_}2d\ːq2.C#C>J|-«|߂)Ⴔǧ:ou~nS')xp#⇆'?l18~?/x ފ_HX牷to;Xik;mk;m?û縈k;^ ´ 7c =yeK#ea{Xea{XelQuGUwTQuGUwTQ G5pTQ G5pTQ Gu)ۥl]v)ۥl]v)sTQ=GsTQ=GsԌ+q3pθW8 g\+^OkaX9޿s_sHΑC;Guxf0'~/>oދ_02;GZwNOݑ3K O >?~at?+΍Ho$~ʧ/$n^;{NN=x kx^s,|%^_,[J/\FZ#ym䍉NI,xOs{s6<|8 /r;KJض_:;|T#/3ᣃ4xQRy[ ,Kx)^}x9O|5^J|-nxn-OkfN5|v0:F)9[Ǿ|']Z߅7n|߇׏?d(~ ?OtNxi# ?G|pS?YFO'4<2gbOSni3O ܾ3{oN|$egp'7܍| l0moqtl [:{>Hwm?ćҽl_tmç wycƗҝn\Gٸiwqôid) iMoiMt[:ۦ}M/u^#~yG6]h"^OHۛqM>U>9#l_(xS-_6rG:v˷Gl,l=ߤ+z=O龶{Ry?ÓݑU-6~/]?k8>1ŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1_ bŀ/|1ͧ_>pjO#8|31ߤP3ٴ!mo:`g\Hp|0-Qamd=_c=U<8|Rb=*q=iĸߥ=b;-ql_?\qmvRx~GP⶯?tsqGxwG7 >#xp{ھteL{n~7qsҞq'i|j}#Mo6%?b+0U?V_G~g37͂ӣggF=c?k8g~)[7۾WlFwGn 3rqΧgF4#jr莨ɩTjCMv5١&;&g$j#jjCMv5١&;dPjCMv5١&;dPjCMvɎI\Ci"1+⥣LѳG"R.܉ O N<}{5^+9yqs\9yus\9yus缨9TTd|LnbTç#q_vγyv;nO:r{g =r#G?g/-=x[ No 5274r۞*IYϢRo{h-ƟnO=vuǺcnX{=vuǺcnX{=vu'Tx^5^5^5^5^5^5^5^5^5^5EQϛFF࿏^k9݉}.e>2<0rR#') 75qߧ-F|7ߋCa~?O'Si ~?/x ފ_Φ:k|oؓ1|^p'7 ;1}78 OpN-x&;Kg_o7C .I^4}{!MgH^5홾\% [pIBi†KҷNL^ހ7ҷ3~ ~hxrö?Ïgsyތ% I^ގwզo/o1zw=A(uIB ^ wq'}{!x/އHC8LO^nMዃH{o/ , V/p^+5W*7-8IBp|;ߙ\J\ yaxaod<O3/$/$;KCᅴ}Ҟc;8*yoGʏOcǶ+?3V~bZVXi18~?/x ފ_HXto1ӞO?n9.OTX0]C 7cZcǞ L+VXiU/W+܏Wkux^Lk~ضzN+x|szG7; gb9Xb_6m`{f?hf?hf?hf?hf?hf?hf?hf?hf?hf?hfO! >7w]!sḺ{xbza9Xb<~=~=~=~=~=~Mmo6x۴ ަm6miMtTQMG5tTQMG5tDzOLo50K.>8ۇ'nw]|X`]{ó6 ab9Xbq3tƝθw:Ng;qoMor}xΆ7MnX`]ߑuӻ` 3̱ҷD=]["["fc%Vxul`[v::::::::::7RFHs#un΍Թ:7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7Y7u=#[_pxRpsӃwgxnm})x/7|YYQ lHtO⧌|_WIzVq_ھ_ ^NIYx*\<ijp]x6y ||_jm2|9^5|]Ҷxx߈Mf| :6Զ Lnka;N4,<.[mv|.mF|7ߋ!0~?Ï?')4~&xKz1<9(|5::6ݖζx>KEe_Mھȱc6+_'7?{p^1|rt[>^=NFHn<|^[^F M߮$뿧[xGkWH[}o1f3(|[n `'|>㪎XG{Sç/gn}g:$#'Lu~:?bΏ/ vz [:[z]P3k|- > I1 ',G.>Sᑴ4|:>|N2rqo۱tK|(]Ck|k;}x{紽*s=WO ]Xina4#6Yb=M998nKg>}^ _fsھQcfWXɡvۨ L+X/#[#σH츋X1cĿbX ޞcMFcM&~]M~?jj%M+yS+}&[7۾WlFwGn 3rצV^Mpf:qt<8Oy:qty6?'}%wyÓǧO >:>=;Hq/_>'0|柧 {Ý #IL܏t+@~)xz% 柧_F 0 ,/#3_F 6-lcKL8ޛ'P~|0&***************************q>}ta3s}ΰ9ӧgL3}zOY>=˧gtOwtOwtOwtOwtOwO]ۅ7 ' <OS-x1x4 /bok<Zopデ;<%Ù˂ss\~5`Ot8LkKOߚfI{n>z˅_}үn0kp-T :1b]n77 {{EM~ ~?0bcq>k x3ނ6<3bۃ+k.~~5t7?p/?4ǣ)lçx>}x?>M|7IÝM7 ӯǗ|) erkx1fi _ ' eZ!_+U/OO_ k_g?^Ux5^o7[:O] _=IA.H|;߉| 3ގwWN~o7[m~b<?şs'DoӯqWӯJ߽ .^U\K_  ~uKMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMr$gMrүgS~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM~gM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*֤bM*^4 \4X=|F_ 7͞gE# 墍I#?tO⧌yWӞ[%mo=+moKۗk:|51q),<5˶b^FnTmg9龶{Ѷ]m;9xcsF7|Eb|}KO >3xyFj _>UrN:g .p qgqߊo÷;wImF|7ߋ!0~?Ï?')4~& 8} +(|.N `'q[Xy>]|poφbO- w.N d\t[XP-aM:sVroaUoaW-]-qôM#[X74WV8nKgK 4r--~yd[Xu1fOe.N >ӷ\boal䎴OVG|q֖ӷ]oaǿb-i<} +U-6~?1} +[X[2dtN2If:L'$3dtN2If:L'$3dtN2If:L'$3dt2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!3=d2CfzL!sy\03^#i{'>?2B\ֶ\_ֿKxxߘtm۞rgy><3\g9vXo;9xFwEbg{Iն=x^5>Uf]۶w x#߃A~?ŏI~?xB OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|'(>A OP|֓$'i=IIZOz֓$'i=II*ORyʓT$'MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|4ŧ)>MiOS|3 gh=CZz3 gh=CZPy3T gG9Q|s(>G9Q|sh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzsh=G9Zzs<e`Ot{_!wf {e}++Y-kd|||R>%gs0].zEwѻ].zEwѻ].z:rgxS=e}>(jY#ke)|F>+χqzqzqzqzqz______________________ _ snֵP>Pz{dN^I|Z>#üNNκκκκκκu^gu^yz}^q^gu^gu^gu^gu>zG}>zG}>zG~z?O~z?O~z?+#+Y)jY#ke][ xo2e{ˀ-[ xo2e{ˀ-[ xo2e>HA }>HA }>HC!}>DчC!}>DчC!}>DӇa0}>LӇa0}>LӇa}>BG#}>BG#}>BGQ(}>JGQ(}>JGQ(}>Fc1}>Fc1}>Fcq8}>Nq8}>Nq8}>NO' }>AO' }>AO' }>IO'I$}>IO'I$}>IO'S)}>EOѧS)}>EOѧS)}>EOӧi4}>MOӧi4}>MOӧi }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY,}>Gs9}>Gs9}>Gsy<}>Oy<}>Oy<}>O/ }@_/ }@_/ }H_/E"}H_/E"}H_/K%}D_/їK%}D_/їK%}D_/ӗe2}L_/ӗe2}L_/ӗe }B_W+ }B_W+ }B_WU*}J_WU*}J_WU*}F_k5}F_k5}F_k𺫛3sGe#euǷZa2jY)jY#keZ^kzZkZAk Z6hmڠA+K+K+K+K+K+K+K+K+KkFZ6jmڨQk&MZ6imڤIk&.p;̇\wì2aV=ZZY'/F|J>-anoooooooooooooooooooos9z=Cϡs9z=Cϡs9z}}}}}}}}}}}}}}}}}}}}}=Kϥs\z.=Kϥs\z.=Kϥsu;ur5Vօ֣Zj=֣Zj=.]ZviڥKk.ǴzL1ǴzL1Ǵvkڭ[knZvk幋=Oϧ|z>=Oϧ|z^@/ z^@/ z^@/ Bz!^H/ Bz!^H/ Bz!^D/ыE"z^D/ыE"z^D/ыEbz1^L/Ӌbz1^L/Ӌbz1^L/K%z ^B/K%z ^B/K%z ^J/KRz)^J/KRz)^J/Ke2z^F/e2z^F/e2z^F/rz9^N/rz9^N/rz^AW+ z^AW+ z^AW+Jz%^IW+Jz%^IW+Jz%'ԷC̼o˞P>Pz{dN^I|Z>#ìWѫU*z^EWѫU*z^EWѫU*z5^MWӫjz5^MWӫjz5^MWk5z ^Ck5z ^Ck5z ^KkZz-^KkZz-^Kk:z^Gu:z^Gu:z^Gzz=^Ozz=^Ozz=$$$$$$$$$$$$$$$$$$$$$444444444444444444444 ,,,,,,,,,,,,,,,,,,,,,<<<<<<<<<<<<<<<<<<<<<@o7 z@o7 z@o7߲ sܙٵB[vaG]r5V >Q>)Og9|Fz#Ho7Fz#Ho7Fz#HB?3[QGPr5V >Q>)Og9|M&zDo7ћM&zDo7ћM&zDo7ӛfz3Lo7ӛfz3Lo7ӛfz Bo[-z Bo[-z Bo[Vz+Jo[Vz+Jo[Vz+Fom6zFom6zFomvz;Novz;Novz;Now;zAw;zAw;zIw;Nz'Iw;Nz'Iw;/ ~h'/ ~h'/ƋZ/j֋Z/j֋Z/iKZ/iKZ/i]ԺuQEZ.j]ԺuI%KZ.i]ҺuYeZ.k]ֺuY+ZWh]ѺuEV&ya+JGVY+|Ye^zYe^zY5kZ״i]ӺuMuZ׵k]׺u]u^^^^^^^^^>>>>>>>>>Z7nhкuC Z7njԺuSMZ7^zEW^zEW^ѺuK-[ZniҺ֫Zj֫ZjkZikZikZnkֺu[mZhѺuG;ZwhZkZk555555555555555555555555555555555555555555555555555555ðU(Vr5Vօ9555555555555555555555555555555555555555555555555555555{ʜ)s2{ʜ)s2{ʼּּּּּּּּV:l凹#ʰe#eua֛Zoj֛Zoj[Zoi[Zoi={ZiӺuO=z[mz[mzGwzGwމZZ5am2~C32yA|;C/zKG|/+^_jfw_;K}ؓG/ݙOx(OOf>2ayaCa>[ւ\Kr9V\kג^XD-+_ 3%әoE_i=;04g_}^o\wa|0 1rSdmW}Of ,-~Me^gvYu?#d~1̪G lIǢ ?_G2Zw2w3f'7;omldIs6DG2!2e<f_ʾ`My˓WmyG.gG 3[ᬺ-x'wOP8G¯+uxld3*M?2^ev/g7D#llllllllllllll=l=l=l=l=l=l=l=l=NT=NT=NTq';IINwĝ$$q';IINwĝ$$q';IINwvTa+SτPv=<[;}~$Q4Qf{i?# w6 ;[w3a(z<'~%l#ѩ¯SJ;W >U¬{dN^I|Z>#ÜzҺx׍u7Һ0<]_7<;aNsvhs6?a /Fԃy=uυCXDZb|K$/+K/_ɿ#"*V{5u 2ߒC~[~OOeW[Kl-׵MfLf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a& 3IILf0$$a&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$$i&I3IILf4$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf2$e&)3IILRf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IILf6$m&i3IG3y0/ 1̇dfwy(;aD=7 ݿh0f69T#a? \̔y),"ktOg9o_/&,[dL6.;d|!/'E(/KeWȯȯʿ'^~M~]~CfE`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{؋^"E`/{!'aFكO#euaֺu[mZnkE?A7lxwt5w`k H" $* IwHh"MШJOTTr<p}q}֚kιoFXaA)AZ"Kx[;=Z,jℸwmĞ +J ܽ?I냠byЮ νg>7b<8P 2?|. H (zDU b>0Q׃dN<U=Uի*'xJS@zj_6*D["p%1=v_5^)~&P✬6N )撒lSi*]6a9rGx$#{_G;h8cpc.i?jl.qOxyN0 M{0l&;I$8̃xSVT0NOS3M4Nt;6CL1יjf3̤&͢wpo6lZg;[jfc2t=yc '9~U?yr[{/x{oE/K祸-KpY뛴,-:RnwgݫG&/3ɤ+L24L45Z{uz;ow~,}+ ,5 ,ѻG{ϗխ^Oz!.> ]8~Lz|l/?q=dzړO}~-}o~0˃vWyrtX8}sڏ(1ui9 ';IO~2\s!\raɣK{%_;iu;4Ӵ 9?k?{Y|e_kz꿱[t;`ësr|sz[ھ?ws~y_ .ϫqp_G"vӞ_2Kܟ^eE߿ßq;_+sîz_U]`?aP{óM_~é_R9a^c|@={0Wc]曈`s.b~C侦P$CP%y{.a0p9#HG6h{8F1GP/o}zJ+͕0Wv~5_W4L<25sXgomߦ<3Y|xٻ{ώ{uSg߄6xw8f7bV[pzmgm<˵_pr=ug6y|΃gD?O|g<;KY8_ku߸S9Goiֽy}w/|G/zKv/'{r0~g?{_y:7+yE+]+\s]UyWyv֫rkw5n';~ oa&7`冺f}֛v/~ߒ [-ś[jow +h8އ/Jꢮh#z D !?B~ q!Psv;`ݑ#a]w w[~'. w)DE &{D} _p -$ |/-%bO}s q%?0#?ICt>$?2ZO \t~.\KUyQFbY["["H*AwC(Eq+ʧ E(EZ+zD( GwxEgϣD'h.f~jA)b+Ƴbm%ijK/#>#4©t>Kޕ|~q)O[y*] Kx+򲢳|ȻxUݕ8/+2_'=*U͠*}CWùW><3fLgt~Nsz? /^Ջ=cuͻ,# 7Ĺ71/?Mnλ|knVaׂ7-G z[kw}+[9oEO+ӚwյqvixGc=%N:Չ`w̤N;p< cyph5`ϣՌ{c-NU;f>Xo8a>4?2Lm j&y4)Ny :TL9`LwM9r }fșafr&f;S*rfχ;|^\Xyq}0PBz  v᷈d=_"-g/":b<ۓpb^,VXb=^/u{f /m{K.OKq\r]*wܥrjo /s[fO&o9,lӱ\rzRY WB|Zv>+`JVJVRJwr-U42UW9_şհWӲW.\t6G™2e(=_&ΙxQFk`{k^Z ֪_KZ{VZykX:9܉u9_:<.?y6_,Y`g΂6K|[3>3o;rdɖ-'Lmo6ء zl;ac6wjxyn4F6F7r]j>7۩~loWݳj7,3͛{>l=Bwc >[قV\ k+8VX[am 6X`m 6X`mdtm]v|;N9;hAw^;v9К/r3f90w s'̝0w s'̝0w C>~h>r>2#wѷ>ûpE.v.se>?>俇w7ݭ~ݼ=b}kck߽wk?SwSwd>{}x>wg~~=8 r9HA{wPA\rLL!yvCx^;a?0އq:a>s>7ssܾ0/0/ 9G:\rD(Gq=Ώs c>c~ c8.:n}'N'p: {|ߓ>'ݑIw:eNُSv;SO΅ ;v.\XraʅǏ<~ʣ/<ˣ//ӗ}:mNis>uOg=_ Nw9x[=[y<Λyxq~_'%|?e.{~˞__4YJo<q+\a>a>WqJUUso5 [pM5:~iNGΟ8 nooM{xڿ{2[fp [8J "H✸D z?G"Ztk.'~ ""E ~ *(Gpo{k6q>wD*q;Ğ NgwƈbqW p p[ݝ#NA=08DQF bIQB8¡P¾>ߛVgŕ !!DDIG$%H"/Ư0~+[<*£"YD}Q5EDRknQEUbtñ]Y\}q+nv |SY |J.ġ ~;o༁5 4 po !^ qoOC|hOC|N#|Fz5§>4טa4Xư;o̷hFS3 459MmNSs[x-wKҝj鎴-ݑHK:ZђVt­V4򷣕Vyk筝vt ]m=moVmi[Ԗ4-MmB[nkvé^^:O:j:ґXrcq;VX=by{,c8q,N83ۉם=g;{Y]g;Ostǵ?z<۞z^;ԋ%7^Qo|zG}#-}`c_}}aSlUKߗ~Ixesx +fW{ǯ{?H}O,Qn"f&D u0_bFCw:I y(Cj(l7y7K73 0nW2ܳx0ޏT3H~QhF=1|4qc8wcr&{4 xLy9ωON6xO:} w*pƗiMt^N g4=SLffogsY-w޳NGy.2ɰgЛ tgw9͡m.^ͥw.v`G<{5r;χr]` hZ>s:1 P`wxWn)Y14x"!p"MG<Ѳe DAc;;؞qwώ[ CrACnR $ ڭ߯Y2~ګX | {l.'Q^cߣDy=,l"ʛq;2k(D!e?d߯Q~~2mAm|}c6ͿDy=:Vl]Fy ?Ey ŪGy{olѯ~(GG;WM=*/+Sd8Rjtbl~pb|2o ~ _i?bIo^Ar .V0GOONR,ƐZ/ފLN `ru ͳLM+lf҂g+_>-t * ]˱H%RϤSy*ޔ%ȥK;"։?غE2/%wt *W@=@q*7 @uRH+Z^U92Vy0~ƕ0θ4;-R %L|"%LZY sU TޭZCs(ש+IpN_[S >^}i!Ե@jj*LK[(%,/-M5 m2Gd~0yULi)'kc&WNU8iTx+ > 94ygtyk>7V"X  4zr^UquǚXkn 9KsZ5qcxt0<Ṟ'$o%QVyuD s~CT 7"1\=m-BZ5~~i3^a3cZS&)tC ` ꦼ}9s%{ ٌYX g,e{yl~lfXj&X28` 7Ǯ𮘄L';WK?O]18z[s*Igg LmqO"_xL݈xwD}J+MU6`YSid zÚt顭',) Rw[m2-6XǙv_O&th:nκxpM"%UE>,"НvJKHܽ: N <rh>8)6R6nen8{RʨO:.>/~u3m?[EV-z)`5uCt⢖~t=64CY:̖]_s 7U"sloiNS_O(WMO"vө7_at+5[9?l>`gS;D ?VocecGZVϿI ayO3OAqۭnx|&4Άq5,boG3  oG3xm\6Ӷ-$efvͻ=MRnKr]{K23333333333ÿҾJ_'FC9+:[9_㸞C],,Lpr>sv˜] ℮DqεN|$NdNJ*tsS8pGܙܙYϝYl\ν<|B"bR2r} J:nY YύWYM ͝ݪss󵳙3ӭ+;8[kku6gKh6ζvYnvqusw7p7t7r7v7q7u7sǸ[[[[۸ۺ۹ۻcs^u;.5ws;v{7ܝ^w;o;Sܝwr]ܩn^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[uuvfrtpfqpnvnqntnrtrvq.s.wfu::k83;;78 'pF8;k:;;8#C(9Y9}99}9}΁AG'w?u?s?wptrvquswptrvquswptrv<89;s8s:s9s;:{c{S^FzYYټٽ99yy;Q7ηέ1%B" ΉI΅BΩΙEim"ޢbޒR2޲r ފJ^ ȋK˽WVVVVV^kz^Zhoo]o=o}ooCo#ocooSo3o7y ^7ћu{=ގN^7)ހ7 y.ToWo7owooOo/oooo_o?o@ `P0pH(hX8xD$dT4t L,l\<|B"bR2r J*jZ:zF&fV6vN.n^>~A!aQ1q I)biY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/oxJDHH@FdLf!d2'M!d Y,L!d $Y,M!˒d"YTHH"$#9YBV%dMR' $ %YMFuȺd=>ـlH6"MȦd32lN [d-َlOƒH'GƓ L$H7!;H/LH?Bv&d a Jv%dOٛC%@r9B%Hr9C%Ǒ Dr9BN%Lr9C%Br\B.%Jr\C%ב FrBn%NrC%Ay%K|C%ߑGB~%OCRJ) SI :3љ,tV:Asѹ^H/K2z9^IWk:z=Ho7[6z;Iw{>z?}>HG1gCgg>w.pw~ps~r~t~vw')4}>K%2}J_7-6}Kߣ#1~J?/+5~K'3J?/79e#28g)l$fb3Yجl66;bsyؼl>6?[-b Eآl18[-ɖbKeزl9<[Vb,a)XΪVfUjlu[Y5Y+Xbkl.[6`l)یa-ؖl+5ۆm˶c۳lƱlb$z؎l'&>ϦdCl¦]nlwۓf}~lv;fCapv;Ŏfǰcqxv;NfSitv;fsy|v].fKerv]Ůfװkuzvnf[mvvf{}~{=fGcq{=Şfϰgsy{^fWku{fw{}}>fOgs}žf߰ow{~f_owf)=N8s.%W<#H>gYl|v>y||~_/Eb|q_/ŗer|y_+<ySWyW| &o^:|]_o7&|S7[-V|k ߖoǷc'INO}O;>ȇ0߅O|'ߋ~ ?~$?͏~"?O ~&?~!_/ ~%_ͯ~#o~' ? $?͟"_ &!? %Ϳ#'p' .Jb)Fb1M.sb1O/ bXL,.KbXN,/V+DE"HD*2*bUX]!uM! QbXG+ Ćb#Dl*6cb Jl-ۊbAtqb D1ItIɢO)bg1 ǜGqbH ;.bU&v{=^boW'A`q8T&G#Qhq8V''Idq8U&Ng3Ylq8W' EbqT\&.W+U_jqV\'7MfqU&nw;'.Qq[#AxX<"IxZ<#ω ExY"^Mx[#9CX|">KZ|#߉GY"~O[;{3ΓS>q| G33ssss KKKK+++?#??3?~_ٙt^pusq&~Zh]=}C#cS3? ~?џw=N~?)?.TW7CwO/o_?@ `P0peE%???????????????????????߿пȿؿĿԿ¿ܹÿ¿ҿʿڿƿֿο޿ѿɿٿſտͿݿÿؿ˿ۿǿ׿qvr&;N____:;;S;gG:ҕ$J&җR*r%g3Yr69C)syr>9\M.( Er1\B.)Ker9\A(WH2d.ΰ3"kT\E*W5䚲.);d!K\[uzr}Pn$7Mfr\n![ɭ6r[^;N9Nwvd('n#w;9;9{8{9{^9Y~9E,r9U*w=r/G+ y*')|O>+%|E*_7-|G+ߓ#D~*?/+F~+;_'E*?/D9U"*WR)jfR3YԬj65CͩRsyԼj>5Z@-R EԢj1Z9G-RKeԲj9ZAVRH*QTVVUjjuZSUC5U*TRkjZO6PjLQ-Ԗj+FmS۫jթƩjR$խzԎj'ի&>կՀTCjX]njwSV}~ju:PVCSapu:RVǨcqxu:QNVSitu:SVsy|uP].VKeruR]VרkuzuQݤnV[mvuSݥV{}~zP=VGcqzR=VϨgsyzQ^VWkuzSVw{}P}>VOgsR}Vߨow{Q~V_owSVN^@" F#QL,l\<|B"bR2r JA%($H,ȃjP VV V V V A#hAZ````````````LyEeUuMm]}06!  AW01t=NAo09 )@0 .```````````1SiI}]; :_o|@)&1܉c+iH.>@V3ӕL;QHu颪Z+ n]5GuQrR(UR(UR(U~U_ժiktZt?ѡVCu.Z] c]5u"h%.]thTlzTc#tgJ^jL#eI~iL#& k̇fP?9^[7'975|G9{*؋dEC=tsA7]|UA/@AEQt!"Ȥ{%^ "Ȩ2*j YAVEcdVT}ȮsdXT=ȲzؓdZAEmjTnAEuC'TC@J `XM@ A/B A/B A/B A-kZ#Џ@?#Џ@?#Ѝ@7t#Ѝ@7tcЍA7tcЍA7A?cЏA?O@?tM~ՑONvR3E;)S/ N~䨗^Q?Gh5jO k_G?__T:گ~tSW=WtX7@ o~6@"@tz'jTZUUX z4  IDKMDKMH@@HH_ZW, fڋE?6iS;U6lcǠw0& 7haN$;awI[ϥZ˰Yz+Jz'Ij+ lz%>IGIa#'_84,57$M3O&X`u ')AlIz#0b IƇ0zrJ@W_{aeyBpqwhf< H Q~l/NS?z-sgS.PjԄ΁֋bkl5փaajkazixjZN֪f5Å5X35kfffpkfpkM22elĔ)3S榬 G#pdf#2B\3Ȍ. ndp#F72 nlpc957WBɜ[I[\{X(|ɟM_;5}IM_Rӗ%5}I8=BOyk3Ӂ<2BfZ0<ef&2C(7ع nnpsGQ5FEUk.ܪ5 E"qp\d8.2 E"qQF{'1}k\V˒ O 2Ê1z`g6k/89U8'581581[a0al06L& Ɔ cÄa0al0T3i%ZpZ>v"E*m+^RY}۷iA|o{;޶aC0|#R=Rn+W*8gT讂Q]Tk*scùtsmĴàq]ጷa T`\Uxq`XMj^R@P+z-m^K2k$ajAǪJW_[R#H-Fqz ###aİb?1O 'aİbdpUg?<5;kݥiiii(FByiMsquvĿKL{i/1%Df 9|ިDdD~9<E.gR{5zס9bm߯_ֶ՞c$cC-NoJ###lRDY !y6T]лm&F_$F_$F_$TM޹qHHpx-}Ԍ|Қl}0R7#L9{vF 7CX#t~<ՄāDW$B jڰثEh 'C+8-jɆf뉖=R[+Őq!v9_Z.x7qnƐ@d. ̡>k9k_gfz=h6$]~C49:4Qͷ4MY5b1Rc-X8.SbԔ) 1Rw D\]OL61SqI.ccD8(Vm;5N g.|f(((8 q2(dQȌG!36Ufffff8 q2(dQȌ<3Bf8 q2(d5 5ʍk47%7;!7*7in\ܸqMsc,ʍʍY(7fQn̢ܘE1rc,ʍY(7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUt"25-3ZB~CFG={4ߴ`J+!hVZ$I˘$.{|LBbl9"m7j>]$r'L;i8]tNL;i:]SC[L%dSߩs\4RD#ZFĸ^AЛ&+#~jjjt)=ImB[7Mh&Ny}>MZWdyӌXQouZz&Cu2Zu #0cǵi 8-p[MyB=XhSlJSNiežGieU3{K8.q[V\Ϩ_*SEHIpt`BFa&E0# Դ&e@ȘJ4kPihݦ<b;gn3iDG~I]qO3CZB?udP#5D PieKlcH *2T6hu=GG,L_Xt߲(-j)S:!0(?{*ℯ7OEl1v\F6)L ] H"7U`\ H*^K{6ĆX ͪܰ{'v>#gd{+UtJBDԙǽQBLpS&s(lqPtkPDX#pJH䲴IY`o`oIw}d`\8i"pQPrI{6al*,R5"GjVԴlU&d5>+Q)I)A)*lzON6!; 2">-:ƀ&bc-3r̿X` i#q*DTTC }Ƽi[b-faݍU`Rac&ʴl5: kĘtLx7 U>- Ų6 RK)1s.Pߦ zLX#8*j v4kݠv%,KX @`r  k\9i9 ަXYX/OV |с~TR=큓EuN="AVZ ӽ]Y\,k<3QbKd67-WyO7 *6>̾P;( 9. .GaLIWd=&ݦ[^wA>A8 ]UHkHN3elĔ)_sSVMY;qF5277 nnpjp 69`EV]ܪ5r91r91r91r91r٤ ݇fް1gdzxԲ0 +:g#nÜ☰Ո X,oasDnڶb v؁U^W ֹjYֶ w?<7D p-s +qe&6vfkakhf-cdš myT]6ޙw%˲5{!:=&.$dW0^3pنd MmVjeOREn({ N~[<(i@;uz\{^ҪM7: ؍F9phJw!X؋Hbk"uUx)2elĔ6f VξޮN]Sr;xua$g0aCЈW(H-[`sTO*[ԽRӎ}uD)3%2|*Iیɞ<ҼC5]9>K꜇VY5yf%'?5m\n11[؎wCdOߑD+/nj{03g3̰g̝ 'יBoSEf>oP+5ibO\B{?njVfjf{cF #-NHkfL6,5m\fSdJl.lrS M _ՐYiR[ObivY1~WJͮj^kVqI-jldz6j:kUby+mt'ӆLP-1mX<%f{ӌ81#f|`M3 {iZWKnzmEO[PrC?E`=3l5 ֌?[3lpl5֌?[3l5#kFת· [W,;MvVFG}QEY"ժ?b/ |C*oq=b\F+8A2|)2%=F5׆MaSr+fxcp"(b##c_Ɲ  ؜E)2h8<lPlp6Wc6V>6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/lato-bold.woff0000644000175000017500000113474014502137725025732 0ustar carstencarstenwOFF +GPOS̈́~0R2GSUB4(fS|-OS/28``k?cmapޘAHcvt lDP,IU,h4m??vNpZCe^Xk}XxB;h@ @WQ=!zAo}Xa ްaupx>Rt a40^3s&x2<)3OtU X)Gm>>x lFNq[!5?Žox1^x>;^hvםu'yݏ;x]h'̬k'YDtXY5]V(Bì0<v]!ҷ6"WPm[N yNAGSQ8q0&DxQ~e%X^% RHuX&Fs\oJXa_[_[_/NpFNz =L6=YmH 2ՐY2Ð 9 f XeN(P .(){1}⤱xx0y+Gxܚ|-G*c\\̩t+%?$#b_1wHQ Kb|K%urnӍ^8)Y3YrLun "fAD7"-1TBwC6jm1ѶhK47Ho+"rO4^]f3Jܪ-ZƊH_Ϊ133īj!?KY(d^1' C qA n _%3bVy:c2V*;ﲊѯ3ڭDY)jƉgY9+uc ͙K ш3#= u]dnF\ҙKe3QKb>Oz}<<ׄ #d9feݬ̶=-?}#QcB #gt]C :u[pjj+ \j\3Wj+{q\zΎ͒PU`Yۡf"Ptyھ*WxUP Z jn[)>,͢-X<"E :C)B7Ю(_="b>A0`Ca Q810xaL'`LSO2i@D&fL`u|/0Ey,^9.dm^W`s%hn)$k:,ހJհ\KENE#,vKwPO‹8hD0Wx A8oL+` YqM<,m[섏a=~8 ,šMTBO)iӔz R20׈^ . = 뵄evjtͅya}@"@۠4Fp h\h\4o-h  DB+#̗dRz)Y^JV/տ/->#a| `7쁽HOS >/KHpQwX='d$,d8 .T&*C6@.!,쟾P`wB \e@9*7 UP @ ԂT2 @A ! p0Ѓn[6h7FЧv4Gl~h- Vvs#tãzB B0Pa<#a12@&40&$ O4x ixfĆga.<+^ðrXoJXa-lx6FW 6{2>l|6;`'| `7쁽w S >/KH0 o;~ p~SpY8p.E)pR B͐Y`Ȇ3RA1 %pJeP*Y@e]ltJC)R=pPռZɂx'P'PW LJCc^]-ÃoƔz 3=Z.΢.΢blL]dSc=FeTj<ѐh L#Cqa8j2Hf4FϠ:Duޑ#UyT'x4W-eTƣkzE^jrN>A5ޙj#E/[eԮD+%>Z&Yz`j`6uSZYMIg7ٍfG_t=2zeIѓ.'K>>>>>>z$z$z$z$$$$$$kջޭܵ]W 4OKmJutBAzwSTnw7ջM^L^L${ m#*jC^ =I%<5~IrDZB.WF]B1Vh"=âTRnqvthC}0Wn =L'a<az xfĆga.<|x =OS:)U]'.<Fw953e5uRM y 6Ӊ"bs\Dl#6guI/AMՙ>=ӽL虲:3ugz~ 7mchT<}ddnRgfT?T?YD  >_#Y!_'CV!k8Eq7K`l>]^/)|%$A pQ|?x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*xC\lȀ,̐ 9 f \/P-`E"(8C) *,-cSU΢EU9rUe,KNi5u(TZ7*TTTTQ0PɎ.\>),xo'gϮގ0or8П/$h2׌4,DGl 8^B>ݜn(ۃoa{tq;q5I@13sNt+KKYRV5V6VanJX"Vb+wkwDW&opWT:~[N ^d͟n.˨KKKKKKKYVb+Ja>,8"svqw܇}} Z.Oa3Zju,=Ƭ*њYĬ=:g3Q>\Uq8պ%1u6qYU:>:~:~: E%ۘ fw"UJf&dvo1̮_QGڦMT$Pj4 EVIr'XߝNw'gPd6Lו,7 =o"Ģ}w~EsTB<Pdp~V(`_؟9=[e.uoFu*%9Y/* j'ɿ̬3+G!ݽ̮5kgfQȝh"6PI^utXGI3YXG8K%A {46 NZh_~ nOfTQKQ3Z.]bh?3)F;h&FJ60YF;hw0BFdēx3^F=˨?0FȨ?1Qjǚ2qF>Ⱦ<_ɨEje㌘Wg-a\FaF(`<"L̋y p\JbR%%p },™Op휩rJtA1%]Lq;g$Ψ"}媨+x}vSj u(aSAh/vK B?a !|}(ax F 08`"L<S0]l3`&< l>UXykDX+ڈu^tVQuu.]g񃮇x[S|؋@:u{^u>n*uīuW2E#h,͢s[ah>vq {x~8 ,;B@Gq(BO^_Tbyb{8~?uX2PvCTnu/TA55P >Pqb!4 ]p7f"WEᱦv5eE3NG tGiHǑ3 K1dCנEP 6pB \RpAT"U4D x3v:Q4`w_fI^@_!@a a0FcZޅQ810xaL'`1!3b=҃UC4(#Ӡ8IM2r:,ApA> . {`/p@zC )pRz^@/}>Kz^@/}>Kz^JJjjju7ZMVwSnju7ZCP{=juSbٸ4V^ho@:WU|>{>^cE61(8c\0 ?&J}wVcWWWG gxu.}►eE. G(WFQ8nxQp(1 G p(\. ¹[E+ ¹Rq(\' ׉up(\' Yeqǟ0eJ:3*QJD*QJD*QJD*QJMѝMk/ ܡ;4pO. 3 3:L򌎻6]kݟ]kwm ܵ6 swm ܵ;6pcwlg &V@ c+Yu&|m8jю#b0+b`E 1"VX+b`E 1"V`X.6YVb+єhXJԽk)3nʌ2xX`K-f/`ƚg6 ̸i`M K=#0kV0ҫ_gWrf_v)؟\ə]8s:gșz3{rqa?ŁOq@tA%$DrȀ""QD$'EDH""QD$D!8h""QD$D("EDH""Y;QȬ^^Vp/̎Gx$;ɎGx$;ɎGx$;ɎG@7?¹p.7bvQ wE sq8wsq8Ji]sq8wsq8ws(j(*xX g6F(Q@Q>< gEYpV$ gEYpV$ gEYpV$ gEQEwTєUy9@ h⿉7~ R FZH^k8?FՁO[ gsf wۆ gcK#٨(zOg.:l*;7lugKX򻷒MsYWD$zzzzz$Ռ`?mmmmm"mm"m"m"m"m"zrJMMMAoGDDe"$-KQY"*KQY"D%oI[Do!RHuXa+a w\].6OvߣD=eޝ@'|wz(߿8E'רDJ }Лꃒ$b?)y1/@>D?M?M?0P4P4PPPPPDP"}"7$*3Tg苢"}Q4}Q}Q}Q}Q}&%;荒$|&Ix((((((((((((((((((J³$<+ J³pD H$q@v"їH%u@菒$<+ J³$<+ J³$<+ J³$Y6}[>mvNvn{a^ ç|_+8_a8G8w=E͆3J` H7n =@zp%if~}hAs.G8lݟbT[jr+:TGK;δ9/CbF"¿Xp^KUzQe%T2S܂|AgdrEtjgJq+fAT}f7߉:فC;Y3|Z|N?kgvY;~N?kgvY;~N?kgvY;~N?kgvY;~.0/+K!^a,5X+ko!w* ܠU<,-vz_;Nk}vz_{P"}"vz`;=Nl=(v`;}>Nlv`;}>Nlv`^ ACz7al `a lCv;cA^p)|%$A pQ|=5CnȆ3RR Bo[- mhIFmZnꄖvK\%4Pĵگ-q햸vK\%nkϡ%2~{mwYA^%ǒcE a1"WŐcXz,y=N~M~C~B~D~^@~B~E~B~E~L~N 7 7%7$7&7Ǒk͝DZXq0XcűXrk,irӬD 3Kތ%oƒ7z+n1p.9/ՋabXV/&z1'0abXV/ՋabXV/_F3NG tG b 9"N'G#prD89"3Y8/6Wu9r arF.y.x|9x+x%xn>kAuW VE!ސ5ʽymWZ%C幰rHX'Ca`8Gc< x810x'$O'x<x<ІЖc;o2tQ'8NE50O-0KU.Wfp?ϛsl@KG Z<yކ1f{xD;FhwN2Y65vqW覞7v2ؓ@/y}xq^΋y8oj2q`<~Lv5(f|\60`2<S`*< )3`&̂ q0#sEG rEqqx8//e^b\$_2۸D͸T buuq,>VȾ7Jհ:Xoq#;.lz>l|6;`'|^3^$')|o9Y0ɂ`qfqYWTBD[Kѯ6??G|?D+D~(e EC"ZxlrNY Jdmgٺr oO_ x:]wp ^G?9eDs\rzBY4 f!,DZ f!j"BYWyeXo'YF4'8NE%XPrc{x:@4tN@WQ=!zAo}Xa FyC`( 00 6F؈c#zlD=6F؈c#zlD=6F؈c#zlD=>\x^y0^ ex?z`&jj&jj&jj&jj&jj{>l|6;`'| `7쁽HOS >oBt#gɗi"ZʈZ"E!JʉZGDJd 9Q!*,^K],rR9)FN!'ՐIirR 9)FNJ#'Ii4rR 9FNJ#'ՐjIiDe+P+PoPqO' ''lNxvx;>'|'w^̝"<OxO E5AW |rJQ~9uUQx) wA(P K|ȇÇ*}P%>TUC}(ՅRkQ P P P P PD%*(QA JTPD%*(QA JTPD%*(QA JTPXkQb-JE(%֢ZX_5~ƫQD%*(QA JTPD%*(QA JTPrXQb9J,G(%rXQb9J,G(%rXQb9J,G(%3ꭨ: G%W`oqd1^AAHh#p\h̙ kGRM^R1iS8Kӕ͵!#\f-c13B#\ K{]bbݝ3 }2bذZ?l#. / `bF#EĈ#6Æm݆m݆m݆m݆mf\,Fb^ދ{1z/Fb^ދ{1z/Fb^ދ{1z/F 2^{z/Ce "E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^E[^ўޣdM߇9hˋҦI1 "MZ?N0`2<S`*< )3`&̂ q0^j.|heeq_ZrWyD-hUwC\ {1PQS*֨6гk|>Bم+}]FKdxr>j+h+h+h+h+h+h+B] Qt!.Dх(EB] Qt!.Dх(EB] Qt!.Dх(EB]zr>.{ea=첇]v.{ea=첇]v.{ea=첇]vwv9]~T;mKE;_wp5~TE ŇQ0+P:pJFײ)FZ=j'вG[9q\4p+π epY<Ý+f-Yb=Yb='3;6hÉ6hÉ6hÉ6hÉ6hÉ6hÉ6hÉ6hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\hÅ6\Q}8 `a.@9%(唠SrJPN )A9%(唠SrJPN q'q'q'q'q'q'q'q'q'q'q'q'q'q7q7q7q7:Q^?VL%>X5-6kK> _X-kZ1+*+Z彄PY 1****A{/GDCG tnb>A0iked^dd^ddedd%ddad)bn܁w,Ydly|jXdB+qtzKgfwݬV)UjZ/ZV)UjZV)UjZV)Uj/ƚ+]XXV +:]ĊdE_bEX1GB@sju;vvGR"7+_嗵߿d쒝]KPs?I;;dg쐝Cvv!;;dgk>l|6;`'| %nV͊YQ7+fEݬunVԍXMz~*Bd+sZ.9(qV ΚUڿ_F'_ǭdMp]t޽:t3;if'd;bZ̨쪉]5dW\׫:6fva3;lf찙6fva3;l_R%1XI V`%1XI V`eN݅\\\\\\\\\\\\ɞ߅9w}2gdSXӬ?)9;> c} ۙoB(?27|Ov]!;Bos%C T<ӂRj!WB?WQO*gO4d8]jעbRqJA5)4SPN IA9)('夠rRPN 1111111111111F9('dlrQN6̐Gm6Q }Ԇ>jCGm6Q }Ԇ>jCGmC8|TQq>*G8|TQq>*G8|TQq>*~B(߭ɕ'dU@W_va{'}7yx=~7%Thzhi]I7#yPw5gĔ@GUP 6 ]}:[po̥!F] 6;.i My| q^3˟t<-!B ILJ5cu-}z{| ǙP(˃Pŀ9: %KeT _+Yn G/j5\*ߗV)w61pӸN~3}YaiO~'2&f %*n%n2ßvfHXZ|Dې!3Qj)5\.y+~.S;Tƌ~¨?Ꚉ[y#ogD/#zՌ1Jb/g.XW**THeFN0Z)|CzQo #+貂U,/=!pyմ\׿ΪYZfP ʘKՊٸٸK)~a$'#Y93K9/ O!NrFFXZCwB@s|w^`4Q1F:gɁ UةXJba\B+P˼? 7t_M(簓3Y>Tf*bh\b&WYrOb&z.g:LYE3f&;If`+Ι)g6̤Be/?2cb Xr&2䨮00)YbI`fSMu)kr,`&zYb)bH;¨}^:,2g bm=86]Į!1aCfX;M_q1$|!3?̏33}`_nw+y%WgOiy UO<$tW"=B^k"(2B&Sb YL!)d 2W!J!K)dR YJ!C)dJSI!;)d kFIadQJRPd)ůȑGRTY¯αߑW3NƪeZZZN4TG˳d`{`V4dECV2 VA U 4UA  VNS`謂 ST \1I~f<_T1y-| ylf")d3 ̂Fd3lB6Sd ڽn+mYLtQ\:++mhJt`&vV PF\VW}!4nԅNUtO}ST-hSE*Ւ}ShTE*uOٔO%zϩb88n8/\>sVs5T|R!EЦ6UMmMmhSڂ>UOڂ>PY|hUE*:UѩJ5CZQfliQE*TњoNěћ yЙyjDpTl*sT6lQٜ9N*I%ُFhdD*(DÅ>T}C ߉Y)vΎa_c_;S;IvXv^}T=b88}w__vvήi7i'?a?a=/v]2^vo/vvK{W.[G٭Qv(t]:.bNKv.x;'m/+A|vjЅ䲺~oo@MsVٻDp9u:ˬD^>2z-Ofi/hIޭWחU*wu2X+ѼF󨀵 v2bwVd|-3Mt)a&fyYgfyYQaTf[l 9f{ٖh{V1s ;03 31;!>Gj/zz 2:!s+U&e5J)T Ϗ/k1xo"#,%\,mpV܊gf/3 3(yenkmiߕkRy+.UgU\^UΫi|7i\Wq滛1O0~<7Pg3w==}%^ɪkAb015>2՟+;XΈ_v"0b0VFcG#{9yˌ;+,VY i"] ޅA.ǧ8jjj˅ &:4`_qاdOqק(d8ڿj *Z 8R q"ϟ8</<N+oVN|}@"⵿ ÎC}a|?}a)/ +,S4to-h  DB+οҷAV30R.֏8`"L9L$L`:̀0 g`6=xs</y0_nտ w'Miɽ)" *ʎ(".ʎ "" (R*ˣ,.,]RH iۤ(-q2gf9s&Il>&jjjjB·#Hx' $$w.E»Hx bukR?*Hx"d!zTT沴|WܖhUiU ^f<- ɢO[5Mlߖ7L}=11100Ѳ)A,5L颹)Kl29DmOPkOy5NR EuUsY P#juSE]k(њZ QOP7iﲹhn ^?h(>a|sS *_Ԁ.jAT>]]uaܪqsxϠ^G4Vڳ 9Q[UW/h 8hǭ5/q wq VPhɭ{|?5~4]ͽP/T\+~P6Wɾ,"GV2e2E2Xue4qi⪶Q<Wo?ՙIrӸ\C)Pʽ|g||33|BawUq{S+_vrW =]^XCq %s|U--++q}ΐg=|\bդj&2\ Ta2gy\ìe2ky<˪Fh"wh2Zīh:Z- Wіڡ&:#:3+;z'B/w.C_C @ ` C!>0C 1s %m&c rZ1`1[9a.a>`!aLKΣ94Ub*sd.Uqgc;X-"AsriqŪ/d<>w\C8| %D}E)nxwZ/G#Q1y8j 97i7Ԕ 8$ 4u hC=ٯ~ ]پeTL7Cc.ׄ65|%ef>k&O' 4 }ΰ\5y5,B@1C{^eU Vxze6x#e3"yHY,w(Kx8i؏ה-؊"؆؁\.ŽףFeiNwa7ird gp^(&bλ%o00ޖי.fy)Go -ǟ|\3!Bbe Qdt!YA8,LJq^Oxސ>~}џ \ {B_/4C_B_Cɝ6BEHBl!Y8V \zCn By<&K=[cڋ2XLFpSc4AS4Cs@KVxMn2.7f hvhN.n艷P7ot UCJ':F'VRziCJt!| .T 1+NJ[MsF.;R1h9Kҩt*/Kҩtt*'NEDiUVz^WyU^z^Wy+'|> H\[eѭ.ѭnҭLI\1.Np\Kc.wӱ|t,IʧcѱtS"Xyth:V@!֘r }Kҷ-/}Kҷ-/}˄2oy[^oy[^oy[^oy[^oy[^Wm$Ɔj ت63PN-$-E}KDuu2fcwyUvbc ˔jG] C&J> Q'[zDa6b6#[1EŻLƳ݆؁؅H@"~>!lℌVOqgTEMC:,r9l@6\ٸKp2 .sU|W5LS 2MeWu'-_^SoŸnBe?D9;4PT1 *4eۇꈞtGtԧX7NLѺ3Z7tGBo SjuUcmca8>|6h|1 c9a<& Lsܣ1hS@~jS1 _c:fyRv\`.ak .",,C-{+ dVc GHG6`#6a3[X!۰;@Nk䴶 H؃؇_p+" p\kNqgpVHC:,Ȁ琉, vdKG^r2[(=lZUkm#星165D뉙gW ߘ7`~Xc~Q^5erٗ+\oep٦7`73Ûffx335@ fx33=:#:3+;z'B/`]ybca8>|cs;D4f/Nyx<0UD O23ĢMj%s̳4Oo=|n^X}3y)!˱c%V!?`5`-~B$# ؂A,m؎؉]؍$GcH||9Ȁp^6of,5p=̤f? qw/gR=\ O% {}^坰}Zao~CCް$y(옌#_D![_gb|EjTQLxU1z .ꢻ. w4E/!+FItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'uItR7M'u)tJ;N)tJ;N)tJ;.ʟ2yV,.z)ǭF7Y+u䃿>DLZ Psqtt VCG  1U5̔ KKea%^>t+V:KζB7s\Ng.SyA\^fWG%V`n:榃`n:榃`n:f_USx iu|HdU/*GGG??;;+#ݦ@.:~SoVߤ=-oc7=Mqc}EOqQ.fwbvw1].fslb6w1].bs\b.v1Ԛ'j㟹\b.v1].bs\b.v1].bM-*ZN!xc[V9a1`$Fa4>|Pa<& Lė$go`:;<:,",,e\ﱒӫ!?ct3c1̘nfL73͌ft3c1̘nfL73͌ft3cg3v;yQ(B1n! nMs7y&乛"Gc8.7YG)9"\䔋ry<:q?tp^*>!jo-ڡ=:#:30cbX!FׅOlņ"(23 4?=Svg moniߥ؎v\qk=w vzSNvzӷ;wZ;7ܻOwu_k'ھ͉I#ל1v3OH͓ߴ9uYm9u[uvň3Fӫ_Yꉫgs]q\wu ׭_}ݟo98rlȵ?FN\XU 6lX}c 71qcRt#'mO[Woݽԭǘci-̈)1scV-oL|̉1wb걵cƴ}=[l 3cn{0DXG5QܸI#f-[0.:n5}ǝݸ0_=l?1~.6v܎)Fn[m+vdg{Ono'm}SsQwGwL1s犄{F [7◿ 9EcI`w0;L]C4B&hhW uf~mP䶜FxhFxhFxhFxhFxhFxhFxhFxh1\}LhB| %q&c rZ阁o0}2;<,",b b5KLa\ [&MNp4s|;KrSUuBqrM A6exڌC//)CE ڌMg{e,Ufde6[gCY$h7fe v)9keAxh;ڎxh;ڎxh;ڎPvsDZ^iVzyT~Wܞ#\(_+18qRڔl,秈AJ*4ǟeb#/ ǎc8T28Ta:hqozwM>cFt뺆": 6&bλ%/B/B/BP/'h'1)KC 1'Cy&))~۞AcuX!}8.?A`} PS>'SBg/3i'4Y =-n=[Cn=[G[t͕gBoȴP]-`!~or~ ǶL: if1QZp^8|`>јO4m Im*kL |6Gvjs00 K ᢗ\h+=VbXTg:(OzDa6q&- }FcXk4FcXk4Xۍ$g^/؏8CqG2Y#p'q 527KZ*Ґ 2`9d" aؑ9/. rWqMh V? qE(-d`n&S-*Z5xm&ڢڣ:: z-x}{~/A!x`(>G# FbFSg1%ۉ2%I) S1 _c:f,|\,",,2c9V{*D:yB$# ؂A,m؎؉]؍$c|D$)YjNǬ9̔tX+!Y8/f 2 N(MܑgwQ s)d>@2;lL [-[# ['z(KxYaI8&τ=aVy=d0pB*Ld&m2SԤ<Ͷx^ѐMYYYe2fDLY&,hiiigiI4$fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6fiYh6e rT...K+J.hI$ڥvyvi]]]]]h e2vA̠]f.3h e2vB4B/U[ 3yR\whgiighLZgj{$W瀕D=)4g0 W.V^RI BiVZjz-d MJ4u $FJ#MZiVYFjH4R+4FD#tZi240M6|-NOfJ+6ݥ^0,.2Yf. .D{M3+UteL;۷=L]Nͤ6.fl3\fxv=hI44>wrr Zn2湈ƸD4Wqp΋AZޏ\>6p:[X!۰;ޅݴתuAved{H||KhGi%4 o'FN[iiVp& 8||DtM6Ϸqp<҆ӆchSWWd.$ 8My|^<)LSNSfţ1јOјИ(EIkΤ5'њӚhhVZl5g*xW4篔?RѠOӠРhЙ4Lt& :}ۨ Zt&- --:}}B>M>KNE[hљƿqٚZ?e4ӧiu34׺u?i4Lc}>ؾy0PaaaagV7cw6<4L#tyhO۶Ӷm+mJ۶ҶUҸ4n+;mq[iVw;ƝNN7ަ]2ܦ2g rǥҼOӼҼhV5$] &3 ZI Ϥg­p+-J O'“h%Ԑ&~/ixm(m$mFG_h6ڸ6nhiIOFOēBYh㙴$x&mB?I_N?A3hVy$S#cj&hfhhW uYbj hvhN.n艷os}}=11100َ'쏔V(Y24_`"dLA,m؎؉Ɣ&&hjuMYb<mMN2#C2SePx xCM1Xy>P#*x=LuOls1PMvbc Vb"D'yVzDa6b6#[1EXƳ݆؁؅H@"~>7~  MaQIIB2N,R*iHg93f@Sڴj6Th0$-mu<jZmVG xQ{N4Оր/aU?ԚKZSVk-ضQ:ZWiպ;z'z7X+zC @߾dca8>|b6h|1 c9a<& L3 1kS1i5c{vH4lbc r.c.Ӗ3 |Xf':yVQfh?! (6݌hlV q6l0_iWn$ ?cb~~A¯8#8$0_iWo88d0gigpV^Rئ" 頍i2LlevKpT)˸UxCE~k/n : "m(=L^00בW{溨g9[hn"^BC{mh&ZUkxME;GtD'tFtE7tG[%O{m;x/|0^'N/Nk~v&c TLט31 1bL3/B,}L4/2c9V{*D:y#'Db= -؊"؆؁؅H@"~e2|D5E,53__{VSy VC&yWyޘ|7qG&̃R=\VOֈaDð˒efay/ۣtXɤ0r140PZIf & i<d 4bB&x^GkZh7Evh//N.n艷 60PhC>>P|0cBgoD|mɘil9Gb5[^s-\д|,B,b)`)2eX~jE:ۊm%KyyZ\E&.q~)\|[Wy<} (USlQ.j )mU?U6<1G 5P'a0p|dC=Lٯ~<=%Tu—پF1k~Sa`1L ײ0]56}d;K +_|@"9otVDus]:_m?MɮiJ¤9*OӔ'+KORseY2-c̫|@DWre\."d9ʏҦDqyZ-؊"؆؁\.얙 S5甽2UbJVWHzLS~婪z 8TU%TpY^IcTwJ:kAJp *lm\v.Kb\הn˹ޫ{d+-JDW_ s%_)~BnMRNJ[܆mnIsϹRnGPLT'SF6 9I5|H7ɓ~!Xrclj,\o2XZfg|J7֖gugXW:,2n|yy '1|<}^lL;-tyhMύNyx n!/(϶7Qus-nN5 R.SyAx!3B v"CoCoCBeIū1CLg֐0뉷}.?A` !ei|-CZs29yy*L M^ =ehje2` u| y&$fh?=~̮z-CZ5E,fy-jQUe(`j$KLM -*Z5$U < E%[TE 5 |Q)/*2ρS_1jC1*6ƒvdjKV$ u2fcwy:,",* 88$B_ )$4"򌚆tXyVc?mÆ #q N\^e_5(ux㪎TZ(KUJSi|*OqwQ{(EQ?i=2Y c[a<x]#ꉰԯz H5ohgZaӚZ3ւm hE]u4s=ГVڋ-,fjuS{s\ `; 2Ea8>|b6h|1 c9a<& Lsܫ1jSM4|2m&Y>"mbcbc r.c[񷇖tmJVc b~~ X(lF񙶉fDc "CQ(B1n!\E ea-0f\,x%4xMiss@KVx 5@h耎肮聞x hʽ6П6>11 Ň0c>Hh|1 c9a<~jDl'a2+L4|阁o00s-,,",,2c9V{*D:yL5HG6`#6a3[X!۰; HădH1)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)~ SL?0-ՙ71bڞYg2EfmȤääääääääääää!۰; H؃؇88_qGp')”iaʴ0eZ2-Laʴrރ „ia´0aZ0-L&L  „ia´0aZ0-LՍ „ia´0aZ0-L&L oHRVF dcccI1I1I1K)L[3%aJ|)>Sbk&wLMP&Lr&9 I$ga0Y,Lr&9 I$gah#1 )3/0Lr&9 I$ga0Y,Lr&9 Db"s1\Ld.&2DbFjv:Njv:Njv:Njv:Njv:Njv:Nj餶v.REjHm"]4<eGz^yWGz^yWGz^yWGz^yWGz^yWGz^y}R4&BXHTF*X*RAdEbu+^on{YhXf.3̐\dC"EVnxoWE44:+JJJ444WYitV&&FgYiYUV,d:+^'3>Ԝ#G{UQG D8rߝ#y G Hi &xZ+׫01Lɘ"O_a*kLLFr:;,B,b,Iu5`œtW^^\T?x}X7#Ӏc4h8̽~,,,,,,,w߹凹凹凹凹凹凹凹凹2/:g1i4}L>&MIǤyI*UyW4}L>KӥtydcDwi*Ϯ|LZW|LW1LW1LW1LW1LW1LW1LW1LW1LW1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1LT1L=1L=_2|ɔ3 gӄi4c1E"2E\eq * c1A |L>&cr 19|L>&cr19|L >y]ٮϳ9Kyf7&}$>GHzI#}t Hw#}t>GHw#}> RDH>G"H$ItUvv.etnf܊w{.ɆAlg2a+ssJ*OzW9u=#a-=vXa?X.Ȁa*xuR*5>;]JD9?clŻ3)ڢȂⷄʄR>cr[\wpiU~]w1k5hܚVy W*60_˒wVa2n쯬W222{,{,{,c+Hj;K%*9Y& ZFސ6!nB |t4G#视^x0@5 b0X4|"OFax=Q#d ։GnڡƵs+\k:/Bh+Q=5Qo?\ǥNsa\1.VTkb)kb)k$+,r!}\(bVBVBQz^-+Y!+Y!X!Xh;#:3+;z'B/w.C_C @ ` C!>0y^(>f>HY$Fa43َc;%? 1_Ockf阁o0ls-\|,B,b.Ke~_vVe]QYdT2J Y|lz _O't$E~IB&r%ˮGG݂A,m؎u!Seq,dzBHEV琉,G,$ CZ}YTmR ZR+@jH V ZR+@jH V ZR+@jH V ZR+@jH;/%KR/%KzYc)d)d)d)d)d)Tguf3 KzDa6b6#[X!۰; H؃؇8_qG$c8>SHF RtXpypvd". rW3\H:΅s!\H:΅s1Dq E e?D95PTcv7A0X{ 8~,ҞBm3zxyr=^GkhCPc=X5CPvGBo>x=E? @A!x`(>OPeFa4>|0&bLhs0 RV{kVc Gy[ ;zDa6b6#[1E ۱Mk H؃؇_p+" sEc=Xϴ8d iH`X4=uOcl#e9\c՘`i,4rK9RNc)Xi,4rkwp%R7;de!e!e!e!e狙狙狙狙 f" _B—$|>JŤ{1$u]'u]'u]' HҽtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwtIwt:$݃{tA=HI $݃{tA=HIwtIwtAҽtE{^DA]'t~OIw?'tXF/>^ܝ/u=@$zD:^@I $$D^DE$z^LI  u]'u]'u]'u]'u]'$DI )$uR\'ŃN뤸N뤸Nx) Ńx:iZB%i iZB%i>iO擦i>iO擦h*)Jh*)Jh*)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh1)ZLŤh ART'EuRT'EuRT'E HR- E HQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQIQՊ>@RzIQ/)%E^RT'EuRT'EuRT'EuRT'Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$Eh AR4HI )$EhIQIQIQIQIQIQIQIQIQIQIQIQIQI )$Eh AR4HI )$Eh)ZDEh)ZDEh)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROIQ?)'E~ROI) Eh R4@H) Eh R4@H) Eh R)zKsq9pF^7P"G8#|D\q"BU CD#bG<""b!"5"CCD 1D b3A "f1YD b               N tG<"1yD#b>'#b s "f1S1[" "" " D$"&1IDL"bDD@'q"fq"#bo1ͩdsS g<P1yT̠b>ITLbYTGAT̢ṬbQ P P P P P1<*QYT|P ؅]؅]؅T̢@}G$*fP1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCT Q1DCṬbA *fP1T̢bE,*fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *vb*vb*vb*vb*vb*vb*vb*vb*vb??G<*Q1yṬbG<*Q1yṬbG<*Q1yṬbG<*Q1yṬbG<*Q1s *fP1T̠b3A *fP1T̠b3A *fP1T̠b3A *fP1/QqQqQqQqQ1ITLbD$*&Q1ITLbD$*&Q1ITLbD$*&Q1ITLbD$*&Q1ITLbD$************>O2T\Pq*.Ce 3A98TsPq*A98QQQ>O̠b3A *** 扛*WXD&Www=o'b!*d b}+at{Q{Q{Q{Q{QwybS bTdy gEM扽؋u"~e7' ڋ++q_c-_.a__~ҦĿwuED,"bWG7]}yb!""b!""b!""b!""b?hn}zEkc=c+Ѱ=cu1Dc3t1;(=('=2x/;#_%1)Tb~Lp~?G ycD`L _+cV4t]` AA=Es[6GEt1]Bt]l-vj)سe`7f]Vk!m3To#.ham\۬6կ.&mR,6˵͐6CfH i!m3mZm6G*TtSnMZIK7i&-ݤ𮳴t_vOK7"TtSXH7"tSnMQ)J7i&-ݤtS(tSnMMvߵtRY RZwRHVw-V*J_JK*iI"T Rnoz1J]ًJ%g %-T%RPJUBJ(U *T%RPJUBJ(U *T%RPJUBJ(U *T%RPJUBJ(U "T$PJZBIK(7yWZBIK(i %-%PJZBIK(i %-%PJZBIK(i %-%Pҵo;i %-%PJZBH( "T$RP*JEBH( "T$RP*JEBH( "T$RP*JEBH( "T$RP*JEBH( "T$RPJQB)J(E (%RPJQB)J(E %-%PJZBIK(i %-%PJZBIK(i %-%PJZBIK(i %-%RPJQB)J(E (%RPJQB)J(E (%RPJQB)obobI($J eRBY)PVJ& $dd@2Y ,LH& $HQIK i $-%sACԅ7#}Fy\cf{A-bBb>^'mXo ZOLl:zPwY+*o212O⸗8{>ϙ:bb_bb_p$2- 'J3QL36q>jXu]L!]AWF9G7э}zoh?kMVDZ>XG0nyhet:#B O6؞w]Zi۵x- -qf˗0ٞ_ӟ.o}cw1PP]G-+8N Z'^I|1=֣^+\$uʺі;'fʽ_k?\5ý^uW=Fb~Ji8M}i?O'St }g4E ??Cst(F/Ѻ#h:x:7zO_:i2Cqt<@'IwTNT R8V*U}XbRZOKbњ..C ëmw GK~R/0ld"q9:NhyYtnԇ_}pkicip,?Xwh"NX{hO:>CIs\2aaaø:ø:ø:ځځځځځځY\\\\\\\\\\>\kc T!i^Qz(F:P>|÷>|÷>|÷-o)|[#Ǐŷ-o)|Kc-o)|K[J [[[[[[[-ŷߖR|[oKm)-ŷߖRY9K1g),ŜsbRY9K1giM_ү-Mwt M[i:nIE]Mt͢{>OzL͡G/c8=AOS4վzzzzzzzZ=Rs<h5/^r4@! R TҖei^\Tn)OF=ك=ك=fxڪ9U0tcafpEr#hh]3fe1-D/4ܼw2H:aUx<=O7Gh6m9Dsh6Gmڕ{lp%-n wK[p%-n wK[p%-n wK[p%-ծX`y"D'G]Z4v%,˳i ϥߣSN1;UAkpu\C? ނ*J"qM^EY8#'t5[Dsǽ1x&|'׮\kYt9 ?ނËp%.p K8\på xF{͕ǢjWp[֯p KEX<<Dž՞y+?nyJ=E}=Haz?AU,PG9X{cmwRiÕnW[sJ؁L\+3qef,:(r69h4Ѽib*-Hi_Y; :l_*}NߠlBߥ1l&ͬ]CuW[^C?NxZՃy)M7bt?Ksqn6ƹ87fl]"r=Ci uRuS2Zʠi@Ez(}~4Hy*P)Z_ŹE8"YRZ&WK'#N4Gun6ƺX7qm+7Θ̀=_26_'-ɪv=or=?|='fpך==hwl#$&GD$Έ'ΌV3F<@<3zl^47|0q/ZJї 2}ߠo}Ip]pmĞy9Ĥ`jb`zb?OX~&&'1 7qL0-qrpO:#x:qfp#~pnpYy=:c&Оcǔ65y=J .kOo4[mi{ځvhgz'BDڝGЇ#'EQ'4?@ .]ٕp;v^m5^ekwc/eޜ3omF}̽- naiX*Ae9,堲TrPY*Ae9,堲TrPY*Ae9,堲TrPY*Ae9,堲TrPYv)!֧OY|V%&E}Y~rtPr7v>,')tF}}sW12FY(e,ceQ1ʜ=DY(e9,G刲QayaX^ayaX^ayaX^6 °0,/ °0,/ °0,/ °0,/ ps={8Nqe.t8]2Nqe.t8]9EhNSSSSSSSS[GδWH{A#gșd,93^LÞw$os-Ӡ= k*r{ں7ީ>b3b3;GUߣ{T}Q=GUߣ{T}Q=GUߣ{T}Q=߇{ KtH')ƘMimvǯRW[6;Oof3j*>b0b[wIQ;~GUwTQsa;vGUjwTߵ=R{w="{#GUӣjzTMQ5=GUӣjzTMQ5=G|=,_|=,_^n|顕K^մ6*SJƔ1dL)SJƔ1dL)SJ7(wc#5`5tj>D}6ߢFxЦ_UzD\fQZ-r(5z-gmZoc3gmcc:1`O){*SٞˆvxvO ~WWr8O'`[S}ˑͽM=wCfKҋҋ=#?$>B{^N)P q\: 8(6r\II+Wj[I;^E9,Z(rX(rX&R P P P P P P P P P P P 尰9^i (A{K#5G}yd:x:N/ҩt}N3L2}J_7,:w{'g2]r4@! R ѰNN?'btdK5_WgW6pxOG}tW g:VkWMת#j#v=7䊍7i^ڻ '>Ez~j^;3mg~`k4?+Wp\y=W^ϕs\y=W^ϕs\y=WNʩ\9+rTʕSr*WNʩ\9+rTʕSr*WNʩ\9+rTʕSr*WNʩ\(W>ʕr\(W>ʕr\h3GCqt<@'It2B_S4NgЙe }F_oDs~.\?r\s~.\?r\s~.p}Y\?gq,~Y\?gq,~Y\?stӹ~:O\?stӹ~:O\?stӹ~:O\?uUt靜]5V/rsNZx[bM-i+;h/-mh2.n]i7hoۻ-Cu}{{2؆_Xϝ'A]TbZ4SrTJ@cr$zekz׸βBUGыMh&f4cQ_8}&7}C?,Zy/D5nyDk:gMGGk ш?:f0Z9&uy9ʏm*cHykMzZL=_j-S>.pRin Z2s-Y-C4=zcj7m*zBOE/Υyl}r!=Ci uG϶&-z==*31&:ʉrΪ􀞾ϸuNQ5sWDeZk>iٜV[>{u̞1h3:j6QYU[_~s$H.<<ޞP'6߮ZnyW[ˮrGz;|x\^?b/~nIx%>x菉q{ =dbBĖA^oMlKG$Uk|0fZs㣖]7XUn-`׃j+[7mFE Ec`_S=&FxeM5zos}`|ܠuuDO?̖ ^AđA"qt!qL☠1qrԠ)qfAs[ ĕ+ [&҉l]b01p@n jt0 n|=o8"@Q Gj8 _lbpZiGNo83XW >pny jNpaÅ! 7\|ᲆ˃~pMpx~pCσcnj)8W Nh .lxࢆ sK4,.mlX\0Lm(6 o(7w4z081xT`E'5Nmn]5^l 8qfm ^߹4h KoƱ+/ninqt]qW3o=1;-L-nVouVs>doo};vw;~mmnlGo6lk~w84}Zno®ͻmnvn+&~d^'uc}>O6|rOq>|3wq~ ПCo9C>C|蓇v{Dc~'p-]_9}/>}k8挻C<̯yvnʮSnvJMn?9/;]Νt={չw98/V{nUۨmT*{W}~Be'T=FE_P7+zzEoQ۩T6yjVUx3'>)}Rr?Bdf PJfyJ^yJNI)I|^c2dAeeR(BʤP&2)Ie(BʤPf\2?Be(s!\2)tIK ]Rr! d,)dI! dIyO'{ϓ9$'d@h4f 4F !R f DJ!RJFkDAk'e,.O }RBBIr<4zfo5՟5_n$?*1>ղZmVfjZmVkZmV[R]5%֜{Vyu^MLޮu7ݎswܯp9Rg9=όuƹsG8{&=w;ѿG-+p{#"2hi˃&3nFGHGIɓV^Ӹ8 /䗍O]&Sd LA)H2I o194mSc ]SxޛSc NnjB)8 Sd _N|9A #MWFQk@}>o'휱UcH9Dg>.qa\pӓyz2O/b2OO6vYd,Se \"S2A 1#c9k&"GBi3J%ڸ^IGy IF]inƫ6ft3^Փ/if{if{if{if|d}^&ɴ ڼr_ㄨ+fy?"X_QWҎ]]ъ\Fl#FSj֮6 v͠/o3vc}{ph ~QT#ީXwQT^ƨ1enslsd#p\jUmAՆ_7Ahƹr*rUnW Un( PuUdQ5UcQ5Q8Go\L=QC~W1TjWz!ղ&7F|*oEyOŴe5wآ-ذ6?KhABU&TeM;9nW渵^eWxs8gr+6=tPԫz-o]x)G3hJ\(^K(Ҏ"t#,'gѓ 7wpsX=YruG:53:Z8 rururWOg?F#󢪼3, 7R(Mу,g9}g9=YN~/AN\4$ q|,g~\?l|G8?YοWK#g9>YrǏpwp(EEU܋VR6r|F8~gps8~(=Ez%Q%x'ߌ_r+>y_^ϗkg=G:_yv닎5Ni/Qu7Y9~A%]]^rT{I{9{k{K{K{K{;{93vޫkvx{xoZk@'7, ;M-?Hk.AYtkxCzOStr2h\`=p#p:stzM{N9tN. 8`>90;y$|\qup\kbQmwz됽l/됽.~{[|Z|g?(/]qpE0ῴPE6mn$HzLeK4D[k9Hޥ}ul/KKܟz_ǖ`'mp6Hk8YO|IO'T#_'鉓E"5y[].kGkimvݦii-&Hs>ڽilx{<"%:#RH'o|ĸsm\/5vgy0IeFU6چU۰jVmêmX a6چU۰jVmêmyTGyTGyc;g'Vaޏ|jVaSߢ>–=[vNTpNeTxoypYveMn?-8߂-8߂-%s.-ZI٨| η| η|Kη|Kη|78Bmt{[{VՍkv't.Rm}Hsyy^y{x.Ͻ7̯a< o:ϟ˵98 |+ɧsO%`3p9g^:qDyt3EII6VfHϏo.K肦T"У .Ę:{'6| tycx;mA[jضN;>w+'Zw[Wq=fƿDyc66; /B"4//B"4F _EXŢJ+[4(i~_[0khDc>WV#>1)BojzPP %Bhih0d0d0d0cn_Jk>QTEQTEQ4͛[Zt[У͍^0gBsМ!4gV!4gX]S `0DDO(mۯ`H`"ADcƛXjVY-*q(Q-4>ZQVh| l|LMXΡGk:1 zhErɍO{/$q3j2c_`OgޟChQ =F{HU|^K/5˵T^ayJ3)I Uj=n?9VieuV4Goң7I٤-ZEw;zVmxLP uzzG/ B oSo-hUuzN뤺뤺N뤺:뤺NuR]'u^]'uR]/SuR/?zF|=GTj9j9שZNZΫZNZjj9ZNZj9SIMOSӚLJM'45>M'xRWUj|Tr:=NM'[ozGr5TI5TI5Tϩ餚^=zZР끲w|m}j}sps>$4z^ m LгQL hB-Qm)',QrA<0^_~}us8njs8Lk-[oB\Z*vl{C4 8^dslnoq>E|}q:狎ECX"p{ƫT95yNpR2\ZL=hS(2AkР?k {mΔڷmBȿM v. vn v  {5W?4]|MбtOFsϣoF5Mߡwt ]N?te54hY4cnu,7P%`fvL [VQW;hږN[F'ioZ=4؃>@͇'GhOڋѼc7=Ŀ5^Ot}>Eҧ }&4IayNGБtMgcAtH'ޛ7UmOҤJ LXD&AeIQ*neYERE)-ZRҹIIShxo{;x׵2kg'D/du"L"W=sZO׺XDk7a&̂ܞsי!-Ma6{x2a9ܽxXű@i>Σ'ΕGG !$"nGCg?#=PޤgaySם8c'+Jϟ*Oiqt{Mb,k_[ h C B¯pD5G s?.E% R2\THt h12:8 c6@cF7z J܆2QBeR*B%@kRRC QMɼԆ:P€ 4@Sh.B\aJk@[ht."ѝy 7 }]+u !0 ˣ ( c`"L`2Lx43 ^y0 `1,a),VҢ5F#'𙼬 6f"([ v. {TN| A~DOpbgbW 18'3pAH7dt<./^"Qge8',/^ :.w%"Cmh ajxV40<@aCa 0QˍXnO܄LT(!!jƄ|rP|h-s4vu4GFGFGG#ֿHfZ'ðJ*2[Vm1V*f8ͱ;K ;,cY&DfErg m/3S1efzb!fzbx^}hHy3<Α%DM}>ReG5YK2gd =F{fU9E$L/336Q7KܞW=^/yxh'Z艖 L7Z荧SƓxzxxxhM}x>=79Ԑh3L42%++AL/K-R3L/5KOKzڅj 4fZ@Kh v:@G tݡ􄧡>ho%,A KP%,A KP%,A KP%,A KP%,A KP0&D$=`2LGg@$Y0 `7쁽pw4d4f4f4V ތhɌQifTfFQifTfFQiJ3̨43*͌J3̨43*͌J3̨43*͌J3̨43*͌J3̨43*͌Js`TfFQifTKKKK?{ { { { { Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)Uy)~Q_%E ~Q_߃Em\| Ka,Zd 󄩦jAmu! A}F 4f=JuXM1_ yiĄ3bfTLZ/%KI륤RrǍA{P7/EJP7 fA,;>μ&ԂpOXO-pY E,~ofP2K@ɼ(lJfAɪbP1 *fG`zFQxʕr%\(W1ʕrQ8+:rţ\Pd"QEQdˍr%\P.u岠\\^ˋrYP+岠\˂r%\ˋrYP. eG(\^ˋryQ./E(\^ˋryQ./E(\^ˋryQ./E(\^ˋryQ.΋ryp^ˋryQ./E( Ed8/E(*AJP˂rYP. eA,(岠\˂rYP. eA,(ZrE\Q(W(ʵrDZ\MQ.岠\˂rYP. eA,(˂rYP. eA,(岠\˂rYP. eA,(岠\˂rYP. eA,(W eAJP˂rYP. ek&*3  "BaJQR)EaJQ?)EaJQUT T XP #>e[cdR:SiTrt)9]J.%GK֦lm*[la*[ /_d>^75+ Zh'sEWyGD@7='< 7 0` 00#`$<`4`, mxޅ`,%; X%}b% &TvfM'EH,D0ƼLd*|~}n>75U-彵-*۸| _v;a=wdZ}[=wG pႼP1z^("p&xP 6;g6Fa lρ}P}P}P}P}P}P| A~W C @z-S2-o)pWfחph(˂KeN)]8 t.҅CpH!]8ˠ^)Qx.υp<\ sr.\΅˹p9.\ sr.\΅˹p9.\ sr.\e-s`.oal->m%|a]^}C ?a_ c 18!.E% R2\THt 'cdup@ِҎbQL;iG1(ŴvӎbQL;iG1(Ŵvӎbڕ` < Ky>_p?ppppppppp5:j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(uԫWWGP^eȖ 9+l̓yp6<8gl%|ahyp7<wn̓yp7< ~?il w)8-3p΁g"XXvH W Ҥ6Іp@hm8  9﯑ug].+&i.nqJMR[ujHT$ ҔO4hߓ,?}M}͠9Ȉcd12q8FF##Ȉcd12q8FF##Ȉcd12q8FF##N׭ ( c /L1V@U*s4aˑ̆9:7d)/E -c!U "X K}X dX6oJXE<,VSi 0Shg?Qg9ֲn"@Ԯb%xF}d#6Ljc1bq8Fl#6Nu}MM?W+Cc8Fp#8ʼ278\7'I `i04A f3H$ `I0$A f3H$ `I0$A f3H$ ` 0#3Y0?suxބ<-X(3o;.,a),al->m%|a]^}C ?a_d1~šDq(QJšDq(QJšDq(QJšDq(QJő2IyLR^&)/ITBeR*B%+AU:ԀP jC aP@ChMq0\Riz@[ht."tz\7~ A00`,(o"X K}X `9U"!fHY,a0tE:R>'6& [`+| v. {10o`-|{~C ?a_Iqp~p 8 sfH"\zVŠSXq +Na)8U&T2 S1q8a0q8c1+nM@ xe)IJe܆2I$pf8IsI3!i4IHpRb8)1NJ '% ÍE(0tN: 'Ipa80\ER[X:bIm%L,i?1IpRc81Nj '5IpRc81Nj WVv$1PD`2{2WW+j׋OM9fиE3no?6Gyl(-bha甪Rj@MM7pR[Wh*)u50M3ҀOq+nμ P91N)L,Xd*^UobrTP%4Ntbe18U="h@{D#,!6>7 D?TfG[#D?OD?(wGb j 8|рDЉmʟWk)XtiQeU697J[pS+dtQD i%YN42RR7dܟATkKdR?U~2P?S?)O ]%.ȶbl#>m'gi֌5K J3L ~<xT\NcbbZJN}&=6l?.dkŻXxSK:}A_wxbƽ3 78>ǧS8>O쓋c?p}e[=p|]ٙS)q|8>E"Oǧ!w]#.^ Ed0B9xjB- r"4%1%-#!333333QHhJ'iIvi'iIvi'iIvi'iIvi'iIvi'iIvi'iIvi'iIvԙiiG}iiG}iiG}iiGQQQ摬}$kj!Gi7iMvݤi7iMvݤi7iM. MHbzgcZ"14̻1JEO5S 5Y:8$^XC`=SH>jҹt$;INҹt$;INҹt$In1GJ1z=Ѥu'iIZ֝u'iIZw֝TYF͝G]Hr/ H><0]f@$a;쀝 v+ˌ}XBTJPAu#H7ֆ:80A=Óˉ!0F0 F{5Ke(Q*TG,RYGE1b<*yT(QQ̣G}zf$ImFRf<- g, IiFRfIHR3 .H4H16f@&\gU!rIu᤺pR]8.TN 'ՅIu᤺pR]8.TN 'Յ© `rPBGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> ՅGu᣺Q].|T> Յ§ '<0^0&ϱ0^WU `:̀Hx |XhJG%㣒Qd|T2>*JGJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U*MJqSRT)n7U**********************E<+*%*******EJub:RXNT'V+ՉJ^Ȕ-L9 y{|S1UM@ xTPPPPŨ%K73R\f%pƟbrFq?Is.5_-$p&^}.p&qy= .,/ Y2Sw`xPiJ=[v1zWQ[=}༁}>S l_޽EKOP,$4?E^򦮏lglcz&X2#6W>IPE!yZ<;5K94œ»,cmSN?)]%KsHع"RDo\H"^$Ye) )>~wx?ku!4D26򖩆c 6ԁ>ChO@#h OSB3SMbcj^t5-l=8oX,lQ6nQd<JDjEuOttHF񚾲#fbXUD??! b>UM|w'z>_|%6ep2\p97^pCupip񝡿a8/4j:W7W tPϴiT`ѤGG[p-?T_T~n76I}ރSPm‡COWht?xf _Q{U;ThXqݵTVWiT +4iK[U^Omzpiݲ?l>#a+OI}];i?MwU->!h2Oߝ/LNn6S^vFw6ޭ{1{\:Ws_>Ox1YfyW_'j!jӤC)+Mh5POS6T#gOnbfZLJJUTRR>NMEi&NBg{MP?U6YJP)*uJDSTy(ZTTWE,%GQ|,%GQ|g' Jd%GM"X6/a),V*VX B|:>`3l9l/K Esh.ͅP4B\( Es|$.ᖷD1ǨnG" 4"ͣ+jd3Vݚ 5ɫ*ߪܮE&_aHSy] _HSЀ ??̟Xgהfl yܠ_eQ18./QF~2/(ՠ̝ 92#(yC-"F-bnd%<+ӂJ|51|pǥ \:KE n@/u^#O>+ _Q9@׫Cպa0팢'|Ydh's aga|4?F vH,RLPM棵yJ8f4MxC+WerC(N(Kf #o~_ ~1!L'ഴp,ăAM$sW. 9ڗ_1>T~u'd%P.>t*Je.StB'⣓OS3YL^♙<NPpz"l3?u@uqy4wHrzdory;HhA(%a%aq*rjqܞU%eUS&''RKl{PbD[PK&cͱ1sl~ؤrlnslnpl96g86MZӐ H$_pRU)Ǫ4CtQnf 'mz]T4}r\i3- wD5Q6Fi( c}Hc؇ r@OA+mV{3`Jh%;ԎVj@+5LRuZԅVPLz2z&#*[50檴emyL-3h 2$B{ОNS=~;mỵ-iKB{^#h/z\3D<&hF#_N ]TfCxaQ̫+zB2o2xM^+#qqlB !?y/xvLb;=pEc}*}\zu2LTSwae\E古 RZ )AJs~$HJs4)- Ih#$4$4 ABK%$]6,oA*s2,T 9HeRYA*stRYE*s HeE2iA4 9iASX:IAs HbUIb?$/ArI[$3tRV)+C$U]!U]!U]!U]!UIU餪tRU:*D MtT:iAr)~.EY!)iAZ -eRHKҒ -9HK@ZrRIJY$to"H hQV흴ǙׄZPɛ>4&0]OC$a;쀝 v jȕV㣲H?2PTjPjH?3όߌaPC8 hIh}к ,<a̖90^7MX ]Ʒ#1ç.al->m%|5d v _7p'8 1  cp C"\`K`e@&5nj Y@7fCTP c#(ա@ aP;7T_iҚC' ]+D@7='As0`Qpea1 0&K0 SaL < `1,a),VgB 6f[s_lvnh(>[ ~?/ 8qp~p 8 sfvUC"\p bk o*M7\ȃ|(7LI)[r  y&xP*M6CTA5L5L_Z)PLD柡WUs4Qzi8NEjPjn)$7) Wg!jŽ}=+l$ij?E4!w^ gE7>j$r"G)OjzAi<+A_CA;kaC%n),cySԥvon"\Q 9"j֦~~fPנdZ,ϚrX+a|a ! >a|_MalMV%|a]^}sSKv Y3TQ;5zy1Z+j?݃hjX8. Pk%ߩu=Ej/5C{;Y:FSDw.zm좍oick3=KۖeٲT-ڴ`z&tm6͡MshM&46͡M7ѦhM&tm6DЦ9&tmCЦhO'=}5чrhAMu&ZPϴP4BEux[¡2J4uz-hK؛vц8omIцe'D vkKUŨ(aTd[#9RGT'EelIzo0:[ ~z0[3m5^e|y6Ƙ1aycƘǠ^gNz ~g͘ NSLf,OyЍ7B iVPEE~c5';OrH,=E1i%׈Gh~]~=R"=r@?>~F3A~#HE$>OOLzՔUrӿ*yp5KԄQN&lEM45$ajIԀ_O 8p>5|jgPuJ׀55\;jkZQ%S^kEژ/7@!aJ l<*ۑH{Rbfvd<#!&hzz&Pc'yQiDӈ15OjU*Jeܠwp5~d !ݞpAP䵤VRn 'I2uFD}&Re7pJ}'*2d<s4'5')n- P~( & I~( ?_ߚJ%ᇒ{ۑCI$$'I$P~M~k~( ?JE¯A¯AoNJ¯AoNK¯A¯A$G#I$H~$ ?I$G#I$H~$ ?I$G#I$H~$ ?Is!#[בבHHp6z\ 9~ ^6x 1-lx2X+`%`5? %%%%%%金Ha$0~I?F#金Ha$0~I?F#金Ha$0~I?F#' ٻ1BHy=)'82;ܵ"8|ROBGiR,K9֤8{8f2wiRѲ7Ѭe}d:I;N W#3]"O `U2[% uOy'y4zQ 9Jo)5XǬG4_74#!f!*/G3K&4_X:[V,c+[Ζ_+< r9C!{%tc1 r~/XD7gٛxAc^/x^i *$?Ϳ㿪h1{&hÇcp 1|8>Çcp 1|8>Çcp c18F c18F c18F c18F c18F c18F c6Æcp a1l8 ǰ6#Lj1qx#Lj1qx#Lj1qx#Lj1qx#Lj1qx#Lj1qx#c$aτp:H1+q8Fq0P1E8Fc8F,c8F,c8F,c8F,c8F4cD8F4cD8F4cD8F4cD8F4cD8F4cD8#=.M)qr.qLSlDn!wGVSU3f?n(~E/qTˆiLUe+2ʲePc*QBa& O SQG2Om0+]GRIiw@uD}[ٺ#lݑ/C$C[ů+Q%uTpTq)TpƯd3n0܀ ^ fPIt0Ze<:!\(70#|]0p5*!T ͔1 -%^B;mD/7Wr)?zTCT3]h4-4u.=u2яhts!zY܊^kqt-{6"O#O#O#;H44 O#O#O#O#O#O#O#;H44 OC_hmu]hd1YFb4,F#w]h.4,F#]hd1YF=!hbg4q(:@zCнP)7 Gf;Н~tُ@wZ;Нhtg?3 yТ;,4d xA=*ox'ocyc M;nG$&8R9Rr^Hrrjr;:$ΌΌX{8_)K ?yLߜ|Y3xD [`+}<؆[SSxp\[x5ۀ>[>+J^i+mx 6҆WJ^i+ms܆WJ^i+mxo+$2 L+$2 L+$2 L+$2 L+$2 L+$2 L+ᕷVF&aajXaX'n,:ƑOWhzd n?MSt(Sxֶ' OFasm`j Uk*]R4ϏM!Bf0- Ȳ#>ݥrz>4M;)-- ,~`J)+_ߙ+QC单Ǿj6ڂjkWUZSiBkV9'5muyhL`ލy?{{ٌ|* `$#V;ƶ*G2m=8r͋fPwA"u=ۺ+;8ϒ9ϑcy,NkNbtMr2]H. k:>QmKV>s?RaMl5o}7c4=pFM_ hxe?pv9#+%_#GqpdsdGYM紶^G͟{S l#wf#gô$OopTY*j3ZP m5VC[Mt IiZ^[^aQuUU}/~{5qJRR&qEJ)(aJ؉)J؜6ޞk=5P+S'@UC*kOU3s-5\"Fc!W`!ZT'+ii~+U)k_S U /|_{`/K6dc/ΛlŨ&l:Φl9zΦnͧEfSo6MfSo6MfS2(SޢOgS6MgS6MgS6MgS֝j5]vteo.CrTZ6'\E\E\8\EQȁȁȁȁȁȁȁȁr|%)E $g瓳Z|ԇȁȁȁȁȁȁȁ1>6!mDnۓۖ6(kfG{o^}N[< UlӮygbMț dXWF)j,֜5cXs:ŚcX9kŚӱt9kNǚa9W&w(N$G-+Lru!\]DHr5F/cXs:֜5cXs:֜^˚c6ӱt,:NǢӱt,:NǢӱt,:ŢcX,:\E_ŢcXǢcŢct,:NǢӱt,:NǢӱt,:NǢӱt,:]i0i0a;v0f`6 f`6 f` v:vaL <vhm `7GCa`|=0i0i0i0ax< wdN4N4N4N4N4a; w0; wo夁7sڱb; w4N4N4N4N4N4N4N>xY5-|+l~ƂvrgIӞR)6$xRa{+c XC*֐5R|*5JͧR|O7$(I K7 c|}o9V5DC)PJB2v*JmR۩v*JmԴsSTj:NSTj:NS:$KRTj,KRTj,KRTj,KJb=zQk+=(2r]I+]SU;t~jB`3}2Lwb%jo.v^gP aup)Wguw_Kob,g/z^b W0 L%tA.n;z^xp ` D0L`$I`4kO3Yx^/+Ux3[`&xfB ?"b]qCKGE%)T&gJJ%TNQ'?]Wt~/bt;:wD/&-կT璿_kUMzk7țwZ_4S1fj^ ^֨чe_CQhP'U9+8SJ}mc^sŌ?uXF7!uk'nk(˚Dk=D?z5[_6 gY@o^|Ub1o"I{_/&j/KEջTw{?x[.Ebpo#7nw;pL#'Uqer2zyzJl0|! UD`5X ZA6(A9[VM;,KQ2:&3%q{dp^wݨջ^1{ǥG)U7W"bj|jZK7zZarjMfQ,JE)YN)(eS,JE)(e̢Y2RfϨF2RfQ,SXJEI(i%͢Y4 [,P)t*%]Ŕ4fQ,JEI(i%͢Y4fQ,JEI(i:*cw)a<%QJr.,wJOR:RSxJO)uwc0 њ[њ[9}&>V0rH@nzufr37;d pֽVOf8fmQ̀ ̀ ̀ Ͱ{O6n36n36n36n36n3~pk44WP~ fmfmfmfmfmfmfm\Z̭(_{Rςd 3i3=u9v|Cz—YחK3?JYƤQPmP QcͱQ} Îl}6w쳹c F,^xp Ɔ F,`Ăj8D<ulDrprp}:Ƒ1RIpx c(<1x c$x c<1x c1 ()ōbN) Ihu}<1x c<1x c^\mvxuyErr=9R>Ў>N4^Fu9,'u,'ױVNGF-h/dL&gM@S:Ox&ޅa1,~Ic9su4$Ċ[Uux\hH5N1hGMA3֛^ll2eLg=\rĽlPq6˗UJ[VM/vr?8G<.bX hp2O-»U/uO'͗OGc0,Ћ% VMzƳ~u}PWE`1X'#^^R u^T?Z;آVP!* VM}-"U`;Yn,JlQ0<~]p.L6fVx[{uy޼v~üC6d9`:x[z,W0 LrvG t  z 7~?A`00}?#(Nzp'w0 t x< Ix<ρ _Ex^M0f;`VgQ˫ϩ(595p\9V`QõFڨwcce٫ΝX]hۘjEC5O|ҿH*kڵP,g\BJsk=Kb'ݏMRȑ8k\h%2x,E՛@0 `0 'a`8FQ F1dp 8Ƃ`8h&u(Ca6p; `%WU N/1NJ_ۇe_Nj۔q.wqz ^ZuxoLZzy X`V4+Vs+`'v(r{>!PIRﴞOg9l0|! UzUV5"ll[6ѶZV?nKX>w=V6d?cO8nCkbRT95)QRU}HU]dtS*+q';#؆cYf%/K>r"/W7εROK\iw1ש|r\aTK9jG}/W׾_j*Z*ڌ*څZZ[Q.ݴJWoJ. l騵 l;J 5rr$Qʸ~39^C=y<-$%vwRMBEb4jdFʏ'R< Cw @1sFY6Mr}Njjw Pj[}+eyLKyWWGK_(!3({{}_OQ&__=}.;;YCj!Ւ0rR-@vz 큡TWzEYw8ͳ\D(Jκr(ArPB(y"%"(L˽Bˑ_XGN"(}OۥO 25W%fXu1W% aV1VQVN:/>bwzZCԓ0k )jU[ &[1O?3"h=~:Egjrfϝ羖9[<~v29Yѳf,4WMVcst{zcbĦɕ{4Ɨ5~ȩˮ\z3jvֶ֯i h[9f39OR]oƵ8Ͱhi ,Ǝ_b=(`ʢUU\!~qE8+xD?W\#;",j@U͹LJpђx׸I.U>}6/U[<+m|>j˷h+4r|kݾu_d_}Tf;l9v%֜ʕmygNSSU|@hNǛ=[j?Ee[Z-z&۳Xoz{wPYYi=cR}c#/Pn=CyW߯I 1diV]o̐oy.aX.}ڍث}ɥQ[Xl'Not.ыݳu=Wot R7oY =#KT;o+)2B=՗gځA'.+gz^xp ` D0__3_3___3_3_3_3_3_3_3___3_3___3|璿.z1W'Fs 8Nc 0\1o7zy nwm,`*Lt ?K0K_z_`>x~dWb/%-s_K 3:_wr|!)3V)qW,G|bLv9oA%gro'Ъȿָ.*ە/Zz.揝sգwG^ߪ:IOVA.n>K=W>/` ` Np0@8 cp*C(:Ɓ3Ylpmp]]+*p5'Vߧ׃Mq^np'wx{6|pu'jv5;ǃ~ @} Xf9Dl \|=&5IOv_zf@\uוzk>c?z_ԫ]/+Ux3[5AA>XH|XKl,O`@X րBEr%`"P_fP*js+`'v(~{>!P j)`p}&@ `g C00#(Np 8UONc 0 p>Lp) \׃;nw;pL{}~}عx<O5Si x</Ke x^o7 @{h0 #1| >`| E<_||BX~r Bz]V ~A͠T-`+vn{/`^_ @n={/`/ا 8hgnU5u@e2"0xr)ϔg3UxLsL*QJtt*֯t/˔nYrfO,D4j縞fglQ8A'L`iz& mx &mx MYLmu>'2.BPE("qʸe\2.B PE"pj5\.B PE"pj5\.B PE(U̼\dp-ܨ+Q ( ( ( ( ( xrf9^Y,k5xrf9^Y,k5xrf9^Y,k5xrf9^Y,k5/t% :Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax(4Ax 4 Ax 4 Ax 4 Ax 4 Ax Z-AK%xF Yﰚ9ephZ4dv=@.t]A7ǃ@o@0 ex2z^ ^W/ëex2z^ ^Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^=Wգx(^ ^W/ëex2z^ ^W/ëGzGzGx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫx|z>^=Wǫ+x z^^WW+x z^^WW+x z^^WWWx0^=Wx0^}x9x9x9x9x9x9x9x9x9x9xExExExExExEx2adp 8Ƃ>Ylk]ΗMuŭ`/ni-Hq+X[.;ʧw*ăf9hz z=V+DEc!X=Bc!X===Rkd!4YMFda4YMFda4YMFda4YMFda4YMFda4YMFda4YMVȍ`8`YKMVy]V.",.",d]BEetJtY]V.+D etY]V.+@ etY]V.+@Je2tvtY1Ĉhڬ5Htc*`V"h-F+@Jh+\贕tZ!:m%:AEi%0:-N 0:-N 0:-N+@[]0z-^0zԻ@oGla4[Fz'-n[n+AEmt[-\] &;8 I>h&)Ml͖ `f+6 WAY FoAmAmAmAmAmA jhBZ!ZVV+D jhBZ!ZVV+D jhBZ!ZVV+D jhBZ!ZVV"hZ-V BhZ-V[V[V[V[V[V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V h0Z-V h0Z-V h0Z-V h0Z-V hhhhhhhh0Z-V h0Z-V "hZ-V"hZVV+EJjjhRZ)ZVV+EJjhRr"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V"hZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BhZ-V BjZoMwTYAEjhBZ!ZVV+D jhZZVV+@ jhZZVV+@ jhZZVV+@ jhZZVV+@ jhZZVV+@ j%hZ ZVV+AJj%hZ ZVV+AJj%hZ ZVV+AՊjeh2ZZ VV+CննՊjhbZ1ZVV+FՊjhZ ZVV+A"zT-`+حC-~ B[ V~+A=eˣa-1Fk ltw ~{.;_Ӧ[ګTreX\RпVoR.遇T#GU'Uw`a`\.܀v]z)˝Dom=[v-zڭjr}= FoaNoGi;};uzN}_DYι7Uu-R"ۢv@["G+.^H,k)uW;JQajrAgzBm^`s'kj{X ҳv~u]^cR-gL^Wg}Lէmm라FKYʯ*bUL1h$dLjٷjf9Ǵ`wK>)Z1ũ*4ڨ4RiU`2TS}ԀZjJ=@p r R.`-uΆ+k5#5g#5 HRgņR1D/.ˋU%sR\溌-.'+R>Դ_j-5퓚Pӗ)w9a>wrR7~3 xW-㛉5|b >X5T0߂MXN|߷0>|؇y+1Jb%XI,V2XřCxl$棱,f3+Uyyg^ %aC7XRےcImImIg[vR`3vtXRCb1͘ZnDCLzb Z\-V&BHJT7쭻ꉭN`:;;UbUϓ_–KпB+դp I3SVݠRԍLMLu 5U݃}Ocjejcjg2LF/x[ mz_/1ҍ@a 2>d 7,c19xe#FeFjjl26av;K i(-/JKh(-}[UU}$$]uz lu3뷺nCvMꚪZ}az[w=LӮgHY׳km-ry{;d))*snS=SU=*33{=_E%e-[zK[bcRcRU\L6~Lۘ/fj媖OM`nU7VPjCfd3iͤ5PZZCi]Һ2uՓUOZW=i]i]1ZWsi]ni]ni]mu52_T͗bf94竦f|=mrf-f &bn6˙W\̵%ꎱ,2&VS͉ b!OV;bgʱrw/OԷzYYCT<gbT,:;l;{Kgo=RǙ?i}|\k[˙~fªZXVjemJim1eU,w}\WH7?V@?-[A%!]n6AJ3v,G1!q/:VsƽjZIg+qθS;j"_HyDstSJRD e]S$V؁,QQS :5U7Rr{Udq0@xW4!b5{ބUʾnU'y~MxHbmDj:&Q#rknY N*M̫b/i[ÎVU#[vvO(Z&.mM(7!m~_xz+%Wb_+x*X׫=o$͍5﫚<̉+g9 G-VjCڈsc~/o bo}L uZiHu+}Ujhj)pVO֋`Ž\^WvXJ[AbUίb@v3]z&BRq-'ZIͭRӃiisERel>*&m˸}Jʝ߫AyJ>q~)kc}l0^O֎WgBe.UP}7BBUrD-dfKDwL׊D5q舛EG":JCĝ|7).3֌Uw㱧Ǟ&~KEW؈QF}FSᇿ1llپטh^r}q{lk܂w]lJJamnp̶\&dxnt{oz՗1yU5ӱ 8lm#'/mo/eO[Wa7W3yH cסǒⱤ[U;HNx5ɫB盢D'ί':?It~}  Q.QnHK,l :9 :9F첁e(QΧQo@,K RMTS,KK RDƊƋ^bثG{uttR]خGG G:MQ16}6}6b٦X)meb٦X)mebٖX)4Emľ66 Q6cEmƉڌʟW hNS4ghќ 9Es͙$h9voJĽŔ׍5Ʊ_7d,H9u;vK)QVT\G+Q%QqD1'HT\diWM]%KrIO\} oZm34C\,ׂVr-h%g8i.i חDn0%L>0SL3\?MPU9 gYۮRuטбY_|-p⥍&}RLFt=RN'Ꞻ.7p:FsD4WU^-JD,!\?Qr\ N.[/.!XJ;ϷUwj"rW׾key&mm~p)P9vx*?`Qr?PH*ˠ;;} XFRfku"l=vۨH|cMl)'2zrX$:ļhk\^flwj=Ju^QA>Y>WckqP_tqz2l}o/%v$ڜWc>=Eκ+#-ZZr߭꛱1G${~~Noʪzؖm]ӃzsxھI}tʹmPOO"iصVahw5^ -8ڝte߻.塚u5k8{k_p_/:BX-Q֥W)UQ#GDscVp̳T5)T`rjj],9Ǫ= ױ'M//kw[㩔+wWc{Z{dRGKwZ^7ERd2j&*drr&ڡaAU eTaLfFFhRFShaPiqF+H5RUndL#RF;htTݟ?SܳsT'u^^!׽ʽJwopoTܥ25ȽٽE qowoWݻQ5}}@rrRyn$Q==ɞZZuww:FX,,uo'uWRgOVO_._U?K=lKퟧJ}F}__/++ԗx0k.a]ٝ0)Ff򩨲ιR0^&K⨃b P*P*0 blcxX^g1lQ[qR[R[VUL260zFC!ڈZLZ/HjhùuPu<m$5Hj4Yj5ܟ?UqϨ]/;[sc?u<<<R^;ԺE/a}{)?`G/bb ְA5ro&R.2c+{ V@XI=zb%Jꉕ$ċ$JJLK+J,d2'c+.l2c1nXyOy?P>~PGO93,ɏ%}ؓ%='ZU%U%Uj(=,˘|jڀDLU#VK(٧Sbnډݴ7\Ku0LT>bX#Y5khf$c ~ h5FK&HaݶbFk5S6lO3ҸJmyDў-9Fc?%KS OɒCSJK$HK$Hߊ[Vҷq~ +y6YY?pܶX^k*==*~˖|{{-x_rrؽ½c] ݅m+lnf+lne}{6j[akNҽ˽K"w%ޣRݿi}{{?붥6qRJw%tqa=^Ojy|l{' b=ǜ|@%ߚߪsI`0U*M*[~捬F*jlqRTXmX`u`>ȖsT5WZײ~u7Y7̋"*6vkjH8nU҆ц?:IKn/-/-fز//SII Ow# |\5V/_/Ub`a` |NP.d$T:R?c(r\"O֏-m.1lF"Ш~]3hZێT/P님i;d{~ۘ3 )Ǹ[=B(GB_^izZͺfg)w?ukΖOOo8'䙎y<=ӹU]%m(5Qn]﮳i3?'֫8dY,b[ _~7r]&M{(v=YoO\__9?=Fge5>%e^};UfU鑐Vc>2 ,?^_s@Og=gQW +J)qlo߳Fb߯tL/GhҦOUR?/z1UwgQa;:eZ&NNv;uV{Q]ep}rβ;+߈:}e(=O3O}I{вGoDM0Y;JE}c;ﲶ}lYsXVv{~_hϲWd?V5fnm?(D!vaJaI7"hcvP]@4Ph`-k,N6 |ړn'5qIt#э[+gYcαOrؒQ~G@+|I>%^W{uܫd4_r 徽%}ܱO{r>Mϧ='Qw{ rO>K/=yܓ{~'?Hɻ䞼GƢQ+C_F2^eܫ7^ W?PF ;r>[;]}S;#1?fnjP%LDԍ$.u#JDKbiҝ%n"Qtϝ%~N9O?9O?I$sm$rN9O"n9I'q9'I'sD $r&VA"ab[ĶZmj.BlV3fb[ŶĶ:mŶȈ\&#seBJH26!K&/cdT2*GȒe$2/#be,P4TF% Q }jrɨXGF%2*!VF%tQ }dT 0jtWܯv/{2w4ށF;KzRwJ@ށTȐEz;!_ I[_ I@ȓ~$h#m ~6/M_ I@cȓ~n/'M_ I_ $I@cȓYz Oz IzddGN/` 0D} dG~+HAK5H_H yyv2Rk(A27!QFXҧ(cC,yB!^ƆI/CgվU;'&#AdGH1ifCj'e|Gmfفy'3sH9g*◞$i$#D2B$VzIdHKI$ɘKIȑA2rdq$HJFHJC*І82Ҥ$ɨ4>$◞<6T_dP6TƧ2>Ŕ)e6@F +2b%[nzȸ2nt+]7a#}:^Q҃;JzpGJH;!>åߧ\~&!}=ySzZJ_OI_O7ɓdP7o(/y xW|YzJOPd@}?俨Ÿ瞹_+iY OOr\M'bjHɒ߮Y[@?XC_A=2?_GnՃ2~枽=fߟ_Fθ}ƿ'tJol jT u[T=.6;Ƈz~c?;O>ͮ&RճZbydN3 .3=K?PBEH,O?usOh7HMg3WONkV]$MZI*f9>V:?uay͉N?B^x(G%QƉ׈m5KW(=~k>xDwy,Xr/]icXZzЋX鍔vسNjB~#)'J=y1KQ#:ڡwSŊV w5N)W=<<=<=<#?O_URQݦ( QҚJWUiJӥޢmުm6io=-~O;Tcd?3i{f]3"(r0j0j10jQyGj[ Wدz_~5 7د```\`wc ```j~Y~nL80808 80 80 80  X5808080'80 8<80 80#80 80'80 880-80 8080-80#80 H0,H0H666% k (kDp`Qp`H"V=X$sʄv;lP=VF`°D&_a#د0د8GѯtDa\PX+%bR"JX+%!bR"JX+%b,,R"JX+%b^- V^^- ^Z=xzj.jQJzSyyE%%E%o6=86=5=x5-xҴϴϴ̴`ŴjQoQ Y2 `´zӂҀҀRRRխQՁjG nGeƻIV"`t`xCIJZiZ``4`4``4`;7򂣺U82R**-*gi̔oҮ&u%~D~xf;oux\V|]!۽DIE<< gKޒpk绫x/ngw{f4jM'\N_yqFs?A{˺?=įwD1D^A 5""b~bjz6J,b~b~b~lE 1blE 1%b~b~z/[bC@̯A_1-b:NQWF{5iW{5p7!#!![W/"p=br4!FOu'uuu+uuW!VT!N{uW!DmC@mCԭBmC]ۆQV06<)*D6Deu!FԭCmCmCm+YGGԝAA@t֥]WcL0&k]Q7I3V#v#v#v#vc 6ED"LcX2ղ,kX@liBliCliBliBlhadkZb5-6vF݊nElDlGl e/ĖĖXbK/b0bK bK;bMzv=»DH@btGyPGnY"P0鬂HHHHH=&" $2p"G@xFs(AXHxr"%BdDv! {KB+ 'o!E@C&0"*"$q I!*>DDd(DFGd")DEd.D!~D@ mDvCd?9Nxz%艗 IDH$A$X", BI*v*N vpIOV[n}PӧY}AG_?H?T?B?Z?N?Q?E?]?K?W?_HTBZNAYMSG_HD\JFNߡ4phѐ0 9C00000000000ϰذ̰ҰưްѰŰݰ˰ppppf8k8oh2*:4cҘ1&c?@p(Xd4LcqqqqqŸɸոø۸xjA{~~8Tp;#:j >Aюq)YEՎu ͎m=C#S3sGsjFu΄39뜍ξaΑ1IΩyeΕ5΍-]νΣ6YyEgKҹ.+w5Fƺ&&f渚] ]K\]\k]-Mݮ}V1IiW뒛qzv1wʝu׺}݃C#ܣSݳs݋K+ܫܛ;{݇GݧgNx= Oړy=}=<=<#=c<= b/5FF&fVV66vN:|~ίv/?7G'ggW7wOg]E@0 H2|>h, , , 6vvZ' KA& ֠; Ƃ`6Xl    N N N . .  nnn    v;C\H2!oH %BP.Tj   M M  --- m m m  Ά·.D͢S1)fļX/6āq8J+N'ęY\(.ĵbI*wăbxL<) 0VakcT8 7GGDž'gWWׅ77wOτυ;.#7"Ft$4FFDGEFFDG&EFfDfGEDGEVFDG6FDGvEFDGFND"g###]QET5GQ4MF3|>m...D7EFwDwGEF[Ǣ' K1&c֘;bX6Vk MMM͍͊͏--mmmu:\\7qo\'x.^oOOψώϋ///ooo/ƻ.aN8D$LdD})/101$1<1*161!191-131'ќXXXXXhIlJlMHNKL&%N&N'ʘ2vMV&8[ӓwzғHYҗOnZwţFi=(Nw5ENTeXvaE\tU\pU’K Z@- _t@8Bz* T 8&6~h_FL>_-?H'iEz%p>p ~k{Asҏ = G&3z._@NdqE?8ގs%6&KU"}Kt=\弈Gy }zT,\ү = yu~Y>.SDP*!9!9e 2Hiڎ|NB"|vY JYhڅy:v-FY](PoY+RsgeY୲~~9e$Rh}i+65?wH%zpP'Bi F> Xc1r]J-P&Rt)؎[~ԂsQ.+V{ i qTh_yؿ@Xv{8KҨZT9} M 7W.h8>?*"sVi_oފcV@cGCsHCma(A1ooQ,,n(5Hm7e> k@xq|jyҳk@^#;qz /phhtV4IGH]LZ[5C߀@XECAk~t\@:8 ,ZtWez} [tĥe)hpޮi^Gi۱{,Emm/.0tT33#u(M:G_@NjЯԾ-~C#X,Z\z?T5#?2|]ߓP!L1woF׉4*ҹc2 amh,IgXxUR.Ñ2%yB{w,zVc׀()Wֳ{sUzcHdUCzI󟀎]Y_wsk-/lu)üՃ}#xgW7ZS*2Kwj.;Jy:w!aOuB!6_r9~gog?{ 5#4?5|\gRD?#N_]&(cIyEkUw,a`їb$/AfVr?s"fEZB<y=䡱 {T_-!c|u)t3ꍃ5GO^ zEWF:qM [YeD *%c)I ~U"suLVtvR`)A=(E㘐L0ުNpƣ:z)SWT: ZR Lڠ63MjU) <3DP *棂V2Cs`0&ؘ{b !'T !/B< z3~B?chK— yqq³³Xa<3\ Ϥz;Va,s;fV0c>"G'`m`az3'1O0 >A/s b~Cb~K3/3GcP ƜcM̽xa9=}}y}}ɶ1nf}lr_<5s_fqs3۹B׹3;or˙gJY܏]&I9n33s/_20 $w{ 'Oov9up︋\7sxi㕼y4ib#:o2c|cg.1d??t?6nod5¿ ogu Bެ(l¡p ު)|loEHaՊؾ[읊&#pPPwQJ~LQzʀ2~\WƉz>S/,)6kCוg}u sO*#;*J _dPQL=z՗8Aݩfwi~½٬y;_Ǖl<]}5;~9GǴj}]]?]]/..忢—jj_࿩}Q{e5ke;~}v|uFퟴOt.]J5GuCu7uuKjlKTZ֭=w^^>ňيt/+FN;{[I_u}ӅH1 '§O+>/<$<%L* >>>nsuw_twyqz'xzOggggggggggٳгijܳʳ9i{.x.yʫZnoYo;;;;;;;;;;;߻ȻԻ»ڻλٻͻӻǻ{{{{{{q>>ї}9_77777777777Ϸط̷ҷƷ޷ѷŷݷ˷wwww;;+:ҟ&?@p(Xd4Lſɿտÿۿ???o__ 0U@܁` H@CO`P`h`D`t`\`b`J`z`V`n`~`Q`i`E`u`]`C`s`[`g`O`PHxTL\#䂚1hzb0Ls`cop@pppXpdpLp|pRpjpFpvp^pApqpYpepMp}pcpKp{pWpo@phD-x6x>x1Rt!s"d(ʇCM~!Q ɡi9ВЪPKhShkhGhwh_`5t,t2t:$2JԋV-Řb ġq8N(NĹ|qT\!׉6qG/S!v&l ްN\.^^^^^^>>>>n _ wE]qFH$DHS_d`dHdxdTdldBdrdZdfdN90$<*69iG.D.E*Zh0hm!'?:(:4:":::.:1:%:=:+:7:?(4":.!9-3'?z(z$z6)656#6;6/ 8,2&>1%=+7v v8v4v";;+⺸9x2xxs|a|I|y|U|m%)5#;/~0???o__J0 UB&܉`"H%DCObPbhbDbtb\bbbJbzbVbnb~bQbibEbub]bCbsb[bgbObPHxTL\#Yƕiʌe2oX(K (\6ld٘eʦ(]6lAee+֔/Xl{ٮe-;QVv|Ų"KΤ?I&d>YlJKLIOJMNHNNNKLI6'&$'W%&[[;cɓr\U/˃TyOyACG.W>|JYs/*_Z|u ˷,SPϔ+(Lq)Mʘ)1HST]175 585,525&5>5)555#5;5/ 8,2&>1%=+7u u8u4u"Ֆ::PT* E"YWW4UX1bxŨ*&WLY1baŒ*VTlZbwž*NVhPq)ͤUi}ښvX:Φk >Aq)YEu m=C#S3stg%W4V+be2]l[9rpʑc*WNZ9rv+U\Src핻*V<\yDe[+2.c83L$d2L})/303$3<3*363!393-333'ӜYYYYYill̴feNfNg32*UZ VŪRU٪ڪ>UU Q5j\Ī)UӫfUͭ_jiՊU6TmVjOCUGW:Su3e5Yc֞fl"ull[l|bZQ6W;Ցdu:_]_Tݯz`գVO\=zfKW^[RzkVV>Y}BS9kΝ bT.5FF&fVV66vN:r5\Xcֈ5tMò5jF֌_3fj͌5j,YVfM5[j[spњ5m5gk\+9|2||s~a~I~y~U~m%)5#;/0ߚ???o__Rr 6VxC`iOO_ ']3,_) Xs?e880YгIT 8W"|*  OP -/ yЌ(BA |3E!!}zzmF 7I؀Ar|3y LQ[F wEyTw3r6!ѯ!-@Oqʼr.췠ݱN3gPfWep~=gKE:YzԦm'K#Q 5=P DbO/]~hFZG}~ H !Cڅr[p^zs_I_u(8Ae5p%F\)W]EFoHWBUq^7 1Ut4A?gy (9?C@h J@^z OﷷO@=ţKG~;rID6*}:,-uEG78zWDG72!J`iE|tI)aUxrR q ,r HmHk(O4oӱVкVg#Mrllҳc\st\UDd('Tv}dyȳ (,3- i+F %Emvm/q%P򧡁ec+tB =z!Xї""mIPjjy:QkY3U4io4Z6~a)RfwAs1'!hMn"l[//Q 2am R}Vh H7~YКԞ3 پLkY+&$zfO;ԃ(jcd^-v]쐮x[e1 z LOk%m{Y{Ev/OI5Y#;kVCү,'ZyG앐uIXg[R9<ꁎ)3GNґl°ԣCK!falRKs\4Bḳ4ֆx#ԯS7C!J/N7:#SOGsRo|ԯ`(",䁟V WSW:1e t50A1|zJ3?.8#JKFiS`$Hݎp$oY&rhn|y2蟼ks9䁷}r+􃐦#_8Ó>j,ИQQFw~wIS[MVk0le k J,׀OcXE4Rfv>t̲މ q7"Z4:@}?QK)k :{."ӹR 'oqG+p=E0k.Qz8:UQ>a{'ei\۫繖O+׉Oc\Aio a'L-R4.4VО }e} l^d(N|\eyݰ$'c1ֻBN`Sck)=ղzVEseiQYZధygDSrEGr"Zȡt u1#M+`O =SOPA3p<0P&K'yt64F(y$Gԗzː!MiD|p'IoIRd)Hrrk5VRoidE@^A\;6YW)8A8NEZxkIJQ.Ӕy H50 } 2{FOXgGh(@GX.=GdH{HtZu%G=8"kJ%i0N}yHtb4}2B ]dM11xXyZVIO3q>^nQ׉EF]}XDnO@ʌ>A%ӐDgdB,q- }HK{X|6Q|ǃ= /1\tUeokiҧ9i#}RoLҔ%fTDmW@D Y%ĕG)zeSQ|g;٭Xc#&.XqnU5nWUS}H_a}?jAۄ>cfx&0M̭L>oª:Nf s33݂ 䯑3͌cf`f0{/̣BrS7Hy9L`3/3ӘW33?0_ifXYk[XVXz.O5]  OP~ W=*H1as|aj={KXw!Ő.CDGLIO$B$I$C$OH~DBd8QD@d2iDfCB"K,'Z"-D6JdD9H1"'&NK DTDDDDDbDRÎg'Slv].cWkFv e٣ a}%UzhaSc{*JU6< | r ?_. 9WBvM"وZ*G%g~TJ񹒒{; rk7bu]V L@VGLGx&"6N`L俭.5W=Oݢޠ5iC,Hǯ 齟`j"l 6";!!"G'r"td#F #;/HH:"D@d0aDFCd4JB钽805\P1T"-ۃ2QUbUhAf>dAZC?e6%q`ָ8WE>ZX؊}h=65 ITS^ (('{qfKr3Bq<d{ud=,>"keXr3!+o !,m ̗p}h3E{qӀ 1{HGe}o,g/T|VE("C.Jx ,- V3E`-3,r܃$>n]-l9,B; V+\hdsb2Hg[ZchIPZ *߱-h*'/AOGFYmSLy~#ok%By5O"jRϘ9N:龋ř',xZkqbϧV8|1x7} ),${T3tF:su1:#-߹Q Mji,[wt즽iTu ;:/o>xRlGjo;t@o,vA24BA۱^`0 !lH7"}c{HC7=$o!A!['Ic"l"Lm{SFv{y>SL_a.4;MugGWwVr.%H+X^(hG mKʐ_iw 7f\/K$DL)͉'hEil'hS꫍wڼ_ѪMq\KvFOnˏ^5u uKJ_'߻'e?=9?rnIJ{szOp"{Y'S]@ҽ@ϯ>;(H7{~ܠol']@σ hR1^, U\UTUU5^T7nQV5T T}D5HujnGUCUU WQUWEuACSwU[ͨY5 JVkZN- j\ETR:c:.S' JA-h`LU N!.T UBVz Bp(!  |BC)<'a8fu 4b=h?02_aF1?%q!Vmc0Lqgynb~}ypq-\ 6p0;>>cw~???Ob_')YKt~:{d)"%favAEa-ʾ Nn9//(7O&< kI_Zүc~t}aWL]1®ܹ®|+&?^cмO:-X] .եX]V~KV*}^W_ ;L**aeW +M +M kI.,"UvvwT) ;4vxݚ xUյ}>n$ILID@d& "20L0dgn:[|FT|X iK] il ;#Ú#Yg9ngo!U]w|Pa*k؂m؎}8C^W3j*KSo-@f:͠7(f,f4fc3gMv`7b?0]jNOS jIm-KH3%QΝn=})g$Wh4*k4&DDi g4F v@ivi{vQ;h]P]S7md[vVcC}BvamۚvȬ:J,D4^\NKoS6ݴHH5Jesz*uU{\A|neSĪԧ/֩/E7uI]V-Ŵi%մF]QV<`V=KExzj!AzNC֩j Sk﨤UEO z:jگ:Cڨ6\iO UEmUTνTn+ȶrR4/ǻ96fc_l8lqD1/ jZJ|^CjZ{RR7MܢE4Ƞ֪\㋗;gՒ<YC{ita:BG#[|S⧰n)0.+XYYTElM y)ݹr=¾w?K4-z E"Bbɶog/>;f]1,5r¬4j.iU0f6җtMͫB^E ˰+xU]+:^6`#6? U5FUQUSs=q?RTS?o<+ $Q(uaI$ex~- QUP8 zERxMP uwFr=対3WU31K|\Yy?#d_Yuk^*v;:IwT/+Jʍvjn [˭Nrpܙ,w?Onz[תަ}z>>zg?`\0>X:X&X6X\ߛ;34<`;2O$ntd_MC1XB4{j}q}}{ZF-[ jעԭƓnC!MBkw;ϲc9K V VG/crn/PGd3 h}zbkp@T/뗑jbS 6<6N?ӟ}C@/vm(EחUb`C$7 /HMP{]b:b6[+?R?<\)YQfcnCUbx$goeøԐ}k,mFHNp v&|ı (W_ ylJu[9?"K&@&5fԚ+ԗRb<Y\7di5)rf8D'$3ty@*ݰ,˵ YQV`Uߺh."@Wd b%:Z+]FO_v{Wh ڋƺ_ơh<:zt-ծeMܯE+_V6&ZD5c6Sц9mL39fsKx9wٗ<,EX<`ʌA f7fZ2ъY0КY2˺U fEk-9{YZLV3?cra6?`6O3ܸ.wǡO gP}jL9:PW"LaocV}i_wW;mvy;E=] n2^Ѳ> ъAJaDh5L-'hoo'k!oooox{6\[G[GGBf^uVPDWBm4f#Bɪ~oV֫~ɫѷߧ7Gw'̟+~4n5I63 7fk^3349bqNQSѩTu95ZNi4wZ:mvN{tv.NWy<|\Ӟ. ⺄.ct)t<\&z%9ko5ASD(mJiijZ6lk3ؤa&Ì4c83L6L9a~lN?Isgxxc2P tyPLJz  x՘gtU%g4tϱM{ `JNz !$ޫB woZ^[{FYKF#lB+d)Nd!Z]@Fd}DEe YBVST9MN3L_lY\A < 'R*R4"H'EFYD1"Vċl"!r\.ʖX$r|"(*JҢh#ډ'DOG1LGbXLdUX#p84>O3G_t:f#mA[6l6&"ʎ.:"˶X,VɵˆUnM.S\$13r QIV%œD-kZ,+KrmoHLvdEQQ4d]YNף07\8 n܃pPIO)%C-DDk:Elf],gP{(j aL%L)"F͋ڊI>6o/Tۨ!bϭئɲzO\>q$}]GOԔI0J%Wj̡4\s}Y>i'6§ZQ§m#M|6E/k&>Zn+v-؃{b8Dtߧ)D)IGzZY Emq ~lH-Ao x肿ĖD7sפEW:i[E&уRƶeMeTƾOUTNY@f'Q# EA=jcRFmvjgwCg{F4;ͰOi}"^'|u>_ (mi ]:ڽv?uXDK2-^Q{ 2e Nnn LUjKiuT*jFwq:S67(; T~D] fSu;9n0NWGgAW(LK](vqXMTD'5YM؋vSjinԻgUgjdǨjZ~RKRLjZV5SULZoڠ6_&Yj"=ËS[VMmW;NKV{^OY:::N:Ϊs꼺.DuI]VWUuM]W7MuKVw]ު|X=PoꑛfwD=UsBTx!zd #0FhNn3^:‡0om&q2Xxius\5vӼw)0ul#0LiO0fl\Kk[Yh7?xk7s˼2̏f,1K2/ [Wˏ+r;#.%.XU*pe6܏.\Ey2.Żl^Wͅzս|z/ ^*w-v]vWץz]VE]aWDEb+r*cJWUs5\-Ww ]c5s-\+ڻz>솹xhiy'=q u?a͙;w.L\,!| k2b8@ h8H!qscqT'IqJg9[\EhqM\ qSw]s?}B~,c9 `)|?.낺.Kº.K뢺 |h[J GGɼ48^eR e-/m9|c+[[Bhٺdm=b[nv=a{PQ;TvURe/ մSFtcgP];ع~JYͶi}ay6>tl,J_a17XŒX2EX~+O t?8.$)%J6#6&P&ۖ2vaS@Q]O.?{s~/En~/7+~̯wkCc=cr>.\b ĺXs ͵.:) s#nM7ܔ[J\q=u7pO˽?~܇9L x%WlOl/ۗrRM(8y"}̟g)sy>/81,\q}ǭC۟Tp\+cSlͱ6O-5'pn-nmw௸Nx?BrNι9KqIʥ jaClMLS3Lem3%._p#n2eLiSGpyxUS3y& N }Rw|9G~"OU<>W_r¬4jQ.)_'jfm7/B7xc` ½ {Y100ٷ ce, ?#Tn6a C [?2LAblSY12=FfE}gP]5PPxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox`TU8>疙$-S3f2Lz=$H!B'Ko*XP6PTkyUwߺ}DJν3ɤO6)|;"4 beY,ItL'dtLF$=| ߦb 27shT)_V8do9ͬ 2OId4gQ EÇҹ١l,^e ,ɔaƇiif̜FԲX,l\qcY,pp`2ZmGx>O{?)$|TX&cF?V@ŸTF}Izlo|4z =L*{ ?1Wp&BHZubQ$b2'^Bs5&\g"؄E= #YI?9Af@?xc-B”ևe-%^m/DfĞ[CijԂ|<gu}#%c9X, $/ JHfE V {/W+-.aߵ[m9Y>04= JT+ ο?HQ<2jG%%9RKld4[!xq$TLCy.R#E9Zr+95wU`h`W{ 7%EJRT^rO0F`!P*v%ou֘ ۃrCEure{Vr=tc*rkXn} `G.K$[8-[% #b1|_;䯽'P߿6ԏ/'@xv v<I8eTO@`d_5k~k(UMGcb!Ax\/>?H(9$7myzYYc73g# A0&xXbw4C(V5ʈ cÐzR1 D\@V.3e ?ztw8h(j-Z|jCQs+6SiO4VG_MZs'X5^r#<GΧ Q>v*l]jDl3)S$|g)S`)|?~;܆3>D^G$$ 'KUD36'x]|f}F>OuS;GXﱌ0f(EaGlMd6G[Zk'_kA2U_%VDqHD8L%FOdg ,N,l)83]9 1V>8ӻakEJLR1 53L%Z|yJIu LSiE:,m۬eKd.;T1 tTf|wk hu"I量;]=WBO^P^S<ז/ ^[>l'C8|J͂X0n@RrzyH$14N"$Gh*|bCvBNѸacA ڟ oꆛ.:}jn֮}aOE{wEOw/5t,Vl Z$][[lXV_u{RړYd }\Eo.pǍ~llѡ<?PnC(\ȃyEU>?/Κ%#ڷ6nU'3lK7 9J QsfeC/&SHS7~Oqm*Eh-Z҇]<y"wٕ #,ȏHU.vtĸBJITKei%y͙uufo{z]K z2aqfUuI qLlMV{Օ9ksT}em|XڗYfg驿y:F2%oA?w[0E߸b74 3IfBVdPAeHq#UC]jBFweGdR'^駨kKg?>{iyYeģg#_0u݀tg&siz&|tG[_Ѵ+8=/[81KXfG@0 WUZ8XL'?k;khu탯+ Vtet0Hnt-f⁉1u'/Nu*8QQ=|kAFJae'3,p<3M#JF\ DʿH9既1y~I@#j'FۜL jJUX!Jw5sfO5+Q@'g~ 35Lz!1Yy D * @y4b̥S,{^ T?IZˋ’2ff=}W&)L|Q8ט7UUcָ~ڡc'd@*KVa\zždqK-BB/F2G` >="ƑNњՆY|C6fy 晟ۯ_ar嶪PᲆUvs[rst*3# CaF(;{ d*S,1-,Ֆj=F-FQ'i6f`2NB8s9111[ Fxqi(eҕfnY|=4mf;/%-__\][ܪuI_3x5Y7/'e"c(-/}9mvsC7WUfoM8oaƧV.-UtiA92zVWh,x:w0rp@}! Ёb&>`'Q`\ߛwxnہ`=޺* ~c֞f.-ষot*9GJ^BJXflf[W&}yzSQgvvϢ  \YJq_*I`4O erj;I`WP|R)'*4ʧoٷ@>-kJc3/bZDQ.Wo ^S" Am)[\iII:$"pN 8z8ˏvޅTtjw̭u~JhmI3Eyޕ r+KXnѴ ʇmjo씊Yid?yu]ɖ'޻8Ɉ,lXq~ڢ1j"ֽ,zjoCS3l40Gep(0 ʈ$1Me`Sp-s5&x6v׷Ƣ}*+l #ri`KmZ@um$+tRp0^gkս5K\Omf#O0MVc 8`Dɟu`n!40>OsKW26owNN <|.pɉK9c ek!-3Xs/íF+ȅSqNh ߬B05 5D-3Xh m h2 '.ϕ'bSkFgZBWB$ǒ; SJJ+@o"XF!QDܠ@DS%`Ӝn+hX@_eư/S|ĩ7itX^cZ2qqExrќff,DbEN25oY8,8wG jyךxcqor3*( #(R+/K]1I6 iO@3DƏM6EJY:'R<aA?O/ni Ack;q u3zH m q_',%9G ڿXa&f'K`nS] rಔɭ~:"[ZU-~և>i5~'SQG&j z 2/OOnh/П?C7$BmX;jw3CPc"M0}?܈D "QKF]'jxXߔV瞅`lMB$ڵ[&]5W+ uYOaGsӕ* Ze)i GF8GlfڎNG9LjSQ;㬌ٜjgS=^[&MfƗfɬi)ٯLB"͢5]m\CDȴ>Oӕ>o6&&+rHCBĠ1kZ#fc][CE^LLɳԴ՘:,$؊ū:ku\BfAwm{/DXo}qK~ǽ'NcPj;EbNe+j/[5 "}&(`*zV>MȍhA].<T,$ԶijX M|pXtm_f|NibKdU10r49s[ s3fozK[&攴RT9<(S^?~"ۺx:䅵9#Ո8_p̪?͐\UVƨ6[dJYj՚uVhвPcWW-CK9J6=gBOnuhYjza݉Af]er_Wn  f6B#ϱŮXmZɊ.\24-W8[Zm0NLW6B ,<:?;>+3RWyGWG7Yx'UJ|QwUmä%Ɍ$s*U]j,:F<ӷN߀icÔmUY &y.C$- LuouΚ+Pҧv߼N7ӂ26 E-( ZEޔS̘ǏR'ɺ=}9Y?$0_c U2wdyȭ-D)]pتg^z9R`q[dZ$exn:k&[$M*iytU#R3/Hl>4|۱s7sj$VMd\h_tAg|%U8j/L25].D$>o3&J%4@969C$2O,i-j j_;T P Rǭ0 vA=0CY B]CyZcC砪dݿ|}2f ͢)Ks/g/YsH-_<quMj\p E7RޤKʗi\&06=V3-oByH٩z(^ʫx5/H~%ƛirfc/vYCW5Ec]Z0$¿>Y C,TD%;̅RWm+lyӟj\;DSDD`CS B%f_[drF(E_&'$䘕L5R% wvjl/fXp P'jd~EjZCNN~V#GhBjL5&#p\Tmn;J ~B(Dx~L7?@a{C>/ĖOl.?n Ϯq-&k:.=Д&& Β4%1ŨIqD1ƓizZ sak:/H rWPaŔA7_̗%"*\+װ Z!g I1$אBr%) .K)v6@X~wl|q|=''qYJN-UٹyU.K`kIDK: DA"C $d4S Ho(2! wjv\~lodf}}@|C1EbңUŒ4>OH='mNCyZ)QbZ#kl^Ǿh.QY~L%J$s '^ٕMvNo^ћ[iW椥RSӖVkyoAr SRYY\\YY V TxB=_Ɣ&Zgҩ%B9eKY/増|p].GF]b`RilY$o" +ym97(I4D \zH'”ʓækhI|DM$znwjJB._BN9WSc"kׂWl_C |sX%S 7`f C~Α$}! T`VK"Hj i_qadHKRKn)ϣqN;YNHLe2FN}7[n\5HR,^ȧ.pD@h<892,!Isu^Œ~zVj<~4I+R /q}!k>_LX~H0Cu_Kjлt=bA(w-z(LS/ؗCN﫵 o[Z F[WgলYw_ 7 rG'e#{kJ^u cϐ\{泍سGZn{,R5G1B[uZrOY:A,6xuY "ke5ݻ46N02Ls|C^e;PLv /13C T3܆<%o;!׼ۓbz)ҝZ5Vr[~3- E_4fV9FcfQi\ʌ~Uh|.gO8m>/enz|!i ^0"ӵj7 0CMWOw]>oeV{yPۭe2X.,z[j<"YٻE^[dT6c>ǽ8\u3qXn0Bw3a԰ؤ</iœswAxZ8㑣BԨYOs`n:;;8oDϔoϒ~^$P.=+<[ȴVLTd8)ǰgAGR#Mcл.9~1:-8$YX]ٗ;i7!u`N&cw(F.nXfwMRgX9((Vb_5p:Yv**F3qK!EM? g }L%}P"]%+I8@Np.4?Q=Gxi^fVuښ ٘8 :z{S:1 &+ċ>^Nd[ÜjG"G? S zH+ԩ8 Id_˜}.>ruХ'KOD}v)ϰL?z*9L<*ʉ_D +Y=T10e,W HBS?SdKOh9*'&*┙&jHi&%5zwk ҁwi3GWG~F4kѫO("82S9!ι?+9#s:lX}c}# yzH~2 +[{[{k0"{_;[=f"Xv>Yē9c#(Jٮ[qߏ=w~Fy7r#w`t+Լ#aw NY̙fltm!h+i2 38$%vt}GzZWޱ4wե],(k'@UcǗ(=)9!':U[`Mke]r\)/JUirH3xq{2H،AvG-:5<94}fM;'}UaRjʋaY;kW{j jlI\Qlޕwf5Je)WU6Xl4%yZ - uyh::_XyLtƺYA~VኴBiS=TT3r>lid>,.`Emoތ"sRl=Z;7NxNVvg fgwWV~nفPh>,=}كkmOS9{3]]ٹ@t'ʅPM<ģeCP g0B@$CubZ#VƔ ϖQducXw-mQW1^d힋Juipl}ₗ,6g:7٫=H}j~mƇW-YkƆƜjdti`,P#A8 1KME=F TljqY!lD-;{]%Hk ?侉Z֩Ji+Jl~qF݇`,nc'V29bOcQHe.5d"CbH ]UYI~ 4aHbc$ i#+Zs: C- +C';ɮ۷e9+ZawI͇8#D0n">4`OS_S?FH:u\ ZX}#@K[]i,ȆHlM"I<'IJ}~sT baW\V$6TjҊ2dܘ3l|SK2|Zyznf?")Yɕrv7h̓)Վ/B Q~zeՋwdilb5#l魅-O/~[6{ :wn")P[w0߇h*\ F%#C8 ~bB&ycC.L~'l-\k]y䞷և*4d8xoZOVY uKHlk~ 0=v@f{C]sfWz1cpѝE+*s~#|Rm9qpcflYFlFR:>޶5`jT+$|3]xӽxQ//HjR ?ٽ5^X=c(鬉gNTr-;sf W5YВg,{䬻nQN@ܟ[D"0CIH\Yuylw}U):{{d?BM0Unà߀OqPF^p~ \)xO̸(к|[@a؀~Q6+ ?~g:n_9WENPD_;6Əz-OOmyO|%C5lT|kk|7e+g_=®ӟiyPgW (#a3^@598(" Ydn<"[jzL秩 YmuvkZո%<VʪzZ9r7ʃѻQ,ѻQ"וaG{TϵolAGRqG Yuj6-{Ԇh݋Ў;j7PWԼas~ +?FS)m^M_eB*2?:,ݗvM(cUsqQ~y4luOx0_дBc̈́2vj4ayh-ziA6`Zf"WA`7&%4|W>Q6g=6)ZjGR [[`:?k& M1wbWS4ͭrST hݚ 5W$ȅx+F#2s8zXdb-.uvs;t ^sAw=7Yk]?sMEo7]ksڀLI$u  g{`s+Oz:zT:b(<8Gfs%'r R.B@^_m;(,t~T $Kۉd.tՎȕ*9MV CѕbPV~* 2B;1?7 tfF>aIM9::řgMN>P*,|n tL^ H\RyѨ nPvZgM9㯭bqɭL[.!~b)'^!zMf#\H-MN_'vlڑ-}[F|~|gdΞ}GUXN=}9ӷnOo?OtޚI<uk׼w['y?m06(]C9`>Kˏ}]= g`BwJg zDIꏟeid]͐ZMBgԼ<=Jr>w611C4q1-hFtmi@{~ +?5U@-ĎO52V>D5p|#z#"C=ߘ:ipNI 7j"0 a@!s8-w| . Cqu[Ɓ/#Oǹ^tCF!Amo qxSaL-P3am<)CV-ԚOx-Znbڒ9VCYAm$_ ѥH4DF5%`hHm'T'UQ] o'#j D3P" ؜(Qٗ|踕 y*ܴ<=^e醸tXSZ=`YSuҫo ,To%>3 DV3RYfoݼq杛~׹kPVv,w r׳?suM?vﭷ `.80VQU|j;*3[W%j:21OEBOIkTSeZ󃮺&Sݽq]OZsncR 9{fwS5e 9*iv҂^BliˮXqvKI3'O/T0iΡS#CBRΒM{ں朔$5Ù{*ߜc(\z}M&,ž.lme-ʋ->nU!Ɯ_2s3ȀQCxY"rg,7?s3Wcgj!w>c?3bݣƋlɷaB~Lk* GC޽{Cepb*|H\6312KexZ?:/07i>IiI* |o_6f OKΒo!iao- 43U6[;[KM&>ڒ3Q;if-537RI74+ݗg2<y9 d-Ҽp,v1^'/"l!vϝ]rlGzρTT4i OցS AL&>Ff.ߔL '@Uy;jo>A\rL\.mm7_!j%ZQ6~sZDЪV H5* #734<47I'-#^50#M1H+s,u6z g>XDZ'zޫڶ}6ˎ( |sčt%7 /̙hor*!b1Sˠ=Mw^L9_J-/()θJ8n"dΙyS993J`| =jlƷoh_護>e[7ng 9W?;89PiՃ^]ĕyZDgɷ @~x?s4F30Pg"G}7,#R{p@-n"GhC;??>gvM7[fRRrTl2Qehc63= gyfOZ<IfȆ:tf؏f6fʣT<C鱕o"2L;y$9W1ǔ21)Gfh}hqt,DChz驁Oo)|_WpقnGP'Pi )YT-8#ٱ_H2.+7zu9 MrX!~vR&31lzFWަp$ #3 fX`QB@J*(YΘqU ?v9)|r_WQӧ3xZzWƫml>w+ 驣ˉG: ֆF4{qc|t ĒǀcB{'F*'U2QVyϞjܨ$ZUQjVF{Bo60#hL&ysM"lY0R&^ڕʍlrJ{[tgڕKţ$Gw8<+֬d6PLH,oyH;f M+4 G*S(ui&cO3*gwwoò~ĘR]MĥR"Lo "ˉ,ec F[Nw(w.kۗ)- 3ė/tF"Z+db| L4.e]M↬PtmH~}-ݭ5/_%³+i~a]ᓌK:7ZDc(N,])5[f{[ p-5!#lQ'0Nńp#BgͲk"l5؜t*N^ץ8\_gQ*E@⬐|)c  GHi3B)r TIbW$-ı1r4)"P e^gr\p[!.2+23gM{…'p!mVAxX4|Y+UBKFrh1%[t-rp6X=wl_i[O:f26BcɈ=R{µ,,PEo7 y3m1Bq $" H D-1P=ve&_dΗ"B@e@ <+3ՏMqRvn0d\+3*@8_D(P\|!p._A|.aoM20h: aX@c(Cty!]^ac8W@EFl3pH*2qgON&IDS8vN0ͧ}O=pwR~yS蛑wGcMOF11)ceUoOȔ5 žcџg^ᜇwđww+1ĻdOޕQck;Ra#_l;ymԟ +Ӆܾ[[O(.^qbʢ[[(*Zq +pY@U0.gQ@p@YԳKG"0n9l {;p$nƂEq.ы-}>/7$~ڵ|DeTK !"QA1cg2C|`@>{U 웵kÅpĦ'vN-ROXAej7fzvdbTM ^_cwt?zoqqiIY/bDq1"!E)4s^}A~Qij "HB![9Qf @UK2D d '#@eă|VvvBsۮdU|МCh13VcD|Ѱ؁Nd"]c{if+КB`,NJ&G's#? t7(iPD"JEqRC0dk_HĐ˚+3vG蘊SbD,DQTEq1/ǶGY"V367)x"6 ;4=9~偌e.[ZPׅJ*gxǣ>Qvi5 mg4>8ʳmTV>15r٣1\pI{Vf}NEY =1P2Zs*whV,w\=F=75{w_yg?>DS3yOxif\EvG5ᘰU& W%|k<?UK>DmQw=R싴KBsLek[:n\~ &^H@kKJx|>-t=v>suǾ&OGǂdՄ'pS*T$u3o>mo;gZWYGnՓNyzWؚXU t^3`vq(N7WF͑ORga[Z73ܺ,i}V>%fHK˴PCT-_υ4dِ&GlMN['L/~1 = |4Yr&GBڐ=4s/;~mKmZO}>ҷ+KUC[[s;rkp ;ܾ2/T. h}-5Zs<3S+DuKѬA꓃/w@f}c'6,S=?'}®RZiA*[#=Ùj}NSJ")|)G Ct"OZ!\{{p>[!Ykvc %7:_=~z?x_߯o;nl_\Tx-G-IXҵg{2+RX|2*6}rfnuǛNxvAMTPIp0f!du=)t ,YZZwv%4؛J3%{aQnԇo\~"X8YXY|Li?j ۅsFcQh"I,&(mֶl5Z3EcGdcOKw;9g>91e,(Mݷd.[rpR.$#Bc7^=z;HMm '%6ɘGA}3F'#Jܤ`NM }>gƋД;xJ&$"VBN:P;Ԫe ]TJ'DfZ-UmA]ހ;Rk\a?qHW1U:֗k֗jw+S=j_[Z|-B{/!gwu:?m׼2%V:#2v81&T*6Gv%Y9%p+57k k&uC])#rеD{Cܮ @iv #?\*> SNk(@ĪݪwqpsMq9U:/ϳVDt+ʚ"v%_,yoǮk_2^W9ɗ:U*,*繳N׽`iCҠ#ְ ӀM+GwʫB5 6*v޿p}EBRhO r sfLEm ];I>: \VhC^SծO\V>-{Eqr>,mtbrJg.!kR*YwE9B։XRNIUAtTg$gսKk.*,S5Kw-.Z~">fӷe`7¥tI]1̎tUWfmm-gxvHft'Ɓ'}U7 WԎg%M6\㡱bBhY쨧JBCB/:T؜u{7c6%_[m 8Lhp2B\/%o]oW;ߎow$6 r9w3p(n(=ZORȎd 0 (s݉ծ)OjeP7!ܓh+s`"K=R`XR<]ɕ=A}՗j<\^anLyXN <$}FJ'CODXtVf*f}F|Gݮ⠅=ȋR8lȀhN_ RK۝F|M#zɆaeLB+~c_K_zHck'#t[ewTz*&v)T 10S DYr|A}GS;_, *cW:),܅4o}[x6z'j·􏤱o;_xV1_E u^U;o6_ص֙иѝ˖D*YۭO)p$DDSZ}}ii}s޼>rHz?ʯ_w]}tO W "z:~efλvW}[oҥ8}΅*L(n@B3lLjNJ FA('Dq˘$j/*+jַ^Nh;vVhg͹ڑ8O"I߷׷׷QXmMI5mP5%%kڂ=9cV<ĮB^\fe = K:F,yaxQz;%9x9\Ta?xG?YpURȑ;/sv o J=OZ @C )v)F8N\{ui+8/Y-YY6.Df3"A,݃uuݾ㽃1ƶĶvǐ w$vDPV}c3Ib?'뷩IF8!ΡXOҾicfMyzN>5fOñMz8Ǔ38~ 6-O>o1:l l7UVq5wm{p[?i(---En`_Yپn 7|ʶ4iX"mg~̐/G1Kn%[;#̼lF~tLGAb{GJj|7K xmsEgz{WkHEB g&Pqx 41X/&b. OF@Dlk/.P+D[ 5.@=*yp!^6,GO||SMKrx"6)c&yvHŖ r{-%l}`IQNWyn[})\l4{늵tXnMuZR&JqXjcC6+2& ؔfȳX[#Vsn;&PJjԃ8{ݥ<ٟ6ĉ=L<0p_kˊ]Bpbx7l9:C'bvt,qF"&T7蓈'B\aZ7zl-۟±( MnIr ,!<#ݰbe>5 HeZRy}w.\3{ѡ#r:6g -fq(*3J8`t3+KKmwsl82(>GBGG|.`LpeFA-]i0Zfgdx5w?KfR\1g̪o3{ǒ{á*'NMaH& H$y25tt iw;Q?Y O;& 6;L x(Ҕa4D W$$;Vj2G}ojDᴾypƛeK6pU2q,~;HMሢ\ pj8ۘ1+iCݎ{޺jaaRDUۙkTl^ԶT7ȄGR B&}5a HJL֢]P6fY.Szo JӧAG6g08ŋ-8H-vg_X?\Os5 ` sO7J⠿=|}]VfVvjmyE֝-8 {Z:ձ:_e0yj`OTqe0I.E|2jJe!g/tEui3 3LX43l+h 4Lb*ܷlE[[J̲SJszGAkS6pMsPQUKmFczL `|2@ˉ1 c,5¢ei t2nۻ[+.36Z:ǯ~WKe ck O7EXOòg&E=;^;>^7FQ-~mcyUIIUNڙ D9KN ӑܱgΜ^o9A4^Y\ecA6=H$1)EV 4 1ad[Yg$ r=MX :ů+]:jv -3--פqtaIf~!~UyF-JoLKd&r2 <0l:CҁÌP+i dY9p>0UZebI iaciu9R k:W7U@xIdcpKe6YFK1j |;(ӈn̦}T@>ؘ N3Y=eLw9rK* EǓT̎ ka6nr:K{Oŧ2R3/ARfd:K]eݙ"ITȆ"]k&(v@#^jtIt/8/Setia~A5ΤdǕ0xĆ8qc^QڝS -PK-y]x0J }v 3MKz ʘޢQG*#Fc2)R謥zgV>\vUl~ BUi{مVơ*O`T7<.T*LD ,OhQa6,-L|@(uFG<ϲ n N{rYev7;$܍NC}6RP׾H^["8B1ىc}N|ue?g!BG#xvp@Tpx fQn%h Aݽ4MԣhuK;v"8BJbN$ӞFR@tK4+ 1Np>34Uc`LjLw yVD{k&XOW\X9(I/5_g>GnsbhZњ)Ǖ,2M}LYVM)v%B;FQ\Znn7 z@ ֕D&A֗*p\=W=Ʒ/& CAl{8pQnU`A[T,@U;DQnQLr;~iď_yZ 68·Aà:NV;p$O\37)5776IJM&Owu=;xF< a~8tF0? F&%} :% elN[ I.!o+$ &g ho.U9gE)UWB={Zg༑sY[}knyz;ھ t749pSzkJT='}qh!dZ_ƸN99.IJٜۖR$fђ*}Yu3Km4$;g.tpny$O-vu gG݃֌i5 9qq}lo@VCHִ>%;hvRaܜJ[dy|P|}ХR;C:cЗP$OB69dЇ a VB "mU UmUmPۤp^NJvJ5IfK&Ji1+,OL7ԵnKW(r8\W;âor0H(.M '=N̗,@rۼ̎cKr+H%u\ܽ,MaGaW, >Q66 _Kl3lz:햬ǻx|Sں+Wj$X]nZC;ш8/6qMFmP_Կ>Zfdʈ<'*:r!\UJ52(@wR}l'NG?/W;"`JH(l4~mkręKxG[BGfEcXp ΌQ;ہ/#ƢkU$32 FðQ ϸ\&b3F wGWzm)>ޓ8P7NP*ҹNA*y .k/xq:9x=s%鬴STS$4>,Iv\sl,+!UFNq2c3|: Dl<͛ #evd>G0')o6Sp0ذ([6@R"mx=Hf"}zAIǵh|89c) *Wm:3r_!O BnMVV5 ǦPq\2uf' 1pcWiy(edE4ɌaSjcUVBY .$Hdj.+C!i(?LS&3F|oa+:oOe[塏y6Z\ȁx"se^y05N &AF}A|4QJ) +ZSHxX4/cP.X;2>._7+sEbטdk?{-ϕyE_1!Ӭ8U_& zZ! 9S sd8lJ3\ *K\с?Ծ;,q6 &ؿkF^攠lZkaI;J Tf5(s!\IufqJGI$Xģ'3.O9eZ~ʟ51eTqzqRۧQa N`?b+LD93g&bfg䁘g< I]?%Z&ܦ(mǭ[' \lws3rr2V$2c߱:DөrYeOC=)Ō{Mb_pȀʛ^{tFԧm.418/iȳX19(dls|J˪SPFȋ< IdT9 d(ڋ+LdR݆-} Ngn@|WWow{Wdq"5zi6-3kԥ.:/)5|FL_5oI'0FIPtixc(S~ţ뒛r̓^ֹs7GyF^80vԞ7+uZn<ǠB]ƕyu^ td_eBHPۈ}&@-SUZ,[Ӝ.EfEF9")oXw%uK[GpZ[hMO gUK`u ~9wk^j'a5gzvh7 s8Mk䬸kzKHW+ T\)~{x^(!9Ͼ@ہD=j6AH|LHO~HUEU+'R%@MD&r iYfz_r`hj`YkY5PhwKqG/ AExďOeNM쩧lW3yh`ˏCVyK[tTΝq4fmu&1 gL0*̉Ye~[qo8[VƋMN([ 䔬q%\^WۊBM'ѨPf$5:=$l/)}0'{wQR8,n=ۤb_3Q' Ngg j_CXF1/ )8(׿)9;0[VJ.|_K%.9>L/6@փye7i.Bz-z8Ec/\,Gq!6v؃ ?ƶYrK~.~nz :t]^uzvTu:SRhYEW{,*䴨t? ?m33;稓=K7||8$t@RCIH{*† >P>#5?Ȍt2U*@}C~)Wf VRoω}b33gNbg7iZP>:K'XPՁ=h^= :'%ap?'ئ6zX^&CpkyOA^Έ*_ٻw={{޽={3 0 {u & tz5F-=-Ѫ5hLΒ'smʰ 0`KLMye?,6Oi@wr;`!}>"; v+jXcQ:J)رtP#kki3_3Xy4-*ܜ$Lx4{N@c}7IldL`%RLJ]K2L Owp#ql_P q`G^xnwRz񯈥X{-NĊ^ro>#nJ1Y`v^G|5%lčƌ@>ݸ֗/;Q0X%,AcCY݃ǜvw h1 SWv,YQޫzkX4=/!Go{w| CaI47|{@/7{vz 1'< 8ixt`{B[@N7 X]G#B1 Qڋ)uƌ@!^.Nl_F[O*pR&$yr*^\A¼\^f'e <>,&z1RlA Qm,.&1>^aKeX9ʡd9Fm•c{OqhNO2ƞ NM'rT{ )% Eq YIO E ^4*}I/f%؍F{z!ʰ]tBvhiZ7wd=P7TL.+&&3b&>p룗Rύt)oǟG'}[SmN풣D+N5旓ƀ d2L5Z'7lܶp{C&#"- U]bQd@u&6yTB}<B{C?Q# q87]qb__qvh'o7|&"3= tkuԏpKHA*NJ.1 *;yZjv\aOׇ<G 賳x8Ӟւ}nWBiCґ::ZZhu(>wƇ޿9GX6sU RB—YvCA4b!cR8^e՗I&ZV  rxlñZ!L'7ؔ&+4 u'c8v;$,dyoe)RrIU!]hΝյ'ܘn:M4Ҋ'>N<^|ӳ?gΟY3I4\z(%`LiS A7ܳaǞ7frgwɶg׍~,ʨKUp~\䶁7lYu^_eHG5ٻphp@G}prU]N8O’m}[ϫxW{חCg7j uy}m67}MH\I=dj{qt̶S+󖝚͚mmxujy@<:xkV?ΜvzvMs65;~<0Y`R2x+n6S_k%%J@e4JёZМ>Բ'#-U(@)lNRԃΉʭ-yk:38QuR'ζX͏^Ħb&Ԭj ~ɹ7Ͱ&8"7wo@sx{WVԪcs4$'?53qc|oҡU(`LȹdmxG oMxּw͸a0lD7]o BL#l#? nx59H>Ɗcl=J}M0\,DPҹyw_`rXvԠƟ|Jf՛= ^V [@)Wn3М@r!CzCD O IX*& uy0IbˎNgvȯAa D|w3IwLI\N,mq>L8z/"wފЕCZAUK3,)(YwϼzmGZSgӆ!/&~\2NZ> ^qh!WCg$hWftV4*=tٽG3㛕{y9 ^}:d{I6#Fa<81z3K䣇~,zm'йE`(3'̔QZa%UN|[yaɓOiZE s}O3.cFw8>td\yo#eƜY&5)Q.YA;тByL}2˨KQH;rpE]* <-&OPn!0{c_s>mʬ}| _i&qbe hHexu_H"GeN JHoGSg %%--3|6FgoLJj\?׬kmr]9RqUn'!{3%GִapD#C Djq s ҬEz|[1V5u'gy{h^-pjfVbf짮CiiW5lKntdv7z$u_g}7Yд5抴x-'Yk7y3zocH֕4ki%3s&DŢ2lQK/u%߸%+&L5{qOvFguGݢ5w͝~] _}DS8/1|VCM1)D U5Tn9uIv-E7%֯xQY2ƅkZ%uE7 ԩn=Ʋ^&ugO΅7_ކ r;W[ՙf^`]VfM\pͶUn,̠_ehC5T\' euEC7֑dvu Q&ܘTTw'RruFQ@6 a3}󤮉&$T5ݱG"Sd,9=w/^/JlruSj9'E E3iB( )iTJh+74/|fGi1EZc kr|2Čb6FZ9?W"&+^,]u`bLo妁EOR7KNo|kӋnnϾ1/=} <EPIfæV"mA9lIQz{eG/KCs>֪䙹yr4o}1ȃq{$4w;bIW!.`L,"LC|2@GKkpVaMEגAfp<}U,_fRJ25 %v>CQdS ءzj D2YZvz`iǶפUtUtV]sҒX|+Ԩ*rUb%=)۸E v׭ybsD\첪ULRG Qhkou > 7¸Bc YE]rgWR7i@BLӪJZ5B:K7?".hצ({ޡ,5g6DzjK,ʹ NoS6nc)+FSm&2ڂZjo[ndsVnkڿvSemCe椚kÇO Tc۬q!kY{K֖a˒,ɶ%o;ގ8;Ȃ0Be= B-\nK˥-]-#uѶ}}|99H9zUvxѶk*e'#t" ( 8{ yꞔҞ":UW_^9zus޼=V|t:ZkCek@󫩚֚fsŜЀBtKŇ{kO=c5d2Mps[ÊLܲfjCo\K&;l`ĥG+Esak.qvoh)^iϠR}2=fgw]1YoT^5u}ax'f>N&z"CmYy7tQ<) Y3 sdϜքc{TO ׇ8scG*V;=3f} &ʝӥ[=}ŕ}"[luKaZf9ZVylt&_Tȃ RUTڶ#cwn69{pYF03䷫!'jTx>W )Z hYrʳ4lUi.d3?!(wd/\Jm~IJ7"n}De2'Jt=,[*ŴnZ4Ueބ*@Λn,F{,VQ^+(}P6_&EIC{$3/,iږ⑻7U,^>kĪ\0=޷^[cŁ^:NY4!`osˤ9@\q]@g)1h횀[\~FV%k 1ip^@j 263Mmy{"89Hq$I{VJLzT@x@UA;q+7W + ö&vLp|2{Od$>yy~>(Ĉ7gүlCgXD6x=أ$])dЦxXqbwnmw_uEъ/pH3?HU+V_usF77JSoCJCU[(a(Pqq[w+U~'LDq'oB#L nC14(.>In-^VzZO[+B__vWUjtUC`CAԥtNoԮo/=b^+~+]{{JRܟJ=/R_Yc5Ԑg Hea{aqJ$*BKx.ܳ.g Sx]owou5T<j֐ZO;&Ga"80ڬ,(G ~tW3hy{m^M/쩹AkWc86d``LS9TRL+ FJ[zyb]* a# m&)y&e(PW̽P?jȱGBmA%9azP贑HRwg꾺2K;5O\zAtly8/k=6V'yn;KڑDj"ϋWĵ֕n]Eŕ'F/ioasYG@<4(ߞ{?uM7i{(4a25%wS1X?rUMnVk[+)]~{gO8'OtYQYzW]oloQ\Cy{Ou\%!Ur&WB-tFie_UYr]v (YLRpH&4KusI/iJH/o<`bDH.W8>iJڡ25fҙg%/_2%Nm3KZDʅ○EHcS>4&e9+&Cp#Oҁ:t1PY}mեI.g 6c(Q cjFQ 78.ߵkʚ-^}2xZ--EQ_¾yQ)X5GքcP0ܙtaF)I~6?˾ۜ N;%") Hu/ܳxc16#!ŸW6l5 # ]GsJOn?2\holUo*1 ֵ5CBw _kkYUU9X4hLn؞/DyȔ#NaSSWTTɊ?{)S2xuΥĭp̂((ZM<밋D(мP=R8LdU r #>(h9Y:,xCv?Լ"4 I߱*g!+XUWdoB`( V^߭"o[F*37<}*9ųJ}MrTZPnhwv坎ujWc=6Դ!-1^ M%EU;Ϭ[wfgUQ窠w&`M7bn7%S'|S5x*ps-^7EOA\FY92ſ~Jevz0˝:uB.FLRq?v ζˁ>bB> g6R\S{N 4F)Co(5p V$asa5$Ev]y";ViN:xm/z %EʍvHӠMi|zǖE,{7~:HiRHpDqg/".g?F Mۘ,1% [d똧R]PP yxXi(tB@KeCrJI _W-ZkҰB 3.xGu &=a, ec1W|WagQ̨+x^-ކo^;'>4{Ìw}{S'jg@BZX#$!^O[zV^awkiٷ(8m{ڪMKWt}31<@`9TtQC L!BMML CX˕'+J5<:r*{9w~eMт.56Wm\5gEEG!V*\)2*GY3~x'E BR[zcAyg0E!k]RV"B$h&%B@,hn~ vsG#_gDh1O$wSݏ|3Ŏ/:F^'ӣU:B/~kR2߾hEDGkSR:G'U#>GinٻO mܨ+bW&wQ/3%́*&m"bec?|_WXPqeU#! W1 Rfe9R ^etb 0f?Vg6V\u}krD,pbq,+s}]`Ah_3IÃ3 %i1MF!|Y,qJ2LJ#sbqPRaUp'v;%xi⟏wyǏ,Ʋy9-O jmYP7|s>t-wgkb._f+q?m;M$).|ĝC'u2,r[[7FB8X UR/Nr\dr(q1/[k!F.: "_J%+\dh ɵy G:(# iѰe2z(jwxյƦPZOogi[P%3 {|U ʮq%%>b4eymwD*1߫ji>Z8euHuIKrR /wZrlj ؜ےodOSRq<\a!)dkUsaW/ [Ruk=3eG\q:WB׺@SQᵟx}ԍi=b3W?'2(|4jA?Fx^WA>*HP^'HݰɹS@H/VSkܩ=/ny4~4UjwkǞT+QmN[=Ɵ "N5Ni0Q|Xk4*(B>Pvo7KK +˔=z4\4Vnj3\!c (8d+[U|:gېb`(˫1LNѾ$WCiH%<ω z+CYe- pH Jظ`iOUIc~'be eJ޽ɑT4p̣@khz]V| ㆆUu/hX|$Q;+3B]>c +Wi ,Y;.uLw޼1 `$%99i<2H!:>RB{C -)T$rSXD|u&)B{$ׅUU.i ZsN-2Ъq6^RbbKcKlVigZꖺ]+K>k9TƥEk@Q: ){!;p)馏wda_?^צv`Ɉ./[DFf@ވ@P!OQl9ygPX%k{QQ&#IaO)zQ:d,g{ jf6u\2#1K4`n2^'plb:bZ x%jcsc}wO%_= 1O^p46HTYh%_ Z4rv+Q(B9Q4 \k%Irb1$5^C&I]#bpΒyRcFvEלȓ2-+ti&mʖʠ 1x400J˓ŕ[cT‡4T*fyQޤ* zN^B =6.-jt۱sw$m|z+5h>HNNNi#K'H‚990-,粦tX4@h:,`3a[ENce_mA3ʩ'vx`:k ]:N ys\dVfBZIqZhgPw_ߴ RS%-EvDXN_O&Gu6:w/J49(]d`,L S %ハRHpVjG(p]>qwybGYܹ{UQ_/Z_mJ04T3wn޸#vɺCI\s͑AUoKnSE[瓕((x.BlJ)+EG1'"^]Uz3]gV Vm}ѽ=tvmDw;=sSҶ㯬]{x{w9wPբ\2 H5c 0Ƌq}Kښw]Kk7s]&`SP$*m,iU@S'-Hϕ.ݑFKD7גu{V?vUfGpvYۡdž["R':اI%>Zq쯳h|.'TM<rݦ‚mM eaL_IƄwt 'e GMz05.xK65;zSQuKþI+Qc3iBr.ha&Qe+/qA/r]}"Ǵ TnG qD/Åh\1iֹ~r!"܏7Gᓤ]Lo6 2^$1, d+@Q$qY؃3όm`A <u>AhcEs@ ~ KGޟf;f.ڪF⽹؁Q%0gǺی,l|6C?J!^OPv=ʼn|!ɗ~IMp>&VE^_4N_)g i([Y^Uo>^њy c`x$ @,FK 1˔MŢ9Sl5We!%g#ʚ{^NQ{dZ/$kT)s "Uk JЪ ,'2`05{Mz٠1_P꟞bpBHxJr$ &|"@ Ejiwh> CrK TFbi܁{Zp^= N5##~,ypX>(\7CAD%T \:Zkl9Қ5/]b+5vNKCY/kiK`ΆWd-۫Gа-bz6pOk+5tͶ(6%K w@CuCȹ$LQ@n7lLow_^.r/4LW,ףy\g4tK.+͟?_5g+2ctv\Y>''BA=Co CrQn-! 8;GCY]> 0kp} **Ƽy~m_d跱JUn(Pd3FL^&S~L&8K B6Ad6CۻnT=~'A2ZuOJ@U G"pФ,>, E ^'D +erAo/yg)!l'wkTLw"ۨz$vn.Vt@ϏrjZ5IK&̈1zR|a*$B 7ɠi|m//Tat $RITlI(hTP8)LepD%ˮ1s!ވP]X٦ T:ǹĔ^lj$klio:+PjˤNk]5RX+Kn2OㅯGL!knWӤ1 ۗn@[=^wc*"sc_*ĪJ2X[1/~C#+1e|2V.o vK+UQ>ͿD?lt}eL,[νVT?;ybzr21MvUx۟ټ*Bs֜:IeHAuj H):mF []^D]k819 ~˒l/*S5[8s|5~G/&N<S(׀(:Hdq7~>Ŗ_B`nil$ GTV_7U b%2<6j~@#0n!cg"P@4`zTc4@ j"߲t,PLH1G=u?}7}bd6kn}uBj-Q+UKR ֽA|~Ƕ G#mp$9raʃ~ãRgJ@IO+;چ-%NaW;{"`sw7Ebk9uv)k H̭pˍKs JT[[% }IZ  7 #(02顅ʢHHJ ֟bKbHnUYfA$ת%,]K0?EĄ}S*21傸XJUjNsx5ڠM&+ ˤlm[=]GVv@F{1eCV`trjh'[3To'OF{֒ث6Ű*?9˖-(XZo (U 8& /%v z BMb;ӰKߧbfg8wOEIstHd6r.뷅^ މ%\^z!?d߆ltߐ̴hEjxZ"E%ie4|uitAB,.'3nHv^GS5H2+ȼ% Ѱ>M\$"OO^cױWn3)Ѓ<>|'K/-\'TeWT ؗѽ χ~}鲋\5#HLJ}-h&*e\2R5w| S,YnnnX\Zdj}U$pi89eՑ "4 ͘MhUUۏKl,Cu?DQ]s|dڂp`@/krsk}]^|Ȏd~jMPwS4d5|Klq[<;umqh15$&2Lj9K Mgi:%VdnMf pZWYLlZ,3h;ߩS4*%{nUl,49%dfIi],lZ t8TVz5?]ɩe{J UmC4C'tq,қe5RX~>>#WbEh>s? #C .Y$,xd,&19 $%S(Z;ټl"c6@rЛ X|W}.yhX .YзWNKƕ5Fo{rBa7K\PWDۂ蝁2;C=Qoxs( >Bus̖%o2鍗8)A$ 6JtG6n_mT# h? I_By= m&ndJ؉Ɯ 5eV}Q_[TGhh~E#O@}"):V]+wA=lsCL)0 ? o_1 [?j/uqU Փx3k2[!)ϰ>cK\7ܸ&D5]%Fa>2>xe-[Q"8hzhIQ W*k45֫eym͑OSDY7e%*V6h.~)7C5 d#3Jg>qM+v K]l>a7oIVt5 1 "/ItaPxA7k=^W솙3,- ՚%>`1&; 4і沵LH.ulmnaṪ& 9^MK2[ ꭯mԸ;jV50fr<%[)L^cm{[vTP2b2EVw6m:NJQ3sxMHlҷd^?+H}s/e ~c"^S)zuzVIofz7[LϒЍL}V{6vm dg?DVKj+u*"gD' lF#[mF E/_h:rmz-V,Ǥ^s>^Vkř|[.ȡ=b]2ɵ4FsM=.O5/hax>h~#YecfzCax>8ojOg:V0 +ߥenI[N9]{th˛u녣G/lڱ/L+k!wkVh&nyc+upN+BF'ZC bT~A7h3Վ:|0-WFj]Y\d4k*̵e-G_Yx뽓Y GE稞4^1 !W5~m{,)dkN?yͼx33gQRٙ}ǎ=p\[}ui8>B-%~'$BXr ; ߂/զ%/1k Yٌ #md1Lg^ M5 S!Rs '9UgnlT&ބYW4 jE!@LP ^#BԈˍO߷}ӫp/vk|)'6m/;;p8;iDtę+E-DUkcL>zK?c$ҐaHo.l=uÆ[֯'Iaz>綛\Y} z|γgܸ|:VJ㏞>(z,QO zh?Wа7]cCأє4Z .SqTM:>~ nyGeB&=[0=FQ)<ї.? JS۠q5 %K%ʇ|bí+lXSdAyl+23% ;1@kċc$PȎw#әcc߷-2x" 7n*?: ;݁#c{IPu7vw;w\uۄp靟b.5px`G]ޥn2h<]6^--*Ṫe?kO߾ ~ pv0*n@'I/#NE=͌ (Bdq~,y`PohI^F|(ISSC܁.^#s5_Q20~0:Iن{&'PĆކ _5g #H[?4=4Q&ep{ip.R)ǟ;YijFŞފ E~YӞQIEװIwZ/iX|.4R4gꧫL~Qʮ&ǚj l(Lݓmdl&CH^ ۏrIWS٣KsypEy>KM%>{{HqqIw%W~!b@u{y) #e_2)CT?{\=&P8?cɱ蘢x8uxeT[2s Vedޛd2m:A`ʟ;AÔYoM~ h!5ҀFbB %1 =  c],&a!zaeRǘŋMqdEAP!8..dݴV۰T؋Ks"!Se56V羝?O\IV;YE#ζlZv^T̑;hMyϒs ;2W')ڙd  (+81^]^[d'QE9> 6 k,rU"T2Ie[ʚ^Ԯ` Iڴǒ,~v?:*@|fk7ūJ֭l^8.prP14\Ť9] L<@#>qfeWI4@ 'nu|1э0عpI|FA5oɒW&&YWWNn!j7So8R8@ЊI3BoD@ßE]) o7xhǏco3q :f,bAor@Vt5qΦLi8_jp,Lo+uU9Y|vtuӢ>o/9w;d pRt'?Q>"M'v??5)pR ÷㴜._ha)K< 8/(JØƼ?ΕM>Q1R-g{y,xϽeo!BuȻ;(" o>{6:ߵԾ@&Sn3}yA^%} } CdIt^T08u$yrffrjfow0bh'+ z\bV6f3Q5c[644lh1K>5psY8-OcZ:дZbY Q6K~I0[.kqA\R EV!a|6([&m+t7I&LjBhm3 :]LkY[,3UO!Rc]c Aʥ Y9Z2_^ {HY-cc>ly Z&1f_c:u Z $9e!Jp,r+~^ ug흤l-2kŤgibUx\H'8e2x_z2IXZ=<)UKdǠ\t(0-pDCgU32EkrO.ZSSJY9&tÛiaL.)OsX9yESbl+e5)EF?xϥEr4|&yZ ɗs5GW,uv+"WP`|v.[jPט FFUo? !2q mPe:Eb: _ofTy>m|,m*tR-[ $LUkْ,PT.%7s[#\YS.[-FFoeV&)UVQ(ug"&XrL:VFbLo qsA,X7 5ce W tY̠qLRJµZ/ L}tgު 2FߛZ-$o2yX hV*∲d~[`j.3:tV]ѯٹgfٹ|Ruy\20宾zbHSe3HUmTb9CJxbF*X\">Kp8c_VVL!4Yk4N5lzjvb>KZi󓎢B5TW#R~5 &nЪ'.>S6;$kZhZMWI^ԉUV{c>ްR-+w8xGBJ^M? H29àx*_> K_yY1*>VY@(Ԙj_SMJ K9ybV(XTrWŷ˥|ؗX;cE*XPUR.JWYgQ)Te>,,JʚOQkm_Q:`vhYaԝ}%A6NZtNЅrG0@ր![͢xM;vx9ЇdF{tYnBl|b`q.$0Ŷb\//.'.䚝#v+R>^kh |[^rT,^]|"wǖ] jr$N'.+1)H 9".ΠKvP>T bUWݥ8K'jMڰĩF)ӵјX=߭ōvfEz+0- 9:k<CtУ=nUɵ$V dL[:@if!JҝKF'U8pQ>R!x|ѢuΒkz\\A;ű87̣ޛ?6.acw' N)y(/UWQ7Ă2 4e0BڛHwxk[ Ze=OqDJq'<[UJƒշuj ^W*jT϶j8 `[)G @QhѭڪJBEU$X-0)C #;`%KpD/haҨ%םȢ,Lꬾspiu˃C5J2/w:M/n2ڢh/ͅپf}yTZPfhOP3!ܙܗv8tNseȨ~L) ]6PBT$cD#h[WA-t{ν13ϐpΐ9doNh/iTaЂ #~o x?˪]1[ݱSCaG%v$bo[esWʜrZ_Ǥ;"!o 5ށM #M^Ѯ<=`mc" [RQ6;NJ_`ˑX\ȑOO[XbA b;uCo9Fl=+n˖,[{{7BI B ȥ^%.]* wfWey3;{7YtP:ԐJ_+KWzb6ܾ׶xK]֮ q1L{ V¤`FÊG'P$SzzsN#&֍HQІZN C6c,S 64혜CT g=^2QŨ$j<&T kRHVz,81dCetEtT'!#*YqG +Ò[T}Ʋ_.㢚ڎe$$H9I"LorcY+ T\iF.+>+, 'C Uї;4Y}@v0g FdPh"!Uo2 ZHy "lʊB$Yƴ"E6Zz w"@=dT 5&Bm ;{ˑCr۱ˆ-X=R? O &Q9aad/Fjf%şP[gRɗ'$vZ9l![rRt̸l7Z܍TflɌd4>uwU;|>3ԥ.k#)eh|l腫L*ޔUe+*)+08A#gys\rn|B.咉\v>þբX;O;̒+2}yGŚM!ϾC&Ċ(\&to(gKOp|zh]^z ~U$ F>͓1<% V$ӆ{dFLQ"S.[R[,I"&f~Klxg#bب.Ur$XQ)N򀰵C8E"aۦMtBnRtr'کaWrm|D:i|B|z#rkksSަyE _| €Vp'ȇwB"r&:urB9s ί壎q'41пNӛzHpyjOSx)%5TKU d3l$e@B\ak"ecN-4 U\WΓHE2{v5'Iok`roa32R4dd1ꔾ gzJp2JQf&bZ rD{zQNX1W(ap&C'4UBK!ƣԨJW D@{?Цlܓsަr£"2+)JiCn*y; 3UFX1D /_HwcBqp+ # ᤍhL(+\RA֓Ѿ2e.?;mjfukpY&dd$ftgO)^y_-^sN[ZZ[8Fl9ɇ^kdxi?P:H:rm14Nਖ਼=&sRۡXX.0yrq͊˩U/3љ϶jźdQ%v!1?h[|oy_fdp,"P'C`b)ǘ{I F9a[X 0;tƀ tnMR~yc+pL>1k2K^?Q*b;lew ,^o![_30\+8Ir"jL&xmͫ3'F1L2NZhc/Z5$~žC1~ĝ#f袅):kNc<$25IU,8 /-u*h } Vw}.dvN]!#{A*wF/p֮TشbUd >"I2YRe`AJKZ7ywvvz{vuu<2 k!ZF! lAIO,HX nTJOm:=Hٜ13m`\WeL4c I)#Vi\e9F;iSĉ]c&-HGO1#G1 ֤"Bb_7<fG5nԁ{F)ٯSʸ( Vک܋y|#wP*tZ%ۣr#g$h"ePɍRWM_fW0+$x)]别̷pKwq_3?V0<1 N4 Po!` (T$6!6Ϙר:y'NϾ}`yĽD'ݐme7]l еmtZit 䉶K}W}f31B?NZ!%Uf]3Va ^hu x$R|{_*cOS9;+O ]bc'7SqF? ;FQ߉pcamxgwFp~zow-+;wGgsxoH[tT >[fM'cLjn!e5MľB9gUD`HA6-?̙ !qf\YNh4Jwu  8 HE AfII*; Z9#Q+ES&KG ͓s%!lw:tǦJqZ;y@ߍG}<-:-㏎"#kQ޹FyToWrӅ ` x|#wbbce cp5)Isͪ1'ɕ`IsqU^ ٿ j- -@y(9,VeqJQ唓;d6}L_G'>D= %nitv$5x͛SR77لߔ2'زO'`|oچYm-{ζ;_6m}Rz5p.| (5#ƂN.j2^" ^WWz fx`-$T f: %y'A^ZII#i@W"UIM'S֘48s|rY7;bN΃k8Ov*=fA P6,@  /\TEK;Ov]f>Gl+Isr[h %VkR2`X)MRGxGiK9d̘ex;NBX3i.B:i: R;2\tWUHb+!]s:j,vetWg*YU]ieXTx.sBYfTGC]XYFW6!7ĪÕ _׸sm\WN5l:9 7$]%y- uϣ-ZK{nCM{&MS-N8W!+rcS,+)>gÊ1-Kk֢SN-.(Yn v+9`QRlP=Ϸ0In*EG`BΜԤιذ-u?")=tv³h,bt>Fpn(W|z֗m0SOzMwo*`E^Ű/K! ZVպ)UV!Bvk!\ V2R]9ZY˖^bmgoF ;[=}HaI3SP 9V ([,y`CO ;q/C@;z.^Ic.4Ƣ{ .:^'x3rPXe ?X-sRG"SSmZuzVWkXmVVz`<g߉ A5ŠcNtF^h%&S幫odo>-_cŲc}LVLoʀqȭ:Ý:ݩdi/JTrg8| ?@TRz&:A?Ӏx{ 0?f}{VOq?ǖ8\זpҘKV7͐C},R0fq ͪRWն KF5WQ3m{GJl)jHQsǢ}f'.1(~sܬpFǟQrQ`zGeҩޜvM ;֛TTYZ|Zbutz8ņڏƷl@~uO_uGx%W%e]wHgC7Y4̩OOQmtx}rNQ#JV_epܲarf[Y[Mz4ZHS/m1eH|/ qdBCR&:]ʦ*]<8JdzXˡ產Cj f)UV@#|T枃g1aѨ=cWT,Qk {ụ ,I6ؤUbqUv%IjR&ѓeYߟ } ZٹiݶcBR817'7džw)@J݊/Qʉ9M΄,dᐱ?<9Ɲ\4MʜiN,# >oQ G 68/r[o?/'>"Zy |; Wu,11+˧%)BL]e Pêax'c!d]Ek $4*C‹|P5C)}4qL٨&- J)ԐQ7e< Zzrr͋_ZNy}r>h^{tX]o'BD2&fIg#:ՠKlq#H`38AG_Op*pb/3}gF1&wmjiޗc/gҘUr>kסwY|R. 3yOt$F%۰mbw/L(()E$dgj60Ab_ѱ-]=g9s(… '᝱`y%1:@]")g~;S݌ ߈0ODv .9ؾO;]`2VVEUs-/:t@o-nu.(ΪrWM&7de^E먄2`k$@8TOjl.w1 *<4B^±5IS#;~/S>;O}I >7uD/Wf{SAξLE]h^cٶHm:1뵐v=܃䵟~ ;d c޴ymy; _/}( `0,t /_o~;JRV'4)^LQDӄ/3#k1 wB^M|XVX!)@=|^z?|=tU i)pCsPk3l2a[ J0lBvFOZ{'N9B'Jd1Xq28G E|N4;;5ˈ}2R{ϞRd~ZAU$ɅY:>+k|ØVE,%y}}΢eM9wƾ AsSQLt&%Q(ktt QxAMI7L,xj +ʧT2 P:s41H5 Đy2)Nd7d&nkxܗmEn5SR iB{&^^Ƽoޜƞ,S˫'HԤ|"=3Ku5~5Ky-?<ӜuJ8_u upguB* ǎkw49f98)x]ܡ ܹi 0GDŽq~&`Dw_0.~)gN} (l=vZa1O, O/8ƀ}p|Շ:Ku%z\I6>=ŋKOީD{D7Oⅰp5\FY8mC h9dGF.E㪣9J*PbYIlq뉽ܖ|kj7% 侚MP"wL^9W;h\I)DY'ffMo/SswNW&d٧z+w..kw.+̃ | 5$k2B1B/90l!_Do'qb& zL0: .To-y?0[ze?pA(z?K85>M;.sš_uڢ x%\GL&~gKU@E[ATNJ&{LOxh[3u6$6=`Nqyyp;^}ZOzFcyʏր0}}Zdz "sbḦQ"9?+X Mr6j#K=I?I15*l WvgrU8o+d\e`a<IsfdUjė _Kfv{bJf?yt$`8AeN+fs&ƆPu_2nB( poE ݞD/h54z֤g.UO.upT-MqUJFVia)}cFU幕k<ˊC\% &ZW63}5K,*9[L`@xv*$}+yTw3qL+C重W^@ɑ<2{I-WojmTlX2r 8?lwsbb\i=BMeo-vշ߾|S掾@ uzq@Tf % f ~s\3C:Zqe*G.u0QlAOK ~,f aɓ#[)~b4p|_"y,)нEcŀ*/?3{/w^o;Ĝ{Mܝ A3nn)/u΅Po#0:Nl$u] ep-Υu| C=_ ? [1KctD yiF䑧@E=佟)ܘ[aԄCmVB 4-Ӵ'+Y}662&Iz)/PPq.,TYnNɥ@V9lyfR5iNfh oN3`яσ{>} >;M'&)Ka§DI2̀,ƙ#R%7C$ ,4!y[No8kGŮ6֢꿂nO:5Ңg/}wTtXo#) J*i3Gl!~EM \ӈ?ۨCxӢ__3 FBaY43wDh­pm om {NL}p֌s3#o Pb$hll$?VWEYI.h}n;߁ocX?{fM-„a 0Tp8Bj։i2OEpq;~He^ܽo_dNln,7vޖ%hQ@Viހ>;#U[U\0D9'!76h=_L[} μI(ϘlHQnObZ1_vb7ɎNHbJ/~‹)[m;R{ 6ڲZIMCM +6t &o_4S(QN*H-a͝bv"oNw![Ӌʒ mw5SF1t kT]/(5kVI7"T 6:KaCԉ5uϐ{ L&B4oyWdptVO`L|܏Ẋq(&3Ǜ(?Jf׻ΔzSe4hVxYfedG]6ø yg֣fӲęPћ:gLVgg}~g]uRn^RUl43tY1hCoَRtQeD6' U,_ZR(B4Nz `}G牓Z#jc9 jOoBQU@Jr284g*ʱ Ω7xu<Ӱ8mz˵\'Uqœ%X;;~ϖ]/J®lZ # Xf OwvU#c j(SGPrbާb b.iq;?6&ks=qOj 8 {rԺ\{tyO1-3z B_nBXA՝)tT%Q(H#2Ly Lg؋&bTyrYmh:PUEؑ974OO'-ýp:x(ib+ EmJ#OouQXm՜ ۞6܄EUD HRl]WE^ave"ՕjI񧏙8&=euPrK|eH2ZZ2ַscv \Hg[vjR }ok7'OvѪ7 s&U\XH,F:S*IB%@Gc gXV%'m#7N_j[60Xfjfw75q_>93i|>G/q .ql[ru NÏ;ϗW "/qͳ޳0jYvPKX^&>f˖=U{2^_fٛ_&-YeKz+Bl{jғ V_m#ӷ@mdL 'vE=t"@l#)|fX \GL C+%৺$b?~"HTB|i(;EHb_$ :\~d#&IS+A=إ# M&O'+LUb+_zBGpݤ-^e*x.g) /DC3v?FY8->$!mV]"냛oZi*W2׮\;U |Y<&ߌӞ%}俟K5zuѢwnopݽlU肽7YAzb-P Er!tT⢸NK-n,aJ̮/ xZ]9sqA66]tWC{q4e#ǵ58{+mZJR=weoᶽw4v흐ZiKa` gu%='Z*L6J2` A^Oab5*N\:B\+dHCB?uXne7fԑT^bA[z*}O"_`3+j%-awߖO B`m$rڮ5ݲ{ ٪) J 7(-.imյWPh8ֹorfN)k;$6 e)׼zyCqE-Lʹu+iěuvYѦC+ثt~gXc/W9. Ɨ<Q+c\,z>oPVlfYf[ԱfrR)i*\aT+ -I`y夃TXbg,?C6$A h97L~,9٬q<, }}#iDdNL},H܏I]^mjMjNGQ Te܇:-{-sMLQDriuS뚾lc'gD$L sF-%)۫*&WKƕK"WcE|JT&$E1]V>ojQP&cx 73a{GWJۦezaZC 0;kU8[ .q|ey&B!"aV0frn#(%VJ'J rBC3om_HT%lqO^F{vyEH\:B,b=ge-#ضVUVz;Vi^\ZrK7 _r)[[#1zm%btOtFĆ\GXѿct[wlq.t466 S0.a{}]xsYȇʝWgEhpK <7~ U Y{&~urOJdJ.k<̽~J;zݦʎX{f-ZȂt pwgdO,s6#@ĵ&8KfV ^>oi9u;2Xִ9!yUz]5i0qcQu4+py;puoV`ͽ%iuݝê(oMyMY {VW2-aO| eN"j fd Ap ||HVrEʼ)m,wJjY~P[Z!$')k5ꓒbc[a1A|F:(QP 'Db_GP>ҽ )hqN׸=~=SWk{7<4ÑZ''4,]1} cBOk2BF0W-[?vK  h==kJY,j@ejN@P4_ge%jievI:zXU+TjcҵQr>SL`(v9,/QUP|hv8at26deg.2i3 U-Oz Yw>068:Տa`Ij>oC q9WQG:‹^LLuc'_:x hں3s)pSf/iF];"̳?A _ڙZ3`w; !%1˜Z:3|"Jteb{nwj ~,OjKLM?><=PH,9"'/?4)!)l\ٜزhyi BQ-UN=\5j%\utNM㈫T $u|TX>郗o%on7GH<0W6,N((MhQeZ-945-s\gyb?P5Jobd5u|n\X9&%R}-b#:As&_doS'frmUZmAy-'579E\"Ung \#OؐdIDWd |aQQhPC d~O )r0ij{Ǒ;ZqliY'}fiF̧w{&,*.UJFp$ īf'߿~\źGL}j{C}?y$}Eڄs3C:Zv)clHtմ j볈lJrՉplô,c FKu\%2QU;FE8Q;_,]KG/}tɗ/]iv4cgwMJC_1zm_<77w.MfP?nCg_Gl+eK$Pt2_0I` IֿXf NX>&,kO0m" ^rBJUX5ƐbXhP pcx bҨM(Ur3,'x~~{Zulë=Ml;`@;ěuOiUlTk/?سL,{ʡ{}N!mGP:7s\lnh<^/6%_E%C0ao"۞TlȖC?R:IJ|A*EUx6-2Jfɡ{Pt|fTfœ#!s|-|f%XtS֙S"KWR.' #T۶g1w 7hMקmpxq9$,FN2|CU8-1ZmRjUB U= qkx8\gqC2ָ#;v]֛\mЙҹISMvr=lֶc_дm_mq'?Adv8†է'O9Ahv:ן[)u$$+gs+$Kk1PXc1 1sctKE(HE1Ai dq*Xt{ nhqm'رXSԝN$J cpI:{ 5@fH3c|c>M%w7s? a\]UeAFn :#>+X,j*@jꢕgD+SMd~g׈'&NƫSGH':fB#5v.8ڝ^`RT9LApPBLt,vAtc@;u$.,jFnRO %YO:LmD5|1ښ|ҩEqg[k$jɳ_,Nw{1oǘp'38+^>6WgћhA <䝠|Ofl/zk5ƐS>b{65etחt]l{+ڿozo{'p, ʣ ?IpXGiKeVDzfz#w/ToNM5M8nqZ CMvȒԖ7'+ydX2֬?E,RԂ4㿏y}|Xf6X.;6Os!;Rp69"ܚ*#k bddYJIq 7>:ssy#Pġ>u,C} }D)T晱lHA+~ЫHzrFiԦ jS&OVR%.m=>=99{:&Kܺ,!'嬖2+<à e|O/֨B iT ҩ@.~i[UzZZzնO}zG}Hw\XPVYYP#YHއqLҦX_><K=XϕˤbteZ)(nz%U뵺qHDA X6u 71C },@lľb ¯kkNLn%}{;Vs0Yϣ}`$_p?rhO r%ΡY,8qٳ>3A}N>8] hsWG(ŝy:4l rp(o`@SCql F.X={]criڌ0NZ<|l= +'nM3rtȌKحΎ99-Ƣ"O{tΠܩi$ysOxhEu[O'Yl*(bgW  ,<&LB{ÝdTxې$! 4!Аp;(!;h;Obd+O$'\%'RǮ>ztyh<]g^'D4N+ |md~rn@0lnݵvO6 HݔY`˛Tn7Lv4O>v͓s'u>85_R&TvVXڳ;+dmDu(+_#Rz0PRݹ㋌_m,_mvǨ2[[3UӫWԬ~|W׬X=uj]]M=n)hE# -t961n/jIJ1t|夻gϼ{Im<5/oֹ mqB/'*8e(FJJwc23,^666(2 7b|V)ǸVvN23'nj[?<1]JoͮKU*S, G ]/-`Hᢑ[.| yOeer&!&f4qw87+FoF5o6y>PV=;Z[ &X8ՠƹ/4RϠ4QnO ۝^ǧ)IOS#i'i 06W5$m'Q'zn < |GRxf"ǛQFVq.¥477 0Lgo=;b{JƝ[G ާ/pqrENl񦃱E[c)uYz=?C)tIФXXY1Ӈē<Ex엁3Eu=E[6GV\׀0~.E0\s1l S9u $X64kn"D>pfr0`me*:voȅ,Lk'lj?v;s=sۄ6ؕ#'lnl)G2D+E+Gƶ&V㥬 XHzkd5B.q&B%]@ >S2ܝYFq 0&5/1~$|B] s̮↙TQ~ ^oS씨8 dϤ;OPW4!̰gvB,nfw|ݧنց uZj'#c.pm ׇXt"@R,(f^dρ"d?H.j,xͯOc6`lRq52)yd&Rc#eb]5)P>^ӟUᾆIK͑r,Ti 6Uvʛ"ozf.mjJxΛwj&f58~g0wsR4`\D=˝13|9m"MFQV|`3T";Z&JFXoiX='xot)1p=bcVRq>hv#5a9 FdBzmE(!pHr]oRpաU8=*u/ϖaS\bS҉Q=:wg81Q {0X?n{Ө_Ǡwz)@a{'&ԟ&$c*~x``+>eoB-aZe6K+ZJcsz9|wYeϪL_417M#nȖh2c;9 0()1iC sWl/NdK0JmdYR &~/4}\6ϠJNT-Ej1wN޷-jؖy͕o7-ȕƩbMTBt=[m "Wutuw#SZeRJL蔑gr9b%ǩg!LB|<11?ɬGG4:keb'X``ILpK+ cw-qavLgS̝=^R2)<{gDk6DK6bOC α!ǎZˋGPד>}z5| zQ=끙yPeu=5ٺWPwׯ>{61>?%sJ`1w.m,$@{`=MaW v% z*&%%PO$6 u‘ׄXf9Lq8,>'$4etNfYK3;'˾4RJtwzR%NԄmzL9jsKm4B/[dZ&u\*xt3|d6+GN~yO<˧Mb"$nuF;)w]"Eh?$܅kx)B̼ ~Siv0ݧߞ< #L=CFw2>?ʊ6;\O+S ;KF~ю𹑄#8j.vO*'>De!G}EׅׅZSnt$Ŝby@%w 4)Mz~[$x:;@ܽo6QSx2o[poЄj4M}FWoA>*PRW[sx~jA/i=Jk&j{T8'>ՏՅKQ:"{`U.w͝UIS%I.&9f/VZ:Fޢ9M2RY($SLF̏TxL֊.EfULRL*ƭ&Z%D-Ilrqktyz"R㛕YPx\z;ؑ!MHGJNQ}2CЫA-}teRҽ&uvPHKƛ:E=E؋ERL+bUEVR-;\\>.;:*Yup {wM"B͋ 8zZNdRQJUSV.QK1Fmbkz Wxޓ>4Aisŧrܝ30'I$ԩ"clf>6p5KsC W'o7n\A4d *lMYMs?`ZqtRq3UU:ׯ?SSބMn\PO+isށHxVהEI!fTT=wcŢr!*wh(o!FynQVV&%J>0eƿSMAuKP} EĕƿB.,aR4t]cTWt۵6Z*˪K+p RYOI8qXkƮRDѢʼF-rm_ LT3ցhh2@&]}..IjKKk2= t8, N57y_1xЄcHȑe-vY'GŅϚ?M↽T"4,H+X|`a~eXA炰Z `CT*j ~?ˤif_02<$`xX)JWC`yl"р%#2;:,k"c~Pz]DK,'_A?MaAf#|+tZ[MxjJD`a6}=[KҝS+ /K*| ׉`F{+X7߀k_k#v `ڈU@D`/AyG/(a-ExòSp[xh$ra4(xôj H`a6}=[K!^0_ tW< |&\aKOx8`U) $ MBV Әc\au(]>?[$6; `xXH`,Cx!<!CA|EF`V숿tcHGQV;G3 %m0yGq2 |a|+tZ[M kò+@M$`\HҽLsA0 F`oh3 |,@. E2?yy$Ÿ!"p( _fw0\T!CvX G+O|MJr#+>"Zpf+3NZhZэ(eqBrb)IɼsßpĈEcϾ dc/eٞzWNz$HN}?Km}9r sDϼ}H? TďI`$ RPH* }+4y 4F`DnR)A }۫έ@*FCW6m85fk++$nYz3rG H:9%]~;oq-;'ț]U5&egOZUS#>P57#+g/6?I:1⁦]7[ԲY}{s=o ܌ހ*Лڛ:;nHQ!X~Gy@ V/[4 i[yH))U( Рq0*W!E6ͨ B <`*w8*\śt%2b`{%;/Вwgܬ޹ߥ /-;szT2\\M>u7F̕@k;lN>ݺuE,dnBBy7!eP[F:9;{QL>7m2#nؓ׳id=y޼=~wrw4/=^9CE sYo:_j217^?֒Fl[olfqAK"'?gH1pA|c3&ƙc4&tIb嚌Θ^v.(Beaqk>?fpiӧ4  ^CC>}Y2?x-OoQ0|07U}^<g٩WDTW41}LsBElB{o!;@{'+GKƺ朊= D\mjBuzKwZ~Vg?K@$4NeTCx^ĬNo,<oM?*pҪMf~_?gKڳ ь}66j9LVW@wL0l=uW‡KVw{̸)IHm:5 M/4)yE9= 9ɕ,oB5 _Hl CP>v%'; ܆ F{e{ű" 'djsrL̚ђc6JRलݍZh)jWUb4tMmb@DiHm^Z6nuNVAO}--D3р+O gݙ:SMڤSi-W')b70uvIH{꡾#WWzfnyFi錛6,:\q"<36ЂW]QPUg/(E*UvV/1B}{!^E8@P3UR^ 2O{aCW_!2i3f/H K>?+rGఫ4UL&eTO/--*-+/%MU7tx65ob=t_ Id܇BmBՊAEs}68c# \Y̌&i ׏ɐ=s҆--ݚvBaLzp750%˾#O-UnJJj]a+Mޞ7鬝w щ}CNlAq"^9N#WŘHgKWIJ`wZZ˶&ӗ;[ Z Ikr|0Ζ<=~X~W6¾2P0!ص^,e0tr\8q&pt/C6A2tx(t'"cKG|qpQ9;pw LkyXZ%Ab+4n_%gy-Q{MwN%w+@oB yt{~Rx9sFtg>:;2vf$ s l9pDt 5LrP5ސ8%אn6r4pHv.[h\r!p!ReD5S1HPgp^e;@U9Ĵ2MtI2F%8dc^`m]<˦,(HD,ύAh 9ab$.9/NJBهҪO3)0,Z=^dr&r^Af6ή' 3J#(ZSl WHĊn 5uy}B,xu}NѹolQl=]}PRK6\7NI4siJVW8okt#|'`]-UB4k~Q/t^p#|Yʥ%KԉvRã I̎\2օޞoz)Z `3Jn.3rlwEм$x5:}aG=;v3mˏq&IJUbu7'e;`G4g%]{&vR)kv)ܣq|ۤV\h|0edsu/*Y/>Ϲ8(Z{5"!}ktùs #vX<ܹ~v8 )n5*W{^2}~3Ͽ.  Ȃv;CBx84Z]7nBz@u~۶76m< {a67g7*_v 7eKuaMrx3J5k' 9|>/QA;670$-Cӧqݩ|yW 8vv~zUzH~\asDK~9||qnVA+G,ID{drV&޾"Ýk\mjJfw%K%ҳ$ mb|*t:2a݅ӛSmusd'ɘWhe/h<;*n$:Z iLc$W/rդEd c^%$R\WݲlxR]cyvfMܱB4%QD$Z3r"mb|<(uӇ)٭hϘPyB\}bWn<܂u/I =5<C5ؕFJ ñ+5ފSg]I< &V!^tq}#nٞ-fZSf<>>aqU[nVî:X~tMrL;DSВS홴tfcl7) ?OR .p˗N=EK'hO^ҸrlFFDmR~q,F5ֶۚ{s:nj[mSV6棠]&mb ЃLjЭ̋1 +!9&⛟aT9AՕqgeq[Do@ OߕjMCκy,WAdӐ2~:t94c GgHMUd6mQR [m Ƿ=!wР"wezo$%e?p>ZJd'.k^1:--%H̕fܜ\zᚇ ? N4G\Vc '_[s3oSIp Wч|< \]; '?Z`"QkL̵ASu2x]`]8V0Ӱq}w57}o B}`_FvQ]~˹;L6\0۵j _]ԇUiJ"Fw&@d /g|4>%/9LUnZGP|0w!xH/L,kܝ=sb}c==kSzNkl\=Y Mwp?bVYųų$x x QĽ.B҆* ͗w)w_nHrx;?[&\\Tx)\=No5Th\(|d'_ۙߧ?8I#*O\CM6߶^%{ Q1|'_grx ygkÍK_!a>8<֪8LG8[齔RxQK]6I bEfYBPI{I)IKHQ+3мW|8~Z,dRZy+\+'MLW]+VcTOYg0%CkW4ڌq樌 UI'w>&jH|Ief@&">g],? y/{BlzKE&MbyB3B* }+ /fK%xI"1/B#z=wOb$ᢤ"906WG? ߻GgA)kMSj+.`粫jw6`Yz xV'҅ W!DC*OJi%Ҭj5MKT~D77hzlU(d\0>Kt\ s.4,?FA#>|5@s:Z'Ko_ EuP]`3vC9y /9WxII1</\h)"%$a$E\9tٶ!ʾ%XP?>"s0"1I2T#a(LUT3ܙW q-6ƞJBSja(i۳FF/oifTL*pC?K_0`@4>J-!DfNC`C7$DURmɕv)#h>I ln6zz[2UHhn9H ns~:KTR`.휿IHط̗ki4zzFkPot$(9O]wQWT,Oc$9o9>9l77 Ɯ`޽wpm*`󿝧[W&0 'qZ s l5n1y좜_Sd>D߹  IX>OE+޷D?EqA -0Ϳ?h>Op>Y9 |}2SKHI6GAWMg-;%dI [PgǗٛjP۽u4FNY?f]^h@4T13(r˸iܥQ)$h [.Lȯ싘\w1 0%WǀqI*6?0}:䎾#KL/S5dO9fiԳijW G?!YƜ'n]yRM$1`}8=c}a,*p3pe_`:( Fp;*Ђ2{cv EI"6`M[o7-ܾ/룴qiφ楧Eb͛јmtK̾NuZ[cðM9qrc=na؟61]T7,#"Q+RYHq ˅C&:='*0r#<1ncs/S_e5Aj}u#+ rQ=\2t"YEM")ǀEuOf3ࣆ; 7XbO^%q'̑ЅtC}@L%1>>}JY-pI(އVN(VO~_^wC$nr(O Ƌ*# jᢰv#EyBG 46{: y˙{&&xx cK'8SenޗKWf&A ijLsCL2aJc4G4#r9d#(z$C4>MZ4ב4a<͞4LsJӌCi<!i\H\>6'Zg^1vܖ4!k m &Rڊ6{Q1of%G{IRh< ٧;x}..=/-*wir䎄*AL9k)ƸkVT6≷wq=)S`6XK(I[Ë +CfW4tzHYq Ya}eCA *'~`_+Eڛ$.:PGd4ΊZ%-@Zb @]v{=J7 H;|@'̤ ̠!)Ӏh?Ef3qQMf>GP^Y7/pz7 AO>H 950EA jntsG.h[^]5-sX)g=.`zܔ&IBW8zɈu'N-~ntYTl^YCj#VMI:`G.6=6k{ܩ#VOʤaw +wNYw &2\5ꬮO(㴓V!C4v|`_"P3 UBeqrGEjggn"$2FڃX,oMނ{:Ē!d&B:U kΑXD7ZKz7'G[XD?b3[֜x}W)D5J;HT*YJZ^I_=*)QD]yob"U[j?5hY68NOjӷBbG(wCs?'YLuu€%B\unEKN| @1#xT0')KqG v/%'5T溵[NU=ĩWh!%j5a.%u8*t@Tf剜DHx1S/Ϧ6n{/5x߆8]}v eT*Y^+?k-2bk2f 1zKXObE#HMF.p?po}.+%,&Z#gr뛩??5 3|)gL<! .~/:A||mIҋ:{h$qf"^|#ߚ;`RH8?~f?9%x|7a_/@C;ep $ݑ LCo<)wDF;6D0I0 ,?;!("1=k\ , Dv"w='rSAX) . ?!E'[.3s c!SABz o /~s|B3AzayQ炰 œM$kFE#+cYhj@<0G0*>`<,?x $[Oh+a&/yA9ҹmaL_`w!qS шQq4WSBM_{gA/0_{ ru6s9 ==A`y%]8F(F!]V5#yVMA$ΐJ%<)Pʆ#$oEgعx\Nڎ齍-.EzE/90E(} ρԿ"gO|O)qGt)7ī{;bZjꉄxvip>w|/G6k=f:d!y_Hߏ9~t 6| 'OOC=. cp˳[wQ!y1CA>pεw9zˇO%l |LW\NT?[L~@3%\NaFH \ D0/Vd84XO4NX<#1oGBG[O\ԣ\V$gQ3 ˔8kz![ҏ>X>= W iЯc6,sk|YҜF_[[c7n6"UPd`q&q8 8&#8.3q/<8 caxeHps,~ 1CjPͮn.]ᇃc&i5葚=z/|<_l\he/XdqpO_8}5'" p> "(]x1 $ v_Q?D)/~ 'ZCFD@8e0h8te91/py4yD>8fLuIDb ~ GI"JD_x}ȤBq)2`aa7IWt! ,QCN˾HB( 4}ɠDz8q!AG}8(D8K"wU$79sYO"I4H{ ǹ8I!gۺ Ir=@R{KvYy !^X@tB_7uʺ|h݁CRxFw$F`I4O@YBQK#4 ! #KP W|DSL:r ca{d\zQ0q&Qtwt^t }( (.(,AeT@d\Qg7p o{N77{oMSNsnU8vx<}WiϐA9\壀t?2ԃ`4 M?1z5&)˕!fAuHP댚}-Bɒ?22~2QĈ"&|, }8_(ї~/A̓K@c NRx2 :I,sp$7IOEGCalҋSIw70m.fb>"E6S`B3Jt)/3IO @pԧ7 !"3JM`BiI? M:Ʂ)lRO@/>57:B}<=2H"h?^hC(}6-EMqi]FFh lz@$$[DHA^~h .}o D__-T8V. ^4^*N`gVٕ AŃ6034o1 =G&N00h3W \9q Ġ-k*4dA/@MWX[Y|~[u=l}I/F}Gs2hb}v|}8_LόSXV_aϡMdD>Q॑FOpbڠǎ6,;/ c3Ue 4•۠+h8.-ؠ}P%1)/A/ mit 4d&hMw\_/"A#t_4LC4Bl^fzk` Yw'(htOn`IЉk}vW>q#)ry ؜Y{%N*F/w)֨瞁DC8 2c_+0{Q!t FLG>#~p }`x&WCDzԐߠ70A!wRwP|ww$afjMC|f뀌R/ ВʑmQ6!@ӕb@k,澁<c@e/s*[@|H z>U}${v>z,GDs(\!{daA+w97{e;\MTW'cbBl|?A-m:PUs3*twѤ'w1Cu 9 +{*/SU~TV}o>uћ^|WI EQO>uTo H^Is)aί=N b:ebogr4'r6)vrH BwHJ.M-=B12)#CC^E ~k @G&s`>/d  .pzC~̿ޓ: y9ԟPt^.pT87>?8xHcmf|'pL/v?@bg$k~</%x;GRg]3e~j/$mJpYYCпϲĸj5$˥sPNYhlc(Y (?iNÕcrXM1W@Nrr,2lyyueq?K->R |#SX@jz(y/9c53\b< HՈCro^֬ _8@AC݋*"Kúº}"\K-gjҚ W_5*/l NE" 4S-C OFK6M*͙8oK0GX`}WUSXD81<+d~, P m>¹NT87ǡ[A]FOڿN+edp]fs4͌ʩ{aXIY=V hpv .pGp]~dA/УYX]3]Q-|JzU,[3!i %^Zǿz2!oP}",bLT못!}t?byHH&:om`Kݐv@(H_ :EIDvhIψƍPP0j M,IS QM~6B_(K?~P;V>y)]nWx?NZ/`~ WAAJݬ2pC1쑷@]?|-WHm qig[C n7h+ ?y/h0k1 xL'uX^!^C7(蟐Jc^%[~|qiFr!X~ڐQ^gOK!鶐tHzc/7 c"ǖ0&DioT(U755LEDg~xnB:@᷸AOl_ w>8svƦANQ)oakP*MJowcJ~i{r̾{۪uo^\7 d#%ߖY M"NQѷq*$5T~vHY@@{tΜ:y~V~ܗ=0s{wB<ŐߧA}?%v*%y^"ǩq[pM :E^EѽG115_׋ ôڙBk1 Ht ʄs{$# 1I.["|J}!}-wϹ]kȹv!4l#ݮ z=?%aoD@ek"+_ 5V O_ yc2?%G'8Ip_C/40أx3$$=hm|ɂ<[eet*2YD__^"Xp,取[U@f0'E\ \ \S~:uDO%\ \ 1~%bHztNHfArD!rlH:G0SHz2%=D>ոi)B΃ IoW@]}#km8 GI}X_ Pj?#o?a$aa-)\ ?/<o :jʄtqFpkB8N>S/"c,k/pfw3X僤}n+"s˃ko} F3W A~'rP?zgc0c Z+17F@8  U|o׳jvRFz-ݸ_xI7`ћA1ŗq ꥿ F0,blU2e'ִi3fXZWÙ=HAgĜ9  {,C@cKC+%z>aitdG}M>]%`'…Φ mp/ȏgG?"XX *mnM#f+ՙ<,O`/ex9//qoKs80?a:f2mv+p~څ - ȹ7mu򮺞oq/gX/3EbƵǺpyJ^;+.Q'Url w{[gb ۋb8 &y ==:R^·0olf;d=xZc0YfwyCUUL=Mk O}RӚKgG'::>m%~vWtCt]& { H3"YXZ`JǹƙmǩWh4bIs"szL^]`P2Kuo~h. CqPW2ŢqY?iޕѨR:މuT߫X,[;ƟC} )45rM?oxޣG%pk{ZMd bFZ͑CK&Ͻ`k@,NHbX۾  ~)B/ׁ0ܠ^mɳDπdSB{$#9'>M,=Dz${ -D(MtP Z'Ž?Ikzy5l1E&I{~q r`q oM.}d38,RaUl|6r>׮?dNJp.@"K }M I}*ʑ>'RNOS/|1H5aqua@/'r-xq'cW)8n^/1?!ᕄN ;Bu si0އ.O5F&v襭OMẁ7߼̚&3}2yFMFW>̼$ma)ܞd /y@y-#UExsgO_zL%$pWA}C@YG1Bګ%N6'7HE7}aђQ !L>D8_ .>Us׬ H.{Gdٻa}A-]ߔN ? ~?~O4 \CbPv7@. DsH]d\ ƻ H܅g%M?n[hdS;Pl0of)lxLz q~௤ (*)N"J <k7 L-YT1[o\t74i^֐h!roI7ä:@a1%=^ДS]1ӟ^^ԒMBu̟UѯНQ>CX2]%RSǰUv/oib~n\>IH' ґ1\ v#k w[v{Tdc߼Tƾo?A!Ǣ EI~` O/Nt}\&Wih|84*>p`f=  ߢO:R&_uֳo~ OK8 '=SML%So~LOE~%Tķq.%O\-/7,O;% FGKa9w%y>GƆ稘ɑ%~&z?p'Y:Ka[xz^X9AOlvS( rϓc&{I~y 3 .䝊)J(,,O;%^#ã%/j<>*M'SXvo*5QrIh&96% I1LI:;Sz N!1|b4Gua9d ~ˁ~hq q6a} )E-Nö7|V0BQ-?djƹ-@.G0׻m#{`zl7K: 1פߎ!P'X9_25Rgm)򟡺8$l~87_D2|q¿ w5!x߆zB?J?W]v ^;}vwEw"fICUWeSPgex6[S&5B͠%=?^zFCc󸦼K|8ǔ:>SWX+z%ǡ-%xa'f5rog&߫wK~. ?'JS$Y2\=U_E}gT U[ Gw3u, dd-s>v[~no'=m:ᚡ9ɫ_7vDd[j 8ٳ] eGSj\R`gH$QlB~M|9IO$`ٝZ #C`5pv0?E\V%GH2wc~pJeIe> \Y um~nf8]TzD1 |{#L;С=ñScw(JbtX2+% eyC8ʅs 5ޡ=^_Qlx\:'#@f8iڦoZ'Q΁_G(\cw4_k26&w/i=甛&\=.vkU9֫!}ƺb}1^dG0U6BP2jt/y C'1(EYprNIM!/ʀc= 6~'!8ʂ"p)pISNvcH@̥ͽvBsTk}FSM3\S<ŚqsniadnNw%+,5u\YR]umͯN웵9m֑(4JYZ_xfIIM=4lA4¤43٫X8fUeq -ˠ=v {;JC{;܇]]1U!k- ,CQz=)4:N(&z#4q!0d:Bbo%|S1<>3't+R0-3.BHھSg/Ůe2{Ġ#bJAjў9jgJdRY&@Ȝ؉lZ`]+ljդ)h{5#3A 5Jb03t 5^Lܜպ}tH͐_p3P3p8#|WXñc]MƱ AQ֏=Yw)X|Ȥ*Xӎߒ۸ 0{3vHB~P'cV=a |w*-~HO#S #>EcȾ%#=bK<'M/І͝cQ)*3vdRg¹b)=s8*uhiG/赠 ?cNyqB_tO A ~<4gs:i*&nBgmOҹcpj{8\  Sbq'o\\*zD33LMqc*g$]2J+sܿ n*R:Q?zGP18̈́7A@3yU= 5DHWb;ch."6}TE{_,vA0bmc^Zx"{.Si'v&C<7)v| W{;85t{ڝqHglg7LJ2IF G&JJeҳ#/'KZ΄ʢ+%a祈7637HşS'%#EөK^>Q('G'c_ 9cZZ_V :F}DٳB=w-.thiA1Vkf٠JngM)^]QfSc"ŊA!-?J潞l].,0mcrF_XTXDQbgWm`+YyqG;KݓGtg t;bi d N N`~Bh+sS-L><emz:9P]ED(.-JL̪p*m,}gi,GX9J\*LO|%EFV<|ov /cJ*i[?y@O~킴Y/c̅Y+y{|6|xOM h*'c'T ^SBw1 X ?'%Eϻ}oS,:{C:R]{vF; LнRb}{y}qv}B:e6 gUf gn.ʿvByQP%GL-` jۗA,H=3xA bѮ;tzºh;֊NQ\3#7Zq^`.^4(o-) FO+u# .Z:)s&g)n0 g [ o'bxNG8#OJ19;cG ^RНǞL{´-zrQގM==S|VB %S%PEExV5vWe[}pO4t|P'xu7w-[Hwdh@^AK^"}K[;Z>s$(_h%SKAof.ྛ/YaQ9)$:t3kqN2pr'SC< ]֣GڰC-nЧ4[<#e(CK)I3#ߕ¼mQH8]*~d+L2 U%|o |R%HEeMp([#1k$e"]xa߯vMq-uՉ5'xbUkwx}O f%֩񉄿/|G7m8@PBexJj3D?Rx?= BzoQ8aM$=;ť8f=-weꙏ-CRERfTOt}ig7&jw17%#zEFҿ#, 7폈m`(vRj19.g@g:A]b9nHQ$|U|q-x?-x/~B_uEs!sxa K֖ 9"VYY-[!94qzV 9GBh _zX ,g1K{Q?, EI?)6&S‡t.ڢ7d6w$(̜4D؄._Si;aʄE2g%SgJ4rvgf[&%m#zC KJvUfa透yj>|%ZR I2RC.llkîs?ֻ29vސW^}{v6ߎ}%u?qs oC|׌}!B /DF^wedё)_vhخ:#ղzۄo'Ӹ>kgzzB1D>V]Χ*{uz7kEvbbvpXIa?wx7pzJܻ<Rfd}5<܇+n OWpwo NtS#$~ MB &DF=AYePoHQ} AG罤jY=MRn/At#ގuso^5ARս!j=rLS iU<]٭7}[ QrAϡ ~XhaıqEt됨C4#ӭ51ڰ0Rz,,W |R%H:)K[Y{7¾nYO$}SNBcz-ER /3 {B:/rQv㱽 2\eqnޏ$|-¡/6B:z0Q~,6 gyܮ1nc9H4;~HUG9gW_%ߑJ(֊Ux;x+(~kXE|[Võ<.de%&n_??IJSKʑ%sļtɆx2Pʇ۰-*_oC q~Dz"d/I_`L)~G!pJˌd?]1sq1΄OT~v[1}$O?;h=8{.Mmn\u %?F-~h7:7PaMM#?F^oB2r;ga߫wK~E!a-EB(M>{åSNeyW/lvs(^TfDCp}"%xV_AߟHߧR#'%$/\y^ dc%wKx?)"/Lr[K Jsgm1\w`D{Y\LܡH,Gib|<3HO+v>L~q(ޏ>Xs/bн=][kK><{`xviJL͖a)\\81$!1*ۯdh{uNn75L:FgP?g\%UL7\ qϙ.*?S<o,AIV\ƒHs/OG'徳pT1&lfGfU=02aMٺX/ı hFR_\`sPE { wS[CT/爊Mkmln'i-*f ́m`9j לlK8g69\U#%J5~NkAmnͲЕ[T7l3m֠0HjX1:ʼĴdUT˧fVS:ޣK`?&'ge.͏ŒӷxJ,W ?O@F;SspԁW?>*Es'Z ֪3J$;V^W@'Ƅ~ÊMN*ӝ_՜ך;ps\'O6.쫫8*g1:`!Q6?PZ&ݖZOr1W紪ɕyOL.]94j+?ό UtN*pWo,aO))D'B1CAI=Z=d&0ũͥ.kz͝Ms$- 2ro3 8p s>f7&u:^}-V[Jik6 qBCN%PCݪPm- =xGٔfxn^ ?eNMOJ5I{@&H/_q)9P׃:cPfrU5{)ޑf6"z.m.If1q6 S/sfzt堃n)qt _:#7Rdy5iV0p#4OGwȥX/5LuA wUb87y w)9Y?K/ʯ'N֑6t%kIo~P7Iu.._MSyp ׳zf~3g?0/(/ַ۟~f33Կa o|-3f:flI+GC# fK>y"]0ħ '#[X49i d;-WCZ+0W7V n:bVƨWLJjܾ6Ǎ.2eaSk`l;JȜOG&Yi~4 SRSqT*ruj^gIp&<5[.ԛ&wivFS=`6@k0ƛj =IHS OTפ}:7 GP@3xD0ҥJ|NDq%̽ʠo6^o?&Z3jzu/dا39ٍy {S;<)P3ţׁEc[0@UѾw`c5q*N$1Z}]t{#:z8FC: u/QaBPV޽ՇӰLe_z墹h}%lqXE מ1hJ3~ t,^\h4sl%nm y[L?%s$OzJӨv<۠WUEWpƸO0[EF`DlXgEw?>इÕυ_K]Mj'bj4.!δvA86[ɛdY֣oZbwzo¶9.VJ hi#!>UoL3Gfq.#=%. o|xS]1n#`ީcexgON WZ>MM8{v(X^»d^<6s2OJ?Q@NL'.bq.˙cBta/q?FX $WF"<-SN9,4E[t'1)J-l@U]$U \N#PbtUOsؗ^?7"~5(i'QypͲ7!/h@>YR}E,2foqBqǏoo?d|Y0`9U׼ nOW僂Qw<9eJK=`ʓwO[v.~][~p 9Qng4^[[hO k`|P^+/#_'x?qhOKx!x@%o@A?!>Qdx`?,O߉OŸ.C0!K^2JoOKt~rHz}^oPg:ٸSNؿ%I#5Z9'x"i G#oPԮR*. |D-ω8N9$rU\akåKrpc9,ZJ%^o[^KzU%3"εDk" WD#SR*7"#bwBQ( ~Kе]q!˓݃L-E߈̟}LSm :/P?:TXz0,^K X?^G= Z+x==,H KAA?D~~B_E]^M=#",on R{=D>IrL:Wh.[ӱ/y/뛥0"ۥt,oY/t5O(ga ۹%{q4khTEҺIfO&7K ya4ಕTh&"VУ&MzҺ=yb>AOq-߅5Q^+ >˟u蟖 !!xo@rx 7$74+ Js^-a|%9A ;yp Ed/Ԭ Eq^?Z}SqyטxʞsUP47jB}DO%ELZ8v0Ÿۧi>Y{%B~bnSd ?IsPx&^+q~%%"^o@A7ED!eJKx(-!ڔz& 4#83JTfMBt-dtƚ Qt>zˇ>]#rp̹ CӃ9~݄]+fghIV6w/X C-FƍocdEU,wLnV#SsjYMZ+hkpc{´5 CIϖ  ?,7@\ZRkJ8p7ԥeLY) ǚ8֔@VKs6 b<zc-Kо3on΀+ R褋,ig[$1y/^=|R?$Zß ,߱bc?l,{MM福O`YvqN7RyR/sAx'IxE`g.t $ _M`fX1ܶ4g)m0g QX;cb<&<, yFS `!(:S`Aΐn(wg&$d83n ӧwL/M)HHȀ)eVkF:  ,V%B e1iwZ<@Q[-Ph l;i܀A&6Ɯ3!{woɏKI>kI#}3#{JMy@}Ec(6Mΰ•Z9#O~Xk5u$kָ8 1nS'vt\Ɨ_agJҽi*ds%~Diw1/ ZǺL]mCJքşV%"΀2\#FGͯRmSKd-;$,/qXT?&\Bd sj^$CW e:SkMK3&|yE0aWCcEOPP\O𫟤_wmW-ljR'd6JkQ L.m)l.i-MoT(FTX, tR,}b_$Xğ9? e(C쳺.+iSH^x))]VCJck)6hn/Mw29^܁!rKJ.5ę䧶q?ӷB UU{˼e2+q֯o[~Ku릣2"Vgi] ׶~:78FU~PFS63 fѿ쿩Iⶓu+cڑ ЂspU3Z@qƶF?h0@xb=ۢ/^ zL,H4mh+Qv-A~ڵ ǟ&s/tG؆`o۴MչP5Iv1G5GnyWL*#T.s|3kxƕz <*cJpoXeʭ,{?T5lE-y^4ƽA_TwFX_O9]N-Ŏ4%(QngƚޝΝ;t%()ɇ@cN^`rؾEUO}{bZMI NPg_Yױ΄lj;`爞t<ti͛?'V>gcjp1bzы֭t3Xi78w&.Uº@LzhAQT oM Dkyf0E5xǗrƐ^v3]J^ME/{8+32t1t#ԥu vimZ>NkrQm}V]Cdhb h张T!&9|R\^ښ141&=5g֥=+^)&h\ q$=) 'f6&$6fͅyyf&&%%Zϳ|{ZJJw[rohb)"@n4uяZu))(˱TZ{{ {ߩo&p/эTCź޲de'm/j8Ŀʿ^(֜G\u՘G3s5HEkQQ (xp{,CE7K5T3JXVcՌ"PG>Q3*/f?uئ.pܕ@QkH>ZfKՒEV۲$K[8 'g#`R,Mf38䐓в(8(Nwd&&cH}{֌ێ đA.m˥="TҴ4SS`.kq،QaHA,C5j=}>[&l긩 ^L.ȅ=6|&"koNPCԼN^[vGMTtrlfQW`Dkk@Z4J'a sltNQ^SSiȕVZ5+P*TVK: cymqeA񹘑mJ ˖^v ʞ.{w'q!?p\mr봬Q6Zۤb!-kRLHxa'$#\+]gP[W¶qӊ:O3$:윬,KXgIIg劣ט7ZHTEJؗ sb])DEEPYO abyJ#Z*sAzf{)sV&5\vRmG΅f2m1(R) 6V3y {|5I*rlYFNed3)S -ΐhBleWY&s\Oo28N-喤y )#p*\7lQVʴFK -TQ: @f{a}'O/)UɕϝkU赘qQp@8lWv%@K3zȊАdHoU@x)1/ܰ4Mhq\F8>ˉsL؇= O)M&Q JB_v4;} >u>P+t=.hG 6;! řpzCf.4  -H y:腵(J!uzUxUޑKtazMfcC]ҬV3ge@8&8oC| jVp O9sZLd4Ut\;FZjR-nc#J]Yfܼm\*k %e|V Wg^[wx|iJ|QWRKM[VTdd(]Mzfv)YL& Ox'#.P ])fT0ә޺r ay׊Z\'=*!41ƇM<! W2m'$%m??QMlٱ8GɷehrT~AECذ`l|F],k.XDw-Wx{< " N'Z]%ܫa51E^o-w{51<1o55c9-B|Ql!g=Ă$=~(1I?`vy{hOa#vL&K x}x_8 {Xxb?@`/>$@MYXU2wZ `&g&-*3*FL]W7ϱ`r+}}ᢰ&އeK81Τ=AKn8%g;K/- ~Vv"ނbw.^>&8n'I+QB0O:,oE^[3ntALFM״?̑C7Tfҩz}ezMۘ=cqQӇtX׬vYW">a7w\†qqC'dG)m(V;V6%BލWv5͏%"V!?<;MLn\&7uHӓ_Z6-8Ե7,\plg~w]1s7lh϶mLG^ܯfg:MB+t3W|D\'TOΠT fu`vEjnEjGӷo{t6ܡQaM+X 1q_zHIҿl"was"ܹ3]IN"nؼ0nO}p(A<&b@2eN:FV^0ygWg`Py1?խ6u97֡N,X3ueEμQc2h=~%c=<J^Y|wvv N1A';|\ O+˸:YuŒ*OtTlճy={ݛ~(u0Pk$O=zRsn1c&#"`dZ:\Z0-|Jچ]QA1Ix4's"Eb.CR/wK8}Rp;gԮZ1cBAx; qPOS A[2R@J}e)h WV;5 o]Tuܯ1UU'{<qX=pQ73;+#/, '(6.P P `Qs7_ẍ́qkw 6\ƞ;^rfq]Wjgg{2JAs=RT#{v > <~ΊR1b>P<1O?aOM9'1.E~Rnӧf#߂= z [ Kia:T4>>FtPޑnڦ➀FF 01BVS`/r:ct&5v??^ƿa|ç譌4Ms5!P`#Rl,E%Ow " 7"9Fl$Z#+[a{|rG[W7.7騗TJKl]ђ[ʦvCY+,f|튗Ͼ5<գspܼl+SQ)Ôw}3ٳׯi uqnFu_kNNk_5|?sZ& >5;?I%_z,=Ĝ}t.GDA($XdI*儔] )eUpsaFkF-w3ҁvďg\r:?$Sg%f:r{Fmvy;̄oWJX!+&Mv|1("yǼ!5;PNN(h&*t|gkMht=eRs\8|b*PSpߦ-GW:%:=VeqKA+堭AߧA:QlI?ʉ؈/6<1bFy_׿0V^:qg&\> ӂ>I=-cs)Ara⎑Ia/N}ꇌed.w@*slVlW(vo2mlX Η,ܯ~hsKE 2m2 ˘t# eM-URRtHQ=|gP/qx>m[ PTym1]FeĭV! Ua}*ZcDBlTGǒ|lyG=kU0x"aghHX#~# ,0뉰EKx#8Ir O0]ԩӻ-i4hzo"利>'f,_YU*x ~vǣ'`R`>޿;B]w#H> 5XHLU9Q_WWRA>&XknDDQJIF0/ lୄ g.qzoBfJ\!D4%CaA|b+BQ1$ZRʺŔէ$LrOnc$7ຯoNǍ nSF Sߤ:w1~ڍa8qFwn1"M(/0zAy>~ ?&K!p"k987LTŘ9!2 8^dZ7g_=<եb_Zt4_Jh2G#}؎7#N05OG25W-i.O2)I#)"ChB4OA4~Vُ  +tygNBhV Ck1ڠl#aaEmv}qlM8-WuO>0Vin޳"~ܣ\LǶsʬo3Vk0>un9v"rR_<y@J  xc`d``/ko"Ȁ<xݚytEǿ]D@@P,$$, / Hd9 3* :#o(T<( :.7# ˸̘W7\B3?=s~UUu~F }2?wPvF8*=ZJL>{C<-.B%)qw,7&pdq.i]\t5leU${qm _&n?8EځNηBF*E{d:/#3!La|6Pj..H Ab~$#b $H:4wR<|a?0˘uo;|}MHn(oFo%ƣ=$"]=Ⱦۆn'IwQCwj0g:8.BYj2-HwvRt]u /gHv#dlOQx l-nyKWGs3-FpW^.yW2.i9( W2Ç&ԕe`8 n #.{F+(yjo>$͹ ԝ'sP]]ȇ>~x. o }eFqb[@Mh#S%;ߣ:Qv̵`}o(Y䓫jiHZ;e]9a lbrN`  qi#Mpy+qws,,2ڈN Lw7"׻c2-}?=rJdI I#_mF+ 9/~rlLe|NjPrR@2EdJrq,V [-c@+T)j$Xg YJI :25R0҇$ $$ "T*D75x7H [5soquP 2 ¯} ,JUw!9q[b,[Hfᡀ2;"幤sm#OM5|NU"IO_?VuܥL7zOɬ3eV?(T Nb6E$nRv Ocv%:Y~*Ⱥ%QSOZM)XbebM&Ly8~b2k|%ӎO1o&׍SxvwP\1ҾExoA=)o&s9nLXopM]@Wt_7܅h^+Qu@ur <̱5SOL XRW`bc4@ךLG_w4mYXՋy~ twJqNy1mf}rQ-ϯ< Se@j~uD;2ض*k>ƪǮ;ElR֓esY.wEzvnFg J'T 1vQM+Q徝dyeD/?G>u6L]6ewrlewA?V9ߧݳ6aEִC1(TA, ro JhwH푈IOֈq9v i+~g3_C-D[>jo?מ '>`ڞΛlzؾkV\D{g5!h͹ \O&p]e-icJ_巚X).t*=#h4:&cr\kB1ӛr}s#ނN>;HeN'hi:4̓OK5.]3scH}5.qL Ʃ8W[r7W_?a>җNzY$;Xo,:39] ;A/:e2s=G?iXR-X{9Z=miw":Y*b ~Vov)Ywc4ƹ܍~Wy>׊hW_r/X AY>m֯L-qBΣSۘswr՜bQf xnSycWk+Lʹǿ~<^#2qDxmw#P.ڸPb>߃[pugGvsIJY'e-[I7޽ 6wڏ.P҆a?Cs ' Z/^W)w9&RbKr~,66Me! i-J=؆s &sG5 7~P|?Y&m'5.퉎ޥ?|L=u-m &Mo\Ei\` m%qFAڌs^#WCbG_zyw'o;Q2zkֲ@curo܏>#{O$=notsAiފ o-ZU_^w _pt343gL~vXq}~ҝ>] c{>׳?["k}dr>4 bx<{u;1wb"…csi' >亿;)8=N&$[8-v:ep;*{ӾM~"2`X6#L{gF)3{:0o0cE~w4'%d:"!=9 U?jgM]\I'[.R'$~XgKr }F$Hl/=MļIz#%Q{ߓ Mze?D{+w}7iĠ]C!Am6{8QQ}P/hWݜFXbK0Ju`ߨڕbu}0{zP篧}C {Zs=}l8KhC!_HWw>,{ǭiyjpF'edy G歼cΏ&[+96?:;XMdD~\ӸOdn6^^]#k.gq~N P|ju&feHZgggY0vǯOp.ٜ_!8|ם[s^X? |!h4#ݸ紌3@Jo0{Ǩfp6[J}f+gSO |)D>@ԹDC9hQ=?B/>9|P,9sy!\9җiܷٚ91liq^9s{_ Π%x;&S"}y^?܎*VҬ'+3YcAc#53֌^A?&nb(Ŝ?riOُͥuM}͙;_-H@rV֤D3d GA9{$ɧFɭ hOM;GtjA02=jS.OyLϣ<gQ)π(ji'iG0 ;ubCd\ժƶ缣JcgOͣ#kHN$Vm`#G~`NEq:v4}G?7Նې0_JyHvʝ![6w•hX~D#wy.qui *cV+̣ߪ66c8jqR1bbZ{3*^l#7#jgϭQ[}r2!J&PfZ.ҷE ̀_(u 2Cz_!-]T-|pȟQuȽzrn(C5==-luڗrn}y:1=9)7|? V#f'e2iD)[g׆d_y1N4! uyWT7֟MgG>D4gШzg;Vdyy}L|2FWGA;#yO$BP vħ^!}no2u]sT\9N|z\|WhU?$Cvz]٨MkkQpn>B31k!/FSq y|@d1a.n_j7c} %&_N;G;Rѫ#>3%+*)gcv:b)g[^yо WXr/E ~4 Eu\x|7=5K,4:|7Y/7060Fgt)Q !]mا]p;?O ju~3|M1ųoʐ WaXoVO_- _KXCe L 1>[lYϐo^44mD\,>[gJ|O:+xo 5HŔLw{7?_^w:k;:!cvwΥ=v? H58'%1~g0~kOIM|ޢޢ8&>oȽ]m>a5㿶;, 6W3>j2;vD}k(;0\,vBݟ+놱HU˱|mmYTE"#rlBz Yp2"wk!9PX#Y_$N| AmW"_euvcO'JAQD 8Qe|1F=G/s2@UUW8 hf|AB߈no^_7u'Bu[~P͛{oCF>g՜as,%4 _Mx$y\e,i^}4ㆷHFْ r,̀05YШUewm7.3븍=wBpPƭ06"8I3?y]u~~WNERT+/J.ʲn ɁFZ[ﳾwZ_ <+3x9eU~j QY<89085,zve_ɕu|J凁/t"9^֟V9i"p)pV\e lx>/7404*+Wuoˮl ~(ʗ<+e`)fc%Wb &UĊća|q} ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰ ̰Μ'Ip>'y'y'y_'uZ'uZ'uZ'uZ'uZ'qzO.pMysO <7U'^uje+ng^흎ߥl/ LoveFq̣H`;^ղNeΜ }ʍV_׳n?r|8'=/:9j7* HGUUQUpċUz^ō:܄ x&P7(0w\_X:߈ 7{lv|7ߋc&8 搓W?ѷx;[x~ww{xދ?<9 :fQNjǜ_GoS#l$$ 4" FI1#&},0Yfy,0q)4~ţkOuތ୸9b*GL利1w#n܍s7bF8|GzoGvoGvoGyuعk<_?9p-?%\<[߀W\R=x3!zHHE^:$s\!29-(:hϹ:qxnHhHpT T +::h|?ǟkOuތ୸ jFĻjCGލ{Ȼ85CxPgBG>C0Hǰ;8rxE<'8*2"-e<2*2kMx߂[6|;nmߍtƪoYr/sKȽC!O³BD.R䉱gsGpuH32rKd1cL1 ,qUaxf\?rf%2TzdX`ίb &/ !^Gn zb9XX:6-lc޵U}kU_ZתVU}kU_ZתVU}kU_gWn|m n8ʿ^Ux5^Wmܕ/sYyf=Ϭ;7Gxw8>V_}"=CՁeQ\Ycv'<~<^Q9D@b˭֊' D"d+]'Vlr񭁯w_1?=xwQ問'?y;=iGBb<긲jOW]9+'K/r+1sx'&dx&D_8ST[;6?O2< Op<\m8W WFYf"2h^9\g8W&q/~=|$2\sȡo ʁsB7x~;U5WG.+ȕ/gm?߳xu9wzַ<__ <x@??* eW ޿++GOrg CV%pl`0pb gprY8lSകKg \s'܁2ZӬ'~5trh6&nh6&nh6&nh6&nh6Y_MF1~o`h6&nh6&n+7M|+7M|+7M|+7M|+7M|+7M|+7M|+7*G. `._S7 xNv+7daW_xQg]휫ssvι9W<|x.o;p'^w*WD&/ۍ]֎]6xβsV>t,}xo89!]%. !|5(>VUpr\+1篺3̱Ŀ75x-5 7[p ߆oǭ =^~[58| ~(rp|<ybn+w^QֲWrs+? +lsqz,?-pex+|O3%9Sp xUw8ށ;zg?'2~gٕ{> lW !%{ssò+|,2~'M{>/ Xu7Y~ ??=3?/? o[qxoǫ wc|?_}K\@ |ća=ǰ; WJ"cxeT$~'x ^o܂oŷq+nn|7|sKOȡ>p|nO".Eo,[۟x.ow܉sqv\?[y ?o ~?G1?o-C0CXcE]%(Gm .okZ|^oƷ|+ ߎ[qnw{%"WD.R䉱oS.bG,~%2~,~b9XX:6-lc'p;UߩNwST};UߩNwST};UߩNw?G~9rvU+_8*Y?kgoj-۽e/gEom-;Ga8,~Y6mը^ը^ը^ը^ը^ը^ը^ը^ը^ը^XD5p$2~`X`؊ߑoG+~G"pKdD`)fc%:5c6v'ί\?qZ?qL1 ,)t;N)t;N'#β'["' a8*ְ lb `[ٸ˿_Uz\ǃXw_9 ߁;p'x=9tF|GCgKp-_gx:\||9^E |%^K|mF|nK |{V| wN|w{8URCc8j`[N$N4,<ހCw9CƏQ~oO'Si ~?/?Ke ~5?;|/>-O |>ʳxÁqS |SqI_/O:k~|1p]['oY븾|W7G9u;|_x%ˏYc|xE?8_,W V+8+_x^z|k.2Ǘ{fL ++W>'o~7θ>x?s-ǫ6/%~x0 {8- =? 'SہO ?<_ӏ7ϴ,|6|Kqu󬟊#!O_/ ׼?~rb\?14]c{suő33!|ؙq>댟Y3'ϬuaG{Y.zVt~n?cX:Oxx?n?\n}gց'xt(Z:0:s?gYFgYFgY^1:szu3ϬwuO?ϬG폟YKϬ;?OU:gցwϬcnރ#y??RT<(8pY9G? Eb\ރb̽!uC.]~g3;yΠ׫O|ݩwg+g܋ߌv|tG]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ]Yڕ7>O=9>>iYl<>qt?>ʩ8m_//Ӽ+?Ca=x5A|G;|_?pUΉ<ē'c<ē'Ox q% >+чqx|nC80|PHwȟ`tṕFFC]a%+3+CWqWPՊFOGV~MC{Y;/7003YɁSo]ш /7404*+Wuor+_ <+rS0K!'ul`[Nd՚!|;|3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3#x~`x?003̱G_ֱMla;]G"}S0'iO:5w &b9XX:6-lc'XX=XXرS0Ku~kX6m ;=oHd`X`    ?  ?_9? a8_!?ul`[Nd>c[>'֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93u֙:sXga93uљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Gtљ#:sDg93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQ93Guՙ:sTgQYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙEYԙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%Yҙ%93tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg193tәc:sLg ۿx0#/z0_=xG=ۣgGW\9998s=zG=ףy<_ ~A+wߊ w+20t?C39_u~A|Fߊ |,2]@T'Vd \ǫx 7p^7efL Bݬqq`JK|#^_&Z[ߊo÷V܆|/rl1l`[I[+2A}+2p?; މ»{^7>?.Q\ĥ[c7ouKx̙?EߊL$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" HD%,`K$X" vy^^y5/?L_O ux+CawyaǏ:s/_ٸsKe_ůG\ĥ0k<^u^|U*| wN|W / |hmC/2<ٱ9V0W/Z{Іˇηrs/Yy^UV.Wkkco6gn뭼!vu2+ |}Cc86mNN ~~?5{0~oďx~?Og9<~_/W'?txs6H)Ԑ~AOp3VƓg6o>7kks6H󬜊#֟"|1i9~$p$n |ć7>j GqR1m?qq6H@;9~$px  xim7X垵ӨE6mq6H7N+O/m {4m |· x0oލ{^7o~'\mjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve]YjWڕve$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&2 ILe,`$X&r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\,`%X.r K\`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+$X! VHB`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J VJR`+%X)J 6q+pMphŹ3%9Sp xUs;p'^w878qnp4\GrFF/ό8poo8p|4h7E_ k4ZWMV>OO 5':~o[V܇_ èIhŹeWs9o_ |#^:|3[mv܊p;߃as%\[sGq"o V9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9Uίr~_*W9K:܄ x&UMPUMPUMPUMPUMPUMPUMPUMPUMPUMPUMPUMP5݌WU1l`[I8wUsW5wUsW5wUsW5wUsW5wUsW5wUsW5w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5sW3w5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5R3/5ίq~k_85k_:u_:nm q.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.QߣGuR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)uR7)u)n^n^n^n^n^n^n^Wr(U~Z௭<c_[x_/[*~=r".7 o_«w.܍;]Cg+_exV}9p]M`ov7t^"ǯWzW9_ =ڈebb?18ބO,~?_/je(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQvce(;F1ʎQv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSv8e);NqʎSaҰ{iؽ4^v/ KaҰ{iؽ4^v) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiإ4Rv) ]J.aҰKiؓ4I$ {=IÞaOҰ'iؓ4I$ {=IÞaOҰ'iؓ4I$ {=IÞaOҰ'i؍4Fv# Hna7Ұi؇4C! }H&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Mor~&79Moq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[8-oq~[e/Ӗ)mSrNi˝Җ;-wJ[)m j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j69mos~ۜ69mos~ۜ69mos~ۜ69mos~ۜ69mos~;w8p~;wqngDtLDDt*_u8NGttLGttLGgٻ9F1NJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJǤtLJߚ5k:t阣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣9꘣91M1M1ML2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2ʄ*L2$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRv$e');IINRve(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvSe(;E)NQvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSvӔ4e);MiNSv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CPv3 eg(;CRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);KYRv,eg);K9Qv󰗞};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9ws};G9w󔝧O}S}Tߧ>O}S}Tߧ>O}S_ :pWOЁ a8*ְ lb MTMTMTMTMTMTMTMTMTMTMU]U]U]U]U]U]U]U]U]U]U# a8*ְ lb kPT?~@PT?~@PT?ߡߡߡߡߡߡѝ}u|2Զn KwS IzBzmFne/mْݖVQʒ --і|̖]"ib[Nl밤n"A=8,>yS3JJJJJJJJJчC!}>DчC!}>DчC!0}>LӇa0}>LӇa0}>Logϔt6[e[kl}#~F5gԈQ#~F5gԈQ#~F5gԈQ#~F5gԈQ#~F5gԈQ#~FGQ(}>JGQ(}>JGQ(}>Fc1}>Fc1}>Fq8}>Nq8}>Nq8}>NCCCCCCCCCCCCCCCCCCCCCO' }>AO' }>AO' $}>IO'I$}>IO'I$}>IOҧS)}>EOѧS)}>EOѧS)}>MOӧi4}>MOӧi4}>MOӧ }>Cg3 }>Cg3 }>CgY,}>KgY,}>KgY,}>Gs9}>Gs9}>Gy<}>Oy<}>Oy<}>O_/ }@_/ }@_/ "}H_/E"}H_/E"}H_/җK%}D_/їK%}D_/їK%}L_/ӗe2}L_/ӗe2}L_/ӗ }B_W+ }B_W+ }B_WU*}J_WU*}J_WU*}F_k5}F_k5}F_u:}N_u:}N_u:}Nߠo7 }Aߠo7 }Aߠo7 &}Iߤo7M&}Iߤo7M&}Iߤoҷ[-}Eߢoѷ[-}Eߢoѷ[-}{ٶ;t6mu>؞mUf][e[klv*UhʽoٟOK1ϧ[e[kl}')}>n;Novz;Novz;NoӟKw}(R=lS=<ճ=lklqn_OڧlzAw;zAw;zAw;Nz'Iw;Nz'Iw;NzEwѻ].zEwѻ].zEwѻnz7Mwӻnz7Mwӻnz7C{=zC{=zC{=^z/K{^z/K{^z/K}>zG}>zG}>z=ݓItS+*{Z[g}Ջ^t]EW/zeW]]vueW]]vueWW\]quWW\]quWW\]uuUWW]]uuUWW]]u5jՐ!WC\ r5ꚫkꚫkꚫ\%W/zK^r\ v5jհaWî] 꺫뮮꺫뮮ꆫnꆫnꆫ]eW/zˮ^v]Wz+^qW\ꦫnꦫnꦫ[nꖫ[nꖫ[n궫ۮn궫ۮnq5jՈW#F\q5jըQWF]u5j՘1Wc\s5jոqW]w5jո W&\Mp5jՄ W&]Mt5jդIWOn`ٟN5t_s\5Wzk^s]uWz^w7\ Wozp7\uu]Ww]uu]Ww]u7]MWoz՛tfvtߞvg~ۛ{G~[pt>ޖ{2ݷ۟Ow};ݟ}$ݟޕ|3ݹ9PtvOs{>+O?w>b?c ڱbW]~nڭ;dhaGFtc~%|zO {՛__g\mtܞ;w|ݕY;bg~7w~!RkN[O=?]^a[ro[H^>}~Ct_DwZɞ/ L[f]޼g# _=~%[ʮe/>y޴m;}t3 ?L{?H/N}Oc/Qu~;j}RvfɧlZY׻~mkUo/ײw߲vϯ/>ߩ~";;;;;;;;;;;;;;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;s;Jt?eM[N;ӯ>߳z~߾mlmzڇr}m6oVö:[o %}>mϦ;֯ռZޏ|~W|~/|6'ӝ{oy?Rޣs6#t߻m:mݼ'}nwl{!]O}m?}H={oOh죹A!?c?k?;>h>9n&;ξg{_{vg_埳w~#5uO?ߴn+-mya_ۿ/^Cv^w߰/Wm;{Fw석SvY;g]~w/j{n\OgͳSmkl=j=iO{ڞgm=g&l/؋Ŷ6\۞i^g/eZv}޵of{_{)TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPMB5j )TSPM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSHM"5Ej)RSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5j)VSXMb5jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QSDM5%jJԔ)QS$¼GsOùGe-Ź-6.緍Jw"tk3w>m.trJwj?j+v5WZ0u+KwV{~7w|+mcc}vNelm}ٿ9o#5uO?ߴn+-mtu#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG@:u#PG:\G/s5toꦫnꦫ?Q<xy>y􉔒u .!"ؕɒ%g]"F6alcɞ-eIEY}~?u<}L_"DZA!JC-q'S$EX.AFKA1PtjB^Jr<:L Ǣő "7>{D&Q[f֤ xޓbwdsmNd+r:U.rÏ)O ~ߧλ5 g?׳_<@V1S!RH<"AP=ACa8ATHi؁ (o y%[RR8~8@ m^eѫ ʎrU}yXi)OKy+1*]~AP+Ϋ8bUͥz xqrq 6h5¹/\[zP*:>u~n&uեza^or50W5Rh|4V?ZǨ~U3XX88ǫqޫq{>nx9aLDh֓dfbrإ)1)|bS ib:ds~N~a3,,x<9ڇͣy}HQ{_ )S1=__5Ep]vEr=x"|c~xXfN,Ky4.RRP>rS}H1T3I5T=9_fYr+JWѷ Ux24:hKKiVfYckg 5]XKZ:S-?d٠nTQߍ4ls/6m3ʹnc [yVQ~ pL1y~Lqq|W:>t?9 N)NzJ)3~N 3ޑdz>]9^{O=;`_?|%;sɎi'/oj.e_1?ʧkz\S{vOnLοTsomޡ.̻>g WPE823l Bň#A?Ab|XOB|fZ#.#УbGzg%Arb_zB''3 XPBMrF׹f"G蕧8ϧqΛW|yL%AB)=yz D܂sPA0QΊZdX*Xiq>iARxҷzBerE9gp(ǷǷBЧ"V©TBsU^T]Njj_~uE_T_4Eéi.5t_K%k{^ΗA>bfuCk_suikpgoj!.̾^M5QC_ 145UfjPnK֒w̠VDkN F2϶S[Җ >Վ/ഷW :؍|ȋvޑwN; :{E.ttߕxtŧ+| usޣPw<{]^zCO@/7{>P_\8xqIA(,KS"S={);$:;X[)wRh ğ?C<b.~'29T0=4 p#hHG4~sr1>azq1o,cg8qx3@; r'|^OD5$&=I4LkON=; n9fSN?SN5 ipۓO?W$۱vq_>w B3LϾKسEl_fs|?Qw_W^qMk_uNu~7:n ܀ސwCݐtLw9~׳t ~h{_{';,H! -DS!^.Ч0 \zGɍw>QxS|򭨾`_gq3)̒/ɗrJRg)ZKgi>@K9}<WSaEŤJfY*˫ UyQ.T[^E &Լ䬶}"^}VuՅUԃQϜ7:7]v6y5r^7Ʊ&kwv{V1%5^5>a4wlg ZfKZk)}ii-kIGK>^؁6jڸo#M:-߂m ~}k˧V/&yXW,by[~n}lo{kϓ|o/=i`nsͦ#:y; N8t] . م]]pgW t3v=^=̧Q/Z{Lzk/9xЛ8Y}x}}˧UGqxG8<#x<#xi!$cYmN]`N .D:hHq"މfh|"~t~p_zW_cGhhFCz}2Xknhc?Ox~硿k O_aD9qhg&˜cIv5IM= 4Meߧm< iݜt 3N^%뙌G$M^%7 3ΐ 3̐3C ޵/4L\fzfŸILZ/,=flme^x0ll-g6f1[lgts3lg o\˻ϵsi y>?pޅ{|/v۹jwݭvzg>?pڣ8{쁳8{|ҶNU^{W^o}o}oGx?Ļx~O O7ߜ~^~soy97|s>;AzЮ4fA?h;!wH80·q>̃<880q8>>wDj?kϏz~|x_pc8cޫޫW3=|? NwRII4rO=%SrO=)O|ovovwi 4^gYYoffw><9xw9x:yg_0 /z֋fuQϋz^E>A|ì?>Oſ`/|o^6˼l6\6fs\ Wp\+0tp/_U_U_~\U{ͳkkv k4]u5\:7 =ӽ 4ӐNC:&oڛjo-rK[mܦ6鿭;j悔|zֻ]s{{qO$b(8e)r[{gO{R]6>f3lyҖG_9><<}^S UG\4H="_$"yKA9ak4xĩPBWl m! *G!< m!= +l+,0^av^y(QE{(p=J^^D"zѣ"8?EySNQ8ESNQ8E.*b8Sb9/漘΋Q?Ͱ/ g%pVKoJSF ޔMIJS7%bIXҎX)*eJٱR2Rv+e̼(mJ۱v*.,|p{2 nep+[V2 neq+˧ʚGYSeas^y9圗o<;+Ͽ<.pg<+Y WpEgETw2Εse+X*¿*\UQUOUU}GUjps5sjWwX5^jUtt0fQ,ja5wzG1h#Zh߁5}Wħw&̚<)9E-9`ҳOj~OFm׵=al؛WbUΫW_u̥muC_1`Ɵ< j_p_#]u]׺Y=s=3x7 뫭>إ%>-hs+SNviy{u:n@OGyt4wxD[gyt] ]pʋux{>p{' =y{E[/s>}Q{lc_~S8wOwO I3,&S f`y>}?8}7]:$yI'gϒ9l P`wxW?oil8)+-(ҲŊ!AdnRdnwnwٝ쭏]|t)\Ho>H"yݻLRu~ݑ1A,y6S(؟ߣ;f&|Fy}4PQfΆ1G>y?`m*%d2؆DilkOQ~.{(olwb{M8]_o![ls?۬9_w~lQ~=r`탿ECv t!KEIs)JJ|~rxضm5)%)y|_I'\f<.Jw'›݄OT*+WMI}!UЎ Ki2'>KK҉g} %)d=9ţ!b1_Qr<%.D0OOOJg{E9."n-Mp Lu+lf҂Sե>-| * ]˙H%RϤSyX*ݔ%`eȥK[a։v8خ^B,/%w]t *W@.<@q*5 @uQH+fZ^U92Vy0~•0θ_7-F %MM"%LZE sU Tޭ[kas(ש+IpN_[S ^ CsTѦM9WsIgZz/҅F)ay!liEh9"3Oȫ`NKy6撗sdD@Ax wH(@%~6M^ ƙO|f6--i%4,КI/vDjϤQPZ88o I}c%"@^L"M*'QAxV r=+*1glkG!.L,S}N+Mu6`YSid zÚt顭',m( R[m6-#9.+1\ u1MGY_IgHa#t'"~Gu;%$nFXwi 9U4PԔwQ S@Mv%c7*7Ma)re'Aq+zZ MR ^Yv"=S ºJ:w}qQK?k,\VV~]Sf}^9e{|oU"u{leN#_)WMbEfSQo$U%_at+5[9?lq0wS9X _'<1mo~NooAgssssssssssssssWB/b/R/rռUUռս55^Wx7[[[[mmmmmmmmmv:qxoM&y^M~o7 zCް7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;߻лȻػĻԻ̻ܻ»һʻڻƻֻλ޻ѻɻٻŻջͻݻûӻ˻ۻǻ׻ϻ{{{{{{{{{{{ʹ{{{{{{{{{{{{{{{{{{{{{8%!F8'(d$Ef"3YȬd62;I"syȼd>2?Y,H" EȢd18Y,I"KeȲd9O$CdB]ndwٓE&}~dr9D&Capr9E&ǐcqxr9DN&Sitr9E&sy|r\D.&Kerr\E&אkuzrDn&[mvrE&{}~y&Ogs|E&ߐow{D~&_owE&PԣR(TRE:Ltf: Fgs9\tn:G Bta].FK%Rti ].G+JBCј&4it*]Nנk:m&-Ztm:CץtCݘnB71tsݒnEmvt{:@;8:N]t"Di ݑD{dG3t]T+ݍN{ҽt/ݏO҃z(=NGңz,=OO'ғz*=NϠgҳz.=O/ҋz)^NWҫz-^Oo7қz+Nwһz/O҇(}ЙǙ  $}>M"}L_ &}Mߡ!~L? %~M#L'Mas1dlFl6+`sl6/` l([-Ζ`Kl,[-V`+X,b1KX2**lU[du`M Vl4[c ؆l#1ۄm6ccl %ۊmͶa۲l,ہuqll_۟d!Pv;dG1Xv;Nd')Tv;dg9\v;].d%Rv]dW5Zvnd7-Vvdw=^v=d#Q{=dO3Y{^d/+U{do;]{}>d'S}d_7[~d?/Wd?epN9 s>3,|V>s<|^>/ "|Q_/K2|Y_W+ ycgw|=|GyS|!>wS|7;߃{}|???C0~8?ɏGc8~_/K2~9_ɯWk:~=o7[6~;w{>~??G18?ɟOg9<_/W5:ow=>?O39ɿ_o;=?_7;#\ "` !|!!FQb&1E*f9Ĝb.1G+Ăb!XD,*%Ēb)XF,+ˋĊb%QD,L*jbeXU&Vk5E]4DStBb--bHl,6Bl)[mĶb;+vb/&.1QLݢG(vbbY A*1jgx*vbO[#@q8X"Hq8Z#lj Dq8Y"NLq8[#BqX\".JqG\#׉ FqY"nN yT<.{}~xP<$GcqxR<%ψgsyxQ$^WkuxS%w{ί}P|$>OgsR|%߈ow{Q$~_owS%O}3}+?G#QL,l\<|B"bR2r J~ȏO_Wv&kku7gkI~_?____ooooooooow;qxO'~O~?C?????????yyy?OOOOOOOO///////s/woooooooot>svtzN???????????????:G'gW7gt'I.Jr)Gər9M.sʹr9O/p~ ʅr\L..Kʥr\N./W+ʕdE2Ld*3˪3 9Ț3U,Wr ˆlYR%ז:r]\_n 7ɍ&rS#7[-VrkVn'cS]%'I[Nn^ΞWN}_N;9(ENrK-yyH^,/ yJ^-yI,oyK-|H>, |J>-qqvu|I,_ |K-ߑH~,? J~-ΗvI,K-q>Qr)TJjFj5MͮPsj5OͯP jZL-pQKjZN-VP+TE*RJT2*jUZ]TuPMա UjZGS Ԇj#Dm6Scj JmQ۪jAuqjD5IuIɪO)jg5ՐVjW]T{>j__T!Pu:\TG1Xu:^NT')Tu:]Tg9\u:_].T%Ru\]TW5Zu^ݠnT7-Vu]ݡTw=^u_=T#Qz\=TO3Yz^^T/+Uz]To;]z_}>T'S\}T_7[^~T?/W]T?,@*`T0S0s0K0k0[0{0G0g0W0w0O0o0_0@`PpHhXxDdTtLl\|BbRP ԂUUՂՃ55zAGPeVv0:X'X7X/X? 0(8$4,lllllllll v:q`BL &AOcSL`Js0 CpK055-=#3+;'7/?8 808(888$848,8<8"828*8:8&868.8>8!818)898%858-8=8#838+8;8'878/8? 0(8$4,<"2*:&6.>!1)9%5-=#3+;'7/?x x0x(x8x$x4x,xx!x1x)x9xE TZDR_NhC19GIt3~ *wJ"EO08-09$t,&N?R]d*.tD)ka?s]h\T5JUT5JUT5JU_W5FjZm5]{O۵+# +(G4ioBx۞֜ .B7囘OtՐ~뢪VWXWC]D4ZID.2]hD'=zC=ۡ0H3٨A#)HFҳf)HzC=a5zC=a乙8zj'wlMIn+ kkM7_:'OlUKf]C|&tz[xM{&M$u{5;kզc0dt3lBWP2Ӛw{+igCݨW={MMo۵BQ~6 rSdsX #Su8"[ic&Z9kkg<$ 6Uf9`hJ 6>'hbN:ڍnzQUЏ 26 L xBްk3p 6;N=^xu:7@6R@5@hl׋ `خ%aўި%5t !3*歊~W{VgU`|CFЅQbo`ݛvu&淽a{}Z`kdZfZfz#dz#dZfU]vOeaeaea5R9@G9H1)  (Sqk( t2@' <̶nq`D0"jYPr?Gs?tsA<ADUе=AEADT]Ȥ2)^W"Ȩ2* BVEUX@+.\@,daoFmd[1>~aF}Q ;*&)`Vku`B A/B A/B A/Bk˚,A?#Џ@?#Џ@?t#Ѝ@7t#ЍA7tcЍA7tcЍA7ƸcЏA?cЏA?O@7tCguh'ESLN Km;_eh7x39堗c~rQ?G9گ{ SCя:W:WZؤS{,@X%*5@si2,jJ'Ig8J[9^IOr@} $6N`% zM= I&D#'XvIJ)tҶk0u& C'@R!z=Oj,uđ:N:" c_$M+/ib&歉ykb} /.J$`Τļŀ)`XlvA4D^9-'vnxޞNguT ]G9^Xeе0i@9϶B9o`ۊlTxmZߛuX|/l:0 ƈvT`T* v*=`wT`UꚊpnl87:j-]\10h`Ws8-bW32sO{욣~#{bec5 ~Pq6ͽ@N0MTh-MsSVMXj X )V6K25efJm a>¾E--ozi g3 G!3J 3J 3J 3Bf8 q2(dQȌMG!3Bfd~fd~f8 q2(d"όG!3Bf8 qMsûqMsrf5nNͮʍk47in\ܘE1rrc,ʍY(7fQn̢ܘE1rc, _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7| _冯rWUn*7|D8H 0{MˌֻߐQQp>n7!ʮl|H d,I2&ɦ˞$.tH>ͼO;ImI+NN;i4]t&NN;)o3ӵv %#w?MT+ш1Wj <fff"6FvJlORMh&uںfmi߶FOӬ+Yei>4#V4w[_ED?֗YE9 ##ghyoyݼVI`uL9=9Vc0aضqmcdze 6iSbd-+ڔ0ԦS"}DDY@@ZEYA ie0ǿ%KU8{A m ,A,r{o#DVN8&T )kߑ R.DJdn<3zѭ_Rf#FnϡqtYF$vH *TZRJ Zxo4Ko::ݷ,p˰ZsʔN O8 ?#@S[t+Bͪ0x ӂax*o`( f`$6ׂR ޮ !V}C#7nɽC=Jta]ҵ=+"u&qoT1ܔAF#;0= x};ھ$+V&,mFl89ml~Y:b\=&o^MfX2 TEjci75g#{ Y DT DR DP7ޓ(:vHme A|lwi1`1mˌ/V2:iH 0"#DP3)sEn1o9zy0E{>}reXkwj4{0#TEɷ2[ͰH1f:MjOKkCa )e .EL,\ Է)Fom.ŷ55Z":m9m7hr !,;X g@`EG`a' d",,l~}mc1, 0RTtZkFH[}Rg0ǞK=ViAkau ظM FwZ]̻ڛ ^F-A}ar$ 8+/;%L&q _ްM7JX%Vl 뵄>,qè as{U\*%*CR\Yxr .(q>os%nZecawq mD xH[[[{q%̰fYY{8%N-J%JYwnYC={Y<ߴCelcm }bR M_¸*!IJO%,ᘲÎBa!C^{ye(0)mo :.mIP6'.0ڃ)ŴE50l6 x $6Ua}5ē $6uߴc_!zL Jy6c59Fy64omP6VN>81lTa橁x8Y:C@aϦ!ʣލL .YS\R,python-mkdocs-1.5.3/mkdocs/themes/readthedocs/searchbox.html0000644000175000017500000000050614502137725024104 0ustar carstencarsten

python-mkdocs-1.5.3/mkdocs/themes/readthedocs/mkdocs_theme.yml0000644000175000017500000000063314502137725024426 0ustar carstencarsten# Config options for 'readthedocs' theme static_templates: - 404.html locale: en include_search_page: true search_index_only: false highlightjs: true hljs_languages: [] hljs_style: github analytics: gtag: null anonymize_ip: false include_homepage_in_sidebar: true prev_next_buttons_location: bottom navigation_depth: 4 titles_only: false sticky_navigation: true collapse_navigation: true logo: null python-mkdocs-1.5.3/mkdocs/themes/readthedocs/toc.html0000644000175000017500000000074614502137725022721 0ustar carstencarsten {%- for toc_item in toc_item.children %} {%- endfor %} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/img/0000755000175000017500000000000014502137725022013 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/img/favicon.ico0000644000175000017500000000217614502137725024142 0ustar carstencarsten h(    4J&-"2jM/|iA 3o=d9-lÃpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/__init__.py0000644000175000017500000000000014502137725023336 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/search.html0000644000175000017500000000136514502137725023377 0ustar carstencarsten{% extends "main.html" %} {% block content %}

{% trans %}Search Results{% endtrans %}

{% trans %}Searching...{% endtrans %}
{% endblock %} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/breadcrumbs.html0000644000175000017500000000466714502137725024433 0ustar carstencarsten
{%- if config.theme.prev_next_buttons_location|lower in ['top', 'both'] and page and (page.next_page or page.previous_page) %} {%- endif %}
python-mkdocs-1.5.3/mkdocs/themes/readthedocs/404.html0000644000175000017500000000025214502137725022433 0ustar carstencarsten{% extends "base.html" %} {% block content %}

404

{% trans %}Page not found{% endtrans %}

{% endblock %} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/messages.pot0000644000175000017500000000501214502137725023570 0ustar carstencarsten# Translations template for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by %(rtd_link)s." msgstr "" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "" #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/base.html0000644000175000017500000001647014502137725023047 0ustar carstencarsten {%- block site_meta %} {%- if page and page.is_homepage %}{%- endif %} {%- if config.site_author %}{%- endif %} {%- if page and page.canonical_url %}{%- endif %} {%- if config.site_favicon %} {%- else %} {%- endif %} {%- endblock %} {%- block htmltitle %} {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- endblock %} {%- block styles %} {%- if config.theme.highlightjs %} {%- endif %} {%- for path in config.extra_css %} {%- endfor %} {%- endblock %} {%- block libs %} {% if page %} {% endif %} {%- if config.theme.highlightjs %} {%- for lang in config.theme.hljs_languages %} {%- endfor %} {%- endif %} {%- endblock %} {%- block extrahead %} {% endblock %} {%- block analytics %} {%- if config.theme.analytics.gtag %} {%- elif config.google_analytics %} {% endif %} {%- endblock %}
{#- SIDE NAV, TOGGLES ON MOBILE #}
{#- MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #} {#- PAGE CONTENT #}
{%- include "breadcrumbs.html" %}
{% block content %} {{ page.content }} {% endblock %}
{%- block footer %} {%- include "footer.html" %} {% endblock %}
{% include "versions.html" -%} {%- block scripts %} {%- for script in config.extra_javascript %} {{ script|script_tag }} {%- endfor %} {%- endblock %} {% if page and page.is_homepage %} {% endif %} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/main.html0000644000175000017500000000060014502137725023045 0ustar carstencarsten{% extends "base.html" %} {# The entry point for the ReadTheDocs Theme. Any theme customisations should override this file to redefine blocks defined in the various templates. The custom theme should only need to define a main.html which `{% extends "base.html" %}` and defines various blocks which will replace the blocks defined in base.html and its included child templates. #} python-mkdocs-1.5.3/mkdocs/themes/readthedocs/versions.html0000644000175000017500000000205614502137725024000 0ustar carstencarsten
{% if config.repo_name == 'GitHub' %} GitHub {% elif config.repo_name == 'Bitbucket' %} BitBucket {% elif config.repo_name == 'GitLab' %} GitLab {% endif %} {% if page.previous_page %} « {% trans %}Previous{% endtrans %} {% endif %} {% if page.next_page %} {% trans %}Next{% endtrans %} » {% endif %}
python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/0000755000175000017500000000000014502137725022661 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/pt_BR/0000755000175000017500000000000014502137725023667 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/0000755000175000017500000000000014502137725025454 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/messages.po0000644000175000017500000000577414502137725027640 0ustar carstencarsten# Portuguese (Brazil) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-09-07 12:06+0200\n" "Last-Translator: Gustavo Lucas Valente \n" "Language: pt_BR\n" "Language-Team: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Página não encontrada" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Menu de navegação" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Menu de navegação em dispositivo móvel" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documentos" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar em %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editar" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Caminho de migalhas" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Seguinte" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navegação no rodapé" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Construído com %(mkdocs_link)s usando %(sphinx_link)s provido por " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Resultados da busca" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Buscar na documentação" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Digite o termo a ser buscado aqui" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Não foram encontrados resultados" #: mkdocs/themes/readthedocs/search.html:13 #, fuzzy msgid "Searching..." msgstr "Buscando..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Buscar documentos" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versões" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/uk/0000755000175000017500000000000014502137725023300 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/0000755000175000017500000000000014502137725025065 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/messages.po0000644000175000017500000000635314502137725027243 0ustar carstencarsten# Ukrainian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-09-17 15:51+0200\n" "Last-Translator: Oleh Prypin <@oprypin>\n" "Language: uk\n" "Language-Team: uk \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Сторінку не знайдено" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Логотип" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Меню навігації" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Мобільна версія меню" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Документація" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редагувати в %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Редагувати" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Навігаційна стежка" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Назад" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Вперед" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Нижнє меню навігації" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Зібрано у %(mkdocs_link)s з використанням %(sphinx_link)s від " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Результати пошуку" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Пошук у документах" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Введіть пошуковий запит" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Нічого не знайдено" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Пошук..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Пошук у документації" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Версії" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ja/0000755000175000017500000000000014502137725023253 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/0000755000175000017500000000000014502137725025040 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/messages.po0000644000175000017500000000607414502137725027216 0ustar carstencarsten# Japanese translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-07-31 12:07+0900\n" "Last-Translator: Goto Hayato \n" "Language: ja\n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "ページが見つかりません" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "ロゴ" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "ナビゲーションメニュー" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "モバイルナビゲーションメニュー" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "ドキュメント" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s で編集" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "パンくずリストナビゲーション" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "前へ" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "次へ" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "フッターナビゲーション" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "%(rtd_link)s 提供の %(sphinx_link)s を使って %(mkdocs_link)s でビルドされました。" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "検索結果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "ドキュメントを検索" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "検索語句を入力してください" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "結果がありません" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "検索しています..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "ドキュメントを検索" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "バージョン" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/id/0000755000175000017500000000000014502137725023255 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/0000755000175000017500000000000014502137725025042 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/messages.po0000644000175000017500000000570314502137725027216 0ustar carstencarsten# Indonesian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # Kira , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2023-03-21 21:00+0800\n" "Last-Translator: Kira \n" "Language: id\n" "Language-Team: id \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Halaman tidak ditemukan" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Menu navigasi" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Menu navigasi seluler" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Dokumen" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Sunting pada %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Sunting" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navigasi Remah Roti" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Sebelumnya" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Selanjutnya" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigasi Footer" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Dibangun dengan %(mkdocs_link)s menggunakan %(sphinx_link)s yang " "disediakan oleh %(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Hasil Penelusuran" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Telusuri Dokumen" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Ketik istilah pencarian di sini" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Menelusuri..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Telusuri dokumen" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versi" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fa/0000755000175000017500000000000014502137725023247 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/0000755000175000017500000000000014502137725025034 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/messages.po0000644000175000017500000000610314502137725027203 0ustar carstencarsten# Persian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2.2\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-03-03 15:56+0330\n" "Last-Translator: Peyman Mohammadi <@peymanr34>\n" "Language: fa\n" "Language-Team: fa \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "صفحه یافت نشد" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "لوگو" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "منوی ناوبری" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "منوی ناوبری موبایل" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "مستندات" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "ویرایش در %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "فهرست مسیر" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "قبلی" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "بعدی" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "ناوبری پاورقی" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "ساخته شده توسط %(mkdocs_link)s با استفاده از %(sphinx_link)s ارائه شده " "توسط %(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "نتایج جستجو" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "جستجوی مستندات" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "عبارت جستجو را اینجا وارد کنید" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "موردی یافت نشد" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "درحال جستجو..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "جستجوی مستندات" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "نسخه‌ها" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/de/0000755000175000017500000000000014502137725023251 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/0000755000175000017500000000000014502137725025036 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/messages.po0000644000175000017500000000567514502137725027222 0ustar carstencarsten# German translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2.3\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-10-23 18:52+0200\n" "Last-Translator: Marc Dietz \n" "Language: de\n" "Language-Team: de \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Seite nicht gefunden" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Navigationsmenü" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Mobile Navigationsmenü" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Dokumentation" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bearbeiten auf %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Bearbeiten" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Breadcrumb-Navigation" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Zurück" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Weiter" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Footer-Navigation" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "Erzeugt mit %(mkdocs_link)s mit einem %(sphinx_link)s von %(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Suchergebnisse" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Dokumentation durchsuchen" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Tragen Sie hier den gesuchten Begriff ein" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Keine Ergebnisse gefunden" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Suche..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Durchsuchen" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versionen" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_TW/0000755000175000017500000000000014502137725023714 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/0000755000175000017500000000000014502137725025501 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/messages.po0000644000175000017500000000567314502137725027663 0ustar carstencarsten# Chinese (Traditional, Taiwan) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2023-09-06 02:19+0800\n" "Last-Translator: Peter Dave Hello \n" "Language: zh_Hant_TW\n" "Language-Team: zh_Hant_TW \n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "找不到頁面" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "導覽列" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "行動裝置導覽列" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "文件" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "在 %(repo_name)s 上編輯" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "編輯" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "軌跡瀏覽" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "上一頁" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "下一頁" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "頁尾導覽" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "使用 %(mkdocs_link)s 建置,並採用 %(rtd_link)s 所提供的 %(sphinx_link)s。" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "搜尋結果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "搜尋文件" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "在此輸入要搜尋的內容" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "沒有找到結果" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "搜尋中..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "搜尋文件" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "版本" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/es/0000755000175000017500000000000014502137725023270 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/0000755000175000017500000000000014502137725025055 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/messages.po0000644000175000017500000000575214502137725027235 0ustar carstencarsten# Spanish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-12-06 13:33+0100\n" "Last-Translator: Álvaro Mondéjar Rubio \n" "Language: es\n" "Language-Team: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Página no encontrada" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Menu de navegación" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Menú de navegación en móvil" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documentos" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar en %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editar" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navegación de rastro" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Siguiente" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navegación de pie de página" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Construído con %(mkdocs_link)s usando %(sphinx_link)s provisto por " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Resultados de búsqueda" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Buscar en la documentación" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Escriba el término de búsqueda aquí" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "No se encontraron resultados" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Buscando..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Buscar documentos" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versiones" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/tr/0000755000175000017500000000000014502137725023306 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/0000755000175000017500000000000014502137725025073 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/messages.po0000644000175000017500000000566614502137725027257 0ustar carstencarsten# Turkish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-08-21 18:39+0300\n" "Last-Translator: Mustafa Sami Salt \n" "Language: tr\n" "Language-Team: tr \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Sayfa bulunamadı" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Gezinme menüsü" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Mobil gezinme menüsü" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Belgeler" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s içinde düzenle" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Düzenle" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Breadcrumb Gezinmesi" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Önceki" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Sonraki" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Footer Gezinmesi" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "%(rtd_link)s tarafından sağlanan %(sphinx_link)s " "kullanılarak %(mkdocs_link)s ile oluşturuldu." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Arama Sonuçları" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Belgelerde Ara" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Arama terimini buraya yazın" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Sonuç bulunamadı" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Aranıyor..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Belgelerde ara" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Sürümler" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fr/0000755000175000017500000000000014502137725023270 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/0000755000175000017500000000000014502137725025055 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/messages.po0000644000175000017500000000571614502137725027235 0ustar carstencarsten# French translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-02-23 23:56+0100\n" "Last-Translator: Alexys Jacob @ultrabug\n" "Language: fr\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Page non trouvée" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Menu de navigation" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Menu de navigation sur mobile" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documents" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editer dans %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Editer" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Fil d'Ariane" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Précédent" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Suivant" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigation de pied de page" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Générée avec %(mkdocs_link)s avec un %(sphinx_link)s fourni par " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Résultats de la recherche" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Rechercher dans la documentation" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Tapez vos mots clés ici" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Aucun résultat trouvé" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Recherche en cours..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Rechercher des documents" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versions" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_CN/0000755000175000017500000000000014502137725023662 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/0000755000175000017500000000000014502137725025447 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/messages.po0000644000175000017500000000570114502137725027621 0ustar carstencarsten# Chinese (Simplified, China) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues" "\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-08-23 04:29+0800\n" "Last-Translator: xingkong0113 \n" "Language: zh_CN\n" "Language-Team: zh_Hans_CN \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" "X-Generator: Poedit 2.4.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "找不到页面" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "导航栏" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "移动导航栏" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "文档" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "在%(repo_name)s上编辑" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "编辑" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "面包屑导航" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "上一章" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "下一章" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "页脚导航" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "用%(mkdocs_link)s构建,使用%(rtd_link)s提供的%(sphinx_link)s。" #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "搜索结果" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "搜索文档" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "在此输入需要搜索的内容" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "没有搜到结果" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "搜索中..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "搜索文档" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "版本" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ru/0000755000175000017500000000000014502137725023307 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/0000755000175000017500000000000014502137725025074 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/messages.po0000644000175000017500000000635714502137725027256 0ustar carstencarsten# Russian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-09-13 23:23+0300\n" "PO-Revision-Date: 2022-09-13 23:23+0300\n" "Last-Translator: Alexander Krasnikov \n" "Language: ru\n" "Language-Team: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Страница не найдена" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Логотип" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Навигационное меню" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Мобильная версия навигации" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Документация" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редактировать в %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Редактировать" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Навигационная цепочка" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Назад" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Вперед" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Навигация по странице" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Собрано в %(mkdocs_link)s с использованием %(sphinx_link)s от " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Результаты поиска" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Поиск в документах" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Введите поисковый запрос" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Ничего не найдено" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Поиск..." #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Поиск в документации" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Версии" python-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/it/0000755000175000017500000000000014502137725023275 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/0000755000175000017500000000000014502137725025062 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/messages.po0000644000175000017500000000572714502137725027244 0ustar carstencarsten# Italian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # FIRST AUTHOR , 2021. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-06-05 13:13+0200\n" "Last-Translator: Francesco Maida \n" "Language: it\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/readthedocs/404.html:7 msgid "Page not found" msgstr "Pagina non trovata" #: mkdocs/themes/readthedocs/base.html:97 msgid "Logo" msgstr "Logo" #: mkdocs/themes/readthedocs/base.html:111 msgid "Navigation menu" msgstr "Menu" #: mkdocs/themes/readthedocs/base.html:140 msgid "Mobile navigation menu" msgstr "Menu di navigazione mobile" #: mkdocs/themes/readthedocs/breadcrumbs.html:3 msgid "Docs" msgstr "Documenti" #: mkdocs/themes/readthedocs/breadcrumbs.html:18 #: mkdocs/themes/readthedocs/breadcrumbs.html:20 #: mkdocs/themes/readthedocs/breadcrumbs.html:22 #: mkdocs/themes/readthedocs/breadcrumbs.html:24 #, python-format msgid "Edit on %(repo_name)s" msgstr "Modifica su %(repo_name)s" #: mkdocs/themes/readthedocs/breadcrumbs.html:26 msgid "Edit" msgstr "Modificare" #: mkdocs/themes/readthedocs/breadcrumbs.html:34 msgid "Breadcrumb Navigation" msgstr "Navigazione breadcrumb" #: mkdocs/themes/readthedocs/breadcrumbs.html:36 #: mkdocs/themes/readthedocs/footer.html:7 #: mkdocs/themes/readthedocs/versions.html:17 msgid "Previous" msgstr "Precedente" #: mkdocs/themes/readthedocs/breadcrumbs.html:39 #: mkdocs/themes/readthedocs/footer.html:10 #: mkdocs/themes/readthedocs/versions.html:20 msgid "Next" msgstr "Successivo" #: mkdocs/themes/readthedocs/footer.html:5 msgid "Footer Navigation" msgstr "Navigazione a pié di pagina" #: mkdocs/themes/readthedocs/footer.html:25 #, python-format msgid "" "Built with %(mkdocs_link)s using a %(sphinx_link)s provided by " "%(rtd_link)s." msgstr "" "Creato con %(mkdocs_link)s utilizzando un %(sphinx_link)s fornito da " "%(rtd_link)s." #: mkdocs/themes/readthedocs/search.html:5 msgid "Search Results" msgstr "Risultati della ricerca" #: mkdocs/themes/readthedocs/search.html:9 msgid "Search the Docs" msgstr "Cerca nei documenti" #: mkdocs/themes/readthedocs/search.html:9 #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Type search term here" msgstr "Digita il termine di ricerca qui" #: mkdocs/themes/readthedocs/search.html:12 msgid "No results found" msgstr "Nessun risultato trovato" #: mkdocs/themes/readthedocs/search.html:13 msgid "Searching..." msgstr "Ricerca in corso…" #: mkdocs/themes/readthedocs/searchbox.html:3 msgid "Search docs" msgstr "Cerca documenti" #: mkdocs/themes/readthedocs/versions.html:1 msgid "Versions" msgstr "Versioni" python-mkdocs-1.5.3/mkdocs/themes/__init__.py0000644000175000017500000000000014502137725021051 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/0000755000175000017500000000000014502137725020232 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/search-modal.html0000644000175000017500000000233414502137725023461 0ustar carstencarsten python-mkdocs-1.5.3/mkdocs/themes/mkdocs/css/0000755000175000017500000000000014502137725021022 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/css/base.css0000644000175000017500000001524414502137725022454 0ustar carstencarstenhtml { /* csslint ignore:start */ /* The nav header is 3.5rem high, plus 20px for the margin-top of the main container. */ scroll-padding-top: calc(3.5rem + 20px); /* csslint ignore:end */ } /* Replacement for `body { background-attachment: fixed; }`, which has performance issues when scrolling on large displays. See #1394. */ body::before { content: ' '; position: fixed; width: 100%; height: 100%; top: 0; left: 0; background-color: #f8f8f8; background: url(../img/grid.png) repeat-x; will-change: transform; z-index: -1; } body > .container { margin-top: 20px; min-height: 400px; } .navbar.fixed-top { /* csslint allow: adjoining-classes */ /* csslint ignore:start */ position: -webkit-sticky; position: sticky; /* csslint ignore:end */ } .source-links { float: right; } .col-md-9 img { max-width: 100%; display: inline-block; padding: 4px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; margin: 20px auto 30px auto; } h1 { color: #444; font-weight: 400; font-size: 42px; } h2, h3, h4, h5, h6 { color: #444; font-weight: 300; } hr { border-top: 1px solid #aaa; } pre, .rst-content tt { max-width: 100%; background: #fff; border: solid 1px #e1e4e5; color: #333; overflow-x: auto; } code.code-large, .rst-content tt.code-large { font-size: 90%; } code { padding: 2px 5px; background: #fff; border: solid 1px #e1e4e5; color: #333; white-space: pre-wrap; word-wrap: break-word; } pre code { display: block; background: transparent; border: none; white-space: pre; word-wrap: normal; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 12px; } kbd { padding: 2px 4px; font-size: 90%; color: #fff; background-color: #333; border-radius: 3px; -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); } a code { color: #2FA4E7; } a:hover code, a:focus code { color: #157AB5; } footer { margin-top: 30px; margin-bottom: 10px; text-align: center; font-weight: 200; } .modal-dialog { margin-top: 60px; } /* * Side navigation * * Scrollspy and affixed enhanced navigation to highlight sections and secondary * sections of docs content. */ .bs-sidebar.affix { /* csslint allow: adjoining-classes */ /* csslint ignore:start */ position: -webkit-sticky; position: sticky; /* csslint ignore:end */ /* The nav header is 3.5rem high, plus 20px for the margin-top of the main container. */ top: calc(3.5rem + 20px); } .bs-sidebar.card { /* csslint allow: adjoining-classes */ padding: 0; max-height: 90%; overflow-y: auto; } /* Toggle (vertically flip) sidebar collapse icon */ .bs-sidebar .navbar-toggler span { -moz-transform: scale(1, -1); -webkit-transform: scale(1, -1); -o-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } .bs-sidebar .navbar-toggler.collapsed span { /* csslint allow: adjoining-classes */ -moz-transform: scale(1, 1); -webkit-transform: scale(1, 1); -o-transform: scale(1, 1); -ms-transform: scale(1, 1); transform: scale(1, 1); } /* First level of nav */ .bs-sidebar > .navbar-collapse > .nav { padding-top: 10px; padding-bottom: 10px; border-radius: 5px; width: 100%; } /* All levels of nav */ .bs-sidebar .nav > li > a { display: block; padding: 5px 20px; z-index: 1; } .bs-sidebar .nav > li > a:hover, .bs-sidebar .nav > li > a:focus { text-decoration: none; border-right: 1px solid; } .bs-sidebar .nav > li > a.active, .bs-sidebar .nav > li > a.active:hover, .bs-sidebar .nav > li > a.active:focus { font-weight: bold; background-color: transparent; border-right: 1px solid; } .bs-sidebar .nav .nav .nav { margin-left: 1em; } .bs-sidebar .nav > li > a { font-weight: bold; } .bs-sidebar .nav .nav > li > a { font-weight: normal; } .headerlink { font-family: FontAwesome; font-size: 14px; display: none; padding-left: .5em; } h1:hover .headerlink, h2:hover .headerlink, h3:hover .headerlink, h4:hover .headerlink, h5:hover .headerlink, h6:hover .headerlink { display:inline-block; } blockquote { padding-left: 10px; border-left: 4px solid #e6e6e6; } .admonition, details { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; text-align: left; } .admonition.note, details.note { /* csslint allow: adjoining-classes */ color: #2e6b89; background-color: #e2f0f7; border-color: #bce8f1; } .admonition.warning, details.warning { /* csslint allow: adjoining-classes */ color: #7a6032; background-color: #fffae5; border-color: #fbeed5; } .admonition.danger, details.danger { /* csslint allow: adjoining-classes */ color: #7f3130; background-color: #fde3e3; border-color: #eed3d7; } .admonition-title, summary { font-weight: bold; text-align: left; } .admonition>p:last-child, details>p:last-child { margin-bottom: 0; } @media (max-width: 991.98px) { .navbar-collapse.show { /* csslint allow: adjoining-classes */ overflow-y: auto; max-height: calc(100vh - 3.5rem); } } .dropdown-item.open { /* csslint allow: adjoining-classes */ color: #fff; background-color: #2FA4E7; } .dropdown-submenu > .dropdown-menu { margin: 0 0 0 1.5rem; padding: 0; border-width: 0; } .dropdown-submenu > a::after { display: block; content: " "; float: right; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; border-left-color: #ccc; margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover > a::after { border-left-color: #fff; } @media (min-width: 992px) { .dropdown-menu { overflow-y: auto; max-height: calc(100vh - 3.5rem); } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { /* csslint ignore:start */ position: fixed !important; /* csslint ignore:end */ margin-top: -9px; margin-left: -2px; border-width: 1px; padding: 0.5rem 0; } .dropdown-submenu.pull-left { /* csslint allow: adjoining-classes */ float: none; } .dropdown-submenu.pull-left > .dropdown-menu { /* csslint allow: adjoining-classes */ left: -100%; margin-left: 10px; } } @media print { /* Remove sidebar when print */ .col-md-3 { display: none; } } python-mkdocs-1.5.3/mkdocs/themes/mkdocs/mkdocs_theme.yml0000644000175000017500000000052714502137725023423 0ustar carstencarsten# Config options for 'mkdocs' theme static_templates: - 404.html locale: en include_search_page: false search_index_only: false highlightjs: true hljs_languages: [] hljs_style: github navigation_depth: 2 nav_style: primary analytics: gtag: null shortcuts: help: 191 # ? next: 78 # n previous: 80 # p search: 83 # s python-mkdocs-1.5.3/mkdocs/themes/mkdocs/js/0000755000175000017500000000000014502137725020646 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/js/base.js0000644000175000017500000001705514502137725022126 0ustar carstencarstenfunction getSearchTerm() { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == 'q') { return sParameterName[1]; } } } function applyTopPadding() { // Update various absolute positions to match where the main container // starts. This is necessary for handling multi-line nav headers, since // that pushes the main container down. var offset = $('body > .container').offset(); $('html').css('scroll-padding-top', offset.top + 'px'); $('.bs-sidebar.affix').css('top', offset.top + 'px'); } $(document).ready(function() { applyTopPadding(); var search_term = getSearchTerm(), $search_modal = $('#mkdocs_search_modal'), $keyboard_modal = $('#mkdocs_keyboard_modal'); if (search_term) { $search_modal.modal(); } // make sure search input gets autofocus every time modal opens. $search_modal.on('shown.bs.modal', function() { $search_modal.find('#mkdocs-search-query').focus(); }); // Close search modal when result is selected // The links get added later so listen to parent $('#mkdocs-search-results').click(function(e) { if ($(e.target).is('a')) { $search_modal.modal('hide'); } }); // Populate keyboard modal with proper Keys $keyboard_modal.find('.help.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.help]; $keyboard_modal.find('.prev.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.previous]; $keyboard_modal.find('.next.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.next]; $keyboard_modal.find('.search.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.search]; // Keyboard navigation document.addEventListener("keydown", function(e) { if ($(e.target).is(':input')) return true; var key = e.which || e.keyCode || window.event && window.event.keyCode; var page; switch (key) { case shortcuts.next: page = $('.navbar a[rel="next"]:first').prop('href'); break; case shortcuts.previous: page = $('.navbar a[rel="prev"]:first').prop('href'); break; case shortcuts.search: e.preventDefault(); $keyboard_modal.modal('hide'); $search_modal.modal('show'); $search_modal.find('#mkdocs-search-query').focus(); break; case shortcuts.help: $search_modal.modal('hide'); $keyboard_modal.modal('show'); break; default: break; } if (page) { $keyboard_modal.modal('hide'); window.location.href = page; } }); $('table').addClass('table table-striped table-hover'); // Improve the scrollspy behaviour when users click on a TOC item. $(".bs-sidenav a").on("click", function() { var clicked = this; setTimeout(function() { var active = $('.nav li.active a'); active = active[active.length - 1]; if (clicked !== active) { $(active).parent().removeClass("active"); $(clicked).parent().addClass("active"); } }, 50); }); function showInnerDropdown(item) { var popup = $(item).next('.dropdown-menu'); popup.addClass('show'); $(item).addClass('open'); // First, close any sibling dropdowns. var container = $(item).parent().parent(); container.find('> .dropdown-submenu > a').each(function(i, el) { if (el !== item) { hideInnerDropdown(el); } }); var popupMargin = 10; var maxBottom = $(window).height() - popupMargin; var bounds = item.getBoundingClientRect(); popup.css('left', bounds.right + 'px'); if (bounds.top + popup.height() > maxBottom && bounds.top > $(window).height() / 2) { popup.css({ 'top': (bounds.bottom - popup.height()) + 'px', 'max-height': (bounds.bottom - popupMargin) + 'px', }); } else { popup.css({ 'top': bounds.top + 'px', 'max-height': (maxBottom - bounds.top) + 'px', }); } } function hideInnerDropdown(item) { var popup = $(item).next('.dropdown-menu'); popup.removeClass('show'); $(item).removeClass('open'); popup.scrollTop(0); popup.find('.dropdown-menu').scrollTop(0).removeClass('show'); popup.find('.dropdown-submenu > a').removeClass('open'); } $('.dropdown-submenu > a').on('click', function(e) { if ($(this).next('.dropdown-menu').hasClass('show')) { hideInnerDropdown(this); } else { showInnerDropdown(this); } e.stopPropagation(); e.preventDefault(); }); $('.dropdown-menu').parent().on('hide.bs.dropdown', function(e) { $(this).find('.dropdown-menu').scrollTop(0); $(this).find('.dropdown-submenu > a').removeClass('open'); $(this).find('.dropdown-menu .dropdown-menu').removeClass('show'); }); }); $(window).on('resize', applyTopPadding); $('body').scrollspy({ target: '.bs-sidebar', offset: 100 }); /* Prevent disabled links from causing a page reload */ $("li.disabled a").click(function() { event.preventDefault(); }); // See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes // We only list common keys below. Obscure keys are omitted and their use is discouraged. var keyCodes = { 8: 'backspace', 9: 'tab', 13: 'enter', 16: 'shift', 17: 'ctrl', 18: 'alt', 19: 'pause/break', 20: 'caps lock', 27: 'escape', 32: 'spacebar', 33: 'page up', 34: 'page down', 35: 'end', 36: 'home', 37: '←', 38: '↑', 39: '→', 40: '↓', 45: 'insert', 46: 'delete', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 91: 'Left Windows Key / Left ⌘', 92: 'Right Windows Key', 93: 'Windows Menu / Right ⌘', 96: 'numpad 0', 97: 'numpad 1', 98: 'numpad 2', 99: 'numpad 3', 100: 'numpad 4', 101: 'numpad 5', 102: 'numpad 6', 103: 'numpad 7', 104: 'numpad 8', 105: 'numpad 9', 106: 'multiply', 107: 'add', 109: 'subtract', 110: 'decimal point', 111: 'divide', 112: 'f1', 113: 'f2', 114: 'f3', 115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12', 124: 'f13', 125: 'f14', 126: 'f15', 127: 'f16', 128: 'f17', 129: 'f18', 130: 'f19', 131: 'f20', 132: 'f21', 133: 'f22', 134: 'f23', 135: 'f24', 144: 'num lock', 145: 'scroll lock', 186: ';', 187: '=', 188: ',', 189: '‐', 190: '.', 191: '?', 192: '`', 219: '[', 220: '\', 221: ']', 222: ''', }; python-mkdocs-1.5.3/mkdocs/themes/mkdocs/toc.html0000644000175000017500000000206514502137725021710 0ustar carstencarsten python-mkdocs-1.5.3/mkdocs/themes/mkdocs/img/0000755000175000017500000000000014502137725021006 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/img/grid.png0000644000175000017500000000266214502137725022447 0ustar carstencarstenPNG  IHDRZ2zxǁ pHYs  niTXtXML:com.adobe.xmp ? AIDATxrU@?6@cR‰5<]f,M[13?Ûvffۣޜ/{zt/#tD#BG:"tD#BG9Ɔ%aqtD:"tD#BG:"tD# oaAm4v:"tD#BG:"tD#BG%=,GGD#BG:"tD#BG:ba8:"BG:"tD#BG:"tD K4:"tD#BG:"tD#BGذDlX9#BG:"tD#BG:"t'G|}4:"tD#BG:"tD#BGxK{X9#BG:"tD#BG:"tĆ%bqtD:"tD#BG:"tD#6,h#"tD#BG:"tD#BGaذDs|tls4ȕCo[]A':劎:"tD#BG:rO/x ޞmX~}xq|Xk=GGd %#BG1Y?!cK: #BG{9fǙ8ۆMwk?yގg{#B߷M~0⊎1W#B{rymX^?8Yk}2y#E\ё+;u[:ˎ/I#G6{:ṙym}ur۰xZki|tlݷ)|EoE#BGݻdї:"tDБc>wcS簜8Z\`γ_KgW [l:"tD#BG Θ#'IENDB`python-mkdocs-1.5.3/mkdocs/themes/mkdocs/img/favicon.ico0000644000175000017500000000217614502137725023135 0ustar carstencarsten h(    4J&-"2jM/|iA 3o=d9-lÃpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/__init__.py0000644000175000017500000000000014502137725022331 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/404.html0000644000175000017500000000051414502137725021427 0ustar carstencarsten{% extends "base.html" %} {% block content %}

404

{% trans %}Page not found{% endtrans %}

{% endblock %} python-mkdocs-1.5.3/mkdocs/themes/mkdocs/messages.pot0000644000175000017500000000441614502137725022572 0ustar carstencarsten# Translations template for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <@nickname or @email>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "" #: mkdocs/themes/mkdocs/base.html:142 #: mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 #: mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/nav-sub.html0000644000175000017500000000070214502137725022472 0ustar carstencarsten{%- if not nav_item.children %}
  • {{ nav_item.title }}
  • {%- else %} {%- endif %} python-mkdocs-1.5.3/mkdocs/themes/mkdocs/base.html0000644000175000017500000002522214502137725022035 0ustar carstencarsten {%- block site_meta %} {% if page and page.is_homepage %}{% endif %} {% if config.site_author %}{% endif %} {% if page and page.canonical_url %}{% endif %} {% if config.site_favicon %} {% else %}{% endif %} {%- endblock %} {%- block htmltitle %} {% if page and page.title and not page.is_homepage %}{{ page.title }} - {% endif %}{{ config.site_name }} {%- endblock %} {%- block styles %} {%- if config.theme.highlightjs %} {%- endif %} {%- for path in config.extra_css %} {%- endfor %} {%- endblock %} {%- block libs %} {%- if config.theme.highlightjs %} {%- for lang in config.theme.hljs_languages %} {%- endfor %} {%- endif %} {%- endblock %} {%- block analytics %} {%- if config.theme.analytics.gtag %} {%- elif config.google_analytics %} {%- endif %} {%- endblock %} {%- block extrahead %} {% endblock %}
    {%- block content %}
    {% include "toc.html" %}
    {% include "content.html" %}
    {%- endblock %}
    {%- block footer %}
    {%- if config.copyright %}

    {{ config.copyright }}

    {%- endif %}

    {% trans mkdocs_link='MkDocs' %}Documentation built with {{ mkdocs_link }}.{% endtrans %}

    {%- endblock %}
    {%- block scripts %} {%- for script in config.extra_javascript %} {{ script|script_tag }} {%- endfor %} {%- endblock %} {% if 'search' in config.plugins %}{%- include "search-modal.html" %}{% endif %} {%- include "keyboard-modal.html" %} {% if page and page.is_homepage %} {% endif %} python-mkdocs-1.5.3/mkdocs/themes/mkdocs/main.html0000644000175000017500000000057314502137725022051 0ustar carstencarsten{% extends "base.html" %} {# The entry point for the MkDocs Theme. Any theme customisations should override this file to redefine blocks defined in the various templates. The custom theme should only need to define a main.html which `{% extends "base.html" %}` and defines various blocks which will replace the blocks defined in base.html and its included child templates. #} python-mkdocs-1.5.3/mkdocs/themes/mkdocs/content.html0000644000175000017500000000031414502137725022570 0ustar carstencarsten{% if page.meta.source %} {% endif %} {{ page.content }} python-mkdocs-1.5.3/mkdocs/themes/mkdocs/keyboard-modal.html0000644000175000017500000000332514502137725024015 0ustar carstencarsten python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/0000755000175000017500000000000014502137725021654 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nn/0000755000175000017500000000000014502137725022267 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/0000755000175000017500000000000014502137725024054 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/messages.po0000644000175000017500000000524414502137725026230 0ustar carstencarsten# Norwegian Nynorsk translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-10-26 11:10+0200\n" "Last-Translator: Per Christian Gaustad \n" "Language: nn\n" "Language-Team: nn \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Fann ikkje sida" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Søk" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Førre" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Neste" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Rediger på %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Rediger" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasjonen bygd med %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastatursnarvegar" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Lukk" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tastar" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Handling" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Opn denne hjelpa" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Neste side" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Førre side" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Her kan du søke i desse dokumenta. Skriv søketeksta nedanfor." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Søk ..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Skriv søketeksta her" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Fann ingen resultat" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Innhaldsliste" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/pt_BR/0000755000175000017500000000000014502137725022662 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/0000755000175000017500000000000014502137725024447 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/messages.po0000644000175000017500000000536014502137725026622 0ustar carstencarsten# Portuguese (Brazil) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-09-07 12:06+0200\n" "Last-Translator: Nicole Buitoni \n" "Language: pt_BR\n" "Language-Team: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Página não encontrada" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Buscar" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Seguinte" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar em %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Editar" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentação construída com %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Atalhos de teclado" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Fechar" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Teclas" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Ação" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Abrir esta ajuda" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Próxima página" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Página anterior" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "A partir daqui você pode buscar pelo documento. Digite os termos de " "pesquisa abaixo." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Buscando..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Digite o termo a ser buscado aqui" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Não foram encontrados resultados" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabela de Conteúdos" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nb/0000755000175000017500000000000014502137725022253 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/0000755000175000017500000000000014502137725024040 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/messages.po0000644000175000017500000000526714502137725026221 0ustar carstencarsten# Norwegian Bokmål translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-10-26 11:10+0200\n" "Last-Translator: Per Christian Gaustad \n" "Language: nb\n" "Language-Team: nb \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Fant ikke siden" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Søk" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Forrige" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Neste" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Rediger på %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Rediger" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasjonen bygget med %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastatursnarveier" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Lukk" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Taster" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Handling" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Åpne denne hjelpen" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Neste side" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Forrige side" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Her kan du søke i disse dokumentene. Skriv søketeksten nedenfor." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Søk ..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Skriv søketeksten her" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Fant ingen resultater" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Innholdsfortegnelse" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/uk/0000755000175000017500000000000014502137725022273 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/0000755000175000017500000000000014502137725024060 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/messages.po0000644000175000017500000000575414502137725026242 0ustar carstencarsten# Ukrainian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-09-17 15:51+0200\n" "Last-Translator: Oleh Prypin <@oprypin>\n" "Language: uk\n" "Language-Team: uk \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Сторінку не знайдено" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Пошук" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Назад" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Вперед" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редагувати в %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Редагувати" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Документація збудована з %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Комбінації клавіш" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Закрити" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Клавіші" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Дія" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Відкрити цю довідку" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Наступна сторінка" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Попередня сторінка" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Звідси ви можете шукати документи. Введіть пошуковий запит знизу." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Пошук..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Введіть пошуковий запит" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Нічого не знайдено" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Зміст" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ja/0000755000175000017500000000000014502137725022246 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/0000755000175000017500000000000014502137725024033 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/messages.po0000644000175000017500000000544214502137725026207 0ustar carstencarsten# Japanese translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-07-31 12:06+0900\n" "Last-Translator: Goto Hayato \n" "Language: ja\n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "ページが見つかりません" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "検索" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "前へ" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "次へ" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s で編集" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "%(mkdocs_link)s でビルドされたドキュメンテーション" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "キーボードショートカット" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "閉じる" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "キー" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "アクション" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "このヘルプを開く" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "次のページ" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "前のページ" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "これらのドキュメントをこちらから検索できます。検索語句を以下に入力してください。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "検索..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "検索語句を入力してください" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "結果がありません" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目次" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/id/0000755000175000017500000000000014502137725022250 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/0000755000175000017500000000000014502137725024035 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/messages.po0000644000175000017500000000534314502137725026211 0ustar carstencarsten# Indonesian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2023-03-12 13:50+0800\n" "Last-Translator: Kira \n" "Language: id\n" "Language-Team: id \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.12.1\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Halaman tidak ditemukan" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Telusuri" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Sebelumnya" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Selanjutnya" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Sunting pada %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Sunting" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Dokumentasi dibuat dengan %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Pintasan Keyboard" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Tutup" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tombol" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Tindakan" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Buka bantuan ini" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Halaman selanjutnya" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Halaman sebelumnya" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Dari sini Anda dapat mencari dokumen ini. Masukkan istilah pencarian " "Anda di bawah ini." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Telusuri..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Ketik istilah pencarian di sini" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Daftar Isi" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fa/0000755000175000017500000000000014502137725022242 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/0000755000175000017500000000000014502137725024027 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/messages.po0000644000175000017500000000555614502137725026211 0ustar carstencarsten# Persian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-03-03 15:49+0330\n" "Last-Translator: Peyman Mohammadi <@peymanr34>\n" "Language: fa\n" "Language-Team: fa \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "صفحه یافت نشد" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "جستجو" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "قبلی" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "بعدی" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "ویرایش در %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "مستندات ساخته شده توسط %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "میانبر های صفحه کلید" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "بستن" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "کلیدها" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "عمل" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "بازکردن این راهنما" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "صفحه بعدی" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "صفحه قبلی" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "از این بخش می‌توانید اسناد را جستجو کنید. عبارت جستجوی خود را در بخش زیر " "وارد کنید." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "جستجو..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "عبارت جستجو را اینجا وارد کنید" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "موردی یافت نشد" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "فهرست مطالب" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/de/0000755000175000017500000000000014502137725022244 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/0000755000175000017500000000000014502137725024031 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/messages.po0000644000175000017500000000536314502137725026207 0ustar carstencarsten# German translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-10-24 00:09+0200\n" "Last-Translator: Marc Dietz \n" "Language: de\n" "Language-Team: de \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Seite nicht gefunden" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Suche" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Zurück" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Weiter" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Bearbeiten auf %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Bearbeiten" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Diese Dokumentation wurde erstellt mit %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastenkombinationen" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Schließen" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Taste" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Aktion" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Diese Hilfe anzeigen" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Nächste Seite" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Vorherige Seite" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Von hier aus können Sie diese Dokumente durchsuchen. Geben Sie unten Ihre" " Suchanfrage ein." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Suche..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Geben Sie hier ihre Suchanfrage ein" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Keine Ergebnisse gefunden" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Inhaltsverzeichnis" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_TW/0000755000175000017500000000000014502137725022707 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/0000755000175000017500000000000014502137725024474 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/messages.po0000644000175000017500000000532714502137725026652 0ustar carstencarsten# Chinese (Traditional, Taiwan) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2023-09-06 02:13+0800\n" "Last-Translator: Peter Dave Hello \n" "Language: zh_Hant_TW\n" "Language-Team: zh_Hant_TW \n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "找不到頁面" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "搜尋" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "上一頁" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "下一頁" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "在 %(repo_name)s 上編輯" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "編輯" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "使用 %(mkdocs_link)s 建立的文件" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "鍵盤快捷鍵" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "關閉" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "按鍵" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "操作" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "開啟這個說明" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "下一頁" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "上一頁" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "從這裡您可以搜尋這些文件。請在下方輸入您要搜尋的內容。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "搜尋..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "在此輸入要搜尋的內容" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "沒有找到結果" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目錄" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/es/0000755000175000017500000000000014502137725022263 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/0000755000175000017500000000000014502137725024050 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/messages.po0000644000175000017500000000536014502137725026223 0ustar carstencarsten# Spanish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-05-07 12:06+0200\n" "Last-Translator: Álvaro Mondéjar Rubio \n" "Language: es\n" "Language-Team: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Página no encontrada" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Buscar" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Anterior" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Siguiente" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editar en %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Editar" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentación construida con %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Cerrar" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Teclas" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Acción" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Abrir esta ayuda" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Página siguiente" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Página anterior" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Desde aquí puede buscar estos documentos. Ingrese sus términos de " "búsqueda a continuación." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Buscando..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Escriba el término de búsqueda aquí" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "No se encontraron resultados" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabla de contenidos" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/tr/0000755000175000017500000000000014502137725022301 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/0000755000175000017500000000000014502137725024066 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/messages.po0000644000175000017500000000525714502137725026246 0ustar carstencarsten# Turkish translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.3.1\n" "Report-Msgid-Bugs-To: \"https://github.com/mkdocs/mkdocs/issues\"\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-08-21 18:58+0300\n" "Last-Translator: Mustafa Sami Salt \n" "Language: tr\n" "Language-Team: tr \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Sayfa bulunamadı" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Ara" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Önceki" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Sonraki" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "%(repo_name)s içinde düzenle" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Düzenle" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Belgeler %(mkdocs_link)s ile oluşturuldu." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Kapat" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Tuşlar" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Eylem" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Bu yardımı aç" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Sonraki sayfa" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Önceki sayfa" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Buradan belgelerde arama yapabilirsiniz. Arama terimlerinizi aşağıya girin." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Ara..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Arama terimini buraya yazın" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Sonuç bulunamadı" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "İçindekiler" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fr/0000755000175000017500000000000014502137725022263 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/0000755000175000017500000000000014502137725024050 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/messages.po0000644000175000017500000000527014502137725026223 0ustar carstencarsten# French translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2021-02-23 23:56+0100\n" "Last-Translator: Alexys Jacob @ultrabug\n" "Language: fr\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Page non trouvée" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Rechercher" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Précédent" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Suivant" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Editer dans %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Editer" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentation générée avec %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Raccourcis Clavier" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Fermer" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Touches" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Ouvrir l'aide" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Page suivante" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Page précédente" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Ici vous pouvez chercher dans les documents. Entrez votre recherche ci-" "dessous." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Rechercher..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Tapez vos mots clés ici" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Aucun résultat trouvé" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Table des matières" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_CN/0000755000175000017500000000000014502137725022655 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/0000755000175000017500000000000014502137725024442 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/messages.po0000644000175000017500000000533114502137725026613 0ustar carstencarsten# Chinese (Simplified, China) translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-08-23 04:28+0800\n" "Last-Translator: xingkong0113 \n" "Language: zh_CN\n" "Language-Team: zh_Hans_CN \n" "Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" "X-Generator: Poedit 2.4.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "找不到页面" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "搜索" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "上一章" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "下一章" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "在%(repo_name)s上编辑" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "编辑" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "用%(mkdocs_link)s建立的文档。" #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "键盘热键" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "关闭" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "键" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "动作" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "打开这个帮助" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "下一页面" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "上一页面" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "从这里你可以搜索这些文件。在下面输入您的搜索内容。" #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "搜索..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "在此输入搜索内容" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "没有搜索到结果" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "目录" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ru/0000755000175000017500000000000014502137725022302 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/0000755000175000017500000000000014502137725024067 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/messages.po0000644000175000017500000000606414502137725026244 0ustar carstencarsten# Russian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-09-13 23:23+0300\n" "PO-Revision-Date: 2022-09-13 23:23+0300\n" "Last-Translator: Alexander Krasnikov \n" "Language: ru\n" "Language-Team: ru \n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Страница не найдена" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Поиск" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Назад" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Вперед" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Редактировать в %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Редактировать" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Документация создана с помощью %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Сочетания клавиш" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Закрыть" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Клавиши" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Действие" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Открыть справку" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Следующая страница" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Предыдущая страница" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "Чтобы воспользоваться поиском по документам, введите поисковый запрос ниже." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Поиск..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Введите поисковый запрос" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Ничего не найдено" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Содержание" python-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/it/0000755000175000017500000000000014502137725022270 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/0000755000175000017500000000000014502137725024055 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/messages.po0000644000175000017500000000533514502137725026232 0ustar carstencarsten# Italian translations for MkDocs. # Copyright (C) 2022 MkDocs # This file is distributed under the same license as the MkDocs project. # msgid "" msgstr "" "Project-Id-Version: MkDocs 1.2\n" "Report-Msgid-Bugs-To: https://github.com/mkdocs/mkdocs/issues\n" "POT-Creation-Date: 2022-08-15 17:05+0200\n" "PO-Revision-Date: 2022-06-05 12:23+0200\n" "Last-Translator: Francesco Maida \n" "Language: it\n" "Language-Team: fr \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.3\n" #: mkdocs/themes/mkdocs/404.html:8 msgid "Page not found" msgstr "Pagina non trovata" #: mkdocs/themes/mkdocs/base.html:116 #: mkdocs/themes/mkdocs/keyboard-modal.html:31 #: mkdocs/themes/mkdocs/search-modal.html:5 msgid "Search" msgstr "Cerca" #: mkdocs/themes/mkdocs/base.html:126 msgid "Previous" msgstr "Precedente" #: mkdocs/themes/mkdocs/base.html:131 msgid "Next" msgstr "Successivo" #: mkdocs/themes/mkdocs/base.html:142 mkdocs/themes/mkdocs/base.html:144 #: mkdocs/themes/mkdocs/base.html:146 mkdocs/themes/mkdocs/base.html:148 #, python-format msgid "Edit on %(repo_name)s" msgstr "Modifica su %(repo_name)s" #: mkdocs/themes/mkdocs/base.html:150 msgid "Edit" msgstr "Modificare" #: mkdocs/themes/mkdocs/base.html:190 #, python-format msgid "Documentation built with %(mkdocs_link)s." msgstr "Documentazione creata con %(mkdocs_link)s." #: mkdocs/themes/mkdocs/keyboard-modal.html:5 msgid "Keyboard Shortcuts" msgstr "Tastiera Rapida" #: mkdocs/themes/mkdocs/keyboard-modal.html:6 #: mkdocs/themes/mkdocs/search-modal.html:6 msgid "Close" msgstr "Chiudi" #: mkdocs/themes/mkdocs/keyboard-modal.html:12 msgid "Keys" msgstr "Chiavi" #: mkdocs/themes/mkdocs/keyboard-modal.html:13 msgid "Action" msgstr "Azione" #: mkdocs/themes/mkdocs/keyboard-modal.html:19 msgid "Open this help" msgstr "Apri questa guida" #: mkdocs/themes/mkdocs/keyboard-modal.html:23 msgid "Next page" msgstr "Pagina successiva" #: mkdocs/themes/mkdocs/keyboard-modal.html:27 msgid "Previous page" msgstr "Pagina precedente" #: mkdocs/themes/mkdocs/search-modal.html:9 msgid "From here you can search these documents. Enter your search terms below." msgstr "" "Da qui puoi cercare questi documenti. Inserisci i termini di ricerca qui " "sotto." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Search..." msgstr "Cerca..." #: mkdocs/themes/mkdocs/search-modal.html:12 msgid "Type search term here" msgstr "Digita il termine di ricerca qui" #: mkdocs/themes/mkdocs/search-modal.html:15 msgid "No results found" msgstr "Nessun risultato trovato" #: mkdocs/themes/mkdocs/toc.html:3 msgid "Table of Contents" msgstr "Tabella dei Contenuti" python-mkdocs-1.5.3/mkdocs/themes/babel.cfg0000644000175000017500000000017714502137725020505 0ustar carstencarsten[jinja2: **.html] ignore_tags = script,style include_attrs = alt title summary [extractors] jinja2 = jinja2.ext:babel_extract python-mkdocs-1.5.3/mkdocs/livereload/0000755000175000017500000000000014502137725017613 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/livereload/__init__.py0000644000175000017500000003155014502137725021730 0ustar carstencarstenfrom __future__ import annotations import functools import io import ipaddress import logging import mimetypes import os import os.path import pathlib import posixpath import re import socket import socketserver import string import sys import threading import time import traceback import urllib.parse import warnings import wsgiref.simple_server import wsgiref.util from typing import Any, BinaryIO, Callable, Iterable import watchdog.events import watchdog.observers.polling _SCRIPT_TEMPLATE_STR = """ var livereload = function(epoch, requestId) { var req = new XMLHttpRequest(); req.onloadend = function() { window.removeEventListener("beforeunload", abort); if (parseFloat(this.responseText) > epoch) { location.reload(); return; } var launchNext = livereload.bind(this, epoch, requestId); if (this.status === 200) { launchNext(); } else { setTimeout(launchNext, 3000); } }; var abort = req.abort.bind(req); window.addEventListener("beforeunload", abort); req.open("GET", "/livereload/" + epoch + "/" + requestId); req.send(); console.log('Enabled live reload'); } livereload(${epoch}, ${request_id}); """ _SCRIPT_TEMPLATE = string.Template(_SCRIPT_TEMPLATE_STR) class _LoggerAdapter(logging.LoggerAdapter): def process(self, msg: str, kwargs: dict) -> tuple[str, dict]: # type: ignore[override] return time.strftime("[%H:%M:%S] ") + msg, kwargs log = _LoggerAdapter(logging.getLogger(__name__), {}) class LiveReloadServer(socketserver.ThreadingMixIn, wsgiref.simple_server.WSGIServer): daemon_threads = True poll_response_timeout = 60 def __init__( self, builder: Callable[[], None], host: str, port: int, root: str, mount_path: str = "/", polling_interval: float = 0.5, shutdown_delay: float = 0.25, ) -> None: self.builder = builder self.server_name = host self.server_port = port try: if isinstance(ipaddress.ip_address(host), ipaddress.IPv6Address): self.address_family = socket.AF_INET6 except Exception: pass self.root = os.path.abspath(root) self.mount_path = ("/" + mount_path.lstrip("/")).rstrip("/") + "/" self.url = f"http://{self.server_name}:{self.server_port}{self.mount_path}" self.build_delay = 0.1 self.shutdown_delay = shutdown_delay # To allow custom error pages. self.error_handler: Callable[[int], bytes | None] = lambda code: None super().__init__((host, port), _Handler, bind_and_activate=False) self.set_app(self.serve_request) self._wanted_epoch = _timestamp() # The version of the site that started building. self._visible_epoch = self._wanted_epoch # Latest fully built version of the site. self._epoch_cond = threading.Condition() # Must be held when accessing _visible_epoch. self._to_rebuild: dict[ Callable[[], None], bool ] = {} # Used as an ordered set of functions to call. self._rebuild_cond = threading.Condition() # Must be held when accessing _to_rebuild. self._shutdown = False self.serve_thread = threading.Thread(target=lambda: self.serve_forever(shutdown_delay)) self.observer = watchdog.observers.polling.PollingObserver(timeout=polling_interval) self._watched_paths: dict[str, int] = {} self._watch_refs: dict[str, Any] = {} def watch( self, path: str, func: Callable[[], None] | None = None, recursive: bool = True ) -> None: """Add the 'path' to watched paths, call the function and reload when any file changes under it.""" path = os.path.abspath(path) if func is None or func is self.builder: funct = self.builder else: funct = func warnings.warn( "Plugins should not pass the 'func' parameter of watch(). " "The ability to execute custom callbacks will be removed soon.", DeprecationWarning, stacklevel=2, ) if path in self._watched_paths: self._watched_paths[path] += 1 return self._watched_paths[path] = 1 def callback(event): if event.is_directory: return log.debug(str(event)) with self._rebuild_cond: self._to_rebuild[funct] = True self._rebuild_cond.notify_all() handler = watchdog.events.FileSystemEventHandler() handler.on_any_event = callback # type: ignore[method-assign] log.debug(f"Watching '{path}'") self._watch_refs[path] = self.observer.schedule(handler, path, recursive=recursive) def unwatch(self, path: str) -> None: """Stop watching file changes for path. Raises if there was no corresponding `watch` call.""" path = os.path.abspath(path) self._watched_paths[path] -= 1 if self._watched_paths[path] <= 0: self._watched_paths.pop(path) self.observer.unschedule(self._watch_refs.pop(path)) def serve(self): self.server_bind() self.server_activate() if self._watched_paths: self.observer.start() paths_str = ", ".join(f"'{_try_relativize_path(path)}'" for path in self._watched_paths) log.info(f"Watching paths for changes: {paths_str}") log.info(f"Serving on {self.url}") self.serve_thread.start() self._build_loop() def _build_loop(self): while True: with self._rebuild_cond: while not self._rebuild_cond.wait_for( lambda: self._to_rebuild or self._shutdown, timeout=self.shutdown_delay ): # We could have used just one wait instead of a loop + timeout, but we need # occasional breaks, otherwise on Windows we can't receive KeyboardInterrupt. pass if self._shutdown: break log.info("Detected file changes") while self._rebuild_cond.wait(timeout=self.build_delay): log.debug("Waiting for file changes to stop happening") self._wanted_epoch = _timestamp() funcs = list(self._to_rebuild) self._to_rebuild.clear() try: for func in funcs: func() except Exception as e: if isinstance(e, SystemExit): print(e, file=sys.stderr) # noqa: T201 else: traceback.print_exc() log.error( "An error happened during the rebuild. The server will appear stuck until build errors are resolved." ) continue with self._epoch_cond: log.info("Reloading browsers") self._visible_epoch = self._wanted_epoch self._epoch_cond.notify_all() def shutdown(self, wait=False) -> None: self.observer.stop() with self._rebuild_cond: self._shutdown = True self._rebuild_cond.notify_all() if self.serve_thread.is_alive(): super().shutdown() self.server_close() if wait: self.serve_thread.join() self.observer.join() def serve_request(self, environ, start_response) -> Iterable[bytes]: try: result = self._serve_request(environ, start_response) except Exception: code = 500 msg = "500 Internal Server Error" log.exception(msg) else: if result is not None: return result code = 404 msg = "404 Not Found" error_content = None try: error_content = self.error_handler(code) except Exception: log.exception("Failed to render an error message!") if error_content is None: error_content = msg.encode() start_response(msg, [("Content-Type", "text/html")]) return [error_content] def _serve_request(self, environ, start_response) -> Iterable[bytes] | None: # https://bugs.python.org/issue16679 # https://github.com/bottlepy/bottle/blob/f9b1849db4/bottle.py#L984 path = environ["PATH_INFO"].encode("latin-1").decode("utf-8", "ignore") if path.startswith("/livereload/"): m = re.fullmatch(r"/livereload/([0-9]+)/[0-9]+", path) if m: epoch = int(m[1]) start_response("200 OK", [("Content-Type", "text/plain")]) def condition(): return self._visible_epoch > epoch with self._epoch_cond: if not condition(): # Stall the browser, respond as soon as there's something new. # If there's not, respond anyway after a minute. self._log_poll_request(environ.get("HTTP_REFERER"), request_id=path) self._epoch_cond.wait_for(condition, timeout=self.poll_response_timeout) return [b"%d" % self._visible_epoch] if (path + "/").startswith(self.mount_path): rel_file_path = path[len(self.mount_path) :] if path.endswith("/"): rel_file_path += "index.html" # Prevent directory traversal - normalize the path. rel_file_path = posixpath.normpath("/" + rel_file_path).lstrip("/") file_path = os.path.join(self.root, rel_file_path) elif path == "/": start_response("302 Found", [("Location", urllib.parse.quote(self.mount_path))]) return [] else: return None # Not found # Wait until the ongoing rebuild (if any) finishes, so we're not serving a half-built site. with self._epoch_cond: self._epoch_cond.wait_for(lambda: self._visible_epoch == self._wanted_epoch) epoch = self._visible_epoch try: file: BinaryIO = open(file_path, "rb") except OSError: if not path.endswith("/") and os.path.isfile(os.path.join(file_path, "index.html")): start_response("302 Found", [("Location", urllib.parse.quote(path) + "/")]) return [] return None # Not found if self._watched_paths and file_path.endswith(".html"): with file: content = file.read() content = self._inject_js_into_html(content, epoch) file = io.BytesIO(content) content_length = len(content) else: content_length = os.path.getsize(file_path) content_type = self._guess_type(file_path) start_response( "200 OK", [("Content-Type", content_type), ("Content-Length", str(content_length))] ) return wsgiref.util.FileWrapper(file) def _inject_js_into_html(self, content, epoch): try: body_end = content.rindex(b"") except ValueError: body_end = len(content) # The page will reload if the livereload poller returns a newer epoch than what it knows. # The other timestamp becomes just a unique identifier for the initiating page. script = _SCRIPT_TEMPLATE.substitute(epoch=epoch, request_id=_timestamp()) return b"%b%b" % ( content[:body_end], script.encode(), content[body_end:], ) @classmethod @functools.lru_cache() # "Cache" to not repeat the same message for the same browser tab. def _log_poll_request(cls, url, request_id): log.info(f"Browser connected: {url}") @classmethod def _guess_type(cls, path): # MkDocs only ensures a few common types (as seen in livereload_tests.py::test_mime_types). # Other uncommon types will not be accepted. if path.endswith((".js", ".JS", ".mjs")): return "application/javascript" if path.endswith(".gz"): return "application/gzip" guess, _ = mimetypes.guess_type(path) if guess: return guess return "application/octet-stream" class _Handler(wsgiref.simple_server.WSGIRequestHandler): def log_request(self, code="-", size="-"): level = logging.DEBUG if str(code) == "200" else logging.WARNING log.log(level, f'"{self.requestline}" code {code}') def log_message(self, format, *args): log.debug(format, *args) def _timestamp() -> int: return round(time.monotonic() * 1000) def _try_relativize_path(path: str) -> str: """Make the path relative to current directory if it's under that directory.""" p = pathlib.Path(path) try: p = p.relative_to(os.getcwd()) except ValueError: pass return str(p) python-mkdocs-1.5.3/mkdocs/config/0000755000175000017500000000000014502137725016732 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/config/__init__.py0000644000175000017500000000013014502137725021035 0ustar carstencarstenfrom mkdocs.config.base import Config, load_config __all__ = ['load_config', 'Config'] python-mkdocs-1.5.3/mkdocs/config/defaults.py0000644000175000017500000001734514502137725021125 0ustar carstencarstenfrom __future__ import annotations from typing import IO, TYPE_CHECKING, Dict from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.utils.yaml import get_yaml_loader, yaml_load if TYPE_CHECKING: import mkdocs.structure.pages # NOTE: The order here is important. During validation some config options # depend on others. So, if config option A depends on B, then A should be # listed higher in the schema. class MkDocsConfig(base.Config): """The configuration of MkDocs itself (the root object of mkdocs.yml).""" config_file_path: str = c.Type(str) # type: ignore[assignment] """The path to the mkdocs.yml config file. Can't be populated from the config.""" site_name = c.Type(str) """The title to use for the documentation.""" nav = c.Optional(c.Nav()) """Defines the structure of the navigation.""" pages = c.Deprecated(removed=True, moved_to='nav') exclude_docs = c.Optional(c.PathSpec()) """Gitignore-like patterns of files (relative to docs dir) to exclude from the site.""" not_in_nav = c.Optional(c.PathSpec()) """Gitignore-like patterns of files (relative to docs dir) that are not intended to be in the nav. This marks doc files that are expected not to be in the nav, otherwise they will cause a log message (see also `validation.nav.omitted_files`). """ site_url = c.Optional(c.URL(is_dir=True)) """The full URL to where the documentation will be hosted.""" site_description = c.Optional(c.Type(str)) """A description for the documentation project that will be added to the HTML meta tags.""" site_author = c.Optional(c.Type(str)) """The name of the author to add to the HTML meta tags.""" theme = c.Theme(default='mkdocs') """The MkDocs theme for the documentation.""" docs_dir = c.DocsDir(default='docs', exists=True) """The directory containing the documentation markdown.""" site_dir = c.SiteDir(default='site') """The directory where the site will be built to""" copyright = c.Optional(c.Type(str)) """A copyright notice to add to the footer of documentation.""" google_analytics = c.Deprecated( message=( 'The configuration option {} has been deprecated and ' 'will be removed in a future release of MkDocs. See the ' 'options available on your theme for an alternative.' ), option_type=c.Type(list, length=2), ) """set of values for Google analytics containing the account IO and domain this should look like, ['UA-27795084-5', 'mkdocs.org']""" dev_addr = c.IpAddress(default='127.0.0.1:8000') """The address on which to serve the live reloading docs server.""" use_directory_urls = c.Type(bool, default=True) """If `True`, use `/index.hmtl` style files with hyperlinks to the directory.If `False`, use `.html style file with hyperlinks to the file. True generates nicer URLs, but False is useful if browsing the output on a filesystem.""" repo_url = c.Optional(c.URL()) """Specify a link to the project source repo to be included in the documentation pages.""" repo_name = c.Optional(c.RepoName('repo_url')) """A name to use for the link to the project source repo. Default, If repo_url is unset then None, otherwise "GitHub", "Bitbucket" or "GitLab" for known url or Hostname for unknown urls.""" edit_uri_template = c.Optional(c.EditURITemplate('edit_uri')) edit_uri = c.Optional(c.EditURI('repo_url')) """Specify a URI to the docs dir in the project source repo, relative to the repo_url. When set, a link directly to the page in the source repo will be added to the generated HTML. If repo_url is not set also, this option is ignored.""" extra_css = c.Type(list, default=[]) extra_javascript = c.ListOfItems(c.ExtraScript(), default=[]) """Specify which css or javascript files from the docs directory should be additionally included in the site.""" extra_templates = c.Type(list, default=[]) """Similar to the above, but each template (HTML or XML) will be build with Jinja2 and the global context.""" markdown_extensions = c.MarkdownExtensions( builtins=['toc', 'tables', 'fenced_code'], configkey='mdx_configs' ) """PyMarkdown extension names.""" mdx_configs = c.Private[Dict[str, dict]]() """PyMarkdown extension configs. Populated from `markdown_extensions`.""" strict = c.Type(bool, default=False) """Enabling strict mode causes MkDocs to stop the build when a problem is encountered rather than display an error.""" remote_branch = c.Type(str, default='gh-pages') """The remote branch to commit to when using gh-deploy.""" remote_name = c.Type(str, default='origin') """The remote name to push to when using gh-deploy.""" extra = c.SubConfig() """extra is a mapping/dictionary of data that is passed to the template. This allows template authors to require extra configuration that not relevant to all themes and doesn't need to be explicitly supported by MkDocs itself. A good example here would be including the current project version.""" plugins = c.Plugins(theme_key='theme', default=['search']) """A list of plugins. Each item may contain a string name or a key value pair. A key value pair should be the string name (as the key) and a dict of config options (as the value).""" hooks = c.Hooks('plugins') """A list of filenames that will be imported as Python modules and used as an instance of a plugin each.""" watch = c.ListOfPaths(default=[]) """A list of extra paths to watch while running `mkdocs serve`.""" class Validation(base.Config): class NavValidation(base.Config): omitted_files = c._LogLevel(default='info') """Warning level for when a doc file is never mentioned in the navigation. For granular configuration, see `not_in_nav`.""" not_found = c._LogLevel(default='warn') """Warning level for when the navigation links to a relative path that isn't an existing page on the site.""" absolute_links = c._LogLevel(default='info') """Warning level for when the navigation links to an absolute path (starting with `/`).""" nav = c.SubConfig(NavValidation) class LinksValidation(base.Config): not_found = c._LogLevel(default='warn') """Warning level for when a Markdown doc links to a relative path that isn't an existing document on the site.""" absolute_links = c._LogLevel(default='info') """Warning level for when a Markdown doc links to an absolute path (starting with `/`).""" unrecognized_links = c._LogLevel(default='info') """Warning level for when a Markdown doc links to a relative path that doesn't look like it could be a valid internal link. For example, if the link ends with `/`.""" links = c.SubConfig(LinksValidation) validation = c.PropagatingSubConfig[Validation]() _current_page: mkdocs.structure.pages.Page | None = None """The currently rendered page. Please do not access this and instead rely on the `page` argument to event handlers.""" def load_dict(self, patch: dict) -> None: super().load_dict(patch) if 'config_file_path' in patch: raise base.ValidationError("Can't set config_file_path in config") def load_file(self, config_file: IO) -> None: """Load config options from the open file descriptor of a YAML file.""" loader = get_yaml_loader(config=self) self.load_dict(yaml_load(config_file, loader)) def get_schema() -> base.PlainConfigSchema: """Soft-deprecated, do not use.""" return MkDocsConfig._schema python-mkdocs-1.5.3/mkdocs/config/config_options.py0000644000175000017500000012601314502137725022327 0ustar carstencarstenfrom __future__ import annotations import functools import ipaddress import logging import os import string import sys import traceback import types import warnings from collections import Counter, UserString from typing import ( Any, Callable, Collection, Dict, Generic, Iterator, List, Mapping, MutableMapping, NamedTuple, TypeVar, Union, overload, ) from urllib.parse import quote as urlquote from urllib.parse import urlsplit, urlunsplit import markdown import pathspec import pathspec.gitignore from mkdocs import plugins, theme, utils from mkdocs.config.base import ( BaseConfigOption, Config, LegacyConfig, PlainConfigSchemaItem, ValidationError, ) from mkdocs.exceptions import ConfigurationError T = TypeVar('T') SomeConfig = TypeVar('SomeConfig', bound=Config) class SubConfig(Generic[SomeConfig], BaseConfigOption[SomeConfig]): """ Subconfig Config Option New: If targeting MkDocs 1.4+, please pass a subclass of Config to the constructor, instead of the old style of a sequence of ConfigOption instances. Validation is then enabled by default. A set of `config_options` grouped under a single config option. By default, validation errors and warnings resulting from validating `config_options` are ignored (`validate=False`). Users should typically enable validation with `validate=True`. """ _config_file_path: str | None = None config_class: type[SomeConfig] @overload def __init__( self: SubConfig[SomeConfig], config_class: type[SomeConfig], *, validate: bool = True ): """Create a sub-config in a type-safe way, using fields defined in a Config subclass.""" @overload def __init__( self: SubConfig[LegacyConfig], *config_options: PlainConfigSchemaItem, validate: bool = False, ): """Create an untyped sub-config, using directly passed fields.""" def __init__(self, *config_options, validate=None): super().__init__() self.default = {} self._do_validation = True if validate is None else validate if type(self) is SubConfig: if ( len(config_options) == 1 and isinstance(config_options[0], type) and issubclass(config_options[0], Config) ): (self.config_class,) = config_options else: self.config_class = functools.partial(LegacyConfig, config_options) self._do_validation = False if validate is None else validate def __class_getitem__(cls, config_class: type[Config]): """Eliminates the need to write `config_class = FooConfig` when subclassing SubConfig[FooConfig]""" name = f'{cls.__name__}[{config_class.__name__}]' return type(name, (cls,), dict(config_class=config_class)) def pre_validation(self, config: Config, key_name: str): self._config_file_path = config.config_file_path def run_validation(self, value: object) -> SomeConfig: config = self.config_class(config_file_path=self._config_file_path) try: config.load_dict(value) # type: ignore failed, warnings = config.validate() except ConfigurationError as e: raise ValidationError(str(e)) if self._do_validation: # Capture errors and warnings self.warnings.extend(f"Sub-option '{key}': {msg}" for key, msg in warnings) if failed: # Get the first failing one key, err = failed[0] raise ValidationError(f"Sub-option '{key}': {err}") return config class PropagatingSubConfig(SubConfig[SomeConfig], Generic[SomeConfig]): """A SubConfig that must consist of SubConfigs with defined schemas. Any value set on the top config gets moved to sub-configs with matching keys. """ def run_validation(self, value: object): if isinstance(value, dict): to_discard = set() for k1, v1 in self.config_class._schema: if isinstance(v1, SubConfig): for k2, _ in v1.config_class._schema: if k2 in value: subdict = value.setdefault(k1, {}) if isinstance(subdict, dict): to_discard.add(k2) subdict.setdefault(k2, value[k2]) for k in to_discard: del value[k] return super().run_validation(value) class OptionallyRequired(Generic[T], BaseConfigOption[T]): """ Soft-deprecated, do not use. A subclass of BaseConfigOption that adds support for default values and required values. It is a base class for config options. """ @overload def __init__(self, default=None): ... @overload def __init__(self, default=None, *, required: bool): ... def __init__(self, default=None, required=None): super().__init__() self.default = default self._legacy_required = required self.required = bool(required) def validate(self, value): """ Perform some initial validation. If the option is empty (None) and isn't required, leave it as such. If it is empty but has a default, use that. Finally, call the run_validation method on the subclass unless. """ if value is None: if self.default is not None: value = self.default elif not self.required: return None elif self.required: raise ValidationError("Required configuration not provided.") return self.run_validation(value) class ListOfItems(Generic[T], BaseConfigOption[List[T]]): """ Validates a homogeneous list of items. E.g. for `config_options.ListOfItems(config_options.Type(int))` a valid item is `[1, 2, 3]`. """ required: bool | None = None # Only for subclasses to set. def __init__(self, option_type: BaseConfigOption[T], default=None) -> None: super().__init__() self.default = default self.option_type = option_type self.option_type.warnings = self.warnings def __repr__(self) -> str: return f'{type(self).__name__}: {self.option_type}' def pre_validation(self, config: Config, key_name: str): self._config = config self._key_name = key_name def run_validation(self, value: object) -> list[T]: if value is None: if self.required or self.default is None: raise ValidationError("Required configuration not provided.") value = self.default if not isinstance(value, list): raise ValidationError(f'Expected a list of items, but a {type(value)} was given.') if not value: # Optimization for empty list return value fake_config = LegacyConfig(()) try: fake_config.config_file_path = self._config.config_file_path except AttributeError: pass # Emulate a config-like environment for pre_validation and post_validation. parent_key_name = getattr(self, '_key_name', '') fake_keys = [f'{parent_key_name}[{i}]' for i in range(len(value))] fake_config.data = dict(zip(fake_keys, value)) self.option_type.warnings = self.warnings for key_name in fake_config: self.option_type.pre_validation(fake_config, key_name) for key_name in fake_config: # Specifically not running `validate` to avoid the OptionallyRequired effect. fake_config[key_name] = self.option_type.run_validation(fake_config[key_name]) for key_name in fake_config: self.option_type.post_validation(fake_config, key_name) return [fake_config[k] for k in fake_keys] class DictOfItems(Generic[T], BaseConfigOption[Dict[str, T]]): """ Validates a dict of items. Keys are always strings. E.g. for `config_options.DictOfItems(config_options.Type(int))` a valid item is `{"a": 1, "b": 2}`. """ required: bool | None = None # Only for subclasses to set. def __init__(self, option_type: BaseConfigOption[T], default=None) -> None: super().__init__() self.default = default self.option_type = option_type self.option_type.warnings = self.warnings def __repr__(self) -> str: return f"{type(self).__name__}: {self.option_type}" def pre_validation(self, config: Config, key_name: str): self._config = config self._key_name = key_name def run_validation(self, value: object) -> dict[str, T]: if value is None: if self.required or self.default is None: raise ValidationError("Required configuration not provided.") value = self.default if not isinstance(value, dict): raise ValidationError(f"Expected a dict of items, but a {type(value)} was given.") if not value: # Optimization for empty list return value fake_config = LegacyConfig(()) try: fake_config.config_file_path = self._config.config_file_path except AttributeError: pass # Emulate a config-like environment for pre_validation and post_validation. fake_config.data = value for key in fake_config: self.option_type.pre_validation(fake_config, key) for key in fake_config: if not isinstance(key, str): raise ValidationError( f"Expected type: {str} for keys, but received: {type(key)} (key={key})" ) for key in fake_config: # Specifically not running `validate` to avoid the OptionallyRequired effect. fake_config[key] = self.option_type.run_validation(fake_config[key]) for key in fake_config: self.option_type.post_validation(fake_config, key) return value class ConfigItems(ListOfItems[LegacyConfig]): """ Deprecated: Use `ListOfItems(SubConfig(...))` instead of `ConfigItems(...)`. Validates a list of mappings that all must match the same set of options. """ @overload def __init__(self, *config_options: PlainConfigSchemaItem): ... @overload def __init__(self, *config_options: PlainConfigSchemaItem, required: bool): ... def __init__(self, *config_options: PlainConfigSchemaItem, required=None) -> None: super().__init__(SubConfig(*config_options), default=[]) self._legacy_required = required self.required = bool(required) class Type(Generic[T], OptionallyRequired[T]): """ Type Config Option Validate the type of a config option against a given Python type. """ @overload def __init__(self, type_: type[T], length: int | None = None, **kwargs): ... @overload def __init__(self, type_: tuple[type[T], ...], length: int | None = None, **kwargs): ... def __init__(self, type_, length=None, **kwargs) -> None: super().__init__(**kwargs) self._type = type_ self.length = length def run_validation(self, value: object) -> T: if not isinstance(value, self._type): msg = f"Expected type: {self._type} but received: {type(value)}" elif self.length is not None and len(value) != self.length: msg = ( f"Expected type: {self._type} with length {self.length}" f" but received: {value!r} with length {len(value)}" ) else: return value raise ValidationError(msg) class Choice(Generic[T], OptionallyRequired[T]): """ Choice Config Option Validate the config option against a strict set of values. """ def __init__(self, choices: Collection[T], default: T | None = None, **kwargs) -> None: super().__init__(default=default, **kwargs) try: length = len(choices) except TypeError: length = 0 if not length or isinstance(choices, str): raise ValueError(f'Expected iterable of choices, got {choices}') if default is not None and default not in choices: raise ValueError(f'{default!r} is not one of {choices!r}') self.choices = choices def run_validation(self, value: object) -> T: if value not in self.choices: raise ValidationError(f"Expected one of: {self.choices} but received: {value!r}") return value # type: ignore class Deprecated(BaseConfigOption): """ Deprecated Config Option Raises a warning as the option is deprecated. Uses `message` for the warning. If `move_to` is set to the name of a new config option, the value is moved to the new option on pre_validation. If `option_type` is set to a ConfigOption instance, then the value is validated against that type. """ def __init__( self, moved_to: str | None = None, message: str | None = None, removed: bool = False, option_type: BaseConfigOption | None = None, ) -> None: super().__init__() self.default = None self.moved_to = moved_to if not message: if removed: message = "The configuration option '{}' was removed from MkDocs." else: message = ( "The configuration option '{}' has been deprecated and " "will be removed in a future release." ) if moved_to: message += f" Use '{moved_to}' instead." self.message = message self.removed = removed self.option = option_type or BaseConfigOption() self.warnings = self.option.warnings def pre_validation(self, config: Config, key_name: str): self.option.pre_validation(config, key_name) if config.get(key_name) is not None: if self.removed: raise ValidationError(self.message.format(key_name)) self.warnings.append(self.message.format(key_name)) if self.moved_to is not None: *parent_keys, target_key = self.moved_to.split('.') target: Any = config for key in parent_keys: if target.get(key) is None: target[key] = {} target = target[key] if not isinstance(target, dict): # We can't move it for the user return target[target_key] = config.pop(key_name) def validate(self, value): return self.option.validate(value) def post_validation(self, config: Config, key_name: str): self.option.post_validation(config, key_name) def reset_warnings(self): self.option.reset_warnings() self.warnings = self.option.warnings class _IpAddressValue(NamedTuple): host: str port: int def __str__(self) -> str: return f'{self.host}:{self.port}' class IpAddress(OptionallyRequired[_IpAddressValue]): """ IpAddress Config Option Validate that an IP address is in an appropriate format """ def run_validation(self, value: object) -> _IpAddressValue: if not isinstance(value, str) or ':' not in value: raise ValidationError("Must be a string of format 'IP:PORT'") host, port_str = value.rsplit(':', 1) if host != 'localhost': if host.startswith('[') and host.endswith(']'): host = host[1:-1] try: # Validate and normalize IP Address host = str(ipaddress.ip_address(host)) except ValueError as e: raise ValidationError(e) try: port = int(port_str) except Exception: raise ValidationError(f"'{port_str}' is not a valid port") return _IpAddressValue(host, port) def post_validation(self, config: Config, key_name: str): host = config[key_name].host if key_name == 'dev_addr' and host in ['0.0.0.0', '::']: self.warnings.append( f"The use of the IP address '{host}' suggests a production environment " "or the use of a proxy to connect to the MkDocs server. However, " "the MkDocs' server is intended for local development purposes only. " "Please use a third party production-ready server instead." ) class URL(OptionallyRequired[str]): """ URL Config Option Validate a URL by requiring a scheme is present. """ @overload def __init__(self, default=None, *, is_dir: bool = False): ... @overload def __init__(self, default=None, *, required: bool, is_dir: bool = False): ... def __init__(self, default=None, required=None, is_dir: bool = False) -> None: self.is_dir = is_dir super().__init__(default, required=required) def run_validation(self, value: object) -> str: if not isinstance(value, str): raise ValidationError(f"Expected a string, got {type(value)}") if value == '': return value try: parsed_url = urlsplit(value) except (AttributeError, TypeError): raise ValidationError("Unable to parse the URL.") if parsed_url.scheme and parsed_url.netloc: if self.is_dir and not parsed_url.path.endswith('/'): parsed_url = parsed_url._replace(path=f'{parsed_url.path}/') return urlunsplit(parsed_url) raise ValidationError("The URL isn't valid, it should include the http:// (scheme)") class Optional(Generic[T], BaseConfigOption[Union[T, None]]): """Wraps a field and makes a None value possible for it when no value is set. E.g. `my_field = config_options.Optional(config_options.Type(str))` """ def __init__(self, config_option: BaseConfigOption[T]) -> None: if config_option.default is not None: raise ValueError( f"This option already has a default ({config_option.default!r}) " f"and doesn't need to be wrapped into Optional" ) super().__init__() self.option = config_option self.warnings = config_option.warnings def __getattr__(self, key): if key in ('option', 'warnings'): raise AttributeError return getattr(self.option, key) def pre_validation(self, config: Config, key_name: str): return self.option.pre_validation(config, key_name) def run_validation(self, value: object) -> T | None: if value is None: return None return self.option.validate(value) def post_validation(self, config: Config, key_name: str): result = self.option.post_validation(config, key_name) # type: ignore self.warnings = self.option.warnings return result def reset_warnings(self): self.option.reset_warnings() self.warnings = self.option.warnings class RepoURL(URL): def __init__(self, *args, **kwargs): warnings.warn( "RepoURL is no longer used in MkDocs and will be removed.", DeprecationWarning ) super().__init__(*args, **kwargs) def post_validation(self, config: Config, key_name: str): repo_host = urlsplit(config['repo_url']).netloc.lower() edit_uri = config.get('edit_uri') # derive repo_name from repo_url if unset if config['repo_url'] is not None and config.get('repo_name') is None: if repo_host == 'github.com': config['repo_name'] = 'GitHub' elif repo_host == 'bitbucket.org': config['repo_name'] = 'Bitbucket' elif repo_host == 'gitlab.com': config['repo_name'] = 'GitLab' else: config['repo_name'] = repo_host.split('.')[0].title() # derive edit_uri from repo_name if unset if config['repo_url'] is not None and edit_uri is None: if repo_host == 'github.com' or repo_host == 'gitlab.com': edit_uri = 'edit/master/docs/' elif repo_host == 'bitbucket.org': edit_uri = 'src/default/docs/' else: edit_uri = '' # ensure a well-formed edit_uri if edit_uri and not edit_uri.endswith('/'): edit_uri += '/' config['edit_uri'] = edit_uri class EditURI(Type[str]): def __init__(self, repo_url_key: str) -> None: super().__init__(str) self.repo_url_key = repo_url_key def post_validation(self, config: Config, key_name: str): edit_uri = config.get(key_name) repo_url = config.get(self.repo_url_key) if edit_uri is None and repo_url is not None: repo_host = urlsplit(repo_url).netloc.lower() if repo_host == 'github.com' or repo_host == 'gitlab.com': edit_uri = 'edit/master/docs/' elif repo_host == 'bitbucket.org': edit_uri = 'src/default/docs/' # ensure a well-formed edit_uri if edit_uri and not edit_uri.endswith('/'): edit_uri += '/' config[key_name] = edit_uri class EditURITemplate(BaseConfigOption[str]): class Formatter(string.Formatter): def convert_field(self, value, conversion): if conversion == 'q': return urlquote(value, safe='') return super().convert_field(value, conversion) class Template(UserString): def __init__(self, formatter, data) -> None: super().__init__(data) self.formatter = formatter try: self.format('', '') except KeyError as e: raise ValueError(f"Unknown template substitute: {e}") def format(self, path, path_noext): return self.formatter.format(self.data, path=path, path_noext=path_noext) def __init__(self, edit_uri_key: str | None = None) -> None: super().__init__() self.edit_uri_key = edit_uri_key def run_validation(self, value: object): try: return self.Template(self.Formatter(), value) except Exception as e: raise ValidationError(e) def post_validation(self, config: Config, key_name: str): if self.edit_uri_key and config.get(key_name) and config.get(self.edit_uri_key): self.warnings.append( f"The option '{self.edit_uri_key}' has no effect when '{key_name}' is set." ) class RepoName(Type[str]): def __init__(self, repo_url_key: str) -> None: super().__init__(str) self.repo_url_key = repo_url_key def post_validation(self, config: Config, key_name: str): repo_name = config.get(key_name) repo_url = config.get(self.repo_url_key) # derive repo_name from repo_url if unset if repo_url is not None and repo_name is None: repo_host = urlsplit(config['repo_url']).netloc.lower() if repo_host == 'github.com': repo_name = 'GitHub' elif repo_host == 'bitbucket.org': repo_name = 'Bitbucket' elif repo_host == 'gitlab.com': repo_name = 'GitLab' else: repo_name = repo_host.split('.')[0].title() config[key_name] = repo_name class FilesystemObject(Type[str]): """ Base class for options that point to filesystem objects. """ existence_test: Callable[[str], bool] = staticmethod(os.path.exists) name = 'file or directory' def __init__(self, exists: bool = False, **kwargs) -> None: super().__init__(type_=str, **kwargs) self.exists = exists self.config_dir: str | None = None def pre_validation(self, config: Config, key_name: str): self.config_dir = ( os.path.dirname(config.config_file_path) if config.config_file_path else None ) def run_validation(self, value: object) -> str: value = super().run_validation(value) if self.config_dir and not os.path.isabs(value): value = os.path.join(self.config_dir, value) if self.exists and not self.existence_test(value): raise ValidationError(f"The path '{value}' isn't an existing {self.name}.") return os.path.abspath(value) class Dir(FilesystemObject): """ Dir Config Option Validate a path to a directory, optionally verifying that it exists. """ existence_test = staticmethod(os.path.isdir) name = 'directory' class DocsDir(Dir): def post_validation(self, config: Config, key_name: str): if not config.config_file_path: return # Validate that the dir is not the parent dir of the config file. if os.path.dirname(config.config_file_path) == config[key_name]: raise ValidationError( f"The '{key_name}' should not be the parent directory of the" f" config file. Use a child directory instead so that the" f" '{key_name}' is a sibling of the config file." ) class File(FilesystemObject): """ File Config Option Validate a path to a file, optionally verifying that it exists. """ existence_test = staticmethod(os.path.isfile) name = 'file' class ListOfPaths(ListOfItems[str]): """ List of Paths Config Option A list of file system paths. Raises an error if one of the paths does not exist. For greater flexibility, prefer ListOfItems, e.g. to require files specifically: config_options.ListOfItems(config_options.File(exists=True)) """ @overload def __init__(self, default=[]): ... @overload def __init__(self, default=[], *, required: bool): ... def __init__(self, default=[], required=None) -> None: super().__init__(FilesystemObject(exists=True), default) self.required = required class SiteDir(Dir): """ SiteDir Config Option Validates the site_dir and docs_dir directories do not contain each other. """ def post_validation(self, config: Config, key_name: str): super().post_validation(config, key_name) docs_dir = config['docs_dir'] site_dir = config['site_dir'] # Validate that the docs_dir and site_dir don't contain the # other as this will lead to copying back and forth on each # and eventually make a deep nested mess. if (docs_dir + os.sep).startswith(site_dir.rstrip(os.sep) + os.sep): raise ValidationError( f"The 'docs_dir' should not be within the 'site_dir' as this " f"can mean the source files are overwritten by the output or " f"it will be deleted if --clean is passed to mkdocs build. " f"(site_dir: '{site_dir}', docs_dir: '{docs_dir}')" ) elif (site_dir + os.sep).startswith(docs_dir.rstrip(os.sep) + os.sep): raise ValidationError( f"The 'site_dir' should not be within the 'docs_dir' as this " f"leads to the build directory being copied into itself and " f"duplicate nested files in the 'site_dir'. " f"(site_dir: '{site_dir}', docs_dir: '{docs_dir}')" ) class Theme(BaseConfigOption[theme.Theme]): """ Theme Config Option Validate that the theme exists and build Theme instance. """ def __init__(self, default=None) -> None: super().__init__() self.default = default def pre_validation(self, config: Config, key_name: str): self.config_file_path = config.config_file_path def run_validation(self, value: object) -> theme.Theme: if value is None and self.default is not None: theme_config = {'name': self.default} elif isinstance(value, str): theme_config = {'name': value} elif isinstance(value, dict): if 'name' not in value: raise ValidationError("No theme name set.") theme_config = value else: raise ValidationError( f'Invalid type {type(value)}. Expected a string or key/value pairs.' ) themes = utils.get_theme_names() if theme_config['name'] is not None and theme_config['name'] not in themes: raise ValidationError( f"Unrecognised theme name: '{theme_config['name']}'. " f"The available installed themes are: {', '.join(themes)}" ) if not theme_config['name'] and 'custom_dir' not in theme_config: raise ValidationError("At least one of 'name' or 'custom_dir' must be defined.") # Ensure custom_dir is an absolute path if 'custom_dir' in theme_config and not os.path.isabs(theme_config['custom_dir']): config_dir = os.path.dirname(self.config_file_path) theme_config['custom_dir'] = os.path.join(config_dir, theme_config['custom_dir']) if 'custom_dir' in theme_config and not os.path.isdir(theme_config['custom_dir']): raise ValidationError( "The path set in custom_dir ('{path}') does not exist.".format( path=theme_config['custom_dir'] ) ) if 'locale' in theme_config and not isinstance(theme_config['locale'], str): raise ValidationError("'locale' must be a string.") return theme.Theme(**theme_config) class Nav(OptionallyRequired): """ Nav Config Option Validate the Nav config. """ def run_validation(self, value: object, *, top=True): if isinstance(value, list): for subitem in value: self._validate_nav_item(subitem) if top and not value: value = None elif isinstance(value, dict) and value and not top: # TODO: this should be an error. self.warnings.append(f"Expected nav to be a list, got {self._repr_item(value)}") for subitem in value.values(): self.run_validation(subitem, top=False) elif isinstance(value, str) and not top: pass else: raise ValidationError(f"Expected nav to be a list, got {self._repr_item(value)}") return value def _validate_nav_item(self, value): if isinstance(value, str): pass elif isinstance(value, dict): if len(value) != 1: raise ValidationError( f"Expected nav item to be a dict of size 1, got {self._repr_item(value)}" ) for subnav in value.values(): self.run_validation(subnav, top=False) else: raise ValidationError( f"Expected nav item to be a string or dict, got {self._repr_item(value)}" ) @classmethod def _repr_item(cls, value) -> str: if isinstance(value, dict) and value: return f"dict with keys {tuple(value.keys())}" elif isinstance(value, (str, type(None))): return repr(value) else: return f"a {type(value).__name__}: {value!r}" class Private(Generic[T], BaseConfigOption[T]): """A config option that can only be populated programmatically. Raises an error if set by the user.""" def run_validation(self, value: object) -> None: if value is not None: raise ValidationError('For internal use only.') class ExtraScriptValue(Config): """An extra script to be added to the page. The `extra_javascript` config is a list of these.""" path = Type(str) """The value of the `src` tag of the script.""" type = Type(str, default='') """The value of the `type` tag of the script.""" defer = Type(bool, default=False) """Whether to add the `defer` tag to the script.""" async_ = Type(bool, default=False) """Whether to add the `async` tag to the script.""" def __init__(self, path: str = '', config_file_path=None): super().__init__(config_file_path=config_file_path) self.path = path def __str__(self): return self.path def __fspath__(self): return self.path class ExtraScript(BaseConfigOption[Union[ExtraScriptValue, str]]): def __init__(self): super().__init__() self.option_type = SubConfig[ExtraScriptValue]() def run_validation(self, value: object) -> ExtraScriptValue | str: self.option_type.warnings = self.warnings if isinstance(value, str): if value.endswith('.mjs'): return self.option_type.run_validation({'path': value, 'type': 'module'}) return value return self.option_type.run_validation(value) class MarkdownExtensions(OptionallyRequired[List[str]]): """ Markdown Extensions Config Option A list or dict of extensions. Each list item may contain either a string or a one item dict. A string must be a valid Markdown extension name with no config options defined. The key of a dict item must be a valid Markdown extension name and the value must be a dict of config options for that extension. Extension configs are set on the private setting passed to `configkey`. The `builtins` keyword accepts a list of extensions which cannot be overridden by the user. However, builtins can be duplicated to define config options for them if desired.""" def __init__( self, builtins: list[str] | None = None, configkey: str = 'mdx_configs', default: list[str] = [], **kwargs, ) -> None: super().__init__(default=default, **kwargs) self.builtins = builtins or [] self.configkey = configkey def validate_ext_cfg(self, ext: object, cfg: object) -> None: if not isinstance(ext, str): raise ValidationError(f"'{ext}' is not a valid Markdown Extension name.") if not cfg: return if not isinstance(cfg, dict): raise ValidationError(f"Invalid config options for Markdown Extension '{ext}'.") self.configdata[ext] = cfg def run_validation(self, value: object) -> list[str]: self.configdata: dict[str, dict] = {} if not isinstance(value, (list, tuple, dict)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] if isinstance(value, dict): for ext, cfg in value.items(): self.validate_ext_cfg(ext, cfg) extensions.append(ext) else: for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError('Invalid Markdown Extensions configuration') ext, cfg = item.popitem() self.validate_ext_cfg(ext, cfg) extensions.append(ext) elif isinstance(item, str): extensions.append(item) else: raise ValidationError('Invalid Markdown Extensions configuration') extensions = utils.reduce_list(self.builtins + extensions) # Confirm that Markdown considers extensions to be valid md = markdown.Markdown() for ext in extensions: try: md.registerExtensions((ext,), self.configdata) except Exception as e: stack: list = [] for frame in reversed(traceback.extract_tb(sys.exc_info()[2])): if not frame.line: # Ignore frames before break stack.insert(0, frame) tb = ''.join(traceback.format_list(stack)) raise ValidationError( f"Failed to load extension '{ext}'.\n{tb}{type(e).__name__}: {e}" ) return extensions def post_validation(self, config: Config, key_name: str): config[self.configkey] = self.configdata class Plugins(OptionallyRequired[plugins.PluginCollection]): """ Plugins config option. A list or dict of plugins. If a plugin defines config options those are used when initializing the plugin class. """ def __init__(self, theme_key: str | None = None, **kwargs) -> None: super().__init__(**kwargs) self.installed_plugins = plugins.get_plugins() self.theme_key = theme_key self._config: Config | None = None self.plugin_cache: dict[str, plugins.BasePlugin] = {} def pre_validation(self, config, key_name): self._config = config def run_validation(self, value: object) -> plugins.PluginCollection: if not isinstance(value, (list, tuple, dict)): raise ValidationError('Invalid Plugins configuration. Expected a list or dict.') self.plugins = plugins.PluginCollection() self._instance_counter: MutableMapping[str, int] = Counter() for name, cfg in self._parse_configs(value): self.load_plugin_with_namespace(name, cfg) return self.plugins @classmethod def _parse_configs(cls, value: list | tuple | dict) -> Iterator[tuple[str, dict]]: if isinstance(value, dict): for name, cfg in value.items(): if not isinstance(name, str): raise ValidationError(f"'{name}' is not a valid plugin name.") yield name, cfg else: for item in value: if isinstance(item, dict): if len(item) != 1: raise ValidationError('Invalid Plugins configuration') name, cfg = item.popitem() else: name = item cfg = {} if not isinstance(name, str): raise ValidationError(f"'{name}' is not a valid plugin name.") yield name, cfg def load_plugin_with_namespace(self, name: str, config) -> tuple[str, plugins.BasePlugin]: if '/' in name: # It's already specified with a namespace. # Special case: allow to explicitly skip namespaced loading: if name.startswith('/'): name = name[1:] else: # Attempt to load with prepended namespace for the current theme. if self.theme_key and self._config: current_theme = self._config[self.theme_key] if not isinstance(current_theme, str): current_theme = current_theme['name'] if current_theme: expanded_name = f'{current_theme}/{name}' if expanded_name in self.installed_plugins: name = expanded_name return (name, self.load_plugin(name, config)) def load_plugin(self, name: str, config) -> plugins.BasePlugin: if name not in self.installed_plugins: raise ValidationError(f'The "{name}" plugin is not installed') config = config or {} # Users may define a null (None) config if not isinstance(config, dict): raise ValidationError(f"Invalid config options for the '{name}' plugin.") self._instance_counter[name] += 1 inst_number = self._instance_counter[name] inst_name = name if inst_number > 1: inst_name += f' #{inst_number}' plugin = self.plugin_cache.get(inst_name) if plugin is None: plugin_cls = self.installed_plugins[name].load() if not issubclass(plugin_cls, plugins.BasePlugin): raise ValidationError( f'{plugin_cls.__module__}.{plugin_cls.__name__} must be a subclass of' f' {plugins.BasePlugin.__module__}.{plugins.BasePlugin.__name__}' ) plugin = plugin_cls() if hasattr(plugin, 'on_startup') or hasattr(plugin, 'on_shutdown'): self.plugin_cache[inst_name] = plugin if inst_number > 1 and not getattr(plugin, 'supports_multiple_instances', False): self.warnings.append( f"Plugin '{name}' was specified multiple times - this is likely a mistake, " "because the plugin doesn't declare `supports_multiple_instances`." ) errors, warns = plugin.load_config( config, self._config.config_file_path if self._config else None ) for warning in warns: if isinstance(warning, str): self.warnings.append(f"Plugin '{inst_name}': {warning}") else: key, msg = warning self.warnings.append(f"Plugin '{inst_name}' option '{key}': {msg}") errors_message = '\n'.join(f"Plugin '{name}' option '{key}': {msg}" for key, msg in errors) if errors_message: raise ValidationError(errors_message) self.plugins[inst_name] = plugin return plugin class Hooks(BaseConfigOption[List[types.ModuleType]]): """A list of Python scripts to be treated as instances of plugins.""" def __init__(self, plugins_key: str) -> None: super().__init__() self.default = [] self.plugins_key = plugins_key def pre_validation(self, config: Config, key_name: str): self._base_option = ListOfItems(File(exists=True)) self._base_option.pre_validation(config, key_name) def run_validation(self, value: object) -> Mapping[str, Any]: paths = self._base_option.validate(value) self.warnings.extend(self._base_option.warnings) assert isinstance(value, list) hooks = {} for name, path in zip(value, paths): hooks[name] = self._load_hook(name, path) return hooks @functools.lru_cache(maxsize=None) def _load_hook(self, name, path): import importlib.util spec = importlib.util.spec_from_file_location(name, path) if spec is None: raise ValidationError(f"Cannot import path '{path}' as a Python module") module = importlib.util.module_from_spec(spec) sys.modules[name] = module if spec.loader is None: raise ValidationError(f"Cannot import path '{path}' as a Python module") spec.loader.exec_module(module) return module def post_validation(self, config: Config, key_name: str): plugins = config[self.plugins_key] for name, hook in config[key_name].items(): plugins[name] = hook class PathSpec(BaseConfigOption[pathspec.gitignore.GitIgnoreSpec]): """A path pattern based on gitignore-like syntax.""" def run_validation(self, value: object) -> pathspec.gitignore.GitIgnoreSpec: if not isinstance(value, str): raise ValidationError(f'Expected a multiline string, but a {type(value)} was given.') try: return pathspec.gitignore.GitIgnoreSpec.from_lines(lines=value.splitlines()) except ValueError as e: raise ValidationError(str(e)) class _LogLevel(OptionallyRequired[int]): levels: Mapping[str, int] = { "warn": logging.WARNING, "info": logging.INFO, "ignore": logging.DEBUG, } def run_validation(self, value: object) -> int: if not isinstance(value, str): raise ValidationError(f'Expected a string, but a {type(value)} was given.') try: return self.levels[value] except KeyError: raise ValidationError(f'Expected one of {list(self.levels)}, got {value!r}') python-mkdocs-1.5.3/mkdocs/config/base.py0000644000175000017500000003153714502137725020227 0ustar carstencarstenfrom __future__ import annotations import functools import logging import os import sys import warnings from collections import UserDict from contextlib import contextmanager from typing import ( IO, TYPE_CHECKING, Any, Generic, Iterator, List, Mapping, Sequence, Tuple, TypeVar, overload, ) from mkdocs import exceptions, utils from mkdocs.utils import weak_property if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger('mkdocs.config') T = TypeVar('T') class BaseConfigOption(Generic[T]): def __init__(self) -> None: self.warnings: list[str] = [] self.default = None @property def default(self): try: # ensure no mutable values are assigned return self._default.copy() except AttributeError: return self._default @default.setter def default(self, value): self._default = value def validate(self, value: object) -> T: return self.run_validation(value) def reset_warnings(self) -> None: self.warnings = [] def pre_validation(self, config: Config, key_name: str) -> None: """ Before all options are validated, perform a pre-validation process. The pre-validation process method should be implemented by subclasses. """ def run_validation(self, value: object): """ Perform validation for a value. The run_validation method should be implemented by subclasses. """ return value def post_validation(self, config: Config, key_name: str) -> None: """ After all options have passed validation, perform a post-validation process to do any additional changes dependent on other config values. The post-validation process method should be implemented by subclasses. """ def __set_name__(self, owner, name): if name.endswith('_') and not name.startswith('_'): name = name[:-1] self._name = name @overload def __get__(self, obj: Config, type=None) -> T: ... @overload def __get__(self, obj, type=None) -> BaseConfigOption: ... def __get__(self, obj, type=None): if not isinstance(obj, Config): return self return obj[self._name] def __set__(self, obj, value: T): if not isinstance(obj, Config): raise AttributeError( f"can't set attribute ({self._name}) because the parent is a {type(obj)} not a {Config}" ) obj[self._name] = value class ValidationError(Exception): """Raised during the validation process of the config on errors.""" def __eq__(self, other): return type(self) is type(other) and str(self) == str(other) PlainConfigSchemaItem = Tuple[str, BaseConfigOption] PlainConfigSchema = Sequence[PlainConfigSchemaItem] ConfigErrors = List[Tuple[str, Exception]] ConfigWarnings = List[Tuple[str, str]] class Config(UserDict): """ Base class for MkDocs configuration, plugin configuration (and sub-configuration) objects. It should be subclassed and have `ConfigOption`s defined as attributes. For examples, see mkdocs/contrib/search/__init__.py and mkdocs/config/defaults.py. Behavior as it was prior to MkDocs 1.4 is now handled by LegacyConfig. """ _schema: PlainConfigSchema config_file_path: str def __init_subclass__(cls): schema = dict(getattr(cls, '_schema', ())) for attr_name, attr in cls.__dict__.items(): if isinstance(attr, BaseConfigOption): schema[getattr(attr, '_name', attr_name)] = attr cls._schema = tuple(schema.items()) for attr_name, attr in cls._schema: attr.required = True if getattr(attr, '_legacy_required', None) is not None: raise TypeError( f"{cls.__name__}.{attr_name}: " "Setting 'required' is unsupported in class-based configs. " "All values are required, or can be wrapped into config_options.Optional" ) def __new__(cls, *args, **kwargs) -> Config: """Compatibility: allow referring to `LegacyConfig(...)` constructor as `Config(...)`.""" if cls is Config: return LegacyConfig(*args, **kwargs) return super().__new__(cls) def __init__(self, config_file_path: str | bytes | None = None): super().__init__() self.__user_configs: list[dict] = [] self.set_defaults() self._schema_keys = {k for k, v in self._schema} # Ensure config_file_path is a Unicode string if config_file_path is not None and not isinstance(config_file_path, str): try: # Assume config_file_path is encoded with the file system encoding. config_file_path = config_file_path.decode(encoding=sys.getfilesystemencoding()) except UnicodeDecodeError: raise ValidationError("config_file_path is not a Unicode string.") self.config_file_path = config_file_path or '' def set_defaults(self) -> None: """ Set the base config by going through each validator and getting the default if it has one. """ for key, config_option in self._schema: self[key] = config_option.default def _validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: value = self.get(key) self[key] = config_option.validate(value) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) for key in set(self.keys()) - self._schema_keys: warnings.append((key, f"Unrecognised configuration name: {key}")) return failed, warnings def _pre_validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: config_option.pre_validation(self, key_name=key) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) return failed, warnings def _post_validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed: ConfigErrors = [] warnings: ConfigWarnings = [] for key, config_option in self._schema: try: config_option.post_validation(self, key_name=key) warnings.extend((key, w) for w in config_option.warnings) config_option.reset_warnings() except ValidationError as e: failed.append((key, e)) return failed, warnings def validate(self) -> tuple[ConfigErrors, ConfigWarnings]: failed, warnings = self._pre_validate() run_failed, run_warnings = self._validate() failed.extend(run_failed) warnings.extend(run_warnings) # Only run the post validation steps if there are no failures, warnings # are okay. if len(failed) == 0: post_failed, post_warnings = self._post_validate() failed.extend(post_failed) warnings.extend(post_warnings) return failed, warnings def load_dict(self, patch: dict) -> None: """Load config options from a dictionary.""" if not isinstance(patch, dict): raise exceptions.ConfigurationError( "The configuration is invalid. Expected a key-" f"value mapping (dict) but received: {type(patch)}" ) self.__user_configs.append(patch) self.update(patch) def load_file(self, config_file: IO) -> None: """Load config options from the open file descriptor of a YAML file.""" warnings.warn( "Config.load_file is not used since MkDocs 1.5 and will be removed soon. " "Use MkDocsConfig.load_file instead", DeprecationWarning, ) return self.load_dict(utils.yaml_load(config_file)) @weak_property def user_configs(self) -> Sequence[Mapping[str, Any]]: warnings.warn( "user_configs is never used in MkDocs and will be removed soon.", DeprecationWarning ) return self.__user_configs @functools.lru_cache(maxsize=None) def get_schema(cls: type) -> PlainConfigSchema: """ Extract ConfigOptions defined in a class (used just as a container) and put them into a schema tuple. """ if issubclass(cls, Config): return cls._schema return tuple((k, v) for k, v in cls.__dict__.items() if isinstance(v, BaseConfigOption)) class LegacyConfig(Config): """ A configuration object for plugins, as just a dict without type-safe attribute access. """ def __init__(self, schema: PlainConfigSchema, config_file_path: str | None = None): self._schema = tuple((k, v) for k, v in schema) # Re-create just for validation super().__init__(config_file_path) @contextmanager def _open_config_file(config_file: str | IO | None) -> Iterator[IO]: """ A context manager which yields an open file descriptor ready to be read. Accepts a filename as a string, an open or closed file descriptor, or None. When None, it defaults to `mkdocs.yml` in the CWD. If a closed file descriptor is received, a new file descriptor is opened for the same file. The file descriptor is automatically closed when the context manager block is existed. """ # Default to the standard config filename. if config_file is None: paths_to_try = ['mkdocs.yml', 'mkdocs.yaml'] # If it is a string, we can assume it is a path and attempt to open it. elif isinstance(config_file, str): paths_to_try = [config_file] # If closed file descriptor, get file path to reopen later. elif getattr(config_file, 'closed', False): paths_to_try = [config_file.name] else: result_config_file = config_file paths_to_try = None if paths_to_try: # config_file is not a file descriptor, so open it as a path. for path in paths_to_try: path = os.path.abspath(path) log.debug(f"Loading configuration file: {path}") try: result_config_file = open(path, 'rb') break except FileNotFoundError: continue else: raise exceptions.ConfigurationError(f"Config file '{paths_to_try[0]}' does not exist.") else: log.debug(f"Loading configuration file: {result_config_file}") # Ensure file descriptor is at beginning try: result_config_file.seek(0) except OSError: pass try: yield result_config_file finally: if hasattr(result_config_file, 'close'): result_config_file.close() def load_config( config_file: str | IO | None = None, *, config_file_path: str | None = None, **kwargs ) -> MkDocsConfig: """ Load the configuration for a given file object or name The config_file can either be a file object, string or None. If it is None the default `mkdocs.yml` filename will loaded. Extra kwargs are passed to the configuration to replace any default values unless they themselves are None. """ options = kwargs.copy() # Filter None values from the options. This usually happens with optional # parameters from Click. for key, value in options.copy().items(): if value is None: options.pop(key) with _open_config_file(config_file) as fd: # Initialize the config with the default schema. from mkdocs.config.defaults import MkDocsConfig if config_file_path is None: if fd is not sys.stdin.buffer: config_file_path = getattr(fd, 'name', None) cfg = MkDocsConfig(config_file_path=config_file_path) # load the config file cfg.load_file(fd) # Then load the options to overwrite anything in the config. cfg.load_dict(options) errors, warnings = cfg.validate() for config_name, warning in warnings: log.warning(f"Config value '{config_name}': {warning}") for config_name, error in errors: log.error(f"Config value '{config_name}': {error}") for key, value in cfg.items(): log.debug(f"Config value '{key}' = {value!r}") if len(errors) > 0: raise exceptions.Abort(f"Aborted with {len(errors)} configuration errors!") elif cfg.strict and len(warnings) > 0: raise exceptions.Abort( f"Aborted with {len(warnings)} configuration warnings in 'strict' mode!" ) return cfg python-mkdocs-1.5.3/mkdocs/commands/0000755000175000017500000000000014502137725017266 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/commands/build.py0000644000175000017500000003224014502137725020740 0ustar carstencarstenfrom __future__ import annotations import gzip import logging import os import time from typing import TYPE_CHECKING, Sequence from urllib.parse import urljoin, urlsplit import jinja2 from jinja2.exceptions import TemplateNotFound import mkdocs from mkdocs import utils from mkdocs.exceptions import Abort, BuildError from mkdocs.structure.files import File, Files, InclusionLevel, _set_exclusions, get_files from mkdocs.structure.nav import Navigation, get_navigation from mkdocs.structure.pages import Page from mkdocs.utils import DuplicateFilter # noqa: F401 - legacy re-export from mkdocs.utils import templates if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig if TYPE_CHECKING: from mkdocs.livereload import LiveReloadServer log = logging.getLogger(__name__) def get_context( nav: Navigation, files: Sequence[File] | Files, config: MkDocsConfig, page: Page | None = None, base_url: str = '', ) -> templates.TemplateContext: """ Return the template context for a given page or template. """ if page is not None: base_url = utils.get_relative_url('.', page.url) extra_javascript = [ utils.normalize_url(str(script), page, base_url) for script in config.extra_javascript ] extra_css = [utils.normalize_url(path, page, base_url) for path in config.extra_css] if isinstance(files, Files): files = files.documentation_pages() return templates.TemplateContext( nav=nav, pages=files, base_url=base_url, extra_css=extra_css, extra_javascript=extra_javascript, mkdocs_version=mkdocs.__version__, build_date_utc=utils.get_build_datetime(), config=config, page=page, ) def _build_template( name: str, template: jinja2.Template, files: Files, config: MkDocsConfig, nav: Navigation ) -> str: """ Return rendered output for given template as a string. """ # Run `pre_template` plugin events. template = config.plugins.on_pre_template(template, template_name=name, config=config) if utils.is_error_template(name): # Force absolute URLs in the nav of error pages and account for the # possibility that the docs root might be different than the server root. # See https://github.com/mkdocs/mkdocs/issues/77. # However, if site_url is not set, assume the docs root and server root # are the same. See https://github.com/mkdocs/mkdocs/issues/1598. base_url = urlsplit(config.site_url or '/').path else: base_url = utils.get_relative_url('.', name) context = get_context(nav, files, config, base_url=base_url) # Run `template_context` plugin events. context = config.plugins.on_template_context(context, template_name=name, config=config) output = template.render(context) # Run `post_template` plugin events. output = config.plugins.on_post_template(output, template_name=name, config=config) return output def _build_theme_template( template_name: str, env: jinja2.Environment, files: Files, config: MkDocsConfig, nav: Navigation ) -> None: """Build a template using the theme environment.""" log.debug(f"Building theme template: {template_name}") try: template = env.get_template(template_name) except TemplateNotFound: log.warning(f"Template skipped: '{template_name}' not found in theme directories.") return output = _build_template(template_name, template, files, config, nav) if output.strip(): output_path = os.path.join(config.site_dir, template_name) utils.write_file(output.encode('utf-8'), output_path) if template_name == 'sitemap.xml': log.debug(f"Gzipping template: {template_name}") gz_filename = f'{output_path}.gz' with open(gz_filename, 'wb') as f: timestamp = utils.get_build_timestamp() with gzip.GzipFile( fileobj=f, filename=gz_filename, mode='wb', mtime=timestamp ) as gz_buf: gz_buf.write(output.encode('utf-8')) else: log.info(f"Template skipped: '{template_name}' generated empty output.") def _build_extra_template(template_name: str, files: Files, config: MkDocsConfig, nav: Navigation): """Build user templates which are not part of the theme.""" log.debug(f"Building extra template: {template_name}") file = files.get_file_from_path(template_name) if file is None: log.warning(f"Template skipped: '{template_name}' not found in docs_dir.") return try: with open(file.abs_src_path, encoding='utf-8', errors='strict') as f: template = jinja2.Template(f.read()) except Exception as e: log.warning(f"Error reading template '{template_name}': {e}") return output = _build_template(template_name, template, files, config, nav) if output.strip(): utils.write_file(output.encode('utf-8'), file.abs_dest_path) else: log.info(f"Template skipped: '{template_name}' generated empty output.") def _populate_page(page: Page, config: MkDocsConfig, files: Files, dirty: bool = False) -> None: """Read page content from docs_dir and render Markdown.""" config._current_page = page try: # When --dirty is used, only read the page if the file has been modified since the # previous build of the output. if dirty and not page.file.is_modified(): return # Run the `pre_page` plugin event page = config.plugins.on_pre_page(page, config=config, files=files) page.read_source(config) assert page.markdown is not None # Run `page_markdown` plugin events. page.markdown = config.plugins.on_page_markdown( page.markdown, page=page, config=config, files=files ) page.render(config, files) assert page.content is not None # Run `page_content` plugin events. page.content = config.plugins.on_page_content( page.content, page=page, config=config, files=files ) except Exception as e: message = f"Error reading page '{page.file.src_uri}':" # Prevent duplicated the error message because it will be printed immediately afterwards. if not isinstance(e, BuildError): message += f" {e}" log.error(message) raise finally: config._current_page = None def _build_page( page: Page, config: MkDocsConfig, doc_files: Sequence[File], nav: Navigation, env: jinja2.Environment, dirty: bool = False, excluded: bool = False, ) -> None: """Pass a Page to theme template and write output to site_dir.""" config._current_page = page try: # When --dirty is used, only build the page if the file has been modified since the # previous build of the output. if dirty and not page.file.is_modified(): return log.debug(f"Building page {page.file.src_uri}") # Activate page. Signals to theme that this is the current page. page.active = True context = get_context(nav, doc_files, config, page) # Allow 'template:' override in md source files. template = env.get_template(page.meta.get('template', 'main.html')) # Run `page_context` plugin events. context = config.plugins.on_page_context(context, page=page, config=config, nav=nav) if excluded: page.content = ( '
    ' 'DRAFT' '
    ' + (page.content or '') ) # Render the template. output = template.render(context) # Run `post_page` plugin events. output = config.plugins.on_post_page(output, page=page, config=config) # Write the output file. if output.strip(): utils.write_file( output.encode('utf-8', errors='xmlcharrefreplace'), page.file.abs_dest_path ) else: log.info(f"Page skipped: '{page.file.src_uri}'. Generated empty output.") except Exception as e: message = f"Error building page '{page.file.src_uri}':" # Prevent duplicated the error message because it will be printed immediately afterwards. if not isinstance(e, BuildError): message += f" {e}" log.error(message) raise finally: # Deactivate page page.active = False config._current_page = None def build( config: MkDocsConfig, live_server: LiveReloadServer | None = None, dirty: bool = False ) -> None: """Perform a full site build.""" logger = logging.getLogger('mkdocs') # Add CountHandler for strict mode warning_counter = utils.CountHandler() warning_counter.setLevel(logging.WARNING) if config.strict: logging.getLogger('mkdocs').addHandler(warning_counter) inclusion = InclusionLevel.all if live_server else InclusionLevel.is_included try: start = time.monotonic() # Run `config` plugin events. config = config.plugins.on_config(config) # Run `pre_build` plugin events. config.plugins.on_pre_build(config=config) if not dirty: log.info("Cleaning site directory") utils.clean_directory(config.site_dir) else: # pragma: no cover # Warn user about problems that may occur with --dirty option log.warning( "A 'dirty' build is being performed, this will likely lead to inaccurate navigation and other" " links within your site. This option is designed for site development purposes only." ) if not live_server: # pragma: no cover log.info(f"Building documentation to directory: {config.site_dir}") if dirty and site_directory_contains_stale_files(config.site_dir): log.info("The directory contains stale files. Use --clean to remove them.") # First gather all data from all files/pages to ensure all data is consistent across all pages. files = get_files(config) env = config.theme.get_env() files.add_files_from_theme(env, config) # Run `files` plugin events. files = config.plugins.on_files(files, config=config) # If plugins have added files but haven't set their inclusion level, calculate it again. _set_exclusions(files._files, config) nav = get_navigation(files, config) # Run `nav` plugin events. nav = config.plugins.on_nav(nav, config=config, files=files) log.debug("Reading markdown pages.") excluded = [] for file in files.documentation_pages(inclusion=inclusion): log.debug(f"Reading: {file.src_uri}") if file.page is None and file.inclusion.is_excluded(): if live_server: excluded.append(urljoin(live_server.url, file.url)) Page(None, file, config) assert file.page is not None _populate_page(file.page, config, files, dirty) if excluded: log.info( "The following pages are being built only for the preview " "but will be excluded from `mkdocs build` per `exclude_docs`:\n - " + "\n - ".join(excluded) ) # Run `env` plugin events. env = config.plugins.on_env(env, config=config, files=files) # Start writing files to site_dir now that all data is gathered. Note that order matters. Files # with lower precedence get written first so that files with higher precedence can overwrite them. log.debug("Copying static assets.") files.copy_static_files(dirty=dirty, inclusion=inclusion) for template in config.theme.static_templates: _build_theme_template(template, env, files, config, nav) for template in config.extra_templates: _build_extra_template(template, files, config, nav) log.debug("Building markdown pages.") doc_files = files.documentation_pages(inclusion=inclusion) for file in doc_files: assert file.page is not None _build_page( file.page, config, doc_files, nav, env, dirty, excluded=file.inclusion.is_excluded() ) # Run `post_build` plugin events. config.plugins.on_post_build(config=config) counts = warning_counter.get_counts() if counts: msg = ', '.join(f'{v} {k.lower()}s' for k, v in counts) raise Abort(f'Aborted with {msg} in strict mode!') log.info(f'Documentation built in {time.monotonic() - start:.2f} seconds') except Exception as e: # Run `build_error` plugin events. config.plugins.on_build_error(error=e) if isinstance(e, BuildError): log.error(str(e)) raise Abort('Aborted with a BuildError!') raise finally: logger.removeHandler(warning_counter) def site_directory_contains_stale_files(site_directory: str) -> bool: """Check if the site directory contains stale files from a previous build.""" return bool(os.path.exists(site_directory) and os.listdir(site_directory)) python-mkdocs-1.5.3/mkdocs/commands/gh_deploy.py0000644000175000017500000001213714502137725021616 0ustar carstencarstenfrom __future__ import annotations import logging import os import re import subprocess from typing import TYPE_CHECKING import ghp_import from packaging import version import mkdocs from mkdocs.exceptions import Abort if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) default_message = """Deployed {sha} with MkDocs version: {version}""" def _is_cwd_git_repo() -> bool: try: proc = subprocess.Popen( ['git', 'rev-parse', '--is-inside-work-tree'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) except FileNotFoundError: log.error("Could not find git - is it installed and on your path?") raise Abort('Deployment Aborted!') proc.communicate() return proc.wait() == 0 def _get_current_sha(repo_path) -> str: proc = subprocess.Popen( ['git', 'rev-parse', '--short', 'HEAD'], cwd=repo_path or None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() sha = stdout.decode('utf-8').strip() return sha def _get_remote_url(remote_name: str) -> tuple[str, str] | tuple[None, None]: # No CNAME found. We will use the origin URL to determine the GitHub # Pages location. remote = f"remote.{remote_name}.url" proc = subprocess.Popen( ["git", "config", "--get", remote], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() url = stdout.decode('utf-8').strip() if 'github.com/' in url: host, path = url.split('github.com/', 1) elif 'github.com:' in url: host, path = url.split('github.com:', 1) else: return None, None return host, path def _check_version(branch: str) -> None: proc = subprocess.Popen( ['git', 'show', '-s', '--format=%s', f'refs/heads/{branch}'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) stdout, _ = proc.communicate() msg = stdout.decode('utf-8').strip() m = re.search(r'\d+(\.\d+)+((a|b|rc)\d+)?(\.post\d+)?(\.dev\d+)?', msg, re.X | re.I) previousv = version.parse(m.group()) if m else None currentv = version.parse(mkdocs.__version__) if not previousv: log.warning('Version check skipped: No version specified in previous deployment.') elif currentv > previousv: log.info( f'Previous deployment was done with MkDocs version {previousv}; ' f'you are deploying with a newer version ({currentv})' ) elif currentv < previousv: log.error( f'Deployment terminated: Previous deployment was made with MkDocs version {previousv}; ' f'you are attempting to deploy with an older version ({currentv}). Use --ignore-version ' 'to deploy anyway.' ) raise Abort('Deployment Aborted!') def gh_deploy( config: MkDocsConfig, message: str | None = None, force=False, no_history=False, ignore_version=False, shell=False, ) -> None: if not _is_cwd_git_repo(): log.error('Cannot deploy - this directory does not appear to be a git repository') remote_branch = config.remote_branch remote_name = config.remote_name if not ignore_version: _check_version(remote_branch) if message is None: message = default_message sha = _get_current_sha(os.path.dirname(config.config_file_path)) message = message.format(version=mkdocs.__version__, sha=sha) log.info( "Copying '%s' to '%s' branch and pushing to GitHub.", config.site_dir, config.remote_branch, ) try: ghp_import.ghp_import( config.site_dir, mesg=message, remote=remote_name, branch=remote_branch, push=True, force=force, use_shell=shell, no_history=no_history, nojekyll=True, ) except ghp_import.GhpError as e: log.error(f"Failed to deploy to GitHub with error: \n{e.message}") raise Abort('Deployment Aborted!') cname_file = os.path.join(config.site_dir, 'CNAME') # Does this repository have a CNAME set for GitHub Pages? if os.path.isfile(cname_file): # This GitHub Pages repository has a CNAME configured. with open(cname_file) as f: cname_host = f.read().strip() log.info( f'Based on your CNAME file, your documentation should be ' f'available shortly at: http://{cname_host}' ) log.info( 'NOTE: Your DNS records must be configured appropriately for your CNAME URL to work.' ) return host, path = _get_remote_url(remote_name) if host is None or path is None: # This could be a GitHub Enterprise deployment. log.info('Your documentation should be available shortly.') else: username, repo = path.split('/', 1) if repo.endswith('.git'): repo = repo[: -len('.git')] url = f'https://{username}.github.io/{repo}/' log.info(f"Your documentation should shortly be available at: {url}") python-mkdocs-1.5.3/mkdocs/commands/serve.py0000644000175000017500000000710514502137725020767 0ustar carstencarstenfrom __future__ import annotations import logging import shutil import tempfile from os.path import isdir, isfile, join from typing import TYPE_CHECKING from urllib.parse import urlsplit import jinja2.exceptions from mkdocs.commands.build import build from mkdocs.config import load_config from mkdocs.exceptions import Abort from mkdocs.livereload import LiveReloadServer if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig log = logging.getLogger(__name__) def serve( config_file: str | None = None, livereload: bool = True, build_type: str | None = None, watch_theme: bool = False, watch: list[str] = [], **kwargs, ) -> None: """ Start the MkDocs development server By default it will serve the documentation on http://localhost:8000/ and it will rebuild the documentation and refresh the page automatically whenever a file is edited. """ # Create a temporary build directory, and set some options to serve it # PY2 returns a byte string by default. The Unicode prefix ensures a Unicode # string is returned. And it makes MkDocs temp dirs easier to identify. site_dir = tempfile.mkdtemp(prefix='mkdocs_') def mount_path(config: MkDocsConfig): return urlsplit(config.site_url or '/').path def get_config(): config = load_config( config_file=config_file, site_dir=site_dir, **kwargs, ) config.watch.extend(watch) config.site_url = f'http://{config.dev_addr}{mount_path(config)}' return config is_clean = build_type == 'clean' is_dirty = build_type == 'dirty' config = get_config() config.plugins.on_startup(command=('build' if is_clean else 'serve'), dirty=is_dirty) def builder(config: MkDocsConfig | None = None): log.info("Building documentation...") if config is None: config = get_config() build(config, live_server=None if is_clean else server, dirty=is_dirty) host, port = config.dev_addr server = LiveReloadServer( builder=builder, host=host, port=port, root=site_dir, mount_path=mount_path(config) ) def error_handler(code) -> bytes | None: if code in (404, 500): error_page = join(site_dir, f'{code}.html') if isfile(error_page): with open(error_page, 'rb') as f: return f.read() return None server.error_handler = error_handler try: # Perform the initial build builder(config) if livereload: # Watch the documentation files, the config file and the theme files. server.watch(config.docs_dir) if config.config_file_path: server.watch(config.config_file_path) if watch_theme: for d in config.theme.dirs: server.watch(d) # Run `serve` plugin events. server = config.plugins.on_serve(server, config=config, builder=builder) for item in config.watch: server.watch(item) try: server.serve() except KeyboardInterrupt: log.info("Shutting down...") finally: server.shutdown() except jinja2.exceptions.TemplateError: # This is a subclass of OSError, but shouldn't be suppressed. raise except OSError as e: # pragma: no cover # Avoid ugly, unhelpful traceback raise Abort(f'{type(e).__name__}: {e}') finally: config.plugins.on_shutdown() if isdir(site_dir): shutil.rmtree(site_dir) python-mkdocs-1.5.3/mkdocs/commands/get_deps.py0000644000175000017500000001453114502137725021436 0ustar carstencarstenfrom __future__ import annotations import dataclasses import datetime import functools import logging import sys from typing import Mapping, Sequence if sys.version_info >= (3, 10): from importlib.metadata import EntryPoint, entry_points else: from importlib_metadata import EntryPoint, entry_points import yaml from mkdocs import utils from mkdocs.config.base import _open_config_file from mkdocs.utils.cache import download_and_cache_url log = logging.getLogger(__name__) # Note: do not rely on functions in this module, it is not public API. class YamlLoader(yaml.SafeLoader): pass # Prevent errors from trying to access external modules which may not be installed yet. YamlLoader.add_constructor("!ENV", lambda loader, node: None) # type: ignore YamlLoader.add_constructor("!relative", lambda loader, node: None) # type: ignore YamlLoader.add_multi_constructor( "tag:yaml.org,2002:python/name:", lambda loader, suffix, node: None ) YamlLoader.add_multi_constructor( "tag:yaml.org,2002:python/object/apply:", lambda loader, suffix, node: None ) NotFound = () def dig(cfg, keys: str): """Receives a string such as 'foo.bar' and returns `cfg['foo']['bar']`, or `NotFound`. A list of single-item dicts gets converted to a flat dict. This is intended for `plugins` config. """ key, _, rest = keys.partition('.') try: cfg = cfg[key] except (KeyError, TypeError): return NotFound if isinstance(cfg, list): orig_cfg = cfg cfg = {} for item in reversed(orig_cfg): if isinstance(item, dict) and len(item) == 1: cfg.update(item) elif isinstance(item, str): cfg[item] = {} if not rest: return cfg return dig(cfg, rest) def strings(obj) -> Sequence[str]: if isinstance(obj, str): return (obj,) else: return tuple(obj) @functools.lru_cache() def _entry_points(group: str) -> Mapping[str, EntryPoint]: eps = {ep.name: ep for ep in entry_points(group=group)} log.debug(f"Available '{group}' entry points: {sorted(eps)}") return eps @dataclasses.dataclass(frozen=True) class PluginKind: projects_key: str entry_points_key: str def __str__(self) -> str: return self.projects_key.rpartition('_')[-1] def get_deps(projects_file_url: str, config_file_path: str | None = None) -> None: """ Print PyPI package dependencies inferred from a mkdocs.yml file based on a reverse mapping of known projects. Parameters: projects_file_url: URL or local path of the registry file that declares all known MkDocs-related projects. The file is in YAML format and contains `projects: [{mkdocs_theme:, mkdocs_plugin:, markdown_extension:}] config_file_path: Non-default path to mkdocs.yml. """ with _open_config_file(config_file_path) as f: cfg = utils.yaml_load(f, loader=YamlLoader) # type: ignore packages_to_install = set() if all(c not in cfg for c in ('site_name', 'theme', 'plugins', 'markdown_extensions')): log.warning("The passed config file doesn't seem to be a mkdocs.yml config file") else: if dig(cfg, 'theme.locale') not in (NotFound, 'en'): packages_to_install.add('mkdocs[i18n]') else: packages_to_install.add('mkdocs') try: theme = cfg['theme']['name'] except (KeyError, TypeError): theme = cfg.get('theme') themes = {theme} if theme else set() plugins = set(strings(dig(cfg, 'plugins'))) extensions = set(strings(dig(cfg, 'markdown_extensions'))) wanted_plugins = ( (PluginKind('mkdocs_theme', 'mkdocs.themes'), themes - {'mkdocs', 'readthedocs'}), (PluginKind('mkdocs_plugin', 'mkdocs.plugins'), plugins - {'search'}), (PluginKind('markdown_extension', 'markdown.extensions'), extensions), ) for kind, wanted in wanted_plugins: log.debug(f'Wanted {kind}s: {sorted(wanted)}') content = download_and_cache_url(projects_file_url, datetime.timedelta(days=7)) projects = yaml.safe_load(content)['projects'] for project in projects: for kind, wanted in wanted_plugins: available = strings(project.get(kind.projects_key, ())) for entry_name in available: if ( # Also check theme-namespaced plugin names against the current theme. '/' in entry_name and theme is not None and kind.projects_key == 'mkdocs_plugin' and entry_name.startswith(f'{theme}/') and entry_name[len(theme) + 1 :] in wanted and entry_name not in wanted ): entry_name = entry_name[len(theme) + 1 :] if entry_name in wanted: if 'pypi_id' in project: install_name = project['pypi_id'] elif 'github_id' in project: install_name = 'git+https://github.com/{github_id}'.format_map(project) else: log.error( f"Can't find how to install {kind} '{entry_name}' although it was identified as {project}" ) continue packages_to_install.add(install_name) for extra_key, extra_pkgs in project.get('extra_dependencies', {}).items(): if dig(cfg, extra_key) is not NotFound: packages_to_install.update(strings(extra_pkgs)) wanted.remove(entry_name) for kind, wanted in wanted_plugins: for entry_name in sorted(wanted): dist_name = None ep = _entry_points(kind.entry_points_key).get(entry_name) if ep is not None and ep.dist is not None: dist_name = ep.dist.name if dist_name not in ('mkdocs', 'Markdown'): warning = f"{str(kind).capitalize()} '{entry_name}' is not provided by any registered project" if ep is not None: warning += " but is installed locally" if dist_name: warning += f" from '{dist_name}'" log.info(warning) else: log.warning(warning) for pkg in sorted(packages_to_install): print(pkg) # noqa: T201 python-mkdocs-1.5.3/mkdocs/commands/__init__.py0000644000175000017500000000000014502137725021365 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/commands/new.py0000644000175000017500000000265614502137725020442 0ustar carstencarstenfrom __future__ import annotations import logging import os config_text = 'site_name: My Docs\n' index_text = """# Welcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs -h` - Print help message and exit. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. """ log = logging.getLogger(__name__) def new(output_dir: str) -> None: docs_dir = os.path.join(output_dir, 'docs') config_path = os.path.join(output_dir, 'mkdocs.yml') index_path = os.path.join(docs_dir, 'index.md') if os.path.exists(config_path): log.info('Project already exists.') return if not os.path.exists(output_dir): log.info(f'Creating project directory: {output_dir}') os.mkdir(output_dir) log.info(f'Writing config file: {config_path}') with open(config_path, 'w', encoding='utf-8') as f: f.write(config_text) if os.path.exists(index_path): return log.info(f'Writing initial docs: {index_path}') if not os.path.exists(docs_dir): os.mkdir(docs_dir) with open(index_path, 'w', encoding='utf-8') as f: f.write(index_text) python-mkdocs-1.5.3/mkdocs/py.typed0000644000175000017500000000000014502137725017152 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/exceptions.py0000644000175000017500000000172114502137725020221 0ustar carstencarstenfrom __future__ import annotations from click import ClickException, echo class MkDocsException(ClickException): """The base class which all MkDocs exceptions inherit from. This should not be raised directly. One of the subclasses should be raised instead.""" class Abort(MkDocsException, SystemExit): """Abort the build""" code = 1 def show(self, *args, **kwargs) -> None: echo('\n' + self.format_message()) class ConfigurationError(MkDocsException): """This error is raised by configuration validation when a validation error is encountered. This error should be raised by any configuration options defined in a plugin's [config_scheme][].""" class BuildError(MkDocsException): """This error may be raised by MkDocs during the build process. Plugins should not raise this error.""" class PluginError(BuildError): """A subclass of [`mkdocs.exceptions.BuildError`][] which can be raised by plugin events.""" python-mkdocs-1.5.3/mkdocs/tests/0000755000175000017500000000000014502137725016627 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/new_tests.py0000644000175000017500000000127314502137725021217 0ustar carstencarsten#!/usr/bin/env python import os import unittest from mkdocs.commands import new from mkdocs.tests.base import change_dir, tempdir class NewTests(unittest.TestCase): @tempdir() def test_new(self, temp_dir): with change_dir(temp_dir): new.new("myproject") expected_paths = [ os.path.join(temp_dir, "myproject"), os.path.join(temp_dir, "myproject", "mkdocs.yml"), os.path.join(temp_dir, "myproject", "docs"), os.path.join(temp_dir, "myproject", "docs", "index.md"), ] for expected_path in expected_paths: self.assertTrue(os.path.exists(expected_path)) python-mkdocs-1.5.3/mkdocs/tests/get_deps_tests.py0000644000175000017500000001223614502137725022221 0ustar carstencarstenimport contextlib import io import os import textwrap import unittest from mkdocs.commands.get_deps import get_deps from mkdocs.tests.base import tempdir _projects_file_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'integration', 'projects.yaml' ) class TestGetDeps(unittest.TestCase): @contextlib.contextmanager def _assert_logs(self, expected): with self.assertLogs('mkdocs.commands.get_deps') as cm: yield msgs = [f'{r.levelname}:{r.message}' for r in cm.records] self.assertEqual('\n'.join(msgs), textwrap.dedent(expected).strip('\n')) @tempdir() def _test_get_deps(self, tempdir, yml, expected): if yml: yml = 'site_name: Test\n' + textwrap.dedent(yml) projects_path = os.path.join(tempdir, 'projects.yaml') with open(projects_path, 'w') as f: f.write(yml) buf = io.StringIO() with contextlib.redirect_stdout(buf): get_deps(_projects_file_path, projects_path) self.assertEqual(buf.getvalue().split(), expected) def test_empty_config(self): expected_logs = "WARNING:The passed config file doesn't seem to be a mkdocs.yml config file" with self._assert_logs(expected_logs): self._test_get_deps('', []) def test_just_search(self): cfg = ''' plugins: [search] ''' self._test_get_deps(cfg, ['mkdocs']) def test_mkdocs_config(self): cfg = ''' site_name: MkDocs theme: name: mkdocs locale: en markdown_extensions: - toc: permalink:  - attr_list - def_list - tables - pymdownx.highlight: use_pygments: false - pymdownx.snippets - pymdownx.superfences - callouts - mdx_gh_links: user: mkdocs repo: mkdocs - mkdocs-click plugins: - search - redirects: - autorefs - literate-nav: nav_file: README.md implicit_index: true - mkdocstrings: handlers: python: options: docstring_section_style: list ''' self._test_get_deps( cfg, [ 'markdown-callouts', 'mdx-gh-links', 'mkdocs', 'mkdocs-autorefs', 'mkdocs-click', 'mkdocs-literate-nav', 'mkdocs-redirects', 'mkdocstrings', 'mkdocstrings-python', 'pymdown-extensions', ], ) def test_dict_keys_and_ignores_env(self): cfg = ''' theme: name: material plugins: code-validator: enabled: !ENV [LINT, false] markdown_extensions: pymdownx.emoji: emoji_index: !!python/name:materialx.emoji.twemoji emoji_generator: !!python/name:materialx.emoji.to_svg ''' self._test_get_deps( cfg, ['mkdocs', 'mkdocs-code-validator', 'mkdocs-material', 'pymdown-extensions'] ) def test_theme_precedence(self): cfg = ''' plugins: - tags theme: material ''' self._test_get_deps(cfg, ['mkdocs', 'mkdocs-material']) cfg = ''' plugins: - material/tags ''' self._test_get_deps(cfg, ['mkdocs', 'mkdocs-material']) cfg = ''' plugins: - tags ''' self._test_get_deps(cfg, ['mkdocs', 'mkdocs-plugin-tags']) def test_nonexistent(self): cfg = ''' plugins: - taglttghhmdu - syyisjupkbpo - redirects theme: qndyakplooyh markdown_extensions: - saqdhyndpvpa ''' expected_logs = """ WARNING:Theme 'qndyakplooyh' is not provided by any registered project WARNING:Plugin 'syyisjupkbpo' is not provided by any registered project WARNING:Plugin 'taglttghhmdu' is not provided by any registered project WARNING:Extension 'saqdhyndpvpa' is not provided by any registered project """ with self._assert_logs(expected_logs): self._test_get_deps(cfg, ['mkdocs', 'mkdocs-redirects']) def test_git_and_shadowed(self): cfg = ''' theme: bootstrap4 plugins: [blog] ''' self._test_get_deps( cfg, ['git+https://github.com/andyoakley/mkdocs-blog', 'mkdocs', 'mkdocs-bootstrap4'] ) def test_multi_theme(self): cfg = ''' theme: minty ''' self._test_get_deps(cfg, ['mkdocs', 'mkdocs-bootswatch']) def test_with_locale(self): cfg = ''' theme: name: mkdocs locale: uk ''' self._test_get_deps(cfg, ['mkdocs[i18n]']) python-mkdocs-1.5.3/mkdocs/tests/utils/0000755000175000017500000000000014502137725017767 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/utils/babel_stub_tests.py0000644000175000017500000000361314502137725023670 0ustar carstencarstenimport unittest from mkdocs.utils.babel_stub import Locale, UnknownLocaleError class BabelStubTests(unittest.TestCase): def test_locale_language_only(self): locale = Locale('es') self.assertEqual(locale.language, 'es') self.assertEqual(locale.territory, '') self.assertEqual(str(locale), 'es') def test_locale_language_territory(self): locale = Locale('es', 'ES') self.assertEqual(locale.language, 'es') self.assertEqual(locale.territory, 'ES') self.assertEqual(str(locale), 'es_ES') def test_parse_locale_language_only(self): locale = Locale.parse('fr', '_') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, '') self.assertEqual(str(locale), 'fr') def test_parse_locale_language_territory(self): locale = Locale.parse('fr_FR', '_') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, 'FR') self.assertEqual(str(locale), 'fr_FR') def test_parse_locale_language_territory_sep(self): locale = Locale.parse('fr-FR', '-') self.assertEqual(locale.language, 'fr') self.assertEqual(locale.territory, 'FR') self.assertEqual(str(locale), 'fr_FR') def test_parse_locale_bad_type(self): with self.assertRaises(TypeError): Locale.parse(['list'], '_') def test_parse_locale_invalid_characters(self): with self.assertRaises(ValueError): Locale.parse('42', '_') def test_parse_locale_bad_format(self): with self.assertRaises(ValueError): Locale.parse('en-GB', '_') def test_parse_locale_bad_format_sep(self): with self.assertRaises(ValueError): Locale.parse('en_GB', '-') def test_parse_locale_unknown_locale(self): with self.assertRaises(UnknownLocaleError): Locale.parse('foo', '_') python-mkdocs-1.5.3/mkdocs/tests/utils/utils_tests.py0000644000175000017500000005207114502137725022730 0ustar carstencarsten#!/usr/bin/env python import dataclasses import datetime import logging import os import posixpath import stat import unittest from unittest import mock from mkdocs import exceptions, utils from mkdocs.tests.base import dedent, tempdir from mkdocs.utils import meta BASEYML = """ INHERIT: parent.yml foo: bar baz: sub1: replaced sub3: new deep1: deep2-1: deep3-1: replaced """ PARENTYML = """ foo: foo baz: sub1: 1 sub2: 2 deep1: deep2-1: deep3-1: foo deep3-2: bar deep2-2: baz """ class UtilsTests(unittest.TestCase): def test_is_markdown_file(self): expected_results = { 'index.md': True, 'index.markdown': True, 'index.MARKDOWN': False, 'index.txt': False, 'indexmd': False, } for path, expected_result in expected_results.items(): with self.subTest(path): is_markdown = utils.is_markdown_file(path) self.assertEqual(is_markdown, expected_result) def test_get_relative_url(self): for case in [ dict(url='foo/bar', other='foo', expected='bar'), dict(url='foo/bar.txt', other='foo', expected='bar.txt'), dict(url='foo', other='foo/bar', expected='..'), dict(url='foo', other='foo/bar.txt', expected='.'), dict(url='foo/../../bar', other='.', expected='bar'), dict(url='foo/../../bar', other='foo', expected='../bar'), dict(url='foo//./bar/baz', other='foo/bar/baz', expected='.'), dict(url='a/b/.././../c', other='.', expected='c'), dict(url='a/b/c/d/ee', other='a/b/c/d/e', expected='../ee'), dict(url='a/b/c/d/ee', other='a/b/z/d/e', expected='../../../c/d/ee'), dict(url='foo', other='bar.', expected='foo'), dict(url='foo', other='bar./', expected='../foo'), dict(url='foo', other='foo/bar./', expected='..'), dict(url='foo', other='foo/bar./.', expected='..'), dict(url='foo', other='foo/bar././', expected='..'), dict(url='foo/', other='foo/bar././', expected='../'), dict(url='foo', other='foo', expected='.'), dict(url='.foo', other='.foo', expected='.foo'), dict(url='.foo/', other='.foo', expected='.foo/'), dict(url='.foo', other='.foo/', expected='.'), dict(url='.foo/', other='.foo/', expected='./'), dict(url='///', other='', expected='./'), dict(url='a///', other='', expected='a/'), dict(url='a///', other='a', expected='./'), dict(url='.', other='here', expected='..'), dict(url='..', other='here', expected='..'), dict(url='../..', other='here', expected='..'), dict(url='../../a', other='here', expected='../a'), dict(url='..', other='here.txt', expected='.'), dict(url='a', other='', expected='a'), dict(url='a', other='..', expected='a'), dict(url='a', other='b', expected='../a'), # The dots are considered a file. Documenting a long-standing bug: dict(url='a', other='b/..', expected='../a'), dict(url='a', other='b/../..', expected='a'), dict(url='a/..../b', other='a/../b', expected='../a/..../b'), dict(url='a/я/b', other='a/я/c', expected='../b'), dict(url='a/я/b', other='a/яя/c', expected='../../я/b'), ]: url, other, expected = case['url'], case['other'], case['expected'] with self.subTest(url=url, other=other): # Leading slash intentionally ignored self.assertEqual(utils.get_relative_url(url, other), expected) self.assertEqual(utils.get_relative_url('/' + url, other), expected) self.assertEqual(utils.get_relative_url(url, '/' + other), expected) self.assertEqual(utils.get_relative_url('/' + url, '/' + other), expected) def test_get_relative_url_empty(self): for url in ['', '.', '/.']: for other in ['', '.', '/', '/.']: with self.subTest(url=url, other=other): self.assertEqual(utils.get_relative_url(url, other), '.') self.assertEqual(utils.get_relative_url('/', ''), './') self.assertEqual(utils.get_relative_url('/', '/'), './') self.assertEqual(utils.get_relative_url('/', '.'), './') self.assertEqual(utils.get_relative_url('/', '/.'), './') def test_normalize_url(self): def test(path, base, expected): self.assertEqual(utils.normalize_url(path, _Page(base)), expected) # Absolute paths and anchors are unaffected. for base in 'about.html', 'foo/bar.html', 'index.html', '', 'about/', 'foo/bar/': test('https://media.cdn.org/jq.js', base, 'https://media.cdn.org/jq.js') test('http://media.cdn.org/jquery.js', base, 'http://media.cdn.org/jquery.js') test('//media.cdn.org/jquery.js', base, '//media.cdn.org/jquery.js') test('#some_id', base, '#some_id') path = 'media.cdn.org/jquery.js' test(path, '', 'media.cdn.org/jquery.js') test(path, 'index.html', 'media.cdn.org/jquery.js') test(path, 'about.html', 'media.cdn.org/jquery.js') test(path, 'about/', '../media.cdn.org/jquery.js') test(path, 'foo/bar.html', '../media.cdn.org/jquery.js') test(path, 'foo/bar/', '../../media.cdn.org/jquery.js') path = 'local/file/jquery.js' test(path, '', 'local/file/jquery.js') test(path, 'index.html', 'local/file/jquery.js') test(path, 'about.html', 'local/file/jquery.js') test(path, 'about/', '../local/file/jquery.js') test(path, 'foo/bar.html', '../local/file/jquery.js') test(path, 'foo/bar/', '../../local/file/jquery.js') path = '../../../../above/jquery.js' test(path, '', '../../../../above/jquery.js') test(path, 'index.html', '../../../../above/jquery.js') test(path, 'about.html', '../../../../above/jquery.js') test(path, 'about/', '../../../../../above/jquery.js') test(path, 'foo/bar.html', '../../../../../above/jquery.js') test(path, 'foo/bar/', '../../../../../../above/jquery.js') path = '../some/dir/' test(path, '', '../some/dir/') test(path, 'index.html', '../some/dir/') test(path, 'about.html', '../some/dir/') test(path, 'about/', '../../some/dir/') test(path, 'foo/bar.html', '../../some/dir/') test(path, 'foo/bar/', '../../../some/dir/') path = 'image.png' test(path, '', 'image.png') test(path, 'index.html', 'image.png') test(path, 'about.html', 'image.png') test(path, 'about/', '../image.png') test(path, 'foo/bar.html', '../image.png') test(path, 'foo/bar/', '../../image.png') path = 'style.css?v=20180308c' test(path, '', 'style.css?v=20180308c') test(path, 'index.html', 'style.css?v=20180308c') test(path, 'about.html', 'style.css?v=20180308c') test(path, 'about/', '../style.css?v=20180308c') test(path, 'foo/bar.html', '../style.css?v=20180308c') test(path, 'foo/bar/', '../../style.css?v=20180308c') # TODO: This shouldn't pass on Linux # @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_normalize_url_windows(self): def test(path, base, expected): self.assertEqual(utils.normalize_url(path, _Page(base)), expected) with self.assertLogs('mkdocs', level='WARNING'): path = 'local\\windows\\file\\jquery.js' test(path, '', 'local/windows/file/jquery.js') test(path, 'about/', '../local/windows/file/jquery.js') test(path, 'foo/bar/', '../../local/windows/file/jquery.js') def test_reduce_list(self): self.assertEqual( utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]), [1, 2, 3, 4, 5, 6, 7, 8], ) def test_insort(self): a = [1, 2, 3] utils.insort(a, 5) self.assertEqual(a, [1, 2, 3, 5]) utils.insort(a, -1) self.assertEqual(a, [-1, 1, 2, 3, 5]) utils.insort(a, 2) self.assertEqual(a, [-1, 1, 2, 2, 3, 5]) utils.insort(a, 4) self.assertEqual(a, [-1, 1, 2, 2, 3, 4, 5]) def test_insort_key(self): a = [(1, 'a'), (1, 'b'), (2, 'c')] utils.insort(a, (1, 'a'), key=lambda v: v[0]) self.assertEqual(a, [(1, 'a'), (1, 'b'), (1, 'a'), (2, 'c')]) def test_get_themes(self): themes = utils.get_theme_names() self.assertIn('mkdocs', themes) self.assertIn('readthedocs', themes) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_theme_dir(self, mock_iter): path = 'some/path' theme = mock.Mock() theme.name = 'mkdocs2' theme.dist.name = 'mkdocs2' theme.load().__file__ = os.path.join(path, '__init__.py') mock_iter.return_value = [theme] self.assertEqual(utils.get_theme_dir(theme.name), os.path.abspath(path)) def test_get_theme_dir_keyerror(self): with self.assertRaises(KeyError): utils.get_theme_dir('nonexistanttheme') @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_theme_dir_importerror(self, mock_iter): theme = mock.Mock() theme.name = 'mkdocs2' theme.dist.name = 'mkdocs2' theme.load.side_effect = ImportError() mock_iter.return_value = [theme] with self.assertRaises(ImportError): utils.get_theme_dir(theme.name) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_themes_warning(self, mock_iter): theme1 = mock.Mock() theme1.name = 'mkdocs2' theme1.dist.name = 'mkdocs2' theme1.load().__file__ = "some/path1" theme2 = mock.Mock() theme2.name = 'mkdocs2' theme2.dist.name = 'mkdocs3' theme2.load().__file__ = "some/path2" mock_iter.return_value = [theme1, theme2] with self.assertLogs('mkdocs') as cm: theme_names = utils.get_theme_names() self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.utils:A theme named 'mkdocs2' is provided by the Python " "packages 'mkdocs3' and 'mkdocs2'. The one in 'mkdocs3' will be used.", ) self.assertCountEqual(theme_names, ['mkdocs2']) @mock.patch('mkdocs.utils.entry_points', autospec=True) def test_get_themes_error(self, mock_iter): theme1 = mock.Mock() theme1.name = 'mkdocs' theme1.dist.name = 'mkdocs' theme1.load().__file__ = "some/path1" theme2 = mock.Mock() theme2.name = 'mkdocs' theme2.dist.name = 'mkdocs2' theme2.load().__file__ = "some/path2" mock_iter.return_value = [theme1, theme2] with self.assertRaisesRegex( exceptions.ConfigurationError, "The theme 'mkdocs' is a builtin theme but the package 'mkdocs2' " "attempts to provide a theme with the same name.", ): utils.get_theme_names() def test_nest_paths(self, j=posixpath.join): result = utils.nest_paths( [ 'index.md', j('user-guide', 'configuration.md'), j('user-guide', 'styling-your-docs.md'), j('user-guide', 'writing-your-docs.md'), j('about', 'contributing.md'), j('about', 'license.md'), j('about', 'release-notes.md'), ] ) self.assertEqual( result, [ 'index.md', { 'User guide': [ j('user-guide', 'configuration.md'), j('user-guide', 'styling-your-docs.md'), j('user-guide', 'writing-your-docs.md'), ] }, { 'About': [ j('about', 'contributing.md'), j('about', 'license.md'), j('about', 'release-notes.md'), ] }, ], ) def test_nest_paths_native(self): self.test_nest_paths(os.path.join) def test_unicode_yaml(self): yaml_src = dedent( ''' key: value key2: - value ''' ) config = utils.yaml_load(yaml_src) self.assertTrue(isinstance(config['key'], str)) self.assertTrue(isinstance(config['key2'][0], str)) @mock.patch.dict(os.environ, {'VARNAME': 'Hello, World!', 'BOOLVAR': 'false'}) def test_env_var_in_yaml(self): yaml_src = dedent( ''' key1: !ENV VARNAME key2: !ENV UNDEFINED key3: !ENV [UNDEFINED, default] key4: !ENV [UNDEFINED, VARNAME, default] key5: !ENV BOOLVAR ''' ) config = utils.yaml_load(yaml_src) self.assertEqual(config['key1'], 'Hello, World!') self.assertIsNone(config['key2']) self.assertEqual(config['key3'], 'default') self.assertEqual(config['key4'], 'Hello, World!') self.assertIs(config['key5'], False) @tempdir(files={'base.yml': BASEYML, 'parent.yml': PARENTYML}) def test_yaml_inheritance(self, tdir): expected = { 'foo': 'bar', 'baz': { 'sub1': 'replaced', 'sub2': 2, 'sub3': 'new', }, 'deep1': { 'deep2-1': { 'deep3-1': 'replaced', 'deep3-2': 'bar', }, 'deep2-2': 'baz', }, } with open(os.path.join(tdir, 'base.yml')) as fd: result = utils.yaml_load(fd) self.assertEqual(result, expected) @tempdir(files={'base.yml': BASEYML}) def test_yaml_inheritance_missing_parent(self, tdir): with open(os.path.join(tdir, 'base.yml')) as fd: with self.assertRaises(exceptions.ConfigurationError): utils.yaml_load(fd) @tempdir() @tempdir() def test_copy_files(self, src_dir, dst_dir): cases = [ dict( src_path='foo.txt', dst_path='foo.txt', expected='foo.txt', ), dict( src_path='bar.txt', dst_path='foo/', # ensure src filename is appended expected='foo/bar.txt', ), dict( src_path='baz.txt', dst_path='foo/bar/baz.txt', # ensure missing dirs are created expected='foo/bar/baz.txt', ), ] for case in cases: src, dst, expected = case['src_path'], case['dst_path'], case['expected'] with self.subTest(src): src = os.path.join(src_dir, src) with open(src, 'w') as f: f.write('content') dst = os.path.join(dst_dir, dst) utils.copy_file(src, dst) self.assertTrue(os.path.isfile(os.path.join(dst_dir, expected))) @tempdir() @tempdir() def test_copy_files_without_permissions(self, src_dir, dst_dir): cases = [ dict(src_path='foo.txt', expected='foo.txt'), dict(src_path='bar.txt', expected='bar.txt'), dict(src_path='baz.txt', expected='baz.txt'), ] try: for case in cases: src, expected = case['src_path'], case['expected'] with self.subTest(src): src = os.path.join(src_dir, src) with open(src, 'w') as f: f.write('content') # Set src file to read-only os.chmod(src, stat.S_IRUSR) utils.copy_file(src, dst_dir) self.assertTrue(os.path.isfile(os.path.join(dst_dir, expected))) self.assertNotEqual( os.stat(src).st_mode, os.stat(os.path.join(dst_dir, expected)).st_mode ) # While src was read-only, dst must remain writable self.assertTrue(os.access(os.path.join(dst_dir, expected), os.W_OK)) finally: for case in cases: # Undo read-only so we can delete temp files src = os.path.join(src_dir, case['src_path']) if os.path.exists(src): os.chmod(src, stat.S_IRUSR | stat.S_IWUSR) def test_mm_meta_data(self): doc = dedent( """ Title: Foo Bar Date: 2018-07-10 Summary: Line one Line two Tags: foo Tags: bar Doc body """ ) self.assertEqual( meta.get_data(doc), ( "Doc body", { 'title': 'Foo Bar', 'date': '2018-07-10', 'summary': 'Line one Line two', 'tags': 'foo bar', }, ), ) def test_mm_meta_data_blank_first_line(self): doc = '\nfoo: bar\nDoc body' self.assertEqual(meta.get_data(doc), (doc.lstrip(), {})) def test_yaml_meta_data(self): doc = dedent( """ --- Title: Foo Bar Date: 2018-07-10 Summary: Line one Line two Tags: - foo - bar --- Doc body """ ) self.assertEqual( meta.get_data(doc), ( "Doc body", { 'Title': 'Foo Bar', 'Date': datetime.date(2018, 7, 10), 'Summary': 'Line one Line two', 'Tags': ['foo', 'bar'], }, ), ) def test_yaml_meta_data_not_dict(self): doc = dedent( """ --- - List item --- Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) def test_yaml_meta_data_invalid(self): doc = dedent( """ --- foo: bar: baz --- Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) def test_no_meta_data(self): doc = dedent( """ Doc body """ ) self.assertEqual(meta.get_data(doc), (doc, {})) class LogCounterTests(unittest.TestCase): def setUp(self): self.log = logging.getLogger('dummy') self.log.propagate = False self.log.setLevel(1) self.counter = utils.CountHandler() self.log.addHandler(self.counter) def tearDown(self): self.log.removeHandler(self.counter) def test_default_values(self): self.assertEqual(self.counter.get_counts(), []) def test_count_critical(self): self.assertEqual(self.counter.get_counts(), []) self.log.critical('msg') self.assertEqual(self.counter.get_counts(), [('CRITICAL', 1)]) def test_count_error(self): self.assertEqual(self.counter.get_counts(), []) self.log.error('msg') self.assertEqual(self.counter.get_counts(), [('ERROR', 1)]) def test_count_warning(self): self.assertEqual(self.counter.get_counts(), []) self.log.warning('msg') self.assertEqual(self.counter.get_counts(), [('WARNING', 1)]) def test_count_info(self): self.assertEqual(self.counter.get_counts(), []) self.log.info('msg') self.assertEqual(self.counter.get_counts(), [('INFO', 1)]) def test_count_debug(self): self.assertEqual(self.counter.get_counts(), []) self.log.debug('msg') self.assertEqual(self.counter.get_counts(), [('DEBUG', 1)]) def test_count_multiple(self): self.assertEqual(self.counter.get_counts(), []) self.log.warning('msg 1') self.assertEqual(self.counter.get_counts(), [('WARNING', 1)]) self.log.warning('msg 2') self.assertEqual(self.counter.get_counts(), [('WARNING', 2)]) self.log.debug('msg 3') self.assertEqual(self.counter.get_counts(), [('WARNING', 2), ('DEBUG', 1)]) self.log.error('mdg 4') self.assertEqual(self.counter.get_counts(), [('ERROR', 1), ('WARNING', 2), ('DEBUG', 1)]) def test_log_level(self): self.assertEqual(self.counter.get_counts(), []) self.counter.setLevel(logging.ERROR) self.log.error('counted') self.log.warning('not counted') self.log.info('not counted') self.assertEqual(self.counter.get_counts(), [('ERROR', 1)]) self.counter.setLevel(logging.WARNING) self.log.error('counted') self.log.warning('counted') self.log.info('not counted') self.assertEqual(self.counter.get_counts(), [('ERROR', 2), ('WARNING', 1)]) @dataclasses.dataclass class _Page: url: str python-mkdocs-1.5.3/mkdocs/tests/utils/__init__.py0000644000175000017500000000000014502137725022066 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/utils/templates_tests.py0000644000175000017500000000341114502137725023560 0ustar carstencarstenimport unittest from textwrap import dedent import yaml from mkdocs.tests.base import load_config from mkdocs.utils import templates class UtilsTemplatesTests(unittest.TestCase): def test_script_tag(self): cfg_yaml = dedent( ''' extra_javascript: - some_plain_javascript.js - implicitly_as_module.mjs - path: explicitly_as_module.mjs type: module - path: deferred_plain.js defer: true - path: scripts/async_module.mjs type: module async: true - path: 'aaaaaa/"my script".mjs' type: module async: true defer: true - path: plain.mjs ''' ) config = load_config(**yaml.safe_load(cfg_yaml)) config.extra_javascript.append('plain_string.mjs') self.assertEqual( [ str(templates.script_tag_filter({'page': None, 'base_url': 'here'}, item)) for item in config.extra_javascript ], [ '', '', '', '', '', '', '', '', ], ) python-mkdocs-1.5.3/mkdocs/tests/config/0000755000175000017500000000000014502137725020074 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/config/base_tests.py0000644000175000017500000002461514502137725022612 0ustar carstencarstenimport os import unittest from mkdocs import exceptions from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import ValidationError from mkdocs.tests.base import change_dir, tempdir class ConfigBaseTests(unittest.TestCase): def test_unrecognised_keys(self): conf = defaults.MkDocsConfig() conf.load_dict( { 'not_a_valid_config_option': "test", } ) failed, warnings = conf.validate() self.assertEqual( warnings, [ ( 'not_a_valid_config_option', 'Unrecognised configuration name: not_a_valid_config_option', ) ], ) def test_missing_required(self): conf = defaults.MkDocsConfig() errors, warnings = conf.validate() self.assertEqual( errors, [('site_name', ValidationError('Required configuration not provided.'))] ) self.assertEqual(warnings, []) @tempdir() def test_load_from_file(self, temp_dir): """ Users can explicitly set the config file using the '--config' option. Allows users to specify a config other than the default `mkdocs.yml`. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) cfg = base.load_config(config_file=config_file.name) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_default_file(self, temp_dir): """ test that `mkdocs.yml` will be loaded when '--config' is not set. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir def test_load_default_file_with_yaml(self, temp_dir): """ test that `mkdocs.yml` will be loaded when '--config' is not set. """ with open(os.path.join(temp_dir, 'mkdocs.yaml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir() def test_load_default_file_prefer_yml(self, temp_dir): """ test that `mkdocs.yml` will be loaded when '--config' is not set. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file1: config_file1.write("site_name: MkDocs Test1\n") with open(os.path.join(temp_dir, 'mkdocs.yaml'), 'w') as config_file2: config_file2.write("site_name: MkDocs Test2\n") os.mkdir(os.path.join(temp_dir, 'docs')) with change_dir(temp_dir): cfg = base.load_config(config_file=None) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test1') def test_load_from_missing_file(self): with self.assertRaisesRegex( exceptions.ConfigurationError, "Config file 'missing_file.yml' does not exist." ): base.load_config(config_file='missing_file.yml') @tempdir() def test_load_from_open_file(self, temp_path): """ `load_config` can accept an open file descriptor. """ config_fname = os.path.join(temp_path, 'mkdocs.yml') config_file = open(config_fname, 'w+') config_file.write("site_name: MkDocs Test\n") config_file.flush() os.mkdir(os.path.join(temp_path, 'docs')) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') # load_config will always close the file self.assertTrue(config_file.closed) @tempdir() def test_load_from_closed_file(self, temp_dir): """ The `serve` command with auto-reload may pass in a closed file descriptor. Ensure `load_config` reloads the closed file. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_name: MkDocs Test\n") os.mkdir(os.path.join(temp_dir, 'docs')) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') @tempdir def test_load_missing_required(self, temp_dir): """ `site_name` is a required setting. """ with open(os.path.join(temp_dir, 'mkdocs.yml'), 'w') as config_file: config_file.write("site_dir: output\nsite_url: https://www.mkdocs.org\n") os.mkdir(os.path.join(temp_dir, 'docs')) with self.assertLogs('mkdocs') as cm: with self.assertRaises(exceptions.Abort): base.load_config(config_file=config_file.name) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.config:Config value 'site_name': Required configuration not provided.", ) def test_pre_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): raise ValidationError('pre_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('pre_validation error'))]) self.assertEqual(warnings, []) def test_run_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def run_validation(self, value): raise ValidationError('run_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('run_validation error'))]) self.assertEqual(warnings, []) def test_post_validation_error(self): class InvalidConfigOption(c.BaseConfigOption): def post_validation(self, config, key_name): raise ValidationError('post_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('post_validation error'))]) self.assertEqual(warnings, []) def test_pre_and_run_validation_errors(self): """A pre_validation error does not stop run_validation from running.""" class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): raise ValidationError('pre_validation error') def run_validation(self, value): raise ValidationError('run_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual( errors, [ ('invalid_option', ValidationError('pre_validation error')), ('invalid_option', ValidationError('run_validation error')), ], ) self.assertEqual(warnings, []) def test_run_and_post_validation_errors(self): """A run_validation error stops post_validation from running.""" class InvalidConfigOption(c.BaseConfigOption): def run_validation(self, value): raise ValidationError('run_validation error') def post_validation(self, config, key_name): raise ValidationError('post_validation error') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, [('invalid_option', ValidationError('run_validation error'))]) self.assertEqual(warnings, []) def test_validation_warnings(self): class InvalidConfigOption(c.BaseConfigOption): def pre_validation(self, config, key_name): self.warnings.append('pre_validation warning') def run_validation(self, value): self.warnings.append('run_validation warning') def post_validation(self, config, key_name): self.warnings.append('post_validation warning') conf = base.Config(schema=(('invalid_option', InvalidConfigOption()),)) errors, warnings = conf.validate() self.assertEqual(errors, []) self.assertEqual( warnings, [ ('invalid_option', 'pre_validation warning'), ('invalid_option', 'run_validation warning'), ('invalid_option', 'post_validation warning'), ], ) @tempdir() def test_load_from_file_with_relative_paths(self, config_dir): """ When explicitly setting a config file, paths should be relative to the config file, not the working directory. """ config_fname = os.path.join(config_dir, 'mkdocs.yml') with open(config_fname, 'w') as config_file: config_file.write("docs_dir: src\nsite_name: MkDocs Test\n") docs_dir = os.path.join(config_dir, 'src') os.mkdir(docs_dir) cfg = base.load_config(config_file=config_file) self.assertTrue(isinstance(cfg, defaults.MkDocsConfig)) self.assertEqual(cfg.site_name, 'MkDocs Test') self.assertEqual(cfg.docs_dir, docs_dir) self.assertEqual(cfg.config_file_path, config_fname) self.assertIsInstance(cfg.config_file_path, str) def test_get_schema(self): class FooConfig: z = c.URL() aa = c.Type(int) self.assertEqual( base.get_schema(FooConfig), ( ('z', FooConfig.z), ('aa', FooConfig.aa), ), ) python-mkdocs-1.5.3/mkdocs/tests/config/config_options_legacy_tests.py0000644000175000017500000015407514502137725026250 0ustar carstencarstenfrom __future__ import annotations import contextlib import copy import io import os import re import sys import textwrap import unittest from typing import Any from unittest.mock import patch import mkdocs from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.tests.base import tempdir from mkdocs.utils import write_file, yaml_load class UnexpectedError(Exception): pass class TestCase(unittest.TestCase): @contextlib.contextmanager def expect_error(self, **kwargs): [(key, msg)] = kwargs.items() with self.assertRaises(UnexpectedError) as cm: yield if isinstance(msg, re.Pattern): self.assertRegex(str(cm.exception), f'^{key}="{msg.pattern}"$') else: self.assertEqual(f'{key}="{msg}"', str(cm.exception)) def get_config( self, schema: type, cfg: dict[str, Any], warnings: dict[str, str] = {}, config_file_path=None, ): config = base.LegacyConfig(base.get_schema(schema), config_file_path=config_file_path) config.load_dict(cfg) actual_errors, actual_warnings = config.validate() if actual_errors: raise UnexpectedError(', '.join(f'{key}="{msg}"' for key, msg in actual_errors)) self.assertEqual(warnings, dict(actual_warnings)) return config class OptionallyRequiredTest(TestCase): def test_empty(self): class Schema: option = c.OptionallyRequired() conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) self.assertEqual(Schema.option.required, False) def test_required(self): class Schema: option = c.OptionallyRequired(required=True) with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) self.assertEqual(Schema.option.required, True) def test_required_no_default(self): class Schema: option = c.OptionallyRequired(required=True) conf = self.get_config(Schema, {'option': 2}) self.assertEqual(conf['option'], 2) def test_default(self): class Schema: option = c.OptionallyRequired(default=1) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], 1) def test_replace_default(self): class Schema: option = c.OptionallyRequired(default=1) conf = self.get_config(Schema, {'option': 2}) self.assertEqual(conf['option'], 2) class TypeTest(TestCase): def test_single_type(self): class Schema: option = c.Type(str) conf = self.get_config(Schema, {'option': "Testing"}) self.assertEqual(conf['option'], "Testing") def test_multiple_types(self): class Schema: option = c.Type((list, tuple)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf['option'], [1, 2, 3]) conf = self.get_config(Schema, {'option': (1, 2, 3)}) self.assertEqual(conf['option'], (1, 2, 3)) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {'a': 1}}) def test_length(self): class Schema: option = c.Type(str, length=7) conf = self.get_config(Schema, {'option': "Testing"}) self.assertEqual(conf['option'], "Testing") with self.expect_error( option="Expected type: with length 7 but received: 'Testing Long' with length 12" ): self.get_config(Schema, {'option': "Testing Long"}) class ChoiceTest(TestCase): def test_required(self): class Schema: option = c.Choice(('python', 'node'), required=True) conf = self.get_config(Schema, {'option': 'python'}) self.assertEqual(conf['option'], 'python') def test_optional(self): class Schema: option = c.Choice(('python', 'node')) conf = self.get_config(Schema, {'option': 'python'}) self.assertEqual(conf['option'], 'python') conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) def test_default(self): class Schema: option = c.Choice(('a', 'b', 'c'), default='b') conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], 'b') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], 'b') with self.expect_error(option="Expected one of: ('a', 'b', 'c') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_default(self): with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c') with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c', required=True) def test_invalid_choice(self): class Schema: option = c.Choice(('python', 'node')) with self.expect_error(option="Expected one of: ('python', 'node') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_choices(self): with self.assertRaises(ValueError): c.Choice('') with self.assertRaises(ValueError): c.Choice([]) with self.assertRaises(ValueError): c.Choice(5) class DeprecatedTest(TestCase): def test_deprecated_option_simple(self): class Schema: d = c.Deprecated() self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_message(self): class Schema: d = c.Deprecated(message='custom message for {} key') self.get_config(Schema, {'d': 'value'}, warnings={'d': 'custom message for d key'}) def test_deprecated_option_with_type(self): class Schema: d = c.Deprecated(option_type=c.Type(str)) self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_with_invalid_type(self): class Schema: d = c.Deprecated(option_type=c.Type(list)) with self.expect_error(d="Expected type: but received: "): self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_removed_option(self): class Schema: d = c.Deprecated(removed=True, moved_to='foo') with self.expect_error( d="The configuration option 'd' was removed from MkDocs. Use 'foo' instead.", ): self.get_config(Schema, {'d': 'value'}) def test_deprecated_option_with_type_undefined(self): class Schema: option = c.Deprecated(option_type=c.Type(str)) self.get_config(Schema, {'option': None}) def test_deprecated_option_move(self): class Schema: new = c.Type(str) old = c.Deprecated(moved_to='new') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'new' instead." ), ) self.assertEqual(conf, {'new': 'value', 'old': None}) def test_deprecated_option_move_complex(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'bar': 'value'}, 'old': None}) def test_deprecated_option_move_existing(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value', 'foo': {'existing': 'existing'}}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'existing': 'existing', 'bar': 'value'}, 'old': None}) def test_deprecated_option_move_invalid(self): class Schema: foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') with self.expect_error(foo="Expected type: but received: "): self.get_config( Schema, {'old': 'value', 'foo': 'wrong type'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) class IpAddressTest(TestCase): class Schema: option = c.IpAddress() def test_valid_address(self): addr = '127.0.0.1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '127.0.0.1') self.assertEqual(conf['option'].port, 8000) def test_valid_IPv6_address(self): addr = '::1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '::1') self.assertEqual(conf['option'].port, 8000) def test_valid_full_IPv6_address(self): addr = '[2001:db8:85a3::8a2e:370:7334]:123' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(conf['option'].host, '2001:db8:85a3::8a2e:370:7334') self.assertEqual(conf['option'].port, 123) def test_named_address(self): addr = 'localhost:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, 'localhost') self.assertEqual(conf['option'].port, 8000) def test_default_address(self): addr = '127.0.0.1:8000' class Schema: option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf['option']), addr) self.assertEqual(conf['option'].host, '127.0.0.1') self.assertEqual(conf['option'].port, 8000) @unittest.skipIf( sys.version_info < (3, 9, 5), "Leading zeros allowed in IP addresses before Python3.9.5", ) def test_invalid_leading_zeros(self): with self.expect_error( option="'127.000.000.001' does not appear to be an IPv4 or IPv6 address" ): self.get_config(self.Schema, {'option': '127.000.000.001:8000'}) def test_invalid_address_range(self): with self.expect_error(option="'277.0.0.1' does not appear to be an IPv4 or IPv6 address"): self.get_config(self.Schema, {'option': '277.0.0.1:8000'}) def test_invalid_address_format(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.18000'}) def test_invalid_address_type(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': 123}) def test_invalid_address_port(self): with self.expect_error(option="'foo' is not a valid port"): self.get_config(self.Schema, {'option': '127.0.0.1:foo'}) def test_invalid_address_missing_port(self): with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.1'}) def test_unsupported_address(self): class Schema: dev_addr = c.IpAddress() self.get_config( Schema, {'dev_addr': '0.0.0.0:8000'}, warnings=dict( dev_addr="The use of the IP address '0.0.0.0' suggests a production " "environment or the use of a proxy to connect to the MkDocs " "server. However, the MkDocs' server is intended for local " "development purposes only. Please use a third party " "production-ready server instead." ), ) def test_unsupported_IPv6_address(self): class Schema: dev_addr = c.IpAddress() self.get_config( Schema, {'dev_addr': ':::8000'}, warnings=dict( dev_addr="The use of the IP address '::' suggests a production environment " "or the use of a proxy to connect to the MkDocs server. However, " "the MkDocs' server is intended for local development purposes " "only. Please use a third party production-ready server instead." ), ) class URLTest(TestCase): def test_valid_url(self): class Schema: option = c.URL() conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf['option'], "https://mkdocs.org") conf = self.get_config(Schema, {'option': ""}) self.assertEqual(conf['option'], "") def test_valid_url_is_dir(self): class Schema: option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': "http://mkdocs.org/"}) self.assertEqual(conf['option'], "http://mkdocs.org/") conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf['option'], "https://mkdocs.org/") def test_optional(self): class Schema: option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': ''}) self.assertEqual(conf['option'], '') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], None) def test_invalid_url(self): class Schema: option = c.URL(required=True) with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) for url in "www.mkdocs.org", "//mkdocs.org/test", "http:/mkdocs.org/", "/hello/": with self.subTest(url=url): with self.expect_error( option="The URL isn't valid, it should include the http:// (scheme)" ): self.get_config(Schema, {'option': url}) def test_invalid_type(self): class Schema: option = c.URL() with self.expect_error(option="Expected a string, got "): self.get_config(Schema, {'option': 1}) class EditURITest(TestCase): class Schema: repo_url = c.URL() repo_name = c.RepoName('repo_url') edit_uri_template = c.EditURITemplate('edit_uri') edit_uri = c.EditURI('repo_url') def test_repo_name_github(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) self.assertEqual(conf['repo_name'], "GitHub") def test_repo_name_bitbucket(self): conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf['repo_name'], "Bitbucket") def test_repo_name_gitlab(self): conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf['repo_name'], "GitLab") def test_repo_name_custom(self): conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf['repo_name'], "Launchpad") def test_edit_uri_github(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') self.assertEqual(conf['repo_url'], "https://github.com/mkdocs/mkdocs") def test_edit_uri_bitbucket(self): conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf['edit_uri'], 'src/default/docs/') self.assertEqual(conf['repo_url'], "https://bitbucket.org/gutworth/six/") def test_edit_uri_gitlab(self): conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') def test_edit_uri_custom(self): conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf['edit_uri'], None) self.assertEqual(conf['repo_url'], "https://launchpad.net/python-tuskarclient") def test_repo_name_custom_and_empty_edit_uri(self): conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs", 'repo_name': 'mkdocs'}, ) self.assertEqual(conf['edit_uri'], 'edit/master/docs/') def test_edit_uri_template_ok(self): conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/foo/docs/{path}', }, ) self.assertEqual(conf['edit_uri_template'], 'edit/foo/docs/{path}') def test_edit_uri_template_errors(self): with self.expect_error( edit_uri_template=re.compile(r'.*[{}].*') # Complains about unclosed '{' or missing '}' ): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path', }, ) with self.expect_error(edit_uri_template=re.compile(r'.*\bz\b.*')): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path!z}', }, ) with self.expect_error(edit_uri_template="Unknown template substitute: 'foo'"): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{foo}', }, ) def test_edit_uri_template_warning(self): conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri': 'edit', 'edit_uri_template': 'edit/master/{path}', }, warnings=dict( edit_uri_template="The option 'edit_uri' has no effect when 'edit_uri_template' is set." ), ) self.assertEqual(conf['edit_uri_template'], 'edit/master/{path}') class ListOfItemsTest(TestCase): def test_int_type(self): class Schema: option = c.ListOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf['option'], [1, 2, 3]) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': [1, None, 3]}) def test_combined_float_type(self): class Schema: option = c.ListOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': [1.4, 2, 3]}) self.assertEqual(conf['option'], [1.4, 2, 3]) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': ['a']}) def test_list_default(self): class Schema: option = c.ListOfItems(c.Type(int), default=[]) conf = self.get_config(Schema, {}) self.assertEqual(conf['option'], []) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'], []) def test_none_without_default(self): class Schema: option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf['option'], ['foo']) def test_string_not_a_list_of_strings(self): class Schema: option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self): class Schema: option = c.ListOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config(Schema, {'option': ["localhost:8000", "1.2.3.4:asdf"]}) class FilesystemObjectTest(TestCase): def test_valid_dir(self): for cls in c.Dir, c.FilesystemObject: with self.subTest(cls): d = os.path.dirname(__file__) class Schema: option = cls(exists=True) conf = self.get_config(Schema, {'option': d}) self.assertEqual(conf['option'], d) def test_valid_file(self): for cls in c.File, c.FilesystemObject: with self.subTest(cls): f = __file__ class Schema: option = cls(exists=True) conf = self.get_config(Schema, {'option': f}) self.assertEqual(conf['option'], f) def test_missing_without_exists(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema: option = cls() conf = self.get_config(Schema, {'option': d}) self.assertEqual(conf['option'], os.path.abspath(d)) def test_missing_but_required(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema: option = cls(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing .+")): self.get_config(Schema, {'option': d}) def test_not_a_dir(self): d = __file__ class Schema: option = c.Dir(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing directory.")): self.get_config(Schema, {'option': d}) def test_not_a_file(self): d = os.path.dirname(__file__) class Schema: option = c.File(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing file.")): self.get_config(Schema, {'option': d}) def test_incorrect_type_error(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema: option = cls() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': 1}) with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': []}) def test_with_unicode(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema: dir = cls() conf = self.get_config(Schema, {'dir': 'юникод'}) self.assertIsInstance(conf['dir'], str) def test_dir_bytes(self): class Schema: dir = c.Dir() with self.expect_error(dir="Expected type: but received: "): self.get_config(Schema, {'dir': b'foo'}) def test_config_dir_prepended(self): for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): base_path = os.path.dirname(os.path.abspath(__file__)) class Schema: dir = cls() conf = self.get_config( Schema, {'dir': 'foo'}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf['dir'], os.path.join(base_path, 'foo')) def test_site_dir_is_config_dir_fails(self): class Schema: dir = c.DocsDir() with self.expect_error( dir="The 'dir' should not be the parent directory of the config file. " "Use a child directory instead so that the 'dir' is a sibling of the config file." ): self.get_config( Schema, {'dir': '.'}, config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'), ) class ListOfPathsTest(TestCase): def test_valid_path(self): paths = [os.path.dirname(__file__)] class Schema: option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) def test_missing_path(self): paths = [os.path.join("does", "not", "exist", "i", "hope")] class Schema: option = c.ListOfPaths() with self.expect_error( option=f"The path '{paths[0]}' isn't an existing file or directory." ): self.get_config(Schema, {'option': paths}) def test_non_path(self): paths = [os.path.dirname(__file__), None] class Schema: option = c.ListOfPaths() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': paths}) def test_empty_list(self): class Schema: option = c.ListOfPaths() conf = self.get_config(Schema, {'option': []}) self.assertEqual(conf['option'], []) def test_non_list(self): paths = os.path.dirname(__file__) class Schema: option = c.ListOfPaths() with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': paths}) def test_file(self): paths = [__file__] class Schema: option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) @tempdir() def test_paths_localized_to_config(self, base_path): with open(os.path.join(base_path, 'foo'), 'w') as f: f.write('hi') class Schema: watch = c.ListOfPaths() conf = self.get_config( Schema, {'watch': ['foo']}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf['watch'], [os.path.join(base_path, 'foo')]) class SiteDirTest(TestCase): class Schema: site_dir = c.SiteDir() docs_dir = c.Dir() def test_doc_dir_in_site_dir(self): j = os.path.join # The parent dir is not the same on every system, so use the actual dir name parent_dir = mkdocs.__file__.split(os.sep)[-3] test_configs = ( {'docs_dir': j('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': j('..', parent_dir, 'docs'), 'site_dir': 'docs'}, {'docs_dir': 'docs', 'site_dir': '/'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'docs_dir' should not be within the 'site_dir'.*") ): self.get_config(self.Schema, test_config) def test_site_dir_in_docs_dir(self): j = os.path.join test_configs = ( {'docs_dir': 'docs', 'site_dir': j('docs', 'site')}, {'docs_dir': '.', 'site_dir': 'site'}, {'docs_dir': '', 'site_dir': 'site'}, {'docs_dir': '/', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'site_dir' should not be within the 'docs_dir'.*") ): self.get_config(self.Schema, test_config) def test_common_prefix(self): """Legitimate settings with common prefixes should not fail validation.""" test_configs = ( {'docs_dir': 'docs', 'site_dir': 'docs-site'}, {'docs_dir': 'site-docs', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): self.get_config(self.Schema, test_config) class ThemeTest(TestCase): def test_theme_as_string(self): class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': "mkdocs"}) self.assertEqual(conf['option'].name, 'mkdocs') def test_uninstalled_theme_as_string(self): class Schema: option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': "mkdocs2"}) def test_theme_default(self): class Schema: option = c.Theme(default='mkdocs') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf['option'].name, 'mkdocs') def test_theme_as_simple_config(self): config = { 'name': 'mkdocs', } class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf['option'].name, 'mkdocs') @tempdir() def test_theme_as_complex_config(self, custom_dir): config = { 'name': 'mkdocs', 'custom_dir': custom_dir, 'static_templates': ['sitemap.html'], 'show_sidebar': False, } class Schema: option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf['option'].name, 'mkdocs') self.assertIn(custom_dir, conf['option'].dirs) self.assertEqual( conf['option'].static_templates, {'404.html', 'sitemap.xml', 'sitemap.html'}, ) self.assertEqual(conf['option']['show_sidebar'], False) def test_theme_name_is_none(self): config = { 'name': None, } class Schema: option = c.Theme() with self.expect_error(option="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, {'option': config}) def test_theme_config_missing_name(self): config = { 'custom_dir': 'custom', } class Schema: option = c.Theme() with self.expect_error(option="No theme name set."): self.get_config(Schema, {'option': config}) def test_uninstalled_theme_as_config(self): config = { 'name': 'mkdocs2', } class Schema: option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': config}) def test_theme_invalid_type(self): config = ['mkdocs2'] class Schema: option = c.Theme() with self.expect_error( option="Invalid type . Expected a string or key/value pairs." ): self.get_config(Schema, {'option': config}) def test_post_validation_none_theme_name_and_missing_custom_dir(self): config = { 'theme': { 'name': None, }, } class Schema: theme = c.Theme() with self.expect_error(theme="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, config) @tempdir() def test_post_validation_inexisting_custom_dir(self, abs_base_path): path = os.path.join(abs_base_path, 'inexisting_custom_dir') config = { 'theme': { 'name': None, 'custom_dir': path, }, } class Schema: theme = c.Theme() with self.expect_error(theme=f"The path set in custom_dir ('{path}') does not exist."): self.get_config(Schema, config) def test_post_validation_locale_none(self): config = { 'theme': { 'name': 'mkdocs', 'locale': None, }, } class Schema: theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale_invalid_type(self): config = { 'theme': { 'name': 'mkdocs', 'locale': 0, }, } class Schema: theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale(self): config = { 'theme': { 'name': 'mkdocs', 'locale': 'fr', }, } class Schema: theme = c.Theme() conf = self.get_config(Schema, config) self.assertEqual(conf['theme']['locale'].language, 'fr') class NavTest(TestCase): class Schema: option = c.Nav() def test_old_format(self): with self.expect_error( option="Expected nav item to be a string or dict, got a list: ['index.md']" ): self.get_config(self.Schema, {'option': [['index.md']]}) def test_provided_dict(self): conf = self.get_config(self.Schema, {'option': ['index.md', {"Page": "page.md"}]}) self.assertEqual(conf['option'], ['index.md', {'Page': 'page.md'}]) def test_provided_empty(self): conf = self.get_config(self.Schema, {'option': []}) self.assertEqual(conf['option'], None) def test_normal_nav(self): nav_yaml = textwrap.dedent( '''\ - Home: index.md - getting-started.md - User Guide: - Overview: user-guide/index.md - Installation: user-guide/installation.md ''' ) nav = yaml_load(io.StringIO(nav_yaml)) conf = self.get_config(self.Schema, {'option': nav}) self.assertEqual(conf['option'], nav) def test_invalid_type_dict(self): with self.expect_error(option="Expected nav to be a list, got a dict: {}"): self.get_config(self.Schema, {'option': {}}) def test_invalid_type_int(self): with self.expect_error(option="Expected nav to be a list, got a int: 5"): self.get_config(self.Schema, {'option': 5}) def test_invalid_item_int(self): with self.expect_error(option="Expected nav item to be a string or dict, got a int: 1"): self.get_config(self.Schema, {'option': [1]}) def test_invalid_item_none(self): with self.expect_error(option="Expected nav item to be a string or dict, got None"): self.get_config(self.Schema, {'option': [None]}) def test_invalid_children_config_int(self): with self.expect_error(option="Expected nav to be a list, got a int: 1"): self.get_config(self.Schema, {'option': [{"foo.md": [{"bar.md": 1}]}]}) def test_invalid_children_config_none(self): with self.expect_error(option="Expected nav to be a list, got None"): self.get_config(self.Schema, {'option': [{"foo.md": None}]}) def test_invalid_children_empty_dict(self): nav = ['foo', {}] with self.expect_error(option="Expected nav item to be a dict of size 1, got a dict: {}"): self.get_config(self.Schema, {'option': nav}) def test_invalid_nested_list(self): nav = [{'aaa': [[{"bbb": "user-guide/index.md"}]]}] with self.expect_error( option="Expected nav item to be a string or dict, got a list: [{'bbb': 'user-guide/index.md'}]" ): self.get_config(self.Schema, {'option': nav}) def test_invalid_children_oversized_dict(self): nav = [{"aaa": [{"bbb": "user-guide/index.md", "ccc": "user-guide/installation.md"}]}] with self.expect_error( option="Expected nav item to be a dict of size 1, got dict with keys ('bbb', 'ccc')" ): self.get_config(self.Schema, {'option': nav}) def test_warns_for_dict(self): self.get_config( self.Schema, {'option': [{"a": {"b": "c.md", "d": "e.md"}}]}, warnings=dict(option="Expected nav to be a list, got dict with keys ('b', 'd')"), ) class PrivateTest(TestCase): def test_defined(self): class Schema: option = c.Private() with self.expect_error(option="For internal use only."): self.get_config(Schema, {'option': 'somevalue'}) class SubConfigTest(TestCase): def test_subconfig_wrong_type(self): # Test that an error is raised if subconfig does not receive a dict class Schema: option = c.SubConfig() for val in "not_a_dict", ("not_a_dict",), ["not_a_dict"]: with self.subTest(val): with self.expect_error( option=re.compile( r"The configuration is invalid. Expected a key-value mapping " r"\(dict\) but received: .+" ) ): self.get_config(Schema, {'option': val}) def test_subconfig_ignored(self): """Default behaviour of subconfig: validation is ignored""" # Nominal class Schema1: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema1, {'option': {'cc': 'foo'}}) self.assertEqual(conf, {'option': {'cc': 'foo'}}) # Invalid option: No error class Schema2: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema2, {'option': {'cc': True}}) self.assertEqual(conf, {'option': {'cc': True}}) # Missing option: Will be considered optional with default None class Schema3: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema3, {'option': {}}) self.assertEqual(conf, {'option': {'cc': None}}) # Unknown option: No warning class Schema4: option = c.SubConfig(('cc', c.Choice(('foo', 'bar')))) conf = self.get_config(Schema4, {'option': {'unknown_key_is_ok': 0}}) self.assertEqual(conf, {'option': {'cc': None, 'unknown_key_is_ok': 0}}) def test_subconfig_unknown_option(self): class Schema: option = c.SubConfig(validate=True) conf = self.get_config( Schema, {'option': {'unknown': 0}}, warnings=dict(option="Sub-option 'unknown': Unrecognised configuration name: unknown"), ) self.assertEqual(conf['option'], {"unknown": 0}) def test_subconfig_invalid_option(self): class Schema: option = c.SubConfig( ('cc', c.Choice(('foo', 'bar'))), validate=True, ) with self.expect_error( option="Sub-option 'cc': Expected one of: ('foo', 'bar') but received: True" ): self.get_config(Schema, {'option': {'cc': True}}) def test_subconfig_normal(self): class Schema: option = c.SubConfig( ('cc', c.Choice(('foo', 'bar'))), ) conf = self.get_config(Schema, {'option': {'cc': 'foo'}}) self.assertEqual(conf['option'], {'cc': 'foo'}) def test_config_file_path_pass_through(self): """Necessary to ensure FilesystemObject validates the correct path""" passed_config_path = None class SubType(c.BaseConfigOption): def pre_validation(self, config, key_name): nonlocal passed_config_path passed_config_path = config.config_file_path class Schema: sub = c.SubConfig(('opt', SubType())) config_path = "foo/mkdocs.yaml" self.get_config(Schema, {"sub": {"opt": "bar"}}, config_file_path=config_path) self.assertEqual(passed_config_path, config_path) class ConfigItemsTest(TestCase): def test_subconfig_with_multiple_items(self): # This had a bug where subsequent items would get merged into the same dict. class Schema: the_items = c.ConfigItems( ("value", c.Type(str)), ) conf = self.get_config( Schema, { 'the_items': [ {'value': 'a'}, {'value': 'b'}, ] }, ) self.assertEqual(conf['the_items'], [{'value': 'a'}, {'value': 'b'}]) def test_optional(self): class Schema: sub = c.ListOfItems( c.SubConfig( ('opt', c.Type(int)), validate=True, ), default=[], ) conf = self.get_config(Schema, {}) self.assertEqual(conf['sub'], []) conf = self.get_config(Schema, {'sub': None}) self.assertEqual(conf['sub'], []) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': None}]) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': 2}]) def test_required(self): class Schema: sub = c.ListOfItems( c.SubConfig( ('opt', c.Type(int, required=True)), validate=True, ) ) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'asdf'}, {}]}) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf['sub'], [{'opt': 1}, {'opt': 2}]) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="The configuration is invalid. Expected a key-value mapping " "(dict) but received: " ): conf = self.get_config(Schema, {'sub': [1, 2]}) class MarkdownExtensionsTest(TestCase): @patch('markdown.Markdown') def test_simple_list(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar']) self.assertEqual(conf['mdx_configs'], {}) @patch('markdown.Markdown') def test_list_dicts(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, {'bar': {'bar_option': 'bar value'}}, {'baz': None}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar', 'baz']) self.assertEqual( conf['mdx_configs'], { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_mixed_list(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': [ 'foo', {'bar': {'bar_option': 'bar value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar']) self.assertEqual( conf['mdx_configs'], { 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_dict_of_dicts(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() config = { 'markdown_extensions': { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, 'baz': {}, } } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo', 'bar', 'baz']) self.assertEqual( conf['mdx_configs'], { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_builtins(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc', 'foo', 'bar']) self.assertEqual(conf['mdx_configs'], {}) def test_duplicates(self): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': ['meta', 'toc'], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc']) self.assertEqual(conf['mdx_configs'], {}) def test_builtins_config(self): class Schema: markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private() config = { 'markdown_extensions': [ {'toc': {'permalink': True}}, ], } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['meta', 'toc']) self.assertEqual(conf['mdx_configs'], {'toc': {'permalink': True}}) @patch('markdown.Markdown') def test_configkey(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions(configkey='bar') bar = c.Private() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], ['foo']) self.assertEqual( conf['bar'], { 'foo': {'foo_option': 'foo value'}, }, ) def test_missing_default(self): class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() conf = self.get_config(Schema, {}) self.assertEqual(conf['markdown_extensions'], []) self.assertEqual(conf['mdx_configs'], {}) def test_none(self): class Schema: markdown_extensions = c.MarkdownExtensions(default=[]) mdx_configs = c.Private() config = { 'markdown_extensions': None, } conf = self.get_config(Schema, config) self.assertEqual(conf['markdown_extensions'], []) self.assertEqual(conf['mdx_configs'], {}) @patch('markdown.Markdown') def test_not_list(self, mock_md): class Schema: option = c.MarkdownExtensions() with self.expect_error(option="Invalid Markdown Extensions configuration"): self.get_config(Schema, {'option': 'not a list'}) @patch('markdown.Markdown') def test_invalid_config_option(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'foo': 'not a dict'}, ], } with self.expect_error( markdown_extensions="Invalid config options for Markdown Extension 'foo'." ): self.get_config(Schema, config) @patch('markdown.Markdown') def test_invalid_config_item(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ ['not a dict'], ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) @patch('markdown.Markdown') def test_invalid_dict_item(self, mock_md): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'key1': 'value', 'key2': 'too many keys'}, ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) def test_unknown_extension(self): class Schema: markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': ['unknown'], } with self.expect_error( markdown_extensions=re.compile(r"Failed to load extension 'unknown'.\n.+") ): self.get_config(Schema, config) def test_multiple_markdown_config_instances(self): # This had a bug where an extension config would persist to separate # config instances that didn't specify extensions. class Schema: markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private() conf = self.get_config( Schema, { 'markdown_extensions': [{'toc': {'permalink': '##'}}], }, ) self.assertEqual(conf['mdx_configs']['toc'], {'permalink': '##'}) conf = self.get_config( Schema, {}, ) self.assertIsNone(conf['mdx_configs'].get('toc')) class HooksTest(TestCase): class Schema: plugins = c.Plugins(default=[]) hooks = c.Hooks('plugins') @tempdir() def test_hooks(self, src_dir): write_file( b'def on_page_markdown(markdown, **kwargs): return markdown.replace("f", "z")', os.path.join(src_dir, 'hooks', 'my_hook.py'), ) write_file( b'foo foo', os.path.join(src_dir, 'docs', 'index.md'), ) conf = self.get_config( self.Schema, {'hooks': ['hooks/my_hook.py']}, config_file_path=os.path.join(src_dir, 'mkdocs.yml'), ) self.assertIn('hooks/my_hook.py', conf['plugins']) hook = conf['plugins']['hooks/my_hook.py'] self.assertTrue(hasattr(hook, 'on_page_markdown')) self.assertEqual( {**conf['plugins'].events, 'page_markdown': [hook.on_page_markdown]}, conf['plugins'].events, ) self.assertEqual(hook.on_page_markdown('foo foo'), 'zoo zoo') self.assertFalse(hasattr(hook, 'on_nav')) class SchemaTest(TestCase): def test_copy(self): copy.deepcopy( base.LegacyConfig( (('foo', c.MarkdownExtensions()),), ), ) copy.deepcopy(self.get_config(IpAddressTest.Schema, {'option': '1.2.3.4:5678'})) copy.deepcopy(IpAddressTest.Schema) copy.deepcopy(base.get_schema(IpAddressTest.Schema)) copy.deepcopy(self.get_config(EditURITest.Schema, {})) copy.deepcopy(EditURITest.Schema) copy.deepcopy(base.get_schema(EditURITest.Schema)) python-mkdocs-1.5.3/mkdocs/tests/config/config_tests.py0000644000175000017500000002471414502137725023145 0ustar carstencarsten#!/usr/bin/env python import os import unittest import mkdocs from mkdocs import config from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import ValidationError from mkdocs.exceptions import ConfigurationError from mkdocs.localization import parse_locale from mkdocs.tests.base import dedent, tempdir class ConfigTests(unittest.TestCase): def test_missing_config_file(self): with self.assertRaises(ConfigurationError): config.load_config(config_file='bad_filename.yaml') def test_missing_site_name(self): conf = defaults.MkDocsConfig() conf.load_dict({}) errors, warnings = conf.validate() self.assertEqual( errors, [('site_name', ValidationError("Required configuration not provided."))] ) self.assertEqual(warnings, []) def test_nonexistant_config(self): with self.assertRaises(ConfigurationError): config.load_config(config_file='/path/that/is/not/real') @tempdir() def test_invalid_config(self, temp_path): file_contents = dedent( """ - ['index.md', 'Introduction'] - ['index.md', 'Introduction'] - ['index.md', 'Introduction'] """ ) config_path = os.path.join(temp_path, 'foo.yml') with open(config_path, 'w') as config_file: config_file.write(file_contents) with self.assertRaises(ConfigurationError): config.load_config(config_file=open(config_file.name, 'rb')) @tempdir() def test_config_option(self, temp_path): """ Users can explicitly set the config file using the '--config' option. Allows users to specify a config other than the default `mkdocs.yml`. """ expected_result = { 'site_name': 'Example', 'nav': [{'Introduction': 'index.md'}], } file_contents = dedent( """ site_name: Example nav: - 'Introduction': 'index.md' """ ) config_path = os.path.join(temp_path, 'mkdocs.yml') with open(config_path, 'w') as config_file: config_file.write(file_contents) os.mkdir(os.path.join(temp_path, 'docs')) result = config.load_config(config_file=config_file.name) self.assertEqual(result['site_name'], expected_result['site_name']) self.assertEqual(result['nav'], expected_result['nav']) @tempdir() @tempdir() def test_theme(self, mytheme, custom): configs = [ {}, # default theme {"theme": "readthedocs"}, # builtin theme {"theme": {'name': 'readthedocs'}}, # builtin as complex {"theme": {'name': None, 'custom_dir': mytheme}}, # custom only as complex { "theme": {'name': 'readthedocs', 'custom_dir': custom} }, # builtin and custom as complex { # user defined variables 'theme': { 'name': 'mkdocs', 'locale': 'fr', 'static_templates': ['foo.html'], 'show_sidebar': False, 'some_var': 'bar', } }, ] mkdocs_dir = os.path.abspath(os.path.dirname(mkdocs.__file__)) mkdocs_templates_dir = os.path.join(mkdocs_dir, 'templates') theme_dir = os.path.abspath(os.path.join(mkdocs_dir, 'themes')) results = ( { 'dirs': [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'mkdocs', 'locale': parse_locale('en'), 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_languages': [], 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, }, { 'dirs': [os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [mytheme, mkdocs_templates_dir], 'static_templates': ['sitemap.xml'], 'vars': {'name': None, 'locale': parse_locale('en')}, }, { 'dirs': [custom, os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml'], 'vars': { 'name': 'readthedocs', 'locale': parse_locale('en'), 'include_search_page': True, 'search_index_only': False, 'analytics': {'anonymize_ip': False, 'gtag': None}, 'highlightjs': True, 'hljs_languages': [], 'hljs_style': 'github', 'include_homepage_in_sidebar': True, 'prev_next_buttons_location': 'bottom', 'navigation_depth': 4, 'sticky_navigation': True, 'logo': None, 'titles_only': False, 'collapse_navigation': True, }, }, { 'dirs': [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], 'static_templates': ['404.html', 'sitemap.xml', 'foo.html'], 'vars': { 'name': 'mkdocs', 'locale': parse_locale('fr'), 'show_sidebar': False, 'some_var': 'bar', 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_languages': [], 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, }, ) for config_contents, result in zip(configs, results): with self.subTest(config_contents): conf = config.Config(schema=(('theme', c.Theme(default='mkdocs')),)) conf.load_dict(config_contents) errors, warnings = conf.validate() self.assertEqual(errors, []) self.assertEqual(warnings, []) self.assertEqual(conf['theme'].dirs, result['dirs']) self.assertEqual(conf['theme'].static_templates, set(result['static_templates'])) self.assertEqual(dict(conf['theme']), result['vars']) def test_empty_nav(self): conf = defaults.MkDocsConfig( config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml') ) conf.load_dict({'site_name': 'Example'}) conf.validate() self.assertEqual(conf['nav'], None) def test_error_on_pages(self): conf = defaults.MkDocsConfig() conf.load_dict( { 'site_name': 'Example', 'pages': ['index.md', 'about.md'], } ) errors, warnings = conf.validate() exp_error = "The configuration option 'pages' was removed from MkDocs. Use 'nav' instead." self.assertEqual(errors, [('pages', ValidationError(exp_error))]) self.assertEqual(warnings, []) def test_doc_dir_in_site_dir(self): test_configs = ( {'docs_dir': os.path.join('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': 'docs', 'site_dir': 'docs'}, ) for test_config in test_configs: with self.subTest(test_config): # Same as the default schema, but don't verify the docs_dir exists. conf = config.Config( schema=( ('docs_dir', c.Dir(default='docs')), ('site_dir', c.SiteDir(default='site')), ), config_file_path=os.path.join(os.path.abspath('..'), 'mkdocs.yml'), ) conf.load_dict(test_config) errors, warnings = conf.validate() self.assertEqual(len(errors), 1) self.assertEqual(warnings, []) python-mkdocs-1.5.3/mkdocs/tests/config/config_options_tests.py0000644000175000017500000024146014502137725024717 0ustar carstencarstenfrom __future__ import annotations import contextlib import copy import io import logging import os import re import sys import textwrap import unittest from typing import TYPE_CHECKING, Any, Dict, List, Optional, TypeVar, Union from unittest.mock import patch if TYPE_CHECKING: from typing_extensions import assert_type else: def assert_type(val, typ): return None import mkdocs from mkdocs.config import config_options as c from mkdocs.config import defaults from mkdocs.config.base import Config from mkdocs.plugins import BasePlugin, PluginCollection from mkdocs.tests.base import tempdir from mkdocs.theme import Theme from mkdocs.utils import write_file, yaml_load SomeConfig = TypeVar('SomeConfig', bound=Config) class UnexpectedError(Exception): pass class TestCase(unittest.TestCase): @contextlib.contextmanager def expect_error(self, **kwargs): [(key, msg)] = kwargs.items() with self.assertRaises(UnexpectedError) as cm: yield if isinstance(msg, re.Pattern): self.assertRegex(str(cm.exception), f'^{key}="{msg.pattern}"$') else: self.assertEqual(f'{key}="{msg}"', str(cm.exception)) def get_config( self, config_class: type[SomeConfig], cfg: dict[str, Any], warnings: dict[str, str] = {}, config_file_path=None, ) -> SomeConfig: config = config_class(config_file_path=config_file_path) config.load_dict(cfg) actual_errors, actual_warnings = config.validate() if actual_errors: raise UnexpectedError(', '.join(f'{key}="{msg}"' for key, msg in actual_errors)) self.assertEqual(warnings, dict(actual_warnings)) return config class TypeTest(TestCase): def test_single_type(self) -> None: class Schema(Config): option = c.Type(str) conf = self.get_config(Schema, {'option': "Testing"}) assert_type(conf.option, str) self.assertEqual(conf.option, "Testing") def test_multiple_types(self) -> None: class Schema(Config): option = c.Type((list, tuple)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) self.assertEqual(conf.option, [1, 2, 3]) conf = self.get_config(Schema, {'option': (1, 2, 3)}) self.assertEqual(conf.option, (1, 2, 3)) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {'a': 1}}) def test_length(self) -> None: class Schema(Config): option = c.Type(str, length=7) conf = self.get_config(Schema, {'option': "Testing"}) assert_type(conf.option, str) self.assertEqual(conf.option, "Testing") with self.expect_error( option="Expected type: with length 7 but received: 'Testing Long' with length 12" ): self.get_config(Schema, {'option': "Testing Long"}) def test_optional_with_default(self) -> None: with self.assertRaisesRegex(ValueError, "doesn't need to be wrapped into Optional"): c.Optional(c.Type(int, default=5)) class ChoiceTest(TestCase): def test_required(self) -> None: class Schema(Config): option = c.Choice(('python', 'node')) conf = self.get_config(Schema, {'option': 'python'}) assert_type(conf.option, str) self.assertEqual(conf.option, 'python') def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.Choice(('python', 'node'))) conf = self.get_config(Schema, {'option': 'python'}) assert_type(conf.option, Optional[str]) self.assertEqual(conf.option, 'python') conf = self.get_config(Schema, {}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) def test_default(self) -> None: class Schema(Config): option = c.Choice(('a', 'b', 'c'), default='b') conf = self.get_config(Schema, {}) assert_type(conf.option, str) self.assertEqual(conf.option, 'b') conf = self.get_config(Schema, {}) self.assertEqual(conf.option, 'b') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, 'b') with self.expect_error(option="Expected one of: ('a', 'b', 'c') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_default(self) -> None: with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c') with self.assertRaises(ValueError): c.Choice(('a', 'b'), default='c', required=True) def test_invalid_choice(self) -> None: class Schema(Config): option = c.Choice(('python', 'node')) with self.expect_error(option="Expected one of: ('python', 'node') but received: 'go'"): self.get_config(Schema, {'option': 'go'}) def test_invalid_choices(self) -> None: with self.assertRaises(ValueError): c.Choice('') with self.assertRaises(ValueError): c.Choice([]) class DeprecatedTest(TestCase): def test_deprecated_option_simple(self) -> None: class Schema(Config): d = c.Deprecated() self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_message(self) -> None: class Schema(Config): d = c.Deprecated(message='custom message for {} key') self.get_config(Schema, {'d': 'value'}, warnings={'d': 'custom message for d key'}) def test_deprecated_option_with_type(self) -> None: class Schema(Config): d = c.Deprecated(option_type=c.Type(str)) self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_deprecated_option_with_invalid_type(self) -> None: class Schema(Config): d = c.Deprecated(option_type=c.Type(list)) with self.expect_error(d="Expected type: but received: "): self.get_config( Schema, {'d': 'value'}, warnings=dict( d="The configuration option 'd' has been deprecated and will be removed in a " "future release." ), ) def test_removed_option(self) -> None: class Schema(Config): d = c.Deprecated(removed=True, moved_to='foo') with self.expect_error( d="The configuration option 'd' was removed from MkDocs. Use 'foo' instead.", ): self.get_config(Schema, {'d': 'value'}) def test_deprecated_option_with_type_undefined(self) -> None: class Schema(Config): option = c.Deprecated(option_type=c.Type(str)) self.get_config(Schema, {'option': None}) def test_deprecated_option_move(self) -> None: class Schema(Config): new = c.Type(str) old = c.Deprecated(moved_to='new') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'new' instead." ), ) self.assertEqual(conf, {'new': 'value', 'old': None}) def test_deprecated_option_move_complex(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'bar': 'value'}, 'old': None}) def test_deprecated_option_move_existing(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') conf = self.get_config( Schema, {'old': 'value', 'foo': {'existing': 'existing'}}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) self.assertEqual(conf, {'foo': {'existing': 'existing', 'bar': 'value'}, 'old': None}) def test_deprecated_option_move_invalid(self) -> None: class Schema(Config): foo = c.Type(dict) old = c.Deprecated(moved_to='foo.bar') with self.expect_error(foo="Expected type: but received: "): self.get_config( Schema, {'old': 'value', 'foo': 'wrong type'}, warnings=dict( old="The configuration option 'old' has been deprecated and will be removed in a " "future release. Use 'foo.bar' instead." ), ) class IpAddressTest(TestCase): class Schema(Config): option = c.IpAddress() def test_valid_address(self) -> None: addr = '127.0.0.1:8000' conf = self.get_config(self.Schema, {'option': addr}) assert_type(conf.option, c._IpAddressValue) assert_type(conf.option.host, str) assert_type(conf.option.port, int) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '127.0.0.1') self.assertEqual(conf.option.port, 8000) def test_valid_IPv6_address(self) -> None: addr = '::1:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '::1') self.assertEqual(conf.option.port, 8000) def test_valid_full_IPv6_address(self) -> None: addr = '[2001:db8:85a3::8a2e:370:7334]:123' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(conf.option.host, '2001:db8:85a3::8a2e:370:7334') self.assertEqual(conf.option.port, 123) def test_named_address(self) -> None: addr = 'localhost:8000' conf = self.get_config(self.Schema, {'option': addr}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, 'localhost') self.assertEqual(conf.option.port, 8000) def test_default_address(self) -> None: addr = '127.0.0.1:8000' class Schema(Config): option = c.IpAddress(default=addr) conf = self.get_config(Schema, {'option': None}) self.assertEqual(str(conf.option), addr) self.assertEqual(conf.option.host, '127.0.0.1') self.assertEqual(conf.option.port, 8000) @unittest.skipIf( sys.version_info < (3, 9, 5), "Leading zeros allowed in IP addresses before Python3.9.5", ) def test_invalid_leading_zeros(self) -> None: with self.expect_error( option="'127.000.000.001' does not appear to be an IPv4 or IPv6 address" ): self.get_config(self.Schema, {'option': '127.000.000.001:8000'}) def test_invalid_address_range(self) -> None: with self.expect_error(option="'277.0.0.1' does not appear to be an IPv4 or IPv6 address"): self.get_config(self.Schema, {'option': '277.0.0.1:8000'}) def test_invalid_address_format(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.18000'}) def test_invalid_address_type(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': 123}) def test_invalid_address_port(self) -> None: with self.expect_error(option="'foo' is not a valid port"): self.get_config(self.Schema, {'option': '127.0.0.1:foo'}) def test_invalid_address_missing_port(self) -> None: with self.expect_error(option="Must be a string of format 'IP:PORT'"): self.get_config(self.Schema, {'option': '127.0.0.1'}) def test_unsupported_address(self) -> None: class Schema(Config): dev_addr = c.IpAddress() self.get_config( Schema, {'dev_addr': '0.0.0.0:8000'}, warnings=dict( dev_addr="The use of the IP address '0.0.0.0' suggests a production " "environment or the use of a proxy to connect to the MkDocs " "server. However, the MkDocs' server is intended for local " "development purposes only. Please use a third party " "production-ready server instead." ), ) def test_unsupported_IPv6_address(self) -> None: class Schema(Config): dev_addr = c.IpAddress() self.get_config( Schema, {'dev_addr': ':::8000'}, warnings=dict( dev_addr="The use of the IP address '::' suggests a production environment " "or the use of a proxy to connect to the MkDocs server. However, " "the MkDocs' server is intended for local development purposes " "only. Please use a third party production-ready server instead." ), ) class URLTest(TestCase): def test_valid_url(self) -> None: class Schema(Config): option = c.URL() conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) assert_type(conf.option, str) self.assertEqual(conf.option, "https://mkdocs.org") conf = self.get_config(Schema, {'option': ""}) self.assertEqual(conf.option, "") def test_valid_url_is_dir(self) -> None: class Schema(Config): option = c.URL(is_dir=True) conf = self.get_config(Schema, {'option': "http://mkdocs.org/"}) self.assertEqual(conf.option, "http://mkdocs.org/") conf = self.get_config(Schema, {'option': "https://mkdocs.org"}) self.assertEqual(conf.option, "https://mkdocs.org/") def test_optional(self): class Schema(Config): option = c.Optional(c.URL(is_dir=True)) conf = self.get_config(Schema, {'option': ''}) self.assertEqual(conf.option, '') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) def test_invalid_url(self) -> None: class Schema(Config): option = c.URL() with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) for url in "www.mkdocs.org", "//mkdocs.org/test", "http:/mkdocs.org/", "/hello/": with self.subTest(url=url): with self.expect_error( option="The URL isn't valid, it should include the http:// (scheme)" ): self.get_config(Schema, {'option': url}) def test_invalid_type(self) -> None: class Schema(Config): option = c.URL() with self.expect_error(option="Expected a string, got "): self.get_config(Schema, {'option': 1}) class EditURITest(TestCase): class Schema(Config): repo_url = c.Optional(c.URL()) repo_name = c.Optional(c.RepoName('repo_url')) edit_uri_template = c.Optional(c.EditURITemplate('edit_uri')) edit_uri = c.Optional(c.EditURI('repo_url')) def test_repo_name_github(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) assert_type(conf.repo_name, Optional[str]) self.assertEqual(conf.repo_name, "GitHub") def test_repo_name_bitbucket(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf.repo_name, "Bitbucket") def test_repo_name_gitlab(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf.repo_name, "GitLab") def test_repo_name_custom(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf.repo_name, "Launchpad") def test_edit_uri_github(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs"}, ) assert_type(conf.edit_uri, Optional[str]) assert_type(conf.repo_url, Optional[str]) self.assertEqual(conf.edit_uri, 'edit/master/docs/') self.assertEqual(conf.repo_url, "https://github.com/mkdocs/mkdocs") def test_edit_uri_bitbucket(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://bitbucket.org/gutworth/six/"}, ) self.assertEqual(conf.edit_uri, 'src/default/docs/') self.assertEqual(conf.repo_url, "https://bitbucket.org/gutworth/six/") def test_edit_uri_gitlab(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://gitlab.com/gitlab-org/gitlab-ce/"}, ) self.assertEqual(conf.edit_uri, 'edit/master/docs/') def test_edit_uri_custom(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://launchpad.net/python-tuskarclient"}, ) self.assertEqual(conf.edit_uri, None) self.assertEqual(conf.repo_url, "https://launchpad.net/python-tuskarclient") def test_repo_name_custom_and_empty_edit_uri(self) -> None: conf = self.get_config( self.Schema, {'repo_url': "https://github.com/mkdocs/mkdocs", 'repo_name': 'mkdocs'}, ) self.assertEqual(conf.edit_uri, 'edit/master/docs/') def test_edit_uri_template_ok(self) -> None: conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/foo/docs/{path}', }, ) assert_type(conf.edit_uri_template, Optional[str]) self.assertEqual(conf.edit_uri_template, 'edit/foo/docs/{path}') def test_edit_uri_template_errors(self) -> None: with self.expect_error( edit_uri_template=re.compile(r'.*[{}].*') # Complains about unclosed '{' or missing '}' ): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path', }, ) with self.expect_error(edit_uri_template=re.compile(r'.*\bz\b.*')): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{path!z}', }, ) with self.expect_error(edit_uri_template="Unknown template substitute: 'foo'"): self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri_template': 'edit/master/{foo}', }, ) def test_edit_uri_template_warning(self) -> None: conf = self.get_config( self.Schema, { 'repo_url': "https://github.com/mkdocs/mkdocs", 'edit_uri': 'edit', 'edit_uri_template': 'edit/master/{path}', }, warnings=dict( edit_uri_template="The option 'edit_uri' has no effect when 'edit_uri_template' is set." ), ) self.assertEqual(conf.edit_uri_template, 'edit/master/{path}') class ListOfItemsTest(TestCase): def test_int_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': [1, 2, 3]}) assert_type(conf.option, List[int]) self.assertEqual(conf.option, [1, 2, 3]) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': [1, None, 3]}) def test_combined_float_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': [1.4, 2, 3]}) self.assertEqual(conf.option, [1.4, 2, 3]) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': ['a']}) def test_list_default(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(int), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.option, List[int]) self.assertEqual(conf.option, []) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) def test_none_without_default(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.ListOfItems(c.Type(str))) conf = self.get_config(Schema, {}) assert_type(conf.option, Optional[List[str]]) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_list_of_optional(self) -> None: class Schema(Config): option = c.ListOfItems(c.Optional(c.Type(int)), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.option, List[Optional[int]]) self.assertEqual(conf.option, []) conf = self.get_config(Schema, {'option': [4, None]}) self.assertEqual(conf.option, [4, None]) with self.expect_error(option="Expected type: but received: "): conf = self.get_config(Schema, {'option': ['foo']}) self.assertEqual(conf.option, ['foo']) def test_string_not_a_list_of_strings(self) -> None: class Schema(Config): option = c.ListOfItems(c.Type(str)) with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self) -> None: class Schema(Config): option = c.ListOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config(Schema, {'option': ["localhost:8000", "1.2.3.4:asdf"]}) def test_warning(self) -> None: class Schema(Config): option = c.ListOfItems(c.Deprecated()) self.get_config( Schema, {'option': ['a']}, warnings=dict( option="The configuration option 'option[0]' has been " "deprecated and will be removed in a future release." ), ) class ExtraScriptsTest(TestCase): def test_js_async(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config(Schema, {'option': ['foo.js', {'path': 'bar.js', 'async': True}]}) assert_type(conf.option, List[Union[c.ExtraScriptValue, str]]) self.assertEqual(len(conf.option), 2) self.assertIsInstance(conf.option[1], c.ExtraScriptValue) self.assertEqual( conf.option, [ 'foo.js', {'path': 'bar.js', 'type': '', 'defer': False, 'async': True}, ], ) def test_mjs(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config( Schema, {'option': ['foo.mjs', {'path': 'bar.js', 'type': 'module'}]} ) assert_type(conf.option, List[Union[c.ExtraScriptValue, str]]) self.assertEqual(len(conf.option), 2) self.assertIsInstance(conf.option[0], c.ExtraScriptValue) self.assertEqual( conf.option, [ {'path': 'foo.mjs', 'type': 'module', 'defer': False, 'async': False}, {'path': 'bar.js', 'type': 'module', 'defer': False, 'async': False}, ], ) def test_wrong_type(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) with self.expect_error( option="The configuration is invalid. Expected a key-value mapping (dict) but received: " ): self.get_config(Schema, {'option': [1]}) def test_unknown_key(self) -> None: class Schema(Config): option = c.ListOfItems(c.ExtraScript(), default=[]) conf = self.get_config( Schema, {'option': [{'path': 'foo.js', 'foo': 'bar'}]}, warnings=dict(option="Sub-option 'foo': Unrecognised configuration name: foo"), ) self.assertEqual( conf.option, [{'path': 'foo.js', 'type': '', 'defer': False, 'async': False, 'foo': 'bar'}], ) class DictOfItemsTest(TestCase): def test_int_type(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int)) conf = self.get_config(Schema, {'option': {"a": 1, "b": 2}}) assert_type(conf.option, Dict[str, int]) self.assertEqual(conf.option, {"a": 1, "b": 2}) with self.expect_error( option="Expected type: but received: " ): conf = self.get_config(Schema, {'option': {"a": 1, "b": None}}) def test_combined_float_type(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type((int, float))) conf = self.get_config(Schema, {'option': {"a": 1, "b": 2.3}}) self.assertEqual(conf.option, {"a": 1, "b": 2.3}) with self.expect_error( option="Expected type: (, ) but received: " ): self.get_config(Schema, {'option': {"a": 1, "b": "2"}}) def test_dict_default(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int), default={}) conf = self.get_config(Schema, {}) assert_type(conf.option, Dict[str, int]) self.assertEqual(conf.option, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) def test_none_without_default(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(str)) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(option="Required configuration not provided."): conf = self.get_config(Schema, {'option': None}) conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_optional(self) -> None: class Schema(Config): option = c.Optional(c.DictOfItems(c.Type(str))) conf = self.get_config(Schema, {}) assert_type(conf.option, Optional[Dict[str, str]]) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option, None) conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_dict_of_optional(self) -> None: class Schema(Config): option = c.DictOfItems(c.Optional(c.Type(int)), default={}) conf = self.get_config(Schema, {}) assert_type(conf.option, Dict[str, Optional[int]]) self.assertEqual(conf.option, {}) conf = self.get_config(Schema, {'option': {"a": 1, "b": None}}) self.assertEqual(conf.option, {"a": 1, "b": None}) with self.expect_error(option="Expected type: but received: "): conf = self.get_config(Schema, {'option': {"foo": "bar"}}) self.assertEqual(conf.option, {"foo": "bar"}) def test_string_not_a_dict_of_strings(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(str)) with self.expect_error(option="Expected a dict of items, but a was given."): self.get_config(Schema, {'option': 'foo'}) def test_post_validation_error(self) -> None: class Schema(Config): option = c.DictOfItems(c.IpAddress()) with self.expect_error(option="'asdf' is not a valid port"): self.get_config( Schema, {'option': {"ip_foo": "localhost:8000", "ip_bar": "1.2.3.4:asdf"}} ) def test_all_keys_are_strings(self) -> None: class Schema(Config): option = c.DictOfItems(c.Type(int)) with self.expect_error( option="Expected type: for keys, but received: (key=2)" ): self.get_config(Schema, {'option': {"a": 1, 2: 3}}) class FilesystemObjectTest(TestCase): def test_valid_dir(self) -> None: for cls in c.Dir, c.FilesystemObject: with self.subTest(cls): d = os.path.dirname(__file__) class Schema(Config): option = cls(exists=True) conf = self.get_config(Schema, {'option': d}) assert_type(conf.option, str) self.assertEqual(conf.option, d) def test_valid_file(self) -> None: for cls in c.File, c.FilesystemObject: with self.subTest(cls): f = __file__ class Schema(Config): option = cls(exists=True) conf = self.get_config(Schema, {'option': f}) assert_type(conf.option, str) self.assertEqual(conf.option, f) def test_missing_without_exists(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema(Config): option = cls() conf = self.get_config(Schema, {'option': d}) assert_type(conf.option, str) self.assertEqual(conf.option, os.path.abspath(d)) def test_missing_but_required(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): d = os.path.join("not", "a", "real", "path", "I", "hope") class Schema(Config): option = cls(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing .+")): self.get_config(Schema, {'option': d}) def test_not_a_dir(self) -> None: d = __file__ class Schema(Config): option = c.Dir(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing directory.")): self.get_config(Schema, {'option': d}) def test_not_a_file(self) -> None: d = os.path.dirname(__file__) class Schema(Config): option = c.File(exists=True) with self.expect_error(option=re.compile(r"The path '.+' isn't an existing file.")): self.get_config(Schema, {'option': d}) def test_incorrect_type_error(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema(Config): option = cls() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': 1}) with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': []}) def test_with_unicode(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): class Schema(Config): dir = cls() conf = self.get_config(Schema, {'dir': 'юникод'}) self.assertIsInstance(conf.dir, str) def test_dir_bytes(self) -> None: class Schema(Config): dir = c.Dir() with self.expect_error(dir="Expected type: but received: "): self.get_config(Schema, {'dir': b'foo'}) def test_config_dir_prepended(self) -> None: for cls in c.Dir, c.File, c.FilesystemObject: with self.subTest(cls): base_path = os.path.dirname(os.path.abspath(__file__)) class Schema(Config): dir = cls() conf = self.get_config( Schema, {'dir': 'foo'}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf.dir, os.path.join(base_path, 'foo')) def test_site_dir_is_config_dir_fails(self) -> None: class Schema(Config): dir = c.DocsDir() with self.expect_error( dir="The 'dir' should not be the parent directory of the config file. " "Use a child directory instead so that the 'dir' is a sibling of the config file." ): self.get_config( Schema, {'dir': '.'}, config_file_path=os.path.join(os.path.abspath('.'), 'mkdocs.yml'), ) class ListOfPathsTest(TestCase): def test_valid_path(self) -> None: paths = [os.path.dirname(__file__)] class Schema(Config): option = c.ListOfPaths() self.get_config(Schema, {'option': paths}) def test_missing_path(self) -> None: paths = [os.path.join("does", "not", "exist", "i", "hope")] class Schema(Config): option = c.ListOfPaths() with self.expect_error( option=f"The path '{paths[0]}' isn't an existing file or directory." ): self.get_config(Schema, {'option': paths}) def test_non_path(self) -> None: paths = [os.path.dirname(__file__), None] class Schema(Config): option = c.ListOfPaths() with self.expect_error( option="Expected type: but received: " ): self.get_config(Schema, {'option': paths}) def test_empty_list(self) -> None: class Schema(Config): option = c.ListOfPaths() conf = self.get_config(Schema, {'option': []}) assert_type(conf.option, List[str]) self.assertEqual(conf.option, []) def test_none(self) -> None: class Schema(Config): option = c.ListOfPaths() with self.expect_error(option="Required configuration not provided."): self.get_config(Schema, {'option': None}) def test_non_list(self) -> None: paths = os.path.dirname(__file__) class Schema(Config): option = c.ListOfPaths() with self.expect_error(option="Expected a list of items, but a was given."): self.get_config(Schema, {'option': paths}) def test_file(self) -> None: paths = [__file__] class Schema(Config): option = c.ListOfPaths() conf = self.get_config(Schema, {'option': paths}) assert_type(conf.option, List[str]) @tempdir() def test_paths_localized_to_config(self, base_path) -> None: with open(os.path.join(base_path, 'foo'), 'w') as f: f.write('hi') class Schema(Config): watch = c.ListOfPaths() conf = self.get_config( Schema, {'watch': ['foo']}, config_file_path=os.path.join(base_path, 'mkdocs.yml'), ) self.assertEqual(conf.watch, [os.path.join(base_path, 'foo')]) class SiteDirTest(TestCase): class Schema(Config): site_dir = c.SiteDir() docs_dir = c.Dir() def test_doc_dir_in_site_dir(self) -> None: j = os.path.join # The parent dir is not the same on every system, so use the actual dir name parent_dir = mkdocs.__file__.split(os.sep)[-3] test_configs = ( {'docs_dir': j('site', 'docs'), 'site_dir': 'site'}, {'docs_dir': 'docs', 'site_dir': '.'}, {'docs_dir': '.', 'site_dir': '.'}, {'docs_dir': 'docs', 'site_dir': ''}, {'docs_dir': '', 'site_dir': ''}, {'docs_dir': j('..', parent_dir, 'docs'), 'site_dir': 'docs'}, {'docs_dir': 'docs', 'site_dir': '/'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'docs_dir' should not be within the 'site_dir'.*") ): self.get_config(self.Schema, test_config) def test_site_dir_in_docs_dir(self) -> None: j = os.path.join test_configs = ( {'docs_dir': 'docs', 'site_dir': j('docs', 'site')}, {'docs_dir': '.', 'site_dir': 'site'}, {'docs_dir': '', 'site_dir': 'site'}, {'docs_dir': '/', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): with self.expect_error( site_dir=re.compile(r"The 'site_dir' should not be within the 'docs_dir'.*") ): self.get_config(self.Schema, test_config) def test_common_prefix(self) -> None: """Legitimate settings with common prefixes should not fail validation.""" test_configs = ( {'docs_dir': 'docs', 'site_dir': 'docs-site'}, {'docs_dir': 'site-docs', 'site_dir': 'site'}, ) for test_config in test_configs: with self.subTest(test_config): self.get_config(self.Schema, test_config) class ThemeTest(TestCase): def test_theme_as_string(self) -> None: class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': "mkdocs"}) assert_type(conf.option, Theme) assert_type(conf.option.name, Optional[str]) self.assertEqual(conf.option.name, 'mkdocs') def test_uninstalled_theme_as_string(self) -> None: class Schema(Config): theme = c.Theme() plugins = c.Plugins(theme_key='theme') with self.expect_error( theme=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'theme': "mkdocs2", 'plugins': "search"}) def test_theme_default(self) -> None: class Schema(Config): option = c.Theme(default='mkdocs') conf = self.get_config(Schema, {'option': None}) self.assertEqual(conf.option.name, 'mkdocs') def test_theme_as_simple_config(self) -> None: config = { 'name': 'mkdocs', } class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf.option.name, 'mkdocs') @tempdir() def test_theme_as_complex_config(self, custom_dir) -> None: config = { 'name': 'mkdocs', 'custom_dir': custom_dir, 'static_templates': ['sitemap.html'], 'show_sidebar': False, } class Schema(Config): option = c.Theme() conf = self.get_config(Schema, {'option': config}) self.assertEqual(conf.option.name, 'mkdocs') self.assertEqual(conf.option.custom_dir, custom_dir) self.assertIn(custom_dir, conf.option.dirs) self.assertEqual( conf.option.static_templates, {'404.html', 'sitemap.xml', 'sitemap.html'}, ) self.assertEqual(conf.option['show_sidebar'], False) def test_theme_name_is_none(self) -> None: config = { 'name': None, } class Schema(Config): option = c.Theme() with self.expect_error(option="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, {'option': config}) def test_theme_config_missing_name(self) -> None: config = { 'custom_dir': 'custom', } class Schema(Config): option = c.Theme() with self.expect_error(option="No theme name set."): self.get_config(Schema, {'option': config}) def test_uninstalled_theme_as_config(self) -> None: config = { 'name': 'mkdocs2', } class Schema(Config): option = c.Theme() with self.expect_error( option=re.compile( r"Unrecognised theme name: 'mkdocs2'. The available installed themes are: .+" ) ): self.get_config(Schema, {'option': config}) def test_theme_invalid_type(self) -> None: config = ['mkdocs2'] class Schema(Config): option = c.Theme() with self.expect_error( option="Invalid type . Expected a string or key/value pairs." ): self.get_config(Schema, {'option': config}) def test_post_validation_none_theme_name_and_missing_custom_dir(self) -> None: config = { 'theme': { 'name': None, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="At least one of 'name' or 'custom_dir' must be defined."): self.get_config(Schema, config) @tempdir() def test_post_validation_inexisting_custom_dir(self, abs_base_path) -> None: path = os.path.join(abs_base_path, 'inexisting_custom_dir') config = { 'theme': { 'name': None, 'custom_dir': path, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme=f"The path set in custom_dir ('{path}') does not exist."): self.get_config(Schema, config) def test_post_validation_locale_none(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': None, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale_invalid_type(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': 0, }, } class Schema(Config): theme = c.Theme() with self.expect_error(theme="'locale' must be a string."): self.get_config(Schema, config) def test_post_validation_locale(self) -> None: config = { 'theme': { 'name': 'mkdocs', 'locale': 'fr', }, } class Schema(Config): theme = c.Theme() conf = self.get_config(Schema, config) self.assertEqual(conf.theme.locale.language, 'fr') class NavTest(TestCase): class Schema(Config): option = c.Nav() def test_old_format(self) -> None: with self.expect_error( option="Expected nav item to be a string or dict, got a list: ['index.md']" ): self.get_config(self.Schema, {'option': [['index.md']]}) def test_provided_dict(self) -> None: conf = self.get_config(self.Schema, {'option': ['index.md', {"Page": "page.md"}]}) self.assertEqual(conf.option, ['index.md', {'Page': 'page.md'}]) def test_provided_empty(self) -> None: conf = self.get_config(self.Schema, {'option': []}) self.assertEqual(conf.option, None) def test_normal_nav(self) -> None: nav_yaml = textwrap.dedent( '''\ - Home: index.md - getting-started.md - User Guide: - Overview: user-guide/index.md - Installation: user-guide/installation.md ''' ) nav = yaml_load(io.StringIO(nav_yaml)) conf = self.get_config(self.Schema, {'option': nav}) self.assertEqual(conf.option, nav) def test_invalid_type_dict(self) -> None: with self.expect_error(option="Expected nav to be a list, got a dict: {}"): self.get_config(self.Schema, {'option': {}}) def test_invalid_type_int(self) -> None: with self.expect_error(option="Expected nav to be a list, got a int: 5"): self.get_config(self.Schema, {'option': 5}) def test_invalid_item_int(self) -> None: with self.expect_error(option="Expected nav item to be a string or dict, got a int: 1"): self.get_config(self.Schema, {'option': [1]}) def test_invalid_item_none(self) -> None: with self.expect_error(option="Expected nav item to be a string or dict, got None"): self.get_config(self.Schema, {'option': [None]}) def test_invalid_children_config_int(self) -> None: with self.expect_error(option="Expected nav to be a list, got a int: 1"): self.get_config(self.Schema, {'option': [{"foo.md": [{"bar.md": 1}]}]}) def test_invalid_children_config_none(self) -> None: with self.expect_error(option="Expected nav to be a list, got None"): self.get_config(self.Schema, {'option': [{"foo.md": None}]}) def test_invalid_children_empty_dict(self) -> None: nav = ['foo', {}] with self.expect_error(option="Expected nav item to be a dict of size 1, got a dict: {}"): self.get_config(self.Schema, {'option': nav}) def test_invalid_nested_list(self) -> None: nav = [{'aaa': [[{"bbb": "user-guide/index.md"}]]}] with self.expect_error( option="Expected nav item to be a string or dict, got a list: [{'bbb': 'user-guide/index.md'}]" ): self.get_config(self.Schema, {'option': nav}) def test_invalid_children_oversized_dict(self) -> None: nav = [{"aaa": [{"bbb": "user-guide/index.md", "ccc": "user-guide/installation.md"}]}] with self.expect_error( option="Expected nav item to be a dict of size 1, got dict with keys ('bbb', 'ccc')" ): self.get_config(self.Schema, {'option': nav}) def test_warns_for_dict(self) -> None: self.get_config( self.Schema, {'option': [{"a": {"b": "c.md", "d": "e.md"}}]}, warnings=dict(option="Expected nav to be a list, got dict with keys ('b', 'd')"), ) class PrivateTest(TestCase): def test_defined(self) -> None: class Schema(Config): option = c.Private[Any]() with self.expect_error(option="For internal use only."): self.get_config(Schema, {'option': 'somevalue'}) class SubConfigTest(TestCase): def test_subconfig_wrong_type(self) -> None: # Test that an error is raised if subconfig does not receive a dict class Schema(Config): option = c.SubConfig() for val in "not_a_dict", ("not_a_dict",), ["not_a_dict"]: with self.subTest(val): with self.expect_error( option=re.compile( r"The configuration is invalid. Expected a key-value mapping " r"\(dict\) but received: .+" ) ): self.get_config(Schema, {'option': val}) def test_subconfig_unknown_option(self) -> None: class Schema(Config): option = c.SubConfig(validate=True) conf = self.get_config( Schema, {'option': {'unknown': 0}}, warnings=dict(option="Sub-option 'unknown': Unrecognised configuration name: unknown"), ) self.assertEqual(conf.option, {"unknown": 0}) def test_subconfig_invalid_option(self) -> None: class Sub(Config): cc = c.Choice(('foo', 'bar')) class Schema(Config): option = c.SubConfig(Sub) with self.expect_error( option="Sub-option 'cc': Expected one of: ('foo', 'bar') but received: True" ): self.get_config(Schema, {'option': {'cc': True}}) def test_subconfig_normal(self) -> None: class Sub(Config): cc = c.Choice(('foo', 'bar')) class Schema(Config): option = c.SubConfig(Sub) conf = self.get_config(Schema, {'option': {'cc': 'foo'}}) assert_type(conf.option, Sub) self.assertEqual(conf.option, {'cc': 'foo'}) assert_type(conf.option.cc, str) self.assertEqual(conf.option.cc, 'foo') def test_subconfig_with_multiple_items(self) -> None: # This had a bug where subsequent items would get merged into the same dict. class Sub(Config): value = c.Type(str) class Schema(Config): the_items = c.ListOfItems(c.SubConfig(Sub)) conf = self.get_config( Schema, { 'the_items': [ {'value': 'a'}, {'value': 'b'}, ] }, ) assert_type(conf.the_items, List[Sub]) self.assertEqual(conf.the_items, [{'value': 'a'}, {'value': 'b'}]) assert_type(conf.the_items[1].value, str) self.assertEqual(conf.the_items[1].value, 'b') def test_optional(self) -> None: class Sub(Config): opt = c.Optional(c.Type(int)) class Schema(Config): sub = c.Optional(c.ListOfItems(c.SubConfig(Sub))) conf = self.get_config(Schema, {}) self.assertEqual(conf.sub, None) conf = self.get_config(Schema, {'sub': None}) self.assertEqual(conf.sub, None) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {}]}) assert_type(conf.sub, Optional[List[Sub]]) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': None}]) assert conf.sub is not None assert_type(conf.sub[0].opt, Optional[int]) self.assertEqual(conf.sub[0].opt, 1) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': 2}]) def test_required(self) -> None: class Sub(Config): opt = c.Type(int) class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub)) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {}) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'asdf'}, {}]}) conf = self.get_config(Schema, {'sub': []}) conf = self.get_config(Schema, {'sub': [{'opt': 1}, {'opt': 2}]}) assert_type(conf.sub, List[Sub]) self.assertEqual(conf.sub, [{'opt': 1}, {'opt': 2}]) assert_type(conf.sub[0].opt, int) self.assertEqual(conf.sub[0].opt, 1) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="Sub-option 'opt': Expected type: but received: " ): conf = self.get_config(Schema, {'sub': [{'opt': 'z'}, {'opt': 2}]}) with self.expect_error( sub="The configuration is invalid. Expected a key-value mapping " "(dict) but received: " ): conf = self.get_config(Schema, {'sub': [1, 2]}) def test_default(self) -> None: class Sub(Config): opt = c.Type(int) class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub), default=[]) conf = self.get_config(Schema, {}) assert_type(conf.sub, List[Sub]) self.assertEqual(conf.sub, []) with self.expect_error(sub="Required configuration not provided."): conf = self.get_config(Schema, {'sub': None}) def test_config_file_path_pass_through(self) -> None: """Necessary to ensure FilesystemObject validates the correct path""" passed_config_path = None class SubType(c.BaseConfigOption): def pre_validation(self, config: Config, key_name: str) -> None: nonlocal passed_config_path passed_config_path = config.config_file_path class Sub(Config): opt = SubType() class Schema(Config): sub = c.ListOfItems(c.SubConfig(Sub), default=[]) config_path = "foo/mkdocs.yaml" self.get_config(Schema, {"sub": [{"opt": "bar"}]}, config_file_path=config_path) self.assertEqual(passed_config_path, config_path) class NestedSubConfigTest(TestCase): def defaults(self): return { 'nav': { 'omitted_files': logging.INFO, 'not_found': logging.WARNING, 'absolute_links': logging.INFO, }, 'links': { 'not_found': logging.WARNING, 'absolute_links': logging.INFO, 'unrecognized_links': logging.INFO, }, } class Schema(Config): validation = c.PropagatingSubConfig[defaults.MkDocsConfig.Validation]() def test_unspecified(self) -> None: for cfg in {}, {'validation': {}}: with self.subTest(cfg): conf = self.get_config( self.Schema, {}, ) self.assertEqual(conf.validation, self.defaults()) def test_sets_nested_and_not_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'not_found': 'ignore', 'links': {'absolute_links': 'warn'}}}, ) expected = self.defaults() expected['nav']['not_found'] = logging.DEBUG expected['links']['not_found'] = logging.DEBUG expected['links']['absolute_links'] = logging.WARNING self.assertEqual(conf.validation, expected) def test_sets_nested_different(self) -> None: conf = self.get_config( self.Schema, {'validation': {'not_found': 'ignore', 'links': {'not_found': 'warn'}}}, ) expected = self.defaults() expected['nav']['not_found'] = logging.DEBUG expected['links']['not_found'] = logging.WARNING self.assertEqual(conf.validation, expected) def test_sets_only_one_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'omitted_files': 'ignore'}}, ) expected = self.defaults() expected['nav']['omitted_files'] = logging.DEBUG self.assertEqual(conf.validation, expected) def test_sets_nested_not_dict(self) -> None: with self.expect_error( validation="Sub-option 'links': Sub-option 'unrecognized_links': Expected a string, but a was given." ): self.get_config( self.Schema, {'validation': {'unrecognized_links': [], 'links': {'absolute_links': 'warn'}}}, ) def test_wrong_key_nested(self) -> None: conf = self.get_config( self.Schema, {'validation': {'foo': 'warn', 'not_found': 'warn'}}, warnings=dict(validation="Sub-option 'foo': Unrecognised configuration name: foo"), ) expected = self.defaults() expected['nav']['not_found'] = logging.WARNING expected['links']['not_found'] = logging.WARNING expected['foo'] = 'warn' self.assertEqual(conf.validation, expected) def test_wrong_type_nested(self) -> None: with self.expect_error( validation="Sub-option 'nav': Sub-option 'omitted_files': Expected one of ['warn', 'info', 'ignore'], got 'hi'" ): self.get_config( self.Schema, {'validation': {'omitted_files': 'hi'}}, ) class MarkdownExtensionsTest(TestCase): @patch('markdown.Markdown') def test_simple_list(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) assert_type(conf.markdown_extensions, List[str]) assert_type(conf.mdx_configs, Dict[str, dict]) self.assertEqual(conf.markdown_extensions, ['foo', 'bar']) self.assertEqual(conf.mdx_configs, {}) @patch('markdown.Markdown') def test_list_dicts(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, {'bar': {'bar_option': 'bar value'}}, {'baz': None}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar', 'baz']) self.assertEqual( conf.mdx_configs, { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_mixed_list(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ 'foo', {'bar': {'bar_option': 'bar value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar']) self.assertEqual( conf.mdx_configs, { 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_dict_of_dicts(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, 'baz': {}, } } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo', 'bar', 'baz']) self.assertEqual( conf.mdx_configs, { 'foo': {'foo_option': 'foo value'}, 'bar': {'bar_option': 'bar value'}, }, ) @patch('markdown.Markdown') def test_builtins(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['foo', 'bar'], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc', 'foo', 'bar']) self.assertEqual(conf.mdx_configs, {}) def test_duplicates(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': ['meta', 'toc'], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc']) self.assertEqual(conf.mdx_configs, {}) def test_builtins_config(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(builtins=['meta', 'toc']) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'toc': {'permalink': True}}, ], } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['meta', 'toc']) self.assertEqual(conf.mdx_configs, {'toc': {'permalink': True}}) @patch('markdown.Markdown') def test_configkey(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(configkey='bar') bar = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': [ {'foo': {'foo_option': 'foo value'}}, ] } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, ['foo']) self.assertEqual( conf.bar, { 'foo': {'foo_option': 'foo value'}, }, ) def test_missing_default(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() conf = self.get_config(Schema, {}) self.assertEqual(conf.markdown_extensions, []) self.assertEqual(conf.mdx_configs, {}) def test_none(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions(default=[]) mdx_configs = c.Private[Dict[str, dict]]() config = { 'markdown_extensions': None, } conf = self.get_config(Schema, config) self.assertEqual(conf.markdown_extensions, []) self.assertEqual(conf.mdx_configs, {}) @patch('markdown.Markdown') def test_not_list(self, mock_md) -> None: class Schema(Config): option = c.MarkdownExtensions() with self.expect_error(option="Invalid Markdown Extensions configuration"): self.get_config(Schema, {'option': 'not a list'}) @patch('markdown.Markdown') def test_invalid_config_option(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'foo': 'not a dict'}, ], } with self.expect_error( markdown_extensions="Invalid config options for Markdown Extension 'foo'." ): self.get_config(Schema, config) @patch('markdown.Markdown') def test_invalid_config_item(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ ['not a dict'], ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) @patch('markdown.Markdown') def test_invalid_dict_item(self, mock_md) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': [ {'key1': 'value', 'key2': 'too many keys'}, ], } with self.expect_error(markdown_extensions="Invalid Markdown Extensions configuration"): self.get_config(Schema, config) def test_unknown_extension(self) -> None: class Schema(Config): markdown_extensions = c.MarkdownExtensions() config = { 'markdown_extensions': ['unknown'], } with self.expect_error( markdown_extensions=re.compile(r"Failed to load extension 'unknown'.\n.+") ): self.get_config(Schema, config) def test_multiple_markdown_config_instances(self) -> None: # This had a bug where an extension config would persist to separate # config instances that didn't specify extensions. class Schema(Config): markdown_extensions = c.MarkdownExtensions() mdx_configs = c.Private[Dict[str, dict]]() conf = self.get_config( Schema, { 'markdown_extensions': [{'toc': {'permalink': '##'}}], }, ) self.assertEqual(conf.mdx_configs['toc'], {'permalink': '##'}) conf = self.get_config( Schema, {}, ) self.assertIsNone(conf.mdx_configs.get('toc')) class _FakePluginConfig(Config): foo = c.Type(str, default='default foo') bar = c.Type(int, default=0) dir = c.Optional(c.Dir(exists=False)) class FakePlugin(BasePlugin[_FakePluginConfig]): pass class _FakePlugin2Config(_FakePluginConfig): depr = c.Deprecated() class FakePlugin2(BasePlugin[_FakePlugin2Config]): supports_multiple_instances = True class ThemePlugin(BasePlugin[_FakePluginConfig]): pass class ThemePlugin2(BasePlugin[_FakePluginConfig]): pass class FakeEntryPoint: def __init__(self, name, cls): self.name = name self.cls = cls def load(self): return self.cls @patch( 'mkdocs.plugins.entry_points', return_value=[ FakeEntryPoint('sample', FakePlugin), FakeEntryPoint('sample2', FakePlugin2), FakeEntryPoint('readthedocs/sub_plugin', ThemePlugin), FakeEntryPoint('overridden', FakePlugin2), FakeEntryPoint('readthedocs/overridden', ThemePlugin2), ], ) class PluginsTest(TestCase): def test_plugin_config_without_options(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': ['sample'], } conf = self.get_config(Schema, cfg) assert_type(conf.plugins, PluginCollection) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) plugin = conf.plugins['sample'] assert_type(plugin, BasePlugin) self.assertIsInstance(plugin, FakePlugin) self.assertIsInstance(plugin.config, _FakePluginConfig) expected = { 'foo': 'default foo', 'bar': 0, 'dir': None, } self.assertEqual(plugin.config, expected) def test_plugin_config_with_options(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [ { 'sample': { 'foo': 'foo value', 'bar': 42, }, } ], } conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'foo value', 'bar': 42, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_as_dict(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': { 'sample': { 'foo': 'foo value', 'bar': 42, }, }, } conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'foo value', 'bar': 42, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_with_explicit_theme_namespace(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['readthedocs/sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) cfg = {'plugins': ['readthedocs/sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) def test_plugin_config_with_deduced_theme_namespace(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['sub_plugin']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/sub_plugin'}) self.assertIsInstance(conf.plugins['readthedocs/sub_plugin'], ThemePlugin) cfg = {'plugins': ['sub_plugin']} with self.expect_error(plugins='The "sub_plugin" plugin is not installed'): self.get_config(Schema, cfg) def test_plugin_config_with_deduced_theme_namespace_overridden(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'readthedocs/overridden'}) self.assertIsInstance(next(iter(conf.plugins.values())), ThemePlugin2) cfg = {'plugins': ['overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(conf.plugins['overridden'], FakePlugin2) def test_plugin_config_with_explicit_empty_namespace(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = {'theme': 'readthedocs', 'plugins': ['/overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(next(iter(conf.plugins.values())), FakePlugin2) cfg = {'plugins': ['/overridden']} conf = self.get_config(Schema, cfg) self.assertEqual(set(conf.plugins), {'overridden'}) self.assertIsInstance(conf.plugins['overridden'], FakePlugin2) def test_plugin_config_with_multiple_instances(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') cfg = { 'plugins': [ {'sample2': {'foo': 'foo value', 'bar': 42}}, {'sample2': {'foo': 'foo2 value'}}, ], } conf = self.get_config(Schema, cfg) self.assertEqual( set(conf.plugins), {'sample2', 'sample2 #2'}, ) self.assertEqual(conf.plugins['sample2'].config['bar'], 42) self.assertEqual(conf.plugins['sample2 #2'].config['bar'], 0) def test_plugin_config_with_multiple_instances_and_warning(self, mock_class) -> None: class Schema(Config): theme = c.Theme(default='mkdocs') plugins = c.Plugins(theme_key='theme') test_cfgs: list[dict[str, Any]] = [ { 'theme': 'readthedocs', 'plugins': [{'sub_plugin': {}}, {'sample2': {}}, {'sub_plugin': {}}, 'sample2'], }, { 'theme': 'readthedocs', 'plugins': ['sub_plugin', 'sample2', 'sample2', 'sub_plugin'], }, ] for cfg in test_cfgs: conf = self.get_config( Schema, cfg, warnings=dict( plugins="Plugin 'readthedocs/sub_plugin' was specified multiple times - " "this is likely a mistake, because the plugin doesn't declare " "`supports_multiple_instances`." ), ) self.assertEqual( set(conf.plugins), {'readthedocs/sub_plugin', 'readthedocs/sub_plugin #2', 'sample2', 'sample2 #2'}, ) def test_plugin_config_empty_list_with_empty_default(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins(default=[]) cfg: dict[str, Any] = {'plugins': []} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_empty_list_with_default(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) # Default is ignored cfg: dict[str, Any] = {'plugins': []} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_none_with_empty_default(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins(default=[]) cfg = {'plugins': None} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertEqual(len(conf.plugins), 0) def test_plugin_config_none_with_default(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) # Default is used. cfg = {'plugins': None} conf = self.get_config(Schema, cfg) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample', conf.plugins) self.assertIsInstance(conf.plugins['sample'], BasePlugin) expected = { 'foo': 'default foo', 'bar': 0, 'dir': None, } self.assertEqual(conf.plugins['sample'].config, expected) def test_plugin_config_uninstalled(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = {'plugins': ['uninstalled']} with self.expect_error(plugins='The "uninstalled" plugin is not installed'): self.get_config(Schema, cfg) def test_plugin_config_not_list(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = {'plugins': 'sample'} with self.expect_error(plugins="Invalid Plugins configuration. Expected a list or dict."): self.get_config(Schema, cfg) def test_plugin_config_multivalue_dict(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [ { 'sample': { 'foo': 'foo value', 'bar': 42, }, 'extra_key': 'baz', } ], } with self.expect_error(plugins="Invalid Plugins configuration"): self.get_config(Schema, cfg) cfg = { 'plugins': [ {}, ], } with self.expect_error(plugins="Invalid Plugins configuration"): self.get_config(Schema, cfg) def test_plugin_config_not_string_or_dict(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [('not a string or dict',)], } with self.expect_error(plugins="'('not a string or dict',)' is not a valid plugin name."): self.get_config(Schema, cfg) def test_plugin_config_options_not_dict(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': [{'sample': 'not a dict'}], } with self.expect_error(plugins="Invalid config options for the 'sample' plugin."): self.get_config(Schema, cfg) def test_plugin_config_sub_error(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins(default=['sample']) cfg = { 'plugins': { 'sample': {'bar': 'not an int'}, } } with self.expect_error( plugins="Plugin 'sample' option 'bar': Expected type: but received: " ): self.get_config(Schema, cfg) def test_plugin_config_sub_warning(self, mock_class) -> None: class Schema(Config): plugins = c.Plugins() cfg = { 'plugins': { 'sample2': {'depr': 'deprecated value'}, } } conf = self.get_config( Schema, cfg, warnings=dict( plugins="Plugin 'sample2' option 'depr': The configuration option " "'depr' has been deprecated and will be removed in a future release." ), ) self.assertIsInstance(conf.plugins, PluginCollection) self.assertIn('sample2', conf.plugins) class HooksTest(TestCase): class Schema(Config): plugins = c.Plugins(default=[]) hooks = c.Hooks('plugins') @tempdir() def test_hooks(self, src_dir) -> None: write_file( b'def on_page_markdown(markdown, **kwargs): return markdown.replace("f", "z")', os.path.join(src_dir, 'hooks', 'my_hook.py'), ) write_file( b'foo foo', os.path.join(src_dir, 'docs', 'index.md'), ) conf = self.get_config( self.Schema, {'hooks': ['hooks/my_hook.py']}, config_file_path=os.path.join(src_dir, 'mkdocs.yml'), ) self.assertIn('hooks/my_hook.py', conf.plugins) hook = conf.plugins['hooks/my_hook.py'] self.assertTrue(hasattr(hook, 'on_page_markdown')) self.assertEqual( {**conf.plugins.events, 'page_markdown': [hook.on_page_markdown]}, conf.plugins.events, ) self.assertEqual(hook.on_page_markdown('foo foo'), 'zoo zoo') # type: ignore[call-arg] self.assertFalse(hasattr(hook, 'on_nav')) def test_hooks_wrong_type(self) -> None: with self.expect_error(hooks="Expected a list of items, but a was given."): self.get_config(self.Schema, {'hooks': 6}) with self.expect_error(hooks="Expected type: but received: "): self.get_config(self.Schema, {'hooks': [7]}) class SchemaTest(TestCase): def test_copy(self) -> None: class Schema(Config): foo = c.MarkdownExtensions() copy.deepcopy(Schema()) copy.deepcopy(self.get_config(IpAddressTest.Schema, {'option': '1.2.3.4:5678'})) copy.deepcopy(IpAddressTest.Schema) copy.deepcopy(IpAddressTest.Schema()) copy.deepcopy(self.get_config(EditURITest.Schema, {})) copy.deepcopy(EditURITest.Schema) copy.deepcopy(EditURITest.Schema()) def test_subclass(self) -> None: class A(Config): foo = c.Type(int) bar = c.Optional(c.Type(str)) class B(A): baz = c.ListOfItems(c.Type(str)) conf = self.get_config(B, {'foo': 1, 'baz': ['b']}) assert_type(conf.foo, int) self.assertEqual(conf.foo, 1) assert_type(conf.bar, Optional[str]) self.assertEqual(conf.bar, None) assert_type(conf.baz, List[str]) self.assertEqual(conf.baz, ['b']) with self.expect_error(baz="Required configuration not provided."): self.get_config(B, {'foo': 1}) with self.expect_error(foo="Required configuration not provided."): self.get_config(B, {'baz': ['b']}) bconf = self.get_config(A, {'foo': 2, 'bar': 'a'}) assert_type(bconf.foo, int) self.assertEqual(bconf.foo, 2) self.assertEqual(bconf.bar, 'a') python-mkdocs-1.5.3/mkdocs/tests/config/__init__.py0000644000175000017500000000000014502137725022173 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/0000755000175000017500000000000014502137725021152 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/0000755000175000017500000000000014502137725022763 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/mkdocs.yml0000644000175000017500000000002314502137725024761 0ustar carstencarstensite_name: My Docs python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/0000755000175000017500000000000014502137725023713 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/image.png0000644000175000017500000006724014502137725025514 0ustar carstencarstenPNG  IHDRG biCCPICC ProfileX YgXK.qy "9眃䤰 D*`@*( b$ wyf귫zzjiFEGM (n " P}cy,lx, ,~1@vh_o8@|h`7$FmBPQ\m/rJo 9/8FAoo5<A@4|@` +G2_ ГFaӂ}}}Nb=@0C_;d b`41VU=0j?m?~?<=?w{M&5? srrk3c1g3I"H?҃A:V@A6dg**ʦc%EWğKq3~k`bTh=/KKAG A]1Ի6g (1PFD?g#~y;\BtZQIX>[oGnJQW{&E_{*]jWEдnm{>s|hlްЧa zDM DpG-N`7 PN3<ZA]0F83Axb!AH 5H2 { (JBPTBv=BS,L, %h8΄2n[.<O% $Bd5Eܑ#9H R4"WѵD>"+CȠ48a|1јtLsӂya~b|Xi &`%S+؛<]p8q*p!\ ׍{-xn4^ocYr| ?N  ;!PB't~1Ӊi%]{@7CB'j!2b#&9qD"m!IHe ۤ) =^ސޓ>>4}7SE1=wX| } /32nc4gc`dla|IIi'S2S eLŘ ̕OXXYYlYYXY#bdc9|GfEXY Y}Yֲdañ岝g6NfWbwfOdd>Ɂpqsqp\Xl|K˟+kkm}{#ų'8Ml9x|R||)|'M? p d <"%NѧQ(7(sB|BfBqB' "i˞-M[&jG{DEEREΉ<U -&&."_U8x9 5Ò8I5PcCRTTiXZE:Xíح[#l}"C///sNfj6m{n,+".{H_\\ܸgjfqÒ򕕔5lma}MM-5=l;a'nmwm;noSX  ǝ$z=:s1r)rtuMswwv?aQ19C|G;;yvEv^RkK>>G}| }K}?/P.P;plnPI`oC7\š Ј&5hS1P̎X6#w0N"n_TN|eˉ,IRIIoMR0))BSNC>3LwM=E{u{5?sW>}hYOk:9|~bvy\ܒܵ<߼n/P)8^+(={LKQra-G(Gr|-*STRUJ,+,*k+)/,_4l:w4c~;X_[Z\=vDKXMIojkΞ9{jt3gnU={|.lgym2'8r/ q_8zReˍ͢G^iZZZZ'[^ռzڶk;:*_/$vfvnt%w-uGu s7o2ׯu[v;jwU *^|}-T ]}Fo y84:ػaO?19yD 5/%_6ML^2|j|wk3oޔ|{»Y١g>D}1˧%>728:73OX[^^A@Z*!,Y)-u#ELzuuA-Is&o̼[Z5-k99v8}wQt sq$PU}:K  T|.#t l,u|Z4O_Kx8Ԗ\j&#AF{tng~7ս@EvNNz.-/OKF!wʡ뇫-.-U-˿V]}&_9jM.r]'WZj[B^tu|>9sx_7wݢk溽|gx{>=\|qpH1dӲgnw'NO {)dԎWƦK^;0{ƻY{}K>Y3G뙷]Xh[ܺxת%eoCWY%ѽq*+hnJA|]j=VlV\*TF,[(訬:q*jlњ'6՞8})k7J6.R'_RRКۖ~jѵ]{#{vZP)sK_l<(1048ztͱ+O{4SE^0|~mӻ>Sg9Eb_~.mڪ]/ ]KĶhxepG2gfc"33pY٬i9qC<ڼ|E=()#y3o}j/H]`z|Op݈(rteq\}kbCIʫ ]p %RɲMGTstVӹg Εit+8u;~#凎?i'&+^Sp|Wūyk? Hhʼn @8:1BRCk Kp\ wgEtp(r(b0՘X6vl!1WWG*QB"aN.n@;'!/>߫{k1zYRQⱩO9d݆FrS1 -Nm5t׺#{Envـ{n >\{1s4ɷ 327 151 b@IDATxűgvgw/)S@BBD4d$?L0 Ƙ` Q(AI(;Nwgwk:I1ӌN=5U]==%K\u6pA@fY hKqVBD:F"0BrFA`A WM!ha!da"q5P+,YXţhfRU`BͲaaYŬ)!-e:EJJjo ]>umeˆh`L&cDl-EXzqY`PP"J C H,fEEB kTxYD,M؎Sj{R.,q-"/l-NPxM#6[0fX0mVH"@ŭf)ֆ4 0-ѸYxEE-W<&Yjx^S,RlC\&*rJij44bsmJ-fI"[{qYJ4! Rhc4h^Q!E/^j-#aD[tD / ߖm Y( 6H[ FUXVS;ׂZ+PK!֨$WGD/ jV!Jbr5F#VF PYSi-&Eʨ^ٗZ\ۭ-tE- Rl-F-[l3%FHĹ!j7b`5WK)6ZV)cZ@t"6Sr)&bs⤠h Ke m FAm@ "/Wd7%X0pt$h@5#d2.cl[%'gck$W&Q!!K(`4\ qŒ\Nȹ- CNAtӂxK@@m! )q&!(7|!;w.rcybȶʥR";qRްq5J"esL\\Y|؂ HQBqE#̚ mD-NVhDLg "-!"tho|TQ1$(ЬK=:Q/P"ѴEIdd\Ϗ|.ÐN3-<.Ĝ G|;'/c&cjz&CbѼ *'G28 M-ဈ'љdG$2G"Te <5?JQ#wG/aiK‘$bX'@_4l`E䉁'$Z55eU+40sk[x2SֶASW!=ȕj)ID x!Yp+ 2 tJmE*:Qz)=<  Ճ(V\ٯoߚڞNIc"BƲf =Pݴ3H ZCqt;:i@&qQ249BGEb`K#b7# x. aDkJb,h&ˌFGhc$dDQ7DbNP x Q:vKxj0U]\T F 5KHpFxTTe% ]xTD"+$*ʀb\% 0K0K)4[03{5:rm%xLUP`.V7ȅ 6?)L,Wj`3K"`lۏHg:∑db=l QD)$(θL= XwГ^@R&Fer((qN ?8f,A!t3 %21OR.KcbÌ(阨L\:80X:^wx @ص/etfRuu5.42gmjjJf`'Yv3)*& W sxIIIqqqii)Z6sq!*EkA=Œd ]|^X:E!Kd|h0Ex{(icgT4H +_u':6z3&xV1+@פ QJ( Qe vmO-$kkq#aqQQKj!<?k^b73O^AJ\x\w@&tkOuӯQ+#\XVvTr'T*E\'F!ހ _$j(=4ȹ%00D%]s5K1ڈ Pk]-nsI"Kxl PVOH+kof뭅(' D\Ң2?܉oرcW454464l|H־L7)A pU1`2F HFzd:iRY%jvGgarݶTq?X[ű`aq~\pUٮ1H0N惴AE919t6H:\&lwE=,,(6k}DƄfy_{ԭjJ܆5jJhmdp G}̟Mp:yLdp JKJZZZx0  %[rs)dOr7|zKZR4 ",m#i`VG hq"PmipRDjvSDh=nhh7^xwd?cK-\SsfmAh"tRׯMeuUemuEښڹsyQ/!9T#nr\lM8lMeqsn|A>쏖Zj{[S ږOQ,~ŝ'=O[L=<'J_=W|oʥl?s ^g=2Fq;K9;tH~xgM1e߽4ges$$`2#]Á!V6G>bJ132TDf0,s+ܿ>G[ެt4Pa HPD*HDH,q+oH3xT$h-G 41z!2'V^Aa- 1~KEy&$4K捗&Rt^UUQo^lJc3gϛUegK3>>!9 N\N8+R8!1c i=O9Ne<C.uS%,PI9w+M/)1|c2 wzERBI-p+ ;H;c(k?c.U4)Eqel^Z sI0͏3".2/`JfeJ[})~#_p 5 +t-'8 >,y )aN1CpZ2Єр-y:mj(t--Myex۵,$q[#>a***xfd{ qye.S%i]’21^d;lSDȽQUUU?'yFx2=ȕ6lLu_t 4rKHYO;jF$;FvO\x0ؐ\CH"!0'@b!hbfw,WE.ӂwȐ-ę1Vq,ĥI3-{VnxǿKGu8ゼ0 aMͭNy os_k̡mݳkzؐd6ʶ$R,2tIΕڌ$vzO\2?s˾=z2/ԟ:?{@SbyQ(+0 ƬhXEXHC%Έit kb}Aob l@wU@6"tM&{gyjYt`|ax[TL;=\׶v}}v0Twyn"1x* `p QE"D` IVx ׈Ivm$x -BiLq."[SF(`hTf0kCMojjۻ?|nɸ-XN8BG些wڙgM2ԻVЫW?~ |0@"2O<7 βޅuM#X,J֞geUS)״PD^^$)b`SFW6+xM:bʦ28cZ4Qf:yO.7:#DqLkcL15do{4^V*8,RK0]:miۆz`wd|6Ԙ~e<50#ki7٧oW&ND`Jmu+++ϛ;hV$)~xxFFp`#z7Bկ[D* !qJT:dc!.9a/ri08e=]OAE̢ EMu +BiYJ.qN ffFt@*0ũxo m P&Kq[DZB3Ĉ !DbwRRFn3R1pdȲ *<.)҈?4Fx W `1eWEP.nQnE=geSx&%>*wHy4p> z!'Pe)MةkA%3U}{nݨk_VOL< gx=T!--Jv$ (/Hmd۾qB0u1סm'([VEQ&g|!\eK0;?t_ YXV1%@)*<[a"U"<Ԇz˩0S[=H IK}K Z60"tB\:k!mk6<={!R\Z+DzbN1Iԏ%+(V%ay8۴Ly"&k?r&3:>g C]HO N2ֱ-xEi'2>f@{BNCTx ;Āq*OYʅ] SOmV#R(* 9 HoE, + ߅3_` F DyQ9QR"]m! RS q  4e2? =D`@BD Z,ixE`p`4R˲&5 b&jke3fʪ+Rmp# nT+4GlڤRZIųn8$2+.Hf‰n܊)+12R1pAcb00ӅˉWP { c:9L 5N Z6a 0SE `Zмk_Sc * 1Fu Ï_a:U±y1V0"!L+^28aZyР!﹬ Hxf_%,DDjɘAv@Q]H:P\i$$*E0'H%+R  >C6:.-Uh HDuH~:? Ae̘ʲrހw@4'9Ą1ZUX",00v $xF&)^2˸ygD 4^p Pf sSkFv)P&5FYse(eVxB2 s;9:p9+aȬYK̛,"^Śfdxf1(ѬC+%:b7m2ʐ(a9KP"2mE/b!E$E$m 1fyYT.kdS7G֫d?%>4zR)"hRv\L6$ 2YggFlƹb)3\Dq.W] fȐeEaTK i$ˑ`ryĚfڗQ|2Pe,SVԸXD̿Ȱ[Ccc`b>Szf4`DhCiYYGH=rF#ր)\MffLaEFjtu.䬍E2Ȱ` }bZ_B®O+rd7Qžq$Ҍ!&=-ڜ) `ZX_H1),XDh $%L5)$㝸`if^Jc<8LeÐ@mrڙDΰ0ypzRuص}3i%\d5 mQzHlFj!ep=;xUCLdVy"=kǗ*e^x)I)f4pШ*Î/d]Kg8nLZA) 5NvuΣ8(M(C (OY#L"sHMFq˧{1L962΁cWh2hH_ W4$;/]x׸x?m,Ff&*~<ϰ!p#El,`l),~,o^`)aZYKB٬2b R ׄެ913grhEe6C> eK={Ǟ6C<+xkVskRSbqzS裏DuÔ!, D?`ŋq}3{˖9GO>e,~1fݺ0̦yͣ9<4/[9pЀN ԥ>qꩧ_C}w̙;dȖ ~dպBW%kʕۣ|K֦嫚xq1 ~wZѸ*776sV6`aqu2ɻQdښVNܢuEû͇ސ!Cxσ8~׶-MzwG3]~0sfֲn-yQٲ+gZDWYzSZd"wtqʄǞy 馏?8o"qO?{sUUKeʏ+qvq'x鮣+ri{)wms3+U 5pc8\k_^}iSća܊_tC7kng]:vǜݒ]2˟WD~oUjj:%;z{"+n8Ï5zTK~r&&=XFlQND9+a[}Ƚ։~wdsY5v~.mxORߪ*K| o~ј9O*S8Nq*7(. ӓ~""};K3գukrI## [W-~;`= =!s\W? һz1#So7:~KWyt[~;/|ʻG^z}V.r=6S D;#G3mͫS;4b!%%ż'O^~d; YN)} Rt5.r1 1MU97~xtC}kzGUlr5~w|peu˝sUXV:=?,u_8>-~wr MϟiX^P*sZfujisҾ{_;g㯾2>NgF#G]};~q'Z_afDHEqQg$!'1 9ibNNz#HK]K Hǚwhl;?Gn2B6)~o H$d ZL[ '\Ggn91{o%s<P'Oqؖ&# N_[Nc5 N%<@䓽xűh㛓V sfnU:~أv&*F30}e@|m7Հj xGb[.ڜ) ;!O> /X[3% ;f>-JSd𖱣cM̩켿TeSP*o_K ]:ΗBm&}÷F׾?vy_,?mšfgK:7O3OVu켳}+:kh:C?$`eW=8ϿN_emAvMGSS4]=.UV[dk  !'N4#xQ5rǟx̣ &߂B\kcSdFg bPOοqd=|Qa\u鷞)vNݡ.{򧫯\Ks߹qkZ#|¾{:R?;]y>^ړ1Ct@fLpE}푞3{aMd@"+n!ۢm1bQGMM-͜Բ%doRDk+x׷^ (y|ͯ%1Wۇ9vfCXUzow9v^/faY;-q;-&z q1 1HX]䊳_|S;]~-.kNmHϡ@$smri^c c9@^Qfؼ!0 n^lYZjƌ4Js?ugt_|Wy6@2 UN;ݷVٶݹos~3l0ȅS:@:љŃc/y31*k{х7)꓎h-Yb9N25#@Yyw3@~Y=~n//.W\ .Em!z^a1f'`˩rp‚'Yf\Bky1fLn uܲ2:^$VovkI>^)W{cs_>exGˈw^ͫ+5#kR-*Ќi cN?R98WJT|2$j]H4mJϝ-.l:>5™WG"KфKW]/+fȩLg_Kx5&чr|lBa-'2Lλy]yNZWd)^{k=e;>9yT27甜O&'υ{ m|a;?{|?aC7~=qS;"DS{W;uɸ)mK_qn9g/ uEEǿ|6S'z?U1iSߞjS{f[~ˋEcwμΉ׷7ǽ^ [Jz|6+S]Cv`@szslv-mjY2龛&Go7Bt%S~p{˚["W;#KYgvaAe%'urGj Lkz2LϾvh\:qs|3G<#eS)G| 9/sѾΥCN^3{쪭ֆHRN=.hƎ:?v*p ϟ> gMz%5nN6o]f =IDAT.o@sڹ5Ę~?}wwAڤ~\w @#O~l~fEA-N;̗)9<q@XxyZXSN "[(/ڽ?S馛8rFҫ505-ݻˊ K8⨬gmi^dSCcGڋWTUwZ;H75=QSffqݕޅ?`) /hmk++/PW7z޽{&;0_fω})2,{Rbr'k6rh(;Z[_7D`Ȇr^u_"&QY[,\^e,Wl("k=¤͂…%V1q;RDbF!79WN5ޥF|BNIY'g:Q}ʕ ՑNYjzu%8~+@H/|xey4dC(j}IOIp(Jˇc{,Mjќɒ5{I].v~̗ٕWH!ߐok,M ZN8oJGEcZN "c3#g"ִsP$(ǀ/Trֱqg}l+0.,Z]%9Ը[_YŠB X^,I|iea~&1&@>AĬWc>;R~܍gRee.\-ΫE]cxR O?5_,coV4_n,Me+Z˶曲| oՑ6(rU!Ͳ M`ZC 9bśoc"٥h(_dWk15q1g&գ(sT“/EԱsN/px"(r9K > w)M{OdRH\{0B>{g.X횼9ūf8^ص}SvekWH#xɻ)tsưyoڱId?nkzSs,-Zq8FH2,sovxR?9b.`;U5Y--2֐%G^#*x\>Rx>8ɓ4*?h?JGy̜wsY4\ibya§`Hޢ5-7"q8j9hZ` Z$ngϗ3--jR$'#pc[4GE3|yW9r|'[K{~/tEXG / #|{|/GPּ wqVC||.ӓWt\T[tM|fr| Hf'UwQص}r'-ky#2`'(j4\ݞsa.<r>,*[ lVChEq!n>cJ|>>_Å(bP@>^F1QҴ֐!rʩ ]L*@c0>ǒ|8(>m^ ヰ|3}[lXb| yЎYާF"]FEjxފy#͖Na>ǧ`GwE^51VyeAh|3sB>j){9XH8Rfua]2*(v-|jfȐ޽܅ ! ܑϷwH}DaR 7v/!B t [?,qaH݂H5g0 )R[Plsh~)Н(]^!B t xwmaR @7jcZ!B t 4ˋW)0@HAd'P0@HnByy"\ )RPyu(!B t+ l{Y!B t pv aR @7L҅WH݆^^!B t' `x)M(|rx0@HnAy/oR~qx|MXjiK<7y\ߦka_oh~|qo җ?~́y &~_m\ x²݈f.msxG /]'_ބm;!ۿgߋlsDrPyZN;9_FQr״v,pó41x{Ѽ%!>)wwć6U;Ӧ9^[TjL^eWmz9 iaϟv_8q@SmT S@Qt .rLkgQpϜ='qz6|~ۭA~v䨩(8UsTu#ߪ&ыGEc .=:*IGQu͙_iRVH A%4Ls_kv~&컉^|5YijoM;kp6}y.I*Vg~;f A䠾\ՙ_2-nkrW羞|J.i[-JWuk9ӈwaGġiLaKS>;Et瘛x,C]yhS9eSr"M[]{לHsC(~K=oH]UÊ/M# iMLC2rW/b5{ڵthXY)+q~e*Ϛ^Ӌ_wFiy̭.ϱ>a|Q@>#+[0TaF6N-I9Eh[va/i\x؃{?o_|he/'.y7̫w/vlY`n"N j&z-r< bWG֦4.Kx_: vuJWħހ/k݆K*[.rǯ''%EU]oiՂms kKI' jMW,j7%ӌ.O.>JO01>YXF6Z\ ,o &aDZS(˷<_=jhA'_q3y 3lYċrs8Bkllmug/jn*zŊٻ:$ʜSvHJAF0qu>M+sB%n ^$t s@ɥ|уg={`3ϸ+Iÿe˜#D]"ŻŃiZFӣۼn Ô͆_ xN~rdcb[9W ;T^̄˝rghkx;MSy8-N1w Hzb0 {8w׶FB{{ש *En->rglnIK_ =UEKSf<^'z.Lԧڄ*=o|Z J嶾*L_+N+̖8:[X#TGMK]mspEΐ~YjJL *, +3y{k|(L-ddy˴.[2s-׫BcɅ8C l2 {ːpwWHnEueƕ0 )RO]FyB &p<0 B & 0@@8} !\M^! wo Rݽoػ͑ToO=s@()J>wo Rݽoػ͑ToO=s@()677ot}ߏb] Q@CjlBjxzƝ4“ۈI78 K7B R>&<Ȱ!,B#! B&2FHKP-)HHnBPɃ RRN-ڞfIENDB`python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/0000755000175000017500000000000014502137725024565 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/sub1a/0000755000175000017500000000000014502137725025600 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/sub1a/non-index.md0000644000175000017500000000061414502137725030022 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../../image.png) ![Image](../../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/sub1a/index.md0000644000175000017500000000061414502137725027232 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../../image.png) ![Image](../../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/image.png0000644000175000017500000003340514502137725026362 0ustar carstencarstenPNG  IHDRG bgAMA abKGDtIME -@p$5IDATx]y|U՝?=BB/D.h-ô3NKTₖ:P!#,ER a &}O[Ǐ}p{w9~-瞣TUU)"aBz@Q]q oAa~n!w_UUu]Onِ'][7ݲl:ϖjSUUΜ:+2♛޲2_XWxٜMR%4MC#9nje:ی3:J|J ^煚j-w#NM˛Z./1Y`"t$2MpM,69Z$vXmHJs" oz5)+4 ĒJEEeku $^!p6j &nM&I̙na #Ni[֮cjTSIKu+V"MIJBEMZ<BHK_D+O7Z"U$x3sgITu _ oz$Ƹ6%,R&o <4iA 8gy y[E/F$%/SN]EP."4-"RxHacQvZI_¬wS}`VWa$8=tK4iB!iUTnuH~$]׃ |#zUU4MBH5[6'Sjښf0 2/RErqLߪB(KB!t]g1IV$,J!XNDF2 2Es<(J½,W0눛v"2Ur4Ml3KK_\+ǏGI?a vN?(l^ MZ"s3ǓD)5-n, % QDMmÕ6HϘ5;WLP\]]xpӽGSweHXk EckX|~SN78jPLӫoRSS99๢(4An f(nG'IRLW>K$ =v~*gk2F E5&g% |^S^^uS0u5 ɓ./7)*1cQN鮴 ֎Yo#\2)Iڗ%MӴÇ|\z={-z*~3r8\C ZllգM Vspi0Rux>丵LZ2\+TY[SSrFEdšU(p`p) WQh >m wyW"X$_~a03CH4#2f\q9Hϣq?|$?\s׀B@ P__?bRHXfvޢdP3E^?g:  -Nԟ'a$wŒB9G]__ oEȴM+49hzOT[]A)PZ^Ň4WM4- BaZ>G v766߿_~[(dfC%AKoc9ԡy  묈y3I;>$i_4Eijj*(Tq>߸umL`mr5a9/Τ,D\@*qUW0`n72n!g0P84QiZmmȑ#!Z]\ TP4ϊ:`~)x>W{>iQj$i4M'''v.BYƶʾP-ꌉx<4Muuʵn?ɧV)l [kݚvHma|.4hz٪Z|8 Q{jE.@RDC&q0 W8NQ s[<?} #I(\Np8HR444?&&٢Z9fѯ_P(DP"IPn)sz w1_?ϐs4/."lxl2sT,"- sD1wnYя#GrQ/Oӗ^zK\ /:.Q0QP\2G#Qt#1+i:[@,Š$Ji]vX[GG;J`H^X|xժU!-ؽ{7os$LJ 1Hqh'INQއDDägZ#I3zjjj[[%'nmmUjKVQO*7wP+`eff677 K%>bKQ?2hdt,_@99$` E"s#,U#㧾~ذayX݆p(ڹs;hbx3fطoodɒ+WrҸJ/]DH(^7VB I;q֭[׿3gD%Mܺ:Ꚛ9NUU^o ("2x+\<1`bbbSS4anpr[תR4H|?ȦI+mL\؂]wj5VkV:i$EQ>!Ĕ)S&N"-1ZԤ/V0BlV !Ȃ"ܐ*EJ򶣑&X L2oҤ`1Ap53iCρ<5)7]kkk sO.0s%K_@E 2dȧ~*xv{MMMcc('N(..0aBgggrrڵkƍwȑP(W^IJJReŊΝE`(5jo~sמ;x`MnS+' [ y f&qkSa>Xiަl [Y[Me W[Թ M@x@ieffܹ3==p6"(k:* PYYFFSTU#?^c*cQ#Wt`pb05)⠱<iy zWk8uRvr\u)//`~W-onDs} !iKOO* c-Z:ʍ7(3gNVViD],Cy&N'ep8hygi,55UTUu:ĎT|n5M{D˅^`A EDȰ Fz3^ [gKy07 |&hm5zV ISUu׮]SLBڵ+ N4J"//999HHH&c%Mod\'FmooOJJa9z5Ȅd}2:ʂzd kI||l6tHk"ub؁@za4FIml/D}mm߾ov}֦iZccOӺkر>1???//>p8Ν裏.\HӬe0FSSU####%%eӦMݼyi0Op¿/Æ KMMUeѢE+V Bdfff666rxs=Re15çSEdpkݴ0Dp8F}&L=zq GQH Btp\.]=ʭt ˚p 2\Q?.Bī$u+ܠ%32'k*א'|ˀn`2Pu~NcJKK/\ߞ9sV*ꭷޚ6tPYZZ|iii@m r/?"===;;{޼y ȉ*[`Gbbz뭇~ W_}xo7 cҥ'O>|xZZګ/A~Cizf`?=wSќ|p< uasj0MELS<\ͼn~~W_=aL0o놴P(t:;;;1iJ Rٲt_)ZFa3"3+;wRjVYY9rȬ,Rư:]f͚AQC,Xg%N!xt7 ~p88pUUvsI븓vfkiiq??_4ieHQia_G/$7y&Hոgj5uduOUUUg=:bH70%(:{lgg'}y\zœ: ׃K|^?""!UoeY4aJxBD( OSc͛3O 0ʖ.]ZRRbW^=c <`܇ "'aC.Dg—t0|;;wݿ?yx3sui4k})bۋokve eF:!0fjطo_~~>utٙ<^}a"<$%O3Ty~n&![ZM0*ihb̅;3\):Xmmm\\ܔ)S:;;y<~ `b]Ԁ%ךAJi=rE` GRREx瀽g"Zkei}qeA*p"Jcap &40_߇BHnH*:TVPt:i! 7]7qE"l'+lG`#V 9-%@GcLr(4y\^C슰t]u]pkvԩZ% "Ģ Ce_p"MS H(lQmMrIIa111HNN6fzjt:Pn/rx\." : \CKcp>s@rdC%,g>c4(#4}iziTd'Y&ǏRZ(, M"+& -6㓒͒!MӴܬcǎy^0†%A&yvi :􂐢a`vml{ %k9mWf/I<Ӭ``BWDx;+ g^pLcMAy饗WZZZ~~AB$>!)̡EUWp1DoJ8bP7|cXL,P57hE?Fp4EQJGG2\w~@*`v`@Bz#6碲ź#r3씤iyȬ-gejd(LuSYTssT)ҔjZkk&8wbJĈ `fl .x:}I0TgI$$M5}jeJ!88aPEHûCBe 6X}K$i iJMM 0J=9a+׏$BP3#q|{@0 \ : 5]Z+ Hj$MM!? "5 :t""LTӋ0N'g9;LvV^L._y0I&IfGE絼IDs8G3gLLL4*!!e ՁT )\Ǐ(z q&6QQ}`Ec;Q`N] /X@UݗA|ܟF) 0u5^ak%$$zǎ_rġCΚ5k4{[nѢE4>ߣ!iچ ׿4}={c>|ӦM555G~7֯_P\ oSWWG;Zp.X`tCݳgNyO4w”ykkk/ MMM^vpG"9v bWhoo|[liiLU49džyK⒅=//fi>/==}޽jooBMgb h| }k*¡ [[n~6 c֭;vXr<@Rso~;mڴ_=33^sF 7pݼyeJKK ̿sO?o'⊽{8pnu]zhbb3o𭽽}޽ӦM+((h <@~NzWر%5&&>' lu:O ncu= - EIKK3h9s̛7o٦[Njjj1cvaz,?. ֮]δmQSSd uR]]-u=>>^QUUiرcÇ;{n%/bȑDB7Eu7|wg Hlu|,]yǓFۺꫯ;wyԩSO]U+VlڴiժUӦMB?~\T]]a p !hB%s2[ne|ЪڌoV,;tw5滑P(twTWWo۶"z-,< .E2T:F13k`[X\}qGu VQQ[z`UFF;s ӄo __ ^t޼yÇ馛-[&x xB!CЊ:' svuKZ[[TUZlُ㎎1t3BߤG{b 0G}jqkƪUv… M~?Hs;c'N8q"#1cƯk2CիΝK-MӬ1zdС111UUU !Ǯ yyyL8nٳG1hРnnݻDC}8)b۶m˗/ojj=x 7;`-t*sa裏8PRRr !ĩSq!Ν;ׯ__TTTTT֮]K!Çn7{OΞ=;{x:̜9vx>5kִW:s̲eˈ?я(ʒ2ӹo>҅=|Nmmm^ԩSm6[RRرcnZVVV[[K iƏ/2eXzuCCþ}v`7$.qnիWZEG{\tә>a]viPDͺ9:̞=5k֬Y'??N% ?#=x?={g?)FMrEQ~_TWWwzfƞ4iRQQB7|s„ X\\B <OUUUbb뭨hmm:,]tʕ/=9u9sP/^3r7!?L+@=Ͽ?˗/B >]ݒġy睤-GAAܹsȣEVJHwmڵK.{nŤt uXss( !J:>))T`0ڪ( % eJJJN>zsrrƏAg[7mv# =|_]|K]݃f_WyԾ-KJee%f)E C7 `S<ߨ`*(_"Yt0Omx 5 $Mv)F~2 O`tQj`QّVUsMgr]Q%$Mv f.}Ç+=T6wܞ,oYD~ -Sھ}冄  (!!;a7cW@ olsA@L2i_HW^xT1͙3]v2L/bznLe*>*؃ZBBo@YHHH*8S2iI},&SʴϤ6:KYBB@} rŨD_T}-e/x?zP]]݆ .8OoTUU}97idR+!"7[bbbƎ`:Q'HKK뮻.,Olk?v#Fx;ʴMiӧׯ_O ƍtoܸf"77w֬Yqqq'O޽{yn+ְAe*S0mbnҕÇ߿{ӳ+++ Ø6mڈ#n" ={vӦMa͟?_Ӵ<:?+UWWTW^t]onn\WWg!GWjkk ,Yp8E?~0Ft:ٳsӧ_~(i۶m555B{<2WtQ]MӚz`08|:-8++N:oxkʴS7,F'y[uЭl]gϞ=aBqe͛7Ornw||ap_bb_OCZa p5!Z)))v[ZZZ75W222P8a}u׍?z뭷fddKn ׯ߼y%TUu:5e㩽 jP( "%%%??_QWW0`(`0e˖#GG?JIIBRx;ʴȮv͂!߽{z+W3W]uUvvCvoWyJsssNNJLLliiGFZr8|GqEǷQFQՆaTUUuC333MT,Z())ȑ#o6壇OWLEQ`VMӦMRO<)(//BP8dggO4)'''''~QW9"7x#=z4 ZkxZÇndddj<=]7o3vؤ$!D}}=:MJJ (^EO;˖-ٲeٳgϞ]dI B]v"kԩSUzzҥK~?~'*Cƻ ps]O>"-[Ƌػw/1ؘ2p%KB!ʧs׮]"ۿɓ'xȴ^%&r@[[۞={~p8|wyfx~N7[XXHYJ$l۶; F\r![ބn2 W^!|Z[[#G%.q(O?tOA~`0LOB+n744;vBvAo!(mmmXwiPB!?eP(..LD7uTS}QXXH#v{UUUEEKBt_CKbT_RHMM/2!kVUU5kWahH~Zj%Ӿ*K ۶mkkkSSB₡=-Y$$$.&d,DBA 2LFj]$$$ z2L/b{T2mgu@BBk\[&ST} 2^-! ĔksD_} rTKH5[[[{ pvRz[vژRQ ءR%ߒo·΍jv˷[^9 €ch%F$$78fnԋ Cά<~+HrCr ;PPf^[VVKrCrp+j|K :-o_ -|7eߑ吣ZBAj 9%$䨖kZBAj 9%$䨖kZBAj 9%$䨖kP.e׽ mpa.^F/%$䨖kZBAj 9%$䨖k[f%tEXtdate:create2016-03-01T09:09:45+00:00D%tEXtdate:modify2016-03-01T09:09:45+00:00)tEXticc:copyrightCopyright Apple, Inc., 2014tEXticc:descriptionDisplaytEXticc:manufacturerDisplaytEXticc:modelDisplay IENDB`python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/non-index.md0000644000175000017500000000071114502137725027005 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub1/index.md0000644000175000017500000000071114502137725026215 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub2/0000755000175000017500000000000014502137725024566 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub2/non-index.md0000644000175000017500000000062114502137725027006 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../sub1/image.png) ![Image](../sub1/image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/sub2/index.md0000644000175000017500000000062114502137725026216 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: /sub1/ ### Relative path ![Image](../sub1/image.png) ![Image](../sub1/image.png) ### Absolute path ![Image](/sub1/image.png) ![Image](/sub1/image.png) ## Reference an image in: / ### Relative path ![Image](../image.png) ![Image](../image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/page-title.md0000644000175000017500000000001614502137725026265 0ustar carstencarstenPage content. python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/pageTitle.md0000644000175000017500000000001614502137725026150 0ustar carstencarstenPage content. python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/metadata.md0000644000175000017500000000010714502137725026013 0ustar carstencarstentitle: A Page Title # Welcome to MkDocs Some page content goes here. python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/non-index.md0000644000175000017500000000042214502137725026132 0ustar carstencarsten# Test sub pages and referencing images ## Reference an image in: / ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/subpages/docs/index.md0000644000175000017500000000042314502137725025343 0ustar carstencarsten## Test sub pages and referencing images ## Reference an image in: / ### Relative path ![Image](image.png) ![Image](image.png) ### Relative path 2 ![Image](./image.png) ![Image](./image.png) ### Absolute path ![Image](/image.png) ![Image](/image.png) python-mkdocs-1.5.3/mkdocs/tests/integration/unicode/0000755000175000017500000000000014502137725022600 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/unicode/mkdocs.yml0000644000175000017500000000002314502137725024576 0ustar carstencarstensite_name: My Docs python-mkdocs-1.5.3/mkdocs/tests/integration/unicode/docs/0000755000175000017500000000000014502137725023530 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/unicode/docs/♪.md0000644000175000017500000000074714502137725025206 0ustar carstencarstenWelcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs help` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. python-mkdocs-1.5.3/mkdocs/tests/integration/unicode/docs/Übersicht.md0000644000175000017500000000074514502137725026422 0ustar carstencarstenWelcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs -h` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. python-mkdocs-1.5.3/mkdocs/tests/integration/unicode/docs/index.md0000644000175000017500000000004314502137725025156 0ustar carstencarsten# Unicode Test Documentation 📖 python-mkdocs-1.5.3/mkdocs/tests/integration/projects.yaml0000644000175000017500000000611214502137725023667 0ustar carstencarsten# DO NOT UPDATE THIS FILE, only for tests. # This is an intentionally small subset of https://github.com/mkdocs/catalog projects: - name: Material for MkDocs mkdocs_theme: material mkdocs_plugin: [material/info, material/offline, material/search, material/social, material/tags] github_id: squidfunk/mkdocs-material pypi_id: mkdocs-material - name: Bootstrap4 mkdocs_theme: bootstrap4 github_id: byrnereese/mkdocs-bootstrap4 pypi_id: mkdocs-bootstrap4 - name: Bootstrap 4 mkdocs_theme: bootstrap4 shadowed: [mkdocs_theme] github_id: LukeCarrier/mkdocs-theme-bootstrap4 pypi_id: mkdocs-theme-bootstrap4 - name: Bootswatch mkdocs_theme: [cerulean, cosmo, cyborg, darkly, flatly, journal, litera, lumen, lux, materia, minty, pulse, sandstone, simplex, slate, solar, spacelab, superhero, united, yeti] github_id: mkdocs/mkdocs-bootswatch pypi_id: mkdocs-bootswatch - name: mkdocstrings mkdocs_plugin: mkdocstrings extra_dependencies: plugins.mkdocstrings.handlers.crystal: mkdocstrings-crystal plugins.mkdocstrings.handlers.python: mkdocstrings-python github_id: mkdocstrings/mkdocstrings pypi_id: mkdocstrings - name: mkdocs-click markdown_extension: mkdocs-click github_id: DataDog/mkdocs-click pypi_id: mkdocs-click - name: blog mkdocs_plugin: blog github_id: andyoakley/mkdocs-blog - name: Blogs for MkDocs shadowed: [mkdocs_plugin] mkdocs_plugin: blog github_id: fmaida/mkdocs-blog-plugin - name: foo homepage: foo gitlab_id: bar/foo - name: Termage mkdocs_plugin: termage github_id: bczsalba/Termage - name: Github-Links markdown_extension: mdx_gh_links github_id: Python-Markdown/github-links pypi_id: mdx-gh-links - name: autorefs mkdocs_plugin: autorefs github_id: mkdocstrings/autorefs pypi_id: mkdocs-autorefs - name: mkdocs-redirects mkdocs_plugin: redirects github_id: mkdocs/mkdocs-redirects pypi_id: mkdocs-redirects - name: markdown-callouts markdown_extension: callouts github_id: oprypin/markdown-callouts pypi_id: markdown-callouts - name: PyMdown Extensions markdown_extension: [pymdownx.arithmatex, pymdownx.b64, pymdownx.betterem, pymdownx.caret, pymdownx.critic, pymdownx.details, pymdownx.emoji, pymdownx.escapeall, pymdownx.extra, pymdownx.highlight, pymdownx.inlinehilite, pymdownx.keys, pymdownx.magiclink, pymdownx.mark, pymdownx.pathconverter, pymdownx.progressbar, pymdownx.saneheaders, pymdownx.smartsymbols, pymdownx.snippets, pymdownx.striphtml, pymdownx.superfences, pymdownx.tabbed, pymdownx.tasklist, pymdownx.tilde] github_id: facelessuser/pymdown-extensions pypi_id: pymdown-extensions - name: literate-nav mkdocs_plugin: literate-nav github_id: oprypin/mkdocs-literate-nav pypi_id: mkdocs-literate-nav - name: mkdocs-code-validator mkdocs_plugin: code-validator github_id: oprypin/mkdocs-code-validator pypi_id: mkdocs-code-validator - name: tags mkdocs_plugin: tags description: Processes tags in yaml metadata github_id: jldiaz/mkdocs-plugin-tags pypi_id: mkdocs-plugin-tags - name: tags mkdocs_plugin: autotag github_id: six-two/mkdocs-auto-tag-plugin pypi_id: mkdocs-auto-tag-plugin python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/0000755000175000017500000000000014502137725024763 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/mkdocs.yml0000644000175000017500000000144714502137725026774 0ustar carstencarstensite_name: My Docs nav: - Home: index.md - User Guide: - Writing your docs: index.md - About: - License: index.md - Release Notes: - Version 1: index.md - Version 2: index.md - Version 3: index.md site_url: http://www.mkdocs.org/ docs_dir: documentation site_dir: output theme: name: mkdocs custom_dir: theme_tweaks analytics: {gtag: 'G-ABC123'} copyright: "Dougal Matthews" dev_addr: ::1:8000 use_directory_urls: false repo_url: https://github.com/mkdocs/mkdocs/tree/master/mkdocs/tests/integration repo_name: "GitHub" extra_css: ["tweak.css"] extra_javascript: ["tweak.js"] extra_templates: ["custom.html"] markdown_extensions: - toc: permalink:  - admonition: strict: true remote_branch: none remote_name: upstream extra: some value: 1 python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/theme_tweaks/0000755000175000017500000000000014502137725027443 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/theme_tweaks/404.html0000644000175000017500000000013614502137725030640 0ustar carstencarsten{% extends "base.html" %} {% block content %}

    Custom 404 Page!

    {% endblock %} python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/documentation/0000755000175000017500000000000014502137725027634 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/documentation/tweak.js0000644000175000017500000000004214502137725031301 0ustar carstencarstenconsole.log("JavaScript loaded"); python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/documentation/custom.html0000644000175000017500000000017614502137725032040 0ustar carstencarsten {{ site_name }} {{ site_name }} python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/documentation/tweak.css0000644000175000017500000000003114502137725031453 0ustar carstencarstenbody { color: red; } python-mkdocs-1.5.3/mkdocs/tests/integration/complicated_config/documentation/index.md0000644000175000017500000000022414502137725031263 0ustar carstencarsten# Complicated Config! There is only one page, but the config is complicated and re-uses it many times. It also aims to use every config in MkDocs. python-mkdocs-1.5.3/mkdocs/tests/integration/minimal/0000755000175000017500000000000014502137725022600 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/minimal/mkdocs.yml0000644000175000017500000000013014502137725024575 0ustar carstencarstensite_name: MyTest nav: - 'testing.md' site_author: "Tom Christie & Dougal Matthews" python-mkdocs-1.5.3/mkdocs/tests/integration/minimal/docs/0000755000175000017500000000000014502137725023530 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/integration/minimal/docs/testing.md0000644000175000017500000000075114502137725025532 0ustar carstencarsten# Welcome to MkDocs For full documentation visit [mkdocs.org](https://www.mkdocs.org). ## Commands * `mkdocs new [dir-name]` - Create a new project. * `mkdocs serve` - Start the live-reloading docs server. * `mkdocs build` - Build the documentation site. * `mkdocs help` - Print this help message. ## Project layout mkdocs.yml # The configuration file. docs/ index.md # The documentation homepage. ... # Other markdown pages, images and other files. python-mkdocs-1.5.3/mkdocs/tests/theme_tests.py0000644000175000017500000000662314502137725021534 0ustar carstencarstenimport os import unittest from unittest import mock import mkdocs from mkdocs.localization import parse_locale from mkdocs.tests.base import tempdir from mkdocs.theme import Theme abs_path = os.path.abspath(os.path.dirname(__file__)) mkdocs_dir = os.path.abspath(os.path.dirname(mkdocs.__file__)) mkdocs_templates_dir = os.path.join(mkdocs_dir, 'templates') theme_dir = os.path.abspath(os.path.join(mkdocs_dir, 'themes')) class ThemeTests(unittest.TestCase): def test_simple_theme(self): theme = Theme(name='mkdocs') self.assertEqual( theme.dirs, [os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir], ) self.assertEqual(theme.static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual( dict(theme), { 'name': 'mkdocs', 'locale': parse_locale('en'), 'include_search_page': False, 'search_index_only': False, 'analytics': {'gtag': None}, 'highlightjs': True, 'hljs_style': 'github', 'hljs_languages': [], 'navigation_depth': 2, 'nav_style': 'primary', 'shortcuts': {'help': 191, 'next': 78, 'previous': 80, 'search': 83}, }, ) @tempdir() def test_custom_dir(self, custom): theme = Theme(name='mkdocs', custom_dir=custom) self.assertEqual( theme.dirs, [ custom, os.path.join(theme_dir, 'mkdocs'), mkdocs_templates_dir, ], ) @tempdir() def test_custom_dir_only(self, custom): theme = Theme(name=None, custom_dir=custom) self.assertEqual( theme.dirs, [custom, mkdocs_templates_dir], ) def static_templates(self): theme = Theme(name='mkdocs', static_templates='foo.html') self.assertEqual( theme.static_templates, {'404.html', 'sitemap.xml', 'foo.html'}, ) def test_vars(self): theme = Theme(name='mkdocs', foo='bar', baz=True) self.assertEqual(theme['foo'], 'bar') self.assertEqual(theme['baz'], True) self.assertTrue('new' not in theme) with self.assertRaises(KeyError): theme['new'] theme['new'] = 42 self.assertTrue('new' in theme) self.assertEqual(theme['new'], 42) @mock.patch('mkdocs.utils.yaml_load', return_value={}) def test_no_theme_config(self, m): theme = Theme(name='mkdocs') self.assertEqual(m.call_count, 1) self.assertEqual(theme.static_templates, {'sitemap.xml'}) def test_inherited_theme(self): m = mock.Mock( side_effect=[ {'extends': 'readthedocs', 'static_templates': ['child.html']}, {'static_templates': ['parent.html']}, ] ) with mock.patch('mkdocs.utils.yaml_load', m) as m: theme = Theme(name='mkdocs') self.assertEqual(m.call_count, 2) self.assertEqual( theme.dirs, [ os.path.join(theme_dir, 'mkdocs'), os.path.join(theme_dir, 'readthedocs'), mkdocs_templates_dir, ], ) self.assertEqual(theme.static_templates, {'sitemap.xml', 'child.html', 'parent.html'}) python-mkdocs-1.5.3/mkdocs/tests/localization_tests.py0000644000175000017500000000512314502137725023114 0ustar carstencarsten#!/usr/bin/env python import unittest from unittest import mock from mkdocs.config.base import ValidationError from mkdocs.localization import install_translations, parse_locale from mkdocs.tests.base import tempdir class LocalizationTests(unittest.TestCase): def setUp(self): self.env = mock.Mock() def test_jinja_extension_installed(self): install_translations(self.env, parse_locale('en'), []) self.env.add_extension.assert_called_once_with('jinja2.ext.i18n') def test_valid_language(self): locale = parse_locale('en') self.assertEqual(locale.language, 'en') def test_valid_language_territory(self): locale = parse_locale('en_US') self.assertEqual(locale.language, 'en') self.assertEqual(locale.territory, 'US') self.assertEqual(str(locale), 'en_US') def test_unknown_locale(self): self.assertRaises(ValidationError, parse_locale, 'foo') def test_invalid_locale(self): self.assertRaises(ValidationError, parse_locale, '42') @tempdir() def test_no_translations_found(self, dir_without_translations): with self.assertLogs('mkdocs') as cm: install_translations(self.env, parse_locale('fr_CA'), [dir_without_translations]) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.localization:No translations could be found for the locale 'fr_CA'. " "Defaulting to English.", ) self.env.install_null_translations.assert_called_once() @tempdir def test_translations_found(self, tdir): translations = mock.Mock() with mock.patch('mkdocs.localization.Translations.load', return_value=translations): install_translations(self.env, parse_locale('en'), [tdir]) self.env.install_gettext_translations.assert_called_once_with(translations) @tempdir() @tempdir() def test_merge_translations(self, custom_dir, theme_dir): custom_dir_translations = mock.Mock() theme_dir_translations = mock.Mock() def side_effet(*args, **kwargs): dirname = args[0] if dirname.startswith(custom_dir): return custom_dir_translations elif dirname.startswith(theme_dir): return theme_dir_translations else: self.fail() with mock.patch('mkdocs.localization.Translations.load', side_effect=side_effet): install_translations(self.env, parse_locale('en'), [custom_dir, theme_dir]) theme_dir_translations.merge.assert_called_once_with(custom_dir_translations) python-mkdocs-1.5.3/mkdocs/tests/cli_tests.py0000644000175000017500000006065714502137725021210 0ustar carstencarsten#!/usr/bin/env python import io import logging import unittest from unittest import mock from click.testing import CliRunner from mkdocs import __main__ as cli class CLITests(unittest.TestCase): def setUp(self): self.runner = CliRunner() @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_default(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve"], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_config_file(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", "--config-file", "mkdocs.yml"], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_serve.call_count, 1) args, kwargs = mock_serve.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_dev_addr(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--dev-addr', '0.0.0.0:80'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr='0.0.0.0:80', livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_strict(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=True, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_theme(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_use_directory_urls(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=True, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_no_directory_urls(self, mock_serve): result = self.runner.invoke( cli.cli, ["serve", '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=False, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_livereload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--livereload'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_no_livereload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--no-livereload'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=False, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_dirtyreload(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type='dirty', config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=False, watch=(), ) @mock.patch('mkdocs.commands.serve.serve', autospec=True) def test_serve_watch_theme(self, mock_serve): result = self.runner.invoke(cli.cli, ["serve", '--watch-theme'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_serve.assert_called_once_with( dev_addr=None, livereload=True, build_type=None, config_file=None, strict=None, theme=None, use_directory_urls=None, watch_theme=True, watch=(), ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_defaults(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) handler = logging._handlers.get('MkDocsStreamHandler') self.assertEqual(handler.level, logging.INFO) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_clean(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--clean'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_dirty(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertTrue(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_config_file(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--config-file', 'mkdocs.yml'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) args, kwargs = mock_load_config.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_strict(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=True, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_theme(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_use_directory_urls(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=True, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_no_directory_urls(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=False, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_site_dir(self, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['build', '--site-dir', 'custom'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir='custom', ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_verbose(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--verbose'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) handler = logging._handlers.get('MkDocsStreamHandler') self.assertEqual(handler.level, logging.DEBUG) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) def test_build_quiet(self, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['build', '--quiet'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_build.call_count, 1) handler = logging._handlers.get('MkDocsStreamHandler') self.assertEqual(handler.level, logging.ERROR) @mock.patch('mkdocs.commands.new.new', autospec=True) def test_new(self, mock_new): result = self.runner.invoke(cli.cli, ["new", "project"], catch_exceptions=False) self.assertEqual(result.exit_code, 0) mock_new.assert_called_once_with('project') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_defaults(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('message' in g_kwargs) self.assertEqual(g_kwargs['message'], None) self.assertTrue('force' in g_kwargs) self.assertEqual(g_kwargs['force'], False) self.assertTrue('ignore_version' in g_kwargs) self.assertEqual(g_kwargs['ignore_version'], False) self.assertEqual(mock_build.call_count, 1) b_args, b_kwargs = mock_build.call_args self.assertTrue('dirty' in b_kwargs) self.assertFalse(b_kwargs['dirty']) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_clean(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--clean'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertFalse(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_dirty(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--dirty'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) args, kwargs = mock_build.call_args self.assertTrue('dirty' in kwargs) self.assertTrue(kwargs['dirty']) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_config_file(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--config-file', 'mkdocs.yml'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) args, kwargs = mock_load_config.call_args self.assertTrue('config_file' in kwargs) self.assertIsInstance(kwargs['config_file'], io.BufferedReader) self.assertEqual(kwargs['config_file'].name, 'mkdocs.yml') @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_message(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--message', 'A commit message'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('message' in g_kwargs) self.assertEqual(g_kwargs['message'], 'A commit message') self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_remote_branch(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--remote-branch', 'foo'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch='foo', remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_remote_name(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--remote-name', 'foo'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name='foo', config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_force(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--force'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('force' in g_kwargs) self.assertEqual(g_kwargs['force'], True) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_ignore_version(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--ignore-version'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) g_args, g_kwargs = mock_gh_deploy.call_args self.assertTrue('ignore_version' in g_kwargs) self.assertEqual(g_kwargs['ignore_version'], True) self.assertEqual(mock_build.call_count, 1) self.assertEqual(mock_load_config.call_count, 1) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_strict(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke(cli.cli, ['gh-deploy', '--strict'], catch_exceptions=False) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=True, theme=None, use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_theme(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--theme', 'readthedocs'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme='readthedocs', use_directory_urls=None, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_use_directory_urls(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--use-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=True, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_no_directory_urls(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--no-directory-urls'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=False, site_dir=None, ) @mock.patch('mkdocs.config.load_config', autospec=True) @mock.patch('mkdocs.commands.build.build', autospec=True) @mock.patch('mkdocs.commands.gh_deploy.gh_deploy', autospec=True) def test_gh_deploy_site_dir(self, mock_gh_deploy, mock_build, mock_load_config): result = self.runner.invoke( cli.cli, ['gh-deploy', '--site-dir', 'custom'], catch_exceptions=False ) self.assertEqual(result.exit_code, 0) self.assertEqual(mock_gh_deploy.call_count, 1) self.assertEqual(mock_build.call_count, 1) mock_load_config.assert_called_once_with( remote_branch=None, remote_name=None, config_file=None, strict=None, theme=None, use_directory_urls=None, site_dir='custom', ) python-mkdocs-1.5.3/mkdocs/tests/search_tests.py0000644000175000017500000005737614502137725021712 0ustar carstencarsten#!/usr/bin/env python import json import unittest from unittest import mock from mkdocs.config.config_options import ValidationError from mkdocs.contrib import search from mkdocs.contrib.search import search_index from mkdocs.structure.files import File from mkdocs.structure.pages import Page from mkdocs.structure.toc import get_toc from mkdocs.tests.base import dedent, get_markdown_toc, load_config def strip_whitespace(string): return string.replace("\n", "").replace(" ", "") class SearchConfigTests(unittest.TestCase): def test_lang_default(self): option = search.LangOption(default=['en']) value = option.validate(None) self.assertEqual(['en'], value) def test_lang_str(self): option = search.LangOption() value = option.validate('en') self.assertEqual(['en'], value) def test_lang_list(self): option = search.LangOption() value = option.validate(['en']) self.assertEqual(['en'], value) def test_lang_multi_list(self): option = search.LangOption() value = option.validate(['en', 'es', 'fr']) self.assertEqual(['en', 'es', 'fr'], value) def test_lang_no_default_none(self): option = search.LangOption() value = option.validate(None) self.assertIsNone(value) def test_lang_no_default_str(self): option = search.LangOption(default=[]) value = option.validate('en') self.assertEqual(['en'], value) def test_lang_no_default_list(self): option = search.LangOption(default=[]) value = option.validate(['en']) self.assertEqual(['en'], value) def test_lang_bad_type(self): option = search.LangOption() with self.assertRaises(ValidationError): option.validate({}) def test_lang_bad_code(self): option = search.LangOption() value = option.validate(['foo']) self.assertEqual(['en'], value) def test_lang_good_and_bad_code(self): option = search.LangOption() value = option.validate(['en', 'foo']) self.assertEqual(['en'], value) def test_lang_missing_and_with_territory(self): option = search.LangOption() value = option.validate(['cs_CZ', 'pt_BR', 'fr']) self.assertEqual(['fr', 'en', 'pt'], value) class SearchPluginTests(unittest.TestCase): def test_plugin_config_defaults(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_lang(self): expected = { 'lang': ['es'], 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'lang': 'es'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_separator(self): expected = { 'lang': None, 'separator': r'[\s\-\.]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'separator': r'[\s\-\.]+'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_min_search_length(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 2, 'prebuild_index': False, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'min_search_length': 2}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_prebuild_index(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': True, 'indexing': 'full', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'prebuild_index': True}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_plugin_config_indexing(self): expected = { 'lang': None, 'separator': r'[\s\-]+', 'min_search_length': 3, 'prebuild_index': False, 'indexing': 'titles', } plugin = search.SearchPlugin() errors, warnings = plugin.load_config({'indexing': 'titles'}) self.assertEqual(plugin.config, expected) self.assertEqual(errors, []) self.assertEqual(warnings, []) def test_event_on_config_defaults(self): plugin = search.SearchPlugin() plugin.load_config({}) result = plugin.on_config(load_config(theme='mkdocs', extra_javascript=[])) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, [result['theme']['locale'].language]) def test_event_on_config_lang(self): plugin = search.SearchPlugin() plugin.load_config({'lang': 'es'}) result = plugin.on_config(load_config(theme='mkdocs', extra_javascript=[])) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, ['es']) def test_event_on_config_theme_locale(self): plugin = search.SearchPlugin() plugin.load_config({}) result = plugin.on_config( load_config(theme={'name': 'mkdocs', 'locale': 'fr'}, extra_javascript=[]) ) self.assertFalse(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) self.assertEqual(plugin.config.lang, [result['theme']['locale'].language]) def test_event_on_config_include_search_page(self): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config( theme={'name': 'mkdocs', 'include_search_page': True}, extra_javascript=[] ) result = plugin.on_config(config) self.assertFalse(result['theme']['search_index_only']) self.assertTrue(result['theme']['include_search_page']) self.assertEqual( result['theme'].static_templates, {'404.html', 'sitemap.xml', 'search.html'} ) self.assertEqual(len(result['theme'].dirs), 3) self.assertEqual(result['extra_javascript'], ['search/main.js']) def test_event_on_config_search_index_only(self): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config( theme={'name': 'mkdocs', 'search_index_only': True}, extra_javascript=[] ) result = plugin.on_config(config) self.assertTrue(result['theme']['search_index_only']) self.assertFalse(result['theme']['include_search_page']) self.assertEqual(result['theme'].static_templates, {'404.html', 'sitemap.xml'}) self.assertEqual(len(result['theme'].dirs), 2) self.assertEqual(len(result['extra_javascript']), 0) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_defaults(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({}) config = load_config(theme='mkdocs') plugin.on_config(config) plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 0) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_single_lang(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es']}) config = load_config(theme='mkdocs') plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 2) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_multi_lang(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es', 'fr']}) config = load_config(theme='mkdocs') plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 4) self.assertEqual(mock_write_file.call_count, 1) @mock.patch('mkdocs.utils.write_file', autospec=True) @mock.patch('mkdocs.utils.copy_file', autospec=True) def test_event_on_post_build_search_index_only(self, mock_copy_file, mock_write_file): plugin = search.SearchPlugin() plugin.load_config({'lang': ['es']}) config = load_config(theme={'name': 'mkdocs', 'search_index_only': True}) plugin.on_pre_build(config) plugin.on_post_build(config) self.assertEqual(mock_copy_file.call_count, 0) self.assertEqual(mock_write_file.call_count, 1) class SearchIndexTests(unittest.TestCase): def test_html_stripping(self): stripper = search_index.ContentParser() stripper.feed("

    Testing

    Content

    ") self.assertEqual(stripper.stripped_html, "Testing\nContent") def test_content_parser(self): parser = search_index.ContentParser() parser.feed('

    Title

    TEST') parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_="title", title="Title")] ) def test_content_parser_no_id(self): parser = search_index.ContentParser() parser.feed("

    Title

    TEST") parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_=None, title="Title")] ) def test_content_parser_content_before_header(self): parser = search_index.ContentParser() parser.feed("Content Before H1

    Title

    TEST") parser.close() self.assertEqual( parser.data, [search_index.ContentSection(text=["TEST"], id_=None, title="Title")] ) def test_content_parser_no_sections(self): parser = search_index.ContentParser() parser.feed("No H1 or H2TitleTEST") self.assertEqual(parser.data, []) def test_find_toc_by_id(self): """ Test finding the relevant TOC item by the tag ID. """ index = search_index.SearchIndex() md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) toc = get_toc(get_markdown_toc(md)) toc_item = index._find_toc_by_id(toc, "heading-1") self.assertEqual(toc_item.url, "#heading-1") self.assertEqual(toc_item.title, "Heading 1") toc_item2 = index._find_toc_by_id(toc, "heading-2") self.assertEqual(toc_item2.url, "#heading-2") self.assertEqual(toc_item2.title, "Heading 2") toc_item3 = index._find_toc_by_id(toc, "heading-3") self.assertEqual(toc_item3.url, "#heading-3") self.assertEqual(toc_item3.title, "Heading 3") def test_create_search_index(self): html_content = """

    Heading 1

    Content 1

    Heading 2

    Content 2

    Heading 3

    Content 3

    """ base_cfg = load_config() pages = [ Page( 'Home', File('index.md', base_cfg.docs_dir, base_cfg.site_dir, base_cfg.use_directory_urls), base_cfg, ), Page( 'About', File('about.md', base_cfg.docs_dir, base_cfg.site_dir, base_cfg.use_directory_urls), base_cfg, ), ] md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) toc = get_toc(get_markdown_toc(md)) full_content = ''.join(f"Heading{i}Content{i}" for i in range(1, 4)) plugin = search.SearchPlugin() errors, warnings = plugin.load_config({}) for page in pages: # Fake page.read_source() and page.render() page.markdown = md page.toc = toc page.content = html_content index = search_index.SearchIndex(**plugin.config) index.add_entry_from_context(page) self.assertEqual(len(index._entries), 4) loc = page.url self.assertEqual(index._entries[0]['title'], page.title) self.assertEqual(strip_whitespace(index._entries[0]['text']), full_content) self.assertEqual(index._entries[0]['location'], loc) self.assertEqual(index._entries[1]['title'], "Heading 1") self.assertEqual(index._entries[1]['text'], "Content 1") self.assertEqual(index._entries[1]['location'], f"{loc}#heading-1") self.assertEqual(index._entries[2]['title'], "Heading 2") self.assertEqual(strip_whitespace(index._entries[2]['text']), "Content2") self.assertEqual(index._entries[2]['location'], f"{loc}#heading-2") self.assertEqual(index._entries[3]['title'], "Heading 3") self.assertEqual(strip_whitespace(index._entries[3]['text']), "Content3") self.assertEqual(index._entries[3]['location'], f"{loc}#heading-3") def test_search_indexing_options(self): def test_page(title, filename, config): test_page = Page( title, File(filename, config.docs_dir, config.site_dir, config.use_directory_urls), config, ) test_page.content = """

    Heading 1

    Content 1

    Heading 2

    Content 2

    Heading 3

    Content 3

    """ test_page.markdown = dedent( """ # Heading 1 ## Heading 2 ### Heading 3""" ) test_page.toc = get_toc(get_markdown_toc(test_page.markdown)) return test_page def validate_full(data, page): self.assertEqual(len(data), 4) for x in data: self.assertTrue(x['title']) self.assertTrue(x['text']) def validate_sections(data, page): # Sanity self.assertEqual(len(data), 4) # Page self.assertEqual(data[0]['title'], page.title) self.assertFalse(data[0]['text']) # Headings for x in data[1:]: self.assertTrue(x['title']) self.assertFalse(x['text']) def validate_titles(data, page): # Sanity self.assertEqual(len(data), 1) for x in data: self.assertFalse(x['text']) for option, validate in { 'full': validate_full, 'sections': validate_sections, 'titles': validate_titles, }.items(): with self.subTest(option): plugin = search.SearchPlugin() # Load plugin config, overriding indexing for test case errors, warnings = plugin.load_config({'indexing': option}) self.assertEqual(errors, []) self.assertEqual(warnings, []) base_cfg = load_config(plugins=['search']) base_cfg.plugins['search'].config.indexing = option pages = [ test_page('Home', 'index.md', base_cfg), test_page('About', 'about.md', base_cfg), ] for page in pages: index = search_index.SearchIndex(**plugin.config) index.add_entry_from_context(page) data = index.generate_search_index() validate(json.loads(data)['docs'], page) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('{"mock": "index"}', None) mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_returns_error(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('', 'Some Error') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: Some Error', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_raises_ioerror(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.side_effect = OSError mock_popen_obj.returncode = 1 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: ', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True, side_effect=OSError) def test_prebuild_index_raises_oserror(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('foo', 'bar') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=True) expected = { 'docs': [], 'config': {'prebuild_index': True}, } with self.assertLogs('mkdocs') as cm: result = json.loads(index.generate_search_index()) self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.contrib.search.search_index:Failed to pre-build search index. Error: ', ) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 0) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_false(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('', '') mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index=False) expected = { 'docs': [], 'config': {'prebuild_index': False}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 0) self.assertEqual(mock_popen_obj.communicate.call_count, 0) self.assertEqual(result, expected) @unittest.skipUnless(search_index.haslunrpy, 'lunr.py is not installed') @mock.patch('mkdocs.contrib.search.search_index.lunr', autospec=True) def test_prebuild_index_python(self, mock_lunr): mock_lunr.return_value.serialize.return_value = {'mock': 'index'} index = search_index.SearchIndex(prebuild_index='python', lang='en') expected = { 'docs': [], 'config': {'prebuild_index': 'python', 'lang': 'en'}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_lunr.call_count, 1) self.assertEqual(result, expected) @unittest.skipIf(search_index.haslunrpy, 'lunr.py is installed') def test_prebuild_index_python_missing_lunr(self): # When the lunr.py dependencies are not installed no prebuilt index is created. index = search_index.SearchIndex(prebuild_index='python', lang='en') expected = { 'docs': [], 'config': {'prebuild_index': 'python', 'lang': 'en'}, } with self.assertLogs('mkdocs', level='WARNING'): result = json.loads(index.generate_search_index()) self.assertEqual(result, expected) @mock.patch('subprocess.Popen', autospec=True) def test_prebuild_index_node(self, mock_popen): # See https://stackoverflow.com/a/36501078/866026 mock_popen.return_value = mock.Mock() mock_popen_obj = mock_popen.return_value mock_popen_obj.communicate.return_value = ('{"mock": "index"}', None) mock_popen_obj.returncode = 0 index = search_index.SearchIndex(prebuild_index='node') expected = { 'docs': [], 'config': {'prebuild_index': 'node'}, 'index': {'mock': 'index'}, } result = json.loads(index.generate_search_index()) self.assertEqual(mock_popen.call_count, 1) self.assertEqual(mock_popen_obj.communicate.call_count, 1) self.assertEqual(result, expected) python-mkdocs-1.5.3/mkdocs/tests/__init__.py0000644000175000017500000000067714502137725020752 0ustar carstencarstenimport logging import unittest.util unittest.util._MAX_LENGTH = 100000 class DisallowLogsHandler(logging.Handler): def __init__(self, level=logging.WARNING): super().__init__(level=level) self.formatter = logging.Formatter("%(levelname)s:%(name)s:%(message)s") def emit(self, record): raise AssertionError(f'Unexpected log: {self.format(record)!r}') logging.lastResort = DisallowLogsHandler() # type: ignore python-mkdocs-1.5.3/mkdocs/tests/integration.py0000644000175000017500000000415314502137725021527 0ustar carstencarsten""" # MkDocs Integration tests This is a simple integration test that builds the MkDocs documentation against all of the builtin themes. From the root of the MkDocs git repo, use: python -m mkdocs.tests.integration --help TODOs - Build with different configuration options. - Build documentation other than just MkDocs as it is relatively simple. """ import logging import os import subprocess import tempfile import click log = logging.getLogger('mkdocs') DIR = os.path.dirname(__file__) MKDOCS_CONFIG = os.path.abspath(os.path.join(DIR, '../../mkdocs.yml')) MKDOCS_THEMES = ['mkdocs', 'readthedocs'] TEST_PROJECTS = os.path.abspath(os.path.join(DIR, 'integration')) @click.command() @click.option( '--output', help="The output directory to use when building themes", type=click.Path(file_okay=False, writable=True), ) def main(output=None): if output is None: directory = tempfile.TemporaryDirectory(prefix='mkdocs_integration-') output = directory.name log.propagate = False stream = logging.StreamHandler() formatter = logging.Formatter("\033[1m\033[1;32m *** %(message)s *** \033[0m") stream.setFormatter(formatter) log.addHandler(stream) log.setLevel(logging.DEBUG) base_cmd = ['mkdocs', 'build', '-q', '-s', '--site-dir'] log.debug("Building installed themes.") for theme in sorted(MKDOCS_THEMES): log.debug(f"Building theme: {theme}") project_dir = os.path.dirname(MKDOCS_CONFIG) out = os.path.join(output, theme) command = base_cmd + [out, '--theme', theme] subprocess.check_call(command, cwd=project_dir) log.debug("Building test projects.") for project in os.listdir(TEST_PROJECTS): project_dir = os.path.join(TEST_PROJECTS, project) if not os.path.isdir(project_dir): continue log.debug(f"Building test project: {project}") out = os.path.join(output, project) command = base_cmd + [out] subprocess.check_call(command, cwd=project_dir) log.debug(f"Theme and integration builds are in {output}") if __name__ == '__main__': main() python-mkdocs-1.5.3/mkdocs/tests/build_tests.py0000644000175000017500000010366614502137725021536 0ustar carstencarsten#!/usr/bin/env python from __future__ import annotations import contextlib import io import os.path import re import textwrap import unittest from pathlib import Path from typing import TYPE_CHECKING from unittest import mock import markdown.preprocessors from mkdocs.commands import build from mkdocs.config import base from mkdocs.exceptions import PluginError from mkdocs.livereload import LiveReloadServer from mkdocs.structure.files import File, Files from mkdocs.structure.nav import get_navigation from mkdocs.structure.pages import Page from mkdocs.tests.base import PathAssertionMixin, load_config, tempdir from mkdocs.utils import meta if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig def build_page(title, path, config, md_src=''): """Helper which returns a Page object.""" files = Files([File(path, config.docs_dir, config.site_dir, config.use_directory_urls)]) page = Page(title, list(files)[0], config) # Fake page.read_source() page.markdown, page.meta = meta.get_data(md_src) return page, files def testing_server(root, builder=lambda: None, mount_path="/"): with mock.patch("socket.socket"): return LiveReloadServer( builder, host="localhost", port=123, root=root, mount_path=mount_path ) class BuildTests(PathAssertionMixin, unittest.TestCase): def _get_env_with_null_translations(self, config): env = config.theme.get_env() env.add_extension('jinja2.ext.i18n') env.install_null_translations() return env # Test build.get_context def test_context_base_url_homepage(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config(nav=nav_cfg, use_directory_urls=False) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['base_url'], '.') def test_context_base_url_homepage_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config(nav=nav_cfg) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['base_url'], '.') def test_context_base_url_nested_page(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config(nav=nav_cfg, use_directory_urls=False) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['base_url'], '..') def test_context_base_url_nested_page_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config(nav=nav_cfg) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['base_url'], '../..') def test_context_base_url_relative_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['base_url'], '..') def test_context_base_url_relative_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['base_url'], '..') def test_context_base_url_absolute_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/') self.assertEqual(context['base_url'], '/') def test_context_base_url__absolute_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/') self.assertEqual(context['base_url'], '/') def test_context_base_url_absolute_nested_no_page(self): cfg = load_config(use_directory_urls=False) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/') self.assertEqual(context['base_url'], '/foo/') def test_context_base_url__absolute_nested_no_page_use_directory_urls(self): cfg = load_config() context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/') self.assertEqual(context['base_url'], '/foo/') def test_context_extra_css_js_from_homepage(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], use_directory_urls=False, ) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['extra_css'], ['style.css']) self.assertEqual(context['extra_javascript'], ['script.js']) def test_context_extra_css_js_from_nested_page(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], use_directory_urls=False, ) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['extra_css'], ['../style.css']) self.assertEqual(context['extra_javascript'], ['../script.js']) def test_context_extra_css_js_from_nested_page_use_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'Nested': 'foo/bar.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['style.css'], extra_javascript=['script.js'], ) fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('foo/bar.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) nav = get_navigation(files, cfg) context = build.get_context(nav, files, cfg, nav.pages[1]) self.assertEqual(context['extra_css'], ['../../style.css']) self.assertEqual(context['extra_javascript'], ['../../script.js']) # TODO: This shouldn't pass on Linux # @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_context_extra_css_path_warning(self): nav_cfg = [ {'Home': 'index.md'}, ] cfg = load_config( nav=nav_cfg, extra_css=['assets\\style.css'], use_directory_urls=False, ) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) with self.assertLogs('mkdocs') as cm: context = build.get_context(nav, files, cfg, nav.pages[0]) self.assertEqual(context['extra_css'], ['assets/style.css']) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.utils:Path 'assets\\style.css' uses OS-specific separator '\\'. " "That will be unsupported in a future release. Please change it to '/'.", ) def test_context_extra_css_js_no_page(self): cfg = load_config(extra_css=['style.css'], extra_javascript=['script.js']) context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='..') self.assertEqual(context['extra_css'], ['../style.css']) self.assertEqual(context['extra_javascript'], ['../script.js']) def test_extra_context(self): cfg = load_config(extra={'a': 1}) context = build.get_context(mock.Mock(), mock.Mock(), cfg) self.assertEqual(context['config']['extra']['a'], 1) # Test build._build_theme_template @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='some content') def test_build_theme_template(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() build._build_theme_template('main.html', env, mock.Mock(), cfg, mock.Mock()) mock_write_file.assert_called_once() mock_build_template.assert_called_once() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='some content') @mock.patch('gzip.GzipFile') @tempdir() def test_build_sitemap_template( self, site_dir, mock_gzip_gzipfile, mock_build_template, mock_write_file ): cfg = load_config(site_dir=site_dir) env = cfg.theme.get_env() build._build_theme_template('sitemap.xml', env, mock.Mock(), cfg, mock.Mock()) mock_write_file.assert_called_once() mock_build_template.assert_called_once() mock_gzip_gzipfile.assert_called_once() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='') def test_skip_missing_theme_template(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() with self.assertLogs('mkdocs') as cm: build._build_theme_template('missing.html', env, mock.Mock(), cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Template skipped: 'missing.html' not found in theme directories.", ) mock_write_file.assert_not_called() mock_build_template.assert_not_called() @mock.patch('mkdocs.utils.write_file') @mock.patch('mkdocs.commands.build._build_template', return_value='') def test_skip_theme_template_empty_output(self, mock_build_template, mock_write_file): cfg = load_config() env = cfg.theme.get_env() with self.assertLogs('mkdocs') as cm: build._build_theme_template('main.html', env, mock.Mock(), cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Template skipped: 'main.html' generated empty output.", ) mock_write_file.assert_not_called() mock_build_template.assert_called_once() # Test build._build_extra_template @tempdir() @mock.patch('mkdocs.commands.build.open', mock.mock_open(read_data='template content')) def test_build_extra_template(self, site_dir): cfg = load_config(site_dir=site_dir) fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) build._build_extra_template('foo.html', files, cfg, mock.Mock()) @mock.patch('mkdocs.commands.build.open', mock.mock_open(read_data='template content')) def test_skip_missing_extra_template(self): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('missing.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Template skipped: 'missing.html' not found in docs_dir.", ) @mock.patch('mkdocs.commands.build.open', side_effect=OSError('Error message.')) def test_skip_ioerror_extra_template(self, mock_open): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('foo.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "WARNING:mkdocs.commands.build:Error reading template 'foo.html': Error message.", ) @mock.patch('mkdocs.commands.build.open', mock.mock_open(read_data='')) def test_skip_extra_template_empty_output(self): cfg = load_config() fs = [File('foo.html', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: build._build_extra_template('foo.html', files, cfg, mock.Mock()) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Template skipped: 'foo.html' generated empty output.", ) # Test build._populate_page @tempdir(files={'index.md': 'page content'}) def test_populate_page(self, docs_dir): cfg = load_config(docs_dir=docs_dir) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file])) self.assertEqual(page.content, '

    page content

    ') @tempdir(files={'testing.html': '

    page content

    '}) def test_populate_page_dirty_modified(self, site_dir): cfg = load_config(site_dir=site_dir) file = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file]), dirty=True) self.assertTrue(page.markdown.startswith('# Welcome to MkDocs')) self.assertTrue( page.content.startswith('

    Welcome to MkDocs

    ') ) @tempdir(files={'index.md': 'page content'}) @tempdir(files={'index.html': '

    page content

    '}) def test_populate_page_dirty_not_modified(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) build._populate_page(page, cfg, Files([file]), dirty=True) # Content is empty as file read was skipped self.assertEqual(page.markdown, None) self.assertEqual(page.content, None) @tempdir(files={'index.md': 'new page content'}) @mock.patch('mkdocs.structure.pages.open', side_effect=OSError('Error message.')) def test_populate_page_read_error(self, docs_dir, mock_open): cfg = load_config(docs_dir=docs_dir) file = File('missing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): build._populate_page(page, cfg, Files([file])) self.assertEqual( cm.output, [ 'ERROR:mkdocs.structure.pages:File not found: missing.md', "ERROR:mkdocs.commands.build:Error reading page 'missing.md': Error message.", ], ) mock_open.assert_called_once() @tempdir(files={'index.md': 'page content'}) def test_populate_page_read_plugin_error(self, docs_dir): def on_page_markdown(*args, **kwargs): raise PluginError('Error message.') cfg = load_config(docs_dir=docs_dir) cfg.plugins.events['page_markdown'].append(on_page_markdown) file = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) page = Page('Foo', file, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(PluginError): build._populate_page(page, cfg, Files([file])) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error reading page 'index.md':", ) # Test build._build_page @tempdir() def test_build_page(self, site_dir): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

    page content

    ' build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertPathIsFile(site_dir, 'index.html') @tempdir() @mock.patch('jinja2.environment.Template.render', return_value='') def test_build_page_empty(self, site_dir, render_mock): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) with self.assertLogs('mkdocs') as cm: build._build_page( files.documentation_pages()[0].page, cfg, files, nav, cfg.theme.get_env() ) self.assertEqual( '\n'.join(cm.output), "INFO:mkdocs.commands.build:Page skipped: 'index.md'. Generated empty output.", ) self.assertPathNotExists(site_dir, 'index.html') render_mock.assert_called_once() @tempdir(files={'index.md': 'page content'}) @tempdir(files={'index.html': '

    page content

    '}) @mock.patch('mkdocs.utils.write_file') def test_build_page_dirty_modified(self, site_dir, docs_dir, mock_write_file): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'new page content' page.content = '

    new page content

    ' build._build_page( page, cfg, files, nav, self._get_env_with_null_translations(cfg), dirty=True ) mock_write_file.assert_not_called() @tempdir(files={'testing.html': '

    page content

    '}) @mock.patch('mkdocs.utils.write_file') def test_build_page_dirty_not_modified(self, site_dir, mock_write_file): cfg = load_config(site_dir=site_dir, nav=['testing.md']) fs = [File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

    page content

    ' build._build_page( page, cfg, files, nav, self._get_env_with_null_translations(cfg), dirty=True ) mock_write_file.assert_called_once() @tempdir() def test_build_page_custom_template(self, site_dir): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.meta = {'template': '404.html'} page.markdown = 'page content' page.content = '

    page content

    ' build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertPathIsFile(site_dir, 'index.html') @tempdir() @mock.patch('mkdocs.utils.write_file', side_effect=OSError('Error message.')) def test_build_page_error(self, site_dir, mock_write_file): cfg = load_config(site_dir=site_dir, nav=['index.md']) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

    page content

    ' with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): build._build_page(page, cfg, files, nav, self._get_env_with_null_translations(cfg)) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error building page 'index.md': Error message.", ) mock_write_file.assert_called_once() @tempdir() def test_build_page_plugin_error(self, site_dir): def on_page_context(*args, **kwargs): raise PluginError('Error message.') cfg = load_config(site_dir=site_dir, nav=['index.md']) cfg.plugins.events['page_context'].append(on_page_context) fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) nav = get_navigation(files, cfg) page = files.documentation_pages()[0].page # Fake populate page page.title = 'Title' page.markdown = 'page content' page.content = '

    page content

    ' with self.assertLogs('mkdocs') as cm: with self.assertRaises(PluginError): build._build_page(page, cfg, files, nav, cfg.theme.get_env()) self.assertEqual( '\n'.join(cm.output), "ERROR:mkdocs.commands.build:Error building page 'index.md':", ) # Test build.build @tempdir( files={ 'index.md': 'page content', 'empty.md': '', 'img.jpg': '', 'static.html': 'content', '.hidden': 'content', '.git/hidden': 'content', } ) @tempdir() def test_copying_media(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) build.build(cfg) # Verify that only non-empty md file (converted to html), static HTML file and image are copied. self.assertPathIsFile(site_dir, 'index.html') self.assertPathIsFile(site_dir, 'img.jpg') self.assertPathIsFile(site_dir, 'static.html') self.assertPathNotExists(site_dir, 'empty.md') self.assertPathNotExists(site_dir, '.hidden') self.assertPathNotExists(site_dir, '.git/hidden') @tempdir(files={'index.md': 'page content'}) @tempdir() def test_copy_theme_files(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir) build.build(cfg) # Verify only theme media are copied, not templates, Python or localization files. self.assertPathIsFile(site_dir, 'index.html') self.assertPathIsFile(site_dir, '404.html') self.assertPathIsDir(site_dir, 'js') self.assertPathIsDir(site_dir, 'css') self.assertPathIsDir(site_dir, 'img') self.assertPathIsDir(site_dir, 'fonts') self.assertPathNotExists(site_dir, '__init__.py') self.assertPathNotExists(site_dir, '__init__.pyc') self.assertPathNotExists(site_dir, 'base.html') self.assertPathNotExists(site_dir, 'content.html') self.assertPathNotExists(site_dir, 'main.html') self.assertPathNotExists(site_dir, 'locales') @contextlib.contextmanager def _assert_build_logs(self, expected): with self.assertLogs('mkdocs') as cm: yield msgs = [f'{r.levelname}:{r.message}' for r in cm.records] if msgs and msgs[0].startswith('INFO:Cleaning site directory'): del msgs[0] if msgs and msgs[0].startswith('INFO:Building documentation to directory'): del msgs[0] if msgs and msgs[-1].startswith('INFO:Documentation built'): del msgs[-1] self.assertEqual('\n'.join(msgs), textwrap.dedent(expected).strip('\n')) @tempdir( files={ 'test/foo.md': 'page1 content, [bar](bar.md)', 'test/bar.md': 'page2 content, [baz](baz.md)', 'test/baz.md': 'page3 content, [foo](foo.md)', '.zoo.md': 'page4 content', } ) @tempdir() def test_exclude_pages_with_invalid_links(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, exclude_docs='ba*.md', ) with self.subTest(live_server=None): expected_logs = ''' INFO:Doc file 'test/foo.md' contains a link to 'test/bar.md' which is excluded from the built site. ''' with self._assert_build_logs(expected_logs): build.build(cfg) self.assertPathIsFile(site_dir, 'test', 'foo.html') self.assertPathNotExists(site_dir, 'test', 'baz.html') self.assertPathNotExists(site_dir, '.zoo.html') server = testing_server(site_dir, mount_path='/documentation/') with self.subTest(live_server=server): expected_logs = ''' INFO:Doc file 'test/bar.md' contains a link to 'test/baz.md' which is excluded from the built site. INFO:Doc file 'test/foo.md' contains a link to 'test/bar.md' which is excluded from the built site. INFO:The following pages are being built only for the preview but will be excluded from `mkdocs build` per `exclude_docs`: - http://localhost:123/documentation/.zoo.html - http://localhost:123/documentation/test/bar.html - http://localhost:123/documentation/test/baz.html ''' with self._assert_build_logs(expected_logs): build.build(cfg, live_server=server) foo_path = Path(site_dir, 'test', 'foo.html') self.assertTrue(foo_path.is_file()) self.assertNotIn('DRAFT', foo_path.read_text()) baz_path = Path(site_dir, 'test', 'baz.html') self.assertPathIsFile(baz_path) self.assertIn('DRAFT', baz_path.read_text()) self.assertPathIsFile(site_dir, '.zoo.html') @tempdir( files={ 'foo/README.md': 'page1 content', 'foo/index.md': 'page2 content', } ) @tempdir() def test_conflicting_readme_and_index(self, site_dir, docs_dir): cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False) for server in None, testing_server(site_dir): with self.subTest(live_server=server): expected_logs = ''' WARNING:Excluding 'foo/README.md' from the site because it conflicts with 'foo/index.md'. ''' with self._assert_build_logs(expected_logs): build.build(cfg, live_server=server) index_path = Path(site_dir, 'foo', 'index.html') self.assertPathIsFile(index_path) self.assertRegex(index_path.read_text(), r'page2 content') @tempdir( files={ 'foo/README.md': 'page1 content', 'foo/index.md': 'page2 content', } ) @tempdir() def test_exclude_readme_and_index(self, site_dir, docs_dir): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, exclude_docs='index.md' ) for server in None, testing_server(site_dir): with self.subTest(live_server=server): with self._assert_build_logs(''): build.build(cfg, live_server=server) index_path = Path(site_dir, 'foo', 'index.html') self.assertPathIsFile(index_path) self.assertRegex(index_path.read_text(), r'page1 content') @tempdir( files={ 'foo.md': 'page1 content', 'bar.md': 'page2 content', } ) @tempdir() @tempdir() def test_plugins_adding_files_and_interacting(self, tmp_dir, site_dir, docs_dir): def on_files_1(files: Files, config: MkDocsConfig) -> Files: # Plugin 1 generates a file. Path(tmp_dir, 'SUMMARY.md').write_text('foo.md\nbar.md\n') files.append(File('SUMMARY.md', tmp_dir, config.site_dir, config.use_directory_urls)) return files def on_files_2(files: Files, config: MkDocsConfig) -> None: # Plugin 2 reads that file and uses it to configure the nav. f = files.get_file_from_path('SUMMARY.md') assert f is not None config.nav = Path(f.abs_src_path).read_text().splitlines() for server in None, testing_server(site_dir): for exclude in 'full', 'nav', None: with self.subTest(live_server=server, exclude=exclude): cfg = load_config( docs_dir=docs_dir, site_dir=site_dir, use_directory_urls=False, exclude_docs='SUMMARY.md' if exclude == 'full' else '', not_in_nav='SUMMARY.md' if exclude == 'nav' else '', ) cfg.plugins.events['files'] += [on_files_1, on_files_2] expected_logs = '' if exclude is None: expected_logs = ''' INFO:The following pages exist in the docs directory, but are not included in the "nav" configuration: - SUMMARY.md ''' if exclude == 'full' and server: expected_logs = ''' INFO:The following pages are being built only for the preview but will be excluded from `mkdocs build` per `exclude_docs`: - http://localhost:123/SUMMARY.html ''' with self._assert_build_logs(expected_logs): build.build(cfg, live_server=server) foo_path = Path(site_dir, 'foo.html') self.assertPathIsFile(foo_path) self.assertRegex( foo_path.read_text(), r'href="foo.html"[\s\S]+href="bar.html"', # Nav order is respected ) summary_path = Path(site_dir, 'SUMMARY.html') if exclude == 'full' and not server: self.assertPathNotExists(summary_path) else: self.assertPathExists(summary_path) @tempdir( files={ 'README.md': 'CONFIG_README\n', 'docs/foo.md': 'ROOT_FOO\n', 'docs/test/bar.md': 'TEST_BAR\n', 'docs/main/foo.md': 'MAIN_FOO\n', 'docs/main/main.md': ( '--8<-- "README.md"\n\n' '--8<-- "foo.md"\n\n' '--8<-- "test/bar.md"\n\n' '--8<-- "../foo.md"\n\n' ), } ) def test_markdown_extension_with_relative(self, config_dir): for base_path, expected in { '!relative': '''

    (Failed to read 'README.md')

    MAIN_FOO

    (Failed to read 'test/bar.md')

    ROOT_FOO

    ''', '!relative $docs_dir': '''

    (Failed to read 'README.md')

    ROOT_FOO

    TEST_BAR

    (Failed to read '../foo.md')

    ''', '!relative $config_dir/docs': '''

    (Failed to read 'README.md')

    ROOT_FOO

    TEST_BAR

    (Failed to read '../foo.md')

    ''', '!relative $config_dir': '''

    CONFIG_README

    (Failed to read 'foo.md')

    (Failed to read 'test/bar.md')

    (Failed to read '../foo.md')

    ''', }.items(): with self.subTest(base_path=base_path): cfg = f''' site_name: test use_directory_urls: false markdown_extensions: - mkdocs.tests.build_tests: base_path: {base_path} ''' config = base.load_config( io.StringIO(cfg), config_file_path=os.path.join(config_dir, 'mkdocs.yml') ) with self._assert_build_logs(''): build.build(config) main_path = Path(config_dir, 'site', 'main', 'main.html') self.assertTrue(main_path.is_file()) self.assertIn(textwrap.dedent(expected), main_path.read_text()) # Test build.site_directory_contains_stale_files @tempdir(files=['index.html']) def test_site_dir_contains_stale_files(self, site_dir): self.assertTrue(build.site_directory_contains_stale_files(site_dir)) @tempdir() def test_not_site_dir_contains_stale_files(self, site_dir): self.assertFalse(build.site_directory_contains_stale_files(site_dir)) class _TestPreprocessor(markdown.preprocessors.Preprocessor): def __init__(self, base_path: str) -> None: self.base_path = base_path def run(self, lines: list[str]) -> list[str]: for i, line in enumerate(lines): m = re.search(r'^--8<-- "(.+)"$', line) if m: try: lines[i] = Path(self.base_path, m[1]).read_text() except OSError: lines[i] = f"(Failed to read {m[1]!r})\n" return lines class _TestExtension(markdown.extensions.Extension): def __init__(self, base_path: str) -> None: self.base_path = base_path def extendMarkdown(self, md: markdown.Markdown) -> None: md.preprocessors.register(_TestPreprocessor(self.base_path), "mkdocs_test", priority=32) makeExtension = _TestExtension python-mkdocs-1.5.3/mkdocs/tests/base.py0000644000175000017500000001041514502137725020114 0ustar carstencarstenfrom __future__ import annotations import contextlib import os import textwrap from functools import wraps from tempfile import TemporaryDirectory import markdown from mkdocs import utils from mkdocs.config.defaults import MkDocsConfig def dedent(text): return textwrap.dedent(text).strip() def get_markdown_toc(markdown_source): """Return TOC generated by Markdown parser from Markdown source text.""" md = markdown.Markdown(extensions=['toc']) md.convert(markdown_source) return md.toc_tokens def load_config(config_file_path: str | None = None, **cfg) -> MkDocsConfig: """Helper to build a simple config for testing.""" path_base = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'integration', 'minimal') if 'site_name' not in cfg: cfg['site_name'] = 'Example' if 'docs_dir' not in cfg: # Point to an actual dir to avoid a 'does not exist' error on validation. cfg['docs_dir'] = os.path.join(path_base, 'docs') if 'plugins' not in cfg: cfg['plugins'] = [] conf = MkDocsConfig(config_file_path=config_file_path or os.path.join(path_base, 'mkdocs.yml')) conf.load_dict(cfg) errors_warnings = conf.validate() assert errors_warnings == ([], []), errors_warnings return conf def tempdir(files=None, **kw): """ A decorator for building a temporary directory with prepopulated files. The temporary directory and files are created just before the wrapped function is called and are destroyed immediately after the wrapped function returns. The `files` keyword should be a dict of file paths as keys and strings of file content as values. If `files` is a list, then each item is assumed to be a path of an empty file. All other keywords are passed to `tempfile.TemporaryDirectory` to create the parent directory. In the following example, two files are created in the temporary directory and then are destroyed when the function exits: @tempdir(files={ 'foo.txt': 'foo content', 'bar.txt': 'bar content' }) def example(self, tdir): assert os.path.isfile(os.path.join(tdir, 'foo.txt')) pth = os.path.join(tdir, 'bar.txt') assert os.path.isfile(pth) with open(pth, 'r', encoding='utf-8') as f: assert f.read() == 'bar content' """ files = {f: '' for f in files} if isinstance(files, (list, tuple)) else files or {} kw['prefix'] = 'mkdocs_test-' + kw.get('prefix', '') def decorator(fn): @wraps(fn) def wrapper(self, *args): with TemporaryDirectory(**kw) as td: for path, content in files.items(): pth = os.path.join(td, path) utils.write_file(content.encode(encoding='utf-8'), pth) return fn(self, td, *args) return wrapper return decorator @contextlib.contextmanager def change_dir(path): old_cwd = os.getcwd() os.chdir(path) try: yield finally: os.chdir(old_cwd) class PathAssertionMixin: """ Assertion methods for testing paths. Each method accepts one or more strings, which are first joined using os.path.join. """ def assertPathsEqual(self, a, b, msg=None): self.assertEqual(a.replace(os.sep, '/'), b.replace(os.sep, '/')) def assertPathExists(self, *parts): path = os.path.join(*parts) if not os.path.exists(path): msg = self._formatMessage(None, f"The path '{path}' does not exist") raise self.failureException(msg) def assertPathNotExists(self, *parts): path = os.path.join(*parts) if os.path.exists(path): msg = self._formatMessage(None, f"The path '{path}' does exist") raise self.failureException(msg) def assertPathIsFile(self, *parts): path = os.path.join(*parts) if not os.path.isfile(path): msg = self._formatMessage(None, f"The path '{path}' is not a file that exists") raise self.failureException(msg) def assertPathIsDir(self, *parts): path = os.path.join(*parts) if not os.path.isdir(path): msg = self._formatMessage(None, f"The path '{path}' is not a directory that exists") raise self.failureException(msg) python-mkdocs-1.5.3/mkdocs/tests/structure/0000755000175000017500000000000014502137725020667 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/structure/__init__.py0000644000175000017500000000000014502137725022766 0ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/tests/structure/nav_tests.py0000644000175000017500000004720014502137725023252 0ustar carstencarsten#!/usr/bin/env python import sys import unittest from mkdocs.structure.files import File, Files from mkdocs.structure.nav import Section, _get_by_type, get_navigation from mkdocs.structure.pages import Page from mkdocs.tests.base import dedent, load_config class SiteNavigationTests(unittest.TestCase): maxDiff = None def test_simple_nav(self): nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ Page(title='Home', url='/') Page(title='About', url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/')") def test_nav_no_directory_urls(self): nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ Page(title='Home', url='/index.html') Page(title='About', url='/about.html') """ ) cfg = load_config(nav=nav_cfg, use_directory_urls=False, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/index.html')") def test_nav_missing_page(self): nav_cfg = [ {'Home': 'index.md'}, ] expected = dedent( """ Page(title='Home', url='/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('page_not_in_nav.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 1) self.assertEqual(len(site_navigation.pages), 1) for file in files: self.assertIsInstance(file.page, Page) def test_nav_no_title(self): nav_cfg = [ 'index.md', {'About': 'about.md'}, ] expected = dedent( """ Page(title=[blank], url='/') Page(title='About', url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(nav_cfg[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File(nav_cfg[1]['About'], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) def test_nav_external_links(self): nav_cfg = [ {'Home': 'index.md'}, {'Local': '/local.html'}, {'External': 'http://example.com/external.html'}, ] expected = dedent( """ Page(title='Home', url='/') Link(title='Local', url='/local.html') Link(title='External', url='http://example.com/external.html') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs', level='DEBUG') as cm: site_navigation = get_navigation(files, cfg) self.assertEqual( cm.output, [ "INFO:mkdocs.structure.nav:An absolute path to '/local.html' is included in the 'nav' configuration, which presumably points to an external resource.", "DEBUG:mkdocs.structure.nav:An external link to 'http://example.com/external.html' is included in the 'nav' configuration.", ], ) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 1) def test_nav_bad_links(self): nav_cfg = [ {'Home': 'index.md'}, {'Missing': 'missing.html'}, {'Bad External': 'example.com'}, ] expected = dedent( """ Page(title='Home', url='/') Link(title='Missing', url='missing.html') Link(title='Bad External', url='example.com') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) with self.assertLogs('mkdocs') as cm: site_navigation = get_navigation(files, cfg) self.assertEqual( cm.output, [ "WARNING:mkdocs.structure.nav:A relative path to 'missing.html' is included in the 'nav' configuration, which is not found in the documentation files.", "WARNING:mkdocs.structure.nav:A relative path to 'example.com' is included in the 'nav' configuration, which is not found in the documentation files.", ], ) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 1) def test_indented_nav(self): nav_cfg = [ {'Home': 'index.md'}, { 'API Guide': [ {'Running': 'api-guide/running.md'}, {'Testing': 'api-guide/testing.md'}, {'Debugging': 'api-guide/debugging.md'}, { 'Advanced': [ {'Part 1': 'api-guide/advanced/part-1.md'}, ] }, ] }, { 'About': [ {'Release notes': 'about/release-notes.md'}, {'License': '/license.html'}, ] }, {'External': 'https://example.com/'}, ] expected = dedent( """ Page(title='Home', url='/') Section(title='API Guide') Page(title='Running', url='/api-guide/running/') Page(title='Testing', url='/api-guide/testing/') Page(title='Debugging', url='/api-guide/debugging/') Section(title='Advanced') Page(title='Part 1', url='/api-guide/advanced/part-1/') Section(title='About') Page(title='Release notes', url='/about/release-notes/') Link(title='License', url='/license.html') Link(title='External', url='https://example.com/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ 'index.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/debugging.md', 'api-guide/advanced/part-1.md', 'about/release-notes.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 4) self.assertEqual(len(site_navigation.pages), 6) self.assertEqual(repr(site_navigation.homepage), "Page(title='Home', url='/')") self.assertIsNone(site_navigation.items[0].parent) self.assertEqual(site_navigation.items[0].ancestors, []) self.assertIsNone(site_navigation.items[1].parent) self.assertEqual(site_navigation.items[1].ancestors, []) self.assertEqual(len(site_navigation.items[1].children), 4) self.assertEqual( repr(site_navigation.items[1].children[0].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[0].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[1].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[1].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[2].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[2].ancestors, [site_navigation.items[1]]) self.assertEqual( repr(site_navigation.items[1].children[3].parent), "Section(title='API Guide')" ) self.assertEqual(site_navigation.items[1].children[3].ancestors, [site_navigation.items[1]]) self.assertEqual(len(site_navigation.items[1].children[3].children), 1) self.assertEqual( repr(site_navigation.items[1].children[3].children[0].parent), "Section(title='Advanced')", ) self.assertEqual( site_navigation.items[1].children[3].children[0].ancestors, [site_navigation.items[1].children[3], site_navigation.items[1]], ) self.assertIsNone(site_navigation.items[2].parent) self.assertEqual(len(site_navigation.items[2].children), 2) self.assertEqual( repr(site_navigation.items[2].children[0].parent), "Section(title='About')" ) self.assertEqual(site_navigation.items[2].children[0].ancestors, [site_navigation.items[2]]) self.assertEqual( repr(site_navigation.items[2].children[1].parent), "Section(title='About')" ) self.assertEqual(site_navigation.items[2].children[1].ancestors, [site_navigation.items[2]]) self.assertIsNone(site_navigation.items[3].parent) self.assertEqual(site_navigation.items[3].ancestors, []) self.assertIsNone(site_navigation.items[3].children) def test_nested_ungrouped_nav(self): nav_cfg = [ {'Home': 'index.md'}, {'Contact': 'about/contact.md'}, {'License Title': 'about/sub/license.md'}, ] expected = dedent( """ Page(title='Home', url='/') Page(title='Contact', url='/about/contact/') Page(title='License Title', url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) def test_nested_ungrouped_nav_no_titles(self): nav_cfg = [ 'index.md', 'about/contact.md', 'about/sub/license.md', ] expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/contact/') Page(title=[blank], url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File(item, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_nested_ungrouped_no_titles_windows(self): nav_cfg = [ 'index.md', 'about\\contact.md', 'about\\sub\\license.md', ] expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/contact/') Page(title=[blank], url='/about/sub/license/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File(item, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 3) def test_nav_from_files(self): expected = dedent( """ Page(title=[blank], url='/') Page(title=[blank], url='/about/') """ ) cfg = load_config(site_url='http://example.com/') fs = [ File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), File('about.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls), ] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") def test_nav_from_nested_files(self): expected = dedent( """ Page(title=[blank], url='/') Section(title='About') Page(title=[blank], url='/about/license/') Page(title=[blank], url='/about/release-notes/') Section(title='Api guide') Page(title=[blank], url='/api-guide/debugging/') Page(title=[blank], url='/api-guide/running/') Page(title=[blank], url='/api-guide/testing/') Section(title='Advanced') Page(title=[blank], url='/api-guide/advanced/part-1/') """ ) cfg = load_config(site_url='http://example.com/') fs = [ 'index.md', 'about/license.md', 'about/release-notes.md', 'api-guide/debugging.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/advanced/part-1.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 3) self.assertEqual(len(site_navigation.pages), 7) self.assertEqual(repr(site_navigation.homepage), "Page(title=[blank], url='/')") def test_nav_page_subclass(self): class PageSubclass(Page): pass nav_cfg = [ {'Home': 'index.md'}, {'About': 'about.md'}, ] expected = dedent( """ PageSubclass(title=[blank], url='/') PageSubclass(title=[blank], url='/about/') """ ) cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ File(list(item.values())[0], cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for item in nav_cfg ] files = Files(fs) for file in files: PageSubclass(None, file, cfg) site_navigation = get_navigation(files, cfg) self.assertEqual(str(site_navigation).strip(), expected) self.assertEqual(len(site_navigation.items), 2) self.assertEqual(len(site_navigation.pages), 2) self.assertEqual(repr(site_navigation.homepage), "PageSubclass(title=[blank], url='/')") def test_active(self): nav_cfg = [ {'Home': 'index.md'}, { 'API Guide': [ {'Running': 'api-guide/running.md'}, {'Testing': 'api-guide/testing.md'}, {'Debugging': 'api-guide/debugging.md'}, { 'Advanced': [ {'Part 1': 'api-guide/advanced/part-1.md'}, ] }, ] }, { 'About': [ {'Release notes': 'about/release-notes.md'}, {'License': 'about/license.md'}, ] }, ] cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [ 'index.md', 'api-guide/running.md', 'api-guide/testing.md', 'api-guide/debugging.md', 'api-guide/advanced/part-1.md', 'about/release-notes.md', 'about/license.md', ] files = Files([File(s, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for s in fs]) site_navigation = get_navigation(files, cfg) # Confirm nothing is active self.assertTrue(all(page.active is False for page in site_navigation.pages)) self.assertTrue(all(item.active is False for item in site_navigation.items)) # Activate site_navigation.items[1].children[3].children[0].active = True # Confirm ancestors are activated self.assertTrue(site_navigation.items[1].children[3].children[0].active) self.assertTrue(site_navigation.items[1].children[3].active) self.assertTrue(site_navigation.items[1].active) # Confirm non-ancestors are not activated self.assertFalse(site_navigation.items[0].active) self.assertFalse(site_navigation.items[1].children[0].active) self.assertFalse(site_navigation.items[1].children[1].active) self.assertFalse(site_navigation.items[1].children[2].active) self.assertFalse(site_navigation.items[2].active) self.assertFalse(site_navigation.items[2].children[0].active) self.assertFalse(site_navigation.items[2].children[1].active) # Deactivate site_navigation.items[1].children[3].children[0].active = False # Confirm ancestors are deactivated self.assertFalse(site_navigation.items[1].children[3].children[0].active) self.assertFalse(site_navigation.items[1].children[3].active) self.assertFalse(site_navigation.items[1].active) def test_get_by_type_nested_sections(self): nav_cfg = [ { 'Section 1': [ { 'Section 2': [ {'Page': 'page.md'}, ] }, ] }, ] cfg = load_config(nav=nav_cfg, site_url='http://example.com/') fs = [File('page.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls)] files = Files(fs) site_navigation = get_navigation(files, cfg) self.assertEqual(len(_get_by_type(site_navigation, Section)), 2) python-mkdocs-1.5.3/mkdocs/tests/structure/page_tests.py0000644000175000017500000014655114502137725023413 0ustar carstencarstenfrom __future__ import annotations import os import sys import textwrap import unittest from unittest import mock from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File, Files from mkdocs.structure.pages import Page, _RelativePathTreeprocessor from mkdocs.tests.base import dedent, tempdir DOCS_DIR = os.path.join( os.path.abspath(os.path.dirname(__file__)), '..', 'integration', 'subpages', 'docs' ) def load_config(**cfg) -> MkDocsConfig: cfg.setdefault('site_name', 'Example') cfg.setdefault( 'docs_dir', os.path.join( os.path.abspath(os.path.dirname(__file__)), '..', 'integration', 'minimal', 'docs' ), ) conf = MkDocsConfig() conf.load_dict(cfg) errors_warnings = conf.validate() assert errors_warnings == ([], []), errors_warnings return conf class PageTests(unittest.TestCase): def test_homepage(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) self.assertIsNone(fl.page) pg = Page('Foo', fl, cfg) self.assertEqual(fl.page, pg) self.assertEqual(pg.url, '') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertTrue(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = 'foo' self.assertEqual(pg.url, 'sub1/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertFalse(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, 'foo') self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page_no_parent(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = None # non-homepage at nav root level; see #1919. self.assertEqual(pg.url, 'sub1/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_index_page_no_parent_no_directory_urls(self): cfg = load_config(docs_dir=DOCS_DIR, use_directory_urls=False) fl = File('sub1/index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = None # non-homepage at nav root level; see #1919. self.assertEqual(pg.url, 'sub1/index.html') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_nested_nonindex_page(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('sub1/non-index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.parent = 'foo' self.assertEqual(pg.url, 'sub1/non-index/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertFalse(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, 'foo') self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_defaults(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertRegex(pg.update_date, r'\d{4}-\d{2}-\d{2}') self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_no_directory_url(self): cfg = load_config(use_directory_urls=False) fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing.html') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url(self): cfg = load_config(site_url='http://example.com') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url_nested(self): cfg = load_config(site_url='http://example.com/foo/') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/foo/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/foo/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_page_canonical_url_nested_no_slash(self): cfg = load_config(site_url='http://example.com/foo') fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, '/foo/testing/') self.assertEqual(pg.canonical_url, 'http://example.com/foo/testing/') self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertEqual(pg.markdown, None) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Foo') self.assertEqual(pg.toc, []) def test_predefined_page_title(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Page Title', fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Page Title') self.assertEqual(pg.toc, []) def test_page_title_from_markdown(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Welcome to MkDocs') pg.render(cfg, fl) self.assertEqual(pg.title, 'Welcome to MkDocs') _SETEXT_CONTENT = dedent( ''' Welcome to MkDocs Setext ======================== This tests extracting a setext style title. ''' ) @tempdir(files={'testing_setext_title.md': _SETEXT_CONTENT}) def test_page_title_from_setext_markdown(self, docs_dir): cfg = load_config() fl = File('testing_setext_title.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) self.assertIsNone(pg.title) pg.read_source(cfg) self.assertEqual(pg.title, 'Testing setext title') pg.render(cfg, fl) self.assertEqual(pg.title, 'Welcome to MkDocs Setext') @tempdir(files={'testing_setext_title.md': _SETEXT_CONTENT}) def test_page_title_from_markdown_stripped_anchorlinks(self, docs_dir): cfg = MkDocsConfig() cfg.site_name = 'example' cfg.markdown_extensions = {'toc': {'permalink': '&'}} self.assertEqual(cfg.validate(), ([], [])) fl = File('testing_setext_title.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) self.assertEqual(pg.title, 'Welcome to MkDocs Setext') _FORMATTING_CONTENT = dedent( ''' # \\*Hello --- *beautiful* `world` Hi. ''' ) @tempdir(files={'testing_formatting.md': _FORMATTING_CONTENT}) def test_page_title_from_markdown_strip_formatting(self, docs_dir): cfg = load_config() cfg.markdown_extensions.append('smarty') fl = File('testing_formatting.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) self.assertEqual(pg.title, '*Hello — beautiful world') _ATTRLIST_CONTENT = dedent( ''' # Welcome to MkDocs Attr { #welcome } This tests extracting the title, with enabled attr_list markdown_extension. ''' ) @tempdir(files={'testing_attr_list.md': _ATTRLIST_CONTENT}) def test_page_title_from_markdown_stripped_attr_list(self, docs_dir): cfg = load_config() cfg.markdown_extensions.append('attr_list') fl = File('testing_attr_list.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) self.assertEqual(pg.title, 'Welcome to MkDocs Attr') @tempdir(files={'testing_attr_list.md': _ATTRLIST_CONTENT}) def test_page_title_from_markdown_preserved_attr_list(self, docs_dir): cfg = load_config() fl = File('testing_attr_list.md', docs_dir, docs_dir, use_directory_urls=True) pg = Page(None, fl, cfg) pg.read_source(cfg) pg.render(cfg, fl) self.assertEqual(pg.title, 'Welcome to MkDocs Attr { #welcome }') def test_page_title_from_meta(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('metadata.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'metadata/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('# Welcome to MkDocs\n')) self.assertEqual(pg.meta, {'title': 'A Page Title'}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'A Page Title') self.assertEqual(pg.toc, []) pg.render(cfg, fl) self.assertEqual(pg.title, 'A Page Title') def test_page_title_from_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('page-title.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'page-title/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('Page content.\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Page title') pg.render(cfg, fl) self.assertEqual(pg.title, 'Page title') def test_page_title_from_capitalized_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('pageTitle.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, 'pageTitle/') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertFalse(pg.is_homepage) self.assertFalse(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('Page content.\n')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'pageTitle') def test_page_title_from_homepage_filename(self): cfg = load_config(docs_dir=DOCS_DIR) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) pg.read_source(cfg) self.assertEqual(pg.url, '') self.assertEqual(pg.abs_url, None) self.assertEqual(pg.canonical_url, None) self.assertEqual(pg.edit_url, None) self.assertEqual(pg.file, fl) self.assertEqual(pg.content, None) self.assertTrue(pg.is_homepage) self.assertTrue(pg.is_index) self.assertTrue(pg.is_page) self.assertFalse(pg.is_section) self.assertTrue(pg.is_top_level) self.assertTrue(pg.markdown.startswith('## Test')) self.assertEqual(pg.meta, {}) self.assertEqual(pg.next_page, None) self.assertEqual(pg.parent, None) self.assertEqual(pg.previous_page, None) self.assertEqual(pg.title, 'Home') self.assertEqual(pg.toc, []) def test_page_eq(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertTrue(pg == Page('Foo', fl, cfg)) def test_page_ne(self): cfg = load_config() f1 = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) f2 = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', f1, cfg) # Different Title self.assertTrue(pg != Page('Bar', f1, cfg)) # Different File self.assertTrue(pg != Page('Foo', f2, cfg)) @tempdir() def test_BOM(self, docs_dir): md_src = '# An UTF-8 encoded file with a BOM' cfg = load_config(docs_dir=docs_dir) fl = File('index.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page(None, fl, cfg) # Create an UTF-8 Encoded file with BOM (as Microsoft editors do). See #1186 with open(fl.abs_src_path, 'w', encoding='utf-8-sig') as f: f.write(md_src) # Now read the file. pg.read_source(cfg) # Ensure the BOM (`\ufeff`) is removed self.assertNotIn('\ufeff', pg.markdown) self.assertEqual(pg.markdown, md_src) self.assertEqual(pg.meta, {}) def test_page_edit_url( self, paths={'testing.md': 'testing/', 'sub1/non-index.md': 'sub1/non-index/'} ): for case in [ dict( config={'repo_url': 'http://github.com/mkdocs/mkdocs'}, edit_url='http://github.com/mkdocs/mkdocs/edit/master/docs/testing.md', edit_url2='http://github.com/mkdocs/mkdocs/edit/master/docs/sub1/non-index.md', ), dict( config={'repo_url': 'https://github.com/mkdocs/mkdocs/'}, edit_url='https://github.com/mkdocs/mkdocs/edit/master/docs/testing.md', edit_url2='https://github.com/mkdocs/mkdocs/edit/master/docs/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com'}, edit_url=None, edit_url2=None, ), dict( config={'repo_url': 'http://example.com', 'edit_uri': 'edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': '/edit/master/'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo', 'edit_uri': '/edit/master/'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': '/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo/', 'edit_uri': 'edit/master/'}, edit_url='http://example.com/foo/edit/master/testing.md', edit_url2='http://example.com/foo/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/foo', 'edit_uri': 'edit/master/'}, edit_url='http://example.com/foo/edit/master/testing.md', edit_url2='http://example.com/foo/edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '?query=edit/master'}, edit_url='http://example.com?query=edit/master/testing.md', edit_url2='http://example.com?query=edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/', 'edit_uri': '?query=edit/master/'}, edit_url='http://example.com/?query=edit/master/testing.md', edit_url2='http://example.com/?query=edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com', 'edit_uri': '#edit/master'}, edit_url='http://example.com#edit/master/testing.md', edit_url2='http://example.com#edit/master/sub1/non-index.md', ), dict( config={'repo_url': 'http://example.com/', 'edit_uri': '#edit/master/'}, edit_url='http://example.com/#edit/master/testing.md', edit_url2='http://example.com/#edit/master/sub1/non-index.md', ), dict( config={'edit_uri': 'http://example.com/edit/master'}, edit_url='http://example.com/edit/master/testing.md', edit_url2='http://example.com/edit/master/sub1/non-index.md', ), dict( config={'edit_uri_template': 'https://github.com/project/repo/wiki/{path_noext}'}, edit_url='https://github.com/project/repo/wiki/testing', edit_url2='https://github.com/project/repo/wiki/sub1/non-index', ), dict( config={ 'repo_url': 'https://github.com/project/repo/wiki', 'edit_uri_template': '{path_noext}/_edit', }, edit_url='https://github.com/project/repo/wiki/testing/_edit', edit_url2='https://github.com/project/repo/wiki/sub1/non-index/_edit', ), dict( config={ 'repo_url': 'https://gitlab.com/project/repo', 'edit_uri_template': '-/sse/master/docs%2F{path!q}', }, edit_url='https://gitlab.com/project/repo/-/sse/master/docs%2Ftesting.md', edit_url2='https://gitlab.com/project/repo/-/sse/master/docs%2Fsub1%2Fnon-index.md', ), dict( config={ 'repo_url': 'https://bitbucket.org/project/repo/', 'edit_uri_template': 'src/master/docs/{path}?mode=edit', }, edit_url='https://bitbucket.org/project/repo/src/master/docs/testing.md?mode=edit', edit_url2='https://bitbucket.org/project/repo/src/master/docs/sub1/non-index.md?mode=edit', ), dict( config={ 'repo_url': 'http://example.com', 'edit_uri': '', 'edit_uri_template': '', }, # Set to blank value edit_url=None, edit_url2=None, ), dict(config={}, edit_url=None, edit_url2=None), # Nothing defined ]: for i, path in enumerate(paths, 1): edit_url_key = f'edit_url{i}' if i > 1 else 'edit_url' with self.subTest(case['config'], path=path): cfg = load_config(**case['config']) fl = File(path, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, paths[path]) self.assertEqual(pg.edit_url, case[edit_url_key]) @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_page_edit_url_windows(self): self.test_page_edit_url( paths={'testing.md': 'testing/', 'sub1\\non-index.md': 'sub1/non-index/'} ) def test_page_edit_url_warning(self): for case in [ dict( config={'edit_uri': 'edit/master'}, edit_url='edit/master/testing.md', warning="WARNING:mkdocs.structure.pages:edit_uri: " "'edit/master/testing.md' is not a valid URL, it should include the http:// (scheme)", ), ]: with self.subTest(case['config']): with self.assertLogs('mkdocs') as cm: cfg = load_config(**case['config']) fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.url, 'testing/') self.assertEqual(pg.edit_url, case['edit_url']) self.assertEqual(cm.output, [case['warning']]) def test_page_render(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) pg.read_source(cfg) self.assertEqual(pg.content, None) self.assertEqual(pg.toc, []) pg.render(cfg, [fl]) self.assertTrue( pg.content.startswith('

    Welcome to MkDocs

    \n') ) self.assertEqual( str(pg.toc).strip(), dedent( """ Welcome to MkDocs - #welcome-to-mkdocs Commands - #commands Project layout - #project-layout """ ), ) def test_missing_page(self): cfg = load_config() fl = File('missing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) with self.assertLogs('mkdocs') as cm: with self.assertRaises(OSError): pg.read_source(cfg) self.assertEqual( '\n'.join(cm.output), 'ERROR:mkdocs.structure.pages:File not found: missing.md' ) class SourceDateEpochTests(unittest.TestCase): def setUp(self): self.default = os.environ.get('SOURCE_DATE_EPOCH', None) os.environ['SOURCE_DATE_EPOCH'] = '0' def test_source_date_epoch(self): cfg = load_config() fl = File('testing.md', cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) pg = Page('Foo', fl, cfg) self.assertEqual(pg.update_date, '1970-01-01') def tearDown(self): if self.default is not None: os.environ['SOURCE_DATE_EPOCH'] = self.default else: del os.environ['SOURCE_DATE_EPOCH'] class RelativePathExtensionTests(unittest.TestCase): def get_rendered_result( self, *, content: str, files: list[str], logs: str = '', **kwargs ) -> str: cfg = load_config(docs_dir=DOCS_DIR, **kwargs) fs = [File(f, cfg.docs_dir, cfg.site_dir, cfg.use_directory_urls) for f in files] pg = Page('Foo', fs[0], cfg) with mock.patch('mkdocs.structure.pages.open', mock.mock_open(read_data=content)): pg.read_source(cfg) if logs: with self.assertLogs('mkdocs.structure.pages') as cm: pg.render(cfg, Files(fs)) msgs = [f'{r.levelname}:{r.message}' for r in cm.records] self.assertEqual('\n'.join(msgs), textwrap.dedent(logs).strip('\n')) elif sys.version_info >= (3, 10): with self.assertNoLogs('mkdocs.structure.pages'): pg.render(cfg, Files(fs)) else: pg.render(cfg, Files(fs)) assert pg.content is not None content = pg.content if content.startswith('

    ') and content.endswith('

    '): content = content[3:-4] return content def test_relative_html_link(self): self.assertEqual( self.get_rendered_result( content='[link](non-index.md)', files=['index.md', 'non-index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](non-index.md)', files=['index.md', 'non-index.md'], ), 'link', ) def test_relative_html_link_index(self): self.assertEqual( self.get_rendered_result( content='[link](index.md)', files=['non-index.md', 'index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](index.md)', files=['non-index.md', 'index.md'], ), 'link', ) def test_relative_html_link_sub_index(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/index.md)', files=['index.md', 'sub2/index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/index.md)', files=['index.md', 'sub2/index.md'], ), 'link', ) def test_relative_html_link_sub_page(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/non-index.md)', files=['index.md', 'sub2/non-index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/non-index.md)', files=['index.md', 'sub2/non-index.md'], ), 'link', ) def test_relative_doc_link_without_extension(self): self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](bar/Dockerfile)', files=['foo/bar.md', 'foo/bar/Dockerfile'], ), 'link', ) self.assertEqual( self.get_rendered_result( content='[link](bar/Dockerfile)', files=['foo/bar.md', 'foo/bar/Dockerfile'], ), 'link', ) def test_relative_html_link_with_encoded_space(self): self.assertEqual( self.get_rendered_result( content='[link](file%20name.md)', files=['index.md', 'file name.md'] ), 'link', ) def test_relative_html_link_with_unencoded_space(self): self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](file name.md)', files=['index.md', 'file name.md'], ), 'link', ) def test_relative_html_link_parent_index(self): self.assertEqual( self.get_rendered_result( content='[link](../index.md)', files=['sub2/non-index.md', 'index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](../index.md)', files=['sub2/non-index.md', 'index.md'], ), 'link', ) def test_relative_html_link_hash(self): self.assertEqual( self.get_rendered_result( content='[link](non-index.md#hash)', files=['index.md', 'non-index.md'] ), 'link', ) def test_relative_html_link_sub_index_hash(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/index.md#hash)', files=['index.md', 'sub2/index.md'] ), 'link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[link](sub2/index.md#hash)', files=['index.md', 'sub2/index.md'], ), 'link', ) def test_relative_html_link_sub_page_hash(self): self.assertEqual( self.get_rendered_result( content='[link](sub2/non-index.md#hash)', files=['index.md', 'sub2/non-index.md'] ), 'link', ) def test_relative_html_link_hash_only(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='[link](#hash)', files=['index.md'], ), 'link', ) def test_relative_image_link_from_homepage(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='![image](image.png)', files=['index.md', 'image.png'], ), 'image', # no opening ./ ) def test_relative_image_link_from_subpage(self): self.assertEqual( self.get_rendered_result( content='![image](../image.png)', files=['sub2/non-index.md', 'image.png'] ), 'image', ) def test_relative_image_link_from_sibling(self): self.assertEqual( self.get_rendered_result( content='![image](image.png)', files=['non-index.md', 'image.png'] ), 'image', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='![image](image.png)', files=['non-index.md', 'image.png'], ), 'image', ) def test_no_links(self): self.assertEqual( self.get_rendered_result(content='*__not__ a link*.', files=['index.md']), 'not a link.', ) def test_bad_relative_doc_link(self): self.assertEqual( self.get_rendered_result( content='[link](non-existent.md)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains a relative link 'non-existent.md', but the target is not found among documentation files.", ), 'link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(not_found='info')), content='[link](../non-existent.md)', files=['sub/index.md'], logs="INFO:Doc file 'sub/index.md' contains a relative link '../non-existent.md', but the target 'non-existent.md' is not found among documentation files.", ), 'link', ) def test_relative_slash_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[link](../about/)', files=['foo/index.md', 'about.md'], logs="INFO:Doc file 'foo/index.md' contains an unrecognized relative link '../about/', it was left as is. Did you mean '../about.md'?", ), 'link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(unrecognized_links='warn')), content='[link](../#example)', files=['foo/bar.md', 'index.md'], logs="WARNING:Doc file 'foo/bar.md' contains an unrecognized relative link '../#example', it was left as is. Did you mean '../index.md#example'?", ), 'link', ) def test_self_anchor_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[link](./#test)', files=['index.md'], logs="INFO:Doc file 'index.md' contains an unrecognized relative link './#test', it was left as is. Did you mean '#test'?", ), 'link', ) def test_external_link(self): self.assertEqual( self.get_rendered_result( content='[external](http://example.com/index.md)', files=['index.md'] ), 'external', ) def test_absolute_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='[absolute link](/path/to/file.md)', files=['index.md', 'path/to/file.md'], logs="INFO:Doc file 'index.md' contains an absolute link '/path/to/file.md', it was left as is. Did you mean 'path/to/file.md'?", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( use_directory_urls=False, content='[absolute link](/path/to/file/)', files=['path/index.md', 'path/to/file.md'], logs="INFO:Doc file 'path/index.md' contains an absolute link '/path/to/file/', it was left as is.", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( content='[absolute link](/path/to/file)', files=['path/index.md', 'path/to/file.md'], logs="INFO:Doc file 'path/index.md' contains an absolute link '/path/to/file', it was left as is. Did you mean 'to/file.md'?", ), 'absolute link', ) def test_absolute_link(self): self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='warn')), content='[absolute link](/path/to/file.md)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains an absolute link '/path/to/file.md', it was left as is.", ), 'absolute link', ) self.assertEqual( self.get_rendered_result( validation=dict(links=dict(absolute_links='ignore')), content='[absolute link](/path/to/file.md)', files=['index.md'], ), 'absolute link', ) def test_image_link_with_suggestion(self): self.assertEqual( self.get_rendered_result( content='![image](../image.png)', files=['foo/bar.md', 'foo/image.png'], logs="WARNING:Doc file 'foo/bar.md' contains a relative link '../image.png', but the target 'image.png' is not found among documentation files. Did you mean 'image.png'?", ), 'image', ) self.assertEqual( self.get_rendered_result( content='![image](/image.png)', files=['foo/bar.md', 'image.png'], logs="INFO:Doc file 'foo/bar.md' contains an absolute link '/image.png', it was left as is. Did you mean '../image.png'?", ), 'image', ) def test_absolute_win_local_path(self): for use_directory_urls in True, False: self.assertEqual( self.get_rendered_result( use_directory_urls=use_directory_urls, content='[absolute local path](\\image.png)', files=['index.md'], logs="INFO:Doc file 'index.md' contains an absolute link '\\image.png', it was left as is.", ), 'absolute local path', ) def test_email_link(self): self.assertEqual( self.get_rendered_result(content='', files=['index.md']), # Markdown's default behavior is to obscure email addresses by entity-encoding them. # The following is equivalent to: 'mail@example.com' 'mail@' 'example.com', ) def test_invalid_email_link(self): self.assertEqual( self.get_rendered_result( content='[contact](mail@example.com)', files=['index.md'], logs="WARNING:Doc file 'index.md' contains a relative link 'mail@example.com', but the target is not found among documentation files. Did you mean 'mailto:mail@example.com'?", ), 'contact', ) def test_possible_target_uris(self): def test(paths, expected='', exp_true=None, exp_false=None): """Test that `possible_target_uris` yields expected values, for use_directory_urls = true and false""" for use_directory_urls, expected_paths in ( (True, exp_true or expected), (False, exp_false or expected), ): with self.subTest(paths, use_directory_urls=use_directory_urls): src_path, dest_path = paths f = File(src_path, '', '', use_directory_urls) actual = _RelativePathTreeprocessor._possible_target_uris( f, dest_path, use_directory_urls ) self.assertEqual(list(actual), expected_paths.split(', ')) test(('index.md', 'index.md'), expected='index.md') test(('index.md', 'foo/bar.md'), expected='foo/bar.md') test( ('index.md', 'foo/bar'), expected='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md', ) test(('index.md', 'foo/bar.html'), expected='foo/bar.html, foo/bar.md') test( ('foo.md', 'foo/bar.html'), exp_true='foo/bar.html, foo/bar.md, foo/foo/bar.html, foo/foo/bar.md', exp_false='foo/bar.html, foo/bar.md', ) test(('foo.md', 'index.md'), exp_true='index.md, foo/index.md', exp_false='index.md') test(('foo.md', 'foo.md'), exp_true='foo.md, foo/foo.md', exp_false='foo.md') test(('foo.md', 'bar.md'), exp_true='bar.md, foo/bar.md', exp_false='bar.md') test( ('foo.md', 'foo/bar.md'), exp_true='foo/bar.md, foo/foo/bar.md', exp_false='foo/bar.md' ) test( ('foo.md', 'foo'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md, foo.md', ) test( ('foo.md', 'foo/bar'), exp_true='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md, foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', exp_false='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md', ) test( ('foo.md', 'foo/bar/'), exp_true='foo/bar, foo/bar/index.md, foo/bar/README.md, foo/bar.md, foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', exp_false='foo/bar, foo/bar/index.md, foo/bar/README.md', ) test( ('foo.md', 'foo.html'), exp_true='foo.html, foo.md, foo/foo.html, foo/foo.md', exp_false='foo.html, foo.md', ) test( ('foo.md', '../foo/'), exp_true='../foo, foo, foo/index.md, foo/README.md, foo.md', exp_false='../foo', ) test( ('foo.md', 'foo/'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md', ) test(('foo/index.md', 'index.md'), expected='foo/index.md') test(('foo/index.md', 'foo/bar.html'), expected='foo/foo/bar.html, foo/foo/bar.md') test(('foo/index.md', '../foo.html'), expected='foo.html, foo.md') test(('foo/index.md', '../'), expected='., index.md, README.md') test( ('foo/bar.md', 'index.md'), exp_true='foo/index.md, foo/bar/index.md', exp_false='foo/index.md', ) test( ('foo/bar.md', 'foo.md'), exp_true='foo/foo.md, foo/bar/foo.md', exp_false='foo/foo.md', ) test( ('foo/bar.md', 'bar.md'), exp_true='foo/bar.md, foo/bar/bar.md', exp_false='foo/bar.md', ) test( ('foo/bar.md', 'foo/bar.md'), exp_true='foo/foo/bar.md, foo/bar/foo/bar.md', exp_false='foo/foo/bar.md', ) test( ('foo/bar.md', 'foo'), exp_true='foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md, foo/bar/foo, foo/bar/foo/index.md, foo/bar/foo/README.md, foo/bar/foo.md', exp_false='foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', ) test( ('foo/bar.md', 'foo/bar'), exp_true='foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md, foo/bar/foo/bar, foo/bar/foo/bar/index.md, foo/bar/foo/bar/README.md, foo/bar/foo/bar.md', exp_false='foo/foo/bar, foo/foo/bar/index.md, foo/foo/bar/README.md, foo/foo/bar.md', ) test( ('foo/bar.md', 'foo.html'), exp_true='foo/foo.html, foo/foo.md, foo/bar/foo.html, foo/bar/foo.md', exp_false='foo/foo.html, foo/foo.md', ) test( ('foo/bar.md', 'foo/bar.html'), exp_true='foo/foo/bar.html, foo/foo/bar.md, foo/bar/foo/bar.html, foo/bar/foo/bar.md', exp_false='foo/foo/bar.html, foo/foo/bar.md', ) test( ('foo/bar.md', '../foo/bar.html'), exp_true='foo/bar.html, foo/bar.md, foo/foo/bar.html, foo/foo/bar.md', exp_false='foo/bar.html, foo/bar.md', ) test( ('foo/bar.md', '../foo'), exp_true='foo, foo/index.md, foo/README.md, foo.md, foo/foo, foo/foo/index.md, foo/foo/README.md, foo/foo.md', exp_false='foo, foo/index.md, foo/README.md, foo.md', ) test( ('foo/bar.md', '../'), exp_true='., index.md, README.md, foo, foo/index.md, foo/README.md', exp_false='., index.md, README.md', ) for src in 'foo/bar.md', 'foo.md', 'foo/index.md': test((src, '/foo'), expected='foo, foo/index.md, foo/README.md, foo.md') test((src, '/foo/bar.md'), expected='foo/bar.md') test((src, '/foo/bar.html'), expected='foo/bar.html, foo/bar.md') for dest in '', '.', './': test(('index.md', dest), expected='., index.md') test(('foo/bar.md', dest), expected='foo, foo/bar.md') test( ('foo/bar.md', '../test.png'), exp_true='test.png, test.png.md, foo/test.png, foo/test.png.md', exp_false='test.png, test.png.md', ) python-mkdocs-1.5.3/mkdocs/tests/structure/toc_tests.py0000644000175000017500000001220714502137725023252 0ustar carstencarsten#!/usr/bin/env python import unittest from mkdocs.structure.toc import get_toc from mkdocs.tests.base import dedent, get_markdown_toc class TableOfContentsTests(unittest.TestCase): def test_indented_toc(self): md = dedent( """ # Heading 1 ## Heading 2 ### Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_indented_toc_html(self): md = dedent( """ # Heading 1 ## Heading 2 ## Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_flat_toc(self): md = dedent( """ # Heading 1 # Heading 2 # Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 3) def test_flat_h2_toc(self): md = dedent( """ ## Heading 1 ## Heading 2 ## Heading 3 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 3) def test_mixed_toc(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_mixed_html(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_nested_anchor(self): md = dedent( """ # Heading 1 ## Heading 2 # Heading 3 ### Heading 4 ### Heading 5 """ ) expected = dedent( """ Heading 1 - #heading-1 Heading 2 - #heading-2 Heading 3 - #heading-3 Heading 4 - #heading-4 Heading 5 - #heading-5 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 2) def test_entityref(self): md = dedent( """ # Heading & 1 ## Heading > 2 ### Heading < 3 """ ) expected = dedent( """ Heading & 1 - #heading-1 Heading > 2 - #heading-2 Heading < 3 - #heading-3 """ ) toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_charref(self): md = '# @Header' expected = '@Header - #header' toc = get_toc(get_markdown_toc(md)) self.assertEqual(str(toc).strip(), expected) self.assertEqual(len(toc), 1) def test_level(self): md = dedent( """ # Heading 1 ## Heading 1.1 ### Heading 1.1.1 ### Heading 1.1.2 ## Heading 1.2 """ ) toc = get_toc(get_markdown_toc(md)) def get_level_sequence(items): for item in items: yield item.level yield from get_level_sequence(item.children) self.assertEqual(tuple(get_level_sequence(toc)), (1, 2, 3, 3, 2)) python-mkdocs-1.5.3/mkdocs/tests/structure/file_tests.py0000644000175000017500000010264414502137725023411 0ustar carstencarstenimport os import sys import unittest from unittest import mock from mkdocs.structure.files import File, Files, _sort_files, get_files from mkdocs.tests.base import PathAssertionMixin, load_config, tempdir class TestFiles(PathAssertionMixin, unittest.TestCase): def test_file_eq(self): file = File('a.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertTrue( file == File('a.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) ) def test_file_ne(self): file = File('a.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) # Different filename self.assertTrue( file != File('b.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) ) # Different src_path self.assertTrue( file != File('a.md', '/path/to/other', '/path/to/site', use_directory_urls=False) ) # Different URL self.assertTrue( file != File('a.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) ) @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows") def test_src_path_windows(self): f = File('foo\\a.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/a.md') self.assertEqual(f.src_path, 'foo\\a.md') f.src_uri = 'foo/b.md' self.assertEqual(f.src_uri, 'foo/b.md') self.assertEqual(f.src_path, 'foo\\b.md') f.src_path = 'foo/c.md' self.assertEqual(f.src_uri, 'foo/c.md') self.assertEqual(f.src_path, 'foo\\c.md') f.src_path = 'foo\\d.md' self.assertEqual(f.src_uri, 'foo/d.md') self.assertEqual(f.src_path, 'foo\\d.md') f.src_uri = 'foo\\e.md' self.assertEqual(f.src_uri, 'foo\\e.md') self.assertEqual(f.src_path, 'foo\\e.md') def test_sort_files(self): self.assertEqual( _sort_files(['b.md', 'bb.md', 'a.md', 'index.md', 'aa.md']), ['index.md', 'a.md', 'aa.md', 'b.md', 'bb.md'], ) self.assertEqual( _sort_files(['b.md', 'index.html', 'a.md', 'index.md']), ['index.html', 'index.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['a.md', 'index.md', 'b.md', 'index.html']), ['index.html', 'index.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['.md', '_.md', 'a.md', 'index.md', '1.md']), ['index.md', '.md', '1.md', '_.md', 'a.md'], ) self.assertEqual( _sort_files(['a.md', 'b.md', 'a.md']), ['a.md', 'a.md', 'b.md'], ) self.assertEqual( _sort_files(['A.md', 'B.md', 'README.md']), ['README.md', 'A.md', 'B.md'], ) def test_md_file(self): f = File('foo.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo.md') self.assertEqual(f.dest_uri, 'foo.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo.html') self.assertEqual(f.url, 'foo.html') self.assertEqual(f.name, 'foo') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_file_use_directory_urls(self): f = File('foo.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo.md') self.assertEqual(f.dest_uri, 'foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/index.html') self.assertEqual(f.url, 'foo/') self.assertEqual(f.name, 'foo') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_file_nested(self): f = File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/bar.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.md') self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.url, 'foo/bar.html') self.assertEqual(f.name, 'bar') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_file_nested_use_directory_urls(self): f = File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/bar.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.md') self.assertEqual(f.dest_uri, 'foo/bar/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar/index.html') self.assertEqual(f.url, 'foo/bar/') self.assertEqual(f.name, 'bar') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file(self): f = File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/index.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') self.assertEqual(f.url, 'index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_readme_index_file(self): f = File('README.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'README.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/README.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') self.assertEqual(f.url, 'index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file_use_directory_urls(self): f = File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/index.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') self.assertEqual(f.url, './') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_readme_index_file_use_directory_urls(self): f = File('README.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'README.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/README.md') self.assertEqual(f.dest_uri, 'index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/index.html') self.assertEqual(f.url, './') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file_nested(self): f = File('foo/index.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/index.md') self.assertEqual(f.dest_uri, 'foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/index.html') self.assertEqual(f.url, 'foo/index.html') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_md_index_file_nested_use_directory_urls(self): f = File('foo/index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/index.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/index.md') self.assertEqual(f.dest_uri, 'foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/index.html') self.assertEqual(f.url, 'foo/') self.assertEqual(f.name, 'index') self.assertTrue(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_static_file(self): f = File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.html') self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.url, 'foo/bar.html') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertTrue(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_static_file_use_directory_urls(self): f = File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.html') self.assertEqual(f.dest_uri, 'foo/bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.html') self.assertEqual(f.url, 'foo/bar.html') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertTrue(f.is_static_page()) self.assertFalse(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_media_file(self): f = File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.jpg') self.assertEqual(f.dest_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.jpg') self.assertEqual(f.url, 'foo/bar.jpg') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_media_file_use_directory_urls(self): f = File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.jpg') self.assertEqual(f.dest_uri, 'foo/bar.jpg') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.jpg') self.assertEqual(f.url, 'foo/bar.jpg') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertFalse(f.is_css()) def test_javascript_file(self): f = File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.js') self.assertEqual(f.dest_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.js') self.assertEqual(f.url, 'foo/bar.js') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertTrue(f.is_javascript()) self.assertFalse(f.is_css()) def test_javascript_file_use_directory_urls(self): f = File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.js') self.assertEqual(f.dest_uri, 'foo/bar.js') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.js') self.assertEqual(f.url, 'foo/bar.js') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertTrue(f.is_javascript()) self.assertFalse(f.is_css()) def test_css_file(self): f = File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.css') self.assertEqual(f.dest_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.css') self.assertEqual(f.url, 'foo/bar.css') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertTrue(f.is_css()) def test_css_file_use_directory_urls(self): f = File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(f.src_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo/bar.css') self.assertEqual(f.dest_uri, 'foo/bar.css') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo/bar.css') self.assertEqual(f.url, 'foo/bar.css') self.assertEqual(f.name, 'bar') self.assertFalse(f.is_documentation_page()) self.assertFalse(f.is_static_page()) self.assertTrue(f.is_media_file()) self.assertFalse(f.is_javascript()) self.assertTrue(f.is_css()) def test_file_name_with_space(self): f = File('foo bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(f.src_uri, 'foo bar.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/foo bar.md') self.assertEqual(f.dest_uri, 'foo bar.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/foo bar.html') self.assertEqual(f.url, 'foo%20bar.html') self.assertEqual(f.name, 'foo bar') def test_file_name_with_custom_dest_uri(self): for use_directory_urls in True, False: with self.subTest(use_directory_urls=use_directory_urls): f = File( 'stuff/foo.md', src_dir='/path/to/docs', dest_dir='/path/to/site', use_directory_urls=use_directory_urls, dest_uri='stuff/1-foo/index.html', ) self.assertEqual(f.src_uri, 'stuff/foo.md') self.assertPathsEqual(f.abs_src_path, '/path/to/docs/stuff/foo.md') self.assertEqual(f.dest_uri, 'stuff/1-foo/index.html') self.assertPathsEqual(f.abs_dest_path, '/path/to/site/stuff/1-foo/index.html') if use_directory_urls: self.assertEqual(f.url, 'stuff/1-foo/') else: self.assertEqual(f.url, 'stuff/1-foo/index.html') self.assertEqual(f.name, 'foo') def test_files(self): fs = [ File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=True), ] files = Files(fs) self.assertEqual(list(files), fs) self.assertEqual(len(files), 6) self.assertEqual(files.documentation_pages(), [fs[0], fs[1]]) self.assertEqual(files.static_pages(), [fs[2]]) self.assertEqual(files.media_files(), [fs[3], fs[4], fs[5]]) self.assertEqual(files.javascript_files(), [fs[4]]) self.assertEqual(files.css_files(), [fs[5]]) self.assertEqual(files.get_file_from_path('foo/bar.jpg'), fs[3]) self.assertEqual(files.get_file_from_path('foo/bar.jpg'), fs[3]) self.assertEqual(files.get_file_from_path('missing.jpg'), None) self.assertTrue(fs[2].src_uri in files.src_uris) extra_file = File('extra.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertFalse(extra_file.src_uri in files.src_uris) files.append(extra_file) self.assertEqual(len(files), 7) self.assertTrue(extra_file.src_uri in files.src_uris) self.assertEqual(files.documentation_pages(), [fs[0], fs[1], extra_file]) files.remove(fs[1]) self.assertEqual(files.documentation_pages(), [fs[0], extra_file]) @tempdir( files=[ 'favicon.ico', 'index.md', ] ) @tempdir( files=[ 'base.html', 'favicon.ico', 'style.css', 'foo.md', 'README', '.ignore.txt', '.ignore/file.txt', 'foo/.ignore.txt', 'foo/.ignore/file.txt', ] ) def test_add_files_from_theme(self, tdir, ddir): config = load_config(docs_dir=ddir, theme={'name': None, 'custom_dir': tdir}) env = config.theme.get_env() files = get_files(config) self.assertEqual( [file.src_path for file in files], ['index.md', 'favicon.ico'], ) files.add_files_from_theme(env, config) self.assertEqual( [file.src_path for file in files], ['index.md', 'favicon.ico', 'style.css'], ) # Ensure theme file does not override docs_dir file self.assertEqual( files.get_file_from_path('favicon.ico').abs_src_path, os.path.normpath(os.path.join(ddir, 'favicon.ico')), ) def test_get_relative_url_use_directory_urls(self): to_files = [ 'index.md', 'foo/index.md', 'foo/bar/index.md', 'foo/bar/baz/index.md', 'foo.md', 'foo/bar.md', 'foo/bar/baz.md', ] to_file_urls = [ './', 'foo/', 'foo/bar/', 'foo/bar/baz/', 'foo/', 'foo/bar/', 'foo/bar/baz/', ] from_file = File('img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'img.jpg') expected = [ 'img.jpg', # img.jpg relative to . '../img.jpg', # img.jpg relative to foo/ '../../img.jpg', # img.jpg relative to foo/bar/ '../../../img.jpg', # img.jpg relative to foo/bar/baz/ '../img.jpg', # img.jpg relative to foo '../../img.jpg', # img.jpg relative to foo/bar '../../../img.jpg', # img.jpg relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('foo/img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'foo/img.jpg') expected = [ 'foo/img.jpg', # foo/img.jpg relative to . 'img.jpg', # foo/img.jpg relative to foo/ '../img.jpg', # foo/img.jpg relative to foo/bar/ '../../img.jpg', # foo/img.jpg relative to foo/bar/baz/ 'img.jpg', # foo/img.jpg relative to foo '../img.jpg', # foo/img.jpg relative to foo/bar '../../img.jpg', # foo/img.jpg relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('index.html', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, './') expected = [ './', # . relative to . '../', # . relative to foo/ '../../', # . relative to foo/bar/ '../../../', # . relative to foo/bar/baz/ '../', # . relative to foo '../../', # . relative to foo/bar '../../../', # . relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('file.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(from_file.url, 'file/') expected = [ 'file/', # file relative to . '../file/', # file relative to foo/ '../../file/', # file relative to foo/bar/ '../../../file/', # file relative to foo/bar/baz/ '../file/', # file relative to foo '../../file/', # file relative to foo/bar '../../../file/', # file relative to foo/bar/baz ] for i, filename in enumerate(to_files): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) def test_get_relative_url(self): to_files = [ 'index.md', 'foo/index.md', 'foo/bar/index.md', 'foo/bar/baz/index.md', 'foo.md', 'foo/bar.md', 'foo/bar/baz.md', ] to_file_urls = [ 'index.html', 'foo/index.html', 'foo/bar/index.html', 'foo/bar/baz/index.html', 'foo.html', 'foo/bar.html', 'foo/bar/baz.html', ] from_file = File('img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'img.jpg') expected = [ 'img.jpg', # img.jpg relative to . '../img.jpg', # img.jpg relative to foo/ '../../img.jpg', # img.jpg relative to foo/bar/ '../../../img.jpg', # img.jpg relative to foo/bar/baz/ 'img.jpg', # img.jpg relative to foo.html '../img.jpg', # img.jpg relative to foo/bar.html '../../img.jpg', # img.jpg relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('foo/img.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'foo/img.jpg') expected = [ 'foo/img.jpg', # foo/img.jpg relative to . 'img.jpg', # foo/img.jpg relative to foo/ '../img.jpg', # foo/img.jpg relative to foo/bar/ '../../img.jpg', # foo/img.jpg relative to foo/bar/baz/ 'foo/img.jpg', # foo/img.jpg relative to foo.html 'img.jpg', # foo/img.jpg relative to foo/bar.html '../img.jpg', # foo/img.jpg relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('index.html', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'index.html') expected = [ 'index.html', # index.html relative to . '../index.html', # index.html relative to foo/ '../../index.html', # index.html relative to foo/bar/ '../../../index.html', # index.html relative to foo/bar/baz/ 'index.html', # index.html relative to foo.html '../index.html', # index.html relative to foo/bar.html '../../index.html', # index.html relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) from_file = File('file.html', '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(from_file.url, 'file.html') expected = [ 'file.html', # file.html relative to . '../file.html', # file.html relative to foo/ '../../file.html', # file.html relative to foo/bar/ '../../../file.html', # file.html relative to foo/bar/baz/ 'file.html', # file.html relative to foo.html '../file.html', # file.html relative to foo/bar.html '../../file.html', # file.html relative to foo/bar/baz.html ] for i, filename in enumerate(to_files): with self.subTest(from_file=from_file.src_path, to_file=filename): file = File(filename, '/path/to/docs', '/path/to/site', use_directory_urls=False) self.assertEqual(file.url, to_file_urls[i]) self.assertEqual(from_file.url_relative_to(file.url), expected[i]) self.assertEqual(from_file.url_relative_to(file), expected[i]) @tempdir( files=[ 'index.md', 'readme.md', 'bar.css', 'bar.html', 'bar.jpg', 'bar.js', 'bar.md', '.dotfile', 'templates/foo.html', ] ) def test_get_files(self, tdir): config = load_config(docs_dir=tdir, extra_css=['bar.css'], extra_javascript=['bar.js']) files = get_files(config) self.assertIsInstance(files, Files) self.assertEqual( [f.src_path for f in files if f.inclusion.is_included()], ['index.md', 'bar.css', 'bar.html', 'bar.jpg', 'bar.js', 'bar.md', 'readme.md'], ) self.assertEqual( [f.src_path for f in files if f.inclusion.is_excluded()], ['.dotfile', 'templates/foo.html'], ) @tempdir( files=[ 'README.md', 'foo.md', ] ) def test_get_files_include_readme_without_index(self, tdir): config = load_config(docs_dir=tdir) files = get_files(config) self.assertIsInstance(files, Files) self.assertEqual([f.src_path for f in files], ['README.md', 'foo.md']) @tempdir( files=[ 'index.md', 'README.md', 'foo.md', ] ) def test_get_files_exclude_readme_with_index(self, tdir): config = load_config(docs_dir=tdir) with self.assertLogs('mkdocs') as cm: files = get_files(config) self.assertRegex( '\n'.join(cm.output), r"^WARNING:mkdocs.structure.files:" r"Excluding 'README.md' from the site because it conflicts with 'index.md'.$", ) self.assertIsInstance(files, Files) self.assertEqual([f.src_path for f in files], ['index.md', 'foo.md']) @tempdir() @tempdir(files={'test.txt': 'source content'}) def test_copy_file(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) dest_path = os.path.join(dest_dir, 'test.txt') self.assertPathNotExists(dest_path) file.copy_file() self.assertPathIsFile(dest_path) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_same_file(self, dest_dir): file = File('test.txt', dest_dir, dest_dir, use_directory_urls=False) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file() self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_clean_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) file.is_modified = mock.Mock(return_value=True) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=False) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_dirty_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) file.is_modified = mock.Mock(return_value=True) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=True) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'source content') @tempdir(files={'test.txt': 'destination content'}) @tempdir(files={'test.txt': 'source content'}) def test_copy_file_dirty_not_modified(self, src_dir, dest_dir): file = File('test.txt', src_dir, dest_dir, use_directory_urls=False) file.is_modified = mock.Mock(return_value=False) dest_path = os.path.join(dest_dir, 'test.txt') file.copy_file(dirty=True) self.assertPathIsFile(dest_path) with open(dest_path, encoding='utf-8') as f: self.assertEqual(f.read(), 'destination content') def test_files_append_remove_src_paths(self): fs = [ File('index.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.md', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.html', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.jpg', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.js', '/path/to/docs', '/path/to/site', use_directory_urls=True), File('foo/bar.css', '/path/to/docs', '/path/to/site', use_directory_urls=True), ] files = Files(fs) self.assertEqual(len(files), 6) self.assertEqual(len(files.src_uris), 6) extra_file = File('extra.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertFalse(extra_file.src_uri in files.src_uris) files.append(extra_file) self.assertEqual(len(files), 7) self.assertEqual(len(files.src_uris), 7) self.assertTrue(extra_file.src_uri in files.src_uris) files.remove(extra_file) self.assertEqual(len(files), 6) self.assertEqual(len(files.src_uris), 6) self.assertFalse(extra_file.src_uri in files.src_uris) python-mkdocs-1.5.3/mkdocs/tests/livereload_tests.py0000644000175000017500000006164014502137725022560 0ustar carstencarsten#!/usr/bin/env python import contextlib import email import io import sys import threading import time import unittest from pathlib import Path from unittest import mock from mkdocs.livereload import LiveReloadServer from mkdocs.tests.base import change_dir, tempdir class FakeRequest: def __init__(self, content): self.in_file = io.BytesIO(content.encode()) self.out_file = io.BytesIO() self.out_file.close = lambda: None def makefile(self, *args, **kwargs): return self.in_file def sendall(self, data): self.out_file.write(data) @contextlib.contextmanager def testing_server(root, builder=lambda: None, mount_path="/"): """Create the server and start most of its parts, but don't listen on a socket.""" with mock.patch("socket.socket"): server = LiveReloadServer( builder, host="localhost", port=0, root=root, mount_path=mount_path, polling_interval=0.2, ) server.setup_environ() server.observer.start() thread = threading.Thread(target=server._build_loop, daemon=True) thread.start() yield server server.shutdown() thread.join() def do_request(server, content): request = FakeRequest(content + " HTTP/1.1") server.RequestHandlerClass(request, ("127.0.0.1", 0), server) response = request.out_file.getvalue() headers, _, content = response.partition(b"\r\n\r\n") status, _, headers = headers.partition(b"\r\n") status = status.split(None, 1)[1].decode() headers = email.message_from_bytes(headers) headers["_status"] = status return headers, content.decode() SCRIPT_REGEX = r'' class BuildTests(unittest.TestCase): @tempdir({"test.css": "div { color: red; }"}) def test_serves_normal_file(self, site_dir): with testing_server(site_dir) as server: headers, output = do_request(server, "GET /test.css") self.assertEqual(output, "div { color: red; }") self.assertEqual(headers["_status"], "200 OK") self.assertEqual(headers.get("content-length"), str(len(output))) @tempdir({"docs/foo.docs": "docs1", "mkdocs.yml": "yml1"}) @tempdir({"foo.site": "original"}) def test_basic_rebuild(self, site_dir, origin_dir): docs_dir = Path(origin_dir, "docs") started_building = threading.Event() def rebuild(): started_building.set() Path(site_dir, "foo.site").write_text( Path(docs_dir, "foo.docs").read_text() + Path(origin_dir, "mkdocs.yml").read_text() ) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir, rebuild) server.watch(Path(origin_dir, "mkdocs.yml"), rebuild) time.sleep(0.01) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "original") Path(docs_dir, "foo.docs").write_text("docs2") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2yml1") Path(origin_dir, "mkdocs.yml").write_text("yml2") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2yml2") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_rebuild_after_delete(self, site_dir, docs_dir): started_building = threading.Event() def rebuild(): started_building.set() Path(site_dir, "foo.site").unlink() with testing_server(site_dir, rebuild) as server: server.watch(docs_dir, rebuild) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") self.assertTrue(started_building.wait(timeout=10)) with self.assertLogs("mkdocs.livereload"): _, output = do_request(server, "GET /foo.site") self.assertIn("404", output) @tempdir({"aaa": "something"}) def test_rebuild_after_rename(self, site_dir): started_building = threading.Event() with testing_server(site_dir, started_building.set) as server: server.watch(site_dir) time.sleep(0.01) Path(site_dir, "aaa").rename(Path(site_dir, "bbb")) self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_rebuild_on_edit(self, site_dir): started_building = threading.Event() with open(Path(site_dir, "test"), "wb") as f: time.sleep(0.01) with testing_server(site_dir, started_building.set) as server: server.watch(site_dir) time.sleep(0.01) f.write(b"hi\n") f.flush() self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_unwatch(self, site_dir): started_building = threading.Event() with testing_server(site_dir, started_building.set) as server: with self.assertRaises(KeyError): server.unwatch(site_dir) server.watch(site_dir) server.watch(site_dir) server.unwatch(site_dir) time.sleep(0.01) Path(site_dir, "foo").write_text("foo") self.assertTrue(started_building.wait(timeout=10)) started_building.clear() server.unwatch(site_dir) Path(site_dir, "foo").write_text("bar") self.assertFalse(started_building.wait(timeout=0.5)) with self.assertRaises(KeyError): server.unwatch(site_dir) @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_custom_action_warns(self, site_dir, docs_dir): started_building = threading.Event() def rebuild(): started_building.set() content = Path(docs_dir, "foo.docs").read_text() Path(site_dir, "foo.site").write_text(content * 5) with testing_server(site_dir) as server: with self.assertWarnsRegex(DeprecationWarning, "func") as cm: server.watch(docs_dir, rebuild) time.sleep(0.01) self.assertIn("livereload_tests.py", cm.filename) Path(docs_dir, "foo.docs").write_text("b") self.assertTrue(started_building.wait(timeout=10)) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "bbbbb") @tempdir({"foo.docs": "docs1"}) @tempdir({"foo.extra": "extra1"}) @tempdir({"foo.site": "original"}) def test_multiple_dirs_can_cause_rebuild(self, site_dir, extra_dir, docs_dir): started_building = threading.Barrier(2) def rebuild(): started_building.wait(timeout=10) content1 = Path(docs_dir, "foo.docs").read_text() content2 = Path(extra_dir, "foo.extra").read_text() Path(site_dir, "foo.site").write_text(content1 + content2) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) server.watch(extra_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("docs2") started_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra1") Path(extra_dir, "foo.extra").write_text("extra2") started_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra2") @tempdir({"foo.docs": "docs1"}) @tempdir({"foo.extra": "extra1"}) @tempdir({"foo.site": "original"}) def test_multiple_dirs_changes_rebuild_only_once(self, site_dir, extra_dir, docs_dir): started_building = threading.Event() def rebuild(): self.assertFalse(started_building.is_set()) started_building.set() content1 = Path(docs_dir, "foo.docs").read_text() content2 = Path(extra_dir, "foo.extra").read_text() Path(site_dir, "foo.site").write_text(content1 + content2) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) server.watch(extra_dir) time.sleep(0.01) _, output = do_request(server, "GET /foo.site") Path(docs_dir, "foo.docs").write_text("docs2") Path(extra_dir, "foo.extra").write_text("extra2") self.assertTrue(started_building.wait(timeout=10)) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "docs2extra2") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_change_is_detected_while_building(self, site_dir, docs_dir): before_finished_building = threading.Barrier(2) can_finish_building = threading.Event() def rebuild(): content = Path(docs_dir, "foo.docs").read_text() Path(site_dir, "foo.site").write_text(content * 5) before_finished_building.wait(timeout=10) self.assertTrue(can_finish_building.wait(timeout=10)) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") before_finished_building.wait(timeout=10) Path(docs_dir, "foo.docs").write_text("c") can_finish_building.set() _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "bbbbb") before_finished_building.wait(timeout=10) _, output = do_request(server, "GET /foo.site") self.assertEqual(output, "ccccc") @tempdir({"foo.docs": "a"}) @tempdir({"foo.site": "original"}) def test_recovers_from_build_error(self, site_dir, docs_dir): started_building = threading.Event() build_count = 0 def rebuild(): started_building.set() nonlocal build_count build_count += 1 if build_count == 1: raise ValueError("oh no") else: content = Path(docs_dir, "foo.docs").read_text() Path(site_dir, "foo.site").write_text(content * 5) with testing_server(site_dir, rebuild) as server: server.watch(docs_dir) time.sleep(0.01) err = io.StringIO() with contextlib.redirect_stderr(err), self.assertLogs("mkdocs.livereload") as cm: Path(docs_dir, "foo.docs").write_text("b") started_building.wait(timeout=10) Path(docs_dir, "foo.docs").write_text("c") _, output = do_request(server, "GET /foo.site") self.assertIn("ValueError: oh no", err.getvalue()) self.assertRegex( "\n".join(cm.output), r".*Detected file changes\n" r".*An error happened during the rebuild.*\n" r".*Detected file changes\n", ) self.assertEqual(output, "ccccc") @tempdir( { "normal.html": "hello", "no_body.html": "

    hi", "empty.html": "", "multi_body.html": "foobar", } ) def test_serves_modified_html(self, site_dir): with testing_server(site_dir) as server: server.watch(site_dir) headers, output = do_request(server, "GET /normal.html") self.assertRegex(output, fr"^hello{SCRIPT_REGEX}$") self.assertEqual(headers.get("content-type"), "text/html") self.assertEqual(headers.get("content-length"), str(len(output))) _, output = do_request(server, "GET /no_body.html") self.assertRegex(output, fr"^

    hi{SCRIPT_REGEX}$") headers, output = do_request(server, "GET /empty.html") self.assertRegex(output, fr"^{SCRIPT_REGEX}$") self.assertEqual(headers.get("content-length"), str(len(output))) _, output = do_request(server, "GET /multi_body.html") self.assertRegex(output, fr"^foobar{SCRIPT_REGEX}$") @tempdir({"index.html": "aaa", "foo/index.html": "bbb"}) def test_serves_directory_index(self, site_dir): with testing_server(site_dir) as server: headers, output = do_request(server, "GET /") self.assertRegex(output, r"^aaa$") self.assertEqual(headers["_status"], "200 OK") self.assertEqual(headers.get("content-type"), "text/html") self.assertEqual(headers.get("content-length"), str(len(output))) for path in "/foo/", "/foo/index.html": _, output = do_request(server, f"GET {path}") self.assertRegex(output, r"^bbb$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /foo/index.html/") self.assertEqual(headers["_status"], "404 Not Found") @tempdir( { "foo/bar/index.html": "aaa", "foo/測試/index.html": "bbb", } ) def test_redirects_to_directory(self, site_dir): with testing_server(site_dir, mount_path="/sub") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/bar") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/bar/") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/測試") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/%E6%B8%AC%E8%A9%A6/") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/foo/%E6%B8%AC%E8%A9%A6") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/sub/foo/%E6%B8%AC%E8%A9%A6/") @tempdir({"я.html": "aaa", "测试2/index.html": "bbb"}) def test_serves_with_unicode_characters(self, site_dir): with testing_server(site_dir) as server: _, output = do_request(server, "GET /я.html") self.assertRegex(output, r"^aaa$") _, output = do_request(server, "GET /%D1%8F.html") self.assertRegex(output, r"^aaa$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /%D1.html") self.assertEqual(headers["_status"], "404 Not Found") _, output = do_request(server, "GET /测试2/") self.assertRegex(output, r"^bbb$") _, output = do_request(server, "GET /%E6%B5%8B%E8%AF%952/index.html") self.assertRegex(output, r"^bbb$") @tempdir() def test_serves_polling_instantly(self, site_dir): with testing_server(site_dir) as server: _, output = do_request(server, "GET /livereload/0/0") self.assertTrue(output.isdigit()) @tempdir() def test_serves_polling_with_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/test/f*o") as server: _, output = do_request(server, "GET /livereload/0/0") self.assertTrue(output.isdigit()) @tempdir() @tempdir() def test_serves_polling_after_event(self, site_dir, docs_dir): with testing_server(site_dir) as server: initial_epoch = server._visible_epoch server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "foo.docs").write_text("b") _, output = do_request(server, f"GET /livereload/{initial_epoch}/0") self.assertNotEqual(server._visible_epoch, initial_epoch) self.assertEqual(output, str(server._visible_epoch)) @tempdir() def test_serves_polling_with_timeout(self, site_dir): with testing_server(site_dir) as server: server.poll_response_timeout = 0.2 initial_epoch = server._visible_epoch start_time = time.monotonic() _, output = do_request(server, f"GET /livereload/{initial_epoch}/0") self.assertGreaterEqual(time.monotonic(), start_time + 0.2) self.assertEqual(output, str(initial_epoch)) @tempdir() def test_error_handler(self, site_dir): with testing_server(site_dir) as server: server.error_handler = lambda code: b"[%d]" % code with self.assertLogs("mkdocs.livereload") as cm: headers, output = do_request(server, "GET /missing") self.assertEqual(headers["_status"], "404 Not Found") self.assertEqual(output, "[404]") self.assertRegex( "\n".join(cm.output), r'^WARNING:mkdocs.livereload:.*"GET /missing HTTP/1.1" code 404', ) @tempdir() def test_bad_error_handler(self, site_dir): with testing_server(site_dir) as server: server.error_handler = lambda code: 0 / 0 with self.assertLogs("mkdocs.livereload") as cm: headers, output = do_request(server, "GET /missing") self.assertEqual(headers["_status"], "404 Not Found") self.assertIn("404", output) self.assertRegex( "\n".join(cm.output), r"Failed to render an error message[\s\S]+/missing.+code 404" ) @tempdir( { "test.html": "\nhi", "test.xml": '\n', "test.css": "div { color: red; }", "test.js": "use strict;", "test.json": '{"a": "b"}', } ) def test_mime_types(self, site_dir): with testing_server(site_dir) as server: headers, _ = do_request(server, "GET /test.html") self.assertEqual(headers.get("content-type"), "text/html") headers, _ = do_request(server, "GET /test.xml") self.assertIn(headers.get("content-type"), ["text/xml", "application/xml"]) headers, _ = do_request(server, "GET /test.css") self.assertEqual(headers.get("content-type"), "text/css") headers, _ = do_request(server, "GET /test.js") self.assertEqual(headers.get("content-type"), "application/javascript") headers, _ = do_request(server, "GET /test.json") self.assertEqual(headers.get("content-type"), "application/json") @tempdir({"index.html": "aaa", "sub/sub.html": "bbb"}) def test_serves_from_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/sub") as server: headers, output = do_request(server, "GET /sub/") self.assertRegex(output, r"^aaa$") self.assertEqual(headers.get("content-type"), "text/html") _, output = do_request(server, "GET /sub/sub/sub.html") self.assertRegex(output, r"^bbb$") with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /sub/sub.html") self.assertEqual(headers["_status"], "404 Not Found") @tempdir() def test_redirects_to_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/mount/path") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/mount/path/") @tempdir() def test_redirects_to_unicode_mount_path(self, site_dir): with testing_server(site_dir, mount_path="/mount/測試") as server: with self.assertLogs("mkdocs.livereload"): headers, _ = do_request(server, "GET /") self.assertEqual(headers["_status"], "302 Found") self.assertEqual(headers.get("location"), "/mount/%E6%B8%AC%E8%A9%A6/") @tempdir({"mkdocs.yml": "original", "mkdocs2.yml": "original"}, prefix="tmp_dir") @tempdir(prefix="origin_dir") @tempdir({"subdir/foo.md": "original"}, prefix="dest_docs_dir") def test_watches_direct_symlinks(self, dest_docs_dir, origin_dir, tmp_dir): try: Path(origin_dir, "docs").symlink_to(dest_docs_dir, target_is_directory=True) Path(origin_dir, "mkdocs.yml").symlink_to(Path(tmp_dir, "mkdocs.yml")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() def wait_for_build(): result = started_building.wait(timeout=10) started_building.clear() with self.assertLogs("mkdocs.livereload"): do_request(server, "GET /") return result with testing_server(tmp_dir, started_building.set) as server: server.watch(Path(origin_dir, "docs")) server.watch(Path(origin_dir, "mkdocs.yml")) time.sleep(0.01) Path(origin_dir, "unrelated.md").write_text("foo") self.assertFalse(started_building.wait(timeout=0.5)) Path(tmp_dir, "mkdocs.yml").write_text("edited") self.assertTrue(wait_for_build()) Path(dest_docs_dir, "subdir", "foo.md").write_text("edited") self.assertTrue(wait_for_build()) @tempdir(["file_dest_1.md", "file_dest_2.md", "file_dest_unused.md"], prefix="tmp_dir") @tempdir(["file_under.md"], prefix="dir_to_link_to") @tempdir() def test_watches_through_symlinks(self, docs_dir, dir_to_link_to, tmp_dir): try: Path(docs_dir, "link1.md").symlink_to(Path(tmp_dir, "file_dest_1.md")) Path(docs_dir, "linked_dir").symlink_to(dir_to_link_to, target_is_directory=True) Path(dir_to_link_to, "sublink.md").symlink_to(Path(tmp_dir, "file_dest_2.md")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() def wait_for_build(): result = started_building.wait(timeout=10) started_building.clear() with self.assertLogs("mkdocs.livereload"): do_request(server, "GET /") return result with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(tmp_dir, "file_dest_1.md").write_text("edited") self.assertTrue(wait_for_build()) Path(dir_to_link_to, "file_under.md").write_text("edited") self.assertTrue(wait_for_build()) Path(tmp_dir, "file_dest_2.md").write_text("edited") self.assertTrue(wait_for_build()) Path(docs_dir, "link1.md").unlink() self.assertTrue(wait_for_build()) Path(tmp_dir, "file_dest_unused.md").write_text("edited") self.assertFalse(started_building.wait(timeout=0.5)) @tempdir(prefix="site_dir") @tempdir(["docs/unused.md", "README.md"], prefix="origin_dir") def test_watches_through_relative_symlinks(self, origin_dir, site_dir): docs_dir = Path(origin_dir, "docs") with change_dir(docs_dir): try: Path(docs_dir, "README.md").symlink_to(Path("..", "README.md")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(origin_dir, "README.md").write_text("edited") self.assertTrue(started_building.wait(timeout=10)) @tempdir() def test_watch_with_broken_symlinks(self, docs_dir): Path(docs_dir, "subdir").mkdir() try: if sys.platform != "win32": Path(docs_dir, "subdir", "circular").symlink_to(Path(docs_dir)) Path(docs_dir, "broken_1").symlink_to(Path(docs_dir, "oh no")) Path(docs_dir, "broken_2").symlink_to(Path(docs_dir, "oh no"), target_is_directory=True) Path(docs_dir, "broken_3").symlink_to(Path(docs_dir, "broken_2")) except NotImplementedError: # PyPy on Windows self.skipTest("Creating symlinks not supported") started_building = threading.Event() with testing_server(docs_dir, started_building.set) as server: server.watch(docs_dir) time.sleep(0.01) Path(docs_dir, "subdir", "test").write_text("test") self.assertTrue(started_building.wait(timeout=10)) python-mkdocs-1.5.3/mkdocs/tests/plugin_tests.py0000644000175000017500000002515714502137725021733 0ustar carstencarsten#!/usr/bin/env python from __future__ import annotations import os import unittest from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from typing_extensions import assert_type else: def assert_type(val, typ): return None from mkdocs import plugins from mkdocs.commands import build from mkdocs.config import base from mkdocs.config import config_options as c from mkdocs.config.base import ValidationError from mkdocs.exceptions import Abort, BuildError, PluginError from mkdocs.tests.base import load_config, tempdir class _DummyPluginConfig(base.Config): foo = c.Type(str, default='default foo') bar = c.Type(int, default=0) dir = c.Optional(c.Dir(exists=False)) class DummyPlugin(plugins.BasePlugin[_DummyPluginConfig]): def on_page_content(self, html, **kwargs) -> str: """modify page content by prepending `foo` config value.""" return f'{self.config.foo} {html}' def on_nav(self, nav, **kwargs) -> None: """do nothing (return None) to not modify item.""" return None def on_page_read_source(self, **kwargs) -> str: """create new source by prepending `foo` config value to 'source'.""" return f'{self.config.foo} source' def on_pre_build(self, **kwargs) -> None: """do nothing (return None).""" return None class TestPluginClass(unittest.TestCase): def test_valid_plugin_options(self) -> None: test_dir = 'test' options = { 'foo': 'some value', 'dir': test_dir, } cfg_fname = os.path.join('tmp', 'test', 'fname.yml') cfg_fname = os.path.abspath(cfg_fname) cfg_dirname = os.path.dirname(cfg_fname) expected = { 'foo': 'some value', 'bar': 0, 'dir': os.path.join(cfg_dirname, test_dir), } plugin = DummyPlugin() errors, warnings = plugin.load_config(options, config_file_path=cfg_fname) self.assertEqual(errors, []) self.assertEqual(warnings, []) assert_type(plugin.config, _DummyPluginConfig) self.assertEqual(plugin.config, expected) assert_type(plugin.config.bar, int) self.assertEqual(plugin.config.bar, 0) assert_type(plugin.config.dir, Optional[str]) def test_invalid_plugin_options(self): plugin = DummyPlugin() errors, warnings = plugin.load_config({'foo': 42}) self.assertEqual( errors, [('foo', ValidationError("Expected type: but received: "))], ) self.assertEqual(warnings, []) errors, warnings = plugin.load_config({'bar': 'a string'}) self.assertEqual( errors, [('bar', ValidationError("Expected type: but received: "))], ) self.assertEqual(warnings, []) errors, warnings = plugin.load_config({'invalid_key': 'value'}) self.assertEqual(errors, []) self.assertEqual( warnings, [('invalid_key', "Unrecognised configuration name: invalid_key")] ) class TestPluginCollection(unittest.TestCase): def test_correct_events_registered(self): collection = plugins.PluginCollection() plugin = DummyPlugin() collection['foo'] = plugin self.assertEqual( collection.events, { 'startup': [], 'shutdown': [], 'serve': [], 'config': [], 'pre_build': [plugin.on_pre_build], 'files': [], 'nav': [plugin.on_nav], 'env': [], 'post_build': [], 'build_error': [], 'pre_template': [], 'template_context': [], 'post_template': [], 'pre_page': [], 'page_read_source': [plugin.on_page_read_source], 'page_markdown': [], 'page_content': [plugin.on_page_content], 'page_context': [], 'post_page': [], }, ) def test_event_priorities(self) -> None: class PrioPlugin(plugins.BasePlugin): config_scheme = base.get_schema(_DummyPluginConfig) @plugins.event_priority(100) def on_page_content(self, html, **kwargs) -> None: pass @plugins.event_priority(-100) def on_nav(self, nav, **kwargs) -> None: pass def on_page_read_source(self, **kwargs) -> None: pass @plugins.event_priority(-50) def on_post_build(self, **kwargs) -> None: pass collection = plugins.PluginCollection() collection['dummy'] = dummy = DummyPlugin() collection['prio'] = prio = PrioPlugin() self.assertEqual( collection.events['page_content'], [prio.on_page_content, dummy.on_page_content], ) self.assertEqual( collection.events['nav'], [dummy.on_nav, prio.on_nav], ) self.assertEqual( collection.events['page_read_source'], [dummy.on_page_read_source, prio.on_page_read_source], ) self.assertEqual( collection.events['post_build'], [prio.on_post_build], ) def test_set_plugin_on_collection(self): collection = plugins.PluginCollection() plugin = DummyPlugin() collection['foo'] = plugin self.assertEqual(list(collection.items()), [('foo', plugin)]) def test_set_multiple_plugins_on_collection(self): collection = plugins.PluginCollection() plugin1 = DummyPlugin() collection['foo'] = plugin1 plugin2 = DummyPlugin() collection['bar'] = plugin2 self.assertEqual(list(collection.items()), [('foo', plugin1), ('bar', plugin2)]) def test_run_event_on_collection(self): collection = plugins.PluginCollection() plugin = DummyPlugin() plugin.load_config({'foo': 'new'}) collection['foo'] = plugin self.assertEqual( collection.on_page_content('page content', page=None, config={}, files=[]), 'new page content', ) def test_run_event_twice_on_collection(self): collection = plugins.PluginCollection() plugin1 = DummyPlugin() plugin1.load_config({'foo': 'new'}) collection['foo'] = plugin1 plugin2 = DummyPlugin() plugin2.load_config({'foo': 'second'}) collection['bar'] = plugin2 self.assertEqual( collection.on_page_content('page content', page=None, config={}, files=[]), 'second new page content', ) def test_event_returns_None(self): collection = plugins.PluginCollection() plugin = DummyPlugin() plugin.load_config({'foo': 'new'}) collection['foo'] = plugin self.assertEqual(collection.on_nav(['nav item'], config={}, files=[]), ['nav item']) def test_event_empty_item(self): collection = plugins.PluginCollection() plugin = DummyPlugin() plugin.load_config({'foo': 'new'}) collection['foo'] = plugin self.assertEqual(collection.on_page_read_source(page=None, config={}), 'new source') def test_event_empty_item_returns_None(self): collection = plugins.PluginCollection() plugin = DummyPlugin() plugin.load_config({'foo': 'new'}) collection['foo'] = plugin self.assertEqual(collection.on_pre_build(config={}), None) def test_run_undefined_event_on_collection(self): collection = plugins.PluginCollection() self.assertEqual( collection.on_page_markdown('page markdown', page=None, config={}, files=[]), 'page markdown', ) def test_run_unknown_event_on_collection(self): collection = plugins.PluginCollection() with self.assertRaises(KeyError): collection.run_event('unknown', 'page content') @tempdir() def test_run_build_error_event(self, site_dir): build_errors = [] class PluginRaisingError(plugins.BasePlugin): def __init__(self, error_on): self.error_on = error_on def on_pre_page(self, page, **kwargs): if self.error_on == 'pre_page': raise BuildError('pre page error') return page def on_page_markdown(self, markdown, **kwargs): if self.error_on == 'page_markdown': raise BuildError('page markdown error') return markdown def on_page_content(self, html, **kwargs): if self.error_on == 'page_content': raise PluginError('page content error') return html def on_post_page(self, html, **kwargs): if self.error_on == 'post_page': raise ValueError('post page error') def on_build_error(self, error, **kwargs): build_errors.append(error) cfg = load_config(site_dir=site_dir) cfg.plugins['errorplugin'] = PluginRaisingError(error_on='pre_page') with self.assertLogs('mkdocs', level='ERROR'): self.assertRaises(Abort, build.build, cfg) cfg = load_config(site_dir=site_dir) cfg.plugins['errorplugin'] = PluginRaisingError(error_on='page_markdown') with self.assertLogs('mkdocs', level='ERROR'): self.assertRaises(Abort, build.build, cfg) cfg = load_config(site_dir=site_dir) cfg.plugins['errorplugin'] = PluginRaisingError(error_on='page_content') with self.assertLogs('mkdocs', level='ERROR'): self.assertRaises(Abort, build.build, cfg) cfg = load_config(site_dir=site_dir) cfg.plugins['errorplugin'] = PluginRaisingError(error_on='post_page') with self.assertLogs('mkdocs', level='ERROR'): self.assertRaises(ValueError, build.build, cfg) cfg = load_config(site_dir=site_dir) cfg.plugins['errorplugin'] = PluginRaisingError(error_on='') build.build(cfg) self.assertEqual(len(build_errors), 4) self.assertIs(build_errors[0].__class__, BuildError) self.assertEqual(str(build_errors[0]), 'pre page error') self.assertIs(build_errors[1].__class__, BuildError) self.assertEqual(str(build_errors[1]), 'page markdown error') self.assertIs(build_errors[2].__class__, PluginError) self.assertEqual(str(build_errors[2]), 'page content error') self.assertIs(build_errors[3].__class__, ValueError) self.assertEqual(str(build_errors[3]), 'post page error') python-mkdocs-1.5.3/mkdocs/tests/gh_deploy_tests.py0000644000175000017500000001661214502137725022403 0ustar carstencarstenimport unittest from unittest import mock from ghp_import import GhpError from mkdocs import __version__ from mkdocs.commands import gh_deploy from mkdocs.exceptions import Abort from mkdocs.tests.base import load_config class TestGitHubDeploy(unittest.TestCase): @mock.patch('subprocess.Popen') def test_is_cwd_git_repo(self, mock_popeno): mock_popeno().wait.return_value = 0 self.assertTrue(gh_deploy._is_cwd_git_repo()) @mock.patch('subprocess.Popen') def test_is_cwd_not_git_repo(self, mock_popeno): mock_popeno().wait.return_value = 1 self.assertFalse(gh_deploy._is_cwd_git_repo()) @mock.patch('subprocess.Popen') def test_get_current_sha(self, mock_popeno): mock_popeno().communicate.return_value = (b'6d98394\n', b'') self.assertEqual(gh_deploy._get_current_sha('.'), '6d98394') @mock.patch('subprocess.Popen') def test_get_remote_url_ssh(self, mock_popeno): mock_popeno().communicate.return_value = ( b'git@github.com:mkdocs/mkdocs.git\n', b'', ) expected = ('git@', 'mkdocs/mkdocs.git') self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('subprocess.Popen') def test_get_remote_url_http(self, mock_popeno): mock_popeno().communicate.return_value = ( b'https://github.com/mkdocs/mkdocs.git\n', b'', ) expected = ('https://', 'mkdocs/mkdocs.git') self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('subprocess.Popen') def test_get_remote_url_enterprise(self, mock_popeno): mock_popeno().communicate.return_value = ( b'https://notgh.com/mkdocs/mkdocs.git\n', b'', ) expected = (None, None) self.assertEqual(expected, gh_deploy._get_remote_url('origin')) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None)) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') def test_deploy(self, mock_import, check_version, get_remote, get_sha, is_repo): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None)) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') @mock.patch('os.path.isfile', return_value=False) def test_deploy_no_cname( self, mock_isfile, mock_import, check_version, get_remote, get_sha, is_repo ): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch( 'mkdocs.commands.gh_deploy._get_remote_url', return_value=('git@', 'mkdocs/mkdocs.git') ) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') def test_deploy_hostname(self, mock_import, check_version, get_remote, get_sha, is_repo): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None)) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') def test_deploy_ignore_version_default( self, mock_import, check_version, get_remote, get_sha, is_repo ): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config) check_version.assert_called_once() @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None)) @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') def test_deploy_ignore_version(self, mock_import, check_version, get_remote, get_sha, is_repo): config = load_config( remote_branch='test', ) gh_deploy.gh_deploy(config, ignore_version=True) check_version.assert_not_called() @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True) @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas') @mock.patch('mkdocs.commands.gh_deploy._check_version') @mock.patch('ghp_import.ghp_import') def test_deploy_error(self, mock_import, check_version, get_sha, is_repo): mock_import.side_effect = GhpError('TestError123') config = load_config( remote_branch='test', ) with self.assertLogs('mkdocs', level='ERROR') as cm: with self.assertRaises(Abort): gh_deploy.gh_deploy(config) self.assertEqual( cm.output, [ 'ERROR:mkdocs.commands.gh_deploy:Failed to deploy to GitHub with error: \n' 'TestError123' ], ) class TestGitHubDeployLogs(unittest.TestCase): @mock.patch('subprocess.Popen') def test_mkdocs_newer(self, mock_popeno): mock_popeno().communicate.return_value = ( b'Deployed 12345678 with MkDocs version: 0.1.2\n', b'', ) with self.assertLogs('mkdocs') as cm: gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), f'INFO:mkdocs.commands.gh_deploy:Previous deployment was done with MkDocs ' f'version 0.1.2; you are deploying with a newer version ({__version__})', ) @mock.patch('subprocess.Popen') def test_mkdocs_older(self, mock_popeno): mock_popeno().communicate.return_value = ( b'Deployed 12345678 with MkDocs version: 10.1.2\n', b'', ) with self.assertLogs('mkdocs', level='ERROR') as cm: with self.assertRaises(Abort): gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), f'ERROR:mkdocs.commands.gh_deploy:Deployment terminated: Previous deployment was made with ' f'MkDocs version 10.1.2; you are attempting to deploy with an older version ({__version__}).' f' Use --ignore-version to deploy anyway.', ) @mock.patch('subprocess.Popen') def test_version_unknown(self, mock_popeno): mock_popeno().communicate.return_value = (b'No version specified\n', b'') with self.assertLogs('mkdocs') as cm: gh_deploy._check_version('gh-pages') self.assertEqual( '\n'.join(cm.output), 'WARNING:mkdocs.commands.gh_deploy:Version check skipped: No version specified in previous deployment.', ) python-mkdocs-1.5.3/mkdocs/__init__.py0000644000175000017500000000017614502137725017602 0ustar carstencarsten#!/usr/bin/env python # For acceptable version formats, see https://www.python.org/dev/peps/pep-0440/ __version__ = '1.5.3' python-mkdocs-1.5.3/mkdocs/theme.py0000644000175000017500000001176214502137725017150 0ustar carstencarstenfrom __future__ import annotations import logging import os from typing import Any, Collection, MutableMapping import jinja2 from mkdocs import localization, utils from mkdocs.config.base import ValidationError from mkdocs.utils import templates log = logging.getLogger(__name__) class Theme(MutableMapping[str, Any]): """ A Theme object. Parameters: name: The name of the theme as defined by its entrypoint. custom_dir: User defined directory for custom templates. static_templates: A list of templates to render as static pages. All other keywords are passed as-is and made available as a key/value mapping. """ def __init__( self, name: str | None = None, *, custom_dir: str | None = None, static_templates: Collection[str] = (), locale: str | None = None, **user_config, ) -> None: self.name = name self._custom_dir = custom_dir _vars: dict[str, Any] = {'name': name, 'locale': 'en'} # _vars is soft-deprecated, intentionally hide it from mypy. setattr(self, '_vars', _vars) # MkDocs provided static templates are always included package_dir = os.path.abspath(os.path.dirname(__file__)) mkdocs_templates = os.path.join(package_dir, 'templates') self.static_templates = set(os.listdir(mkdocs_templates)) # Build self.dirs from various sources in order of precedence self.dirs = [] if custom_dir is not None: self.dirs.append(custom_dir) if name: self._load_theme_config(name) # Include templates provided directly by MkDocs (outside any theme) self.dirs.append(mkdocs_templates) # Handle remaining user configs. Override theme configs (if set) self.static_templates.update(static_templates) _vars.update(user_config) # Validate locale and convert to Locale object _vars['locale'] = localization.parse_locale( locale if locale is not None else _vars['locale'] ) name: str | None @property def locale(self) -> localization.Locale: return self['locale'] @property def custom_dir(self) -> str | None: return self._custom_dir dirs: list[str] static_templates: set[str] def __repr__(self) -> str: return "{}(name={!r}, dirs={!r}, static_templates={!r}, {})".format( self.__class__.__name__, self.name, self.dirs, self.static_templates, ', '.join(f'{k}={v!r}' for k, v in self.items()), ) def __getitem__(self, key: str) -> Any: return self._vars[key] # type: ignore[attr-defined] def __setitem__(self, key: str, value): self._vars[key] = value # type: ignore[attr-defined] def __delitem__(self, key: str): del self._vars[key] # type: ignore[attr-defined] def __contains__(self, item: object) -> bool: return item in self._vars # type: ignore[attr-defined] def __len__(self): return len(self._vars) # type: ignore[attr-defined] def __iter__(self): return iter(self._vars) # type: ignore[attr-defined] def _load_theme_config(self, name: str) -> None: """Recursively load theme and any parent themes.""" theme_dir = utils.get_theme_dir(name) self.dirs.append(theme_dir) try: file_path = os.path.join(theme_dir, 'mkdocs_theme.yml') with open(file_path, 'rb') as f: theme_config = utils.yaml_load(f) except OSError as e: log.debug(e) raise ValidationError( f"The theme '{name}' does not appear to have a configuration file. " f"Please upgrade to a current version of the theme." ) log.debug(f"Loaded theme configuration for '{name}' from '{file_path}': {theme_config}") parent_theme = theme_config.pop('extends', None) if parent_theme: themes = utils.get_theme_names() if parent_theme not in themes: raise ValidationError( f"The theme '{name}' inherits from '{parent_theme}', which does not appear to be installed. " f"The available installed themes are: {', '.join(themes)}" ) self._load_theme_config(parent_theme) self.static_templates.update(theme_config.pop('static_templates', [])) self._vars.update(theme_config) # type: ignore[attr-defined] def get_env(self) -> jinja2.Environment: """Return a Jinja environment for the theme.""" loader = jinja2.FileSystemLoader(self.dirs) # No autoreload because editing a template in the middle of a build is not useful. env = jinja2.Environment(loader=loader, auto_reload=False) env.filters['url'] = templates.url_filter env.filters['script_tag'] = templates.script_tag_filter localization.install_translations(env, self.locale, self.dirs) return env python-mkdocs-1.5.3/mkdocs/templates/0000755000175000017500000000000014502137725017463 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/templates/sitemap.xml0000644000175000017500000000103314502137725021644 0ustar carstencarsten {%- for file in pages -%} {% if not file.page.is_link and (file.page.abs_url or file.page.canonical_url) %} {% if file.page.canonical_url %}{{ file.page.canonical_url|e }}{% else %}{{ file.page.abs_url|e }}{% endif %} {% if file.page.update_date %}{{file.page.update_date}}{% endif %} daily {%- endif -%} {% endfor %} python-mkdocs-1.5.3/mkdocs/structure/0000755000175000017500000000000014502137725017525 5ustar carstencarstenpython-mkdocs-1.5.3/mkdocs/structure/files.py0000644000175000017500000003602514502137725021207 0ustar carstencarstenfrom __future__ import annotations import enum import fnmatch import logging import os import posixpath import shutil import warnings from pathlib import PurePath from typing import TYPE_CHECKING, Callable, Iterable, Iterator, Sequence from urllib.parse import quote as urlquote import pathspec import pathspec.gitignore import pathspec.util from mkdocs import utils if TYPE_CHECKING: import jinja2.environment from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.pages import Page log = logging.getLogger(__name__) class InclusionLevel(enum.Enum): EXCLUDED = -2 """The file is excluded from the final site, but will still be populated during `mkdocs serve`.""" NOT_IN_NAV = -1 """The file is part of the site, but doesn't produce nav warnings.""" UNDEFINED = 0 """Still needs to be computed based on the config. If the config doesn't kick in, acts the same as `included`.""" INCLUDED = 1 """The file is part of the site. Documentation pages that are omitted from the nav will produce warnings.""" def all(self): return True def is_included(self): return self.value > self.EXCLUDED.value def is_excluded(self): return self.value <= self.EXCLUDED.value def is_in_nav(self): return self.value > self.NOT_IN_NAV.value def is_not_in_nav(self): return self.value <= self.NOT_IN_NAV.value class Files: """A collection of [File][mkdocs.structure.files.File] objects.""" def __init__(self, files: list[File]) -> None: self._files = files self._src_uris: dict[str, File] | None = None def __iter__(self) -> Iterator[File]: """Iterate over the files within.""" return iter(self._files) def __len__(self) -> int: """The number of files within.""" return len(self._files) def __contains__(self, path: str) -> bool: """Whether the file with this `src_uri` is in the collection.""" return PurePath(path).as_posix() in self.src_uris @property def src_paths(self) -> dict[str, File]: """Soft-deprecated, prefer `src_uris`.""" return {file.src_path: file for file in self._files} @property def src_uris(self) -> dict[str, File]: """A mapping containing every file, with the keys being their [`src_uri`][mkdocs.structure.files.File.src_uri].""" if self._src_uris is None: self._src_uris = {file.src_uri: file for file in self._files} return self._src_uris def get_file_from_path(self, path: str) -> File | None: """Return a File instance with File.src_uri equal to path.""" return self.src_uris.get(PurePath(path).as_posix()) def append(self, file: File) -> None: """Append file to Files collection.""" self._src_uris = None self._files.append(file) def remove(self, file: File) -> None: """Remove file from Files collection.""" self._src_uris = None self._files.remove(file) def copy_static_files( self, dirty: bool = False, *, inclusion: Callable[[InclusionLevel], bool] = InclusionLevel.is_included, ) -> None: """Copy static files from source to destination.""" for file in self: if not file.is_documentation_page() and inclusion(file.inclusion): file.copy_file(dirty) def documentation_pages( self, *, inclusion: Callable[[InclusionLevel], bool] = InclusionLevel.is_included ) -> Sequence[File]: """Return iterable of all Markdown page file objects.""" return [file for file in self if file.is_documentation_page() and inclusion(file.inclusion)] def static_pages(self) -> Sequence[File]: """Return iterable of all static page file objects.""" return [file for file in self if file.is_static_page()] def media_files(self) -> Sequence[File]: """Return iterable of all file objects which are not documentation or static pages.""" return [file for file in self if file.is_media_file()] def javascript_files(self) -> Sequence[File]: """Return iterable of all javascript file objects.""" return [file for file in self if file.is_javascript()] def css_files(self) -> Sequence[File]: """Return iterable of all CSS file objects.""" return [file for file in self if file.is_css()] def add_files_from_theme(self, env: jinja2.Environment, config: MkDocsConfig) -> None: """Retrieve static files from Jinja environment and add to collection.""" def filter(name): # '.*' filters dot files/dirs at root level whereas '*/.*' filters nested levels patterns = ['.*', '*/.*', '*.py', '*.pyc', '*.html', '*readme*', 'mkdocs_theme.yml'] # Exclude translation files patterns.append("locales/*") patterns.extend(f'*{x}' for x in utils.markdown_extensions) patterns.extend(config.theme.static_templates) for pattern in patterns: if fnmatch.fnmatch(name.lower(), pattern): return False return True for path in env.list_templates(filter_func=filter): # Theme files do not override docs_dir files path = PurePath(path).as_posix() if path not in self.src_uris: for dir in config.theme.dirs: # Find the first theme dir which contains path if os.path.isfile(os.path.join(dir, path)): self.append(File(path, dir, config.site_dir, config.use_directory_urls)) break class File: """ A MkDocs File object. Points to the source and destination locations of a file. The `path` argument must be a path that exists relative to `src_dir`. The `src_dir` and `dest_dir` must be absolute paths on the local file system. The `use_directory_urls` argument controls how destination paths are generated. If `False`, a Markdown file is mapped to an HTML file of the same name (the file extension is changed to `.html`). If True, a Markdown file is mapped to an HTML index file (`index.html`) nested in a directory using the "name" of the file in `path`. The `use_directory_urls` argument has no effect on non-Markdown files. File objects have the following properties, which are Unicode strings: """ src_uri: str """The pure path (always '/'-separated) of the source file relative to the source directory.""" abs_src_path: str """The absolute concrete path of the source file. Will use backslashes on Windows.""" dest_uri: str """The pure path (always '/'-separated) of the destination file relative to the destination directory.""" abs_dest_path: str """The absolute concrete path of the destination file. Will use backslashes on Windows.""" url: str """The URI of the destination file relative to the destination directory as a string.""" inclusion: InclusionLevel = InclusionLevel.UNDEFINED """Whether the file will be excluded from the built site.""" @property def src_path(self) -> str: """Same as `src_uri` (and synchronized with it) but will use backslashes on Windows. Discouraged.""" return os.path.normpath(self.src_uri) @src_path.setter def src_path(self, value): self.src_uri = PurePath(value).as_posix() @property def dest_path(self) -> str: """Same as `dest_uri` (and synchronized with it) but will use backslashes on Windows. Discouraged.""" return os.path.normpath(self.dest_uri) @dest_path.setter def dest_path(self, value): self.dest_uri = PurePath(value).as_posix() page: Page | None def __init__( self, path: str, src_dir: str, dest_dir: str, use_directory_urls: bool, *, dest_uri: str | None = None, inclusion: InclusionLevel = InclusionLevel.UNDEFINED, ) -> None: self.page = None self.src_path = path self.name = self._get_stem() if dest_uri is None: dest_uri = self._get_dest_path(use_directory_urls) self.dest_uri = dest_uri self.url = self._get_url(use_directory_urls) self.abs_src_path = os.path.normpath(os.path.join(src_dir, self.src_uri)) self.abs_dest_path = os.path.normpath(os.path.join(dest_dir, self.dest_uri)) self.inclusion = inclusion def __eq__(self, other) -> bool: return ( isinstance(other, self.__class__) and self.src_uri == other.src_uri and self.abs_src_path == other.abs_src_path and self.url == other.url ) def __repr__(self): return ( f"File(src_uri='{self.src_uri}', dest_uri='{self.dest_uri}'," f" name='{self.name}', url='{self.url}')" ) def _get_stem(self) -> str: """Return the name of the file without its extension.""" filename = posixpath.basename(self.src_uri) stem, ext = posixpath.splitext(filename) return 'index' if stem == 'README' else stem def _get_dest_path(self, use_directory_urls: bool) -> str: """Return destination path based on source path.""" if self.is_documentation_page(): parent, filename = posixpath.split(self.src_uri) if not use_directory_urls or self.name == 'index': # index.md or README.md => index.html # foo.md => foo.html return posixpath.join(parent, self.name + '.html') else: # foo.md => foo/index.html return posixpath.join(parent, self.name, 'index.html') return self.src_uri def _get_url(self, use_directory_urls: bool) -> str: """Return url based in destination path.""" url = self.dest_uri dirname, filename = posixpath.split(url) if use_directory_urls and filename == 'index.html': url = (dirname or '.') + '/' return urlquote(url) def url_relative_to(self, other: File | str) -> str: """Return url for file relative to other file.""" return utils.get_relative_url(self.url, other.url if isinstance(other, File) else other) def copy_file(self, dirty: bool = False) -> None: """Copy source file to destination, ensuring parent directories exist.""" if dirty and not self.is_modified(): log.debug(f"Skip copying unmodified file: '{self.src_uri}'") else: log.debug(f"Copying media file: '{self.src_uri}'") try: utils.copy_file(self.abs_src_path, self.abs_dest_path) except shutil.SameFileError: pass # Let plugins write directly into site_dir. def is_modified(self) -> bool: if os.path.isfile(self.abs_dest_path): return os.path.getmtime(self.abs_dest_path) < os.path.getmtime(self.abs_src_path) return True def is_documentation_page(self) -> bool: """Return True if file is a Markdown page.""" return utils.is_markdown_file(self.src_uri) def is_static_page(self) -> bool: """Return True if file is a static page (HTML, XML, JSON).""" return self.src_uri.endswith(('.html', '.htm', '.xml', '.json')) def is_media_file(self) -> bool: """Return True if file is not a documentation or static page.""" return not (self.is_documentation_page() or self.is_static_page()) def is_javascript(self) -> bool: """Return True if file is a JavaScript file.""" return self.src_uri.endswith(('.js', '.javascript', '.mjs')) def is_css(self) -> bool: """Return True if file is a CSS file.""" return self.src_uri.endswith('.css') _default_exclude = pathspec.gitignore.GitIgnoreSpec.from_lines(['.*', '/templates/']) def _set_exclusions(files: Iterable[File], config: MkDocsConfig) -> None: """Re-calculate which files are excluded, based on the patterns in the config.""" exclude: pathspec.gitignore.GitIgnoreSpec | None = config.get('exclude_docs') exclude = _default_exclude + exclude if exclude else _default_exclude nav_exclude: pathspec.gitignore.GitIgnoreSpec | None = config.get('not_in_nav') for file in files: if file.inclusion == InclusionLevel.UNDEFINED: if exclude.match_file(file.src_uri): file.inclusion = InclusionLevel.EXCLUDED elif nav_exclude and nav_exclude.match_file(file.src_uri): file.inclusion = InclusionLevel.NOT_IN_NAV else: file.inclusion = InclusionLevel.INCLUDED def get_files(config: MkDocsConfig) -> Files: """Walk the `docs_dir` and return a Files collection.""" files: list[File] = [] conflicting_files: list[tuple[File, File]] = [] for source_dir, dirnames, filenames in os.walk(config['docs_dir'], followlinks=True): relative_dir = os.path.relpath(source_dir, config['docs_dir']) dirnames.sort() filenames.sort(key=_file_sort_key) files_by_dest: dict[str, File] = {} for filename in filenames: file = File( os.path.join(relative_dir, filename), config['docs_dir'], config['site_dir'], config['use_directory_urls'], ) # Skip README.md if an index file also exists in dir (part 1) prev_file = files_by_dest.setdefault(file.dest_uri, file) if prev_file is not file: conflicting_files.append((prev_file, file)) files.append(file) prev_file = file _set_exclusions(files, config) # Skip README.md if an index file also exists in dir (part 2) for a, b in conflicting_files: if b.inclusion.is_included(): if a.inclusion.is_included(): log.warning( f"Excluding '{a.src_uri}' from the site because it conflicts with '{b.src_uri}'." ) try: files.remove(a) except ValueError: pass # Catching this to avoid errors if attempting to remove the same file twice. else: try: files.remove(b) except ValueError: pass return Files(files) def _file_sort_key(f: str): """Always sort `index` or `README` as first filename in list.""" return (os.path.splitext(f)[0] not in ('index', 'README'), f) def _sort_files(filenames: Iterable[str]) -> list[str]: return sorted(filenames, key=_file_sort_key) def _filter_paths(basename: str, path: str, is_dir: bool, exclude: Iterable[str]) -> bool: warnings.warn( "_filter_paths is not used since MkDocs 1.5 and will be removed soon.", DeprecationWarning ) for item in exclude: # Items ending in '/' apply only to directories. if item.endswith('/') and not is_dir: continue # Items starting with '/' apply to the whole path. # In any other cases just the basename is used. match = path if item.startswith('/') else basename if fnmatch.fnmatch(match, item.strip('/')): return True return False python-mkdocs-1.5.3/mkdocs/structure/__init__.py0000644000175000017500000000166114502137725021642 0ustar carstencarstenfrom __future__ import annotations import abc from typing import TYPE_CHECKING, Iterable if TYPE_CHECKING: from mkdocs.structure.nav import Section class StructureItem(metaclass=abc.ABCMeta): """An item in MkDocs structure - see concrete subclasses Section, Page or Link.""" @abc.abstractmethod def __init__(self): ... parent: Section | None = None """The immediate parent of the item in the site navigation. `None` if it's at the top level.""" @property def is_top_level(self) -> bool: return self.parent is None title: str | None is_section: bool = False is_page: bool = False is_link: bool = False @property def ancestors(self) -> Iterable[StructureItem]: if self.parent is None: return [] return [self.parent, *self.parent.ancestors] def _indent_print(self, depth: int = 0) -> str: return (' ' * depth) + repr(self) python-mkdocs-1.5.3/mkdocs/structure/nav.py0000644000175000017500000002133714502137725020671 0ustar carstencarstenfrom __future__ import annotations import logging import warnings from typing import TYPE_CHECKING, Iterator, TypeVar from urllib.parse import urlsplit from mkdocs.structure import StructureItem from mkdocs.structure.pages import Page from mkdocs.utils import nest_paths if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import Files log = logging.getLogger(__name__) class Navigation: def __init__(self, items: list, pages: list[Page]) -> None: self.items = items # Nested List with full navigation of Sections, Pages, and Links. self.pages = pages # Flat List of subset of Pages in nav, in order. self.homepage = None for page in pages: if page.is_homepage: self.homepage = page break homepage: Page | None """The [page][mkdocs.structure.pages.Page] object for the homepage of the site.""" pages: list[Page] """A flat list of all [page][mkdocs.structure.pages.Page] objects contained in the navigation.""" def __str__(self) -> str: return '\n'.join(item._indent_print() for item in self) def __iter__(self) -> Iterator: return iter(self.items) def __len__(self) -> int: return len(self.items) class Section(StructureItem): def __init__(self, title: str, children: list[StructureItem]) -> None: self.title = title self.children = children self.active = False def __repr__(self): name = self.__class__.__name__ return f"{name}(title={self.title!r})" title: str """The title of the section.""" children: list[StructureItem] """An iterable of all child navigation objects. Children may include nested sections, pages and links.""" @property def active(self) -> bool: """ When `True`, indicates that a child page of this section is the current page and can be used to highlight the section as the currently viewed section. Defaults to `False`. """ return self.__active @active.setter def active(self, value: bool): """Set active status of section and ancestors.""" self.__active = bool(value) if self.parent is not None: self.parent.active = bool(value) is_section: bool = True """Indicates that the navigation object is a "section" object. Always `True` for section objects.""" is_page: bool = False """Indicates that the navigation object is a "page" object. Always `False` for section objects.""" is_link: bool = False """Indicates that the navigation object is a "link" object. Always `False` for section objects.""" def _indent_print(self, depth: int = 0) -> str: ret = [super()._indent_print(depth)] for item in self.children: ret.append(item._indent_print(depth + 1)) return '\n'.join(ret) class Link(StructureItem): def __init__(self, title: str, url: str): self.title = title self.url = url def __repr__(self): name = self.__class__.__name__ title = f"{self.title!r}" if self.title is not None else '[blank]' return f"{name}(title={title}, url={self.url!r})" title: str """The title of the link. This would generally be used as the label of the link.""" url: str """The URL that the link points to. The URL should always be an absolute URLs and should not need to have `base_url` prepended.""" children: None = None """Links do not contain children and the attribute is always `None`.""" active: bool = False """External links cannot be "active" and the attribute is always `False`.""" is_section: bool = False """Indicates that the navigation object is a "section" object. Always `False` for link objects.""" is_page: bool = False """Indicates that the navigation object is a "page" object. Always `False` for link objects.""" is_link: bool = True """Indicates that the navigation object is a "link" object. Always `True` for link objects.""" def get_navigation(files: Files, config: MkDocsConfig) -> Navigation: """Build site navigation from config and files.""" documentation_pages = files.documentation_pages() nav_config = config['nav'] or nest_paths(f.src_uri for f in documentation_pages) items = _data_to_navigation(nav_config, files, config) if not isinstance(items, list): items = [items] # Get only the pages from the navigation, ignoring any sections and links. pages = _get_by_type(items, Page) # Include next, previous and parent links. _add_previous_and_next_links(pages) _add_parent_links(items) missing_from_config = [] for file in documentation_pages: if file.page is None: # Any documentation files not found in the nav should still have an associated page, so we # create them here. The Page object will automatically be assigned to `file.page` during # its creation (and this is the only way in which these page objects are accessible). Page(None, file, config) if file.inclusion.is_in_nav(): missing_from_config.append(file.src_path) if missing_from_config: log.log( config.validation.nav.omitted_files, 'The following pages exist in the docs directory, but are not ' 'included in the "nav" configuration:\n - ' + '\n - '.join(missing_from_config), ) links = _get_by_type(items, Link) for link in links: scheme, netloc, path, query, fragment = urlsplit(link.url) if scheme or netloc: log.debug(f"An external link to '{link.url}' is included in the 'nav' configuration.") elif link.url.startswith('/'): log.log( config.validation.nav.absolute_links, f"An absolute path to '{link.url}' is included in the 'nav' " "configuration, which presumably points to an external resource.", ) else: log.log( config.validation.nav.not_found, f"A relative path to '{link.url}' is included in the 'nav' " "configuration, which is not found in the documentation files.", ) return Navigation(items, pages) def _data_to_navigation(data, files: Files, config: MkDocsConfig): if isinstance(data, dict): return [ _data_to_navigation((key, value), files, config) if isinstance(value, str) else Section(title=key, children=_data_to_navigation(value, files, config)) for key, value in data.items() ] elif isinstance(data, list): return [ _data_to_navigation(item, files, config)[0] if isinstance(item, dict) and len(item) == 1 else _data_to_navigation(item, files, config) for item in data ] title, path = data if isinstance(data, tuple) else (None, data) file = files.get_file_from_path(path) if file: if file.inclusion.is_excluded(): log.log( min(logging.INFO, config.validation.nav.not_found), f"A reference to '{file.src_path}' is included in the 'nav' " "configuration, but this file is excluded from the built site.", ) page = file.page if page is not None: if isinstance(page, Page): if type(page) is not Page: # Strict subclass return page warnings.warn( "A plugin has set File.page to an instance of Page and it got overwritten. " "The behavior of this will change in MkDocs 1.6.", DeprecationWarning, ) else: warnings.warn( # type: ignore[unreachable] "A plugin has set File.page to a type other than Page. " "This will be an error in MkDocs 1.6.", DeprecationWarning, ) return Page(title, file, config) return Link(title, path) T = TypeVar('T') def _get_by_type(nav, t: type[T]) -> list[T]: ret = [] for item in nav: if isinstance(item, t): ret.append(item) if item.children: ret.extend(_get_by_type(item.children, t)) return ret def _add_parent_links(nav) -> None: for item in nav: if item.is_section: for child in item.children: child.parent = item _add_parent_links(item.children) def _add_previous_and_next_links(pages: list[Page]) -> None: bookended = [None, *pages, None] zipped = zip(bookended[:-2], pages, bookended[2:]) for page0, page1, page2 in zipped: page1.previous_page, page1.next_page = page0, page2 python-mkdocs-1.5.3/mkdocs/structure/toc.py0000644000175000017500000000450614502137725020671 0ustar carstencarsten""" Deals with generating the per-page table of contents. For the sake of simplicity we use the Python-Markdown `toc` extension to generate a list of dicts for each toc item, and then store it as AnchorLinks to maintain compatibility with older versions of MkDocs. """ from __future__ import annotations import sys from typing import Iterable, Iterator if sys.version_info >= (3, 8): from typing import TypedDict else: from typing_extensions import TypedDict class _TocToken(TypedDict): level: int id: str name: str children: list[_TocToken] def get_toc(toc_tokens: list[_TocToken]) -> TableOfContents: toc = [_parse_toc_token(i) for i in toc_tokens] # For the table of contents, always mark the first element as active if len(toc): toc[0].active = True # type: ignore[attr-defined] return TableOfContents(toc) class AnchorLink: """ A single entry in the table of contents. """ def __init__(self, title: str, id: str, level: int) -> None: self.title, self.id, self.level = title, id, level self.children = [] title: str """The text of the item.""" @property def url(self) -> str: """The hash fragment of a URL pointing to the item.""" return '#' + self.id level: int """The zero-based level of the item.""" children: list[AnchorLink] """An iterable of any child items.""" def __str__(self) -> str: return self.indent_print() def indent_print(self, depth: int = 0) -> str: indent = ' ' * depth ret = f'{indent}{self.title} - {self.url}\n' for item in self.children: ret += item.indent_print(depth + 1) return ret class TableOfContents(Iterable[AnchorLink]): """ Represents the table of contents for a given page. """ def __init__(self, items: list[AnchorLink]) -> None: self.items = items def __iter__(self) -> Iterator[AnchorLink]: return iter(self.items) def __len__(self) -> int: return len(self.items) def __str__(self) -> str: return ''.join(str(item) for item in self) def _parse_toc_token(token: _TocToken) -> AnchorLink: anchor = AnchorLink(token['name'], token['id'], token['level']) for i in token['children']: anchor.children.append(_parse_toc_token(i)) return anchor python-mkdocs-1.5.3/mkdocs/structure/pages.py0000644000175000017500000004246114502137725021205 0ustar carstencarstenfrom __future__ import annotations import copy import logging import posixpath import warnings from typing import TYPE_CHECKING, Any, Callable, Iterator, MutableMapping, Sequence from urllib.parse import unquote as urlunquote from urllib.parse import urljoin, urlsplit, urlunsplit import markdown import markdown.postprocessors import markdown.treeprocessors from markdown.util import AMP_SUBSTITUTE from mkdocs import utils from mkdocs.structure import StructureItem from mkdocs.structure.toc import get_toc from mkdocs.utils import _removesuffix, get_build_date, get_markdown_title, meta, weak_property if TYPE_CHECKING: from xml.etree import ElementTree as etree from mkdocs.config.defaults import MkDocsConfig from mkdocs.structure.files import File, Files from mkdocs.structure.toc import TableOfContents log = logging.getLogger(__name__) class Page(StructureItem): def __init__(self, title: str | None, file: File, config: MkDocsConfig) -> None: file.page = self self.file = file if title is not None: self.title = title # Navigation attributes self.children = None self.previous_page = None self.next_page = None self.active = False self.update_date = get_build_date() self._set_canonical_url(config.get('site_url', None)) self._set_edit_url( config.get('repo_url', None), config.get('edit_uri'), config.get('edit_uri_template') ) # Placeholders to be filled in later in the build process. self.markdown = None self._title_from_render: str | None = None self.content = None self.toc = [] # type: ignore self.meta = {} def __eq__(self, other) -> bool: return ( isinstance(other, self.__class__) and self.title == other.title and self.file == other.file ) def __repr__(self): name = self.__class__.__name__ title = f"{self.title!r}" if self.title is not None else '[blank]' url = self.abs_url or self.file.url return f"{name}(title={title}, url={url!r})" markdown: str | None """The original Markdown content from the file.""" content: str | None """The rendered Markdown as HTML, this is the contents of the documentation.""" toc: TableOfContents """An iterable object representing the Table of contents for a page. Each item in the `toc` is an [`AnchorLink`][mkdocs.structure.toc.AnchorLink].""" meta: MutableMapping[str, Any] """A mapping of the metadata included at the top of the markdown page.""" @property def url(self) -> str: """The URL of the page relative to the MkDocs `site_dir`.""" url = self.file.url if url in ('.', './'): return '' return url file: File """The documentation [`File`][mkdocs.structure.files.File] that the page is being rendered from.""" abs_url: str | None """The absolute URL of the page from the server root as determined by the value assigned to the [site_url][] configuration setting. The value includes any subdirectory included in the `site_url`, but not the domain. [base_url][] should not be used with this variable.""" canonical_url: str | None """The full, canonical URL to the current page as determined by the value assigned to the [site_url][] configuration setting. The value includes the domain and any subdirectory included in the `site_url`. [base_url][] should not be used with this variable.""" @property def active(self) -> bool: """When `True`, indicates that this page is the currently viewed page. Defaults to `False`.""" return self.__active @active.setter def active(self, value: bool): """Set active status of page and ancestors.""" self.__active = bool(value) if self.parent is not None: self.parent.active = bool(value) @property def is_index(self) -> bool: return self.file.name == 'index' edit_url: str | None """The full URL to the source page in the source repository. Typically used to provide a link to edit the source page. [base_url][] should not be used with this variable.""" @property def is_homepage(self) -> bool: """Evaluates to `True` for the homepage of the site and `False` for all other pages.""" return self.is_top_level and self.is_index and self.file.url in ('.', './', 'index.html') previous_page: Page | None """The [page][mkdocs.structure.pages.Page] object for the previous page or `None`. The value will be `None` if the current page is the first item in the site navigation or if the current page is not included in the navigation at all.""" next_page: Page | None """The [page][mkdocs.structure.pages.Page] object for the next page or `None`. The value will be `None` if the current page is the last item in the site navigation or if the current page is not included in the navigation at all.""" children: None = None """Pages do not contain children and the attribute is always `None`.""" is_section: bool = False """Indicates that the navigation object is a "section" object. Always `False` for page objects.""" is_page: bool = True """Indicates that the navigation object is a "page" object. Always `True` for page objects.""" is_link: bool = False """Indicates that the navigation object is a "link" object. Always `False` for page objects.""" def _set_canonical_url(self, base: str | None) -> None: if base: if not base.endswith('/'): base += '/' self.canonical_url = canonical_url = urljoin(base, self.url) self.abs_url = urlsplit(canonical_url).path else: self.canonical_url = None self.abs_url = None def _set_edit_url( self, repo_url: str | None, edit_uri: str | None = None, edit_uri_template: str | None = None, ) -> None: if edit_uri or edit_uri_template: src_uri = self.file.src_uri if edit_uri_template: noext = posixpath.splitext(src_uri)[0] edit_uri = edit_uri_template.format(path=src_uri, path_noext=noext) else: assert edit_uri is not None and edit_uri.endswith('/') edit_uri += src_uri if repo_url: # Ensure urljoin behavior is correct if not edit_uri.startswith(('?', '#')) and not repo_url.endswith('/'): repo_url += '/' else: try: parsed_url = urlsplit(edit_uri) if not parsed_url.scheme or not parsed_url.netloc: log.warning( f"edit_uri: {edit_uri!r} is not a valid URL, it should include the http:// (scheme)" ) except ValueError as e: log.warning(f"edit_uri: {edit_uri!r} is not a valid URL: {e}") self.edit_url = urljoin(repo_url or '', edit_uri) else: self.edit_url = None def read_source(self, config: MkDocsConfig) -> None: source = config.plugins.on_page_read_source(page=self, config=config) if source is None: try: with open(self.file.abs_src_path, encoding='utf-8-sig', errors='strict') as f: source = f.read() except OSError: log.error(f'File not found: {self.file.src_path}') raise except ValueError: log.error(f'Encoding error reading file: {self.file.src_path}') raise self.markdown, self.meta = meta.get_data(source) def _set_title(self) -> None: warnings.warn( "_set_title is no longer used in MkDocs and will be removed soon.", DeprecationWarning ) @weak_property def title(self) -> str | None: # type: ignore[override] """ Returns the title for the current page. Before calling `read_source()`, this value is empty. It can also be updated by `render()`. Check these in order and use the first that returns a valid title: - value provided on init (passed in from config) - value of metadata 'title' - content of the first H1 in Markdown content - convert filename to title """ if self.markdown is None: return None if 'title' in self.meta: return self.meta['title'] if self._title_from_render: return self._title_from_render elif self.content is None: # Preserve legacy behavior only for edge cases in plugins. title_from_md = get_markdown_title(self.markdown) if title_from_md is not None: return title_from_md if self.is_homepage: return 'Home' title = self.file.name.replace('-', ' ').replace('_', ' ') # Capitalize if the filename was all lowercase, otherwise leave it as-is. if title.lower() == title: title = title.capitalize() return title def render(self, config: MkDocsConfig, files: Files) -> None: """ Convert the Markdown source file to HTML as per the config. """ if self.markdown is None: raise RuntimeError("`markdown` field hasn't been set (via `read_source`)") md = markdown.Markdown( extensions=config['markdown_extensions'], extension_configs=config['mdx_configs'] or {}, ) relative_path_ext = _RelativePathTreeprocessor(self.file, files, config) relative_path_ext._register(md) extract_title_ext = _ExtractTitleTreeprocessor() extract_title_ext._register(md) self.content = md.convert(self.markdown) self.toc = get_toc(getattr(md, 'toc_tokens', [])) self._title_from_render = extract_title_ext.title class _RelativePathTreeprocessor(markdown.treeprocessors.Treeprocessor): def __init__(self, file: File, files: Files, config: MkDocsConfig) -> None: self.file = file self.files = files self.config = config def run(self, root: etree.Element) -> etree.Element: """ Update urls on anchors and images to make them relative Iterates through the full document tree looking for specific tags and then makes them relative based on the site navigation """ for element in root.iter(): if element.tag == 'a': key = 'href' elif element.tag == 'img': key = 'src' else: continue url = element.get(key) assert url is not None new_url = self.path_to_url(url) element.set(key, new_url) return root @classmethod def _target_uri(cls, src_path: str, dest_path: str): return posixpath.normpath( posixpath.join(posixpath.dirname(src_path), dest_path).lstrip('/') ) @classmethod def _possible_target_uris( cls, file: File, path: str, use_directory_urls: bool ) -> Iterator[str]: """First yields the resolved file uri for the link, then proceeds to yield guesses for possible mistakes.""" target_uri = cls._target_uri(file.src_uri, path) yield target_uri if posixpath.normpath(path) == '.': # Explicitly link to current file. yield file.src_uri return tried = {target_uri} prefixes = [target_uri, cls._target_uri(file.url, path)] if prefixes[0] == prefixes[1]: prefixes.pop() suffixes: list[Callable[[str], str]] = [] if use_directory_urls: suffixes.append(lambda p: p) if not posixpath.splitext(target_uri)[-1]: suffixes.append(lambda p: posixpath.join(p, 'index.md')) suffixes.append(lambda p: posixpath.join(p, 'README.md')) if ( not target_uri.endswith('.') and not path.endswith('.md') and (use_directory_urls or not path.endswith('/')) ): suffixes.append(lambda p: _removesuffix(p, '.html') + '.md') for pref in prefixes: for suf in suffixes: guess = posixpath.normpath(suf(pref)) if guess not in tried and not guess.startswith('../'): yield guess tried.add(guess) def path_to_url(self, url: str) -> str: scheme, netloc, path, query, fragment = urlsplit(url) warning_level, warning = 0, '' # Ignore URLs unless they are a relative link to a source file. if scheme or netloc: # External link. return url elif url.startswith(('/', '\\')): # Absolute link. warning_level = self.config.validation.links.absolute_links warning = f"Doc file '{self.file.src_uri}' contains an absolute link '{url}', it was left as is." elif AMP_SUBSTITUTE in url: # AMP_SUBSTITUTE is used internally by Markdown only for email. return url elif not path: # Self-link containing only query or fragment. return url path = urlunquote(path) # Determine the filepath of the target. possible_target_uris = self._possible_target_uris( self.file, path, self.config.use_directory_urls ) if warning: # For absolute path (already has a warning), the primary lookup path should be preserved as a tip option. target_uri = url target_file = None else: # Validate that the target exists in files collection. target_uri = next(possible_target_uris) target_file = self.files.get_file_from_path(target_uri) if target_file is None and not warning: # Primary lookup path had no match, definitely produce a warning, just choose which one. if not posixpath.splitext(path)[-1]: # No '.' in the last part of a path indicates path does not point to a file. warning_level = self.config.validation.links.unrecognized_links warning = ( f"Doc file '{self.file.src_uri}' contains an unrecognized relative link '{url}', " f"it was left as is." ) else: target = f" '{target_uri}'" if target_uri != url else "" warning_level = self.config.validation.links.not_found warning = ( f"Doc file '{self.file.src_uri}' contains a relative link '{url}', " f"but the target{target} is not found among documentation files." ) if warning: # There was no match, so try to guess what other file could've been intended. if warning_level > logging.DEBUG: suggest_url = '' for path in possible_target_uris: if self.files.get_file_from_path(path) is not None: if fragment and path == self.file.src_uri: path = '' else: path = utils.get_relative_url(path, self.file.src_uri) suggest_url = urlunsplit(('', '', path, query, fragment)) break else: if '@' in url and '.' in url and '/' not in url: suggest_url = f'mailto:{url}' if suggest_url: warning += f" Did you mean '{suggest_url}'?" log.log(warning_level, warning) return url assert target_uri is not None assert target_file is not None if target_file.inclusion.is_excluded(): warning_level = min(logging.INFO, self.config.validation.links.not_found) warning = ( f"Doc file '{self.file.src_uri}' contains a link to " f"'{target_uri}' which is excluded from the built site." ) log.log(warning_level, warning) path = utils.get_relative_url(target_file.url, self.file.url) return urlunsplit(('', '', path, query, fragment)) def _register(self, md: markdown.Markdown) -> None: md.treeprocessors.register(self, "relpath", 0) class _ExtractTitleTreeprocessor(markdown.treeprocessors.Treeprocessor): title: str | None = None postprocessors: Sequence[markdown.postprocessors.Postprocessor] = () def run(self, root: etree.Element) -> etree.Element: for el in root: if el.tag == 'h1': # Drop anchorlink from the element, if present. if len(el) > 0 and el[-1].tag == 'a' and not (el[-1].tail or '').strip(): el = copy.copy(el) del el[-1] # Extract the text only, recursively. title = ''.join(el.itertext()) # Unescape per Markdown implementation details. for pp in self.postprocessors: title = pp.run(title) self.title = title break return root def _register(self, md: markdown.Markdown) -> None: self.postprocessors = tuple(md.postprocessors) md.treeprocessors.register( self, "mkdocs_extract_title", priority=-1, # After the end. ) python-mkdocs-1.5.3/mkdocs/plugins.py0000644000175000017500000005425514502137725017533 0ustar carstencarsten""" Implements the plugin API for MkDocs. """ from __future__ import annotations import logging import sys from typing import TYPE_CHECKING, Any, Callable, Generic, MutableMapping, TypeVar, overload if sys.version_info >= (3, 10): from importlib.metadata import EntryPoint, entry_points else: from importlib_metadata import EntryPoint, entry_points if TYPE_CHECKING: import jinja2.environment if sys.version_info >= (3, 8): from typing import Literal else: from typing_extensions import Literal from mkdocs import utils from mkdocs.config.base import Config, ConfigErrors, ConfigWarnings, LegacyConfig, PlainConfigSchema if TYPE_CHECKING: from mkdocs.config.defaults import MkDocsConfig from mkdocs.livereload import LiveReloadServer from mkdocs.structure.files import Files from mkdocs.structure.nav import Navigation from mkdocs.structure.pages import Page from mkdocs.utils.templates import TemplateContext log = logging.getLogger('mkdocs.plugins') def get_plugins() -> dict[str, EntryPoint]: """Return a dict of all installed Plugins as {name: EntryPoint}.""" plugins = entry_points(group='mkdocs.plugins') # Allow third-party plugins to override core plugins pluginmap = {} for plugin in plugins: if plugin.name in pluginmap and plugin.value.startswith("mkdocs.contrib."): continue pluginmap[plugin.name] = plugin return pluginmap SomeConfig = TypeVar('SomeConfig', bound=Config) class BasePlugin(Generic[SomeConfig]): """ Plugin base class. All plugins should subclass this class. """ config_class: type[SomeConfig] = LegacyConfig # type: ignore[assignment] config_scheme: PlainConfigSchema = () config: SomeConfig = {} # type: ignore[assignment] supports_multiple_instances: bool = False """Set to true in subclasses to declare support for adding the same plugin multiple times.""" def __class_getitem__(cls, config_class: type[Config]): """Eliminates the need to write `config_class = FooConfig` when subclassing BasePlugin[FooConfig]""" name = f'{cls.__name__}[{config_class.__name__}]' return type(name, (cls,), dict(config_class=config_class)) def __init_subclass__(cls): if not issubclass(cls.config_class, Config): raise TypeError( f"config_class {cls.config_class} must be a subclass of `mkdocs.config.base.Config`" ) if cls.config_class is not LegacyConfig: cls.config_scheme = cls.config_class._schema # For compatibility. def load_config( self, options: dict[str, Any], config_file_path: str | None = None ) -> tuple[ConfigErrors, ConfigWarnings]: """Load config from a dict of options. Returns a tuple of (errors, warnings).""" if self.config_class is LegacyConfig: self.config = LegacyConfig(self.config_scheme, config_file_path=config_file_path) # type: ignore else: self.config = self.config_class(config_file_path=config_file_path) self.config.load_dict(options) return self.config.validate() # One-time events def on_startup(self, *, command: Literal['build', 'gh-deploy', 'serve'], dirty: bool) -> None: """ The `startup` event runs once at the very beginning of an `mkdocs` invocation. New in MkDocs 1.4. The presence of an `on_startup` method (even if empty) migrates the plugin to the new system where the plugin object is kept across builds within one `mkdocs serve`. Note that for initializing variables, the `__init__` method is still preferred. For initializing per-build variables (and whenever in doubt), use the `on_config` event. Parameters: command: the command that MkDocs was invoked with, e.g. "serve" for `mkdocs serve`. dirty: whether `--dirty` flag was passed. """ def on_shutdown(self) -> None: """ The `shutdown` event runs once at the very end of an `mkdocs` invocation, before exiting. This event is relevant only for support of `mkdocs serve`, otherwise within a single build it's undistinguishable from `on_post_build`. New in MkDocs 1.4. The presence of an `on_shutdown` method (even if empty) migrates the plugin to the new system where the plugin object is kept across builds within one `mkdocs serve`. Note the `on_post_build` method is still preferred for cleanups, when possible, as it has a much higher chance of actually triggering. `on_shutdown` is "best effort" because it relies on detecting a graceful shutdown of MkDocs. """ def on_serve( self, server: LiveReloadServer, *, config: MkDocsConfig, builder: Callable ) -> LiveReloadServer | None: """ The `serve` event is only called when the `serve` command is used during development. It runs only once, after the first build finishes. It is passed the `Server` instance which can be modified before it is activated. For example, additional files or directories could be added to the list of "watched" files for auto-reloading. Parameters: server: `livereload.Server` instance config: global configuration object builder: a callable which gets passed to each call to `server.watch` Returns: `livereload.Server` instance """ return server # Global events def on_config(self, config: MkDocsConfig) -> MkDocsConfig | None: """ The `config` event is the first event called on build and is run immediately after the user configuration is loaded and validated. Any alterations to the config should be made here. Parameters: config: global configuration object Returns: global configuration object """ return config def on_pre_build(self, *, config: MkDocsConfig) -> None: """ The `pre_build` event does not alter any variables. Use this event to call pre-build scripts. Parameters: config: global configuration object """ def on_files(self, files: Files, *, config: MkDocsConfig) -> Files | None: """ The `files` event is called after the files collection is populated from the `docs_dir`. Use this event to add, remove, or alter files in the collection. Note that Page objects have not yet been associated with the file objects in the collection. Use [Page Events](plugins.md#page-events) to manipulate page specific data. Parameters: files: global files collection config: global configuration object Returns: global files collection """ return files def on_nav(self, nav: Navigation, *, config: MkDocsConfig, files: Files) -> Navigation | None: """ The `nav` event is called after the site navigation is created and can be used to alter the site navigation. Parameters: nav: global navigation object config: global configuration object files: global files collection Returns: global navigation object """ return nav def on_env( self, env: jinja2.Environment, *, config: MkDocsConfig, files: Files ) -> jinja2.Environment | None: """ The `env` event is called after the Jinja template environment is created and can be used to alter the [Jinja environment](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Environment). Parameters: env: global Jinja environment config: global configuration object files: global files collection Returns: global Jinja Environment """ return env def on_post_build(self, *, config: MkDocsConfig) -> None: """ The `post_build` event does not alter any variables. Use this event to call post-build scripts. Parameters: config: global configuration object """ def on_build_error(self, *, error: Exception) -> None: """ The `build_error` event is called after an exception of any kind is caught by MkDocs during the build process. Use this event to clean things up before MkDocs terminates. Note that any other events which were scheduled to run after the error will have been skipped. See [Handling Errors](plugins.md#handling-errors) for more details. Parameters: error: exception raised """ # Template events def on_pre_template( self, template: jinja2.Template, *, template_name: str, config: MkDocsConfig ) -> jinja2.Template | None: """ The `pre_template` event is called immediately after the subject template is loaded and can be used to alter the template. Parameters: template: a Jinja2 [Template](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Template) object template_name: string filename of template config: global configuration object Returns: a Jinja2 [Template](https://jinja.palletsprojects.com/en/latest/api/#jinja2.Template) object """ return template def on_template_context( self, context: TemplateContext, *, template_name: str, config: MkDocsConfig ) -> TemplateContext | None: """ The `template_context` event is called immediately after the context is created for the subject template and can be used to alter the context for that specific template only. Parameters: context: dict of template context variables template_name: string filename of template config: global configuration object Returns: dict of template context variables """ return context def on_post_template( self, output_content: str, *, template_name: str, config: MkDocsConfig ) -> str | None: """ The `post_template` event is called after the template is rendered, but before it is written to disc and can be used to alter the output of the template. If an empty string is returned, the template is skipped and nothing is is written to disc. Parameters: output_content: output of rendered template as string template_name: string filename of template config: global configuration object Returns: output of rendered template as string """ return output_content # Page events def on_pre_page(self, page: Page, *, config: MkDocsConfig, files: Files) -> Page | None: """ The `pre_page` event is called before any actions are taken on the subject page and can be used to alter the `Page` instance. Parameters: page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: `mkdocs.structure.pages.Page` instance """ return page def on_page_read_source(self, *, page: Page, config: MkDocsConfig) -> str | None: """ The `on_page_read_source` event can replace the default mechanism to read the contents of a page's source from the filesystem. Parameters: page: `mkdocs.structure.pages.Page` instance config: global configuration object Returns: The raw source for a page as unicode string. If `None` is returned, the default loading from a file will be performed. """ return None def on_page_markdown( self, markdown: str, *, page: Page, config: MkDocsConfig, files: Files ) -> str | None: """ The `page_markdown` event is called after the page's markdown is loaded from file and can be used to alter the Markdown source text. The meta- data has been stripped off and is available as `page.meta` at this point. Parameters: markdown: Markdown source text of page as string page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: Markdown source text of page as string """ return markdown def on_page_content( self, html: str, *, page: Page, config: MkDocsConfig, files: Files ) -> str | None: """ The `page_content` event is called after the Markdown text is rendered to HTML (but before being passed to a template) and can be used to alter the HTML body of the page. Parameters: html: HTML rendered from Markdown source as string page: `mkdocs.structure.pages.Page` instance config: global configuration object files: global files collection Returns: HTML rendered from Markdown source as string """ return html def on_page_context( self, context: TemplateContext, *, page: Page, config: MkDocsConfig, nav: Navigation ) -> TemplateContext | None: """ The `page_context` event is called after the context for a page is created and can be used to alter the context for that specific page only. Parameters: context: dict of template context variables page: `mkdocs.structure.pages.Page` instance config: global configuration object nav: global navigation object Returns: dict of template context variables """ return context def on_post_page(self, output: str, *, page: Page, config: MkDocsConfig) -> str | None: """ The `post_page` event is called after the template is rendered, but before it is written to disc and can be used to alter the output of the page. If an empty string is returned, the page is skipped and nothing is written to disc. Parameters: output: output of rendered template as string page: `mkdocs.structure.pages.Page` instance config: global configuration object Returns: output of rendered template as string """ return output EVENTS = tuple(k[3:] for k in BasePlugin.__dict__ if k.startswith("on_")) # The above definitions were just for docs and type checking, we don't actually want them. for k in EVENTS: delattr(BasePlugin, 'on_' + k) T = TypeVar('T') def event_priority(priority: float) -> Callable[[T], T]: """A decorator to set an event priority for an event handler method. Recommended priority values: `100` "first", `50` "early", `0` "default", `-50` "late", `-100` "last". As different plugins discover more precise relations to each other, the values should be further tweaked. ```python @plugins.event_priority(-100) # Wishing to run this after all other plugins' `on_files` events. def on_files(self, files, config, **kwargs): ... ``` New in MkDocs 1.4. Recommended shim for backwards compatibility: ```python try: from mkdocs.plugins import event_priority except ImportError: event_priority = lambda priority: lambda f: f # No-op fallback ``` """ def decorator(event_method): event_method.mkdocs_priority = priority return event_method return decorator class PluginCollection(dict, MutableMapping[str, BasePlugin]): """ A collection of plugins. In addition to being a dict of Plugin instances, each event method is registered upon being added. All registered methods for a given event can then be run in order by calling `run_event`. """ def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.events: dict[str, list[Callable]] = {k: [] for k in EVENTS} def _register_event(self, event_name: str, method: Callable) -> None: """Register a method for an event.""" utils.insort( self.events[event_name], method, key=lambda m: -getattr(m, 'mkdocs_priority', 0) ) def __getitem__(self, key: str) -> BasePlugin: return super().__getitem__(key) def __setitem__(self, key: str, value: BasePlugin) -> None: super().__setitem__(key, value) # Register all of the event methods defined for this Plugin. for event_name in (x for x in dir(value) if x.startswith('on_')): method = getattr(value, event_name, None) if callable(method): self._register_event(event_name[3:], method) @overload def run_event(self, name: str, **kwargs) -> Any: ... @overload def run_event(self, name: str, item: T, **kwargs) -> T: ... def run_event(self, name: str, item=None, **kwargs): """ Run all registered methods of an event. `item` is the object to be modified or replaced and returned by the event method. If it isn't given the event method creates a new object to be returned. All other keywords are variables for context, but would not generally be modified by the event method. """ pass_item = item is not None events = self.events[name] if events: log.debug(f'Running {len(events)} `{name}` events') for method in events: if pass_item: result = method(item, **kwargs) else: result = method(**kwargs) # keep item if method returned `None` if result is not None: item = result return item def on_startup(self, *, command: Literal['build', 'gh-deploy', 'serve'], dirty: bool) -> None: return self.run_event('startup', command=command, dirty=dirty) def on_shutdown(self) -> None: return self.run_event('shutdown') def on_serve( self, server: LiveReloadServer, *, config: MkDocsConfig, builder: Callable ) -> LiveReloadServer: return self.run_event('serve', server, config=config, builder=builder) def on_config(self, config: MkDocsConfig) -> MkDocsConfig: return self.run_event('config', config) def on_pre_build(self, *, config: MkDocsConfig) -> None: return self.run_event('pre_build', config=config) def on_files(self, files: Files, *, config: MkDocsConfig) -> Files: return self.run_event('files', files, config=config) def on_nav(self, nav: Navigation, *, config: MkDocsConfig, files: Files) -> Navigation: return self.run_event('nav', nav, config=config, files=files) def on_env(self, env: jinja2.Environment, *, config: MkDocsConfig, files: Files): return self.run_event('env', env, config=config, files=files) def on_post_build(self, *, config: MkDocsConfig) -> None: return self.run_event('post_build', config=config) def on_build_error(self, *, error: Exception) -> None: return self.run_event('build_error', error=error) def on_pre_template( self, template: jinja2.Template, *, template_name: str, config: MkDocsConfig ) -> jinja2.Template: return self.run_event('pre_template', template, template_name=template_name, config=config) def on_template_context( self, context: TemplateContext, *, template_name: str, config: MkDocsConfig ) -> TemplateContext: return self.run_event( 'template_context', context, template_name=template_name, config=config ) def on_post_template( self, output_content: str, *, template_name: str, config: MkDocsConfig ) -> str: return self.run_event( 'post_template', output_content, template_name=template_name, config=config ) def on_pre_page(self, page: Page, *, config: MkDocsConfig, files: Files) -> Page: return self.run_event('pre_page', page, config=config, files=files) def on_page_read_source(self, *, page: Page, config: MkDocsConfig) -> str | None: return self.run_event('page_read_source', page=page, config=config) def on_page_markdown( self, markdown: str, *, page: Page, config: MkDocsConfig, files: Files ) -> str: return self.run_event('page_markdown', markdown, page=page, config=config, files=files) def on_page_content(self, html: str, *, page: Page, config: MkDocsConfig, files: Files) -> str: return self.run_event('page_content', html, page=page, config=config, files=files) def on_page_context( self, context: TemplateContext, *, page: Page, config: MkDocsConfig, nav: Navigation ) -> TemplateContext: return self.run_event('page_context', context, page=page, config=config, nav=nav) def on_post_page(self, output: str, *, page: Page, config: MkDocsConfig) -> str: return self.run_event('post_page', output, page=page, config=config) class PrefixedLogger(logging.LoggerAdapter): """A logger adapter to prefix log messages.""" def __init__(self, prefix: str, logger: logging.Logger) -> None: """ Initialize the logger adapter. Arguments: prefix: The string to insert in front of every message. logger: The logger instance. """ super().__init__(logger, {}) self.prefix = prefix def process(self, msg: str, kwargs: MutableMapping[str, Any]) -> tuple[str, Any]: """ Process the message. Arguments: msg: The message: kwargs: Remaining arguments. Returns: The processed message. """ return f"{self.prefix}: {msg}", kwargs def get_plugin_logger(name: str) -> PrefixedLogger: """Return a logger for plugins. Arguments: name: The name to use with `logging.getLogger`. Returns: A logger configured to work well in MkDocs, prefixing each message with the plugin package name. Example: ```python from mkdocs.plugins import get_plugin_logger log = get_plugin_logger(__name__) log.info("My plugin message") ``` """ logger = logging.getLogger(f"mkdocs.plugins.{name}") return PrefixedLogger(name.split(".", 1)[0], logger) python-mkdocs-1.5.3/mkdocs/__main__.py0000644000175000017500000002716114502137725017566 0ustar carstencarsten#!/usr/bin/env python from __future__ import annotations import logging import os import shutil import sys import textwrap import traceback import warnings import click from mkdocs import __version__, config, utils if sys.platform.startswith("win"): try: import colorama except ImportError: pass else: colorama.init() log = logging.getLogger(__name__) def _showwarning(message, category, filename, lineno, file=None, line=None): try: # Last stack frames: # * ... # * Location of call to deprecated function <-- include this # * Location of call to warn() <-- include this # * (stdlib) Location of call to showwarning function # * (this function) Location of call to extract_stack() stack = [frame for frame in traceback.extract_stack() if frame.line][-4:-2] # Make sure the actual affected file's name is still present (the case of syntax warning): if not any(frame.filename == filename for frame in stack): stack = stack[-1:] + [traceback.FrameSummary(filename, lineno, '')] tb = ''.join(traceback.format_list(stack)) except Exception: tb = f' File "{filename}", line {lineno}' log.info(f'{category.__name__}: {message}\n{tb}') def _enable_warnings(): from mkdocs.commands import build build.log.addFilter(utils.DuplicateFilter()) warnings.simplefilter('module', DeprecationWarning) warnings.showwarning = _showwarning class ColorFormatter(logging.Formatter): colors = { 'CRITICAL': 'red', 'ERROR': 'red', 'WARNING': 'yellow', 'DEBUG': 'blue', } text_wrapper = textwrap.TextWrapper( width=shutil.get_terminal_size(fallback=(0, 0)).columns, replace_whitespace=False, break_long_words=False, break_on_hyphens=False, initial_indent=' ' * 11, subsequent_indent=' ' * 11, ) def format(self, record): message = super().format(record) prefix = f'{record.levelname:<8}- ' if record.levelname in self.colors: prefix = click.style(prefix, fg=self.colors[record.levelname]) if self.text_wrapper.width: # Only wrap text if a terminal width was detected msg = '\n'.join(self.text_wrapper.fill(line) for line in message.splitlines()) # Prepend prefix after wrapping so that color codes don't affect length return prefix + msg[11:] return prefix + message class State: """Maintain logging level.""" def __init__(self, log_name='mkdocs', level=logging.INFO): self.logger = logging.getLogger(log_name) # Don't restrict level on logger; use handler self.logger.setLevel(1) self.logger.propagate = False self.stream = logging.StreamHandler() self.stream.setFormatter(ColorFormatter()) self.stream.setLevel(level) self.stream.name = 'MkDocsStreamHandler' self.logger.addHandler(self.stream) def __del__(self): self.logger.removeHandler(self.stream) pass_state = click.make_pass_decorator(State, ensure=True) clean_help = "Remove old files from the site_dir before building (the default)." config_help = ( "Provide a specific MkDocs config. This can be a file name, or '-' to read from stdin." ) dev_addr_help = "IP address and port to serve documentation locally (default: localhost:8000)" strict_help = "Enable strict mode. This will cause MkDocs to abort the build on any warnings." theme_help = "The theme to use when building your documentation." theme_choices = sorted(utils.get_theme_names()) site_dir_help = "The directory to output the result of the documentation build." use_directory_urls_help = "Use directory URLs when building pages (the default)." reload_help = "Enable the live reloading in the development server (this is the default)" no_reload_help = "Disable the live reloading in the development server." serve_dirty_help = "Only re-build files that have changed." serve_clean_help = ( "Build the site without any effects of `mkdocs serve` - pure `mkdocs build`, then serve." ) commit_message_help = ( "A commit message to use when committing to the " "GitHub Pages remote branch. Commit {sha} and MkDocs {version} are available as expansions" ) remote_branch_help = ( "The remote branch to commit to for GitHub Pages. This " "overrides the value specified in config" ) remote_name_help = ( "The remote name to commit to for GitHub Pages. This overrides the value specified in config" ) force_help = "Force the push to the repository." no_history_help = "Replace the whole Git history with one new commit." ignore_version_help = ( "Ignore check that build is not being deployed with an older version of MkDocs." ) watch_theme_help = ( "Include the theme in list of files to watch for live reloading. " "Ignored when live reload is not used." ) shell_help = "Use the shell when invoking Git." watch_help = "A directory or file to watch for live reloading. Can be supplied multiple times." projects_file_help = ( "URL or local path of the registry file that declares all known MkDocs-related projects." ) def add_options(*opts): def inner(f): for i in reversed(opts): f = i(f) return f return inner def verbose_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value: state.stream.setLevel(logging.DEBUG) return click.option( '-v', '--verbose', is_flag=True, expose_value=False, help='Enable verbose output', callback=callback, )(f) def quiet_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value: state.stream.setLevel(logging.ERROR) return click.option( '-q', '--quiet', is_flag=True, expose_value=False, help='Silence warnings', callback=callback, )(f) def color_option(f): def callback(ctx, param, value): state = ctx.ensure_object(State) if value is False or ( value is None and ( not sys.stdout.isatty() or os.environ.get('NO_COLOR') or os.environ.get('TERM') == 'dumb' ) ): state.stream.setFormatter(logging.Formatter('%(levelname)-8s- %(message)s')) return click.option( '--color/--no-color', is_flag=True, default=None, expose_value=False, help="Force enable or disable color and wrapping for the output. Default is auto-detect.", callback=callback, )(f) common_options = add_options(quiet_option, verbose_option) common_config_options = add_options( click.option('-f', '--config-file', type=click.File('rb'), help=config_help), # Don't override config value if user did not specify --strict flag # Conveniently, load_config drops None values click.option('-s', '--strict/--no-strict', is_flag=True, default=None, help=strict_help), click.option('-t', '--theme', type=click.Choice(theme_choices), help=theme_help), # As with --strict, set the default to None so that this doesn't incorrectly # override the config file click.option( '--use-directory-urls/--no-directory-urls', is_flag=True, default=None, help=use_directory_urls_help, ), ) PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}" PKG_DIR = os.path.dirname(os.path.abspath(__file__)) @click.group(context_settings=dict(help_option_names=['-h', '--help'], max_content_width=120)) @click.version_option( __version__, '-V', '--version', message=f'%(prog)s, version %(version)s from { PKG_DIR } (Python { PYTHON_VERSION })', ) @common_options @color_option def cli(): """ MkDocs - Project documentation with Markdown. """ @cli.command(name="serve") @click.option('-a', '--dev-addr', help=dev_addr_help, metavar='') @click.option('--no-livereload', 'livereload', flag_value=False, help=no_reload_help) @click.option('--livereload', 'livereload', flag_value=True, default=True, hidden=True) @click.option('--dirtyreload', 'build_type', flag_value='dirty', hidden=True) @click.option('--dirty', 'build_type', flag_value='dirty', help=serve_dirty_help) @click.option('-c', '--clean', 'build_type', flag_value='clean', help=serve_clean_help) @click.option('--watch-theme', help=watch_theme_help, is_flag=True) @click.option( '-w', '--watch', help=watch_help, type=click.Path(exists=True), multiple=True, default=[] ) @common_config_options @common_options def serve_command(**kwargs): """Run the builtin development server""" from mkdocs.commands import serve _enable_warnings() serve.serve(**kwargs) @cli.command(name="build") @click.option('-c', '--clean/--dirty', is_flag=True, default=True, help=clean_help) @common_config_options @click.option('-d', '--site-dir', type=click.Path(), help=site_dir_help) @common_options def build_command(clean, **kwargs): """Build the MkDocs documentation""" from mkdocs.commands import build _enable_warnings() cfg = config.load_config(**kwargs) cfg.plugins.on_startup(command='build', dirty=not clean) try: build.build(cfg, dirty=not clean) finally: cfg.plugins.on_shutdown() @cli.command(name="gh-deploy") @click.option('-c', '--clean/--dirty', is_flag=True, default=True, help=clean_help) @click.option('-m', '--message', help=commit_message_help) @click.option('-b', '--remote-branch', help=remote_branch_help) @click.option('-r', '--remote-name', help=remote_name_help) @click.option('--force', is_flag=True, help=force_help) @click.option('--no-history', is_flag=True, help=no_history_help) @click.option('--ignore-version', is_flag=True, help=ignore_version_help) @click.option('--shell', is_flag=True, help=shell_help) @common_config_options @click.option('-d', '--site-dir', type=click.Path(), help=site_dir_help) @common_options def gh_deploy_command( clean, message, remote_branch, remote_name, force, no_history, ignore_version, shell, **kwargs ): """Deploy your documentation to GitHub Pages""" from mkdocs.commands import build, gh_deploy _enable_warnings() cfg = config.load_config(remote_branch=remote_branch, remote_name=remote_name, **kwargs) cfg.plugins.on_startup(command='gh-deploy', dirty=not clean) try: build.build(cfg, dirty=not clean) finally: cfg.plugins.on_shutdown() gh_deploy.gh_deploy( cfg, message=message, force=force, no_history=no_history, ignore_version=ignore_version, shell=shell, ) @cli.command(name="get-deps") @verbose_option @click.option('-f', '--config-file', type=click.File('rb'), help=config_help) @click.option( '-p', '--projects-file', default='https://raw.githubusercontent.com/mkdocs/catalog/main/projects.yaml', help=projects_file_help, show_default=True, ) def get_deps_command(config_file, projects_file): """Show required PyPI packages inferred from plugins in mkdocs.yml""" from mkdocs.commands import get_deps warning_counter = utils.CountHandler() warning_counter.setLevel(logging.WARNING) logging.getLogger('mkdocs').addHandler(warning_counter) get_deps.get_deps(projects_file_url=projects_file, config_file_path=config_file) if warning_counter.get_counts(): sys.exit(1) @cli.command(name="new") @click.argument("project_directory") @common_options def new_command(project_directory): """Create a new MkDocs project""" from mkdocs.commands import new new.new(project_directory) if __name__ == '__main__': # pragma: no cover cli() python-mkdocs-1.5.3/mkdocs/localization.py0000644000175000017500000000545314502137725020536 0ustar carstencarstenfrom __future__ import annotations import logging import os from typing import TYPE_CHECKING, Sequence from jinja2.ext import Extension, InternationalizationExtension from mkdocs.config.base import ValidationError if TYPE_CHECKING: import jinja2 try: from babel.core import Locale, UnknownLocaleError from babel.support import NullTranslations, Translations has_babel = True except ImportError: # pragma: no cover from mkdocs.utils.babel_stub import Locale, UnknownLocaleError has_babel = False log = logging.getLogger(__name__) base_path = os.path.dirname(os.path.abspath(__file__)) class NoBabelExtension(InternationalizationExtension): # pragma: no cover def __init__(self, environment): Extension.__init__(self, environment) environment.extend( install_null_translations=self._install_null, newstyle_gettext=False, ) def parse_locale(locale: str) -> Locale: try: return Locale.parse(locale, sep='_') except (ValueError, UnknownLocaleError, TypeError) as e: raise ValidationError(f'Invalid value for locale: {e}') def install_translations( env: jinja2.Environment, locale: Locale, theme_dirs: Sequence[str] ) -> None: if has_babel: env.add_extension('jinja2.ext.i18n') translations = _get_merged_translations(theme_dirs, 'locales', locale) if translations is not None: env.install_gettext_translations(translations) else: env.install_null_translations() if locale.language != 'en': log.warning( f"No translations could be found for the locale '{locale}'. " 'Defaulting to English.' ) else: # pragma: no cover # no babel installed, add dummy support for trans/endtrans blocks env.add_extension(NoBabelExtension) env.install_null_translations() def _get_merged_translations( theme_dirs: Sequence[str], locales_dir: str, locale: Locale ) -> Translations | None: merged_translations: Translations | None = None log.debug(f"Looking for translations for locale '{locale}'") if locale.territory: locale_str = f"{locale.language}_{locale.territory}" else: locale_str = locale.language for theme_dir in reversed(theme_dirs): dirname = os.path.join(theme_dir, locales_dir) translations = Translations.load(dirname, [locale_str]) if type(translations) is NullTranslations: log.debug(f"No translations found here: '{dirname}'") continue log.debug(f"Translations found here: '{dirname}'") if merged_translations is None: merged_translations = translations else: merged_translations.merge(translations) return merged_translations python-mkdocs-1.5.3/setup.py0000644000175000017500000000042114502137725015714 0ustar carstencarsten"""Installation using setup.py is no longer supported. Use `python -m pip install .` instead.""" import sys from setuptools import setup sys.exit(__doc__) # Fake reference so GitHub still considers it a real package for statistics purposes. setup( name="mkdocs", ) python-mkdocs-1.5.3/hatch_build.py0000644000175000017500000000070714502137725017031 0ustar carstencarstenimport os from hatchling.builders.hooks.plugin.interface import BuildHookInterface class CustomBuildHook(BuildHookInterface): def initialize(self, version, build_data): from babel.messages.frontend import compile_catalog for theme in 'mkdocs', 'readthedocs': cmd = compile_catalog() cmd.directory = os.path.join('mkdocs', 'themes', theme, 'locales') cmd.finalize_options() cmd.run() python-mkdocs-1.5.3/.csslintrc0000644000175000017500000000241214502137725016211 0ustar carstencarsten--exclude-list = mkdocs/themes/mkdocs/css/bootstrap.min.css, mkdocs/themes/mkdocs/css/font-awesome.min.css, mkdocs/themes/mkdocs/css/highlight.css, mkdocs/themes/readthedocs/css/theme.css --errors = known-properties, box-sizing, outline-none, bulletproof-font-face, compatible-vendor-prefixes, errors, duplicate-background-images, duplicate-properties, empty-rules, selector-max-approaching, gradients, floats, font-faces, font-sizes, shorthand, import, import-ie-limit, text-indent, rules-count, regex-selectors, selector-max, selector-newline, star-property-hack, underscore-property-hack, universal-selector, unqualified-attributes, vendor-prefix, zero-units, overqualified-elements, unique-headings, qualified-headings, ids, display-property-grouping, fallback-colors, box-model, important, adjoining-classes --ignore = order-alphabetical python-mkdocs-1.5.3/CONTRIBUTING.md0000644000175000017500000000024714502137725016441 0ustar carstencarsten# Contributing to MkDocs See the contributing guide in the documentation for an introduction to contributing to MkDocs. python-mkdocs-1.5.3/.github/0000755000175000017500000000000014502137725015545 5ustar carstencarstenpython-mkdocs-1.5.3/.github/FUNDING.yml0000644000175000017500000000002014502137725017352 0ustar carstencarstengithub: oprypin python-mkdocs-1.5.3/.github/workflows/0000755000175000017500000000000014502137725017602 5ustar carstencarstenpython-mkdocs-1.5.3/.github/workflows/deploy-release.yml0000644000175000017500000000076514502137725023247 0ustar carstencarstenname: Deploy release on: push: tags: - '*' jobs: pypi: permissions: id-token: write runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: pip install -U build - name: Build package run: python -m build - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 python-mkdocs-1.5.3/.github/workflows/ci.yml0000644000175000017500000000701314502137725020721 0ustar carstencarstenname: CI on: [push, pull_request] jobs: test: strategy: fail-fast: false matrix: python-version: [3.7, 3.8, 3.9, '3.10', '3.11', pypy-3.9-v7.x] os: [ubuntu-latest, windows-latest, macos-latest] include: - python-version: pypy-3.9-v7.x py: pypy3 # Just to slim down the test matrix: exclude: - python-version: 3.8 os: macos-latest - python-version: 3.8 os: windows-latest - python-version: 3.9 os: ubuntu-latest - python-version: 3.10 os: macos-latest - python-version: 3.10 os: windows-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Setup Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade hatch - name: Run tests run: | hatch run +py=${{ matrix.py || matrix.python-version }} test:with-coverage - name: Run integration tests run: | hatch run +py=${{ matrix.py || matrix.python-version }} integration:test shell: bash - name: Upload Codecov Results if: success() uses: codecov/codecov-action@v3 with: file: ./coverage.xml flags: unittests name: ${{ matrix.os }}/${{ matrix.python-version }} fail_ci_if_error: false lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install Python dependencies run: | python -m pip install --upgrade hatch - name: Setup Node uses: actions/setup-node@v3 with: node-version: 16 - name: Check with ruff if: always() run: hatch run style:fix - name: Check with black + isort if: always() run: hatch run style:format && git diff --color --exit-code - name: Check with mypy if: always() run: hatch run types:check - name: Check Markdown style if: always() run: hatch run lint:markdown - name: Check JS style if: always() run: hatch run lint:js - name: Check CSS style if: always() run: hatch run lint:css - name: Check spelling if: always() run: hatch run lint:spelling package: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install Hatch run: | python -m pip install -U hatch - name: Build package run: | hatch build - name: Check packaged files shell: bash -e -x {0} run: | expected_wheel=(-emkdocs/{templates/sitemap.xml,config/base.py,py.typed,contrib/search/lunr-language/lunr.nl.js,themes/{mkdocs,readthedocs}/{base.html,locales/{de,es}/LC_MESSAGES/messages.mo}}) expected_sdist=("${expected_wheel[@]}" -e{pyproject.toml,hatch_build.py}) test "$(tar -ztf dist/mkdocs-*.tar.gz | grep -F "${expected_sdist[@]}" | tee /dev/stderr | wc -l)" -eq "${#expected_sdist[@]}" test "$(unzip -l dist/mkdocs-*any.whl | grep -F "${expected_wheel[@]}" | tee /dev/stderr | wc -l)" -eq "${#expected_wheel[@]}" python-mkdocs-1.5.3/LICENSE0000644000175000017500000000241414502137725015213 0ustar carstencarstenCopyright © 2014-present, Tom Christie. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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. python-mkdocs-1.5.3/pyproject.toml0000644000175000017500000001445014502137725017125 0ustar carstencarsten[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "mkdocs" description = "Project documentation with Markdown." readme = "README.md" license = "BSD-2-Clause" authors = [ {name = "Tom Christie", email = "tom@tomchristie.com"}, ] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Documentation", "Topic :: Text Processing", ] dynamic = ["version"] requires-python = ">=3.7" dependencies = [ "click >=7.0", "Jinja2 >=2.11.1", "markupsafe >=2.0.1", "Markdown >=3.2.1", "PyYAML >=5.1", "watchdog >=2.0", "ghp-import >=1.0", "pyyaml_env_tag >=0.1", "importlib-metadata >=4.3; python_version < '3.10'", "typing-extensions >=3.10; python_version < '3.8'", "packaging >=20.5", "mergedeep >=1.3.4", "pathspec >=0.11.1", "platformdirs >=2.2.0", "colorama >=0.4; platform_system == 'Windows'", ] [project.optional-dependencies] i18n = [ "babel >=2.9.0", ] min-versions = [ "click ==7.0", "Jinja2 ==2.11.1", "markupsafe ==2.0.1", "Markdown ==3.2.1", "PyYAML ==5.1", "watchdog ==2.0", "ghp-import ==1.0", "pyyaml_env_tag ==0.1", "importlib-metadata ==4.3; python_version < '3.10'", "typing-extensions ==3.10; python_version < '3.8'", "packaging ==20.5", "mergedeep ==1.3.4", "pathspec ==0.11.1", "platformdirs ==2.2.0", "colorama ==0.4; platform_system == 'Windows'", "babel ==2.9.0", ] [project.urls] Documentation = "https://www.mkdocs.org/" Source = "https://github.com/mkdocs/mkdocs" Issues = "https://github.com/mkdocs/mkdocs/issues" History = "https://www.mkdocs.org/about/release-notes/" [project.scripts] mkdocs = "mkdocs.__main__:cli" [project.entry-points."mkdocs.themes"] mkdocs = "mkdocs.themes.mkdocs" readthedocs = "mkdocs.themes.readthedocs" [project.entry-points."mkdocs.plugins"] search = "mkdocs.contrib.search:SearchPlugin" [tool.hatch.version] path = "mkdocs/__init__.py" [tool.hatch.build] artifacts = ["/mkdocs/**/*.mo"] [tool.hatch.build.targets.sdist] include = ["/mkdocs"] [tool.hatch.build.targets.wheel] exclude = ["/mkdocs/tests/integration", "*.po", "*.pot", "babel.cfg"] [tool.hatch.build.hooks.custom] dependencies = [ "babel", ] [tool.hatch.envs.default.scripts] all = [ "hatch run style:fix", "hatch run types:check", "hatch run test:test", "hatch run lint:check", "hatch run +type=default integration:test", ] [tool.hatch.envs.test] features = ["i18n"] dependencies = [ "coverage", ] [tool.hatch.envs.test.scripts] test = "coverage run --source=mkdocs --omit 'mkdocs/tests/*' -m unittest discover -p '*tests.py' mkdocs --top-level-directory ." _coverage = ["test", "coverage xml", "coverage report --show-missing"] with-coverage = "test" [[tool.hatch.envs.test.matrix]] python = ["3.7", "3.8", "3.9", "3.10", "3.11", "pypy3"] type = ["default", "min-req"] [tool.hatch.envs.test.overrides] matrix.type.features = [ { value = "min-versions", if = ["min-req"] }, ] matrix.type.scripts = [ { key = "with-coverage", value = "_coverage", if = ["default"] }, ] [tool.hatch.envs.integration] template = "docs" [tool.hatch.envs.integration.scripts] test = "python -m mkdocs.tests.integration" [[tool.hatch.envs.integration.matrix]] python = ["3.7", "3.8", "3.9", "3.10", "3.11", "pypy3"] type = ["default", "no-babel"] [tool.hatch.envs.integration.overrides] matrix.type.features = [ { value = "i18n", if = ["default"] }, ] [tool.hatch.envs.types] dependencies = [ "mypy", "types-Jinja2", "types-Markdown", "types-PyYAML", "types-setuptools", "typing-extensions", ] [tool.hatch.envs.types.scripts] check = "mypy mkdocs" [tool.hatch.envs.style] detached = true dependencies = [ "black", "isort", "ruff", ] [tool.hatch.envs.style.scripts] check = [ "isort --check-only --diff mkdocs docs", "black -q --check --diff mkdocs docs", "lint", ] lint = [ "ruff check mkdocs docs" ] fix = [ "ruff check --fix mkdocs docs", "format", ] format = [ "isort -q mkdocs docs", "black -q mkdocs docs", ] [tool.hatch.envs.lint] detached = true dependencies = [ "codespell", ] [tool.hatch.envs.lint.scripts] spelling = "codespell mkdocs docs *.* -S LC_MESSAGES -S '*.min.js' -S 'lunr*.js' -S fontawesome-webfont.svg -S tinyseg.js" markdown = "npm exec --yes -- markdownlint-cli README.md CONTRIBUTING.md docs/ --ignore docs/CNAME" js = "npm exec --yes -- jshint mkdocs/" css = "npm exec --yes -- csslint --quiet mkdocs/" check = ["markdown", "js", "css", "spelling"] [tool.hatch.envs.docs] dependencies = [ "Markdown >=3.3.3", "mdx_gh_links >=0.2", "markdown-callouts >=0.3.0", "mkdocs-literate-nav >=0.5.0", "mkdocs-redirects >=1.0.1", "pymdown-extensions >=8.0.1", "mkdocstrings-python >=0.7.1", "mkdocs-click >=0.8.0", ] [tool.black] line-length = 100 target-version = ["py37"] # 3.7 skip-string-normalization = true [tool.isort] profile = "black" line_length = 100 [tool.ruff] select = [ "F", "W", "E", "UP", "YTT", "C4", "FA", "PIE", "T20", "RSE", "TCH", "DTZ", "B002", "B003", "B005", "B007", "B009", "B012", "B013", "B014", "B015", "B018", "B020", "B021", "B023", "B026", "B033", "B034", "B905", "COM818", "PERF101", "PGH002", "PGH004", "PGH005", "PLE", "PLW0120", "PLW0127", "RUF001", "RUF007", "RUF010", "RUF100", "RUF200", "SIM101", "SIM107", "SIM201", "SIM202", "SIM208", "SIM210", "SIM211", "SIM300", "SIM401", "SIM910", ] ignore = ["E501", "E731"] [tool.ruff.flake8-comprehensions] allow-dict-calls-with-keyword-arguments = true [tool.mypy] ignore_missing_imports = true warn_unreachable = true no_implicit_optional = true show_error_codes = true

     Ty ؗJyLQ!3Ԏҍ?l+€! }U&FAd)gy({ _E_j|O yHAc?|Zs{ufbbFfb"PXE58ijU*MOc]Fgu[3 Q6Í&Ry_nSTe2ktoUV _ Gv JWUq #loOxD'>E;tbh#{Zz!4+j~\wԘaN rvT1T|<71(EtъֱD[ "&NB`$Nyfw=Yp4)jFzBeR31t͡=7TFNH:92\E'31Z3]뉉H[7]8]D͸Y>ؑ?zQl su+:iLn~Iw;Hٚ9q&:A*ꚦ8 Ǟtz/#/&/q!*hUpAo{nvtk ed\_jL XO?iZr4POX֦G~?'`ٽt}Ì{,+ٷ$HYmS * *3;kиqν{w"qo{y{xL,3ZGE"&mj >nQ{#--$}$?<';oEv2 B h MGO8&! 9p5 +[Ü.F{I1`F1^a꟏0m0<([իT4 40feaW _w|X ?'c l{l#:X<#}AB6FVwF}||fz,gܤEyxӸgGgg-J˘+4b|ð r+&:cE(,OӲk7g@6 [;1Z+5u\-}}ۑ[i,4zJ/81 I8.-m„tUVU%%yrI ,ZxE^B{#d;ꗜ?k?86sp.8ҫϟפsN^AXcCx*2pZ MCU|rwz|ś'pOfLJVNRD6ډ&t!ZS\ g79rg~n Xz{]{O^{ys^^qN_Vw1;e>]y; @'"qK~o0m__f§AV$^pޠS-:vƕS* 3rS;.z6;U29c_>z Gb}uNίᇨsO}ʙGg]:;Vy3QOes^q!.΃ SEG|lwrdډ8LkJ"cBp>i,ZOQ Q¬ɑ)G§8\z2A֞".99,6ҍQUSeճصƇO(6 Ҷ4Pa-k=9 @SGe?*򠹎n)[^G<ɢ9*cg!ffJ^nUI|C5Pswш.c,M8/b&M6VQ"BA[Ř6"G0e `}!=ߕ;ϓӁPgrz^g֣~ *-\^9PK^yVוz.ڍo\^r;VQsT>mrXj~7.'OEvmy&œ'Ti-K}[#: A;0/n?P G/|R\ D <Fi/ykqv`񺠕P^%#6'6ls7ЧfqGܦr6%DPtЅE\jSr 7ɵ"/WZc!q,|.7SVxtRFf5Q5Cց@hvJt?_}i ֡w p-`sQ’ysr06۬Iy&u׊׮5YX0;9w1m0eqf\lzLg"0mj׵7nk] bo]s:tԸ<1sֺ{@' A%U|# $9^u2 yԄb::i(5ͷ}Su VEEEgY#|js t[2:d~c#> 9~E>Nk.\5o1/uc3H>5QUF. fdI#Q#bIeYP_+\O#ϥ'JRML_r0GÖ$MW,0gЯu5^}eq<,z%@Za D/%dnݛoMv?R|"𡭊/ ñc+jL'ŐeOKEYIah*P~~JʌZGinJ!&Z(SSd3QuH!52=P&)Hi+ʳɋxQeDdN"M EEom|K._nq> R/S[`B8օtٙeI+F lV2I%YʱULœXm9`+p8e \u>gzϬdgꫦ`P@V^r*u#%H~85KYjԸ5CMlsM  ٤B6 m$ä MS!F*T6yDݦk>@x(t֕ li1-(28-h n%Z S )0Ȩ sOA]nhBBsvaºI>Y@fVBL)NIH<>v+2lgjSţ<0>e$PVl\>9l+M )cS=;}w]toţa6psUzιvjI Z}9Ņ"#P\z_Or!l ?'7TP.$fnXTm>@%ޕFCI,t1tp zB׌ WC"sX =EW*#; bT kxSs J5Jc])ķ&;{dM>=%c1 MmZ#rT% GDkyBod9qCv'8/6+0;+465$f$:%!GƨlĦ˒Gg.G!!( 55!$1HԙB[Y^!"@؉L:)}]>Z5y?tB1 ""TQ!6k6E$*#b\},~l;lilmk\$A, lkCWtLzu u-dwת.F[H*]G} чE$>3iKA*͋#)(1n3gJp%iFgT&`N}lKOBbۙE~ցҮtYmEpNLh:Pt)} 5~OJ7-ݜuӥmXCyTTj&)xȷ=^RbMibd&x^2@n( a ]9|&1\ lY0˩`0>ha @'ؗ̃Ńn5 #YØc:x]7-=[O9p1MdʹEa6#GF1+ wp{@ȣĜdEqg86!yzۺۺ˾%VS%Rvi̊i+JE&pppQCFM)m^RkhnwHz׎W#7E?oj_C>BGaT<%FZD0hB#ވ9͹/.BrFVO(GNKN;D8/v䐉5:wn<RuW id y@GN:J.CYxG #a:˯uNeP|@VPC=]$exHڐCMT0҈nWg5c;de}wS,yOea:&sqxW?07B cwv`mB9hC~ޥߒ>^vm%Ot((h}žzWuݼ*:cNO eeۣ ]ڃG#gnjv#>2{uuP7dyHrQ1R4Y1+WT1`ZƝăd9-sX<{怨 )ŽG #>3{_KGB-ϱ8VXfݎ<;x"sTj$ѺHK<1TdLGv<%o_{!:Zcd}?6ժ$l6B7b9ȉc0PFI7 mOվzFYBRgOg̀j{zDr%'oR<_?'u{hЊo<*8M܊i41gLI+neQӼX'J`v÷6Ҽ2=+Jzm4^?od˩i%p$ ;7N_?>K&.'_,x7MZMO 92nIϦ$ջAAPÖOlQ8f\ݙ96=U"p\b 66u[O&fӱb6O  `iݼKz>qIIGrqcksx&NQuj)(;l߿:i?~nZNoR0(G{,ŗX gj>>OnҒ^64{zo`}h"mpbQP=%A!3'y ׭]j rZvXg#~aVCkƆ=y Y1Zד8ڟ&G0ukC&Ln3͛y9C4& ۢ=1ޅ=HG PPj6Yct{ȿkTf BC׬n}f~ЄMmYd x̸3=mti'љ5__@<6Emx3qY5-Yc~|<~%ϥz=lNW Ctl|w5УiKF6 )[GojVO:ҋQoUjv~ ףi\tgxiin162*<)fm^3@[3$|[}'#ۺRzZ|q+jqmnbl;յhI|/y]/oc=evd;$sjF,٫E@ia<I<ܼ0lf^n4| +y-CK4a"~o̼oK˱c7F6G:g%gSR!RC^h(JUeӾMD'ѿQӇR;nm{_:qf 1-"+L.36%}:\M1y >uX*QAϘٸ/H-&z&xq1}v,54z7zu/l>:u{WZv\fc!(7b@08%8L(5j i5p%$砕sxΩJ+e`*;Ll,Zgo%+FNhSqfToF"Eca=Af`JeMx+}q9;҄dk|wiB[)O_+Ƥrd(4L ~p}4T\i ]1{LJ;.5} z x?iR,QJMY 01JiƗE7[5914uڇnFȘZּc^<+\βV|T''@aaHa:S̐ ғW/Z߃,7y'Q^P`T <;@Ru㕪A( t}jhIWk*l<0gq] U y/2u|>-`/0LŢ߱]9ꫮݸ|6o\mݶF{Lż'q [S|V>!| PM*l% 90.\XT]s9K G@r<ᕬ)^X>a[,)oE<@7.3z=F7 .b]@"qn|.o٬׻u_O9Ju}=6哏[ӓ"_(x:7=d;[I|#~ zͮZ{uoj}{_-}| $kǢoe9-=\6}ih~nPu 72^^NpkXY.u[lO3毢M~G-z3YFo֨^wGMU;A;'+Pߖ3K uM)WuIǢyB|Wt4}vDkHj1S/I^.)N[LɲqJWpԘ^9kytER4ʁsۯXߞW@ŷ?=kآoe)-SїfvTIh.0ҷUavoI]QSB 7wp7*4*\Qp)̷x? jzJZÿmʊbgZҷL/kԝ@UY@;p[oM|Z'qƕ#f݆I|wCM߉K=f}w>M ~.Np^Ǜ5?( g蘭|g{˗НPo~owB[>LwU*Ӗ#]^=pu[ߝ4}F8vc2|w k߂GOVEn=C|߂B8*,n(&P=p:bC݉+4WRwgf㱟=?5{o.dwպ W=__ܔ/>sgLUhzQ/8?o}r<>;) ef{kO]sϗqB[_wt|;P>D=pI=3tI~묐nw4?7eURZދEOz{tOwE6e#EtM[ϩo76߷螆wؚmZr,H_*D_ecSp?wkW毢^pwámƢi *Co[}| k}V窬XYxIwN(ԷN4 ,>ww0GɊс<7ַW.?Yރ'#OG\F0O,[䵍ݗߑ u]wlJ=G}._p}WJyR}.AxOuî+y +7Kx`QE+{~ʗ3aɄ y`pQY ,w]cf^oc#+={t[x#4%HvzMV`S$d:##kد˗H1P<8Ȝa4?UOUq|iiZgk濥TCϳs:.hrpFEt}u(|YB\ UHua5ta&Wxs"3UmI& Xضon+01h4GqZ8TW9HZT/FGJu XbC(*atKaVuEeUw1ʂpP)յѡZ*kzRufS|&(Zg)'j(@5lR.PLǠ^@/ٙOl*sm镥ƹQ~#scלLZ9nOɱ 'ZScNhѺ,%HnaM|˜ZgTm2 7Q5*uchMw,|yX>A|>uW/ 2:QHgJM,mNLӇf'6"խ>˺BZ8PX Յ|LNlL#ɨY3Q##hvv {_+}&?kI|xO#3:LrL׹Tk@:EFDN's2nWu9jZ+Z;m9e(p`\6ƒj 'lم5Ik*=joƒh6N:IK L's|,< oɼ3מ$yÄ95Hr:[H6-S|6^hؑ! a6E|?$0,& \G`5uOoב qoi:hrKt4):ֻ^AUr[U}agkVN9:IɟU}owxO;z-g:>i7vbKfK} d-vc%T*N(TH-4x]y d嗵}KlVvXUL|.x!J`{$+ +f1Ճ)*ڱqyO|H˜W5> 'fhl{U5IM kSJ*BS%K{눺e8C]_sgAfj|L32M_Rh&8f.P9ct8 :xKӵH?ӻnczҽh/vіU'} ;ɥjZu&RƼJGȨZudR'ɮD v)Mѷ9 7>&^sIxuc*KE]ѫGC؃ݵE=;Rr%O%!2UH_zT|S b- )\Dǂ2[9O|պM}W?Bn#d]tssO6R>6\XNH:jJITۈ2QpbywwV0?.>ï764Qt H5dsdQBvlDgW@lt+Dk!8J~٦h3KyM(PF#\^ o8_;óa%*0iHq!D|W33%Tk[60Y C..)ONv!+<,SQL)@5s.ٲAqa~=^1Ii~ƒZ35ğ7O]ȍa>):S4)@S'5 ?9OzɄ_~V/ }Y _8WO$^$N-Dt*i%iBPWw7t=zvGs^@ gkjj3iïjW byznk}·T>y;́; RY w-7CMmZO}@6 Y&pѿDߊgE|K:.gI:bt0Q4@&w'_?bǶ8CVaV'(ќCiyza@,G%bk(? /k]A&_ yCwq8p.].={xQu qdcUz1_-ץP-G2nBo~-,\AOueʝSe>HC\z<<0Y=7 wsޮү-ׯ[үf1^+u }ׁ61#ܖ "uЕ@|wo᥍mB?ok#;*s- ,g{K7P7Լر}-7nakÖ^\NzB'YPm.Jd+J^q ^Ƴ7[ ?GA AΛ\ *D͔MJ2WY ayDFϜIi]ox 37oXXSd*z{5knݍ;݁MOP3|c쳋&7=HRםyExApsT_xj1cK2M];-hn|mѻ\.F-dQNoc࢔:ݨ]@UzBU/qhXaiH`qP.jI}ë=xr6Q&S@cFAP+T\. MG6m8i^hw=Kw;ob7 .S9`| blJ~(_GjC=Ezl4\sUS;I;蘱c Mi ^WЊB~ JM"`/p=s@s3T-3KX&&tNI6x {0_F)vNbyv%VNZ0rz+3guw?w‡G. {'0g-πn.w[S|>\|]EK}+H+JӬgǖOT!O`S-):ajWh,ZakY:E/ꋦ`'[/_ye(|5=Z9u).JbAz^P,UYg,mw{J}פ;:i՞t^ďYwxfOvFwFWk@G]ʦޞ:q^(&KşRX5* L&%] B_Ou 4^ 5WAw+&8.1JoJr=E=')f֒|;Kpf iE'w&:{#:wOg\-ҟ~)Ê-9Uoƨ!TaO=gVs…,]>*%}(r2M8ܝ^tZ5MWZrއCs59?$?,$ ҁ9e2{|k֠tf%ڊ~V]*m~dfq'p=s.yD~|SJ7lٶLzrk?faG/b-u|ཐ8;b>_EⅧGu?=mQ͇̈́N܏[0ĐaXDeYƖ_}+?P.&B]eZ*-yC7<cE?l?[%d.,e/$J" Q/R򛳇r7!1g*j)7G7tL}a܇πz N8AqDgt͂ZbLX?)>(ZXϱ-]EC]t zsF⮨q ˕oŽhNEu #p)HGGT>ᡸJKŰ?!˲X^gZ)܀7gbx}|ja_ aT}/1c;x-^یәj2QK¥6F7ZYDLp|M&ρe nĜ̉ ϛإ j qJB=,=7]o1FLC2ӖTɦ #u(S袘ws\= bkxS[CG}65:(,jUGt2|,X:9#t Ml'&no9qGs~Yl2{;ܧLD0T,89ܪF}jY'͵t;=:ZbftKp?Ń*Y;πGN[IccjGA&8(ozbf9Ҫb7Ka;ha; 1ӸB",ȧh $Hg& `0­蹊\,ZnàͰl!T\?a0I+|q<xaDŕ|?zt|r}LH59&eX-iæMõ z6U*= A:7/|_<֍?{p=??1ïos-{ 6^Y{)=_ xL|cP9bJ rUQnFT$ZKIZH1u BtrIGҸ΁7Uwuǹ t%>I R{*.az(iEhgu9[ H|w#<Ɣ:c~"znT/E8FhBqrM\0ΣV<8'?x81te,xO`8b0}Tt8GΌ CԚv%IT vg# kD )ГTgDN%?M96$eHx0h%PE<o`)(͢ ffٗtMOߍke,챂*.3ёt=ND'Tn5PsAwU@|/|ps}w).=n͞pxcK/.B* nYєNmTE[u9r w\aQ͗eX2 \5vUvsϊ'EýI]d\5% LSef\X "Dou^g h48Xs^6}*ZL9N'˻ %peM P+9e> 3YYwZ#ƣN'<{[E) HUKF2x! GGPM`nX']~'{:[;tO9JZr!W'o)}xQa^GG~wn/~ lYד-m$h޽F1=+,د3'O_eSlri#"6 ~9W*)D-]pvqگ|.Ov)=r8id!d2zn\Uې ;ಙ>;^uƆ-ªsy;̩6-+B!QdaG7i;mD68ߝl.}ns_d.; Cb+̠֬؀XW^YWR:z#%RV}FgUid<2uحFqCa߹[V U}z7S~x*ys(. 3Y'l[6b6-֒jlkvͶrJ"ڋZ1.S6(Ʊvd=*8N2m1OkZ&aa./r,:\,s/IWmE&lv,7>;#fh{Iiuȼ9ӯ[M@XqWeC'f }xmVz|+?Rm ߐc^f_Q:C~8Uxc`d` V+.|e`#@bHr9@J~ xc`d`H{y@" %Qx4c%Ummlm۶m۶fGFRR33 eG+J\Y3 1*\9>D25\cS-+]cLt9ҭ#i[5&0 Q͢s?+`gVuȷ!W-]Zʗ(@zH4G?Nz"0ܢ*d1<IYިIěF/8icgEWM|{F5U7ſw&&;OQؖQlzd+*ٕtc<=e'rg&nπ]JEZzE/Rݨ/jTcVD-d$FwZ\LsirU KYhXvUͧ> M{)s,0dkUgFYY mlY(O fZ #ԱcT:-mv[q*.k6>No.U͎Ԏ%/^%?FW9ԓ h9ZRWTrO"rCZ[GZ4jAͮ4G+׸$CI\DZ\K;pTꝯ.D8;egClڊw/?Q.{m1/\3U/@5ʩV6Zxv|[VG ;"fk&i玈6VZZD۩}@h(Cb7`hq:6M2- ($f%Ykc(LVwkzX߭_L pQn73Θ0vAYP*ea/ˏe^f 37\vnrO>X=T^3QT~vX49 a= }'_btnmMތt%5tsOQ)?nnλYΦa{.wӤ\eVtL (## 1n !1Lb9NS7x:c;o|Z_ޙ Btz_ ˪Xܲ[m<oX*~"?ުa@˾?衩EO'zjCSvo|~E/M^SEX_CZ^Cz}3)&bw:,g7i^/m5losz Q6p ^?&=7_<:y}L'O:P#웸 0s3qvɁT Bȅxl0c(ȄI)ȣ_R6%K*)Ƈ8LiHc"瘏rN*ޱy q[KXU gqEռU7sS &7x sY0|C+\ :pQ'·4.>ga*ǘ81 eH|NP0=g<*>N])w9l\ӣw\:.Q7Gi WJ0'Laӧ~uZS=ϪS9`wp,^;xD~m۶mۚm۶m۶m۶Ԓ^ԭ]#[U-!RHCA(6aa_EjwqF#7QHTcRK= TI\MEqqqq'ZHm0p'$n$'II'Hr\X)3)7djfum#IzgeQarkYIVM6=Cݹ˹y|^C\gRL<>ECEOqqgnqEuu?9>4<0-LMX310. RO^ Gp_%*a:E#M6y:Kס#Io6M+ۀ&صM׆~:M~'Xh$ LapU.s\qx_)PitR.%Iy|RtQL\zu\ bL>HFJYfqXkv-aw8gmNpM~Jb)7֚2.I$Iҥ%]%i}-$I%ZZk1036336HZ7Ø v̎*fC|r/y#s9\f3?5oY(\\-x)Evo⣼/,-:@Rԗڥ%Ғ}cae2b]yiC4-ZůVtO{֊k5' 1tukav1'bfp`ѻAٰlXneef(ʶӜϜ6 pXnw q#^oG667m 6/(~;7ݪݢmٷ/lqۂL8& ;;;;蓨I4(\].k7"yb#sI+W2(P%F$o@P X p! `G@(MLP)Ta! Ą  up`"L9 v18 5!}!!LBHy~~~6K;C )EʗdhY$<9ZC>#7ES1(tD٠+J2*U5UtIR竫85QTofHcĴEZv@Z9]C7Sº?*=N?g C@0p /rch}WSD4!en12~cY,d+G%VUfMتlxۘisrv}.+}AvڃƁY;}yMwWk"2w{MuOGa/:ˎێ' _G9NP'I_N N{O@]🵝-e߂y9<}p1~a,d^B_Cӡj~ azX\W\'H<Y(#c?cX$^┸#qnnoDu'1%ww]wd^)9$TSj$HStC/MKӯ}:Sg҇|*yjy{>5L{F?Gl'`P]n xL! a}n΍cDM2E6QWUd3}zI"3kO|1 Жb,ԙ%V吜*DŽ<2/9G0XD>'<̶Ѵ,{FvK]K麋p9&C9rJ/ 3V.W Z;| eGa ؟2F}ٜs< aWTSLNrdfsp֘U%0J-~U[){. fWmSZ0tԟ [֙mNaI6<VT܏%K2`'2UNpوgUʞYvY,lٸRB12usi\[q1trzPƅsYvPUT7|po`PAC1*f{`QbO߲gXUЬRH|OS47[_K-=r4}Ŵ#OmIdy ELz"aUE?:v~2Gc9%|˭O '1'j'.Ruy[jHw>qA3kss#* c.cB!bn;3Dh \!-VV9" ?#?&xlCby?ԶmǨmjwծkԶm dFhfN$W IRJ.C,rʓ@"J*SB*jԪSA.ꦻzꥷ>꧿d!fFe1g &d)ffe9gZd%ZfVZe5Zg 6䲝vyov;쀳nb$&9co${sniբ%Gso\=O##-v'2\Ȋȉ{/;Ͻ((((ʨꨉڨhF;`-m۶.MD%$ed#H<9,m۶=k?~WPTRVQUS70426153wptrvqus2Lb@.׶m۶m_ Qd)RI!Sl9rWPb%J)WRj5jթנQf-ZiסSn=z#? EqD(hQO DF4GuDAC5fD4iʴ5Ƿ؉x?#%eּ,[jͺ l۱kϾ;q̹ \ x<(zm۶]dn1CCs(18M0$M140,1<-"-2˭*:m&m6.>p+&q#0ɔL < 17|r3 +7/G302P ,lgVN.{2 ;|}5&fV6vN.n^>~B`dbfaec7h? )8mbX|%Ya R)V*3+RmU\ ]h)s5Dh|*}Y8YO24'67YFPɖvJ×4(4GOBoLeFь09>QX=o >VȊ(ܾqT2Wg}` c8NS Lm,ӹJ͒Z@\W5pZ^UF' B+uVlmj=CmID>X9o\l})kc4\%x,] aN4Jvj3ER?GI4AȟpYpE9nB3FF2}S1jLd_0oU  i6#b$Z^aYe'/Mu^" u%$<\GAu7Jv/3(ʢt6Qd Eci=94E%c DdS(ydPRX?ޤw|i *yz`qfwE3oa9b2A\ O}'O\,OjJ֠Qh"˴XƲ[9b}c<9bVEcV,؎#-bW\y *,,llU[`e&TEݯ!x݈NC*Vb- k&Gzycdc}J&!YrjűX0o'[o+@vݤʹ3>Bm0nMۤ tTLP?ĀygQI3wJnz_N/Ӏ64Үn x.7w<:6_4W%nҥLfw񺕘7%Uc Wkǚr;"SSK5҇Tth#U.pp[\boR8c|/dP"j3hb=˪P:"MY>$%E3QwL/IDo>E.;'q@@Mo_qH#&t.K$o.K\_NAI=qexp$?YԮK^{ZK/2J~rj9岼2B|pG6ѵ;F%(@7-V':(,ihߵk<x+021MݝeaMI 11wL|cc湎̇/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.ṅ/ +?6vN.nȇ/ +?!w]i:3 u):y8߼ƶy_m\|YlףB^IIWmxp"(b##c_Nd . 6*(xo DzFdBBWh& I]6q3ima"@"rk&vl.U;#68tDyj 7v0oһX+python-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff20000644000175000017500000022655014502137725030130 0ustar carstencarstenwOF2-h -?FFTM `r (X6$p  u[R rGa* '=:&=r* ]tEn1F@|fm`$ؑ@d[BQ$([U<+(@P5`>P;(1lhԨ)YyJi|%ہ^G3nڕ ͐Dp\Yr LPt)6R^"S L~YRCXR 4Fy\[7n|s໌qM%K.ۺ, Lt'M,c+bׇOs^$z.mŠ h&gbv'6:smb1بm0"ǂ*Vc$,0ATPT1< ;`'H?sΩ:NDI$T[b4,μ」bl6 ILi}ی&4m,'#ץRwbu,K vm_-\HHH?m 9P)9J$ƽ8~;rn=$Nddn!';8'N!-Jʶ.X= ,"`: {K!'-FH #$~Z_N5VU8Fȯ%Pݫ Cp$Qrʽkk3ٷ:R%2{ީh%)8 ILK6v#,;Ц6N2hv OOt#xTBfq^#?{5bI%-WZbA ^1n5צNQY'S!t" `b3%35fv;lά9:jgf?grpx | $ eZ($w(ZrSv+ZqMݙm?&s[tSSj9?| >G,bDշ^^:l3NA`5 26LpS Aߧ/U ֘'9\Նt!l PMR9n `(@ Hy)MdM 5ԤH'ґmSuo9 1 tØuc@]KRbNv("y뽻{ cscz&p5,jn kN!.n^Uu@|?v>rUaHR ՑI DˋQ~p ܍;;nL$t : hFCYTOFNN~}1"`a(?H \u0LԵ'͔PbnmOJl?s0,8xBBF_RiZ~e#jwhOc*&F6 Yq{}?>u.4h%g`& )R5H}ˤkܩ'JOI_qOb'HǟBYEM6v5NJ ONF Nx(1:\߫Ckcb8Q d[L(el+2u-a֘d5;N$"HSFo2i"\h7IfN8qx#v 6um `NM-J\FrDZ0#'ꥈnGjLچXʌAgYs*Y^ٵ;"$hb=ϛ0vH-.D܎Yd +^{Cm,@N<.VMS+\D+R|6 'q\T9DX<$p"酦$ҷ ,psTbNkI_` FWV%w~DԐ*xiy[rZ[S%Gs`F<ㅣ V+!+؍9ykfb82s}l;[)e$Tk)v9{uut޳@E>|C<\4%Rv @׺C8\~)#k|.ao00Gq0%hp L"+>% ^MˊNsq=䦆K4r-*%h#%;pP馔hC= &)baKL@t!~2S]rYlZ63ўJoOV;h&gO5RT/}{AZ&St ͯPC0D,pbpзz) ]I>Q\Bl"^3R>r*C>xPUz}Y=̕}ж 6-`/"H o&DI0E2Xa-{5< ,}``6jiim'w5RF,ч%SYWh6L_i샣=i13YI7NCpIĔ(r0{jrKТo)l3naT1\IE(m߃Dle$ÅwXU(@Ma"n,*vG̨x>G Sg̉"Qvb0*zPEyɉ?7$ %GpdY&f!a6|);u7#34mJij oOpȁv8jx(K/ZdxŃm7V_\fL7 pXzH7-,(1KHbe,r-pL3=T2t2ټXk:Z5spSsT:.]D"@-Ȇ!A2ɶ-F}˒2BǃQ)tç|#4|\㨀`fc,#g1:-ty ]2Z~.)nj%RK(y`8C֍zK-N `^+n3ϴT3tQأ4<>:J0È%ݑZab`vͬaT/ZaޝГIi W1_>)H"p |7mF^Z~f0J^I3V!{<+OeB#BcjL\-Zh[I<qv~k]GTD?S/-%ݒ7 wi|CIqwcWx /7xHO/o]G]y߃#7b$tR$ ]a7FѮ,n!rI|28x6gSh R^^D.xMMS?漞'G#~+v4d!FyT9-fVa7hB4,2Ɖ&vTHMqp4?R\Xa<4@MiHD_ EgRyMlTؠJݮ yc"HJ, 6u/ڴyVnJn۟H\PRBd|4_$k.w™IpS$|}j9m|1ߘn9395qS|xW9BVZ!mK/Ln;iu$*t3Ͷ@}B{Yԑz2Ju@a\MR7odze7/$4]^2kh$=%1IB؃ H|N.[M\ Lb1Mg:NV._0,+,ht7l8s~IV^ N˼Mؑjك- oܮůQo[mj=rm>~z4$M}z sh""u7V{RûݦO-D9V٥gIʎKLg۶BTP'K̦ qW֒3ep&ےLhpNaS w &;e(,-7vx-w$WnXUt8Y?KMctY؃p*Շ-БfL|[nL }4{5頠3᧌ n$$,+DNԄ-HV>HOs\-;W6NM8Fi;7k26%֒a],:!ʲڽE,{U nawNg.I9r:jFbKΨf)*cG5-kb6UЩpZMO`$WDyA߻[4aJ?fD?=d(KD䴱:D/[#$A #KH.:x?%Vr@[B$}coS6`LPfM&ɔA<:vÚ Q~Pw[+`+j V+R*ul!|+'KY66_ud}_[yuۘjo$Y=yjRi)bԋLaD(XUwIڻZ$7ڻ9&4Z'DF[N]~dD?VQWͲ}vS>Nm+SqHaU!ΒWb_+UO]^l59 @1'A^mo:9ףs-N:tD-zkSja4rczFۻ ޿xv7[äC8#7p5+ ~*bJJYzֳw+-p/LL[cgnlcaPHF$}9`\ 83Ym1b>~ƽJ؂ϏyBs="f(zKM"H`wcEd:b86(9<clݘ/kg G^ESE)5G_^k߇ v̚}T3;6 WvTCP_k._eєNJL{T!6j>h0 #[㗚Kz,!32:6d>himE\=H Z+{6@Wʯ&lC',rX !8(\̭2-P8h@C4 <~Z7j%) eeFpZ'15 ^6B3nco#~²qR@!ա z^Ks]T@TNT ,S*@7CīɅLiQN, #:RѪj91-YPN¿\&yL8ӹ&0cvƉ\JA;Q;]IM8 sMf?԰Irr!K9я8p}Q콍g-*sm~XP0dM^?DdIm8eCN}cà٭$s7ۼ#յR{b4vMql)vOճjְr1f4cs_%v%lKZNi+V3'~NMG@HBb+vVFq@ݱuKZhp@E0uaSXdUK}ԯ8GXKiI% uR)EI-ږ8|1GΞf6Ȁ=!KF6Qf[X~_j\^͋^k`DsG]~㤛yo};+i%N}Q0ԥUu)M[Z`"7 ?/[C{l)$Mr|^ a:"֊a l>hya{2>CPL j?ntg]S{UӇ('b'fg0ӃLPAMtd)2úY!v&`o2P[ aޔ5 S|#+7J #ȸ_dU6#VDB"K|)otkl,lU)ݹe5OyUAt2_ n53e*1v(K_HvVʉ3},ACUƍ؂Cuti-]`7]R !zsNt&̉̄k)SL̹y7$ϥDJNd"9 31 IZ(^( lw6 /@YB^}OT~9cc]{)}D8${yc,ʤ{tAW3zHImD4ܤUT3dID) I۬.d~[ -K^2Zc 8u,Y^\_ԁ_+cJ$\2:ZW bBw=[1'NYVz4;(fzNUf(p֙!x#L=#ŋThnba˳",T\o!@@sN%| tXj j Qo5oeF)o 9˷:h*'cJ孏[{ȄNfnz]8F/|1v g@J:YնNu:dhHo tM`R̍Ri:|N_P"B@ m`a:M  c2Ũ<ؓUOS\%a\Ap ꄯe\A.̰{wǿ~6 ;s2ŋ`W`TyPgee0 00}/ǔ;h[tGD5^E#hȍ:f? u3z0ڎ$T^TAhz x I{5'rK zo l֢,b89-:G|W)bA5G<*ٕ:ğ!]gj~O&UN뢹8 g ]-WW(WNI3Ngr3|m m'=[n힬M,?$HDD-O?5uX]˓37>*wg?*!JyT@ UgzI_7&\tH.YZ(4Y'd T Fs-qya7 [67K&J/$c/x[ᶏ;Īz1Fv]G'ڏQBSOІ$y(TS-;hűzT%Dts"=gwUuD?b$Zr9G<&Ña^2_Be;b~փ)Ό2j r8]'7 bChTd )+ mD).51-|Yy*oڤL 4A她= T@|X$in.KI|R@P@P*ak@ ۟=I =l[ג"hX0QҜf˒펖c<#9`|cO}$o>eX<`,o_K3 p{YAn[9M T(!"?Z]iEm Ğ>'{Gt *~y`'A?٘#)o($ȉەLvYO1o_& .mv!*)$zmrt(:GGbeVwi$CO1 cZZ0G 7z@Jy~p)g,gYL.$, -<k{yc*02/q1gKM&R<7xCy[Mʛ #ͺDya3\wfwrFĸM] \NsWݍd<ӡW064tȴvȻ0>ԯ ; )f#* 2<h ~'Bw mH/wqMog C)̵67#BS>_-[L|RRlQ}\TH) 9Fa"^bA:ݳQ4' =sO '@.Y&8z ,i73y;U}p/I  xVxilFZfhXc.b B*|&|ge/kuv\_Hb dpG/A}㬬'xȜՋ;E !Wj{ZI$z{Op;x=׺q{5l23O =@jj# GYTn>&ެ#CBϩzLuylSaa0LTv3,2 sdTrU}El1z`Xa*h{qiuU\"Lд@TXRUFg]sE5V0X/ukzB'كJx Iz7YΕ1tyΚ_}|xm[xJ}zlDVrcsdsqv[&`oUl?<jC! OeqB=J\`Lr孈d1MhowѹKiģd*;^ҋ$xHUU`]GkCꆂOQSCwo g~yG8P{{H.$6!}d4,q>`llUMBRPe2A1RHqlBQ$W%bhBÚV@(?FAQ}dl+bNIMdT"+ƌo0`89\|5 ޣئ(y jqm(<\G 2dTP0$n@ Ē!X 㺕Nkճxikiݝͨћ"0?^2XF,{sr_e@Vyg N_iwq;XED\b1G(RsT<\ډQ2tT ; `[,AkKbDl#b8,]i\|kCxLq~r Ά>|žBab?aag30( j"FA*{ߣd]ř+XHzs ZSLu:˅)ҲnJEBnS>Ħ mh,RT~}9, /.H~!`ExOۖ mwIl꧴ёUzzk**|m* .?~ chp?eY]*H|̛1e?V; ا 2PQVlW6m5O3'^x,ҹa)TeUs10ft9T{!L@OLtǽ!^L!ti ^:CR K ?2TYx۩Fq#0 <hѭ)kesaTl x9d%+b8XZ ;gv8 n7ϻa&^ob{w OO7jϯزΞ,~WYػqÎzVoλg'5("ե AӃ[:P|Ӓ+>#2?$MndueSJ%e؞~Uq ޳҈zRnп,7˱>` /uFgOg)PJ\)Xk VF"\tr#wE]s:Y#n8 Lm"6D VġH`Q ௢үQkG ]<2N?U &|a_G܏}di!:`Ⱦ[\,Y]JϹߐì~OA%> ]2Pl5pOѐ[ʀ4O@¡,Ҭ-,4X7-#?3{M·C18aY)M"ka_=4JqM?nh6kɜP  2;3 g4ՍZЦөGZk(m pv riZF}i:/czPuVQ9E&'/ v<2ۊYQ)j.HN11sʗ؋{ '|klT%1ꪋCgQUJ['Uֶ̝ؔ{81 rnҹ} :,й6X7fe' NM2p|4p6Vn듁p&S=[- ߞ~NjIY/c`YAq6-Y30#V~hsEPT;ub6WD#N1o>)ΘCx4$/jl1 y./,Rr[YE*GЕKm/|7 SISƗqF㍹6:cVs @w+k1caíw0 :Y5Q" +g"%*2t`Gݴ f:hN33^~yө)o)l*H-;+|+[-ZGXf~Meb75[ Ho}pi8;`$7~Yw4RypJs}!*Yf~W]TKV0Fyl$"\AE?W ,[b0q.|xZ/ˁ]P*4$*(R7L&`goTܑ.$V̇hULHnei_"o߁e*mbD2u{ݹш ߶\ؿZDܚ vz1UlRl-wk2VxՑ;؀400=ԑx~޽ګ o2RmԔ=_rZ&ן/߸([C{%b[f.\l$}VچU*B3lRPf d'GLc[dN %C9X5h _ cҠW?+`ރχ#CBW'B~cb 5~}`AE((r{2me5 t>`vd, p*=ϕƼ' o$ݥ;f`̢tɟJ$HZKԊk+LmR21,qF p̹-J%b=gV^y~׼0~-Pת{ƛB2XZ?oG!xn.}%}Oo _?bJNv$bl;z`&Kx^]"d+g eI2 B#(ijNN>SwF W |b WoW^\q?1>BL/=iR,cykWZ)BUkjy4XK, 3 F9pKuշ q@OAvyG4.,m#D"^ѣ8lQZ1C\4oJܨ힊dD6h[|L]V~.:0z*HX,Ͽ7zUQNe.7$:.0֣Mj9g {2ڬCO墸N٘@.W1Dz[[M%V5r!4&Ur s7%yNJ(?nYm"TCMmr.ݴ{bSNT]*}v`1^HvNoUۆAS6WOىe [(B͝to1bϫZH{~N}Vˋٹo<>#oTFD"%73.(?f]`!1%UqL:蜧ϸ|@8'+VWu۠0 } +T/Qnl~c{pa=V:#vm~1t 0SPH]/jg/!{/c jh[=U@ʍqIg6Mmq%Y8dc`"Xt>"{riPO?0=/9FnV}OY[՜"I {GEz `)ӇrOoKY꺧S4;L'>cN@8 ʋ{삕zb8_xV(X"]ΔěM6w,fgf+͜)TJUt> -]z}o*mGŶ1S<۵&:QzHjljL F,aY"'LˬɴbJp{6իh]m E= ~fFvE`EWinux8!GVY??7K^+[2%_mwsZMZ?vl9fO {,'9/} T}6VzôvU[dT,_uVE+B:xaY.L4rP1"nj[)Xs54 4sS6 {(,kW :Dm3/ T*z'1o'3ow|Ћ=Y< aDm?F_Y3f^Lff'@&M7F0{GTB/fzqc].L.In^Wk(hc!Ȝ|%?%\6Qn*0''Whĩ=ŝLCgR񛙌9V玫؛AӚTQyč&i٣hQJ,#|d驺z|yYH{FI%ORD&k' (kͷ_uXT4JotǠ`X l/-ԩ TBIjԛ/ Jn0,ħXBUHhFe% 6% /:&zLldKT ^Gv͊SA4:DIʯ< !.1?nTzhԓ尵 ZBCnI~+sm8T=f!c(KHSH7!LS.D4$~]ٴaGsiK7"dϸ}|{ܰQ7r-ŷzRaV]v4t2-讨YDیS@%_B(FHke%&5='jF,GoW9;(ڤX3z`fM<~1bR6t0luFIj˯JoIqĴ(cǘU@Ѣ#e&Vy( {̧KuWKeZ ^>(wDI߹}x ƺ5gYG22& sσ!q\ CP%U fbS'HLbi,sF67߼D g̣oGa)jS-&>7yCCΖi]MR A0 KfF=z ggtf7Kx [ L^.[ԭ>Zc736c͗qw*CCV<])E9)ϛ0lSM.$bASHib%zqݓV޷ʀ7+8{ \HAZ#[80* r[-swnxP+HElY./k6wKb?88GI. ur޼l9Eiޜ`"ƃȇ˺&vIբu*J\[^enQ%j ?{nW+1 ZC $3!6/SG @4ΌE!Rd8hg?J~u? ZiD4K{j%)'xMaYvkEt,lc:wXk||2$.Ey=x*-LM_xC{t4.<Pr͙s1/N8uu.ӿS_rj]\av^sQ ZŜ-DuSg6{${r25>, hcbJ֊?${ouo>ͨvCl(N9ߖQ]}3( z^)(Үe}E1\pB(yf̷HY/HI;,q«=d&T<)3SfV1ړ'vhD n$4n'r}b0DxoV UJgIN}4/|ߥ\$My"j}jib!NӽSBvC9wp7}5q2ѪҴUÍ,鼁I};Y͜ȝDJm[Osޥ$FlX~=/_SLJ&^( qwv# ꒎.P:bBfV2qgnٙ l8VӅb0aG-OTlO=AfWO׭OJ{̑Ͳg k:I3*zA$̊kP `nFGx)GRPE%5\}3۵RuuW-2G%voMk xBuFN7ׂkV)12dB!4 . N8O,f2TiV udLzyug’;Ks'^y+7UUOBж+$%O9elե*c@Fc6ggMU_~1fvV5 -V 0 )_D{Գb1#Q|k9=?Pocs$&}BoWT"M =Dy$,IN,چ wIxE6xnCC-,ϕ̲Y :y~ʝ،=Yc,TxeqUk*OTq\E*/ؒ/NSUf:b?īHt$ٶUfudH"$2kQ /WiXNx r6_y{?2ڽC~{u8|܁Sf+{30`wbcCQ+zƪ\T-{]ξ6Ѯc?8Z~|&eD9qW2R,Y+y<`OwAbz6|]:qZOVgM̥ickJ0=,4,am"RC#,c fZ6RcGŢ:)e eIr6.Z;P+O)$\wIV(h`z{%fpxl }onr 7%ӧ{ xm1oВiq JO'V!"=$ ї4KS+&Zۙ'憥Y^e~},x'"so߮d߽}{.kTJY;ffjKVB+jqMWL"e/׶߻YfxwI:kIq.DzdLWim]ɗ] f)B{lֻ`j~ކ;ā;~7-zAX'tbWO.$GS0Ra#QPO|P[ %`C)c"ͽdD1xp_s*5ac]܎*t]8Ju׷uO աH>hLkq7gR2,ʪZ]|$CZm qX LrSKb홞%H/w>G9(|vvNnNvX N Ѐ`p+{(u\ sQp ݨ3q\͟$ﵧ;QSřz[jl 6n 8DT}㔨PE %BWحYw.!/^mdSZ~j=*Qgd⨎0t]q-.PJBp1 ثatl/ypq{~TOH6 uNwY| AVrwDh4Kk+ /@ @OJZB1[?l{JՊq9PvoY6CJ$H`7Ei)*eK؂Y8{V)b pNv/A%;uh(w̃l}*4y|uV:&*P;LQg*}OW;xT!F[ o l*KKUvܼƌ٫NY4$Gd+3$KVZF&FuRj.GNۖ5ƴrevvvȬ2MC[)|eGyb{)ڻ.I{l1CesZthɻRæGp7?(dW^=  &fV͞iϟ\G6$$uP=ou87[%>`<.$MtӗB)GjSQUd`S"3ɽ}MױT th?7]iEHzş|-tdۑ,:Dj7lD6٧-+}ZU4^xOݼfQH U;"I{)1Z.@2󄖩b+qzV s^>V[ŵ-5v]蚮c""f\߬<ۋcy#Qj6dr#ȑJ4lO(yN}$m [-|Ԉ*S\ќ臉@ @ ie'm'q$s'B੻Ad).* _y#z_Ы_{_a_=+䊒ӌϞ'Pܺw GJl.rqZvD(DCG&Cر!=ǣz4v($;{2 @iǘupcE  hh s> L^fڻw TWޟR /_IĦM'B.,P-Hj)%PDp2^^w`K֫KPa>ξ﫥jϨg)KSټdGFYG$X` 7%ҀcKQO"BաB'^.`";GleԒO^l:Q>45e=[7$z iF\*B'ǝA koMFc3|Ӭ%v>!]€'! }:xi/xcR^WICz_`~cVFvf]5OnC?ҷ79']/g}փiUIȃOt̒?k:[>TSiE<7E-N ؐw;mDu[z+9g_PO$UYN[#jI&3\e4n)Rvcx/VC?Kg{GX"b(6 ʛ| RrI&-Nձ*?2BpEYP [.r?gOh/%lROE f N=d&u_qb? X°f:J/ }?(u6P"L~iV-g1YBg  }HK24鵖r)ۡ#|ti@@JR[k xcE^I2߸dVoqPkZa2H/=(c[lW%icXchPq6cM? }iShRm]6;?'B}gMmǞCj,vԱ>G+zYl?Gܦ*{.m7AT^1D";RUr"bhlqw$/gyRmZp%0Bϝ#4b\q0n N]M J},QrQ*ͯA\')yz'KdخDWdi@gzu'1\}^qI<>e^h)Q*lzBl? gGZ0`~9/ie+UrWWs6 g*D}zyn+ህwUӋ։fG%!L[#"h2fmh|Fqb}*H#znV˴]xA 1mk ׂV|=@=OBzPd5Vrl$ZՄ88^Ϗqp(:A6J5PY2 èV'Gpe᝭\hjp1awʓSA$|HE#7ч|p* `D]ZB-\6iWẍGGG׮~YJT7Mq^#0õqb0KVot[ Ֆm^k k-dpݟ^ Jd3ݕFFTϺۗ9o\S8qk"σxL_:PLh0!iˌ{8:zE  Oy/Иl ,)GqQR`\ J>[ip&Հ@ $:Q8Bt:@`{>'aޝu99'LcиđHhd͞YGf/ N=Sf0T;WJ& I 231kÉr`}A̶d@ \q-9(B,vѣALXqH[!f-t|nPΤR^bGOf=+hWD;Kfx1^ U]3@jK8{V. "k5hG¾pC鹒*6iS+пu4495dj+ KkNqBM++?{2MNJVu90$#dV/,) Ak0Ƃ^Fߛn<%Jvq$d @ww?Rs D1F-_E1}zcƝZh[$&DWx&fe% ~) ~XLt˛҅JK//(F[ KY=;ؕb~$Vd]8|bJ):v 3RRQ}˺O kUP}SV xsQro3z2F'֯nN?{"]1B+յ ;* eO]-N~2̜u%l(Zb9Mh]Z3')9#>*%)V`leY.5*D~- d5JZ!QӦ^fP/fj TXX&(f!Ý^g/j< /륃S'J֓5V^ ߟ^m{2; 0i7$&⩵ӵXEOSx5DZيt"hv_CS~A$<@ f\;Sa)6C_Ί g0(4i-k< #5t\CCh> ;!` 3-6htD]SeN }}"#Qn`F:>79$lVe~̈Ja%q~ܣ˴^lC f+/ eBa<' \*FC;|c ڀNf!L2i~<[ p&ѕAknnr틧n&fvnjn-25(!rC~D"`\T'j P`0iO͚Fkrfuəکj\'3!BIElQ?m12pQe>RwتD.ۋ XN#'Njjо4!tK_fR!@棼CJ-jaH* Np@wV[; ➄sqHlڜA?y "j!<U?hk1oa޻e8S1Н䋄!9hI B 9Ko_([f0o! 31C;XIh$ɀ禹@@0Wl ]&)s64wY3c.Mg ^1Oqs#Ms3ZNLMi} 9U~x~{$6FɬQEi2WvYF AVl VDXer(ZeͰ3)\t5\^"rШs wP5f7NK$f^q{"L]z`@DQh6f~hG5uU7G~ .#3P TV!nژPf6Չ>l6 9@Җ5Ϛ62t@7 L2  t'ԯbHԼwWfɊ7=.=bx %d? a 9epHҩ K\ۏ$C%0 ntv:M`᳑Basp& )"-qc @Ibk3ePF8ZmUL((qP05n'CVijɿX?qg^:ӛ[[PV8 6=Iɉ(cG@Lb!ll8߬MvvVbq~/%Ii҂ϡ֣T=!BPS:muvPsϥ;Z|s,G:pHgVuZR>f@e⋮@F<6Ͳ.L /)X 3"LN>^m w'>\C]9b Jn)snt__xEKD B $gYAV>g$%L0L#{&ΝFtd\P=a4 8"<ܝsL^^NEcvH-_>֋;|+c! 8O/.规Jn8&,%st]6( kH6 Fq#(ۉ[y{0(^ ֿbףŬ &fzCqI<Μ$((h\EDCc_x/E.:i^+Ο1צ҂Ji4@`lxNL$搘6T.?4] X1h|}g8<1Ȥ< @K// 5pלotpa jtbE Ey&Ц4`د$L"Jvi ljZ%=')8e`8T*M8.w~\(Htv r"jDoGG ilHe%ia&9dd>-i lMܰTA$VHG| $ :1R s\Z $Pjۇ]ًg8`簆 zߒVXݕxrtX/Ap2^[1~R{뚬ɇ:kCU'5n%'CXP06Gۮl[<NscOFeQ-gi$RNo7Wz _t"?z6y/H}ё{qL$ -a[st nSn2ğ@ѷxHNp2& 3 fx) WP'h7f> s!;p&QcN>OgdHE1u {^گV}2@JHS>!~L^d r5/GyNW-`ɚLJ=(RV2ȏM;:-A0<Ȥ L1L~.ܤkgLinNdu'f]BsLA5ShKvvn-_e9eV"mB:GΫxcZX oyHKgT~cN¸OZK:bA%9C ]oʗw1)(t^?uƦ-A99NلL#A2Yu5/_=fqljއˡ?uArZ]AX _vM1V&P\6X2m7䥱[lҏ'AQ6R S Q}딭SeS\D-wLrTC]ӎorly݂XJ^fo - ˰(X3R>\# 9VP饘QՐۑ,aeX#*gVTnqGL(Z)oMi!#ZH.$ɀW\p*ȶ /.gy 9L2p(#Z-)ijjԭ=0b`n0a]k2I)XE8fnDη%8CS.oěNg'dp-J=aYɹبNkY Ե=fNH^f<(|E(SL\>u4vdN~HN[nDeh/ڈ(21he_ʔQnV=CHEgi~%B15czŕ v >aY%e&c!pIB 8г]~A-l641/[\\Z I T4Waa8'lxRYNej3:-:G6vad$$`M,ܔCz3!q1]Ӌn#xBl]K^t_@YugSk]OƤ&v:NaLewɋ-hY}:xi O x|+^ñCq%]{[[q" x@LupՔj -[=ئ\ ejq[%^W'Hjyc%J8Imx=C/].&w4D,Ƙ3"z`U |M:3Qc!_ǣW(WjqS#f(G4GޗI>nڄE٩^˗nHG[M'C&Ǹ'orUmNݾwJ?6\AbGNzŽ2qXDIa'HVT으Et|G3( oOtrJls<;3)YQ`gw8"o&7>cѭ^@& tT}g$}0hh)GTsy4r o MH; Φw~| !( ad" -sQg#,1M|/uhR-.k$GK,݅1a=aYPA,q%! ONzvN6^>ƬAvJFӽ) /ުl̒B3GM'[,n\\kѣ m1hmo>!jM0C <埵ߎ\`K|_xN`ǀpWJ jHLM<_=CM@Wޅ%ꉷdžf%Mnp Z3@>'Md Y,BTuJ:o>b^չȑދGx_W`H "=ϟz&=@%ӌHqixDHXxjꄯK |@QTP+:uc}ОT B5ڨ81hȩaFuXLc[nNרxtNDX*N8s7|2 R{>}78.GyՂOg#Qq'g fKY`9h2„6$} (T?}A`78LHFRG EFJXw!SKr@EKa2'ʌ%v[؟[7SFjj[5hMt,^i#Coq§ZeteWip_t^*>VlhZQjXB㨪9q7@'[=eH+^їa/G6z<6)yжDHwFv2nF)%d.)ەP6^÷r {hj)ϰy"T㝼jMUd΂Mݱ[Dg4{+ݝ:<9qAw L}A=£6۠evAu+U_Q3f?R\0R R^ ,VwW2`A vG<9 4nX;? ?*uV0{[4"΂,qӼ? p}_gKB_ %_g=Ih|.ݥąV^1䓺0 "{7ms9ꛦBNIpi{ ]J :My%uGVց kkpyjp:G]Z$0 _N+M7Y2l @x6q 459OТ}Trf52k t߲}pU\ursVlתa޲ }Vm~3gm,\7m}-*,EHq$Yx=E_V'CRiND9/ Cbx@8`2I̪,!f݄nE8b+Q2쪘CZ^?GVf砱(BIe+9: A  v4RBH zѳy|x֣W?EtFOܔc=1E$V(T} rY!HhQ!.F/ dիG0;j86t 8y QG/Za3= O_ؤJPגIRsZ=|ڼA##su曻;..tש:KIT'6m7":sbqyL@Z,Y bg,n{O;]ɪ!_"=cӺdij2GBX$|i!*nT%;*^3/cEs4CwLj})<(YpHwW^HL- vpđ@wПp̹UK>1뷀L˾f0pΎ=_! 9q[ƭt-c\ @q]CAJpPao|ylN{F*3FxLTv0ԛV,jHA(\xxtP R^Sh"HJn#_p.$s2iB{TuZK t\LI%* P={b"UQ"VR} >Z ŊNVݮ-Jh σ ^ ;FQ,*+""00):;:VP8*e(7Jl0oHe^Ɗy%`4Y[eX}6KJ˩^#<ɝI_/23-@l4`P=K&=.)՜XvLfo BG]ޮ+؂PyInV`k-~SddcU.gƗ' 1N0P!ίH]Hf[Zx\. +\_4bOv#v!l,x<DxIN-Fe,/\mdPyIrǐ&$GKKև1qzG!A38̍97U;ȴVeg ݌LΐotpR# AD䶅)m"ǛX!-ΜaR_});;6П(o:֔qC^Ǖ۵A=zOb d~hzn/J~ǪŤzS,JJ#2ŭi Z~_{c]obR:v:?e? tZ]ָՠgժMk&zzq%UCW\Yڻes7ivZdTVQC$mČki wƿ#;̋ %yG8@5:yq)|⌬N=Bց^\S8]]?{rW[-+Wq)^2-KK0g4LҼ&OSPdŞ-m>nxQyY崎byCQA)BD`<`7%f"Y>ШG]T}_T,a^&xԠ,v4EpW¶SANⅭgj)&d 5 4($sDBݦxOhXQLw`qnPsTs'@Tz,2J*njވ4_}3יjҫ-%i POF?kjS#G'p1Jmba[2?kKq!@-^Y97*o0iMl=ߺ(7g_ǙWأ.. pk #c]@qos]vKi]C+K6 -/'S{VF#pƦuO&gzutxeL.vsMfџ@/)uA)0!۽)/Y_$mU?S^ GqVċj.vUH0mǕ*3bt3($F#PhzZo\d沠pmL~L jbmmK qsN"Q_Qh9 -㳟CUџO=ކy5 YkN.eui#uڒࠠp *!C_߻3Qpazmg- -k 8Z莧YPdM`TGhѤ]:dVNvcW:w|kҁ.:ӫOڑsw pT %z΁ه*0) A&3PPQ_i.-Z!%Ttf3k״+f6 6mPяH4ׇ2 umMCͥpm*Y˭9_J[.9&,rHi߃8Ʌa[Nnx J#u:nY}lzӮ^Y;zӉ1`7zv/_眓{='T `Jټ]ȇU)K{v[՝y`-0-?^[mSƐ=O#_DqqmR0) ibJ}I克WTm Aj/bYFNGuc\:i%fU,pIp ^yBcx2 Vb6Nd ٍәTlW{tĈT{S/QYK7#pQcGogQG?e<tJ83YިF^:̊|ʚ8`r}QhF4뢺j":k2;k.,&zTIFTy=K;pr$Ѳ8f_TIV[[ź`.N0U8IY D57o- !mv9\/KR!6 b\+'Ie/aFzͷ{P|w4ej-t۠^\SK+'JRSf4Ԗ+e"Ӄj\ʌE.>p!\B}vچN!"fR0rG߻* /J6Mn~}}<olϸpf%n~WXUlA!ˍ!ӫ8iD*z3@EYoJNC8f,R ƏmwE(iwLe7xЬ2Lz B,'\n@Oޤl os4PcXY }tp- yC&z Z`7)T)0jJׯ$7 ۷oUckwY;8>+g6w&$>ނu> VZJg˿=>Oi]@QYOƽ AIN%F(Y99JC4Q@J9u3p=0A1 ,^>(HRBxLԇj-ap37ubNV4|u砋ale zJ@5yCQ@RRqO¼p1Bj*O|O ,0߰ʹн,u Hs5IJR(+FL?Fh#~J1 p)O"-Jq Ƀ7u6(ۄ!P@>Á1 &'s3هX,9Y|sACEvp|̺%37_*xC8 <"'"G!£V볩s&<6D-mttzq5"mJ}_(^m'Vs۴F>}*sVӇ"m9oq{o! <]w@a#aYY}i|#r\I _ߙW+"푎Nܞ0|98ֽ .yfnsˡb~p*5E#s vN9>cQG!Ú8Њy6& -2~Q[aṖо)5_[z_itb(߭O=C/ P4? 9T,1լ9"fP]SԜ(0v4sJsbnQ{} #@ɏU^R+/6' Kh-Fs5XޖXyXQ3 WKb"&â{[mpZֶ/ʲZ[Z-l$NeWHWM_ Vӧxs䀱X )oC&6lktIp].@?wShs-$9nP[pYӲG:Etb&< E_p0JtzX B.R .EĎu-0OSBþm Ǣ]vd`ÝXP[ VC4O0&zu4&Eʙ'tAB%+DˎG~AxCPKZnRgx+i|oʜ8oqJ`G~ ɕo P 8yuq뢵𐠵Ռ=ƶT·n2paA/F[ ]+p^F(?ɬ3ggQ)ĊDLm4G;?81[ѫT> =Q8)ʒ5ck+gdRA|vakBcz[C8^'դOS0* )5r|Ȥ^?z}[SWUT}?LU^}L 6h8 bǎEڰn/MA66Mkr0.'})X "9O ~.7@3_~I*`֣q^ Q(Tߠ1``w2uՓأ0F(zcgsSolP8C4>@e1bς zF]5Qƃ/Y vAfGWJ;=yw@Rq\kK0{2tv0="w 0Nr DnJ`37%/-*R.U+[lQ7H0x/{džq8>6F'0*G\Qa$;hfEBC-`0)y[hʑV H2pCxQP¥9>&zgိ*+kɼ'W_~IPg_CO{b̖aշN ~A'/I팟o" ܬ*0wKOLxi1M*ˀzܗ{ meJ!,O'Z2Nm:ܢ*G`x]sҶ#fD\FIHw]I ?7#ȂU.5w5ɮR?70:3np&9&VupAFsUc;I}!\Uv}bz:9y! Rξ N@)0ߗDd;(AXr[BNa+{?X/Jڽ՜vݶ6lҤgO%P (/V j>MTc74bɤ^~^()yIЄe7a'xU$u8/NΨ'nh贑51;^n48ߖSqF; Jx]]Y MG-WM_ KVgGg>W&i& əۣκ5XnF>gla⧲0x){8}>;|9 i 7?kNW APEjpYrҊJp7~V8o? 3#JF ;Sl6QAiCfT0YwI+~[kB41L[*;/jLAM0X}>.tغutjiZ6)udn? |n4oZ8H/h!}I>d _Y3rDwc6ZKجA;T GXKb4p:I9m{#?{X%CKM;E({vT6 LaY}jOѭTв`u Jۃ2f1D/MR1Cb @#^$yH"c%߀.MtBl7 ^]]]*eg^1: v"t2=M@f]M̟D_w`tјmuJw"BhO;ֽ.w3,eJVKmC2LCyӝOLU{/\"K h bxZLRiO(=|V})׾[[P[n26YK UL}W0$ڃR: O3Ij(ΒRօJ )HInS(gKp 2\oNya軚8'p%KEEgO[:*׸pⳇWFt!Woڧ"˲"CրooBJd;'K͒__hv+ dލ 'VmI.^˅ 8BsfG08ռ*ʮ ꩐Tҕc6s~JimxY~V)Iƛ+hΜ;]EBAАQl"U,C)'fC{KD]p#(^ys==UjonlVeuiJ+$dU#;O ?92 <;q>o Trx& ['-xp0j[;3Iw6N?;K9YR2vrD3' KgՂ?h?r_K& `t͡񟞉y7&.>tu4ߛG :^MpvwڴYz~ڇձM٪!RWd;# ^zʈQ t\Wy\OJ14:5\ SXT ݓgvV9UkX,miM\(n>EI aIi_,( ;.s)=5AI(wXg}4YDp4{jq(Q ̷ZJUZfK*xC~p"2r#$!JzZY.^|h}zXaIEXgt^4R{fLypᚚ1ި|O 25" tUAޗ@uRPNX1ZN/ܨxIQ×_y6EK / cuDo7դ |2VC f+H :`wiy~wkt@4OE],<ͦ?sb1- JAA2-=t칙Cõ̍: Ba;WCEΞr{`&,'t[8qu -(J]4 ʹ5ay hhY.4j&4a q'( 5sXGjWB~cm۶/.6a_A5+=d >Ĺ_.h8tBs0HJll[UH4v. >]( k9. UA:,A-wyʰ҉VjVU ^}|wTHӘ,Aq0;,ZD*#{lH7bRX0CduBѢ5d=V\T=Q37o qA̐AOlܿ!{_uD G_rkߘT^}Wo).8|gWPCeJx6N(~v_;ΞS?W#M˿^SmG θJQ50 i<&+;V=KrU e#,tFjëΓU|N'uLx&) 6wrroG4 LR gnZa#t+2>if!ϥ)Ǿ>0$&qqJY\IS(ˤ7^+'wٚze !e-ݙ{awτ K"Jd Ly"FջPn)ж w-YU6L8"!ѡ|Fj=cȠERz!z|%%N{9c׉S'I#ܳ&QFn๕ !JƄeeo},XM0cs9]e08ux޾B䦂@h~T$% ?-&=EsnϨf'$Є`9wvȒߖ$sNy7zԯ3.ɉA>c,vA?p-?#Gv˧hm,QvG=KԾ nk@p*;rQwZ*ړǤ 3νեwR-`Qz\ӧvch:pZ7ןg~#;xDtO|tҺ}&Y9ƮpbuU[]Tι#UFo~yեj`a~.;&\UBD<j5yуo)],+]*D89żmSTI9⺹"_KKgh&\^a= X(u`mgO,Ӊh}y$ے$ E[b \ڊxl~[l:鈼,g\jgY '&f)GL|ƭ*Qpr~;ZI] !q٘ >0S|_Aeg<28@+5 3gKp:ELBvKj:*&z0V >GXCJIOErWb$W+^jɒϖ6HX#18 ˌ5ԋ`֩wGU,03 ̵1 Q&g;!]vX~0a \MF4C&h VӾӗ|怙w9}9/HY1˚W(u2igo}9~!V7;:H xǗ~㲿vWزj w$kʪe1Z^W$S+ļњ,-3!cmh9% Q*;%_8FV(s߷f8dشgm5@@7V։!)^`#m܊Gk!yu訦(+q:­D݉5/bwb+bᎁ6}HЛm$te1-ě G]iܘ$Q:npysǩBq8Hr-;-cN*rJ]cGYucyUku DQ):4^K<|XEޚ.Hxr亞jΚơ-]eU6xbk_loⰯuvoLzA+$^ҕ\w%>[PG<2FnD!$Sx8;;(~ Wou\Ht*GĞv:[Lr-yGm k-6K=9D>GkaDl9*K2J8OsP"偙bN% pxcN&ay{Mlƪ3#LmN̕&>4wՙި|3}+e}_,,ALu[ϲQJ5'z@NԝZ̉ED@(PVdl\8N&,)I]dNY8+ʞ_wu⥊8#+1d8s6Ǭ}壯 Uyfc+!)Ȧ1[N}3ǮIGu]x~^ʔ4 qd[>,{1#^3ID=q$%ɥ:A*Cg R@ BH@!Tnwl˭a]ɬz5 {z1R&l\WџgEIّt)8RTp*YMڋFfR8VYbJir5Fč N4egH%<ټ njc*v<᧼ /Ujao.lGvAvPؠZj9IdAvƉ< jO3j5KhiMt|en*=-ABQ׍.|"?Ïs\Z%gt2^L#;K0>;!SSI!!H>S|BϵŵQN,$,J,ya>A"TSMK"I쫈+;;Ӽ[5*^1!;m--?wb^eCiO{*NC/.Ms'  f+vS'̘  TkOHLTpRs#2Y@2N6^T)u[>4(n#*w²Jb$ȤFTxM3,"& ܴyWm k!o , ˒e6GG\r]U2%8WH CQo娣)*[zb2nʹ.CL?gl2\#.WY`WG>r8e1jB Uq8`{l_d9)\$n +L[o"N>eYfC-\Qz%seg@% I^؄*ӬD/j1'$YF\(AЃ]xiZk$5U܈?ZN:5ZC'Zܤ}w~HEVN'O:R|J%ءC.^ڎ`g͐(3!a [0ɘ»#c]j)`rsJ!*jcf`o+ ;mxx 2= }JKo a XN-K;xL@@a,u]ϺU,Y;Ia˯%y\ #2"daE޵>P~?nŠv]wZY׬a)33t2T۷MN6=?Cݹސd}1y"9gV˚!Z1qz&Ww-fRC|K>'cwA?`6$,|Ckٝ0->\#˽5KLiTom\[کNJXu}ꕵۡx[@4u g@+"R.AST+8S3r P,qݕV^fbڝ]d|k xtQ ä=:qC/ѾK69@̦8ۃ)6mkϋz{vC Gv̠d lCȇ`hr.SFmإ>2푈n\y 3k43b?sNjT%a)2}7 I }A6m"o'iLII5y?|Ue-Ңhb=Ϫ۱_*'{h3ry":U@>q|J!׎72ZΝ ]p%},r Tāeu1't̖Xm٩X$:Dl>OKX[;4Eh!BAjZ<|:f^Oh5a Ku/bztw~8i$oot^3Q?rLˊfoInHiqUgg)Ӈi-aui4,a{ nY$HkJcJ8@t1Ay8RQ)( qr<'T2QUET ԫ *DWV-J(YWZ~]^oP6{ [=ʤƔڗ>!C/9kyyrL+>;ʒ[/ fn>O< 1#ryw70"aYM0Ib8H^-ri a ޴B7N9!gI 2iOB *{Ȫ!&FsSmt*Vch|ʢ&E=E+BJ&Q"/qd"8Yn$:W|8a% F~\\ =w帙"i4}BW3߬[o4Yf"31Doڔr]CpϼAylk7S Lj @>s%0)uA 9-^{#x/ަL[`0/(?¨Y)؛a wI{ddC1ڐGdj<R0*eYCNsI(~.D*; ڻ{VqS[BOl]yWMRZ$.%qj"̙.9*H*:HfcEpRoQ#"htL\V Of}=Q]LH|_~kϣ񏈔vrți&!*)rIb@쪖%M5Нs!N=3h%`U3yV| pk,6խ]+{EΗ\^yn۔.*QzMOտD'TS\0WU'5:#h΅A%EZʜ5bҜ6M.^qӶX(1]l(4AҢۋVXkv)^ۚn6eQ~q`a4ElZ{!eٹ Rfmwš|Nwda{%Q cygRA9zXBN|5ّO49_w9.fo(D\EPl~PˢA'Ǐm |)]ˍ1<|`){y?J;|Ɠ=J7MMA~weHb^;+4T1纲ѳ'ZNWRfZx R}Eڢu^} =ּ3CAlC\'EΩ).b.-GB؄HA|ZEy˭yH: $'Xv3&yVQJ/I^ '4ZY[}>ēnѭţvTow(kxǂ Կ^gWzۼr1k }Pc.fŝL@^-7pjorͤDⶴ ppKtrU}$gmJtAPv h*ٲ͛-Zv&dHj|4P9?]]zw wLz zЩ!.+',zb8*߮$jΆ,7bCo/]Eh+#PN: q͸E@G4+5|"E@8xy>XqI3%4&Ueѣxޜ+V[ W?$U7H2ܘm &{}3}`RU=}ii*"Q:, !86ܤP'TsrvwMDKOxinM'\W mFfPOV \`%~JJvCm8kv9EgfvG١w20$-\IMD7OۺrU :Qڃ1<; -:z^%qBZKQD{җxoe%*p 7|-t<^xأbT*n }ۙo˞(ﴲ\^(Zn3fZ,2:"n@{8,-^wQRE~ '>@^U>W5 %3#X5"߶縵mw #,,C8閅WO=ĻH7=ζ:+ ᓞ(NQxTa7$m};aÿmk.47Kt݋B{Z=+IwoN.R"kO5haCK0OP$/{qu[_f_".wy$8)"oX;34Z'G&o5gȬ [푂px$~VlYy?A:O0O.?Iv{~ lz]%xդ1G2 ͯ4` 1w^"B~<׎kh:&9Dɗ@ I4|ߖ^y~r׮ۙ|,y-nQߖBN"n%;TsB֭f =3EXX7W s i*(*+"AC.ڥ+:WR^mSQMz+ . sS!F]bZxL}NN $pgvE mA~DPh#.0k㲧on?֭l/Ox$] L`.\(P+:rj{x}cO#V ̥): f(ýQ ǀ*[յ~-`h1):ҙn@-݁'>c(>,U0.Q/sU*kޑR1&&;{=< QdÅR%R F@"zEG1M}<*:Q5 zW ՟DKj~_  [#Z/9XMFۇ{7șک+hsDf!!/y {ܸ=g0<)84TMʦzj^K"$L+܏!^\*d%\%Ns$Z:˼&,t 'U}~# \ɝ/!-mYVB-Ei8ɷ92jW][тQT~79E3SѧB0n+\q\Xh;edIx6> XCVrpNFK|99QPba-~ $GnX?:a.pf. !®Cf߄Z$ ݞ\؉jrvb1F4 %B B k"r,$$\7K5sn_ +v P$ϩ3/x>Jaw/TiXFN)@ԅAK$r>Gnc QR] ]e\C w^ʺ𑞯W6ު}LB|ұ61R pn=  b>@kDRƌB MQnh50qb9j C_~Poaʀ1>bשiv63u_;fj/1'y9D8a n+.Zfq>ZTΟάs6 wV @)w1`h |ZwUia{]"5 X MDXfl|6b3Z=cddž/bWOgL  Á^ ~Їo;Lx0e_Z,Cõݷ%"({>96?C`/}G(? Zi 6m v{L3Z[ax'96!12'pͥ[˔))L@ƙV~+r2ʑkk9Z 0NG25raQJ #+Z,OhO :X=`O0 ߋWݴcZBb4l’ٟsԳܻYj(J՜:qZo%9" ]c,:ZrPA<@p/" g][uoW(AǸ3aIL/)^j_s;_"KY mĄ"oj=1HfΤ;F U\V>{9Yc6J?x̀W0M-7ؙHrV2 I<( 5uywjBtA֏o\e3YL\ʺkl#ss˯Gb/kBZ0rDhDq9WzC8 @C4.7U{_\_}#!|z(12Od@C?x7 N.?yjvGCҌ"ʚYlC`2'%b[iܫ6hLF HO] M"U1P [9X |UB S~z|.4TP{.b9py-~^z \@JX`nbDWpk9_c,:2YaFμҦ׭b1DLcau"ҝTT 7+ovzӀƣ iO~}$f}e]Է99y26WLuS Mvq9t)iG׉06G -0I#u1}ŭ[cz6WŁ!-pi?K8'`PCrrp\B;ki~8߯I{'DʪJ"am@!BS҂ ?{łk}MqWW,/R+OC[Yw3|ck=} Qc;Y4ed6nگlc`,ɩߤ@7iM=Gs4g%rGpHC5p#S/ڝ* ϓ]6}NxErP?SrbO{Qph*LbY Sn /BZ; }m~9a4-h[ ͎ϭJ$1N&|'c䬥/ʺ&᧥,/94 g)^D/P"܈Edӽ &S#pKDD Ț M9B4Ge@f~޻;a~WOk CL T|;v)␳aH z=lyNS^xG0fx!eƸ.9\( (noAiO@ut:)SPU6&*Bvp F~[@]Ja0dTx͊ZС q0.W2v1hd-CZVA@Gñ|g;=E4'K<@|4^q |\V1p%[#S#F#-CI̥+\),Wyy:#sQP^,JzF "穼ƹ0-hq(B?Z{)6{oݔ2WCtˋg5T8,+Oe0HUܺvRrAD 6ř!D)n:nc a=2ݫws9OYV@^XI{+ #bWy+@% 0.{'~{dzr/ێlL*bd_Ecfa"sص- v$95]&,̋PLY$8>=[w<* C~$\YY7W$Y^qF%EAWQ7{EH2C)Cu͔.w9AYȓKcd Ị< wTPNwbԡ"~H66_0wnDKAANe9iFVg?#|ּ^2|Ś{A&X|[QhY^oG|#W*fe`-ޣ\6i˺.tu/^ykA/˙5nnמz]1Z[ϝomV95˅_6 e^^!MMHчVx]m$ՏKJM4F-oQC23q/T])<6.jxo/|CA^[cB2|A {o1K{2A`O F8;' 9ƀ@bR]ʷq,Vo<*l^ܫQcT_5?$U0_9׊ f)Cץ) יP["q,6 #acd$\ـݻgyZgvbԷaz8{ț}BhA{mD.'*KOik;D #/h;@± !+ګ-ckn.v$?:ܗb{azKޣdGkyVֶZͥ:'Zsg.O\/+i.5j>( =>v w=7\4߈y~)qNKss~9< k {doÞ;Z荄AR4vríḾѲʀ&_>p9UF(#eI|K!Вl036nLGe*6Ne /ˌԎŪjj՚we7r|т֔讞 AZSCr ֔BInt~-#ZVvLBr"9ŗ598Vxh_d^:|xmW(~ My+)#%ʂu~ޯщ*KX8[4XL{J.. 5|E^]sҝcC~L@!=Iuzmʐ^IU:d݌a?a2h/iy;nQo (& =X;-?vkC) fm9ҟEf^-MזJ=4o,q˒i^X\lX޳ۓ{-:V{??&*_i]Ţ@T~9{UpMXאjS雩W::@VVپ=-}_ey{Ď^gifhjrԮ 0(w90{T,OT<~ >ϷXVX8^tΪ/y F&$ZLȏ!DHn˃8mL:dJ'!c\?<ƶ}@}݁ "'||2_}W 3:}6)X.邈Iemś[:ޝrmL#hd c^o;6a!mLS >nN-j'9BPB"7%"J<Z) }B [Sgԓd%7 O MmfZdQ?8k 8VjW{z 5zՄff2!]J73Cƅ2P,Mwǹ*)5H% s9ҏtIT H'~icK"~X=~KH^!Oq& "^S9c*l`t122Qd @Z1N[ :H\t܆CeSSR|DXECydhp9@<(+$̙4;.9댋)5des׷z$Uf{<&v$b)K WTR8Yj'?K^GW{o%8dwJgMz 3.7S[^n?ԣlC9XdC?5{/{/{ 2D{D uwo̧ CjcT#Ț y+L@w1c@]?|K 9dXe,r755뼼ِ\\5A 7 [B~bs^wE)`sOrя)eަlCZ@Kgߝz/miM)|DRѿ=/|pzWPC !Uqu.fc^tX\ZZJ9V]бو+|fq,ҏA_/儘(# :ΓkQn~C <ϳMfɥ$<;eڤ1%iEUgq*;R1=XhW`VUr7.Y"qyW(M&qψb)cAnjIW4ytҝ1Q܃j 6W!hd77"N˴:CM\ti1r[?Ѓo{TEzr 6k?ZQ[7/V{.=ծ"+9= KLe,`S w9oW͡ɓl _G׆aR0e_ǁu5X2k>[:kї/7:YÒ+W.1Ade;f4Y.H:^θ`"7%1$E5:DkP2r@5ݕ+Zf}G 7R=4GObT˷ ώ#_w Taҳjt[H -ysGdhAu.Z54N^RӲG2Qё\I>]zP=>';r?8Dx[k5j4ITU W0*hڬFgLRgX,cA!*}% sY|{F+u]$_oIr+sźv8sR?,%_'N,8+ kħFgd/$[5'Zǡ)A{P {2dfܥC(QUg1r\;Hbb τe+lI""Ӝ .?>ikV2Yr.6ы<OF}Klc+$#˧{ɘ 6S9Ґud`*ٕX5=eou7~4-xf&|ۼc;¼,Z_ݥ&k㯩 \&cwFc렮7ؔWK]}QY:H A=r/KuWT7Voi;Ս+ݖO?em+9W*3Mu=-ZR)Qv!EQa(9P+Bv{@E5*q]?vS!W㐸7g!N£IrWOԇdmbWBM!*I>t39 3D˓ʬy*{+ IfD$5w[EGeLeurH1T~ΧtWyw$vsjf2(dFg]kSz!~']:4`lyi1Yʸ7yT)IJu ^ճķ'^DvIwN{+$>| ؿzFda ObDL{̬o<5|ʐ-DIߚkyBoW+o^'^N? =8\|7rp0~Iq X3 Xdyzl0E p)KdBĔ,DK Ξkm?^$ fRd9M"Q%ƨѣfHç]9_RUAq}<=^F-ڋV욽Vq*ĝ/sru!`D[Iw=) EkvkȿgouS,`*糣: g mb|{{qOuyeڬ(+7oʈz0'#2VQǗME} LK4~I:ֲnj5'Je9wse>{hPg,f!k土^Ɔl|wu|Ñ߬DQx3Ckp)eC>Ԟ$2f=:Hh5ڢhFL,@:E~7BV?Q#3QA.јڬxWujTa7`N"*kKbYJD: ,T3sq%̓!Lo oPMZ~8_BUh2|H@mEj]<m wFɇ|![$Q#zT֞N6 讎HNb!b'rV!Rn&>ww)rR`><\|a +Q۹o=b$Jhܒ"A丄uu?\hG!7˽&K>p50E*~#>ĤR>p8%q{}# pqͿfOG[pVarNv @`HrrUHkέ|zg,tQͭNb)Y0G}ws=?1]Ο.:X ӻ$Vލځsw/@@{W,}v✥"ԸzEIIKUŏIeP`fq4ꒀy]%] -"Փ9szRi ٪Ӎ럤1!Sj3 ^-S`Y9%̥ʒ>2.-}pѷ7^-R2U[KV^j]N牅a"}-| k2a^!b)-D*57hoѠJ?\ζn<oQ0^06%g>)fU*7U'M$+6_7 ԤY|jipUzǵA[ .`{ f"[ꨃH170u eeɲHk.a03eTuu+(l:*owQʑGwE8wU՛nK- ͎KMr9]ay+2p+ҹx?_Q{(Ƕ; -!1FR9nf !К?n cD$=Kn,PYgxqͩ'C }G%3CgQӜc$n%lcfUˌN^ޤM-'KVϚ9yezbQȵƏxTRQ5~ ^u9g3f {&#TuH8%2t):N#s??%?05љT*Rg)Sאy"҇SAܻ錪)qRK=WH=.(<>L},7汫ƎP s+fIX\h;sb).VĦ,|pUYY }0ӐTzqMeRp -NS\ .] HdvidK9}dqzK5nX e5bF6ʍmC@;?{R,l=pe(FM-c<: GНn喊&RaRVz*/ҴT#H6v#I(V!QҠG߄+xm2k3zU35հ2o~Gqrv * [ՒC[~:m&$4ijB84|؍pHr+ƺQ)؂I gHSba-ui-l/о0\M}K?FdD{={<ԍ^Ѡ;|x݋ ]94jFaf|l\Q!r53Lc6?aa5cG|-ls^8%6uO9Qǟ nXIx4paܽfζK~?+2yIb);(JΕFH+*1&"ɰɍPa%'of?cOOK 8VzMécg֧6Y_} om+zgT|VQ?'"xR;gO^L8;qaߘlLbL\Ww>k~[gwk:>2}ZB{W ,w&S ka@Ը?6>3n=)?{2H2, )qH` ޕ3jkTĞB?Qm$%)}bUq_cqY -_1Ӂ)j?E=7>-96l. sx"hc[y7?N - TK79|ѰxzjgmhInHog)v~ C;LJqu pmW<˗=l+(lCPm-[IHHK(|LQkgª?CEBx}QN";FNUcE\k5EG н^Jv<+Dk rKCN w¹*{Ϛ>jhÉW~{|kÿ$a=g1izf҆Mm  z`0X*+Gn ?J >[Std>)`zdM+9,Z', į>cu}nmĐN=z8$Rգ3c 1MEKY$ 5 ]Y^=xܠKHUNyxUqYd*ggmnL%r䰼!@Z"["(͘pfk"v$ρ9&LIQV:WIZk7TT!X52QIe(ZP b}LLϰ:.'T/ kS->lT5}Tr#e(SG:'WmP 8oVV7S*6⋫-7kI5P|-wSX-g `(TzI(jaZc^w.8g-fV]hl3.yOu2&8EAD|L|Z3ɡ2]ۑ5KqO[شܵ,Մ>k*jsέ *Ѯ|\A[ T O=5@'z=]Z(CGEfM8GWP+qNEmF068Z:b7-Ь%{Ch1^tm,R\H TZ#x㮽`Y'}?}iou8KP1㥙夆CZ"8@x µ-``Pj}6LlRU\6[ CZN"*Y=3CȾ3ڣx~,ceG ;,5R>Uw6ԼSAR7|aqu^ځ;V`ۼ:{~۔x9:7N+m1f75dGrzZFݬ(:%P 9GaxLIrl2}>Mn?KwE/:T@Y_a^OME^3 O\s _ ^9$-Q5y'msс cvV I߇!?I$7ܡ\ód[#mH܁F&8$*pw,意hiḩt-,6i0I^,`Ś7{~5QR ]5j^FiT\?8E|ӕ_eoH{UĠT&L-3QWnԤuM* ۥD+%j;bͮ' Y> (؟4 w]|/JW#ȤZca7B'8:{} N$8oQ|W mOnL)Q^!WCM8}:Nhۑc&4ٝqo_@xމɐ5 Q+t*\]w C!W^"ywne/R=`*5bJzMwZN h PQ7޴-␜EgC29*XYKUk&D\4]aw-5&_kD@;I1fͫ{C[ŏY}ExdS9ɇ@~$`KPK}=wvZR ?Ph{%Zdϙ'biys-KhOü. [4/%0y]|(珫DBˀ(D뺹"cfw8NgPmzdo *Ģj6hni[}iY LٱEf9eF8dǣOk@p#B\'Mo=) uĐEB>:6Qlo6]Z* ) ˸kֿ /d?6 Q7Dx'ey:KCaM۽T&ufTx_WD){5PJ7A 2wWqo-Cg*te j ^"~4{;fo-W?*wW1{|k.QZ" X-J/~ ۵dp;} WAD|Qķ~XC}6cT;k#7.{7c8T_4X;B*bm#"""*RJ)EDDDD̛?97t3Zkgсhzt&ޯw.YNˋվgH@E!6~brݴz]DDDDDDDfffffffVUUUUUUUi{z6Ndpython-mkdocs-1.5.3/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff20000644000175000017500000020161414502137725027653 0ustar carstencarstenwOF2h(@ t`j8  @R :6$n )F [^ ƶCU"#n{B!W=.k'pr-~znm@%Ҥ!~ʆ hXmC)-IƳ*uSPP rFݴ}]/eUnYJ6vN% nn-~}`ѸS :}Ἓȸ6oޜϥ۶+EyP3f0x؎ɖOdONLS:kI{!q71;}6V=U7zqT\Ұzf5}Tu ј>jB)JsN}Ku[6O(Q=qS  J,-sNiK(Er[XbT1`BF(I!0hJZ5ql,N(J7D@Ԥfa1UƜN:E‚6AQ)+Qg-qsֺrڏ>}$9Z`K C~Y6|n8)m $ ߮E_H xXMZ "r"fD!4& UWcȜqbfNX?T4vQ BOg,i!1!p~r^OIJShvrͽ#>I\}p*^.a*/Xpɲ0TM!#tXjB(8md$ʠTe>DWu85m>W c&=0j?s=4P3T҄S7% Rù #7 7|PlK1- JZkc|~Qݻ)J0P2'dw"=xҦ*oJt?8ݱn8 'RmfE|cfݜ O0 ~5 P@f !𑡔 )Qђ}8D)-`Ah35Wڟ:f OQ Z6, %WBHHuꅬn}XO5]npIy<e*u'.c .-PY' b!,Ao5%EIWm.M>=7uv[rl)ixҲ+P Qu%{׀L l2E| .[^T+^DJ{MTؚAlŐBc1U@û"5տsJ%FdOLHVQE}ne2tﵖ#0B WWTc6O|1"ZnX|{f{ %)""AB%¿EzStvc1B\e2ʦ4"uE_̀ϙ%i/N]8@DI[|U&Nwc񐬱H zZV]X=9,q5BemY,ady&ҵAԂ,fET`U{2k. a/Hr T-YBA=YL67Bq, o,誈Ҕ>^ y!Mǟ\G^ VFFOz87\1Hf~mK|`pKqd97f1\FDX6);| Klw۲Cie'>+d ۬㥭[j%Vlؽscח~,ټ n5Bn%!q{CX Śoj 5S[\o",C/m8! Ea`3 N)sT?SGNW3uc{+v]ltW?AC\}_y3ߴY[,Xd٪\dM)t ɐeA2'"BRY}Tl ŷRN%ؙ;wp_v&$7ՔfF!m43iHgiKnVܙ;[ro\;?u{LO;gł'нЉܶUyx{]z=kn3kmK}KcsgvƯe-,ǟ- WhdvJ&2UZժLo9Dڹ`\֍ȻW'AD3em堩ЖWT|2+` %0bt4QsXFuJMS뗛IE_mvUnZ3eR3f*3g.7C&|_æp7RH4Y(DEai*H^/ $@R@AQIQ~tP% "0>(xga TyLh.AʹU `A,9L$09rInɊD0|(0chXJe_E zq3.{1Y ;ˠr45hʂYMo̴.U8NAJю֬:>DDl7Pc0;`6*&WZK]%]%~P!рl=PT&:#֨<۱p8J;;,N,А> e@@Wvb2ZɃ6~UH܆N=@Un e D):u2^H-Xԣ XYf K y@XD}҇c:PRUrri ϵC 8  ֎]E*4ˠ3NxZo$>MZ"2sD& ð=/;PF:( ee( \4rGTi*)Vzﴓ+4[&хݸb(WZwLΧFTXJ `GMɘw01f(pKc(Tɮ%Z~ .* R+1*e{, ӊWP&E;,"ʣ8"rģ4i |ӱ"CH`WV_J2K` % D2jqMt$Gm`cUTńUZ4e[03p]{flkÓ֥LRZ5ϓӞww$Zs] DHg4@'' QT?f)1*S tFO$Y{'tOXH;VB:gJİB8K'RV Yly J-`|M nyxv9n*6V؉ٲpS`X>!3l3Oݣ2<P1xLX8$Z}%)jf#65f$)弿DUxIwZ jPҔ)p ы'eh2 B @L!NUL" xԂS;0 FhQJ&>\? Tʫꕠ-.jTA9 G.g=/AWFM:Z0zxȜ,y5ą7À9t_"9W4.?5uu#uNs7wo͜BcdG+R*rl暹߹p׾CM%̃٬9,Z E,( 5 i1ӠI.= QhhlS Sf܃ob +ll1;md!CwfY-+ezOܕ-sJg;+"FLWҭt0JH)UJOK-MY!bWNyӂS ^kШIڴHsg3aj91kμ,[g֬۰i˶ڳ^^CơcoaN  uv \~a? vXi KABP FMZ?j5~è}sjm~5]2s͒/x=Katu;6Fl&ι6fWӑ~xł$, WFsvO2Ě K^3SPé!8rWsnzfz56\A'B>y4t!A Y)SFzeТw1x#RɊ3`Ȉ1lزS;8rWsnzf XqG, 1aB)RJ-:ʠE)Zdz0dĘ S6l٩UAmB)Re+)< /3PBBP|% 1bĈ#F1 oF>q=G>S?3ES:sRL􇌯t_En$U\]xQ/_~kĘi` d"i!gZ뙎gD13*K8S'[D2-װΖ'L5g)Y"!cPʚ_-䘳dnňS[kKv#YtYXDu=؉\rE7c֜y k鋸Wa2eCA$V?%RKB"TU^&m,pA: .WK=jB2sfs-X֐1Z *%RX:5TyurSpą]-!vN\#:kM`Õ-B>HC1:BX ;mdρ#g)-WlK-Rv)U*Yq#;Zx;,SMx;^Q mĐo~OWI`=,SP]%?KG 8J):E5&-33 {,4 6ڧj.̵/w >+`N醳{!/vu'y pkT`-rSuV4-{VUUUUUUU+jPi4esc0񜻅xvBU䮧5,ׇ rܲ` u Oxm KLHJκQ8OÛF10iʬy ௦zz9g7)j~lje*T/X-RFW< OM_KYݲ9nP9(^_m6n >V8 ϝqF[Teˑ;RVj kFYlzn6Ɯv[z׊v>7j?ӓ8єP5WjF-U]V-Jzn'xt[Z7q$.@9M3r5 >l¤ff}-XVX_ Z#sKaF318*]Qk:l9r%7meB Yr3NPMPQ&-.L ~hNhq=]6k6q`gs 1'8s7=AXUg!cL_&EF l!|N`f6G҆LLe)Ovsmq =w,1a7G HV$ɥdmY!g]GPT0dĘ SkQkUiμ,[g֬7 lɞrOh0 _&oc~kp yߤ;"9}9ʛ!>?a|fo C|TRoFʜy ֬1L~l[.p3!Ea. ?.,"R,q&̕r~ǔoǏnk. PEVzH4zc-]KLˏrZ:{VLbSp4UoC} lN^ԳȨoe|6̢C}!Ցb:Dge U1Dƚ{7-@؈_A#6 a&iI"ɵY6D$MӗfZ85Q3z?7'IsKB%}+}iƶVg.ƚIL5ozܬ9qx=˸% VE<qn"!( )@gOFb,],cag9p"c?}td7A [8n' {P ǸIF5*1 *UWλE\>!BqOD#d|WVcVk%'.|8Gxf|7w^0@?J+?*:E XlpYo#{9sK5BWJ~;\^n嶻{>oݶDd)O"¸~0㱏VT[D/#ACBO B)z1 c1 <'|g «$ 6"疫N꾏WoQ] \6a>2-X<.FCLG*c:2eHBXkB@5b$bdf"PP~*MDX:5h||v\Rp-d;3jkm"L} QM G aJOr;-m;3`u׾<;7ɝc)Ny{Z} gggm۴ y?R?y%gx ~^\zOmwV:l-mbK})/ӓ,Iiܿ!U)EFqOW=dsrҽZePc؍1+N)UcO X|Yt =*fCl}0;3Y޲n637j5+ AcwMv]C~ V(k`(΅C8΋.8?D$(^1PT6]tp:K ŔjJӤ2LU S8jzjZvEu+^tM׏n-0Ewun=MӬ4/xbZ<3- ^V/MMMƻ;M.ܙ(w2\7FoȀYOA ddUcWXWhsፊЈ hM]6&o<1mAPK Xuб[rppc ֱhECpB L 7|`\.Nkd~}(@p'4: "!RlQdgqY1PJpI3$p-nù.v1:x<1ty<4/A5ˉ8 @17Wh#$;chɄ)4"E3w`B],ZQOAy)%h!("դ0 PxlWRA HET  r2ejʲk-+z gϣG!C<\"w?y`m ه%Mtfv|o_[B:Jxb[y! (٠d>*Ykw=<2:N6NH^HYʑ hx hxhx(oMV0x(]  [O!F 1RVj@>%V@\XVL)PNzۉ8utuP)@03XFLmWл 2;_FV]r$l tdN; pPM`G+o``6*S`!#SK}ߎ]~HBwm)`\T8\XX& x̺?`:.@qe4&e#]IWҵDN𘃟ݫ))(P*6%؋,*J x QKDII~I!Y# 5=d! YB]˱˱qeo-3#P?Bh x|/m|l~@ݑt$CL,a+ bw7N˂ m!EPH PHd GH!әt,W7 %pMp`aR4aX`3s_k^nD@AB5W +o,po PckR.\KҮtk wnvnw~aKz7Ѱƛɧ~ŗ^~evd{o]=}#cS3s K+[f*@FP& a~.*$ȣHFHKhC |,lfmgGFO΂WOYImK_5r` Vyyqs^C멯ݟD @EQڞlMO ُ}{_j :l(kB]I(vy4'&q^i\x飃fV"k$m5 "._E~ZLΪ!uOp2 {8>4k[W8a^YaSTkRZ`Lj098yHu4 11tu<YjҢ PV<4ոC]^ešr$]\~դlM\˞KC'/*_W;;\,x3nɭs9b?@%(Q5K4zismx'y)}!=nV]mi?HEhyHk49@,фӅ~ xo"0j^mTjTc /ش ik~OgBUh O›KaQ~_YL5BNtH'9ũN䡝Lg9)RwMɤIխaMkYS2c]YLN7~M8Ӥ?Rֶz5xI'-g{rՍ_\bv5WpdvetSM4ʈ%wbK].wW#&<( P PrЪ00lg0"%{J`ǫl]} J UbZB"HiL`$et4NT;jW&8G"PйP*asL%QPEEni901` 7L`dL1l-1%,f e Qs"h0`"dT4t(SJ: hӡK>&3aʌ9 XYa:m&6sȉ3ɋ7"@ Bjb˭4g9iL6tӬhdZVe]Xc$U:$46Vt+>ܐ&qTX"N_, ڝSrkɊͶw01pt:DĄ*Tr@jN#HG^#47b\&#Μ(A ,АpՌ< mPkݖ+'a?m(hEGЉqtf]DWSw+A$7h` 43Su/ݯg ]N3Vktz-z= R$v^+S/;Eu?]q0!jS ~+.vpmwf; Ca@/YY̒wM \VVvv0T+Ryo\ ub+bB߾"r}hŰ~FNϨثǐ͐4c`.1eHd(!,i'D.1+ȅKv#t̝xVЎCđd %L-%ܠh9":H3SĻ?*G=W,C6sQa6JE~:և ^JtZx&Tl0ji0Aٳ.5m ΢tML2f4㲥OdNxB̊Jx1NPoǮx|niK}sbyeEA<}K76ϗ $Q氅XncWh>0sx SAC.4&0n.0  }9| \Y:Sev]4ͫowjY@2lYF-{'E&n嘵c1YiVmun)U k ^ :@>yiva@ }óx@1>@p |0 7559p[AsJ! S8Wv^/ގ|nGʳ+<4&EDv*10#\eK=j8vJBf9ml`ly3'&胈HD D&nq!fu+( ncrYyObœfʹ̦s5Ym3"Dcn-{# ݥs;q@SCuCk^#s{)Հ.Sm Z fn6֖tNi7<[' ?""ke- Z!I$ q {><0_CKMsU[Z\2XyQ]}RH+F>/ֲJxyAoMe4cgR ?77X rhD3*J1^}y uPPxM{r(:.XiV{ w[naQ5|I>ӷ4P@K 0Ľ?W暨E2y;fd<W'z ̫'?xxgsk$9 y;;}_!PEdMn#_O L hA+x@tP1 hK,) gRAˊ 1 fT@@I,l%PLk0$DBz\8n’\9;MEDiJbP.ƌ>LKkHqxD4&@{6 "Saq.&xpnFv@IڹFWCX| 8eG`c !#B2Qf ;L ";څL~jX:%(NK Ec);c2i|"m)H,4V6~Y}_ d)wa|޶J([y_A.ƅ6LXDZJ6uv]-SWo) .6\02 )7<߷a` )W&e4Z-+ݣⒿFT]ZrP5QcJ %^cp¡y'Unp8rQȜ}r1ڪH __uhpi-dVoTߩS.bzjo[4Fur# :7j)Aͳ0:)1c4TZ]5Y0R}E`O9=6\@5>H[~~-q*ң+\B#*wYaZ&>6n3Cef ]ONEJ H"'b1 /PYc4)g?ƒK-S[#I =8\iC &61zۓȱӖ$Tʐ+9JmR%`B0gK*!@RE|`'=_ʸ0篺=kcwJ`Jic%v\Nz2u(?&,Q5ڃJV0SKA䓠@͗@p_u]@|o䖈K Mh@‚Z :\X,|ב'N|n/F]vF2["x TQ@Գ("ͣh3 ݤ(:?e@i6{;?|/h4:؈Hw#sDydD9L&!t !.T&& f0fЧTqʼ08՟躘p'q-5ZV[kZH5&`~3Û 画5I "|)Kۖ=ܞ 2`*T[1w!ѝ?`Vt/Liˁa.\<"))Rf4!\"4/ CX0m\`6TrQfxāU9K@J P*8\K@/9ܮ1':y*SY08>V]VwiHTxlGv[]TkBL){h.$p`> C@#1oYb@r蕢 )W16F<p170,hh!ad>%t S=r}=0_ Œ)[&3M3z< ;[H:t W 5_"+Ȼx[[ٿщ`?lbif~36N3?9C|)):WQn-?&]0JD'R/99pyMّz=ڗ~ժS*?E/wFDE_5( $}Iꔙx+**U^ NGp? +m61m".&VXyiLO)(gk/ML=֫#rL2⭶tlmITvD٥ilP>ϼ}`5nw^mc]CB.Ehw_v"w4OQ<&H p{^ajZ;t =84Mx0+0?]jz B{]! lmSޤvUQ-pDX-۹Eƹhm{ޠ1pl4(r!dt%\⼟P!e㨡:ȔC>.LP>1S&c} 22۠5MMhȐ;}0g!u>`0§vh7klL ) :d%< eAN ( 7.|+{'G~,8C1^c%jj&@ hᐟxG,E0- _L 6^6Ww߳kH޽gN 4RYgC]ĖY׻9>,-سlRh-Ur}ϧ3xKJ欨{1C˛nC S<(]zV}XhnPIM V&Mm98'MgzP^Z91*bkK5Kn%zMkߒ?I-'g2yO0Kna,k/&QF?4,Stj y6jhL.spqrD.{#o;nn[:8ĿUA፹w}o I.ͯv#vodo+!SlEMn79ȡo;Nfgv'coN'`Sb!<ˎS|0پ[zKLfbH(˦.%,w&mbJ4NM)*,'CXS%g&t>Is;?rQ׸[ DVD(B9yw@%bS} HL<:+~M8Iqo[l%0DdM%emfR?;tOoqLH u/IQKa06A+\Ԩ%\h,Wp$^jљ}Y^fdOӬ%":`ijvVC|Aqeqi#%UBڃ!-mƽKh"|IMj߆>EMW$vƢ7GivСǐ Jb*I$򸮕:|A/GCP`UZj/vx0Ӟ*&ϛ-?lݔ^:{V@5koj6^ZxwPW_gKt)O7*-p)(u1yZ\0vG ?xz(mPNݱrN;J33x4E|>!G2߿m3ݲܞ1{!:U:G8IߛD\o&kk3Ri,&CFE"]-ĝ@t0ۿ >''NNOO'$NMrXdUi@׬^.׾QF۔Lvy#>޿>ӱPpf.pi1u\` ?O/]ހ/CaCÔq*X^:ϯLyRy!gDn]IN?|[-I^A /ބsplp9}0a^2ӭwTOغvbcy#&teyy#(l6ol*4_P7}ȯoY2vo`!6׷±4JgO<#[~}yw4MZЛH t))br~b驍i {HfDv^ˤ<010`&;pRMU~L/H`%IbJ慨CjmcF:}|ӦM9=лR`$ l NS 5wƒ`У|ي_K~,0)>fXmDl :,qDy3b:H_9#~Hͼ ]K`}WU77l^Y]Uor5Qfg}JR˹X狭6V{kyYWC"o һWX'+ .Ri-c;L$\Z&#nWgr]quLoӽVi U6ymb_TTeNWwU`EQ*0.'OVU-1E0|aWo]!؄-}iqy9nCiU 1c?am?PEI]T)U6%|Q޽j۷j134:N(D! ?헨Ի0 ԪDDX[EIUKthߤ.L2WFp&׸€K`Dz>ǑʗX,Q[2H>?3ysc(m;g >#|x_SLϻb_pUJ( "N*ں`?_A~%`?LAbyr+0`l`$+vPMѯ *[drgʾǽv JCdZI5Go!D'$JnsoϠv`c&bibCKe3rƪBuNX3k鬸.w5Tl]:$mR*tv]W--̅.r <&>蘀\[HtF \@4>ew^g~Ȳ7 8)G/UKuePk|`v!UPd\\wV_vGJeޥ@ 2:. XZ‹,#='6:w$ØV"~I|@3G+O-JLxϻg6ġ^0M -x4YrQ]=l=Tʍa䀾#">=7Ҁ5LkwN{ѓ5os~ ֧mds~6FHzzRRZJNN=}N$56HGl8=0C }k(\qKvTiE$WLD7n1rPُ $f6sP ûӖFXs]LPyCü{$Ox_{d͹P˚y<h,d_'Ơv@GvOIyjjy.Un2Mw6)&:|}ё:7+uCaNNaj\J=_wP~2QG6 _=ͱ0!H?>o8w^R8~Qmh/- ؐeքOF6ԋ1Exܓe 0j<| QF~sʙ}_ęUɄH8,RQ- W V ~bQ`=.å?-8VVy+gg"g'5HkV&X+oZ*Dz V2/f*  70! @ϻ8l,q!=`-k"Q'WR+ۖZ"̅l^il]V{mx"MX1_f@\m"}qcaCw`[ХtAulmL _apoc0Lm+!I?YQ{ U_,k)TUT[Hʵ镩R"n4hR 8~^8ݓFYG]mfH 3oxQ=ϠDU'RȩO J/ eLq}D^o8Q[VR{ZIpb*3LҰL _̐]njBJ>!~"kDѼ9w0Ƞc; ێOchc0 Y4ixErNa܎?9|% \rSUE c/GzEV\ԠW}UEQBIr_^s2c. K^ϷU:At FCܛۚ;<Šq+鬬>1USU- jpXklY_$Y-;Y˫6SN)(O:mͽQ-HD5vޯSvfHȫ u 8ޚR*/yz78(h@fuaSvqjQ\N[]6cMKĖ">G3E7˻&B:(4u_B* HHZ,Y+X##LT**|ꦋ |P!ŤVV=ЋxSO[au!W&Նݚ3FFM|#u迥EԺcKm9J]|Hh`p x^*Q.$`9ͷOJh!j5&5=&@ MxI1As`;>~J 3h+**ޜeD!,M5{C':9wʁI`@V55:ǏENWU w<6OkTqQvdC?IXT 52LzN9Լ7nFbB".M"n^8f4m PBE'XX"1oRao^!-hU8d`)8Ŏm82 ܃Q,9GhOH+>y;ȳ=&I}EF[H>,`.b IiyrǡtX[ӵ`Ԍ>Џ飯oI8 qMEdïaB{s93~ѧt?za$CEL!}]/ۆtxk'o+i,md \J餙Y6 v" Y.Ǥ3IQ-Ѱd?9@&=ƧoY̋T$]G4l>2= eЛ5ORZ;e]-OOrff0JG: oYV&yPE\V{3(Q24ߗRoBf#dݙ7.8Y7&LypkA8v_"wxSNAC.pi+hKhyVcC3W75|$f0?4#zKUVUiClWcI{yvsD`;QϞ#b|ymn 6a(d|;zP5h|U=1$NՍ;"G >ҊtiyJG鄁kf \14?Ga^a hp~kGad/(U^~e!!w tF6Vkrˍ\^kh֝tH,VUTUWl^yXSk:-|)?KWօW틎VTsny>y/mGYo.aU ?82>`"PfEYDTTedUDTtTXå.t4Z6Zs ennɷ@*r\9o㝄7PP7+/a !)ٙ9>x8dJ\+L%"W[ݖ2pw—ՊղdNdҗ-P_@wEP Z+F,Q7ZxZ?D;A _6i?$lc.4T¼|Jɱ8Cj #d)>P8E(TR$5|exqh9KEL6ևx5Gu!Ms:zD1`\jcFB4ŵ&ߠr$05~[~]^JT.tǧq%: n(*A(uݧ گ=EF:Ho(;^()I- O|>-v$ۥʒ:2*&h']C9nDwOCFNVFEӈcN'G(c męwuC?;(nUjhB9Kcb8|lH= \74||躏ЈO;c'*H~o>)'β0Y!FA{^e[O@[CXE+رeu2 ]YCؾGDu2ߤBe j[9$Yw\ RUӺFI_mnfsw[Wʽz-qh;㑄o w^MM %d-Sz-Tc ZڋE}蛀#*U"!l=E8jxRzzw0Lc_|˾|P2=Hl4=G@?f _$=O$MKdV頻Z4朗HVq8=Jէ6n~<_ldqs2CGWJz~3s~~{d%u*jj@h (X]L0>7ϷgdhlfYƀT ɵa*^TA#8Y,1ޟ!?ډ$gv(wmؖ"lC>FbcsO_:"O(|Tl{:/5R!Jj?^*Z.ƯbssgЇyuUh}5 _t0S]p`9DOk"[e`TefuQLO}|MCeCEabHNۈ rK~䵙g/HaAq|v$Ƞg#lRQbNJou>~Sʯz"UPkJ(absuQ(q2f5DxQ>څVHfEOE?e@\ޒ9XkH'&l}$NHf8F;mPC7kLNYlN>B\L9kn1 {WJ-1R5|XŶp|bl[h{g 4?:U2OOinOj/s7]ޜ?<=-B3kNj.j]nDv, _t Z%{l( [JnS :tS]RuC2pW.+oqXwDgo?GI1}U){w-,|r,^R}]9 Uem1Kd _^0|>89kˈiW{%4tw̍N1ԏmfo39o[10] \KYnrVKWkX4N}HZ};#4ƹ WnɜY5M Pn+ GӣA'pgIq*[pqQ;0ծ,=GXS\%h3hBkz* #QBKY [L';ĭ|}*hdRYimɭR]^-A[m;oۆ(`e}ē/X&NVw=`E*c6JT#B"_+ЛLm7(*' $"Kz]6܃ p"?J2X2O($Xܡ\8 5˺|ctfV^m=t\do[Z`"(%2lm,ԏڣʡL%8v [TL2\`xoL~2wGH`b߱&4ru@T޵*T (og|{|:bÇ,=!ġ#g/!b2A 9$~ ]Y\/ oY*QRNo=^} (=\5UQEDCВG~pۜ,֕CNKsQd)}Zi/Y&}-K/GLb2t/>/n\߂C*%%hT ޵]7aQY^~_ rg:n2q?8P_nҹ@f(tltUI蓐mjyHGRGa騀`!}=YU~ >.,ڞT00BY SC%JxKoп;Dூ;x+ 4IZm􂲜LMŃ˒qu|){[pd},p ZXݾ;L{ m{HشLo&[&qPܼv09G VMdzO͔*MMo-76no"QsbU12aJS@kkчTD>dzKvC:bT3, o^jݧY@9Ӽ+jYEޘ z34@e]BVOf  [ &hW+o}|/0@H( ,6*aW5Tq1Kc70͟.")QzTrPX0 L*Osͽ'~\BN䠞 ?}|Z.=n.b:\(XO4c,0ќ:=:ytAF9aA@t%jE:,wB~dۺQr^(Zq5&:EK4fmƁw^zY)egfę&XVaK* ԊL=H\rл>4#5xy)n)q4 L*OhxI|LB*N^S|J2nUC!‹?_C,,"st0 (hHĤRVBzף7u\9jZnıOc*(x9eǛTPj<wό&G 9HzQp/EJEӫ ࿋J4b%&#úZٶx<}Naޱ+ `Akf%焔8>\wӨ^`ěnb C\"JS5aDdD % Lwͦ'oT_􅝴qNYNUvvBM 3yA5^ړ3 bIy)pScb]0Fhdԣwxkuڙx(~^[$-ͬUB x]q6^61 P-$򻰉rK⹩ P 0:1%zxܥ)y.o .ZqeƍA||Îx= -V7|<95"{:ym(.7]69g nlLl~h=\oOC 9>7C{ܺϱ(Dge< z48 kǛU}Ն5AVs- +uWKȦ@$dX չaYh"̍ @\a!Lhb:1H' ;?ߕ09D;S^[=6jmdo|`Qw6zٛJ xX`0Z;魘 @؂gOjhE_w:`FgW_,7t u#G/׿Zq G0őyMrp !SޔCQ/"࢚0r2K4?5xힰ'h(1!y|?[|D6%'23z6ව3X?;?9coU /,HA u] (1@v5Qv.Oh} fZ>0s!߁V}0`M:v(3b0Y)^N< /WG~P1z6# b OBV2[345+E<9r!~ 3!U잝YV#c~n0^cse8U!K_{ Z*il\C y (4W4j`B{,QZ*pYG@wTh? |'[fZl-"7"&ތBx2C8w#_$OSLpKb.Beeyrwz.:8En ;џ _-![ tn}Gqf.&_޵s)R?9~>VJ-z|.MM,&jZ` ?S~:7Owb ;O4T.q6BtSr l!a [w|mvMQ_Oc"8Ɇer@nL'މKSӚSzB֔vvON5n)eŜ<|iH8+>؀H|48mt=q6tn7uv鑰)';r5tq*DPe{(r4IE^~Ц1蛰To緄~a(hʇ1ma $qtF_=l.x`5&w &!<-3?n.D iNQWU e u[;=EN)_OYI֦M8~%4=#^!)lЙUb@xs=[n)3v>e2hmM]To\M`OLܱEƋ HAS JwGEP yKݞaX]\Ù+53C+I$y߾㝗eE/U3T)Ul!~oiQZQ7V3V-mz(lAX+/tM)J%*ȑ6 YmZmv 0 W3n ~:xuri@,{#695$^Z#'._\= 32XW$B!]p&Uxjfji h,!%%GD=47`yj|9Jޕ ),IUX\:fJu0ir<"? fT;\w{#,2>Lg 4QH ƹ]>myӯ-ǸXZai;>v#鬰3kHw;ґ*s }X|fvvoonpbP`|J̝ުʰtY}TH1 Wg!dS3Dpּg!BqSDZ-}3M䃥~=D|zezVT_bMZE,2cQyx1_Ć;Jo~g1͞$ߞu]acu_(]}T6L`R2ܰ?Q^q`i.ϬiUF:?})N 1,kX}Q4*7: q*"_YlLEmFx x[Ƈ_ }Mr搐鳳NIrYTm^cy[~C[ 3ÐGre3SCgJi , Y:@ڟ_/ηp& ?E~}pcRa4wiρZ[.cs١ҐX#2,V ;ĢC9,@(OWF A&*%@&J6f#1 1d EWd)?}Ebm-KG\nkъmJU;q[_M]K-CX-HC H4 "yPNCT "fB=BY$nn1X ]:bzkDAt;-<2X/l8b8l;r'Aw84Dw(4XMw,K*vyZ:74WhXU:74Wx镏‹3OU?}h'Wvu5%&?!̗0X0*(kض!A; ⠯VlNVD |[V9W)@)'cȘ ViDZqOݪyKL{ʯ˄L1j aq:j@ymm"]u@ZM8!x,6"07jBV/)= P/0eyy!|H_je vDf9e|VHUnS:] f`(.(5?O)Gur<ϘLP.!vH/W^.#vTJ.k!Y>sMM'`"t\ RV zrc Z+^`aCpCHZTDVWg}$+ ف9füI2L 1>dc^6NAjy6겊]/Z7(J"wތ$ac)П{ltK_d[9coR[#k:xKlHFz(S 'v%,y^qG\qŞ\;qvWvǓ]GCEʠܳm4-`60rHFQcyy+3=V`\,hnMW@r4U TDbW"D0ˊuB9/$^Y 2oH.3pZG:^"[;I´\YFB?fy(]gRjxۯJ >^;5c"{j:i%\~%V!DӽŞ$d-Q&oV5 7AMAjzk ٛR$6`39n-$D6aKՉ%xft_k_p짷 YksүMJ .]_F&Jda zŅf#ibL$BWid8IRfس+<}羞j 4VUPAMMI -StR[k, ,JTS[š4*Tj<|2VgƤut:H~E >Ne+LzYIPjQ&K|Poj™R|]\[ͥ9b_Տ{37xT: nVzܔO?U.nPg@ysOjȒ[ǜn??P>$(sۏk[-jUAx@}m@R˪lQJA"5`0p#NpjW矏WBfИBsAw6 7 N3b%llevagj<x: y𔀰 ׍$yr=|wM1420HTociSX W\UICJʒ'3c [n?\n.2ޣ0YĒ2]g{UJUнA8xfO2^+?밖˴0SmOBD;U$P\ w.! +J J0iQ^WI&|i?iZMlO={\Y ˆ=`Ű6Ab dkŪQԑҲvߖK_ltj)֟K@̆L;];:U@DCOCz8VvcWXC)}p5&O#k mQp1?5>Q875|*-BQD`-" Aw6mq sc43ғJu2vZ(?=DyMv?\: >:.]#v~!6/~$ j SnF-x)/u&נmQ| zĴuc`NwBax%EM&GZl9WKRߛY}Q`@a_AӏgΜG܋;`a`?Ti =AM:zB|CgMM/N-fYgjyb yx[b2çkL`'E,݀T&Keߝobs-z@D~[1LB4 "^ώK˞&j ogÌRvL+t/T~@ţ@ǒƀps"چjJU;~qpkZ{}Zt*uΉ V]K8LwT +aqˆJ~8D[Pzd#oK,NG I꼪dZ3>whŇOoqY`<<`Umrd#/])o*ԕ?g&T~M*-4+keI¡®xVrEBRf=LnpLd4 `8%\7BAhwG.~RW؏}2hVׁUk53]Z5icE*\j|0NUdE 2vF Q4HN,5%}|J}|kA{K.~x^}*x39Np'F?o5z]@7e<\9I4VNo~2s]G5{)۝ I$L) 4Nq=Z\N-: (@Eɭvlvaޚu b'We ā*N0 Ő*V:2Z L0+TʒT@OU;C[GZ??1aXVgyA|+ 9d8yyC飽8JLW Kl2rotn 5CdljM={Yy0YtA٤iI-cT̾5*2',,)ʅЅSX,\W7fT7ʺBL Q'BNު{0ei۰tPvZ A5PiZ#JX%S?=D_zBz]]Y8E)xO8Jʫߟ_%cЈ֞e2 J.ۜ?&=op+,gZ]҈TܪC1O_+7♹w-cvQ]m1 ^D|K67o2O_ {k6$CBW1&&8wT\o,>/#Uy``WuS~l8ֵ^mH@yjȠu+QPP 6Ta#pNcls>5Z# iFek'{,pB-3C8J\h{2@ ^ǎg 47P2ju{_P)G>@Ùd5;c |_/{EBώMh%np *`MJN\C"fB,\%$29'[%+p%)wW_7>?+U7'U WIvTl7?ru$OC 1b(Z=r褬:ќJX)Q)q LkUtaz+a;G?r({m:Y%23m#7Lsl aIe>V3F`7cv4ef$hhر'  е`Gۚ;COTB4Y{|3Q:D>LuFqIb?,8%EHXI{/E /.@4hu]uw;\z/?Nw^M@m5JBDD ͩn6!@*0uw6DUB_-\zk,ӆل~K( &[52eݔyQBckAJvc6:>A;WtSQV`PQD㉸B{SVۇyNK@2񮳒%f 5+l#fhgulIƠ 6ʍ:9#2ƣ/z8 ^z8F bLA I? Z#椲ce MXtu!|ݘO[.m9kE \ٮX5*ox0kPPj:|Qf H8@ee[qJ!&߸`KR`@Kk=F~17l/TY۟P"ET& >Q NJ`tӰ$AYuѣ3F/%?%U ׇ5*P/5x,t 4C~^^1/@_?JJ%Jܴ@1 er݄%F+4 5SdS-) 2]A#ӈued;*KUhru#sYh-IT "0΂HjM!:D5Q£Kv8QNLKcLϥ Ͱc YMH/?4NF6g pU[~J0- oW/Ujn,{Ԫ̖tL\$MKPX'F(r$Œ`*}TM^Nx;G^{;*b7~]BP4MhD낟;.<<qk 7)xr 2ai[͟U)+{>Kg>4jspVnCD:8J}R6l8l2nPXVb%T7mpss3̝2~^ֈ7X:G4}aTTe@-U"Vlmb)Gi$ CA֙ꩿ-vq$u M4AfHhK~Y]~Q:,2F""iJ< _ocxjH=N^ՑPsL`uD=Iiv֢Z#*z%,2 #:Testaq˳9kK{ AJ9}_J9 tq(A!ͪoOX}.9ǭ^/:ʗI7ew*6p楈.5a#y@[sJߞ O{MG|,[yMGJuZp-\g:1k$kCjܻʄih,&/>9u2 E:7霈!fn'>yE_;԰ɱ; y^eU\:ڦX?E!qS?[,=x&B#?=,?%XɪSyhSCw#oukN$NY)J. BN:q-)(&kkr Ehޑ;9'sellrO\BevF[= 3ϡ[̋o/:{J["5vr͇gPyפNiA0b4 7 ]k NtsȆ P2Bb'"6|6w%ל hlj`@#Hl))mj @ h}Ό*t6Bp 4l{@jlqЗC#/HXoa|$B|Ok9t_2!c _w'Ul;&0Ow\ |ihh5}TnC ?퓫&vNCO1KV$q*qz^iP/x$=#i\ *89NJqCՄ[奏C} p*8݆EΟ"<*yIأPмsxr Üg;DI/s_nf:*N'h0=jmWYe]O5A S9qFW#M} Q˪G4hb +}>Fe G!258ĴAg=7O; aLﳯ$[3˹q>IqEٺO}Ӧ/i]>~(Z)WI6B mså^[IL w1{OBHVV нv׶˦\̕4=x5̧hj_C=XwRbB_ A@rr%S%GpFyyF*N?Cg:t҉U9hρH^WևZ#橖fsO`j{U%B贑. 9pk9sx^",WY&}KXjz/V[2WܜOc_mW{H .8xr&weJT ݩB4/֧7Ttb3#̧ƾDo|"\R<}(|',F8-Hny1=9/rPd)wpZP= ԓӝ:RUHԚ})ܟ-h0߶>TO)kܗ2VsG(M${y^e=&DʼnK^֎.ꎣfڗa)YQ f4A⯈hF q놼`+L,6Z7%\#qRPĿ;$_; ]C)n{t)ɴV{e>=4q/^5[K`)]=mػ &Qx ¡ KϤcDgP=Ol. PDϘBEd$P`fXc@/UzTc6\h@5B^f' hu1uslZoKCT šK3^sƄe#NizB2#/ZLo1tIm%ٶcyKvz7ZGU2 :OΞyumthZPW lF<9[& `|muS"Ab2ʧ:\Rl5);]ZF'%PSG;{3+]ʾe=4%Iҹ>iy-QJhUWװmb={k'ѹ'K׋$ZF-r3;\ǞB])^q{H$7(=+Ynݎ+ѥMLma| ԷգiN$kW5Vk^6=oU@ňg |od9rU.] K'Mok՟+(9ϸ2)ѹ,U&vj. &W<<&yAsQghroZ2L۸YNQyz A<Y= `" _rosq&ey(y$OǕ̹tGSJĕQipv #e ?i%z}wpE GFNM%а 2Wy=q(bq5B9a۹ǫq@5lrTY/ [y+y=O'FiD; ^;l KwnΖӝlle7%8m$`RM]9d}WyTDԫ{(H\ P5@P2iAzO'Co&b TqboF ܒ~P"QAsZHt߸?zC"?ha#;y&J,9ZT'u0*]pEKG.4Ѐ aG7{60ND3`%+U(gKD؈ {RY{6غyY=Mq T|JpU|zE:qU"'xb a0Q+mzc#εP>u/ m~N#pMBt+ZH4 _P&7 NH=^8#n:q @a3- 8Baq5 Ƃ E Oky9g8.J +ziCƼ="o kD} fJ'HQq$ioς^Ј,MVt/ oFTQy?3B͉ut9ij2QsjLDU5@RU^^-% &OJ!;<f¼-Z"-Sqe/FO`ʢq(*j|7j K<6ILp-nO8S  cq;V CɌvh 2wxъl.qerh'-~n -o¤1RƠ\P!>J5LDDU[RtVʩݒ#% Ҩ} uvbm "~E\J:{WtitG*y rFP-d6ˍ `a[C:Kȋ(օf>&{ |{" @_;kЭ1E^wez4Zt]}\3qR' yۤI`#b'E PIgڷ|n1J-0Mr:QOԽY[$'poQ,supƹG z9ή7S,nNH7m%p{C?㿏S}>aCw7?X\FRDB"@᫉#w|.ZJ\Y&Sc\ǀd"2~e`)KkN_+2^ZH4*$/ӴjpȚ^-Gx`GCF&}7pgo->o X#[Y-<3M|υS}G rS\-Y7IYˡokOȉtB pR'1L{ÇR'hU ,©U7,Њ@n<1ŚeixHIT 7v#.x `j`3kbndA=mnulTXQd~^۴ƶʟ!ecAY]d˝B-9~z!r/_[{wq[_Su2JE%e4u@´rS9G{VO>ȞȎ(Q4%O-WEul koE\9_f Yq ##凂pB)0̎\k@ڜE2d3JsjܸPwiL7wͱB'/ \|`DF5B/ lPF>.-U [*h-AKlZ6#ی穚W@ֵMOE!7__nzᕯ@ 7DD4aa&B0#0kO1`Nbw#[;.GsҗPҸjKKXO*ݴK`d0r7|]X*˸Ԅ1Z9!w봍 b0v)杜lg#r ty:è{ 8 Hs}nRCQSBQhdb҇ Bsjskܧ{.m C0WkEs>ҦۛDB{1u1.&tW!2 @SX9CÆ eGa)2ظ0Ěb$! NAcpVQXїF:'`L*b9Gt` |Qc;K,5)&ǨaԂTuvG UIܲh} N:׉E!$#/z۶7 gu(Z aB1zr&! }l01}bYoA DaqΟǁǧrzXƥ i7T8*V`3"pNNq6ɊY0| ]iHہJΛRWѺ8F͈XV]8?MCHt};eqigx.Ht!2Ƃ={VeʬI b![qzs*cq*Cî i!qf4j4@tjzn4Tڽgrw04OG=c弄|hӌ>Փ*$(Պcmڞi\}SRf2~C{ld3x6LjJNoI(HAiP!Ċ+P+fyG3R4K79xlH ݓ΁P-]@i[E^~%lV«U:1۱ &cPch^xI8PuUW3Gb6D-e`ƀ0ĖAoiB&A+1*>ge"=}࢙K>]]!HA1=O׍ ~@KZ0kCԮ\SQd6}\cCh}LnZ}"5vFגau ~0b*4&_41~i쪱K'z7 V Q9CWT` Mg:JEFLz:b} f`!4 @O)hY6:^zrziӘS,A8t$mPbۣ璙ƫY:7E1'1GkDu~Z>qѸ|P_$iIA"ȵ\mcmÄ dӹc!Rf/ AP`6'/ ͟\{ W6DO@0sSۻ0ztîZ]??LtEK7I4٪Vy6a[TrFjT B4/uR#HEM]P6Kϼ3 CA{7OT@MCj3μx:fd T gM>ʟ ZQ&Z2»={QG=^m֖z~]RtGLADޡmh²qTD"[ZIbJxOv}—4}tw`7>mn1V(K-\m#6QN:EYߏCߖ ]_ҩ(Zwuv՘ӔYUq:Mn֩')b nzfGبmKF:i2%*_i>şiƥ6F,?N.K);m-³Mf /Vg'=I49 y&Y.HiI.*(`cS;QYkQ$[cC4_?_]kWnsKl_r ;N\\Ppl{G2C_TR`BE=Ϳ^n.,$#\S̀8¶gX2OrXGcuMXtİ>mX I-]h8.u1.);Vve"dK{~hIw }0l6aǬHI-9ǿu珬Uqo<;|/:t;_}oodƂ#E-rvhE | q2!m:tf|{,~k[ucA.TuOKW6m8|DRІÌwomt`AObCPl ~G.c/9uKN?t [12T2>L>5ݧ vLnFyJ۰[ѝM;Qݳ:wT3t-~>oa9=^_^wmVdmi5ꕒ((1Kc$l'18uW24=hu6Zf$#2<}O+"yi4C,9f$s&!ؼm[O2O7K*xoU8)7x%;U9|qؽ鿘'S^;^9-mjI%dƩ0{,S4?F"G:KIxA :m EycTz M.N#+|ÿf-hG'c.Cʧ[~.(X: r$?" jǬ2ۜ =!K,r+Ѓ:}i;W 4Ee}|Rm[g"Bp- 6;1V"v?'z9Ņ<:}«tꑋ_2Ƞ>Ft#ؾ]_`\aٞ۷Bqd[!ɲEԷ+{q &6XO,z3T<:LAM_ ,!HCk[2oXҹa'TʈtLt4+r5deʕδ徖`[hK0{_I |d!om2!cB!A]R:M7RRnrd. ؈uP_ell KX7iJqhރF;6DˁJ6!-TI*=JqosG5CvOv^6S\jf3>mp=0=2Koblv/GyY:;GKMEl:+7e :-c;"{Um0_.83plll˧rFsԐlӸ* "dƛ>6VQҾ7C& vW!Zw0 nV 1d.voc8G@nȡq'bmnA3;b @5G_JZID!< /܁000v3 Џ䅚!O,ZLbego$6-{b6UQzK|Bo(Ľ}.^6xCZM+->6S=zmDU#f5V,_nocn*T]շFLVqh;=*&gc"0N\d{oe`[Y2 |u)*R.#S Rå?)ݾN H˒`j x0Eߵ|~$tB6^ GM}Rն3L ]D\Chx|bfZ*;ӕL(0u Ou0y+nr*F+JIa0r xfGvjn8SŌ9Ix9/cq )qzН3OY_4WcxQFJCIQjzOrcWg#)^Ύ\4u~qYݨQ%5_i393ʤ0K< =S 0LfW؝֬F^xܨtqws>nׁ~W-M`ب%j}<>,|TLQwg^( VYv=='  &ũj:ڒWo͏f֏ˉLt2j|So fi /W`Z=h'rjT'ِ U]9g[g ^=~UPF =*'=,Nόs5R՜lal@%9a= rDW&Sg QbL{%Uhs4 /'LFzjgGj9n\ck`Jχgd4D&{e+@ڧ_7SUU63{}\X\`$ٟncٖ^P0w>K2 +sQ.cA]BӵEWu2Kͷ1q3bɴm `Ԡ%㡙|ǚ{ʬ*?މ"iIѠ?3D% n 6U+Lq'n-Yr{TEe@']9Sa³f䤀Ѡ H3r:F\NwL>QP"<⭃ {O XGej- OGB+?Či=ŧ٨T-]3.V ;Zvl{+> ^WS$yʅcqc=nOTYL15ώ5aEm[{%Lzam|9͟OM֕ ^o\ /XUó[%LlnN Y/v@x1*y?6R4_)@XԢkq H9n_>R r4 [}֠o 7ޅē7U^b1ue^IN]XDi>1t0JjH%zV_ ?v۰|/[^/:26Eh ߡ:!f?vG (pO·YCO>Ub.wb%tpBN@Kwm9V#l,~$``0b7Nv\_^6 m<%c|pUY2B VD$fGL)U~T>IctJ{OUҚ<1a:\s~F`Cc`U~&> yS b*bI^\`:.Ծ#5!3{b;ûr5'S{2ιiqIi7C37%_Y ~akbUkQ1T-݆F~t^ cxX{A:=M~p?_IWu;RBk`DhR*|"}d Sۅp,r-^R4WZU9C 0f(,k6ȸ(':i拣q)RuJpj:(6vyԽ>ؒ/b1OH7H:kV8jb5z匽dzV>e:qñS,^_j03:L6,e 5߬GL}dю@:"s6L xUߩR.p\}#O1߷7w||%pb_->MPέ]mhHX KACMنbBdUV"Ʌ !6K3x'D%uN|GuUr՞J5ѩ߇ö.sQ{Xc%89[HX*M̫5'7}n~7G~#|̩V'rFmgTd iR-?ݢ|fB,_g~^jۜ8.wt\W7XcCINlTuo'k-c87z7:ًz>ՆdAu2&+7j=n=mo-Zxvj_&𕩸".L!㗓OE}w2—Ў}þ haV]B<Phd9Ƹ2=/2°%hBĂ} FN{Ǻ4fFldv =!?PU8B^ޡ%T9{k4)IV 3XV"[A'dq+C 7anCn߻&M~́]wUE -DCNwEIq Mޛ%Q呶鴁葩QzfT%pS\hkxaYz,@"_qK̐*~`ƹ8ˇ7Q e [NHv;m\E2ͬpЯ90feƀ)|u߯]QQhaEwR^U6m$ck wVy71 7Mk *9F4Ϲ36G[A"T&͞}Zi& p & dtbz$ /? ;@sTcֹ Buw~RS?p9Xl+۽T0"k͋WDaOz5e5NWP"q܀3eb˲zmB{Q qOÙۧiGJ. )0 _\ƺv57953<Щ]BQTB;cw'T(~:\*dXK0R>qgC;#`iBs@ƼS1m/+ha".̹bu!YB7MdAp㸷Ss3Vpjv֪$6v{ йHFT.=0u=}8ѐjBbC(Pسa*yMHW9rAjɊ,)W=9=8WЗ!PcWL;obqo)twŹDR'{nk%:(-Xu H&sU=z:&岝 zFUA_쒿Q=6oǿ!^>-7Wƿ(;?WI/CS ML"`3 `?{qoKxI!Xr[CuŽaHq(Q߰\ҥF=LYMidpcqF\ L==VwERcq;XZD\$BdxJd@K$M2P{wH({0Ȃ%9Ŵj-=~$&^^Q+:PdSvWBb: ɞT '-!5ĈAol=w҆.cVtm :LF?4Ir*V˓:b[nA A(?M\.9=lK Touu9qE'2O:YGFY݈}Uo rĥ=Ufۉ !W=S x"Ip. GdcAFt+g˔g{1Z2,>ۂ"|mGLB[vv)ujo<1K0w]YOvqލsEثG#/)~p:9] CM=ߛ>=d»c$Ui9^LJ+bXcC@HͷX0LY]3FV؃ѫǃ!䭘X9Ǫű5yK}#XL&M|x@ &, ڧVk:jl2'3F-F~A2r3BՏ*ZP\F'`:LQkꕍv:Yw>K!x?PFM7gQ1ӎfr'ʁ݁YNN:8b<o 4ƌsog{ˑRsŜ5!=B~\ I:{?JKMK7 ԗ):PE* jAkmLfѸ RB $,jSGSmɖF`HJ;D24 ٭7grRҹ/y)|{LԌ͉MF̓BGONv #?ѱD%.L%xȻ*sL,o|jTyXĩklJ3IhR-Tt>b*O˗+a[M>M< =aQW sd[#mfuž`-8 ˶X>i;`6!qiB]9}['5giY ei7dπG$_x8!ls+Fr쯌Ȉ~W3n:cմ +@+jr hqxh{!w n@q?0v3/fUHJM&_;N؅~6>u}|+W{0rcDPXK!Xajіs"*~{eU&/$~u+}L$]>7~'U(Q{]K{*Rfa}E"kdѿL^>L*47$DawgJߌ,nq4Z23K#_?1GxS,@ˋM/UJuUhc=bx h z/\:GWs8a#c2ܒp&gT, 3~[ȩwm PK-^6KE3w}t\y z)dEw=$,IUbߴ~1(ʩ~lw~xY kGs_RLǬKrإ8pvF * ߞpBPMUJƟ"3#[/flrHOq;[Wϴ6hJ6K@O1MXqdN_/>~He:iSClq%9Ptw_2T8ڄ/%Ia8~J1 m!ni ^|][^̀a0c?`3,$T!k79VΨq ' e8Maoμ4"5^v,̰ݘ:Cd,9Iם!;o%\(׼W:mܳB[VMrwOb!a|_R3  -MY)Y* 4TY uBԙXK5`R ]?k7?v67ostĭ;_tn"O/׬ܭ@6,UтN2O4=} YdR^$?8;GŮ6/GE^gmi\o=8{EPë^ AM򈳉G+%BwFpXNfޟZn]֠D4J/k&.+'d|r|'hnnr`;6-!EV>X 8F3>$R/19Ā7C'C}ӫ>d/Bu,9c'f7+SAN sÍΨO7J}YO-f0ً<m`zo_}!d,c;U,N> ߯jbw k_-c _|7qf 7O=ʜ^}E `{Y⻎5(06 o c&'=޺8sOd؋dZ h,-/81 y /x:)8{!Y=s1Ge[JJPnətPy@G3nV8B즲.N.8">#2vqljmAJ06 rV},gw>Ar2fzC4XS]Ŏ ?[@6fMM("s"'L Hݴb)r{c8Q:?Ŀ~jȽL]<}XׁIv:ҝLp |Ǝ_SW ν="2yP D,VD\$* W U8(c9vV#0e~6!.d@M*.b;qžm:hhl'Na:LIiGb$h/5PL9M &Fʘ<3x3Հ˛߳ b7-[JB==Ax#U1;ܫ5V1K0ʱL폗|O|sЪ35l޽i/۸˘[q[dR'V{?msfأ?םj bFcG0ǟ^yl4:G[sg羕ldTWt6Fۖs+he^*z,<Ψ!Ё;o_!8-Ƈsj {3]hR@A@@ 2@ "O.%xν5t)?F5lՋO{L@@8ᜫ>%B_RL'd/>pz*kDO@-|]tJkAК *?#/p,v`> fޠO~M̶aPIUGOkU j(ו7綞8|-ũ~j%{f#~e& ~a߀ï(96>`6B{7 %pj`pr^z to6\tHi9ؓ0MAW3C9w8,p1a֌DOjHCq.8V˾@x4/(aHۅD%3Qd Q9\2GزR;ߍ]3QhpA+ɭY>tP--sNjL:.HܻB‚􎉛+ !s.GŁ}\WռVk/nceGz=4YB2-m;q5Յ$ZeikIBfjŒE;ocԛh#U{?HIxR:p=֖f 51,SgÞ>z)pPrЉdb%٨ ؈=pfĹҹDzQ)82hn_B1lgͰjIhdiϼ\Gi^* -^`vʑDaN]F"Պ#%YPҚ/,fϗEdu}mݱ;P`?xj Xͧw`72Ȏ0\L]izwm!|8zNUnp=N{Z 7bEl9mLTsjQO(1PedTm fJ2h<>k 7GCp;(zYx2So?` "(_SpUGpne[Yg VGNK=wf;Wo>i"yfwPmO58| c#q@R9I议ըοDK, ƅ)B `" ACTA-z\P]CI?pT&Ul<`M9 ] ȳ |K[ "t{-qDzIlǰ $exiAA龏;}_Q5(k SZ.Ǎ7pI hh5׌݅;PlYkesC{Շj(UE.L GH1?tMEGN0BG\}^D2פB0~+v3v{[w׮T@j~^:]RuԨ/THe^8CFt'̄h=rN P|a׋z]lbCBdvg*@U"7kóu )TKjse%vIj)" h}Ɋɲr=UK[_{=۴x`5h#6޺\܄QEw {#'x^+elAvW(؄a3(!GhV.-[|6Q}k :B9M:uoӼM!T:GK֕ÐA͉%ߺtq3ґh<,wX$@#4tL36fǵ!ql!vg`m-vA%rTS*t&벛(AMYsplz[N,Ejn/}DEA;M"K>2m1` ^^֙͘7a12 ZMց4j" (.߼R~ 3k1@ sPR4C刕L8#7QD.E7=ZnQ38Ԃ;{~ L>xܢ-svuoHK~m KA?K %ǺVM%Hb-(,a)m9/+3[.1+5 xn,f#({OpBR.S  -O|ZVv@?ml SwHhn"uA)*}|Cř!i3? 3]g7 )=!⹨sڢ|'pq_Ȑ\ߥJPcw ?7Z+ĄВk_ ԅkxy[W&=:aI1vsݙBٹۮr'ЮF_MbQ"p] B8;M&jg(4!Iߵ\l1pVrhrg Hd_4+)TNfR2-G!lR&f̩oBQgժXCշdԕ e*KٔC ^A?7JLTf̚[(`pÇO-b?Ilz~Fl._(ʕjhڝn?ƳlXXowãcCrJjZg2aZz~ „2.r)+.;y_`E+^"d)e\pQ<^:.XwЊtk'bLamQ{,p"D!:Fٓ[Y}gDko[%Kxo<_(ʕI5Щ~'& nT`۹(@TP!W ğQňuF@Xs*탰us0t,`L6 ?~/_~xj|33g͞cY/w ]K.+ZblȞݳ~W $e98N [p/8hD=N (ߗө3Ll@~3$n+֍ʕjhڝnnn  GxKҙl._(ʕjQU &Դj#go694H@0HaCGSPRQ30?F ,^_? *˩?eMA+>8Tjb=h BSޏ>G0bsO7Q#Z?Q=.8K*WD¸'S%&{B*ml=U0 *!՘m1{B*mlNP>gY,PpPPv-.>8TǕTe:`6"LcӁ3˛79鼠GOʢU+Ӣc/:) ,(3M#NC6*-Ϡ nc P5}xɢ6U lj%㎁`.>N/'@#- QI3]{0DIu4cb/u_*v/Ӷ:M-5>qaH(_PkimYXХ{]QwB ,[(Kf;Z["v-Vءpe1%Mܙ_;&>x)enCWmd~n9؎`z.l%I MPČUd쵛O8pxq1Ļ╴@PRC34[h*B"^p[s@I hB9fy0ϸ@ Déjmd%|N5:Iflg>l h>j̦(HZk^\*++ƞ9nK[: :qgT22K?d\="Lesm(0K;P=!660S֡|0{B*mlaBT\ „2 @ eRics]ʸ'z eAٗH-hЙaoWzVxbzne a]2WxX:@>Npx? ܙl=w u/(hl־ӵ{cؘcmFԝs!sy-rsya^o(3sy鍯5Y$/鷎W~=Fwfmݿݟ*lf[nЉVV=[3ouU~zZP󑖻_Z&V;Yym6ݵϷYl}ѮR6퇵_~v^#AǬS3Ԏ=[ni\O:ts;/Weog~w8`C>fh䰑_&tMjec,O~6>uBmSn2d{:~gn>f gL5ė`oZ%>ܑ |9>\Oh}dVyٕ/Ws9w#:-~U7HJgyKfm+ڽlȤ-AU:IDS" !q7|q,b!7` obXy\Vw9d*"`(?FLeQJj:y<̋Η<*Ox 0Pa<#aca< aLI03M4gy>]3lj̄xfٜ_Wx>s5x]Ę"#fp쒕1EnQWctĜ91?&MIcd1dEL6|>+1V>on/7Ĕs QS)F\k";T~1\K]Q2>Cc_a3!c8@r@4N'3 f "̂c|Vp{}>?W:1 X_(2bH! daa.K6s25 1緹$f-Ce2bCcu !1q5Dx'ĨkYFNG'Oq/c el(EW>K;WjVjk55j>^g 3jWmU2uY[=Ǖ^8rUUD׹p,[,:c8@h비(@k4AQ_ m ; ɨ/Zˢ%<[H> v^hW:C{@O>A@x`Ca Q0q888O\1>&dS)`4O3|YYL3 Lx{y^Y<_bM^+*\xq׸\{>#:\:\:\:\:\:\:\H ȷ6%+pE N2H:"z0FKēqId1KD|GO󹖮fWU^j^>_%ll5|[/j+%э`Eң. 9HfdCDk8f Yކe@gs!8 G(#f@j|ÃZ@[h<t.AwATx:2:2:2:2:2:2:?Ort9~'y3lvn{ p18'$8 g,\4H YmȖȅ<(1 .Fq7xP >ePP W\*PAlD@DC f:PA}hT n.5 p wA15xfp?X`Bpl o3yP >CB2uMpujQ!#! f:P an7Bch7A,Rc@[nٱFh M _VsKuR5ب(TC(+I&7ʝzߨMw@= &:tHWat FHa4VCɵ2茚1S"J~q= p\;JߕtϣϣBoq#\}WFٙ3=aۙqfQY^I3)L>C/_Nٍ޳ۋl/_:It֌1AQG`$g:s±fg803fl[3^Čf.~uױ_~;uQώSώSNRNRNRNRNRNRώSώSώSώSώSώSώSώSώ+~_Z~.k&~we~.~~NrE~x?\/>]ۯ3,XVg+볕le}>[YFTs֞ rt8zfW ĝvѮj)D(x5؃&OIx@c=ֈ-!h`"L0i4<t̄Y0^YBϪJ䴡I'eԗ=J@+d?a @G]-GLEc;RoKOIOߖ-=}[zho?Z[A k9++ ףHDIF&pA @Hr$ɩah m-rXg"%߈nCE!>Ak8=`0 0 x׎8h rq,'L1^~[ d d d xf%e  1r `!Mx X*a\*/wTa5tz{q-Wɯ IrFU(  WS Erؓ? '{%'S5R1F0LXջ/J"4AZܧ<{{{{(wD|%k0^2΂qrr"M[XZ"G-6G-C˭zYlCD[h˩ ɤ=T$*w;ʝDNr'QIT$*w;ʝDNr'QIT$*w;ʝDNr'QIT$*w;ʝDzb۰ V80pLzA3 06A{@G tnz50~ Tu:j@NZ'P Tu:AwC8 8p R4p 2"d˩Z .' ; 4sڮWsA2(*>SM Q 1?8fTA}h y nnIw[Lmp;h{'ǻ NN65xfp?;O`5|5U/9nhkU ~ri]^~8#pq8'i8gyip2! ..C6@\nʃ| '&^d@ x| @KMeP!3UUס Aʗ^6Gȷ͑`3B 9[7rl M&( ;!Xvb 614؛ *9K_kGGԾrz ujT[鹯"]^R8YwpZΚM]̙ }E=zІfjY*"5ԭsԭԭ4:F'"WUP'GD|? gV%{{w{w{=ɽɽ6fwi=zXc zZVs7q۸O7w 3f|3cn.fob3fbvf ;0C|cua"3 3evn;U^Aϡp;f\=gSK]\Vؗ4 M}mE>x_OC~'+y)˵:"z?0fMV&33kKX'Ugf8Q<Ϻԥoo`}~f}Qy:Ry:Qy:Qy:D5"0 gހ+Oa- e-Z֜Usn9źgY[kwv7?&,/nϸce{2uPOKd*wrvQcQ=B̬3k1Fj*eYhh Cea8Y2BJ|k W .Ry̜&oل;Q-Lga6e rQNF3_.%v3n`UfFg4F<ƈQ(E!e #gF>G2#~FV!oe2gFwih`TmʨΨ:avR6C#e1yFHIFHg#H|祌Z:|J*\sv5P*8´Ob.8+Y,mm}!93krRYř9;D>Sgq r#j7/oăx Dsb <4g WUxJ1Z 73 mbCG񤡓c̱ GF`1GXe!fƊq0Y4L}kAaOP'( }>AaOP'(B YpAz =\ Az =\jSFWFWFWFW&.j{' iɴddZCa 3~'hc)^LC# ]ɄQdB[2 p3n =L 1hݦO=Vky<ܛ'1i6ZdgG5G8gr'8b<#~y/}6.KR8T<CP8R<#H8R<#H8R<,pk =Έۃ88N<88N<88N<8dqAƝ<{o/q\yW~-}3k]^zq'# $lmC9~pvZg3N g993:s(mu?:g륝=ZX w0#f2'2k} ַsCĝIwטܘ:n`癩j ֘ZؘZؘZؘU}]pD0Wr19X%tǁz"0s '1cKE+f*<,XDZqZ885cX885cƭX89ucX89ucX89;kŝZqgw;[ǝmVrgY+UZwq#q!88GCq#q!88盦ARmWf0b0`Xȏ̶tVģ:sn8puD1goCcx'#q՜>:xes1lTUUVWYFOq khz{o{-܏u?p}EO?{όam#1m_חPb"LDs"י>gf>>g"LY"nCzt vo}n9ݥtvN۝G[MF`*<:t SǛ~"oC"OJ~LXK:'ȅDr!\H4撵 pla60[_k^́ghj60cmpVp !00FhH10x`>.1!oCzt~֣G[oC߆t ~6mHې!oC߆tM.OK '?#dɊŬ^҉^F__Sد۷~9?yzWed.ٗX8+DՆ<ş =m&s(dZPmz[].{Ew߻].{Ew߻].{Ew߻].{Ew߻ēzwe `!Mx X>`(c?[\;ƍ`܈Ŭ*Ow].EwEldY̊yX1/nv`,6퀝 v  p18'$8 g,T8 !.B&d%eȆP=T!J :TA5H'"d>|7o䳿g&M>|q;>nJS<)km x3x*]\Qq-'!NʁL)r8<; I&M![m)b`a˲Ȗ>+{<9LFVUd[QzZE8xEObCe4^.3trt =dCO8~LQz:r,{GnQS"[>ނ%򛨥ߖD \$ `*LY1Os|<1</,k^2sx>2GB?8@M#d/\ xOhZLI<~ŦUO֧'#V2o9nmJ%ײT'=R;K!RȾ/J]%RȾdU/K1&Ƶrq,2~q#5|[X2بsUXJHXJ+ ٨ ٨ f@3}>Lh4f@3}>Lh40&$ o`*Le YWB֕u%d] YWB֕u%d] Yg%duVJY:+Yg%duVJY:+Yg%duVJY:+Y1JHXG1|a | ka|_2hlmVJY6+f%۬dlmVJY6+f%۬dlm6F6f#ldlm6F6f#ldlm6F6f#ld[ vl[!:Qs-l+YG iUdJUedXu UFvȮ uO6UMedyzX\kԵlZ6u-VE]˦eSײkUԵlZ6u-M]˦eSײkԵ*Z6u-M]e-njȚu2@Ȕ Sdy+sJW |_)ηsv_)W RJ}%_||ePʹ\+v?)Ov'I~R\O.'gI ~RO'sɹZ~rOαBsa?d~2?)O ?)O ?)O ď?~O?'~ď7~O?q'nč7~O?q'nč7~O?q'nč7~O?'^ċx/~O|$?O|$?O|$?O|$?O|$?O|$?OJ?)OJ?)OJ?)OJ?)OJĆ~bOl ?'6Ć~bOl ?'6Ć~bO?'vĎ;~bO?'vĎ;~bO?'vĎ;~r?~Cq>RM24u̺DVQd/dlMN|$D&ы.YL] ^o++[IԘfDm$zVBMD$Pcgof&!fRL0+33Bfbլ̦ٸܶ1+Ett2"fc&v܄ju\((V7'Ja79ĕ.&M\1+&&V(.z1.} ],$bYҙi֥ٜY2P*P*p$簆#49rtG&÷|l+lH&."师IE"V\ʚ师u/gq+.bpt"H!qt"H!qt"%s\?%s\?%s\?%s\?%s\?%s\?%s~ dwA;~$dwNI;~'$dwNI;~'$dwNI;~'oE%V4*d췢;PO'ߊ:OPP{J[m3tkF1/\ Xp .`,\ Xp .`,\ 2p \ 2p \ 2p \ 2p \ 2p \ 2p \ 䈗(.;|:KdJ&(_%߶j_Qlq}LeJG~P뿯p/Ftt: jVAøa\Sq=a8F ]wqs%2,F*TQ*UTJURE*Q*QQJPQjTjJPQJPQM,5CE5*Q*5CfTըFE5*QQjTTըFE5*QQjTTըFe7mDt#MR+߲m -%n1! >eiDڇe;b_ɩD~@'r;VkZ&Q GQ<-O22rG!9#|헠XղsKO6ĸ-$sQQn8 +SNRcI{xGh|h|h|h|h|h|h|h|h|h|h|h|atz zkC/Ecz97q4}?Yɫ=?^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY^EY(eUJU*QV%ʪDYľW*b_E쫈}"UľW*b_E쫈}"UľW*b_E쫈}"U_e^)gp*p*a1:Kq*ܿ x>Igq"\/p"\/p"\/_E~_E׷\߂[p} o-׷\߂[p} o-׷\߂[p} o- t>ib ٢<yVECWyWϭq~ k.kJ E҃'9Kr&}e1*wr'vn'~y<_׸!t+D(8]%}%g1Yҝ(݉ҝ܉ʝ܉ʝ܉ʝ܉ʝ܉ʝ܉ʝ܁܁܁܁܁܁܁܁܁܁܁܁܁<ʃ<ʃ<ʃ<ʃ<DX4m }=V!yռFԴs]g`2˖Wڵ'9M!>{tvB-F-->Ed􃌾Ņĩl ]8r;2q;*`Ξ'1TbXBWH _!+$~įBWH _!+$~į,`'Kp.T R\*Kp.T R\*Kp.Tōq7]ܸwq.nōq7]ܸwq.nōq7]ܸwq.n4|H< 6 ޡxQeiԋ vpqu MY[kE9^E9^E9^E9^E9^E9^E9^E9A9A9A9A9A9A9A9A9A9A9A9A973_5^J~jUWrYYx;++d}57"*+*+*+*+*+*+*+I{qa a0F0FhH100&Da <Sa^XNuMuHUBU}ME}hH5@5L5}R$A+Ȋh*J }L9jqB}OONUSqdRa|b>VNJX1+c|b>VNJX1+dłX bAV,ȊY +dłX bAV,ȊY +dłX bAV,ȊY +dłh픣rSvN9)G;hU}UȪbUǰsXWX4Vu+:}N Y$d}A>H Y$d}A>H Y$d}A>(FE5Qͤez1)&*ZLDjE%:q:q"BZM/&:DbSLtN1)&:DbSֹ YNۣp 8 N8 h?]f\ށ}້zv\\ p\5WUqt\B.ܦh(%z9Dg"^}uj5 U? W~^{g>_x< Uf,T*PeBY2 Uf,T*PeBY2 Uf,T*PeBY2 UfBTY* Qe!,DUBB.B.B.B.B.B.B.B.B.B.B.B.ݟ-{lN'w#^ގxBPl оk7M)AS4}%LMCF- U{=jAx̻blU/| qЀli7@#}#xTi5$}negso;xݝ8|)^ȑfd9=dCl53Y@ЫD8*!/GүD H7GוrɌH?52kB пD U>uJ%du"/*RZ8Fc3KWTY5Ǐ¨EQ8QCxPeuGZKduYÎ-f,ѲH7M XjS$e+U7a` ?mbLcd4ԬxRlͅ䵬u5f̚}c@暃[%:VAPjPѫz64UzC 5~S{0"4cS?f%?zbXX1ƧUR V Qb&ZHrw؇;2fa3yQeNQon@4[fYr:r 0ᷚv:⯿OU3vyяu'mev>a dQ2FFQ̱J=-w̭-c47E#MէGw_eYe)W*յ.ePmwCt}h壒fe©B4.hvX\݌^%bt/#1uF,a"M͌b"}53N\ǵVd5gfETV&F16V㠸H$J0R5#|\T=Bmd*d38G?ct-Y0u2|>H>F${ "YU߮dpbP^{c#)hU9"LWE!PA%'>[^b[Ep~po2 ԎiV03γ̨3@}Ŭ>̬e3󆾢.{jk̞ff;/RfT*ɿ̦Kw3ȻM]D'y7YeN2Gȿ,f&w󙃢9K}Lbdk\w9w;H*ϋxw"$w B"*JD:CtD V݆PJV}^JY#*楊SŪb!FF*U,D Q^+4*ZM 1v$=)zSwq-.iPݏswiiF"#1ϰCIVg.Hf|!e  Bzs1 YMBVS!CTj4G᪨KĿ/fF@ZvdSh@4 ۊZ dE\Bf,"3X~ _/塀H!魨w9}.GG:3c{E(vJ]y HG@UMU[iEYq+((,"J.{p=\e˞\vBpҫh^EwV+QJ,c%Y PCUoPqWY_s<-mYxm'Y͊eEWSV3V3Vd1+Y̊"H9*+**"*s׋ѧOw}>] kVѤ&U4IPѤVǾ-q?7w$I3q ztM9~b!>4n˹[|U9wUάhMOm ZL\3q *H9 6g y8z4>e&ܝrwVʝ8';S;yk;"3/g̸Ft5 EC'Йc]Y7+ԼGah]RT%\g;:}+wBG[hE~.6ǝhĝwN\ J+z=Dh#ϱ( ΡK(lG]STTw8fꐕ$ع;w#&!6emʸǝb'& 1Q~fA\\܉;s'vNL܉;N*X4`ZϥC&dv3|7ȥNP~+BhSPmn*XZ T\SMm"H6tT gU|up6u+٨Z6wF%QlTUUUUUFQElTUFDx"F就s6V&zp_`eD=z.:.5꯿ATKj QUh9-'H wӮ8bX*YH4ˉf9,'Dh*DSA!tJQ^fe&}nct#{(6ѕ|V48[ .*PżYk= 1|}t_ص_NWWŷ兿oت;xu1.ե LNf|ȵq_8{u-<3^͌WgWuyx~m}b˼%\vNǿ| ϚX)#W~\hȨAF XȈZV>-"X+ga,1O1f c c־1dLU1K75v=CNb幏=D<ڠ(h#f3b6##M\aĨXc F1R;wis~p.Vb%s!}o؆oőnvFKao#v{; K_䛗o\qWDi}ܺ@n] .[ȭ rKh&g*\>%2]tzAox@_a<qa a0F0FhH10,,7-X K`V,ev{;G*NJtiC/KXE\i"O~/Et/fk {LZҽͧ{^tkn"܂?H[f;",hkZB/_wɥh c:䉈nr^DOy >bD?$?P>6Z>$4?9KU/dqz6F 6f-˗"70N{y9/EΧL9|.2Ry|QO&S-ɲMt,wH#.2<yEǡ&qpDGxA*U vDUls8.cKmX]Xeyu_>~p18ϋ+uϘl>_/\qsN_ή CbTxn 9<-%<o;5wjmtN@Wݡ!c/ yi\cd 2qi?qL3 `6$O_W`̅Wa|X Xo[Rxr/v0 +*{}>OW: X_(z/vw5~#dV>e&!@]4 7-]vNa}Cp sq8'i8gyip2! ..C6"5Aꚣ4ԐPCM"-cN.}'iIQT@Q6QAQǣ(xT](e+P٤MHֲ EP@L&$dIhHC$3Ʉ6%==\=W=>3I&}g̭~wV[}w?鲡l:Ά汭a{P6Tk4׀]7P=6T cCP=6T cCP=6T ĆoCPlP]6ԯl *kCPlgl 6T cC- s P6P]66 Æ:Ю:~KͷRԫ-u괧RT= 7Lll8SS:{OT{ў걧z%`OS={|{Ξ -{jĞ:sbOiOiOeOeO9Sn^SE~^>i&mWmɮZ7vU]Ȯ+ή:j]UgWUo]UgWUuvU]UgWUuv[ ꭿsWUuvU]UgWUuvU]UgWUuv"ή:ή:ή:ή:ή쪺[-[:jvEvU߹FѮjFѮjFѮjFѮjFѮjFGiowTQvGowTQyTG婎SN쪩S:*OuT`0y6Dy;%ExW,{ȗ(oW<3qHpd;UWS:pNϝN8gl8esz>fO_Wu[W v?^VG{"u/F')};#}5 ;w3уͣ}8qpiWk>|Wm_ѷ}E|Wb_ቯZwj=<-gf[᭑•2_ z* j|_{{ᰯ>UoLcEv>>=&sѽ&}81zcK3Ϥg3Y}!جf P.\?׏7Gg׏/ea5{Ě}p_YcO^8^7_V&SН.^ /A VX-Rc2uwwww a̾Y!<݊0vdwk>}J^3w|kz^{ִ`GuS„ `Ub7>׷~utS=9vx/7W;n ^o^os_ϨU<޻nサu+`& bwO<+"_— :H`o `89PSB\Z5> nĒ.ǽ{Dߢ */א_mU]SG7z/5Iז @>|4;Vo&ȇ¥lVakGddk߅D>m?DvvpT.)O3.N?υ-]]~7ݱ[OV*pEpY<x~xmdF"\">0YqdY)AׯbzxŌb\vV\>[Qy:sbmw;Lxp>]kOG=J|5|2TنUw.\6Wx7śȣyNNGÕʮʕÞ!m# P1\<) N*aɞ /T6O:v}p>>y;Ϩ]ٰyœwu~pQɯOOqZ<鷰.\Vjުo |{>]U9!~Hq q8? 8SqrXOs[uZpZ}W{yW{y^^}j97\u.t"󗄿]UFnz.`kȜIU]fE䞪D 5{SU˭tCTpZU:x*rY[r.e^s烟*Gy뽿!;ȯF"+ܻFߍPpoSߎȽW'rLA9 X}plf7Nwn=ANl\}mV?C#;TG(V?YgbώݸSc<8 z^D6GOW(DDq. p!..,^ Wb&ը5z܀qn-W5n3]>ƻ1 b6`.>܏_>GxSxa2ځNr:~G\}\*986F{Q@QD (cc Κ[|fĚ#|-r?fʚ"߬zdҿ.]ۑYW||.w >8 ?8?ďcp48'8'b*N)NK5?i8?43qW[ykCԜ1B\ \Kq.%L\Qkp- [7jnr_/ߵVoï:v|_wo >TsO}o59&k>܏ ØG(xOwx Oc _y<^B /%:,+!z,,E*lUAХ^upqjjiiQ㺩ެYL)[V> [m(>mTlʲkʊ[SS4CSZ)+# F Oqݬn()\i v$w hS j+#ذb?M\YÜ?2\W*Nq냏6x>a',/L~%hU9ءpeq&9sq}X_}n []o-pvSwn܋٘.\ݣG ߎvl-߈chY9$SAc[l#v s u3%5~ׄii׀k@5 v H]Үi׀kK—沰C=a:5e݆ӨS^)].6E"\w[,.>lvFvw85lkݮawk?Do6]pCd _s͛_ uMW|Cp UIakᴊS]隘*BI=nˮit0+:Dc*<+5qX X|*% OTæ!Sa֤Ut`oL}?_ ߚˆ>LU]Z\kqnx /X x vg9ݰ; _ĿK2WU셽5}}7-6{Mx`|Ouj3p&9sq^Z p!.. Wb&ը5RGKEwQ~GEwQd4Gi"Ӫg`:1s1oT?0{#x4樒vTI;UҎ*iGJQs*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*iGJQ%vTI;UҎ*:<먲QeRG*KU:,_$LFE `3>n;3n;3n;3n;3n;3n;3ti [j2bù5ŰicǗ)5)>8JWN86]@đѪqcoEj`췥p#-)aodQPBGZGkn(Tv6I’_Oeޥ̻tWOâR]Uy`W5ݥtR]jKMwUMwsyΟ\ea?﹯wroVN`A'?׾x c5w|x'0v_*|=89 <#|9 Fl "ϧI^)U.+v{NsW>lg> i}ww}}o}Ko~.o~?GO6mړgrF˴'tק]5+s=Gs=~ϕu?8{ٻkO}1{'gn6uOfo՜֜9vs.S;9msu9o)y{Vs?=_tys;}sg͝;ѹĜ v-}{ޤy[i?Moy{t^|^˼5m}msr7}W(_}k[ݿ6`>p>x=6IO\/OϼnW˿+=G#@#0`oG#ȹy8?,n=뻵w+n0'MNB3?iGhcqYgwgݝvw`pYO<`3e6_WWxOR98o8e9Kq.%L\:ݯigv~v-? +'Xiv{Y W鉿tcx䊱GOZ |P 4@o| l| #[:Hl *6O3asd4.{NB+}g[#Úa و!6腬V8^+d+ U? يCUG5![Y1=lu(\ZqS_CU1SS\l]Q7{m2bG?.x2\[;/*|i_}<&+~I WV<.X *^W|1F}N5GECP4氽"LH7V*ޗSV{>>=_fFE{^S~RQ|,NQΊoS+Fa2VFʚpIfxd¶  WTn_:hrmT<8=rGjy^0SyzG>PeKvծio ].:=?}lKqÕkVժVVn0|R6N*̤f5YVe'yza8džM 7L>LOxå?(8b+Z-;=\5qr˾.3 Vri #"a[UEXWUtRuVe5^Ve5^Ve5^Ve5^Ve5^Ve5^Ve5^jIp|U>8Ae^Ve^Ve^Ve^VevzYzYzYzYzYzYzYzYzYzYzY^zY^zYzYu^.~dzx<^B /%:,+!z,,E*ݲz+@3ZH"6VB;:Љ^k{ZFjZ¶2T-s~=oc`4Tk*1 QjDQ) 9>+>Jʚ4c8 gs0<"\_\p9/q%f*\Z\ka? No>orz3n ¯q; ݘ{[g>B3g5# X?EQEx1QXh@#^Ea-`MY^zZzZzZzZzZS5r|)vqJ `3|(ll)[ð%lcO˦<Ӧ^7dn6LNYnج)ĺks0jf~Ga{OzާK``scY1?nǭdǬOm>3q˜s0y;a_ q.Q2\+K\ WVy\k,u=x/F׸JzUfI:iQ'Iuq%x*eJiT)1W)M*I4 Gyy!V,eEŋ^%O& Ҫ\Q.Ɋ%RrMabӄ7;mqHVEsrE&V5KUMYQsv_:=nJJ؊7| cC$OyET"S|b'|V*fӬ|NR>'U}*(T$A TbzUY*=U5ar,|E!2ԤRBje +J)V(fD)-WJ+*S9+=tjVZ*jJ&SQ1SQW %URJj*j*jjEmeހeyzE}fbآZ*IuP]+*R^a|+,W׶r8vXQ5Sc+Xb_-yj¤:K:KĤ~a8džIwm xSk1֠֎QkPkI֬bj-ZbroB_)b[NQlKmb[ؒU뫔O|Owq0s#C?Ƒ8 Gp<~p"dT tpY8`:΅V p!.]_8Jjg-7F iR&iR&iR&iRY|jMoUO٪7+ճz]UCgU(xMؤMؤMؤMؤM]UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&UlR&Ulr6MnئITI>!>SqNOq Np>P} 6 ݘ{^<#x z\rZWj^-׫z\rZ~9rZWj^-׫z\rZWjuZWj^-׫z\rZZZZZZZZZZZZZZZ>Y-rL-rL-rL-rL-rL-zWqWqg< >݃=y7張rC9t P{O=GxQ*z1J-0j:jUM'tRM'tRM'tRM'tRM'tRM'tLMtLMtLMtLMtLMtLMtLMAj:cj:cj:cj:cj:cj:cj:cj:cj:cj:cj:cj:t,zn=NgcwuRY'u2CNUru\]/Wru\]/Wru\]uݢ[unnTǫuݢ[unQ-E]uݢ[unQ-E]uݢ[unQ-E]uݢ[unQ-E]넺N넺N넺N넺N넺N넺N넺N넺N넺N넺N넺^z^Y]7fuݬunn r*uj{^/yEQ) > G5J|/7}/oaص5@|c])#C?=Ū~_Ū~_Ū~_ŪA7UߠT}oP A/ST2UL/ST2UL/ST2UL/ST2UL/ST2UL/ST2UL/S7z&7܊+܉.܍Y\<~<| gLyNg p!.%jR\q~+1Wj [-3RMMN<}_joeGb\3o09q`& f fz>JRYU'Vg? 畔O)VRS?S#{xtOSU?7a?V?3qbrߦT??c/P?[g~ϱQg's*6ߦJoT*Y7xy|cJqoI̺ A7*fRT U7(aTg}OoUUcUQ}zySخꓪ>3~_T7UZU4q_eR'T}Z7__S۩UUߦ_y~T_ꗨFUT7OoV+&\T*UJկRIU^էT*U߬ꗪ_T}oUUU\կR-UշO~OaUQYկR U?vhoVY/WIUߠ3mі7 EQCѧ}J'}vQ0>awڋ?wZ:%[+}oU}Fg}Vѿ賊>nRѯT[NܿTMQѿ賊>3>S~gskێPK'{?V۩OMڨ_f&ͨ?QͯTq5V)5p'|b\f|Fg|Fg|Fgo%/uJg|Fg|fwV_U;ij~5Y)((((((((((((((lrtf3J>3J>7( J~ߠ7( J~ߠ7( J~k|Q5JFɗ|Q5JF(%_k|oP JA7(%ߠ|oP JA7(%U JA7(%ߠ|oP JA7(%Z7(%ߠ|oP JA7OnTJQ7*7oTJQ7s8䇕|oTJJ~W%&%BA俧JK?wSY%i%RY%UY%U%UY%UY%UY%UY%U%߸_x7f^<܇~*Y7f߬U|oV*Y7ߦT|oSm*-BP9qyoSm*Mŷ6ߦT|oSm*Mŷ6ߦT|oSm*Mŷ6ߦT|oSm*Mŷ6ߦ'LÿO8w | :[U|ZŧU|ZŧU|ZŧJgpXa?U?ʻIy7)&ݤwnRMʻIy7)&ݤwnRMʻIy7)&ݤwnRMʻIy7)fݬwnVʻYy7+fݢ[wnQ-ʻEy(ݢ[wnQ-ʻEy(ݢ[wnQ-ʻEy(ݢS;wJywJywJywJywJywJywJywJySp3{K彥Ryow/ܵ&\W*N)EL)**VRʻFygwFygwFyg}*>O++gT*ŝQ-{퍊'ҭkw>t %@I/Pq%Wq%Wq%W B%PI/Rq% *zDE=*:*zDE/P#*:S*:S R[|M<{fx3 7c+\r*7nv}[ݶmpx}YUzU vQ7)ڛmZю(EW#vD.RÊ5XGk}䟂hgUqUPU(ʑaT*SaFr~<|520VwWtJX bD]e1,Fň+¤ FM bDAzTq0V qpZQ#`DA\B[ -uڏ[#}E_kZ}E_kZ}E_kZk-Z֢k-Z֢k-Z֢k-Z֢k-Z֢{,Z֢{,Z֢k-Z֢k-֢k-֢EK֢?Ԣ?Ԣ?jN//N/rG{"[X ,s\`y.<X ,s幠ea^A qc1`)ЈWфXтhE0nuƭθ:Vg[ ΅VBs8Zq3nq-θ8g[q3nq-θ8؀1wa8g[q3nqƣ Ec|; хBkt5BZ Ѕ/G_ininic}?wY#戅9baX#u9b]X#u9b]X#e9bY-˸e,eܲ[q2nY-˸e,eܲG/ĕp5jq u7F܄q nm~qopn½9y<1z1<'$~4^>lZ3!88G~#q18x'DLI8?)8p:~i80F,X#ňe1bYX#ňe1bYX#ňe1bYX#ňe1bYvAEn[AEn[AEn[AEn[AEn[AEn3zXÏւwg8{ǧo3r'#yap _[^Ā3ٯ^cLggi -|9r[=9v.K{%a&r]'ɳk_wD@W,Ў|vKv}pxpQPL``}NC.gÆs]_;׆냽nYpqǗ(W|WGVLIڊS<}Wߨ:\?vke+}p ]0?q$88. 4ػzR*>Tsq\\>^}n o͸6|7 w^<<l[8~wjl=vDZ0B[WWM()'.]]c5.=;:߉u K}*,UX꫰WaR_N_Ns>|,Y>|g9sYv,;T\7a&߄ivڿoivڿo';ߜjvںn;mN6نcxl's';jfUYv,j]5ˮeWͲfRlY,[j-5˖eKͲfRlY,[j-5˖eKͲfRlY,{T{T\\&a$lMi6M¦I4 &a$완=gLžI3 {&a$완=gLžI3 {&a$옄cvLŽI06L it.Kj.vKit-vKit-vKit+JOit+Jit+Jit:Ju*9[%glUrJViUZmV[NiSZ픱ݶwdQӎj_rDm+Ӿ/:NӾ/:NӦ)::mNӦ):mNӦ):mNӦ):mN{^:=wNNNi &-#7EwzLX9I._^KU.\n]nK%̬÷"{g\%]2m 1{^c#ƈe'"_ | ~1 ?\㲭.-.dzǐpevvU.R^:l)/{"o{u&>Go}LEQZހ/p;۝YY--Y4ow;\Zco73Ur@dp>25زjװ東Ƀ G[7]T#S&]ˑlNs^n`P5v׌s/K? ƿƇz{w] 넣gggoGXrssssssssss _ǿ&m`="qa!~Hq qjG'>p"$Sp*~p:~i8g,6tO|-w:.h(/pIX.eW3qF^kpcp}ƺ n |wֻ G305|"k"&x4Qc8 >NV꫘> OU*u[kVݞ?۝p?xcHXfI6n ;&o&'Eο ˰+Zǎ}asa{-u: hZg=|8]b6`.a ~g?y?EQEx1QXh@#^EhF V)gmȆ}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj}nj} (j0}x?6A|[`Kl# aW3j]Ͱv51l1l1lE}b78g =|{ao| W|@}Cq~G1Q8XNJcEԱ"S8ND'QljDq"8u,>",>",>",>",>",>",}l\}!<#x <)<=x<^B /%:,+!z,,E* ˱ 4+ъ$RH d gkX.n 8&FD/ѱ.(A1pct6FFkjTgT*Q3|FϨU>gCa_[օ%+ϊ>+o)~Y1l-H;+cuy1#99Fe#99F1rg<#9c}T \`#F.0r \f2#0;ypº9a1.fQeYwuGYwu [`Ae<nus;Ⱥ;ʺ1Xyeܱǧ}[EEZyq^COg22:]Ǽwcu̻y0dAdAdA]̸w1.fŌq3b]̸91nqsc7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqscwqGwqsc7Ǹy3nqg7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqsjB {q{q{q{7ϸy3nqg<2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2(2nqsc7Ǹ91nqsc7Ǹ91nqsc7Ǹ91nqsc2(2(2(2(2(2nq[d"ȸE-2nq [`-0nq [`-0nq [`-0nq [`-0nq [`-0nqˌ[f2̸e-3nqˌ[f2̸e-3nqˌ[f2̸e`}qaw}qaww#ndAdAdAdAdAdAdAdAdQ1nqsc̸e-3nq5A%kL–lfy7zM v X.pAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAd&E.p,\d" Y,\d" p? Yg,ײZdAb!b!b!b!bMxxDwhMܡ4q_zxeQPTNomEg!h6i,]`,]dD K K K K KD'nǫ&:EdA.2 S2 S2{j8A.p~q~8GhcqAAAA/bP]  aB`!l6l-z aBX_Y +-JKaRXi)VZ + XcxD(X `A,Q D(X `A,Q D(X `A,Q D(X `A-QoĠ1hA ZĠ1hA ZĠ1hA ZĠ1hA ZĠًDт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-Q Dт(ZE hA-~ ߂ -~ ߂ -~ ߂ - oA[DoA[DoA[Z bւXkA Zk-Z bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,! bȂ ,fhAuye%l6Z VF+aJh%l6]uyٿʼn[K_bؿ%/K_b?)OSb?)OSb?)OSb?)OSbay&K_b[ŋ?/ bwwwww?'4x[7ȿȗ®^᫑tkNqzCv`Er>Y7FN Gпɭ%d LZ>`tXdn,E|[_RA"HY) e,ERA":,ح㷔s@/R@j5R@5PV,bXd"+YȊEV,bXd"+YȊEV,bXd"+YȊEV,bXd"+Y[KXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+X1Ŋ)VLbSb+X1Ŋ)VLbSb+Xq +a5װV\Ê%V,bKXb+ߒ=888888%V,bKXb+XĊ%V,bKXb+XĊ%V,bKXb+XĊ%V,bK888888V,b X`+XV`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V`Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~Vg~VLbBWwN]ݩ;uucޔ`c.g匹13r\Θs9c.g:cΘ3:cΘYbcĘ%g~g~gR1gjZ>jYF,ZVP-+T eղjYAZVP-+>jZ>j7V[? Q1MŮGxl3H6]_f-k37hK  F֛BE'= qahD{f>7cSz7:3ޕՙNKfX\xާ8n ,d8M `B]D7齆 K^ax0V,5 6Nw43辑o_23s3gߙ'ߓμg"ε\".\*yqiuq;saz̑=oj樂9hs?s0| ¸pnP7 pCPv !nȃr0XjX;6'ҟB ?ю8q>b>:|gb'J?;a>?bx?~uddO| !|"I?#?5\Do|1F+\{,mrv"fFWqZĘv?hލ/PfFx#AT"0vaa~qG˨Z9e=Dw{uQ)F~8ݖaNfhJ;N]xD1ZʱL~omx;3ϚKO G߁N3نe1o-ír3UL0St x?feyqU3ghj9pUoU%TKZ/PP"MLC%*pc$f.f~#3Лٿx+pe+qx8Y3L9,yE&l=jQ?A-b]2Oa.dfviS|QG#Ŋ29!/#;2"$ʳV!B@jѠE@Sf$O$N' Y'Nkrq:ϐ%j ~5_WU/~Ջ_WU7~Ս_uWU/~у_t0~1_ C/abńab/^ɋ_C0~/a:%4;3\.aO^ڙ89;= <sx1g E~m|e ~1_ ?x@70L ^\t ^`y|P5ka8 F(8+aLfn\ n)0G`ΐ/`0 3`&<!xU֙_Z,'O'ɓrd9yjjx>K߼7/O* SN2SA~r^p }*BpRT'U H!Azz:NfW =_~:{U+?f.?AO't ]~.?A Ww W>r쾅^e 2zJju0&na;t!d~Gz+ud |+[$-T*I JB%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'I%qRIT'$H% RId 8H&d 8H&2B&VdbL2B&V XD&V X!+dd 8H&d 8H&d 8H&d 8? OЁ't :x3wx=_n3'7Η3]k`8Yd,2o7ȍ;xfH&i$)-g#f dl17\ڷ@S=/C.wtu/<7 1_i$U*IJ_%鯒WI$UR"E5,Z#ʮEم(cvs;8!iDz lDpLld& MpD@V~+Ilf&;ƧdO9?'@/i:%sI\:%Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'Iqo'-qhi)EVl 2VA/8D4ۍFv#y'5Do^\x2'&FȢaV&ppkB "ҾѯN]ӰLGx."1V!"ΠR g?C\\߯'s2Qxߟs'5{d=a̕FH!)d~]A 0sθ^Y t}9IfHv;}&>7/3_`:X=;8y B8J`+l pvm| yn@688NS` ?9ۈMl#۵vmd6]ٮlFk#۵YJ}~kq d$cDFj-EM(9z'V(\τ}xdG2\ dPN-F,y eO:'v({c/u쥔,lߑozSc {=<*̣<*FVnղ2pGW9} 6?]UΨwܭk;#)a$dB_cv\*`'YX:T9D\S{Y=g i]"U[VG=l=pVܳ#qVkZqVkZqVܭwkZqVܭwkZqV[8s88GFkZV+ՊkZV+ՊkZV+ՊkZOKDы8oXLH36JsT'~wQy݌|,z3kÌ?[Fh16ۘ#16ۘocm̿I }eaqx3xzxGkwwuq{G<=NkVob~o[jBW 5_+|PjBW 5_+|PjBW 5_+|PjBW 5_+|PtP: CP0T: CP0T: C Ty2BTeJ?v:@3hIwڧIm+~گPjBW _+~@3P u_+}PBSu N):ZPjBSu N):ZPjBSut*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGt*JGRՖXvC;쁽 nM~VQ?U*gYE~V------kKWSnݨo/w\ӃCDI%QR6S,>%A[ptjWV+?7%# >gx1VF$y?O_?~?~[+I_A:[o>*m7[ڵ5<#Ktҟ *.x[=gQfL:,hG3\7e%)Q%~tEdh5t鳆ܷ?KYz/E^]ҡߧ:JIw>>oz|jq['GuEtw~,]#*o"EWC?zQX<3/?8f{9of_j^&UHl/=~vtU7?eX_1~fO+ӊt/5G]W\̈́[[Q۵OG3VFVZm]#K՝!iƘ϶jytUz}k歴[]YO{~mOTĞQG+{*KkL~n0bbkwfP:]Jm~S6쒭"VTT4&3l0}-=o` !Ӌl h3Z0h3Z0h3Z0h3Z0h3ƌ0h3ƌA;ryL~+X 5mfl =qxހ&o;l^/90X7xa"Lp 00 dnýp3b^7`> o ,к> ΆkZ'ܾm6(X(<B(t> B(t> B(t> G(4|BQh> G(4|BQh> G(4|BQh> G(t% ]BWЕ(t% ]BWЕ(tuj0G1x9$<O3,̅yx^exI;`'Dv"N؉;`'Dv"N؉;`'ۉeD2"`XF,#ˈeD2"`XF,#ˈeD2"`GyD@GyD@GyD@GyD@GyD@GyD@-+{DT_ړ(=NC~An\]gYUֵa <Oxxs</K2h92*„8ѵRU_ q!"[xk"bS8G(BD5uxÛ deG}G}G}G}G}G}G}G}G}G}G}G}G}}}}}1>Xkcc}1>Xkcc}1>Xkcc}LVZ7~쟼*k?5I]Bn+!3j1^Σպkr<}U *XA2f2wϋ=eJ,2fE; 9>t}ݏۇȀPYo/pz8#} f{ ~'$')}S47ǜ`?gFZ0U_M;! z2S MF*4A̶U/&wƾvvj{w: k7HQ3L%#2~*CXƵ0Hd2-2p41Ad>m\Ʋɘ9S6ˠ\P BLz,&8.!K.ÁUTJ}˪XoJb) ݦ =Vcfhw<̏F}2,n0ѯo+~sXe~>Wod ?xQ.xr9kw`5FNzYhݍ'u7ZwʔT,SI۵z9t,CŹh>Aϡ4Mh.4?ߋ?B/5h^t-z? ?C{.zsK}5G6Lm%Ts;$?0̶l~aed8k&N'k8)qxBd~Wƌgډ~Fܒ[֭M;:q`Z F:~HW0utsHF;DoF;Z@F;Z_.`m?FHc1ҁa1FڏH{3ތp-Z}ŌnW1Dr|AmIrqD\'ꉸD\=Wl"D[@ى8;Gqv"[NՓEBz!Vlڊ+غBnW&;d'$ꉨ$UODQDT=UODQˉz"j!hZ@4-`ꉢz('EIh3(Eˉz(*&";QTOEˉDrrrro "j9ULDQDT1Q(wYr"k9ZNd-gbqZ-'ꉮzNt-$] DBN)I4%ɿ "NDى(;e'ꉨDj"jU&"lFE]]&5zuġ쥌C:ղ%/챕=~H0ы=n'+Jc.ndQ\d6d aސ# 11dg'2 E&í"pa4<"0 4>$46>&1>a|B\g|6>c+F7"F Ʒ7/&IE-F.׉'ߍcqxɸ˨C?ag>/!8<~} cYx䞁o?>p=G 5}n8WϞq•Nx'N4`ШAsם.4j\ Wr}^l쯳.ɮȮʮͮnnN#mﻡlj~*'8qí ۞-q~6O9v)S*}5r?K䆲7_q;fqތg1}|ǟgN|C'KpU}Ӯ!qZ-etW&GUs >q74G5v9ƘBw&' g49.W9.7w>mq;qqw.RԈ5"LHQ#RWԈ5"Eדk9D^##G+r\\Y.Nٝ;qckpckpcVjGڑbޢa\UfV)r||H>o$ #]".&.&.wj;Ǝj֐{S7EM1;ai=*rJ!Y)fV^6232323Y U7Ⱥn(8N6K{t󫻻tTFfQfQf(f6"F*k CTbfJRficfJ-N1wp 3t-#c|TF*_#|BkPZ~A_DcA4xA4:lf|3_`W0x!3^Ȍ2]GdYSZn=5'&fK"6533Ǚ3ѻA/ ">!{ǨB̌D=N}QK%FEE7EpT9+V"V"g(Gs+##q9 Dr.#U~DE䑋r90wޥ_̬7 eCQbm!m~9ƹƵƵƵ]4U Ds36m<666=NE8af988h2M\"c"c78oh[tsbw htF'\4FsYͥf.͵\Εj.;;fʼnݍ?C9qk6zZ*bʹt[i>zU+gE_ h=Hw?vwQa֗=55IQ[~Q;ջݘ~NP;ǧ퍓vN;劣[!;}={{yQEQOx6U;|ޥzIxy\&K9G1t"6SyQ8 C|;j=j=j=\\U@* W U>"^Ճ GaOMs#D7q⽑ {xo F⽁xo`aGbbGOy1SF⾁$aBx>5N6i5 l1@6 kH6Zy|BC6 lsULFfⶑ Lfd@&jJcq@7Ǎq#qH$waÍԙ0u&L SgRcFⷑm$~F2r@6oYRtPYrk\Z.b-q:F:F2w 1#}ĸ m1q#+Ԟ0L7N[D&YqV$6Z@LPr6zJ@)bkTe\)WK7x&^T%W.%6[WW#Dk FԜ6ֆ֚ZZ[њ~šS=^qhCSќvt*S2499\[3IjKҴQފJglNzW -ꃝLM׉LQ062N1lChSEvfX; Fm)_ګ+cXArF-QK6rpA-Sb -Ŷ2ŶWꥊn Z-Ahq5Z\ѢUE5:U@ 8y8y(^; \yYCgQT0pxo8`*>?CG `* & `* &ǡ^ ' ar \4\p8iaC)PrJRD)P82NA&wj>?;=G)P82 >o d,*>G%*;?.}?9\Pڹ}CSQT4u7i|n.ǥ_ơqsPXuuݣwtj]_^Dag?& (l >?gNNiwsl' pp 93 p9sD9 s爴pnadFe`T*mY>޲Uj]}(עj4] t5FQZ z49"j5Z֏*,+ɵo~tl#U :W5Z@Kghߟd=Z^:~G;dJ2R%کD;hT Sv*g nA'kɚk>kU_4 MT3WJ=Ti y0\iFc>F1Jv2n'1:1:1:1:fw3}y1u=sh*޵_ W#{G db|Gƶ8pp3Z0h3Z%vi5Bq)> E8|ٞq1O<->Z(ȳq8!Qq*{N7ZۆB[9.Z{6%W&Gy(UVՊZy?GQ( E6ՆZQT+jEQ(EVʱ98{F1zn⸵>1qW;9v7SwR]W{a;y90֏D}5Op'ZaSy 3Oa)}]&LEy3Oq)<0fSy 3Oa)<1OmS8cX{f7BA1@uvPYZ}DjP 7BiFF mE,^=nz˽wq61tC'1tC'1tFK e#*R }JQA|tG\F[i3_`s_7X-GlZX嗨di ;X~b*a[ ~PB^WHߘERVt)+4Yْ7VC!4}`̇Q(KRz2f\~j}a&xJKYťRVqj1@++J?#+}ܰ#>gۈ2Ⳕ\B|.!>Wg)G|ƗgY~uYF|">ˈ2K|Zz~3Jc&[2bFLud)1YJLd)1YJLd{{w{\BLO"&md1NLyb4|0(cXAۈ ՅBbu!GyjGj)Gj)ZF6b#e`1XF G^#mKDٚ+:L3<-vNXxZ0[359goGK )f>l'83ЮEwHi$4e2dFݱkQER:zД/Ge ;NƠe{E%Zfc,;Kcc,QSxjO-e/Y'3r|gn}W=_V C}M&.`2@YIA(ҙYj:2ř!Nɬd"ͺa$a,`>1'| _bȇXRG 0w_((?0Y  4@3h( .fd&sM0ۀa&f`Yi͖a&L03 0rX _fD8 NN 8Np:g9p.p!\.r WՐcyqC1v"Lp @|oa N 33qFFFFFFFf~Xg#(<0ix</ C>|-,e=? 3_`cYk`-6&6("p@1@)A9lmPN.7T@5xc B;! KiQ h( m9vC;쁽 eUQq8vs;ι܎sn9ۭ}o_ 5mxMl e 8zC;pUp8>R}nE}åp_-\c;p%.pZQ!Cn ?4m݃KdȊ0W]l{`u/~LxfCq#ݬB7й*t B'Ё*t^K,R:::(Iss*kRv)ҥ(8Wp [u+n׭\[Up nU*UVܪ[Up nU*UVܪ[Up nU*UVܪ[Up nU*8K/ҋ,8K/ҋ]8@W+Jqx8R^),BV7\f캙]M@8 B(;pͨnfM:Yv>2fmCx [)kMB,e-So}6ӡm/2ӑ~tnvBYm*}׼5Uﴪ7%*w_g"(YJDd&;(7nVͪYUvuTnV Ya7+fݬh=+ ȪgfGYwdରGfTFnTFnTFnTFnYp_8΃.a\ep9 ap0("f|-~ohױ͆F|,s+ۘt[LmHguSOYkTFnTFn"%LڕG!S?{T"*PD.3(bRdVh{fKEfede틆w]iVݞ%91 *3 2(0 dsQ{~~=y=8s^r. #ƈ1"l"ZV+ v<XBxG`< IR5= KwOl6l1+1l6] l1l6lg[_f[/fPL02Eof]GG4g #{}6fgc٘}6fgc'2l>1l>1l>1l>1l>;}%ӳh5\I&U0fl`̅{mYnWv=x_?`wP+4 &SV)ɔdjZAlllBZU3ƌ1mx3S0m oNss@4 }k ۟  >G#i­pPZn>fef2sٙNgfdfefs~f>=p\fYˬì>Ĭ&4;~|b;/>Fk2/ϨEߓ߃?Q?QߓQߛQ߃Qߎ?PbWM#|0ՌjF|5#_͈fW3ywZ^b\07 sWM69"ܐ7U፪FUx*QH[̭lV6s+|f>e3OuZP ~Ca `a` c&xm0n;NSa1<O:$,ix<<񯃸@ʿ_ia Al!4"Gn$n"3 Sa2ГKB}2R_6#Vj|kyK/~A v db, ͠9@ p A8u'6B  6ïVa]^!lp Ð v2""؃{`A=h*+ǻ2C8AΨ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZ;Ψ3jZk:r7̀X̂p}2s`.wfYc>,/K2Q&^e, 'y TzåT҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%}>T҇JPI*C%})9@8<ȇp[9'yC NBT2_ep%@[A4Duj]ZJyx-| # v蓶AѰ3Kixd?2G摷y a w'73J=~>_y6T+WkD|_#ɭ"õ2K^@_8E< ]p<*HA) cP!|ITɗ 8%&7¹ZVO m~E yЅݤGG0Tn3 g{ra4w| .y߃xM׾ ,UK6g**'uX/Bf wP8V"Ѿ7.w2KC *Yrz7X e l'-0 n`2w0]0 0fck1<'Tꗩ/SF(3foV|?~a#/ `3 [ ilmvNa/6ȀL82le> M?-䱆}EP >3I(r|P *TA5z2K@ &O'|I>$|Ýx~ψ`ɢ5y0< "x< K)xga)< "/+* o|..Wj XO_ײr\R.OY*E+K| kp+h vLYgu$0(̔wY¬d0Pn(LY}Y; s&IFaQd&IFaQd&yIFaQd&IFaQd&IFaQd&IFaQd&IFaQQQdf 3 &CaP<&CaXP(L\&(!Cf-sE,WYʐ*\P,ZKu q;c'dy!Z-kʍ+dYfldi۹p/l! ,xlE('l}2ͼB0/ͫS >/Q"w֊7] aqQbđx)T)ƜFKao-}^ً>g7F}v^ً>{f7pa tR tRp=pa,78`"hJN[6ww04c<bVN_f]ҍq/E+T*_WU*_WU*}6JRT*JRkߎu7hm^ы6zF/E]^tы.zE/E]^tы.zE/E=^ЋzC/ZF h-tntЋzAY;pNj_NBxBT)Z)hs}ntύUE4h.0V" eҋFzH/E}nЍC7zF=tnЍB7ZF h-tnЍB7ZF h-tntЍAw_}T>*MJGQi4}T rD>7FhUpU.q<*b]pD=d)2>+2>+2>+2>+2>+2>+2>+2>+수y 3`&Z}d6$23籝q~HzCadRA8$KVfYmeV[VfYmeV[VfYmeV[VfYmeV[VfWtWtWtWtWtWtWtD8]+tX ,WzCaA< A0u0 F 7q0&Dnp;w n`̄{ \`.(`>0BSV{!|*X  >U*a qWBU!PNnWG?ϰRHM~-`4 6;`'ݰ>` ȄlC p8 yrNsA)pC)2x&wJRp j@M2uNASP9uNASP9uNJ-R Ԃ+J-@Ƴ=48@[h=b: 3[b.y }H\~o#+.7.YpQ@ RKb'%*|eSƊy8`" d;a LihG/-.`6$a9bb.CnhB9cvri1W7oư+) @tRGD9W+N* q-g]4qkG+w/J9RβfǧكgE? '8w7{"=Ω90TkGLRps# ׼Gz%ʺ眫^_NiP7-1-^ <&Zk#am\OMTMMtJWf#3hW ur+翛$`?ӟ5T]kna0fʁYדeg-Xzd|I5%+sq "'3Q .sg3R6q v#y9UrثMȥQ61zUfJg>*QeisÿGQhd\Ƹji4c+CTsxW}]Hwt7 3,Rp)tˠA43Dg|Uw|Y\#;&PSS#U*******r*r*r**<s:<s:<s:<s:<s:<s:<s:<s:*r{qggcva0S΀ܟ%q@JKéDoqpL,»&aK|W cU|ucTT~_U:::Nrʌ`|FK9Yi|A]vEOmx[Vx[ցumAv..sVL/ 6ï+g]BO~@@a a@p3̓3!͏"x1X ~%< x^u/2^ek  oy<o7O' x7-|#lgH_ 6f.1o+ov;a6ȀLȒ*uJ]e9 G!1`, /bЮR8 eT UP j,Q &>qP8O'A}>qP8O'A}>q(Q'\p\W5x>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTD>QOTTe!<# xS4<RxEx ^WUx ކw`%|>cXXtR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZIqR8u:Nj'ZI)))))))))))))))))))))Vkxe N j=:{uPC8RO`|E4h.%a5DbjbjbjbjfirסFP7\RNhqʐO^Ky;" F#8FAWBz ^JJYo(N_ehk1+xsk]Tpx=s{>9IV^C_e.K9RεT[YEǓơ8Bq[*3G]VlsPK;Kmt_Gɞ٧_`/گ\` CK%{fjjR*Av^__:\x: ߞAOfAdu8V=Ǫe/=9b^2` u}w=0 .yg⯷+U 3sGRxلvވ߬CX Po]j_v`oiӾ &BZw}a,78\yl=UuԊQtc_cSTҧF\ihҍt]8F.Sߧ)re௰ir%cucune%ne>a< !xEn]l].pya-}䧖Cr0d]'gE7W0UX9UX98OkO~??K~Ѧ횝hg0kgxeTz_/jQu{jwZz*7GrQƿQSCb;o>~FQ!fT8D #;F~#?_pL~ ]/dg֜{E;u|R|49F"I]ȣTcGqqqq뻃paA>y4 bzU1w0jhv pLb7~v5O3pDU1x ^eހdXG-e%` 7Mr30&-0 n`2w0]0 0f, @̑n\|DxHe!<#$x (-T'IXO < K9x^%YpFaPQZހdXʲ& ɂk +=x>*X >a-| _¿+e6O3lRal_a X! ~  `7ı\m T>S2nJ'vv2;+-h<ȳt}Ȉ hf'0̳e|l.":05>1Ht0*FnlE0N5Nw)EEbI.3g4Rbu21 `\a\!2%5+ u󃢂.A]M<3X*5* O<drׂ ŲA%by'J-d+MטUbii" ?5 Xt-P!f#換hv ]ȿOZƵ@htk0z^y%.f RK3{/ qUZ-9VŒ;_0W빭W>َ%Qc:4ܮhzos~Ψ3[N1Wios߮lsΓ+jzz̽I1cfwykڶ֣-ڞnim}ppv;mf ?z8gheGp;9#cosThehĉP%^만%2zZ5D.vV6-?@k5P}Eh eRyGQyWК{-7åb+U6yŬ;PɝRݰx/>o?K/*Z桢**EEU=׳D~< '"YKOU5(e9JYIM_Z \+_:[_JTլbPAW>2vUe U2J&TĄdi۹p/l! ,xlE('}JsC'6mm 4 24ta;@.Ц&'P >NA BԃYe YRCV!ԐUj*5dJ Y#k>7a k,o;D5|xl?G1Wj|k XO_ dJG%٣QI${T=*dJG%٣QI${T=*dJG%٣QI${T=*5_ҟ TţpLԑ1`WIp~ 2oAWk^1h폊3k\;xF4Záհ][3%~A_~@\@<=g=9)Kˠ\AzP;/hɞ^/a} )RN[N_a_m͐#F~m {'x4 J"7+$?8zĆPQGPNi,0=aNkYԑ+GnyG>IN? pWG0C\IEN"^Q+*o"}9>^(:S~JZQ9b&B{pzڴVyshxSv}Q'88?ECҶh['mGӶy8J'[Bu,}Ҷ.ڶ=Iіif_3ogުGS=5_o*Q7#0{K%^j܍akk{UBVbanE jn墇1Y32RzȠ^p-/ڼ=8ǺcX.p+y`^DZqfgЬBCK|^}sιܮ`~aC8J72 i֎=k׋U% DЗ=:?{f=ԠGx+ xe1Yڷ;$ ѫ3xS DǼcs ǼcN{=qq5(r_=(> :m-ZVGd!m e! ̠pSa^-Ww.;p/p p8R}UlJpn\Wqn}ȫ^1$k]8"u5B놣M W@ >F[7EӉmgb4K$!#p;IXO#G<Rxx2}E#|qw^?khk,Bi Xv|UUk{I)F1ya` c&m0n;NS.n3qߍ5J#{7̀@f`̅{Mط"kP۾SWzCA˝qla @>Uc; F w# @́(X | `5|k3\ K!s)d.e2BRPY̥2~-`4 KA@SvL!)(]u J J JL9 `1#p  W8R %!jH)*iE[^%JT)ZI#R`8>n АH_@UGө+gLьURYs/J!~>b@ 6bjOu5aDwd6/#b=_nQpQ/,\u8H=z"[E]Aȓ_|8&_rpqP^m/7hO׸خgZRxN,7EY#A>u*5=E~l6O3lb5}cʀL8Ypϔ vȁ\p (T@TTP q p[s j3mC_@_`caϥ&6_+p IluX H7&r30&-0 n`2w0]0 0f, @̑Yp/̃p,, !xE($c'IXO < K9x^%xYکFX^gLD[7 +*,or-G5&\˻RV5.:X>[>-`5|kS >z'| kZ~a?FH_ 6f7 ۀyj;a솃P_߳5v-hq7o][rOmPz$L_)N_i$/ⷁL jBjkEơq8yx\oIڍ㨫&s%ruVr @Ĝ]3# Q`~[7J;|ǰJ?3R0Rga3R*)Hɔ%zFRFH#(nk^2ѰѰѰѰPhXhXhXh(a4a4a4a4a4a4a4a4a40000J k#PHe$2j_^EvP0Fƣ(]$ whIbtdd1222dd`dXω$]V3\H*eex=%r.=~=~8~ޱY F{Y]]NVJyHT+բ޼M7N *U8)dxQwn4c26&p ^|< :ȑ+B}2PhV?>`\(ڗ'gLh%cgJRb]\C[h|HuE7D:WW W Wbd ix?8@cIC?wr](4 U%xu3q5=ی)8pR=nߤ2Eo$2sd>!ǘs`vfU2Wɓj9|5r2*eT˨TJ9`55˘ :PLaUO>y@y <+SBe\oX˴ҏ8C6!S*C,9v$깖A~F05=B 1n!NG11 ө#bPr<wuD/` cch2(1HikՁ_:[_;^XAu ꎟ; C=^B嗢KQRT_/E嗢RT~)*_/E嗢KQ|*_/E P51S b b b b b b b b b b,jx`0 0 u0F0 F 0npΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈΈCч:u>}3Cч:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:~lu;dPg|ި۝ٷ utdK-:AՖcoC tө7SoLޘN1zc:jө7SoLޘN1zc:F˖[On'+ '#+CD<``j*c 5j6JaY3(4Ѣ+EwVs6{q31OVc e=y3}^zʗ DSJ D;{}:nŅgr8ʫe "Z_:Zί@_FUڽÙvGÔ=g~%Q*KkfELK3bIe_" m"("9d3^š]N$Df0odzWMզoDg^`8% g]5p`^d^oyڿJs"Kp,U<+.nnn6gʚ}c tn ݁sWnq0&Dnp;w ĵz;}ч}ч}s#0#0݈:x $b݈iqqqkW#D܃hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6hÈ6켱_<ggR.:fT`> d;Hzs s:5EBoZ71ͲD愣9ڌCwѝpt' GwƢ;c=hO8=hO8=hO8=hO8=hO8=hO8~f_zn.qxv AlG(цh#rmm kʙՔ+D KMYޛV{d- K"2jy)A%';;;H*"QI%(1Lm01.Q+E0IK%#AnП^ gHdcpzl51d<1O|JќxO\ /#]kig?+GjΑZ7qGw$qGw$qG$&qGw$qGw$qGw$qGw$qGw$qGw$qGw$qGw$qGr6_p6Ws6q68$H$H$H$H$H$H$nݕuOԫ6~j8o65ܯ khʹip&}T2I_biUg G+k?9:WXQ#Τcs=1٣=cKMަα9s^Dy(.MdžQ!0 Gx\U8絚3<!0Bi!;sȧ>s#g<1;=F۝NAMfe2Y¬ aV0+C!~~fg3 av0;C!fgH!fc1l a60C!fc1l a6^)mFm9\!X&R us*DޜJh$7'P"O:<-   85O(GyGyGyGyGyD#<#<#<#<#<#<#YWrw~CM^W;.+ yeEBMe gVN={9E{&~v O`5sQb3PЮ[ۚ=X:r 5Az1Cuϫ{ huӟ_ |Z~:?××uėAeÈlQv ] v Q&Dy'Gt"$Ƒ]} d8o+Ƒu:qx82O7G8vee7c%Xb%+^C[ڡ+0vO;Lө~:vLoyz}vMg`~љh;i;iXڢ+mK[E,mK[A}$-biX"-biX"VҦ>PE{ @-ԉF, ͠9z+ ߀?[߷ڵ¡WLŮkں:z*o4EY4$hTD$h&h&h&h&h&h&h&h&hBW"{ SUy7]4E]4E]4E]4E]4E]4E]4E+_Kڜb*bFʠ;R[HciLHc4Hc4Hc4HcO1DC1DC1DC1DC1DDf}ѯ$OD'5R~~UWdZ#ֈ5bhZ#ֈ5bhZ#ֈ5bhZ#>Km2h ("XY,,8;Aƻ;ihW8n\M*ZgklM2 s9saGx8[gkqj&169ݢ%G59g:r{]^g{wgҁ=ܢ{fo[-y }ނ>oA[|̶n6d$ADDPKS{CTĆ z GPEAdw&$tX@O|>?}^mO}>mO{>O{>O{>O-ߦ()/5Ӟg>O{Ӟg>O{Ӟg>O{ӞXX,,D-qkCSսBju>*l kGɸ)VEԪZ'}w.H>qSi5-ګEԴQ"jZDMi-EԶQ"j[Dmm-EnnniͳUjqӍq-=nM7Z^Z(5h"Z(5h"Z(5h"Z(%Nq3bqӟ\L 7Ps)I<ya4>\jLI3:v8MaG:fRt3uIQOQgu3Gm+WQ ϧ (J{!W0v3_] #P47ILH(I״UjZBMKi 5-%Դ~ImKm -%ԶږPj[BmKm ՓIg_=]ZcZZV'3_=ՓzV)UJhZV)UJhZV)UJhZV)UJIJp^#!ܛEEF#6~Y$^D~]SKE=0%S􋟈Fw1PQ\9~ײߵws k`6~術FO .\DL;'vbc#Mo-#ĚLVui-s^"O(=FWȓC}b )rXSU[/5X =>5]7ѽjˆOYRޠ=G(a %`kDw7{OWj~JmOb"Yl-OYYoDA1FSL`4gB[7ٶdV~_zz7kKbif>˼5:Oֺ0/` 8 0 G<),Oay SX<),Oay SX Fpgě-oVp&;vVs5{~Z.g8ϱHe8c& %2xL?ld|y?3, uX~ 8[ @d 4?)o) 0_A| f`&~0` ,bPb *+ 餵v`U'm6A2'eL7b+_j,<0uȏi+0CZAGV*ګj^JQ\L0TVQl0No:ͻIeHƇC8OUJ,]qj-eZ*1C:q=į%\&w +8U%n\sr/r#7TfTfT6Xw<-( b6a 3phٰVzֲTq!%ZEZ?s[F Sg1d~A9_~[u@XU]M3°EH0+Vu? :Jwz_ǻ7I=ĭ`O_}稺=ac0[AWf<.fΩsskYc?vP/];{{~WT}LIߦfP'( 3j)ѓS Gf[{m<uȿB$]7G .c/ SZ#J]?w'3P 6XK,zDo b&JQE)i;CMCk8e֏7jIZ}Z=9+}VJI zcv 8v|ctR~3jv ?ۿ3s;DN}?}o} \w0c/ciLx[Gx8qp՛(8Ogz_2G3Jo2ۛY8arlmsR2Ru5W7@*RívDW[qTX'ZG>a 'dFgK[e?ՇևRl5ڇ۳/vXV3'[-OfZgjf|hl26Z:z&2M7nqs_թa000} G&yEy dZֵsZ&ZnmYlq]]>wCin'PS69 ۺL|fPxvp$'OxelCXw/$w̑&_m:,6@}WqreŎ'n2#:s>͔OZe5}ߩ}gSyyZ߱gEm{GrUr7ʟoU/ 87sx9}R]5wŅvO*O:CύX+@_p͵XOr1ߪ,6s/>`=?WQi8ޒHIn$ƨ律+U_  >R j}sTo~d1Y`y KYmU16ʷ]E};SR#|ujcs9H=gV̡UsZ~ ?lL4ibiN62_Uw^Zgç>,U[~=HbfUhc(zs9aƱy|Q_>QeqHEJA祈oCX$,`;0 ڬ-zڦoW._E=A] ׃Ǎ&7[6p;Lw&6WP~<=uCn諏2K}0p&}t69r̮z=ul.5A캋fA=㚨]Oyx^Ux}{У<=w Dw»z39 fl0,Wz+(o렧`}71#1>i39LKo`|fY`.Wq?`eA5k@-Xւu`=$ @JKxO/,`? ! D@6 @Tl54hGY@kA X|0\Ƈu0N,Ɖu`X؛5\ WkFpn`{}qO Ex&?zxC=| O`*>/tP _A| f`&~0\Z~ "n `XVTƽTƕU ր`X6M`3آ[IM[/` !֯@1+xX~ Wvd `+^m> ƟG@6 @4("bgU*UIxUOSSZMo$6IMo$6I\'>GRM)ަoS)۔mJ6xRM)ަoS)۔mJ6xRM)ަoS)۔mJ6xRM)ަoS)۔mJ6x%x:rDp u%,_ Ɓ 0WU,_C;] ׃8&]w*;Nex2Sީ Tw*;jNSNsNᝦ? U?*xik^ P&exx%x$gާSĶOX. JBxRP)^/T* Bexg^덀t)^[7yJYOV'Ux:ޠ}A?П@p$ĺ`a3;'NSެ,ν9h -DX9\.Vb1X .b1X.9w,.c1X>cqX>cqX>cqX>cqX>cqX>Wr<N'S4p:88|>VjcOcxpUjd5pj8Y5N|mr5pppp8,'Kp,'Kp,'KpJ8Y%l% NNNViTp\_ov ǂSיf5pY nUjfp,79# ~Uϖg+g5Y%,?8,?8,?]>0Up8\VWpZz|-_8|-p-gUԛ}wsJ+lA n z0p8A9 z oy? x< ηηηηηηηηηW+|pr8_9W+|pr8_9W+|pr8_9W+|pr8_9W竁|18_ |q8_|q8_ |18_ |18_ |18_ |18_ |18_ |18_|q8_|q8_|q8_|q8_%| 8_Η%| 8_|q8_|q8_ W竁j|5pZ8_-W 竅j|pZ8_-ꧼpZ8_-W 竅j|5p8_ W竁j|5p8_ W 竆U|pj8_5W 竆U|p/bp/bp/bp/bp/bp/bp/9 竆U|pj8_5W 竆U|K|K|K|K|K|K|K|K|K| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%| 8_Η%|pJ8_%W 竄U*|pJ8_%W 竄U*|pJ8_%W 竄U|Up*8_ W[ [ [ [ [ [ [ [ [ [ 竄U*|pJ8_%618` 18`%X V ϭ8NQ&襆_o++Kdkx菞y-US_9}y<=-׹f=o* {RV{ʳwڻTo:PWW?eqA1UTuPKVW.*EπYwMZS[̗|Z}&r-` lUpig}GM4mV縩gFosaI;YRT(yU7`.|k|uSn׸b408WY^E]ћҿӫKKD=urg/ ߲UޫI~N?oRI|##~KY,Z,]2w)HmpJ':)zJ>rI_I[~aH+8޼}ٶJi`{JPUF"!/DnJ3ٔ_ҶMӗ=ڹ/Op7UPb[K>vx)M#Hc ,l 6R9SCDXF><𳞌uu>9u.iqywFj ߤ.u*9RgHi8rHMe]o~vZDc5,WM}h_>/Vߓ3F>1mY[?cmsa>'][βuYse="ңh/ӏ9c%wiċRNYv#UFUJ)U߫irWGss P]\!hѪkXu8uTuL5u:u"u[ޟKToBJTMmՑ}1|ϩW|勉|.}+S|~PV||[mz}4m樇&fzlivf'7Wq kd\yyZ`3ǩyJO:9%cec{? ""#uΡu0 LeV~V Lal&K0*WmՌ4gޅ%S@b ֪ (R쥭jª=S*ao:r襎*Wɠrgn}6Dy]C9M WX/ Ar\ҋҋ>zq4җa|tqa \fk,k.t].sM_z-=mJO{ I?{m&,?xzow 9Cey;Mex|gSx=wwDk3sXvgĻԻTy+*[Q~__wwo4}72wm xk&㭙KF%#'(#'(#'(#ǐ㖑)#2rښ*9͜|Bsjj̟U\|I]jl1w1\*X^>˧l˲0ojPVKʲY%̝/5X]TkyFkPVX&mm 1w^h-w/4NL=?D 2ȝ mˬ˘_n]oc5SӬޚ5b6[z'Z k[曬̷XIkm~UQKhe{϶ ,;ZI݆(z ETğ+ß,FvbfdH˽y"FY ÅgE`[r|R~X,lNs+R|aZYA$~K6y_.6øe%tl@xsڗɫ~^7]ùDګh`s:BoY ji孖ȰzNS>o&Ya8<{ɺUYɤ#oʺPw-=KbuRҖ'OVb1Khmk₥XFժabG/|>k7u9X7pz~_91jY{sme]}n8bbDP/~j CwmwOaA5b<,G}]UI\G)eCĉiw"J>E5D N`i%-((VJ87ʺ~[7ZVq~ /#)^}[qNDV_S+;8chTRM=Y:\?>T| P8H'ǫSӟ&tg?ul爏Ż?ǯƺJ⧯?}~z;o}O,~={Tj暹6Vn_C/V# _ Ч^ 橷mT_gxQ<_L<_B<[&o*yUrtv۽e4u?(r<14F98mŎo3.u|qیkfeBoHo\ۅu]lՍR|||=0#ऽUTNL[a>a!aǶcSر 7#aėp`d# #zna7&U~ng ;j|)|9,|9KrDr؟!%-VhbAl:}bb7C7#X$8擰NKXgX) ubX)u:CblNSL6C%%--[XG,#^iX9,b080008[;6ŎMcS;6ŎMcS;6Ŏmc[)/fw w wMOUAk ) ., .K\D\D\08۱r@zC&8'-23z`qXv"G8Nh`KkE$̐(+Q%Q[HD$~l*@FQSsdd)0 6Ā9FŚŚsŚ#b!D$3%sI'_}5D|Y$k*Q!-QH%3$sKXp:o/_@T[>}/#uQuaoȨ ˨k!w9Eebx~e'jˑUŖQT[^[lYlHD"&|Y(m,,,w,,,,6̝#џAma(,(pDDDh+h+D>}!$B̐+%["DD~!6D,T2M,S g94LS94LS9Hl#gL9ș@M,TMe̷1B⵨l۹2#2C2C25̐, qYSцlцl nelrTGYCH/?ZCy%Wkw_[ rq`>xZߦϭGO}X>ݯnbݧ@&9M_tWGߨ }Q;m"ffv4ĈӜ8ok0}QprwsED"}E ՔFGѲsKM_p|D ?8|*t,~aOW74Z$\pd!VIԶ^r7Ih}#w)r~ӞF'*nn $ҭCvw ,k\-X-&-\]Ѩ^lhO8K?k5Nl v71}>={=ƪ,ں*=@_gmz~V_oF{]ѸGheåJ9/9 [' zLj~qeHPmX_W-aGro#81nW'm++QQN sȆ,kHvI;ll׃ ~MM 7h}*N_Ǻ]^[Kwa+{|ij6JwXc[=) Kip'^{kQK-u\,b,CgO?2,tԸ7c~ٽacboq KG{*ȗY׫PKyq)˴=>ZN@l.~Ve~Ke5q~ܝi;e+gnR1&C%\ɭj1,R '" AU`dYDd9F\R3Z%qqbhnCܟz?Wvzg~ ""5ĽܽR uW5ܽɽE1<.u:33LMxLoVݬP|k|k9aԹf7W*RX[Vo::[]dUXbrru=޾W]j?`?_?POٳl{*?R5^nT*{Z`k"{AM&iʆkVSLRI&[memLN鏝,b 3k&A(lmYT^蹠\HzΖ Jes9DF.up5SF M͌| <1Zӹtk5|hr;۴7ڳ;;h"v;>T#G*b(o,ÏeLc3sx2Vlle&˳ܳX˳ݳY ĆbC66\E++8J){TawVUU3f[ ;;X..byby!&by.,ooP.ug~a‰ K_osb.>}_7Ukwc5ve J6tlO=V/XTn6?֯ZH4'<,kEw=G 9_>Sqҟ,&IFK&p%g|Sz _;&'۹e6 R?&Kw(Gs2GO$zެ.^a9=^sJe:KHOM%z!wkhfgXoWtBFO2pY-}/[Y_<PNSYsDz. [_ęy8~~}J唏;xRD[~uF'^#dy~~ߵt=߫ѕg<}Yo]9nCꢍݙ*ڻ^ú'vhX2no?_;k4 k5t竝rC݆t.p|]JF%淼`;pw=ӟy#>.ݣ$ J?(C" K" [" Qa"x \މ܋8E<DhHDcHD㒈-G"D49W䊺)W-nr)A (%J rUӔ\մS٦R?I22$=[2 $@HBd,H±_rH`U. GIB/U& j\*ӹNN{si.y !fo. \r,aKCPrI&COd8B2H&ÑU3Jl¢DBɐD.[JDB"Q#u+$>Lb%n%KG%H,XXb&KK,'-tyKG%Γ(:_AEK/QtJNjJ'QE7(~E 6Ol\gNbs: 6w\_bs!vM2: $odtHGw\^1Lr9 $cdq ^1@27IFQ~sɝj(w+YF^$#W8,dq%#(#8K]uu-Eh)PQu:pCD8TԁdD:p}Dh%Q"xDu @Ţ:'@TԁͨhFNI^S!D ~{5';fUߦ7~J5rˊU:7:OfT r ,;/EEkF+뮢#+TupZ+D47݃әΤN?_޿VvW^n4V'g~_pU{eZg9XFY*E>ҕ?&O?ROjX^,?wfTNt˵)Օ¥X6(zŴ3L%g/W;fν3{-Ʉ`N~ϕjXuFS|Y$OKa 7>r_\γ`6 7 J]A>Պ֘Emk- ~#3\2{q]'6(r;w\u:MfIlj E4z x;7$w"m~D|[={e߇|>oo߷پ9y} |?}1_ܗ[[[j}IV6v/]_}u>m*3jX'Z'Y'[XZY[g3\%u*SdʒpjܹrN GǻJש9UQLQ٧uE"g>(wZAMME guD+ͮ9hvbGX+{bQ=rr\#W,=rŢW$=rr\#W,:`;\tv}Dl.:`;X+MhEl#`3ۈ&F4 &J4\[&V4N vMhD(`{ۋhhhg7P>S4>S4>St=S;S4^-5QPɖ**^F9SE3E(:OTkA¢EG+:Zю6@t#EG-: Ѣ5hEG˖쪞EM5-KԴFUeEM;TԴvm(hv X,:Zgњ/Mr`rUrkǝcUD3o}3鯈^$Vި!X\'Hg>(B-'?ެ/;K5]D TX\Ͼ)ŋ9 ?6ֈRBF(E4 kn>g)d~ ֣i ya?| ߪ/kxLMϘi~K0<τ\RA7γog(955]ZOYꨬ#&7X㦽*$[g?k.1n?Tn7ԘQu{AS\.OVam_$'l~*yo|S&ΊS+}Z{Қ2wQi9w7K8-֩lr~޾{>[5~gBtT矹6c?':OY×$R;mbVDgݓm"/Dc_`{;nick0G'={|Ŝljf~0˃-m47`epG֣0'aduea]6m`~^ gH!!qAmlNTV83(gNVMNL#)W+C+C+F$ JX'8RiA:#<#X>%(q-_bԝo6;5ܴHO4Oda^Y-`pgsl _ SSS!7(7$7(7s a͠ !=բ.Q-LQ-zj+"(%}բmE(.E9үD.zE-D^Bh;ڈ^Q$zEWeHL+ڈ^M6WXOD^QH(nWD(J]E(J]U:LE1H bŠ(tm.VLVECŎ7@Q JD%h#*AXT"Q JP$*A Q D%Hh/*A7JP$*AEt ?-D%JFFN{Q ZJ'*AE%.*AgQ JTT6JP$*A Q ZJAT{is(ul!:@[X X5D!Q+[I\]e]_2e$7#Gba2xn"㹉2QBFu -$m!oFw qz%-@P-,@ 9 YH6r.h/r.h-K_Sߞ/_n-m[JV9D9%6Dm$-ȷDmL-of:9+*mFضĶMvLx :@)m/U^% @kta/ǃS\\TA@^z9-`q'7aAO?r5?Ek?!o/ E΁^!ၑc 7p |40=M`V`~`q`I"Pؕʰ2B92Zf%GF2FdqF茱2ʸ!֌2Ϙd3x?i_fȘ #,*cMƦuAO ````aAO |,tk? ~:}pnpa0\\\R!_(# 5 BBCCBCCBC#CFƄ. ]%4!togC/^0ihzЬВPE&!5+ӕie2s2el1Kfޙ3e<)љc3e^yC歙weޟ913'g~Ǚ2̜9;sAf,sYfUM3ž?GNn}ÃG>+|^k7o~0Xo?},tkѷD?~:}tnta4]]]ݑ|yy&yyEy:u?oHywInɛwoyO=rj[(zzg{ !0;3;;;;;3; "ADDH$ "H ! AB"DH "A\~=K%J=q֭]{7X`i 4X`S v6`C 68ഃ;ڎz8ccccccccccccccccccc㤣P- /t CLa v,RؽWa .W8pJY .)\^p]-; w+>>>UĊZEuE"Q(YԨiQˢ6E:u-QԻ_ʢEcM*Z4hvEEKV)Z_hk΢=E-:Qt=vOmO=R|y5o-o]ao;[]]]]]====]K%K8K%hIqIV%mK:t.VҳOIA%CJF-P2dZ̒9% J,+YYdC%J(9\rdIO:> ⾌ooooooooooooooooooooJk-uzJdiҦ-K۔/TڵGi~K+KG)_:tj٥K.-]Qt}ҭ;K/=TzDi?7Lz~L-/sBeLYeڕu,RֽWY߲eˆ.W6lJYeRXaGmzE3 ? rL@a9XsR2VL~a~"'=8ˁ́CǀULo[Cۀw>?Dk/׀3 p#p<.U Fh1hEFJ+: QiV~~ 4z?Y.Z}8ۤn! |'l0R>.=c-V=EA_qEչ(: j)FV<-P/]O}I4p0G(FIƑgJ >Ff埢pg t }6p 'ɻ6D$E.Q#cWQ~Kz[%W&ɧ:E4.<(q\V&\%IQЇY"@./.q)uݥ>x?,m`N (hξt‡9H=39-`M=@rT꽘T!D) R e {oN`^í@țP?$=#H;E πkI*h,M_~Y2f"iVJK>iKhQE{T[%@s[gЖzQ prla}ϋ9rj82ҿFH}9J\¡9\@Ew}LIX]}JY } i}T>6V7R?*4i^E;-:|}JaM>&Xiv+&+$d#v|BB5x6_. _ 9WYA{wC/vmd6m"4[Bo?73SK.x5%A>pRFZ![{/a΅cj$Kz^KmMoWGF@h5wK[CRzΖnZ%QO{\ 'ɿj?ZLɡY|O-+E4=_Mm@s'o y@B׿MO?3H>Qrf#au|5>>w |SbkZ!%yH?/^y>$9srT7=y'RD~ܒoASwi&k kfUZhzL{򵒝LH olYTXDj1-%ZjKڥZ2vLkЮнzCzDOZ~EY߮gs^o RdPf&, DM+_3~i`XC5a}e8ݔe?6gÍl"kֳY+k϶ׁdol{ub#6ރl+CPNN6LYfÕ{lof#=·|,?b/ |[㏱Ո^3Z<//u|9/W*7Ml3ʷ_ ˶}?`;a~?.~g{ 9{G;(4D>;">>c'_٧Fq#;)n7D/vJLwbʪb6;#抹J^k^.EJxAbxW)~\ꪮ4Q/V(W\@4S BZz+ԄPJLmSmj[rQtϞ7l麶J[[VV4TFۍJ Y+uJ_۶=J~{@C ǶJSIeV jiӯ*N>^m@ͫyxӼ` .?yevnQyޱEy}&.Ϋ;#ۍۅ#؄_.WKQUESvr{{J [?7]qEW{ma_^&Fg-Fgg199<1y7oؗٗI^G,1q131s ?s&/K_)V_U-x;`0q4DxYX՞?3_FGmvwQowQL5_<[JC}>JǨx}:BORSG Q 2~5}p}ub??= ^ScJ: >6]HH=H4HC5`|Y f75`|Y f77e ˖-/[Ulcٖe,;RvT@@݀# @2(42&>)5#;/00PXXXXX8888A{v^h0llll\\\\\<<<< !=T'T?BP< 5  u u u    M M M - - - m m    *gI]nS/'7-oYަ}y={+X^Y>|LISg._|i57o-Y|'Oyv@8N[ۆ;;{Gdž''gW׆77wO"jDԉԏ#H(d"M"-"#"#]"#"}#"#"#"#S"#"" #K"#""#[";"#"#G"#,EkEFQO GFѦі6NѮ~сccbΘ7EcXXXXXXXXXXؠؐ؄ش؜؂ز؆خ؁رXU\:qwLIEu]cK{Wo|@|p|X|t|\|b|J|z|V|^|a|I|y|U|]|c|K|G|w|_`HxT%DD݄#ID2(42&>)5#;/10QXXXXXؙؚؔؓ؟8888I{v^ҙ&h2llll\\\\\ܐܜܞܕܛ<<<ě }cOPJٗ#(ML8zjR܎$Lxby?BϋUc &z5s\,)Ҩu@1 'Z+䧹Փ|"ԚM2 Hq:q38^{@c;_ F plI4Y2L3Zp9<8(wRiNnKoM>iΗQ~o3!.$8l-i?!;p_~M`!ǃ1aǚޖkҽ3$A9G'Zl!=zEEHV5<%-&Via'}9%E=+ѐ"B%=}kQ[E" ,ihSY\#?s$<"IZI݆^%hT[oϢ8r^CHz3ϰ8 i׀ AX~/ Ё 1Oiڛ=Kf 3Q^}l˫zF"\W*/G?\LX 9y`Pr+>i(`̤9$VyZeSˍ֩z_b}$y=+SpЫ_Stmg4tqZQ&Y % TMhZaF X2Ρ= }Be v%B2Cx: Z)Jbˑ5^=AkY5߀^lZz?pl5pdЮ'rt&vzvsoډ.@c*=E~޶d^q*i6,U~4:NJк2{Y@҈Ci dѷ v# \+ighGȆJ2&K9O^j_+qoUAhz.y " D ]hHHM~0ȏXHbǧ($T-$+NIowhTs< esyp$>*aoh~QWIKNĽ2gE,auM[l]y w{/a51&WDѴD{Ib&!b92}6 ě%L挬<ëKž $:$Km^"Os_s |/xS-RBj~e5|  DV磳9fB 9Q=%8( +^BB7n&]yR v54!5FY}d"kx%?]}3Iu [;ݒx'$rh7A(0V \] p4;_'Zͽsv㪜͜az|"C3ML+V=G+o &=qD?sޣbPBL2xREa?,_zBȱH}ޓ$G ؅k9 (ܯ'?͙ę.bv[ _?k7q m( yD}MGF򚲳GB sPCg 9?ᐖX[jqǴd YZzAHz;0iB5«F>dFye&ݤɟ /[$q<䇧 QRҔ('>7#/(|NMM&Bjo$%ohG}YlxnAdCN:I1_үcB˴}oCi~0on=XhI!?'yϿR@4̷',›2?<}¯hi]3<2 ;Gџa9HV@adz?bo݋:[EhT$+9 N;{N= ݣRV/ԗi?icMfm[{({N{`Z4тi X`p}Yc'ii)iiQѦ) **,+;5*T64#2R]l1Vc8e'i+vROq*^%DXif:lkaj8nN1\}W7@_ zȹ+\2șƘ^t6S f`Og ,au [.fc.a'Zm6K[m>)yYX]M&}W9&gQ\)`k5p57BP;\v}1Zs 124h)rwu_CMq<8O/Ϡ{&݅vQSN31~=Ϛ>l G$BN34";IaU8L\}@tJ 4(O1Qο=&?јPjcBјʑh,pUY>' C5/| U^B*cRǬ$iXR[Pt H'ғTxsﱤKZGGO[Z?J"^&YK㥹oj9*ԇqQ;DBJLy$1kQ@++ߏ,ݒY! Gjt`Ҹkd@y2?".DQST/^b馶'<$9$/#Eb wAGzȃgqH(,d#UJ*`=sWoBq 8dC zOYM'%$$iښ9I6 (OYhy}f}P4V) rĪi?@{7PoZ2I2&RR{ƒ,['ecAV(>R[ڂiӱޙ @ғ(`7?[97ydQbUw>*u@]I4:`fK([sJp9)=UG5^/٤$-RmI_b=cÉkr6n F#qZUgin?+i-XY*!43E3 OrhŎ@B#ǘ#s+mC7'C{ jXm9]HșOm,ĝ4ՄD;K,k@jphhNvr;Ӄ1 P&]M̻w51jbļy"֑~o1yf&)T)"qhM/ R^+E3r,?\p>*ϰTDʛxsVڝ|^6ߚg#d6ŸA8wopZֻ =8Wz#pZoJ8y@l QlogOvgOَfTg;=g©<5NӲ1괼xݚ xU֭[!q{X,a5 d ak &AA"" 7@83l}<̈u7F?0}ﮮsN{nw@ Musz$@iY!$5B'OD _oA4ZCC\V耮d XLDfnIr_UبwǢ157nF*`NLu﬎:h_ ;Rp 0 )-Ua!G_b$BTBX)}i@Mq|6<$ 1ע9Z#nD/mtC~ّ Q5Pqn@[G'@ P xL]7rJ p :'n­00 `Ɂha0iQdapp0]8N;:0U8C8[8/} EeUµMm§3 !ħ Cp5_DJX8e* GYDxJCI|ږVF cq' M- I>4l=F8Q8Ux0W8_8{ {0_X , G%Sw-3_Ԗ1̖0JfC,a)#uppp0_X ,̞ۅƒC#’U}JCY9~-~&c*/㾇dE~m~҃<[y8Cr&;?>_5ۃ؊H>؃xN媹>ku+lI%\Snʠ?uj%zQW'!uLV/ߨߪ6&LzN=~5^n=k*s[Yeuw~kUiW߾ | uFO^TUM}>RôV.a5N}>MNw68Mfou6Va}\ЯWku>~ .n~o*Ψ}yѱ;ǡ2S}4Α⬺`ҷ@*zN5Jo{P=uu1}]}ЂNNw'7:C/قlK v&#5Gn׎/P+d3! yu0^{/ڟٟ#ch&gz@/@S 65F[]ؼd&q;՝Hs90b0W ƈc@sBN%8z vg:ENril}2OOW"㹒诼yֿXZwcsɩYa\Wj~jϾѵ{, _aqLDPMY|bg-$v ['8/ .UG(wA4W9\QrP*"L #TB:MgC:K,rJVcY ܿo]<ށ[DGbh:}Ͱ 1Ha>`_UhvrF_Ѷn5m\7vjD7ZA[]Y[C4ɽJIQ,]gf"0@HLǭ {s4nc0v 8nk5?/a ,GGdF1Н=ѓћV`v0]f7lEfk3٭ɼ>hcn֯r3~w/*PO]j@M8PG9ԏpa{knב+nm>rOxW{T{L4=.-m"}U4}MhWh7M$=ݷD{a?wG=G}ΏDE!?ao$#1%3/:k(~:eEdU+?{ڷG~}ks(?Us͹σzrcn[ǭs[+2pϱ_gdV̬$r_鯉wTiYL|vm;K5ڮ&*^{{A7uKZto]Nۃ#1q42כxoieڙon1feƙN3L7wYfoYiS`6̻͟bo[V{zzom -c6o{=+;vMctmuS [VNuGIw}*GZ}Lgkuif&t7&Ť`3Ĥf4434\3,0CfYajl0[379k>3/̗+s|mgy!o+{; R )xxc2P tyPLJz  x՘gtU%464`zwLyC3!B HtB-Ѝvx>oog$i4BI&HB=O&\b[d KvdK\֒eZѲ('+9ENt_9]SzI1 "@$"HDjFEF."BD"&"%*l*%WED QJE[Qt}DwC}D'b'1Q֓d}L5YF9i 5h=m.ݡ{El1[vm/ھ6^ll(.l,k&bl#[˶bVqˆPCn[Vٝ˝r#.]bDK6[ dd1FS&z˪,)KⲄ\'9r(rh*ɚ,cq.īx oFMjJ?ŊbX+FClv[fP앇Hoyp `8&U`da/K U555 ]==#Yy3&"UDDdD#jE1'H22MdH_dȜёm";dR3EdyRQɢRGZ4HYDYd{.ΰ8w}>|H:b!`i ="’, _:QKkH_o//)=-y%=-CK͈#|ԒӒ>2IZc2ῴ,:-s]$-XXny-+muO]./reohbБzmAc Nx|R&$;?Tphp!2pQ,\67ǝDnueeUk16omDGz(yj"k]z,+zy':#Lg.^>yD͚H A9ZJIHO 8#z<H{7E멫&p` {+4^* fMsh)圊qJ1D}QSUT9U^ƯUUQQ}U%UYUQ*VUUT?U݄jmVuySQT]5XS.j&jjFf>S3T 5J}~fCPjJc[Qe=%ǶhE#mޡQ.hlE5atJTcp #@h2;qN۸ۆV5mIq(Zvo؆NRkpFS[JؙT~Mbjn1}nR;un*FUmm0.?CTƎ ZK5^MD5 xJ &Z5?Sm5^MU"QMSKRL-W+JJVkZN*Nm0F6jڪ&#OlKڡv]jڣ}j:CVVGQuLW'owuRR:Ϊs꼺.xuI%ꊺꆺn_Vw=~zֹzgz^W5&So[#a(g0̋Fp^._(o7 Xg0΋+V".`60es\ w'y;W^B0p.43k `64kh~2昷sMl~1KR,7+0ƼXP,ep*,1H岺q.+ ָ+ ;J+ʸkVrv xqQp'ZCVCGu(MqGpMĽKNCgYq6E/.فⲸ"⺸!n⎸k.";z~y;K`1̋W7rX+u]XEt>]Tt]\%t!]~鲭gjq| +ռ2q~'2x#i>g:S\(.^WP>C)tAJ$H-DI-2P2=e·dZNf`ng%ce"l2!sO)=i*Pm&IUerGtY]]5ty]SWеtE]:Vʺ[McUw41Ma\pL qp 6u73s6M ` ܆p]W;ynNxHKǰx {^x U80#;8qc8pZޝu_&?մ3w-9w/>ǁ|E~'x~ ?4i ݂9p^\.jx .H! R@JH! @ZH!dPp" A& QB69 'O 7䁼C(0P C N% aPB9CyPAE9¹ Ds ՠ:ԀP "z2: u0[yo>@=(QA}B&'y9ifMmg?ƾdi[a|o";o }͠9gZZs@h =t :C ݠ;O^/ }wVa0;7 q[0=fan-!;8: N])t\77p*W\mZ,C6'xg>:`R2[mJaRJیRPzۆ2ضaRFlwl{P9;/OkP=;Z逸Z5v9u+]I*bWS/Gc7R_Iui}@_؇4>/co&W4ɾ[bT'ͰkJNM8 nqrήź6O۱ i6ؘvaڍMi6؜a ڏs^W^C[قv(èN*bGRQ#YұKK\fop{%s!.K]:һ`fl[vkq= 6cg]vN؍;s7= wupǍ܇s,< < <$$_tx _;|o5i'گd;NSESF*ϋG'^B?ro捼7۸8\Kp.17)S5&W*9cN9mΙV< <"ˣ+Țrܡ#eΜYu64Lo5on!r#x\3[5KuQUW5GU=7jYiVfYk։:QC433|&ĿQxc` |} X10010Ⱦ_Xհ.eau n3Գ.e$6u-sc*i(jP!wU@>]PxVisV$NBuyij?B0`B,.JPZ)v}~͕ig7~Z}M I;Ôa|ϻ:zw JgVvt٢0:2Q0:o6! "!S(M{Us; ہM%ʨ"IIqV5f>oNbA FIF#+ "vpe=b ^;tiLp?$3r($$ ~_G~%zODw'k" o ts'#Xv(h+L1+bƔ?$/94;9u}7f2%k' ?>ex[GɞP/'2,Gɘ 3eXMzI٢멉S^eeX/B;OMflUԍ(3]~@!Mii5s:%.xEf4Tk7HrzLCoVI ֟U1Gfl&gg?d.b;H8yldK6V_A&D$M߄RR0%呱7MSj^wi M9)o`9Ә1\%gl]@|١E,gTeJr,RIyT2mX (Q!C% :TC*˯{]-#K>YJr>,G+*|dVsEC}"O㣸*29h82J^c@+96*DKI\!ã9WgǍ`N4zcO7d5d."ˈ/;:tEUZ/*UX*h"wzlbuELi..~[f B^WBzڋǢA9 }s+xYa=ͬdχ.lyR{(]/Jzq3^lG^}'KX̲JXh .m`D.Gh[q#GTNෝnPM~eYCjnh50|}"綢jK]E=f9(K*zfK+:vkb>vKMb|9- 1 s8_˘ŏO5 ]EW!Z5y |ʆyDq;R SǞ dZК-aaǜ_0a0Asgs_37a1A`9 :aeEGi>m}-t?ᰉn?AԈ?iԟF_j4bCE7GG|5b1z: xrT8rMox}|[{oɒmɖ۱3gAvBHHHH&aB -Q @)U:-$;^+v{/غWηwe` S +#b1\ L RVZ\$GxGYlß,q<W-f*A1oKiQRr=E7Ât`fl? fy6ER{Z@u:}M.`.Ep=@F@_ ~ 56u3ElC>bggG?M1 p8oiKKk_'TiSjc RC @Ue`dr Kgjj$`F2J\%xLT+25ڽ*cb"EC _?,Yf' m:GA0MLO R/%y5bBY y}h?hh Q y{#?!e ;$ R4*)(}0K9|c iҞq.H5 U[]祍PԙD5&#6lio|1yme*q{)%pBƂbA%'uS.3 9mI6/;;^_}k ̰%he WNWm*_idhٜy5=}h0]ZIl^ی;(…8FR`~t:14 $|f)X+ U>?V gFG!h<>w7Mn9)DGGV+:F+^yc!i2A!9x%u_~.(.@Fm3mo?q/ʾCӭ#u 1qƄ:J[hppP,_Іb8n4P.!><ڰ5Rwsp$ Q!^GGD3(=!VJ?R3 |/p*R~!RC@~7=q'`G׎2\c×3 > rRls37ⶐJ m{8Rx ߖ-$ѦPϞ^Zغ,[,Ӡόf =,Ɔj5U]U罟^7 Ce!_&$-hgKsz F]jk!.?݋,~o( I͠ bZܷ{S|MJ5܄twcw߽tA?1R3h .8X`1O-o+S sfJ^lc0ʃcHROS DXjFkoA+(EUe_,(n3rT}|i ސ @DURJ~M,GC`'JR$55q`h\2z幭v_CZEt3DDWCph%j;.*8#̭3b3p(,Eo/5 RPMwAZuSg{!(#n TD!×w(y,uG66C?'Kh3kBzM#Fμ$u 0 Gr ߡ (_r >^qYP4 mK?ywbD^ yRJL}@m~QL0n#>- iLN%d 08 00l$\~ɆI"VG豉x?~F T{` 9;gN^}^KQ-gJe:1aˆ,J$EϔCPyIDwNdL=hGzv]@|2{G Ygcw<4}g;ɫ'KrZO2#~HIfvҩJ BIc[R?QT(ùh@kN XL\PHbԣF*htێ4s\DcsW@}|F QS"eA"W= ]?㣭4-_$7B[׬@IXh$ wY3 9{w݋j4QY?yO\LEg|uwk|e/eJƨ]T%mr4XGdVr.% Xwviox$eHJC)A-˟_O0.65~!qњH?fo\IK7F#e \߼uďaJ/)RQ3qx-\5kq k$›=w\oK5Ȫ&if;M!b2Fb*2DtN4ԑ%kgqKCIv@>-RųJHV$is6\ݦtOR4i(MGdl2㓹 \LLɬK5e蓪*{nMڡYY\X#bԷtzv4ҫ9~+j~S{zDe ZJ̱S(|ۦw;G?UZٴ5,2%ڮD0` Bݸ ExPfl0A"i0=ƥ$?Q ,q9da I@'!>n!fob`SboFgc9%p 5}`zO]1ljKɊ֌AͿ[l0AY0Ѿᣛ;>s6c;ط;H'@Y-?EGx|A{bS^H_JMgoONBٷuM-] N7@$ XL)vGe o}N~˕.984?e B=tbo8V"5VF/&ߢAֿg?e"1(5M1X8*"*LSBd0vXt;\@}D,V0Y$fPЌj시bح$xs!cTQW:1R$F?T % AQ<%`2%D_I%+@X7F_Ar#&s\PRcuPLIݨ;7fPst!6/=q`砿||GM(uC'FV2JC^yegkK{2*o3p$3 @{ f&Xo9kG6 4$+mi`K6)ޣ1~ hHؗa:ۓM${n=Sa7d0'0:Ls`N7c@(V%5QY*HFsV(./>Kmu',Wg+K:oYZ)sgŠPeV^e`]~yycsS<%" ca_ 7cJ }љi5UPUrꢭŸ{Woѫ% euΐ$'Inz$d+AfiU{JM5E*w `֢5=l͵olwm}+:tuhìԼj@]y!eP t9cBI<)Ѽ΁{Smŝeb=_Y Z_y,/Y|MIee\%]zk:RH`&q(c. xTmkhj NJVF AW(IRaˆψƈ5LgtZtY*^BQ( P*pQ IBew4)P5i;If )E V'Q(Goչ6 ˢ`;YE\]ϒsCu@-ɲ(iB܍+V%f^ gP|ML jwY9)\JmӲ%SB(!-Xz_.KoiD$$c{k,UT 4P;J\dOcoՓJŬ#=Et|BH̵rZDDC<#sbEOzUh%,]Ɯ^jqP_%4no֩0$@0dO,͞j)+^ѬK^|hѕ>Citxؿ9)˗?'>obHX2,d4eDhSrPp8 ~BV*`Fpvu(,M+%xES70ULd<(nr Ķ{wQiOE>mmI|3ƚّ{/\pko4UU.3g{©)*qaOcc"q<#@6wUC@s$(\s~58Zd0K;2vCsuk]B{rAhRo*JK"3Ev۳9_,m+u/i'w\qJZGEeL6L8'ms&.%b ̞D?N7G8(C6EJ9a^T@9_LWPZ4`]n} !׻fJ|oO%a\jӝ*ݤ(Rj3,a1o?a0jF8D,N̶1Ӕm:{9LD UZ#ۓY~GE]Ĝ _n'9gTr+0چ8KW6bke \5}+1[D7stH̄t_K  672 :g~ i䬘?!z4=ɔI p3'&w8"#@qXE>r pCQ;(ʀzI"/zwTFcTpC̙:Mwax$%K$+s< YVe\5ݜ᧴L93Yms19ӪmL+*3oBLh/UJ @}QuTTԍixY<⾮ (w/ƭ:g^Mm,ƱuJxds,aaTRy=~#ƽ0xz%#|_p& VOI?A#&5*Y&3TE2OIHDg cCE~ABZ㒈/!&yj^TjcL'ޤDE:1YLi Ҿ^wOwĶT[ iID j2MTR1L1~q}:=~)rRNszJ8T^? 1\r<S5z)JSmdguTbN2IALL $S9VK$lq ]JwGx3sı~]Uod:3t*bI2T=?׭K Ml$~Z~ QS+VeǦrNY"W,᪱dzӉQ/g?]Uut} 2kHOIi.7?A66[$SU*Cj\7\-?o)Ȋ39^+Ib&.w>rջ+(#Dwg+}gHP~ aa+y"X8*> X}QAɵln e~H ZAKȲb8qL@1C&aKIAX'",l뿲ӧ-fӦ$f7Y (waULA<}5M^5JBJb1uos&]W/cFL&Nqz H/OOn:3BF_l59Grw]ȎɻizLSG\ؑ^ёg#(IBJAUj%G늨B uX *ʻ]OTWW +,ⲀO,8<ݻeϞlU9PON'cڲ-ٹqO:gA %2_s#e %s2JK=,`,5+j*/)h:-,wr&m\. "ogz{"Lwce8Vj>,opF*kT*E9S/ai\[X#QQDm`ppu׉e2[Q,VT΢]s&tk[D u[9M"vLYOx)H d!!㥤 JnN ""|/{T`bLh4z6%(pt1!s;xc>kZ! lE!I?[_)#'Ã3¸9! L3b2!A}xUZo::yӠPbeI6'g{$.Ԗ|_aYױƱ"yooQΖkKCԞf#+Z /L )Sd 55=?!k`2Z: M1.)C1]WW_>zA% 8&¢7HLv$E#7HԽO<,q(j.'=EFgv#k2ch*2a=ir~!mlB}n~FTɹ"A6Eߣי௯QQrb;\'\xtšo /(^p5ů\78x֎t*xtGYAXgp,aՆUޯU0.) ot>ws]٣J:՛ERv QҨ.ӓ]$Z"gk|CQ8X['^fdhoʖ.#'ޣZ}K90Ȝ__ZӸ9ȋC={=--^T c=_AW,WE%o =@XȌKݳr^Wyz֦&G%3 ǺH}d9c^9snзpҳ9\/GBP~YzP=I[{CqDD[R)m^[V£]ɳj 9\Bny KFYei%9݇h/SJ3kvyŎ,ůK4FY|f(ܓ]J9Ipl`0AuWrzG0oQm̬xe:&Y|GC+I=aIq6lAsc >klRLneI0YCYPDqqgmdqI LYVͯMJ=D4_j4 9R[YJ SrZ0VԕBdYe* p]\%ҜSpthj{w=wwÛWuefԗ穋&EbQuQ/u˓9,rʜɅS)fϓT؞?@OdBP1iTL;ͨ,I* Ҝ%7 ?@5ZM7E!rVޡ6[Ez%w ,بS k,Eld|g9vxLqU)Ts#T.R%5P5 OP0To{EY;CL1ݻ@+ūF uY**C [8Ʒ<kO' ;YTJ&!)NvA2-7oө{nݍ^QRwXZ;e~0(nbO,O#GW3;lDInϒ)ޑF;[`_)KG6 }<}RYݺ;5a5ap^A펁D]a ؀ ̓F^#V9UgUVMWE8R2Z!ꇹFGJc™U^C O,|G 3EŊ~e?1.Gwd9:F;ɷ#W #4LG>ş6LF ɿ0oJ߸?U:/mmk!OXJSj;/M%%-rO5=X^hMlA^d?{$+gr,oqaP{LpzN#6t1MOfΗ2Wb532jv`kG NYx-q5̚_+k yd{ʅCc%Će8Mb VEۧеS":/ɞKwaa/}ա0Y0yƈg'wkdɝ݈M!ua oى:טTۊU01ﱿ) F1DhĶ)4&dqX6 |"RpʜD_C2 {q7(ĨҨSMFMy kj=8e}77j{SyTa+≾ }Z e툣/7~G0=ɡNx7T.kkY&ULS*,U/`(m07B&)nA*3"T[dV~GaK2I *σjH(JyO߆ 3NIVJZ[&('bOmPAiSgoV${37iǜ/q{G+6g59Jy?;wI-> NoW "x3doq3S',Gԝ\@^TPWǗ!p&tdx3e1^-WGQXy@LW-LKJ^#MjAoARgf-lL^evY/=a$όIh56ӞU,1LD=SAD +>dN"[Tn ~sJj @)ٿGHKR4RH7z)5' 4?؈XjzGssPmPkn͖טǞ-Wh+ZeHR Xs@qXLʲɭ~#(TIT4t\` P_dѝU3ݧܘBmuOw75PxX&bK!*xx²T~Ujt)$F_bpZB~DBQ$JJDp,1m6nU*efTI,Fxbz2(JG$hv.ONHܑc/k /$Z|>T&!"^HXl0IR/r X#%}Bk?̟}/ʎ ( tx_ҤB'@}|-U\ϝ.NXeàp`H:߯GA#wt*[ii@Jt0QyFzhԞI >bfQ Th^+ܒ,|sx,Y^6YB]`h,,҅rAh.X\$Y= =ؙI C:6j,Jv+&NOFiuVC jfX1A_ǔPcTXr҃ȒW+-# ^C!BO\1}-[80IļE쎾e\pRvXxArFT$V! \[۪ p>݌^֧i%RfU*$uI4텸I)c ]P୍'2<)e)X<[>=@[½I_ŕ{G0@_p|E<_Ʒģu;n)ajÞԐ[>p_[C KaDAĂ?$"pQ"qS ,_bcԹ$.d7i9H7f͝qeJ!.a@F(>@S賽⑇:#ESռ>mWЏX,-!y,ե9:̼8ēKp<2 ph>#u.qu[*f Z~ (X,>Ʌc|ڶ?Lcbe"l 8&l%rV W5KMzO^h>݉fѧ@A:%ݮ^BV|7˙Q6nւa2ɻ$'^kX5/l"_f)cC#!3).5ʟTD˴eT;$Z(^1ME2 /~]~j gPMq(.T {P  ]?^$?M'kԀ"s)^8%YI4c?\` $%3,NR#i/bv-cN+y4JV(8' |^V'}%(cdɛW49d tWfu]6<ҧדU> vr2@?&@1,F v-4hb=/Qpݖĭ[2;#^Y4w@&#WaF\r5Ӟdw7%Q|Qlخ}@䶃 f3R[p3%z,XXO+3iS ~;5k+Yb_Ժ_Tz/n@nz^/Tq-T/+q"`L9&2a 02jol)b$5OHǦhoٕ{Yz̓i$>i~;ueێ%m,|X9Er|cJ>[f׉<6YגZl?r~{`4=m?h`ހ~y>Vb^¿ #w9? MF~-`{Jcqөzgb]@6-.3 5zQ,ipdFm@)1 fQ<~>d5ƦUpSKgp\'M3n@;:GY8b4E#JI^#Mޔ7_Ȗ7֕mf_AyKZ:z=8*HU#`r)d[`eWB~]l7֚0$yM# ߟ"5+s$.(;~m3oa|.;I{ ѳD1sQBsJ\[jgyAp^/ʪj<٭OŵY}d 9JLmSI37fv};ۂm.(f]0-eMK[Lu.:9ȹC qČIkb/FEF ]D"Xh%hk?,=`NEYTQIyp>()=ǐ1(Id ~v@G r:;&+1 S#.(OT'GCʜTr>ߚ(ڴu5ZMx ;s~2)r5yŶʃ"'Q&4-bUȺHA3,+[lUL,02݌V=ڙO[s~-?P`.)UWg&;1G4'R*S7臽-̦-;ۡ+W$TU4V$gͱhiDqgM=plxT"3[?恌@dՇȶ|8ɪgPJ;}jHE%j,ejYi.uU7{}f#O6xcyr]#4Ek%Բzk_!ohFg3Sog9w}f:V gOҢE $ןGYJ!||ەA"sNs(Rvhu 啑 t(j\9)i~aJ MvXh""K)J彑#`e ~j T z*EbR Ğai*Ld !s(T0teuI]`<N,Β7p*%fery5=UZ,zōި8/򒬹2`<w<wyktekkKG'o\WQּ֐;7ͯ2/("Nzi^QZMe:X;tY6CFiӦ*7VR.g_qp I:8+58$yuZF~YOhI̐yh_Bw55Lu rknm}Dɵe:',}FLL_Aju: b_BcNu{xj }ܤVL_d/K/:9ujy-@rS = 䔸&xN#fmmrܵAD|ܟԼϭsPfB+҇[w%I;]׼}5gm}xL0m19lSy 9,iҘUsdKOvϭKU:UzZsTjQ.ѯ4jp^w ]5_ 2 eCx7/\!ǧ3dwlu8JL@su'ۙZWο:>8gmaWmg-ɿ DV>'V巶x#%kxN^`^0T#w'A: MŐ* !g%}y5lؿ T.|dsIǩow~\ƒ'=m cPgPA2n ]{u2ƫk uGo0d[܀ͣi]y w1Cy W[d~Ƕ{8r`墸eOm,HǢX_vyj)r]'"u* R_Y*>MI"J C%HL Kd RI*->_w_-t N Ub&޸6nn~5h e7}rߪj7xsk<f1QV%'s/sgC#_`|D/5I E\z[b!N4q@s͚֜Y):24zubQYZaOR;:?(U^H,NÐľ~/C~Uءkpt,T;ufCvoq@G d)܇F^`kT7gI"ډ6t=wFt/~~NC>;?-;poXB&\nSTF]y˭jʍN),ډP: bTѭtO0F f_26c($AXDT \  ;"25B`ѝ[YV^[BɵT^DSc 0oM{7ߨg]UwH<P#[2{qwЯFڈš= ?#^ Ma꣯P5̌X9lƞ$ ?,qHR~OTZv)cUB96Հz793xv3cƂcE{%Vȫ/`w3чsfߘ=I _\"[UFd0XX{Ԥr'Fog6 }5yB_r˨*MPWh շ~nIsw: 9*se%[=m= dO227T"!)N+Cuu7uG%d&=Y1CxbL_f`՞UY75KfwJ^}ڃkRs}2K3Wy*x̖*]ĻF s7T&YytD5)1bg"pj>՚lߞBD khPc\c S rBhPl0 Sɔzi\p]3\/l?JkYVgA2ӑ"E9 ! ?tW#_Potm9Ken⎤ξ%#Y\oB[%Ŀ챪U]D^x86k#e) YeQ|iܨ_ UǢ帥eȖO[tz{ Zmq `}+![u@> x=6z .CAX ؁c*[V7H_Dːm 7l/Ik3s>9,:څ&-8y#ovBnh7f F˞ثj }?jG`CRωuqZv}=Ifx=D6JepGPki(KBQY+l/t߸bəK)@JVYjfB^jKC{o}}ORл)xB[cT;2wAG(A2 33c#gV33cC'/!&>D?g]J??}Ri| Y\ےn$GBzNjyq*׉5ֽpIfЏ$"I xB'N E7\&I?n0圡C{q<ǘ3BqgFR6 a9c`~e΂> SC~jIҳ>W؝d>[ɧᄗv7a3o?භn|ΓT,'_ȯI>E=B:浕ՃU Eg̹ݏm㊁E"e.9GgZ=V ُqq!#?=ef:JlkGTv]wsosq{w^WuݾeMrW=l[_\WVh熖uCQ\͖+{;Nze˶܋{ǀ;`0 0^C/@B `k7{f!μ̛7\C*5|*}l'Y-h=FONpM#3M͡:@ >ujYiEmi7=˷fo{eo K3|q~_80Y}?y?'O}'{ \2䭐X&ϵY,7vH`FF߯YbPf6偵hv)ȯm9πyBCޗ6Vl0]9WGO$ݲirlHuSOј|8"NY%Fk&g/ Dsr{r?3woS+0"n.#]蜠,K:cM~cK|IW/Brc14vCu+_]9m\s~m5PqK|g/ӘK*~:`qG:n!آdiKX2ɹ܉E>aGcڜTO#{L-eĞZET Z3 # O;ʚu8S8܊cfiPy PCV]|Knq7ȏL^߼P.cKʞJoa*/ (9ޙsukFԅl%Q$H ўX,lPԂNgS(Vh5J&Sʬ$~Bc?S4Ca7cjwSND* ą]NaI&39PLy;!,aMsl5Nv*298sch gkohh?_I^W*^CjnX/ز-b욛"hi29)Pߨ&|SjӪU9bu華Ƒ.Zq˼L@(<ؤ$4AY9/7ȁٞ!!k1lb<,/pM%i#͈{C6aCn{qPfi:ۋJLn{$\Ǘw\ΖL}ng)m\?%t*u$>s- Ϻ"䕑Ae~4Dgg3BJI!_yZ}Mf-Y:ힶhÖU0יp-MFΪ~Z7;&~sIp|ou7 Bo/?SkOz(&u.hHuX2؜h/>Db;Ǘ;X%".,LbʊW僓UUtZᨘYxjZ!&9̋是LAhI69J D\*Di"Ja-9EdN3A.:w(suAEUuG5옑ݼ9{Eu֝UkZr#ˋs^pblKo XE+HyK̪Rr^'Lqo̊%EƏA_).ّGjJMkb]Q1x\( Q=Oe-wEgΊ ,A D%EYm#,lTO1‹BWn1sZ.f!_տQ/84HӰJK;a|uǔΡ繕Jw]0ϣCof ;m|AT8cY>M!Kjk||KQ{>9O+AOp-W]\P6*;hvMO94tgRlJOb.pŨqx8=ڈr0'curRO8Lieܼ5-PmU꬚3]*Qb01 qVݐPZP)D܋@Hxa _a%)=3N7Ao{AtA;m@](80 G]T'@c8lfI߆΢š둡/f-Y~of+˕Q!BXFSPoB19r2FLWYn5QڌKp޼(a_, YK 4¶d,VlJo!֦TJ:{'0_p~瞢>2[A) P34;"Xy ϫ/ rj/I2s^ʃt܈>,dݎOy`(ri\W]k] + \$?@)*e?' <|ԫC<G*u͓ ܖzbTv+lxاs:YSJ1ǐW^ǏSa]a4L?{+Otw\<}bei>|ՉkV:W}ߢ;]a=ꌇp,~ HH(A9J\AbBkKݹv!K8UW*rzEm>Pa*`<^Ė@fߒO d;1JeB )*jǕGsx /S:ƉFWOvE}Oih&_Cyt(MD:0ȥKu:* |6ᷩlUˡr<'343rujQ"B|Wcesl**0++g45ҕ!TOD1^ 7 P"csJ98 0nOUNƤECkz>" Hxg;mB>Tx҂Z\ )*YdQNuW2ƥZy gTV$JaLI۬[REh ./j:Λ)xP:Hni8=UZ68W OjPH*Yx 2sA Mÿ4r|'TH(St@훨 N%SćE ]y{# 2napRI}}J6S(MEZt~:V 4&,KҾA .3JE7:-Qq7,z=Q;X-ZArw"59K5ke/\$HFrOP=QfK^ >_ /ܾ6>!rR )) I 9-`9 NWXZfVJՁvKEDwHXnqyV)Z HiFp2nd:@ HDb1%*;Zpu$g QvԙlϾ]xpp2<@M?D|Xj {܅>ov,vvpzsJg Ff]6>20teyљSܮ܀G) Vin'\:3Mn93Gfh%A\*ʌϪtVlȎg3 =RRꝻ߻;:?f#R_:[~D+ߴ.&̤|I0{O;!VD<1$SIY ȏ$*X/IS>T,K" K;KJ7tuf\ nՈvF] <#Goo,z@+{b= UI)}/\6ڱr|JehBjN>=X#A^{Lbv4Ա*n2/fF˦6/g0q*[)Pe*͒jmrgFnVٲ^SKKb6&5s-[ ݎoft|{xL{2G1Gh6^=v !eخ9 ^7Di?jw>jݬ&L0?7΁xs?\sn~pmT4}.{AV@\"*i JW0楹#$yk-Ɨ ۇͫK[x-,wdlZ=1))nf{bbQM_%UXL>na4)%v۲/+X%FKr-Xm"|sd` ΞvD?̞(usl }ކE;nk;~q;*k+7}.X;甔ϩ'4S7䮥>_]'cSdaV#=`l^$^Z%`~dۅK~p˻]s8Px].M-%i #teQQLt˹7A7\'S5k nV.} nJfrsɌH` ̟Qt߫>~V{T_pAb43ddCȩ!_1XH>Zw,s1=xTùJȇ3*)@*>+) 7/ D[INXM%C z^&h)Zz&S 8qˆg/XItYRM2qLD'9P_#2E9Z'^E/b<ݑ e⍳ /}zsk;}˞,[dJ^cv_Ѻ폮P\seb_pq-AterKv)BuguY(aWYF ii8fܥhXvqKmKlDrgt7\N%v#'sQ)S5\.e23L%uJҤ`K9rrdKB7QM zN] .|oJA˥-k